beamer 中 pgfplots 内的宏

beamer 中 pgfplots 内的宏

我想创建一个宏,以便在投影仪演示中生成相同的图,但数据略有不同。但在我向宏中添加参数之前,似乎存在问题。下面是演示该问题的 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}

相关内容