コントロール・シークェンスの名称(comment for message 12126)

名前: しっぽ愛好家
日時: 2002-10-20 11:11:30
IPアドレス: 210.224.212.*

>>12126 >これは \cyr4 だと 4 が引数だと解釈されるためなのでしょうか? そういうことです. (4 は \cyr の引数というより,単に ``後続のトークン'' というだけですが.) %%% コントロール・シークェンス名に無条件に使える文字は,(概ね) %%% 大文字と小文字のアルファベット(と記号類を除く和文文字)ですね. なお,\newfont は次のように定義されています. \def\newfont#1#2{\@ifdefinable#1{\font#1=#2\relax}} %%% \@ifdefinable は \@ifdefinable \somecs {<proc>} %%% (\somecs はコントロール・シークェンス,<proc> は何らかの処理) %%% のように用い,\somecs が ``定義しても構わない'' ものであれば %%% <proc> を実行します.そうでなければ,エラーメッセージを表示します. ここで,\newfont{\cyr4}{wncyr10 \magstep 4} という記述を行った場合,これは \@ifdefinable \cyr 4 {\font \cyr 4=wncyr10 \magstep 4\relax} のように展開されます. %%% ``\cyr4'' が ``\cyr'' と ``4'' であることを明確にするため, %%% 適宜空白を入れて表記しています. このとき,\cyr が定義済みならば \@ifdefinable の処理によってエラーとなります. \cyr が定義されていない場合であっても,上記の記述をプリアンブルに 書き込んでいる場合には,\@ifdefinable の第 2 引数の ``4'' が処理されます. これは ``\begin{document} の前にあるテキスト'' なので, やはりエラーが生じます. さらに,\cyr が未定義で,\newfont{\cmr4}{...} という記述を本文中 (document 環境内)に入れている場合には,\@ifdefinable の第 2 引数の ``4'' はエラーを引き起こしません.しかし,その後の \font \cyr 4=wncyr10 \magstep 4\relax は ``4=wncyr10'' という名称のフォントをフォント識別子 \cyr に 結び付けようとしますが,そのような名称のフォントは存在しないのでやはり エラーが生じます. [余談] 今回は,\newfont が関係しているので,上記のようなことになります. ただし,一般のマクロ作成では, \def\somecs2{...} のような定義を行った場合は ``\somecs2'' を定義したのではなく, ``\somecs'' を,必ず文字列 ``2'' を後置して用いる ように定義したことになる,という点に注意が要ります.

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)