我正在尝试使用一些 TikZ 和 PGFMath 工具(例如\pgfmathdeclarefunction
和\foreach
)来简化绘图工作。但是,我无法编译以下代码。命令\addplot
和\foreach
命令之间似乎存在不良交互。当注释掉其中任何一个时,它可以很好地编译,但当它们都存在时则不行。
\documentclass{beamer}
\usepackage{pgfplots}
\pgfmathdeclarefunction{f}{1}{%
\pgfmathparse{0.3+0.3*#1-1*#1^2+0.65*#1^3}%
}
\begin{document}
\begin{frame}
\begin{center}
\begin{tikzpicture}
\begin{axis}
\addplot{{f(x)}} node(endofplot)[anchor=west]{$f$};
\foreach \n in {8,12,16}
\node [above] at (\n,0) {$\n$};
\end{axis}
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}
答案1
问题解决了 - 里面的命令\foreach
需要用\edef\temp{\noexpand
和}\temp
标签包裹起来。我会把这个答案放到社区维基上,这样真正了解 TeX 的人就可以解释为什么这样做有效。
\documentclass{beamer}
\usepackage{pgfplots}
\pgfmathdeclarefunction{f}{1}{%
\pgfmathparse{0.3+0.3*#1-1*#1^2+0.65*#1^3}%
}
\begin{document}
\begin{frame}
\begin{center}
\begin{tikzpicture}
\begin{axis}
\addplot{{f(x)}} node(endofplot)[anchor=west]{$f$};
\foreach \n in {8,12,16}
\edef\temp{\noexpand
\node [above] at (\n,0) {$\n$};
}\temp
\end{axis}
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}