为什么TeX中有256个不同的长度为2的控制序列和256^2个长度为3的控制序列?

为什么TeX中有256个不同的长度为2的控制序列和256^2个长度为3的控制序列?

在这本书的第 11 页TeXbook,有一个疑问:

长度为 2 的不同控制序列(包括转义符)有多少种可能?长度为 3 的不同控制序列又有多少种可能?

答案是:

长度为 2 的控制序列共有 256 个;其中大多数在 TEX 开始时未定义。(TEX 允许任何字符作为转义符,但它不区分以不同转义符开头的控制序列。)如果我们假设有 52 个字母,则长度为 3 的控制序列恰好有 522 个(每对字母一个,从 AA 到 zz)。但第 7 章解释了如何使用 \catcode 将任何字符更改为“字母”;因此可以使用 256^2 个长度为 3 的潜在控制序列中的任何一个。

这个256是怎么算出来的,256^2又是怎么算出来的?我看不懂答案。

答案1

事实上,存在 256 个 2 个字母的序列和 256×256 个 3 个字母的序列,这只是因为在经典 TeX(和 pdfTeX)中,字符代码是 0 到 255 之间的数字。因此,有 256 个长度为 1 的名称和 256×256 个长度为 2 的名称(每个名称前面都有一个转义字符)。

字符代码的上限 255 在 tex 语法(例如\char或 )中的任何地方都是明确的\mathchar

如果你尝试\char256在 tex 或 pdftex 中,你将收到一个错误

! Bad character code (256).
l.3 \char256
            
? h
A character number must be between 0 and 255.
I changed this one to zero.

?

在 xetex 或 luatex 中,上面的 255 需要替换为最大的 Unicode 值,即十六进制 10FFFF = 十进制 1114111,因此包括转义符在内共有 1114112 个代码 0-1114111 和 114112×114112=1241245548544 三个字符序列。

使用 luatex 您将获得

! Bad character code (1114112).
l.7 \char"110000
              
? h
A character code must be between 0 and 1114111.
I changed this one to zero.
? 

\char"110000

相关内容