Tikz chains with broken arrow joins

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
2
down vote

favorite












I am trying to write a rather long workflow diagram so with will zigzag back and forth. For personal preference of esthetics, I would like to have some of the join arrow broken rather than straight.



I am using chains as I am trying to keep the code a minimal as possible. It will eventually go into a beamer presentation where the node will be displayed one at a time.



I have tried to change the link with join=by |-> but that changes the arrow itself rather than the link.



documentclass[tikz]standalone

usetikzlibrarypositioning, calc, arrows, chains

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, join,
every join/.style = ->,
]
node (A) A;
node (B) B;
node (C) C;
node (D) D;
node[continue chain=going below, join = by |->] (E) E; % would like the join to be U shaped rather than straight down
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;
node[join = by -, inner sep = 0pt] ;
node[continue chain=going right] (K) K; % L shaped link preferably without intermediary node
endtikzpicture

enddocument


enter image description here










share|improve this question























  • What do you call a broken arrow?
    – AndréC
    1 hour ago










  • @AndréC I have updated the post with a modified image to show what I mean.
    – ArTourter
    1 hour ago














up vote
2
down vote

favorite












I am trying to write a rather long workflow diagram so with will zigzag back and forth. For personal preference of esthetics, I would like to have some of the join arrow broken rather than straight.



I am using chains as I am trying to keep the code a minimal as possible. It will eventually go into a beamer presentation where the node will be displayed one at a time.



I have tried to change the link with join=by |-> but that changes the arrow itself rather than the link.



documentclass[tikz]standalone

usetikzlibrarypositioning, calc, arrows, chains

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, join,
every join/.style = ->,
]
node (A) A;
node (B) B;
node (C) C;
node (D) D;
node[continue chain=going below, join = by |->] (E) E; % would like the join to be U shaped rather than straight down
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;
node[join = by -, inner sep = 0pt] ;
node[continue chain=going right] (K) K; % L shaped link preferably without intermediary node
endtikzpicture

enddocument


enter image description here










share|improve this question























  • What do you call a broken arrow?
    – AndréC
    1 hour ago










  • @AndréC I have updated the post with a modified image to show what I mean.
    – ArTourter
    1 hour ago












up vote
2
down vote

favorite









up vote
2
down vote

favorite











I am trying to write a rather long workflow diagram so with will zigzag back and forth. For personal preference of esthetics, I would like to have some of the join arrow broken rather than straight.



I am using chains as I am trying to keep the code a minimal as possible. It will eventually go into a beamer presentation where the node will be displayed one at a time.



I have tried to change the link with join=by |-> but that changes the arrow itself rather than the link.



documentclass[tikz]standalone

usetikzlibrarypositioning, calc, arrows, chains

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, join,
every join/.style = ->,
]
node (A) A;
node (B) B;
node (C) C;
node (D) D;
node[continue chain=going below, join = by |->] (E) E; % would like the join to be U shaped rather than straight down
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;
node[join = by -, inner sep = 0pt] ;
node[continue chain=going right] (K) K; % L shaped link preferably without intermediary node
endtikzpicture

enddocument


enter image description here










share|improve this question















I am trying to write a rather long workflow diagram so with will zigzag back and forth. For personal preference of esthetics, I would like to have some of the join arrow broken rather than straight.



I am using chains as I am trying to keep the code a minimal as possible. It will eventually go into a beamer presentation where the node will be displayed one at a time.



I have tried to change the link with join=by |-> but that changes the arrow itself rather than the link.



documentclass[tikz]standalone

usetikzlibrarypositioning, calc, arrows, chains

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, join,
every join/.style = ->,
]
node (A) A;
node (B) B;
node (C) C;
node (D) D;
node[continue chain=going below, join = by |->] (E) E; % would like the join to be U shaped rather than straight down
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;
node[join = by -, inner sep = 0pt] ;
node[continue chain=going right] (K) K; % L shaped link preferably without intermediary node
endtikzpicture

enddocument


enter image description here







tikz-arrows tikz-chains






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 1 hour ago

























asked 2 hours ago









ArTourter

10.3k43450




10.3k43450











  • What do you call a broken arrow?
    – AndréC
    1 hour ago










  • @AndréC I have updated the post with a modified image to show what I mean.
    – ArTourter
    1 hour ago
















  • What do you call a broken arrow?
    – AndréC
    1 hour ago










  • @AndréC I have updated the post with a modified image to show what I mean.
    – ArTourter
    1 hour ago















What do you call a broken arrow?
– AndréC
1 hour ago




What do you call a broken arrow?
– AndréC
1 hour ago












@AndréC I have updated the post with a modified image to show what I mean.
– ArTourter
1 hour ago




@AndréC I have updated the post with a modified image to show what I mean.
– ArTourter
1 hour ago










2 Answers
2






active

oldest

votes

















up vote
3
down vote



accepted










Perhaps this is of interest. It's possible to modify the path of a join, with the to path option. However, you need to remove join from the every node style, otherwise you'll get two arrows between the nodes. One from the join in every node, one from the additional join=by ....



To make it slightly less tedious to add the join back in, use scope environments, or (as in the code below) the shorthand for a scope made available by the scopes library.



The method for positioning the K is not ideal, I've just added some negative yshift to it.



enter image description here



documentclass[tikz, border=5mm]standalone

usetikzlibrary chains, scopes % added scopes library

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, % removed join
every join/.style = ->,
]
[every node/.append style=join] % shorthand for scope environment requires scopes library
node (A) A;
node (B) B;
node (C) C;
node (D) D;


node[continue chain=going below,
% define a custom to path to use for this join
% when you use "join=by ..." an edge is created and "..." are passed as options to the edge
join = by to path=- (tikztotarget)
] (E) E;

[every node/.append style=join]
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;


node[continue chain=going right,
yshift=-15mm, % move node down manually
join=by to path=- (tikztotarget)] (K) K;

[every node/.append style=join]
node (I) L;
% etc

endtikzpicture

enddocument





share|improve this answer




















  • Exactly what I was after! Thanks
    – ArTourter
    10 mins ago

















up vote
1
down vote













Definitively not the best way



documentclass[tikz]standalone

usetikzlibrarypositioning, calc, arrows, chains

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, join,
every join/.style = ->,
]
node (A) A;
node (B) B;
node (C) C;
node (D) D;
node[continue chain=going below, join = by white] (E) E; % would like the join to be U shaped rather than straight down
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;
% node[join = by -, inner sep = 0pt] ;
node[join= by white, inner sep = 0pt] ;
node[join= by white, continue chain=going right,] (K) K; % L shaped link preferably without intermediary node
draw[->, blue] (J.south) |- (K);
draw[->, blue] (D.east) |- ++(10mm,0) -- ($(E.east) + (10mm,0)$) -> (E.east);
endtikzpicture

enddocument


enter image description here






share|improve this answer






















  • That helps indeed but I was trying to make the chain join do it semi automatically rather than adding additional elements. anyway, the way to remove the original arrows, I guess, is to change the every node definition to not include join and then add join to the nodes you want to automatically link and not to the one we define manually. That will I think be my last resort but I'll wait to see if someone comes up with a better solution.
    – ArTourter
    1 hour ago










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',
convertImagesToLinks: false,
noModals: false,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
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%2f454381%2ftikz-chains-with-broken-arrow-joins%23new-answer', 'question_page');

);

Post as a guest






























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
3
down vote



accepted










Perhaps this is of interest. It's possible to modify the path of a join, with the to path option. However, you need to remove join from the every node style, otherwise you'll get two arrows between the nodes. One from the join in every node, one from the additional join=by ....



To make it slightly less tedious to add the join back in, use scope environments, or (as in the code below) the shorthand for a scope made available by the scopes library.



The method for positioning the K is not ideal, I've just added some negative yshift to it.



enter image description here



documentclass[tikz, border=5mm]standalone

usetikzlibrary chains, scopes % added scopes library

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, % removed join
every join/.style = ->,
]
[every node/.append style=join] % shorthand for scope environment requires scopes library
node (A) A;
node (B) B;
node (C) C;
node (D) D;


node[continue chain=going below,
% define a custom to path to use for this join
% when you use "join=by ..." an edge is created and "..." are passed as options to the edge
join = by to path=- (tikztotarget)
] (E) E;

[every node/.append style=join]
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;


node[continue chain=going right,
yshift=-15mm, % move node down manually
join=by to path=- (tikztotarget)] (K) K;

[every node/.append style=join]
node (I) L;
% etc

endtikzpicture

enddocument





share|improve this answer




















  • Exactly what I was after! Thanks
    – ArTourter
    10 mins ago














up vote
3
down vote



accepted










Perhaps this is of interest. It's possible to modify the path of a join, with the to path option. However, you need to remove join from the every node style, otherwise you'll get two arrows between the nodes. One from the join in every node, one from the additional join=by ....



To make it slightly less tedious to add the join back in, use scope environments, or (as in the code below) the shorthand for a scope made available by the scopes library.



The method for positioning the K is not ideal, I've just added some negative yshift to it.



enter image description here



documentclass[tikz, border=5mm]standalone

usetikzlibrary chains, scopes % added scopes library

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, % removed join
every join/.style = ->,
]
[every node/.append style=join] % shorthand for scope environment requires scopes library
node (A) A;
node (B) B;
node (C) C;
node (D) D;


node[continue chain=going below,
% define a custom to path to use for this join
% when you use "join=by ..." an edge is created and "..." are passed as options to the edge
join = by to path=- (tikztotarget)
] (E) E;

[every node/.append style=join]
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;


node[continue chain=going right,
yshift=-15mm, % move node down manually
join=by to path=- (tikztotarget)] (K) K;

[every node/.append style=join]
node (I) L;
% etc

endtikzpicture

enddocument





share|improve this answer




















  • Exactly what I was after! Thanks
    – ArTourter
    10 mins ago












up vote
3
down vote



accepted







up vote
3
down vote



accepted






Perhaps this is of interest. It's possible to modify the path of a join, with the to path option. However, you need to remove join from the every node style, otherwise you'll get two arrows between the nodes. One from the join in every node, one from the additional join=by ....



To make it slightly less tedious to add the join back in, use scope environments, or (as in the code below) the shorthand for a scope made available by the scopes library.



The method for positioning the K is not ideal, I've just added some negative yshift to it.



enter image description here



documentclass[tikz, border=5mm]standalone

usetikzlibrary chains, scopes % added scopes library

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, % removed join
every join/.style = ->,
]
[every node/.append style=join] % shorthand for scope environment requires scopes library
node (A) A;
node (B) B;
node (C) C;
node (D) D;


node[continue chain=going below,
% define a custom to path to use for this join
% when you use "join=by ..." an edge is created and "..." are passed as options to the edge
join = by to path=- (tikztotarget)
] (E) E;

[every node/.append style=join]
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;


node[continue chain=going right,
yshift=-15mm, % move node down manually
join=by to path=- (tikztotarget)] (K) K;

[every node/.append style=join]
node (I) L;
% etc

endtikzpicture

enddocument





share|improve this answer












Perhaps this is of interest. It's possible to modify the path of a join, with the to path option. However, you need to remove join from the every node style, otherwise you'll get two arrows between the nodes. One from the join in every node, one from the additional join=by ....



To make it slightly less tedious to add the join back in, use scope environments, or (as in the code below) the shorthand for a scope made available by the scopes library.



The method for positioning the K is not ideal, I've just added some negative yshift to it.



enter image description here



documentclass[tikz, border=5mm]standalone

usetikzlibrary chains, scopes % added scopes library

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, % removed join
every join/.style = ->,
]
[every node/.append style=join] % shorthand for scope environment requires scopes library
node (A) A;
node (B) B;
node (C) C;
node (D) D;


node[continue chain=going below,
% define a custom to path to use for this join
% when you use "join=by ..." an edge is created and "..." are passed as options to the edge
join = by to path=- (tikztotarget)
] (E) E;

[every node/.append style=join]
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;


node[continue chain=going right,
yshift=-15mm, % move node down manually
join=by to path=- (tikztotarget)] (K) K;

[every node/.append style=join]
node (I) L;
% etc

endtikzpicture

enddocument






share|improve this answer












share|improve this answer



share|improve this answer










answered 14 mins ago









Torbjørn T.

152k13244426




152k13244426











  • Exactly what I was after! Thanks
    – ArTourter
    10 mins ago
















  • Exactly what I was after! Thanks
    – ArTourter
    10 mins ago















Exactly what I was after! Thanks
– ArTourter
10 mins ago




Exactly what I was after! Thanks
– ArTourter
10 mins ago










up vote
1
down vote













Definitively not the best way



documentclass[tikz]standalone

usetikzlibrarypositioning, calc, arrows, chains

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, join,
every join/.style = ->,
]
node (A) A;
node (B) B;
node (C) C;
node (D) D;
node[continue chain=going below, join = by white] (E) E; % would like the join to be U shaped rather than straight down
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;
% node[join = by -, inner sep = 0pt] ;
node[join= by white, inner sep = 0pt] ;
node[join= by white, continue chain=going right,] (K) K; % L shaped link preferably without intermediary node
draw[->, blue] (J.south) |- (K);
draw[->, blue] (D.east) |- ++(10mm,0) -- ($(E.east) + (10mm,0)$) -> (E.east);
endtikzpicture

enddocument


enter image description here






share|improve this answer






















  • That helps indeed but I was trying to make the chain join do it semi automatically rather than adding additional elements. anyway, the way to remove the original arrows, I guess, is to change the every node definition to not include join and then add join to the nodes you want to automatically link and not to the one we define manually. That will I think be my last resort but I'll wait to see if someone comes up with a better solution.
    – ArTourter
    1 hour ago














up vote
1
down vote













Definitively not the best way



documentclass[tikz]standalone

usetikzlibrarypositioning, calc, arrows, chains

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, join,
every join/.style = ->,
]
node (A) A;
node (B) B;
node (C) C;
node (D) D;
node[continue chain=going below, join = by white] (E) E; % would like the join to be U shaped rather than straight down
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;
% node[join = by -, inner sep = 0pt] ;
node[join= by white, inner sep = 0pt] ;
node[join= by white, continue chain=going right,] (K) K; % L shaped link preferably without intermediary node
draw[->, blue] (J.south) |- (K);
draw[->, blue] (D.east) |- ++(10mm,0) -- ($(E.east) + (10mm,0)$) -> (E.east);
endtikzpicture

enddocument


enter image description here






share|improve this answer






















  • That helps indeed but I was trying to make the chain join do it semi automatically rather than adding additional elements. anyway, the way to remove the original arrows, I guess, is to change the every node definition to not include join and then add join to the nodes you want to automatically link and not to the one we define manually. That will I think be my last resort but I'll wait to see if someone comes up with a better solution.
    – ArTourter
    1 hour ago












up vote
1
down vote










up vote
1
down vote









Definitively not the best way



documentclass[tikz]standalone

usetikzlibrarypositioning, calc, arrows, chains

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, join,
every join/.style = ->,
]
node (A) A;
node (B) B;
node (C) C;
node (D) D;
node[continue chain=going below, join = by white] (E) E; % would like the join to be U shaped rather than straight down
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;
% node[join = by -, inner sep = 0pt] ;
node[join= by white, inner sep = 0pt] ;
node[join= by white, continue chain=going right,] (K) K; % L shaped link preferably without intermediary node
draw[->, blue] (J.south) |- (K);
draw[->, blue] (D.east) |- ++(10mm,0) -- ($(E.east) + (10mm,0)$) -> (E.east);
endtikzpicture

enddocument


enter image description here






share|improve this answer














Definitively not the best way



documentclass[tikz]standalone

usetikzlibrarypositioning, calc, arrows, chains

begindocument

% https://tex.stackexchange.com/questions/56427/how-to-evenly-space-out-nodes-or-in-tikz
begintikzpicture[
start chain,
node distance = 15mm,
every node/.style = inner sep = 2mm, on chain, join,
every join/.style = ->,
]
node (A) A;
node (B) B;
node (C) C;
node (D) D;
node[continue chain=going below, join = by white] (E) E; % would like the join to be U shaped rather than straight down
node[continue chain=going left] (F) F;
node (G) G;
node (H) H;
node (I) I;
node[continue chain=going below, align=center] (J) J;
% node[join = by -, inner sep = 0pt] ;
node[join= by white, inner sep = 0pt] ;
node[join= by white, continue chain=going right,] (K) K; % L shaped link preferably without intermediary node
draw[->, blue] (J.south) |- (K);
draw[->, blue] (D.east) |- ++(10mm,0) -- ($(E.east) + (10mm,0)$) -> (E.east);
endtikzpicture

enddocument


enter image description here







share|improve this answer














share|improve this answer



share|improve this answer








edited 1 hour ago

























answered 1 hour ago









flav

3,3671625




3,3671625











  • That helps indeed but I was trying to make the chain join do it semi automatically rather than adding additional elements. anyway, the way to remove the original arrows, I guess, is to change the every node definition to not include join and then add join to the nodes you want to automatically link and not to the one we define manually. That will I think be my last resort but I'll wait to see if someone comes up with a better solution.
    – ArTourter
    1 hour ago
















  • That helps indeed but I was trying to make the chain join do it semi automatically rather than adding additional elements. anyway, the way to remove the original arrows, I guess, is to change the every node definition to not include join and then add join to the nodes you want to automatically link and not to the one we define manually. That will I think be my last resort but I'll wait to see if someone comes up with a better solution.
    – ArTourter
    1 hour ago















That helps indeed but I was trying to make the chain join do it semi automatically rather than adding additional elements. anyway, the way to remove the original arrows, I guess, is to change the every node definition to not include join and then add join to the nodes you want to automatically link and not to the one we define manually. That will I think be my last resort but I'll wait to see if someone comes up with a better solution.
– ArTourter
1 hour ago




That helps indeed but I was trying to make the chain join do it semi automatically rather than adding additional elements. anyway, the way to remove the original arrows, I guess, is to change the every node definition to not include join and then add join to the nodes you want to automatically link and not to the one we define manually. That will I think be my last resort but I'll wait to see if someone comes up with a better solution.
– ArTourter
1 hour ago

















 

draft saved


draft discarded















































 


draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f454381%2ftikz-chains-with-broken-arrow-joins%23new-answer', 'question_page');

);

Post as a guest













































































Comments

Popular posts from this blog

What does second last employer means? [closed]

Installing NextGIS Connect into QGIS 3?

One-line joke