使用 Tikz 绘制嵌套矩形文本框

使用 Tikz 绘制嵌套矩形文本框

我想用 Tikz 绘制类似这样的东西(示例给出了 4 个框,但可以有更多框):

在此处输入图片描述

目前,我已经获得了这个(感谢这个答案这一个(对于 pgfonlayer):

在此处输入图片描述

使用此代码:

\documentclass[tikz, border=2mm]{standalone}
\usetikzlibrary{backgrounds, 
    fit,
    positioning,
    shapes.multipart}

\pgfdeclarelayer{layer1}
\pgfdeclarelayer{layer2}
\pgfdeclarelayer{layer3}
\pgfsetlayers{main,layer1,layer2,layer3}

\definecolor{CoreBlue}{HTML}{5b9bd5}
\definecolor{CoreOrange}{HTML}{ec7d2d}
\begin{document}
    \tikzset{
        base/.style = {text width=#1, align=center, text=white, outer sep=0pt},
        base/.default = 17mm,
        CB/.style = {base=#1, fill=CoreBlue},
        CO/.style = {base=#1, fill=CoreOrange},
    }
    \begin{tikzpicture}[]
        \begin{pgfonlayer}{layer2}
            \node (1a) [CB] {Box 1};
            \node (1b) [CO,below=0mm of 1a] {Box 2}; \\

        \end{pgfonlayer}
        \begin{pgfonlayer}{layer1}
                \node (1)  [CB, fit=(1a) (1b)] {};
        \end{pgfonlayer}
        \begin{pgfonlayer}{layer3}
            \node (1c) [CB,below=0mm of 1b] {Box 3}; \\
        \end{pgfonlayer}

        \end{tikzpicture}

\end{document}

答案1

\nestboxes下面是一个自定义效果的宏。语法如下:

\nestboxes[<tikz attributes>]{<width in cm>}{height in cm}{<list of colors and labels>}

<tikz attributes>是可选的,但可以包含xscale=或 之类的内容rotate=30, transform shape。宽度和高度是必需的。每个矩形在每个维度上都比前一个小 1cm。 中的每个元素<list of colors and labels>都应具有 的形式<label>/<color>

在此处输入图片描述

以下是代码:

\documentclass{article}

\usepackage{tikz}

\newcommand{\nestboxes}[4][]{
    \begin{tikzpicture}[#1]
        \foreach \L/\C[count=\n from 0] in {#4}{\fill[\C] (\n/2,#3-\n/2)node[black, below right]{\L} rectangle (#2-\n/2,\n/2);}
    \end{tikzpicture}
}

\begin{document}

\nestboxes{10}{6}{Box 1/red, Box 2/orange, Another box/yellow, One more box/green, Last box/blue!75}

\end{document}

答案2

您不需要 TikZ,因为\vrule这里只有彩色。

在以下示例中,我使用了 OpTeX 中使用的颜色设置。如果需要,您可以用宏中使用的颜色设置替换它。但主要思想是只有嵌套的\vrules。

\newdimen\nboxw  \nboxw=\hsize
\def\nestbox#1#2#3{%
   \hbox{#2\vrule width\nboxw height1em \kern-\nboxw \Black \rlap{\ #1}\kern1.4em
         \vtop{\kern.4em \advance\nboxw by-2.8em \hbox{#3}\kern1.4em}}%
}

\nestbox{Box 1}{\Red}{%
   \nestbox{Box 2}{\Brown}{%
      \nestbox{Another box}{\Yellow}{%
          \nestbox{One more box}{\Green}{%
              \nestbox{Last box}{\Blue}{\vbox to3em{}}%
}}}}

\bye

结果与 Sandy 的回答相同。

答案3

像这样?

在此处输入图片描述

代码:

\documentclass[tikz, border=2mm]{standalone}
\definecolor{CoreBlue}{HTML}{5b9bd5}
\definecolor{CoreOrange}{HTML}{ec7d2d}
\begin{document}

    \begin{tikzpicture}[]
        \filldraw[CoreBlue] (0,0) rectangle (10,10);
        \node at (.5,9.5) () {Box1};
        \filldraw[CoreOrange] (1,1) rectangle (9,9);
        \node at (1.5,8.5) () {Box2};   
        \filldraw[CoreBlue] (2,2) rectangle (8,8);
        \node at (2.5,7.5) () {Box3};
        \filldraw[CoreOrange] (3,3) rectangle (7,7);
        \node at (3.5,6.5) () {Box4};           
    \end{tikzpicture}
    
\end{document}

编辑: 其他几何形状 在此处输入图片描述

代码:

\documentclass[tikz, border=2mm]{standalone}
\definecolor{CoreBlue}{HTML}{5b9bd5}
\definecolor{CoreOrange}{HTML}{ec7d2d}
\begin{document}

    \begin{tikzpicture}[]
        \filldraw[CoreBlue] (0,0) rectangle (10,7);
        \node at (.5,6.75) () {Box1};
        \filldraw[CoreOrange] (.5,.5) rectangle (9.5,6.5);
        \node at (1,6.25) () {Box2};    
        \filldraw[CoreBlue] (1,1) rectangle (9,6);
        \node at (1.5,5.75) () {Box3};
        \filldraw[CoreOrange] (1.5,1.5) rectangle (8.5,5.5);
        \node at (2,5.25) () {Box4};    

    \end{tikzpicture}
    
\end{document}

答案4

使用tcolorbox您可以获得类似的结果:

\documentclass{article}
\usepackage[most]{tcolorbox}

\newtcolorbox{mybox}[2][]{sharp corners, colback=#2, colframe=#2, #1}

\begin{document}

\begin{mybox}{cyan!90!black}
Box 1
\begin{mybox}{orange!75!red}
Box 2
\begin{mybox}{cyan!90!black}
Box 3
\begin{mybox}[height=2cm]{orange!70!red}
Box 5
\end{mybox}
\end{mybox}
\end{mybox}
\end{mybox}
\end{document}

在此处输入图片描述

相关内容