完全不可能的 TeX 字节序列

完全不可能的 TeX 字节序列

出于黑客的兴趣,我想知道在\end处理之前是否存在任何有效 TeX 文档中永远不会出现的字节序列。

我想到过

{\catcode`}=9\catcode`\=9

\这会打开一个不可关闭的组,但是可以通过首先将 catcode 0 移开来轻松地将其中和。

答案1

文件中不存在绝对不会出现的字节序列(显然,在更改 catcodes 之前,文件开头存在一些限制),但是存在绝对不会出现的字符标记序列。具体涉及行末的空格修剪和规范化,行末的空格在很早的阶段就被 tex-the-program 剥离,并且这无法在 TeX 文件中控制。这是宏无法xmltex处理 utf-16 Unicode 编码的主要原因,因为空格剥离会导致随机字节被删除,因此无法确保整个文档的字节奇偶校验。(utf-8 没有这个问题,因为在 utf-8 中,ascii 范围内的字节永远不会用作多字节编码字符的一部分)。

答案2

TeX 具有无效字符(具有 15 个字节序列)的概念\catcode,因此如果使用具有此 catcode 的任何 8 位字符设置 TeX,那么显然这样做的格式会阻塞包含此字符的文件。

默认情况下(可能是由于历史原因),普通 TeX 和 LaTeX 都有一个这样的字符:“delete”(即^^K),所以如果你的文件中有一个这个字符,你就会得到

! Text line contains an invalid character.
l.1 ^^K

但当然,一旦你改变了 catcode,字节序列就会出现,如果你把它作为格式的一部分,它就会一直出现,所以从这个角度来看,没有字节序列总是无效的。

相关内容