我在 TikZ 中遇到了一些无法修复此树的问题:
- 我怎样才能避免根部附近的空白区域?
- 我如何在分支上写文本?我使用了来自父级的边 但没有按我期望的方式工作。
这是我正在使用的代码:
\begin{tikzpicture}
[ level 1/.style={sibling distance=6em},
level 2/.style={sibling distance=4em}, level distance=1cm,
level 3/.style={sibling distance=2em}, level distance=1cm]
\node (root) {} [fill] circle (1.5pt)
child { [fill] circle (1.5pt)
child { [fill] circle (1.5pt)
child {}
child {}
}
child {
}
}
child { [fill] circle (1.5pt)
child {}
child {}
}
;
\node at (root)[right]{I};
\node at (root-1)[left] {II};
\node at (root-2)[right] {II};
\end{tikzpicture}
这就是我得到的:
答案1
为了避免根处出现空白,您需要将根设为 a coordinate
,而不是 a node
,因为node
s 具有某个最小维度,而 acoordinate
没有。
至于分支上的文本,实际上,您可以使用 来完成edge from parent
。很难说出你哪里做错了,因为你的 MWE 中没有示例,但下面的 MWE 包含了一个可以正常工作的示例。
你可能想看看第 326 页TikZ 和 PGF 文档。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
level 1/.style={sibling distance=6em},
level 2/.style={sibling distance=4em}, level distance=1cm,
level 3/.style={sibling distance=2em}, level distance=1cm
]
\coordinate (root) {} [fill] circle (1.5pt)
child { [fill] circle (1.5pt)
child { [fill] circle (1.5pt)
child {}
child {}
edge from parent
node[left] {a}
}
child {
}
}
child { [fill] circle (1.5pt)
child {}
child {}
}
;
\node at (root)[right]{I};
\node at (root-1)[left] {II};
\node at (root-2)[right] {II};
\end{tikzpicture}
\end{document}
答案2
因为树木需要森林……
...我喜欢自动化解决方案...
\documentclass[tikz, border=5pt, mult, varwidth]{standalone}
\usepackage{forest}
\begin{document}
\forestset{
filled circle/.style={
circle,
text width=3pt,
fill,
},
phantom/.append style={label={}},
my label/.style n args=2{
edge label={node [midway, #1, font=\scriptsize] {#2}}
},
}
\begin{forest}
for tree={
inner sep=0pt,
outer sep=0pt,
tier/.wrap pgfmath arg={tier #1}{int(level)},
where n=0{
s sep=4em,
label={right:\csname @Roman\endcsname{1}},
for descendants={
s sep=2em,
l sep=10mm,
where n=1{
label/.wrap pgfmath arg={left:\csname @Roman\endcsname{#1}}{int(level()+1)}
}{
where n'=1{
label/.wrap pgfmath arg={right:\csname @Roman\endcsname{#1}}{int(level()+1)}
}{},
},
},
}{},
}
[, filled circle
[, filled circle, my label={left}{some text}
[, filled circle
[]
[, phantom]
]
[]
]
[, filled circle, my label={right}{some text}
[]
[]
]
]
\end{forest}
\end{document}