我在每个图中都使用pgf
和 的组合。这是我第一次想在 latex 中创建一个图形列表,我意识到 externalize 函数与和 的tikzexternalize
组合效果不佳。MWE:groupplot
subcaption
主文本
\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
我认为问题在于\label
s 出现在tikzpicture
环境中。 (请参阅 TikZ 手册底部第 597 页,尽管这里不是很清楚。)
避免该问题的两种方法:
使用“方法 (a)”创建图像,即使用不同的外部化模式。这涉及在单独的步骤中创建图片,例如运行
Makefile
。不过,TikZ 可以自动为您写入该文件。在这种情况下,您可以将外部化模式设置为类似于list and make
。将
\label
s 从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}