I want to produce the following Feynman diagram with FeynMF; the problems is how to render the loops (particle-hole bubble) in the vertical direction; furthermore, how to fill a vertical bubble with hatches or gray shade.


  • A related question is asked at tex.stackexchange.com/questions/160660/…. However, the provided answer does not solve my problem. – AlQuemist Mar 26 '15 at 9:44
  • 1
    Welcome to TeX.SX. Questions about how to draw specific graphics that just post an image of the desired result are really not reasonable questions to ask on the site. Please post a minimal compilable document showing that you've tried to produce the image and then people will be happy to help you with any specific problems you may have. See minimal working example (MWE) for what needs to go into such a document. – Martin Schröder Mar 26 '15 at 9:57
  • Thanks for your notice; yet actually I cannot produce any MWE for this figure with FeynMF; so I posted a picture of the diagram made by another application. @MartinSchröder – AlQuemist Mar 27 '15 at 12:55

This is quite tricky to do because feynmf does not provide an easy way to fill an arbitrary cycle of paths, nor an easy interface to the paths it has created for you. You could draw a polygon and shade that, but then you'd have trouble putting the arrows on the side of it. Faced with this level of complexity, it's usually easier to draw your diagram in raw Metapost, using the macros from feynmp as needed.

Here is an attempt at your picture, using this approach.

enter image description here

prologues := 3;
outputtemplate := "%j%c.eps";

input feynmp

w = 180; h = 200;

z1 = (0,0); z2 = (w,0);
z3 = (0,h); z4 = (w,h);

x5 = x6 = x7 = 1/2 w;
y5 = 0; y6 = 1/3 h; y7 = 2/3 h;

draw_dashes_arrow z1 -- z5;
draw_dashes_arrow z5 -- z2;

draw_plain_arrow z3 -- z7;
draw_plain_arrow z7-- z4;

path a[];
a1 = z5 .. (z5+12up) rotatedabout( 1/2[z5,z6], 90) .. z6; 
a2 = a1 rotatedabout( 1/2[z5,z6], 180);
a3 = a1 shifted (z6-z5);
a4 = a1 rotatedabout(z6,180);

fill a3 .. a4 .. cycle withcolor .8 white;
%shade a3 .. a4 .. cycle;

draw_plain_arrow a1;
draw_plain_arrow a2;

draw_dashes_arrow a3;
draw_dashes_arrow a4;

label.bot(btex $\ell$ etex, z7);
label.top(btex $\ell$ etex, z6);



Compile this with mpost to produce an .eps file that you can convert to PDF or include directly. If you prefer shading with diagonal lines, then comment out the fill line and uncomment the shade line. If you want to see the numbers I've assigned to each vertex, uncomment the dotlabels line.

The macros

  • shade
  • draw_plain_arrow
  • draw_dashes_arrow

are provided by feynmp.mp which I have included at the top.

| improve this answer | |

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.