4

For reference, I am trying to re-create this diagram from a 1931 paper.

Diagram After looking here, here, here and here I managed to generate the following:

Current Output

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows,arrows.meta}

\begin{document}

\tikzstyle{circlelined} = [circle, minimum width=6em, text centered, draw=black, ultra thick]
\tikzstyle{circledashed} = [dashedlong, circle, minimum width = 6em, text centered, draw=black, thick]
\tikzstyle{circleblank} = [circle, minimum width=6em]
\tikzstyle{dashedlong}=                  [dash pattern=on 22pt off 4pt]
\tikzstyle{dashedlong2}=                  [dash pattern=on 18pt off 4pt]
% \tikzstyle{box4} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black,fill=orange!50]
% \tikzstyle{boxA} = [rectangle, minimum width=3cm, minimum height=1.3cm, text centered, draw=black,fill=pink!80]
\tikzstyle{arrow} = [ultra thick,->,>={Latex[scale=1]},line width=2.5pt]
\tikzstyle{arrowdashed} = [thick, dashedlong2 ,->,>={Latex[scale=2]},line width=1pt]


\begin{tikzpicture}[node distance=12em,thick]
%------------------------------------------------------------
% NODE SETUP
%------------------------------------------------------------
\node (CBL) [circleblank] {};
\node (C1) [circlelined, right of = CBL] {};
\node (C2) [circlelined, right of = C1] {};
\node (C3) [circlelined, right of = C2] {};
\node (C4) [circlelined, right of = C3] {};
\node (CBR) [circleblank, right of = C4] {};
\node (CB1) [circledashed, below of = C1] {};
\node (CB3) [circledashed, below of = C3] {};
\node (CA2) [circledashed, above of = C2] {};
\node (CA4) [circledashed, above of = C4] {};
\node[circleblank] (l2) at (30em,-8em) {\fontsize{20}{22.4}\selectfont$\ell_{\scriptscriptstyle 2}$};
\node[circleblank] (l1) at (54em,6em) {\fontsize{20}{22.4}\selectfont$\ell_{\scriptscriptstyle 1}$};
%------------------------------------------------------------

%------------------------------------------------------------
% LINES
%------------------------------------------------------------
\draw[draw=black, thick] ([xshift=-24em]C1.center) -- (CBR.east);
\draw[draw=black, ultra thick] ([xshift=-24em, yshift=18em]C1.center) -- ([xshift=-24em, yshift=-18em]C1.center);
\draw[draw=black, dashedlong2, thick] (C2.center) -- ([xshift=12em, yshift=4em]CB1.center);
\draw[draw=black, dashedlong2, thick] (CA4.center) -- ([yshift=6em]l1.center);

%------------------------------------------------------------


%------------------------------------------------------------
% ARROWS FROM CIRCLES
%------------------------------------------------------------
\draw[arrow] (C1.center) -- node[anchor=north, xshift=-1em,yshift = -1em]{\fontsize{20}{22.4}\selectfont$u$}([xshift=3em]CBL.east);
\draw[arrow] (C2.center) -- node[anchor=north, xshift=1em,yshift = -1em]{\fontsize{20}{22.4}\selectfont$u$}([xshift=-3em]C3.west);
\draw[arrow] (C3.center) -- node[anchor=north, xshift=-1em,yshift = -1em]{\fontsize{20}{22.4}\selectfont$u$}([xshift=3em]C2.east);
\draw[arrow] (C4.center) -- node[anchor=north, xshift=1em,yshift = -1em]{\fontsize{20}{22.4}\selectfont$u$}([xshift=-3em]CBR.west);
%------------------------------------------------------------

%------------------------------------------------------------
% ARROWS FROM DASHED CIRCLES
%------------------------------------------------------------
\draw[arrowdashed] (CB1.center) -- (C1.center);
\draw[arrowdashed] (CB3.center) -- (C3.center);
\draw[arrowdashed] (CA2.center) -- (C2.center);
\draw[arrowdashed] (CA4.center) -- (C4.center);
%------------------------------------------------------------

%------------------------------------------------------------
% ARROWS FOR u,v,l
%------------------------------------------------------------
% First 'v' arrow
\draw[arrow] ([xshift=6em]C1.center) -- node[anchor=north, yshift=-3em]{\fontsize{20}{22.4}\selectfont$v$}([xshift=6em, yshift = 6em]CB1.center);
% Second 'v' arrow
\draw[arrow] ([xshift=6em]C2.center) -- node[anchor=south, yshift=3em]{\fontsize{20}{22.4}\selectfont$v$}([xshift=6em, yshift = -6em]CA2.center);
% Third 'v' arrow
\draw[arrow] ([xshift=6em]C1.center) -- node[anchor=north, yshift=-3em]{\fontsize{20}{22.4}\selectfont$v$}([xshift=6em, yshift = 6em]CB1.center);
% 'l_2' arrows
\draw[arrow] ([xshift=-2em]l2.center) --([xshift=12em, yshift=4em]CB1.center);
\draw[arrow] ([xshift=2em]l2.center) --([yshift=4em]CB3.center);

% 'l_1' arrows
\draw[arrow] ([yshift=2em]l1.center) --([yshift=6em]l1.center);
\draw[arrow] ([yshift=-2em]l1.center) --([yshift=-6em]l1.center);

%------------------------------------------------------------

%------------------------------------------------------------
% Curved Arrows
%------------------------------------------------------------
\draw[arrow]
   (C1) ++(-0.75,0.25)  arc (135:65:1 and 2) -- ++(-45:13pt);
\draw[arrow]
   (C3) ++(-0.75,0.25)  arc (135:65:1 and 2) -- ++(-45:13pt);
\draw[arrow]
   (C2) ++(0.75,0.25)  arc (45:115:1 and 2) -- ++(-135:13pt);
%------------------------------------------------------------
\end{tikzpicture}
\end{document}

Which turned out not so bad, however, making those arrow heads on arcs sit nicely was tedious and there probably is a much easier way to do it, one that looks better as well.

Is there an alternative to arc? Are the alternatives compatible with nodes? Anything than can make a curve would be good too as I currently have no ideas on how to even start drawing that half parabola curve thing yet either (and it's probably ridiculously easy to do).

Many Thanks Ken

  • I believe you are looking for the library bending... – marmot Jun 22 at 23:02
6

I focus on the arcs here (and do not address the font sizes etc.). First of all, you may want to bend the arrow heads. This requires the bending library and to add bend to the arrow, e.g.

\tikzset{arrow/.style={ultra thick,->,>={Latex[scale=1,bend]},line width=2.5pt}}

(where I switched to \tikzset as \tikzstyle is deprecated). Then your arrows can be draw in a loop simply by saying

\foreach \X in {1,2,3} {\draw[arrow] (C\X) ++(170:0.75)  arc (170:10:0.75);}

Here I use polar coordinates. If you want these arrows longer or shorter, adjust the range of the polar angles 170 and 10.

enter image description here

This is the MWE (where you could avoid some repetition by using more \foreach loops).

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,arrows.meta,bending}

\begin{document}

\tikzset{circlelined/.style={circle, minimum width=6em, text centered, draw=black, ultra thick},
circledashed/.style={dashedlong, circle, minimum width = 6em, text centered, draw=black, thick},
circleblank/.style={circle, minimum width=6em},
dashedlong/.style={dash pattern=on 22pt off 4pt},
dashedlong2/.style={dash pattern=on 18pt off 4pt},
arrow/.style={ultra thick,->,>={Latex[scale=1,bend]},line width=2.5pt},
arrowdashed/.style={thick, dashedlong2 ,->,>={Latex[scale=2,bend]},line width=1pt}}


\begin{tikzpicture}[node distance=12em,thick]
%------------------------------------------------------------
% NODE SETUP
%------------------------------------------------------------
\node (CBL) [circleblank] {};
\node (C1) [circlelined, right of = CBL] {};
\node (C2) [circlelined, right of = C1] {};
\node (C3) [circlelined, right of = C2] {};
\node (C4) [circlelined, right of = C3] {};
\node (CBR) [circleblank, right of = C4] {};
\node (CB1) [circledashed, below of = C1] {};
\node (CB3) [circledashed, below of = C3] {};
\node (CA2) [circledashed, above of = C2] {};
\node (CA4) [circledashed, above of = C4] {};
\node[circleblank] (l2) at (30em,-8em) {\fontsize{20}{22.4}\selectfont$\ell_{\scriptscriptstyle 2}$};
\node[circleblank] (l1) at (54em,6em) {\fontsize{20}{22.4}\selectfont$\ell_{\scriptscriptstyle 1}$};
%------------------------------------------------------------

%------------------------------------------------------------
% LINES
%------------------------------------------------------------
\draw[draw=black, thick] ([xshift=-24em]C1.center) -- (CBR.east);
\draw[draw=black, ultra thick] ([xshift=-24em, yshift=18em]C1.center) -- ([xshift=-24em, yshift=-18em]C1.center);
\draw[draw=black, dashedlong2, thick] (C2.center) -- ([xshift=12em, yshift=4em]CB1.center);
\draw[draw=black, dashedlong2, thick] (CA4.center) -- ([yshift=6em]l1.center);

%------------------------------------------------------------


%------------------------------------------------------------
% ARROWS FROM CIRCLES
%------------------------------------------------------------
\draw[arrow] (C1.center) -- node[anchor=north, xshift=-1em,yshift = -1em]{\fontsize{20}{22.4}\selectfont$u$}([xshift=3em]CBL.east);
\draw[arrow] (C2.center) -- node[anchor=north, xshift=1em,yshift = -1em]{\fontsize{20}{22.4}\selectfont$u$}([xshift=-3em]C3.west);
\draw[arrow] (C3.center) -- node[anchor=north, xshift=-1em,yshift = -1em]{\fontsize{20}{22.4}\selectfont$u$}([xshift=3em]C2.east);
\draw[arrow] (C4.center) -- node[anchor=north, xshift=1em,yshift = -1em]{\fontsize{20}{22.4}\selectfont$u$}([xshift=-3em]CBR.west);
%------------------------------------------------------------

%------------------------------------------------------------
% ARROWS FROM DASHED CIRCLES
%------------------------------------------------------------
\draw[arrowdashed] (CB1.center) -- (C1.center);
\draw[arrowdashed] (CB3.center) -- (C3.center);
\draw[arrowdashed] (CA2.center) -- (C2.center);
\draw[arrowdashed] (CA4.center) -- (C4.center);
%------------------------------------------------------------

%------------------------------------------------------------
% ARROWS FOR u,v,l
%------------------------------------------------------------
% First 'v' arrow
\draw[arrow] ([xshift=6em]C1.center) -- node[anchor=north, yshift=-3em]{\fontsize{20}{22.4}\selectfont$v$}([xshift=6em, yshift = 6em]CB1.center);
% Second 'v' arrow
\draw[arrow] ([xshift=6em]C2.center) -- node[anchor=south, yshift=3em]{\fontsize{20}{22.4}\selectfont$v$}([xshift=6em, yshift = -6em]CA2.center);
% Third 'v' arrow
\draw[arrow] ([xshift=6em]C1.center) -- node[anchor=north, yshift=-3em]{\fontsize{20}{22.4}\selectfont$v$}([xshift=6em, yshift = 6em]CB1.center);
% 'l_2' arrows
\draw[arrow] ([xshift=-2em]l2.center) --([xshift=12em, yshift=4em]CB1.center);
\draw[arrow] ([xshift=2em]l2.center) --([yshift=4em]CB3.center);

% 'l_1' arrows
\draw[arrow] ([yshift=2em]l1.center) --([yshift=6em]l1.center);
\draw[arrow] ([yshift=-2em]l1.center) --([yshift=-6em]l1.center);

%------------------------------------------------------------

%------------------------------------------------------------
% Curved Arrows
%------------------------------------------------------------
\foreach \X in {1,2,3}
{\draw[arrow]
   (C\X) ++(170:0.75)  arc (170:10:0.75);}
%------------------------------------------------------------
\end{tikzpicture}
\end{document}

enter image description here

  • I was busy going through some bending examples after your comment. I completely agree that the bending on the arrow head itself is aesthetically pleasing. I have never used loops before, but seeing at it reduces the amount of typing out it's probably something I should think about in future. – Ken Jun 22 at 23:40
  • Also, what was the issue with the font sizes ? Is it something I should look at changing? – Ken Jun 22 at 23:41
  • @Ken I get complaints about the font sizes when I compile the above. However, these are warnings, and I do not know enough about fonts to judge whether or not this is something to worry about. (This was merely because there are a handful users on this site who have a bit interesting habits, so I wanted to say "yes, I saw these warnings, too." ;-) – marmot Jun 22 at 23:45
  • Ahh, I had issues with the size of the letters attached to the nodes nd another page here on stackexchange recommended that fix. It works, so I didn't question it. However, thank you so much Marmot. I have a few other diagrams to draw up and I can see this bending coming in super handy. – Ken Jun 22 at 23:50
  • 1
    +1 for the bending library, which I hadn't come across. I almost always learn nice tricks from your posts:) – Andrew Jun 23 at 0:19

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.