以下 MWE
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (A) [matrix of nodes, column sep=-\pgflinewidth, row sep=-\pgflinewidth, nodes={minimum height=3em, draw, anchor=center}] {
foo & fooy\\
};
\end{tikzpicture}
\end{document}
产生以下结果:
我想正确对齐单元格框。我知道的唯一解决方案是添加anchor=center
到节点样式,即
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (A) [matrix of nodes, column sep=-\pgflinewidth, row sep=-\pgflinewidth, nodes={minimum height=3em, draw, anchor=center}] {
foo & fooy\\
};
\end{tikzpicture}
\end{document}
但是,这会导致文本未对齐(红色指南是为了可视化目的,而不是 MWE 的一部分):
我怎样才能按照预期的方式对齐文本和单元格框?
答案1
根据TikZ 手册在“教程:图表作为简单图形”中,关键是直接固定节点的高度和深度。这样,您就可以强制它们对齐。关键词是text height
和text depth
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (A)%
[matrix of nodes,
column sep=-\pgflinewidth,
row sep=-\pgflinewidth,
nodes=
{minimum height=3em,
draw,
text height=1.5ex,
text depth=.25ex,
anchor=center}
] {
foo & fooy\\
};
\draw[red, very thin] (A-1-1.base) -- +(1.5,0);
\draw[blue, very thin] (A-1-2.base) -- +(-1.5,0);
\end{tikzpicture}
\end{document}
在图片的左侧,您可以看到未指定这些键时的结果,我将它们并排放置并在底座上画出线条以进行比较
答案2
如果您处理的文本可能具有不同的高度/深度,则可以使用 来\strut
确保相似的深度/高度。以下是一个例子\fbox
:
\documentclass{article}
\begin{document}
\fbox{foo}\ \fbox{fooy}
\fbox{\strut foo}\ \fbox{\strut fooy}
\end{document}
类似地,\strut
对于您希望具有相似高度/深度的组件,问题是(无需猜测):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (A)
[matrix of nodes,
column sep = -\pgflinewidth,
row sep = -\pgflinewidth,
nodes = {
minimum height=3em,
draw,
anchor = center
}] {
\strut foo & \strut fooy \\
};
\end{tikzpicture}
\end{document}
答案3
text depth=.25ex
只需在节点选项中添加密钥即可
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (A) [%
matrix of nodes,
column sep=-\pgflinewidth,
row sep=-\pgflinewidth,
nodes={minimum height=3em, draw, text depth=.25ex, anchor=center}
]
{
foo & fooy\\
};
\end{tikzpicture}
\end{document}
更新
如果需要矩阵单元的平方,可以使用以下代码
\begin{tikzpicture}
\tikzset{square matrix/.style={
matrix of nodes,
column sep=-\pgflinewidth,
row sep=-\pgflinewidth,
nodes={draw,
minimum height=3em,
anchor=center,
text width=3em,
text depth=.25ex,
align=center,
inner sep=0pt
},
},
square matrix/.default=1cm
}
\matrix[square matrix]
{
foo & fooy\\
};
\end{tikzpicture}