I was trying to typset the following penguin diagram with Feynmf

enter image description here

and I've got it pretty close with the following code

                \fmf{fermion, tension=.2}{i3,v3}
                \fmf{photon, tension=.2}{v3,v4}
                \fmf{fermion, tension=.2}{v4,o3}
                \fmf{fermion, right=.5, tension=3}{v3,v1}
                \fmf{fermion, right=.3, tension=3}{v1,v2,v4}
                \fmf{gluon, tension=3}{v1,v0}
                \fmf{gluon, tension=3}{v2,v5}

leading to this result which is a bit out of alignment

enter image description here

In particular for the two outer quarks from the gluon. Moreover I wanted to add a blob for the initial and final mesons (the K0 on the left and the two pions on the right) using the code found on this page but I'm not sure how to proceed. I'm pretty new to the package.

If someone would be willing to help, I would really appreciate it!

  • 1
    Hi Davide. I am not understood your request. How do must be this graph? Can you put a drawing done with your fingers? Regards from Sicily.
    – Sebastiano
    May 26, 2021 at 20:45
  • @Sebastiano Hi from Rome! I've added a drawing to make things clearer! May 27, 2021 at 6:12
  • 1
    Truly with a lot of sincerity I have difficult, sometimes, to understand the English language. Many users here know my deficiences :-((((...My best regards and +1 for the drawing. If somebody not give an answer, inform me please.
    – Sebastiano
    May 27, 2021 at 7:51
  • 1
    @Sebastiano Sure, will do! Grazie mille :) May 27, 2021 at 7:56

1 Answer 1


I think I have managed to produce the diagram as you are aiming for but I have had to use the more advanced immediate mode to do so.

The main technique I used was to draw the basic shapes without connecting the bits up using phantom lines and then using metapost commands to extract parts of the lines and then drawing those parts of lines with immediate mode.

For the blobs I use the code in the page you linked in your question. Specifically I placed the following in the header of the document.

vardef vovalblob (expr bd, a) (text vl)=
  forsuffixes $=vl:
    if not vexists $: venter $; fi
    vlist[vlookup $]decor.shape := fullcircle xscaled a;
    vlist[vlookup $]decor.size := bd;
    vlist[vlookup $]decor.sty := "shaded";
\def\fmfovalblob#1#2#3{\fmfcmd{input vovalblob; vovalblob ((#1), (#2), \fmfpfx{#3});}}

The blobs are then drawn with a command \fmfovalblob{HEIGHT}{WIDTHSCALE}{LOCATION} where HEIGHT is the height (use either w or h to specify the size as a fraction of the image width or height respectively), WIDTHSCALE is how big the width of the blob is as a multiple of the height and LOCATION is a vertex which sets the location for the vertex.

Then the code to produce the diagram is given by

            \fmfstraight % need straight edges for the blobs to look right.
            % bottom line
            % top line
            \fmf{fermion, tension=.2}{i3,v3}
            \fmf{photon, tension=.2}{v3,v4}
            \fmf{fermion, tension=.2}{v4,o3}
            % top fermion loop - draw later as it will need splitting into bit.
            \fmf{phantom, tension=0, right=1}{v3,v4}
            % bottom inner fermion line on the right hand side
            \fmf{fermion, tension=7}{o1,v1}
            % top inner fermion line on the right hand side
            \fmf{fermion, tension=7}{v2,o2}
            % side fermion loop - draw later as it will need splitting into bits
            % centers of the blobs on the right hand side.
            \fmf{phantom, tension=1}{o0,o5,o1}
            \fmf{phantom, tension=1}{o2,o6,o3}
            \fmffreeze % Do layout now. All later stuff using pre-calculated points.
            % Declare and set the two fermion loops.
            % declare and set the points part way along the fermion loops.
            \fmfiset{j1}{point length(p1)/2 of p1}
            \fmfiset{j2}{point 3length(p1)/4 of p1}
            \fmfiset{j3}{point length(p2)/2 of p2}
            %draw in the fermion loops but in pieces so we get correct arrows.
            \fmfi{fermion}{subpath (0, length(p1)/4) of p2}
            \fmfi{fermion}{subpath (length(p1)/2,length(p1)) of p2}
            \fmfi{fermion}{subpath (0, length(p1)/2) of p1}
            \fmfi{fermion}{subpath (length(p1)/2, 3length(p1)/4) of p1}
            \fmfi{fermion}{subpath (3length(p1)/4,length(p1)) of p1}
            % draw the gluons using the calculated points.
            \fmfi{gluon}{j1 -- vloc(__v0)}
            \fmfi{gluon}{j2 -- j3}
            %a dd the blobs

The output: Output Feynman Diagram

Everything up to the \fmffreeze but with phantom lines shown as dots. Partial Diagram

  • For my humble opinion it is excellent!! My sincere compliments. +1.
    – Sebastiano
    May 27, 2021 at 10:54
  • This is perfect! Thank you so much!! May 27, 2021 at 15:13

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .