我想绘制一棵树,其中边缘端点相对于节点的位置取决于节点的内容,并且可能在父边缘和子边缘之间发生变化,以指出两个标签之间的关系。以下是我想要绘制的示例:
请注意,中间节点的子边的位置与其自己的子边的位置不同。(幸运的是,我可以假设节点的所有子边都应位于同一位置:在本例中情况确实如此,但如果中间节点“S(b, c)”有一个子节点“V(b, f)”,情况就不是这样了。)
有没有一种干净的方法来绘制这种树?
编辑:我目前的方法是使用 tikz-qtree:
\documentclass[tikz,border=5pt]{standalone}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\Tree
[.{$R(a, b)$}
[.{$S(b, c)$}
[.{$T(c, d)$} ]
[.{$U(e, c)$} ]
]
];
\end{tikzpicture}
\end{document}
预期结果:
问题在于树的边缘没有清楚地表示从一个节点标签到另一个节点标签的共同元素。遗憾的是,我对 Tikz 或 qtree 经验不多,所以我不知道如何改进这一点……
答案1
这forest
需要大量的手动干预才能工作。但是,这是我现在能想到的最好的办法。(我完全不知道,tikz-qtree
而且我从文档中找不到任何方法来实现这一点。qtree
可能是一种可能性,因为它允许您使用执行 TeX 代码,!
但这样您将失去树本身中的 TiKZ 功能。)
\documentclass[border=5pt, tikz, mult]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
inner sep=1pt
}
[{$R(a, b)$}, parent anchor=-35, anchor=-35
[{$S(b, c)$}, parent anchor=-40
[{$T(c, d)$}, child anchor=90
]
[{$U(e, c)$}, child anchor=45
]
]
]
\end{forest}
\end{document}