# Reproducing a directed graph with labeled edges

I am trying to implement the following graph :

.

I came up with a MWE, but I am unable to draw the curved edges. The code is shown below:

        \documentclass[11pt]{scrartcl}
\PassOptionsToPackage{usenames,dvipsnames,svgnames}{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,automata}

\begin{document}
\begin{tikzpicture}[>=stealth',shorten >=1pt,node distance=3cm,on grid,initial/.style    ={}]
\node[state]          (A)                        {$Author$};
\node[state]          (P) [above right =of A]    {$Paper$};
\node[state]          (T) [below right =of A]    {$Topic$};
\node[state]          (V) [below right =of P]    {$Venue$};
\tikzset{mystyle/.style={->,double=orange}}
\tikzset{every node/.style={fill=white}}
\path (V)     edge [mystyle]    node   {$publish$} (P)
(P)     edge [mystyle]    node   {$mention$} (T)
(T)     edge [mystyle]    node   {$mention-1$} (P)
(P)     edge [mystyle]    node   {$write-1$} (A)
(T)     edge [mystyle]    node   {$contain$} (T);
\tikzset{mystyle/.style={double=orange}}
\tikzset{mystyle/.style={<->,relative=false,in=0,out=60,double=orange}}
\end{tikzpicture}
\end{document}


One way would be to use the to[ <options> ] syntax:

\draw [red, ultra thick, ->] (A.north west) to[out=190, in=170, distance=1.5cm] (A.south west);
\draw [red, ultra thick, ->] (T.-150) to[out=-80, in=-100, distance=1.5cm] (T.-30);


where you can specify the terminal points of the curved line via a compass direction (A.north west) or using an angle as in (T.-150), and control the in=, out= angles along with the distance=:

## Notes:

• Not sure why you were doing a \tikzset at \end{tikzpicture}. I have removed that portion of the code as it has no effect here.

## Code:

\documentclass[11pt]{scrartcl}
\PassOptionsToPackage{usenames,dvipsnames,svgnames}{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,automata}

\begin{document}
\begin{tikzpicture}[>=stealth',shorten >=1pt,node distance=3cm,on grid,initial/.style    ={}]
\node[state]          (A)                        {$Author$};
\node[state]          (P) [above right =of A]    {$Paper$};
\node[state]          (T) [below right =of A]    {$Topic$};
\node[state]          (V) [below right =of P]    {$Venue$};
\tikzset{mystyle/.style={->,double=orange}}
\tikzset{every node/.style={fill=white}}
\path (V)     edge [mystyle]    node   {$publish$} (P)
(P)     edge [mystyle]    node   {$mention$} (T)
(T)     edge [mystyle]    node   {$mention-1$} (P)
(P)     edge [mystyle]    node   {$write-1$} (A)
(T)     edge [mystyle]    node   {$contain$} (T);

\draw [red, ultra thick, ->] (A.north west) to[out=190, in=170, distance=1.5cm] (A.south west);
\draw [red, ultra thick, ->] (T.-150) to[out=-80, in=-100, distance=1.5cm] (T.-30);

\end{tikzpicture}
\end{document}

• So unlike the edge command, the draw command does not have a feature to label/name the edge? – envy_intelligence Apr 5 '16 at 14:54
• The labeling is done on a node not an edge. You can add a node to the \draw and label it also. – Peter Grill Apr 5 '16 at 22:52