Repositing labels in Feynman diagram

I have the following code in Feynmf:

\documentclass{article}
\usepackage{feynmp}
\usepackage{ifpdf}
\ifpdf
\DeclareGraphicsRule{*}{mps}{*}{}
\fi
\usepackage{empheq}

\begin{document}

\unitlength = 2mm
\begin{fmffile}{vert2}
\begin{fmfgraph*}(40,40)

\fmfleft{i1,i2}
\fmfright{i3}
\fmf{photon,label=$\mathbf{a}$}{i3,v1}
\fmf{fermion,label=$\mathbf{b}$,l.side=right}{i1,v2}
\fmf{fermion,label=$\mathbf{c}$}{v3,i2}
\fmf{fermion}{v2,v1}
\fmf{fermion}{v1,v3}
\fmf{photon}{v3,v4}
\fmf{photon}{v4,v2}
\fmfblob{.12w}{v4}
\fmfdot{v1,v2,v3}

\end{fmfgraph*}
\end{fmffile}

\end{document}


Now I would like to reposition the labels $a,b,c$ such that they are closer to the vertices. Furthermore, I would like to shorten all three incoming lines. Does anybody know how to do this?

• To shorten the "incoming" lines, increase the tension, so that the "incoming" line pulls as hard as the two other lines coming into the vertex

• To move the labels, put them on the vertices rather than the lines, using \fmfv instead of \fmfdot. If you want to position the labels away from the vertices, then you can adjust label.angle and label.dist until you get them right.

Like this:

\documentclass{standalone}
\usepackage{feynmp}
\usepackage{ifpdf}
\ifpdf
\DeclareGraphicsRule{*}{mps}{*}{}
\fi
\usepackage{empheq}

\begin{document}

\unitlength = 2mm
\begin{fmffile}{vert2}
\begin{fmfgraph*}(40,40)

\fmfleft{i1,i2}
\fmfright{i3}
\fmf{photon,tension=2}{i3,v1}
\fmf{fermion,tension=2}{i1,v2}
\fmf{fermion,tension=2}{v3,i2}
\fmf{fermion}{v2,v1}
\fmf{fermion}{v1,v3}
\fmf{photon}{v3,v4}
\fmf{photon}{v4,v2}
\fmfblob{.12w}{v4}
\fmfv{decor.shape=circle,decor.filled=full,decor.size=2thick,label=$\mathbf{a}$,label.angle=-60}{v1}
\fmfv{decor.shape=circle,decor.filled=full,decor.size=2thick,label=$\mathbf{b}$,label.angle=-60}{v2}
\fmfv{decor.shape=circle,decor.filled=full,decor.size=2thick,label=$\mathbf{c}$,label.angle=60}{v3}

\end{fmfgraph*}
\end{fmffile}

\end{document}


To get better placed labels, you could try something like this:

\fmfv{decor.shape=circle,decor.filled=full,decor.size=2thick,
label=$\mathbf{a}$,label.angle=20,label.dist=1cm}{v1}
\fmfv{decor.shape=circle,decor.filled=full,decor.size=2thick,
label=$\mathbf{b}$,label.angle=-150,label.dist=8mm}{v2}
\fmfv{decor.shape=circle,decor.filled=full,decor.size=2thick,
label=$\mathbf{c}$,label.angle=108,label.dist=8mm}{v3}


which produces:

• Thanks for your answer! However, I would like the labels to not be positioned at the vertices, but rather slightly away from them. (Because in the real figure I want to make there are also some labels at the internal lines, so it might get confusing.) Is there any way to do this? Jul 14, 2016 at 15:57
• I don't think Torsten Ohl ever implemented labels part way along a line, which is what you want, so there's no clean way to do it. I'll edit the answer with some ideas. Jul 14, 2016 at 16:03
• I see that the manual says in Table 2 on page 16: “label.pos – relative position of the label (not implemented yet!)” You may want to consider TikZ-Feynman, which is a very modern (2016) package for drawing Feynman diagrams.
– hftf
Jul 14, 2016 at 20:13