定义一个新命令来在 tikz 中声明一个函数

定义一个新命令来在 tikz 中声明一个函数

我想使用 绘制 tikz 中的连续分段线性函数declare function。我可以手动构建函数,但我想定义一个新命令来简化此操作。新命令的参数应为函数在 x=0、1 和 2 处的 y 值。

这是我的尝试,后面是输出:

\documentclass{article}
\usepackage{pgfplots,tikz}

\newcommand{\build}[3]{declare function={f(\x)=(\x<=1)*((#2-#1)*\x+#1)+and(\x>1,\x<=2)*((#3-#2)*(\x-1)+#2);}}

\pgfplotsset{compat=1.17}

\begin{document}

\begin{tikzpicture}[declare function={f(\x)=(\x<=1)*(2*\x)+ and(\x>1,\x<=2)*(-2*\x+4);}]
    \begin{axis}[samples at={0,1,2}, ymin=0, ymax=2, ytick={1,2}, xmin=0, xmax=2, xtick={1,2}]
        \addplot{f(x)};
    \end{axis}
\end{tikzpicture}

\begin{tikzpicture}[\build{0}{2}{0}]
    \begin{axis}[samples at={0,1,2}, ymin=0, ymax=2, ytick={1,2}, xmin=0, xmax=2, xtick={1,2}]
        \addplot{f(x)};
    \end{axis}
\end{tikzpicture} 

\end{document}

在此处输入图片描述

第一个分段函数是手工构建的,第二个是我尝试使用新命令绘制相同的函数build。我对的微妙之处理解newcommand不够,几次搜索并没有让我发现明显的错误。我该如何修复我的新命令build以实现我想要的效果?

答案1

你只需要将你的宏转换成一种样式。或者定义一个有多个参数的函数。

\documentclass{article}
\usepackage{pgfplots,tikz}

\tikzset{build/.style n args={3}{declare
function={f(\x)=(\x<=1)*((#2-#1)*\x+#1)+and(\x>1,\x<=2)*((#3-#2)*(\x-1)+#2);}}}
\tikzset{declare function={mypiecewise(\x,\a,\b,\c)=(\x<=1)*((\b-\a)*\x+\a)+and(\x>1,\x<=2)*((\c-\b)*(\x-1)+\b);}}
\pgfplotsset{compat=1.17}

\begin{document}

\begin{tikzpicture}[declare function={f(\x)=(\x<=1)*(2*\x)+ and(\x>1,\x<=2)*(-2*\x+4);}]
    \begin{axis}[samples at={0,1,2}, ymin=0, ymax=2, ytick={1,2}, xmin=0, xmax=2, xtick={1,2}]
        \addplot{f(x)};
    \end{axis}
\end{tikzpicture}

\begin{tikzpicture}[build={0}{2}{0}]
    \begin{axis}[samples at={0,1,2}, ymin=0, ymax=2, ytick={1,2}, xmin=0, xmax=2, xtick={1,2}]
        \addplot{f(x)};
    \end{axis}
\end{tikzpicture} 

\begin{tikzpicture}
    \begin{axis}[samples at={0,1,2}, ymin=0, ymax=2, ytick={1,2}, xmin=0, xmax=2, xtick={1,2}]
        \addplot{mypiecewise(x,0,2,0)};
    \end{axis}
\end{tikzpicture} 
\end{document}

在此处输入图片描述

相关内容