Este é um adendo à seção "Ingredientes" postada em uma pergunta anterior:Como desenhar um diagrama de correlatividades de assuntos personalizados.
Precisamos de mais dois ingredientes:
Faça uma disciplina eletiva. Podemos rotulá-lo como
nonfillable elective subject
:Além disso, precisamos ter uma disciplina eletiva preenchível, chamada, por exemplo
fillable elective subject
:Como dito na pergunta, você pode usaresta resposta muito útil.
Faça uma forma que contenha um conjunto de disciplinas eletivas:
(Tanto a cor de fundo da forma quanto a TextField
cor podem variar. Não se preocupe com isso).
O que eu preciso
- A última forma deve ficar na parte inferior do grande retângulo laranja, sem atingir todas as margens.
As disciplinas eletivas podem ter alturas diferentes dependendo da pilha de disciplinas eletivas mas a largura é sempre a mesma, mas as disciplinas eletivas dentro dela devem estar centralizadas:
- Observe que as disciplinas eletivas não se relacionam com nenhum objeto, por isso podemos reduzir a largura da forma azul claro.
O que eu fiz
O mesmo código-fonte doresposta da marmota:
\documentclass{article}
\usepackage[showframe,margin=0in,footskip=0.25in,paperwidth=50cm,paperheight=20cm]{geometry}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage{globalvals}
\usepackage{hyperref}
\usepackage{tikz}
\usetikzlibrary{positioning,backgrounds,fit}
\tikzset{text field/.style={text height=1.5ex,align=center,rounded corners},
title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=4.5cm,align=center,font=\footnotesize\sffamily},
pics/fillable subject/.style={code={%
\node[text field] (-TF)
{\hspace*{-0.5em}\TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0.15em}\TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0em}\TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable subject/.style={code={%
\node[text field] (-TF)
{\hspace{1.2em}~/~\hspace{1.15em}~/~\hspace{2.35em}{}};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
manoooh/.style={column sep=-2cm,row sep=5mm}
}
\begin{document}
\thispagestyle{empty} % To suppress page number
\noindent
\begin{tikzpicture}
\fill[white,fill=orange] (0,0) rectangle (\paperwidth,-2cm) node[midway,align=center,font=\Huge] {\bfseries Some text here\\\LARGE More text here};
\end{tikzpicture}
\vfill
\centering
\begin{tikzpicture}[node distance=3.14cm]
% step 1: add the matrices, name them mat0, mat1 etc.
\begin{scope}[local bounding box=matrices]
\matrix[manoooh] (mat0) {
\pic (A) {nonfillable subject={Subject}}; & &
\pic (B) {nonfillable subject={Subject}}; \\
& \pic (C) {nonfillable subject={Subject}}; & \\
};
\matrix[manoooh,right=of mat0] (mat1){
\pic (D) {nonfillable subject={Subject}}; \\
\pic (E) {nonfillable subject={Subject}}; \\
\pic (F) {nonfillable subject={Subject}}; \\
\pic (G) {nonfillable subject={Subject}}; \\
};
\matrix[manoooh,right=of mat1] (mat2) {
\pic (H) {nonfillable subject={Subject}}; & &
\pic (I) {nonfillable subject={Subject}}; \\
& \pic (J) {nonfillable subject={Subject}}; & \\
\pic (K) {nonfillable subject={Subject}};
& &
\pic (L) {nonfillable subject={Subject}}; \\
};
\matrix[manoooh,right=of mat2] (mat3) {
& \pic (M) {nonfillable subject={Subject}}; & \\
\pic (N) {nonfillable subject={Subject}}; & &
\pic (O) {nonfillable subject={Subject}}; \\
\pic (P) {nonfillable subject={Subject}};
& &
\pic (Q) {nonfillable subject={Subject}}; \\
};
\end{scope}
\foreach \X in {0,...,3} %<- if you have more or less matrices, adjust 3
{\node[anchor=south,yshift=1cm,align=center,font=\LARGE\bfseries\boldmath]
at (mat\X |-matrices.north) (L\X) {Level $\X$};
\begin{scope}[on background layer]
% the fit parameters determine the shape of the background rectangles
\node[fit=(L\X) (mat\X) (matrices.south-|mat\X.south),inner ysep=5mm,
inner xsep=5mm,fill=orange!30,rounded corners=50pt](F\X){};
\end{scope}}
% now add the arrows
\foreach \X in {D,...,G}
{\draw[blue,-latex] (B-Title) to[out=0,in=180] (\X-Title);}
\end{tikzpicture}
\vfill
\end{document}
Acho que também poderíamos usar o matrix
comando do TikPacote Z para posicionar as imagens dentro da forma azul claro, mas precisamos definir um novo tipo de subject
: (non)fillable elective subject
.
Resultado final
Semelhante à pergunta original, mas adicionando essas novas formas e centralizando verticalmente os assuntos que estão entre o "Nível X" e as formas azuis claras:
Obrigado!!
Responder1
Aqui está uma resposta para sua pergunta atualizada. (Para aqueles que acham que não devo acrescentar duas respostas: ficarei feliz em remover uma delas. No entanto, acho que a outra pode ser potencialmente útil para outros.) Como antes, a estratégia é escrever distâncias calculadas para o arquivo aux para que possam ser usados após uma recompilação.
\documentclass{article}
\usepackage[showframe,margin=0in,footskip=0.25in,paperwidth=54cm,paperheight=24cm]{geometry}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{tikz}
\usetikzlibrary{positioning,backgrounds,fit,calc}
\tikzset{text field/.style={text height=1.5ex,align=center,rounded corners},
title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=4.5cm,align=center,font=\footnotesize\sffamily},
pics/fillable subject/.style={code={%
\node[text field] (-TF)
{\hspace*{-0.5em}\TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0.15em}\TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0em}\TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable subject/.style={code={%
\node[text field] (-TF)
{\hspace{1.2em}~/~\hspace{1.15em}~/~\hspace{2.35em}{}};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
manoooh/.style={column sep=-1.75cm,row sep=5mm},
manooohE/.style={column sep=-2.25cm,row sep=5mm,anchor=south},
electives/.style={column sep=-2.25cm,row sep=5mm},
fit sep/.initial=10pt,
fit dist/.initial=20pt,
inlay top sep/.initial=24pt,
matrix top sep/.initial=24pt,
}
\makeatletter% from https://tex.stackexchange.com/a/85531/121799
\long\def\ifnodedefined#1#2#3{%
\@ifundefined{pgf@sh@ns@#1}{#3}{#2}%
}
\makeatother
\begin{document}
\thispagestyle{empty} % To suppress page number
\noindent
\begin{tikzpicture}
\fill[white,fill=orange] (0,0) rectangle (\paperwidth,-2cm) node[midway,align=center,font=\Huge] {\bfseries Some text here\\\LARGE More text here};
\end{tikzpicture}
\ifdefined\mymatdist
%\typeout{got\space\mymatdist}
\else
\typeout{Please\space recompile\space your\space file!}
\def\mymatdist{150pt}
\fi
\ifdefined\mymatbottom
%\typeout{got\space\mymatbottom}
\else
\typeout{Please\space recompile\space your\space file!}
\def\mymatbottom{-150pt}
\fi
\ifdefined\myheight
\else
\def\myheight{0}
\typeout{Please\space recompile\space your\space file!}
\fi
\ifdefined\LstMatShifts
\else
\def\LstMatShifts{{0pt,0pt,0pt,0pt,0pt}}
\fi
%\typeout{height:\myheight}
%\typeout{shifts(in):\LstMatShifts}
\vfill
\centering
\begin{tikzpicture}[node distance=3.14cm]
% step 1: add the matrices, name them mat0, mat1 etc.
\begin{scope}[local bounding box=matrices]
\matrix[manoooh] (mat0) at (0*\mymatdist,{\LstMatShifts[0]}) {
\pic[local bounding box=A] (A) {nonfillable subject={Subject}}; & &
\pic (B) {nonfillable subject={Subject}}; \\
& \pic (C) {nonfillable subject={Subject}}; & \\
};
\matrix[manooohE,column sep=8pt] (matE0) at (0*\mymatdist,\mymatbottom) {
\pic (AE) {nonfillable subject={Subject}}; &
\pic (BE) {nonfillable subject={Subject}}; \\
\pic (CE) {nonfillable subject={Subject}}; &
\pic (DE) {nonfillable subject={Subject}}; \\
};
\matrix[manoooh] (mat1) at (1*\mymatdist,{\LstMatShifts[1]}) {
\pic (D) {nonfillable subject={Subject}}; \\
\pic (E) {nonfillable subject={Subject}}; \\
\pic (F) {nonfillable subject={Subject}}; \\
\pic (G) {nonfillable subject={Subject}}; \\
\pic (D') {nonfillable subject={Subject}}; \\
\pic (E') {nonfillable subject={Subject}}; \\
\pic (F') {nonfillable subject={Subject}}; \\
\pic (G') {nonfillable subject={Subject}}; \\
};
\matrix[manoooh] (mat2) at (2*\mymatdist,{\LstMatShifts[2]}) {
\pic (H) {nonfillable subject={Subject}}; & &
\pic (I) {nonfillable subject={Subject}}; \\
& \pic (J) {nonfillable subject={Subject}}; & \\
\pic (K) {nonfillable subject={Subject}};
& &
\pic (L) {nonfillable subject={Subject}}; \\
};
\matrix[manooohE] (matE2) at (2*\mymatdist,\mymatbottom) {
\pic (HE) {nonfillable subject={Subject}}; \\
};
\matrix[manoooh] (mat3) at (3*\mymatdist,{\LstMatShifts[3]}) {
& \pic (M) {nonfillable subject={Subject}}; & \\
\pic (N) {nonfillable subject={Subject}}; & &
\pic (O) {nonfillable subject={Subject}}; \\
\pic (P) {nonfillable subject={Subject}};
& &
\pic (Q) {nonfillable subject={Subject}}; \\
};
\matrix[manooohE] (matE3) at (3*\mymatdist,\mymatbottom) {
&\pic (ME) {nonfillable subject={Subject}}; &\\
\pic (NE) {nonfillable subject={Subject}}; & &
\pic (POE) {nonfillable subject={Subject}}; \\
\pic (PE) {nonfillable subject={Subject}}; & &
\pic (QE) {nonfillable subject={Subject}}; \\
};
\end{scope}
\pgfmathsetmacro{\mywidth}{0}
\foreach \X in {0,...,3} %<- if you have more or less matrices, adjust 3
{
\ifnodedefined{matE\X}{% has inlay
\path let \p1=($(mat\X.north east)-(mat\X.south west)$),
\p2=($(matE\X.north east)-(matE\X.south west)$)
in
\pgfextra{\pgfmathsetmacro{\mywidth}{max(\x1,\mywidth)}
\pgfmathsetmacro{\myheight}{max(\y1+\y2+%
\pgfkeysvalueof{/tikz/inlay top sep}+\pgfkeysvalueof{/tikz/matrix top sep},%
\myheight)}
\xdef\mywidth{\mywidth}\xdef\myheight{\myheight}
\pgfmathsetmacro{\myshift}{(\pgfkeysvalueof{/tikz/inlay top sep}+\y2)/2}
\ifnum\X=0
\xdef\LstMatShifts{\myshift pt}
\else
\xdef\LstMatShifts{\LstMatShifts,\myshift pt}
\fi};}{% no inlay
\path
let \p1=($(mat\X.north east)-(mat\X.south west)$) in
\pgfextra{\pgfmathsetmacro{\mywidth}{max(\x1,\mywidth)}
\pgfmathsetmacro{\myheight}{max(\y1+\pgfkeysvalueof{/tikz/matrix top sep},\myheight)}
\xdef\mywidth{\mywidth}\xdef\myheight{\myheight}};
\ifnum\X=0
\xdef\LstMatShifts{0pt}
\else
\xdef\LstMatShifts{\LstMatShifts,0pt}
\fi
}
\node[anchor=south,yshift=1cm,align=center,font=\LARGE\bfseries\boldmath]
at (mat\X |-matrices.north) (L\X) {Level $\X$};
\begin{scope}[on background layer]
% the fit parameters determine the shape of the background rectangles
\node[fit=(L\X) (mat\X) (matrices.south-|mat\X.south),inner ysep=5mm,
minimum width=\mymatdist-\pgfkeysvalueof{/tikz/fit dist}/2,
fill=orange!30,rounded corners=50pt](F\X){};
\end{scope}}
%\typeout{height1:\myheight} %
%
\pgfmathsetmacro{\mydist}{\mywidth+2*\pgfkeysvalueof{/tikz/fit
sep}+\pgfkeysvalueof{/tikz/fit dist}}
\xdef\mydist{\mydist}
\def\mymatbottom{0pt}
\foreach \X in {0,...,3} %
{\ifnodedefined{matE\X}{\path let \p1=($(mat\X.north)-(mat\X.south)$),
\p2=($(matE\X.north)-(matE\X.south)$),
\n1={max(abs(\y1)/2+abs(\y2)+2*\pgfkeysvalueof{/tikz/inlay top sep},\mymatbottom)}
in \pgfextra{\xdef\mymatbottom{\n1}}
node[anchor=south east,xshift=-2cm,font=\LARGE\bfseries] (El\X)
at (matE\X.north){Electives};
\begin{scope}[on background layer]
\node[fit=(matE\X) (El\X)] (FE\X){};
\fill[blue!30,rounded corners=30pt] (\X*\mymatdist-
\mymatdist/2+\pgfkeysvalueof{/tikz/fit dist}/4+10pt,0|-FE\X.north)
rectangle (\X*\mymatdist+
\mymatdist/2-\pgfkeysvalueof{/tikz/fit dist}/4-10pt,0|-FE\X.south);
\end{scope}}{}}
%\typeout{shifts(end):\LstMatShifts}
\makeatletter
\immediate\write\@mainaux{\xdef\string\mymatdist{\mydist pt}\relax}
\immediate\write\@mainaux{\xdef\string\mymatbottom{-\mymatbottom}\relax}
\immediate\write\@mainaux{\xdef\string\myheight{\myheight}\relax}
\immediate\write\@mainaux{\xdef\string\LstMatShifts{{\LstMatShifts}}\relax}
\makeatother
% now add the arrows
\foreach \X in {D,...,G}
{\draw[blue,-latex] (B-Title) to[out=0,in=180] (\X-Title);}
\end{tikzpicture}
\vfill
\end{document}
Responder2
A principal complicação é que ainda não é possível (?) aninhar matrizes tikz. Portanto, esta proposta segue uma estratégia ligeiramente diferente, que é conceitualmente mais ou menos igual àaquele usado aqui:
- Construa as matrizes com algumas distâncias estimadas.
- Meça as matrizes.
- Calcule distâncias "ótimas" a partir dos valores medidos.
- Escreva as distâncias "ideais" no arquivo aux para que possam ser usadas após a recompilação.
O exemplo tem muitas anotações que devem ajudar a entender o que está acontecendo. Observe também que você precisa fazer um loop sobre as incrustações reais, ou seja, se quiser adicionar ou remover incrustações, talvez seja necessário modificar o arquivo \foreach \X in {0,2,3}
.
\documentclass{article}
\usepackage[showframe,margin=0in,footskip=0.25in,paperwidth=54cm,paperheight=20cm]{geometry}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{tikz}
\usetikzlibrary{positioning,backgrounds,fit,calc}
\tikzset{text field/.style={text height=1.5ex,align=center,rounded corners},
title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=4.5cm,align=center,font=\footnotesize\sffamily},
pics/fillable subject/.style={code={%
\node[text field] (-TF)
{\hspace*{-0.5em}\TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0.15em}\TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0em}\TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable subject/.style={code={%
\node[text field] (-TF)
{\hspace{1.2em}~/~\hspace{1.15em}~/~\hspace{2.35em}{}};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
manoooh/.style={column sep=-1.75cm,row sep=5mm},
manooohE/.style={column sep=-2.25cm,row sep=5mm,anchor=south},
wrapper/.style={fit=#1,inner sep=0pt,minimum width=\useVal{matrix_width}}
electives/.style={column sep=-2.25cm,row sep=5mm},
fit sep/.initial=10pt,
fit dist/.initial=20pt,
inlay top sep/.initial=24pt
}
\begin{document}
\thispagestyle{empty} % To suppress page number
\noindent
\begin{tikzpicture}
\fill[white,fill=orange] (0,0) rectangle (\paperwidth,-2cm) node[midway,align=center,font=\Huge] {\bfseries Some text here\\\LARGE More text here};
\end{tikzpicture}
\ifdefined\mymatdist
%\typeout{got\space\mymatdist}
\else
\typeout{Please\space recompile\space your\space file!}
\def\mymatdist{150pt}
\fi
\ifdefined\mymatbottom
%\typeout{got\space\mymatbottom}
\else
\typeout{Please\space recompile\space your\space file!}
\def\mymatbottom{-150pt}
\fi
\vfill
\centering
\begin{tikzpicture}[node distance=3.14cm]
% step 1: add the matrices, name them mat0, mat1 etc.
\begin{scope}[local bounding box=matrices]
\matrix[manoooh] (mat0) at (0*\mymatdist,0) {
\pic[local bounding box=A] (A) {nonfillable subject={Subject}}; & &
\pic (B) {nonfillable subject={Subject}}; \\
& \pic (C) {nonfillable subject={Subject}}; & \\
};
\matrix[manooohE,column sep=8pt] (matE0) at (0*\mymatdist,\mymatbottom) {
\pic (AE) {nonfillable subject={Subject}}; &
\pic (BE) {nonfillable subject={Subject}}; \\
\pic (CE) {nonfillable subject={Subject}}; &
\pic (DE) {nonfillable subject={Subject}}; \\
};
\matrix[manoooh] (mat1) at (1*\mymatdist,0) {
\pic (D) {nonfillable subject={Subject}}; \\
\pic (E) {nonfillable subject={Subject}}; \\
\pic (F) {nonfillable subject={Subject}}; \\
\pic (G) {nonfillable subject={Subject}}; \\
};
\matrix[manoooh] (mat2) at (2*\mymatdist,0) {
\pic (H) {nonfillable subject={Subject}}; & &
\pic (I) {nonfillable subject={Subject}}; \\
& \pic (J) {nonfillable subject={Subject}}; & \\
\pic (K) {nonfillable subject={Subject}};
& &
\pic (L) {nonfillable subject={Subject}}; \\
};
\matrix[manooohE] (matE2) at (2*\mymatdist,\mymatbottom) {
\pic (HE) {nonfillable subject={Subject}}; \\
};
\matrix[manoooh] (mat3) at (3*\mymatdist,0) {
& \pic (M) {nonfillable subject={Subject}}; & \\
\pic (N) {nonfillable subject={Subject}}; & &
\pic (O) {nonfillable subject={Subject}}; \\
\pic (P) {nonfillable subject={Subject}};
& &
\pic (Q) {nonfillable subject={Subject}}; \\
};
\matrix[manooohE] (matE3) at (3*\mymatdist,\mymatbottom) {
&\pic (ME) {nonfillable subject={Subject}}; &\\
\pic (NE) {nonfillable subject={Subject}}; & &
\pic (POE) {nonfillable subject={Subject}}; \\
\pic (PE) {nonfillable subject={Subject}}; & &
\pic (QE) {nonfillable subject={Subject}}; \\
};
\end{scope}
\pgfmathsetmacro{\mywidth}{0pt}
\foreach \X in {0,...,3} %<- if you have more or less matrices, adjust 3
{\path let \p1=($(mat\X.east)-(mat\X.west)$) in
\pgfextra{\pgfmathsetmacro{\mywidth}{max(\x1,\mywidth)}
\xdef\mywidth{\mywidth}};
\node[anchor=south,yshift=1cm,align=center,font=\LARGE\bfseries\boldmath]
at (mat\X |-matrices.north) (L\X) {Level $\X$};
\begin{scope}[on background layer]
% the fit parameters determine the shape of the background rectangles
\node[fit=(L\X) (mat\X) (matrices.south-|mat\X.south),inner ysep=5mm,
minimum width=\mymatdist-\pgfkeysvalueof{/tikz/fit dist}/2,
fill=orange!30,rounded corners=50pt](F\X){};
\end{scope}}
%\xdef\mydist{\mydist}
\pgfmathsetmacro{\mydist}{\mywidth+2*\pgfkeysvalueof{/tikz/fit
sep}+\pgfkeysvalueof{/tikz/fit dist}}
\xdef\mydist{\mydist}
\def\mymatbottom{0pt}
\foreach \X in {0,2,3} %<run only over those entries that have inlays
{\path let \p1=($(mat\X.north)-(mat\X.south)$),
\p2=($(matE\X.north)-(matE\X.south)$),
\n1={max(abs(\y1)/2+abs(\y2)+2*\pgfkeysvalueof{/tikz/inlay top sep},\mymatbottom)}
in \pgfextra{\xdef\mymatbottom{\n1}}
node[anchor=south east,xshift=-2cm,font=\LARGE\bfseries] (El\X)
at (matE\X.north){Electives};
\begin{scope}[on background layer]
\node[fit=(matE\X) (El\X)] (FE\X){};
\fill[blue!30,rounded corners=30pt] (\X*\mymatdist-
\mymatdist/2+\pgfkeysvalueof{/tikz/fit dist}/4+10pt,0|-FE\X.north)
rectangle (\X*\mymatdist+
\mymatdist/2-\pgfkeysvalueof{/tikz/fit dist}/4-10pt,0|-FE\X.south);
\end{scope}}
\makeatletter
\immediate\write\@mainaux{\xdef\string\mymatdist{\mydist pt}\relax}
\immediate\write\@mainaux{\xdef\string\mymatbottom{-\mymatbottom}\relax}
\makeatother
% now add the arrows
\foreach \X in {D,...,G}
{\draw[blue,-latex] (B-Title) to[out=0,in=180] (\X-Title);}
\end{tikzpicture}
\vfill
\end{document}
E este é um segundo exemplo com anotações que também está mais próximo da captura de tela.
\documentclass{article}
\usepackage[showframe,margin=0in,footskip=0.25in,paperwidth=54cm,paperheight=24cm]{geometry}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{tikz}
\usetikzlibrary{positioning,backgrounds,fit,calc}
\tikzset{text field/.style={text height=1.5ex,align=center,rounded corners},
title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=4.5cm,align=center,font=\footnotesize\sffamily},
pics/fillable subject/.style={code={%
\node[text field] (-TF)
{\hspace*{-0.5em}\TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0.15em}\TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0em}\TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable subject/.style={code={%
\node[text field] (-TF)
{\hspace{1.2em}~/~\hspace{1.15em}~/~\hspace{2.35em}{}};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
manoooh/.style={column sep=-1.75cm,row sep=5mm},
manooohE/.style={column sep=-2.25cm,row sep=5mm,anchor=south},
wrapper/.style={fit=#1,inner sep=0pt,minimum width=\useVal{matrix_width}}
electives/.style={column sep=-2.25cm,row sep=5mm},
fit sep/.initial=10pt,
fit dist/.initial=20pt,
inlay top sep/.initial=24pt
}
\begin{document}
\thispagestyle{empty} % To suppress page number
\noindent
\begin{tikzpicture}
\fill[white,fill=orange] (0,0) rectangle (\paperwidth,-2cm) node[midway,align=center,font=\Huge] {\bfseries Some text here\\\LARGE More text here};
\end{tikzpicture}
\ifdefined\mymatdist
%\typeout{got\space\mymatdist}
\else
\typeout{Please\space recompile\space your\space file!}
\def\mymatdist{150pt}
\fi
\ifdefined\mymatbottom
%\typeout{got\space\mymatbottom}
\else
\typeout{Please\space recompile\space your\space file!}
\def\mymatbottom{-150pt}
\fi
\vfill
\centering
\begin{tikzpicture}[node distance=3.14cm]
% step 1: add the matrices, name them mat0, mat1 etc.
\begin{scope}[local bounding box=matrices]
\matrix[manoooh] (mat0) at (0*\mymatdist,0) {
\pic[local bounding box=A] (A) {nonfillable subject={Subject}}; & &
\pic (B) {nonfillable subject={Subject}}; \\
& \pic (C) {nonfillable subject={Subject}}; & \\
};
\matrix[manooohE,column sep=8pt] (matE0) at (0*\mymatdist,\mymatbottom) {
\pic (AE) {nonfillable subject={Subject}}; &
\pic (BE) {nonfillable subject={Subject}}; \\
\pic (CE) {nonfillable subject={Subject}}; &
\pic (DE) {nonfillable subject={Subject}}; \\
};
\matrix[manoooh] (mat1) at (1*\mymatdist,0) {
\pic (D) {nonfillable subject={Subject}}; \\
\pic (E) {nonfillable subject={Subject}}; \\
\pic (F) {nonfillable subject={Subject}}; \\
\pic (G) {nonfillable subject={Subject}}; \\
\pic (D') {nonfillable subject={Subject}}; \\
\pic (E') {nonfillable subject={Subject}}; \\
\pic (F') {nonfillable subject={Subject}}; \\
\pic (G') {nonfillable subject={Subject}}; \\
};
\matrix[manoooh] (mat2) at (2*\mymatdist,0) {
\pic (H) {nonfillable subject={Subject}}; & &
\pic (I) {nonfillable subject={Subject}}; \\
& \pic (J) {nonfillable subject={Subject}}; & \\
\pic (K) {nonfillable subject={Subject}};
& &
\pic (L) {nonfillable subject={Subject}}; \\
};
\matrix[manooohE] (matE2) at (2*\mymatdist,\mymatbottom) {
\pic (HE) {nonfillable subject={Subject}}; \\
};
\matrix[manoooh] (mat3) at (3*\mymatdist,0) {
& \pic (M) {nonfillable subject={Subject}}; & \\
\pic (N) {nonfillable subject={Subject}}; & &
\pic (O) {nonfillable subject={Subject}}; \\
\pic (P) {nonfillable subject={Subject}};
& &
\pic (Q) {nonfillable subject={Subject}}; \\
};
\matrix[manooohE] (matE3) at (3*\mymatdist,\mymatbottom) {
&\pic (ME) {nonfillable subject={Subject}}; &\\
\pic (NE) {nonfillable subject={Subject}}; & &
\pic (POE) {nonfillable subject={Subject}}; \\
\pic (PE) {nonfillable subject={Subject}}; & &
\pic (QE) {nonfillable subject={Subject}}; \\
};
\end{scope}
\pgfmathsetmacro{\mywidth}{0pt}
\foreach \X in {0,...,3} %<- if you have more or less matrices, adjust 3
{\path let \p1=($(mat\X.east)-(mat\X.west)$) in
\pgfextra{\pgfmathsetmacro{\mywidth}{max(\x1,\mywidth)}
\xdef\mywidth{\mywidth}};
\node[anchor=south,yshift=1cm,align=center,font=\LARGE\bfseries\boldmath]
at (mat\X |-matrices.north) (L\X) {Level $\X$};
\begin{scope}[on background layer]
% the fit parameters determine the shape of the background rectangles
\node[fit=(L\X) (mat\X) (matrices.south-|mat\X.south),inner ysep=5mm,
minimum width=\mymatdist-\pgfkeysvalueof{/tikz/fit dist}/2,
fill=orange!30,rounded corners=50pt](F\X){};
\end{scope}}
%\xdef\mydist{\mydist}
\pgfmathsetmacro{\mydist}{\mywidth+2*\pgfkeysvalueof{/tikz/fit
sep}+\pgfkeysvalueof{/tikz/fit dist}}
\xdef\mydist{\mydist}
\def\mymatbottom{0pt}
\foreach \X in {0,2,3} %<run only over those entries that have inlays
{\path let \p1=($(mat\X.north)-(mat\X.south)$),
\p2=($(matE\X.north)-(matE\X.south)$),
\n1={max(abs(\y1)/2+abs(\y2)+2*\pgfkeysvalueof{/tikz/inlay top sep},\mymatbottom)}
in \pgfextra{\xdef\mymatbottom{\n1}}
node[anchor=south east,xshift=-2cm,font=\LARGE\bfseries] (El\X)
at (matE\X.north){Electives};
\begin{scope}[on background layer]
\node[fit=(matE\X) (El\X)] (FE\X){};
\fill[blue!30,rounded corners=30pt] (\X*\mymatdist-
\mymatdist/2+\pgfkeysvalueof{/tikz/fit dist}/4+10pt,0|-FE\X.north)
rectangle (\X*\mymatdist+
\mymatdist/2-\pgfkeysvalueof{/tikz/fit dist}/4-10pt,0|-FE\X.south);
\end{scope}}
\makeatletter
\immediate\write\@mainaux{\xdef\string\mymatdist{\mydist pt}\relax}
\immediate\write\@mainaux{\xdef\string\mymatbottom{-\mymatbottom}\relax}
\makeatother
% now add the arrows
\foreach \X in {D,...,G}
{\draw[blue,-latex] (B-Title) to[out=0,in=180] (\X-Title);}
\foreach \X in {0,...,3}
{\node[circle,red,inner sep=4pt,fill,label={[font=\Huge,text=red]above:mat \X\ center}] (c\X) at
(mat\X.center){};
\unless\ifnum\X=1
\node[circle,blue,inner sep=4pt,fill,
label={[font=\Huge,text=blue]above:matE \X' south}] (c\X') at
(matE\X.south){};
\fi
}
\end{tikzpicture}
\vfill
\end{document}