我想用 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 中使用的颜色设置。如果需要,您可以用宏中使用的颜色设置替换它。但主要思想是只有嵌套的\vrule
s。
\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}