4

I'm trying to use FeynMP to draw a Feynman diagram exactly like this

Feynman diagram for Hartree contribution to fermion self-energy

but with a photon line inside the circle. This code works perfectly to create the diagram above:

\fmfleft{i} \fmfright{o} \fmftop{t}
\fmf{fermion,label=$q$}{i,v1,o}
\fmffreeze
\fmf{photon,label=$0$}{v1,v2}
\fmf{fermion,right,tension=0.45,label=$k$}{v2,t}
\fmf{fermion,right,tension=0.45}{t,v2}

but when I try to add

\fmfposition
\fmfipath{p[]}
\fmfiset{p1}{vpath1(__v2,__t)}
\fmfiset{p2}{vpath2(__t,__v2)}
\fmfi{photon}{point 3length(p1)/4 of p1 -- point 3length(p2)/4 of p2}

to create the photon line, MetaPost gives me the error

unknown path p1

On the other hand, this code, adapted from the FeynMF manual,

\fmfleft{i}
\fmfright{o}
\fmf{dots}{i,v1}
\fmf{dots}{v2,o}
\fmf{phantom,left,tension=0.2,tag=1}{v1,v2}
\fmf{phantom,left,tension=0.2,tag=2}{v2,v1}
\fmfdot{v1,v2}
\fmfposition
\fmfipath{p[]}
\fmfiset{p1}{vpath1(__v1,__v2)}
\fmfiset{p2}{vpath2(__v2,__v1)}
\fmfi{fermion}{subpath (0,length(p1)/3) of p1}
\fmfi{fermion}{subpath (2length(p1)/3,length(p1)) of p1}
\fmfi{fermion}{subpath (0,length(p2)/3) of p2}
\fmfi{fermion}{subpath (2length(p2)/3,length(p2)) of p2}
\fmfi{gluon}{point length(p1)/10 of p1
-- point 11length(p1)/12 of p1}

successfully creates this diagram:

working example of fmfi

What's the difference, and how do I fix it?

Edit: As requested, the complete (non-working) code:

\documentclass{article}

%Feynman diagrams
\usepackage{feynmp}
\DeclareGraphicsRule{*}{mps}{*}{}

\begin{document}

\begin{center}
 \begin{fmffile}{Calculation2Diagrams}
  \begin{fmfgraph*}(200,150)

   % This code works fine...
   \fmfleft{i} \fmfright{o} \fmftop{t}
   \fmf{fermion,label=$q$}{i,v1,o}
   \fmffreeze
   \fmf{photon,label=$0$}{v1,v2}
   \fmf{fermion,right,tension=0.45,label=$k$}{v2,t}
   \fmf{fermion,right,tension=0.45}{t,v2}
   % ...just as long as this code isn't added to it.
   \fmfposition
   \fmfipath{p[]}
   \fmfiset{p1}{vpath1(__v2,__t)}
   \fmfiset{p2}{vpath2(__t,__v2)}
   \fmfi{photon}{point 3length(p1)/4 of p1 -- point 3length(p2)/4 of p2}

   % This code, adapted from the FeynMF manual, on the other hand, does
   % almost the same thing in almost the same way and works perfectly.
   %\fmfleft{i}
   %\fmfright{o}
   %\fmf{plain}{i,v1}
   %\fmf{plain}{v2,o}
   %\fmf{phantom,left,tension=0.2,tag=1}{v1,v2}
   %\fmf{phantom,left,tension=0.2,tag=2}{v2,v1}
   %\fmfdot{v1,v2}
   %\fmfposition
   %\fmfipath{p[]}
   %\fmfiset{p1}{vpath1(__v1,__v2)}
   %\fmfiset{p2}{vpath2(__v2,__v1)}
   %\fmfi{plain}{subpath (0,length(p1)/3) of p1}
   %\fmfi{plain}{subpath (2length(p1)/3,length(p1)) of p1}
   %\fmfi{plain}{subpath (0,length(p2)/3) of p2}
   %\fmfi{plain}{subpath (2length(p2)/3,length(p2)) of p2}
   %\fmfi{plain}{point length(p1)/10 of p1
   %-- point 9length(p1)/10 of p1}

  \end{fmfgraph*}
 \end{fmffile}
\end{center}

\end{document}
5

It works if you leave out the suffixes from the vpath macros.

\fmfiset{p1}{vpath(__v2,__t)}
\fmfiset{p2}{vpath(__t,__v2)}

What the suffixes are supposed to be doing is a mystery to me.

Here's a complete program using feynmp-auto.

\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{first}
\begin{fmfgraph*}(200,200)
    \fmfleft{i} \fmfright{o} \fmftop{t}
\fmf{fermion,label=$q$}{i,v1,o}
\fmffreeze
\fmf{photon,label=$0$}{v1,v2}
\fmf{fermion,right,tension=0.45,label=$k$}{v2,t}
\fmf{fermion,right,tension=0.45}{t,v2}
\fmfposition
\fmfipath{p[]}
\fmfiset{p1}{vpath(__v2,__t)}
\fmfiset{p2}{vpath(__t,__v2)}
\fmfi{photon}{point 3/4 length p1 of p1 -- point 3/4 length p2 of p2}
\end{fmfgraph*}
\end{fmffile}
\end{document}

enter image description here

|improve this answer|||||
  • Yeah, I was kinda wondering that. If anybody does know what the suffixes do, please chime in. – calavicci Apr 1 '15 at 17:07
  • @Thruston Is there a possibility to draw a line from one Point on the circle to an extern point? For instance \fmfi{photon}{point 3/4 length p1 of p1 -- o} or something like that? – Matthias Apr 30 '15 at 16:09
  • @Matthias, yes you could do that - why don't you experiment with it and see what you get? If you get stuck, then ask a new question - that way we can keep questions and answers inline with each other. – Thruston Apr 30 '15 at 18:02

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.