\pgfkeysvalueof 如何工作?

\pgfkeysvalueof 如何工作?

通过这个最小的例子

\documentclass{report}
\usepackage{tikz}

\begin{document}
\tikzset{
line width  = 5cm,
CC/.initial = 7cm
}
It doesn't works :\pgfkeysvalueof{/tikz/line width}

It works : \pgfkeysvalueof{/tikz/CC}
\end{document}

我无法获取线宽的值,而 CC 却无法获取。为什么?是不是因为 CC 像纯文本一样存储,而线宽不是?我该如何实现我的目标?

答案1

所显示的区别与工作原理无关\pgfkeysvalueof。此宏只是扩展为给定的键,即它被定义为\csname pgfk@#1\endcsname,因此您获得\pgfk@/tikz/CC\pgfk@/tikz/line width(使用\csname您可以在宏名称中包含空格和其他非字母)。

不同之处在于这些键的定义方式。/tikz/line width被定义为.code={\tikz@semiaddlinewidth {#1}}。这定义了一个名为的宏\pgfk@/tikz/line width/.@cmd,它保存该代码并将值存储在其他地方。如果您使用键 PGF/TikZ(即pgfkeys),则会检查 是否.@cmd已定义并执行该代码。

现在,/tikz/CC使用 来定义.initial,它将7cm值直接存储在键中,即在宏中。然后,您可以使用扩展到此宏\pgfk@/tikz/CC再次获取该值。\pgfkeysvalueof{/tikz/CC}

因此,您不能只使用\pgfkeysvalueof您自己未定义的任意键并希望它们能正常工作。内部实现可能比简单的分配更复杂。对于线宽,我可以为您提供帮助。最终的线宽存储在\pgflinewidth维度寄存器中,即,您可以使用像 这样的因子来使用它0.5\pgflinewidth

相关内容