pgf 关键定义问题

pgf 关键定义问题

在下一个示例中,我不明白/tikz/Cote/aspect键未由命令定义pgfkeys,以及为什么它未被参数修改\draw。如何访问相同的键定义?

\documentclass{article}
\usepackage{tikz}

\pgfkeys{/tikz/Cote/.cd,
    aspect/.default=o,
    aspect/.store in=\aspect,
    aspect=o
} 

\begin{document}

\begin{tikzpicture}
\draw[/tikz/Cote/aspect=(F)] (0,2) -- (5,2) node {\pgfkeysifdefined{/tikz/Cote/aspect}{yes}{no}};
\draw[/tikz/Cote/aspect=F,red] (0,0) -- (5,0) node {\pgfkeysvalueof{/tikz/Cote/aspect}};
\end{tikzpicture}

\pgfkeyssetvalue{/tikz/Cote/aspect}{Hello, world!}

\begin{tikzpicture}
\draw[/tikz/Cote/aspect=(F)] (0,2) -- (5,2) node {\pgfkeysifdefined{/tikz/Cote/aspect}{yes}{no}};
\draw[/tikz/Cote/aspect=F,red] (0,0) -- (5,0) node {\pgfkeysvalueof{/tikz/Cote/aspect}};
\end{tikzpicture}

\end{document}

答案1

我认为你想要的是

\pgfkeys{/tikz/Cote/.cd,
    aspect/.default=o,
    aspect/.store in=\aspect,
    aspect=\relax
}
\begin{tikzpicture}
\draw[Cote/aspect=(F)] (0,2) -- (5,2) node {\if\aspect\relax no \else yes \fi};
\draw[Cote/aspect=F,red] (0,0) -- (5,0) node {\aspect};
\end{tikzpicture}

基本上,您误用了 key/val 机制:如果您使用该store in=\macro机制,则要获取值,您应该只使用\macro。因此,您需要设置某种方法来检查是否\macro已设置为有意义的内容,以检测是否aspect已设置。上面我选择使用 来\relax指示未设置密钥。

如果您想使用\pgfkeysifdefined\pgfkeysvalueof宏,您不应该使用.store in更原始的 pgfkeys 设置。为此,请仔细阅读手册。

小提示:在\draw[keys]的路径中keys已经有了/tikz,因此您只需写入即可设置您的密钥\draw[Cote/aspect=bla]

相关内容