我试图将 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$
没有位于其节点边框的中心:
为什么会发生这种情况?我该如何修复它以使文本居中?
答案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}
编辑
您还可以使用
\node (diagram-fit) [draw, fit=(diagram-1-1)(diagram-1-2)] {} ;
\node at (diagram-fit) {$T$};
这表明已拟合节点的默认锚点仍为center
。当然,T
居中而不指定任何锚点。如果您的矩阵包含更多节点,而您不希望这些节点影响 的位置,这也应该有效T
。
但是,当您尝试在创建/绘制的同时将$T$
放入时,事情就会变得糟糕。这实际上并不特别不寻常。在其他情况下,您实际上需要使用两个单独的操作才能默认获得合理的对齐。例如,将为您提供与不同的东西。我认为,这并不是说拟合节点有什么特别之处。我怀疑它不是一个简单的。(但这只是一种怀疑——我还没有看过。)diagram-fit
diagram-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}