TikZ 矩阵对齐问题

TikZ 矩阵对齐问题

以下 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 heighttext 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}

相关内容