如何可扩展地获取任意显式字符标记的不同(需指定)类别的挂件?

如何可扩展地获取任意显式字符标记的不同(需指定)类别的挂件?

这个问题是关于显式字符标记的类别。

如果您申请\string明确的字符标记,您将获得该明确字符标记的第 12 类吊坠。

(例外:如果字符标记的字符代码为 32,表示空格字符,那么您将获得该明确字符标记的第 10 类挂件。)

因此\string也可以看作是一种可扩展地获取任意显式字符标记(其字符代码不是 32)的 12 类挂件的手段。

是否有办法可以扩展获取任意明确字符标记的其他类别的吊坠?

这样,例如,您可以轻松地将类别 12 的显式左花括号转换{为类别 1 中的花括号?
这样,例如,您可以轻松地将类别 12 的显式右花括号转换}为类别 2 中的花括号?
这样,例如,您可以轻松地将#类别 6 的显式哈希转换为类别 3 中的花括号?

如果不是:不提供这种方法的原因是什么?
这种方法是否会导致歧义/问题/麻烦,甚至扭曲 TeX 的基本概念?

(如果实施了这样的方法,是否可能会进行测试来查明一个标记是否是一个明确的字符标记?)

答案1

在令牌处理器级别解释的类别存在歧义行为。当您想通过可扩展宏创建类别 0、5 或 14 时会发生什么?

但是你可以通过 LuaTeX 扩展来做到这一点(对于其他“正常”类别):

\def\tokencatcode#1#2{%
   \immediateassignment\edef\tmp{\the\catcode`#1}%
   \immediateassignment\catcode`#1=#2
   \scantextokens\expandafter{\csstring#1}%
   \immediateassignment\catcode`#1=\tmp\space
}

$a\tokencatcode !{7}2 + b^2 = c^2$

\message{.......\tokencatcode !{7}} % yes, it is expandable

\bye

或者更简单的方法是\directlua

\def\tokencatcode#1#2{\directlua{tex.cprint(#2,"\csstring#1")}}

相关内容