如何全局声明 PGFplots 函数

如何全局声明 PGFplots 函数

我希望能够“全局”声明一个函数以供 PGFplots 使用。也就是说,我希望能够一次性声明一个函数,并且能够使用它,而不必在每个图上都声明它。

以下是我现在正在做的事情的 MWE:

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}[declare function = {func(\x) = \x^2;}]
\begin{axis}
\addplot[domain=0:1] {func(x)};
\end{axis}
\end{tikzpicture}

\vspace{1em}

\begin{tikzpicture}[declare function = {func(\x) = \x^2;}]
\begin{axis}
\addplot[domain=0:1] {func(x)};
\end{axis}
\end{tikzpicture}
\end{document}

本质上我们的目标是

declare global function = {func{\x} = \x^2;}

在标题中的某个地方,然后能够在整个过程中使用 func。有什么办法可以做到这一点吗?

注意:我特别想在 PGFplots 中执行此操作,因此“原始”tikz 中的内容对我没有太大帮助。

答案1

非常简单:添加到\tikzset{declare function = {func(\x) = \x^2;}}某处(不在组内)。

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}
\tikzset{declare function = {func(\x) = \x^2;}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[domain=0:1] {func(x)};
\end{axis}
\end{tikzpicture}

\vspace{1em}

\begin{tikzpicture}
\begin{axis}
\addplot[domain=0:1] {func(x)};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

然而, 我建议不是除非您绝对确定要将此名称分配给函数“永远”。

原因是逆过程要困难得多。为了理解这一点,请考虑

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}
\tikzset{declare function = {func(\x) = \x^2;}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[domain=0:1] {func(x)};
\end{axis}
\end{tikzpicture}

\vspace{1em}

\begin{tikzpicture}[declare function = {func(\x) = \x^2;}]
\begin{axis}
\addplot[domain=0:1] {func(x)};
\end{axis}
\end{tikzpicture}
\end{document}

这会引发错误

!包 PGF 数学错误:函数“func”已存在。

也就是说,与普通的 pgf 密钥不同,您可以不是只需使用declare function键在本地覆盖该函数即可。出于这个原因,我建议将函数定义保留在本地,或者,如果绝对必要,请为它们赋予非常独特的名称。当然,还有命令\pgfmathdeclarefunction*允许您覆盖您所做的定义并希望修改,请参阅部分95 自定义数学引擎更多细节。

相关内容