Tikz 外部化导致图例样式错误

Tikz 外部化导致图例样式错误

我有一个问题已经以某种形式讨论过了,例如这里这里但我无法根据那里给出的提示/解决方案来解决它。

请考虑以下示例:

% !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}这是一种可行的但非常不方便的解决方法。

相关内容