我想创建一个宏,以便在投影仪演示中生成相同的图,但数据略有不同。但在我向宏中添加参数之前,似乎存在问题。下面是演示该问题的 MWE。
第一个框架包含绘图并且它可以工作,而第二个框架具有与宏相同的绘图,但它不显示绘制的点。
\documentclass{beamer}
\usepackage{pgfplots}
\begin{document}
\newcommand{\showplot}{%
\begin{tikzpicture}
\begin{axis}
\addplot table {
xval yval
1 7
2 8
};
\end{axis}
\end{tikzpicture}
}
\begin{frame}[fragile]{Example works}
\begin{tikzpicture}
\begin{axis}
\addplot table {
xval yval
1 7
2 8
};
\end{axis}
\end{tikzpicture}
\end{frame}
\begin{frame}[fragile]{Example doesn't work}
\showplot
\end{frame}
\end{document}
答案1
这似乎是将数据放在里面的问题,\addplot
可以通过将其移动到文件中来解决filecontents
。我不知道这个问题的原因,所以我无法给出一个以不同方式工作的答案,尽管这很可能是可能的:
\documentclass{beamer}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents}{table.txt}
xval yval
1 7
2 8
\end{filecontents}
\newcommand{\showplot}{%
\begin{tikzpicture}
\begin{axis}
\addplot table {
xval yval
1 7
2 8
};
\end{axis}
\end{tikzpicture}
}
\newcommand{\showplotthatworks}{%
\begin{tikzpicture}
\begin{axis}
\addplot table {table.txt};
\end{axis}
\end{tikzpicture}
}
\begin{document}
\begin{frame}[fragile]{Example works}
\begin{tikzpicture}
\begin{axis}
\addplot table {
xval yval
1 7
2 8
};
\end{axis}
\end{tikzpicture}
\end{frame}
\begin{frame}[fragile]{Example works using command}
\showplotthatworks
\end{frame}
\begin{frame}[fragile]{Example doesn't work}
\showplot
\end{frame}
\end{document}
生产
答案2
出于好奇,我尝试使用保存框而不是宏。初步结果并不成功,但通过添加显式行分隔符可以解决问题。宏也同样有效。
\documentclass{beamer}
\usepackage{pgfplots}
\newsavebox{\showplot}
\savebox{\showplot}{%
\begin{tikzpicture}
\begin{axis}
\addplot table[row sep=\\] {
xval yval\\
1 7\\
2 8\\
};
\end{axis}
\end{tikzpicture}%
}
\begin{document}
\begin{frame}[fragile]{Example works}
\begin{tikzpicture}
\begin{axis}
\addplot table {
xval yval
1 7
2 8
};
\end{axis}
\end{tikzpicture}
\end{frame}
\begin{frame}{Example is not fragile.}
\usebox\showplot
\end{frame}
\end{document}