这是我的 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 节了解更多详细说明。