%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % TikZ-FeynHand, Version 1.1.0 of 2019/08/19 % Feynhand Diagrams with TikZ (LaTex manual version) % Copyright (C) 2019 Max Dohse % Copyright (C) 2016 Joshua Ellis % % This LaTeX file and the whole package are 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 file is a modification of the file tikzlibraryfeynman.code.tex % of the package tikz-feynman (version 1.1.0 of 2016/02/05) % which is available online at https://ctan.org/pkg/tikz-feynman % for a list of changes, see the file CHANGES.TXT % % available at https://ctan.org/pkg/tikz-feynhand % The Current Maintainer of this work is Max Dohse. % % 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. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Pre-requisites %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usetikzlibrary{ arrows.meta, calc, decorations, decorations.markings, decorations.pathmorphing, decorations.pathreplacing, external, patterns, positioning, shapes.geometric, } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Function definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Miscellaneous functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\tikzfeynhand@empty{} %% Key Manager %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Setup the tikz-feynhand key family \pgfkeys{ /tikzfeynhand/.is family, /tikzfeynhand/.search also={/tikz}, } %% |\tikzfeynhandset| allows keys that belong with tikz-feynhand to be easily set. \def\tikzfeynhandset{\pgfqkeys{/tikzfeynhand}} %% Version check %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Check which version is expected and which is installed \def\tikzfeynhand@compat@parse#1.#2.#3\pgfeov{ \edef\tikzfeynhand@compat@major{#1} \edef\tikzfeynhand@compat@minor{#2} \edef\tikzfeynhand@compat@patch{#3} \edef\tikzfeynhand@compat{#1.#2.#3} } \let\tikzfeynhand@compat=\tikzfeynhand@empty \pgfkeyslet{/tikzfeynhand/compat/.@cmd}{\tikzfeynhand@compat@parse} \ProcessPgfPackageOptions{/tikzfeynhand} \AtBeginDocument{ \ifx\tikzfeynhand@version\tikzfeynhand@compat\else \ifx\tikzfeynhand@compat\tikzfeynhand@empty \PackageWarning{tikz-feynhand}{Consider loading TikZ-Feynhand with \string\usepackage[compat=\tikzfeynhand@version]{tikz-feynhand} so that you can be warned if TikZ-Feynhand changes.} \else \ifx\tikzfeynhand@compat@major\tikzfeynhand@version@major \ifx\tikzfeynhand@compat@minor\tikzfeynhand@version@minor \ifx\tikzfeynhand@compat@patch\tikzfeynhand@version@patch\else \PackageInfo{tikz-feynhand}{The preamble requested version \tikzfeynhand@compat, but the system version is \tikzfeynhand@version. This should cause no issue.} \fi \else \PackageWarning{tikz-feynhand}{The preamble requested version \tikzfeynhand@compat, but the system version is \tikzfeynhand@version. This may change some diagrams.} \fi \else \PackageError{tikz-feynhand}{The preamble requested version \tikzfeynhand@compat, but the system version is \tikzfeynhand@version. They are most likely incompatible. Please download the appropriate version from jpellis.me/projects/tikz-feynhand.} \fi \fi \fi } %% Feynhand Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Provide `\begin{feynhand} ... \end{feynhand}` within TikZ pictures. \tikzaddtikzonlycommandshortcutlet\feynhand\tikzfeynhand@environment@feynhand \tikzaddtikzonlycommandshortcutlet\endfeynhand\endtikzfeynhand@environment@feynhand %% \begin{feynhand}...\end{feynhand} \def\tikzfeynhand@environment@feynhand{% \pgfutil@ifnextchar[{\tikzfeynhand@environment@feynhand@opt} {\tikzfeynhand@environment@feynhand@opt[]}} \def\tikzfeynhand@environment@feynhand@opt[#1]{% \begingroup %% Local overrides \let\tikz@@scan@fig=\tikzfeynhand@scan@fig %% Local commands \let\vertex=\tikzfeynhand@commands@vertex \let\propagator=\tikzfeynhand@commands@propagator \let\propag=\propagator %% Opening hooks \scope \tikzfeynhand@tikz@search@tikzfeynhand \pgfkeys{/tikzfeynhand/every feynhand@@,#1} \pgfkeysvalueof{/tikzfeynhand/execute at begin feynhand@@}% \pgfkeysvalueof{/tikzfeynhand/execute at begin feynhand}% } \def\endtikzfeynhand@environment@feynhand{% %% Closing hooks \pgfkeysvalueof{/tikzfeynhand/execute at end feynhand}% \pgfkeysvalueof{/tikzfeynhand/execute at end feynhand@@}% \endscope \endgroup } %%% Allow empty nodes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newif\iftikzfeynhandallowemptynode \newif\iftikzfeynhandvertex \def\tikzfeynhand@scan@fig{% \pgfutil@ifnextchar a{\tikz@fig@scan@at} {\pgfutil@ifnextchar({\tikz@fig@scan@name} {\pgfutil@ifnextchar[{\tikz@fig@scan@options}% {\pgfutil@ifnextchar\bgroup{\tikz@fig@main}% {\iftikzfeynhandvertex% \tikzset{/tikzfeynhand/every vertex@@}% \iftikzfeynhandallowemptynode% \else% \tikzset{/tikzfeynhand/particle}% \fi% \fi% \tikz@fig@main{} } } } } } %% Include /tikzfeynhand in the search path %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\tikzfeynhand@tikz@search@tikzfeynhand{% \pgfkeys{/tikz/.unknown/.code=% \let\tikz@key\pgfkeyscurrentname% %% Is it a tikzfeynhand key? \pgfkeys{/tikzfeynhand/\tikz@key/.try={##1}}% \ifpgfkeyssuccess% \else% %% Is it a pgf key? \pgfkeys{/pgf/\tikz@key/.try={##1}}% \ifpgfkeyssuccess% \else% \expandafter\pgfutil@in@\expandafter!\expandafter{\tikz@key}% \ifpgfutil@in@% %% this is a color! \expandafter\tikz@addoption\expandafter{\expandafter\tikz@compat@color@set\expandafter{\tikz@key}}% \edef\tikz@textcolor{\tikz@key}% \else% \pgfutil@doifcolorelse{\tikz@key} {% \expandafter\tikz@addoption\expandafter{\expandafter\tikz@compat@color@set\expandafter{\tikz@key}}% \edef\tikz@textcolor{\tikz@key}% }% {% %% Ok, second chance: This might be an arrow specification: \expandafter\pgfutil@in@\expandafter-\expandafter{\tikz@key}% \ifpgfutil@in@% %% Ah, an arrow spec! \expandafter\tikz@processarrows\expandafter{\tikz@key}% \else% %% Ok, third chance: A shape! \expandafter\ifx\csname pgf@sh@s@\tikz@key\endcsname\relax% \pgfkeys{/errors/unknown key/.expand once=\expandafter{\expandafter/\expandafter t\expandafter i\expandafter k\expandafter z\expandafter/\tikz@key}{##1}}% \else% \edef\tikz@shape{\tikz@key}% \fi% \fi% }% \fi% \fi% \fi% } } %% Vertex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% SEE ALSO \vertex above! %% Adapted from |\coordinate| code \def\tikzfeynhand@commands@vertex{% \path \pgfextra{\tikzfeynhandallowemptynodetrue} \pgfextra{\tikzfeynhandvertextrue} node} %% Propagators %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\tikzfeynhand@commands@propagator}[1][]{\draw [#1]} %% Optional argument in style key %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\tikzfeynhand@key@opt#1[#2]#3\pgfeov{% \tikzfeynhandset{#1={[#2]#3}}} %% Insertion %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\tikzfeynhand@insertion{% \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{insertion@@}} {\tikzfeynhand@key@opt{insertion@@}[]}} \pgfkeyslet{/tikzfeynhand/insertion/.@cmd}{\tikzfeynhand@insertion} %% Slash %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\tikzfeynhand@slash{% \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{slash@@}} {\tikzfeynhand@key@opt{slash@@}[]}} \pgfkeyslet{/tikzfeynhand/slash/.@cmd}{\tikzfeynhand@slash} %% Backslash %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\tikzfeynhand@backslash{% \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{backslash@@}} {\tikzfeynhand@key@opt{backslash@@}[]}} \pgfkeyslet{/tikzfeynhand/backslash/.@cmd}{\tikzfeynhand@backslash} %% Momentum %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\tikzfeynhand@momentum@std{% \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{momentum@@}} {\tikzfeynhand@key@opt{momentum@@}[]}} \pgfkeyslet{/tikzfeynhand/momentum/.@cmd}{\tikzfeynhand@momentum@std} \def\tikzfeynhand@momentum@stdp{% \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{momentum'@@}} {\tikzfeynhand@key@opt{momentum'@@}[]}} \pgfkeyslet{/tikzfeynhand/momentum'/.@cmd}{\tikzfeynhand@momentum@stdp} \def\tikzfeynhand@momentum@stdr{% \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{reversed momentum@@}} {\tikzfeynhand@key@opt{reversed momentum@@}[]}} \pgfkeyslet{/tikzfeynhand/reversed momentum/.@cmd}{\tikzfeynhand@momentum@stdr} \def\tikzfeynhand@momentum@stdrp{% \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{reversed momentum'@@}} {\tikzfeynhand@key@opt{reversed momentum'@@}[]}} \pgfkeyslet{/tikzfeynhand/reversed momentum'/.@cmd}{\tikzfeynhand@momentum@stdrp} % short versions of momentum styles \pgfkeyslet{/tikzfeynhand/rmomentum/.@cmd}{\tikzfeynhand@momentum@stdr} \pgfkeyslet{/tikzfeynhand/rmomentum'/.@cmd}{\tikzfeynhand@momentum@stdrp} \pgfkeyslet{/tikzfeynhand/mom/.@cmd}{\tikzfeynhand@momentum@std} \pgfkeyslet{/tikzfeynhand/mom'/.@cmd}{\tikzfeynhand@momentum@stdp} \pgfkeyslet{/tikzfeynhand/revmom/.@cmd}{\tikzfeynhand@momentum@stdr} \pgfkeyslet{/tikzfeynhand/revmom'/.@cmd}{\tikzfeynhand@momentum@stdrp} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \input tikzfeynhand.keys.code.tex \endinput