我正在学习 tikz,我希望使用它绘制两行固定大小的框,每行框中都有一个可打印字符来显示数据。我尝试在附加的示例中执行此操作,但我不知道如何使文本框的大小相同。
有人能告诉我如何让所有文本框都呈现相同的大小吗?此外,如何让标签字符串处于正确的垂直高度以匹配行。
\documentclass{report}
\usepackage{tikz}
\begin{document}
text before
\begin{figure}
\begin{tikzpicture}
\tikzset{red/.style={rectangle, draw,fill=red, font=\ttfamily, minimum width =10pt, minimum height=10pt}}
\tikzset{grn/.style={rectangle, draw, fill=green, font=\ttfamily, minimum width =10pt, minimum height=10pt}}
\tikzset{blk/.style={font=\ttfamily, minimum width =10pt, minimum height=10pt}}
% Row 1 AbCDE
\node[blk] (L1) {Row 1 Label};
\node[red] (r1) at ([xshift=1cm] L1.east) {A};
\node[grn, anchor=west] (r2) at (r1.east){b};
\node[red, anchor=west] (r3) at (r2.east){c};
\node[grn, anchor=west] (r4) at (r3.east){D};
\node[red, anchor=west] (r5) at (r4.east){E};
% Row 2 aB.De
\node[blk] at (L1.south) {Row 2 Label};
\node[red, anchor=north] at (r1.south){a};
\node[grn, anchor=north] at (r2.south){B};
\node[red, anchor=north] at (r3.south){.};
\node[grn, anchor=north] at (r4.south){D};
\node[red, anchor=north] at (r5.south){e};
\end{tikzpicture}
\end{figure}
text after
\end{document}
答案1
作为打击乐器评论,要使矩形具有相同的大小,请施加 aminimum height
以及 a minimum width
,并将两者设置为至少与最高/最宽的块一样大。如果您希望这两个值相同(因此您的矩形是正方形),您可以使用 键minimum size
同时设置两者。要使第二行的标签正确对齐,请使用anchor=north
,如第二行彩色块中所示。
本着最佳鼓励实践的精神(至少据我所知:如果我错了,请纠正我)我也做了其他一些更改。
- 更改了
red
和green
样式以继承自blk
- 将它们重命名为
rblk
和gblk
以避免与内置颜色red
和发生冲突green
。 - 使用可选参数
tikzpicture
在本地设置样式,而不是全局设置。
以下是这些变化的结果。
\documentclass[margin=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
blk/.style = {rectangle, font=\ttfamily, minimum size=20pt},
rblk/.style = {blk, draw, fill=red},
gblk/.style = {blk, draw, fill=green}
]
% Row 1 AbCDE
\node[blk] (L1) {Row 1 Label};
\node[rblk] (r1) at ([xshift=1cm] L1.east) {A};
\node[gblk, anchor=west] (r2) at (r1.east){b};
\node[rblk, anchor=west] (r3) at (r2.east){c};
\node[gblk, anchor=west] (r4) at (r3.east){D};
\node[rblk, anchor=west] (r5) at (r4.east){E};
% Row 2 aB.De
\node[blk, anchor=north] at (L1.south) {Row 2 Label};
\node[rblk, anchor=north] at (r1.south){a};
\node[gblk, anchor=north] at (r2.south){B};
\node[rblk, anchor=north] at (r3.south){.};
\node[gblk, anchor=north] at (r4.south){D};
\node[rblk, anchor=north] at (r5.south){e};
\end{tikzpicture}
\end{document}
上面的代码有一个小问题:请注意,每个字符在颜色块内都是垂直居中的。(例如.
与 进行比较D
。)
我们可以通过强制每个块对每个字符使用相同的高度和深度来解决这个问题,而不是采用“缩小以适应”的方法。相关键是text height
和text depth
。
blk
如果我改变风格
blk/.style = {rectangle, font=\ttfamily, text height=1.5ex, text depth=.25ex, minimum size=3.5ex}
height
我得到了下面的第二张图,其中基线重合。下面我使用的/键的值depth
来自教程图表作为简单图形在 TikZ 手册中:撰写本文时的第 5 节。具体来说,高度/深度的单位是ex
,粗略地说,它会随着所用字体的高度而变化