TeXbook 练习 8.6

TeXbook 练习 8.6

练习 8.6。假设纯 TEX 的类别代码有效,但字符^^A^^B^^C分别^^M属于类别 0、7、10 和 11。从(相当荒谬的)输入行 产生了哪些标记^^B^^BM^^A^^B^^C^^M^^@\M␣?(请记住,此行后面跟着 ⟨return⟩,即^^M;并回想一下^^@表示 ⟨null⟩ 字符,当 INITEX 开始时,它的类别为 9。)

回想一下,0代表转义,7代表上标,10代表空格,11代表字母。

给出的答案是: ^^B7 ^^B7 M11 |^^B| 10 ^^M7 |M^^M| .
(我习惯用|cs|“cs”来表示控制序列名称。)

问题:为什么10在那里!?首先,^^C后面跟着一个非字母字符^^A^^B(转义字符后跟一个非字母),因此进入状态 S(不是M),并且明确地写出在这种情况下,任何空格字符都“只是被忽略”。

答案1

第 47 页对此进行了解释:

如果 TeX 看到类别 10 的字符,则操作取决于当前状态。如果处于状态 N 或 S,则忽略该字符并保持相同状态。否则,在状态 M 下,字符将转换为空格(字符代码 32),类别代码为 10,并进入状态 S。空格标记中的字符代码始终为 32。

第 46 页:

如果 TeX 在任何状态下看到类别 0,… (b) 如果下一个字符不属于类别 11,则名称由该符号组成。… 此名称将成为控制序列标记。对于类别 10 的字符,TeX 在情况 (b) 中进入状态 S…,否则 TeX 进入状态 M。

因此之后它处于状态 M ^^A^^B,因为^^B它不属于第 10 类。

答案2

在转义字符后跟一个非 catcode 11 的字符后,tex 进入状态 M,除非该字符是空格。因此,空格会​​在之后跳过,\但不会跳过之后\$或之后^^A^^B

相关内容