How to put a box and use columns to separate arrows The Next CEO of Stack OverflowHow to put a...
What flight has the highest ratio of time difference to flight time?
Should I tutor a student who I know has cheated on their homework?
I believe this to be a fraud - hired, then asked to cash check and send cash as Bitcoin
INSERT to a table from a database to other (same SQL Server) using Dynamic SQL
Is it okay to majorly distort historical facts while writing a fiction story?
Newlines in BSD sed vs gsed
Why is my new battery behaving weirdly?
Why is the US ranked as #45 in Press Freedom ratings, despite its extremely permissive free speech laws?
Solving system of ODEs with extra parameter
Why don't programming languages automatically manage the synchronous/asynchronous problem?
Powershell. How to parse gci Name?
Unclear about dynamic binding
Example of a Mathematician/Physicist whose Other Publications during their PhD eclipsed their PhD Thesis
Is it convenient to ask the journal's editor for two additional days to complete a review?
Easy to read palindrome checker
Can you be charged for obstruction for refusing to answer questions?
Find non-case sensitive string in a mixed list of elements?
WOW air has ceased operation, can I get my tickets refunded?
When you upcast Blindness/Deafness, do all targets suffer the same effect?
Rotate a column
Do I need to write [sic] when a number is less than 10 but isn't written out?
Flying from Cape Town to England and return to another province
What was the first Unix version to run on a microcomputer?
Which one is the true statement?
How to put a box and use columns to separate arrows
The Next CEO of Stack OverflowHow to put a long piece of text in a box?Checking whether or not a node has been previously definedHow to draw a diagram of custom subject correlativitiesCreating a lot of checkbox'es to make visible/invisible arrows using `tikzpicture` environmentDraw a set of arrows using a palette of colorsHow to connect `pic`s through a set of colorful arrows using `tikzpicture` environmentThick and patterned arrowsArrows between two tables with multiple columnsTikZ/ERD: node (=Entity) label on the insideDrawing arrows from different edges of node/decision boxPut two columns into boxHow do I separate blocks of different height multicolumns and have separate columns below one another?How to put the letters under the arrows tikz?Box with incoming and outgoing arrowsHow to put text over monomorphism and epimorphism arrows?How to use arrows to separate rows or columns of a table
I am using the following resources:
The MWE of Creating a lot of checkbox'es to make visible/invisible arrows using
tikzpicture
environment.The
multicols
environment of Draw a set of arrows using a palette of colors.The box of How to put a long piece of text in a box?
MWE:
documentclass{article}
usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=32cm]{geometry}
usepackage[english]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{hyperref}
usepackage{multicol}
usepackage[tikz]{ocgx2}
usepackage{amssymb} % checkmark
% check box command for layer switching
newcommandlayerCheckBox[3]{%
% #1: switch id, if empty use #2 instead
% #2: layer ids to be toggled (space separated if multiple ids),
% #3: initial visibility
resizebox{2ex}{!}{ooalign{%
switchocg{#1 #2}{$square$}cr%
begin{ocg}{%
ifxnil#1nil#2else#1fi%
}{%
ifxnil#1nil#2else#1fi%
}{#3}$checkmark$end{ocg}%
}}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
usepackage{tikz}
usetikzlibrary{positioning,fit,calc}
pgfdeclarelayer{behind}
pgfdeclarelayer{background}
pgfdeclarelayer{foreground}
pgfsetlayers{behind,background,main,foreground}
tikzset{
text field/.style={text height=1.5ex,align=center,rounded corners},
nonfillable title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=5cm,align=center,font=footnotesizesffamily},
fillable title field/.style={text height=3.14ex,text depth=0em,anchor=south,text
width=5cm,align=center,font=footnotesizesffamily},
pics/fillable subject/.style={code={%
node[text field] (-TF)
{hspace*{-0.5em}TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0.15em}TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0em}TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable subject/.style={code={%
node[text field] (-TF)
{hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/fillable elective subject/.style={code={%
node[text field] (-TF)
{hspace*{-0.5em}TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0.15em}TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0em}TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
node[fillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {hspace*{-0.34em}TextField[align=1,name=#1-electivesubject,width=4.5cm,charsize=8pt,height=.5cm,bordercolor={1 1 1}]{}};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable elective subject/.style={code={%
node[text field] (-TF)
{hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
manoooh/.style={column sep=-1.75cm,row sep=5mm},
manooohE/.style={column sep=-2.25cm,row sep=5mm,anchor=south},
electives/.style={column sep=-7.25cm,row sep=5mm},
fit sep/.initial=4pt, % change width of node (big rectangle shape)
fit dist/.initial=40pt, % change node distance (big rectangle shape)
inlay top sep/.initial=24pt,
matrix top sep/.initial=24pt,
manoooh curve/.style={to path={let p1=($(tikztotarget)-(tikztostart)$)
in (tikztostart) .. controls ($(tikztostart)+(#1*x1,0)$)
and ($(tikztotarget)+(-#1*x1,0)$) .. (tikztotarget)}},
manoooh curve/.default=0.3,
along node/.style={insert path={
to[out=0,in=180]
([yshift=5pt]#1-Title.north west) -- ([yshift=5pt]#1-Title.north east)}}
} % From https://tex.stackexchange.com/a/478723/152550
makeatletter% from https://tex.stackexchange.com/a/85531/121799
longdefifnodedefined#1#2#3{%
@ifundefined{pgf@sh@ns@#1}{#3}{#2}%
}
makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%
newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
%%%%%%%%%%%%%%%%%%%%%%%%%
begin{document}
thispagestyle{empty} % To suppress page number
noindent
begin{tikzpicture}
fill[white,fill=orange] (0,0) rectangle (paperwidth,-2cm) node[midway,align=center,font=Huge] {bfseries Some text here\LARGE More text here};
end{tikzpicture}
ifdefinedmymatbottom
else
typeout{Pleasespace recompilespace yourspace file!}
defmymatbottom{-150pt}
fi
ifdefinedmyheight
else
defmyheight{0}
typeout{Pleasespace recompilespace yourspace file!}
fi
ifdefinedLstMatYShifts
else
defLstMatYShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
fi
ifdefinedLstMatXShifts
else
defLstMatXShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
fi
%typeout{height:myheight}
%typeout{xshifts(in):LstMatXShifts}
vfill
centering
begin{Form}
begin{tikzpicture}
% step 1: add the matrices, name them mat0, mat1 etc.
begin{scope}[local bounding box=matrices]
matrix[manoooh] (mat0) at ({LstMatXShifts[0]},{LstMatYShifts[0]}) {
pic[local bounding box=A] (0) {nonfillable subject={Subject A}}; \
pic (1) {nonfillable subject={Subject B}}; \
};
matrix[manoooh] (mat1) at ({LstMatXShifts[1]},{LstMatYShifts[1]}) {
pic (2) {nonfillable subject={Subject C}}; \
pic (3) {nonfillable subject={Subject D}}; \
pic (4) {nonfillable subject={Subject E}}; \
pic (5) {nonfillable subject={Subject F}}; \
pic (6) {nonfillable subject={Subject G}}; \
pic (7) {nonfillable subject={Subject H}}; \
pic (8) {nonfillable subject={Subject I}}; \
pic[draw=red] (9) {nonfillable subject={Subject J}}; \
};
matrix[manoooh] (mat2) at ({LstMatXShifts[2]},{LstMatYShifts[2]}) {
pic[draw=red] (10) {nonfillable subject={Subject K}}; \
pic (11) {nonfillable subject={Subject L}}; \
pic (12) {nonfillable subject={Subject A}}; \
pic (13) {nonfillable subject={Subject N}}; \
pic (14) {nonfillable subject={Subject O}}; \
pic (15) {nonfillable subject={Subject P}}; \
pic (16) {nonfillable subject={Subject Q}}; \
pic (17) {nonfillable subject={Subject R}}; \
};
matrix[manoooh] (mat3) at ({LstMatXShifts[3]},{LstMatYShifts[3]}) {
pic[draw=red] (18) {nonfillable subject={Subject S}}; \
pic (19) {nonfillable subject={Subject T}}; \
pic (20) {nonfillable subject={Subject U}}; \
pic (21) {nonfillable subject={Subject V}}; \
pic (22) {nonfillable subject={Subject W}}; \
pic (23) {nonfillable subject={Subject X}}; \
pic (24) {nonfillable subject={Subject Y}}; \
pic (25) {nonfillable subject={Subject Z}}; \
};
matrix[manooohE] (matE3) at ({LstMatXShifts[3]},mymatbottom) {
pic (L3E1) {nonfillable elective subject={Subject}}; & &
pic (L3E2) {nonfillable elective subject={Subject}}; \
& pic (L3E3) {nonfillable elective subject={Subject}}; & \
};
matrix[manoooh] (mat4) at ({LstMatXShifts[4]},{LstMatYShifts[4]}) {
& pic[draw=red] (26) {nonfillable subject={Subject AA}}; & \
pic (27) {nonfillable subject={Subject AB}}; & & pic (28) {nonfillable subject={Subject AC}}; \
& pic (29) {nonfillable subject={Subject AD}}; & \
& pic (30) {nonfillable subject={Subject AE}}; & \
& pic (31) {nonfillable subject={Subject AF}}; & \
& pic (32) {nonfillable subject={Subject AG}}; & \
};
matrix[manooohE] (matE4) at ({LstMatXShifts[4]},mymatbottom) {
pic (L4E1) {nonfillable elective subject={Subject}}; \
};
matrix[manoooh] (mat5) at ({LstMatXShifts[5]},{LstMatYShifts[5]}) {
pic (33) {nonfillable subject={Subject AH}}; \
pic (34) {nonfillable subject={Subject AI}}; \
pic[draw=red] (35) {nonfillable subject={Subject AJ}}; \
pic (36) {nonfillable subject={Subject AK}}; \
};
matrix[manooohE] (matE5) at ({LstMatXShifts[5]},mymatbottom) {
pic (L5E1) {nonfillable elective subject={Subject}}; \
pic (L5E2) {nonfillable elective subject={Subject}}; \
pic (L5E3) {nonfillable elective subject={Subject}}; \
pic (L5E4) {nonfillable elective subject={Subject}}; \
pic (L5E5) {nonfillable elective subject={Subject}}; \
};
end{scope}
pgfmathsetmacro{groupwidth}{0}
pgfmathsetmacro{lastwidth}{0}
foreach X in {0,...,5} %<- if you have more or less matrices, adjust 3
{
node[anchor=south,yshift=1cm,align=center,font=LARGEbfseriesboldmath]
at (matX |-matrices.north) (LX) {Level $X$};
ifnodedefined{matEX}{% has inlay
node[xshift=1em,anchor=south west,font=LARGEbfseries,opacity=0] (matElX) at (matEX.north west) {Electives};
begin{pgfonlayer}{background}
path let p1=($(matX.north east)-(matX.south west)$) in
node[fit=(matEX) (matElX),inner ysep=5mm,fill=blue!30,rounded
corners=40pt,minimum width=x1-2*pgfkeysvalueof{/tikz/fit sep},
inner xsep=pgfkeysvalueof{/tikz/fit sep}](FX){};
node[xshift=1em,anchor=south west,font=LARGEbfseries]
(matElX) at ([xshift=1.3em]FX.west|-matElX.center) {Electives};
end{pgfonlayer}
path let p1=($(matX.north east)-(matX.south west)$),
p2=($(FX.north east)-(FX.south west)$),
n1={max(abs(y1)/2+abs(y2)/2+0*pgfkeysvalueof{/tikz/inlay top sep},mymatbottom)}
in
pgfextra{xdefmymatbottom{n1}
ifnumX=0
pgfmathsetmacro{groupwidth}{0}
else
pgfmathsetmacro{groupwidth}{groupwidth+max(x1,x2)/2+lastwidth/2+2*pgfkeysvalueof{/tikz/fit sep}+pgfkeysvalueof{/tikz/fit dist}}
fi
pgfmathsetmacro{lastwidth}{max(x1,x2)+8*pgfkeysvalueof{/tikz/fit sep}}
xdeflastwidth{lastwidth}
xdefgroupwidth{groupwidth}
pgfmathsetmacro{myheight}{max(y1+y2+%
pgfkeysvalueof{/tikz/inlay top sep}+pgfkeysvalueof{/tikz/matrix top sep},%
myheight)}
xdefmyheight{myheight}
pgfmathsetmacro{myshift}{(pgfkeysvalueof{/tikz/inlay top sep}+y2)/2}
ifnumX=0
xdefLstMatYShifts{myshift pt}
xdefLstMatXShifts{0pt}
else
xdefLstMatYShifts{LstMatYShifts,myshift pt}
xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
fi};
% the fit parameters determine the shape of the background rectangles
begin{pgfonlayer}{behind}
node[fit=(LX) (matX) (matrices.south-|matX.south)
(matEX) (matElX),inner ysep=8mm,inner xsep=4*pgfkeysvalueof{/tikz/fit sep},
fill=orange!30,rounded corners=50pt](FX){};
end{pgfonlayer}}{% no inlay
path
let p1=($(matX.north east)-(matX.south west)$),
n1={max(abs(y1)/2,mymatbottom)}
in
pgfextra{xdefmymatbottom{n1}
ifnumX=0
pgfmathsetmacro{groupwidth}{0}
else
pgfmathsetmacro{groupwidth}{groupwidth+x1/2+lastwidth/2+pgfkeysvalueof{/tikz/fit dist}}
fi
xdefgroupwidth{groupwidth}
xdeflastwidth{x1}
pgfmathsetmacro{myheight}{max(y1+pgfkeysvalueof{/tikz/matrix top sep},myheight)}
xdefmyheight{myheight}
ifnumX=0
xdefLstMatYShifts{0pt}
xdefLstMatXShifts{0pt}
else
xdefLstMatYShifts{LstMatYShifts,0pt}
xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
fi};
% the fit parameters determine the shape of the background rectangles
begin{pgfonlayer}{behind}
node[fit=(LX) (matX) (matrices.south-|matX.south),inner ysep=8mm,
fill=orange!30,rounded corners=50pt](FX){};
end{pgfonlayer}
}
}
makeatletter
immediatewrite@mainaux{xdefstringmymatbottom{-mymatbottom}relax}
immediatewrite@mainaux{xdefstringmyheight{myheight}relax}
immediatewrite@mainaux{xdefstringLstMatYShifts{{LstMatYShifts}}relax}
immediatewrite@mainaux{xdefstringLstMatXShifts{{LstMatXShifts}}relax}
makeatother
% From https://tex.stackexchange.com/a/480685/152550
% now add the arrows.
gdefLstCon{%
{
"{2,...,9}",%subjects that 0 links
"{2,10/5,13/5,14/5}",%subjects that 1 links
"{11,14}",%subjects that 2 links
"{10,13,14,25/13}",%subjects that 3 links
"{36/{12,21,29}}",%subjects that 4 links
}
}
pgfmathsetmacro{mylst}{LstCon[0]}
foreach X in {0,...,totalnodes} {
begin{scope}[ocg={name={ArrowX},ref=myArrowX,status=visible}]
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
definecolor{mycolor}{hsb}{huenum,1,1}
pgfmathsetmacro{mylst}{LstCon[X]}
%typeout{X:mylst}
foreach Y/myalong in mylst {
ifxmyalongY
%typeout{X:Y,empty}
draw[-latex,mycolor,very thick] (X-Title.east)
to[manoooh curve] (Y-Title.west);
else
%typeout{X:Yspace andspace myalong}
draw[-latex,mycolor,very thick] (X-Title.east)
[along node/.list/.expanded=myalong]
to[manoooh curve] (Y-Title.west);
fi
}
end{scope}
}
end{tikzpicture}
end{Form}
flushleft
qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
% list of OCGs, space separated
defocglist{}%
foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
fbox{%
parbox{5cm}{%
% on/off All
showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
% checkboxes
foreach X in {0,...,totalnodes} {%
begin{multicols}{4}
layerCheckBox{}{myArrowX}{on}begin{tikzpicture}%
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
end{tikzpicture}\%
end{multicols}
}%
}
}
}
end{document}
I would like to:
- Center every arrow to the corresponding checkbox.
- Put to work
multicols
(it says "4" but it is actually 1 column). - Get rid of the "Bad Box(es)" messages by making a good use of
fbox
(or similar command). - Not say
parbox{5cm}{...}
butparbox{<automatic>}{...}
, whereparbox
calculates the proper vertical space of the box, based on the quantity of columns.
I want this:
P.S. There can actually be 4 or 5 or any number of columns.
tikz-pgf vertical-alignment arrows multicolumn
add a comment |
I am using the following resources:
The MWE of Creating a lot of checkbox'es to make visible/invisible arrows using
tikzpicture
environment.The
multicols
environment of Draw a set of arrows using a palette of colors.The box of How to put a long piece of text in a box?
MWE:
documentclass{article}
usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=32cm]{geometry}
usepackage[english]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{hyperref}
usepackage{multicol}
usepackage[tikz]{ocgx2}
usepackage{amssymb} % checkmark
% check box command for layer switching
newcommandlayerCheckBox[3]{%
% #1: switch id, if empty use #2 instead
% #2: layer ids to be toggled (space separated if multiple ids),
% #3: initial visibility
resizebox{2ex}{!}{ooalign{%
switchocg{#1 #2}{$square$}cr%
begin{ocg}{%
ifxnil#1nil#2else#1fi%
}{%
ifxnil#1nil#2else#1fi%
}{#3}$checkmark$end{ocg}%
}}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
usepackage{tikz}
usetikzlibrary{positioning,fit,calc}
pgfdeclarelayer{behind}
pgfdeclarelayer{background}
pgfdeclarelayer{foreground}
pgfsetlayers{behind,background,main,foreground}
tikzset{
text field/.style={text height=1.5ex,align=center,rounded corners},
nonfillable title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=5cm,align=center,font=footnotesizesffamily},
fillable title field/.style={text height=3.14ex,text depth=0em,anchor=south,text
width=5cm,align=center,font=footnotesizesffamily},
pics/fillable subject/.style={code={%
node[text field] (-TF)
{hspace*{-0.5em}TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0.15em}TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0em}TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable subject/.style={code={%
node[text field] (-TF)
{hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/fillable elective subject/.style={code={%
node[text field] (-TF)
{hspace*{-0.5em}TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0.15em}TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0em}TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
node[fillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {hspace*{-0.34em}TextField[align=1,name=#1-electivesubject,width=4.5cm,charsize=8pt,height=.5cm,bordercolor={1 1 1}]{}};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable elective subject/.style={code={%
node[text field] (-TF)
{hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
manoooh/.style={column sep=-1.75cm,row sep=5mm},
manooohE/.style={column sep=-2.25cm,row sep=5mm,anchor=south},
electives/.style={column sep=-7.25cm,row sep=5mm},
fit sep/.initial=4pt, % change width of node (big rectangle shape)
fit dist/.initial=40pt, % change node distance (big rectangle shape)
inlay top sep/.initial=24pt,
matrix top sep/.initial=24pt,
manoooh curve/.style={to path={let p1=($(tikztotarget)-(tikztostart)$)
in (tikztostart) .. controls ($(tikztostart)+(#1*x1,0)$)
and ($(tikztotarget)+(-#1*x1,0)$) .. (tikztotarget)}},
manoooh curve/.default=0.3,
along node/.style={insert path={
to[out=0,in=180]
([yshift=5pt]#1-Title.north west) -- ([yshift=5pt]#1-Title.north east)}}
} % From https://tex.stackexchange.com/a/478723/152550
makeatletter% from https://tex.stackexchange.com/a/85531/121799
longdefifnodedefined#1#2#3{%
@ifundefined{pgf@sh@ns@#1}{#3}{#2}%
}
makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%
newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
%%%%%%%%%%%%%%%%%%%%%%%%%
begin{document}
thispagestyle{empty} % To suppress page number
noindent
begin{tikzpicture}
fill[white,fill=orange] (0,0) rectangle (paperwidth,-2cm) node[midway,align=center,font=Huge] {bfseries Some text here\LARGE More text here};
end{tikzpicture}
ifdefinedmymatbottom
else
typeout{Pleasespace recompilespace yourspace file!}
defmymatbottom{-150pt}
fi
ifdefinedmyheight
else
defmyheight{0}
typeout{Pleasespace recompilespace yourspace file!}
fi
ifdefinedLstMatYShifts
else
defLstMatYShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
fi
ifdefinedLstMatXShifts
else
defLstMatXShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
fi
%typeout{height:myheight}
%typeout{xshifts(in):LstMatXShifts}
vfill
centering
begin{Form}
begin{tikzpicture}
% step 1: add the matrices, name them mat0, mat1 etc.
begin{scope}[local bounding box=matrices]
matrix[manoooh] (mat0) at ({LstMatXShifts[0]},{LstMatYShifts[0]}) {
pic[local bounding box=A] (0) {nonfillable subject={Subject A}}; \
pic (1) {nonfillable subject={Subject B}}; \
};
matrix[manoooh] (mat1) at ({LstMatXShifts[1]},{LstMatYShifts[1]}) {
pic (2) {nonfillable subject={Subject C}}; \
pic (3) {nonfillable subject={Subject D}}; \
pic (4) {nonfillable subject={Subject E}}; \
pic (5) {nonfillable subject={Subject F}}; \
pic (6) {nonfillable subject={Subject G}}; \
pic (7) {nonfillable subject={Subject H}}; \
pic (8) {nonfillable subject={Subject I}}; \
pic[draw=red] (9) {nonfillable subject={Subject J}}; \
};
matrix[manoooh] (mat2) at ({LstMatXShifts[2]},{LstMatYShifts[2]}) {
pic[draw=red] (10) {nonfillable subject={Subject K}}; \
pic (11) {nonfillable subject={Subject L}}; \
pic (12) {nonfillable subject={Subject A}}; \
pic (13) {nonfillable subject={Subject N}}; \
pic (14) {nonfillable subject={Subject O}}; \
pic (15) {nonfillable subject={Subject P}}; \
pic (16) {nonfillable subject={Subject Q}}; \
pic (17) {nonfillable subject={Subject R}}; \
};
matrix[manoooh] (mat3) at ({LstMatXShifts[3]},{LstMatYShifts[3]}) {
pic[draw=red] (18) {nonfillable subject={Subject S}}; \
pic (19) {nonfillable subject={Subject T}}; \
pic (20) {nonfillable subject={Subject U}}; \
pic (21) {nonfillable subject={Subject V}}; \
pic (22) {nonfillable subject={Subject W}}; \
pic (23) {nonfillable subject={Subject X}}; \
pic (24) {nonfillable subject={Subject Y}}; \
pic (25) {nonfillable subject={Subject Z}}; \
};
matrix[manooohE] (matE3) at ({LstMatXShifts[3]},mymatbottom) {
pic (L3E1) {nonfillable elective subject={Subject}}; & &
pic (L3E2) {nonfillable elective subject={Subject}}; \
& pic (L3E3) {nonfillable elective subject={Subject}}; & \
};
matrix[manoooh] (mat4) at ({LstMatXShifts[4]},{LstMatYShifts[4]}) {
& pic[draw=red] (26) {nonfillable subject={Subject AA}}; & \
pic (27) {nonfillable subject={Subject AB}}; & & pic (28) {nonfillable subject={Subject AC}}; \
& pic (29) {nonfillable subject={Subject AD}}; & \
& pic (30) {nonfillable subject={Subject AE}}; & \
& pic (31) {nonfillable subject={Subject AF}}; & \
& pic (32) {nonfillable subject={Subject AG}}; & \
};
matrix[manooohE] (matE4) at ({LstMatXShifts[4]},mymatbottom) {
pic (L4E1) {nonfillable elective subject={Subject}}; \
};
matrix[manoooh] (mat5) at ({LstMatXShifts[5]},{LstMatYShifts[5]}) {
pic (33) {nonfillable subject={Subject AH}}; \
pic (34) {nonfillable subject={Subject AI}}; \
pic[draw=red] (35) {nonfillable subject={Subject AJ}}; \
pic (36) {nonfillable subject={Subject AK}}; \
};
matrix[manooohE] (matE5) at ({LstMatXShifts[5]},mymatbottom) {
pic (L5E1) {nonfillable elective subject={Subject}}; \
pic (L5E2) {nonfillable elective subject={Subject}}; \
pic (L5E3) {nonfillable elective subject={Subject}}; \
pic (L5E4) {nonfillable elective subject={Subject}}; \
pic (L5E5) {nonfillable elective subject={Subject}}; \
};
end{scope}
pgfmathsetmacro{groupwidth}{0}
pgfmathsetmacro{lastwidth}{0}
foreach X in {0,...,5} %<- if you have more or less matrices, adjust 3
{
node[anchor=south,yshift=1cm,align=center,font=LARGEbfseriesboldmath]
at (matX |-matrices.north) (LX) {Level $X$};
ifnodedefined{matEX}{% has inlay
node[xshift=1em,anchor=south west,font=LARGEbfseries,opacity=0] (matElX) at (matEX.north west) {Electives};
begin{pgfonlayer}{background}
path let p1=($(matX.north east)-(matX.south west)$) in
node[fit=(matEX) (matElX),inner ysep=5mm,fill=blue!30,rounded
corners=40pt,minimum width=x1-2*pgfkeysvalueof{/tikz/fit sep},
inner xsep=pgfkeysvalueof{/tikz/fit sep}](FX){};
node[xshift=1em,anchor=south west,font=LARGEbfseries]
(matElX) at ([xshift=1.3em]FX.west|-matElX.center) {Electives};
end{pgfonlayer}
path let p1=($(matX.north east)-(matX.south west)$),
p2=($(FX.north east)-(FX.south west)$),
n1={max(abs(y1)/2+abs(y2)/2+0*pgfkeysvalueof{/tikz/inlay top sep},mymatbottom)}
in
pgfextra{xdefmymatbottom{n1}
ifnumX=0
pgfmathsetmacro{groupwidth}{0}
else
pgfmathsetmacro{groupwidth}{groupwidth+max(x1,x2)/2+lastwidth/2+2*pgfkeysvalueof{/tikz/fit sep}+pgfkeysvalueof{/tikz/fit dist}}
fi
pgfmathsetmacro{lastwidth}{max(x1,x2)+8*pgfkeysvalueof{/tikz/fit sep}}
xdeflastwidth{lastwidth}
xdefgroupwidth{groupwidth}
pgfmathsetmacro{myheight}{max(y1+y2+%
pgfkeysvalueof{/tikz/inlay top sep}+pgfkeysvalueof{/tikz/matrix top sep},%
myheight)}
xdefmyheight{myheight}
pgfmathsetmacro{myshift}{(pgfkeysvalueof{/tikz/inlay top sep}+y2)/2}
ifnumX=0
xdefLstMatYShifts{myshift pt}
xdefLstMatXShifts{0pt}
else
xdefLstMatYShifts{LstMatYShifts,myshift pt}
xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
fi};
% the fit parameters determine the shape of the background rectangles
begin{pgfonlayer}{behind}
node[fit=(LX) (matX) (matrices.south-|matX.south)
(matEX) (matElX),inner ysep=8mm,inner xsep=4*pgfkeysvalueof{/tikz/fit sep},
fill=orange!30,rounded corners=50pt](FX){};
end{pgfonlayer}}{% no inlay
path
let p1=($(matX.north east)-(matX.south west)$),
n1={max(abs(y1)/2,mymatbottom)}
in
pgfextra{xdefmymatbottom{n1}
ifnumX=0
pgfmathsetmacro{groupwidth}{0}
else
pgfmathsetmacro{groupwidth}{groupwidth+x1/2+lastwidth/2+pgfkeysvalueof{/tikz/fit dist}}
fi
xdefgroupwidth{groupwidth}
xdeflastwidth{x1}
pgfmathsetmacro{myheight}{max(y1+pgfkeysvalueof{/tikz/matrix top sep},myheight)}
xdefmyheight{myheight}
ifnumX=0
xdefLstMatYShifts{0pt}
xdefLstMatXShifts{0pt}
else
xdefLstMatYShifts{LstMatYShifts,0pt}
xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
fi};
% the fit parameters determine the shape of the background rectangles
begin{pgfonlayer}{behind}
node[fit=(LX) (matX) (matrices.south-|matX.south),inner ysep=8mm,
fill=orange!30,rounded corners=50pt](FX){};
end{pgfonlayer}
}
}
makeatletter
immediatewrite@mainaux{xdefstringmymatbottom{-mymatbottom}relax}
immediatewrite@mainaux{xdefstringmyheight{myheight}relax}
immediatewrite@mainaux{xdefstringLstMatYShifts{{LstMatYShifts}}relax}
immediatewrite@mainaux{xdefstringLstMatXShifts{{LstMatXShifts}}relax}
makeatother
% From https://tex.stackexchange.com/a/480685/152550
% now add the arrows.
gdefLstCon{%
{
"{2,...,9}",%subjects that 0 links
"{2,10/5,13/5,14/5}",%subjects that 1 links
"{11,14}",%subjects that 2 links
"{10,13,14,25/13}",%subjects that 3 links
"{36/{12,21,29}}",%subjects that 4 links
}
}
pgfmathsetmacro{mylst}{LstCon[0]}
foreach X in {0,...,totalnodes} {
begin{scope}[ocg={name={ArrowX},ref=myArrowX,status=visible}]
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
definecolor{mycolor}{hsb}{huenum,1,1}
pgfmathsetmacro{mylst}{LstCon[X]}
%typeout{X:mylst}
foreach Y/myalong in mylst {
ifxmyalongY
%typeout{X:Y,empty}
draw[-latex,mycolor,very thick] (X-Title.east)
to[manoooh curve] (Y-Title.west);
else
%typeout{X:Yspace andspace myalong}
draw[-latex,mycolor,very thick] (X-Title.east)
[along node/.list/.expanded=myalong]
to[manoooh curve] (Y-Title.west);
fi
}
end{scope}
}
end{tikzpicture}
end{Form}
flushleft
qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
% list of OCGs, space separated
defocglist{}%
foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
fbox{%
parbox{5cm}{%
% on/off All
showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
% checkboxes
foreach X in {0,...,totalnodes} {%
begin{multicols}{4}
layerCheckBox{}{myArrowX}{on}begin{tikzpicture}%
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
end{tikzpicture}\%
end{multicols}
}%
}
}
}
end{document}
I would like to:
- Center every arrow to the corresponding checkbox.
- Put to work
multicols
(it says "4" but it is actually 1 column). - Get rid of the "Bad Box(es)" messages by making a good use of
fbox
(or similar command). - Not say
parbox{5cm}{...}
butparbox{<automatic>}{...}
, whereparbox
calculates the proper vertical space of the box, based on the quantity of columns.
I want this:
P.S. There can actually be 4 or 5 or any number of columns.
tikz-pgf vertical-alignment arrows multicolumn
Could you perhaps consider cooking the MWE down to just the check box part since otherwise there will be a huge threshold for users to play with the MWE?
– marmot
1 min ago
add a comment |
I am using the following resources:
The MWE of Creating a lot of checkbox'es to make visible/invisible arrows using
tikzpicture
environment.The
multicols
environment of Draw a set of arrows using a palette of colors.The box of How to put a long piece of text in a box?
MWE:
documentclass{article}
usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=32cm]{geometry}
usepackage[english]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{hyperref}
usepackage{multicol}
usepackage[tikz]{ocgx2}
usepackage{amssymb} % checkmark
% check box command for layer switching
newcommandlayerCheckBox[3]{%
% #1: switch id, if empty use #2 instead
% #2: layer ids to be toggled (space separated if multiple ids),
% #3: initial visibility
resizebox{2ex}{!}{ooalign{%
switchocg{#1 #2}{$square$}cr%
begin{ocg}{%
ifxnil#1nil#2else#1fi%
}{%
ifxnil#1nil#2else#1fi%
}{#3}$checkmark$end{ocg}%
}}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
usepackage{tikz}
usetikzlibrary{positioning,fit,calc}
pgfdeclarelayer{behind}
pgfdeclarelayer{background}
pgfdeclarelayer{foreground}
pgfsetlayers{behind,background,main,foreground}
tikzset{
text field/.style={text height=1.5ex,align=center,rounded corners},
nonfillable title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=5cm,align=center,font=footnotesizesffamily},
fillable title field/.style={text height=3.14ex,text depth=0em,anchor=south,text
width=5cm,align=center,font=footnotesizesffamily},
pics/fillable subject/.style={code={%
node[text field] (-TF)
{hspace*{-0.5em}TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0.15em}TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0em}TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable subject/.style={code={%
node[text field] (-TF)
{hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/fillable elective subject/.style={code={%
node[text field] (-TF)
{hspace*{-0.5em}TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0.15em}TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0em}TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
node[fillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {hspace*{-0.34em}TextField[align=1,name=#1-electivesubject,width=4.5cm,charsize=8pt,height=.5cm,bordercolor={1 1 1}]{}};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable elective subject/.style={code={%
node[text field] (-TF)
{hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
manoooh/.style={column sep=-1.75cm,row sep=5mm},
manooohE/.style={column sep=-2.25cm,row sep=5mm,anchor=south},
electives/.style={column sep=-7.25cm,row sep=5mm},
fit sep/.initial=4pt, % change width of node (big rectangle shape)
fit dist/.initial=40pt, % change node distance (big rectangle shape)
inlay top sep/.initial=24pt,
matrix top sep/.initial=24pt,
manoooh curve/.style={to path={let p1=($(tikztotarget)-(tikztostart)$)
in (tikztostart) .. controls ($(tikztostart)+(#1*x1,0)$)
and ($(tikztotarget)+(-#1*x1,0)$) .. (tikztotarget)}},
manoooh curve/.default=0.3,
along node/.style={insert path={
to[out=0,in=180]
([yshift=5pt]#1-Title.north west) -- ([yshift=5pt]#1-Title.north east)}}
} % From https://tex.stackexchange.com/a/478723/152550
makeatletter% from https://tex.stackexchange.com/a/85531/121799
longdefifnodedefined#1#2#3{%
@ifundefined{pgf@sh@ns@#1}{#3}{#2}%
}
makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%
newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
%%%%%%%%%%%%%%%%%%%%%%%%%
begin{document}
thispagestyle{empty} % To suppress page number
noindent
begin{tikzpicture}
fill[white,fill=orange] (0,0) rectangle (paperwidth,-2cm) node[midway,align=center,font=Huge] {bfseries Some text here\LARGE More text here};
end{tikzpicture}
ifdefinedmymatbottom
else
typeout{Pleasespace recompilespace yourspace file!}
defmymatbottom{-150pt}
fi
ifdefinedmyheight
else
defmyheight{0}
typeout{Pleasespace recompilespace yourspace file!}
fi
ifdefinedLstMatYShifts
else
defLstMatYShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
fi
ifdefinedLstMatXShifts
else
defLstMatXShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
fi
%typeout{height:myheight}
%typeout{xshifts(in):LstMatXShifts}
vfill
centering
begin{Form}
begin{tikzpicture}
% step 1: add the matrices, name them mat0, mat1 etc.
begin{scope}[local bounding box=matrices]
matrix[manoooh] (mat0) at ({LstMatXShifts[0]},{LstMatYShifts[0]}) {
pic[local bounding box=A] (0) {nonfillable subject={Subject A}}; \
pic (1) {nonfillable subject={Subject B}}; \
};
matrix[manoooh] (mat1) at ({LstMatXShifts[1]},{LstMatYShifts[1]}) {
pic (2) {nonfillable subject={Subject C}}; \
pic (3) {nonfillable subject={Subject D}}; \
pic (4) {nonfillable subject={Subject E}}; \
pic (5) {nonfillable subject={Subject F}}; \
pic (6) {nonfillable subject={Subject G}}; \
pic (7) {nonfillable subject={Subject H}}; \
pic (8) {nonfillable subject={Subject I}}; \
pic[draw=red] (9) {nonfillable subject={Subject J}}; \
};
matrix[manoooh] (mat2) at ({LstMatXShifts[2]},{LstMatYShifts[2]}) {
pic[draw=red] (10) {nonfillable subject={Subject K}}; \
pic (11) {nonfillable subject={Subject L}}; \
pic (12) {nonfillable subject={Subject A}}; \
pic (13) {nonfillable subject={Subject N}}; \
pic (14) {nonfillable subject={Subject O}}; \
pic (15) {nonfillable subject={Subject P}}; \
pic (16) {nonfillable subject={Subject Q}}; \
pic (17) {nonfillable subject={Subject R}}; \
};
matrix[manoooh] (mat3) at ({LstMatXShifts[3]},{LstMatYShifts[3]}) {
pic[draw=red] (18) {nonfillable subject={Subject S}}; \
pic (19) {nonfillable subject={Subject T}}; \
pic (20) {nonfillable subject={Subject U}}; \
pic (21) {nonfillable subject={Subject V}}; \
pic (22) {nonfillable subject={Subject W}}; \
pic (23) {nonfillable subject={Subject X}}; \
pic (24) {nonfillable subject={Subject Y}}; \
pic (25) {nonfillable subject={Subject Z}}; \
};
matrix[manooohE] (matE3) at ({LstMatXShifts[3]},mymatbottom) {
pic (L3E1) {nonfillable elective subject={Subject}}; & &
pic (L3E2) {nonfillable elective subject={Subject}}; \
& pic (L3E3) {nonfillable elective subject={Subject}}; & \
};
matrix[manoooh] (mat4) at ({LstMatXShifts[4]},{LstMatYShifts[4]}) {
& pic[draw=red] (26) {nonfillable subject={Subject AA}}; & \
pic (27) {nonfillable subject={Subject AB}}; & & pic (28) {nonfillable subject={Subject AC}}; \
& pic (29) {nonfillable subject={Subject AD}}; & \
& pic (30) {nonfillable subject={Subject AE}}; & \
& pic (31) {nonfillable subject={Subject AF}}; & \
& pic (32) {nonfillable subject={Subject AG}}; & \
};
matrix[manooohE] (matE4) at ({LstMatXShifts[4]},mymatbottom) {
pic (L4E1) {nonfillable elective subject={Subject}}; \
};
matrix[manoooh] (mat5) at ({LstMatXShifts[5]},{LstMatYShifts[5]}) {
pic (33) {nonfillable subject={Subject AH}}; \
pic (34) {nonfillable subject={Subject AI}}; \
pic[draw=red] (35) {nonfillable subject={Subject AJ}}; \
pic (36) {nonfillable subject={Subject AK}}; \
};
matrix[manooohE] (matE5) at ({LstMatXShifts[5]},mymatbottom) {
pic (L5E1) {nonfillable elective subject={Subject}}; \
pic (L5E2) {nonfillable elective subject={Subject}}; \
pic (L5E3) {nonfillable elective subject={Subject}}; \
pic (L5E4) {nonfillable elective subject={Subject}}; \
pic (L5E5) {nonfillable elective subject={Subject}}; \
};
end{scope}
pgfmathsetmacro{groupwidth}{0}
pgfmathsetmacro{lastwidth}{0}
foreach X in {0,...,5} %<- if you have more or less matrices, adjust 3
{
node[anchor=south,yshift=1cm,align=center,font=LARGEbfseriesboldmath]
at (matX |-matrices.north) (LX) {Level $X$};
ifnodedefined{matEX}{% has inlay
node[xshift=1em,anchor=south west,font=LARGEbfseries,opacity=0] (matElX) at (matEX.north west) {Electives};
begin{pgfonlayer}{background}
path let p1=($(matX.north east)-(matX.south west)$) in
node[fit=(matEX) (matElX),inner ysep=5mm,fill=blue!30,rounded
corners=40pt,minimum width=x1-2*pgfkeysvalueof{/tikz/fit sep},
inner xsep=pgfkeysvalueof{/tikz/fit sep}](FX){};
node[xshift=1em,anchor=south west,font=LARGEbfseries]
(matElX) at ([xshift=1.3em]FX.west|-matElX.center) {Electives};
end{pgfonlayer}
path let p1=($(matX.north east)-(matX.south west)$),
p2=($(FX.north east)-(FX.south west)$),
n1={max(abs(y1)/2+abs(y2)/2+0*pgfkeysvalueof{/tikz/inlay top sep},mymatbottom)}
in
pgfextra{xdefmymatbottom{n1}
ifnumX=0
pgfmathsetmacro{groupwidth}{0}
else
pgfmathsetmacro{groupwidth}{groupwidth+max(x1,x2)/2+lastwidth/2+2*pgfkeysvalueof{/tikz/fit sep}+pgfkeysvalueof{/tikz/fit dist}}
fi
pgfmathsetmacro{lastwidth}{max(x1,x2)+8*pgfkeysvalueof{/tikz/fit sep}}
xdeflastwidth{lastwidth}
xdefgroupwidth{groupwidth}
pgfmathsetmacro{myheight}{max(y1+y2+%
pgfkeysvalueof{/tikz/inlay top sep}+pgfkeysvalueof{/tikz/matrix top sep},%
myheight)}
xdefmyheight{myheight}
pgfmathsetmacro{myshift}{(pgfkeysvalueof{/tikz/inlay top sep}+y2)/2}
ifnumX=0
xdefLstMatYShifts{myshift pt}
xdefLstMatXShifts{0pt}
else
xdefLstMatYShifts{LstMatYShifts,myshift pt}
xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
fi};
% the fit parameters determine the shape of the background rectangles
begin{pgfonlayer}{behind}
node[fit=(LX) (matX) (matrices.south-|matX.south)
(matEX) (matElX),inner ysep=8mm,inner xsep=4*pgfkeysvalueof{/tikz/fit sep},
fill=orange!30,rounded corners=50pt](FX){};
end{pgfonlayer}}{% no inlay
path
let p1=($(matX.north east)-(matX.south west)$),
n1={max(abs(y1)/2,mymatbottom)}
in
pgfextra{xdefmymatbottom{n1}
ifnumX=0
pgfmathsetmacro{groupwidth}{0}
else
pgfmathsetmacro{groupwidth}{groupwidth+x1/2+lastwidth/2+pgfkeysvalueof{/tikz/fit dist}}
fi
xdefgroupwidth{groupwidth}
xdeflastwidth{x1}
pgfmathsetmacro{myheight}{max(y1+pgfkeysvalueof{/tikz/matrix top sep},myheight)}
xdefmyheight{myheight}
ifnumX=0
xdefLstMatYShifts{0pt}
xdefLstMatXShifts{0pt}
else
xdefLstMatYShifts{LstMatYShifts,0pt}
xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
fi};
% the fit parameters determine the shape of the background rectangles
begin{pgfonlayer}{behind}
node[fit=(LX) (matX) (matrices.south-|matX.south),inner ysep=8mm,
fill=orange!30,rounded corners=50pt](FX){};
end{pgfonlayer}
}
}
makeatletter
immediatewrite@mainaux{xdefstringmymatbottom{-mymatbottom}relax}
immediatewrite@mainaux{xdefstringmyheight{myheight}relax}
immediatewrite@mainaux{xdefstringLstMatYShifts{{LstMatYShifts}}relax}
immediatewrite@mainaux{xdefstringLstMatXShifts{{LstMatXShifts}}relax}
makeatother
% From https://tex.stackexchange.com/a/480685/152550
% now add the arrows.
gdefLstCon{%
{
"{2,...,9}",%subjects that 0 links
"{2,10/5,13/5,14/5}",%subjects that 1 links
"{11,14}",%subjects that 2 links
"{10,13,14,25/13}",%subjects that 3 links
"{36/{12,21,29}}",%subjects that 4 links
}
}
pgfmathsetmacro{mylst}{LstCon[0]}
foreach X in {0,...,totalnodes} {
begin{scope}[ocg={name={ArrowX},ref=myArrowX,status=visible}]
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
definecolor{mycolor}{hsb}{huenum,1,1}
pgfmathsetmacro{mylst}{LstCon[X]}
%typeout{X:mylst}
foreach Y/myalong in mylst {
ifxmyalongY
%typeout{X:Y,empty}
draw[-latex,mycolor,very thick] (X-Title.east)
to[manoooh curve] (Y-Title.west);
else
%typeout{X:Yspace andspace myalong}
draw[-latex,mycolor,very thick] (X-Title.east)
[along node/.list/.expanded=myalong]
to[manoooh curve] (Y-Title.west);
fi
}
end{scope}
}
end{tikzpicture}
end{Form}
flushleft
qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
% list of OCGs, space separated
defocglist{}%
foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
fbox{%
parbox{5cm}{%
% on/off All
showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
% checkboxes
foreach X in {0,...,totalnodes} {%
begin{multicols}{4}
layerCheckBox{}{myArrowX}{on}begin{tikzpicture}%
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
end{tikzpicture}\%
end{multicols}
}%
}
}
}
end{document}
I would like to:
- Center every arrow to the corresponding checkbox.
- Put to work
multicols
(it says "4" but it is actually 1 column). - Get rid of the "Bad Box(es)" messages by making a good use of
fbox
(or similar command). - Not say
parbox{5cm}{...}
butparbox{<automatic>}{...}
, whereparbox
calculates the proper vertical space of the box, based on the quantity of columns.
I want this:
P.S. There can actually be 4 or 5 or any number of columns.
tikz-pgf vertical-alignment arrows multicolumn
I am using the following resources:
The MWE of Creating a lot of checkbox'es to make visible/invisible arrows using
tikzpicture
environment.The
multicols
environment of Draw a set of arrows using a palette of colors.The box of How to put a long piece of text in a box?
MWE:
documentclass{article}
usepackage[margin=0in,footskip=0in,paperwidth=60cm,paperheight=32cm]{geometry}
usepackage[english]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{hyperref}
usepackage{multicol}
usepackage[tikz]{ocgx2}
usepackage{amssymb} % checkmark
% check box command for layer switching
newcommandlayerCheckBox[3]{%
% #1: switch id, if empty use #2 instead
% #2: layer ids to be toggled (space separated if multiple ids),
% #3: initial visibility
resizebox{2ex}{!}{ooalign{%
switchocg{#1 #2}{$square$}cr%
begin{ocg}{%
ifxnil#1nil#2else#1fi%
}{%
ifxnil#1nil#2else#1fi%
}{#3}$checkmark$end{ocg}%
}}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
usepackage{tikz}
usetikzlibrary{positioning,fit,calc}
pgfdeclarelayer{behind}
pgfdeclarelayer{background}
pgfdeclarelayer{foreground}
pgfsetlayers{behind,background,main,foreground}
tikzset{
text field/.style={text height=1.5ex,align=center,rounded corners},
nonfillable title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=5cm,align=center,font=footnotesizesffamily},
fillable title field/.style={text height=3.14ex,text depth=0em,anchor=south,text
width=5cm,align=center,font=footnotesizesffamily},
pics/fillable subject/.style={code={%
node[text field] (-TF)
{hspace*{-0.5em}TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0.15em}TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0em}TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable subject/.style={code={%
node[text field] (-TF)
{hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/fillable elective subject/.style={code={%
node[text field] (-TF)
{hspace*{-0.5em}TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0.15em}TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/hspace*{-0em}TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
node[fillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {hspace*{-0.34em}TextField[align=1,name=#1-electivesubject,width=4.5cm,charsize=8pt,height=.5cm,bordercolor={1 1 1}]{}};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable elective subject/.style={code={%
node[text field] (-TF)
{hspace{1.2em}~/~hspace{1.15em}~/~hspace{2.35em}{}};
node[nonfillable title field] (-Title)
at ([yshift=0.4em]-TF.north) {};
draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
manoooh/.style={column sep=-1.75cm,row sep=5mm},
manooohE/.style={column sep=-2.25cm,row sep=5mm,anchor=south},
electives/.style={column sep=-7.25cm,row sep=5mm},
fit sep/.initial=4pt, % change width of node (big rectangle shape)
fit dist/.initial=40pt, % change node distance (big rectangle shape)
inlay top sep/.initial=24pt,
matrix top sep/.initial=24pt,
manoooh curve/.style={to path={let p1=($(tikztotarget)-(tikztostart)$)
in (tikztostart) .. controls ($(tikztostart)+(#1*x1,0)$)
and ($(tikztotarget)+(-#1*x1,0)$) .. (tikztotarget)}},
manoooh curve/.default=0.3,
along node/.style={insert path={
to[out=0,in=180]
([yshift=5pt]#1-Title.north west) -- ([yshift=5pt]#1-Title.north east)}}
} % From https://tex.stackexchange.com/a/478723/152550
makeatletter% from https://tex.stackexchange.com/a/85531/121799
longdefifnodedefined#1#2#3{%
@ifundefined{pgf@sh@ns@#1}{#3}{#2}%
}
makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%
newcommandtotalnodes{4} % Define the total of subjects that need arrows-1
%%%%%%%%%%%%%%%%%%%%%%%%%
begin{document}
thispagestyle{empty} % To suppress page number
noindent
begin{tikzpicture}
fill[white,fill=orange] (0,0) rectangle (paperwidth,-2cm) node[midway,align=center,font=Huge] {bfseries Some text here\LARGE More text here};
end{tikzpicture}
ifdefinedmymatbottom
else
typeout{Pleasespace recompilespace yourspace file!}
defmymatbottom{-150pt}
fi
ifdefinedmyheight
else
defmyheight{0}
typeout{Pleasespace recompilespace yourspace file!}
fi
ifdefinedLstMatYShifts
else
defLstMatYShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
fi
ifdefinedLstMatXShifts
else
defLstMatXShifts{{0pt,0pt,0pt,0pt,0pt,0pt,0pt}}
fi
%typeout{height:myheight}
%typeout{xshifts(in):LstMatXShifts}
vfill
centering
begin{Form}
begin{tikzpicture}
% step 1: add the matrices, name them mat0, mat1 etc.
begin{scope}[local bounding box=matrices]
matrix[manoooh] (mat0) at ({LstMatXShifts[0]},{LstMatYShifts[0]}) {
pic[local bounding box=A] (0) {nonfillable subject={Subject A}}; \
pic (1) {nonfillable subject={Subject B}}; \
};
matrix[manoooh] (mat1) at ({LstMatXShifts[1]},{LstMatYShifts[1]}) {
pic (2) {nonfillable subject={Subject C}}; \
pic (3) {nonfillable subject={Subject D}}; \
pic (4) {nonfillable subject={Subject E}}; \
pic (5) {nonfillable subject={Subject F}}; \
pic (6) {nonfillable subject={Subject G}}; \
pic (7) {nonfillable subject={Subject H}}; \
pic (8) {nonfillable subject={Subject I}}; \
pic[draw=red] (9) {nonfillable subject={Subject J}}; \
};
matrix[manoooh] (mat2) at ({LstMatXShifts[2]},{LstMatYShifts[2]}) {
pic[draw=red] (10) {nonfillable subject={Subject K}}; \
pic (11) {nonfillable subject={Subject L}}; \
pic (12) {nonfillable subject={Subject A}}; \
pic (13) {nonfillable subject={Subject N}}; \
pic (14) {nonfillable subject={Subject O}}; \
pic (15) {nonfillable subject={Subject P}}; \
pic (16) {nonfillable subject={Subject Q}}; \
pic (17) {nonfillable subject={Subject R}}; \
};
matrix[manoooh] (mat3) at ({LstMatXShifts[3]},{LstMatYShifts[3]}) {
pic[draw=red] (18) {nonfillable subject={Subject S}}; \
pic (19) {nonfillable subject={Subject T}}; \
pic (20) {nonfillable subject={Subject U}}; \
pic (21) {nonfillable subject={Subject V}}; \
pic (22) {nonfillable subject={Subject W}}; \
pic (23) {nonfillable subject={Subject X}}; \
pic (24) {nonfillable subject={Subject Y}}; \
pic (25) {nonfillable subject={Subject Z}}; \
};
matrix[manooohE] (matE3) at ({LstMatXShifts[3]},mymatbottom) {
pic (L3E1) {nonfillable elective subject={Subject}}; & &
pic (L3E2) {nonfillable elective subject={Subject}}; \
& pic (L3E3) {nonfillable elective subject={Subject}}; & \
};
matrix[manoooh] (mat4) at ({LstMatXShifts[4]},{LstMatYShifts[4]}) {
& pic[draw=red] (26) {nonfillable subject={Subject AA}}; & \
pic (27) {nonfillable subject={Subject AB}}; & & pic (28) {nonfillable subject={Subject AC}}; \
& pic (29) {nonfillable subject={Subject AD}}; & \
& pic (30) {nonfillable subject={Subject AE}}; & \
& pic (31) {nonfillable subject={Subject AF}}; & \
& pic (32) {nonfillable subject={Subject AG}}; & \
};
matrix[manooohE] (matE4) at ({LstMatXShifts[4]},mymatbottom) {
pic (L4E1) {nonfillable elective subject={Subject}}; \
};
matrix[manoooh] (mat5) at ({LstMatXShifts[5]},{LstMatYShifts[5]}) {
pic (33) {nonfillable subject={Subject AH}}; \
pic (34) {nonfillable subject={Subject AI}}; \
pic[draw=red] (35) {nonfillable subject={Subject AJ}}; \
pic (36) {nonfillable subject={Subject AK}}; \
};
matrix[manooohE] (matE5) at ({LstMatXShifts[5]},mymatbottom) {
pic (L5E1) {nonfillable elective subject={Subject}}; \
pic (L5E2) {nonfillable elective subject={Subject}}; \
pic (L5E3) {nonfillable elective subject={Subject}}; \
pic (L5E4) {nonfillable elective subject={Subject}}; \
pic (L5E5) {nonfillable elective subject={Subject}}; \
};
end{scope}
pgfmathsetmacro{groupwidth}{0}
pgfmathsetmacro{lastwidth}{0}
foreach X in {0,...,5} %<- if you have more or less matrices, adjust 3
{
node[anchor=south,yshift=1cm,align=center,font=LARGEbfseriesboldmath]
at (matX |-matrices.north) (LX) {Level $X$};
ifnodedefined{matEX}{% has inlay
node[xshift=1em,anchor=south west,font=LARGEbfseries,opacity=0] (matElX) at (matEX.north west) {Electives};
begin{pgfonlayer}{background}
path let p1=($(matX.north east)-(matX.south west)$) in
node[fit=(matEX) (matElX),inner ysep=5mm,fill=blue!30,rounded
corners=40pt,minimum width=x1-2*pgfkeysvalueof{/tikz/fit sep},
inner xsep=pgfkeysvalueof{/tikz/fit sep}](FX){};
node[xshift=1em,anchor=south west,font=LARGEbfseries]
(matElX) at ([xshift=1.3em]FX.west|-matElX.center) {Electives};
end{pgfonlayer}
path let p1=($(matX.north east)-(matX.south west)$),
p2=($(FX.north east)-(FX.south west)$),
n1={max(abs(y1)/2+abs(y2)/2+0*pgfkeysvalueof{/tikz/inlay top sep},mymatbottom)}
in
pgfextra{xdefmymatbottom{n1}
ifnumX=0
pgfmathsetmacro{groupwidth}{0}
else
pgfmathsetmacro{groupwidth}{groupwidth+max(x1,x2)/2+lastwidth/2+2*pgfkeysvalueof{/tikz/fit sep}+pgfkeysvalueof{/tikz/fit dist}}
fi
pgfmathsetmacro{lastwidth}{max(x1,x2)+8*pgfkeysvalueof{/tikz/fit sep}}
xdeflastwidth{lastwidth}
xdefgroupwidth{groupwidth}
pgfmathsetmacro{myheight}{max(y1+y2+%
pgfkeysvalueof{/tikz/inlay top sep}+pgfkeysvalueof{/tikz/matrix top sep},%
myheight)}
xdefmyheight{myheight}
pgfmathsetmacro{myshift}{(pgfkeysvalueof{/tikz/inlay top sep}+y2)/2}
ifnumX=0
xdefLstMatYShifts{myshift pt}
xdefLstMatXShifts{0pt}
else
xdefLstMatYShifts{LstMatYShifts,myshift pt}
xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
fi};
% the fit parameters determine the shape of the background rectangles
begin{pgfonlayer}{behind}
node[fit=(LX) (matX) (matrices.south-|matX.south)
(matEX) (matElX),inner ysep=8mm,inner xsep=4*pgfkeysvalueof{/tikz/fit sep},
fill=orange!30,rounded corners=50pt](FX){};
end{pgfonlayer}}{% no inlay
path
let p1=($(matX.north east)-(matX.south west)$),
n1={max(abs(y1)/2,mymatbottom)}
in
pgfextra{xdefmymatbottom{n1}
ifnumX=0
pgfmathsetmacro{groupwidth}{0}
else
pgfmathsetmacro{groupwidth}{groupwidth+x1/2+lastwidth/2+pgfkeysvalueof{/tikz/fit dist}}
fi
xdefgroupwidth{groupwidth}
xdeflastwidth{x1}
pgfmathsetmacro{myheight}{max(y1+pgfkeysvalueof{/tikz/matrix top sep},myheight)}
xdefmyheight{myheight}
ifnumX=0
xdefLstMatYShifts{0pt}
xdefLstMatXShifts{0pt}
else
xdefLstMatYShifts{LstMatYShifts,0pt}
xdefLstMatXShifts{LstMatXShifts,groupwidth pt}
fi};
% the fit parameters determine the shape of the background rectangles
begin{pgfonlayer}{behind}
node[fit=(LX) (matX) (matrices.south-|matX.south),inner ysep=8mm,
fill=orange!30,rounded corners=50pt](FX){};
end{pgfonlayer}
}
}
makeatletter
immediatewrite@mainaux{xdefstringmymatbottom{-mymatbottom}relax}
immediatewrite@mainaux{xdefstringmyheight{myheight}relax}
immediatewrite@mainaux{xdefstringLstMatYShifts{{LstMatYShifts}}relax}
immediatewrite@mainaux{xdefstringLstMatXShifts{{LstMatXShifts}}relax}
makeatother
% From https://tex.stackexchange.com/a/480685/152550
% now add the arrows.
gdefLstCon{%
{
"{2,...,9}",%subjects that 0 links
"{2,10/5,13/5,14/5}",%subjects that 1 links
"{11,14}",%subjects that 2 links
"{10,13,14,25/13}",%subjects that 3 links
"{36/{12,21,29}}",%subjects that 4 links
}
}
pgfmathsetmacro{mylst}{LstCon[0]}
foreach X in {0,...,totalnodes} {
begin{scope}[ocg={name={ArrowX},ref=myArrowX,status=visible}]
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}
definecolor{mycolor}{hsb}{huenum,1,1}
pgfmathsetmacro{mylst}{LstCon[X]}
%typeout{X:mylst}
foreach Y/myalong in mylst {
ifxmyalongY
%typeout{X:Y,empty}
draw[-latex,mycolor,very thick] (X-Title.east)
to[manoooh curve] (Y-Title.west);
else
%typeout{X:Yspace andspace myalong}
draw[-latex,mycolor,very thick] (X-Title.east)
[along node/.list/.expanded=myalong]
to[manoooh curve] (Y-Title.west);
fi
}
end{scope}
}
end{tikzpicture}
end{Form}
flushleft
qquadparbox{0.4linewidth}{hypersetup{pdfborder={0 0 0}}%
% list of OCGs, space separated
defocglist{}%
foreach X in {0,...,totalnodes} {xdefocglist{ocglistspace myArrowX}}
fbox{%
parbox{5cm}{%
% on/off All
showocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}on}}/%
hideocg{ocglist}{fboxsep=1ptfbox{rule{0pt}{1.7ex}off}} All\%
% checkboxes
foreach X in {0,...,totalnodes} {%
begin{multicols}{4}
layerCheckBox{}{myArrowX}{on}begin{tikzpicture}%
pgfmathsetmacro{huenum}{X*0.75*(1/totalnodes)}definecolor{mycolor}{hsb}{huenum,1,1}draw[-latex,mycolor,very thick] (0,0) -- (1,0);%
end{tikzpicture}\%
end{multicols}
}%
}
}
}
end{document}
I would like to:
- Center every arrow to the corresponding checkbox.
- Put to work
multicols
(it says "4" but it is actually 1 column). - Get rid of the "Bad Box(es)" messages by making a good use of
fbox
(or similar command). - Not say
parbox{5cm}{...}
butparbox{<automatic>}{...}
, whereparbox
calculates the proper vertical space of the box, based on the quantity of columns.
I want this:
P.S. There can actually be 4 or 5 or any number of columns.
tikz-pgf vertical-alignment arrows multicolumn
tikz-pgf vertical-alignment arrows multicolumn
asked 9 mins ago
manoooohmanooooh
1,1561517
1,1561517
Could you perhaps consider cooking the MWE down to just the check box part since otherwise there will be a huge threshold for users to play with the MWE?
– marmot
1 min ago
add a comment |
Could you perhaps consider cooking the MWE down to just the check box part since otherwise there will be a huge threshold for users to play with the MWE?
– marmot
1 min ago
Could you perhaps consider cooking the MWE down to just the check box part since otherwise there will be a huge threshold for users to play with the MWE?
– marmot
1 min ago
Could you perhaps consider cooking the MWE down to just the check box part since otherwise there will be a huge threshold for users to play with the MWE?
– marmot
1 min ago
add a comment |
0
active
oldest
votes
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f482352%2fhow-to-put-a-box-and-use-columns-to-separate-arrows%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f482352%2fhow-to-put-a-box-and-use-columns-to-separate-arrows%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
Could you perhaps consider cooking the MWE down to just the check box part since otherwise there will be a huge threshold for users to play with the MWE?
– marmot
1 min ago