简而言之,问题是:是否有处理程序来实现低级\pgfkeysvalueof
宏的功能,或者我应该自己实现它?如果是的话,以下是合理的实现方式吗?
\pgfkeysdef{/handlers/.value}{%
\pgfkeysvalueof{\pgfkeyscurrentpath}%
}
背景 / 评论 / 思路 / 例子
深入pgfkeys
世界,并试图理解幕后发生的事情,我开始阅读以下部分密钥管理的pgf
手动的(版本 3.1.1 中的第 86 节第 946 页)。尽管所有内容都包含在“仅”25 页中,但信息密度肯定很高,因此我错过某些要点的可能性相当高。这就是为什么我阅读了这里的一些帖子(1,2,3) 在进行某些练习之前/期间。
不过,我对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}