임시 변수가 할당된 키가 나중에 변경되는 것을 어떻게 방지할 수 있나요?

임시 변수가 할당된 키가 나중에 변경되는 것을 어떻게 방지할 수 있나요?

나는 여기에 아주 기본적인 것을 놓치고 있습니다. 나중에 검색할 수 있도록 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}

여기에 이미지 설명을 입력하세요

관련 정보