Forest 导致 PdfLatex 内存耗尽

Forest 导致 PdfLatex 内存耗尽

我问这个问题大约一年前,但运气不佳。MikTexPDFLaTeX已经更新,但错误仍然存​​在:

! TeX capacity exceeded, sorry [save size=50000].

完整源代码位于http://pastebin.com/XHazZ7Ux

错误日志:http://pastebin.com/DtFcT9Cv

与 有相同错误LuaLatex

希望这次有人能够阐明这个限制,为什么会有这个限制,以及如何增加可用于编译的内存量。

答案1

如果我在我的系统上使用以下方式编译

save_size=1000000 lualatex bigforest

我没有得到任何TeX capacity exceeded错误,至少直到

! Dimension too large.
<recently read> \pgf@x 

l.4628 \end{forest}

出现错误。因此,当然可以取消对保存大小的限制(LuaTeX 需要为其分配一些特殊空间,但它可以在运行时扩展)。但是,长度不得超过 2 30 个缩放点,即约 5.75 米(略小于 18.9 英尺)的限制无法取消。

答案2

似乎造成错误的主要原因是 PGF/TikZ,它通过混合对 和 的本地和全局分配导致了保存堆栈\pgf@x累积\pgf@y

由于这两个\dimen寄存器在 PGF 的内部计算中被广泛使用,因此更大的树或更长的文档将耗尽保存堆栈,这是有道理的。

我看到的唯一解决方案是有人检查 PGF/TikZ 代码并修复这些寄存器的使用。它们在 PGF/TikZ 代码中出现了 5313 次;其中 590 次很容易被识别为赋值,因为它们后面跟着=。 :-(

编辑:实际上,认真地讲。\pgf@x\pgf@y在整个 PGF/TikZ 中只在几个(大约 50 个容易识别的)地方全局分配。 如果这些分配可以修复,也许通过引入\pgf@x@global\pgf@y@global,那么任务实际上是可以管理的(这里不考虑第三方包和用户宏……)。

答案3

通过编辑\Program Files (x86)\MiKTeX 2.9\miktex\config\texmf-defaults.ini和更改行解决了这个问题

save_size=1000000 ;;50000

相关内容