pgfkeys - 为什么 .store 和 pgfkeysvalueof 不同?

pgfkeys - 为什么 .store 和 pgfkeysvalueof 不同?

在这个例子中.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}

相关内容