檢索具有強制值的 pgfkey 值

檢索具有強制值的 pgfkey 值

簡而言之,問題是:是否有一個處理程序來實現低階\pgfkeysvalueof巨集的功能,或者我應該自己實現它?如果是這樣,下面的實施是否合理?

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

背景/評論/思路/範例

深入世界pgfkeys並試圖了解幕後發生的事情我開始閱讀這一部分密鑰管理pgf手動的(3.1.1 版第 946 頁第 86 節)。儘管所有內容都包含在「僅」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}

相關內容