为什么空的和非空的 TikZ 矩阵单元放置位置不一致?

为什么空的和非空的 TikZ 矩阵单元放置位置不一致?

我想画一个几乎为空的矩阵matrix of nodes,类似于TikZ下面最左边的矩阵。所有节点都具有相同的大小(通过minimum widthminimum 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。因此,您的节点排列整齐,因此它们的bases 在一条线上,但这意味着它们的centers(以及它们的边界)不在一条线上。

最简单的解决方案就是放置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}

对齐锚点

相关内容