在缺乏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 命令构建。
为了说明这一建议,让我们检查一下为什么您的代码在每种情况下都会产生这样的结果。关键是:绘制顺序和范围。特别是:
当路径包含路径和节点时,路径会先渲染,节点则随后渲染。请注意,这纯粹是关于渲染。它们是在路径上出现时计算的。只是将节点运送到放置在其他路径组件顶部的盒子中。
里面的内容
append after command
是在组内执行的。路径在绘制和填充方面是统一处理的。具体来说,要么所有组件都填充,要么都不填充,并且都使用相同的颜色。路径构造结束时执行的操作和颜色是将要使用的操作和颜色。
节点路径与路径的其余部分是分开的,可以单独设置样式。不过,节点中的内容
append after command
不是节点的一部分,而是主路径的一部分。
所以:
“缺少圆圈”。该问题
[fill=red]
出现在组内,因此在路径构造结束时不可见。因此它没有效果。即使将命令放在fill
组外,填充颜色仍不是红色,因为红色仅在组内设置。“显示,但不显示红色”。与上文一样,
[fill=red]
没有效果。但[draw]
将操作设置为draw
以便绘制它们。由于没有颜色生效,因此使用默认颜色(黑色)。“忽略样式选项”。与前两个相同。这
[fill=green]
是路径末尾唯一有效的规范。“节点隐藏圆圈”。这是因为节点是在路径之后渲染的,所以它们位于顶部。