如何强制节点在 tikz 矩阵中具有相同的大小

如何强制节点在 tikz 矩阵中具有相同的大小

是否有一些智能方法可以让多个 tikz 节点具有相同的高度和宽度?请考虑以下示例及其下面的输出。

我希望每行中的每个节点都具有相同的高度,等于最高节点的高度,并且每列中的每个节点都具有相同的宽度,等于最宽节点的宽度。

在下面的示例中,第三行中的每个节点都有不同的高度。在前两行中,使用 \vphantom 强制使高度相等。一定有更智能的方法来做到这一点。有什么想法吗?列呢(它们包含相同的节点,但通常不会)?

我不想对最小宽度+高度进行硬编码。

谢谢你!

J.

\documentclass{minimal}

\usepackage[svgnames]{xcolor}
\usepackage{tikz}


\begin{document}
\begin{tikzpicture}
[every node/.style={anchor=base}]
\matrix [draw=red]
{
\node[fill=Orange] {a\vphantom{Xg}}; & \node[fill=Green] {X\vphantom{ag}}; & \node[fill=LightGreen] {\vphantom{aX}g}; \\
\node[fill=Yellow] {a\vphantom{Xg}}; & \node[fill=Cyan] {X\vphantom{ag}}; & \node[fill=Magenta] {\vphantom{aX}g}; \\
\node[fill=Purple] {a}; & \node[fill=LightBlue] {X}; & \node[fill=Aquamarine] {g}; \\
};
\end{tikzpicture}
\end{document}

输出

答案1

使用text depthtext height,您可以控制节点的总高度;text width让您控制宽度(还有一个minimum size可以使用的键):

\documentclass{article}    
\usepackage[svgnames]{xcolor}
\usepackage{tikz}


\begin{document}
\begin{tikzpicture}[every node/.style={anchor=base,text depth=.5ex,text height=2ex,text width=1em}]
\matrix [draw=red]
{
\node[fill=Orange] {a}; & \node[fill=Green] {X}; & \node[fill=LightGreen] {g}; \\
\node[fill=Yellow] {a}; & \node[fill=Cyan] {X}; & \node[fill=Magenta] {g}; \\
\node[fill=Purple] {a}; & \node[fill=LightBlue] {X}; & \node[fill=Aquamarine] {g}; \\
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

作为敲击提及他的评论matrix of nodes(需要matrix库)在这里可能更有用;它简化了代码,还为您提供了nodes in empty cells处理没有明确文本的单元格大小写的关键:

\documentclass{article}    
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}[every node/.style={anchor=base,text depth=.5ex,text height=2ex,text width=1em}]
\matrix [matrix of nodes,draw=red,nodes in empty cells]
{
|[fill=Orange]| a & |[fill=Green]| X & |[fill=LightGreen]| \\
|[fill=Yellow]| a & |[fill=Cyan]| & |[fill=Magenta]| g \\
|[fill=Purple]| & |[fill=LightBlue]| X & |[fill=Aquamarine]| g \\
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

这是我所期望的,但不可否认的是它并不漂亮。它的动机是TikZ 中的依赖节点大小

我很困惑为什么使用

column 1/.style={Minimum Width=c1} 

等等的工作方式与行样式命令不同。谢谢大家。

\documentclass[12pt]{article}

\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{positioning,node-families,matrix}

\begin{document}



\begin{tikzpicture}[every node/.style={anchor=base}, 
row 1/.style={Minimum Height=r1,Text Height=th1,Text Depth=td1},
row 2/.style={Minimum Height=r2,Text Height=th2,Text Depth=td2},
row 3/.style={Minimum Height=r3,Text Height=th3,Text Depth=td3}
]
\matrix [matrix of nodes,draw=Red,nodes in empty cells]
{
|[fill=Orange,Minimum Width=col1]| a & |[fill=Green,Minimum Width=col2]| X & |[fill=LightGreen,Minimum Width=col3]| \\
|[fill=Yellow,Minimum Width=col1]| a & |[fill=Cyan,Minimum Width=col2]| & |[fill=Magenta,Minimum Width=col3]| g \\
|[fill=Purple,Minimum Width=col1]| & |[fill=LightBlue,Minimum Width=col2]| X & |[fill=Aquamarine,Minimum Width=col3]| \tikz\draw[fill=Black]  (0,0) circle(1cm); \\
};
\end{tikzpicture}

\end{document}

相关内容