关于在 Overleaf 中使用 \usepgfplotslibrary{external} 和 \tikzexternalize

关于在 Overleaf 中使用 \usepgfplotslibrary{external} 和 \tikzexternalize

我正在读pgfplots今天我阅读了手册,并遇到了externalpgfplots 库。它应该有助于减少编译时间并避免重新生成每个pgfplots图形。

我们(我和另外两位同事)目前正在 Overleaf 在线编辑器中撰写一篇文章,其中的图表包含从外部.csv文件读取的约 3000 条数据条目。因此,编译时间使工作流程变得缓慢。

我想采用这种“将每个tikzpicture环境自动转换为外部图形”的技术。

我如何告诉 Overleaf 的服务器tex以上述方式编译文件?

我尝试了以下操作:

正文如下main.tex

% file main.tex
\documentclass{article}
%% Font encoding and input encoding %%
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{multicol} % To write in 2 columns
%% To include figures %%
\usepackage{standalone,import,pgfplots,pdfpages,graphicx,float}
\pgfplotsset{compat=1.7}

%% And here is the call to the external method
%% to reduce compilation time
\usepgfplotslibrary{external}
\tikzexternalize % Activated!
\begin{document}
Article text....
\begin{figure*}
    \includestandalone[width=\textwidth]{./figures/plot1}
    \caption{Caption for the figure.}
    \label{fig:tikz:figure1}
\end{figure*}
Text text text.
\end{document}

该文件plot1.tex编译时没有错误,因此我没有列出其内容。我确实在其前言中添加了两个命令(\usepgfplotslibrary{external}\tikzexternalize)。它是一个standalone文档类。

最后,我创建了一个latexmkrc包含以下指令的文件:

$latex = 'pdftex -shell-escape main.tex %O %S';

(我是从这里)。我认为它与 pgfplots 手册第 3.2.6 节(第 23 页)中的内容一致,为 提供了命令行开关pdflatex

并且,层次文件结构如下:

root folder
├main.tex
└───figures
| │ plot1.tex
│ │ plot2.tex
│ │ plot3.tex
├latexmkrc

如果您不知道,Overleaf 允许用户在项目设置中选择编译器。我尝试了它的pdfLatexLaTeX编译器来执行此任务,但都失败了。

我得到的错误是

软件包 tikz 错误:抱歉,系统调用“pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "output-figure0" "\def\tikzexternalrealjob{output}\input{output}"”未产生可用的输出文件“output-figure0”(预期为 .pdf:.jpg:.jpeg:.png: 之一)。请确认您已启用系统调用。对于 pdflatex,这是“pdflatex -shell-escape”。有时它也被命名为“write 18”或类似名称。或者命令可能只是失败了?错误消息可以在“output-figure0.log”中找到。如果您现在继续,我将尝试排版图片。

答案1

独立包的调用需要有以下选项mode=buildnew

\usepackage[mode=buildnew]{standalone}

如果没有该选项,standalone 实际上无法完成问题中给出的任务:(a) 将特定.tex文件编译为图形文件,然后在主文档中使用该图形文件,以及 (b) 仅在文件发生更改时重建图形文件.tex。默认情况下,standalone 不会编译文件.tex,而只是输入文件并使用结果,而不是进行单独的编译。

更糟糕的是:使用默认设置,对于独立包,该\includestandalone命令会干扰命令的使用\tikzexternalize,因此当standalone尝试输入.tex文件时会失败,并给出问题中发现的奇怪错误。

事后看来,我们可以在日志文件中看到这些症状。特别是,其中main-figure0.log有一条消息说“命令 '\includegraphics [width=\textwidth ]{plottry.tex}' 已被优化掉。”(此外,还给出了一个可能不是最佳的建议,说明如何处理它。)

相关内容