获取控制序列标记的名称 - 除了 32 之外,哪些 \escapechar 值需要特别注意?

获取控制序列标记的名称 - 除了 32 之外,哪些 \escapechar 值需要特别注意?

我想获取控制序列标记的名称作为字符标记序列。

\relax希望得到relax

前面的转义字符将被从结果中删除\string\relax

也许可以

\def\gobble#1{}%
\expandafter\gobble\string\relax

但我理解正确吗?:

实际上的行为\string取决于整数参数的值\escapechar

如果\escapechar< 0 或\escapechar> 255/1114111,则不会在前面添加转义字符\string

如果 的值为\escapechar32,则空格标记(字符代码 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

相关内容