在使用 TikZ 矩阵布置一堆节点时,我注意到节点在垂直方向上略有错位。似乎带有“高”字母(p、b、l)的单词会垂直向上或向下移动框。如果节点仅包含不包含这些字母的单词,则不会发生这种情况。例如,test
当放置在带有文本的节点旁边时,会出现偏移uiae
。
这是一个最小的例子:
\usetikzlibrary{matrix}
\begin{tikzpicture}
\matrix[
matrix of nodes,
column sep=1ex, row sep=1ex,
nodes={
draw,
minimum height=2em,
text width=30mm,
},
] (matrix-optimization) {
Encodings &
Problems &
Algorithms \\
%
Selection &
uiae &
pppp \\
};
\end{tikzpicture}
节点Problems
和pppp
将显示偏移。我该如何修复?我希望所有节点具有相同的高度(文本垂直居中)并完全对齐。
答案1
问题正如你所说,节点包含具有不同高度和深度的字母,它们会根据高度和深度进行调整和对齐。TiKZ 手册在教程“图表作为简单图形”和“单元格图片”中对此进行了解释。
如果您希望所有节点对齐但不对齐单词,则可以使用 更改节点锚点anchor=south
。
\documentclass[tikz,border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[
matrix of nodes,
column sep=1ex, row sep=1ex,
nodes={
draw,
minimum height=2em,
text width=30mm,
anchor=south
},
] (matrix-optimization) {
Encodings &
Problems &
Algorithms \\
%
Selection &
uiae &
pppp \\
};
\end{tikzpicture}
\end{document}
但是如果您希望节点和文本对齐,则需要为节点固定一定的深度和高度。
\documentclass[tikz,border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[text height=1.5ex,text depth=.25ex,
matrix of nodes,
column sep=1ex, row sep=1ex,
nodes={
draw,
minimum height=2em,
text width=30mm
},
] (matrix-optimization) {
Encodings &
Problems &
Algorithms \\
%
Selection &
uiae &
pppp \\
};
\end{tikzpicture}
\end{document}
发布我的答案后,我发现这个先前的问题提出了一些其他解决方案:TikZ 和节点内文本的垂直对齐问题
答案2
\strut
可能更简单的解决方案是在每个节点中放置一个font=\strut
:
\documentclass[tikz,border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[
matrix of nodes,
column sep=1ex, row sep=1ex,
nodes={
draw,
minimum height=2em,
text width=30mm,
anchor=south,
font=\strut % <<---
},
] (matrix-optimization) {
Encodings &
Problems &
Algorithms \\
%
Selection &
uiae &
pppp \\
};
\draw[red] (-5,.35) -- (5,.35);
\draw[red] (-5,-.525) -- (5,-.525);
\end{tikzpicture}
\end{document}