我想使用 执行计算\pgfmathparse
,然后将其存储\pgfmathresult
为 a 的值pgfkey
。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\pgfkeys{/junk/.initial=0}
\pgfmathparse{5+10}
\pgfkeys{/junk=\pgfmathresult}
junk = \pgfkeysvalueof{/junk}\par
\pgfmathparse{8*5}
% This second use of \pgfmathparse will change the contents of \pgfmathresult.
% The key value will now be changed to the new contents of \pgfmathresult.
junk is now = \pbfkeysvalueof{/junk}/par
\end{document}
代码的输出是:
junk = 15.0
junk is now = 40.0
因此看起来键的值指向宏的内容。如果宏的内容发生变化,则键的值也会发生变化。
这不是我想要的。我希望键的值是宏的值。如果宏的值发生变化,那么键的值应该保持不变。
我尝试使用
\pgfmathsetmacro{\tempmacro}{5+30}
\pgfkeys{/junk=\tempmacro}
但如果我\tempmacro
稍后将其用于其他用途
\pgfmathsetmacro{\tempmacro}{8*5}
然后再次将键的值更改为宏的新值。
我不想为每个存储的键值定义一个宏。在我看来,这违背了使用 的目的pgfkeys
。我可以只使用宏,但我真的很想使用键。
我也尝试了帖子中的建议将 \pgfmathresult 存储在变量中,但结果是一样的。
答案1
您有两到四个选择(因为\pgfmathresult
已经完全展开,所以四个选择没有区别)。
密钥处理程序
/.expanded
类似于\edef
(如果在里面使用它,则推荐\pgfkeys{…}
):\pgfkeys{/junk/.expanded=\pgfmathresult}
密钥处理程序
/.expand once
只做/.expand twice
足以\expandafters
扩展给定值一次或两次的事情。\pgfkeys{/junk/.expand once=\pgfmathresult} \pgfkeys{/junk/.expand twice=\pgfmathresult}
我推荐宏
\pgfkeyslet
如果你不需要这个\pgfkeys
。\pgfkeyslet{/junk}\pgfmathresult
这只是执行
\expandafter\let\csname pgfk@/junk\endcsname\pgfmathresult