将选项传递给“附加在命令后”?

将选项传递给“附加在命令后”?

在缺乏tikz知识的情况下,我尝试创建一个类似节点的形状,其中有两个实心圆。这是我的尝试,但存在以下问题:

  • 附加的路径组件似乎被主节点覆盖。
  • 传递给后续路径组件的选项将被忽略。

梅威瑟:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,positioning,shapes.multipart}
\begin{document}
\tikzset{cell/.style={
  name=#1,
  draw,
  rectangle split,
  rectangle split parts=3,
  rectangle split horizontal=true,
    append after command={%
      coordinate (#1 one) at ($ (#1.east)!1/6!(#1.west)  $)
      coordinate (#1 two) at ($ (#1.east)!5/6!(#1.west)  $)
     [fill=red] (#1 one) circle (2pt)
     [fill=red] (#1 two) circle (2pt)
    },
}}

\begin{tikzpicture}
\node[cell=a,label=left:{missing circles}] at (0,-1) {};
\node[cell=b,above=1ex of a,label=left:{circles show, but not red}]  {} [draw];
\node[cell=c, above=1ex of b,label=left:{circle ignore style options}] {}  [fill=green];
\node[cell=d, above=1ex of c,label=left:{node hides circles},fill=blue!20] {}  [fill=green];
\end{tikzpicture}
\end{document}

上述代码的输出

答案1

这不是定义新形状的好方法。最好使用 定义一个合适的新形状\pgfdeclareshape。您可以从已知形状继承各种属性。另一种方法是使用 new (PGF-CVS),pic这是一种更简单的形状形式,可以从高级 TikZ 命令而不是低级 PGF 命令构建。

为了说明这一建议,让我们检查一下为什么您的代码在每种情况下都会产生这样的结果。关键是:绘制顺序和范围。特别是:

  1. 当路径包含路径和节点时,路径会先渲染,节点则随后渲染。请注意,这纯粹是关于渲染。它们是在路径上出现时计算的。只是将节点运送到放置在其他路径组件顶部的盒子中。

  2. 里面的内容append after command是在组内执行的。

  3. 路径在绘制和填充方面是统一处理的。具体来说,要么所有组件都填充,要么都不填充,并且都使用相同的颜色。路径构造结束时执行的操作和颜色是将要使用的操作和颜色。

  4. 节点路径与路径的其余部分是分开的,可以单独设置样式。不过,节点中的内容append after command不是节点的一部分,而是主路径的一部分。

所以:

  1. “缺少圆圈”。该问题[fill=red]出现在组内,因此在路径构造结束时不可见。因此它没有效果。即使将命令放在fill组外,填充颜色仍不是红色,因为红色仅在组内设置。

  2. “显示,但不显示红色”。与上文一样,[fill=red]没有效果。但[draw]将操作设置为draw以便绘制它们。由于没有颜色生效,因此使用默认颜色(黑色)。

  3. “忽略样式选项”。与前两个相同。这[fill=green]是路径末尾唯一有效的规范。

  4. “节点隐藏圆圈”。这是因为节点是在路径之后渲染的,所以它们位于顶部。

相关内容