
Estou tendo um problema em que apenas uma das várias figuras é recriada, apesar do uso da tikz/external
biblioteca. Criei um MWE que mostra o mesmo efeito com apenas duas figuras.
Abaixo está meu arquivo principal que é compilado com 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}
A primeira figura é recriada toda vez que executo o pdflatex
. Tentei alterar a ordem dos dois, mas não faz diferença --- a figura com o nome do arquivo scalability-plot-all-sbb-2-optima
é aquela que sempre é recriada, embora a outra figura seja idêntica, mas com um semilogyaxis
. Os TikZ
arquivos de ambos são apenas cinco addplot
comandos que carregam dados de cinco arquivos .dat diferentes. Mostrar tudo aqui ocuparia muito espaço, então aqui está umlinkpara toda a estrutura de diretórios, incluindo os .tex
arquivos .tikz
e .dat
.
Descobri que se mantiver apenas um addplot, a figura não será recriada. Eu queria saber se isso é um bug, se LaTeX
está confuso com minha estrutura de diretórios ou se é simplesmente um erro da minha parte.
Responder1
Com meu conhecimento muito limitado de LaTeX, decidi inspecionar o arquivo de log ( file.log
) para tentar identificar o que deu errado. Percebi que logo após o comando convert que faz com que a imagem seja gerada novamente, ocorreu um erro deste tipo:
Overfull \hbox (17.03157pt too wide) in paragraph at lines 1--76
[][]
[]
Isso me levou a acreditar que tikzscale
não era capaz de dimensionar a imagem para o tamanho exato que solicitei, e isso causou uma incompatibilidade entre o que tikzscale
pensava ser o tamanho da imagem e qual era o tamanho da imagem.na verdadeera. Então o que fiz foi seguir as instruções listadas emesseresponda para remover o espaço em branco ao redor dos rótulos x e y (basicamente tente ajudar tikzscale
).
O problema agora está resolvido. O Overfull \hbox
aviso não aparece mais e a imagem não é gerada novamente todas as vezes. Não sei se esse é o comportamento esperado ou se é um bug.