有没有办法创建一个具有超过 9 个参数的 tikzset 函数?

有没有办法创建一个具有超过 9 个参数的 tikzset 函数?

我可以\tikzset通过编写如下代码来创建一个具有 9 个参数的函数:

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

%--->Function definition
\tikzset
{
    declare function=
    {
        P(\x,\azero,\aone,\atwo,\athree,\afour,\afive,\asix,\aseven)=\azero+\aone*\x+\atwo*\x^2+\athree*\x^3+\afour*\x^4+\afive*x^5+\asix*x^6+\aseven*x^7; 
    }
}

%--->Plot function
\begin{axis}
\addplot 
[
]
{P(x,1,1,1,1,1,1,1,1)}; 
\end{axis}

\end{tikzpicture}
\end{document}

它按预期工作,产生下图:

在此处输入图片描述

但是如果我向函数添加另一个参数,\aeight编译后就会发生错误:

! Illegal parameter number in definition of \pgfmathP@.

参数数量似乎有限制,不能超过 9 个。有什么办法可以解决这个问题吗?

[笔记:我需要函数有超过 9 个参数(实际上是 10 个),因为它将在代码中多次使用,并且这些参数的值完全不同。因为我不想每次调用时都定义一个新函数(这会使代码变得庞大且不吸引人),所以最好使用具有 10 个参数的函数。]

答案1

问题的答案

可以声明接受超过 9 个参数的函数吗?

是的因为在 pgf 手册 v3.1.4 第 1032 页上写道

在此处输入图片描述

但是,针对您的具体情况,我建议使用另一种方法:pgf keys。在我看来,除了其中一个参数之外,其他所有参数都是一些参数,它们将在图中采用固定值。(如果函数有多个“真正变化”的变量,则适用类似的陈述。)所以我会将它们存储在 pgf keys 中。除了解决您的问题之外,这样做还有一个好处,那就是您可以为这些参数分配一些初始(或默认)值,并且只需更改与这些默认值不同的值。以下示例说明了这一点。

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\newcommand\pv[1]{\pgfkeysvalueof{/tikz/mypars/a#1}}
%--->Function definition
\tikzset{
    declare function=
    {
        P(\x)=\pv{0}+\pv{1}*\x+\pv{2}*\x^2+\pv{3}*\x^3+\pv{4}*\x^4+
        \pv{5}*\x^5+\pv{6}*\x^6+\pv{7}*\x^7+\pv{8}*\x^8+\pv{9}*\x^9; 
    },mypars/.cd,a0/.initial=1,a1/.initial=1,a2/.initial=1,
    a3/.initial=1,a4/.initial=1,a5/.initial=1,a6/.initial=1,
    a7/.initial=1,a8/.initial=1,a9/.initial=1,
}

%--->Plot function
\begin{axis}
\addplot[/tikz/mypars/.cd,a8=0,a9=0]{P(x)}; 
\addplot[color=blue,/tikz/mypars/.cd,a8=1,a9=0]{P(x)}; 
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

(当然你可以把这些情节弄得流畅等等,但这不是本篇问答的目的。)

相关内容