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