Re: newcommand の中で newcommand

名前: しっぽ愛好家
日時: 2004-09-29 09:19:39
IPアドレス: 211.4.44.*

>>31810 %%% すでに解説がなされているので,以下のコメントは蛇足にすぎませんが… ``The TeXbook'' の第 20 章(などの然るべき解説)は お読みになりましたか? 状況をわかりやすくするために \def を用いて記述してみますと, 例えば, \def\somecs#1{\def\#1{...}} のような記述を用いたら,この \somecs の置換テキストは \# を再定義する記述になっています. \#1 は“\ と #1”という文字列などではない,ということに 注意してください. マクロを定義した時点ですでに“\# と 1”として読み取られているのです. また,仮に何らかのマクロの処理の中で,そのマクロのある引数として 与えた文字列に(バックスラッシュといった)エスケープ文字を 前置した文字列を得たとしてもそれをコントロール・シークェンスとして 読み直す,ということはしません. 文字列からコントロール・シークェンスを作成するには, \csname と \endcsname を用いるのでしたから, \def\somecs#1{\expandafter\def\csname #1\endcsname{...}} や \def\somecs#1{\expandafter\def\csname #1\endcsname##1{...}} のような記述を行ってはじめて, \somecs{foo} と記述すれば \foo が定義される ようなマクロを作ることができます. %%% \def の前の \expandafter を忘れると,\csname を %%% 再定義することになってしまうことにも注意が必要です.

この書き込みへの返事:

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