SHARE
TWEET

Untitled

a guest Mar 19th, 2019 71 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. documentclass[border=5mm]{standalone}
  2.  
  3. usepackage{tikz}
  4.  
  5. usetikzlibrary{matrix}
  6. usetikzlibrary{positioning}
  7.  
  8. newcommand{listbcs}[4]{
  9.     tikzset{
  10.         barycentric setup/.code={foreach X [count=Y] in {#1}
  11.             {ifnumY=1
  12.                     xdefbaryarg{X=1}
  13.                 else
  14.                     xdefbaryarg{baryarg,X=1}
  15.                 fi}},
  16.         barycentric list/.style={barycentric setup={#1},insert path={%
  17.                 (barycentric cs:baryarg)}}
  18.     }
  19.     path[barycentric list={#1}] node[anchor=center,align=flush center,#2] (#3) {#4};
  20. }
  21.  
  22. newcommand{multilinks}[4]{%
  23.     begin{scope}[x=1em,y=1em]
  24.         listbcs{#2}{}{bcright}{}
  25.         newdimenxright
  26.         newdimenybc
  27.         newdimendump
  28.         path(bcright);
  29.         pgfgetlastxy{dump}{ybc}
  30.         path(-1,0);
  31.         newdimenxtemp
  32.         pgfgetlastxy{xtemp}{dump}
  33.         foreach ver in {#2}{
  34.             newdimenxnow
  35.             path(ver.west);
  36.             pgfgetlastxy{xnow}{dump}
  37.             ifdimxnow<xtemp
  38.                 path(ver.west);
  39.                 pgfgetlastxy{xtemp}{dump}
  40.         }
  41.         coordinate (midright) at ({xtemp-#3 em},ybc);
  42.         coordinate (midleft) at ({xtemp-#3 em-#4 em},ybc);
  43.         foreach i in {#1} {
  44.             foreach j in {#2}{
  45.                 newdimenystart
  46.                 path (i.east);
  47.                 pgfgetlastxy{dump}{ystart}
  48.                 newdimenymid
  49.                 path (midleft);
  50.                 path (midright);
  51.                 pgfgetlastxy{dump}{ymid}
  52.                 newdimenyend
  53.                 path (j.west);
  54.                 pgfgetlastxy{dump}{yend}
  55.                 ifdimystart=ymidrelax%
  56.                     ifdimymid=yendrelax%
  57.                         draw[->] (i.east)--(j.west);%
  58.                     else%
  59.                         draw[->,rounded corners] (i.east)--(midright)--(j.west);%
  60.                     fi%
  61.                 else%
  62.                     ifdimymid=yendrelax%
  63.                         draw[->] (i.east)--(midleft)--(j.west);%
  64.                     else%
  65.                         draw[->,rounded corners] (i.east)--(midleft)--(midright)--(j.west);%
  66.                     fi%
  67.                 fi%
  68.             }
  69.         }
  70.     end{scope}
  71. }
  72.  
  73. begin{document}
  74.     tikzset{
  75.         basic/.style={
  76.             draw,
  77.             rounded corners=2pt,
  78.             thick,
  79.             text width=8em,
  80.             align=flush center,
  81.             node distance=2em
  82.         }
  83.     }
  84.     begin{tikzpicture}
  85.         matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
  86.             node(a){text}; & node(c){text}; \
  87.             node(b){text}; & node(d){text}; \
  88.             node(e){text}; & node(f){text}; \
  89.         };
  90.         multilinks{b,e}{d,f}{1}{1}
  91.     end{tikzpicture}
  92. end{document}
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top