当尝试做纯 TeX 中的网格排版我偶然发现了老上传,看起来很有希望(另见本介绍)所以我打开了upages-20001214.tar.gz并将所有内容放入 uplain/upages/ 目录中。
为了测试包,我创建了一个最小文件,内容如下
\input upages
bla bla bla
\bye
并尝试编译它。但是,XeTeX 在某行代码上卡住了:
This is XeTeX, Version 3.14159265-2.6-0.99991 (TeX Live 2014/Arch Linux) (preloaded format=xetex)
restricted \write18 enabled.
entering extended mode
(./gridtest.tex (./upages.tex (./umaster.tex
! Undefined control sequence.
l.519 \def\@innernewread
{\alloc@6\read\chardef\fift@@n}
?
! Emergency stop.
l.519 \def\@innernewread
{\alloc@6\read\chardef\fift@@n}
No pages of output.
Transcript written on gridtest.log.
如果该宏只是被插入,为什么会显示“未定义的控制序列” \def
?奇怪的是:我记得几年前使用过 upages,编译得很好。即使是现在,当尝试时tex gridtest
,它编译得很好,但使用 pdfTeX 或 XeTeX,它会吐出这个错误。
答案1
确切的错误是相当随意的,只是扩展走了错误的路径,因此在第一次尝试一些真正非法的事情时会产生错误。
tex
在激活 etex 扩展的格式中,通过将 更改为,您会看到错误etex
(奇怪的是,latex 除外),寄存器分配宏会更新,因为有 32768 个寄存器,而不是 256 个。这些宏旨在修补这些分配,基本上不期望新格式。
使用 xetex 时,还存在其他问题,因为某些文件使用非 utf8 编码的非 ascii 字符。日志显示了几个实例
Invalid UTF-8 byte or sequence at line 2 replaced by U+FFFD.
Invalid UTF-8 byte or sequence at line 3 replaced by U+FFFD.
Invalid UTF-8 byte or sequence at line 3 replaced by U+FFFD.