tikz 两行固定大小的文本矩形

tikz 两行固定大小的文本矩形

我正在学习 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,如第二行彩色块中所示。

本着最佳鼓励实践的精神(至少据我所知:如果我错了,请纠正我)我也做了其他一些更改。

  • 更改了redgreen样式以继承自blk
  • 将它们重命名为rblkgblk以避免与内置颜色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 heighttext depth

blk如果我改变风格

blk/.style = {rectangle, font=\ttfamily, text height=1.5ex, text depth=.25ex, minimum size=3.5ex}

height我得到了下面的第二张图,其中基线重合。下面我使用的/键的值depth来自教程图表作为简单图形在 TikZ 手册中:撰写本文时的第 5 节。具体来说,高度/深度的单位是ex,粗略地说,它会随着所用字体的高度而变化

结果是文本高度和深度发生变化,并且文本基线对齐。

相关内容