A questão resumidamente é:Existe um manipulador para conseguir o que a \pgfkeysvalueof
macro de baixo nível faz ou devo implementá-lo sozinho?Em caso afirmativo, o seguinte é uma implementação razoável?
\pgfkeysdef{/handlers/.value}{%
\pgfkeysvalueof{\pgfkeyscurrentpath}%
}
Antecedentes / Comentários / Linha de pensamento / Exemplo
Aprofundando-me no pgfkeys
mundo e tentando entender o que está acontecendo nos bastidores, comecei a ler a seçãoGerenciamento de Chavesdopgf
manual(seção 86 na página 946 na versão 3.1.1). Apesar de tudo estar contido em “apenas” 25 páginas, a densidade da informação é definitivamente alta e por isso a probabilidade de eu ter perdido algum ponto é bastante alta. É por isso que li alguns tópicos aqui por aí (1,2,3) antes/durante a prática.
Ainda assim, estou um pouco surpreso com um aspecto do pgfkeys
pacote. Deesta bela respostaé bastante claro que a key
pode armazenar tanto uma ação quanto um valor. E como o =
signo não é sinônimo de atribuição, é preciso agir de forma diferente dependendo do significado que o signo <key>=<value>
deve ter (ou seja, é <value>
um valor ou realmente algo a ser dado à ação?). Supondo que tenha um valor puro key
(ou seja, sem qualquer ação associada), pode fazer sentido marcar o seu valor como necessário.
\pgfkeys{/my color/.initial = red, /my color/.value required}
Neste ponto, não é mais verdade que \pgfkeys{<full path of key>}
irá recuperar o valor, pois não estamos autorizados a usar a chave sem valor. Um dosoutras maneiraspara recuperar o valor deve ser usado. Até agora tudo bem. Agora, apesar de \pgfkeysvalueof
parecer a resposta mais simples neste caso, o manual alerta repetidamente sobre a "não necessidade geral" de usar esse tipo de comando de baixo nível. Por exemplo, na página 948,
Cada chave (pode) armazenar alguns tokens e existem comandos, descritos abaixo, para configurar, obter e alterar os tokens armazenados em uma chave. No entanto, você raramente usará esses comandos diretamente. Em vez disso, a maneira padrão de usar chaves é o
\pgfkeys
comando ou algum comando que as utiliza internamente, como, por exemplo,\tikzset
. Portanto, você pode pular os comandos a seguir e continuar com a próxima subseção.
Também gosto do uso de manipuladores para permanecer em um nível mais alto de abstração. Então tentando recuperar o valor da chave /my color
procurei um manipulador, mas no meu caso não vejo motivo para passar por uma macro (ou seja, /.get
e /store in
não são bem-vindos). E aqui percebi que nenhum manipulador para simplesmente recuperar o valor parece estar disponível.
Pergunta bônus:
É uma boa filosofia tentar usar manipuladores exclusivamente, na medida do possível? Eles me parecem uma interface de nível superior e, portanto, eu diria isso.
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}