How to connect `pic`s through a set of colorful arrows using `tikzpicture` environment












3















This is and addendum of a previous question: How to determine nodes to reduce their length using tikzpicture environment, and we need to use this other question: Draw multiple arrows from one node to many others using a palette of colors.



What I want



I need to connect two pictures (subjects) using a palette of colors that varies from red to another color. I am using tikz.



Each subject can have more than one outgoing arrow, but each of them must have only one color. However, between subjects the colors vary (according to the number of subjects drawn, if from a total of n there are only n-15 arrows then there will be n-15 different colors, distributed equally in the palette of chosen colors):



Example



(Taken from marmot's answer)



I want to make clear that the arrows should look like these other arrows (but bending):



Concept of what I want



(Taken from another marmot's answer)



Each node represents a subject. The code should be as automatic as possible.



What I have done



I have borrowed the code that marmot published as an answer of the first attached question and made some changes:



documentclass{article}
usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=29cm]{geometry}
usepackage[english]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{hyperref}

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

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 HERE START THE PROBLEMS:

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

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

% now add the arrows.

defLstCon{%
{
"{2,...,9}",%subjects that 0 links
"{2,10,13,14}",%subjects that 1 links
"{11,14}",%subjects that 2 links
"{10,13,14,25}",%subjects that 3 links
"{36}",%subjects that 8 links <- Will it be possible to use/Should we use 'manoooh curve'?
}
}
foreach X in {0,...,totalnodes} {
pic (X) {nonfillable subject={I dont know what to write here}};
}
foreach X in {0,...,totalnodes} {
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
definecolor{mycolor}{hsb}{huenum,1,1}
pgfmathsetmacro{mylst}{LstCon[X]}
foreach Y in mylst {
%draw[-latex,mycolor,very thick] (aX) to (bY);
draw[-latex,mycolor,very thick] (0-Title) to[out=0,in=180] (Y-Title);% Draws arrows from subject 0 to "{2,...,9}". It does not work
% etc...
}
}
end{tikzpicture}
end{Form}

vfill

end{document}


What I have done



Please pay attention to the last lines (from #261 to #290).



Changes:




  • Renamed every subject by a numerical value ((0), (1) etc.).

  • Changed the meaning of node to subject in the definitions and comments to be more descriptive.

  • The list of subjects to relate is already made (there are 5 lines because they are 5 subjects with arrows).

  • Deleted the (old) way of drawing arrows.

  • Deleted the long arrow style, called manoooh curve.


Problems:




  • When I compile the source code I get a pic that has drawn all the outgoing arrows. Arrows of different colors must go to their respective subjects.

  • I get the error "Dimension too large" because of the long blue arrow.


  • marmot fixed the previous issue by creating a new type of curve: manoooh curve, which is necessary to get rid of the error. However, I am not able to put both designs within the same loop since I do not know how that will affect the color of that arrow.

  • If you find any improvement that you think may be better for the visual design, go ahead!


How can we implement an algorithm that can solve these problems?



Thanks!!










share|improve this question





























    3















    This is and addendum of a previous question: How to determine nodes to reduce their length using tikzpicture environment, and we need to use this other question: Draw multiple arrows from one node to many others using a palette of colors.



    What I want



    I need to connect two pictures (subjects) using a palette of colors that varies from red to another color. I am using tikz.



    Each subject can have more than one outgoing arrow, but each of them must have only one color. However, between subjects the colors vary (according to the number of subjects drawn, if from a total of n there are only n-15 arrows then there will be n-15 different colors, distributed equally in the palette of chosen colors):



    Example



    (Taken from marmot's answer)



    I want to make clear that the arrows should look like these other arrows (but bending):



    Concept of what I want



    (Taken from another marmot's answer)



    Each node represents a subject. The code should be as automatic as possible.



    What I have done



    I have borrowed the code that marmot published as an answer of the first attached question and made some changes:



    documentclass{article}
    usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=29cm]{geometry}
    usepackage[english]{babel}
    usepackage[utf8]{inputenc}
    usepackage[T1]{fontenc}
    usepackage{hyperref}

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

    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 HERE START THE PROBLEMS:

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

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

    % now add the arrows.

    defLstCon{%
    {
    "{2,...,9}",%subjects that 0 links
    "{2,10,13,14}",%subjects that 1 links
    "{11,14}",%subjects that 2 links
    "{10,13,14,25}",%subjects that 3 links
    "{36}",%subjects that 8 links <- Will it be possible to use/Should we use 'manoooh curve'?
    }
    }
    foreach X in {0,...,totalnodes} {
    pic (X) {nonfillable subject={I dont know what to write here}};
    }
    foreach X in {0,...,totalnodes} {
    pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
    definecolor{mycolor}{hsb}{huenum,1,1}
    pgfmathsetmacro{mylst}{LstCon[X]}
    foreach Y in mylst {
    %draw[-latex,mycolor,very thick] (aX) to (bY);
    draw[-latex,mycolor,very thick] (0-Title) to[out=0,in=180] (Y-Title);% Draws arrows from subject 0 to "{2,...,9}". It does not work
    % etc...
    }
    }
    end{tikzpicture}
    end{Form}

    vfill

    end{document}


    What I have done



    Please pay attention to the last lines (from #261 to #290).



    Changes:




    • Renamed every subject by a numerical value ((0), (1) etc.).

    • Changed the meaning of node to subject in the definitions and comments to be more descriptive.

    • The list of subjects to relate is already made (there are 5 lines because they are 5 subjects with arrows).

    • Deleted the (old) way of drawing arrows.

    • Deleted the long arrow style, called manoooh curve.


    Problems:




    • When I compile the source code I get a pic that has drawn all the outgoing arrows. Arrows of different colors must go to their respective subjects.

    • I get the error "Dimension too large" because of the long blue arrow.


    • marmot fixed the previous issue by creating a new type of curve: manoooh curve, which is necessary to get rid of the error. However, I am not able to put both designs within the same loop since I do not know how that will affect the color of that arrow.

    • If you find any improvement that you think may be better for the visual design, go ahead!


    How can we implement an algorithm that can solve these problems?



    Thanks!!










    share|improve this question



























      3












      3








      3








      This is and addendum of a previous question: How to determine nodes to reduce their length using tikzpicture environment, and we need to use this other question: Draw multiple arrows from one node to many others using a palette of colors.



      What I want



      I need to connect two pictures (subjects) using a palette of colors that varies from red to another color. I am using tikz.



      Each subject can have more than one outgoing arrow, but each of them must have only one color. However, between subjects the colors vary (according to the number of subjects drawn, if from a total of n there are only n-15 arrows then there will be n-15 different colors, distributed equally in the palette of chosen colors):



      Example



      (Taken from marmot's answer)



      I want to make clear that the arrows should look like these other arrows (but bending):



      Concept of what I want



      (Taken from another marmot's answer)



      Each node represents a subject. The code should be as automatic as possible.



      What I have done



      I have borrowed the code that marmot published as an answer of the first attached question and made some changes:



      documentclass{article}
      usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=29cm]{geometry}
      usepackage[english]{babel}
      usepackage[utf8]{inputenc}
      usepackage[T1]{fontenc}
      usepackage{hyperref}

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

      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 HERE START THE PROBLEMS:

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

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

      % now add the arrows.

      defLstCon{%
      {
      "{2,...,9}",%subjects that 0 links
      "{2,10,13,14}",%subjects that 1 links
      "{11,14}",%subjects that 2 links
      "{10,13,14,25}",%subjects that 3 links
      "{36}",%subjects that 8 links <- Will it be possible to use/Should we use 'manoooh curve'?
      }
      }
      foreach X in {0,...,totalnodes} {
      pic (X) {nonfillable subject={I dont know what to write here}};
      }
      foreach X in {0,...,totalnodes} {
      pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
      definecolor{mycolor}{hsb}{huenum,1,1}
      pgfmathsetmacro{mylst}{LstCon[X]}
      foreach Y in mylst {
      %draw[-latex,mycolor,very thick] (aX) to (bY);
      draw[-latex,mycolor,very thick] (0-Title) to[out=0,in=180] (Y-Title);% Draws arrows from subject 0 to "{2,...,9}". It does not work
      % etc...
      }
      }
      end{tikzpicture}
      end{Form}

      vfill

      end{document}


      What I have done



      Please pay attention to the last lines (from #261 to #290).



      Changes:




      • Renamed every subject by a numerical value ((0), (1) etc.).

      • Changed the meaning of node to subject in the definitions and comments to be more descriptive.

      • The list of subjects to relate is already made (there are 5 lines because they are 5 subjects with arrows).

      • Deleted the (old) way of drawing arrows.

      • Deleted the long arrow style, called manoooh curve.


      Problems:




      • When I compile the source code I get a pic that has drawn all the outgoing arrows. Arrows of different colors must go to their respective subjects.

      • I get the error "Dimension too large" because of the long blue arrow.


      • marmot fixed the previous issue by creating a new type of curve: manoooh curve, which is necessary to get rid of the error. However, I am not able to put both designs within the same loop since I do not know how that will affect the color of that arrow.

      • If you find any improvement that you think may be better for the visual design, go ahead!


      How can we implement an algorithm that can solve these problems?



      Thanks!!










      share|improve this question
















      This is and addendum of a previous question: How to determine nodes to reduce their length using tikzpicture environment, and we need to use this other question: Draw multiple arrows from one node to many others using a palette of colors.



      What I want



      I need to connect two pictures (subjects) using a palette of colors that varies from red to another color. I am using tikz.



      Each subject can have more than one outgoing arrow, but each of them must have only one color. However, between subjects the colors vary (according to the number of subjects drawn, if from a total of n there are only n-15 arrows then there will be n-15 different colors, distributed equally in the palette of chosen colors):



      Example



      (Taken from marmot's answer)



      I want to make clear that the arrows should look like these other arrows (but bending):



      Concept of what I want



      (Taken from another marmot's answer)



      Each node represents a subject. The code should be as automatic as possible.



      What I have done



      I have borrowed the code that marmot published as an answer of the first attached question and made some changes:



      documentclass{article}
      usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=29cm]{geometry}
      usepackage[english]{babel}
      usepackage[utf8]{inputenc}
      usepackage[T1]{fontenc}
      usepackage{hyperref}

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

      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 HERE START THE PROBLEMS:

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

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

      % now add the arrows.

      defLstCon{%
      {
      "{2,...,9}",%subjects that 0 links
      "{2,10,13,14}",%subjects that 1 links
      "{11,14}",%subjects that 2 links
      "{10,13,14,25}",%subjects that 3 links
      "{36}",%subjects that 8 links <- Will it be possible to use/Should we use 'manoooh curve'?
      }
      }
      foreach X in {0,...,totalnodes} {
      pic (X) {nonfillable subject={I dont know what to write here}};
      }
      foreach X in {0,...,totalnodes} {
      pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
      definecolor{mycolor}{hsb}{huenum,1,1}
      pgfmathsetmacro{mylst}{LstCon[X]}
      foreach Y in mylst {
      %draw[-latex,mycolor,very thick] (aX) to (bY);
      draw[-latex,mycolor,very thick] (0-Title) to[out=0,in=180] (Y-Title);% Draws arrows from subject 0 to "{2,...,9}". It does not work
      % etc...
      }
      }
      end{tikzpicture}
      end{Form}

      vfill

      end{document}


      What I have done



      Please pay attention to the last lines (from #261 to #290).



      Changes:




      • Renamed every subject by a numerical value ((0), (1) etc.).

      • Changed the meaning of node to subject in the definitions and comments to be more descriptive.

      • The list of subjects to relate is already made (there are 5 lines because they are 5 subjects with arrows).

      • Deleted the (old) way of drawing arrows.

      • Deleted the long arrow style, called manoooh curve.


      Problems:




      • When I compile the source code I get a pic that has drawn all the outgoing arrows. Arrows of different colors must go to their respective subjects.

      • I get the error "Dimension too large" because of the long blue arrow.


      • marmot fixed the previous issue by creating a new type of curve: manoooh curve, which is necessary to get rid of the error. However, I am not able to put both designs within the same loop since I do not know how that will affect the color of that arrow.

      • If you find any improvement that you think may be better for the visual design, go ahead!


      How can we implement an algorithm that can solve these problems?



      Thanks!!







      tikz-pgf color diagrams arrows






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 21 at 8:51







      manooooh

















      asked Mar 21 at 8:46









      manoooohmanooooh

      1,1631517




      1,1631517






















          1 Answer
          1






          active

          oldest

          votes


















          2














          I do not understand why you are redrawing the nodes rather than connecting existing ones. All I did was just to change this.



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=29cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}

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

          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 HERE START THE PROBLEMS:

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

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

          % now add the arrows.

          defLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10,13,14}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25}",%subjects that 3 links
          "{36}",%subjects that 8 links <- Will it be possible to use/Should we use 'manoooh curve'?
          }
          }
          foreach X in {0,...,totalnodes} {
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          foreach Y in mylst {
          %draw[-latex,mycolor,very thick] (aX) to (bY);
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);% Draws arrows from subject 0 to "{2,...,9}". It does not work
          % etc...
          }
          }
          end{tikzpicture}
          end{Form}

          vfill

          end{document}


          enter image description here






          share|improve this answer





















          • 1





            @manooooh My bad. I was using edge where I should have used to.

            – marmot
            Mar 22 at 1:17












          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%2f480639%2fhow-to-connect-pics-through-a-set-of-colorful-arrows-using-tikzpicture-envir%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 do not understand why you are redrawing the nodes rather than connecting existing ones. All I did was just to change this.



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=29cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}

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

          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 HERE START THE PROBLEMS:

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

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

          % now add the arrows.

          defLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10,13,14}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25}",%subjects that 3 links
          "{36}",%subjects that 8 links <- Will it be possible to use/Should we use 'manoooh curve'?
          }
          }
          foreach X in {0,...,totalnodes} {
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          foreach Y in mylst {
          %draw[-latex,mycolor,very thick] (aX) to (bY);
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);% Draws arrows from subject 0 to "{2,...,9}". It does not work
          % etc...
          }
          }
          end{tikzpicture}
          end{Form}

          vfill

          end{document}


          enter image description here






          share|improve this answer





















          • 1





            @manooooh My bad. I was using edge where I should have used to.

            – marmot
            Mar 22 at 1:17
















          2














          I do not understand why you are redrawing the nodes rather than connecting existing ones. All I did was just to change this.



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=29cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}

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

          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 HERE START THE PROBLEMS:

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

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

          % now add the arrows.

          defLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10,13,14}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25}",%subjects that 3 links
          "{36}",%subjects that 8 links <- Will it be possible to use/Should we use 'manoooh curve'?
          }
          }
          foreach X in {0,...,totalnodes} {
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          foreach Y in mylst {
          %draw[-latex,mycolor,very thick] (aX) to (bY);
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);% Draws arrows from subject 0 to "{2,...,9}". It does not work
          % etc...
          }
          }
          end{tikzpicture}
          end{Form}

          vfill

          end{document}


          enter image description here






          share|improve this answer





















          • 1





            @manooooh My bad. I was using edge where I should have used to.

            – marmot
            Mar 22 at 1:17














          2












          2








          2







          I do not understand why you are redrawing the nodes rather than connecting existing ones. All I did was just to change this.



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=29cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}

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

          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 HERE START THE PROBLEMS:

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

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

          % now add the arrows.

          defLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10,13,14}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25}",%subjects that 3 links
          "{36}",%subjects that 8 links <- Will it be possible to use/Should we use 'manoooh curve'?
          }
          }
          foreach X in {0,...,totalnodes} {
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          foreach Y in mylst {
          %draw[-latex,mycolor,very thick] (aX) to (bY);
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);% Draws arrows from subject 0 to "{2,...,9}". It does not work
          % etc...
          }
          }
          end{tikzpicture}
          end{Form}

          vfill

          end{document}


          enter image description here






          share|improve this answer















          I do not understand why you are redrawing the nodes rather than connecting existing ones. All I did was just to change this.



          documentclass{article}
          usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=29cm]{geometry}
          usepackage[english]{babel}
          usepackage[utf8]{inputenc}
          usepackage[T1]{fontenc}
          usepackage{hyperref}

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

          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 HERE START THE PROBLEMS:

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

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

          % now add the arrows.

          defLstCon{%
          {
          "{2,...,9}",%subjects that 0 links
          "{2,10,13,14}",%subjects that 1 links
          "{11,14}",%subjects that 2 links
          "{10,13,14,25}",%subjects that 3 links
          "{36}",%subjects that 8 links <- Will it be possible to use/Should we use 'manoooh curve'?
          }
          }
          foreach X in {0,...,totalnodes} {
          pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
          definecolor{mycolor}{hsb}{huenum,1,1}
          pgfmathsetmacro{mylst}{LstCon[X]}
          foreach Y in mylst {
          %draw[-latex,mycolor,very thick] (aX) to (bY);
          draw[-latex,mycolor,very thick] (X-Title.east)
          to[manoooh curve] (Y-Title.west);% Draws arrows from subject 0 to "{2,...,9}". It does not work
          % etc...
          }
          }
          end{tikzpicture}
          end{Form}

          vfill

          end{document}


          enter image description here







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Mar 22 at 1:17

























          answered Mar 21 at 14:14









          marmotmarmot

          113k5145275




          113k5145275








          • 1





            @manooooh My bad. I was using edge where I should have used to.

            – marmot
            Mar 22 at 1:17














          • 1





            @manooooh My bad. I was using edge where I should have used to.

            – marmot
            Mar 22 at 1:17








          1




          1





          @manooooh My bad. I was using edge where I should have used to.

          – marmot
          Mar 22 at 1:17





          @manooooh My bad. I was using edge where I should have used to.

          – marmot
          Mar 22 at 1:17


















          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%2f480639%2fhow-to-connect-pics-through-a-set-of-colorful-arrows-using-tikzpicture-envir%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 change which sound is reproduced for terminal bell?

          Can I use Tabulator js library in my java Spring + Thymeleaf project?

          Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents