PGFplots - `\addplot` 和 `\foreach` 无法编译

PGFplots - `\addplot` 和 `\foreach` 无法编译

我正在尝试使用一些 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}

相关内容