^^+ 被 k 替换背后的数学原理是什么?

^^+ 被 k 替换背后的数学原理是什么?

在阅读中,我发现 TeX 预处理器会用 替换^^+k给出的解释如下:

例如,序列 ^^+ 被替换为 k,因为 k 和 + 的 ASCII 码相差 64。由于此替换发生在标记形成之前,因此写入 \vs^^+ip 5cm 与 \vskip 5cm 具有相同的效果。

我不是数学家,但是我看过 ASCII 表,我可以看到 k 的 ASCII 码为 107,而 + 的 ASCII 码为 43,它们的 ASCII 码相差 64。

但我不明白他描述的数学关系是什么。这到底是怎么回事?

答案1

您想知道 会发生什么情况^^<char>,其中<char>代表可打印的 ASCII 字符(即 32 到 126 之间)。规则很简单:如果<code>是 的 ASCII 代码<char>,则有两种情况:

  1. 如果<code>> 63,则^^<char>表示 ASCII 字符,代码为<code>- 64

  2. 如果<code>≤ 63,则用代码+ 64^^<char>表示 ASCII 字符<code>

但是,如果<char>0123456789abcdef并且后面的字符也在同一范围内,则用将^^<char><char>两个字符解释为十六进制数字后的 ASCII 码来表示该字符。

引用 TeXbook (第 45 页):

TeX 有一种标准方式来引用 ASCII 的不可见字符:代码 0 可以输入为三个字符的序列^^@,代码 1 可以输入^^A,依此类推,直到代码 31 ,即^^_(参见附录 C)。如果后面的字符^^的内部代码在 64 到 127 之间,TeX 会从代码中减去 64;如果代码在 0 到 63 之间,TeX 就会加上 64。因此代码 127 可以输入^^?,并且可以通过输入 来获得危险弯曲标志 {\manual^^?}。但是,在使用字符 127 之前必须更改其类别代码,因为这个字符通常属于类别 15(无效);例如\catcode`\^^?=12

[...]

还有一个特殊的惯例,其后^^“小写十六进制数字” 09af。按照此约定,所有 256 个字符都可以以统一的方式获得,从^^00^^ff。字符 127 是^^7f

相关内容