有没有一本完整的现代书籍来解释 TeX 解析器的工作原理?

有没有一本完整的现代书籍来解释 TeX 解析器的工作原理?

嗨,我正在阅读 Donald E. Knuth 的《The TEXbook》。但在我看来,这本书对于想要学习 TeX 的人来说非常具有教育意义。大部分页面都包含练习。但 TeX 实现如何解析 TeX 代码的许多内容都没有涉及。例如,我想知道为什么控制序列\input MS读取参数“MS”而不是我怀疑的“M”($\sqrt ab$是的平方根a并且b不在根之外......)。

TeX 解析器按照什么顺序处理第 7 章中听到的 16 个类别中的每个字符......?

是否有人知道完整的参考资料或书籍,可以准确说明 TeX 解析器的工作原理并列出 TeX 中的所有 900 个内置控制序列?

答案1

关于的解释\input在TeXbook第278页:

在 TeX 中,〈文件名〉 的语法并不是标准的,因为不同的操作系统有不同的约定。你应该向你当地的系统向导询问他们如何决定实现文件名的细节。然而,下面的原则应该普遍适用:〈文件名〉 应该由 〈可选空格〉 和后跟显式字符标记(扩展后)组成。六个或更少的普通字母和/或数字后跟一个空格的序列应该是在所有 TeX 安装中以基本相同的方式工作的文件名。在文件名中,大写字母不被认为等同于小写字母;例如,如果你引用字体cmr10CMR10,TeX 不会注意到它们之间的任何相似之处,尽管它可能为这两种字体输入相同的字体度量文件。

简而言之,\input开始扩展标记,忽略空格,直到找到一个非空格的不可扩展标记,该标记应该是字符标记(或\let字符标记的控制序列)。直到第一个非字符标记的所有内容都将被视为文件名的一部分(继续执行扩展)。

.tex如果在指定的文件名中找不到扩展名,通常会附加扩展名(但这取决于实现;例如,纹理允许文件名没有扩展名)。

如此奇怪的代码,例如

\let\aletter=a
\input }{\aletter x

将尝试输入一个名为 的文件}{ax.tex。文件名后的空格标记将被忽略。

特定的实现可以提供略有不同的约定;比如,TeX Live 允许在 之间引用文件名";前导"将使 TeX 寻找另一个(总是进行扩展)并且文件名将由每个字符标记(包括空格标记)组成,直到尾随的";两个双引号字符将被删除。

XeTeX 和 LuaTeX 仍然适用不同的约定。例如,LuaTeX 允许\input {file}并将输入file.tex;相反,pdftex将尝试输入{file}.tex

请注意,当 TeX 寻找文件名时,即 、\openin\openout时,同样的规则适用\font。但是,XeTeX 对 中的文件名使用特殊约定,\font这些约定不适用于寻找 〈文件名〉 的其他情况。

还有其他几种情况下,原始类型的参数不需要括号:例如

\dimen 123 = 1234pt

不会仅仅将其1作为寄存器,而是会继续(使用宏扩展)直到找到非数字的内容(在本例中是空格)。

在基本上所有这些情况下,尾随空格标记都会被吞掉,被视为所需标记的分隔符。

答案2

这是 Knuth 的

计算机和排版,B 卷,TeX:程序

这是一个“TeX 解释器源代码的文档列表”(即WEB(或Pascal)程序)

但首先,你已经有了一本合适的书:TeXbook。正如约瑟夫所说,它确实回答了你关于的问题\input

相关内容