La pregunta en resumen es:¿Existe un controlador para lograr lo que \pgfkeysvalueof
hace la macro de bajo nivel o debería implementarlo yo mismo?Si es así, ¿es lo siguiente una implementación razonable?
\pgfkeysdef{/handlers/.value}{%
\pgfkeysvalueof{\pgfkeyscurrentpath}%
}
Antecedentes / Comentarios / Línea de pensamientos / Ejemplo
Profundizando en el pgfkeys
mundo y tratando de entender lo que sucede detrás de escena, comencé a leer la sección.Gestión de clavesdelpgf
manual(artículo 86 a la página 946 en la versión 3.1.1). A pesar de que todo está contenido en "sólo" 25 páginas, la densidad de información es definitivamente alta y, por lo tanto, la probabilidad de que me haya perdido algún punto es bastante alta. Por eso leí algunos hilos por aquí (1,2,3) antes/durante la realización de alguna práctica.
Aún así, estoy un poco sorprendido por un aspecto del pgfkeys
paquete. Deesta buena respuestaEstá bastante claro que a key
puede almacenar tanto una acción como un valor. Y como el =
signo no es sinónimo de asignación, hay que actuar de manera diferente dependiendo del significado que deba <key>=<value>
tener (es decir, ¿es <value>
un valor o en realidad algo que se le debe dar a la acción?). Suponiendo que tenga un valor puro key
(es decir, sin ninguna acción asociada), podría tener sentido marcar su valor según sea necesario.
\pgfkeys{/my color/.initial = red, /my color/.value required}
En este punto, ya no es cierto que \pgfkeys{<full path of key>}
recuperaremos el valor, ya que no estamos autorizados a usar la clave sin un valor. Uno de losotras maneraspara recuperar el valor se debe utilizar. Hasta ahora, todo bien. Ahora, a pesar de que \pgfkeysvalueof
parece la respuesta más simple en este caso, el manual advierte repetidamente sobre la "no necesidad general" de usar este tipo de comandos de bajo nivel. Por ejemplo, en la página 948,
Cada clave (puede) almacenar algunos tokens y existen comandos, que se describen a continuación, para configurar, obtener y cambiar los tokens almacenados en una clave. Sin embargo, rara vez utilizará estos comandos directamente. Más bien, la forma estándar de usar las teclas es el
\pgfkeys
comando o algún comando que las use internamente como, por ejemplo,\tikzset
. Por lo tanto, es posible que desee omitir los siguientes comandos y continuar con la siguiente subsección.
También me gusta el uso de controladores para mantenerme en un nivel superior de abstracción. Entonces, tratando de recuperar el valor de la clave, /my color
busqué un controlador, pero en mi caso no veo ninguna razón para pasar por una macro (es decir, /.get
no /store in
son bienvenidos). Y aquí me di cuenta de que no parece haber disponible ningún controlador para simplemente recuperar el valor.
Pregunta extra:
¿Es una buena filosofía intentar utilizar manipuladores exclusivamente en la medida de lo posible? Me parecen una interfaz de nivel superior y por eso lo diría.
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}