我感觉我在这里遗漏了一些非常基本的东西。我试图将值存储在 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}