仍然是 TeX 新手。我正在使用 PSTricks pstree,并希望有一棵树,其分支交叉:
I
/ \
G H
/ \ / \
F / E
/ \ / \
/ / \
/ / \ \
A B C D
如果从 ASCII 图片上看不清楚,
F -> A C
G -> F D
H -> B E
A < B < C < D.
我通常的树代码如下:
\pstree{ I }{
\pstree{ G }{ ... }
\pstree{ H }{ ... }
}
答案1
这是使用的解决方案pst-tree
。您可以调整参数treesep
,也许还可以添加一些空节点\Tn
以获得所需的间距。
为了让线交叉,我(可能作弊了)给了相关节点名称,然后使用 连接它们\ncline
。
\documentclass{article}
\usepackage{pst-tree}
\begin{document}
\pstree[nodesep=3pt]{\TR{I}}{%
\pstree{\TR[name=G]{G}}%
{%
\pstree{\TR{F}}%
{\TR{A}\TR[name=B,edge=none]{B}\TR{C}\TR[name=D,edge=none]{D}}%
\Tn\Tn%
}%
\pstree{\TR[name=H]{H}}%
{\Tn\TR{E}}%
}% end the tree
\ncline[nodesep=3pt]{H}{B}
\ncline[nodesep=3pt]{G}{D}
\end{document}
答案2
您可以使用 TikZ 来实现这一点。您可以使用[missing]
创建“空”分支,这些分支保持正确的间距,但不绘制任何对象。通过将第三级的level distance
和sibling distance
与前两级的和加倍,分支将交叉,而分支的角度在整个树中保持不变(我不确定这是否是您真正想要的):
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
level 3/.style={
level distance=30mm,
sibling distance=30mm
}
]
\node {I}
child {
node {G}
child {
node {F}
child {
node {A}
}
child {
node {C}
}
}
child {
child [missing]
child{
node {D}
}
}
}
child {
node {H}
child {
child {
node {B}
}
child [missing]
}
child {
node {E}
}
};
\end{tikzpicture}
\end{document}
或者,您可以只指定各个level distance
分支以获得所需的位置:sibling distance
child
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
level distance=15mm,
sibling distance=15mm,
level 3/.style={
}
]
\node {I}
child {
node {G}
child {
node {F}
child {
node {A}
}
child {
node {C}
}
}
child [level distance=30mm, sibling distance=30mm] {
node {D}
}
}
child {
node {H}
child [level distance=30mm, sibling distance=45mm] {
node {B}
}
child {
node {E}
}
};
\end{tikzpicture}
\end{document}