我只能定义由 catcode-11 符号或单个 catcode-12 组成的命令。
这种限制有什么意义呢?
定义包含以下未使用的符号的命令会很方便:!@№:;?*.#-
以及可能大量的 unicode 标点符号(我只关心xelatex
)。当然,我可以在自己的包内部执行此操作,但如果我想导出这种非常规宏,我必须告诉用户更改 catcode。但似乎没人这样做。
我不明白这会引发什么问题。
答案1
控制序列有两种类型:
- 控制符号,即反斜杠和一非类别代码11个字符;
- 控制词,即反斜杠和任意 11 个类别代码字符序列。
主要问题在于决定控制字何时结束;TeX 规则表明,当找到第一个非类别代码 11 字符时,控制字就结束。
允许在控制字名称中混合使用类别代码 11 和 12 个字符会在解析输入并将其转换为标记时带来问题。能通过使用以下方法混合它们(以及具有几乎任何类别代码的字符)
\csname <characters>\endcsname
但这里终止问题已用 解决\endcsname
。
关于 Knuth 为何做出此决定的哲学讨论可能会很有趣;但就目前情况而言,这样做根本不可能实现你想要的效果。
你可以改变任何你想要的字符的类别代码;但是拥有一个标准的语法肯定是更好的选择。