summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/tikz-feynman/tikzlibraryfeynman.code.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/tex/latex/tikz-feynman/tikzlibraryfeynman.code.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/tex/latex/tikz-feynman/tikzlibraryfeynman.code.tex')
-rw-r--r--Master/texmf-dist/tex/latex/tikz-feynman/tikzlibraryfeynman.code.tex337
1 files changed, 337 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tikz-feynman/tikzlibraryfeynman.code.tex b/Master/texmf-dist/tex/latex/tikz-feynman/tikzlibraryfeynman.code.tex
new file mode 100644
index 00000000000..380f7125096
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/tikz-feynman/tikzlibraryfeynman.code.tex
@@ -0,0 +1,337 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% 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.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Pre-requisites
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usetikzlibrary{
+ arrows.meta,
+ calc,
+ decorations,
+ decorations.markings,
+ decorations.pathmorphing,
+ decorations.pathreplacing,
+ graphs,
+ patterns,
+ positioning,
+ shapes.geometric,
+}
+\ifluatex
+ \usetikzlibrary{
+ graphdrawing
+ }
+ \usegdlibrary{
+ circular,
+ force,
+ layered,
+ trees
+ }
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Function definitions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Miscellaneous functions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@empty{}
+
+%% Key Manager
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Setup the tikz-feynman key family
+\pgfkeys{/tikzfeynman/.is family}
+
+%% |\tikzfeynmanset| allows keys that belong with tikz-feynman to be easily set.
+\def\tikzfeynmanset{\pgfqkeys{/tikzfeynman}}
+
+%% Luatex Waring
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check if we are using luatex
+\newif\iftikzfeynman@warn@luatex%
+\tikzfeynmanset{
+ warn luatex/.is if=tikzfeynman@warn@luatex,
+ warn luatex=true,
+}
+
+\AtBeginDocument{
+ \ifluatex\else
+ \iftikzfeynman@warn@luatex
+ \PackageWarning{tikz-feynman}{LuaTeX is required if you wish to have vertices automatically placed. You can disable this warning by setting /tikzfeynman/warn luatex=false}
+ \fi
+ \fi
+}
+
+%% Version check
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check which version is expected and which is installed
+\def\tikzfeynman@compat@parse#1.#2.#3\pgfeov{
+ \edef\tikzfeynman@compat@major{#1}
+ \edef\tikzfeynman@compat@minor{#2}
+ \edef\tikzfeynman@compat@patch{#3}
+ \edef\tikzfeynman@compat{#1.#2.#3}
+}
+\let\tikzfeynman@compat=\tikzfeynman@empty
+\pgfkeyslet{/tikzfeynman/compat/.@cmd}{\tikzfeynman@compat@parse}
+
+\AtBeginDocument{
+ \ifx\tikzfeynman@version\tikzfeynman@compat\else
+ \ifx\tikzfeynman@compat\tikzfeynman@empty
+ \PackageWarning{tikz-feynman}{Consider adding \string\tikzfeynmanset{compat=\tikzfeynman@version} to your preamble so that you can be warned if TikZ-Feynman changes.}
+ \else
+ \ifx\tikzfeynman@compat@major\tikzfeynman@version@major
+ \ifx\tikzfeynman@compat@minor\tikzfeynman@version@minor
+ \ifx\tikzfeynman@compat@patch\tikzfeynman@version@patch\else
+ \PackageInfo{tikz-feynman}{The preamble requested version \tikzfeynman@compat, but the system version is \tikzfeynman@version. This should cause no issue.}
+ \fi
+ \else
+ \PackageWarning{tikz-feynman}{The preamble requested version \tikzfeynman@compat, but the system version is \tikzfeynman@version. This may change some diagrams.}
+ \fi
+ \else
+ \PackageError{tikz-feynman}{The preamble requested version \tikzfeynman@compat, but the system version is \tikzfeynman@version. They are most likely incompatible. Please download the appropriate version at github.com/JP-Ellis/tikz-feynman.}
+ \fi
+ \fi
+ \fi
+}
+
+%% Override Lua code if necessary
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@apply@patch{
+ \directlua{require("tikzfeynman.patch.lua")}
+}
+
+%% Version 3.0.0, 3.0.1 and 3.0.1a need to be patched.
+\ifluatex
+ \def\tikzfeynman@temp{3.0.0}
+ \ifx\pgfversion\tikzfeynman@temp
+ \tikzfeynman@apply@patch
+ \else
+ \def\tikzfeynman@temp{3.0.1}
+ \ifx\pgfversion\tikzfeynman@temp
+ \tikzfeynman@apply@patch
+ \else
+ \def\tikzfeynman@temp{3.0.1a}
+ \ifx\pgfversion\tikzfeynman@temp
+ \tikzfeynman@apply@patch
+ \fi
+ \fi
+ \fi
+\fi
+
+%% Feynman Environment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Provide `\begin{feynman} ... \end{feynman}` within TikZ pictures.
+\tikzaddtikzonlycommandshortcutlet\feynman\tikzfeynman@environment@feynman
+\tikzaddtikzonlycommandshortcutlet\endfeynman\endtikzfeynman@environment@feynman
+
+%% \begin{feynman}...\end{feynman}
+\def\tikzfeynman@environment@feynman{%
+ \pgfutil@ifnextchar[{\tikzfeynman@environment@feynman@opt}
+ {\tikzfeynman@environment@feynman@opt[]}}
+
+\def\tikzfeynman@environment@feynman@opt[#1]{%
+ \begingroup
+ %% Local overrides
+ \let\tikz@@scan@fig=\tikzfeynman@scan@fig
+ \let\tikzfeynman@orig@graph=\graph
+ %% Local commands
+ \let\vertex=\tikzfeynman@commands@vertex
+ \let\diagram=\tikzfeynman@commands@diagram
+ \let\graph=\tikzfeynman@commands@graph
+ %% Opening hooks
+ \scope
+ \tikz@lib@ignore@sizetrue
+ \tikzfeynman@tikz@search@tikzfeynman
+ \pgfkeys{
+ /tikzfeynman/every feynman@@,
+ /tikzfeynman/every feynman,
+ #1}
+ \pgfkeysvalueof{/tikzfeynman/execute at begin feynman@@}%
+ \pgfkeysvalueof{/tikzfeynman/execute at begin feynman}%
+}
+
+\def\endtikzfeynman@environment@feynman{%
+ %% Closing hooks
+ \pgfkeysvalueof{/tikzfeynman/execute at end feynman}%
+ \pgfkeysvalueof{/tikzfeynman/execute at end feynman@@}%
+ \endscope
+ \endgroup
+}
+
+%% \feynmandiagram
+\def\feynmandiagram{%
+ \pgfutil@ifnextchar[{\feynmandiagram@opt}
+ {\feynmandiagram@opt[]}}
+\def\feynmandiagram@opt[#1]{%
+ \pgfutil@ifnextchar[{\feynmandiagram@opt@opt[#1]}
+ {\feynmandiagram@opt@opt[#1][#1]}}
+\def\feynmandiagram@opt@opt[#1][#2]{%
+ \tikz [/tikzfeynman/.cd, .search also={/tikz}, #1]
+ \graph [/tikzfeynman/every diagram@@, /tikzfeynman/every diagram, /tikz/graphs/spring layout, #2]}
+
+%% Allow empty nodes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\iftikzfeynmanallowemptynode
+\newif\iftikzfeynmanvertex
+\def\tikzfeynman@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}%
+ {\iftikzfeynmanvertex%
+ \tikzset{
+ /tikzfeynman/every vertex@@,
+ /tikzfeynman/every vertex}%
+ \iftikzfeynmanallowemptynode%
+ \else%
+ \tikzset{/tikzfeynman/particle}%
+ \fi%
+ \fi%
+ \tikz@fig@main{}}}}}}%}}
+
+%% Include /tikzfeynman in the search path
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@tikz@search@tikzfeynman{%
+ \pgfkeys{/tikz/.unknown/.code=%
+ \let\tikz@key\pgfkeyscurrentname%
+ %% Is it a tikzfeynman key?
+ \pgfkeys{/tikzfeynman/\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
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Adapted from |\coordinate| code
+\def\tikzfeynman@commands@vertex{
+ \path \pgfextra{\tikzfeynmanallowemptynodetrue}
+ \pgfextra{\tikzfeynmanvertextrue}
+ node}
+
+%% Diagram
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@commands@diagram{\@ifstar
+ \tikzfeynman@commands@diagram@star%
+ \tikzfeynman@commands@diagram@nostar}
+
+\def\tikzfeynman@commands@diagram@nostar{%
+ \pgfutil@ifnextchar[{\tikzfeynman@commands@diagram@nostar@opt}
+ {\tikzfeynman@commands@diagram@nostar@opt[]}}
+\def\tikzfeynman@commands@diagram@nostar@opt[#1]{%
+ \tikzfeynman@orig@graph [/tikzfeynman/every diagram@@, /tikzfeynman/every diagram, /tikz/graphs/spring layout, #1]}
+
+\def\tikzfeynman@commands@diagram@star{%
+ \pgfutil@ifnextchar[{\tikzfeynman@commands@diagram@star@opt}
+ {\tikzfeynman@commands@diagram@star@opt[]}}
+\def\tikzfeynman@commands@diagram@star@opt[#1]{%
+ \tikzfeynman@orig@graph [/tikzfeynman/every diagram@@, /tikzfeynman/every diagram, #1]}
+
+%% Graph
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@commands@graph{%
+ \pgfutil@ifnextchar[{\tikzfeynman@commands@graph@opt}
+ {\tikzfeynman@commands@graph@opt[]}}
+\def\tikzfeynman@commands@graph@opt[#1]{%
+ \PackageWarning{tikz-feynman}{It is not recommended to use \string\graph. Use \string\diagram\space or \string\diagram* instead.}
+ \tikzfeynman@orig@graph [/tikzfeynman/every diagram@@, /tikzfeynman/every diagram, #1]}
+
+%% Optional argument in style key
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@key@opt#1[#2]#3\pgfeov{%
+ \tikzfeynmanset{#1={[#2]#3}}}
+
+%% Insertion
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@insertion{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{insertion@@}}
+ {\tikzfeynman@key@opt{insertion@@}[]}}
+\pgfkeyslet{/tikzfeynman/insertion/.@cmd}{\tikzfeynman@insertion}
+
+%% Momentum
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@momentum@std{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{momentum@@}}
+ {\tikzfeynman@key@opt{momentum@@}[]}}
+\pgfkeyslet{/tikzfeynman/momentum/.@cmd}{\tikzfeynman@momentum@std}
+
+\def\tikzfeynman@momentum@stdp{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{momentum'@@}}
+ {\tikzfeynman@key@opt{momentum'@@}[]}}
+\pgfkeyslet{/tikzfeynman/momentum'/.@cmd}{\tikzfeynman@momentum@stdp}
+
+\def\tikzfeynman@momentum@stdr{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{reversed momentum@@}}
+ {\tikzfeynman@key@opt{reversed momentum@@}[]}}
+\pgfkeyslet{/tikzfeynman/reversed momentum/.@cmd}{\tikzfeynman@momentum@stdr}
+\pgfkeyslet{/tikzfeynman/rmomentum/.@cmd}{\tikzfeynman@momentum@stdr}
+
+\def\tikzfeynman@momentum@stdrp{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{reversed momentum'@@}}
+ {\tikzfeynman@key@opt{reversed momentum'@@}[]}}
+\pgfkeyslet{/tikzfeynman/reversed momentum'/.@cmd}{\tikzfeynman@momentum@stdrp}
+\pgfkeyslet{/tikzfeynman/rmomentum'/.@cmd}{\tikzfeynman@momentum@stdrp}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Styles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input tikzfeynman.keys.code.tex
+
+\endinput \ No newline at end of file