树和简单的图表

子语法和间距旋钮。

树和简单图

层次结构不断出现:解析树、决策树、文件布局、分类法。通过“定位”一次绘制一个盒子是可行的,但是用手保持兄弟姐妹均匀分布和水平均匀分布是很乏味的。 TikZ trees 库允许您使用嵌套的 child 操作来描述层次结构本身,并为您计算布局:

\usetikzlibrary{trees}
\begin{tikzpicture}[
every node/.style={draw, circle, minimum size=7mm},
level distance=12mm,
sibling distance=18mm
]
\node{A}
child{node{B}}
child{node{C}
child{node{D}}
child{node{E}}};
\end{tikzpicture}

读取子语法

该图片包含一个声明。它以根“\node{A}”开始,附加到它的每个“child{…}”声明一个子树。子级通常包含一个“node{…}”作为其自己的标签,并且可能包含进一步的“child”操作,这就是“C”获取子级“D”和“E”的方式。大括号的嵌套反映了树的嵌套,因此您可以直接从缩进读取结构。 TikZ 将每个级别放置在前一个级别的下方,并自动绘制连接边。 one 语句在最后一个大括号后以一个分号结束。结构内部缺少或多余的分号是导致此处错误的常见原因。

三个布局旋钮

顶部的选项控制外观和间距。 every node/.style={draw,circle,minimum size=7mm} 立即将样式应用于所有节点:每个节点都有一个绘制的边框、一个圆形形状和 7 毫米的最小直径,因此单个字母会产生统一的圆形。 level distance=12mm 设置父级与其子级之间的垂直间隙。 sibling distance=18mm 设置同一父级的相邻子级之间的水平间隙。

兄弟距离是您最常调整的旋钮。 “trees”库为给定级别的每个子树保留相同的宽度,因此如果该值太小,宽子树可能会发生冲突。标准补救措施是加宽顶部附近的间距,其中子树最宽,并使用每级设置,例如“level 1/.style={sibling distance=36mm}”和“level 2/.style={sibling distance=18mm}”。如果您的标签宽度差异很大,请通过从共享样式中删除“circle”来从圆形切换到矩形。

除了小树之外

边缘通过“edge fromparent/.style”获取样式,例如添加箭头或更粗的线条。对于超过大约十几个节点的树,或者对于具有循环的一般图,“trees”库变得有限。 “forest”包通过自动打包处理大树。具有“graphdrawing”算法的“graphs”库涵盖任意图形,尽管该路径需要 LuaLaTeX。 TikZ 不会在这些页内预览中呈现,因此请编译示例以查看布局。如果此语法是新的,请从 您的第一张 TikZ 图片 中的基础知识开始。

返回 在 TeX 中绘图