编辑

编辑

我试图将 TikZ 矩阵中的两个单元格合并为一个:

\documentclass{standalone}

\usepackage{tikz}

\usetikzlibrary{matrix}
\usetikzlibrary{fit}

\begin{document}

\begin{tikzpicture}
\matrix (diagram) [matrix of nodes, nodes in empty cells, nodes={draw}] {
  &  \\
};

\node [draw, fit=(diagram-1-1)(diagram-1-2)] {$T$} ;
\end{tikzpicture}

\end{document}

nodes={draw}(注意:我添加了显示底层节点的选项,仅用于故障排除目的)

我得到了一个正确位于两个底层节点周围的组合节点,但由于某种原因,文本$T$没有位于其节点边框的中心:

T 不在外边界的中心

为什么会发生这种情况?我该如何修复它以使文本居中?

答案1

有两个问题。第一个问题是矩阵节点的高度只等于 的两倍,inner ysep因为它们没有内容,而T节点的高度等于 的两倍inner ysep加上 的高度T。有多种方法可以解决这个问题。一种简单的方法是测量 的高度T并将其设置text height为矩阵节点的高度。(如果您的实际文档中的矩阵中有其他内容,minimum text height可能更合适。)

第二个是您需要将T节点相对于矩阵的节点进行锚定。基本上,您需要将T.base锚点.base置于组合节点的 处。在本例中,这只是diagram.base。同样,如果您有更多节点,您可以创建fit节点,然后使用<name of fit node>.base

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{fit}
\newlength\myTht
\settoheight\myTht{T}

\begin{document}

\begin{tikzpicture}
  \matrix (diagram) [matrix of nodes, nodes in empty cells, nodes={draw}, text height=\myTht] {% or minimum text height if other nodes have deeper or taller material
     &  \\
  };
  \node [anchor=base] at (diagram.base) {$T$};
  \node [draw, fit=(diagram-1-1)(diagram-1-2)] {} ;
  % \node (fitted)  [draw, fit=(diagram-1-1)(diagram-1-2)] {} ;
  % \node [anchor=base] at (diagram-1-1.base -| fitted.center) {$T$};
\end{tikzpicture}

\end{document}

对齐“T”

编辑

您还可以使用

  \node (diagram-fit) [draw, fit=(diagram-1-1)(diagram-1-2)] {} ;
  \node  at (diagram-fit) {$T$};

这表明已拟合节点的默认锚点仍为center。当然,T居中而不指定任何锚点。如果您的矩阵包含更多节点,而您不希望这些节点影响 的位置,这也应该有效T

但是,当您尝试在创建/绘制的同时将$T$放入时,事情就会变得糟糕。这实际上并不特别不寻常。在其他情况下,您实际上需要使用两个单独的操作才能默认获得合理的对齐。例如,将为您提供与不同的东西。我认为,这并不是说拟合节点有什么特别之处。我怀疑它不是一个简单的。(但这只是一种怀疑——我还没有看过。)diagram-fitdiagram-fit\draw ... node ...\draw ... coordinate ... ; \node at () ...\node

答案2

  • 您在如何在节点中插入文本时遇到问题fit:它不是垂直居中。
  • 一种可能的解决方案是在节点中心插入节点文本作为节点标签:
\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{fit,
                matrix}

\begin{document}

\begin{tikzpicture}
\matrix (diagram) [matrix of nodes, 
                   nodes in empty cells, 
                   nodes={draw, ultra thin}
                   ] 
{
  &  \\
};

\node[draw, fit=(diagram-1-1)(diagram-1-2), 
      label=center:$T$] {};                 % <---
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容