TeXbook 的第 7 章著名地讨论了 TeX 有“眼睛”、“嘴巴”和“胃”,并继续讨论了 TeX 的“消化过程”并不断重复使用这些术语。
第 8 章介绍了 TeX 的“食道”,显然是对这个扩展隐喻的引用,但没有进一步解释。该术语在其他作品中也有使用:该术语是否有公认的定义?
答案1
据我所知,这个术语实际上并不是那么有用。
这嘴是 token 被识别的地方,因此abc
变成三个字符 token,并\abc
变成一个控制 token
不可扩展的令牌在胃 所以食道基本上就是扩展的过程。
texbook 仅使用了两次 gullet(而 tex.web 根本没有使用):
可扩展标记在 TeX 的“咽喉”中通过类似于反流的过程转换为不可扩展标记。
和
有什么问题
\def\%{\char`%}
? 将
%
被视为注释字符,因为它的类别代码是 14;因此,没有任何%
标记或}
令牌能够进入处理数字的 TeX 通道。
因此,除了宏被替换文本替换之外,`a
被解释为数字(a 的字符代码)的两个标记也被视为食道
过程。反过来说,\char
它本身就是胃。
答案2
我认为,将 TeX 与具有眼睛、嘴巴、胃和肠的生物进行比较不应过于认真,以至于找到与其他身体部位的类比。
我更喜欢 Victor Eijkhout 在“TeX by Topic”中对 TeX 的描述,认为 TeX 在四个层面上运行(见第 21 和 22 页):
这四个级别(大致分别对应于 Knuth 原始术语中的“眼睛”、“嘴巴”、“胃”和“肠道”)如下。
输入处理器。这是 TeX 的一部分,它从运行 TeX 的任何计算机的文件系统中接受输入行,并将它们转换为标记。标记是 TeX 的内部对象:有构成排版文本的字符标记,以及作为下两级要处理的命令的控制序列标记。
扩展处理器。第一级生成的部分(但不是全部)标记(宏、条件和一些原始 TeX 命令)需要进行扩展。扩展是用其他(或不)标记替换部分(标记序列)标记的过程。
执行处理器。不可扩展的控制序列是可执行的,并且此执行发生在 TeX 处理器的第三级。此处活动的一部分涉及对 TeX 内部状态的更改:分配(包括宏定义)是此类别中的典型活动。此级别上发生的另一件大事是水平、垂直和数学列表的构建。
视觉处理器。在最终的处理级别,执行 TeX 处理的视觉部分。在这里,水平列表被分成段落,垂直列表被分成页面,并且公式由数学列表构建而成。此外,dvi 文件的输出也在此级别进行。此处运行的算法对用户来说是不可访问的,但它们可能会受到许多参数的影响。
根据这种解释,“通道”将是 2 级和 3 级双向通信的通道,例如,当令牌通过\lowercase
或发送到 3 级时,在根据和数组\uppercase
中的值进行转换后返回 2 级。但是,我认为这对理解事物的工作原理没有任何帮助。\lccode
\uccode
生物寓言中还未涉及另一个方面:TeX 将宏替换文本发送到第 2 级的过程。第 3 级负责存储宏定义,第 2 级可从中访问。
最后,我拒绝将 DVI 或 PDF 文件的生成过程以及log
写入流与另一个我不愿提及的身体部位进行比较。这样的类比很荒谬。
答案3
引自缺乏耐心的 TeX,第 16 页,重点补充:
眼睛将输入文件转换成字符序列,嘴巴将字符序列转换成标记序列,其中每个标记要么是单个字符,要么是控制序列。食道将标记扩展为一系列原始命令,这些命令也是标记。胃执行原始命令指定的操作,生成一系列页面。最后,肠将每页转换为 .dvi 文件所需的格式并将其发送到那里。这些操作在第 4 节“TeX 剖析”下(第 46 页)中有更详细的描述。
因此,TeX 的‘gullet’有效地执行了扩展。