关于 TeXBook 练习 8.6 的问题

关于 TeXBook 练习 8.6 的问题

在练习 8.6 中,字符^^A^^B、分别被定义为属于类别 0、7、10 和 11。问题是从输入行(M 后面有一个空格字符)产生了什么标记。Knuth 提示说,该行后面跟着,即;而 ^^@ 表示字符,其类别为 9。^^C^^M‘^^B^^BM^^A^^B^^C^^M^^@\M ’<return>^^Mnull

解决方案是,有 7 个 token:代币列表

为什么控制符号后的空格字符不会被忽略?为什么这对于 类别代码为 11 的^^B最后一个控制序列无关紧要?^^M

有人能给我解释一下吗?

答案1

练习假设\endlinechar=13,对应于^^M

当检查一行输入(但尚未标记)时,TeX将丢弃所有尾随空格以及(系统相关的)记录结束字符,并插入 \endlinechar

因此,当标记化开始时,尾随空格,你会得到

^^B^^BM^^A^^B^^C^^M^^@\M^^M

^^约定在标记化过程中适用,因此您可以获得

^^B7 ^^B7 ^^A0 ^^B7 ^^C10 ^^M11 ^^@9 \0 M11 ^^M11

但是,请注意,标记是一次形成一个的,因此 TeX 不会识别类别代码为 7 的两个相同字符,因为^^B7后面跟着^,所以^^现在惯例不再适用,您将获得类别代码为 7 的前两个标记,接下来是一个控制符号|^^B|(竖线代表 TeXbook 中使用的方框),一个标准化为<space>10 的空格标记。接下来的^^@9被忽略,然后形成一个控制字|M^^M|

相关内容