我想画一个几乎为空的矩阵matrix of nodes
,类似于TikZ
下面最左边的矩阵。所有节点都具有相同的大小(通过minimum width
和minimum height
),并且列和行之间没有分隔。但是当我包含需要两行的文本时,我会获得中央矩阵,如果文本只需要一行,则会获得最右边的矩阵。我不知道哪里出了问题。你知道吗?我使用的是 CVS 版本的TikZ
。
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{matrix}
\tikzset{
proces/.style={draw, minimum height=15mm, minimum width=2cm, outer sep=0pt, text width=1.5cm, align=center}
}
\begin{document}
\begin{tikzpicture}
\matrix (A) [matrix of nodes,nodes=proces,nodes in empty cells] {
& \\
& \\
};
\begin{scope}[xshift=4.5cm]
\matrix (A) [matrix of nodes,nodes=proces,nodes in empty cells] {
& OOO OOO \\
& \\
};
\end{scope}
\begin{scope}[xshift=9cm]
\matrix (B) [matrix of nodes,nodes=proces,nodes in empty cells] {
& A \\
& \\
};
\end{scope}
\end{tikzpicture}
\end{document}
答案1
这里发生的事情是,每个矩阵子节点上matrix of nodes
都已悄悄设置了anchor=base
。问题在于,当节点中包含文本时,锚点与base
锚点不在同一个位置center
。因此,您的节点排列整齐,因此它们的base
s 在一条线上,但这意味着它们的center
s(以及它们的边界)不在一条线上。
最简单的解决方案就是放置nodes={anchor=center}
,或者您可以将其添加到样式中proces
,在之后matrix of nodes
撤消此更改。
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{matrix}
\tikzset{
process base/.style={
draw,
minimum height=15mm,
minimum width=2cm,
outer sep=0pt,
text width=1.5cm,
align=center
}
}
\begin{document}
\begin{tikzpicture}[
proces/.style={
process base,
}
]
\matrix (A) [matrix of nodes,nodes=proces,nodes in empty cells] {
& \\
& \\
};
\begin{scope}[xshift=4.5cm]
\matrix (B) [matrix of nodes,nodes=proces,nodes in empty cells] {
& OOO OOO \\
& \\
};
\end{scope}
\begin{scope}[xshift=9cm]
\matrix (C) [matrix of nodes,nodes=proces,nodes in empty cells] {
& A \\
& \\
};
\end{scope}
\foreach \lbl in {A,B,C} {
\draw[line width=3mm,green] (\lbl-1-1.base) -- (\lbl-1-2.base);
\draw[ultra thick,red] (\lbl-1-1.center) -- (\lbl-1-2.center);
}
\end{tikzpicture}
\begin{tikzpicture}[
proces/.style={
process base,
anchor=center,
}
]
\matrix (A) [matrix of nodes,nodes=proces,nodes in empty cells] {
& \\
& \\
};
\begin{scope}[xshift=4.5cm]
\matrix (B) [matrix of nodes,nodes=proces,nodes in empty cells] {
& OOO OOO \\
& \\
};
\end{scope}
\begin{scope}[xshift=9cm]
\matrix (C) [matrix of nodes,nodes=proces,nodes in empty cells] {
& A \\
& \\
};
\end{scope}
\foreach \lbl in {A,B,C} {
\draw[line width=3mm,green] (\lbl-1-1.base) -- (\lbl-1-2.base);
\draw[ultra thick,red] (\lbl-1-1.center) -- (\lbl-1-2.center);
}
\end{tikzpicture}
\end{document}