{を読んだら先に}を読むのかい?読まないのかい?どっちなんだい!

 

 

マクロへの代入

\def\staremph #1は#2である. {☆#1☆は☆#2☆である.}

 

入力:\staremph 吾輩は猫である.

出力:☆吾輩☆は☆猫☆である.

 

入力:\staremph 吾輩は猫であるのである.

入力:☆吾輩☆は☆猫であるの☆である.

 

入力:\staremph 吾輩は朝は猫である.

出力:☆吾輩☆は☆朝は猫☆である.

 

入力:\staremph {吾輩は朝}は猫である.

出力:☆吾輩は朝☆は☆猫☆である.

 

→{}はカタマリになっている

If文

入力:\if aa一致\else 不一致\fi

出力:一致

 

入力:\if a{a}一致\else 不一致\fi

出力:不一致

∵\ifの直後の2トークン, つまりaと{の一致をチェック

 

入力:\if {a}a一致\else 不一致\fi

出力:不一致

∵{とaは不一致

 

入力:\if {a}{a}一致\else 不一致\fi

出力:不一致

∵{とaは不一致

 

入力:\if {{一致\else 不一致\fi

出力:一致

 

→if文は本当に文字通り直後の2トークンの一致を見ている

 

マクロもう一度

\def\macrob #1#2#3.{1:#1 / 2:#2 / 3:#3}

 

入力:\macrob これはペンです.

出力:1:こ / 2:れ / 3:はペンです

 

入力:\macrob {これ}は{ペン}です.

出力:1:これ / 2:は / 3:ペンです

 

入力:\begingroup これ\endgroup は\begingroup ペン\endgroup です.

出力:1: / 2:こ / 3:れはペンです

 

「{これ}は{ペン}です.」のトークン分解は一文字一文字になるはずなので, 1トークンずつ引数に突っ込んでいくという解釈は誤りで, マクロの定義においてはトークンよりも{}囲いの方が強いということになるが……状況によってそれが異なるとなるとどうしたら統一的に解釈できるのだろう. 

3つ目の例を考えると{}に文字列としての一致を確認していることになるが、だとしたら引数を囲む{}の内部に\begingroup \endgroupの意味での{}があったとして、この}と引数を囲む}をどうやってTeX側は区別しているのだろうか?

 

根本的なところで何か知識が足りない気がしてきた, 一旦これについて考えることはやめよう. もうわからん.

 

ぺりをだねぇ