这究竟是如何运作的?
\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
。