自分の 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 では無視される」だと説明は全く以て正しい。
他のカテゴリコードの小節ではちゃんと「文字」になっているのに、ここだけ何故「トークン」なのだろう……? 単なる間違いか、それとも何か意図があるのか……?