# Many body perturbation diagrams (closed Feynman diagrams) in latex with labelling

I would like to draw many body Feynman diagrams using latex. These are closed and often used in condensed matter and nuclear physics in contrast to the open scattering diagrams in particle physics. For instance I am attaching two examples : (i) A particular Feynman diagram with labelling and (ii) Equations using Feynman diagrams.

(i)

(ii)

I hope these are possible using Tikz or PSTricks.

PS. A working example for the first figure is wanted. The second figure could be tedious, so for that a hint may suffice.

Here is a straight-forward tikz decorations solution:

# (i)

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.markings}

\begin{document}

% particle decorations borrowed from: Kjell Magne Fauske
% http://www.texample.net/tikz/examples/feynman-diagram/
\tikzset{
every node/.append style={font=\small},
every edge/.append style={thick},
arrow/.style={thick, shorten >=5pt,shorten <=5pt,->},
photon/.style={decorate, decoration={snake}},
electron/.style={postaction={decorate},
decoration={markings,mark=at position .55 with {\arrow[]{>}}}},
}

\begin{tikzpicture}[]
\begin{scope}[scale=2]
% coordinates
\coordinate (in) at (-.5,0);
\coordinate (out) at (1.5,0);
\fill (0,0) circle (1pt) coordinate (lb);
\fill (0,1) circle (1pt) coordinate (lt);
\fill (1,0) circle (1pt) coordinate (rb);
\fill (1,1) circle (1pt) coordinate (rt);

% edges
\draw (lb) edge[electron] node[below] {$i\omega_n+i\nu_m$} (rb);
\draw (lt) edge[electron,out=45,in=135] node[above] {$i\omega_p+i\nu_m$} (rt);
\draw (rt) edge[electron,out=-135,in=-45] node[below] {$i\omega_n$} (lt);
\draw (lb) edge[photon] node[left] {$i\nu_m$} (lt);
\draw (rt) edge[photon] node[right] {$i\nu_m$} (rb);

% arrows
\draw[arrow] (in) -- (lb);
\draw[arrow] (rb) -- (out);
\end{scope}
\end{tikzpicture}

\end{document}


Another example, using tikz-cd:

# (ii)

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{cd}
\usetikzlibrary{shapes.geometric}

\begin{document}

\tikzset{
every node/.append style={font=\small},
every edge/.append style={thick},
b/.style={bend right=45},
photon/.style={decorate, decoration={snake,segment length=8pt,amplitude=2pt}},
electron/.style={postaction={decorate},
decoration={markings,mark=at position .55 with {\arrow[]{>}}}},
}

\tikzcdset{diagrams={nodes={inner sep=0pt}},every arrow/.append style={dash},

\begin{tikzcd}
\arrow[rr,photon] & & \ar[d,electron,b] \\
& \arrow[r,photon] \ar[d,electron,b] & \ar[u,electron,b] \\
\arrow[r,photon] \ar[uu,electron] & \ar[u,electron,b] &
\end{tikzcd}

\end{document}


# (ii)...

You can also nest several diagrams within a tikzpicture and draw additional nodes and lines around them:

The diagrams are positioned using the tikz chains library:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{cd}
\usetikzlibrary{positioning}
\usetikzlibrary{chains}

\begin{document}

\tikzset{
every node/.append style={font=\small},
every edge/.append style={thick},
b/.style={bend right=45},
photon/.style={decorate, decoration={snake,segment length=8pt,amplitude=2pt}},
electron/.style={postaction={decorate},
decoration={markings,mark=at position .55 with {\arrow[]{>}}}},
}

\tikzcdset{diagrams={nodes={inner sep=0pt}},every arrow/.append style={dash},

\begin{tikzpicture}[
start chain,
node distance=1mm,
diag/.style={on chain},
+/.style={diag},
con/.style={red,thin,->}
]
% joined diagrams
\node [diag] {
\begin{tikzcd}
\ar[r,photon] & \ar[d,electron,b] \\
\ar[r,photon] \ar[u,electron] & \ar[u,electron,b]
\end{tikzcd}
};
\node [+] {$+$};
\node [diag] {
\begin{tikzcd}
\ar[rr,photon] & & \ar[d,electron,b] \\
& \ar[r,photon] \ar[d,electron,b] & \ar[u,electron,b] \\
\ar[r,photon] \ar[uu,electron] & \ar[u,electron,b] &
\end{tikzcd}
};
\node [+] {$+$};
\node [diag] {
\begin{tikzcd}
\ar[rrr,photon] & & & \ar[d,electron,b] \\
& & \ar[r,photon] \ar[d,electron,b] & \ar[u,electron,b] \\
& \ar[r,photon] \ar[d,electron,b] & \ar[u,electron,b] & \\
\ar[r,photon] \ar[uuu,electron] & \ar[u,electron,b] & &
\end{tikzcd}
};
\node [+] {$+\cdots$};
% labels
\node [red,yshift=1.5cm] (rpa) at (chain-3.north) {RPA};
\draw (rpa) edge[out=180,in=90,con] (chain-1);
\draw (rpa) edge[con] (chain-3);
\draw (rpa) edge[out=0,in=90,con] (chain-5);
\end{tikzpicture}

\end{document}

• Thnks @sergej. So I may not need to install any extra package. Could you attempt a higher order diagram or can we make a bubble as one unit and produce higher orders? – hbaromega Jul 24 '15 at 19:26
• @hbaromega I have added an example showing the nesting of diagrams within a tikzpicture. – sergej Jul 25 '15 at 10:34
• While compiling for the second example, somehow I'm getting an error message saying I can't find file tikzlibrarycd.code.tex'. But I think, cd is already there in my tikz libraries. And also why do the wiggly lines become different here. Can we make further variations, say more like saw-tooth wave? – hbaromega Jul 25 '15 at 11:29
• @hbaromega Seems like tikz-cd is not installed, you should update your TeX installation. The style of the wiggly lines is controlled by photon/.style={decorate, ..., you can adopt it to your needs. See the tikz` manual for other decoration styles. – sergej Jul 27 '15 at 8:33
• sorry, I would like to reverse the directions of the arrows in the first diagram (i.e. rightward one should head towards left and vice-versa), but not being able to get (I interchanged angles, but no success). Can you help? – hbaromega Aug 1 '15 at 20:04