Solución:
Puede hacer que los cuadros abarquen el ancho de la línea usando minimum width
. La posibilidad quizás más simple de distribuir uniformemente estas cajas está usando pos
a lo largo de una ruta que corre de izquierda a derecha en toda la página. Si las cajas tienen diferentes anchos, esto no funcionará, pero para su ejemplo sí. EDITAR: Simplificado el código, ¡muchas gracias a Peter Grill!
documentclass{article}
usepackage[margin=1in]{geometry}
%
usepackage{tikz}
usetikzlibrary{calc}
usetikzlibrary{fit}
usetikzlibrary{positioning}
%
begin{document}
%setlength{linewidth}{16cm}
%
pgfdeclarelayer{bg} % declare background layer
pgfsetlayers{bg,main} % set the order of the layers (main is the standard layer)
%
tikzset{
My Node Style/.style={
rectangle
,rounded corners
,fill=gray
,minimum width=6em
,minimum height=5ex
}
}
%
tikzset{
My RectLabel Style/.style={
draw=black
,fill=white
}
}
%
tikzset{
My Bg Style/.style={
inner ysep=5pt,outer xsep=0pt,
,inner ysep=20pt
,draw=black
,thick
,fill=lightgray,minimum
width=linewidth-2*pgflinewidth
}
}
%
begin{tikzpicture}
path (2cm,0) -- (linewidth-2cm,0)foreach X in {1,...,4}
{node (lib1X) [My Node Style,pos=(X-1)/3] {Library 1-X}};
path (2cm,20ex) -- (linewidth-2cm,20ex)foreach X in {1,...,5}
{node (lib2X) [My Node Style,pos=(X-1)/4] {Library 2-X}};
begin{pgfonlayer}{bg} % select the background layer
node[fit={(lib11) (lib14)}, My Bg Style] (rect1) {};
node[My RectLabel Style] (rect1Label) at ($(rect1.north west)!0.5!(rect1.north east)$) {Layer 1};
end{pgfonlayer}
%
begin{pgfonlayer}{bg} % select the background layer
node[fit={(lib21) (lib25)}, My Bg Style] (rect2) {};
node[My RectLabel Style] (rect2Label) at ($(rect2.north west)!0.5!(rect2.north east)$) {Layer 2};
end{pgfonlayer}
%
draw[->] (rect1Label.north) -- (rect2.south);
end{tikzpicture}
%
end{document}
Por qué no usar tcolorbox
? A tcbraster
hará algo de trabajo por nosotros.
documentclass{article}
usepackage{lipsum}
usepackage[most]{tcolorbox}
usepackage[T1]{fontenc}
usepackage[utf8]{inputenc}
usepackage{lmodern}
tcbset{
myraster/.style={
raster columns=#1,
raster equal height,
size=small,
rounded corners,
frame hidden,
colback=gray,
halign=center,
},
mybox/.style={
colframe=black,
sharp corners,
coltitle=black,
fontupper=small,
enhanced,
attach boxed title to top center={yshift*=-tcboxedtitleheight/2},
boxed title style={
colback=white,
colframe=black,
sharp corners,
remember as={title #1},
},
title={#1},
remember as={#1},
}
}
begin{document}
lipsum[1]
begin{tcboxeditemize}%
[%inner boxes properties
myraster=5
]{%outer box properties
mybox={Layer 2}
}
tcbitem Library 2-1
tcbitem Library 2-2
tcbitem Library 2-3
tcbitem Library 2-4
tcbitem Library 2-5
end{tcboxeditemize}
vspace*{.5cm}
begin{tcboxeditemize}%
[%inner boxes properties
myraster=3
]{%outer box properties
mybox={Layer 1}
}
tcbitem Library 1-1
tcbitem Library 1-2
tcbitem Library 1-3
end{tcboxeditemize}
tikz[remember picture, overlay] draw[<-] (Layer 2)--(title Layer 1);
end{document}
Actualizar:
Cuando el ráster usa más de una línea, puede centrar el contenido de la última línea con raster halign=center
opción.
Añádelo a myraster/.style
en el código anterior y obtendrá:
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)