在 pgfplots 中使用变量作为坐标

在 pgfplots 中使用变量作为坐标

我有以下代码:

\begin{tikzpicture}
  \begin{axis}[domain=0:40]
    \addplot {x};
    \def\a{\pgfmathparse{1+1}\pgfmathresult}
    %\draw (\a,20)--(axis cs:20,0);
    \node at (axis cs:30,30) {\a};
  \end{axis}
\end{tikzpicture}

节点给出了正确的输出,但绘制命令却无法按预期工作。为什么?(取消注释\draw会破坏代码。)

答案1

\pgfmathparse宏不可扩展,不能在坐标内使用。将\pgfmathresult其放在后面,在另一个宏内,如\a或单独放置,不会改变任何东西。您需要放置结果,如\pgfmathresult,它可以在坐标中扩展。但是\pgfmathresult被覆盖任何内部数学运算,因此不应使用!要么使用\let\a=\pgfmathresult=可选)或\pgfmathsetmacro{\a}{1+1}(推荐),正如您和 Jake 分别发布的那样,要么将\edef\a{\pgfmathresult}的当前值存储\pgfmathresult到其中\a,然后可以在坐标内安全地使用。

您的原始代码之所以可以\a在节点内容 ( {\a}) 内工作,是因为该部分被排版为一个框。框的内容不需要完全展开,但会被执行,也就是说,会\pgfmathparse按正常方式执行,然后\pgfmathresult立即排版,之后才能被任何其他代码更改。

答案2

我确实说不出为什么,但以下方法可以正常工作:

\pgfmathparse{1+1}\let\a=\pgfmathresult

相关内容