如何控制 TikZ 树中的间距?

如何控制 TikZ 树中的间距?

我想画一棵树,但我不知道如何强制它们之间的间距。有些是重叠的。

这是我的代码:

\begin{tikzpicture}
\tikzstyle{every node}=[circle,draw]
\node {A}
child { node {B} 
child { node {E} }
child { node {F} child { node {K} } child { node {L} } child { node {M}}}
child { node {G} }}
child { node {C} 
child {node {H}}}
child { node {D} child {node {I}} child {node {J} child {node {N}} child {node {O}}}};
\end{tikzpicture}

节点GH重叠。

我尝试使用该参数node distance,但它不起作用。

答案1

请参阅第 18.4 节指定树和子树的选项pgfmanual 的。使用sibling distance,您可以解决问题(使用最适合您需求的值):

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[every node/.style={circle,draw},level 1/.style={sibling distance=30mm},level 2/.style={sibling distance=10mm}
]
\node {A}
child { node {B} 
child { node {E} }
child { node {F} child { node {K} } child { node {L} } child { node {M}}}
child { node {G} }}
child { node {C} 
child {node {H}}}
child { node {D} child {node {I}} child {node {J} child {node {N}} child {node {O}}}}
;
\end{tikzpicture}

\end{document}

答案2

如果您不想手动调整每棵树的间距,可以使用 tikz-qtree 包。这主要针对语言学,但也可用于其他情况。(下面的间距命令设置最小距离,而不是实际距离。该包会自动保证节点不会重叠,并且布局算法非常简单,您可以从此示例中推断出来。)

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

\begin{tikzpicture}[every tree node/.style={draw,circle},sibling
distance=10pt, level distance=40pt]
\tikzset{edge from parent/.style={draw, edge from parent path=
    {(\tikzparentnode) -- (\tikzchildnode)}}}
\Tree [.A [.B E [.F K L M ] G ] [.C H ] [.D I [.J N O ] ] ]
\end{tikzpicture}

\end{document}

带有从南到北锚点的线路的版本:

原始图像

编辑:我终于在合适的计算机上更新此示例,以展示如何处理@Alan 的问题。我保留了旧图像以供比较(要获得此图像,请\tikzset从上面的代码中删除命令),但这是带有从节点中心出现的线条的图像:

更新图片

答案3

如果您只想移动单个节点,您也可以使用:

child{node [left=1.5cm] {b}

将节点向左移动1.5cm。

答案4

这是一个简单的forest解决方案:

\documentclass[tikz, border=5pt]{standalone}
\usepackage{forest}
\begin{document}

\begin{forest}
  for tree={
    circle,
    draw
  }
  [A
    [B
      [E]
      [F
        [K]
        [L]
        [M]
      ]
      [G]
    ]
    [C
      [H]
    ]
    [D
      [I]
      [J
        [N]
        [O]
      ]
    ]
  ]
\end{forest}

\end{document}

<code>森林</code> 解决方案

如果您希望C节点与根对齐,您可以forest这样做:

    [C, calign with current

对齐节点

相关内容