tikz.dev / TikZ-Feynman Manual
\(\newcommand{\footnotename}{footnote}\) \(\def \LWRfootnote {1}\) \(\newcommand {\footnote }[2][\LWRfootnote ]{{}^{\mathrm {#1}}}\) \(\newcommand {\footnotemark }[1][\LWRfootnote ]{{}^{\mathrm {#1}}}\) \(\let \LWRorighspace \hspace \) \(\renewcommand {\hspace }{\ifstar \LWRorighspace \LWRorighspace }\) \(\newcommand {\TextOrMath }[2]{#2}\) \(\newcommand {\mathnormal }[1]{{#1}}\) \(\newcommand \ensuremath [1]{#1}\) \(\newcommand {\LWRframebox }[2][]{\fbox {#2}} \newcommand {\framebox }[1][]{\LWRframebox } \) \(\newcommand {\setlength }[2]{}\) \(\newcommand {\addtolength }[2]{}\) \(\newcommand {\setcounter }[2]{}\) \(\newcommand {\addtocounter }[2]{}\) \(\newcommand {\arabic }[1]{}\) \(\newcommand {\number }[1]{}\) \(\newcommand {\noalign }[1]{\text {#1}\notag \\}\) \(\newcommand {\cline }[1]{}\) \(\newcommand {\directlua }[1]{\text {(directlua)}}\) \(\newcommand {\luatexdirectlua }[1]{\text {(directlua)}}\) \(\newcommand {\protect }{}\) \(\def \LWRabsorbnumber #1 {}\) \(\def \LWRabsorbquotenumber "#1 {}\) \(\newcommand {\LWRabsorboption }[1][]{}\) \(\newcommand {\LWRabsorbtwooptions }[1][]{\LWRabsorboption }\) \(\def \mathchar {\ifnextchar "\LWRabsorbquotenumber \LWRabsorbnumber }\) \(\def \mathcode #1={\mathchar }\) \(\let \delcode \mathcode \) \(\let \delimiter \mathchar \) \(\def \oe {\unicode {x0153}}\) \(\def \OE {\unicode {x0152}}\) \(\def \ae {\unicode {x00E6}}\) \(\def \AE {\unicode {x00C6}}\) \(\def \aa {\unicode {x00E5}}\) \(\def \AA {\unicode {x00C5}}\) \(\def \o {\unicode {x00F8}}\) \(\def \O {\unicode {x00D8}}\) \(\def \l {\unicode {x0142}}\) \(\def \L {\unicode {x0141}}\) \(\def \ss {\unicode {x00DF}}\) \(\def \SS {\unicode {x1E9E}}\) \(\def \dag {\unicode {x2020}}\) \(\def \ddag {\unicode {x2021}}\) \(\def \P {\unicode {x00B6}}\) \(\def \copyright {\unicode {x00A9}}\) \(\def \pounds {\unicode {x00A3}}\) \(\let \LWRref \ref \) \(\renewcommand {\ref }{\ifstar \LWRref \LWRref }\) \( \newcommand {\multicolumn }[3]{#3}\) \(\require {textcomp}\) \(\newcommand {\meta }[1]{\langle \textit {#1}\rangle }\) \(\newcommand {\intertext }[1]{\text {#1}\notag \\}\) \(\let \Hat \hat \) \(\let \Check \check \) \(\let \Tilde \tilde \) \(\let \Acute \acute \) \(\let \Grave \grave \) \(\let \Dot \dot \) \(\let \Ddot \ddot \) \(\let \Breve \breve \) \(\let \Bar \bar \) \(\let \Vec \vec \) \(\require {mathtools}\) \(\newcommand {\vcentcolon }{\mathrel {\unicode {x2236}}}\) \(\newcommand {\approxcolon }{\approx \vcentcolon }\) \(\newcommand {\Approxcolon }{\approx \dblcolon }\) \(\newcommand {\simcolon }{\sim \vcentcolon }\) \(\newcommand {\Simcolon }{\sim \dblcolon }\) \(\newcommand {\dashcolon }{\mathrel {-}\vcentcolon }\) \(\newcommand {\Dashcolon }{\mathrel {-}\dblcolon }\) \(\newcommand {\colondash }{\vcentcolon \mathrel {-}}\) \(\newcommand {\Colondash }{\dblcolon \mathrel {-}}\) \(\newenvironment {crampedsubarray}[1]{}{}\) \(\newcommand {\smashoperator }[2][]{#2\limits }\) \(\newcommand {\SwapAboveDisplaySkip }{}\) \(\newcommand {\LaTeXunderbrace }[1]{\underbrace {#1}}\) \(\newcommand {\LaTeXoverbrace }[1]{\overbrace {#1}}\) \(\Newextarrow \xLongleftarrow {10,10}{0x21D0}\) \(\Newextarrow \xLongrightarrow {10,10}{0x21D2}\) \(\let \xlongleftarrow \xleftarrow \) \(\let \xlongrightarrow \xrightarrow \) \(\newcommand {\LWRmultlined }[1][]{\begin {multline*}}\) \(\newenvironment {multlined}[1][]{\LWRmultlined }{\end {multline*}}\) \(\let \LWRorigshoveleft \shoveleft \) \(\renewcommand {\shoveleft }[1][]{\LWRorigshoveleft }\) \(\let \LWRorigshoveright \shoveright \) \(\renewcommand {\shoveright }[1][]{\LWRorigshoveright }\) \(\newcommand {\shortintertext }[1]{\text {#1}\notag \\}\) \(\require {centernot}\) \(\newcommand {\LWRoverlaysymbols }[2]{\mathord {\smash {\mathop {#2\strut }\limits ^{\smash {\lower 3ex{#1}}}}\strut }}\) \(\newcommand {\mmapsto }{\mathrel {\unicode {x021A6}}}\) \(\let \mmapstochar \mmapsto \) \(\newcommand {\longmmapsto }{\mathrel {\unicode {x021A6}}}\) \(\newcommand {\mmappedfrom }{\mathrel {\unicode {x021A4}}}\) \(\let \mmappedfromchar \mmappedfrom \) \(\newcommand {\longmmappedfrom }{\mathrel {\unicode {x021A4}}}\) \(\let \mmapsfrom \mmappedfrom \) \(\let \longmmapsfrom \longmmappedfrom \) \(\newcommand {\Mmapsto }{\mathrel {\unicode {x02907}}}\) \(\let \Mmapstochar \Mmapsto \) \(\newcommand {\Longmmapsto }{\mathrel {\unicode {x027FE}}}\) \(\newcommand {\Mmappedfrom }{\mathrel {\unicode {x02906}}}\) \(\let \Mmappedfromchar \Mmappedfrom \) \(\newcommand {\Longmmappedfrom }{\mathrel {\unicode {x027FD}}}\) \(\let \Mmapsfrom \Mmappedfrom \) \(\let \Longmmapsfrom \Longmmappedfrom \) \(\newcommand {\boxright }{\mathrel {\unicode {x025A1}\!\unicode {x02192}}}\) \(\newcommand {\boxleft }{\mathrel {\unicode {x02190}\!\unicode {x025A1}}}\) \(\newcommand {\boxdotright }{\mathrel {\unicode {x022A1}\!\unicode {x02192}}}\) \(\newcommand {\boxdotleft }{\mathrel {\unicode {x02190}\!\unicode {x022A1}}}\) \(\newcommand {\Diamondright }{\mathrel {\unicode {x025C7}\!\unicode {x02192}}}\) \(\newcommand {\Diamondleft }{\mathrel {\unicode {x02190}\!\unicode {x025C7}}}\) \(\newcommand {\Diamonddotright }{\mathrel {\unicode {x027D0}\!\unicode {x02192}}}\) \(\newcommand {\Diamonddotleft }{\mathrel {\unicode {x02190}\!\unicode {x027D0}}}\) \(\newcommand {\boxRight }{\mathrel {\unicode {x025A1}\!\unicode {x021D2}}}\) \(\newcommand {\boxLeft }{\mathrel {\unicode {x021D0}\!\unicode {x025A1}}}\) \(\newcommand {\boxdotRight }{\mathrel {\unicode {x022A1}\!\unicode {x021D2}}}\) \(\newcommand {\boxdotLeft }{\mathrel {\unicode {x021D0}\!\unicode {x022A1}}}\) \(\newcommand {\DiamondRight }{\mathrel {\unicode {x025C7}\!\unicode {x021D2}}}\) \(\newcommand {\DiamondLeft }{\mathrel {\unicode {x021D0}\!\unicode {x025C7}}}\) \(\newcommand {\DiamonddotRight }{\mathrel {\unicode {x027D0}\!\unicode {x021D2}}}\) \(\newcommand {\DiamonddotLeft }{\mathrel {\unicode {x021D0}\!\unicode {x027D0}}}\) \(\newcommand {\Diamonddot }{\mathrel {\unicode {x027D0}}}\) \(\newcommand {\circleright }{\mathrel {\unicode {x025CB}\!\unicode {x02192}}}\) \(\newcommand {\circleleft }{\mathrel {\unicode {x02190}\!\unicode {x025CB}}}\) \(\newcommand {\circledotright }{\mathrel {\unicode {x02299}\!\unicode {x02192}}}\) \(\newcommand {\circledotleft }{\mathrel {\unicode {x02190}\!\unicode {x02299}}}\) \(\let \circleddotright \circledotright \) \(\let \circleddotleft \circledotleft \) \(\newcommand {\multimapinv }{\mathrel {\unicode {x027DC}}}\) \(\newcommand {\multimapboth }{\mathrel {\unicode {x029DF}}}\) \(\newcommand {\multimapdot }{{\mathrel {-\!\bullet }}}\) \(\newcommand {\multimapdotinv }{\mathrel {\bullet \!-}}\) \(\newcommand {\multimapdotboth }{\mathrel {{\bullet \!\!-\!\!\bullet }}}\) \(\newcommand {\multimapdotbothA }{\mathrel {\unicode {x022B6}}}\) \(\newcommand {\multimapdotbothB }{\mathrel {\unicode {x22B7}}}\) \(\newcommand {\multimapbothvert }{\mathrel {\overset {\unicode {x025CB}}{\underset {\unicode {x025CB}}{|}}}}\) \(\newcommand {\multimapdotbothvert }{\mathrel {\overset {\unicode {x025CF}}{\underset {\unicode {x025CF}}{|}}}}\) \(\newcommand {\multimapdotbothBvert }{\mathrel {\overset {\unicode {x025CF}}{\underset {\unicode {x025CB}}{|}}}}\) \(\newcommand {\multimapdotbothAvert }{\mathrel {\overset {\unicode {x025CB}}{\underset {\unicode {x025CF}}{|}}}}\) \(\newcommand {\bignplus }{\mathop {\LWRoverlaysymbols {\unicode {xFF0B}}{\unicode {x22C2}}}}\) \(\let \bigcapplus \bignplus \) \(\let \capplus \bignplus \) \(\newcommand {\bigsqcapplus }{\mathop {\LWRoverlaysymbols {\unicode {xFF0B}}{\unicode {x2A05}}} }\) \(\let \sqcapplus \bigsqcapplus \) \(\newcommand {\bigsqcupplus }{\mathop {\LWRoverlaysymbols {\unicode {xFF0B}}{\unicode {x2A06}}} }\) \(\let \sqcupplus \bigsqcupplus \) \(\newcommand {\parallelslant }{\mathrel {\unicode {x02AFD}}}\) \(\newcommand {\parallelbackslant }{\mathrel {\unicode {x0005C}\!\!\unicode {x0005C}}}\) \(\newcommand {\Eqqcolon }{\mathrel {=\!\unicode {x2237}}}\) \(\let \eqqColon \Eqqcolon \) \(\newcommand {\dashColon }{\mathrel {-\unicode {x2237}}}\) \(\newcommand {\Colondash }{\mathrel {\unicode {x2237}-}}\) \(\newcommand {\colonapprox }{\mathrel {:\approx }}\) \(\newcommand {\colonsim }{\mathrel {:\sim }}\) \(\newcommand {\Colonapprox }{\mathrel {\unicode {x2237}\!\approx }}\) \(\newcommand {\Colonsim }{\mathrel {\unicode {x2237}\!\sim }}\) \(\newcommand {\strictif }{\mathrel {\unicode {x0297D}}}\) \(\newcommand {\strictfi }{\mathrel {\unicode {x0297C}}}\) \(\newcommand {\strictiff }{\mathrel {\unicode {x0297C}\!\!\unicode {x0297D}}}\) \(\newcommand {\circledwedge }{\mathbin {\LWRoverlaysymbols {\unicode {x025EF}}{\unicode {x02227}}}}\) \(\newcommand {\circledvee }{\mathbin {\LWRoverlaysymbols {\unicode {x025EF}}{\unicode {0x02228}}}}\) \(\newcommand {\circledbar }{\mathbin {\unicode {x029B6}}}\) \(\newcommand {\openJoin }{\mathrel {\unicode {x2AA4}}}\) \(\newcommand {\opentimes }{\mathrel {\unicode {x2AA4}}}\) \(\newcommand {\VvDash }{\mathrel {\unicode {x22AA}}}\) \(\newcommand {\lambdabar }{\mathord {\LWRoverlaysymbols {\raise {.5ex}{-}}{\lambda }}}\) \(\newcommand {\lambdaslash }{\mathord {\unicode {x019B}}}\) \(\newcommand {\Wr }{\mathbin {\unicode {x02240}\!\unicode {x02240}}}\) \(\newcommand {\dashleftrightarrow }{\mathrel {\unicode {x021E0}\!\unicode {x021E2}}}\) \(\let \leftrightdasharrow \dashleftrightarrow \) \(\newcommand {\fAlt }{f}\) \(\newcommand {\rhoAlt }{\rho }\) \(\newcommand {\imathscr }{\mathord {\mathscr {i}}}\) \(\newcommand {\jmathscr }{\mathord {\mathscr {j}}}\) \(\let \llbracket \lBrack \) \(\let \rrbracket \rBrack \) \(\let \smlbrace \{\) \(\let \smrbrace \}\) \(\newcommand {\Perp }{\mathrel {\unicode {x02AEB}}}\) \(\newcommand {\nPerp }{\mathrel {\not {\!\unicode {x02AEB}}}}\) \(\newcommand {\Zbar }{\mathord {\unicode {x01B5}}}\) \(\newcommand {\Angstrom }{\mathord {\unicode {x212B}}}\) \(\newcommand {\Euler }{\mathord {\unicode {x2107}}}\) \(\newcommand {\transp }{\mathord {\unicode {xFF34}}}\) \(\newcommand {\hermtransp }{\mathord {\unicode {xFF28}}}\) \(\let \htransp =\hermtransp \) \(\newcommand {\circledplus }{\mathbin {\unicode {x2295}}}\) \(\newcommand {\circledminus }{\mathbin {\unicode {x2296}}}\) \(\newcommand {\circledtimes }{\mathbin {\unicode {x2297}}}\) \(\newcommand {\circledslash }{\mathbin {\unicode {x2298}}}\) \(\newcommand {\circleddot }{\mathbin {\unicode {x2299}}}\) \(\let \overgroup \overparen \) \(\let \overgroupra \overrightarrow \) \(\let \undergroup \underparen \) \(\let \undergroupla \underleftarrow \) \(\newcommand {\widering }[1]{\stackrel {\unicode {x2218}}{\overgroup {#1}}}\) \(\let \widearc \overparen \) \(\let \wideOarc \overrightarrow \) \(\newcommand {\LWRvvstar }[2]{{\overrightarrow {#1}_{#2}}}\) \(\newcommand {\vv }{\ifstar \LWRvvstar \overrightarrow }\) \(\let \smallintsl \smallint \) \(\newcommand {\smalliintsl }{\mathop {\unicode {x222C}}\limits }\) \(\newcommand {\smalliiintsl }{\mathop {\unicode {x222D}}\limits }\) \(\newcommand {\smalliiiintsl }{\mathop {\unicode {x2A0C}}\limits }\) \(\newcommand {\smallointsl }{\mathop {\unicode {x222E}}\limits }\) \(\newcommand {\smalloiintsl }{\mathop {\unicode {x222F}}\limits }\) \(\newcommand {\smalloiiintsl }{\mathop {\unicode {x2230}}\limits }\) \(\newcommand {\smallvarointclockwisesl }{\mathop {\unicode {x2232}}\limits }\) \(\newcommand {\smallointctrclockwisesl }{\mathop {\unicode {x2233}}\limits }\) \(\newcommand {\smallsumintsl }{\mathop {\unicode {x2A0B}}\limits }\) \(\newcommand {\smallfintsl }{\mathop {\unicode {x2A0F}}\limits }\) \(\newcommand {\smallsqintsl }{\mathop {\unicode {x2A16}}\limits }\) \(\let \smallintup \smallint \) \(\newcommand {\smalliintup }{\mathop {\unicode {x222C}}\limits }\) \(\newcommand {\smalliiintup }{\mathop {\unicode {x222D}}\limits }\) \(\newcommand {\smalliiiintup }{\mathop {\unicode {x2A0C}}\limits }\) \(\newcommand {\smallointup }{\mathop {\unicode {x222E}}\limits }\) \(\newcommand {\smalloiintup }{\mathop {\unicode {x222F}}\limits }\) \(\newcommand {\smalloiiintup }{\mathop {\unicode {x2230}}\limits }\) \(\newcommand {\smallvarointclockwiseup }{\mathop {\unicode {x2232}}\limits }\) \(\newcommand {\smallointctrclockwiseup }{\mathop {\unicode {x2233}}\limits }\) \(\newcommand {\smallsumintup }{\mathop {\unicode {x2A0B}}\limits }\) \(\newcommand {\smallfintup }{\mathop {\unicode {x2A0F}}\limits }\) \(\newcommand {\smallsqintup }{\mathop {\unicode {x2A16}}\limits }\) \(\newcommand {\iint }{\mathop {\unicode {x222C}}\limits }\) \(\newcommand {\iiint }{\mathop {\unicode {x222D}}\limits }\) \(\newcommand {\iiiint }{\mathop {\unicode {x2A0C}}\limits }\) \(\newcommand {\oiint }{\mathop {\unicode {x222F}}\limits }\) \(\newcommand {\oiiint }{\mathop {\unicode {x2230}}\limits }\) \(\newcommand {\varointclockwise }{\mathop {\unicode {x2232}}\limits }\) \(\newcommand {\ointctrclockwise }{\mathop {\unicode {x2233}}\limits }\) \(\newcommand {\sumint }{\mathop {\unicode {x2A0B}}\limits }\) \(\newcommand {\fint }{\mathop {\unicode {x2A0F}}\limits }\) \(\newcommand {\sqint }{\mathop {\unicode {x2A16}}\limits }\) \(\let \intsl \int \) \(\newcommand {\iintsl }{\mathop {\unicode {x222C}}\limits }\) \(\newcommand {\iiintsl }{\mathop {\unicode {x222D}}\limits }\) \(\newcommand {\iiiintsl }{\mathop {\unicode {x2A0C}}\limits }\) \(\let \ointsl \oint \) \(\newcommand {\oiintsl }{\mathop {\unicode {x222F}}\limits }\) \(\newcommand {\oiiintsl }{\mathop {\unicode {x2230}}\limits }\) \(\newcommand {\varointclockwisesl }{\mathop {\unicode {x2232}}\limits }\) \(\newcommand {\ointctrclockwisesl }{\mathop {\unicode {x2233}}\limits }\) \(\newcommand {\sumintsl }{\mathop {\unicode {x2A0B}}\limits }\) \(\newcommand {\fintsl }{\mathop {\unicode {x2A0F}}\limits }\) \(\newcommand {\sqintsl }{\mathop {\unicode {x2A16}}\limits }\) \(\let \intup \int \) \(\newcommand {\iintup }{\mathop {\unicode {x222C}}\limits }\) \(\newcommand {\iiintup }{\mathop {\unicode {x222D}}\limits }\) \(\newcommand {\iiiintup }{\mathop {\unicode {x2A0C}}\limits }\) \(\let \ointup \oint \) \(\newcommand {\oiintup }{\mathop {\unicode {x222F}}\limits }\) \(\newcommand {\oiiintup }{\mathop {\unicode {x2230}}\limits }\) \(\newcommand {\varointclockwiseup }{\mathop {\unicode {x2232}}\limits }\) \(\newcommand {\ointctrclockwiseup }{\mathop {\unicode {x2233}}\limits }\) \(\newcommand {\sumintup }{\mathop {\unicode {x2A0B}}\limits }\) \(\newcommand {\fintup }{\mathop {\unicode {x2A0F}}\limits }\) \(\newcommand {\sqintup }{\mathop {\unicode {x2A16}}\limits }\) \(\newcommand {\bigcupdot }{\mathop {\unicode {x2A03}}}\) \(\newcommand {\bigcupplus }{\mathop {\unicode {x2A04}}}\) \(\newcommand {\bigsqcap }{\mathop {\unicode {x2A05}}}\) \(\newcommand {\bigtimes }{\mathop {\unicode {x2A09}}}\) \(\let \varprod \bigtimes \) \(\newcommand {\mappedfrom }{\mathrel {\unicode {x021A4}}}\) \(\let \mappedfromchar \mappedfrom \) \(\newcommand {\mapsfrom }{\mathrel {\unicode {x021A4}}}\) \(\newcommand {\longmappedfrom }{\mathrel {\unicode {x027FB}}}\) \(\newcommand {\Mapsto }{\mathrel {\unicode {x02907}}}\) \(\let \Mapstochar \Mapsto \) \(\newcommand {\Longmapsto }{\mathrel {\unicode {x027FE}}}\) \(\newcommand {\Mappedfrom }{\mathrel {\unicode {x02906}}}\) \(\let \Mappedfromchar \Mappedfrom \) \(\newcommand {\Mapsfrom }{\mathrel {\unicode {x02906}}}\) \(\newcommand {\Longmappedfrom }{\mathrel {\unicode {x27FD}}}\) \(\newcommand {\medcirc }{\mathbin {\unicode {x025CB}}}\) \(\newcommand {\medbullet }{\mathbin {\unicode {x025CF}}}\) \(\newcommand {\varparallel }{\mathrel {\unicode {x02AFD}}}\) \(\newcommand {\varparallelinv }{\mathrel {\unicode {x244A}}}\) \(\newcommand {\nvarparallel }{\mathrel {\LWRoverlaysymbols {-}{\unicode {x02AFD}}}}\) \(\newcommand {\nvarparallelinv }{\mathrel {\LWRoverlaysymbols {-}{\unicode {x244A}}}}\) \(\newcommand {\coloneq }{\mathrel {\unicode {x02254}}}\) \(\newcommand {\eqcolon }{\mathrel {\unicode {x02255}}}\) \(\newcommand {\VDash }{\mathrel {\unicode {x22AB}}}\) \(\newcommand {\preceqq }{\mathrel {\unicode {x02AB3}}}\) \(\newcommand {\succeqq }{\mathrel {\unicode {x02AB4}}}\) \(\newcommand {\nprecsim }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0227E}}}}\) \(\newcommand {\nsuccsim }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0227F}}}}\) \(\newcommand {\nlesssim }{\mathrel {\unicode {x02274}}}\) \(\newcommand {\ngtrsim }{\mathrel {\unicode {x02275}}}\) \(\newcommand {\nsubset }{\mathrel {\unicode {x02284}}}\) \(\newcommand {\nsupset }{\mathrel {\unicode {x02285}}}\) \(\newcommand {\notni }{\mathrel {\unicode {x220C}}}\) \(\let \notowns \notni \) \(\newcommand {\nlessapprox }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x02A85}}}}\) \(\newcommand {\ngtrapprox }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x02A86}}}}\) \(\newcommand {\npreccurlyeq }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0227C}}}}\) \(\newcommand {\nsucccurlyeq }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0227D}}}}\) \(\newcommand {\ngtrless }{\mathrel {\unicode {x02279}}}\) \(\newcommand {\nlessgtr }{\mathrel {\unicode {x2278}}}\) \(\newcommand {\nbumpeq }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0224F}}}}\) \(\newcommand {\nBumpeq }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0224E}}}}\) \(\newcommand {\nbacksim }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0223D}}}}\) \(\newcommand {\nbacksimeq }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x022CD}}}}\) \(\newcommand {\nasymp }{\mathrel {\unicode {x226D}}}\) \(\newcommand {\nequiv }{\mathrel {\unicode {x2262}}}\) \(\newcommand {\napprox }{\mathrel {\unicode {x2249}}}\) \(\newcommand {\nll }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0226A}}}}\) \(\newcommand {\ngg }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0226B}}}}\) \(\newcommand {\nthickapprox }{\mathrel {\LWRoverlaysymbols {/}{{\mathbf {\unicode {x02248}}}}}}\) \(\newcommand {\napproxeq }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0224A}}}}\) \(\newcommand {\nprecapprox }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x02AB7}}}}\) \(\newcommand {\nsuccapprox }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x02AB8}}}}\) \(\newcommand {\npreceqq }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x02AB3}}}}\) \(\newcommand {\nsucceqq }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x02AB4}}}}\) \(\newcommand {\nsimeq }{\mathrel {\unicode {x02244}}}\) \(\newcommand {\nSubset }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x022D0}}}}\) \(\newcommand {\nSupset }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x022D1}}}}\) \(\newcommand {\nsqsubseteq }{\mathrel {\unicode {x022E2}}}\) \(\newcommand {\nsqsupseteq }{\mathrel {\unicode {x022E3}}}\) \(\newcommand {\coloneqq }{\mathrel {\unicode {x02254}}}\) \(\newcommand {\eqqcolon }{\mathrel {\unicode {x02255}}}\) \(\newcommand {\Coloneqq }{\mathrel {\unicode {x02A74}}}\) \(\newcommand {\Coloneq }{\mathrel {\unicode {x2237}-}}\) \(\newcommand {\Eqcolon }{\mathrel {-\unicode {x2237}}}\) \(\newcommand {\lvec }[1]{\mathord {\overset {\unicode {x02190}}{#1}}}\) \(\newcommand {\lrvec }[1]{\mathord {\overset {\unicode {x2194}}{#1}}}\) \(\newcommand {\harpoonacc }[1]{\mathord {\overset {\unicode {x021C0}}{#1}}}\) \(\newcommand {\lharpoonacc }[1]{\mathord {\overset {\unicode {x021BC}}{#1}}}\) \(\newcommand {\lrharpoonacc }[1]{\mathord {\overset {\unicode {x0294E}}{#1}}}\) \(\newcommand {\barbar }[1]{\mathord {\overset {=}{#1}}}\) \(\newcommand {\bartilde }[1]{\mathord {\overset {\simeq }{#1}}}\) \(\newcommand {\barhat }[1]{\mathord {\hat {\bar {#1}}}}\) \(\newcommand {\tildebar }[1]{\mathord {\overset {\eqsim }{#1}}}\) \(\newcommand {\tildetilde }[1]{\mathord {\overset {\approx }{#1}}}\) \(\newcommand {\tildehat }[1]{\mathord {\hat {\tilde {#1}}}}\) \(\newcommand {\hatbar }[1]{\mathord {\bar {\hat {#1}}}}\) \(\newcommand {\hattilde }[1]{\mathord {\tilde {\hat {#1}}}}\) \(\newcommand {\hathat }[1]{\mathord {\hat {\hat {#1}}}}\) \(\newcommand {\cdotB }{\mathord {\boldsymbol {\cdot }}}\) \(\newcommand {\cdotBB }{\mathord {\unicode {x2022}}}\) \(\newcommand {\circS }{\boldsymbol {\circ }}\) \(\newcommand {\bulletSSS }{\bullet }\) \(\newcommand {\bulletSS }{\mathord {\unicode {x025CF}}}\) \(\newcommand {\bulletS }{\mathord {\unicode {x02B24}}}\) \(\newcommand {\primeS }{\prime }\) \(\newcommand {\invamp }{\mathbin {\unicode {x0214B}}}\) \(\newcommand {\Lbag }{\mathopen {\large \unicode {x027C5}}}\) \(\newcommand {\Rbag }{\mathclose {\large \unicode {x027C6}}}\) \(\newcommand {\circledless }{\mathrel {\unicode {x029C0}}}\) \(\newcommand {\circledgtr }{\mathrel {\unicode {x029C1}}}\) \(\newcommand {\circledbslash }{\mathbin {\unicode {x029B8}}}\) \(\newcommand {\lJoin }{\mathrel {\unicode {x22C9}}}\) \(\newcommand {\rJoin }{\mathrel {\unicode {x22CA}}}\) \(\newcommand {\lrJoin }{\mathrel {\unicode {x2A1D}}}\) \(\newcommand {\lrtimes }{\mathrel {\unicode {x2A1D}}}\) \(\newcommand {\Diamondblack }{\mathord {\unicode {x025C6}}}\) \(\newcommand {\nplus }{\mathrel {\LWRoverlaysymbols {+}{\unicode {x02229}}}}\) \(\newcommand {\nsqsubset }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x0228F}}}}\) \(\newcommand {\nsqsupset }{\mathrel {\LWRoverlaysymbols {/}{\unicode {x02290}}}}\) \(\newcommand {\dasharrow }{\mathrel {\unicode {x021E2}}}\) \(\newcommand {\leftsquigarrow }{\mathrel {\unicode {x021DC}}}\) \(\newcommand {\ntwoheadrightarrow }{\mathrel {\unicode {x02900}}}\) \(\newcommand {\ntwoheadleftarrow }{\mathrel {\unicode {x02B34}}}\) \(\newcommand {\boxast }{\mathbin {\unicode {x029C6}}}\) \(\newcommand {\boxbslash }{\mathbin {\unicode {x29C5}}}\) \(\newcommand {\boxbar }{\mathbin {\unicode {x025EB}}}\) \(\newcommand {\boxslash }{\mathbin {\unicode {x029C4}}}\) \(\newcommand {\varclubsuit }{\mathord {\unicode {x02667}}}\) \(\newcommand {\vardiamondsuit }{\mathord {\unicode {x02666}}}\) \(\newcommand {\varheartsuit }{\mathord {\unicode {x02665}}}\) \(\newcommand {\varspadesuit }{\mathord {\unicode {x02664}}}\) \(\newcommand {\Nearrow }{\mathrel {\unicode {x021D7}}}\) \(\newcommand {\Searrow }{\mathrel {\unicode {x021D8}}}\) \(\newcommand {\Nwarrow }{\mathrel {\unicode {x021D6}}}\) \(\newcommand {\Swarrow }{\mathrel {\unicode {x021D9}}}\) \(\newcommand {\Top }{\mathord {\unicode {x02AEA}}}\) \(\newcommand {\Bot }{\mathord {\unicode {x02AEB}}}\) \(\newcommand {\leadstoext }{\mathrel {\unicode {xFF5E}}}\) \(\newcommand {\sqcupplus }{\mathbin {\LWRoverlaysymbols {+}{\unicode {x02294}}}}\) \(\newcommand {\sqcapplus }{\mathbin {\LWRoverlaysymbols {+}{\unicode {x02293}}}}\) \(\newcommand {\dlb }{\mathopen {\unicode {x027E6}}}\) \(\newcommand {\drb }{\mathopen {\unicode {x027E7}}}\) \(\newcommand {\varg }{g}\) \(\newcommand {\vary }{y}\) \(\newcommand {\varv }{v}\) \(\newcommand {\varw }{w}\) \(\newcommand {\nexistsAlt }{\mathord {\unicode {x02204}}}\) \(\newcommand {\existsAlt }{\mathord {\unicode {x02203}}}\) \(\newcommand {\forallAlt }{\mathord {\unicode {x02200}}}\) \(\newcommand {\emptysetAlt }{\mathord {\unicode {x02205}}}\) \(\newcommand {\uppartial }{\mathord {\unicode {x02202}}}\) \(\let \varmathbb \mathbb \) \(\let \vmathbb \mathbb \) \(\let \vvmathbb \mathbb \) \(\let \smallprod \prod \) \(\let \smallsum \sum \) \(\let \smallcoprod \coprod \) \(\newcommand {\openbox }{\mathord {\unicode {x25FD}}}\) \(\let \textsquare \openbox \) \(\let \varemptyset \emptyset \) \(\newcommand {\mathsterling }{\mathord {\unicode {x000A3}}}\) \(\newcommand {\mathcent }{\mathord {\unicode {x000A2}}}\) \(\def\Alphaup{\unicode{x0391}}\) \(\def\Betaup{\unicode{x0392}}\) \(\def\Gammaup{\unicode{x0393}}\) \(\def\Digammaup{\unicode{x03DC}}\) \(\def\Deltaup{\unicode{x0394}}\) \(\def\Epsilonup{\unicode{x0395}}\) \(\def\Zetaup{\unicode{x0396}}\) \(\def\Etaup{\unicode{x0397}}\) \(\def\Thetaup{\unicode{x0398}}\) \(\def\Varthetaup{\unicode{x03F4}}\) \(\def\Iotaup{\unicode{x0399}}\) \(\def\Kappaup{\unicode{x039A}}\) \(\def\Lambdaup{\unicode{x039B}}\) \(\def\Muup{\unicode{x039C}}\) \(\def\Nuup{\unicode{x039D}}\) \(\def\Xiup{\unicode{x039E}}\) \(\def\Omicronup{\unicode{x039F}}\) \(\def\Piup{\unicode{x03A0}}\) \(\def\Varpiup{\unicode{x03D6}}\) \(\def\Rhoup{\unicode{x03A1}}\) \(\def\Sigmaup{\unicode{x03A3}}\) \(\def\Tauup{\unicode{x03A4}}\) \(\def\Upsilonup{\unicode{x03A5}}\) \(\def\Phiup{\unicode{x03A6}}\) \(\def\Chiup{\unicode{x03A7}}\) \(\def\Psiup{\unicode{x03A8}}\) \(\def\Omegaup{\unicode{x03A9}}\) \(\def\upAlpha{\unicode{x0391}}\) \(\def\upBeta{\unicode{x0392}}\) \(\def\upGamma{\unicode{x0393}}\) \(\def\upDigamma{\unicode{x03DC}}\) \(\def\upDelta{\unicode{x0394}}\) \(\def\upEpsilon{\unicode{x0395}}\) \(\def\upZeta{\unicode{x0396}}\) \(\def\upEta{\unicode{x0397}}\) \(\def\upTheta{\unicode{x0398}}\) \(\def\upVartheta{\unicode{x03F4}}\) \(\def\upIota{\unicode{x0399}}\) \(\def\upKappa{\unicode{x039A}}\) \(\def\upLambda{\unicode{x039B}}\) \(\def\upMu{\unicode{x039C}}\) \(\def\upNu{\unicode{x039D}}\) \(\def\upXi{\unicode{x039E}}\) \(\def\upOmicron{\unicode{x039F}}\) \(\def\upPi{\unicode{x03A0}}\) \(\def\upVarpi{\unicode{x03D6}}\) \(\def\upRho{\unicode{x03A1}}\) \(\def\upSigma{\unicode{x03A3}}\) \(\def\upTau{\unicode{x03A4}}\) \(\def\upUpsilon{\unicode{x03A5}}\) \(\def\upPhi{\unicode{x03A6}}\) \(\def\upChi{\unicode{x03A7}}\) \(\def\upPsi{\unicode{x03A8}}\) \(\def\upOmega{\unicode{x03A9}}\) \(\def\upalpha{\unicode{x03B1}}\) \(\def\upbeta{\unicode{x03B2}}\) \(\def\upvarbeta{\unicode{x03D0}}\) \(\def\upgamma{\unicode{x03B3}}\) \(\def\updigamma{\unicode{x03DD}}\) \(\def\updelta{\unicode{x03B4}}\) \(\def\upepsilon{\unicode{x03F5}}\) \(\def\upvarepsilon{\unicode{x03B5}}\) \(\def\upzeta{\unicode{x03B6}}\) \(\def\upeta{\unicode{x03B7}}\) \(\def\uptheta{\unicode{x03B8}}\) \(\def\upvartheta{\unicode{x03D1}}\) \(\def\upiota{\unicode{x03B9}}\) \(\def\upkappa{\unicode{x03BA}}\) \(\def\upvarkappa{\unicode{x03F0}}\) \(\def\uplambda{\unicode{x03BB}}\) \(\def\upmu{\unicode{x03BC}}\) \(\def\upnu{\unicode{x03BD}}\) \(\def\upxi{\unicode{x03BE}}\) \(\def\upomicron{\unicode{x03BF}}\) \(\def\uppi{\unicode{x03C0}}\) \(\def\upvarpi{\unicode{x03D6}}\) \(\def\uprho{\unicode{x03C1}}\) \(\def\upvarrho{\unicode{x03F1}}\) \(\def\upsigma{\unicode{x03C3}}\) \(\def\upvarsigma{\unicode{x03C2}}\) \(\def\uptau{\unicode{x03C4}}\) \(\def\upupsilon{\unicode{x03C5}}\) \(\def\upphi{\unicode{x03D5}}\) \(\def\upvarphi{\unicode{x03C6}}\) \(\def\upchi{\unicode{x03C7}}\) \(\def\uppsi{\unicode{x03C8}}\) \(\def\upomega{\unicode{x03C9}}\) \(\def\alphaup{\unicode{x03B1}}\) \(\def\betaup{\unicode{x03B2}}\) \(\def\varbetaup{\unicode{x03D0}}\) \(\def\gammaup{\unicode{x03B3}}\) \(\def\digammaup{\unicode{x03DD}}\) \(\def\deltaup{\unicode{x03B4}}\) \(\def\epsilonup{\unicode{x03F5}}\) \(\def\varepsilonup{\unicode{x03B5}}\) \(\def\zetaup{\unicode{x03B6}}\) \(\def\etaup{\unicode{x03B7}}\) \(\def\thetaup{\unicode{x03B8}}\) \(\def\varthetaup{\unicode{x03D1}}\) \(\def\iotaup{\unicode{x03B9}}\) \(\def\kappaup{\unicode{x03BA}}\) \(\def\varkappaup{\unicode{x03F0}}\) \(\def\lambdaup{\unicode{x03BB}}\) \(\def\muup{\unicode{x03BC}}\) \(\def\nuup{\unicode{x03BD}}\) \(\def\xiup{\unicode{x03BE}}\) \(\def\omicronup{\unicode{x03BF}}\) \(\def\piup{\unicode{x03C0}}\) \(\def\varpiup{\unicode{x03D6}}\) \(\def\rhoup{\unicode{x03C1}}\) \(\def\varrhoup{\unicode{x03F1}}\) \(\def\sigmaup{\unicode{x03C3}}\) \(\def\varsigmaup{\unicode{x03C2}}\) \(\def\tauup{\unicode{x03C4}}\) \(\def\upsilonup{\unicode{x03C5}}\) \(\def\phiup{\unicode{x03D5}}\) \(\def\varphiup{\unicode{x03C6}}\) \(\def\chiup{\unicode{x03C7}}\) \(\def\psiup{\unicode{x03C8}}\) \(\def\omegaup{\unicode{x03C9}}\) \(\def\Alphait{\unicode{x1D6E2}}\) \(\def\Betait{\unicode{x1D6E3}}\) \(\def\Gammait{\unicode{x1D6E4}}\) \(\def\Digammait{\mathit{\unicode{x03DC}}}\) \(\def\Deltait{\unicode{x1D6E5}}\) \(\def\Epsilonit{\unicode{x1D6E6}}\) \(\def\Zetait{\unicode{x1D6E7}}\) \(\def\Etait{\unicode{x1D6E8}}\) \(\def\Thetait{\unicode{x1D6E9}}\) \(\def\Varthetait{\unicode{x1D6F3}}\) \(\def\Iotait{\unicode{x1D6EA}}\) \(\def\Kappait{\unicode{x1D6EB}}\) \(\def\Lambdait{\unicode{x1D6EC}}\) \(\def\Muit{\unicode{x1D6ED}}\) \(\def\Nuit{\unicode{x1D6EE}}\) \(\def\Xiit{\unicode{x1D6EF}}\) \(\def\Omicronit{\unicode{x1D6F0}}\) \(\def\Piit{\unicode{x1D6F1}}\) \(\def\Rhoit{\unicode{x1D6F2}}\) \(\def\Sigmait{\unicode{x1D6F4}}\) \(\def\Tauit{\unicode{x1D6F5}}\) \(\def\Upsilonit{\unicode{x1D6F6}}\) \(\def\Phiit{\unicode{x1D6F7}}\) \(\def\Chiit{\unicode{x1D6F8}}\) \(\def\Psiit{\unicode{x1D6F9}}\) \(\def\Omegait{\unicode{x1D6FA}}\) \(\def\alphait{\unicode{x1D6FC}}\) \(\def\betait{\unicode{x1D6FD}}\) \(\def\varbetait{\unicode{x03D0}}\) \(\def\gammait{\unicode{x1D6FE}}\) \(\def\digammait{\mathit{\unicode{x03DD}}}\) \(\def\deltait{\unicode{x1D6FF}}\) \(\def\epsilonit{\unicode{x1D716}}\) \(\def\varepsilonit{\unicode{x1D700}}\) \(\def\zetait{\unicode{x1D701}}\) \(\def\etait{\unicode{x1D702}}\) \(\def\thetait{\unicode{x1D703}}\) \(\def\varthetait{\unicode{x1D717}}\) \(\def\iotait{\unicode{x1D704}}\) \(\def\kappait{\unicode{x1D705}}\) \(\def\varkappait{\unicode{x1D718}}\) \(\def\lambdait{\unicode{x1D706}}\) \(\def\muit{\unicode{x1D707}}\) \(\def\nuit{\unicode{x1D708}}\) \(\def\xiit{\unicode{x1D709}}\) \(\def\omicronit{\unicode{x1D70A}}\) \(\def\piit{\unicode{x1D70B}}\) \(\def\varpiit{\unicode{x1D71B}}\) \(\def\rhoit{\unicode{x1D70C}}\) \(\def\varrhoit{\unicode{x1D71A}}\) \(\def\sigmait{\unicode{x1D70E}}\) \(\def\varsigmait{\unicode{x1D70D}}\) \(\def\tauit{\unicode{x1D70F}}\) \(\def\upsilonit{\unicode{x1D710}}\) \(\def\phiit{\unicode{x1D719}}\) \(\def\varphiit{\unicode{x1D711}}\) \(\def\chiit{\unicode{x1D712}}\) \(\def\psiit{\unicode{x1D713}}\) \(\def\omegait{\unicode{x1D714}}\) \(\def\itAlpha{\unicode{x1D6E2}}\) \(\def\itBeta{\unicode{x1D6E3}}\) \(\def\itGamma{\unicode{x1D6E4}}\) \(\def\itDigamma{\mathit{\unicode{x03DC}}}\) \(\def\itDelta{\unicode{x1D6E5}}\) \(\def\itEpsilon{\unicode{x1D6E6}}\) \(\def\itZeta{\unicode{x1D6E7}}\) \(\def\itEta{\unicode{x1D6E8}}\) \(\def\itTheta{\unicode{x1D6E9}}\) \(\def\itVartheta{\unicode{x1D6F3}}\) \(\def\itIota{\unicode{x1D6EA}}\) \(\def\itKappa{\unicode{x1D6EB}}\) \(\def\itLambda{\unicode{x1D6EC}}\) \(\def\itMu{\unicode{x1D6ED}}\) \(\def\itNu{\unicode{x1D6EE}}\) \(\def\itXi{\unicode{x1D6EF}}\) \(\def\itOmicron{\unicode{x1D6F0}}\) \(\def\itPi{\unicode{x1D6F1}}\) \(\def\itRho{\unicode{x1D6F2}}\) \(\def\itSigma{\unicode{x1D6F4}}\) \(\def\itTau{\unicode{x1D6F5}}\) \(\def\itUpsilon{\unicode{x1D6F6}}\) \(\def\itPhi{\unicode{x1D6F7}}\) \(\def\itChi{\unicode{x1D6F8}}\) \(\def\itPsi{\unicode{x1D6F9}}\) \(\def\itOmega{\unicode{x1D6FA}}\) \(\def\italpha{\unicode{x1D6FC}}\) \(\def\itbeta{\unicode{x1D6FD}}\) \(\def\itvarbeta{\unicode{x03D0}}\) \(\def\itgamma{\unicode{x1D6FE}}\) \(\def\itdigamma{\mathit{\unicode{x03DD}}}\) \(\def\itdelta{\unicode{x1D6FF}}\) \(\def\itepsilon{\unicode{x1D716}}\) \(\def\itvarepsilon{\unicode{x1D700}}\) \(\def\itzeta{\unicode{x1D701}}\) \(\def\iteta{\unicode{x1D702}}\) \(\def\ittheta{\unicode{x1D703}}\) \(\def\itvartheta{\unicode{x1D717}}\) \(\def\itiota{\unicode{x1D704}}\) \(\def\itkappa{\unicode{x1D705}}\) \(\def\itvarkappa{\unicode{x1D718}}\) \(\def\itlambda{\unicode{x1D706}}\) \(\def\itmu{\unicode{x1D707}}\) \(\def\itnu{\unicode{x1D708}}\) \(\def\itxi{\unicode{x1D709}}\) \(\def\itomicron{\unicode{x1D70A}}\) \(\def\itpi{\unicode{x1D70B}}\) \(\def\itvarpi{\unicode{x1D71B}}\) \(\def\itrho{\unicode{x1D70C}}\) \(\def\itvarrho{\unicode{x1D71A}}\) \(\def\itsigma{\unicode{x1D70E}}\) \(\def\itvarsigma{\unicode{x1D70D}}\) \(\def\ittau{\unicode{x1D70F}}\) \(\def\itupsilon{\unicode{x1D710}}\) \(\def\itphi{\unicode{x1D719}}\) \(\def\itvarphi{\unicode{x1D711}}\) \(\def\itchi{\unicode{x1D712}}\) \(\def\itpsi{\unicode{x1D713}}\) \(\def\itomega{\unicode{x1D714}}\) \(\newcommand{\anglesLWRsubstar}[2][]{{#1\left \langle #2#1\right \rangle }}\) \(\newcommand{\anglesLWRsubnostar}[2][]{{#1\langle #2#1\rangle }}\) \(\newcommand{\angles}{\ifstar\anglesLWRsubstar\anglesLWRsubnostar}\)

1Introduction

TikZ-Feynman provides a new way to draw Feynman diagrams in LATEX that does not rely on external programs and uses a clear extensible syntax.

If you use TikZ-Feynman in an academic setting, please cite:

J. P. Ellis, ‘TikZ-feynman: Feynman diagrams with TikZ’, Computer Physics Communications, issn: 0010-4655 (2016) 10.1016/j.cpc.2016.08.019, arXiv:1601.05437 [hep-ph]

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 Feynman and first appear in his paper ‘Space-Time Approach to Quantum Electrodynamics’ [Feynman 1949]. Since then, LATEX has become widely used to type-set scientific papers and currently, two leading methods of drawing Feynman diagrams in LATEX are feynMF/feynMP [Ohl 1995] and AxoDraw [Vermaseren 1994, Collins and Vermaseren 2016], with the latter also featuring a gui front-end called JaxoDraw [Binosi and Theussl 2004, Binosi et al. 2009].

In feynMF/feynMP, the position of vertices follows an algorithm whilst AxoDraw requires their position to be specified on a grid. As an example, the code to generate an \(\ell \ell \to \ell \ell \) scattering Feynman diagram in each package is:

.

AxoDraw

feynMF/feynMP

TikZ-Feynman

\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}
\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*}
\feynmandiagram [horizontal=a to b] {
i1 -- [fermion] a -- [fermion] i2,
a -- [photon] b,
f1 -- [fermion] b -- [fermion] f2,
};

The inconvenience of specifying absolute coordinates in AxoDraw is alleviated by JaxoDraw, though this requires an external program. In addition, the creation of Feynman diagrams in feynMF/feynMP and AxoDraw requires further processing outside of LATEX.1

TikZ-Feynman on the other hand requires no external program and delegates the positioning of vertices to algorithms originally developed by Hu [Hu 2005], and Eades and Sugiyama [Eades and Sugiyama 1991], both of which were implemented into TikZ by Pohlmann [Pohlmann 2011]. Since TikZ-Feynman is built on TikZ, users can harness the power and extensibilty of TikZ [Tantau 2015] 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 TikZ-Feynman so that any diagram can be generated with relative ease.

TikZ-Feynman is made available through the Comprehensive TEX Archive Network (ctan)2 and can also be downloaded from the project page3. The project is open source and contributions are welcome. The management of bugs and feature requests is done at Github4.

TikZ-Feynman’s versioning will approximately follow 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 otherwise5. Changes in the second number (1.0.0 to 1.1.0) will consist of new features and 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 when the package is loaded with \usepackage[compat=x.y.z]{tikz-feynman} so the user may be informed of any discrepancy. If needed, earlier versions may be downloaded from the project page6.

1 With the exception of AxoDraw when compiled with latex.

2 https://ctan.org/pkg/tikz-feynman

3 http://www.jpellis.me/projects/tikz-feynman

4 https://github.com/JP-Ellis/tikz-feynman

5 That is, with the exception of the bug that they are fixing.

6 http://www.jpellis.me/projects/tikz-feynman

Licence

The documentation may be redistributed and/or modified 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.

The code of this package may be distributed and/or modified 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 package 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.

Acknowledgements

The original proof-of-concept for using TikZ to draw Feynman diagrams was done by the user ‘Jake’ on the TEX StackExchange. His original answer can be viewed at: http://tex.stackexchange.com/a/87395/26980.

I must also thank all the people who have used the development versions of TikZ-Feynman and offered suggestions to improve it and found bugs for me to fix.

This work was partially supported by the N. D. Goldsworthy Scholarship for Physics.