在普通的 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
具有与明确值相同的一些问题。)