阵列


排版过程中,经常会要求元素对齐,特别是按行列对齐,LaTeX的表格和数组就是解决方法之一。 tikz也有类似的方法,那就是阵列,而且也是以“&”作为列分隔符,以“\\”结束行。

在tikz中使用阵列的第一种方法是把节点看作一个阵列,只需要设置选项

matrix=true/false
这样在节点的文本部分就可以包含行列,比如
\begin{tikzpicture}
\draw[help lines] (0,0) grid (4,2);
\node [matrix,fill=red!20,draw=blue,very thick] (my matrix) at (2,1)
{
\draw (0,0) circle (4mm); & \node[rotate=10] {Hello}; \\
\draw (0.2,0) circle (2mm); & \fill[red] (0,0) circle (3mm); \\
};
\draw [very thick,->] (0,0) |- (my matrix.west);
\end{tikzpicture}
风格
every matrix
作用于每一个阵列。

使用阵列的另一个方法是用命令

\matrix[选项]{行列};
比如
\begin{tikzpicture}
[every node/.style={draw=black,anchor=base,font=\huge}]
\matrix [draw=red]
{
\node {a}; \fill[blue] (0,0) circle (2pt); &
\node {X}; \fill[blue] (0,0) circle (2pt); &
\node {g}; \fill[blue] (0,0) circle (2pt); \\
};
\end{tikzpicture}

阵列的列间空隙可以用选项

column sep={空隙列表}
“空隙列表”一般是逗号分隔的长度,如果只有一个值,可以省去括号。也可以包含两个关键字
between origins
between borders
这两个关键字在列表中的最后一次出现会影响列间空隙的计算方式,如果是后者,列表 中的距离被直接添加到空隙的计算中。如果是后者,空隙等于头两列单元格原点的差。比如
\begin{tikzpicture}
\matrix [draw,column sep={1cm,between origins},nodes=draw]
{
\node(a) {123}; & \node (b) {1}; & \node {1}; \\
\node {12}; & \node {12}; & \node {1}; \\
\node {1}; & \node {123}; & \node {1}; \\
};
\draw [<->,red,thick] (a.center) -- (b.center) node [above,midway] {1cm};
\end{tikzpicture}

行间距离与列间距离相似,由选项

row sep={空隙列表}
设置。你也可以在行尾,也就是“\\”的后面,添加一个选项,内容只能是一个长度。这个长度会做为 追加的行间空隙加到当前行和下一行之间。

单元格的风格可以用

every cell={行}{列}
设置,它会影响由“行”和“列”决定的单元格。具体要添加哪些风格可以用选项
cells={选项}
而选项
nodes={选项}
则把风格运用到每一个节点。比如
\begin{tikzpicture}
\matrix [nodes={fill=blue!20,minimum size=5mm}]
{
\node {8}; & \node{1}; & \node {6}; \\
\node {3}; & \node{5}; & \node {7}; \\
\node {4}; & \node{9}; & \node {2}; \\
};
\end{tikzpicture}

下列风格也影响单元格

column 列号
every odd column
every even column
row 行号
every odd row
every even row
row 行号 column 列号

在单元格中要执行的公共代码可以用选项

execute at begin cell={代码}
execute at end cell={代码}
execute at empty cell={代码}
设置。比如
\begin{tikzpicture}
[matrix of nodes/.style={
execute at begin cell=\node\bgroup,
execute at end cell=\egroup;}]
\matrix [matrix of nodes]
{
8 & 1 & 6 \\
3 & 5 & 7 \\
4 & 9 & 2 \\
};
\end{tikzpicture}

阵列的锚定点可以用选项

matrix anchor=锚定点
anchor=锚定点或节点的锚定点
比如
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\matrix[matrix anchor=inner node.south,anchor=base,row sep=3mm] at (1,1)
{
\node {a}; & \node {b}; & \node {c}; & \node {d}; \\
\node {a}; & \node(inner node) {b}; & \node {c}; & \node {d}; \\
\node {a}; & \node {b}; & \node {c}; & \node {d}; \\
};
\draw (inner node.south) circle (1pt);
\end{tikzpicture}


目录