为什么 \active 定义为 \char13 (而不是 13)?

为什么 \active 定义为 \char13 (而不是 13)?

在普通的 TeX 中,我们有

\chardef\active=13
\catcode`\~=\active

我以为 catcode 应该分配一个 0 到 15 之间的数字,但是 \active 是\char13。那么它是如何工作的呢?

也能用吗\catcode`\~=13

答案1

这里有三个问题,两个关于性能,一个关于“安全”。\chardef解析 'd 标记的速度比 TeX 查找数字结尾的速度稍快,因此\active在这方面比显式 稍好13。今天这不是什么大问题,但过去却如此。同样,\active就内存而言, 是一个标记,而13是两个标记:使用前者可以节省内存。再说一次,今天的内存使用量不是一个大问题,但过去却是一个大问题。

也许更重要的是,当明确给出数字时,TeX 会继续寻找数字的结尾,而对于 token 则\chardef不会发生这种情况。例如

\catcode`\a=134

给出错误,但是

\catcode`\a=\active4

不是。在明确使用中,这不太可能成为问题,但如果我们

\def\foo{\catcode`\a=\active}

然后\foo 4就可以了,而对于明确的,13我们需要一个空格或\relax(所以还有另一个标记)。

(在这种情况下,TeX 正在“寻找一个数字”,因此\chardef\mathchardef标记可以代替明确的数字运行。将\active宏扩展为13具有与明确值相同的一些问题。)

相关内容