我正在尝试使用 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 评论。因此,您可以使用完全可扩展的方法(您可能可以将其包装到某些函数中,例如 get
和set
,使用其中之一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)下次!