I would like to draw relatively complex paths in tikz.

This is an example:

enter image description here

The boxes represent nodes with texts of different lengths. The arched arrows should be on a circle path. The arched arrow should touch the strait arrow in its middle. If the angle of the strait arrow is changed, the "circle" should be adjusted accordingly. Is this feasible? How?

According to Tarass' suggestion I edited my question. This is the code I could make, but it gives far less nice result than his example.

\tikzset{ar/.style={->,thick,shorten <=8pt,shorten >=8pt,>=stealth}} 
\node (a)     at (0,4)    {aaaaaaaa};
\node (b)     at (8,8)    {bbbbbbbb};
\path (a.north east)    edge [ar]  coordinate[pos=0.5,sloped,below=3cm] (C)  (b.south west);
\path (C) ++(170:3cm) node (m) {MMMM} coordinate (m1);
\draw[ar] (m1) arc (170:60:3cm) node (p) {PPPPPP};
\path (m1) arc (170:60:3cm) coordinate (p1);
\draw [ar] (p1) arc (60:5:3cm) node (r) {RRRRRRRR};
\path (p1) arc (60:5:3cm) coordinate (r1);
\draw [ar] (r1) arc (5:-110:3cm) node (r) {SSSSSSS};
\path (r1) arc (5:-110:3cm) coordinate (s1);
\draw [ar] (s1) arc (-110:-190:3cm);

which gives:

enter image description here

1 Answer 1


Yes, it is ;-) Try something and when you are stuck, ask for specific help. Good people from the community will help.

enter image description here


    \foreach \ang in {#2}{%
        \draw[#1] (\ang:\Rad)--(\ang+1:\Rad) ;


\draw[thick] (0,0) circle (\Rad) ;

\node[draw,circle,fill=white] (N1) at (30:\Rad) {A node} ;
\node[draw,fill=white] (N2) at (190:\Rad) {Another node} ;
\node[draw,fill=white,rounded corners=2mm] (N3) at (225:\Rad) {A different node} ;
\node[draw,fill=white] (N4) at (340:\Rad) {A node} ;

\node[draw,fill=red!20,star,star points=4] (N5) at (3,0) {Here} ;
\node[draw,fill=blue!20,regular polygon,regular polygon sides=5]
    (N6) at (-3,0) {There} ;
\draw[->,thick] (N6)--(0,0)--(N5) ;

\ARW[thick,red,<-]{50.5, 197, 236, 347};

  • If you have already some code, post it. Maybe you start from a better idea than mine. One has always to learn.
    – Tarass
    Commented Apr 2, 2014 at 17:28
  • I edited my question and added a sample code, but it is not as nice as yours. I don't know how to add nodes onto the circle path, so I used arches, but it is complicated and does not give nice result. I would appreciate if you could share your code.
    – bcsikos
    Commented Apr 2, 2014 at 17:35
  • We have different approaches. Here is my try.
    – Tarass
    Commented Apr 2, 2014 at 21:45
  • Nice. I have 4 questions: 1. How do you know that the scope has to be rotated by 20 and not by other value? 2. Where the values for the coordinates of the arrows are coming from? That is how do you know they have to be 50.5, 197, 236, 347. Some calculation or trial and error? 3. If I look the result carefully it becomes clear that the arrows do not end the lines, the lines and arrows overlap, which is not very nice. Is there some fox for this? 4. I guess the \ang command is from the siunitx package, but how is this package loaded? Pgf manual dose not mention siunitx.
    – bcsikos
    Commented Apr 3, 2014 at 13:45
  • The node where the tangent line start is 110:\ang, 20=110-90, the arrows are placed by guess. I made them red but in black with a bigger arrow or smaller line it will work better. \ang is a mute variable for the loop, change it for \x or something else.
    – Tarass
    Commented Apr 3, 2014 at 16:44

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .