%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % TikZ-Feynman % Feynman Diagrams with TikZ % Copyright (C) 2015 Joshua Ellis % % % This work 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 program 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 LaTeX Project Public License for more % details. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Shapes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Crossed Circle %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfdeclareshape{crossed circle} { \inheritsavedanchors[from=circle] \inheritanchorborder[from=circle] \inheritanchor[from=circle]{north} \inheritanchor[from=circle]{north west} \inheritanchor[from=circle]{north east} \inheritanchor[from=circle]{center} \inheritanchor[from=circle]{west} \inheritanchor[from=circle]{east} \inheritanchor[from=circle]{mid} \inheritanchor[from=circle]{mid west} \inheritanchor[from=circle]{mid east} \inheritanchor[from=circle]{base} \inheritanchor[from=circle]{base west} \inheritanchor[from=circle]{base east} \inheritanchor[from=circle]{south} \inheritanchor[from=circle]{south west} \inheritanchor[from=circle]{south east} \inheritbackgroundpath[from=circle] \foregroundpath{ % Compute south west \centerpoint \pgf@xc=\radius \advance\pgf@x by-0.707107\pgf@xc \advance\pgf@y by-0.707107\pgf@xc \pgf@xa=\pgf@x \pgf@ya=\pgf@y % Store coordinates % Compute north east point \centerpoint \pgf@xc=\radius \advance\pgf@x by0.707107\pgf@xc \advance\pgf@y by0.707107\pgf@xc \pgf@xb=\pgf@x \pgf@yb=\pgf@y % Store coordinates \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}} \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}} \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}} \pgfsetarrowsstart{} \pgfsetarrowsend{} } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Decorations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Complete Sines %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Complete sines replaces the path with a whole number of sine waves. %% Thanks to http://tex.stackexchange.com/a/134516/26980 \pgfdeclaredecoration{complete sines}{initial} { %% Begin by computing the overall path length and find how many sine waves we %% can fit in. Nothing happens beyond the computation. \state{initial}[ width=+0pt, next state=move, persistent precomputation={ \def\tikzfeynman@cs@angle@step{30} \def\tikzfeynman@cs@current@angle{0} \pgfmathsetlengthmacro{\tikzfeynman@cs@points@per@step}{ \pgfdecoratedinputsegmentlength / int(\pgfdecoratedinputsegmentlength / \pgfdecorationsegmentlength) / 360 * \tikzfeynman@cs@angle@step} }, ]{} %% Move to the origin to the path \state{move}[ width=+\tikzfeynman@cs@points@per@step, next state=draw ]{ \pgfpathmoveto{\pgfpointorigin} } %% Draw the sine wave itself. This computes the value every 20 degrees and draws straight edges. \state{draw}[ width=+\tikzfeynman@cs@points@per@step, switch if less than=1.25*\tikzfeynman@cs@points@per@step to final, % <- bit of a hack persistent postcomputation={ \pgfmathparse{mod(\tikzfeynman@cs@current@angle+\tikzfeynman@cs@angle@step, 360)} \let\tikzfeynman@cs@current@angle=\pgfmathresult% }, ]{ \pgfmathparse{sin(\tikzfeynman@cs@current@angle) * \pgfmetadecorationsegmentamplitude / 2} \tikz@decoratepathfalse \pgfpathlineto{\pgfqpoint{0pt}{\pgfmathresult pt}}% } \state{final}{ \ifdim\pgfdecoratedremainingdistance>0pt\relax \pgfpathlineto{\pgfpointdecoratedpathlast} \fi } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Keys %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \tikzfeynmanset{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Hooks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% execute at begin feynman/.code={}, execute at end feynman/.code={}, every feynman/.style={/tikzfeynman/every feynman@@/.append style={#1}}, every feynman@@/.style={ /tikzfeynman/.cd, /tikzfeynman/medium, }, execute at begin feynman@@/.code={} %% Internal version execute at end feynman@@/.code={}, %% Internal version %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Diagrams %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% every diagram/.style={/tikzfeynman/every diagram@@/.append style={#1}}, every diagram@@/.style={ /tikzfeynman/.cd, .search also={/tikz/graphs, /tikz}, nodes={ /tikzfeynman/.cd, /tikzfeynman/.search also={/tikz/graphs, /tikz}, /tikzfeynman/every vertex@@, /tikzfeynman/every vertex}, edges={ /tikzfeynman/.cd, /tikzfeynman/.search also={/tikz/graphs, /tikz}, /tikzfeynman/every edge@@, /tikzfeynman/every edge}, /tikzfeynman/medium, }, every inline/.style={/tikzfeynman/inline@@/.append style={#1}}, every inline@@/.style={ /tikzfeynman/small, }, inline/.style={ /tikz/baseline={#1}, /tikzfeynman/every inline@@, }, every small/.style={/tikzfeynman/small@@/.append style={#1}}, every small@@/.style={ /tikz/node distance=1cm, /graph drawing/node distance=1.25cm, /graph drawing/level distance=1cm, /graph drawing/sibling distance=1.5cm, /tikzfeynman/every dot@@/.append style={/tikz/minimum size=1mm}, /tikzfeynman/every crossed dot@@/.append style={/tikz/minimum size=2mm}, /tikzfeynman/every blob@@/.append style={/tikz/minimum size=0.5cm}, /tikzfeynman/arrow size=1.2pt, /tikzfeynman/insertion/size=2.5pt, }, small/.style={/tikzfeynman/every small@@}, every medium/.style={/tikzfeynman/medium@@/.append style={#1}}, every medium@@/.style={ /tikz/node distance=1.5cm, /graph drawing/node distance=1.9cm, /graph drawing/level distance=1.5cm, /graph drawing/sibling distance=2.25cm, }, medium/.style={/tikzfeynman/every medium@@}, every large/.style={/tikzfeynman/large@@/.append style={#1}}, every large@@/.style={ /tikz/node distance=2cm, /graph drawing/node distance=2.5cm, /graph drawing/level distance=2cm, /graph drawing/sibling distance=3cm, /tikz/graphs/edges={thick}, /tikzfeynman/every dot@@/.append style={/tikz/minimum size=2mm}, /tikzfeynman/every crossed dot@@/.append style={/tikz/minimum size=4mm}, /tikzfeynman/every blob@@/.append style={/tikz/minimum size=1cm}, /tikzfeynman/arrow size=1.6pt, /tikzfeynman/insertion/size=4pt, }, large/.style={/tikzfeynman/every large@@}, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Vertices %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% every vertex@@/.style={ /tikz/shape=coordinate, }, every vertex/.style={/tikzfeynman/every vertex@@/.append style={#1}}, vertex/.style={ /tikzfeynman/every vertex@@, }, every dot@@/.style={ /tikz/shape=circle, /tikz/graphs/as={}, /tikz/draw, /tikz/fill, /tikz/inner sep=0pt, /tikz/outer sep=0pt, /tikz/minimum size=1.5mm, }, every dot/.style={/tikzfeynman/every dot@@/.append style={#1}}, dot/.style={ /tikzfeynman/every dot@@, }, every square dot@@/.style={ /tikz/shape=rectangle, }, every square dot/.style={/tikzfeynman/every square dot@@/.append style={#1}}, square dot/.style={ /tikzfeynman/every dot@@, /tikzfeynman/every square dot@@, }, every empty dot@@/.style={ /tikz/fill=none, }, every empty dot/.style={/tikzfeynman/every empty dot@@/.append style={#1}}, empty dot/.style={ /tikzfeynman/every dot@@, /tikzfeynman/every empty dot@@, }, every crossed dot@@/.style={ /tikz/fill=none, /tikz/shape=crossed circle, /tikz/minimum size=3mm, }, every crossed dot/.style={/tikzfeynman/every crossed dot@@/.append style={#1}}, crossed dot/.style={ /tikzfeynman/every dot@@, /tikzfeynman/every crossed dot@@, }, every blob@@/.style={ /tikz/shape=circle, /tikz/graphs/as={}, /tikz/draw, /tikz/fill=none, /tikz/outer sep=0.5\pgflinewidth, /tikz/inner sep=0pt, /tikz/minimum size=0.75cm, /tikz/pattern=north west lines, }, every blob/.style={/tikzfeynman/every blob@@/.append style={#1}}, blob/.style={ /tikzfeynman/every blob@@, }, every particle@@/.style={ /tikz/shape=rectangle, /tikz/draw=none, /tikz/fill=none, /tikz/inner sep=0.3333em, /tikz/outer sep=0.5\pgflinewidth, }, every particle/.style={/tikzfeynman/every particle@@/.append style={#1}}, particle/.style args={#1}{ /tikzfeynman/every particle@@, /tikz/graphs/as={#1}, }, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Edge styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Arrow Style %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% arrow size/.store in=\tikzfeynman@arrow@size, arrow size=1.5pt, with arrow/.style={ /tikz/decoration={ markings, mark=at position #1 with { \node[ transform shape, xshift=-0.5mm, fill, inner sep=\tikzfeynman@arrow@size, draw=none, isosceles triangle ] { }; }, }, /tikz/postaction={ /tikz/decorate=true, }, }, with reversed arrow/.style={ /tikz/decoration={ markings, mark=at position #1 with { \node[ transform shape, xshift=-0.5mm, rotate=180, fill, inner sep=\tikzfeynman@arrow@size, draw=none, isosceles triangle ] { }; }, }, /tikz/postaction={ /tikz/decorate=true, }, }, %% Base Edge Styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% every edge@@/.style={}, every edge/.style={/tikzfeynman/every edge@@/.append style={#1}}, %% Specific Styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% every plain@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw }, }, every plain/.style={/tikzfeynman/every plain@@/.append style={#1}}, plain/.style={ /tikzfeynman/every plain@@, }, every boson@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw, /tikz/decoration={ complete sines, amplitude=1mm, segment length=2mm, }, /tikz/decorate=true, }, }, every boson/.style={/tikzfeynman/every boson@@/.append style={#1}}, boson/.style={ /tikzfeynman/every boson@@, }, every charged boson@@/.style={ /tikzfeynman/with arrow=0.5, }, every charged boson/.style={/tikzfeynman/every charged boson@@/.append style={#1}}, charged boson/.style={ /tikzfeynman/boson, /tikzfeynman/every charged boson@@, }, every anti charged boson@@/.style={ /tikzfeynman/with reversed arrow=0.5, }, every anti charged boson/.style={/tikzfeynman/every anti charged boson@@/.append style={#1}}, anti charged boson/.style={ /tikzfeynman/boson, /tikzfeynman/every anti charged boson@@, }, every photon@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw, /tikz/decoration={ complete sines, amplitude=1mm, segment length=2mm, }, /tikz/decorate=true, }, }, every photon/.style={/tikzfeynman/every photon@@/.append style={#1}}, photon/.style={ /tikzfeynman/every photon@@, }, every scalar@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw, /tikz/dashed, }, }, every scalar/.style={/tikzfeynman/every scalar@@/.append style={#1}}, scalar/.style={ /tikzfeynman/every scalar@@, }, every charged scalar@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikzfeynman/with arrow=0.5, }, }, every charged scalar/.style={/tikzfeynman/every charged scalar@@/.append style={#1}}, charged scalar/.style={ /tikzfeynman/scalar, /tikzfeynman/every charged scalar@@, }, every anti charged scalar@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikzfeynman/with reversed arrow=0.5, }, }, every anti charged scalar/.style={/tikzfeynman/every anti charged scalar@@/.append style={#1}}, anti charged scalar/.style={ /tikzfeynman/scalar, /tikzfeynman/every anti charged scalar@@, }, every ghost@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw, /tikz/dotted, /tikz/thick, }, }, every ghost/.style={/tikzfeynman/every ghost@@/.append style={#1}}, ghost/.style={ /tikzfeynman/every ghost@@, }, every fermion@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw, /tikzfeynman/with arrow=0.5, }, }, every fermion/.style={/tikzfeynman/every fermion@@/.append style={#1}}, fermion/.style={ /tikzfeynman/every fermion@@, }, every anti fermion@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw, /tikzfeynman/with reversed arrow=0.5, }, }, every anti fermion/.style={/tikzfeynman/every anti fermion@@/.append style={#1}}, anti fermion/.style={ /tikzfeynman/every anti fermion@@, }, every majorana@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw, /tikzfeynman/with arrow=0.33, /tikzfeynman/with reversed arrow=0.73, }, }, every majorana/.style={/tikzfeynman/every majorana@@/.append style={#1}}, majorana/.style={ /tikzfeynman/every majorana@@, }, every anti majorana@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw, /tikzfeynman/with reversed arrow=0.33, /tikzfeynman/with arrow=0.73, }, }, every anti majorana/.style={/tikzfeynman/every anti majorana@@/.append style={#1}}, anti majorana/.style={ /tikzfeynman/every anti majorana@@, }, every gluon@@/.style={ /tikz/draw=none, /tikz/decoration={name=none}, /tikz/postaction={ /tikz/draw, /tikz/decoration={ coil, aspect=0.75, mirror, segment length=1.5mm }, /tikz/decorate=true, }, }, every gluon/.style={/tikzfeynman/every gluon@@/.append style={#1}}, gluon/.style={ /tikzfeynman/every gluon@@, }, %% Insertions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% insertion/.search also={/tikzfeynman,/tikz}, %% Parameters insertion/size/.store in=\tikzfeynman@insertion@size, insertion/size=3pt, insertion/style/.store in=\tikzfeynman@insertion@style, insertion/style={}, %% Styles insertion@@/.style args={[#1]#2}{ /tikz/decoration={ markings, mark=at position #2 with { \tikzfeynmanset{insertion/.cd,#1} \draw [\tikzfeynman@insertion@style] (-\tikzfeynman@insertion@size, -\tikzfeynman@insertion@size) -- (\tikzfeynman@insertion@size, \tikzfeynman@insertion@size); \draw [\tikzfeynman@insertion@style] (-\tikzfeynman@insertion@size, \tikzfeynman@insertion@size) -- (\tikzfeynman@insertion@size, -\tikzfeynman@insertion@size); }, }, /tikz/postaction={ /tikz/decorate=true, }, }, insertion@@/.default={[]0.5}, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Momentum arrows %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% momentum/.search also={/tikzfeynman,/tikz}, %% Parameters momentum/label distance/.store in=\tikzfeynman@momentum@label@distance, momentum/label distance=0pt, momentum/arrow distance/.store in=\tikzfeynman@momentum@arrow@distance, momentum/arrow distance=3mm, momentum/arrow shorten/.store in=\tikzfeynman@momentum@arrow@shorten, momentum/arrow shorten=0.15, momentum/label style/.store in=\tikzfeynman@momentum@label@style, momentum/label style={}, momentum/arrow style/.store in=\tikzfeynman@momentum@arrow@style, momentum/arrow style={}, %% Styles momentum@@/.style args={[#1]#2}{ /tikz/preaction={ /tikz/decoration={ show path construction, moveto code={}, lineto code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast) coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1) coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2); \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$) -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@1)$) node [pos=0.5, auto, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@label@style] {#2}; }, curveto code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentfirst) .. controls (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb) .. (\tikzinputsegmentlast) { \foreach \i in {1, ..., 50} { coordinate [pos=\tikzfeynman@momentum@arrow@shorten + (1-2 * \tikzfeynman@momentum@arrow@shorten)*\i/50] (tf@m@\i) } }; \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$) foreach \i [count=\j from 3] in {2, ..., 24} { -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@\j)$) } -- ($(tf@m@25)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@26)$) node [pos=0.5, auto, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@arrow@style] {#2} foreach \i [count=\j from 27] in {26, ..., 49} { -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@\j)$) } -- ($(tf@m@50)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@49)$); }, closepath code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast) coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1) coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2); \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$) -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@1)$) node [pos=0.5, auto, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@label@style] {#2}; }, }, /tikz/decorate=true, }, }, momentum'@@/.style args={[#1]#2}{ /tikz/preaction={ /tikz/decoration={ show path construction, moveto code={}, lineto code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast) coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1) coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2); \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$) -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@1)$) node [pos=0.5, auto, swap, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@label@style] {#2}; }, curveto code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentfirst) .. controls (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb) .. (\tikzinputsegmentlast) { \foreach \i in {1, ..., 50} { coordinate [pos=\tikzfeynman@momentum@arrow@shorten + (1-2 * \tikzfeynman@momentum@arrow@shorten)*\i/50] (tf@m@\i) } }; \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$) foreach \i [count=\j from 3] in {2, ..., 24} { -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@\j)$) } -- ($(tf@m@25)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@26)$) node [pos=0.5, auto, swap, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@arrow@style] {#2} foreach \i [count=\j from 27] in {26, ..., 49} { -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@\j)$) } -- ($(tf@m@50)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@49)$); }, closepath code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast) coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1) coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2); \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$) -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@1)$) node [pos=0.5, auto, swap, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@label@style] {#2}; }, }, /tikz/decorate=true, }, }, reversed momentum@@/.style args={[#1]#2}{ /tikz/preaction={ /tikz/decoration={ show path construction, moveto code={}, lineto code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst) coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1) coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2); \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$) -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@1)$) node [pos=0.5, auto, swap, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@label@style] {#2}; }, curveto code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentlast) .. controls (\tikzinputsegmentsupportb) and (\tikzinputsegmentsupporta) .. (\tikzinputsegmentfirst) { \foreach \i in {1, ..., 50} { coordinate [pos=\tikzfeynman@momentum@arrow@shorten + (1-2 * \tikzfeynman@momentum@arrow@shorten)*\i/50] (tf@m@\i) } }; \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$) foreach \i [count=\j from 3] in {2, ..., 24} { -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@\j)$) } -- ($(tf@m@25)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@26)$) node [pos=0.5, auto, swap, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@arrow@style] {#2} foreach \i [count=\j from 27] in {26, ..., 49} { -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@\j)$) } -- ($(tf@m@50)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@49)$); }, closepath code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst) coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1) coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2); \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$) -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@1)$) node [pos=0.5, auto, swap, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@label@style] {#2}; }, }, /tikz/decorate=true, }, }, reversed momentum'@@/.style args={[#1]#2}{ /tikz/preaction={ /tikz/decoration={ show path construction, moveto code={}, lineto code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst) coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1) coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2); \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$) -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@1)$) node [pos=0.5, auto, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@label@style] {#2}; }, curveto code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentlast) .. controls (\tikzinputsegmentsupportb) and (\tikzinputsegmentsupporta) .. (\tikzinputsegmentfirst) { \foreach \i in {1, ..., 50} { coordinate [pos=\tikzfeynman@momentum@arrow@shorten + (1-2 * \tikzfeynman@momentum@arrow@shorten)*\i/50] (tf@m@\i) } }; \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$) foreach \i [count=\j from 3] in {2, ..., 24} { -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@\j)$) } -- ($(tf@m@25)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@26)$) node [pos=0.5, auto, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@arrow@style] {#2} foreach \i [count=\j from 27] in {26, ..., 49} { -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@\j)$) } -- ($(tf@m@50)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@49)$); }, closepath code={ \tikzfeynmanset{momentum/.cd,#1} \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst) coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1) coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2); \draw [-Stealth, \tikzfeynman@momentum@arrow@style] ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$) -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@1)$) node [pos=0.5, auto, outer sep=\tikzfeynman@momentum@label@distance, \tikzfeynman@momentum@label@style] {#2}; }, }, /tikz/decorate=true, }, }, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Modifiers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% half left/.style={ /tikz/bend left=90, /tikz/looseness=1.5, }, half right/.style={ /tikz/bend right=90, /tikz/looseness=1.5, }, quarter left/.style={ /tikz/bend left=45, }, quarter right/.style={ /tikz/bend right=45, }, } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Graceful Failure of LuaTeX keys %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\tikzfeynman@luatex@required@path{ \PackageWarning{tikz-feynman}{The key you tried to use '\pgfkeyscurrentpath/\pgfkeyscurrentname' requires LuaTeX. It will be ignored.} } \def\tikzfeynman@luatex@required@key{ \PackageWarning{tikz-feynman}{The key you tried to use '\pgfkeyscurrentpath' requires LuaTeX. It will be ignored.} } \ifluatex\else \pgfkeys{ /graph drawing/.unknown/.code=\tikzfeynman@luatex@required@path, /tikz/graphs/.unknown/.code=\tikzfeynman@luatex@required@path, /tikz/horizontal/.code=\tikzfeynman@luatex@required@key, /tikz/horizontal'/.code=\tikzfeynman@luatex@required@key, /tikz/vertical/.code=\tikzfeynman@luatex@required@key, /tikz/vertical'/.code=\tikzfeynman@luatex@required@key, /tikz/tree layout/.code=\tikzfeynman@luatex@required@key, /tikz/spring layout/.code=\tikzfeynman@luatex@required@key, /tikz/layered layout/.code=\tikzfeynman@luatex@required@key, /tikz/spring electrical layout/.code=\tikzfeynman@luatex@required@key, /tikz/electric charge/.code=\tikzfeynman@luatex@required@key, } % \tikzfeynmanset{ % horizontal/.code={The key 'horizontal' requires LuaTeX. It will be ignored.}, % } \fi \endinput