\pstree 和交叉分支

\pstree 和交叉分支

仍然是 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 distancesibling 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 distancechild

\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}

相关内容