我想画一棵树,但我不知道如何强制它们之间的间距。有些是重叠的。
这是我的代码:
\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}
节点G
和H
重叠。
我尝试使用该参数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}
如果您希望C
节点与根对齐,您可以forest
这样做:
[C, calign with current