如何创建任意大小的矩形?

如何创建任意大小的矩形?

我知道 TikZ 会尝试根据最小尺寸和文本内容创建形状,但我希望创建一些任意大小的矩形,如下图所示:

我的身影

如您所见,“请求的大小”矩形的宽度应等于“可用块”矩形的总宽度,但每个“可用块”和每个“已使用块”矩形都有不同的宽度,即使它们具有相同的文本。

我曾尝试用类似矩阵来解决这个问题这个例子,但我真的无法设置矩形的宽度,因为我没有在节点内乱搞“文本宽度”。这是我到目前为止为图的最后一行写的内容:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,matrix,positioning}
\begin{document}
\begin{tikzpicture}[field/.style={outer sep=0pt, draw, minimum
  height=12mm, minimum width=#1\linewidth,font=\small,anchor=center,
    text width=18mm,align=center}]
    \matrix (A) [matrix of nodes, column sep=-\pgflinewidth,
    row 1/.style={nodes={field=.1}}] {
      |[field=.2,draw=none]| Memory layout &
        |[field=.3,fill=red]| Used block &
        |[fill=green]| Free block &
        |[fill=green]| Free block &
        |[field=.2, fill=green]| Free block &
        |[fill=red]| Used block \\
    };
\end{tikzpicture}
\end{document}

输出结果如下:

MVP 输出

提前致谢!

编辑:正如@OlgaK 评论的那样,我的代码对形状使用了不同的名称,因此我修复了代码和输出图像。

答案1

另一个使用calc库的解决方案(感谢 wrtlprnft 的修正)

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,matrix,positioning,calc}
\begin{document}
\begin{tikzpicture}[field/.style={%
    outer sep=0pt, draw, minimum height=12mm, 
    minimum width=#1\linewidth, font=\small, anchor=center,
    text width=18mm,align=center}]

    \matrix (A) [matrix of nodes, column sep=-\pgflinewidth,
           row 1/.style={nodes={field=.1}}] {%
      |[field=.2,draw=none]| Memory layout &
      |[field=.3,fill=red]| Used block &
      |[fill=green]| Free block &
      |[fill=green]| Free block &
      |[field=.2, fill=green]| Free block &
      |[fill=red]| Used block \\
    };

    \draw let \p1=($(A-1-5.north east)-(A-1-3.south west)$)
     in node[fill=green, inner sep=0pt, draw, 
     minimum width=\x1-\pgflinewidth, minimum height=\y1, 
     above right=1mm and 0pt of A-1-3.north west]{Requested size};
\end{tikzpicture}
\end{document}

![在此处输入图片描述

这些放大的片段显示了有限的细节

在此处输入图片描述...在此处输入图片描述

答案2

解决方案,但肯定有更好的

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning, calc,intersections,shapes,matrix,fit}
\begin{document}
\begin{tikzpicture}[memory block field/.style={outer sep=0pt, draw, minimum
  height=12mm, minimum width=#1\linewidth,font=\small,anchor=center,
    text width=18mm,align=center}]
    \matrix (A) [matrix of nodes, column sep=-\pgflinewidth,
    row 1/.style={nodes={memory block field=.1}}] {
      |[memory block field=.2,draw=none]| Memory layout &
        |[memory block field=.3,fill=red]| Used block &
        |[fill=green]| Free block &
        |[fill=green]| Free block &
        |[memory block field=.2, fill=green]| Free block &
        |[fill=red]| Used block \\
    };

\coordinate[above=5em of A-1-5.east] (aa);
\coordinate[above=5em of A-1-3.west] (bb);

\node[fill=green,inner sep=0,draw, fit=(aa) (bb), minimum
  height=12mm,]{Requested size};

\end{tikzpicture}

\end{document}

相关内容