TeX 的喉管是什么?

TeX 的喉管是什么?

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 原始术语中的“眼睛”、“嘴巴”、“胃”和“肠道”)如下。

  1. 输入处理器。这是 TeX 的一部分,它从运行 TeX 的任何计算机的文件系统中接受输入行,并将它们转换为标记。标记是 TeX 的内部对象:有构成排版文本的字符标记,以及作为下两级要处理的命令的控制序列标记。

  2. 扩展处理器。第一级生成的部分(但不是全部)标记(宏、条件和一些原始 TeX 命令)需要进行扩展。扩展是用其他(或不)标记替换部分(标记序列)标记的过程。

  3. 执行处理器。不可扩展的控制序列是可执行的,并且此执行发生在 TeX 处理器的第三级。此处活动的一部分涉及对 TeX 内部状态的更改:分配(包括宏定义)是此类别中的典型活动。此级别上发生的另一件大事是水平、垂直和数学列表的构建。

  4. 视觉处理器。在最终的处理级别,执行 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’有效地执行了扩展。

相关内容