使用 pgfmath 生成 pgfkeys

使用 pgfmath 生成 pgfkeys

我正在尝试使用 pgfkeys 创建一个简单的变量系统,但我希望能够使用其他变量创建新的“变量”,请参阅此 MWE,我曾尝试使用 \pgfmathprintnumber。我认为问题可能是直接输入 \pgfmathresult 会造成麻烦。

\newcommand{\var}[2]{
\pgfmathparse{#2}
\pgfkeys{/var/#1/.initial=\pgfmathprintnumber{\pgfmathresult}}
}

\newcommand{\get}[1]{
\pgfkeys{/var/#1}
}


\begin{document}
    ...
    
    \var{a}{2+2}
    \get{a} % 4.0
    
    \var{a}{\get{a}+5} % (this will break)
    \get{a} % expected: 9.0
\end{document}

目的是在大型 TikZ 程序中使用这些值,这样我就不需要重复进行 \def 巨型计算。

答案1

我建议你探索一下declare function语法。你可以在每个由 评估的字段中使用你定义的变量和函数pgfmath,这非常方便。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikzset{declare function={
    a1=3.14;
    dopp(\x)=2*\x;
    b=dopp(a1);
    }
}
\pgfmathparse{b+1}\pgfmathprintnumber{\pgfmathresult}
\end{document}

...虽然确实这种“变量”不容易重新定义,但请参见下面的 OP 评论。因此,您可以使用完全可扩展的方法(您可能可以将其包装到某些函数中,例如 getset,使用其中之一etoolbox或一点 LaTeX3 魔法,现在没有时间了):

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xfp}
\begin{document}
    \edef\varA{\fpeval{2+2}}
    \varA

    \edef\varA{\fpeval{\varA+5}}
    \varA
\end{document}

在此处输入图片描述


PS 请发布一个可编译的最小工作示例(MWE)下次!

相关内容