在阅读中,我发现 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>
,则有两种情况:
如果
<code>
> 63,则^^<char>
表示 ASCII 字符,代码为<code>
- 64如果
<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
。[...]
还有一个特殊的惯例,其后
^^
是二“小写十六进制数字”0
–9
或a
–f
。按照此约定,所有 256 个字符都可以以统一的方式获得,从^^00
到^^ff
。字符 127 是^^7f
。