![跨层级](https://linux22.com/image/264805/%E8%B7%A8%E5%B1%82%E7%BA%A7.png)
如果您能告诉我绘制交叉层次结构最优雅的方法(如下所示),我将不胜感激:
X
/\
Y Z
/\/\
p q t
q 有两个父母 Y 和 Z。
答案1
这是一种 hack,因为它利用了节点之间的距离在各个级别之间不会改变的事实,因此默认情况下分支会重叠:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node {X}
child {
node {Y}
child {
node {p}
}
child {
node {q}
}
}
child {
node {Z}
child {
node {\phantom{q}}
}
child {
node {t}
}
}
;
\end{tikzpicture}
\end{document}
从 Z 到 q 的边实际上并不是到 q 的边,而是到位于第一个 q 之上的不可见的 q 的边。
更好的方法是命名节点并在树后绘制额外的边。这样,如果 q 节点移动,额外的边仍将指向它。您可以创建一个missing
子节点来保持间距,就像实际有第一个子节点一样。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
level 1/.style={sibling distance=20mm},
level 2/.style={sibling distance=15mm}
]
\node {X}
child {
node {Y}
child {
node {p}
}
child {
node (q) {q}
}
}
child {
node (Z) {Z}
child[missing] {
node {q}
}
child {
node {t}
}
}
;
\draw (Z) -- (q);
\end{tikzpicture}
\end{document}