Recuperando o valor de pgfkey que possui um valor obrigatório

Recuperando o valor de pgfkey que possui um valor obrigatório

A questão resumidamente é:Existe um manipulador para conseguir o que a \pgfkeysvalueofmacro 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 pgfkeysmundo e tentando entender o que está acontecendo nos bastidores, comecei a ler a seçãoGerenciamento de Chavesdopgfmanual(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 pgfkeyspacote. Deesta bela respostaé bastante claro que a keypode 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 \pgfkeysvalueofparecer 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 \pgfkeyscomando 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 colorprocurei um manipulador, mas no meu caso não vejo motivo para passar por uma macro (ou seja, /.gete /store innã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}

informação relacionada