在 pgfplots/tikz 命令中使用 pgfmath 声明函数

在 pgfplots/tikz 命令中使用 pgfmath 声明函数

以下代码的注释行给出了错误。似乎用 声明的函数\pgfmathdeclarefunction不适用于tikz命令...

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\pgfmathdeclarefunction{myfunct}{3}{\pgfmathparse{#1+#2*#3}}

\begin{document}
\begin{tikzpicture}
\begin{axis}
    \addplot {myfunct(1,2,x)};
%   \node at (axis cs:2,{myfunct(1,2,2)}) {aaa};
%   \draw (axis cs:2,{myfunct(1,2,2)}) -- (axis cs:0,5);
\end{axis}
\end{tikzpicture}
\end{document} 

修复此问题的一种方法是定义如下宏:

\pgfmathsetmacro\mymacro{myfunct(1,2,2)}

并使用\mymacro而不是myfunct(1,2,2)但我想知道是否有办法直接使用myfunct(1,2,2)而避免宏定义。

答案1

您所遇到的情况是由于 pgfplots 1.8 及更高版本不对 进行表达式解析axis cs。换句话说:它期望 这样的纯数字42,但不是2^2

这意味着您的数学函数是正确的,并且它可以在任何纯 tikz 操作中起作用(axis cs是 pgfplots 的附加组件)。

当前 pgfplots 稳定版本 1.9 已对此进行了改进:现在axis cs接受数学表达式。请注意,截至撰写本文时,1.9 版本还不到一周,因此 MikTeX 等可能需要一些时间才能接受它。升级 pgfplots 将解决该问题。

相关内容