TransWikia.com

How do I duplicate a dotted path over another?

TeX - LaTeX Asked on October 18, 2020

I need to edit this code so the red dashed line can end up at R4 not R3 as in the following pictureenter image description here .

 documentclass[tikz,border=3.14mm]{standalone}
 usetikzlibrary{positioning,calc,arrows.meta}
begin{document}
begin{tikzpicture}[bullet/.style={draw,circle,minimum width=3mm,inner 
sep=0pt,
fill=cyan!50}]
node[bullet,label={[yshift=-2mm]below:$R_1$}] (R1){};
node[right=2cm of R1,bullet,label={[yshift=-2mm]below:$R_2$}] (R2){};
node[right=2cm of R2,yshift=6mm,bullet,label={[yshift=2mm]above:$R_3$}] (R3) 
 {};
node[right=2cm of R3,yshift=-6mm,bullet,label={[yshift=-2mm]below:$R_4$}] 
  (R4){};
  node[right=2cm of R4,bullet,label={[yshift=-2mm]below:$R_5$}] (R5){};
foreach X [evaluate=X as Y using {int(X+1)}] in {1,...,4}
{draw[thick,-latex,cyan!50] (RX) -- (RY);}


 draw[thick,red,{Circle}-latex,dashed] let p1=($(R2)-(R1)$), p2=($(R3)- 
(R2)$), 
n1={atan2(y1,x1)},n2={atan2(y2,x2)} in 
([yshift=1mm]R1.north) to[out=n1,in=180,looseness=0.5] 
([yshift=1mm]R2.north) to[out=0,in=n2-180,looseness=0.5] 
  ([yshift=1mm,xshift=-2mm]R3.north);

  end{tikzpicture}
      end{document}

3 Answers

You need to add some code for the red line:

draw[thick,red,{Circle}-latex,dashed] let p1=($(R2)-(R1)$), p2=($(R3)-(R2)$), p3=($(R4)-(R3)$),
n1={atan2(y1,x1)},n2={atan2(y2,x2)},n3={atan2(y3,x3)} in 
([yshift=1mm]R1.north) to[out=n1,in=180,looseness=0.5] 
([yshift=1mm]R2.north) to[out=0,in=n2-180,looseness=0.5] 
([yshift=1mm]R3.north) to[out=0,in=n3-180,looseness=0.5] 
([yshift=1mm,xshift=-2mm]R4.north);

With the complete MWE

documentclass[tikz,border=3.14mm]{standalone}

usetikzlibrary{positioning,calc,arrows.meta}


begin{document}
begin{tikzpicture}[bullet/.style={draw,circle,minimum width=3mm,inner sep=0pt,fill=cyan!50}]
node[bullet,label={[yshift=-2mm]below:$R_1$}] (R1){};
node[right=2cm of R1,bullet,label={[yshift=-2mm]below:$R_2$}] (R2){};
node[right=2cm of R2,yshift=6mm,bullet,label={[yshift=2mm]above:$R_3$}] (R3) 
 {};
node[right=2cm of R3,yshift=-6mm,bullet,label={[yshift=-2mm]below:$R_4$}] 
  (R4){};
  node[right=2cm of R4,bullet,label={[yshift=-2mm]below:$R_5$}] (R5){};
foreach X [evaluate=X as Y using {int(X+1)}] in {1,...,4}
{draw[thick,-latex,cyan!50] (RX) -- (RY);}


%draw[thick,red,{Circle}-latex,dashed] let p1=($(R2)-(R1)$), p2=($(R3)-(R2)$), 
draw[thick,red,{Circle}-latex,dashed] let p1=($(R2)-(R1)$), p2=($(R3)-(R2)$), p3=($(R4)-(R3)$),
n1={atan2(y1,x1)},n2={atan2(y2,x2)},n3={atan2(y3,x3)} in 
([yshift=1mm]R1.north) to[out=n1,in=180,looseness=0.5] 
([yshift=1mm]R2.north) to[out=0,in=n2-180,looseness=0.5] 
([yshift=1mm]R3.north) to[out=0,in=n3-180,looseness=0.5] 
([yshift=1mm,xshift=-2mm]R4.north);

end{tikzpicture}
end{document}

you get:

enter image description here

Correct answer by Mensch on October 18, 2020

Instead of reconstructing the path of the red dotted arrow by clever calculations, you can use the preaction key which allows you to place the path in a temporary scope that you move vertically with transform canvas.

To make it look prettier, I rounded the angles with the rounded key rounded corners=5pt.

path[rounded corners=5pt,preaction={draw,red,thick,{Circle}-latex,
,transform canvas={yshift=3mm}}
] (R1.center)to(R2.center)to(R3.center)to(R4.center);

path

The result without the rounded corners:

path-no

The result with rounded corners and dashed lines:

dashed

documentclass[tikz,border=3.14mm]{standalone}
 usetikzlibrary{positioning,calc,arrows.meta}
begin{document}
begin{tikzpicture}[bullet/.style={draw,circle,minimum width=3mm,inner 
sep=0pt,
fill=cyan!50}]
node[bullet,label={[yshift=-2mm]below:$R_1$}] (R1){};
node[right=2cm of R1,bullet,label={[yshift=-2mm]below:$R_2$}] (R2){};
node[right=2cm of R2,yshift=6mm,bullet,label={[yshift=2mm]above:$R_3$}] (R3) 
 {};
node[right=2cm of R3,yshift=-6mm,bullet,label={[yshift=-2mm]below:$R_4$}] 
  (R4){};
  node[right=2cm of R4,bullet,label={[yshift=-2mm]below:$R_5$}] (R5){};
foreach X [evaluate=X as Y using {int(X+1)}] in {1,...,4}
{draw[thick,-latex,cyan!50] (RX) -- (RY);}

path[rounded corners=5pt,preaction={draw,red,dashed,thick,{Circle}-latex,
,transform canvas={yshift=3mm}}
] (R1.center)to(R2.center)to(R3.center)to(R4.center);
  end{tikzpicture}
      end{document}

Answered by AndréC on October 18, 2020

a variation of nice AndréC answer:

enter image description here

documentclass[tikz,border=3mm]{standalone}
usetikzlibrary{arrows.meta,
                chains, 
                positioning}

begin{document}
    begin{tikzpicture}[
node distance = 6mm and 20mm,
  start chain = going right,
   arr/.style = {thick, -Stealth, color=#1},
   dot/.style = {circle, draw, fill=cyan!50,
                 minimum size=3mm, inner sep=0pt,
                 on chain, join=by {arr=cyan!50},
                 node contents={}},
every label/.style = {label distance=2mm, inner sep=0pt}
                        ]
node (R1) [dot,label=below:$R_1$];
node (R2) [dot, right=of R1,label=below:$R_2$];
node (R3) [dot, above right=of R2,label=above:$R_3$];
node (R4) [dot, below right=of R3,label=below:$R_4$];
node (R5) [dot, right=of R4,label=below:$R_5$];

draw[arr=red, densely dashed, rounded corners=4pt,
      {Circle[length=1.6mm]}-Latex, shorten <=-0.8mm,
      transform canvas={yshift=1.5mm}]
      (R1.north) -- (R2.north) -- (R3.north) -- (R4.north);
    end{tikzpicture}
end{document}

Answered by Zarko on October 18, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP