じゃあ \if の抜き打ちテストやるぞー (マクロツイーター)
上記エントリをきっかけに調べたので忘れないうちに記録しておく.
\ifの動作は以下の通り(cf. TeX by Topic, 3.5).
- \ifの後のトークンを,展開不可能なトークンが2つ出てくるまで展開する
- 出てきたトークンがコントロールシーケンスの場合,以下のキャラクターコードを割り振る*1.
- アクティブでないキャラクタートークンに\letされている場合はそのキャラクタートークンのキャラクターコード
- そうでない場合は256
- キャラクターコードを比較して同じならばTrue,違うならばFalse
私はTeX弱者なのでこれだけでは解答にたどり着けなかった.
他に必要だった知識
\letの動作
コントロールシーケンスやアクティブ文字に,トークンの現在の意味を割り当てる(cf. TeX by Topic, 11.7.1*2 )*3.
トークンがどのように展開されるか
\chardef, \newcountで定義された命令及び\relaxや\indent等,一部のプリミティブ
展開不可能.
\noexpand<token>
<token>に展開される.<token>の意味を一時的に\relaxにするので,<token>自体は展開されない(cf. TeX by Topic, 12.4.1).
\string<token>
<token>を構成する文字のトークン列に展開される(cf. TeX by Topic, 3).