![pgf 关键定义问题](https://linux22.com/image/371353/pgf%20%E5%85%B3%E9%94%AE%E5%AE%9A%E4%B9%89%E9%97%AE%E9%A2%98.png)
在下一个示例中,我不明白/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]
。