tikz 轴中 \foreach 内的未定义控制序列

tikz 轴中 \foreach 内的未定义控制序列

运行以下代码时出现错误:

\begin{frame}
\frametitle{MWE}
\begin{tikzpicture}
    \begin{axis}[declare function={f(\x)=\x^3-3*\x^2+\x;}]
        \addplot[red] {f(x)};
        \pgfmathsetmacro{\a}{-0.15}
        \coordinate (A) at (axis cs: \a, {f(\a)});
        \foreach \dx in {1.0, 0.5, 0.2, 0.1, 0.05}{
            \coordinate (b) at (axis cs: {\a+\dx}, {f(\a+\dx)});
        }
    \end{axis}
\end{tikzpicture}
\end{frame}

错误:`!未定义的控制序列。轴 cs:{\a +\dx

},{f(\ a + \ dx)}`

\coordinate循环外的命令有效(即)\coordinate (A) at (axis cs: \a, {f(\a)});

我将非常感激任何能帮助找出问题所在的东西。

答案1

基于\foreach 在轴环境中不起作用,以下解决方案似乎有效

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[declare function={f(\x)=\x^3-3*\x^2+\x;}]
        \addplot[red] {f(x)};
        \pgfmathsetmacro{\a}{-0.15}
        \coordinate (A) at (axis cs: \a, {f(\a)});
        \foreach \dx in {1.0, 0.5, 0.2, 0.1, 0.05}{
            \edef\temp{\noexpand\coordinate (b) at (axis cs: {\a+\dx}, {f(\a+\dx)});}
            \temp
        }
    \end{axis}
\end{tikzpicture}
\end{document}

编辑:

第一次尝试时,我对上面链接中提供的第二种方法有点犹豫。但现在我也测试了这种方法。两种方法都有效。实际上我更喜欢第二种方法,因为它不包含那么多“奇怪”的命令。

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[declare function={f(\x)=\x^3-3*\x^2+\x;}]
            \addplot[red] {f(x)};
            \pgfmathsetmacro{\a}{-0.15}
            \coordinate (A) at (axis cs: \a, {f(\a)});
            \pgfplotsinvokeforeach{1.0, 0.5, 0.2, 0.1, 0.05}{
                \coordinate (b) at (axis cs: {\a+#1}, {f(\a+#1)});
            }
        \end{axis}
    \end{tikzpicture}
\end{document}

相关内容