How to draw disconnected Feynman diagrams with the feynMF package?

I just discovered the feynMF package, a really neat tool for drawing Feynman diagrams.

I went ahead and drew a few diagrams which I'll include here just to set the right spirit for this question. I produced this

with this

\documentclass{article}
\usepackage{feynmf}

\begin{document}
$\begin{fmffile}{Diagram} \begin{fmffile}{Diagram} \begin{fmfgraph*}(40,15) \fmfpen{thin} \fmfleft{i} \fmfright{o} \fmf{plain}{i,o} \fmfdot{i,o} \fmfv{l.a=-90,l=$x$}{i} \fmfv{l.a=-90,l=$y$}{o} \end{fmfgraph*} \quad + \quad \begin{fmfgraph*}(40,15) \fmfpen{thin} \fmfleft{i} \fmfright{o} \fmf{plain}{i,v,v,o} \fmfdot{i,o,v} \fmfv{l.a=-90,l=$x$}{i} \fmfv{l.a=-90,l=$y$}{o} \fmfv{l.a=-90,l=$z$}{v} \end{fmfgraph*} \quad + \quad \begin{fmfgraph*}(40,15) \fmfpen{thin} \fmfleft{i} \fmfright{o} \fmf{plain}{i,v1,v2,o} \fmf{plain,left,tension=0.05}{v1,v2,v1} \fmfdot{i,o,v1,v2} \fmfv{l.a=-90,l=$x$}{i} \fmfv{l.a=-90,l=$y$}{o} \fmfv{l.a=-90}{v1,v2} \fmflabel{$z_{1}$}{v1} \fmflabel{$z_{2}$}{v2} \end{fmfgraph*} \quad + \enskip \dots \end{fmffile} \end{fmffile}$

\end{document}


Then I wanted to draw a few disconnected diagrams. This is where I got stuck. I'm trying to get this

Not very pretty I admit, but you get the idea, I hope. However, everything I tried so far did not compile. Is anybody sufficiently familiar with feynMF that could help me out here?

• not on topic. But do you know feynmp-auto? It issues the metapost run automatically so you do not have to do it yourself. No intermediate runs of metafont oder metapost anymore. – MaxNoe Dec 1 '14 at 22:23
• I'm not sure if the point is to draw the shapes you mention, or to have the ability to draw the images inline with text and such. If it is the latter, I had done this a while back: tex.stackexchange.com/questions/174654/…, which uses feynmp-auto. – Steven B. Segletes Dec 2 '14 at 0:28
• @MaxNoe Maybe you're right. However, I am trying to achieve a well-defined purpose with a specific package. So any answer should still be useful to others who run into similar problems. If no answers appear in the next two days, I'll delete this question. – Casimir Dec 2 '14 at 8:40
• @StevenB.Segletes The point is the former. How to draw the shapes in the second image? – Casimir Dec 2 '14 at 8:41
• I did not mean your question. I meant my comment. – MaxNoe Dec 2 '14 at 8:42

I contacted Thorsten Ohl, the creator of feynMF, and asked him if disconnected diagrams are possible with his package. His honest reply read

... it needs more tricks than I like, but it's possible.

In my opinion, his solution looks really good:

To reproduce or modify this output, use the following code

\documentclass{article}
\usepackage{graphicx}
\usepackage{feynmp}
\setlength{\unitlength}{1mm}
\DeclareGraphicsRule{*}{mps}{*}{}
\begin{document}
\begin{fmffile}{\jobname-pics}
\begin{center}
\begin{fmfgraph*}(30,30)
\fmfpen{thin}
\fmftop{t}
\fmfbottom{b}
\fmf{phantom}{t,v1,b}
\fmffreeze
\fmfi{plain}{vloc(__v1){(1,1)}..vloc(__t)..{(1,-1)}vloc(__v1)}
\fmfi{plain}{vloc(__v1){(-1,-1)}..vloc(__b)..{(-1,1)}vloc(__v1)}
\fmfdot{v1}
\fmfv{l=$z_1$,l.angle=180,l.dist=3thick}{v1}
\begin{fmfgraph*}(30,45)
\fmfpen{thin}
\fmftop{t}
\fmfbottom{b}
\fmf{phantom}{t,v1,v2,b}
\fmffreeze
\fmfi{plain}{vloc(__v1){(1,1)}..vloc(__t)..{(1,-1)}vloc(__v1)}
\fmfi{plain}{vloc(__v2){(-1,-1)}..vloc(__b)..{(-1,1)}vloc(__v2)}
\fmfi{plain}{vloc(__v1){(1.5,-1)}..{(-1.5,-1)}vloc(__v2)}
\fmfi{plain}{vloc(__v2){(-1.5,1)}..{(1.5,1)}vloc(__v1)}
\fmfdot{v1,v2}
\fmfv{l=$z_1$,l.angle=180,l.dist=3thick}{v1}
\fmfv{l=$z_2$,l.angle=180,l.dist=3thick}{v2}
\begin{fmfgraph*}(30,60)
\fmfpen{thin}
\fmftop{t}
\fmfbottom{b}
\fmf{phantom}{t,v1,v2,v3,b}
\fmffreeze
\fmfi{plain}{vloc(__v1){(1,1)}..vloc(__t)..{(1,-1)}vloc(__v1)}
\fmfi{plain}{vloc(__v3){(-1,-1)}..vloc(__b)..{(-1,1)}vloc(__v3)}
\fmfi{plain}{vloc(__v1){(1.5,-1)}..{(-1.5,-1)}vloc(__v2)}
\fmfi{plain}{vloc(__v2){(1.5,-1)}..{(-1.5,-1)}vloc(__v3)}
\fmfi{plain}{vloc(__v3){(-1.5,1)}..{(1.5,1)}vloc(__v2)}
\fmfi{plain}{vloc(__v2){(-1.5,1)}..{(1.5,1)}vloc(__v1)}
\fmfdot{v1,v2,v3}
\fmfv{l=$z_1$,l.angle=180,l.dist=3thick}{v1}
\fmfv{l=$z_2$,l.angle=180,l.dist=3thick}{v2}
\fmfv{l=$z_3$,l.angle=180,l.dist=3thick}{v3}
\end{fmfgraph*}
\end{center}
\begin{center}
\begin{fmfgraph*}(30,50)
\fmfpen{thin}
\fmftop{t}
\fmfbottom{b}
\fmf{phantom}{t,v1,dummy1,dummy2,v2,b}
\fmffreeze
\fmfi{plain}{vloc(__v1){(1,-1)}..{(-1,-1)}vloc(__v2)}
\fmfi{plain}{vloc(__v2){(-1,1)}..{(1,1)}vloc(__v1)}
\fmfi{plain}{vloc(__v1){(1,-3)}..{(-1,-3)}vloc(__v2)}
\fmfi{plain}{vloc(__v2){(-1,3)}..{(1,3)}vloc(__v1)}
\fmfdot{v1,v2}
\fmfv{l=$z_1$,l.angle=90,l.dist=3thick}{v1}
\fmfv{l=$z_2$,l.angle=-90,l.dist=3thick}{v2}
\end{fmfgraph*}
\end{center}
\end{fmffile}
\end{document}