使用 TiKZ 绘制树时如何修改树枝之间的距离?

使用 TiKZ 绘制树时如何修改树枝之间的距离?

我想在使用 TiKZ 包绘制树时修改父节点和子节点之间的距离。我查看了 TiKZ 站点上的示例,并添加了一个名为的属性sibling distance。但是,无论我在哪里添加(父节点和子节点),它都指向错误的位置。

在此处输入图片描述

我们可以看到,如果我向节点 中添加更多子节点2,它将与 重叠5。添加sibling distance甚至会导致更糟糕的结果:

在此处输入图片描述

我不知道是什么原因导致了这个问题。有什么想法吗?谢谢。

最小示例

\documentclass[a4paper,landscape]{scrartcl}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[auto]
    \node [circle,draw] (z){0}
        child { [sibling distance=10mm]
            node[circle,draw] (a) {1}
            child { 
                node[circle,draw] (c) {5} 
            }
            child { 
                node[circle,draw] (d) {5} 
            }   
            child { 
                node[circle,draw] (e) {5} 
            }   
            child { 
                node[circle,draw] (f) {5} 
            }   
        }
        child {
            node[circle,draw] (b) {2}
        }
        ;

    \path (z) -- (a);
    \path (z) -- (b);
    \path (a) -- (c);
    \end{tikzpicture}
\end{document}

答案1

您可以使用以下方式单独更改sibling distance树的每个级别的level <number>/.style={sibling distance=<value>}

\documentclass[a4paper,landscape]{scrartcl}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[
    auto,
    level 1/.style={sibling distance=40mm},
    level 2/.style={sibling distance=10mm}]
    \node [circle,draw] (z){0}
        child {
            node[circle,draw] (a) {1}
            child { 
                node[circle,draw] (c) {5} 
            }
            child { 
                node[circle,draw] (d) {5} 
            }   
            child { 
                node[circle,draw] (e) {5} 
            }   
            child { 
                node[circle,draw] (f) {5} 
            }   
        }
        child {
            node[circle,draw] (b) {2}
        }
        ;
    \end{tikzpicture}
\end{document}

答案2

您无需手动设置所有这些,而是​​可以tikz-qtree非常轻松地构建这些类型的树,并且它会自动调整兄弟距离。(我稍微扩大了默认兄弟距离;但不需要其他手动更改。)

\documentclass{article}
\usepackage{tikz-qtree}
\begin{document}
 \tikzset{edge from parent/.style=
     {draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}}}
\begin{tikzpicture}[every tree node/.style={draw,circle},sibling distance=.25cm]
\matrix{
\Tree
 [.0 
    [.1 5 5 5 5  ] 
    [.2 ]
 ]
 &
 \Tree [.0 
    [.1 5 5 5 5 5 5 ] 
    [.2 6 6 ]
 ]
\\};
\end{tikzpicture}

\end{document}

代码输出

答案3

随着istgame包,您可以使用\xtdistance{<lev-dist>}{<sib-dist>}它来改变级别距离和兄弟距离。

在此处输入图片描述

\documentclass{standalone}

\usepackage{istgame}

\begin{document}   

\begin{istgame}
\setistOvalNodeStyle{5mm}
\xtShowEndPoints[oval node]
\xtdistance{10mm}{20mm}
\istrooto(0){0}
  \istb
  \istb{}{2}[center] 
  \endist
\xtdistance{10mm}{7mm}
\istrooto(1)(0-1){1}
  \istb{}{5}[center] 
  \istb{}{5}[center] 
  \istb{}{5}[center] 
  \istb{}{5}[center] 
  \endist
\end{istgame}

\end{document}

相关内容