Abrufen des Werts von pgfkey, der einen obligatorischen Wert hat

Abrufen des Werts von pgfkey, der einen obligatorischen Wert hat

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 pgfkeysWelt einzutauchen und zu verstehen, was hinter den Kulissen vor sich geht, begann ich den Abschnitt zu lesenSchlüsselverwaltungdespgfHandbuch(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 pgfkeysPakets.diese nette Antwortes ist ganz klar, dass in keysowohl 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 \pgfkeysvalueofin 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 \pgfkeysBefehl 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 colorhabe ich nach einem Handler gesucht, aber in meinem Fall sehe ich keinen Grund, ein Makro zu verwenden ( /.getund /store insind 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}

verwandte Informationen