Wie kann ich verhindern, dass sich ein mit einer temporären Variable zugewiesener Schlüssel nachträglich ändert?

Wie kann ich verhindern, dass sich ein mit einer temporären Variable zugewiesener Schlüssel nachträglich ändert?

Ich habe das Gefühl, dass mir hier etwas ganz Grundlegendes fehlt. Ich versuche, Werte in pgfkeys zu speichern, damit ich sie später abrufen kann. Allerdings muss ich einige Berechnungen durchführen und wenn ich Makros wiederverwende, ändern sich auch alle gespeicherten Werte. Hier ist ein 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}

Das resultierende Dokument sieht wie folgt aus:

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

Wie Sie sehen, hat sich der Wert des pgfkey x geändert, auch wenn ich ihn nicht berührt habe. Ich freue mich darauf, Folgendes zu verstehen:

  • Warum ändert die spätere Änderung der Variable \tmp auch die vorherige Zuweisung?
  • Wie kann ich vermeiden, dass bereits zugewiesene Werte geändert werden?

Antwort1

Wie wäre es, den Schlüssel so zu erweitern, dass dies nicht passiert? Auf diese Weise teilen Sie dem Schlüssel nicht mit, dass er den Wert des Makros haben soll \tmp, sondern der Wert \tmpwird zu dem Zeitpunkt erweitert, zu dem Sie den Schlüssel festlegen.

\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}

Bildbeschreibung hier eingeben

verwandte Informationen