shaitan's blog

長文書きたいときに使う.

\if 芸人になりたーい!

じゃあ \if の抜き打ちテストやるぞー (マクロツイーター)
上記エントリをきっかけに調べたので忘れないうちに記録しておく.

\ifの動作は以下の通り(cf. TeX by Topic, 3.5).

  1. \ifの後のトークンを,展開不可能なトークンが2つ出てくるまで展開する
  2. 出てきたトークンがコントロールシーケンスの場合,以下のキャラクターコードを割り振る*1
    • アクティブでないキャラクタートークンに\letされている場合はそのキャラクタートークンのキャラクターコード
    • そうでない場合は256
  3. キャラクターコードを比較して同じならばTrue,違うならばFalse

私はTeX弱者なのでこれだけでは解答にたどり着けなかった.

他に必要だった知識

\letの動作

コントロールシーケンスやアクティブ文字に,トークンの現在の意味を割り当てる(cf. TeX by Topic, 11.7.1*2 )*3

トークンがどのように展開されるか

\defで定義された命令

定義通りに展開される.

\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).

*1:カテゴリーコードも割り振る.

*2:3.3.1でも触れている.

*3:展開を必要としない.