How to put a box and use columns to separate arrows












2















I am using the following resources:




  • The multicols environment of Draw a set of arrows using a palette of colors.


  • The box of How to put a long piece of text in a box?



MWE:



documentclass{article}
usepackage[margin=0in,footskip=0in]{geometry}
usepackage[english]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{hyperref}
usepackage{multicol}
usepackage[tikz]{ocgx2}
usepackage{amssymb} % checkmark
% check box command for layer switching
newcommandlayerCheckBox[3]{%
% #1: switch id, if empty use #2 instead
% #2: layer ids to be toggled (space separated if multiple ids),
% #3: initial visibility
resizebox{2ex}{!}{ooalign{%
switchocg{#1 #2}{$square$}cr%
begin{ocg}{%
ifxnil#1nil#2else#1fi%
}{%
ifxnil#1nil#2else#1fi%
}{#3}$checkmark$end{ocg}%
}}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

usepackage{tikz}

%%%%%%%%%%%%%%%%%%%%%%%%%
newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
%%%%%%%%%%%%%%%%%%%%%%%%%

begin{document}

flushleft
qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
% list of OCGs, space separated
defocglist{}%
foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
fbox{%
parbox{5cm}{%
% on/off All
showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
% checkboxes
foreach X in {0,...,totalnodes} {%
begin{multicols}{4}
layerCheckBox{}{myArrowX}{on}begin{tikzpicture}%
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
end{tikzpicture}\%
end{multicols}
}%
}
}
}

end{document}


MWE output



I would like to:




  1. Center every arrow to the corresponding checkbox.

  2. Put to work multicols (it says "4" but it is actually 1 column).

  3. Get rid of the "Bad Box(es)" messages by making a good use of fbox (or similar command).

  4. Not say parbox{5cm}{...} but parbox{<automatic>}{...}, where parbox calculates the proper vertical space of the box, based on the quantity of columns.


I want this:



What I want



P.S. There can actually be 4 or 5 or any number of columns.










share|improve this question





























    2















    I am using the following resources:




    • The multicols environment of Draw a set of arrows using a palette of colors.


    • The box of How to put a long piece of text in a box?



    MWE:



    documentclass{article}
    usepackage[margin=0in,footskip=0in]{geometry}
    usepackage[english]{babel}
    usepackage[utf8]{inputenc}
    usepackage[T1]{fontenc}
    usepackage{hyperref}
    usepackage{multicol}
    usepackage[tikz]{ocgx2}
    usepackage{amssymb} % checkmark
    % check box command for layer switching
    newcommandlayerCheckBox[3]{%
    % #1: switch id, if empty use #2 instead
    % #2: layer ids to be toggled (space separated if multiple ids),
    % #3: initial visibility
    resizebox{2ex}{!}{ooalign{%
    switchocg{#1 #2}{$square$}cr%
    begin{ocg}{%
    ifxnil#1nil#2else#1fi%
    }{%
    ifxnil#1nil#2else#1fi%
    }{#3}$checkmark$end{ocg}%
    }}%
    }
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    usepackage{tikz}

    %%%%%%%%%%%%%%%%%%%%%%%%%
    newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
    %%%%%%%%%%%%%%%%%%%%%%%%%

    begin{document}

    flushleft
    qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
    % list of OCGs, space separated
    defocglist{}%
    foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
    fbox{%
    parbox{5cm}{%
    % on/off All
    showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
    hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
    % checkboxes
    foreach X in {0,...,totalnodes} {%
    begin{multicols}{4}
    layerCheckBox{}{myArrowX}{on}begin{tikzpicture}%
    pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
    end{tikzpicture}\%
    end{multicols}
    }%
    }
    }
    }

    end{document}


    MWE output



    I would like to:




    1. Center every arrow to the corresponding checkbox.

    2. Put to work multicols (it says "4" but it is actually 1 column).

    3. Get rid of the "Bad Box(es)" messages by making a good use of fbox (or similar command).

    4. Not say parbox{5cm}{...} but parbox{<automatic>}{...}, where parbox calculates the proper vertical space of the box, based on the quantity of columns.


    I want this:



    What I want



    P.S. There can actually be 4 or 5 or any number of columns.










    share|improve this question



























      2












      2








      2








      I am using the following resources:




      • The multicols environment of Draw a set of arrows using a palette of colors.


      • The box of How to put a long piece of text in a box?



      MWE:



      documentclass{article}
      usepackage[margin=0in,footskip=0in]{geometry}
      usepackage[english]{babel}
      usepackage[utf8]{inputenc}
      usepackage[T1]{fontenc}
      usepackage{hyperref}
      usepackage{multicol}
      usepackage[tikz]{ocgx2}
      usepackage{amssymb} % checkmark
      % check box command for layer switching
      newcommandlayerCheckBox[3]{%
      % #1: switch id, if empty use #2 instead
      % #2: layer ids to be toggled (space separated if multiple ids),
      % #3: initial visibility
      resizebox{2ex}{!}{ooalign{%
      switchocg{#1 #2}{$square$}cr%
      begin{ocg}{%
      ifxnil#1nil#2else#1fi%
      }{%
      ifxnil#1nil#2else#1fi%
      }{#3}$checkmark$end{ocg}%
      }}%
      }
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      usepackage{tikz}

      %%%%%%%%%%%%%%%%%%%%%%%%%
      newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
      %%%%%%%%%%%%%%%%%%%%%%%%%

      begin{document}

      flushleft
      qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
      % list of OCGs, space separated
      defocglist{}%
      foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
      fbox{%
      parbox{5cm}{%
      % on/off All
      showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
      hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
      % checkboxes
      foreach X in {0,...,totalnodes} {%
      begin{multicols}{4}
      layerCheckBox{}{myArrowX}{on}begin{tikzpicture}%
      pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
      end{tikzpicture}\%
      end{multicols}
      }%
      }
      }
      }

      end{document}


      MWE output



      I would like to:




      1. Center every arrow to the corresponding checkbox.

      2. Put to work multicols (it says "4" but it is actually 1 column).

      3. Get rid of the "Bad Box(es)" messages by making a good use of fbox (or similar command).

      4. Not say parbox{5cm}{...} but parbox{<automatic>}{...}, where parbox calculates the proper vertical space of the box, based on the quantity of columns.


      I want this:



      What I want



      P.S. There can actually be 4 or 5 or any number of columns.










      share|improve this question
















      I am using the following resources:




      • The multicols environment of Draw a set of arrows using a palette of colors.


      • The box of How to put a long piece of text in a box?



      MWE:



      documentclass{article}
      usepackage[margin=0in,footskip=0in]{geometry}
      usepackage[english]{babel}
      usepackage[utf8]{inputenc}
      usepackage[T1]{fontenc}
      usepackage{hyperref}
      usepackage{multicol}
      usepackage[tikz]{ocgx2}
      usepackage{amssymb} % checkmark
      % check box command for layer switching
      newcommandlayerCheckBox[3]{%
      % #1: switch id, if empty use #2 instead
      % #2: layer ids to be toggled (space separated if multiple ids),
      % #3: initial visibility
      resizebox{2ex}{!}{ooalign{%
      switchocg{#1 #2}{$square$}cr%
      begin{ocg}{%
      ifxnil#1nil#2else#1fi%
      }{%
      ifxnil#1nil#2else#1fi%
      }{#3}$checkmark$end{ocg}%
      }}%
      }
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      usepackage{tikz}

      %%%%%%%%%%%%%%%%%%%%%%%%%
      newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
      %%%%%%%%%%%%%%%%%%%%%%%%%

      begin{document}

      flushleft
      qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
      % list of OCGs, space separated
      defocglist{}%
      foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
      fbox{%
      parbox{5cm}{%
      % on/off All
      showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
      hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
      % checkboxes
      foreach X in {0,...,totalnodes} {%
      begin{multicols}{4}
      layerCheckBox{}{myArrowX}{on}begin{tikzpicture}%
      pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
      end{tikzpicture}\%
      end{multicols}
      }%
      }
      }
      }

      end{document}


      MWE output



      I would like to:




      1. Center every arrow to the corresponding checkbox.

      2. Put to work multicols (it says "4" but it is actually 1 column).

      3. Get rid of the "Bad Box(es)" messages by making a good use of fbox (or similar command).

      4. Not say parbox{5cm}{...} but parbox{<automatic>}{...}, where parbox calculates the proper vertical space of the box, based on the quantity of columns.


      I want this:



      What I want



      P.S. There can actually be 4 or 5 or any number of columns.







      tikz-pgf vertical-alignment arrows multicolumn






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 31 at 4:38







      manooooh

















      asked Mar 31 at 1:39









      manoooohmanooooh

      1,1891517




      1,1891517






















          1 Answer
          1






          active

          oldest

          votes


















          2














          I hope I didn't screw it but I tested on acroread and it seemed to still work. All I did was to comment out multicolumn (the purpose of which I didn't understand), added some quads and gave the tikzpictures some baselines.



          enter image description here



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=32cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}
          usepackage{multicol}
          usepackage[tikz]{ocgx2}
          usepackage{amssymb} % checkmark
          % check box command for layer switching
          newcommandlayerCheckBox[3]{%
          % #1: switch id, if empty use #2 instead
          % #2: layer ids to be toggled (space separated if multiple ids),
          % #3: initial visibility
          resizebox{2ex}{!}{ooalign{%
          switchocg{#1 #2}{$square$}cr%
          begin{ocg}{%
          ifxnil#1nil#2else#1fi%
          }{%
          ifxnil#1nil#2else#1fi%
          }{#3}$checkmark$end{ocg}%
          }}%
          }
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

          usepackage{tikz}
          usetikzlibrary{positioning,fit,calc}
          pgfdeclarelayer{behind}
          pgfdeclarelayer{background}
          pgfdeclarelayer{foreground}
          pgfsetlayers{behind,background,main,foreground}
          tikzset{
          text field/.style={text height=1.5ex,align=center,rounded corners},
          nonfillable title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          fillable title field/.style={text height=3.14ex,text depth=0em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          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[nonfillable 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[nonfillable 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/fillable elective 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[fillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {hspace*{-0.34em}TextField[align=1,name=#1-electivesubject,width=4.5cm,charsize=8pt,height=.5cm,bordercolor={1 1 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 elective subject/.style={code={%
          node[text field] (-TF)
          {hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
          node[nonfillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {};
          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=-7.25cm,row sep=5mm},
          fit sep/.initial=4pt, % change width of node (big rectangle shape)
          fit dist/.initial=40pt, % change node distance (big rectangle shape)
          inlay top sep/.initial=24pt,
          matrix top sep/.initial=24pt,
          manoooh curve/.style={to path={let p1=($(tikztotarget)-(tikztostart)$)
          in (tikztostart) .. controls ($(tikztostart)+(#1*x1,0)$)
          and ($(tikztotarget)+(-#1*x1,0)$) .. (tikztotarget)}},
          manoooh curve/.default=0.3,
          along node/.style={insert path={
          to[out=0,in=180]
          ([yshift=5pt]#1-Title.north west) -- ([yshift=5pt]#1-Title.north east)}}
          } % From https://tex.stackexchange.com/a/478723/152550

          makeatletter% from https://tex.stackexchange.com/a/85531/121799
          longdefifnodedefined#1#2#3{%
          @ifundefined{pgf@sh@ns@#1}{#3}{#2}%
          }
          makeatother

          %%%%%%%%%%%%%%%%%%%%%%%%%
          newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
          %%%%%%%%%%%%%%%%%%%%%%%%%

          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}

          ifdefinedmymatbottom
          else
          typeout{Pleasespace recompilespace yourspace file!}
          defmymatbottom{-150pt}
          fi
          ifdefinedmyheight
          else
          defmyheight{0}
          typeout{Pleasespace recompilespace yourspace file!}
          fi
          ifdefinedLstMatYShifts
          else
          defLstMatYShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi
          ifdefinedLstMatXShifts
          else
          defLstMatXShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi

          %typeout{height:myheight}
          %typeout{xshifts(in):LstMatXShifts}

          vfill
          centering
          begin{Form}
          begin{tikzpicture}
          % step 1: add the matrices, name them mat0, mat1 etc.
          begin{scope}[local bounding box=matrices]
          matrix[manoooh] (mat0) at ({LstMatXShifts[0]},{LstMatYShifts[0]}) {
          pic[local bounding box=A] (0) {nonfillable subject={Subject A}}; \
          pic (1) {nonfillable subject={Subject B}}; \
          };
          matrix[manoooh] (mat1) at ({LstMatXShifts[1]},{LstMatYShifts[1]}) {

          pic (2) {nonfillable subject={Subject C}}; \
          pic (3) {nonfillable subject={Subject D}}; \
          pic (4) {nonfillable subject={Subject E}}; \
          pic (5) {nonfillable subject={Subject F}}; \
          pic (6) {nonfillable subject={Subject G}}; \
          pic (7) {nonfillable subject={Subject H}}; \
          pic (8) {nonfillable subject={Subject I}}; \
          pic[draw=red] (9) {nonfillable subject={Subject J}}; \
          };
          matrix[manoooh] (mat2) at ({LstMatXShifts[2]},{LstMatYShifts[2]}) {
          pic[draw=red] (10) {nonfillable subject={Subject K}}; \
          pic (11) {nonfillable subject={Subject L}}; \
          pic (12) {nonfillable subject={Subject A}}; \
          pic (13) {nonfillable subject={Subject N}}; \
          pic (14) {nonfillable subject={Subject O}}; \
          pic (15) {nonfillable subject={Subject P}}; \
          pic (16) {nonfillable subject={Subject Q}}; \
          pic (17) {nonfillable subject={Subject R}}; \
          };
          matrix[manoooh] (mat3) at ({LstMatXShifts[3]},{LstMatYShifts[3]}) {
          pic[draw=red] (18) {nonfillable subject={Subject S}}; \
          pic (19) {nonfillable subject={Subject T}}; \
          pic (20) {nonfillable subject={Subject U}}; \
          pic (21) {nonfillable subject={Subject V}}; \
          pic (22) {nonfillable subject={Subject W}}; \
          pic (23) {nonfillable subject={Subject X}}; \
          pic (24) {nonfillable subject={Subject Y}}; \
          pic (25) {nonfillable subject={Subject Z}}; \
          };
          matrix[manooohE] (matE3) at ({LstMatXShifts[3]},mymatbottom) {
          pic (L3E1) {nonfillable elective subject={Subject}}; & &
          pic (L3E2) {nonfillable elective subject={Subject}}; \
          & pic (L3E3) {nonfillable elective subject={Subject}}; & \
          };
          matrix[manoooh] (mat4) at ({LstMatXShifts[4]},{LstMatYShifts[4]}) {
          & pic[draw=red] (26) {nonfillable subject={Subject AA}}; & \
          pic (27) {nonfillable subject={Subject AB}}; & & pic (28) {nonfillable subject={Subject AC}}; \
          & pic (29) {nonfillable subject={Subject AD}}; & \
          & pic (30) {nonfillable subject={Subject AE}}; & \
          & pic (31) {nonfillable subject={Subject AF}}; & \
          & pic (32) {nonfillable subject={Subject AG}}; & \
          };
          matrix[manooohE] (matE4) at ({LstMatXShifts[4]},mymatbottom) {
          pic (L4E1) {nonfillable elective subject={Subject}}; \
          };
          matrix[manoooh] (mat5) at ({LstMatXShifts[5]},{LstMatYShifts[5]}) {
          pic (33) {nonfillable subject={Subject AH}}; \
          pic (34) {nonfillable subject={Subject AI}}; \
          pic[draw=red] (35) {nonfillable subject={Subject AJ}}; \
          pic (36) {nonfillable subject={Subject AK}}; \
          };
          matrix[manooohE] (matE5) at ({LstMatXShifts[5]},mymatbottom) {
          pic (L5E1) {nonfillable elective subject={Subject}}; \
          pic (L5E2) {nonfillable elective subject={Subject}}; \
          pic (L5E3) {nonfillable elective subject={Subject}}; \
          pic (L5E4) {nonfillable elective subject={Subject}}; \
          pic (L5E5) {nonfillable elective subject={Subject}}; \
          };
          end{scope}
          pgfmathsetmacro{groupwidth}{0}
          pgfmathsetmacro{lastwidth}{0}
          foreach X in {0,...,5} %<- if you have more or less matrices, adjust 3
          {
          node[anchor=south,yshift=1cm,align=center,font=LARGEbfseriesboldmath]
          at (matX |-matrices.north) (LX) {Level $X$};
          ifnodedefined{matEX}{% has inlay
          node[xshift=1em,anchor=south west,font=LARGEbfseries,opacity=0] (matElX) at (matEX.north west) {Electives};
          begin{pgfonlayer}{background}
          path let p1=($(matX.north east)-(matX.south west)$) in
          node[fit=(matEX) (matElX),inner ysep=5mm,fill=blue!30,rounded
          corners=40pt,minimum width=x1-2*pgfkeysvalueof{/tikz/fit sep},
          inner xsep=pgfkeysvalueof{/tikz/fit sep}](FX){};
          node[xshift=1em,anchor=south west,font=LARGEbfseries]
          (matElX) at ([xshift=1.3em]FX.west|-matElX.center) {Electives};
          end{pgfonlayer}
          path let p1=($(matX.north east)-(matX.south west)$),
          p2=($(FX.north east)-(FX.south west)$),
          n1={max(abs(y1)/2+abs(y2)/2+0*pgfkeysvalueof{/tikz/inlay top sep},mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+max(x1,x2)/2+lastwidth/2+2*pgfkeysvalueof{/tikz/fit sep}+pgfkeysvalueof{/tikz/fit dist}}
          fi
          pgfmathsetmacro{lastwidth}{max(x1,x2)+8*pgfkeysvalueof{/tikz/fit sep}}
          xdeflastwidth{lastwidth}
          xdefgroupwidth{groupwidth}
          pgfmathsetmacro{myheight}{max(y1+y2+%
          pgfkeysvalueof{/tikz/inlay top sep}+pgfkeysvalueof{/tikz/matrix top sep},%
          myheight)}
          xdefmyheight{myheight}
          pgfmathsetmacro{myshift}{(pgfkeysvalueof{/tikz/inlay top sep}+y2)/2}
          ifnumX=0
          xdefLstMatYShifts{myshift pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,myshift pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south)
          (matEX) (matElX),inner ysep=8mm,inner xsep=4*pgfkeysvalueof{/tikz/fit sep},
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}}{% no inlay
          path
          let p1=($(matX.north east)-(matX.south west)$),
          n1={max(abs(y1)/2,mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+x1/2+lastwidth/2+pgfkeysvalueof{/tikz/fit dist}}
          fi
          xdefgroupwidth{groupwidth}
          xdeflastwidth{x1}
          pgfmathsetmacro{myheight}{max(y1+pgfkeysvalueof{/tikz/matrix top sep},myheight)}
          xdefmyheight{myheight}
          ifnumX=0
          xdefLstMatYShifts{0pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,0pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south),inner ysep=8mm,
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}
          }
          }
          makeatletter
          immediatewrite@mainaux{xdefstringmymatbottom{-mymatbottom}relax}
          immediatewrite@mainaux{xdefstringmyheight{myheight}relax}
          immediatewrite@mainaux{xdefstringLstMatYShifts{{LstMatYShifts}}relax}
          immediatewrite@mainaux{xdefstringLstMatXShifts{{LstMatXShifts}}relax}
          makeatother

          % From https://tex.stackexchange.com/a/480685/152550

          % now add the arrows.

          gdefLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10/5,13/5,14/5}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25/13}",%subjects that 3 links
          "{36/{12,21,29}}",%subjects that 4 links
          }
          }
          pgfmathsetmacro{mylst}{LstCon[0]}
          foreach X in {0,...,totalnodes} {
          begin{scope}[ocg={name={ArrowX},ref=myArrowX,status=visible}]
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          %typeout{X:mylst}
          foreach Y/myalong in mylst {
          ifxmyalongY
          %typeout{X:Y,empty}
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);
          else
          %typeout{X:Yspace andspace myalong}
          draw[-latex,mycolor,very thick] (X-Title.east)
          [along node/.list/.expanded=myalong]
          to[manoooh curve] (Y-Title.west);
          fi
          }
          end{scope}
          }
          end{tikzpicture}
          end{Form}
          flushleft
          qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
          % list of OCGs, space separated
          defocglist{}%
          foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
          fbox{%
          parbox{12cm}{%
          % on/off All
          showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
          hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
          % checkboxes
          % begin{multicols}{4}
          foreach X in {0,...,totalnodes} {%
          layerCheckBox{}{myArrowX}{on}begin{tikzpicture}[baseline=-1ex]%
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
          end{tikzpicture}qquad%
          }%
          % end{multicols}
          }
          }
          }

          end{document}





          share|improve this answer
























          • I have a problem: I need to add arrows apart from the foreach. Do you remember this question: Design an algorithm capable of predicting collisions to choose alternative path using tikzpicture environment? Well, I need to add new arrows, but them are not shown in parbox. Do you know how can the arrows appear?

            – manooooh
            Mar 31 at 22:33











          • For example, add these lines of code outside foreach but inside the tikzpicture: (1) pgfmathsetmacro{huenumm}{18*0.75*(1/totalnodes)} (2) definecolor{mycolor2}{hsb}{huenumm,1,1} (3) draw[-latex,mycolor2,very thick] (18-Title.east) to[manoooh curve=1.6] (29-Title.west);. If you compile then this new arrow is not shown, which is reasonable, but I do not know how to add it to the list.

            – manooooh
            Mar 31 at 22:38








          • 1





            @manooooh That's a tough problem because I do not know how the ocgx stuff works. I would guess that the solution is to add these arrows to the lists after you have used the list to draw the arrows. That is, (1) use smaller lists to draw the arrows, (2) draw additional arrows "by hand" and add them to the lists afterwards, (3) do the ocgx with the full lists. Does that make sense? P.S. will go to basketball now...

            – marmot
            Mar 31 at 22:39













          • I do not think that makes sense at all. I think that if we create smaller lists and then add it to a general list the order will not be preserver: we will have the first "X" arrows in hue gradient and then the last "Y" arrows that have a new hue gradient of colors, so the colors would be mixed, isn't it? However I am not sure how the ocgx stuff work, too.

            – manooooh
            Mar 31 at 23:53








          • 1





            @manooooh Oh, but then I either completely misunderstand your question, the ocgx code, or both.

            – marmot
            Apr 1 at 1:48












          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "85"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f482352%2fhow-to-put-a-box-and-use-columns-to-separate-arrows%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          I hope I didn't screw it but I tested on acroread and it seemed to still work. All I did was to comment out multicolumn (the purpose of which I didn't understand), added some quads and gave the tikzpictures some baselines.



          enter image description here



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=32cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}
          usepackage{multicol}
          usepackage[tikz]{ocgx2}
          usepackage{amssymb} % checkmark
          % check box command for layer switching
          newcommandlayerCheckBox[3]{%
          % #1: switch id, if empty use #2 instead
          % #2: layer ids to be toggled (space separated if multiple ids),
          % #3: initial visibility
          resizebox{2ex}{!}{ooalign{%
          switchocg{#1 #2}{$square$}cr%
          begin{ocg}{%
          ifxnil#1nil#2else#1fi%
          }{%
          ifxnil#1nil#2else#1fi%
          }{#3}$checkmark$end{ocg}%
          }}%
          }
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

          usepackage{tikz}
          usetikzlibrary{positioning,fit,calc}
          pgfdeclarelayer{behind}
          pgfdeclarelayer{background}
          pgfdeclarelayer{foreground}
          pgfsetlayers{behind,background,main,foreground}
          tikzset{
          text field/.style={text height=1.5ex,align=center,rounded corners},
          nonfillable title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          fillable title field/.style={text height=3.14ex,text depth=0em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          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[nonfillable 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[nonfillable 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/fillable elective 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[fillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {hspace*{-0.34em}TextField[align=1,name=#1-electivesubject,width=4.5cm,charsize=8pt,height=.5cm,bordercolor={1 1 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 elective subject/.style={code={%
          node[text field] (-TF)
          {hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
          node[nonfillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {};
          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=-7.25cm,row sep=5mm},
          fit sep/.initial=4pt, % change width of node (big rectangle shape)
          fit dist/.initial=40pt, % change node distance (big rectangle shape)
          inlay top sep/.initial=24pt,
          matrix top sep/.initial=24pt,
          manoooh curve/.style={to path={let p1=($(tikztotarget)-(tikztostart)$)
          in (tikztostart) .. controls ($(tikztostart)+(#1*x1,0)$)
          and ($(tikztotarget)+(-#1*x1,0)$) .. (tikztotarget)}},
          manoooh curve/.default=0.3,
          along node/.style={insert path={
          to[out=0,in=180]
          ([yshift=5pt]#1-Title.north west) -- ([yshift=5pt]#1-Title.north east)}}
          } % From https://tex.stackexchange.com/a/478723/152550

          makeatletter% from https://tex.stackexchange.com/a/85531/121799
          longdefifnodedefined#1#2#3{%
          @ifundefined{pgf@sh@ns@#1}{#3}{#2}%
          }
          makeatother

          %%%%%%%%%%%%%%%%%%%%%%%%%
          newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
          %%%%%%%%%%%%%%%%%%%%%%%%%

          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}

          ifdefinedmymatbottom
          else
          typeout{Pleasespace recompilespace yourspace file!}
          defmymatbottom{-150pt}
          fi
          ifdefinedmyheight
          else
          defmyheight{0}
          typeout{Pleasespace recompilespace yourspace file!}
          fi
          ifdefinedLstMatYShifts
          else
          defLstMatYShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi
          ifdefinedLstMatXShifts
          else
          defLstMatXShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi

          %typeout{height:myheight}
          %typeout{xshifts(in):LstMatXShifts}

          vfill
          centering
          begin{Form}
          begin{tikzpicture}
          % step 1: add the matrices, name them mat0, mat1 etc.
          begin{scope}[local bounding box=matrices]
          matrix[manoooh] (mat0) at ({LstMatXShifts[0]},{LstMatYShifts[0]}) {
          pic[local bounding box=A] (0) {nonfillable subject={Subject A}}; \
          pic (1) {nonfillable subject={Subject B}}; \
          };
          matrix[manoooh] (mat1) at ({LstMatXShifts[1]},{LstMatYShifts[1]}) {

          pic (2) {nonfillable subject={Subject C}}; \
          pic (3) {nonfillable subject={Subject D}}; \
          pic (4) {nonfillable subject={Subject E}}; \
          pic (5) {nonfillable subject={Subject F}}; \
          pic (6) {nonfillable subject={Subject G}}; \
          pic (7) {nonfillable subject={Subject H}}; \
          pic (8) {nonfillable subject={Subject I}}; \
          pic[draw=red] (9) {nonfillable subject={Subject J}}; \
          };
          matrix[manoooh] (mat2) at ({LstMatXShifts[2]},{LstMatYShifts[2]}) {
          pic[draw=red] (10) {nonfillable subject={Subject K}}; \
          pic (11) {nonfillable subject={Subject L}}; \
          pic (12) {nonfillable subject={Subject A}}; \
          pic (13) {nonfillable subject={Subject N}}; \
          pic (14) {nonfillable subject={Subject O}}; \
          pic (15) {nonfillable subject={Subject P}}; \
          pic (16) {nonfillable subject={Subject Q}}; \
          pic (17) {nonfillable subject={Subject R}}; \
          };
          matrix[manoooh] (mat3) at ({LstMatXShifts[3]},{LstMatYShifts[3]}) {
          pic[draw=red] (18) {nonfillable subject={Subject S}}; \
          pic (19) {nonfillable subject={Subject T}}; \
          pic (20) {nonfillable subject={Subject U}}; \
          pic (21) {nonfillable subject={Subject V}}; \
          pic (22) {nonfillable subject={Subject W}}; \
          pic (23) {nonfillable subject={Subject X}}; \
          pic (24) {nonfillable subject={Subject Y}}; \
          pic (25) {nonfillable subject={Subject Z}}; \
          };
          matrix[manooohE] (matE3) at ({LstMatXShifts[3]},mymatbottom) {
          pic (L3E1) {nonfillable elective subject={Subject}}; & &
          pic (L3E2) {nonfillable elective subject={Subject}}; \
          & pic (L3E3) {nonfillable elective subject={Subject}}; & \
          };
          matrix[manoooh] (mat4) at ({LstMatXShifts[4]},{LstMatYShifts[4]}) {
          & pic[draw=red] (26) {nonfillable subject={Subject AA}}; & \
          pic (27) {nonfillable subject={Subject AB}}; & & pic (28) {nonfillable subject={Subject AC}}; \
          & pic (29) {nonfillable subject={Subject AD}}; & \
          & pic (30) {nonfillable subject={Subject AE}}; & \
          & pic (31) {nonfillable subject={Subject AF}}; & \
          & pic (32) {nonfillable subject={Subject AG}}; & \
          };
          matrix[manooohE] (matE4) at ({LstMatXShifts[4]},mymatbottom) {
          pic (L4E1) {nonfillable elective subject={Subject}}; \
          };
          matrix[manoooh] (mat5) at ({LstMatXShifts[5]},{LstMatYShifts[5]}) {
          pic (33) {nonfillable subject={Subject AH}}; \
          pic (34) {nonfillable subject={Subject AI}}; \
          pic[draw=red] (35) {nonfillable subject={Subject AJ}}; \
          pic (36) {nonfillable subject={Subject AK}}; \
          };
          matrix[manooohE] (matE5) at ({LstMatXShifts[5]},mymatbottom) {
          pic (L5E1) {nonfillable elective subject={Subject}}; \
          pic (L5E2) {nonfillable elective subject={Subject}}; \
          pic (L5E3) {nonfillable elective subject={Subject}}; \
          pic (L5E4) {nonfillable elective subject={Subject}}; \
          pic (L5E5) {nonfillable elective subject={Subject}}; \
          };
          end{scope}
          pgfmathsetmacro{groupwidth}{0}
          pgfmathsetmacro{lastwidth}{0}
          foreach X in {0,...,5} %<- if you have more or less matrices, adjust 3
          {
          node[anchor=south,yshift=1cm,align=center,font=LARGEbfseriesboldmath]
          at (matX |-matrices.north) (LX) {Level $X$};
          ifnodedefined{matEX}{% has inlay
          node[xshift=1em,anchor=south west,font=LARGEbfseries,opacity=0] (matElX) at (matEX.north west) {Electives};
          begin{pgfonlayer}{background}
          path let p1=($(matX.north east)-(matX.south west)$) in
          node[fit=(matEX) (matElX),inner ysep=5mm,fill=blue!30,rounded
          corners=40pt,minimum width=x1-2*pgfkeysvalueof{/tikz/fit sep},
          inner xsep=pgfkeysvalueof{/tikz/fit sep}](FX){};
          node[xshift=1em,anchor=south west,font=LARGEbfseries]
          (matElX) at ([xshift=1.3em]FX.west|-matElX.center) {Electives};
          end{pgfonlayer}
          path let p1=($(matX.north east)-(matX.south west)$),
          p2=($(FX.north east)-(FX.south west)$),
          n1={max(abs(y1)/2+abs(y2)/2+0*pgfkeysvalueof{/tikz/inlay top sep},mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+max(x1,x2)/2+lastwidth/2+2*pgfkeysvalueof{/tikz/fit sep}+pgfkeysvalueof{/tikz/fit dist}}
          fi
          pgfmathsetmacro{lastwidth}{max(x1,x2)+8*pgfkeysvalueof{/tikz/fit sep}}
          xdeflastwidth{lastwidth}
          xdefgroupwidth{groupwidth}
          pgfmathsetmacro{myheight}{max(y1+y2+%
          pgfkeysvalueof{/tikz/inlay top sep}+pgfkeysvalueof{/tikz/matrix top sep},%
          myheight)}
          xdefmyheight{myheight}
          pgfmathsetmacro{myshift}{(pgfkeysvalueof{/tikz/inlay top sep}+y2)/2}
          ifnumX=0
          xdefLstMatYShifts{myshift pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,myshift pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south)
          (matEX) (matElX),inner ysep=8mm,inner xsep=4*pgfkeysvalueof{/tikz/fit sep},
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}}{% no inlay
          path
          let p1=($(matX.north east)-(matX.south west)$),
          n1={max(abs(y1)/2,mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+x1/2+lastwidth/2+pgfkeysvalueof{/tikz/fit dist}}
          fi
          xdefgroupwidth{groupwidth}
          xdeflastwidth{x1}
          pgfmathsetmacro{myheight}{max(y1+pgfkeysvalueof{/tikz/matrix top sep},myheight)}
          xdefmyheight{myheight}
          ifnumX=0
          xdefLstMatYShifts{0pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,0pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south),inner ysep=8mm,
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}
          }
          }
          makeatletter
          immediatewrite@mainaux{xdefstringmymatbottom{-mymatbottom}relax}
          immediatewrite@mainaux{xdefstringmyheight{myheight}relax}
          immediatewrite@mainaux{xdefstringLstMatYShifts{{LstMatYShifts}}relax}
          immediatewrite@mainaux{xdefstringLstMatXShifts{{LstMatXShifts}}relax}
          makeatother

          % From https://tex.stackexchange.com/a/480685/152550

          % now add the arrows.

          gdefLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10/5,13/5,14/5}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25/13}",%subjects that 3 links
          "{36/{12,21,29}}",%subjects that 4 links
          }
          }
          pgfmathsetmacro{mylst}{LstCon[0]}
          foreach X in {0,...,totalnodes} {
          begin{scope}[ocg={name={ArrowX},ref=myArrowX,status=visible}]
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          %typeout{X:mylst}
          foreach Y/myalong in mylst {
          ifxmyalongY
          %typeout{X:Y,empty}
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);
          else
          %typeout{X:Yspace andspace myalong}
          draw[-latex,mycolor,very thick] (X-Title.east)
          [along node/.list/.expanded=myalong]
          to[manoooh curve] (Y-Title.west);
          fi
          }
          end{scope}
          }
          end{tikzpicture}
          end{Form}
          flushleft
          qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
          % list of OCGs, space separated
          defocglist{}%
          foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
          fbox{%
          parbox{12cm}{%
          % on/off All
          showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
          hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
          % checkboxes
          % begin{multicols}{4}
          foreach X in {0,...,totalnodes} {%
          layerCheckBox{}{myArrowX}{on}begin{tikzpicture}[baseline=-1ex]%
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
          end{tikzpicture}qquad%
          }%
          % end{multicols}
          }
          }
          }

          end{document}





          share|improve this answer
























          • I have a problem: I need to add arrows apart from the foreach. Do you remember this question: Design an algorithm capable of predicting collisions to choose alternative path using tikzpicture environment? Well, I need to add new arrows, but them are not shown in parbox. Do you know how can the arrows appear?

            – manooooh
            Mar 31 at 22:33











          • For example, add these lines of code outside foreach but inside the tikzpicture: (1) pgfmathsetmacro{huenumm}{18*0.75*(1/totalnodes)} (2) definecolor{mycolor2}{hsb}{huenumm,1,1} (3) draw[-latex,mycolor2,very thick] (18-Title.east) to[manoooh curve=1.6] (29-Title.west);. If you compile then this new arrow is not shown, which is reasonable, but I do not know how to add it to the list.

            – manooooh
            Mar 31 at 22:38








          • 1





            @manooooh That's a tough problem because I do not know how the ocgx stuff works. I would guess that the solution is to add these arrows to the lists after you have used the list to draw the arrows. That is, (1) use smaller lists to draw the arrows, (2) draw additional arrows "by hand" and add them to the lists afterwards, (3) do the ocgx with the full lists. Does that make sense? P.S. will go to basketball now...

            – marmot
            Mar 31 at 22:39













          • I do not think that makes sense at all. I think that if we create smaller lists and then add it to a general list the order will not be preserver: we will have the first "X" arrows in hue gradient and then the last "Y" arrows that have a new hue gradient of colors, so the colors would be mixed, isn't it? However I am not sure how the ocgx stuff work, too.

            – manooooh
            Mar 31 at 23:53








          • 1





            @manooooh Oh, but then I either completely misunderstand your question, the ocgx code, or both.

            – marmot
            Apr 1 at 1:48
















          2














          I hope I didn't screw it but I tested on acroread and it seemed to still work. All I did was to comment out multicolumn (the purpose of which I didn't understand), added some quads and gave the tikzpictures some baselines.



          enter image description here



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=32cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}
          usepackage{multicol}
          usepackage[tikz]{ocgx2}
          usepackage{amssymb} % checkmark
          % check box command for layer switching
          newcommandlayerCheckBox[3]{%
          % #1: switch id, if empty use #2 instead
          % #2: layer ids to be toggled (space separated if multiple ids),
          % #3: initial visibility
          resizebox{2ex}{!}{ooalign{%
          switchocg{#1 #2}{$square$}cr%
          begin{ocg}{%
          ifxnil#1nil#2else#1fi%
          }{%
          ifxnil#1nil#2else#1fi%
          }{#3}$checkmark$end{ocg}%
          }}%
          }
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

          usepackage{tikz}
          usetikzlibrary{positioning,fit,calc}
          pgfdeclarelayer{behind}
          pgfdeclarelayer{background}
          pgfdeclarelayer{foreground}
          pgfsetlayers{behind,background,main,foreground}
          tikzset{
          text field/.style={text height=1.5ex,align=center,rounded corners},
          nonfillable title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          fillable title field/.style={text height=3.14ex,text depth=0em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          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[nonfillable 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[nonfillable 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/fillable elective 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[fillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {hspace*{-0.34em}TextField[align=1,name=#1-electivesubject,width=4.5cm,charsize=8pt,height=.5cm,bordercolor={1 1 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 elective subject/.style={code={%
          node[text field] (-TF)
          {hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
          node[nonfillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {};
          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=-7.25cm,row sep=5mm},
          fit sep/.initial=4pt, % change width of node (big rectangle shape)
          fit dist/.initial=40pt, % change node distance (big rectangle shape)
          inlay top sep/.initial=24pt,
          matrix top sep/.initial=24pt,
          manoooh curve/.style={to path={let p1=($(tikztotarget)-(tikztostart)$)
          in (tikztostart) .. controls ($(tikztostart)+(#1*x1,0)$)
          and ($(tikztotarget)+(-#1*x1,0)$) .. (tikztotarget)}},
          manoooh curve/.default=0.3,
          along node/.style={insert path={
          to[out=0,in=180]
          ([yshift=5pt]#1-Title.north west) -- ([yshift=5pt]#1-Title.north east)}}
          } % From https://tex.stackexchange.com/a/478723/152550

          makeatletter% from https://tex.stackexchange.com/a/85531/121799
          longdefifnodedefined#1#2#3{%
          @ifundefined{pgf@sh@ns@#1}{#3}{#2}%
          }
          makeatother

          %%%%%%%%%%%%%%%%%%%%%%%%%
          newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
          %%%%%%%%%%%%%%%%%%%%%%%%%

          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}

          ifdefinedmymatbottom
          else
          typeout{Pleasespace recompilespace yourspace file!}
          defmymatbottom{-150pt}
          fi
          ifdefinedmyheight
          else
          defmyheight{0}
          typeout{Pleasespace recompilespace yourspace file!}
          fi
          ifdefinedLstMatYShifts
          else
          defLstMatYShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi
          ifdefinedLstMatXShifts
          else
          defLstMatXShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi

          %typeout{height:myheight}
          %typeout{xshifts(in):LstMatXShifts}

          vfill
          centering
          begin{Form}
          begin{tikzpicture}
          % step 1: add the matrices, name them mat0, mat1 etc.
          begin{scope}[local bounding box=matrices]
          matrix[manoooh] (mat0) at ({LstMatXShifts[0]},{LstMatYShifts[0]}) {
          pic[local bounding box=A] (0) {nonfillable subject={Subject A}}; \
          pic (1) {nonfillable subject={Subject B}}; \
          };
          matrix[manoooh] (mat1) at ({LstMatXShifts[1]},{LstMatYShifts[1]}) {

          pic (2) {nonfillable subject={Subject C}}; \
          pic (3) {nonfillable subject={Subject D}}; \
          pic (4) {nonfillable subject={Subject E}}; \
          pic (5) {nonfillable subject={Subject F}}; \
          pic (6) {nonfillable subject={Subject G}}; \
          pic (7) {nonfillable subject={Subject H}}; \
          pic (8) {nonfillable subject={Subject I}}; \
          pic[draw=red] (9) {nonfillable subject={Subject J}}; \
          };
          matrix[manoooh] (mat2) at ({LstMatXShifts[2]},{LstMatYShifts[2]}) {
          pic[draw=red] (10) {nonfillable subject={Subject K}}; \
          pic (11) {nonfillable subject={Subject L}}; \
          pic (12) {nonfillable subject={Subject A}}; \
          pic (13) {nonfillable subject={Subject N}}; \
          pic (14) {nonfillable subject={Subject O}}; \
          pic (15) {nonfillable subject={Subject P}}; \
          pic (16) {nonfillable subject={Subject Q}}; \
          pic (17) {nonfillable subject={Subject R}}; \
          };
          matrix[manoooh] (mat3) at ({LstMatXShifts[3]},{LstMatYShifts[3]}) {
          pic[draw=red] (18) {nonfillable subject={Subject S}}; \
          pic (19) {nonfillable subject={Subject T}}; \
          pic (20) {nonfillable subject={Subject U}}; \
          pic (21) {nonfillable subject={Subject V}}; \
          pic (22) {nonfillable subject={Subject W}}; \
          pic (23) {nonfillable subject={Subject X}}; \
          pic (24) {nonfillable subject={Subject Y}}; \
          pic (25) {nonfillable subject={Subject Z}}; \
          };
          matrix[manooohE] (matE3) at ({LstMatXShifts[3]},mymatbottom) {
          pic (L3E1) {nonfillable elective subject={Subject}}; & &
          pic (L3E2) {nonfillable elective subject={Subject}}; \
          & pic (L3E3) {nonfillable elective subject={Subject}}; & \
          };
          matrix[manoooh] (mat4) at ({LstMatXShifts[4]},{LstMatYShifts[4]}) {
          & pic[draw=red] (26) {nonfillable subject={Subject AA}}; & \
          pic (27) {nonfillable subject={Subject AB}}; & & pic (28) {nonfillable subject={Subject AC}}; \
          & pic (29) {nonfillable subject={Subject AD}}; & \
          & pic (30) {nonfillable subject={Subject AE}}; & \
          & pic (31) {nonfillable subject={Subject AF}}; & \
          & pic (32) {nonfillable subject={Subject AG}}; & \
          };
          matrix[manooohE] (matE4) at ({LstMatXShifts[4]},mymatbottom) {
          pic (L4E1) {nonfillable elective subject={Subject}}; \
          };
          matrix[manoooh] (mat5) at ({LstMatXShifts[5]},{LstMatYShifts[5]}) {
          pic (33) {nonfillable subject={Subject AH}}; \
          pic (34) {nonfillable subject={Subject AI}}; \
          pic[draw=red] (35) {nonfillable subject={Subject AJ}}; \
          pic (36) {nonfillable subject={Subject AK}}; \
          };
          matrix[manooohE] (matE5) at ({LstMatXShifts[5]},mymatbottom) {
          pic (L5E1) {nonfillable elective subject={Subject}}; \
          pic (L5E2) {nonfillable elective subject={Subject}}; \
          pic (L5E3) {nonfillable elective subject={Subject}}; \
          pic (L5E4) {nonfillable elective subject={Subject}}; \
          pic (L5E5) {nonfillable elective subject={Subject}}; \
          };
          end{scope}
          pgfmathsetmacro{groupwidth}{0}
          pgfmathsetmacro{lastwidth}{0}
          foreach X in {0,...,5} %<- if you have more or less matrices, adjust 3
          {
          node[anchor=south,yshift=1cm,align=center,font=LARGEbfseriesboldmath]
          at (matX |-matrices.north) (LX) {Level $X$};
          ifnodedefined{matEX}{% has inlay
          node[xshift=1em,anchor=south west,font=LARGEbfseries,opacity=0] (matElX) at (matEX.north west) {Electives};
          begin{pgfonlayer}{background}
          path let p1=($(matX.north east)-(matX.south west)$) in
          node[fit=(matEX) (matElX),inner ysep=5mm,fill=blue!30,rounded
          corners=40pt,minimum width=x1-2*pgfkeysvalueof{/tikz/fit sep},
          inner xsep=pgfkeysvalueof{/tikz/fit sep}](FX){};
          node[xshift=1em,anchor=south west,font=LARGEbfseries]
          (matElX) at ([xshift=1.3em]FX.west|-matElX.center) {Electives};
          end{pgfonlayer}
          path let p1=($(matX.north east)-(matX.south west)$),
          p2=($(FX.north east)-(FX.south west)$),
          n1={max(abs(y1)/2+abs(y2)/2+0*pgfkeysvalueof{/tikz/inlay top sep},mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+max(x1,x2)/2+lastwidth/2+2*pgfkeysvalueof{/tikz/fit sep}+pgfkeysvalueof{/tikz/fit dist}}
          fi
          pgfmathsetmacro{lastwidth}{max(x1,x2)+8*pgfkeysvalueof{/tikz/fit sep}}
          xdeflastwidth{lastwidth}
          xdefgroupwidth{groupwidth}
          pgfmathsetmacro{myheight}{max(y1+y2+%
          pgfkeysvalueof{/tikz/inlay top sep}+pgfkeysvalueof{/tikz/matrix top sep},%
          myheight)}
          xdefmyheight{myheight}
          pgfmathsetmacro{myshift}{(pgfkeysvalueof{/tikz/inlay top sep}+y2)/2}
          ifnumX=0
          xdefLstMatYShifts{myshift pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,myshift pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south)
          (matEX) (matElX),inner ysep=8mm,inner xsep=4*pgfkeysvalueof{/tikz/fit sep},
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}}{% no inlay
          path
          let p1=($(matX.north east)-(matX.south west)$),
          n1={max(abs(y1)/2,mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+x1/2+lastwidth/2+pgfkeysvalueof{/tikz/fit dist}}
          fi
          xdefgroupwidth{groupwidth}
          xdeflastwidth{x1}
          pgfmathsetmacro{myheight}{max(y1+pgfkeysvalueof{/tikz/matrix top sep},myheight)}
          xdefmyheight{myheight}
          ifnumX=0
          xdefLstMatYShifts{0pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,0pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south),inner ysep=8mm,
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}
          }
          }
          makeatletter
          immediatewrite@mainaux{xdefstringmymatbottom{-mymatbottom}relax}
          immediatewrite@mainaux{xdefstringmyheight{myheight}relax}
          immediatewrite@mainaux{xdefstringLstMatYShifts{{LstMatYShifts}}relax}
          immediatewrite@mainaux{xdefstringLstMatXShifts{{LstMatXShifts}}relax}
          makeatother

          % From https://tex.stackexchange.com/a/480685/152550

          % now add the arrows.

          gdefLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10/5,13/5,14/5}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25/13}",%subjects that 3 links
          "{36/{12,21,29}}",%subjects that 4 links
          }
          }
          pgfmathsetmacro{mylst}{LstCon[0]}
          foreach X in {0,...,totalnodes} {
          begin{scope}[ocg={name={ArrowX},ref=myArrowX,status=visible}]
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          %typeout{X:mylst}
          foreach Y/myalong in mylst {
          ifxmyalongY
          %typeout{X:Y,empty}
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);
          else
          %typeout{X:Yspace andspace myalong}
          draw[-latex,mycolor,very thick] (X-Title.east)
          [along node/.list/.expanded=myalong]
          to[manoooh curve] (Y-Title.west);
          fi
          }
          end{scope}
          }
          end{tikzpicture}
          end{Form}
          flushleft
          qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
          % list of OCGs, space separated
          defocglist{}%
          foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
          fbox{%
          parbox{12cm}{%
          % on/off All
          showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
          hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
          % checkboxes
          % begin{multicols}{4}
          foreach X in {0,...,totalnodes} {%
          layerCheckBox{}{myArrowX}{on}begin{tikzpicture}[baseline=-1ex]%
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
          end{tikzpicture}qquad%
          }%
          % end{multicols}
          }
          }
          }

          end{document}





          share|improve this answer
























          • I have a problem: I need to add arrows apart from the foreach. Do you remember this question: Design an algorithm capable of predicting collisions to choose alternative path using tikzpicture environment? Well, I need to add new arrows, but them are not shown in parbox. Do you know how can the arrows appear?

            – manooooh
            Mar 31 at 22:33











          • For example, add these lines of code outside foreach but inside the tikzpicture: (1) pgfmathsetmacro{huenumm}{18*0.75*(1/totalnodes)} (2) definecolor{mycolor2}{hsb}{huenumm,1,1} (3) draw[-latex,mycolor2,very thick] (18-Title.east) to[manoooh curve=1.6] (29-Title.west);. If you compile then this new arrow is not shown, which is reasonable, but I do not know how to add it to the list.

            – manooooh
            Mar 31 at 22:38








          • 1





            @manooooh That's a tough problem because I do not know how the ocgx stuff works. I would guess that the solution is to add these arrows to the lists after you have used the list to draw the arrows. That is, (1) use smaller lists to draw the arrows, (2) draw additional arrows "by hand" and add them to the lists afterwards, (3) do the ocgx with the full lists. Does that make sense? P.S. will go to basketball now...

            – marmot
            Mar 31 at 22:39













          • I do not think that makes sense at all. I think that if we create smaller lists and then add it to a general list the order will not be preserver: we will have the first "X" arrows in hue gradient and then the last "Y" arrows that have a new hue gradient of colors, so the colors would be mixed, isn't it? However I am not sure how the ocgx stuff work, too.

            – manooooh
            Mar 31 at 23:53








          • 1





            @manooooh Oh, but then I either completely misunderstand your question, the ocgx code, or both.

            – marmot
            Apr 1 at 1:48














          2












          2








          2







          I hope I didn't screw it but I tested on acroread and it seemed to still work. All I did was to comment out multicolumn (the purpose of which I didn't understand), added some quads and gave the tikzpictures some baselines.



          enter image description here



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=32cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}
          usepackage{multicol}
          usepackage[tikz]{ocgx2}
          usepackage{amssymb} % checkmark
          % check box command for layer switching
          newcommandlayerCheckBox[3]{%
          % #1: switch id, if empty use #2 instead
          % #2: layer ids to be toggled (space separated if multiple ids),
          % #3: initial visibility
          resizebox{2ex}{!}{ooalign{%
          switchocg{#1 #2}{$square$}cr%
          begin{ocg}{%
          ifxnil#1nil#2else#1fi%
          }{%
          ifxnil#1nil#2else#1fi%
          }{#3}$checkmark$end{ocg}%
          }}%
          }
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

          usepackage{tikz}
          usetikzlibrary{positioning,fit,calc}
          pgfdeclarelayer{behind}
          pgfdeclarelayer{background}
          pgfdeclarelayer{foreground}
          pgfsetlayers{behind,background,main,foreground}
          tikzset{
          text field/.style={text height=1.5ex,align=center,rounded corners},
          nonfillable title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          fillable title field/.style={text height=3.14ex,text depth=0em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          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[nonfillable 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[nonfillable 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/fillable elective 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[fillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {hspace*{-0.34em}TextField[align=1,name=#1-electivesubject,width=4.5cm,charsize=8pt,height=.5cm,bordercolor={1 1 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 elective subject/.style={code={%
          node[text field] (-TF)
          {hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
          node[nonfillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {};
          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=-7.25cm,row sep=5mm},
          fit sep/.initial=4pt, % change width of node (big rectangle shape)
          fit dist/.initial=40pt, % change node distance (big rectangle shape)
          inlay top sep/.initial=24pt,
          matrix top sep/.initial=24pt,
          manoooh curve/.style={to path={let p1=($(tikztotarget)-(tikztostart)$)
          in (tikztostart) .. controls ($(tikztostart)+(#1*x1,0)$)
          and ($(tikztotarget)+(-#1*x1,0)$) .. (tikztotarget)}},
          manoooh curve/.default=0.3,
          along node/.style={insert path={
          to[out=0,in=180]
          ([yshift=5pt]#1-Title.north west) -- ([yshift=5pt]#1-Title.north east)}}
          } % From https://tex.stackexchange.com/a/478723/152550

          makeatletter% from https://tex.stackexchange.com/a/85531/121799
          longdefifnodedefined#1#2#3{%
          @ifundefined{pgf@sh@ns@#1}{#3}{#2}%
          }
          makeatother

          %%%%%%%%%%%%%%%%%%%%%%%%%
          newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
          %%%%%%%%%%%%%%%%%%%%%%%%%

          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}

          ifdefinedmymatbottom
          else
          typeout{Pleasespace recompilespace yourspace file!}
          defmymatbottom{-150pt}
          fi
          ifdefinedmyheight
          else
          defmyheight{0}
          typeout{Pleasespace recompilespace yourspace file!}
          fi
          ifdefinedLstMatYShifts
          else
          defLstMatYShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi
          ifdefinedLstMatXShifts
          else
          defLstMatXShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi

          %typeout{height:myheight}
          %typeout{xshifts(in):LstMatXShifts}

          vfill
          centering
          begin{Form}
          begin{tikzpicture}
          % step 1: add the matrices, name them mat0, mat1 etc.
          begin{scope}[local bounding box=matrices]
          matrix[manoooh] (mat0) at ({LstMatXShifts[0]},{LstMatYShifts[0]}) {
          pic[local bounding box=A] (0) {nonfillable subject={Subject A}}; \
          pic (1) {nonfillable subject={Subject B}}; \
          };
          matrix[manoooh] (mat1) at ({LstMatXShifts[1]},{LstMatYShifts[1]}) {

          pic (2) {nonfillable subject={Subject C}}; \
          pic (3) {nonfillable subject={Subject D}}; \
          pic (4) {nonfillable subject={Subject E}}; \
          pic (5) {nonfillable subject={Subject F}}; \
          pic (6) {nonfillable subject={Subject G}}; \
          pic (7) {nonfillable subject={Subject H}}; \
          pic (8) {nonfillable subject={Subject I}}; \
          pic[draw=red] (9) {nonfillable subject={Subject J}}; \
          };
          matrix[manoooh] (mat2) at ({LstMatXShifts[2]},{LstMatYShifts[2]}) {
          pic[draw=red] (10) {nonfillable subject={Subject K}}; \
          pic (11) {nonfillable subject={Subject L}}; \
          pic (12) {nonfillable subject={Subject A}}; \
          pic (13) {nonfillable subject={Subject N}}; \
          pic (14) {nonfillable subject={Subject O}}; \
          pic (15) {nonfillable subject={Subject P}}; \
          pic (16) {nonfillable subject={Subject Q}}; \
          pic (17) {nonfillable subject={Subject R}}; \
          };
          matrix[manoooh] (mat3) at ({LstMatXShifts[3]},{LstMatYShifts[3]}) {
          pic[draw=red] (18) {nonfillable subject={Subject S}}; \
          pic (19) {nonfillable subject={Subject T}}; \
          pic (20) {nonfillable subject={Subject U}}; \
          pic (21) {nonfillable subject={Subject V}}; \
          pic (22) {nonfillable subject={Subject W}}; \
          pic (23) {nonfillable subject={Subject X}}; \
          pic (24) {nonfillable subject={Subject Y}}; \
          pic (25) {nonfillable subject={Subject Z}}; \
          };
          matrix[manooohE] (matE3) at ({LstMatXShifts[3]},mymatbottom) {
          pic (L3E1) {nonfillable elective subject={Subject}}; & &
          pic (L3E2) {nonfillable elective subject={Subject}}; \
          & pic (L3E3) {nonfillable elective subject={Subject}}; & \
          };
          matrix[manoooh] (mat4) at ({LstMatXShifts[4]},{LstMatYShifts[4]}) {
          & pic[draw=red] (26) {nonfillable subject={Subject AA}}; & \
          pic (27) {nonfillable subject={Subject AB}}; & & pic (28) {nonfillable subject={Subject AC}}; \
          & pic (29) {nonfillable subject={Subject AD}}; & \
          & pic (30) {nonfillable subject={Subject AE}}; & \
          & pic (31) {nonfillable subject={Subject AF}}; & \
          & pic (32) {nonfillable subject={Subject AG}}; & \
          };
          matrix[manooohE] (matE4) at ({LstMatXShifts[4]},mymatbottom) {
          pic (L4E1) {nonfillable elective subject={Subject}}; \
          };
          matrix[manoooh] (mat5) at ({LstMatXShifts[5]},{LstMatYShifts[5]}) {
          pic (33) {nonfillable subject={Subject AH}}; \
          pic (34) {nonfillable subject={Subject AI}}; \
          pic[draw=red] (35) {nonfillable subject={Subject AJ}}; \
          pic (36) {nonfillable subject={Subject AK}}; \
          };
          matrix[manooohE] (matE5) at ({LstMatXShifts[5]},mymatbottom) {
          pic (L5E1) {nonfillable elective subject={Subject}}; \
          pic (L5E2) {nonfillable elective subject={Subject}}; \
          pic (L5E3) {nonfillable elective subject={Subject}}; \
          pic (L5E4) {nonfillable elective subject={Subject}}; \
          pic (L5E5) {nonfillable elective subject={Subject}}; \
          };
          end{scope}
          pgfmathsetmacro{groupwidth}{0}
          pgfmathsetmacro{lastwidth}{0}
          foreach X in {0,...,5} %<- if you have more or less matrices, adjust 3
          {
          node[anchor=south,yshift=1cm,align=center,font=LARGEbfseriesboldmath]
          at (matX |-matrices.north) (LX) {Level $X$};
          ifnodedefined{matEX}{% has inlay
          node[xshift=1em,anchor=south west,font=LARGEbfseries,opacity=0] (matElX) at (matEX.north west) {Electives};
          begin{pgfonlayer}{background}
          path let p1=($(matX.north east)-(matX.south west)$) in
          node[fit=(matEX) (matElX),inner ysep=5mm,fill=blue!30,rounded
          corners=40pt,minimum width=x1-2*pgfkeysvalueof{/tikz/fit sep},
          inner xsep=pgfkeysvalueof{/tikz/fit sep}](FX){};
          node[xshift=1em,anchor=south west,font=LARGEbfseries]
          (matElX) at ([xshift=1.3em]FX.west|-matElX.center) {Electives};
          end{pgfonlayer}
          path let p1=($(matX.north east)-(matX.south west)$),
          p2=($(FX.north east)-(FX.south west)$),
          n1={max(abs(y1)/2+abs(y2)/2+0*pgfkeysvalueof{/tikz/inlay top sep},mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+max(x1,x2)/2+lastwidth/2+2*pgfkeysvalueof{/tikz/fit sep}+pgfkeysvalueof{/tikz/fit dist}}
          fi
          pgfmathsetmacro{lastwidth}{max(x1,x2)+8*pgfkeysvalueof{/tikz/fit sep}}
          xdeflastwidth{lastwidth}
          xdefgroupwidth{groupwidth}
          pgfmathsetmacro{myheight}{max(y1+y2+%
          pgfkeysvalueof{/tikz/inlay top sep}+pgfkeysvalueof{/tikz/matrix top sep},%
          myheight)}
          xdefmyheight{myheight}
          pgfmathsetmacro{myshift}{(pgfkeysvalueof{/tikz/inlay top sep}+y2)/2}
          ifnumX=0
          xdefLstMatYShifts{myshift pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,myshift pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south)
          (matEX) (matElX),inner ysep=8mm,inner xsep=4*pgfkeysvalueof{/tikz/fit sep},
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}}{% no inlay
          path
          let p1=($(matX.north east)-(matX.south west)$),
          n1={max(abs(y1)/2,mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+x1/2+lastwidth/2+pgfkeysvalueof{/tikz/fit dist}}
          fi
          xdefgroupwidth{groupwidth}
          xdeflastwidth{x1}
          pgfmathsetmacro{myheight}{max(y1+pgfkeysvalueof{/tikz/matrix top sep},myheight)}
          xdefmyheight{myheight}
          ifnumX=0
          xdefLstMatYShifts{0pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,0pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south),inner ysep=8mm,
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}
          }
          }
          makeatletter
          immediatewrite@mainaux{xdefstringmymatbottom{-mymatbottom}relax}
          immediatewrite@mainaux{xdefstringmyheight{myheight}relax}
          immediatewrite@mainaux{xdefstringLstMatYShifts{{LstMatYShifts}}relax}
          immediatewrite@mainaux{xdefstringLstMatXShifts{{LstMatXShifts}}relax}
          makeatother

          % From https://tex.stackexchange.com/a/480685/152550

          % now add the arrows.

          gdefLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10/5,13/5,14/5}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25/13}",%subjects that 3 links
          "{36/{12,21,29}}",%subjects that 4 links
          }
          }
          pgfmathsetmacro{mylst}{LstCon[0]}
          foreach X in {0,...,totalnodes} {
          begin{scope}[ocg={name={ArrowX},ref=myArrowX,status=visible}]
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          %typeout{X:mylst}
          foreach Y/myalong in mylst {
          ifxmyalongY
          %typeout{X:Y,empty}
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);
          else
          %typeout{X:Yspace andspace myalong}
          draw[-latex,mycolor,very thick] (X-Title.east)
          [along node/.list/.expanded=myalong]
          to[manoooh curve] (Y-Title.west);
          fi
          }
          end{scope}
          }
          end{tikzpicture}
          end{Form}
          flushleft
          qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
          % list of OCGs, space separated
          defocglist{}%
          foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
          fbox{%
          parbox{12cm}{%
          % on/off All
          showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
          hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
          % checkboxes
          % begin{multicols}{4}
          foreach X in {0,...,totalnodes} {%
          layerCheckBox{}{myArrowX}{on}begin{tikzpicture}[baseline=-1ex]%
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
          end{tikzpicture}qquad%
          }%
          % end{multicols}
          }
          }
          }

          end{document}





          share|improve this answer













          I hope I didn't screw it but I tested on acroread and it seemed to still work. All I did was to comment out multicolumn (the purpose of which I didn't understand), added some quads and gave the tikzpictures some baselines.



          enter image description here



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=32cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}
          usepackage{multicol}
          usepackage[tikz]{ocgx2}
          usepackage{amssymb} % checkmark
          % check box command for layer switching
          newcommandlayerCheckBox[3]{%
          % #1: switch id, if empty use #2 instead
          % #2: layer ids to be toggled (space separated if multiple ids),
          % #3: initial visibility
          resizebox{2ex}{!}{ooalign{%
          switchocg{#1 #2}{$square$}cr%
          begin{ocg}{%
          ifxnil#1nil#2else#1fi%
          }{%
          ifxnil#1nil#2else#1fi%
          }{#3}$checkmark$end{ocg}%
          }}%
          }
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

          usepackage{tikz}
          usetikzlibrary{positioning,fit,calc}
          pgfdeclarelayer{behind}
          pgfdeclarelayer{background}
          pgfdeclarelayer{foreground}
          pgfsetlayers{behind,background,main,foreground}
          tikzset{
          text field/.style={text height=1.5ex,align=center,rounded corners},
          nonfillable title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          fillable title field/.style={text height=3.14ex,text depth=0em,anchor=south,text
          width=5cm,align=center,font=footnotesizesffamily},
          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[nonfillable 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[nonfillable 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/fillable elective 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[fillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {hspace*{-0.34em}TextField[align=1,name=#1-electivesubject,width=4.5cm,charsize=8pt,height=.5cm,bordercolor={1 1 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 elective subject/.style={code={%
          node[text field] (-TF)
          {hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
          node[nonfillable title field] (-Title)
          at ([yshift=0.4em]-TF.north) {};
          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=-7.25cm,row sep=5mm},
          fit sep/.initial=4pt, % change width of node (big rectangle shape)
          fit dist/.initial=40pt, % change node distance (big rectangle shape)
          inlay top sep/.initial=24pt,
          matrix top sep/.initial=24pt,
          manoooh curve/.style={to path={let p1=($(tikztotarget)-(tikztostart)$)
          in (tikztostart) .. controls ($(tikztostart)+(#1*x1,0)$)
          and ($(tikztotarget)+(-#1*x1,0)$) .. (tikztotarget)}},
          manoooh curve/.default=0.3,
          along node/.style={insert path={
          to[out=0,in=180]
          ([yshift=5pt]#1-Title.north west) -- ([yshift=5pt]#1-Title.north east)}}
          } % From https://tex.stackexchange.com/a/478723/152550

          makeatletter% from https://tex.stackexchange.com/a/85531/121799
          longdefifnodedefined#1#2#3{%
          @ifundefined{pgf@sh@ns@#1}{#3}{#2}%
          }
          makeatother

          %%%%%%%%%%%%%%%%%%%%%%%%%
          newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
          %%%%%%%%%%%%%%%%%%%%%%%%%

          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}

          ifdefinedmymatbottom
          else
          typeout{Pleasespace recompilespace yourspace file!}
          defmymatbottom{-150pt}
          fi
          ifdefinedmyheight
          else
          defmyheight{0}
          typeout{Pleasespace recompilespace yourspace file!}
          fi
          ifdefinedLstMatYShifts
          else
          defLstMatYShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi
          ifdefinedLstMatXShifts
          else
          defLstMatXShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
          fi

          %typeout{height:myheight}
          %typeout{xshifts(in):LstMatXShifts}

          vfill
          centering
          begin{Form}
          begin{tikzpicture}
          % step 1: add the matrices, name them mat0, mat1 etc.
          begin{scope}[local bounding box=matrices]
          matrix[manoooh] (mat0) at ({LstMatXShifts[0]},{LstMatYShifts[0]}) {
          pic[local bounding box=A] (0) {nonfillable subject={Subject A}}; \
          pic (1) {nonfillable subject={Subject B}}; \
          };
          matrix[manoooh] (mat1) at ({LstMatXShifts[1]},{LstMatYShifts[1]}) {

          pic (2) {nonfillable subject={Subject C}}; \
          pic (3) {nonfillable subject={Subject D}}; \
          pic (4) {nonfillable subject={Subject E}}; \
          pic (5) {nonfillable subject={Subject F}}; \
          pic (6) {nonfillable subject={Subject G}}; \
          pic (7) {nonfillable subject={Subject H}}; \
          pic (8) {nonfillable subject={Subject I}}; \
          pic[draw=red] (9) {nonfillable subject={Subject J}}; \
          };
          matrix[manoooh] (mat2) at ({LstMatXShifts[2]},{LstMatYShifts[2]}) {
          pic[draw=red] (10) {nonfillable subject={Subject K}}; \
          pic (11) {nonfillable subject={Subject L}}; \
          pic (12) {nonfillable subject={Subject A}}; \
          pic (13) {nonfillable subject={Subject N}}; \
          pic (14) {nonfillable subject={Subject O}}; \
          pic (15) {nonfillable subject={Subject P}}; \
          pic (16) {nonfillable subject={Subject Q}}; \
          pic (17) {nonfillable subject={Subject R}}; \
          };
          matrix[manoooh] (mat3) at ({LstMatXShifts[3]},{LstMatYShifts[3]}) {
          pic[draw=red] (18) {nonfillable subject={Subject S}}; \
          pic (19) {nonfillable subject={Subject T}}; \
          pic (20) {nonfillable subject={Subject U}}; \
          pic (21) {nonfillable subject={Subject V}}; \
          pic (22) {nonfillable subject={Subject W}}; \
          pic (23) {nonfillable subject={Subject X}}; \
          pic (24) {nonfillable subject={Subject Y}}; \
          pic (25) {nonfillable subject={Subject Z}}; \
          };
          matrix[manooohE] (matE3) at ({LstMatXShifts[3]},mymatbottom) {
          pic (L3E1) {nonfillable elective subject={Subject}}; & &
          pic (L3E2) {nonfillable elective subject={Subject}}; \
          & pic (L3E3) {nonfillable elective subject={Subject}}; & \
          };
          matrix[manoooh] (mat4) at ({LstMatXShifts[4]},{LstMatYShifts[4]}) {
          & pic[draw=red] (26) {nonfillable subject={Subject AA}}; & \
          pic (27) {nonfillable subject={Subject AB}}; & & pic (28) {nonfillable subject={Subject AC}}; \
          & pic (29) {nonfillable subject={Subject AD}}; & \
          & pic (30) {nonfillable subject={Subject AE}}; & \
          & pic (31) {nonfillable subject={Subject AF}}; & \
          & pic (32) {nonfillable subject={Subject AG}}; & \
          };
          matrix[manooohE] (matE4) at ({LstMatXShifts[4]},mymatbottom) {
          pic (L4E1) {nonfillable elective subject={Subject}}; \
          };
          matrix[manoooh] (mat5) at ({LstMatXShifts[5]},{LstMatYShifts[5]}) {
          pic (33) {nonfillable subject={Subject AH}}; \
          pic (34) {nonfillable subject={Subject AI}}; \
          pic[draw=red] (35) {nonfillable subject={Subject AJ}}; \
          pic (36) {nonfillable subject={Subject AK}}; \
          };
          matrix[manooohE] (matE5) at ({LstMatXShifts[5]},mymatbottom) {
          pic (L5E1) {nonfillable elective subject={Subject}}; \
          pic (L5E2) {nonfillable elective subject={Subject}}; \
          pic (L5E3) {nonfillable elective subject={Subject}}; \
          pic (L5E4) {nonfillable elective subject={Subject}}; \
          pic (L5E5) {nonfillable elective subject={Subject}}; \
          };
          end{scope}
          pgfmathsetmacro{groupwidth}{0}
          pgfmathsetmacro{lastwidth}{0}
          foreach X in {0,...,5} %<- if you have more or less matrices, adjust 3
          {
          node[anchor=south,yshift=1cm,align=center,font=LARGEbfseriesboldmath]
          at (matX |-matrices.north) (LX) {Level $X$};
          ifnodedefined{matEX}{% has inlay
          node[xshift=1em,anchor=south west,font=LARGEbfseries,opacity=0] (matElX) at (matEX.north west) {Electives};
          begin{pgfonlayer}{background}
          path let p1=($(matX.north east)-(matX.south west)$) in
          node[fit=(matEX) (matElX),inner ysep=5mm,fill=blue!30,rounded
          corners=40pt,minimum width=x1-2*pgfkeysvalueof{/tikz/fit sep},
          inner xsep=pgfkeysvalueof{/tikz/fit sep}](FX){};
          node[xshift=1em,anchor=south west,font=LARGEbfseries]
          (matElX) at ([xshift=1.3em]FX.west|-matElX.center) {Electives};
          end{pgfonlayer}
          path let p1=($(matX.north east)-(matX.south west)$),
          p2=($(FX.north east)-(FX.south west)$),
          n1={max(abs(y1)/2+abs(y2)/2+0*pgfkeysvalueof{/tikz/inlay top sep},mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+max(x1,x2)/2+lastwidth/2+2*pgfkeysvalueof{/tikz/fit sep}+pgfkeysvalueof{/tikz/fit dist}}
          fi
          pgfmathsetmacro{lastwidth}{max(x1,x2)+8*pgfkeysvalueof{/tikz/fit sep}}
          xdeflastwidth{lastwidth}
          xdefgroupwidth{groupwidth}
          pgfmathsetmacro{myheight}{max(y1+y2+%
          pgfkeysvalueof{/tikz/inlay top sep}+pgfkeysvalueof{/tikz/matrix top sep},%
          myheight)}
          xdefmyheight{myheight}
          pgfmathsetmacro{myshift}{(pgfkeysvalueof{/tikz/inlay top sep}+y2)/2}
          ifnumX=0
          xdefLstMatYShifts{myshift pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,myshift pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south)
          (matEX) (matElX),inner ysep=8mm,inner xsep=4*pgfkeysvalueof{/tikz/fit sep},
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}}{% no inlay
          path
          let p1=($(matX.north east)-(matX.south west)$),
          n1={max(abs(y1)/2,mymatbottom)}
          in
          pgfextra{xdefmymatbottom{n1}
          ifnumX=0
          pgfmathsetmacro{groupwidth}{0}
          else
          pgfmathsetmacro{groupwidth}{groupwidth+x1/2+lastwidth/2+pgfkeysvalueof{/tikz/fit dist}}
          fi
          xdefgroupwidth{groupwidth}
          xdeflastwidth{x1}
          pgfmathsetmacro{myheight}{max(y1+pgfkeysvalueof{/tikz/matrix top sep},myheight)}
          xdefmyheight{myheight}
          ifnumX=0
          xdefLstMatYShifts{0pt}
          xdefLstMatXShifts{0pt}
          else
          xdefLstMatYShifts{LstMatYShifts,0pt}
          xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
          fi};
          % the fit parameters determine the shape of the background rectangles
          begin{pgfonlayer}{behind}
          node[fit=(LX) (matX) (matrices.south-|matX.south),inner ysep=8mm,
          fill=orange!30,rounded corners=50pt](FX){};
          end{pgfonlayer}
          }
          }
          makeatletter
          immediatewrite@mainaux{xdefstringmymatbottom{-mymatbottom}relax}
          immediatewrite@mainaux{xdefstringmyheight{myheight}relax}
          immediatewrite@mainaux{xdefstringLstMatYShifts{{LstMatYShifts}}relax}
          immediatewrite@mainaux{xdefstringLstMatXShifts{{LstMatXShifts}}relax}
          makeatother

          % From https://tex.stackexchange.com/a/480685/152550

          % now add the arrows.

          gdefLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10/5,13/5,14/5}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25/13}",%subjects that 3 links
          "{36/{12,21,29}}",%subjects that 4 links
          }
          }
          pgfmathsetmacro{mylst}{LstCon[0]}
          foreach X in {0,...,totalnodes} {
          begin{scope}[ocg={name={ArrowX},ref=myArrowX,status=visible}]
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          %typeout{X:mylst}
          foreach Y/myalong in mylst {
          ifxmyalongY
          %typeout{X:Y,empty}
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);
          else
          %typeout{X:Yspace andspace myalong}
          draw[-latex,mycolor,very thick] (X-Title.east)
          [along node/.list/.expanded=myalong]
          to[manoooh curve] (Y-Title.west);
          fi
          }
          end{scope}
          }
          end{tikzpicture}
          end{Form}
          flushleft
          qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
          % list of OCGs, space separated
          defocglist{}%
          foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
          fbox{%
          parbox{12cm}{%
          % on/off All
          showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
          hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
          % checkboxes
          % begin{multicols}{4}
          foreach X in {0,...,totalnodes} {%
          layerCheckBox{}{myArrowX}{on}begin{tikzpicture}[baseline=-1ex]%
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
          end{tikzpicture}qquad%
          }%
          % end{multicols}
          }
          }
          }

          end{document}






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Mar 31 at 3:16









          marmotmarmot

          116k5149280




          116k5149280













          • I have a problem: I need to add arrows apart from the foreach. Do you remember this question: Design an algorithm capable of predicting collisions to choose alternative path using tikzpicture environment? Well, I need to add new arrows, but them are not shown in parbox. Do you know how can the arrows appear?

            – manooooh
            Mar 31 at 22:33











          • For example, add these lines of code outside foreach but inside the tikzpicture: (1) pgfmathsetmacro{huenumm}{18*0.75*(1/totalnodes)} (2) definecolor{mycolor2}{hsb}{huenumm,1,1} (3) draw[-latex,mycolor2,very thick] (18-Title.east) to[manoooh curve=1.6] (29-Title.west);. If you compile then this new arrow is not shown, which is reasonable, but I do not know how to add it to the list.

            – manooooh
            Mar 31 at 22:38








          • 1





            @manooooh That's a tough problem because I do not know how the ocgx stuff works. I would guess that the solution is to add these arrows to the lists after you have used the list to draw the arrows. That is, (1) use smaller lists to draw the arrows, (2) draw additional arrows "by hand" and add them to the lists afterwards, (3) do the ocgx with the full lists. Does that make sense? P.S. will go to basketball now...

            – marmot
            Mar 31 at 22:39













          • I do not think that makes sense at all. I think that if we create smaller lists and then add it to a general list the order will not be preserver: we will have the first "X" arrows in hue gradient and then the last "Y" arrows that have a new hue gradient of colors, so the colors would be mixed, isn't it? However I am not sure how the ocgx stuff work, too.

            – manooooh
            Mar 31 at 23:53








          • 1





            @manooooh Oh, but then I either completely misunderstand your question, the ocgx code, or both.

            – marmot
            Apr 1 at 1:48



















          • I have a problem: I need to add arrows apart from the foreach. Do you remember this question: Design an algorithm capable of predicting collisions to choose alternative path using tikzpicture environment? Well, I need to add new arrows, but them are not shown in parbox. Do you know how can the arrows appear?

            – manooooh
            Mar 31 at 22:33











          • For example, add these lines of code outside foreach but inside the tikzpicture: (1) pgfmathsetmacro{huenumm}{18*0.75*(1/totalnodes)} (2) definecolor{mycolor2}{hsb}{huenumm,1,1} (3) draw[-latex,mycolor2,very thick] (18-Title.east) to[manoooh curve=1.6] (29-Title.west);. If you compile then this new arrow is not shown, which is reasonable, but I do not know how to add it to the list.

            – manooooh
            Mar 31 at 22:38








          • 1





            @manooooh That's a tough problem because I do not know how the ocgx stuff works. I would guess that the solution is to add these arrows to the lists after you have used the list to draw the arrows. That is, (1) use smaller lists to draw the arrows, (2) draw additional arrows "by hand" and add them to the lists afterwards, (3) do the ocgx with the full lists. Does that make sense? P.S. will go to basketball now...

            – marmot
            Mar 31 at 22:39













          • I do not think that makes sense at all. I think that if we create smaller lists and then add it to a general list the order will not be preserver: we will have the first "X" arrows in hue gradient and then the last "Y" arrows that have a new hue gradient of colors, so the colors would be mixed, isn't it? However I am not sure how the ocgx stuff work, too.

            – manooooh
            Mar 31 at 23:53








          • 1





            @manooooh Oh, but then I either completely misunderstand your question, the ocgx code, or both.

            – marmot
            Apr 1 at 1:48

















          I have a problem: I need to add arrows apart from the foreach. Do you remember this question: Design an algorithm capable of predicting collisions to choose alternative path using tikzpicture environment? Well, I need to add new arrows, but them are not shown in parbox. Do you know how can the arrows appear?

          – manooooh
          Mar 31 at 22:33





          I have a problem: I need to add arrows apart from the foreach. Do you remember this question: Design an algorithm capable of predicting collisions to choose alternative path using tikzpicture environment? Well, I need to add new arrows, but them are not shown in parbox. Do you know how can the arrows appear?

          – manooooh
          Mar 31 at 22:33













          For example, add these lines of code outside foreach but inside the tikzpicture: (1) pgfmathsetmacro{huenumm}{18*0.75*(1/totalnodes)} (2) definecolor{mycolor2}{hsb}{huenumm,1,1} (3) draw[-latex,mycolor2,very thick] (18-Title.east) to[manoooh curve=1.6] (29-Title.west);. If you compile then this new arrow is not shown, which is reasonable, but I do not know how to add it to the list.

          – manooooh
          Mar 31 at 22:38







          For example, add these lines of code outside foreach but inside the tikzpicture: (1) pgfmathsetmacro{huenumm}{18*0.75*(1/totalnodes)} (2) definecolor{mycolor2}{hsb}{huenumm,1,1} (3) draw[-latex,mycolor2,very thick] (18-Title.east) to[manoooh curve=1.6] (29-Title.west);. If you compile then this new arrow is not shown, which is reasonable, but I do not know how to add it to the list.

          – manooooh
          Mar 31 at 22:38






          1




          1





          @manooooh That's a tough problem because I do not know how the ocgx stuff works. I would guess that the solution is to add these arrows to the lists after you have used the list to draw the arrows. That is, (1) use smaller lists to draw the arrows, (2) draw additional arrows "by hand" and add them to the lists afterwards, (3) do the ocgx with the full lists. Does that make sense? P.S. will go to basketball now...

          – marmot
          Mar 31 at 22:39







          @manooooh That's a tough problem because I do not know how the ocgx stuff works. I would guess that the solution is to add these arrows to the lists after you have used the list to draw the arrows. That is, (1) use smaller lists to draw the arrows, (2) draw additional arrows "by hand" and add them to the lists afterwards, (3) do the ocgx with the full lists. Does that make sense? P.S. will go to basketball now...

          – marmot
          Mar 31 at 22:39















          I do not think that makes sense at all. I think that if we create smaller lists and then add it to a general list the order will not be preserver: we will have the first "X" arrows in hue gradient and then the last "Y" arrows that have a new hue gradient of colors, so the colors would be mixed, isn't it? However I am not sure how the ocgx stuff work, too.

          – manooooh
          Mar 31 at 23:53







          I do not think that makes sense at all. I think that if we create smaller lists and then add it to a general list the order will not be preserver: we will have the first "X" arrows in hue gradient and then the last "Y" arrows that have a new hue gradient of colors, so the colors would be mixed, isn't it? However I am not sure how the ocgx stuff work, too.

          – manooooh
          Mar 31 at 23:53






          1




          1





          @manooooh Oh, but then I either completely misunderstand your question, the ocgx code, or both.

          – marmot
          Apr 1 at 1:48





          @manooooh Oh, but then I either completely misunderstand your question, the ocgx code, or both.

          – marmot
          Apr 1 at 1:48


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f482352%2fhow-to-put-a-box-and-use-columns-to-separate-arrows%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          How to send String Array data to Server using php in android

          Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents

          Is anime1.com a legal site for watching anime?