図の中に選択科目セクションを挿入する方法

図の中に選択科目セクションを挿入する方法

これは、以前の質問に投稿された「材料」セクションの補足です。カスタム主題相関図の描き方

さらに 2 つの材料が必要です。

  • 選択科目を作成します。次のようにラベル付けできますnonfillable elective subject

    記入不可の選択科目

    また、記入可能な選択科目も必要ですfillable elective subject。たとえば、次のようになります。

    記入可能な選択科目

    質問にあるように、この非常に役立つ回答

  • 選択科目のセットを含む図形を作成します。

    選択科目を含む図形

(図形の背景色と はTextField異なる場合があります。心配しないでください)。

必要なもの

  1. 最後の図形は、すべての余白に及ばずに、大きなオレンジ色の長方形の下部になければなりません。
  2. 選択科目は、選択科目のスタックに応じて高さが異なる場合がありますが、幅は常に同じです。ただし、その中の選択科目は中央に配置する必要があります。

    例

  3. 選択科目はどのオブジェクトにも関連しないので、水色の図形の幅を狭めることができることに注意してください。

私がしたこと

同じソースコードマーモットの答え:

\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}

matrixTiのコマンドも使えると思いますZ パッケージを使用して、画像を水色の図形内に配置しますが、新しいタイプを定義する必要がありますsubject(non)fillable elective subject

最終結果

元の質問と似ていますが、次の新しい図形を追加し、「レベル X」と水色の図形の間にある主題を垂直方向に中央揃えします。

最終結果

ありがとう!!

答え1

更新された質問に対する回答は次のとおりです。(回答を 2 つ追加すべきではないと思われる方: 1 つは削除してもかまいません。ただし、もう 1 つは他の方に役立つ可能性があると思います。) 以前と同様に、計算された距離を aux ファイルに書き込んで、再コンパイル後に使用できるようにするという戦略です。

\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}

ここに画像の説明を入力してください

答え2

主な問題は、まだ(?)tikz行列をネストできないことです。そのため、この提案は、概念的にはほぼ同じですが、少し異なる戦略に従います。ここで使用されているもの:

  1. 推測された距離を使用して行列を構築します。
  2. マトリックスを測定します。
  3. 測定値から「最適な」距離を計算します。
  4. 再コンパイル後に使用できるように、「最適な」距離を aux ファイルに書き込みます。

この例には、何が起こっているかを理解するのに役立つ注釈が多数あります。実際のインレイをループする必要があることにも注意してください。つまり、インレイを追加または削除する場合は、 を変更する必要がある場合があります\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}

ここに画像の説明を入力してください

これは注釈付きの 2 番目の例で、これもスクリーンショットに近いものです。

\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}

ここに画像の説明を入力してください

関連情報