为什么这个输出在空的 csname 上使用 \string

为什么这个输出在空的 csname 上使用 \string

这究竟是如何运作的?

\expandafter\string\csname\endcsname

我不知道我会期望从那里得到什么,但肯定不知道\csname\endcsname_哪里_有空间。

我以为\csname<name of cs>\endcsname会在一次扩展中扩展到控制序列<name of cs>。现在,我以为\string会打印下一个标记,并且,如果是控制序列,则打印\escapechar<name of cs>,但我得到的是不同的。问题出在哪里?

答案1

的主要目的\string\zzzz是将一些内容写入文件,当读回时会产生一个名为 的命令标记zzzz。获取名为 空字符串的命令标记的最常用方法是使用,\csname\endcsname因此 TeX 定义\string为如果以下标记是名为 空字符串的命令标记,则生成 。

获取具有空名称的命令的另一种方法是\在行尾使用,这通常会产生\^^M,因为\endlinechar通常为 13,但如果\endlinechar为负数或大于 255,则不会在行尾添加任何字符,在这种情况下会创建与 相同的标记\csname\endcsname。此表示不适合作为输出,因为\string它仅在行尾有效,并且具有非标准设置\endlinechar

相关内容