层次结构通常用树形来表达。所谓树形结构,就是有一个节点被称为根节点,除了叶子节点, 其它节点都有孩子,孩子还可以有节点。在tikz中子节点用路径元素

... child[选项] foreach 变量 in {变量值域} {子路径} ...;
表示。除了关键字“child”本身,其它都是可选的。比如
\begin{tikzpicture}
\node {root}
child {node {left}}
child {node {right}
child {node {child}}
child {node {child}}
};
\end{tikzpicture}

孩子语法中可选的“foreach 变量 in {变量值域} {子路径}”,是一个循环结构, 变量用“\”开始,后面紧跟标识符,比如

node {root} child [red] foreach \name in {1,2} {node {\name}}
这个例子中循环结构被用于定义根节点的两个孩子。更复杂的例子是
\begin{tikzpicture}
[level distance=4mm,level/.style={sibling distance=8mm/#1}]
\coordinate
child foreach \x in {0,1}
{child foreach \y in {0,1}
{child foreach \z in {0,1}}};
\end{tikzpicture}
它定义了一棵二叉树。

风格

every child
作用于每一个孩子,风格
every child node
作用于每一个孩子节点。风格
level=层数
影响树形结构上指定的层。比如
\begin{tikzpicture}
[level 1/.style={sibling distance=20mm},
level 2/.style={sibling distance=5mm}]
\node {root}
child { child child }
child { child child child };
\end{tikzpicture}

树形结构的层间距离由选项

level distance=层间距离
指定,同一个父亲的孩子锚定点间的距离由选项
sibling distance=孩子间距离
比如
\begin{tikzpicture}
[level distance=4mm,
level 1/.style={sibling distance=8mm},
level 2/.style={sibling distance=4mm},
level 3/.style={sibling distance=2mm}]
\coordinate
child {
child {child child}
child {child child}
}
child {
child {child child}
child {child child}
};
\end{tikzpicture}

默认情况下,树是向下增长的,你可以用选项

grow=方向
指定树的增长方向,它的值可以是“down”、“up”、“left”、“right”、 “north”、“south”、“east”、“west”、“north west”、“south west”、 “north east”、“south west”。选项
grow'=方向
按指定方向的反方向增长。

如果不打算让孩子显示,可以在孩子的属性中设置

missing=true/false
比如
\begin{tikzpicture}[level distance=10mm,sibling distance=5mm]
\node {root} [grow=down]
child { node {1} }
child { node {2} }
child { node {3} }
child[missing] { node {4} }
child { node {5} }
child { node {6} };
\end{tikzpicture}

从父亲到孩子的边可以用路径元素

... edge from parent[选项] ...;
设置,它只能用于子路径。路径的形状由选项
edge from parent path={路径}
指定。选项
child anchor=锚定点
parent anchor=锚定点
用于改变父子的锚定点。比如
\begin{tikzpicture}
\node {root}
[child anchor=north]
child {node {left} edge from parent[dashed]}
child {node {right}
child {node {child}}
child {node {child} edge from parent[draw=none]}
};
\end{tikzpicture}

父子边可以用风格

edge from parent
设置。比如
\begin{tikzpicture}
[edge from parent/.style={draw,red,thick}]
\node {root}
child {node {left} edge from parent[dashed]}
child {node {right}
child {node {child}}
child {node {child} edge from parent[draw=none]}
};
\end{tikzpicture}


目录