是否有一些智能方法可以让多个 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 depth
和text 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}