我问这个问题大约一年前,但运气不佳。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