次の文字または{}グループだけでなく、次の単語全体(または次の句読記号までの次の文字を含まない)を引数として取るTeXコマンドを使用することは可能ですか?
特定の頭字語で\capsコマンドを使用したいのですが、中かっこを何度も入力したくありません。
次の文字または{}グループだけでなく、次の単語全体(または次の句読記号までの次の文字を含まない)を引数として取るTeXコマンドを使用することは可能ですか?
特定の頭字語で\capsコマンドを使用したいのですが、中かっこを何度も入力したくありません。
コマンドの後の空白について: packagexspace
および TeX FAQ item Commands gobble following spaceを参照してください。
なぜこれが非常に難しいのかというと、あなたが指摘したように、そのようなことは catcode を変更することによってのみ行うことができるようです。Catcode は、TeX が文字を読み取るときに文字に割り当てられ、TeX は一度に 1 行ずつ読み取るため、同じ行に他のスペースがあると何もできません。これを回避する方法があるかもしれませんが、私にはわかりません。
以下の危険なコード!
このコードは、行末でのみ必要なことを行うため、角かっこなしでより「流暢」に入力したいが、各頭字語の後に「return」を押しても構わない場合 (後で自動インデントを実行しない場合) )、これを使用できます:
\def\caps{\begingroup\catcode`^^20 =11\mcaps}
\def\mcaps#1{\def\next##1 {\sc #1##1\catcode`^^20 =10\endgroup\ }\next}
まず、コマンドを作成します。たとえば、
\def\capsimpl#1{{\sc #1}}% Your main macro
スペースまたは句読点をキャッチするソリューション:
\catcode`\@=11
\def\addtopunct#1{\expandafter\let\csname punct@\meaning#1\endcsname\let}
\addtopunct{ }
\addtopunct{.} \addtopunct{,} \addtopunct{?}
\addtopunct{!} \addtopunct{;} \addtopunct{:}
\newtoks\capsarg
\def\caps{\capsarg{}\futurelet\punctlet\capsx}
\def\capsx{\expandafter\ifx\csname punct@\meaning\punctlet\endcsname\let
\expandafter\capsend
\else \expandafter\continuecaps\fi}
\def\capsend{\expandafter\capsimpl\expandafter{\the\capsarg}}
\def\continuecaps#1{\capsarg=\expandafter{\the\capsarg#1}\futurelet\punctlet\capsx}
\catcode`\@=12
@Debilski - 私の論文の頭字語のアクティブな * コードに似たものを書きました。< をアクティブにしてから \def<#1> をアクティブにして、頭字語と、初めて遭遇した場合は展開を出力しました。また、展開をインラインで定義できるようにし、.aux ファイルを使用して、展開が宣言される前に使用されている場合は展開を「時間内に」送信したり、頭字語が使用されている場合はエラーを報告したりすることで、少し深いところから離れました。宣言されることはありません。
全体として、当時はそれが良い考えのように思われました - 実際のテキストで < を catcode 12 にする必要はほとんどなく (すべてのマクロが別の .sty ファイルにあったため)、数学モードで動作するようにしました。そのため、困難を予測することはできませんでした。しかし、それはもろかった...一見無関係に見えるものを変更して、誤ってビルドを壊した回数はわかりません。とは言っても、リモートで一般的に使用されているキャラクターをアクティブ化する場合でも、非常に注意してください。
一方、XeTeX 以上の Unicode 文字では、おそらくはるかに安全であり、マルチ (またはコンポーズ) キーを作成するなど、これらの余分な文字を入力する簡単な方法があります (通常、numlock またはこれへの Windows キー)、たとえば multi-!-! ¡)を生成します。または、emacs で実行している場合は、C-\ を使用して TeX 入力モードに切り替え、TeX コマンドを入力して Unicode を挿入できます (ただし、実際の \独自のエスケープ文字を定義しようとしないでください!)
1 つの解決策は、別のキャラクターをアクティブに設定し、このキャラクターをエスケープに使用することです。これにより、終了文字が不要になるわけではありませんが、\caps
マクロを入力する必要がなくなるため、全体的に入力が簡単になります。
したがって、非常に特殊な状況下では、次のように動作します。
\catcode`\*=\active
\def*#1*{\textsc{\MakeTextLowercase{#1}}}
Now follows an *Acronym*.
残念ながら、これにより\section*{}
追加のマクロ定義なしでは を使用できなくなります。
Xetex では、これに Unicode 文字を悪用できるように思われるので、定義することができます。
\catcode`\•=\active
\def•#1•{\textsc{\MakeTextLowercase{#1}}}
Now follows an •Acronym•.
これにより、他のコマンドへの影響が軽減されますが、もちろん、文字「•」をキーボードのどこかにマップして使用できるようにする必要があります。