自分の TeX の知識がアレだったことが解ってアレな ZR さんが、TeX by Topic の記述にイチャモンをつけ始めたようです。
(“TeX by Topic”を今すぐ読みたい、というTeX Live ユーザは「texdoc texbytopic
」を実行しよう!)
(以下、何れも 2.7 節について)
コメント文字(カテゴリコード14)の説明
ここでは、
行末文字は見られないので、オートマトンの状態が M(行の途中)であった場合でも空白トークンは入らない
と述べられていて、この結論自体は正しいけど、これをそのまま信じると、行末文字を読んでいないため、次の行に状態 M のまま移行する(N にならない)ことになる。つまり、次のような例で、「ABC
」と「DEF
」の間に空白トークンが入ることになるだろう。
ABC%comment DEF
もちろん、実際には、「行頭の空白文字」はいかなる場合でも決して空白トークンにならない。
パラメタ文字(カテゴリコード6)とパラメタトークン
ここの説明では、入力処理(字句解析)の段階で以下のようになるとされている。
でもこれだと、次のようなものは「入力処理の段階で失敗する」のでエラーになるはずである。
\def\mogu#1{} \mogu{#abc#}
実際にはこれはエラーにならない。実のところ、入力処理および展開処理の段階では、(カテゴリコード 6 の)文字 #
は単純にいつでも(カテゴリコード 6 の)単一の文字トークン #
になっているように私は感じている。次のような(凶悪な)例を見れば判る。
\def\evil#1#2#3:{\def\a#1#2#1#3{#3}} \evil#12: \message{\meaning\a} %==>macro:#1#2->2 \message{\a9876} %==>276
マクロ \evil
の展開において、その引数 #1
、#2
、#3
はそれぞれ #
、1
、2
に対応したと見るべきだろう。すなわち、\evil
の後に続いていた「#12
」は 3 つのトークンなのである。
カテゴリコード10の説明
ここの小節は次のように始まっている:
カテゴリコード 10 のトークン――それは文字コードと無関係に〈空白トークン〉と呼ばれる――は状態 N および S では無視される……
ここは入力処理器の話をしているので、この段階の処理対象は本来なら「トークン」ではなく「文字」でないといけないはずである。そして「カテゴリコード 10 の文字は状態 N および S では無視される」だと説明は全く以て正しい。
他のカテゴリコードの小節ではちゃんと「文字」になっているのに、ここだけ何故「トークン」なのだろう……? 単なる間違いか、それとも何か意図があるのか……?