TeX 中的“\escapechar”与类别 0

TeX 中的“\escapechar”与类别 0

在 TeX 中,\catcode`\|=0将转义字符设为||TeX将输出

图1

但在第 40 页倒数第二段TeXbook,它表示这\escapechar通常是 TeX 反斜杠的内部代码。但是,\escapechar=`\|无法像下面|TeX这样输出结果\TeX

\escapechar=`\| 
%\catcode`\|=0
\TeX\par
|TeX
\bye

在此处输入图片描述

\escapecharTeX 中的 和 类别 0有什么区别?

答案1

\escapechar代表控制序列。

记住,正如我最近解释的那样,类别代码 0 前缀是 TeX 理解它必须形成控制序列标记(而不是字符标记)的方式,但唯一相关的方面是姓名控制序列。

在 TeXbook 中,当讨论标记时,通过在框内指定名称来强调这一点。

然而,有时 TeX 需要表示一个控制序列标记:当 TeX 处理\string\write或 时就会发生这种情况\message

\string原语是可扩展的,其操作为:

  1. 检查以下标记;
  2. 如果标记是一个字符,则将其类别代码设为 12 或 10;
  3. 如果标记是控制序列,则使形成控制序列的名称类别代码的字符为 12 或 10,并且\escapechar如果整数寄存器存储的值介于 0 到 255 (含)之间,则在字符前面添加字符代码,否则不添加任何内容;
  4. 删除\string和以下标记;
  5. 将这样获得的字符放回输入流中。

所有如此形成的字符都被分配了类别代码 12,但空格字符除外,其类别代码为 10。上限适用0x10FFFF于 Unicode 引擎。

\write和期间\message操作类似,只是类别代码无关紧要:标记被扩展,不可扩展标记按所述写出\string

请注意,的值\escapechar与类别代码为 0 的字符无关。默认情况下,的值为\escapechar92,即反斜杠的 ASCII 代码,但任何用户都可以更改它。

因此,TeX 发现时的正常操作\string\TeX

\12 T12 e12 X12

在输入流中。但如果你这样做

{\escapechar=`| \string\TeX}

你在输入流中获得的是

|12 T12 e12 X12

如果你不改变\escapechar初始值,则使用

{\catcode`|=0 |string|TeX}

你仍然得到

\12 T12 e12 X12

因为用于确定要形成控制序列标记的字符是决不被 TeX 记住。

相关内容