From d0454fbe3c966efaf3504805b7bb8c1f25d5e1a7 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 20 Jan 2016 22:51:24 +0000 Subject: tikz-feynman (20jan16) git-svn-id: svn://tug.org/texlive/trunk@39441 c570f23f-e606-0410-a88d-b1316a301751 --- .../latex/tikz-feynman/tikzlibraryfeynman.code.tex | 337 +++++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/tikz-feynman/tikzlibraryfeynman.code.tex (limited to 'Master/texmf-dist/tex/latex/tikz-feynman/tikzlibraryfeynman.code.tex') 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 -- cgit v1.2.3