答案1
仅\escapechar
当代表控制序列。
记住,正如我最近解释的那样,类别代码 0 前缀是 TeX 理解它必须形成控制序列标记(而不是字符标记)的方式,但唯一相关的方面是姓名控制序列。
在 TeXbook 中,当讨论标记时,通过在框内指定名称来强调这一点。
然而,有时 TeX 需要表示一个控制序列标记:当 TeX 处理\string
、\write
或 时就会发生这种情况\message
。
该\string
原语是可扩展的,其操作为:
- 检查以下标记;
- 如果标记是一个字符,则将其类别代码设为 12 或 10;
- 如果标记是控制序列,则使形成控制序列的名称类别代码的字符为 12 或 10,并且
\escapechar
如果整数寄存器存储的值介于 0 到 255 (含)之间,则在字符前面添加字符代码,否则不添加任何内容; - 删除
\string
和以下标记; - 将这样获得的字符放回输入流中。
所有如此形成的字符都被分配了类别代码 12,但空格字符除外,其类别代码为 10。上限适用0x10FFFF
于 Unicode 引擎。
在\write
和期间\message
操作类似,只是类别代码无关紧要:标记被扩展,不可扩展标记按所述写出\string
。
请注意,的值\escapechar
与类别代码为 0 的字符无关。默认情况下,的值为\escapechar
92,即反斜杠的 ASCII 代码,但任何用户都可以更改它。
因此,TeX 发现时的正常操作\string\TeX
是
\
12 T
12 e
12 X
12
在输入流中。但如果你这样做
{\escapechar=`| \string\TeX}
你在输入流中获得的是
|
12 T
12 e
12 X
12
如果你不改变\escapechar
初始值,则使用
{\catcode`|=0 |string|TeX}
你仍然得到
\
12 T
12 e
12 X
12
因为用于确定要形成控制序列标记的字符是决不被 TeX 记住。