Die Frage ist kurz gesagt:Gibt es einen Handler, um das zu erreichen, was das Low-Level \pgfkeysvalueof
-Makro macht, oder muss ich ihn selbst implementieren?Wenn ja, ist das Folgende eine sinnvolle Implementierung?
\pgfkeysdef{/handlers/.value}{%
\pgfkeysvalueof{\pgfkeyscurrentpath}%
}
Hintergrund / Kommentare / Gedankengänge / Beispiele
Um tiefer in die pgfkeys
Welt einzutauchen und zu verstehen, was hinter den Kulissen vor sich geht, begann ich den Abschnitt zu lesenSchlüsselverwaltungdespgf
Handbuch(Abschnitt 86 auf Seite 946 in der Version 3.1.1). Obwohl alles auf "nur" 25 Seiten steht, ist die Informationsdichte definitiv hoch und damit ist die Wahrscheinlichkeit, dass ich einen Punkt übersehen habe, ziemlich hoch. Deshalb habe ich mir hier ein paar Threads durchgelesen (1,2,3) vor/während des Übens.
Dennoch bin ich ein wenig überrascht über einen Aspekt des pgfkeys
Pakets.diese nette Antwortes ist ganz klar, dass in key
sowohl eine Aktion als auch ein Wert gespeichert werden kann. Und da das =
Zeichen kein Synonym für Zuweisung ist, muss man je nach der Bedeutung, die in <key>=<value>
enthalten sein soll (also ist <value>
der Aktion ein Wert oder tatsächlich etwas zuzuweisen?), unterschiedlich vorgehen. Angenommen, es handelt sich um einen reinen Wert key
(also ohne zugeordnete Aktion), kann es sinnvoll sein, seinen Wert als erforderlich zu kennzeichnen.
\pgfkeys{/my color/.initial = red, /my color/.value required}
An diesem Punkt ist es nicht mehr möglich, \pgfkeys{<full path of key>}
den Wert abzurufen, da wir nicht berechtigt sind, den Schlüssel ohne Wert zu verwenden. Einer derandere Möglichkeitenzum Abrufen des Werts verwendet werden muss. So weit, so gut. Obwohl dies \pgfkeysvalueof
in diesem Fall die einfachste Lösung zu sein scheint, warnt das Handbuch wiederholt vor der „generellen Nichtnotwendigkeit“, diese Art von Low-Level-Befehlen zu verwenden. Auf Seite 948 heißt es beispielsweise:
Jeder Schlüssel (kann) einige Token speichern und es gibt Befehle, die unten beschrieben werden, um die in einem Schlüssel gespeicherten Token festzulegen, abzurufen und zu ändern. Sie werden diese Befehle jedoch nur sehr selten direkt verwenden. Die Standardmethode zum Verwenden von Schlüsseln ist vielmehr der
\pgfkeys
Befehl oder ein Befehl, der ihn intern verwendet, wie beispielsweise\tikzset
. Daher möchten Sie möglicherweise die folgenden Befehle überspringen und mit dem nächsten Unterabschnitt fortfahren.
Ich mag auch die Verwendung von Handlern, um auf einer höheren Abstraktionsebene zu bleiben. Beim Versuch, den Wert des Schlüssels abzurufen, /my color
habe ich nach einem Handler gesucht, aber in meinem Fall sehe ich keinen Grund, ein Makro zu verwenden ( /.get
und /store in
sind also nicht willkommen). Und hier wurde mir klar, dass anscheinend kein Handler zum einfachen Abrufen des Werts verfügbar ist.
Bonus-Frage:
Ist es eine gute Philosophie, so weit wie möglich ausschließlich Handler zu verwenden? Für mich sehen sie wie eine Schnittstelle auf höherer Ebene aus, und deshalb würde ich das sagen.
MWE:
\documentclass[border=5mm, varwidth]{standalone}
\usepackage{pgfkeys}
\pgfkeysdef{/handlers/.value}{%
\pgfkeysvalueof{\pgfkeyscurrentpath}%
}
\pgfkeys{/my color/.initial = red, /my color/.value required}
\begin{document}
%My color is \pgfkeys{/my color}. %This clearly does not compile
My color is \pgfkeysvalueof{/my color}.\\
My color is \pgfkeys{/my color/.value}.
\end{document}