11 和 12 类代码之间的差异

11 和 12 类代码之间的差异

我只能定义由 catcode-11 符号或单个 catcode-12 组成的命令。

这种限制有什么意义呢?

定义包含以下未使用的符号的命令会很方便:!@№:;?*.#-以及可能大量的 unicode 标点符号(我只关心xelatex)。当然,我可以在自己的包内部执行此操作,但如果我想导出这种非常规宏,我必须告诉用户更改 catcode。但似乎没人这样做。

我不明白这会引发什么问题。

答案1

控制序列有两种类型:

  1. 控制符号,即反斜杠和非类别代码11个字符;
  2. 控制词,即反斜杠和任意 11 个类别代码字符序列。

主要问题在于决定控制字何时结束;TeX 规则表明,当找到第一个非类别代码 11 字符时,控制字就结束。

允许在控制字名称中混合使用类别代码 11 和 12 个字符会在解析输入并将其转换为标记时带来问题。通过使用以下方法混合它们(以及具有几乎任何类别代码的字符)

\csname <characters>\endcsname

但这里终止问题已用 解决\endcsname

关于 Knuth 为何做出此决定的哲学讨论可能会很有趣;但就目前情况而言,这样做根本不可能实现你想要的效果。

你可以改变任何你想要的字符的类别代码;但是拥有一个标准的语法肯定是更好的选择。

相关内容