“^^A” 在 TeX 中不起作用?

“^^A” 在 TeX 中不起作用?

第 45 页TeXbook

TEX 有一种标准的方式来引用 ASCII 的不可见字符: 代码 0 可以输入为三个字符的序列^^@, 代码 1 可以输入^^A, 依此类推, 直到代码 31, 即^^_(参见附录 C)。

、和等等都有效,但是^^@不起作用。^^B^^C^^A

^^@\par
^^B\par
^^C\par
^^D\par
\bye

生产

在此处输入图片描述

^^A会导致错误

! Missing $ inserted.
<inserted text> 
                $
<to be read again> 
                   ^^A
l.5 ^^A

为什么不能^^A在 TeX 中使用?

答案1

您收到的错误消息表明^^A结果为数学标记。plain.TeX您可以在其中找到:

\catcode`\_=8 \catcode`\^^A=8 % underline and downarrow are for subscripts

(注:此部分内容plain.tex也可在《The TeXbook》附录B第343页找到。)

从这一点开始^^A是一个数学下标。这对应于终端输出

\showthe\catcode`\^^A
\bye
8.
l.1 \showthe\catcode`\^^A

注:后面

\mathcode`\^^A="3223 % \downarrow

plain.tex对于 的 catcode来说,是无关紧要的^^A。而且,由于 的 catcode^^A既不是 11(字母),也不是 12(其他),因此 mathcode 也与输出无关。但它可能会变得相关,例如,在更改 的 catcode 之后^^A

$x^^A{y}$

\catcode`\^^A=12 $x^^A{y}$
\bye

在此处输入图片描述

有关\mathcode其工作原理和差异的更多信息,请\catcode参阅“TeXbook”和“mathcode 和 catcode 之间有什么区别以及如何使用 mathcode?

答案2

你可以参考到不可见的 ASCII 字符,但是 TeXbook 并没有说你可以或应该只是为了好玩而使用它们。

例如,^^@(空字节)的类别代码为 9,因此

Hell^^@ w^^@rld

会导致“地狱世界”。事实上,你得到了输出中的字符而不是四个。

相反,^^A(1 个字节)的类别代码为 8。这是在纯 TeX 中设置的类别代码表:

在此处输入图片描述

为什么选择^^@?因为有些操作系统使用空字节来填充其固定长度记录。看到 被分配类别代码 5 应该不足为奇^^M。剩下两种情况,即^^A^^K

Knuth 以前使用的键盘在按下和时可以显示和,他更喜欢这些视觉提示,而不是和。这样做的结果是CtrlACtrlK^_

$x^^A0$

效果与 相同$x_0$。当然,这$^^A$会引发错误,因为它就像$_$

您可以在第 369 页的表格中找到 Knuth 键盘上的符号。该表还解释了为什么其中一些字节被分配了数学码。

例如,在 Knuth 的屏幕上CtrlD会产生,我们确实发现

\mathcode`\^^D="225E % \land

plain.tex

出于完整性考虑,您可以使用^^00而不是^^@。此约定也在第 8 章中描述,并已添加到 TeX 版本 3 中。

答案3

因为在 Don Knuth 使用的带有旧键盘的旧计算机系统上,字符集将向下箭头作为字符 1 (^^A)。这似乎是下划线作为数学下标字符的有用同义词,因此它的 catcode 为 8。同样,对于位置 11 处的向上箭头字符,给出 catcode 7,如 ^。字符集显示在附录 C 中。

相关内容