0

I want to draw a custom arrow that connects two nodes. Unfortunately, I think this cannot be done with the arrows library:

Sketch of an arrow connecting two nodes

Tikz provides convenient shapes for such a case, e.g., the signal arrow. But for some reason there appears to be no way to draw it along a path as an edge.

But how would I transform it such that it points from one coordinate to another?

My general idea would be to:

  1. Stretch the arrow, i.e. increase the distance between the head and the tail
  2. Rotate the arrow such that it actually points towards the target

What is the idiomatic way to stretch (a part of) and rotate an existing shape?

To begin with, I could actually live with only point 1, but it would be important that I do not stretch the tip and tail but only the "middle end".

  • Are you aware of \usetikzlibrary{bending}? – marmot Mar 13 '18 at 13:54
3

Is this what you want?

enter image description here

\documentclass[tikz,border=2mm]{standalone} 
\usetikzlibrary{positioning, shapes.arrows, calc}

\begin{document}
\begin{tikzpicture}[
    myarrow/.style={single arrow, draw, shape border uses incircle}]

\node[draw, minimum width=2cm] (a) {Node A};
\node[draw, minimum width=2cm, below=2cm of a] (b) {Node B};
\path (a.south west) let \p1 = ($(b.north)-(a.south west)$) in 
    node[myarrow, minimum height={veclen(\x1,\y1)}, shape border rotate={atan2(\y1,\x1)}, anchor=tail] {};

\node[draw, minimum width=2cm, above right=1cm and 2cm of a] (c) {Node C};

\path (b.north east) let \p1 = ($(c.south)-(b.north east)$) in 
    node[myarrow, minimum height={veclen(\x1,\y1)}, shape border rotate={atan2(\y1,\x1)}, anchor=tail] {};
\end{tikzpicture}
\end{document}
1

Perhaps I misinterpret your question.

\documentclass[tikz,border=3pt]{standalone} 
\usetikzlibrary{positioning, shapes.arrows, calc,bending,arrows.meta}

\begin{document}
\begin{tikzpicture}

\node[draw, minimum width=2cm] (A) {A};
\node[draw, minimum width=2cm, below=2cm of A] (B) {B};
\draw[-{Implies[bend]},double distance=5pt] (A.-160) to[out=-90,in=90]
(B.north);

\end{tikzpicture}
\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.