catcode 12 个空格

catcode 12 个空格

我想了解当空格字符的 catcode 设置为 12 时 TeX 的行为。

以下两个示例输入文件仅在一个位置上有所不同:第一个文件包含字符,4而第二个文件包含字符(空格)。这两个示例中的4的 catcode 均为 12。因此,我预计第二个示例的排版输出与第一个示例的排版输出相同,唯一的区别是排版“4”将被排版“空格”替换。换句话说,我预计第二个示例有三行排版行,第二行由五个用于排版空格的“打开框”组成cmtt10。然而,TeX 忽略了第二行,即使它在输入文件中不为空(它由五个 catcode 12 空格组成)。这是怎么回事?

\catcode`\ =12
\obeylines
\tt
 een  twee   drie
    4
hoedje van papier
\bye

在此处输入图片描述

\catcode`\ =12
\obeylines
\tt
 een  twee   drie
     
hoedje van papier
\bye

在此处输入图片描述

答案1

在 TeXbook 第 46 页的第三个双重危险弯道上,我们发现

TeX 会删除输入行右端出现的任何 ⟨space⟩ 字符(编号 32)。然后,它会在行的右端插入一个 ⟨return⟩ 字符(编号 13),但它不会在I错误恢复期间用 ' ' 插入的行尾放置任何其他内容。请注意,⟨return⟩ 被视为行中实际存在的字符;您可以通过更改其 catcode 来获得特殊效果。

第一句话解释了你得到了什么。请注意,标记化甚至还没有开始:当需要时,TeX 将记录放入缓冲区,执行上面文本中概述的步骤;只有在此之后,它才开始标记化,事实上,上面的文本指定字數32.

⟨return⟩ 字符实际上是字符代码\endlinechar\obeylines13 的字符,但处于活动状态(类别代码 13)。第 48 页第五个双重危险弯曲对此进行了解释。无论如何,它被插入删除空格字符,所以这对您的情况没有帮助。

相关内容