我希望能够“全局”声明一个函数以供 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 自定义数学引擎更多细节。