我想获取控制序列标记的名称作为字符标记序列。
我\relax
希望得到relax
。
前面的转义字符将被从结果中删除\string\relax
。
也许可以
\def\gobble#1{}%
\expandafter\gobble\string\relax
但我理解正确吗?:
实际上的行为\string
取决于整数参数的值\escapechar
。
如果\escapechar
< 0 或\escapechar
> 255/1114111,则不会在前面添加转义字符\string
。
如果 的值为\escapechar
32,则空格标记(字符代码 32,类别代码 10)将添加到 前面\string
。空格标记不能作为未分隔的参数处理。因此,我们有一个需要特殊处理的情况。
在所有其他情况下,字符标记都以字符代码=值\escapechar
和类别代码=12/其他作为前缀。
因此,如果您不能依赖,\escapechar=92
您需要这样做:
\lowercase{\def\spacetokengobble} {}%
\def\gobble#1{}
\def\empty{}
\csname\ifnum\escapechar<0 empty\else
\ifnum\escapechar=32 spacetokengobble\else
\ifnum\expandafter\ifx\csname XeTeXrevision\endcsname\relax
\expandafter\ifx\csname directlua\endcsname\relax
255\else 1114111\fi\else 1114111\fi<\escapechar
empty\else gobble\fi
\fi
\fi
\expandafter
\endcsname\string\relax
问题:
对于 的值\escapechar
,除了值 32 之外,是否还存在无法通过 删除的特殊值\gobble
?