![tikz 节点高度相同(例如在矩阵中)+垂直对齐](https://linux22.com/image/446947/tikz%20%E8%8A%82%E7%82%B9%E9%AB%98%E5%BA%A6%E7%9B%B8%E5%90%8C%EF%BC%88%E4%BE%8B%E5%A6%82%E5%9C%A8%E7%9F%A9%E9%98%B5%E4%B8%AD%EF%BC%89%2B%E5%9E%82%E7%9B%B4%E5%AF%B9%E9%BD%90.png)
text height
我知道我可以通过/键手动垂直对齐节点中的文本text depth
。我还知道我可以使用相同的两个键将总高度设置为相同。
但是如果我同时想要两种效果怎么办?看我的例子:
\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\matrix[every node/.style={draw,rectangle,text width=4em}]{
\node {arr}; & \node {KMUX}; & \node {rather long text}; \\
};
\end{tikzpicture}
\begin{tikzpicture}
\matrix[every node/.style={draw,rectangle,text width=4em, text height=1.5ex, text depth=6ex, text centered}]{
\node {arr}; & \node {KMUX}; & \node {rather long text}; \\
};
\end{tikzpicture}
\end{document}
因此,我认为第一个问题很明显是框的高度不一致。现在,当尝试修复该问题时,我手动设置了高度/深度。但现在这三个节点在其框中没有垂直居中(text centered
显然仅配置了水平居中)。
对此有什么想法吗?(我知道关于类似问题有很多问题,但我找不到解决这个问题的方法)
答案1
使用matrix
库,线条自动适应高度单元:
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix [matrix of nodes,
nodes={inner sep=2mm, anchor=center,
text width=4em, align=center},
draw, inner sep=0pt] (m)
{
arr & KMUX & rather long text in four lines \\
};
\draw (m-1-1.east |- m.north) -- (m-1-1.east |- m.south)
(m-1-2.east |- m.north) -- (m-1-2.east |- m.south);
\end{tikzpicture}
\end{document}
附录: 不清楚你在追求什么。
您可以用规定的高度设置节点高度(如@hpekristiansen 回答中所建议的),这是固定的,需要提前知道所需的最大高度。这可以通过测量所有节点的高度并最终使用其中最大的节点来自动化(非常复杂的方式)。
一种方法可能是不绘制节点而是编写简单的表格,例如通过使用tabularray
包:
\documentclass{scrartcl}
\usepackage{tabularray}
\begin{document}
\begin{table}[!ht]
\begin{tblr}{hlines, vlines,
colspec = {*{3}{Q[c, m, wd=4em]}}
}
arr & KMUX & rather long text in four lines \\
\end{tblr}
\end{table}
\end{document}
这使:
但是,如果您出于某种原因仍然希望将此表作为tikz
节点,则可以将其插入节点,如下所示:
\documentclass{scrartcl}
\usepackage{tabularray}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
N/.style = {draw, inner sep=0pt}
]
\node [N] {\begin{tblr}{vlines,
colspec = {*{3}{Q[c, m, wd=4em]}},}
arr & KMUX & rather long text in four lines \\
\end{tblr}
};
\end{tikzpicture}
\end{document}
编译结果和以前相同。
答案2
这可以替代类似的结构tcolorbox
\documentclass{scrartcl}
\usepackage[most]{tcolorbox}
\begin{document}
\begin{tcbitemize}[raster columns=3, raster equal height, raster width center=9cm, raster column skip=-.5mm, colback=white, sharp corners, halign=center, valign=center]
\tcbitem arr
\tcbitem KMUX
\tcbitem long text in four lines
\end{tcbitemize}
\begin{tcbitemize}[raster columns=4, raster equal height, raster width center=9cm, raster column skip=-.5mm, colback=white, sharp corners, halign=center, valign=center]
\tcbitem arr
\tcbitem KMUX
\tcbitem long text in four lines
\tcbitem like previous but with another column
\end{tcbitemize}
\end{document}