====== Generating Feynman diagrams in a LaTeX file ======
You may need to compile the LaTeX file twice with ''-shell-escape''.
If you use TeXShop for macOS, you can include the following at the top of your document to automatically compile with ''pdflatexmk -shell-escape'':
% !TEX program = pdflatexmk
% !TEX parameter = -shell-escape
However, for Mac users however, [[http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/feynmp_latexit.html|feynmp in LaTeXiT]] is a better option to quickly build of Feynman diagrams as standalone images and use ''\includegraphics''.
===== Method 1: feynmp-auto =====
Load the ''feynmp-auto'' package, documented [[https://www.ctan.org/pkg/feynmp-auto|here]].
\usepackage{feynmp-auto}
% !TEX program = pdflatexmk
% !TEX parameter = -shell-escape
% https://wiki.physik.uzh.ch/cms/latex:feynman_file#method_1feynmp-auto
% https://www.overleaf.com/learn/latex/Feynman_diagrams#Other_packages_for_drawing_Feynman_diagrams
\documentclass[a4paper,12pt]{article}
\usepackage[margin=2.4cm]{geometry} % margins
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{feynmp-auto}
\begin{document}
This is a test file for Feynman diagrams. You need to compile twice: once to compile and save the Feynman diagrams, twice to include them in the typeset PDF file.
\begin{figure}[h]
\vspace{10mm}
\centering
\begin{fmffile}{feynman-compton}
\begin{fmfgraph*}(150,100)
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmflabel{$\gamma$}{i2}
\fmflabel{$e^-$}{i1}
\fmflabel{$\gamma$}{o1}
\fmflabel{$e^-$}{o2}
\fmf{photon}{i2,v2}
\fmf{fermion}{i1,v1,v2,o2}
\fmf{photon}{v1,o1}
\end{fmfgraph*}
\end{fmffile}
\vspace{5mm}
\caption{Feynman diagram for Compton scattering} %\label{compton}
\end{figure}
\end{document}
===== Method 2: feynmp-auto (standalone) =====
To create a standalone Feynman diagram, use the ''standalone'' class:
% !TEX program = pdflatexmk
% !TEX parameter = -shell-escape
% Author: Izaak Neutelings (February 2023)
\documentclass[10pt,border=2pt]{standalone}
\usepackage{amsmath}
\usepackage{feynmp-auto}
\begin{document}
\fmfframe(0,15)(0,15){ % padding (LTRB)
\begin{fmffile}{feynman-compton}
\begin{fmfgraph*}(110,80)
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmflabel{$\gamma$}{i2}
\fmflabel{$e^-$}{i1}
\fmflabel{$\gamma$}{o1}
\fmflabel{$e^-$}{o2}
\fmf{photon}{i2,v2}
\fmf{fermion}{i1,v1,v2,o2}
\fmf{photon}{v1,o1}
\end{fmfgraph*}
\end{fmffile}
}
\end{document}
To create one multiple PDF with one Feynman diagram per page, add the option ''multi=page,crop'' to the ''standalone'' class and wrap each ''fmffile'' around the ''page'' environment:
% !TEX program = pdflatexmk
% !TEX parameter = -shell-escape
% Author: Izaak Neutelings (February 2023)
\documentclass[10pt,border=2pt,multi=page,crop]{standalone}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{feynmp-auto}
\begin{document}
\begin{page}
\fmfframe(0,15)(0,15){ % padding (LTRB)
\begin{fmffile}{feynman-compton}
\begin{fmfgraph*}(110,80)
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmflabel{$\gamma$}{i2}
\fmflabel{$e^-$}{i1}
\fmflabel{$\gamma$}{o1}
\fmflabel{$e^-$}{o2}
\fmf{photon}{i2,v2}
\fmf{fermion}{i1,v1,v2,o2}
\fmf{photon}{v1,o1}
\end{fmfgraph*}
\end{fmffile}
}
\end{page}
\begin{page}
\fmfframe(0,15)(0,15){ % padding (LTRB)
\begin{fmffile}{feynman-scat}
\begin{fmfgraph*}(110,80)
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmflabel{$\mu^-$}{i1}
\fmflabel{$e^-$}{i2}
\fmflabel{$\mu^-$}{o1}
\fmflabel{$e^-$}{o2}
\fmf{fermion}{i1,v1,o1}
\fmf{fermion}{i2,v2,o2}
\fmf{photon,label=$\gamma$}{v1,v2}
\end{fmfgraph*}
\end{fmffile}
}
\end{page}
\end{document}
===== Method 3: Macro =====
This is a handy macro that allows you to compile Feynman graphs in LaTeX documents, without the need for extra scripts ([[https://tex.stackexchange.com/questions/20241/how-to-use-kile-with-feynmf-or-feynmp|source]]).
\usepackage{feynmp}
% macro to compile Feynman graphs without extra scripts
\DeclareGraphicsRule{*}{mps}{*}{}
\makeatletter
\def\endfmffile{
\fmfcmd{\p@rcent\space the end.^^J end.^^J endinput;}
\if@fmfio
\immediate\closeout\@outfmf
\fi
\ifnum\pdfshellescape>\z@
\immediate\write18{mpost \thefmffile}
\fi}
\makeatother
Simply include the macro in the preamble. (Tested only in TeXShop on a Mac.)
% !TEX program = pdflatexmk
% !TEX parameter = -shell-escape
% https://wiki.physik.uzh.ch/cms/latex:feynman_file#method_1feynmp-auto
% https://www.overleaf.com/learn/latex/Feynman_diagrams#Other_packages_for_drawing_Feynman_diagrams
\documentclass[a4paper,12pt]{article}
\usepackage[margin=2.4cm]{geometry} % margins
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{feynmp}
% macro to compile Feynman graphs without extra scripts
\DeclareGraphicsRule{*}{mps}{*}{}
\makeatletter
\def\endfmffile{
\fmfcmd{\p@rcent\space the end.^^J end.^^J endinput;}
\if@fmfio
\immediate\closeout\@outfmf
\fi
%\ifnum\pdfshellescape=\@ne
\ifnum\pdfshellescape>\z@
\immediate\write18{mpost \thefmffile}
\fi}
\makeatother
\begin{document}
This is a test file for Feynman diagrams. You need to compile twice: once to compile and save the Feynman diagrams, twice to include them in the typeset PDF file.
\begin{figure}[h]
\vspace{10mm}
\centering
\begin{fmffile}{feynman-compton}
\begin{fmfgraph*}(150,100)
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmflabel{$\gamma$}{i2}
\fmflabel{$e^-$}{i1}
\fmflabel{$\gamma$}{o1}
\fmflabel{$e^-$}{o2}
\fmf{photon}{i2,v2}
\fmf{fermion}{i1,v1,v2,o2}
\fmf{photon}{v1,o1}
\end{fmfgraph*}
\end{fmffile}
\vspace{5mm}
\caption{Feynman diagram for Compton scattering} %\label{compton}
\end{figure}
\end{document}
===== Output =====
{{ latex:feynman:feynman-auto.png ? 2000 }}