TikZ/PGF 关键过滤器:覆盖颜色

TikZ/PGF 关键过滤器:覆盖颜色

我正在尝试覆盖图片内的颜色键,但不是在封闭范围内(即路径/绘制/填充指令)。

我的目标是能够设置路径的颜色,并让其影响图片。也就是说,图片可能具有自定义阴影,我希望此阴影采用路径颜色作为色调。但是,仍然应该允许覆盖图片的局部颜色。

该示例展示了我认为应该如何根据文档进行编码,但过滤器并没有像我预期的那样工作。在示例中,我创建了一个本地名称空间,/tikz/example因为最初的“颜色”样式破坏了/tikz/color键。过滤也需要一个与之配合的系列。

我对过滤的理解是,在这种情况下,应该创建/注册过滤器tikz/example,然后在必要时激活它,即pic actions执行之前和之后。

我希望看到的输出是带有蓝线的白色背景块,上面覆盖着三个较小的块,每个块分别用蓝色、红色和绿色阴影表示。

\documentclass[tikz]{standalone}

\usetikzlibrary{calc}

\tikzset{
 basis/.initial=1em,
 block/.is family,
 /tikz/pic actions/.install key filter=block,
 block/.pic={
  \draw[block/.activate family, pic actions, block/.deactivate family]
    let \n{basis}={\pgfkeysvalueof{/tikz/basis}} in 
      (-\n{basis},-\n{basis}) rectangle  (\n{basis},\n{basis});
 },
 block/.cd,
 colour/.style={/tikz/top color   =#1!50!white,
                /tikz/bottom color=#1!50!black},
}

\begin{document}

\begin{tikzpicture}
\draw[color=blue] 
     ( 0, 0) pic               {block}
     (-1,-1) pic[color=green]  {block}
      rectangle
      (1,1)  pic[color=red]    {block};
\end{tikzpicture}

\end{document}

答案1

抱歉,但我不明白为什么你需要所有这些“块系列”。图片中包含pic actions当前颜色设置,默认情况下是路径的颜色设置,但你可以在图片样式中覆盖它们。

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}

\tikzset{
 basis/.initial=1em,
 block/.pic={
  \draw[pic actions]
    let \n{basis}={\pgfkeysvalueof{/tikz/basis}} in
      (-\n{basis},-\n{basis}) rectangle  (\n{basis},\n{basis});
 },
 colour/.style={top color   =#1!50!white,
                bottom color=#1!50!black},
}

\begin{document}

  \begin{tikzpicture}
    \draw[blue]
      ( 0, 0) pic                         {block}
      (-1,-1) pic[colour=green, draw=red] {block}
        rectangle
      (1,1)  pic[colour=red]              {block};
  \end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容