尽管我将其外部化,但 TeX 容量还是超出了

尽管我将其外部化,但 TeX 容量还是超出了

这是我的 MWE:

documentclass[10pt, a4paper, twoside, ngerman]{scrartcl} 
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{siunitx}    
\usepackage{geometry}
\usepackage{tikz}       
\usepackage{pgfplots}  

\usepgfplotslibrary{colormaps, groupplots,external}
\usetikzlibrary{pgfplots.colormaps}
\tikzexternalize
\tikzsetexternalprefix{external_figs/}

\begin{document}
    
\begin{figure}
    \centering
    \input{fig.tex}
\end{figure}

\end{document}

该图是一个表面图,其中包含大量数据点,我无法进一步采样。我使用 TeXstudio 作为 TeX 环境和 Pdflatex,并使用以下参数

pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %.tex

我仍然收到错误

TeX capacity exceeded, sorry [main memory size=3000000]. 

我知道可以使用 LuaLaTeX(我在之前的工作中已经使用过),但是它的问题是(曾经是),如果文件包含更多这样的占用大量内存的图像,那么构建文件总是需要很长时间(显然,每次我构建文档时,所有图像都会被重新编译,即使它们没有改变)。

谁能想到一个好的、稳定的、可持续的解决方案?

答案1

我曾经有一个项目,其中有很多(30+)非常大,有些从 tikz 图表导出的图表超过 10k R,可能与您的类似(lualatex MikTex 2.9、win10 x64、8GB RAM),我也遇到了类似的问题。

我编辑了文件

texmfapp.ini

C:\Program Files\MiKTeX\miktex\config

最后一切都按照这些价值观运作

main_memory = 79999999

save_size = 79999

extra_mem_bot = 79999999

extra_mem_top = 79999999

font_mem_size = 799999

pool_size = 7999999

buf_size = 7999999

stack size = 200000

max-strings = 79999999

这是反复试验的结果。我不知道每个参数的具体影响。

这个答案是我以前的答案的复刻

再次:!TeX 容量超出,抱歉 [保存大小=500000](LuaLaTeX、MikTeX)

然后我逐个编译了这些图(最大的图最多 15 分钟!)最后,在编译大型图时监控 CPU 和内存,我发现所有 4 个 CPU 几乎都处于 100% 状态,内存使用率为 80-90%。然后使用此配置将它们插入到 LaTeX 文档中

\tikzexternalize[%
up to date check={simple},
prefix=./GRAPHS/md5/]% Folder needs to be created before compiling

\tikzset{external/system call={%
        lualatex \tikzexternalcheckshellescape
        -halt-on-error -shell-escape -interaction=batchmode
        -jobname "\image" "\texsource"}}

以避免对图表进行二次编辑。有多种检查更改的选项,以避免重新编辑。

但有些检查每次都要花 20-30 秒,非常长!
现在,事后如果再聪明一点,我想我可以插入 pdf 生成的文件,而不是原始的 tikz 文件,一旦每个最终版本都得到达成和批准。

看看 http://www.bakoma-tex.com/doc/latex/pgfplots/pgfplots.pdf

请参阅第 6 节了解更多详细说明。

相关内容