如何避免分配了临时变量的键稍后发生变化?

如何避免分配了临时变量的键稍后发生变化?

我感觉我在这里遗漏了一些非常基本的东西。我试图将值存储在 pgfkeys 中,以便以后可以检索它们。但是,我必须使用一些计算,如果我重复使用宏,所有存储的值也会发生变化。这里有一个 MWE:

\documentclass[varwidth]{standalone}

\usepackage{pgfkeys}
\usepackage{pgfmath}

\begin{document}

--- 1st interation\\
\pgfmathtruncatemacro\tmp{0}
\pgfkeys{/x/.initial=\tmp}
x (pgfkeys): \pgfkeys{/x}\\
x (pgfkeysvalueof): \pgfkeysvalueof{/x}

--- 2nd interation\\
\pgfmathtruncatemacro\tmp{1}
x (pgfkeys): \pgfkeys{/x}\\
x (pgfkeysvalueof): \pgfkeysvalueof{/x}

\end{document}

生成的文档如下:

— 1st interation
x (pgfkeys): 0
x (pgfkeysvalueof): 0
— 2nd interation
x (pgfkeys): 1
x (pgfkeysvalueof): 1

如您所见,即使我没有触碰它,pgfkey x 的值也会发生变化。我期待理解:

  • 为什么 \tmp var 中的后续更改也会改变之前的赋值?
  • 如何避免改变先前分配的值?

答案1

如何扩展键以避免这种情况发生?这样,您就不会告诉键具有宏的值,而是在设置键时将\tmp值扩展为。\tmp

\documentclass[varwidth]{standalone}

\usepackage{pgfkeys}
\usepackage{pgfmath}

\begin{document}

--- 1st interation\\
\pgfmathtruncatemacro\tmp{0}
\pgfkeys{/x/.initial/.expanded=\tmp}
x (pgfkeys): \pgfkeys{/x}\\
x (pgfkeysvalueof): \pgfkeysvalueof{/x}

--- 2nd interation\\
\pgfmathtruncatemacro\tmp{1}
x (pgfkeys): \pgfkeys{/x}\\
x (pgfkeysvalueof): \pgfkeysvalueof{/x}

\end{document}

enter image description here

相关内容