TikZ 外部化与图片列表

TikZ 外部化与图片列表

我在每个图中都使用pgf和 的组合。这是我第一次想在 latex 中创建一个图形列表,我意识到 externalize 函数与和 的tikzexternalize组合效果不佳。MWE:groupplotsubcaption

主文本

\documentclass{article} 
\usepackage{pgfplots}
    \pgfplotsset{compat=1.7,max space between ticks=50pt}
    \usepgfplotslibrary{groupplots}

    \usetikzlibrary{external}
    %    \tikzexternalize[prefix=TikZPictures/]


\usepackage{caption}
\usepackage[list=true]{subcaption}

\begin{document}
    \section{Hello World}
    \begin{figure}[!t]
        \centering
        \input{plots.tikz}
        \caption{Two beautiful plots.}
        \label{more plots}
    \end{figure}

    \listoffigures
\end{document}

图.tikz:

% !TeX root = ../../main.tex
\begin{tikzpicture}
\begin{groupplot}[group style={group size=2 by 1,
        horizontal sep =0.1\textwidth},
    height=0.45\textwidth,width=0.45\textwidth,]


    \nextgroupplot[ylabel=$y_1$,
        xlabel=$x$,]
    \addplot[blue,domain=0:5,] {exp(-0.5*x)*sin(rad(x))};

    \node[text width=1cm,inner sep=0pt,anchor=north west] (Subplot a) at (rel axis cs: 0,1)
    {\subcaption[Second plot first part]{\label{2. plot a}}};


    \nextgroupplot[ylabel=$y_2$,
        xlabel=$x$,]
    \addplot[blue,domain=-1:1,] {-x*x + 2*x};
    \node[text width=1cm,inner sep=0pt,anchor=north west] (Subplot a) at (rel axis cs: 0,1)
    {\subcaption[Second plot first part]{\label{2. plot b}}};

\end{groupplot}
\end{tikzpicture}

当我使用子图时tikzexternalize,子图会从图列表中消失。有解决方法吗?完全删除tikzexternalize不是一个选项,但我认为对于最终版本,我可以这样做,如果它是唯一的解决方案。

答案1

我认为问题在于\labels 出现在tikzpicture环境中。 (请参阅 TikZ 手册底部第 597 页,尽管这里不是很清楚。)

避免该问题的两种方法:

  1. 使用“方法 (a)”创建图像,即使用不同的外部化模式。这涉及在单独的步骤中创建图片,例如运行Makefile。不过,TikZ 可以自动为您写入该文件。在这种情况下,您可以将外部化模式设置为类似于list and make

  2. \labels 从tikzpicture环境中移除。例如,使用subfigure环境 而不是\subcaption

就我个人而言,我会选择方法 2,但您可能有不同的要求。无论如何,这里有一种方法可以实现方法 2,它允许按照您当前的配置进行外部化,以便图像作为正常编译的一部分自动创建(当然--shell-escape,使用)。

\begin{filecontents}{\jobname.tikz}
  \begin{subfigure}[b]{.5\linewidth}
    \centering
    \begin{tikzpicture}
      \begin{groupplot}[group style={group size=2 by 1,horizontal sep =0.1\textwidth},height=0.95\linewidth,width=0.95\linewidth,]
        \nextgroupplot[ylabel=$y_1$,
        xlabel=$x$,]
        \addplot[blue,domain=0:5,] {exp(-0.5*x)*sin(rad(x))};
      \end{groupplot}
    \end{tikzpicture}
    \caption[Second plot first part]{\label{2. plot b}}
  \end{subfigure}%
  \begin{subfigure}[b]{.5\linewidth}
    \centering
    \begin{tikzpicture}
      \begin{groupplot}[group style={group size=2 by 1,horizontal sep =0.1\textwidth},height=0.95\linewidth,width=0.95\linewidth,]
        \nextgroupplot[ylabel=$y_2$,
        xlabel=$x$,]
        \addplot[blue,domain=-1:1,] {-x*x + 2*x};
      \end{groupplot}
    \end{tikzpicture}
    \caption[Second plot first part]{\label{2. plot a}}
  \end{subfigure}
\end{filecontents}

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7,max space between ticks=50pt}
\usepgfplotslibrary{groupplots}
\usetikzlibrary{external}
\tikzexternalize
\usepackage{caption}
\usepackage[list=true]{subcaption}

\begin{document}
\section{Hello World}
\begin{figure}[!t]
  \centering
  \input{\jobname.tikz}
  \caption{Two beautiful plots.}
  \label{more plots}
\end{figure}

\ref{2. plot b} \ref{2. plot a}

\listoffigures
\end{document}

子图和外化

相关内容