Извлечение значения pgfkey, имеющего обязательное значение

Извлечение значения pgfkey, имеющего обязательное значение

Короче говоря, вопрос таков:Есть ли обработчик, позволяющий реализовать то, что делает низкоуровневый \pgfkeysvalueofмакрос, или мне следует реализовать его самостоятельно?Если да, то является ли следующее разумным вариантом реализации?

\pgfkeysdef{/handlers/.value}{%
    \pgfkeysvalueof{\pgfkeyscurrentpath}%
}

Предыстория / Комментарии / Ход мыслей / Пример

Углубляясь в pgfkeysмир и пытаясь понять, что происходит за кулисами, я начал читать разделКлючевой менеджментпринадлежащийpgfруководство(раздел 86 на странице 946 в версии 3.1.1). Несмотря на то, что все это содержится на "всего" 25 страницах, плотность информации определенно высока, и поэтому вероятность того, что я что-то упустил, довольно высока. Вот почему я прочитал несколько тем здесь (1,2,3) до/во время практики.

Но все же я немного удивлен одним аспектом упаковки pgfkeys.этот хороший ответсовершенно ясно, что a keyможет хранить как действие, так и значение. И поскольку знак =не является синонимом присваивания, действовать нужно по-разному в зависимости от того, какое значение <key>=<value>должен иметь (т. е. является ли он <value>значением или на самом деле чем-то, что должно быть дано действию?). Предположим, что есть чистое значение key(т. е. без какого-либо связанного с ним действия), может иметь смысл пометить его значение как требуемое.

\pgfkeys{/my color/.initial = red, /my color/.value required}

На этом этапе больше не верно, что \pgfkeys{<full path of key>}извлечет значение, поскольку мы не имеем права использовать ключ без значения. Один издругие способыдля извлечения значения необходимо использовать. Пока все хорошо. Теперь, несмотря на \pgfkeysvalueofкажущийся самый простой ответ в этом случае, руководство как бы неоднократно предупреждает о "общей ненужности" использования такого рода низкоуровневых команд. Например, на странице 948,

Каждый ключ (может) хранить некоторые токены, и существуют команды, описанные ниже, для установки, получения и изменения токенов, хранящихся в ключе. Однако вы будете очень редко использовать эти команды напрямую. Вместо этого стандартным способом использования ключей является команда \pgfkeysили какая-то команда, которая использует его внутренне, например, \tikzset. Поэтому вы можете пропустить следующие команды и перейти к следующему подразделу.

Мне также нравится использование обработчиков, чтобы оставаться на более высоком уровне абстракции. Поэтому, пытаясь получить значение ключа, /my colorя искал обработчик, но в моем случае я не вижу смысла использовать макрос (т. е. /.getи /store inне приветствуются). И тут я понял, что обработчика, чтобы просто получить значение, похоже, нет.

Бонусный вопрос:

Хорошая ли философия — пытаться использовать обработчики исключительно по возможности? Мне они кажутся интерфейсом более высокого уровня, и поэтому я бы так сказал.


МВЭ:

\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}

Связанный контент