我有一个问题已经以某种形式讨论过了,例如这里和这里但我无法根据那里给出的提示/解决方案来解决它。
请考虑以下示例:
% !TeX TS-program = pdflatex
\documentclass{article}
\usepackage{tikz,pgfplots,filecontents,tikzscale}
\usetikzlibrary{external}
\usepgfplotslibrary{external}
\tikzexternalize[mode=list and make,prefix=tikz/]
\begin{filecontents*}{fig1.tikz}
\begin{tikzpicture}
\begin{axis}[domain=0:2]
\addplot[red,mark=o] {sin(x)};
\label{pgf:plot1}
\end{axis}
\end{tikzpicture}
\end{filecontents*}
\begin{filecontents*}{fig2.tikz}
\begin{tikzpicture}
\begin{axis}[domain=0:2, legend to name=mylegend]
\addplot[blue,mark=square] {cos(x)};
\addlegendentry{cos}
\addlegendimage{/pgfplots/refstyle={pgf:plot1}}\addlegendentry{sin}%
\end{axis}
\end{tikzpicture}
\end{filecontents*}
\begin{document}
\begin{figure}
\tikzsetnextfilename{mylegend}%
\ref{mylegend}\\
\tikzsetnextfilename{fig1}%
\includegraphics{fig1.tikz}
\tikzsetnextfilename{fig2}%
\includegraphics{fig2.tikz}
\end{figure}
\end{document}
为了确保我总是能够经过充分的先前pdflatex
运行进行重新编译,我使用了以下虚拟脚本:
#!/bin/bash
function c () {
echo "========== PDFLATEX ========="
pdflatex -shell-escape -synctex=1 -interaction=nonstopmode "main".tex
echo "========== END PDFLATEX ========"
}
rm tikz/*
rm main.aux
rm main.figlist
rm main.makefile
rm fig1*
rm fig2*
rm main-figure*
mkdir tikz
c
c
make -f main.makefile -j4 # to compile fig1, fig2
c
c
make -f main.makefile -j4 # to compile the legend (and for some reasons also again fig2)
c
其中的图例sin
没有正确的线条和标记样式。
编辑:
我想\tikzset{external/optimize=false}
这是一种可行的但非常不方便的解决方法。