pgfkeys:以某种风格执行“本地”/.cd

pgfkeys:以某种风格执行“本地”/.cd

假设我定义了一些特殊节点,这些节点使用嵌套相当深的几个 pgfkey。我想.cd在定义样式时使用命令;但随后我很难从目录中“返回”。让我们看这个例子:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{dir/two/.initial=1, dir/one/.initial=1}
\tikzset{my/.style={circle, draw, dir/.cd, one=0}}
\tikzset{my2/.style={circle, draw, dir/.cd, one=0, /tikz/.cd}}
\begin{tikzpicture}[
    ]
    \node[my] at(0,0) {A};
    \node[my, color=blue] at (1,0) {B};
    \node[my2, color=blue] at (2,0) {C};
\end{tikzpicture}
\end{document}

第二个node失败

keycdup.tex|10 error| Package pgfkeys Error: I do not know the key '/tikz/dir/color', to which you passed 'blue', and I am going to ignore it. Perhaps you misspelled it.

现在,这种风格my2解决了这个问题,明确.cd指出了tikz键的根源……但我觉得它一点也不优雅。

有没有办法在.style定义中“限定范围”.cd命令?

答案1

您可以定义一个indir如下所示的键,它使用\pgfqkeys似乎是为此而制作的:

在此处输入图片描述

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{dir/two/.initial=1,
dir/one/.initial=1,indir/.code=\pgfqkeys{/tikz/dir}{#1}}
\tikzset{my/.style={circle, draw, indir={one=0}}}
\tikzset{my2/.style={circle, draw, dir/.cd, one=0, /tikz/.cd}}
\begin{tikzpicture}[
    ]
    \node[my] at(0,0) {A};
    \node[my, color=blue] at (1,0) {B};
    \node[my2, color=blue] at (2,0) {C};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容