使用 TikZ 节点矩阵时,单元格略微垂直错位

使用 TikZ 节点矩阵时,单元格略微垂直错位

在使用 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}

节点Problemspppp将显示偏移。我该如何修复?我希望所有节点具有相同的高度(文本垂直居中)并完全对齐。

答案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}

使用支柱对齐节点中的文本的示例

相关内容