在这个例子中.store
,\pgfkeysvalueof
永远不会匹配,为什么?
如何通过 tikzset 命令修改键的值?
\documentclass{article}
\usepackage{tikz}
\pgfkeys{/tikz/Cote/.cd,
aspect/.default=o,
aspect/.store in=\aspect,
foo/.initial=a,
foo/.store in=\foo,
}
\begin{document}
% pgfkeysvalueof is empty - what .initial is for ? never appears
% \aspect not defined
\pgfkeysvalueof{/tikz/Cote/aspect} -- %\aspect
\tikzset{/tikz/Cote/aspect/.initial=m}
% pgfkeysvalueof is m
% \aspect not defined
\pgfkeysvalueof{/tikz/Cote/aspect} -- %\aspect
\tikzset{/tikz/Cote/aspect=bob}
% pgfkeysvalueof is m
% \aspect is bob
\pgfkeysvalueof{/tikz/Cote/aspect} -- \aspect
\pgfkeys{/tikz/Cote/.cd,
aspect=p}
% pgfkeysvalueof is m
% \aspect not defined
\pgfkeysvalueof{/tikz/Cote/aspect} -- \aspect
% pgfkeysvalueof is a
% \foo not defined
\pgfkeysvalueof{/tikz/Cote/foo} -- %\foo
\tikzset{/tikz/Cote/foo=bob}
% pgfkeysvalueof is a
% \foo not defined
\pgfkeysvalueof{/tikz/Cote/foo} -- \foo
\end{document}
答案1
正如您在之前的问题的回答中所提到的,您混淆了不同种类的事物。
\tikzset{
Cote/.cd,
aspect/.store in=\aspect,
aspect=beginning value of aspect,
}
只是将传递给给定宏中的键的值存储起来。因此\aspect
检索beginning value of aspect
。您不能使用或使用设置初始值.initial
默认值.default
。这是另一种情况。就我个人而言,我几乎总是使用.store in
,几乎从不使用.initial
或.default
,我发现这更麻烦。(然而,在 L3 中,我一直使用等效项,因为在那里它看起来并不麻烦。)
因此,我们想要的是,
Then \verb|\aspect| will retrieve the \aspect.
然而,
\tikzset{
Cote/.cd,
aspect/.initial=initial value of aspect,
}
做了一些不同的事情。这里的值存储在键本身中,因此必须使用\pgfkeysvalueof
或必须使用一些中间步骤将值放入宏中来检索。因此,我们现在想要类似
Then \verb|\pgfkeysvalueof{/tikz/Cote/aspect}| will retrieve the \pgfkeysvalueof{/tikz/Cote/aspect}.
最后,
\tikzset{
Cote/.search also={/tikz},
Cote/.cd,
aspect/.style={draw=#1},
aspect/.default=red,
}
表示aspect
可以带值或不带值使用。如果传递了值,则将使用该值。如果aspect
不带值使用,则将使用 的默认值red
。因此,我们可能会有类似
\begin{tikzpicture}[line width=2pt]
\draw (0,1) -- (1,1);
\draw [Cote/aspect] (0,.5) -- (1,.5);
\draw (0,0) -- (1,0);
\draw [Cote/aspect=blue] (0,-.5) -- (1,-.5);
\draw [Cote/aspect] (0,-1) -- (1,-1);
\end{tikzpicture}
\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikzset{
Cote/.cd,
aspect/.store in=\aspect,
aspect=beginning value of aspect,
}
Then \verb|\aspect| will retrieve the \aspect.
\tikzset{
Cote/.cd,
aspect/.initial=initial value of aspect,
}
Then \verb|\pgfkeysvalueof{/tikz/Cote/aspect}| will retrieve the \pgfkeysvalueof{/tikz/Cote/aspect}.
\tikzset{
Cote/.search also={/tikz},
Cote/.cd,
aspect/.style={draw=#1},
aspect/.default=red,
}
\begin{tikzpicture}[line width=2pt]
\draw (0,1) -- (1,1);
\draw [Cote/aspect] (0,.5) -- (1,.5);
\draw (0,0) -- (1,0);
\draw [Cote/aspect=blue] (0,-.5) -- (1,-.5);
\draw [Cote/aspect] (0,-1) -- (1,-1);
\end{tikzpicture}
\end{document}