10

LaTeXの自慢のポイントの1つは、このMicrosoft風の動作がないことです。それにもかかわらず、それは時々役に立ちます。

LaTeXは、(バックスラッシュされていない)ピリオドを入力した後、すでに余分なスペースを追加しているため、次の文字も自動的に大文字にすることができるはずです。

これを行うマクロを作成する明白な方法はありますか、それともすでにそれを行うLaTeXパッケージがありますか?

4

3 に答える 3

6

次のコードは問題を解決します。

\let\period.
\catcode`\.\active 
\def\uppercasesingleletter#1{\uppercase{#1}}
\def.{\period\afterassignment\periodx\let\next= }
\def \periodx{\ifcat\space\next \next\expandafter\uppercasesingleletter \else\expandafter\next\fi}

First. second.third.  relax.relax. up

\let\period.保存期間

\catcode\.\activeすべてのピリオドをアクティブシンボル(マクロなど)にします。

\def\uppercasesingleletter#1{\uppercase{#1}}\uppercasesingleletter次の文字を自動的に大文字にするマクロを定義します。

\def.{\period\afterassignment\periodx\let\next= }保存された期間を書き込み、次のシンボルをチェックします。

\def \periodx{\ifcat\space\next \next\expandafter\uppercasesingleletter \else\expandafter\next\fi}次の文字がスペースの場合\uppercasesingleletterは、挿入されます。

于 2010-05-12T13:04:38.507 に答える
4

何年も前に、comp.text.texでこのアイデアについての議論がありましたが、一般的な結論は、それを十分に行うことはできないということでした。私の本では、満足のいくものはキャラクターをアクティブにしないことを含みますが、それがどのように機能するかはまったくわかりません。

個人的には、スペースをアクティブにして、係数が3000の場合は、\spacefactorと\MakeUppercaseの次の文字を確認します。

何かのようなもの

\catcode\ \active % latex already has a saved space character -- \space
\def {\ifhmode% \spacefactor is invalid
% (or something) in vertical mode
\ifnum\spacefactor<3000\else% note: with space active,
% even cs-ended lines need %-termination
\expandafter\gobbleandupper\fi}%
\def\gobbleandupper#1{\def\tempa{#1}\def\tempb{ }%
\ifx\tempa\tempb% can''t indent the code, either :-(
% here, we have another space
\expandafter\gobbleandupper% try again
\else\space% insert a "real" space to soak up the
% space factor
\expandafter\MakeUppercase\fi}%

これは実際には仕事をしません-フェアアイルジャンパーを編むのに十分なルーズエンドがあります。たとえば、ラテックスの\ everyparに頼ることができないとすると、段落の最初の文字をどのように大文字にしますか?

いいえ...どれだけ痛いのか(これが不必要なキー操作を避ける理由です)ラテックスを「適切に」入力する必要があります:-(

于 2010-05-14T20:18:25.637 に答える
3

私はそれを次のように解決することにしました:

結果を確認する前に(ページ付けと参照を正しく行うために)常にLaTeXコードを3回コンパイルするので、そのプロセスに文の大文字化を組み込むことにしました。

したがって、最初に大文字化スクリプト(CRM114で記述)を呼び出し、次にpdflatexを3回呼び出し、次にokularを呼び出すシェルスクリプトができました。このように、すべてのものは単一のコマンドの結果として発生します。

于 2010-07-26T17:13:21.420 に答える