我遇到了一个问题,尽管使用了tikz/external
库,但多个图形中只有一个被重新创建。我创建了一个 MWE,它只用两个图形显示了相同的效果。
下面是我用 编译的主要文件pdflatex -shell-escape file
。
\documentclass{article}
\usepackage{tikz,pgfplots,tikzscale}
\usetikzlibrary{external}
\tikzexternalize[prefix=figures/]
\pgfplotsset{compat=newest}
\graphicspath{ {./figures/}{./figures-tikz/} }
\newcommand{\figFilename}{}
\begin{document}
\begin{figure}[t!]
\renewcommand{\figFilename}{scalability-plot-all-sbb-2-optima}
\centering
\tikzpicturedependsonfile{\figFilename.tikz}
\tikzsetnextfilename{\figFilename}
\includegraphics[width=\textwidth,axisratio=1]{\figFilename.tikz}
\caption{Scalability plot for dDE, MPC, dDE$^-$ and a hill climber on the Scalable-Building-Block problem.}
\label{fig:\figFilename}
\end{figure}
\begin{figure}[t!]
\renewcommand{\figFilename}{scalability-plot-all-sbb-2-optima-log-y}
\centering
\tikzpicturedependsonfile{\figFilename.tikz}
\tikzsetnextfilename{\figFilename}
\includegraphics[width=\textwidth,axisratio=1]{\figFilename.tikz}
\caption{Same as in Figure~\ref{fig:scalability-plot-all-sbb-2-optima}, but y axis is in logscale.}
\label{fig:\figFilename}
\end{figure}
\end{document}
每次运行 时,第一个图都会重新创建pdflatex
。我尝试更改两者的顺序,但没有什么不同——带有文件名的图scalability-plot-all-sbb-2-optima
总是会重新创建,即使另一个图是相同的,但带有semilogyaxis
。TikZ
两者的文件都只有五个addplot
命令,它们从五个不同的 .dat 文件加载数据。在这里显示所有内容会占用大量空间,所以这里有一个关联整个目录结构,包括.tex
、.tikz
和.dat
文件。
我发现如果我只保留一个 addplot,则不会重新创建图形。我想知道这是否是一个错误,是否LaTeX
被我的目录结构混淆了,或者这是否只是我的一个错误。
答案1
由于我对 LaTeX 的了解有限,我决定检查日志文件 ( file.log
) 以找出问题所在。我注意到,在导致图片重新生成的转换命令之后,出现了以下错误:
Overfull \hbox (17.03157pt too wide) in paragraph at lines 1--76
[][]
[]
这让我相信它tikzscale
无法将图片缩放到我要求的精确尺寸,这导致了两者之间的不匹配。tikzscale
图片的预期尺寸与实际尺寸不匹配。实际上所以我做的是按照这回答从 x 和 y 标签周围删除空格(基本上尝试帮助tikzscale
)。
问题现已修复。Overfull \hbox
警告不再出现,图片也不再每次都重新生成。我不知道这是预期的行为还是一个错误。