我在 tikz 中绘制了一棵树,其中节点具有不同的样式(此简化示例具有具有a
或样式的节点b
)。从节点到子节点的箭头始终相同,我想根据父节点的样式对边/箭头应用不同的样式。
\begin{tikzpicture}[
a/.style={circle, draw=black, edge from parent/.style=myEdge1},
b/.style={rectangle, draw=red, edge from parent/.style=myEdge2},
myEdge1/.code={
\draw[-] \tikzparentnode -- \tikzchildnode;
}
myEdge2/.code={
% No edge or applying a different style
}
]
\node[a]{}
child {node[a] {}}
child {
node[b] {no arrows from this node}
child {node[a] {no arrow to this node}}
child {node[b] {no arrow to this node}}
}
child {node[a] {}}
;
\end{tikzpicture}
它看起来应该是这样的:
首先,当edge from parent/.style=myEdge1
在样式(a
或b
)内定义时,上述代码不起作用。只有当我将其放在子节点正后方时,即才起作用child[edge from parent/.style=myEdge1]
。其次(这可能会解决第一个问题),我宁愿需要edge to child
,edge from parent
因为父节点的样式将决定是否必须绘制箭头。但是edge to child
tikz 文档中没有这样的东西。有没有比告诉每个子节点是否应该从其父节点获得箭头更简单的解决方案,以便 tikz 自动采用父节点样式的边缘样式?
答案1
every child
如果使用该样式,您可以设置仅适用于子项的选项。
该no edge from this parent
样式的设置方式是,使用该样式的子项的子项不会绘制边缘。
你也draw one
可以设置边可以拥有的任何其他选项。这才不是包含一个\draw
命令!
对于树中的边,有一个特殊的键用于设置路径:edge from parent path
。
默认路径是
(\tikzparentnode\tikzparentanchor) -- (\tikzchildnode\tikzchildanchor)
代码
\documentclass[tikz,convert=false]{standalone}
\begin{document}
\begin{tikzpicture}[
no edge from this parent/.style={
every child/.append style={
edge from parent/.style={draw=none}}},
a/.style={circle, draw=black},
b/.style={rectangle, draw=red},
]
\node[a] {}
child {node[a] {}}
child[no edge from this parent] {node[b] {no}
child {node[a] {no}}
child {node[b] {no}}
}
child {node[a] {}}
;
\end{tikzpicture}
\end{document}