Как избежать того, чтобы клавиша, назначенная временной переменной, впоследствии изменилась?

Как избежать того, чтобы клавиша, назначенная временной переменной, впоследствии изменилась?

Я чувствую, что мне не хватает чего-то очень простого. Я пытаюсь сохранить значения в 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 также изменяет предыдущее назначение?
  • Как избежать изменения ранее назначенных значений?

решение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}

введите описание изображения здесь

Связанный контент