外部化时超出 TeX 容量

外部化时超出 TeX 容量

我有几个大型 TikZ 图想要外部化。如果不进行外部化,一切都会正常进行。

文档:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
%\tikzexternalize
\begin{document}
  \input{plot}
\end{document}

输出:

$ pdflatex article
<output omitted>
(./plot.tex) [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
(./article.aux) )</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/
cmr10.pfb>
Output written on article.pdf (1 page, 357026 bytes).
Transcript written on article.log.

但是,当我取消注释时\tikzexternalizepdflatex存在错误。

$ pdflatex article
<output omitted>
(./plot.tex
Runaway text?
[x=1pt,y=1pt] \definecolor {fillColor}{RGB}{255,255,255} \path [use a\ETC.
! TeX capacity exceeded, sorry [main memory size=5000000].
<argument> ... circle ( 1.16); \par \path [dr\ETC.

l.21034 \end{tikzpicture}

!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on article.log.

这是怎么回事?外部化怎么会增加空间消耗?毕竟,外部化的全部意义在于提高编译时的效率和空间消耗。

答案1

你说的没错:外部化的目的是为了减少资源使用。然而,每个优化都会有一些开销。要将图片外部化 TiZ 读取整个环境的内容tikzpicture,并将其传递给引擎的外部运行以生成图片。外部化库以宏的形式传递图片的内容,以便设置一切以制作图片,最终创建同一事物的多个副本。

当您编译文档时,会出现错误消息,询问Runaway text?并告诉您 TeX 的内存已满。

你的plot.tex文件是 1.1 MB,而 TeX 的主内存大小是5000000“内存字数”,或者2.5 兆字节,因此只需复制两份多一点的文件内容就会耗尽空间。

解决方案?使用 TeX 的宏和 TiZ 的样式可以减少输入的大小,同时保持代码的结果。例如,您的文件有 10269 个 (!) 实例

\path[draw=drawColor,line width= 0.4pt,line join=round,line cap=round]

如果你

\tikzset{mydots/.style={draw=drawColor,line width= 0.4pt}}
%,line join=round,line cap=round <-- These two don't do anything here anyway

然后将该选项列表的所有其他出现替换为,mydots您将文件大小减少到 500 kB(足以使其工作)。

您可以进一步定义一个宏

\def\circ(#1,#2){\path[mydots](#1,#2)circle(1.16);}

然后替换所有

\path [mydots] ( something, another) circle (1.16);

经过

\circ(something,another)

这将使文件大小减小到 200 kB。

可以使用 Ti 进一步优化Z 的魔力,但我会把它留给读者作为练习;)

这是为您提供的 200 kB 文件:https://pastebin.com/rJfe4ctx

答案2

如果文档稳定并且您只会对其进行少量修改tikzpicture,则最好将其处理在单独的文件中并将它们作为图像(或input...)包含在内。ltximg脚本您可以执行以下操作:

$ ltximg --subenv --imgdir=mypics --prefix=tkz -o test-out test-in.tex

现在您将拥有一个将环境转换为图像的文档tikzpicture(保留字体的一致性),并且每个tikzpicture环境也将位于单独的文件中(以防您需要进行一些额外的修改)。首先检查文档以查看输入文件必须满足的选项和条件。

相关内容