summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/tikz-feynman/tikz-feynman.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-01-20 22:51:24 +0000
committerKarl Berry <karl@freefriends.org>2016-01-20 22:51:24 +0000
commitd0454fbe3c966efaf3504805b7bb8c1f25d5e1a7 (patch)
tree6a0a534b6fa55ab8c328ef957a286d430257b763 /Master/texmf-dist/doc/latex/tikz-feynman/tikz-feynman.tex
parentb9de550d80dd542410b0e6c1599a1cac5d75d39c (diff)
tikz-feynman (20jan16)
git-svn-id: svn://tug.org/texlive/trunk@39441 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/tikz-feynman/tikz-feynman.tex')
-rw-r--r--Master/texmf-dist/doc/latex/tikz-feynman/tikz-feynman.tex1788
1 files changed, 1788 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/tikz-feynman/tikz-feynman.tex b/Master/texmf-dist/doc/latex/tikz-feynman/tikz-feynman.tex
new file mode 100644
index 00000000000..98173d79845
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tikz-feynman/tikz-feynman.tex
@@ -0,0 +1,1788 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ-Feynman
+% Feynman Diagrams with TikZ
+% Copyright (C) 2015 Joshua Ellis
+%
+%
+% This LaTeX file is free: you can redistribute it and/or modify it under the
+% terms of the GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option) any later
+% version.
+%
+% This is distributed in the hope that it will be useful, but WITHOUT ANY
+% WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+% A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% HEADER
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\pgfautoxrefs{1}
+\documentclass[a4paper,final]{ltxdoc}
+
+\usepackage{etex}
+
+%% Formatting
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage[vmargin=4cm, hmargin=3cm]{geometry} % Customize text width, page height, margins, etc.
+% \usepackage{multicol} % {multicols}{n} environment
+% \usepackage{pdflscape} % {landscape} environment
+
+%\usepackage{setspace} % Line spacing
+%\singlespacing % 1-spacing (default)
+%\onehalfspacing % 1,5-spacing
+%\doublespacing % 2-spacing
+
+\usepackage{fontspec} % Allows other fonts to be specified
+\setmainfont{EB Garamond}[
+ Contextuals={Alternate},
+ Numbers=OldStyle,
+]
+\setmonofont{Inconsolata-g}[
+ Scale=MatchLowercase,
+]
+\newfontface\swshape{EB Garamond 12 Italic}[Style=Swash]
+
+\usepackage{microtype} % Fine small typographical details
+\usepackage{titlesec} % Change section heading font
+\titleformat*{\section}{\huge\scshape}
+\titleformat*{\subsection}{\Large\scshape}
+\titleformat*{\subsubsection}{\large\scshape}
+\titleformat*{\paragraph}{\scshape}
+
+\usepackage[perpage]{footmisc}
+\usepackage{enumitem} % Easily customize lists
+\setlist[description]{font=\normalfont\scshape}
+
+%% Change the Table of Contents fonts
+\usepackage{tocloft}
+\renewcommand{\cftsecfont}{\normalfont\scshape}
+\setlength\cftbeforesecskip{0pt}
+\setcounter{tocdepth}{2}
+
+%% Language
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage[UKenglish]{babel} % Set up the language
+\usepackage{csquotes}
+\usepackage{siunitx} % Provides \SI{1}{\metre}, also \ang{90}.
+\usepackage{textcomp}
+
+%% Graphics & Figure
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{graphicx} % Allow graphics to be included
+\usepackage{xcolor} % Define and use colours
+% \usepackage{subcaption} % Subfigures inside a figure
+
+% Keep all pictures in the './img/' sub-directory.
+\graphicspath{{./img/}}
+
+\usepackage{tikz} % Powerful drawing language
+\usepackage{tikz-feynman}
+\makeatletter
+\tikzfeynmanset{compat=\tikzfeynman@version@major.\tikzfeynman@version@minor.\tikzfeynman@version@patch}
+\makeatother
+
+%% TikZ pictures and plots can significantly increase the time it takes to
+%% produce the output. The `external` TikZ library library defers the creation
+%% of these figures to a sub-process which creates a separate PDF file which is
+%% then simply imported into the main document. To call the sub-process, you
+%% have to execute the appropriate makefile. If you are using LatexMk, you can
+%% use the `.latexmkrc` to automatically do this for you.
+%%
+%% The following setup works on Linux, and should work on OS X too.
+% \usetikzlibrary{external}
+% \tikzexternalize[shell escape=-shell-escape, prefix=pgf-img/]
+% \immediate\write18{mkdir -p pgf-img}
+% \tikzset{
+% external/mode=list and make,
+% external/system call={
+% lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname="\image" "\texsource" || rm "\image.pdf"},
+% }
+
+%% Math Packages
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{amsmath} % The core math package
+\usepackage{amssymb} % Defines additional math fonts
+\usepackage{mathtools} % Various extra maths functions
+% \usepackage{cancel} % Show cancellations with \cancel{}
+% \usepackage{autonum} % Only number referenced equations (must be loaded after cleverref)
+\usepackage{dsfont}
+
+\usepackage[cmintegrals,varg]{newtxmath} % Nice math with Garamond
+
+%% Define \withnumber which forces the line to have number
+\newcommand{\withnumber}{\refstepcounter{equation}\tag{\theequation}}
+
+%% Allows page breaks in math (1 = avoid if possible, 4 = whenever)
+%% Page breaks can be avoided at particular places by using \\*
+\allowdisplaybreaks[2]
+
+%% Tables
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{array} % New column types, including >{}x<{}
+\usepackage{booktabs} % Provides nicer horizontal lines
+\usepackage{multirow} % Allows cells to span multiple rows
+%\usepackage{longtable} % Allows for tables to span multiple pages
+
+%% Define the maths version of clr columns.
+\newcolumntype{C}{>{\(}c<{\)}}
+\newcolumntype{L}{>{\(}l<{\)}}
+\newcolumntype{R}{>{\(}r<{\)}}
+
+%% Other Packages
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{listings} % Code listings
+\usepackage{minted} % Use Pygments
+\usepackage{fp} % Floating point arithmetics
+\usepackage{makeidx} % Index creation
+\usepackage{xr} % Cross-referencing
+\usepackage[orig,UKenglish]{isodate} % Handle dates
+
+\usepackage{hyperref} % Automatically inserts hyperlinks.
+\usepackage{cleveref} % Use `\cref{}` to reference anything
+
+\usepackage{autonum}
+
+%% Bibliography
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% hyperref should be loaded first
+\usepackage[
+ backend=biber,
+ autocite=inline,
+ style=phys,
+ biblabel=brackets,
+]{biblatex}
+
+\addbibresource{references.bib}
+
+%% Other modifications
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Modify the skip after each paragraph
+\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
+\setlength{\parindent}{0pt}
+
+\providecommand{\LuaTeX}{Lua\TeX}
+\providecommand{\tikzfeynmanname}{\tikzname-Feynman}
+\providecommand{\pgfmanual}{\href{http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf}{\tikzname{} manual}}
+
+\IfFileExists{pgfmanual-en-macros}{
+ \let\attribute\relax
+ \input{pgfmanual-en-macros}
+}{
+ \PackageError{tikz-feynman-manual}{
+This document requires the file pgfmanual-en-macros.tex (distributed
+with pgf) to compile. Please place a copy of that file in the current
+directory}{}}
+
+\makeindex
+
+\pgfkeys{
+ /pdflinks/search key prefixes in={/tikzfeynman/}
+ /pdflinks/internal link prefix=tikzfeynman,
+ %
+ /pdflinks/warnings=false,
+ % for debugging:
+ /pdflinks/show labels=false,
+}
+
+\makeatletter
+%% Make table of content heading smaller
+\renewcommand\tableofcontents{%
+ \section*{\normalfont\large\scshape\contentsname}%
+ \vspace{-1.5\baselineskip}%
+ \@starttoc{toc}%
+}
+\makeatother
+
+%% Define some slightly nicer colors
+\definecolor{link-color}{RGB}{96 0 0}
+\definecolor{cite-color}{RGB}{0 96 0}
+\definecolor{file-color}{RGB}{0 0 96}
+\definecolor{url-color}{RGB}{0 0 96}
+\definecolor{link-border-color}{RGB}{255 159 159}
+\definecolor{cite-border-color}{RGB}{159 255 159}
+\definecolor{file-border-color}{RGB}{159 159 255}
+\definecolor{url-border-color}{RGB}{159 159 255}
+
+\hypersetup{
+ pdfborder=0 0 0,
+}
+
+%% Change the abstract style
+\renewenvironment{abstract}{
+ \begin{center}
+ \begin{minipage}{0.9\textwidth}
+ \begin{center}
+ \Large
+ Abstract
+ \end{center}\vspace*{-1em}
+ \rule{\textwidth}{1pt}
+}{
+ \par\noindent
+ \rule{\textwidth}{1pt}
+ \end{minipage}
+ \end{center}
+}
+
+%% Put the abstract only on the arXiv version
+\newif\ifarxiv
+\arxivfalse
+
+%% Acknowledgements go in two different places depending on whether it is the
+%% arXiv version or not. Have the common code here.
+\def\acknowledgements{
+ \subsection*{Acknowledgements}
+ \label{subsec:acknowledgements}
+
+ The original proof-of-concept for using \tikzname{} to draw Feynman diagrams
+ was done by the user `\href{http://tex.stackexchange.com/users/2552}{Jake}' on
+ the \TeX{} StackExchange. His original answer can be viewed at:
+ \url{http://tex.stackexchange.com/a/87395/26980}.
+
+ I must also thank all the people who have used the development versions of
+ \tikzfeynmanname{} and offered suggestions to improve it and found bugs for me
+ to fix.
+}
+
+%% Center codeexample
+\makeatletter
+\let\codeexample@orig=\codeexample
+\let\endcodeexample@orig=\endcodeexample
+\def\codeexample{
+ \begin{center}
+ \codeexample@orig
+}
+\def\endcodeexample{
+ \endcodeexample@orig
+ \end{center}
+}
+
+%% Document Information
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+\newcommand{\@keywords}{}
+\newcommand{\keywords}[1]{\renewcommand{\@keywords}{#1}}
+\newcommand{\@institution}{}
+\newcommand{\institution}[1]{\renewcommand{\@institution}{#1}}
+
+\AtBeginDocument{
+ \hypersetup{
+ pdftitle={\@title},
+ pdfauthor={\@author},
+ pdfkeywords={\@keywords},
+ }
+}
+\makeatother
+
+\title{\tikzfeynmanname}
+\author{Joshua \textsc{Ellis}}
+\institution{
+ ARC Centre of Excellence for Particle Physics at the Terascale \\
+ School of Physics, The University of Melbourne \textsc{vic} 3010, Australia
+}
+\keywords{Feynman diagram, TeX, LaTeX, TikZ, pgf, TikZ-Feynman}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% DOCUMENT
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+\pagenumbering{roman}
+
+\begin{titlepage}
+ \makeatletter
+ \begin{center}
+ \vspace*{1em}
+ \tikz\node[scale=1.5]{%
+ \color{gray}\Huge\ttfamily \char`\{\textcolor{red!75!black}{\@title}\char`\}};
+
+
+ \vspace{0.5em}
+ {\huge Feynman diagrams with \tikzname}
+
+ \vspace{0.7em}
+ {Version \texttt{\tikzfeynman@version} \qquad \origdate\printdateTeX{\tikzfeynman@date}}
+
+ \vspace{1.3em}
+ {by \@author} \\[1em]
+ {\@institution}
+ \end{center}
+ \makeatother
+
+ \vfill
+
+\begin{codeexample}[graphic=white]
+\feynmandiagram [large, vertical=e to f] {
+ a -- [fermion] b -- [photon, momentum=\(k\)] c -- [fermion] d,
+ b -- [fermion, momentum'=\(p_{1}\)] e -- [fermion, momentum'=\(p_{2}\)] c,
+ e -- [gluon] f,
+ h -- [fermion] f -- [fermion] i;
+};
+\end{codeexample}
+
+ \vfill
+
+ \begin{multicols}{2}
+ \tableofcontents
+ \end{multicols}
+\end{titlepage}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% CONTENT
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\pagenumbering{arabic}
+
+\ifarxiv
+\begin{abstract}
+ \tikzfeynmanname{} is a \LaTeX{} package allowing Feynman diagrams to be
+ easily generated within \LaTeX{} with minimal user instructions and without
+ the need of external programs. It builds upon the \tikzname{} package and
+ leverages the graph placement algorithms from \tikzname{} in order to automate
+ the placement of many vertices. \tikzfeynmanname{} still allows fine-tuned
+ placement of vertices so that even complex diagrams can still be generated with
+ ease.
+\end{abstract}
+\fi
+
+\section{Introduction}
+\label{sec:introduction}
+
+\tikzfeynmanname{} provides a new way to draw Feynman diagrams in \LaTeX{} that
+does not rely on external programs and uses a clear extensible syntax.
+
+Feynman diagrams provide a description of interactions of subatomic particles in
+a form that is clearer and more succinct than the corresponding mathematical
+description. They were introduced by \citeauthor{PhysRev.76.769} and first
+appear in his paper \citetitle{PhysRev.76.769} \cite{PhysRev.76.769}. Since
+then, \LaTeX{} has become widely used to type-set scientific papers and
+currently, two leading methods of drawing Feynman diagrams in \LaTeX{} are
+\href{https://www.ctan.org/pkg/feynmf}{|feynMF|/|feynMP|} \cite{feynmf} and
+\href{https://www.ctan.org/pkg/axodraw}{|AxoDraw|} \cite{axodraw}, with the
+latter also featuring a \textsc{gui} front-end called
+\href{http://jaxodraw.sourceforge.net}{|JaxoDraw|} \cite{jaxodrawV1,jaxodrawV2}.
+
+Both |feynMF|/|feynMP| and |AxoDraw| have quite complicated syntax. As an
+example, the code to generate an \(\ell\ell \to \ell\ell\) scattering Feynman
+diagram in each package is:
+\begin{center}
+ \begin{tabular}{p{0.3\linewidth} p{0.27\linewidth} p{0.34\linewidth}}
+ |AxoDraw| & |feynMF|/|feynMP| & \tikzfeynmanname{} \\[-2em]
+\begin{codeexample}[execute code=false]
+\begin{picture}
+\ArrowLine(190,270)(160,300)
+\ArrowLine(160,240)(190,270)
+\ArrowLine(270,300)(240,270)
+\ArrowLine(240,270)(270,240)
+\Photon(190,270)(240,270){4}{4.5}
+\Vertex(190,270){1.5}
+\Vertex(240,270){1.5}
+\end{picture}
+\end{codeexample}
+ &
+\begin{codeexample}[execute code=false]
+\begin{fmfchar*}(40,30)
+\fmfpen{thick}
+\fmfleft{i1,i2}
+\fmfright{o1,o2}
+\fmf{fermion}{i1,v1,o1}
+\fmf{fermion}{i2,v2,o2}
+\fmf{photon,label=$q$}{v1,v2}
+\fmfdot{v1,v2}
+\end{fmfchar*}
+\end{codeexample}
+ &
+\begin{codeexample}[execute code=false]
+\feynmandiagram [horizontal=a to b] {
+ i1 -- [fermion] a -- [fermion] i2,
+ a -- [photon] b,
+ f1 -- [fermion] b -- [fermion] f2,
+};
+\end{codeexample} \\[-2em]
+ \end{tabular}
+\end{center}
+The learning curves for both |AxoDraw| and |feynMF|/|feynMP| are quite steep,
+and although this is partly resolved by using |JaxoDraw|, this requires an
+external program. In addition, the creation of Feynman diagrams in
+|feynMF|/|feynMP| requires further processing outside of \LaTeX{}.
+
+\tikzfeynmanname{} on the other hand uses a clear syntax and delegates the
+positioning of vertices to algorithms originally developed by
+\citeauthor{hu2005} \cite{hu2005}, and \citeauthor{eades1991} \cite{eades1991},
+both of which were implemented into \tikzname{} by \citeauthor{pohlmann2011}
+\cite{pohlmann2011}. Since \tikzfeynmanname{} is built on \tikzname{}, users
+can harness the power and extensibilty of \tikzname{} \cite{tikz} making it easy
+to extend to accommodate individual needs. In order to produce more complicated
+diagrams, relative or absolute positioning of vertices can also be used in
+\tikzfeynmanname{} so that any diagram can be generated with relative ease.
+
+\tikzfeynmanname{} is made available through the
+\href{https://ctan.org/pkg/tikz-feynman}{Comprehensive \TeX{} Archive Network
+ (\textsc{ctan})}\footnote{\url{https://ctan.org/pkg/tikz-feynman}} and can
+also be downloaded from the
+\href{http://www.jpellis.me/projects/tikz-feynman}{project
+ page}\footnote{\url{http://www.jpellis.me/projects/tikz-feynman}}. The
+project is open source and contributions are welcome. The management of bugs
+and feature requests is done at
+\href{https://github.com/JP-Ellis/tikz-feynman}{Github}\footnote{\url{https://github.com/JP-Ellis/tikz-feynman}}.
+
+\tikzfeynmanname{}'s versioning will approximately follow
+\href{http://semverg.org}{semantic versioning}. This means that changes in the
+third number (|1.0.0| to |1.0.1|) will consist of bug fixes and very minor
+changes but they should not change the output otherwise\footnote{That is, with
+ the exception of the bug that they are fixing.}. Changes in the second number
+(|1.0.0| to |1.1.0|) will consist of new features but everything should be
+backwards compatible. Finally, changes in the first number (|1.0.0| to |2.0.0|)
+indicates a major change in the package and code written for |1.0.0| is not
+guaranteed to work on |2.0.0|. The intended version of this package to use
+should be indicated in the preamble with |\tikzfeynmanset{compat=x.y.z}| so the
+user may be informed of any discrepancy. If needed, earlier versions may be
+downloaded from the \href{http://www.jpellis.me/projects/tikz-feynman}{project
+ page}\footnote{\url{http://www.jpellis.me/projects/tikz-feynman}}.
+
+\subsection*{Licence}
+\label{subsec:licence}
+
+This \emph{documentation} may be redistributed and/or modified under the terms
+of the \textsc{gnu} General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option) any later
+version.
+
+The \emph{code of this package} may be distributed and/or modified under the
+conditions of the \LaTeX{} Project Public License, either version 1.3 of this
+license or (at your option) any later version.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Joshua Ellis.
+
+This package is distributed in the hope that it will be useful, but
+\textsc{without any warranty}; without even the implied warranty of
+\textsc{merchantability} or \textsc{fitness for a particular purpose}.
+
+\ifarxiv\else
+\acknowledgements
+\fi
+
+
+\clearpage
+\section{Tutorial}
+\label{sec:tutorial}
+
+\subsection{Loading the Package}
+\label{sibsec:loading_the_package}
+
+After installing the package, the \tikzfeynmanname{} package can be loaded with
+|\usepackage{tikz-feynman}| in the preamble. It is recommend that you also
+place |\tikzfeynmanset{compat=1.0.0}| in the preamble to ensure that a new
+versions of \tikzfeynmanname{} do not produce any undesirable changes without
+warning.
+
+\subsection{A First Diagram}
+\label{subsec:a_first_diagram}
+
+Feynman diagrams can be declared with the |\feynmandiagram| command. It is
+analogous to the |\tikz| command from \tikzname~and requires a final semi-colon
+(|;|) to finish the environment. For example, a simple \(s\)-channel diagram
+is:
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ i1 -- [fermion] a -- [fermion] i2,
+ a -- [photon] b,
+ f1 -- [fermion] b -- [fermion] f2,
+};
+\end{codeexample}
+
+Let's go through this example line by line:
+\begin{description}
+\item[Line 1] |\feynmandiagram| introduces the Feynman diagram and allows for
+ optional arguments to be given in the brackets \texttt{[\meta{options}]}. In
+ this instance, |horizontal=a to b| orients the algorithm outputs such that the
+ line through vertices |a| and |b| is horizontal.
+\item[Line 2] The left fermion line is drawn by declaring three vertices (|i1|,
+ |a| and |i2|) and connecting them with edges |--|. Just like the
+ |\feynmandiagram| command above, each edge also take optional arguments
+ specified in brackets \texttt{[\meta{options}]}. In this instance, we want
+ these edges to have arrows to indicate that they are fermion lines, so we add
+ the |fermion| style to them.
+
+ As you will see later on, optional arguments can also be given to the vertices
+ in exactly the same way.
+\item[Line 3] This edge connects vertices |a| and |b| with an edge styled as a
+ photon. Since there is already a vertex labelled |a|, the algorithm will
+ connect it to a new vertex labeled |b|.
+\item[Line 4] This line is analogous to line 2 and introduces two new vertices,
+ |f1| and |f2|. It re-uses the previously labelled |b| vertex.
+\item[Line 5] Finish the declaration of the Feynman diagram. The final
+ semi-colon (|;|) is important.
+\end{description}
+
+The name given to each vertex in the graph does not matter. So in this example,
+|i1|, |i2| denote the initial particles; |f1|, |f2| denotes the final particles;
+and |a|, |b| are the end points of the propagator. The only important aspect is
+that what we called |a| in line 2 is also |a| in line 3 so that the underlying
+algorithm treats them as the same vertex.
+
+The order in which vertices are declared does not matter as the default
+algorithm re-arranges everything\footnote{It is possible for the algorithm to
+ get a litte confused in some circumstances, but these cases should be rather
+ rare. For some algorithms (such as the |layered~layout|), the order in which
+ vertices are introduces \emph{does} matter. This is documented in
+ \cref{subsubsec:diagram_keys}.}. For example, one might prefer to draw the
+fermion lines all at once, as with the following example (note also that the way
+we named vertices is completely different):
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=f2 to f3] {
+ f1 -- [fermion] f2 -- [fermion] f3 -- [fermion] f4,
+ f2 -- [photon] p1,
+ f3 -- [photon] p2,
+};
+\end{codeexample}
+
+\subsection{Adding Styles}
+\label{subsec:adding_styles}
+
+So far, the examples have only used the |photon| and |fermion| styles. The
+\tikzfeynmanname{} package comes with quite a few extra styles for edges and
+vertices which are all documented over in \cref{sec:documentation}. As an
+example, it is possible to add momentum arrows with |momentum=|\meta{text}, and
+in the case of end vertices, the particle can be labelled with
+|particle=|\meta{text}. As an example, we take the generic \(s\)-channel
+diagram from \cref{subsec:a_first_diagram} and make it a \(e^{+}e^{-} \to
+\mu^{+}\mu^{-}\) diagram:
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ i1 [particle=\(e^{-}\)] -- [fermion] a -- [fermion] i2 [particle=\(e^{+}\)],
+ a -- [photon, edge label=\(\gamma\), momentum'=\(k\)] b,
+ f1 [particle=\(\mu^{+}\)] -- [fermion] b -- [fermion] f2 [particle=\(\mu^{-}\)],
+};
+\end{codeexample}
+In addition to the style keys documented below, style keys from \tikzname{} can
+be used as well:
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ i1 [particle=\(e^{-}\)] -- [fermion, very thick] a -- [fermion, opacity=0.2] i2 [particle=\(e^{+}\)],
+ a -- [red, photon, edge label=\(\gamma\), momentum'={[arrow style=red]\(k\)}] b,
+ f1 [particle=\(\mu^{+}\)] -- [fermion, opacity=0.2] b -- [fermion, very thick] f2 [particle=\(\mu^{-}\)],
+};
+\end{codeexample}
+For a list of all the various styles that \tikzname{} provides, have a look at
+the \pgfmanual; it is extremely thorough and provides many usage examples.
+
+\subsection{When the Algorithm Isn't Enough}
+\label{subsec:when_the_algorithm_isnt_enough}
+
+By default, the |\feynmandiagram| and |\diagram| commands use the
+|spring layout| algorithm to place all the edges\footnote{For more details on
+ this layout and any other graph layouts available, see
+ \cref{subsubsec:diagram_keys}}. The |spring layout| algorithm attempts to
+`spread out' the diagram as much as possible which---for most simpler
+diagrams---gives a satisfactory result; however in some cases, this does not
+produce the best diagram and this section will look at alternatives. There are
+three main alternatives:
+\begin{description}
+\item[Add invisible edges] While still using the default algorithm, it is
+ possible to force certain vertices to be closer together by adding extra edges
+ and making them invisible through |draw=none|. The algorithm will treat these
+ extra edges in the same way, but they are simply not drawn at the end;
+
+\item[Use a different algorithm] In some circumstances, other algorithms may be
+ better suited. Some of the other graph layout algorithms are listed in
+ \cref{subsubsec:diagram_keys}, and an exhaustive list of all algorithms and
+ their parameters is given in the \pgfmanual;
+
+\item[Manual placement] As a last resort, very complicated or unusual diagrams
+ will require each vertex to be manually placed.
+\end{description}
+
+\subsubsection{Invisible Edges}
+\label{subsubsec:invisible_edges}
+
+The underlying algorithm treats all edges in exactly the same way when
+calculating where to place all the vertices, and the actual drawing of the
+diagram (after the placements have been calculated) is done separately.
+Consequently, it is possible to add edges to the algorithm, but prevent them
+from being drawn by adding |draw=none| to the edge style.
+
+This is particularly useful if you want to ensure that the initial or final
+states remain closer together than they would have otherwise as illustrated in
+the following example (note that |opacity=0.2| is used instead of |draw=none| to
+illustrate where exactly the edge is located).
+
+\begin{codeexample}[]
+% No invisible to keep the two photons together
+\feynmandiagram [small, horizontal=a to t1] {
+ a [particle=\(\pi^{0}\)] -- [scalar] t1 -- t2 -- t3 -- t1,
+ t2 -- [photon] p1 [particle=\(\gamma\)],
+ t3 -- [photon] p2 [particle=\(\gamma\)],
+};
+\end{codeexample}
+\begin{codeexample}[]
+% Invisible edge ensures photons are parallel
+\feynmandiagram [small, horizontal=a to t1] {
+ a [particle=\(\pi^{0}\)] -- [scalar] t1 -- t2 -- t3 -- t1,
+ t2 -- [photon] p1 [particle=\(\gamma\)],
+ t3 -- [photon] p2 [particle=\(\gamma\)],
+ p1 -- [opacity=0.2] p2,
+};
+\end{codeexample}
+
+\subsubsection{Alternative Algorithms}
+\label{subsubsec:alternative_algorithms}
+
+The graph drawing library from \tikzname{} has several different algorithms to
+position the vertices\footnote{See \cref{subsubsec:diagram_keys} for some
+ alternative algorithms.} By default, |\diagram| and |\feynmandiagram| use the
+|spring layout| algorithm to place the vertices. The |spring layout| attempts
+to spread everything out as much as possible which, in most cases, gives a nice
+diagram; however, there are certain cases where this does not work. A good
+example where the |spring layout| doesn't work are decays where we have the
+decaying particle on the left and all the daughter particles on the right.
+\begin{codeexample}[]
+% Using the default spring layout
+\feynmandiagram [horizontal=a to b] {
+ a [particle=\(\mu^{-}\)] -- [fermion] b -- [fermion] f1 [particle=\(\nu_{\mu}\)],
+ b -- [boson, edge label=\(W^{-}\)] c,
+ f2 [particle=\(\overline \nu_{e}\)] -- [fermion] c -- [fermion] f3 [particle=\(e^{-}\)],
+};
+\end{codeexample}
+\begin{codeexample}[]
+% Using the layered layout
+\feynmandiagram [layered layout, horizontal=a to b] {
+ a [particle=\(\mu^{-}\)] -- [fermion] b -- [fermion] f1 [particle=\(\nu_{\mu}\)],
+ b -- [boson, edge label'=\(W^{-}\)] c,
+ c -- [anti fermion] f2 [particle=\(\overline \nu_{e}\)],
+ c -- [fermion] f3 [particle=\(e^{-}\)],
+};
+\end{codeexample}
+You may notice that in addition to adding the |layered layout| style to
+|\feynmandiagram|, we also changed the order in which we specify the vertices.
+This is because the |layered layout| algorithm does pay attention to the order
+in which vertices are declared (unlike the default |spring layout|); as a
+result, |c--f2, c--f3| has a different meaning to |f2--c--f3|. In the former
+case, |f2| and |f3| are both on the layer below |c| as desired; whilst the
+latter case places |f2| on the layer above |c| (that, the same layer as where
+the \(W^{-}\) originates).
+
+\subsubsection{Manual Placement}
+\label{subsubsec:manual_placement}
+
+In more complicated diagrams, it is quite likely that none of the algorithms
+work, no matter how many invisible edges are added. In such cases, the vertices
+have to be placed manually. \tikzfeynmanname{} allows for vertices to be
+manually placed by using the |\vertex| command.
+
+The |\vertex| command is available only within the |feynman| environment (which
+itself is only available inside a |tikzpicture|). The |feynman| environment
+loads all the relevant styles from \tikzfeynmanname{} and declares additional
+\tikzfeynmanname-specific commands such as |\vertex| and |\diagram|. This is
+inspired from PGFPlots and its use of the |axis| environment.
+
+The |\vertex| command is very much analogous to the |\node| command from
+\tikzname{}, with the notable exception that the vertex contents are optional;
+that is, you need not have |{|\meta{text}|}| at the end. In the case where |{}|
+is specified, the vertex automatically is given the |particle| style, and
+otherwise it is a usual (zero-sized) vertex.
+
+To specify where the vertices go, it is possible to give explicit coordinates
+though it is probably easiest to use the |positioning| library from \tikzname{}
+which allows vertices to be placed relative to existing vertices\footnote{The
+ \pgfmanual{} has some extensive documentation explaining how to use the
+ |positioning| library.}. By using relative placements, it is possible to
+easily tweak one part of the graph and everything will adjust accordingly---the
+alternative being to manually adjust the coordinates of every affected vertex.
+
+Finally, once all the vertices have been specified, the |\diagram*| command is
+used to specify all the edges. This works in much the same way as |\diagram|
+(and also |\feynmandiagram|), except that it uses an very basic algorithm
+to place new nodes and allows existing (named) nodes to be included. In order
+to refer to an existing node, the node must be given in parentheses.
+
+This whole process of specifying the nodes and then drawing the edges between
+them is shown below for the muon decay:
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \vertex (a) {\(\mu^{-}\)};
+ \vertex [right=of a] (b);
+ \vertex [above right=of b] (f1) {\(\nu_{\mu}\)};
+ \vertex [below right=of b] (c);
+ \vertex [above right=of c] (f2) {\(\overline \nu_{e}\)};
+ \vertex [below right=of c] (f3) {\(e^{-}\)};
+
+ \diagram* {
+ (a) -- [fermion] (b) -- [fermion] (f1),
+ (b) -- [boson, edge label'=\(W^{-}\)] (c),
+ (c) -- [anti fermion] (f2),
+ (c) -- [fermion] (f3),
+ };
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\clearpage
+\section{Documentation}
+\label{sec:documentation}
+
+\subsection{Commands \emph{\&} Environments}
+\label{subsec:commands}
+
+\begin{command}{\tikzfeynmanset\marg{options}}
+ This command will process \meta{options} using |\pgfkeys| with the default
+ path set to |/tikzfeynman|. Typically, \meta{options} will be a
+ comma-separated list of the form \meta{key}|=|\meta{value}, though the full
+ power of the mechanism behind |\pgfkeys| can be used (see the \pgfmanual{} for
+ a complete description).
+
+ Typically, this is used in the preamble of the document to add or change
+ certain keys for the whole document.
+\end{command}
+
+\begin{command}{\feynmandiagram\opt{\oarg{TikZ options}\oarg{diagram options}}\marg{diagram instructions}}
+ This commands creates a |{tikzpicture}| and |{feynman}| environment, and
+ places a |\diagram| inside with the provided \meta{diagram instruction}.
+ Please refer to the documentation for |\diagram| for the \meta{diagram
+ instruction} syntax.
+
+ The optional arguments specified in \meta{tikz options} are passed on to the
+ |{tikzpicture}|, and the \meta{diagram options} are passed on to |\diagram|.
+ If only one optional argument is given, then the optional arguments are given
+ to both. A single optional argument will usually suffice as most keys are
+ recognized by both commands; however, in the event that a key is not
+ recognized, both options are provided.
+\end{command}
+
+\begin{environment}{{feynman}\opt{\oarg{options}}}
+ The |{feynman}| environment is where all the drawing of Feynman diagrams takes
+ place. It makes all the \tikzfeynmanname{} styles available and defines
+ commands such as |\vertex| and |\diagram| which are otherwise unavailable
+ outside of this environment. The |{feynman}| environment is only accessible
+ within the |{tikzpicture}| environment.
+
+ Options which are passed in \meta{options} apply for the whole environment in
+ the same way that the |{scope}| environment work in \tikzname.
+
+ \begin{command}{\vertex\opt{\oarg{options}} (\meta{name}) \opt{at (\meta{coordinate})} \opt{\marg{contents}};}
+ Defines a new vertex with the provided \meta{name}. If \meta{contents} is
+ not provided, the resulting vertex will have zero size. On the other hand,
+ if \meta{contents} is provided, the |particle=|\meta{contents} style is
+ applied. Additional styles can be applied to the vertex through
+ \meta{options}.
+
+ The final semicolon (|;|) is vital for this command since without it, the
+ \LaTeX{} engine will not know when the |\vertex| command ends.
+ Additionally, this command \emph{cannot} be chained like one can do with the
+ inbuilt \tikzname{} commands.
+
+ This command is only available with the |{feynman}| environment.
+ \end{command}
+
+ \begin{command}{\diagram\opt{\oarg{options}}\marg{diagram instructions}}
+ Begins a new diagram using the |spring layout|. Keys passed through
+ \meta{options} can include general \tikzname{} keys, graph-specific keys and
+ any applicable \tikzfeynmanname{} keys too. Other algorithms (such as |tree
+ layout|) can be passed through \meta{options} and that will override the
+ |spring layout|.
+
+ The syntax for the \meta{diagram instructions} is thoroughly described in
+ the \pgfmanual, but in the context of this package, it will usually suffice
+ to know the following:
+ \begin{itemize}
+ \item Vertices within the graph are specified with no delimiters (i.e.~no
+ parenthesis, no brackets) and only require spaces around either side. In
+ order to refer to a vertex defined outside of the |\diagram| command, its
+ name must be given in parenthesis: |(|\meta{name}|)|. Note that in order
+ to refer to external vertices, one must use |\diagram*| as most algorithms
+ (including the default |spring layout|) are incompatible with vertices
+ defined outside of the algorithm.
+
+ When a vertex name is used multiple times, the underlying algorithm will
+ consider them to be the same vertex and introduces additional edges.
+
+ Options can be given to the vertex in brackets after the name: \meta{name}
+ |[|\meta{options}|]|. For vertices defined outside of the |\diagram|
+ command, these options should be specified when the vertex is first
+ declared.
+
+ \item The edges between each pair of vertices is specified with |--|, and
+ these can be chained together: \verb|a -- b -- c|. In order to pass a
+ style to the edge, it is specified in brackets after the dashed:
+ |-- | \oarg{options}. For example, to make on edge red, one would use
+ |-- [red]|.
+
+ \item A comma (|,|)---or equivalently a semicolon (|;|)---specifies the end
+ of a sequence of edges and vertices and allows for another sequence to be
+ started. So \verb|a -- b, c -- d| will create two disconnected edges.
+
+ \item Subgroups (aking to scopes in \tikzname) are specified with braces:
+ |{|\oarg{options}\meta{diagram instructions}|}|. This can be quite
+ useful when a lot of edges or nodes share a common style. For example,
+ one could use |{[edges={fermion}]|\verb| a -- b -- c, x -- y -- z}| and
+ every edge will have the |fermion| style applied automatically.
+
+ Another useful feature of subgroups is that an edge to a group will create
+ an edge to each vertex in that subgroup as shown below. The example also
+ shows how they can be nested which in some cases (such as with a
+ |layered layout|) can be extremely useful.
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, horizontal=a1 to b3] {
+ a1 -- {b1, b2, b3 -- {c1, c2 -- d1}}
+};
+\end{codeexample}
+ \end{itemize}
+ \end{command}
+
+ \begin{command}{\diagram*\opt{\oarg{options}}\marg{diagram instructions}}
+ Same as |\diagram|, but instead of using the |spring layout| algorithm to
+ place the vertices, this uses the most basic algorithm. This basic
+ algorithm in most cases will not produce a satisfactory diagram, but is
+ intended to be used with vertices are declared and positioned outside of the
+ |\diagram*| command. Essentially, |\diagram*| should be used only to
+ connect existing vertices.
+ \end{command}
+\end{environment}
+
+
+
+\subsection{Keys \emph{\&} Styles}
+\label{subsec:Keys}
+
+The various styles and options that allow the Feynman diagrams to be customized
+are defined in what \tikzname{} calls \emph{keys}. The documentation includes
+all keys which are defined within \tikzfeynmanname{} which all begin with the
+prefix |/tikzfeynman|. In addition, a few of the keys from \tikzname{} itself
+which are particularly useful to \tikzfeynmanname{} are documented and these are
+prefixed with |/tikz| or |/graph drawing|. Please refer to the \pgfmanual{} for
+a more in thorough documentation of the \tikzname{} keys.
+
+If you wish to modify the default \tikzfeynmanname{} styles, the best way to do
+this is to use \meta{key}|/.append style={...}|. For example, to make every
+diagram red except for small diagrams which remain black, one would add to the
+preamble:
+\begin{codeexample}[execute code=false]
+\tikzfeynmanset{
+ every diagram/.append style={red},
+ small/.append style={black},
+}
+\end{codeexample}
+If you are completely unhappy with a particular inbuilt style, you can define
+your own style with with \meta{key}|/.style={...}| as shown in the
+following example:
+\begin{codeexample}[execute code=false]
+\tikzfeynmanset{
+ myblob/.style={
+ shape=circle,
+ draw=blue,
+ fill=red}
+}
+\end{codeexample}
+
+All the |every |\meta{key} keys documented here are initially empty, so it is up
+to you whether you use \meta{key}|/.append style| or \meta{key}|/.style|. The
+predefined style keys (such as |small|, |particle|, |fermion|, etc.) should
+\emph{never} by modified with \meta{key}|/.style| as that will overwrite the
+style entirely. Instead, modify the appropriate |every |\meta{key} if available
+or use \meta{key}|/.append style|.
+
+All the keys defined here are made available inside the |{feynman}| environment
+and inside |\feynmandiagram|; but if you wish to access them outside of this
+(say, in a regular |{tikzpicture}| environment), you will need to specify the
+full path with the leading |/tikzfeynman|.
+
+\subsubsection{Feynman Keys}
+\label{subsubsec:feynman_keys}
+
+\begin{keylist}{%
+ /tikzfeynman/execute at begin feynman=\marg{\TeX{} code},
+ /tikzfeynman/execute at end feynman=\marg{\TeX{} code}}
+ Allows for custom code to be executed at the start or end of each |{feynman}|
+ environment.
+\end{keylist}
+
+\begin{stylekey}{/tikzfeynman/every feynman}
+ Set of styles which are applied to every |{feynman}| environments (and
+ consequently, every apply inside all |\feynmandiagram| too). The style also
+ applies to regular \tikzname{} commands used inside the |{feynman}|
+ environment.
+
+\begin{codeexample}[]
+\tikzfeynmanset{every feynman/.append style={red}}
+\begin{tikzpicture}
+ \node at (0, 0.5) {This is not red};
+ \begin{feynman}
+ \node at (0, -0.5) {This is red};
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikzfeynman/inline=\meta{node}}
+ A style used to display a Feynman diagram inline (typically in an equation),
+ and aligning such that its vertical placement is at the node specified. The
+ node specification must enclosed in parentheses. For nodes which contain text
+ (such as when the |particle| style is applied), it is possible to use the
+ baseline of the text inside the node to line up with the baseline of the
+ equation by using |(|\meta{node}|.base)| as demonstrated in the following
+ example. Note that this key applies additional styles to make the diagram fit
+ in an equation more nicely; if you do not wish to have these additional
+ styles, use the |baseline| key.
+
+ \begin{equation}
+ \feynmandiagram [inline=(d.base), horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d [particle=\(\gamma\)],
+ };
+ = i g_{e} \gamma^{\mu}
+ \end{equation}
+
+\begin{codeexample}[execute code=false]
+\begin{equation}
+ \feynmandiagram [inline=(d.base), horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d [particle=\(\gamma\)],
+ };
+ = i g_{e} \gamma^{\mu}
+\end{equation}
+\end{codeexample}
+\end{stylekey}
+
+\begin{key}{/tikz/baseline=\meta{node}}
+ Changes the vertical alignment of the Feynman diagram such that it diagram's
+ baseline is at the node specified. This works in the same was as
+ |inline=|\meta{node}, but it does not apply any additional styles (notice how
+ the following example is larger than the one above).
+ \begin{equation}
+ \feynmandiagram [baseline=(d.base), horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d [particle=\(\gamma\)],
+ };
+ = i g_{e} \gamma^{\mu}
+ \end{equation}
+
+\begin{codeexample}[execute code=false]
+\begin{equation}
+ \feynmandiagram [baseline=(d.base), horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d [particle=\(\gamma\)],
+ };
+ = i g_{e} \gamma^{\mu}
+\end{equation}
+\end{codeexample}
+\end{key}
+
+\begin{keylist}{%
+ /graph drawing/horizontal=\meta{node} to \meta{node},
+ /graph drawing/horizontal'=\meta{node} to \meta{node},
+ /graph drawing/vertical=\meta{node} to \meta{node},
+ /graph drawing/vertical'=\meta{node} to \meta{node}}
+ The underlying algorithm will arrange all the nodes relative to each other,
+ but beyond that it has no idea how the overall graph should be oriented.
+ By using one of the above keys, the final output of the algorithm is oriented
+ and/or mirrored such that the two nodes specified are on the same horizontal
+ (or vertical) line. The two nodes need not actually be connected by an edge
+ for this to work.
+
+ The two \meta{node} specifications should \emph{not} be enclosed in
+ parentheses, unlike the |inline| and |baseline| keys.
+
+ The |horizontal'| and |vertical'| keys work in the same was as |horizontal|
+ and |vertical|, but with a flip.
+
+\begin{codeexample}[]
+\feynmandiagram [inline=(b), horizontal=a to b, red] {
+ a -- b -- {c [particle=\(c\)], d [particle=\(d\)]}
+};
+\feynmandiagram [inline=(b), horizontal'=a to b, blue] {
+ a -- b -- {c [particle=\(c\)], d [particle=\(d\)]}
+};
+\feynmandiagram [inline=(b), vertical=a to b, green!40!black] {
+ a -- b -- {c [particle=\(c\)], d [particle=\(d\)]}
+};
+\feynmandiagram [inline=(b), vertical=b to a, black] {
+ a -- b -- {c [particle=\(c\)], d [particle=\(d\)]}
+};
+\end{codeexample}
+\end{keylist}
+
+\subsubsection{Diagram Keys}
+\label{subsubsec:diagram_keys}
+
+\begin{stylekey}{/tikzfeynman/every diagram}
+ Set of styles which are applied to every diagram; that is, to everything
+ inside the |\feynmandiagram|, |\diagram| and |\diagram*| commands but not the
+ general |{feynman}| environment (see \cref{subsubsec:feynman_keys} for that).
+
+\begin{codeexample}[]
+\tikzfeynmanset{every diagram/.append style={red}}
+\feynmandiagram [small, horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d,
+};
+\end{codeexample}
+\end{stylekey}
+
+\begin{keylist}{%
+ /tikzfeynman/small,
+ /tikzfeynman/medium,
+ /tikzfeynman/large}
+ Changes the default separation between the vertices and changes the size of
+ arrows, blobs, and other shapes to fit different context. The |small| size is
+ best used with when the diagram is quite simple and doesn't have too many
+ annotations (such as momentum arrows and particle labels). The |medium| size
+ is the default and is usually large enough that even diagrams with many labels
+ and momentum arrows do not become too cluttered. Finally the |large| key is
+ best for large illustrations as used on the title page of this document.
+
+\begin{codeexample}[]
+\feynmandiagram [baseline=(b), small, horizontal=d to b, red] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d,
+};
+\feynmandiagram [baseline=(b), medium, horizontal=d to b, green!40!black] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d,
+};
+\feynmandiagram [baseline=(b), large, horizontal=d to b, blue] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d,
+};
+\end{codeexample}
+\end{keylist}
+
+There are several algorithms which are available to place the vertices which are
+all provided within the |graph drawing| library from \tikzname. Below are
+listed a few of these layouts which are more relevant for drawing Feynman
+diagrams. For a more complete description of how these algorithm work, please
+refer to the \pgfmanual{}.
+
+\begin{key}{/graph drawing/spring layout=\opt{\meta{string}}}
+ Uses Hu's spring layout \cite{hu2005} as implemented by Pohlmann
+ \cite{pohlmann2011}. This models each edge as springs and attempts to spread
+ everything out as much as possible. This is the default layout.
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=c to d] {
+ {a, b} -- c -- d -- {e, f},
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/graph drawing/spring electrical layout=\opt{\meta{string}}}
+ Uses Hu's spring electrical layout \cite{hu2005} as implemented by Pohlmann
+ \cite{pohlmann2011}. This models each edge as springs and gives each vertex a
+ charge. This algorithm allows for the charge of a particular vertex to be
+ adjusted using the |electric charge| key (the default is |1|).
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle,
+ small, horizontal=c to d,
+ spring electrical layout
+ ] {
+ {a, b [electric charge=2]} -- c -- d -- {e, f [electric charge=0.1]},
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/graph drawing/layered layout=\opt{\meta{string}}}
+ Uses the Sugiyama layout algorithm \cite{eades1991} as implemented by Pohlmann
+ \cite{pohlmann2011} in order to place the node.
+
+ When an edge is specified, the first vertex is always located on the layer
+ above the second vertex. This creates a hierarchy of vertices which is
+ particularly useful for decays.
+
+ Two vertices can be forced to be on the same layer with the
+ |/graph drawing/same layer| key.
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=a to b, layered layout] {
+ a -- b -- {c, d -- {e, f}},
+};
+\end{codeexample}
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=a to b, layered layout] {
+ a -- b -- {c -- {c1, c2}, d -- {d1, d2}},
+ {[same layer] c1, d},
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/graph drawing/tree layout=\opt{\meta{string}}}
+ Uses the Reingold--Tilform algorithm in order to place the node. This works
+ in a similar way to the layered layout, but has quite a lot of additional
+ options to handle missing children in the tree. Please refer to the
+ \pgfmanual{} for a thorough description of these additional features.
+
+ When an edge is specified, the first vertex is always located on the layer
+ above the second vertex. This creates a hierarchy of vertices which is
+ particularly useful for decays.
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=a to b, tree layout] {
+ a -- b -- {c, d -- {e, f}},
+};
+\end{codeexample}
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=a to b, tree layout] {
+ a -- b -- {c -- {c1, c2}, d -- {d1, d2}},
+};
+\end{codeexample}
+\end{key}
+
+\begin{keylist}{%
+ /tikz/graphs/edges=\meta{options},
+ /tikz/graphs/nodes=\meta{options}}
+ Just like it is possible to change the shape of every vertex or edge in the
+ whole document, it is also possible to change the shape of every vertex or
+ edge in a single diagram by modifying these keys and adding the desired
+ styles.
+\end{keylist}
+
+\subsubsection{Vertex Keys}
+\label{subsubsec:vertex_keys}
+
+\begin{key}{/tikzfeynman/vertex}
+ The default, base style applied to every vertex initially. Other styles
+ are subsequently added. This sets the vertex |shape| to be a |coordinate|,
+ that is, a null shape with no size or width.
+\end{key}
+
+\begin{stylekey}{/tikzfeynman/every \meta{vertex shape} (initially \normalfont empty)}
+ The style of specific vertices can be modified by changing the appropriate
+ |every |\meta{vertex shape} key. For example, in order to change the style of
+ every |dot|-styled vertex, you can modify the |every dot| key, or to modify
+ every vertex globally, the |every vertex| key can be modified.
+
+\begin{codeexample}[]
+\tikzfeynmanset{
+ every vertex/.style={red, dot},
+ every particle/.style={blue},
+ every blob/.style={draw=green!40!black, pattern color=green!40!black},
+}
+\feynmandiagram [horizontal=a to b] {
+ a [particle={\(\gamma, Z\)}] -- [boson] b [blob],
+ c -- [fermion] b -- [fermion] d,
+};
+\end{codeexample}
+\end{stylekey}
+
+\begin{key}{/tikzfeynman/dot}
+ Modifies the vertex so that it has a small filled circle.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [dot] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/square dot}
+ Modifies the vertex so that it has a small filled square.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [square dot] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/empty dot}
+ Modifies the vertex so that it has a small empty circle.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [empty dot] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/crossed dot}
+ Modifies the vertex so that it has a small circle with a cross inside.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [crossed dot] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/blob}
+ Modifies the vertex so that it is a large blob, usually used to denote an
+ effective operator.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [blob] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/particle=\meta{name}}
+ Modifies the vertex so that it shows \meta{name}. This is intended to label
+ initial and final particles, but it should not be used on internal vertices as
+ it will result in the lines at the vertex having a gap. For propagators (the
+ |edge label| key is much more appropriate).
+
+ Note that if \meta{name} contains characters such as brackets (|[]|) or
+ commas (|,|), the whole \meta{name} has to be enclosed in braces (|{}|);
+ otherwise, the parser will interpret the comma as the end of the \meta{name}
+ and the start of the next key, or the closing bracket as the end of all
+ optional arguments.
+
+\begin{codeexample}[]
+\feynmandiagram [small, horizontal=a to b] {
+ a [particle={\(\gamma, Z\)}] -- [boson] b -- {c, d},
+};
+\end{codeexample}
+\end{key}
+
+
+\subsubsection{Edge Keys}
+\label{subsubsec:edge_keys}
+
+Just like with the various vertex keys, each edge type has a corresponding
+|every |\meta{edge type}; however, due to the existence of very similar keys
+such as |scalar|, |charged scalar| and |anti charged scalar|, more specific keys
+inherit styles from less specific ones. For example, styles in
+|every charged scalar| will apply to |charged scalar| and |anti charged scalar|
+but not |scalar| whilst styles in |every scalar| will apply to all three.
+
+\begin{stylekey}{/tikzfeynman/every edge (initially \normalfont empty)}
+ A style to apply to every edge initially.
+\end{stylekey}
+
+\begin{stylekey}{/tikzfeynman/every \meta{edge style} (initially \normalfont empty)}
+ The style of specific edges can be modified by changing the appropriate
+ |every |\meta{edge style} key. For example, in order to make a global change
+ to every |boson|, you can modify the |every boson| key.
+
+\begin{codeexample}[]
+\tikzfeynmanset{
+ every edge/.style={fermion},
+ every boson/.style={red},
+ every photon/.style={blue},
+}
+\feynmandiagram [small] {
+ a [particle=\(a\)] -- [boson] o -- [photon] b [particle=\(b\)],
+ f1 [particle=\(c\)] -- o -- f2 [particle=\(d\)],
+};
+\end{codeexample}
+\end{stylekey}
+
+\begin{key}{/tikzfeynman/boson}
+ Draws a sinusoidal line to denote a boson.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [boson] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/charged boson}
+ Draws a sinusoidal line with an arrow to denote a charged boson.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [charged boson] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/anti charged boson}
+ Draws a sinusoidal line with an arrow pointing the other way to to denote a
+ anti charged boson.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [anti charged boson] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/photon}
+ Draws a sinusoidal line to denote a photon.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [photon] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/scalar}
+ Draws a dashed line to denote a scalar.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [scalar] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/charged scalar}
+ Draws a dashed line with an arrow to denote a charged scalar.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [charged scalar] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/anti charged scalar}
+ Draws a dashed line with an arrow pointing the other way to denote a charged
+ scalar antiparticle.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [anti charged scalar] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/ghost}
+ Draws a dotted line to denote a ghost.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [ghost] b};
+\end{codeexample}
+\end{key}
+
+
+\begin{key}{/tikzfeynman/fermion}
+ Draws a solid line with an arrow to denote a fermion.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [fermion] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/anti fermion}
+ Draws a solid line with an arrow pointing the other way to denote an antifermion.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [anti fermion] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/majorana}
+ Draws a solid line with two arrows pointing to the center to denote an
+ Majorana particle.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [majorana] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/anti majorana}
+ Draws a solid line with two arrows pointing to the ends to denote a Majorana
+ particle.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [anti majorana] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/gluon}
+ Draws a coiled line to denote a gluon.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [gluon] b};
+\end{codeexample}
+\end{key}
+
+\begin{keylist}{%
+ /tikz/edge label=\meta{text},
+ /tikz/edge label'=\meta{text}}
+ Places a label halfway along the edge with the given text. The primed key
+ switches which side of the edge the label is placed.
+\end{keylist}
+
+\begin{key}{/tikzfeynman/insertion=\opt{\oarg{options}}\meta{distance}}
+ Places an insertion (for mass or momentum insertion) along an edge. The
+ distance specifies how far along the edge the insertion should be placed such
+ that |0| and |1| respectively correspond to the start and the end of the edge.
+
+ Multiple insertions can be placed along a single edge by repeating the style
+ key.
+
+ Through the \meta{options} argument, the insertion size and style can be
+ changed.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [insertion=0.33, insertion=0.67] b};
+\end{codeexample}
+
+ \begin{key}{/tikzfeynman/insertion/size=\meta{distance} (initially 3pt)}
+ Specifies how big the insertion should be. The length of each edge starting
+ from the center will be \(\sqrt{2} \times \meta{distance}\).
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [insertion={[size=10pt]0.4}] b};
+\end{codeexample}
+ \end{key}
+
+ \begin{key}{/tikzfeynman/insertion/style=\meta{distance} (initially \normalfont empty)}
+ Specifies additional styles to applying to the lines of the insertion.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [insertion={[style=red]0.4}] b};
+\end{codeexample}
+ \end{key}
+\end{key}
+
+\subsubsection{Momentum Keys}
+\label{subsubsec:momentum_keys}
+
+\begin{keylist}{%
+ /tikzfeynman/momentum=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/momentum'=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/reversed momentum=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/reversed momentum'=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/rmomentum=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/rmomentum'=\opt{\oarg{options}}\meta{text}}
+ Places a momentum arrow on the specified edge with label given by \meta{text}.
+ The primed (|'|) version place the momentum arrow on the other side of the
+ edge; that is, if the momentum arrow was on the right, it will be placed on
+ the left of the edge. The |reversed momentum| and |reversed momentum'| keys
+ are analogous to |momentum| and |momentum'| except that the momentum arrow
+ points in the opposite direction. Finally, the |rmomentum| and |rmomentum'|
+ are aliases of |reversed momentum| and |reversed momentum'|.
+
+ Note that due to the way the arrow is drawn, it doesn't inherit styles of the
+ edge. As a result, they have to be re-specified through \meta{options}.
+
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=a to b] {
+ a -- [red, fermion, edge label'=\(ab\), momentum={[arrow style=red]\(p_{ab}\)}] b
+ -- [blue, photon, edge label'=\(bc\)] c
+ -- [green!40!black, scalar, momentum=\(p_{cd}\)] d,
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=b to c] {
+ a -- [photon, momentum=\(p\)] b
+ -- [fermion, half left, looseness=1.5, momentum=\(k\)] c
+ -- [fermion, half left, looseness=1.5, momentum=\(k-p\)] b,
+ c -- [photon, momentum=\(p\)] d,
+};
+\end{codeexample}
+
+The \meta{options} allows for the following options to customize the appearance
+of the momentum arrows. These can be either set globally with the usual
+|\tikzfeynmanset|, or can be set on a individual basis through the
+\meta{options} argument of the |momentum| key. In the latter case, only the
+\meta{key} in |/tikzfeynman/momentum/|\meta{key} is required.
+
+\begin{key}{/tikzfeynman/momentum/label distance=\meta{distance} (initially 0pt)}
+ Set the separation between the text and the arrow. Note that the text is
+ still surrounded by an |inner sep=0.3333em| by default so the default
+ distance of |0pt| will not result in the momentum label touching the arrow.
+\end{key}
+
+\begin{key}{/tikzfeynman/momentum/arrow distance=\meta{distance} (initially 3mm)}
+ Set the separation between the edge and the arrow.
+\end{key}
+
+\begin{key}{/tikzfeynman/momentum/arrow shorten=\meta{distance} (initially 0.15)}
+ Specify the fraction of the total edge length by which the momentum arrow is
+ shortened at each end.
+\end{key}
+
+\begin{key}{/tikzfeynman/momentum/label style=\meta{style} (initially \normalfont empty)}
+ Define styles to apply to the momentum label node.
+\end{key}
+
+\begin{key}{/tikzfeynman/momentum/arrow style=\meta{style} (initially \normalfont empty)}
+ Define style to apply to the momentum arrow.
+\end{key}
+\end{keylist}
+
+\subsubsection{Modifier Keys}
+\label{subsubsec:modifier_keys}
+
+Modifier keys serve only to slightly modify a small feature of the edge.
+
+\begin{keylist}{%
+ /tikzfeynman/half left,
+ /tikzfeynman/half right,
+ /tikzfeynman/quarter left,
+ /tikzfeynman/quarter right}
+ Modifies the edge so that it bends left or right in such a way that it
+ completes half a circle, or a quarter of a circle.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ a -- [red, fermion, half left] b -- [blue, fermion, half left] a,
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to c] {
+ a -- [red!0!blue, fermion, quarter left] b
+ -- [red!33!blue, fermion, quarter left] c
+ -- [red!66!blue, fermion, quarter left] d
+ -- [red!100!blue, fermion, quarter left] a,
+};
+\end{codeexample}
+\end{keylist}
+
+\begin{keylist}{%
+ /tikz/out=\meta{angle},
+ /tikz/in=\meta{angle}}
+ Specifies the angle at which the edge leaves the first vertex in an edge and
+ the angle at which it enters the second vertex in an edge.
+\end{keylist}
+
+\begin{key}{/tikz/relative=\opt{\meta{true or false}} (default true)}
+ If |relative| is set to |false|, the angle is relative to the paper whilst when
+ |relative| is set to |true|, the angle is relative to the straight line
+ joining the two vertices.
+\end{key}
+
+\begin{key}{/tikz/looseness=\meta{number} (initially 1)}
+ As the name suggests, this specifies how `loose' or `tight' a curve is
+ connecting two vertices.
+\end{key}
+
+\clearpage
+\section{Examples}
+\label{sec:examples}
+
+Below are a few diagrams which demonstrate how the package can be used in some
+more practical examples..
+
+\begin{description}
+\item[Vertex Rule] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ a [particle=\(Z\)] -- [photon, momentum=\(p_{1}\)] b,
+ f1 [particle=\(\overline f\)]
+ -- [fermion, rmomentum'=\(p_{3}\)] b
+ -- [fermion, momentum=\(p_{2}\)] f2 [particle=\(f\)],
+};
+\end{codeexample}
+
+\item[Tree Level Diagrams] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ i1 [particle=\(e^{-}\)] -- [fermion] a -- [fermion] i2 [particle=\(e^{+}\)],
+ a -- [photon, edge label=\(\gamma\)] b,
+ f1 [particle=\(\mu^{-}\)] -- [fermion] b -- [fermion] f2 [particle=\(\mu^{+}\)],
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\feynmandiagram [vertical'=a to b] {
+ i1 [particle=\(e^{-}\)]
+ -- [fermion] a
+ -- [fermion] f1 [particle=\(e^{-}\)],
+ a -- [photon, edge label=\(\gamma\)] b,
+ i2 [particle=\(e^{+}\)]
+ -- [anti fermion] b
+ -- [anti fermion] f2 [particle=\(e^{+}\)],
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \diagram [vertical'=a to b] {
+ i1 [particle=\(e^{-}\)]
+ -- [fermion] a
+ -- [draw=none] f1 [particle=\(e^{+}\)],
+ a -- [photon, edge label'=\(p\)] b,
+ i2 [particle=\(e^{+}\)]
+ -- [anti fermion] b
+ -- [draw=none] f2 [particle=\(e^{-}\)],
+ };
+ \diagram* {
+ (a) -- [fermion] (f2),
+ (b) -- [anti fermion] (f1),
+ };
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\item[Loops] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=b to c] {
+ a -- [photon, momentum=\(p\)] b
+ -- [fermion, half left, momentum=\(k\)] c
+ -- [fermion, half left, momentum=\(k-p\)] b,
+ c -- [photon, momentum=\(p\)] d,
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=a to b] [edges=gluon] {
+ {i1, i2} -- a -- [half left] b -- [half left] a,
+ b -- {f1, f2},
+};
+\end{codeexample}
+
+\newpage
+\item[Box Diagrams] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=a to b] {
+ % Draw the top and bottom lines
+ i1 [particle=\(d\)]
+ -- [fermion] a
+ -- [photon, edge label=\(W^{-}\)] b
+ -- [fermion] f1 [particle=\(\mu^{-}\)],
+ i2 [particle=\(\overline s\)]
+ -- [anti fermion] c
+ -- [photon, edge label'=\(W^{+}\)] d
+ -- [anti fermion] f2 [particle=\(\mu^{+}\)],
+ % Draw the two internal fermion lines
+ { [same layer] a -- [fermion, edge label'=\(q\)] c },
+ { [same layer] b -- [anti fermion, edge label=\(\nu_{\mu}\)] d},
+};
+\end{codeexample}
+
+\newpage
+\item[Meson decay and mixing] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \vertex (a1) {\(\overline b\)};
+ \vertex[right=1.5cm of a1] (a2);
+ \vertex[right=1cm of a2] (a3);
+ \vertex[right=1.5cm of a3] (a4) {\(\overline u\)};
+
+ \vertex[below=2em of a1] (b1) {\(d\)};
+ \vertex[below=2em of a4] (b2) {\(d\)};
+
+ %% See section 13.5 of PGF/TikZ manual
+ \vertex at ($(a2)!0.5!(a3)!0.5cm!90:(a3)$) (d);
+ %% Equivalent way to obtain (d):
+ % \vertex at ($(b2)!0.5!(b3) + (0, -0.5cm)$) (d);
+ \vertex[above=of a4] (c1) {\(u\)};
+ \vertex[above=2em of c1] (c3) {\(\overline d\)};
+ \vertex at ($(c1)!0.5!(c3) - (1cm, 0)$) (c2);
+
+ \diagram* {
+ (a4) -- [fermion] (a3) -- [fermion] (a2) -- [fermion] (a1),
+ (b1) -- [fermion] (b2),
+ (c3) -- [fermion, out=180, in=45] (c2) -- [fermion, out=-45, in=180] (c1),
+ (a2) -- [boson, quarter left] (d) -- [boson, quarter left] (a3),
+ (d) -- [boson, bend left, edge label=\(W^{+}\)] (c2),
+ };
+
+ \draw [decoration={brace}, decorate] (b1.south west) -- (a1.north west)
+ node [pos=0.5, left] {\(B^{0}\)};
+ \draw [decoration={brace}, decorate] (c3.north east) -- (c1.south east)
+ node [pos=0.5, right] {\(\pi^{+}\)};
+ \draw [decoration={brace}, decorate] (a4.north east) -- (b2.south east)
+ node [pos=0.5, right] {\(\pi^{-}\)};
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\newpage
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \vertex (a1) {\(\overline b\)};
+ \vertex[right=1cm of a1] (a2);
+ \vertex[right=1cm of a2] (a3);
+ \vertex[right=1cm of a3] (a4) {\(b\)};
+ \vertex[right=1cm of a4] (a5);
+ \vertex[right=2cm of a5] (a6) {\(u\)};
+
+ \vertex[below=2em of a1] (b1) {\(d\)};
+ \vertex[right=1cm of b1] (b2);
+ \vertex[right=1cm of b2] (b3);
+ \vertex[right=1cm of b3] (b4) {\(\overline d\)};
+ \vertex[below=2em of a6] (b5) {\(\overline d\)};
+
+ \vertex[above=of a6] (c1) {\(\overline u\)};
+ \vertex[above=2em of c1] (c3) {\(d\)};
+ \vertex at ($(c1)!0.5!(c3) - (1cm, 0)$) (c2);
+
+ \diagram* {
+ {[edges=fermion]
+ (b1) -- (b2) -- (a2) -- (a1),
+ (b5) -- (b4) -- (b3) -- (a3) -- (a4) -- (a5) -- (a6),
+ },
+ (a2) -- [boson, edge label=\(W\)] (a3),
+ (b2) -- [boson, edge label'=\(W\)] (b3),
+
+ (c1) -- [fermion, out=180, in=-45] (c2) -- [fermion, out=45, in=180] (c3),
+ (a5) -- [boson, bend left, edge label=\(W^{-}\)] (c2),
+ };
+
+ \draw [decoration={brace}, decorate] (b1.south west) -- (a1.north west)
+ node [pos=0.5, left] {\(B^{0}\)};
+ \draw [decoration={brace}, decorate] (c3.north east) -- (c1.south east)
+ node [pos=0.5, right] {\(\pi^{-}\)};
+ \draw [decoration={brace}, decorate] (a6.north east) -- (b5.south east)
+ node [pos=0.5, right] {\(\pi^{+}\)};
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\newpage
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \vertex (a1) {\(\overline b\)};
+ \vertex[right=2cm of a1] (a2);
+ \vertex[right=0.5cm of a2] (a3);
+ \vertex[right=0.5cm of a3] (a4);
+ \vertex[right=2cm of a4] (a5) {\(\overline s\)};
+
+ \vertex[below=2cm of a1] (b1) {\(d\)};
+ \vertex[below=2cm of a5] (b2) {\(d\)};
+
+ \vertex[below=1.5em of a5] (c1) {\(s\)};
+ \vertex[above=1.5em of b2] (c3) {\(\overline s\)};
+ \vertex at ($(c1)!0.5!(c3) - (1cm, 0)$) (c2);
+
+ \diagram* {
+ {[edges=fermion]
+ (a5) -- (a4) -- (a3) -- (a2) -- (a1),
+ },
+ (b1) -- [fermion] (b2),
+ (c3) -- [fermion, out=180, in=-60] (c2) -- [fermion, out=60, in=180] (c1),
+ (a3) -- [gluon, bend right] (c2),
+ (a4) -- [boson, out=90, in=90, looseness=2.0, edge label'=\(W^{+}\)] (a2)
+ };
+
+ \draw [decoration={brace}, decorate] (b1.south west) -- (a1.north west)
+ node [pos=0.5, left] {\(B^{0}\)};
+ \draw [decoration={brace}, decorate] (a5.north east) -- (c1.south east)
+ node [pos=0.5, right] {\(\phi\)};
+ \draw [decoration={brace}, decorate] (c3.north east) -- (b2.south east)
+ node [pos=0.5, right] {\(K^{0}\)};
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\end{description}
+
+%% Index
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\printindex
+
+%% Bibliography (and acknowledgements)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\pagestyle{plain}
+
+\ifarxiv
+\acknowledgements
+\fi
+
+\printbibliography
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End: