是否可以将 \pgfmathresult 存储在 pgfkey 中?

是否可以将 \pgfmathresult 存储在 pgfkey 中?

我想使用 执行计算\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
    

相关内容