检索具有强制值的 pgfkey 的值

检索具有强制值的 pgfkey 的值

简而言之,问题是:是否有处理程序来实现低级\pgfkeysvalueof宏的功能,或者我应该自己实现它?如果是的话,以下是合理的实现方式吗?

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

背景 / 评论 / 思路 / 例子

深入pgfkeys世界,并试图理解幕后发生的事情,我开始阅读以下部分密钥管理pgf手动的(版本 3.1.1 中的第 86 节第 946 页)。尽管所有内容都包含在“仅”25 页中,但信息密度肯定很高,因此我错过某些要点的可能性相当高。这就是为什么我阅读了这里的一些帖子(123) 在进行某些练习之前/期间。

不过,我对pgfkeys这个很好的答案很明显,akey可以同时存储操作和值。由于符号=不是赋值的同义词,因此必须根据 应<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}

相关内容