2015 年发布的 LaTeX 更新

2015 年发布的 LaTeX 更新

我收到以下错误信息:

! No room for a new \dimen . \ch@ck ...\else \errmessage {No room for
a new #3}
                                                \fi

我找不到治愈方法。

答案1

这取决于两个原因:

  1. 包裹太多;
  2. 编程错误,例如\newdimen在命令的定义中说。

在情况 1 中,加载

\usepackage{etex}

就在行后\documentclass。对于情况 2,请更正定义。

如果你正在加载morefloatsmanyfoot,则添加

\reserveinserts{28}

加载后即可etex;这对于满足这些包的需求是必要的。

笔记

这个技巧与插入类的分配机制有关,它使用“高”编号的寄存器;例如,插入类\@mpfootnotes使用编号为 254 的寄存器,而最后分配的寄存器使用 234。插入类保留类型为 、 、 和 的寄存器\count\dimen当然\skip\box\insert保留分配的编号。相反,\newcounter或等命令\newlength从 11 开始向上。

当最后分配的计数器或长度对应于数字 233 时,下一个请求将导致(使用普通 LaTeX)消息No room。通过加载etex,在这种情况下,系统将分配扩展池中的第一个空闲寄存器,即从 256 到 32767。

morefloatsmanyfoot分配了 18 和 10 个插入类;但是,根据加载顺序,这可能会导致冲突;假设在它们之前加载的包分配了\count最多 220 个寄存器:那么就没有空间容纳新的插入类了。

命令\reserveinserts{28}通过假装 206 至 233 寄存器是已经占用,因此当最后分配的寄存器为 217 时,对新寄存器的请求将直接进入扩展池。这样,morefloats并且manyfoot可以通过占用肯定空闲的插槽安全地进行分配,与包加载顺序无关(分配命令经过方便的修补,不会干扰插入类分配的过程)。

正如 Stephen 在评论中所说,如果morefloats加载了超过 18 个额外的浮点数(这是默认值),则 的参数应进行相应修改。如果您还使用 ,则\reserveinserts只需将 的浮点数加 10 即可。morefloatsmanyfoot

2015 年发布的 LaTeX 更新

随着 2015 年 1 月 1 日 LaTeX 的发布,扩展分配机制已经融入内核,因此etex只要使用支持 e-TeX 扩展的引擎,就不再需要加载,过去十年发布的 TeX 发行版应该都是如此。

请注意,不支持此类扩展的旧引擎etex无论如何都不会接受加载。

morefloats此外,也不再需要加载,因为新内核提供了命令\extrafloats,无需发出\reserveinserts。若要在浮动队列中分配超过默认的 18 个框,请使用\extrafloats{20}(或您需要的任何数字)。

该包的其他功能etex(寄存器的本地分配)现在由该包提供elocalloc

答案2

这是常见问题解答,答案在https://texfaq.org/FAQ-noroom

相关内容