扩展寄存器池可以用于 \newinsert 吗?

扩展寄存器池可以用于 \newinsert 吗?

在阅读了 egreg 的回答后没有空间容纳新的\dimen我有这个问题:

etex 软件包当某种寄存器类型的正常寄存器池耗尽时,切换到扩展寄存器池。

对于一\newinsert\count需要\dimen\skip、 和\box每一个,并且它们应该具有相同的“数字”。

\reserveinserts{...}可以保留一些插入并强制使用\count、、和寄存器进入扩展寄存器池。\dimen\skip\box

是否可以重新定义\newinsert使用扩展寄存器池中的\count\dimen\skip\box寄存器?(以及:为什么不行或如何做?)这将增加可能插入的数量(无论是通过更多浮点数大脚/曼尼福特或手动)增加约 100 倍(!)(\et@xins从 32768 开始并分配插入 32767、32766,...)。

答案1

答案是肯定的“不”,不是因为宏限制(可以解决),而是因为即使使用较新的引擎,最大\insert数量仍为 255,至少对于 pdfTeX 和 XeTeX 而言。因此,如果您尝试

\insert256{}

使用其中一个引擎,你会得到错误

! Bad register code (256).
<to be read again> 
                   {
l.1 \insert256{

e-TeX 手册明确指出插入类不由 e-TeX 扩展,因此这是定义的行为。

LuaTeX 的情况似乎有所不同:这不会在插入更高编号时产生错误。LuaTeX 文档解释说寄存器扩展到 16 位数字,并列出了受影响的寄存器,但未在此列表中提及。因此,使用 LuaTeX 可能可以超越寄存器 255,但目前没有记录。要允许 LuaTeX 访问更高的寄存器编号进行插入,只需在加载后\insert更改 的值,例如\et@xinsetex.sty

\csname et@xins\endcsname=65535 %

将从最高可能的寄存器号开始向下工作。

相关内容