summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/fonts/feyn
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-03-03 01:10:05 +0000
committerKarl Berry <karl@freefriends.org>2008-03-03 01:10:05 +0000
commit26b5af90d7132dc6c5d514d589adfca8502d62c0 (patch)
tree30f6a91e6073e1a5a13f549176ea1196d1c80417 /Master/texmf-dist/source/fonts/feyn
parent9c9e2c9000f62d089e798708bc0db6346bbe39ad (diff)
feyn font 0.3.1
git-svn-id: svn://tug.org/texlive/trunk@6809 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/fonts/feyn')
-rw-r--r--Master/texmf-dist/source/fonts/feyn/feyn.drv77
-rw-r--r--Master/texmf-dist/source/fonts/feyn/feyn.dtx1099
-rw-r--r--Master/texmf-dist/source/fonts/feyn/feyn.ins14
3 files changed, 1190 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/fonts/feyn/feyn.drv b/Master/texmf-dist/source/fonts/feyn/feyn.drv
new file mode 100644
index 00000000000..556251201b7
--- /dev/null
+++ b/Master/texmf-dist/source/fonts/feyn/feyn.drv
@@ -0,0 +1,77 @@
+%%
+%% This is file `feyn.drv',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% feyn.dtx (with options: `driver')
+%% Feyn: package to manage the font feyn10
+%% This software is copyright, 1991, 1994, 2001, 2002, 2005, 2008, Norman Gray.
+%%
+%% This program is free software; 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 2
+%% of the License, or (at your option) any later version.
+%%
+%% 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
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this program; if not, write to the Free Software
+%% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%%
+%% Author: Norman Gray, norman@astro.gla.ac.uk.
+%% Department of Physics and Astronomy, University of Glasgow, UK
+%%
+%% See the file LICENCE for a copy of the GPL.
+%% You can also find an online copy at http://www.gnu.org/copyleft/gpl.html .
+%% RCS Info $Id: feyn.dtx.in,v 1.18 2008/02/29 20:45:59 norman Exp $
+\documentclass{ltxdoc}
+\usepackage{feyn}
+\title{The feyn font}
+\author{Norman Gray\\(\texttt{norman@astro.gla.ac.uk})}
+\date{Version 0.3.1, 2008 February 29}
+\newcommand\Lopt[1]{\textsf {#1}}
+\newcommand\file[1]{\texttt {#1}}
+\newcommand\Lcount[1]{\textsl {\small#1}}
+\newcommand\pstyle[1]{\textsl {#1}}
+%% \url macro (url.sty does this better)
+\def\setpathdots{\discretionary{.}{}{.}}
+\def\setpathslash{\discretionary{/}{}{/}}
+{\catcode`\.=\active
+ \catcode`\/=\active
+ \gdef\pathcats{%
+ \catcode`\%=12 \catcode`\~=12
+ \catcode`\.=\active \let.\setpathdots
+ \catcode`\/=\active \let/\setpathslash
+ \catcode`\#=12 \catcode`\_=12}%
+ }
+\def\setpath#1{\ttfamily <\nobreak #1\nobreak>\endgroup}
+\def\url{\begingroup\pathcats\setpath}
+\OnlyDescription
+\parskip=\medskipamount
+\parindent=0pt
+\begin{document}
+\maketitle
+\DocInput{feyn.dtx}
+\end{document}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\endinput
+%%
+%% End of file `feyn.drv'.
diff --git a/Master/texmf-dist/source/fonts/feyn/feyn.dtx b/Master/texmf-dist/source/fonts/feyn/feyn.dtx
new file mode 100644
index 00000000000..0e2b35e7b4c
--- /dev/null
+++ b/Master/texmf-dist/source/fonts/feyn/feyn.dtx
@@ -0,0 +1,1099 @@
+% \iffalse
+% This is feyn.dtx, which manages the use of the feyn Metafont
+%
+%% This software is copyright, 1991, 1994, 2001, 2002, 2005, 2008, Norman Gray.
+%%
+%% This program is free software; 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 2
+%% of the License, or (at your option) any later version.
+%%
+%% 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
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this program; if not, write to the Free Software
+%% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%%
+%% Author: Norman Gray, norman@astro.gla.ac.uk.
+%% Department of Physics and Astronomy, University of Glasgow, UK
+%%
+%% See the file LICENCE for a copy of the GPL.
+%% You can also find an online copy at http://www.gnu.org/copyleft/gpl.html .
+%
+%<+package|driver>%% RCS Info $Id: feyn.dtx.in,v 1.18 2008/02/29 20:45:59 norman Exp $
+%<+package>\NeedsTeXFormat{LaTeX2e}
+%<+package>\ProvidesPackage{feyn}[2008/02/29 \space0.3.1\space textpos]
+%<+package>\typeout{Package: `feyn' 0.3.1\space<2008/02/29 >}
+%
+%<*driver>
+%\documentclass[12pt]{ltxdoc}
+\documentclass{ltxdoc}
+\usepackage{feyn}
+\title{The feyn font}
+\author{Norman Gray\\(\texttt{norman@astro.gla.ac.uk})}
+\date{Version 0.3.1, 2008 February 29}
+\newcommand\Lopt[1]{\textsf {#1}}
+\newcommand\file[1]{\texttt {#1}}
+\newcommand\Lcount[1]{\textsl {\small#1}}
+\newcommand\pstyle[1]{\textsl {#1}}
+%% \url macro (url.sty does this better)
+\def\setpathdots{\discretionary{.}{}{.}}
+\def\setpathslash{\discretionary{/}{}{/}}
+{\catcode`\.=\active
+ \catcode`\/=\active
+ \gdef\pathcats{%
+ \catcode`\%=12 \catcode`\~=12
+ \catcode`\.=\active \let.\setpathdots
+ \catcode`\/=\active \let/\setpathslash
+ \catcode`\#=12 \catcode`\_=12}%
+ }
+\def\setpath#1{\ttfamily <\nobreak #1\nobreak>\endgroup}
+\def\url{\begingroup\pathcats\setpath}
+%\RecordChanges
+\OnlyDescription
+\parskip=\medskipamount
+\parindent=0pt
+\begin{document}
+\maketitle
+\DocInput{feyn.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+%
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+%
+%
+%
+%
+%
+% \newcommand{\pslash}{p\llap{/\kern-0.3pt}}
+% \newcommand{\feynx}{\textsl{feyn}}
+% \newcommand{\metafont}{Metafont}
+%
+%
+% This describes the font \feynx, which can be used to produce relatively
+% simple Feynman diagrams within equations in a \LaTeX\ document.
+%
+% The other Feynman diagram package which exists is Thorsten Ohl's
+% \textsl{feynmf}/\textsl{feynmp} package. That
+% works by creating \metafont\ or MetaPost figures using a preprocessor.
+% It's more general than this package, but is at its best when
+% creating relatively large diagrams, for figures.
+% In contrast, the present system consists of a carefully-designed font
+% with which you can write simple diagrams, within equations or within text,
+% in a size matching the surrounding text size.
+%
+% \textbf{Contents:}
+% \def\numberline#1{\space\emph{\S#1}~}
+% \def\contentsline#1#2#3{#2,~p#3;}
+% \makeatletter \@starttoc{toc} \makeatother
+%
+% \section{Status}
+%
+% The propagators and vertices which are implemented are those which
+% seem to appear most often in non-figure displays (the practical
+% definition of `appear most often' is `which I wanted' or `which
+% people asked me for'). I'd be delighted to add others which folk
+% feel would be useful.
+%
+%
+% \section{Description}
+%
+% You use the font by including the package \texttt{feyn.sty}, as in
+% \begin{verbatim}
+% \usepackage{feyn}
+% \end{verbatim}
+% If you use the `amsmath' package, you should load that before
+% loading the `feyn' package.\footnote{Because of a slight peculiarity
+% of the amsmath package, the active~`!' command described below will
+% not work properly within amsmath |{align}| or |{align*}|
+% environments unless the~`!' is made active globally. This is done
+% by default if the `amsmath' package is loaded first, and not done by
+% default otherwise. If you have to override this behaviour for some
+% very arcane reason, then you can force the global or local declaration
+% of~`!' using the \Lopt{globalbang} and \Lopt{noglobalbang} options
+% to the \texttt{$\backslash$usepackage\{feyn\}} command.}
+%
+% \makeatletter
+% \def\refptcirc{\lower\feyn@maxis \hbox to 0pt{\hss$\circ$\hss}}
+% \makeatother
+% \begin{table}
+% \def\tableskip{\noalign{\smallskip}}
+% \halign{$\refptcirc\Feyn{#}$%
+% \hfil\quad & $#$\hfil\quad & # \hfil\qquad && # \cr
+% \omit Character & \omit & Name & Width & Height & Depth \cr
+% \noalign{\smallskip\hrule\smallskip}
+% f & f & fermion$^{\dag}$
+% & 2 & 0 & 0 \cr \tableskip
+% fs & fs & short fermion
+% & 1 & 0 & 0 \cr \tableskip
+% fl & fl & fermion loop$^{\dag\ddag}$
+% & 4 & 2 & 2 \cr \tableskip
+% flS & flS & fermion loop (small)$^{\dag\ddag}$
+% & 0 & 4/3 & 0 \cr \tableskip
+% fu & fu & upward fermion$^\dag$ (45$^\circ$)
+% & $\sqrt2$ & $\sqrt2$ & 0 \cr \tableskip
+% fd & fd & downward fermion$^\dag$
+% & $\sqrt2$ & $\sqrt2$ & 0 \cr \tableskip
+% fv & fv & vertical fermion$^\dag$
+% & 0 & 2 & 0 \cr \tableskip
+% f0 & f0 & spacer
+% & 2 & 0 & 0 \cr \tableskip
+% fs0 & fs0 & short spacer
+% & 1 & 0 & 0 \cr \tableskip
+% g & g & gluon/photon$^{\dag}$
+% & 2 & 0 & 0 \cr \tableskip
+% gl & gl & gluon loop$^{\dag\ddag}$
+% & 0 & 2 & 0 \cr \tableskip
+% glB & glB & gluon loop (big)$^{\dag}$
+% & 0 & 2.67 & 0 \cr \tableskip
+% glS & glS & gluon loop (small)$^{\dag}$
+% & 0 & 1.33 & 0 \cr \tableskip
+% g1 & g1 & gluon loop, 1st quadrant (sim.\ 2, 3, 4)$^{\dag}$
+% & 2 & 2 & 0 \cr \tableskip
+% gu & gu & upward gluon$^\dag$ (45$^\circ$)
+% & $\sqrt2$ & $\sqrt2$ & 0 \cr \tableskip
+% gd & gd & downward gluon$^\dag$
+% & $\sqrt2$ & $\sqrt2$ & 0 \cr \tableskip
+% gv & gv & vertical gluon$^\dag$
+% & 0 & 2 & 0 \cr \tableskip
+% m & m & massive fermion$^{\dag}$
+% & 2 & 0 & 0 \cr \tableskip
+% ms & ms & short massive fermion
+% & 1 & 0 & 0 \cr \tableskip
+% h & h & ghost
+% & 2 & 0 & 0 \cr \tableskip
+% hs & hs & short ghost
+% & 1 & 0 & 0 \cr \tableskip
+% hu & hu & upward ghost (45$^\circ$)
+% & $\sqrt2$ & $\sqrt2$ & 0 \cr \tableskip
+% hd & hd & downward ghost
+% & $\sqrt2$ & $\sqrt2$ & 0 \cr \tableskip
+% x & x & counterterm vertex & 0 & $a$ & $-a$ \cr \tableskip
+% p & p & proper vertex & - & - & - \cr \tableskip
+% P & P & proper vertex (variant) & - & - & - \cr \tableskip
+% c & c & complete vertex & - & - & - \cr \tableskip
+% a & a & arrow & 0 & 0 & 0 \cr
+% }
+% \caption{\label{chars} The characters in font \feynx. Characters
+% marked~$\ddag$ have an upside-down variant indicated with a `u'
+% suffix, and those marked~$\dag$ have arrowed variants indicated
+% with~`A' and~`V' suffixes, in that order.}
+% \end{table}
+%
+% The characters in the font are shown in table~\ref{chars}. These
+% are shown in textstyle size, but all characters are also available in
+% displaystyle size. All the dimensions are shown as multiples of the
+% length of a module which is the length of the short fermion. The
+% dimension~$a$ is the height of the maths axis. The~$\circ$ shows the
+% reference point of each character. The proper vertex and the
+% complete vertex are specified
+% in terms of a `blob-radius' which is about half a module. They have
+% a width of 2~radii, and a height and depth of 1~radius.
+%
+% Each of the characters marked with a~$\dag$ in the table has two
+% arrowed variants, so that |\feyn{fA + gV}| produces $\feyn{fA +
+% gV}$. The `A' variants produce arrows pointing rightwards or
+% upwards, and the `V' variants arrows pointing leftwards or
+% downwards. The characters marked with a~$\ddag$ also have an
+% upside-down variant, thus `flu' is an upside-down variant of the
+% fermion loop, and `fluV' an arrowed variant.
+%
+% The unnassigned positions in the \feynx\ font are filled
+% with an obviously wrong dummy character, so that |$\feyn{A}$|, for example,
+% produces $\feyn{fs0Afs0}$.
+%
+% The file \file{feyn.sty} additionally defines a number of macros,
+% described here.
+% \begin{description}
+% \item[\cs{feyn}] Selects the diagram font. This must be used
+% within math mode. \cs{Feyn} selects the text-mode diagram font.
+% \item[\cs{momentum}\{ch\}\{text\}] sets the character
+% ch, which may be a ligature, and puts the given text at the recommended
+% annotation position for that character. |\momentum[pos]{ch}{text}|
+% is the same, except that the optional argument indicates the
+% position relative to the annotation position. It must be one of
+% `top', `urt', `lrt', `bot', `llft' or `ulft'. See below for
+% examples. Rarely used as such, since the |\feyn| and |\Feyn|
+% commands make~`!' a temporarily active character, and define it
+% to be |\momentum|.
+% \item[\cs{Diagram\{\}}] For building more complicated diagrams. It
+% takes one argument, which is like the contents of an \texttt{\{array\}}
+% environment---a series of formulae separated by \&'s and \verb-\\-. See
+% below for an example. The result is a box on the math-axis.
+% \item[\cs{maxis}] Raises a formula to the math-axis, which is
+% occasionally useful within in-text equations: eg
+% |$\Feyn{fglf} - \maxis{\Feyn{faf}}$| produces
+% $\Feyn{fglf} - \maxis{\Feyn{faf}}$.
+% \item[\cs{vertexlabel\{p\}\{text\}}] Allows you to label a vertex. If
+% the first parameter~$p$ is~$\wedge$, the~\emph{text} is placed above the
+% point at which the command is given, if it is~\texttt{\_}, it is
+% placed below. For example, |$\feyn{f\vertexlabel^{a}}$| produces
+% $\feyn{f\vertexlabel^{a}}$. More often used within |\Diagram|
+% than elsewhere.
+% \item[\cs{feynstrut\{h\}\{d\}}] For use within an (eqn)array environment, or
+% the like. It modifies the control sequence \verb-\strut- to be a strut of
+% height~$h$ and depth~$d$ modules, which can therefore be used to
+% space the array out. Note that it modifies |\strut|, rather
+% than being the strut itself.
+% \item[\cs{annotate\{x\}\{y\}\{text\}}] Puts the \emph{text}, between dollars,
+% in a zero width box at offset~$(x,y)$ modules from the position of the
+% |\annotate| command (which is generally the first command(s) after
+% entering math-mode). Because the \emph{text} is in math-mode, anything
+% that is not maths should be in an |\mbox|.
+% \end{description}
+%
+% The \feynx\ font is modular, in the sense that all the
+% dimensions are in terms of a module of 10pt, and all sizes given
+% below are in units of modules. As well as 10pt, the font has
+% versions for 11pt, 12pt, 18pt and 24pt text, and the most
+% appropriate one is selected depending on the text size declared (or
+% defaulted) in the |\documentclass| command. This range of sizes
+% seems to be appropriate for the sizes required, but the author would
+% welcome comments on this. The distribution
+% contains a sample file using the 18pt \feynx\ font in a
+% \texttt{foiltex} document.
+%
+% You draw a diagram by going into math-mode (between \$\dots\$), and selecting
+% the diagrams font by the font-changing command \verb-\feyn{}-
+% (exactly as you might use \verb-\mathrm- in math-mode). With a couple of
+% exceptions, all the characters are obtained by typing a single
+% letter, or a couple of letters which form a ligature, so that the
+% letter~$f$ in the diagrams font (\verb-$\feyn{f}$-) produces a
+% fermion of length~2 (modules), and~$fs$ produces a short fermion of
+% length~1. As usual in maths mode, space characters are ignored, so
+% you can add whitespace as required to make the expressions more
+% legible. Some of the more heavily used characters are available in
+% both display size and text size, with the text-size version invoked
+% by |\Feyn{...}|, so that |\feyn{fglf}| gives $\feyn{fglf}$ and
+% |\Feyn{fglf}| gives $\Feyn{fglf}$. The displaystyle characters
+% are all on the math-axis, the textstyle ones are on the text line.
+%
+% \section{Examples}
+%
+% \newdimen\halftextwidth
+% \halftextwidth=\textwidth
+% \advance\halftextwidth by -\tabcolsep
+% \advance\halftextwidth by -\arrayrulewidth
+% \divide\halftextwidth by 2
+% \newenvironment{codeexample}
+% {\vskip\medskipamount
+% \def\Becomes{\cr
+% \noalign{\vrule width \arrayrulewidth \hskip\tabcolsep}}
+% \valign\bgroup
+% \hrule height 0pt depth 0pt width \halftextwidth
+% \hsize=\halftextwidth
+% \vfil ## \vfil \cr}
+% {\crcr\egroup
+% \vskip\medskipamount}
+% \newenvironment{examplerhs}{\begin{minipage}[t]{\halftextwidth}}
+% {\\ \end{minipage}}
+%
+% A simple propagator:
+% \begin{codeexample}
+% \begin{verbatim}
+% \feyn{\vertexlabel^a
+% !{fA}p \vertexlabel^b}
+% = \displaystyle
+% \frac{i\delta^{ab}}
+% {\pslash-m_0}}
+% \end{verbatim}
+% \Becomes
+% \begin{examplerhs}$
+% \feyn{\vertexlabel^a
+% !{fA}p \vertexlabel^b}
+% = \displaystyle
+% \frac{i\delta^{ab}}{\pslash-m_0}
+% $\end{examplerhs}
+% \end{codeexample}
+%
+% The |\Diagram| command lays out its arguments as an array.
+% \begin{codeexample}
+% \begin{verbatim}
+% \Diagram{\vertexlabel^a \\
+% fd \\
+% & g\vertexlabel_{\mu,c} \\
+% \vertexlabel_b fu\\
+% }
+% = \displaystyle
+% ig\gamma_\mu (T^c)_{ab}
+% \end{verbatim}
+% \Becomes
+% \begin{examplerhs}$
+% \Diagram{\vertexlabel^a \\
+% fd \\
+% & g\vertexlabel_{\mu,c} \\
+% \vertexlabel_b fu\\
+% }
+% = \displaystyle
+% ig\gamma_\mu (T^c)_{ab}
+% $\end{examplerhs}
+% \end{codeexample}
+%
+% An assortment of two-loop diagrams:
+% \begin{codeexample}
+% \begin{verbatim}
+% \feyn{fs f gl f glu f fs}
+% \end{verbatim}
+% \Becomes
+% $\feyn{fs f gl f glu f fs}$
+% \end{codeexample}
+% This is a ``short-fermion fermion gluon-loop fermion
+% gluon-loop-upsidedown fermion short-fermion''.
+%
+% \begin{codeexample}
+% \begin{verbatim}
+% \feyn{ms mA gl gv ms x f}
+% \end{verbatim}
+% \Becomes
+% $\feyn{ms mA gl gv ms x f}$
+% \end{codeexample}
+%
+% \begin{codeexample}
+% \begin{verbatim}
+% \feyn{f !{g1A}1 !{g2V}2
+% !{g3A}3 !{g4V}4 f},
+% \feyn{fs f !{flA}{p}
+% !{fluV}{k} f fs}
+% \end{verbatim}
+% \Becomes
+% \begin{examplerhs}$
+% \feyn{f !{g1A}1 !{g2V}2
+% !{g3A}3 !{g4V}4 f},
+% \feyn{fs f !{flA}{p}
+% !{fluV}{k} f fs}
+% $\end{examplerhs}
+% \end{codeexample}
+%
+% \begin{codeexample}
+% \begin{verbatim}
+% \feyn{!{fA}p
+% f!{glBV}k !{glSA}l
+% a\vertexlabel_{p+k-l} ff}
+% \end{verbatim}
+% \Becomes
+% \begin{examplerhs}$
+% \feyn{!{fA}p
+% f!{glBV}k !{glSA}l
+% a\vertexlabel_{p+k-l} ff}
+% $\end{examplerhs}
+% \end{codeexample}
+%
+% \newenvironment{bigdisplay}
+% {\newline
+% \vbox{\hrule\hbox to \textwidth{\vrule height 1.5ex\hfil\vrule}}%
+% \parskip0pt}
+% {\vbox{\hbox to \textwidth{\vrule height 1.5ex \hfil\vrule}\hrule}}
+%
+% Bremsstrahlung:
+% \begin{bigdisplay}
+% \begin{verbatim}
+% \[
+% \Diagram{ & x \\
+% & ![ulft]{gvV}{q=p'+k-p} & !{guA}k \\
+% ![bot]{fA}p & ![bot]{fA}{p'+k} & ![lrt]{fA}{p'} \\
+% }
+% +
+% \Diagram{ & !{guA}k \\
+% !{fA}p & ![bot]{fA}{p-k} fs & !{fA}{p'} \\
+% & & ![lrt]{gvA}{q=p'+k-p} \\
+% & & x\\
+% }
+% \]
+% \end{verbatim}
+% \hrule
+% \[
+% \Diagram{ & x \\
+% & ![ulft]{gvV}{q=p'+k-p} & !{guA}k \\
+% ![bot]{fA}p & ![bot]{fA}{p'+k} & ![lrt]{fA}{p'} \\
+% }
+% +
+% \Diagram{ & !{guA}k \\
+% !{fA}p & ![bot]{fA}{p-k} fs & !{fA}{p'} \\
+% & & ![lrt]{gvA}{q=p'+k-p} \\
+% & & x\\
+% }
+% \]
+% \end{bigdisplay}
+%
+% We can also have diagrams in the text, like~$\Feyn{fsfglffs}$, and we can
+% annotate the diagrams
+% \begin{codeexample}
+% \begin{verbatim}
+% \annotate{2}{-0.5}
+% {\mbox{counterterm}}
+% \feyn{ms m gl ![llft]{gv}l
+% ms x f}
+% \end{verbatim}
+% \Becomes
+% \begin{examplerhs} $
+% \annotate{2}{-0.5}
+% {\mbox{counterterm}}
+% \feyn{ms m gl ![llft]{gv}l
+% ms x f}
+% $\end{examplerhs}
+% \end{codeexample}
+% This is a ``short-massive massive gluon-loop gluon-vertical
+% short-massive counterterm fermion''.
+%
+% The expression for the heavy-fermion self-energy in the \textsc{ope} is:
+% \begin{bigdisplay}
+% \begin{verbatim}
+% \def\bracket#1{\langle #1 \rangle}
+% \begin{eqnarray*}
+% -i\Sigma_{\rm ope} &=&
+% \left[ \feyn{faf + fsfglffs + \cdots} \right] 1
+% \feynstrut{1}{1}\strut \\
+% && \quad{}+ \left[ \feyn{ fxfs0glfs0xf + \cdots} \right]
+% \bracket{\overline\psi M \psi} \\
+% && \quad{}+ \left[ \Diagram{ &x &x \\
+% &gv &gv \\
+% fs &fs &fs \\} + \cdots \right]
+% \bracket{G_{\mu\nu}^a G_{\mu\nu}^a}\\
+% \end{eqnarray*}
+% \end{verbatim}
+% \hrule
+% \def\bracket#1{\langle #1 \rangle}
+% \begin{eqnarray*}
+% -i\Sigma_{\rm ope} &=&
+% \left[ \feyn{faf + fsfglffs + \cdots} \right] 1
+% \feynstrut{1}{1}\strut \\
+% && \quad{}+ \left[ \feyn{ fxfs0glfs0xf + \cdots} \right]
+% \bracket{\overline\psi M \psi} \\
+% && \quad{}+ \left[ \Diagram{ &x &x \\
+% &gv &gv \\
+% fs &fs &fs \\} + \cdots \right]
+% \bracket{G_{\mu\nu}^a G_{\mu\nu}^a}\\
+% \end{eqnarray*}
+% \end{bigdisplay}
+%
+% The Feynman Rules are as follows:
+% \begin{bigdisplay}
+% \begin{verbatim}
+% \def\arraystretch{3} \arraycolsep=0.2cm
+% \[ \begin{array}{rcl}
+% \feyn{\vertexlabel^a !{fA}p \vertexlabel^b} % quark prop
+% &=& \displaystyle
+% {i\delta^{ab} \over \pslash- m_0} \\
+%
+% \Diagram{\vertexlabel^a \\ fd \\ & g\vertexlabel_{\mu,c} \\
+% \vertexlabel_b fu\\} % 3-point vertex
+% &=& \displaystyle
+% ig\gamma_\mu (t^c)_{ab} \\
+%
+% \feyn{\vertexlabel_{\mu, a} !{gA}k \vertexlabel_{\nu, b}} % gluon prop
+% &=& \displaystyle
+% {-i\over k^2} \left[g_{\mu\nu} + (a_0 - 1) {k_\mu k_\nu \over k^2}\right]
+% \delta^{ab} \\
+%
+% \Diagram{\vertexlabel^{\alpha,a} \\
+% !{gdA}p \\
+% & !{gA}r \vertexlabel_{\gamma,c} \\
+% !{guA}q \\
+% \vertexlabel_{\beta,b}
+% } % 3-gluon vertex
+% &=& \displaystyle
+% -g f^{abc} (
+% g_{\beta\gamma} (q-r)_\alpha +
+% g_{\gamma\alpha} (r-p)_\beta +
+% g_{\alpha\beta} (p-q)_\gamma
+% ) \\
+%
+% \feyn{\vertexlabel^a !hp \vertexlabel^b} % ghost prop
+% &=& \displaystyle
+% {i \over p^2} \delta_{ab} \\
+%
+% \Diagram{\vertexlabel^b \\ hd \\ & g\vertexlabel^{\mu,a} \\
+% \vertexlabel_c hu\\} % ghost-gluon vertex
+% &=& \displaystyle
+% -g f^{abc}p_\mu
+% \quad\raise 1ex\hbox{\vtop{\hsize=15em
+% where $p$ is the momentum of the outgoing positive energy
+% ghost\par}}
+% \end{array} \]
+% \end{verbatim}
+% \hrule
+% \def\arraystretch{3} \arraycolsep=0.2cm
+% \[ \begin{array}{rcl}
+% \feyn{\vertexlabel^a !{fA}p \vertexlabel^b}
+% &=& \displaystyle
+% {i\delta^{ab} \over \pslash- m_0} \\
+%
+% \Diagram{\vertexlabel^a \\ fd \\ & g\vertexlabel_{\mu,c} \\
+% \vertexlabel_b fu\\}
+% &=& \displaystyle
+% ig\gamma_\mu (t^c)_{ab} \\
+%
+% \feyn{\vertexlabel_{\mu, a} !{gA}k \vertexlabel_{\nu, b}}
+% &=& \displaystyle
+% {-i\over k^2} \left[g_{\mu\nu} + (a_0 - 1) {k_\mu k_\nu \over k^2}\right]
+% \delta^{ab} \\
+%
+% \Diagram{\vertexlabel^{\alpha,a} \\
+% !{gdA}p \\
+% & !{gA}r \vertexlabel_{\gamma,c} \\
+% !{guA}q \\
+% \vertexlabel_{\beta,b}
+% }
+% &=& \displaystyle
+% -g f^{abc} (
+% g_{\beta\gamma} (q-r)_\alpha +
+% g_{\gamma\alpha} (r-p)_\beta +
+% g_{\alpha\beta} (p-q)_\gamma
+% ) \\
+%
+% \feyn{\vertexlabel^a !hp \vertexlabel^b}
+% &=& \displaystyle
+% {i \over p^2} \delta_{ab} \\
+%
+% \Diagram{\vertexlabel^b \\ hd \\ & g\vertexlabel^{\mu,a} \\
+% \vertexlabel_c hu\\}
+% &=& \displaystyle
+% -g f^{abc}p_\mu
+% \quad\raise 1ex\hbox{\vtop{\hsize=15em
+% where $p$ is the momentum of the outgoing positive energy
+% ghost\par}}
+% \end{array} \]
+% \end{bigdisplay}
+%
+% The diagrams can also appear as parts of equations:
+% \begin{bigdisplay}
+% \begin{verbatim}
+% \begin{eqnarray}
+% \feyn{fcf} &=& \feyn{faf + fpf + fpfpf + \cdots} \\
+% &=& \sum_{n=0}^\infty \feyn{fsafs ( pfsafs)}^n \\
+% &=& \feyn{\frac{fsafs}{1-(pfsafs)}}.
+% \end{eqnarray}
+% \end{verbatim}
+% \hrule
+% \begin{eqnarray}
+% \feyn{fcf} &=& \feyn{faf + fpf + fpfpf + \cdots} \\
+% &=& \sum_{n=0}^\infty \feyn{fsafs ( pfsafs)}^n \\
+% &=& \feyn{\frac{fsafs}{1-(pfsafs)}}.
+% \end{eqnarray}
+% \end{bigdisplay}
+%
+% \section{Installation}
+%
+% You should be able to find generic instructions for installing
+% \LaTeX\ files at
+% \url{http://www.tex.ac.uk/cgi-bin/texfaq2html?label=installthings}.
+%
+% If you have not done so already, you need to extract the package
+% file from the distribution file using |latex feyn.ins|. The
+% resulting \file{feyn.sty} should be installed in the usual location
+% for style files -- that is, something like
+% \file{texmf.local/tex/latex/feyn.sty}. The \metafont\ source files
+% \file{*.mf} should be installed in a directory with a location such as
+% \file{texmf.local/fonts/source/feyn/}. That should be all you need
+% to do as regards the installation of the fonts -- if your \TeX\
+% setup is installed correctly, then the usual font-generation
+% commands (such as \file{mktexpk} for example) should work as normal,
+% and these will usually be invoked by default when \LaTeX\ or
+% pdf\LaTeX\ is run.
+%
+% If you are using a teTeX-based system (which is true of most Unix
+% installations, and most MacOS\,X installations), then you can
+% determine the style-file and \metafont\ search paths using the commands
+% \begin{verbatim}
+% % kpsepath tex
+% % kpsepath mf
+% \end{verbatim}
+% respectively. After you have installed them, you will probably need
+% to give the command \texttt{mktexlsr} to rebuild the paths database,
+% and you can confirm that the files are findable with the commands
+% \texttt{kpsewhich feyn.sty} and \texttt{kpsewhich feyn10.mf}.
+%
+% Users of other systems will have similar mechanisms
+% for finding and confirming the search paths (and if anyone wishes to
+% send me details, I can add the details to this document).
+%
+% \section{Acknowledgements}
+%
+% Thanks to Purnendu Chakraborty, Fabio Correa, and Bryan Chen for
+% suggestions and testing at various times.
+%
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Start off with the available options.
+%
+% A wrinkle is that the |{align}| environment, which is defined
+% in the amsmath package, reads its contents before processing them,
+% which means that a `!' within the environment has its catcode fixed
+% before it can be changed by |\feyn| or |\diagram|. To handle this
+% situation, we support \Lopt{globalbang} and \Lopt{noglobalbang}
+% options, which cause the `!' character to be redefined globally or
+% not. The default depends on whether the amsmath package was loaded
+% before this one was.
+% \begin{macrocode}
+\newif\ifFeyn@globalbang
+\@ifpackageloaded{amsmath}{\Feyn@globalbangtrue}{\Feyn@globalbangfalse}
+\DeclareOption{globalbang}{\Feyn@globalbangtrue}
+\DeclareOption{noglobalbang}{\Feyn@globalbangfalse}
+% \end{macrocode}
+%
+% Now process the options specified in the package command.
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+%
+% Declare the feyn math font family. The |\skewchar| for this font
+% (see the \TeX book, p431) can be set to zero, since it's a
+% completely upright maths font (the least of its peculiarities). We
+% don't have the font in much of a range of sizes.
+% \begin{macrocode}
+\DeclareFontFamily{OMS}{feyn}{\skewchar\font'000}
+\DeclareFontShape{OMS}{feyn}{m}{n}{%
+ <-10.5>feyn10%
+ <10.5-11.5>feyn11%
+ <11.5-15>feyn12%
+ <15-21>feyn18%
+ <21->feyn24%
+ }{}
+% \end{macrocode}
+%
+% Now do the same for the text-size fonts, declaring the textfeyn math
+% font family.
+% \begin{macrocode}
+\DeclareFontFamily{OMS}{textfeyn}{\skewchar\font'000}
+\DeclareFontShape{OMS}{textfeyn}{m}{n}{%
+ <-10.5>feyntext10%
+ <10.5-11.5>feyntext11%
+ <11.5-15>feyntext12%
+ <15-21>feyntext18%
+ <21->feyntext24%
+ }{}
+% \end{macrocode}
+%
+% XXX It would be nice to arrange things so that superscripts in
+% the feyn font were drawn from cmmi7, or something. The original
+% feyn.sty arranged this with |\scriptfont\diagramfam=\ninmi|, but
+% it's not clear what the analogue in the FSS is.
+%
+% Now declare the `feynman' symbol font, and make the command |\feyn|
+% set its argument in that font. Similarly have |\Feyn| invoke the
+% feynman symbol font for the text sizes.
+% \begin{macrocode}
+\DeclareSymbolFont{feynman}{OMS}{feyn}{m}{n}
+\DeclareSymbolFontAlphabet{\feyn@alphabet}{feynman}
+\DeclareSymbolFont{textfeynman}{OMS}{textfeyn}{m}{n}
+\DeclareSymbolFontAlphabet{\Feyn@alphabet}{textfeynman}
+% \end{macrocode}
+%
+% Now use these font-setting commands, defining |\feyn| and |\Feyn| to
+% switch to the given alphabets, defining ! as a shortcut for
+% |\momentum| (so that |!{x}{y}| is interpreted as |\momentum{x}{y}|).
+% We have to make sure that the `!' character produces that character
+% everywhere except within |\feyn| or |\Feyn|. How we do this depends
+% on the value of the |\ifFeyn@globalbang| switch.
+% \begin{macro}{\feyn}
+% \begin{macrocode}
+\ifFeyn@globalbang
+ \catcode`\!=\active
+ \def!{\char`\!} % ! produces this character everywhere
+ \def\feyn{\begingroup
+ \let!\momentum % ...except within \feyn
+ \feyn@}
+ \def\Feyn{\begingroup
+ \let!\momentum % ...or \Feyn
+ \Feyn@}
+\else
+ {\catcode`\!=\active % only make ! active within \feyn
+ \gdef\feyn{%
+ \begingroup % ends in \feyn@
+ \catcode`\!=\active
+ \let!=\momentum
+ \feyn@}
+ \gdef\Feyn{%
+ \begingroup % ends in \Feyn@
+ \catcode`\!=\active
+ \let!=\momentum
+ \Feyn@}}
+\fi
+\def\feyn@#1{\feyn@alphabet{#1}\endgroup}
+\def\Feyn@#1{\Feyn@alphabet{#1}\endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Now get the size of the `module' (the length of the fermion), and the
+% height of the math-axis, from the font. You might think that the
+% math-axis is obtainable from |\fontdimen22| of the font, but we do
+% not load it as an |{operator}| font when we invoke
+% |\DeclareSymbolFont|, so it does not have all 22 parameters that a
+% symbol font (as the \TeX book uses the term, rather than \LaTeXe's
+% NFSS). I confess I don't \emph{really} understand the ins and outs
+% of this, but this route is robust and not wrong.
+%
+% The character |"7F| in the feyn font is blank, but has width
+% |module#| and height |a#| (using the dimensions of the font
+% file). Use this to set the |\feyn@module| and |\feyn@maxis|. Note
+% that the `module' used in this package file is twice the module used
+% in the \metafont\ files themselves.
+% \begin{macro}{\feyn@module}
+% \begin{macro}{\feyn@maxis}
+% \begin{macrocode}
+\DeclareMathSymbol{\FeynSpaceChar}{\mathord}{feynman}{"7F}
+\setbox0=\hbox{$\FeynSpaceChar$}
+\newdimen\feyn@mfmodule \feyn@mfmodule=\wd0
+\newdimen\feyn@module \feyn@module=2\wd0
+\newdimen\feyn@maxis \feyn@maxis=\ht0
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Diagram}
+% Define the |\Diagram| macro, which lays out a semi-complicated
+% diagram in 2-d.
+% \begin{macrocode}
+{\catcode`\!=\active
+ \gdef\Diagram{%
+ \begingroup % ends in \Diagram@
+ \catcode`\!=\active
+ \let!\momentum
+ \Diagram@}}
+\def\Diagram@#1{\setbox0=\hbox{\vbox{\offinterlineskip \let\\\cr
+ \halign{&$\displaystyle\feyn{##}$\cr #1\crcr}}}%
+% \end{macrocode}
+% At this point, |\box0| has zero depth. It must be an hbox, because
+% we're fiddling with its height within a enclosing |\vbox|. See the
+% \TeX book pp 388--389. This takes advantage of appx G, rule 8 to
+% move box0 down by the height of the math axis. The construction
+% |\dp0 = -2\fontdimen22 \textfont2| also works, in the sense of
+% moving the box onto the math axis, but makes the box too small,
+% which means that surrounding text can encroach.
+% \begin{macrocode}
+ \@tempdima=\ht0
+ \advance\@tempdima by 2\feyn@maxis \ht0=\@tempdima
+ \vcenter{\box0}%
+ \endgroup}% end group begun in \Diagram
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maxis}
+% Raise the argument to the math axis.
+% \begin{macrocode}
+\def\maxis#1{\raise\feyn@maxis \hbox{$#1$}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\momentum}
+% Manages annotation of characters. |\momentum{ch}{text}| sets the character
+% ch, which may be a ligature, and puts the given text at the recommended
+% annotation position for that character. |\momentum[pos]{ch}{text}|
+% is the same, except that the optional argument indicates the
+% position relative to the annotation position. It must be one of
+% `top', `urt', `lrt', `bot', `llft' or `ulft'.
+%
+% First, some support macros.
+%
+% |\feyn@nudge| is a small amount
+% which is added to the annotation positions, to keep them clear of the
+% point they're annotating.
+% \begin{macrocode}
+\newdimen\feyn@nudge \feyn@nudge=\feyn@mfmodule \divide\feyn@nudge by 3
+% \end{macrocode}
+%
+% The various |\feyn@pos@<x>| macros position their third argument
+% adjacent to a point offset by an amount |(#1,#2)| from the current
+% position. The macro |\feyn@pos@top| has the third argument adjacent
+% and above the point, |\feyn@pos@urt| has it to the upper-right, and
+% so on.
+% \begin{macrocode}
+\def\feyn@pos@top#1#2#3{% top
+ \leavevmode
+ \@tempdima=#2\feyn@mfmodule \advance\@tempdima\feyn@nudge
+ \setbox1=\hbox{\raise \@tempdima\hbox to 0pt{%
+ \hskip #1\feyn@mfmodule
+ \hbox to 0pt{\hss$\scriptstyle #3$\hss}\hss}}%
+ \ht1=0pt \dp1=0pt \box1}
+\def\feyn@pos@urt#1#2#3{% urt
+ \leavevmode
+ \@tempdima=#2\feyn@mfmodule \advance\@tempdima\feyn@nudge
+ \setbox1=\hbox{\raise \@tempdima\hbox to 0pt{%
+ \hskip #1\feyn@mfmodule \hskip\feyn@nudge $\scriptstyle #3$\hss}}%
+ \ht1=0pt \dp1=0pt \box1}
+\def\feyn@pos@lrt#1#2#3{% lrt
+ \leavevmode
+ \setbox0=\hbox to 0pt{\hskip\feyn@nudge $\scriptstyle #3$\hss}%
+ \@tempdima=#2\feyn@mfmodule
+ \advance\@tempdima -\ht0
+ \advance\@tempdima-\feyn@nudge
+ \setbox1=\hbox{\raise \@tempdima\hbox to 0pt{%
+ \hskip #1\feyn@mfmodule \box0\hss}}%
+ \ht1=0pt \dp1=0pt \box1}
+\def\feyn@pos@bot#1#2#3{% bot
+ \leavevmode
+ \setbox0=\hbox to 0pt{\hss$\scriptstyle #3$\hss}%
+ \@tempdima=#2\feyn@mfmodule
+ \advance\@tempdima -\ht0
+ \advance\@tempdima-\feyn@nudge
+ \setbox1=\hbox{\raise \@tempdima\hbox to 0pt{%
+ \hskip #1\feyn@mfmodule \box0\hss}}%
+ \ht1=0pt \dp1=0pt \box1}
+\def\feyn@pos@llft#1#2#3{% llft
+ \leavevmode
+ \setbox0=\hbox to 0pt{\hss$\scriptstyle #3$\hskip\feyn@nudge}%
+ \@tempdima=#2\feyn@mfmodule
+ \advance\@tempdima -\ht0
+ \advance\@tempdima-\feyn@nudge
+ \setbox1=\hbox{\raise \@tempdima\hbox to 0pt{%
+ \hskip #1\feyn@mfmodule \box0\hss}}%
+ \ht1=0pt \dp1=0pt \box1}
+\def\feyn@pos@ulft#1#2#3{% ulft
+ \leavevmode
+ \@tempdima=#2\feyn@mfmodule \advance\@tempdima\feyn@nudge
+ \setbox1=\hbox{\raise \@tempdima\hbox to 0pt{%
+ \hskip #1\feyn@mfmodule
+ \hbox to 0pt{\hss$\scriptstyle #3$\hskip\feyn@nudge}\hss}}%
+ \ht1=0pt \dp1=0pt \box1}
+% \end{macrocode}
+%
+% Now include the definitions of the annotation positions, as extracted
+% from the Metafont file. These define macros |\feyn@ann@#1|,
+% where argument |#1| is a given character (or ligature) at the
+% position |(#2,#3)|, using the various |\feyn@pos@<x>| macros. The
+% |<x>| is either the value of argument |#4|, or the contents of
+% |\@tempa| if that has been set non-empty by |\momentum@|.
+% \begin{macrocode}
+\def\feyn@annotation#1#2#3#4{%
+ \expandafter\def\csname feyn@ann@#1\endcsname##1{%
+ \csname feyn@pos@\ifx\@tempa\@empty #4\else\@tempa\fi\endcsname
+ {#2}{#3}{##1}%
+ #1}}
+% \end{macrocode}
+% Now read in the collection of annotation positions. These are
+% generated by the \texttt{./parse-ligtables} script, and inserted
+% into this file by the Makefile when \file{feyn.dtx} is generated.
+% \begin{macrocode}
+% @FEYNANNOTATIONS@
+% commands generated by parse-ligtables...
+\feyn@annotation{f}{0.99974}{0.35}{top}% "f"
+\feyn@annotation{fA}{0.99974}{0.35}{top}% "F"
+\feyn@annotation{fV}{0.99974}{0.35}{top}% 6
+\feyn@annotation{fu}{0.70692}{0.95692}{ulft}% "e"
+\feyn@annotation{fuA}{0.70692}{0.95692}{ulft}% "E"
+\feyn@annotation{fuV}{0.70692}{0.95692}{ulft}% 5
+\feyn@annotation{fd}{0.70692}{0.95692}{urt}% "d"
+\feyn@annotation{fdA}{0.70692}{0.95692}{urt}% "D"
+\feyn@annotation{fdV}{0.70692}{0.95692}{urt}% 4
+\feyn@annotation{fv}{0}{1.24974}{urt}% "b"
+\feyn@annotation{fvA}{0}{1.24974}{urt}% "B"
+\feyn@annotation{fvV}{0}{1.24974}{urt}% 2
+\feyn@annotation{m}{0.99974}{0.32802}{top}% "m"
+\feyn@annotation{mA}{0.99974}{0.32802}{top}% "M"
+\feyn@annotation{mV}{0.99974}{0.32802}{top}% 13
+\feyn@annotation{ms}{0.49986}{0.32802}{top}% 11
+\feyn@annotation{fl}{0}{1.85}{top}% "l"
+\feyn@annotation{flA}{0}{1.85}{top}% "L"
+\feyn@annotation{flV}{0}{1.85}{top}% 12
+\feyn@annotation{flu}{0}{-1.35}{bot}% "n"
+\feyn@annotation{fluA}{0}{-1.35}{bot}% "N"
+\feyn@annotation{fluV}{0}{-1.35}{bot}% 14
+\feyn@annotation{flS}{0}{1.23335}{top}% "o"
+\feyn@annotation{flSA}{0}{1.23335}{top}% "O"
+\feyn@annotation{flSV}{0}{1.23335}{top}% 15
+\feyn@annotation{flSu}{0}{-0.90001}{bot}% "w"
+\feyn@annotation{flSuA}{0}{-0.90001}{bot}% "W"
+\feyn@annotation{flSuV}{0}{-0.90001}{bot}% 23
+\feyn@annotation{g}{0.99974}{0.45}{top}% "g"
+\feyn@annotation{gA}{0.99974}{0.45}{top}% "G"
+\feyn@annotation{gV}{0.99974}{0.45}{top}% 7
+\feyn@annotation{gu}{0.70692}{0.95692}{ulft}% "u"
+\feyn@annotation{guA}{0.70692}{0.95692}{ulft}% "U"
+\feyn@annotation{guV}{0.70692}{0.95692}{ulft}% 21
+\feyn@annotation{gd}{0.70692}{0.95692}{urt}% "v"
+\feyn@annotation{gdA}{0.70692}{0.95692}{urt}% "V"
+\feyn@annotation{gdV}{0.70692}{0.95692}{urt}% 22
+\feyn@annotation{gv}{0}{1.24974}{urt}% "}"
+\feyn@annotation{gvA}{0}{1.24974}{urt}% "]"
+\feyn@annotation{gvV}{0}{1.24974}{urt}% 29
+\feyn@annotation{g1}{-1.41422}{1.66422}{ulft}% "q"
+\feyn@annotation{g1A}{-1.41422}{1.66422}{ulft}% "Q"
+\feyn@annotation{g1V}{-1.41422}{1.66422}{ulft}% 17
+\feyn@annotation{g2}{1.41422}{1.66422}{urt}% "r"
+\feyn@annotation{g2A}{1.41422}{1.66422}{urt}% "R"
+\feyn@annotation{g2V}{1.41422}{1.66422}{urt}% 18
+\feyn@annotation{g3}{1.41422}{-1.16422}{lrt}% "s"
+\feyn@annotation{g3A}{1.41422}{-1.16422}{lrt}% "S"
+\feyn@annotation{g3V}{1.41422}{-1.16422}{lrt}% 19
+\feyn@annotation{g4}{-1.41422}{-1.16422}{llft}% "t"
+\feyn@annotation{g4A}{-1.41422}{-1.16422}{llft}% "T"
+\feyn@annotation{g4V}{-1.41422}{-1.16422}{llft}% 20
+\feyn@annotation{gl}{0}{2.25}{urt}% "y"
+\feyn@annotation{glA}{0}{2.25}{urt}% "Y"
+\feyn@annotation{glV}{0}{2.25}{urt}% 25
+\feyn@annotation{glu}{0}{-1.75}{llft}% "z"
+\feyn@annotation{gluA}{0}{-1.75}{llft}% "Z"
+\feyn@annotation{gluV}{0}{-1.75}{llft}% 26
+\feyn@annotation{glB}{0}{2.91667}{urt}% "{"
+\feyn@annotation{glBA}{0}{2.91667}{urt}% "["
+\feyn@annotation{glBV}{0}{2.91667}{urt}% 27
+\feyn@annotation{glS}{0}{1.5833}{llft}% "|"
+\feyn@annotation{glSA}{0}{1.5833}{llft}% "\"
+\feyn@annotation{glSV}{0}{1.5833}{llft}% 28
+\feyn@annotation{h}{0.99974}{0.25}{top}% "h"
+\feyn@annotation{hA}{0.99974}{0.25}{top}% "H"
+\feyn@annotation{hV}{0.99974}{0.25}{top}% 8
+\feyn@annotation{hu}{0.70464}{0.95464}{ulft}% "i"
+\feyn@annotation{huA}{0.70464}{0.95464}{ulft}% "I"
+\feyn@annotation{huV}{0.70464}{0.95464}{ulft}% 9
+\feyn@annotation{hd}{0.70464}{0.95464}{urt}% "j"
+\feyn@annotation{hdA}{0.70464}{0.95464}{urt}% "J"
+\feyn@annotation{hdV}{0.70464}{0.95464}{urt}% 10
+\feyn@annotation{hs}{0.49986}{0.25}{top}% "K"
+\feyn@annotation{c}{0.65044}{0.90044}{top}% "c"
+\feyn@annotation{p}{0.65}{0.9}{top}% "p"
+\feyn@annotation{P}{0.65044}{0.90044}{top}% "P"
+\feyn@annotation{x}{0}{0.55641}{top}% "x"
+% \end{macrocode}
+%
+%
+% The |\momentum| macro (finally) invokes its worker macro
+% |\momentum@|, defaulting that macro's optional argument to empty.
+% In fact the macro |\momentum| should be only rarely
+% invoked, since ! is made active and bound to it within |\feyn|.
+%
+% The |\momentum@| macro takes two arguments, and expands to a call to
+% macro |\feyn@ann@#1|, acting on the second argument. This macro is
+% one of those defined by |\feyn@annotation| above. There is an
+% optional argument, giving the position for the annotation, if it has
+% turned out that the default position for this character is
+% inappropriate. The adjusted position may be one of `top', `urt',
+% `lrt', `bot', `llft' or `ulft'.
+% \begin{macrocode}
+\def\momentum{\@ifnextchar[\momentum@{\momentum@[]}}
+\def\momentum@[#1]#2#3{%
+ \def\@tempa{#1}
+ \ifx\@tempa\@empty \else
+ \@ifundefined{feyn@pos@#1}
+ {\@latex@error{No annotation position #1}%
+ {You cannot call \string\momentum[#1]{...}^^J(must be one
+ of top, urt, lrt, bot, llft, ulft)}%
+ #2}%
+ \fi
+ \@ifundefined{feyn@ann@#2}%
+ {\@latex@error{No annotation defined for #2}%
+ {You cannot call \string\momentum{#2}{...}}%
+ #2}%
+ {\csname feyn@ann@#2\endcsname{#3}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\vertexlabel}
+% The command |\vertexlabel^{text}| or |\vertexlabel_{text}| positions
+% the |{text}| in maths mode either above or below, respectively, the
+% current position. It's used between characters to label a vertex.
+% \begin{macrocode}
+\def\vertexlabel#1#2{\setbox0=\hbox to 0pt{\hss$\scriptstyle #2$\hss}
+ \ifcat #1^
+ \vbox to 0pt{\vss\box0\nointerlineskip\kern2\feyn@maxis}
+ \else\ifcat #1_
+ \vbox to 0pt{\kern\feyn@maxis\nointerlineskip\box0\vss}
+ \else
+ \PackageError{feyn}
+ {Bad arguments for \string\vertexlabel}
+ {Usage: \string\vertexlabel^{text} or \string\vertexlabel_{text}}
+ \fi\fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\annotate}
+% The |\annotate| command takes $x$ and $y$ coordinates in units of
+% modules, and text (in math mode) to be placed on a |\diagram|.
+% Deprecated, now that the characters have annotation built in to them.
+% \begin{macrocode}
+\def\annotate#1#2#3{\vcenter to 0pt{\vss
+ \hbox to 0pt{\hskip #1\feyn@module\hbox to 0pt{\hss$\scriptstyle #3$\hss}\hss
+ }\vskip #2\feyn@module}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\tannotate}
+% The |\tannotate| command is just the same, but the annotating text
+% is in horizontal mode.
+% \begin{macrocode}
+\def\tannotate#1#2#3{\vcenter to 0pt{\vss
+ \hbox to 0pt{\hskip #1\feyn@module\hbox to 0pt{\hss #3\hss}\hss
+ }\vskip #2\feyn@module}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\feynstrut}
+% The macro |\feynstrut#1#2| defines |\strut| to have a height
+% |#1| modules, and depth |#2| modules.
+% \begin{macrocode}
+\def\feynstrut#1#2{\setbox\strutbox=\hbox{\vrule
+ height #1\feyn@module depth #2\feyn@module width 0pt}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\arrow}
+% The command |\arrow#1#2#3| puts an arrow of gradient |#3|${}\times 45^\circ$
+% at position |(#1,#2)|(modules). This doesn't work -- the |\char|
+% results in a |\rm| character appearing, rather than a |\feyn|
+% character. Putting in a symbol like `+' has the same effect, but
+% putting in, say, `a' works as expected. In other words, it's to do
+% with the character's mathcode, and the |\char|
+% should be replaced by a |\mathchar"7?\@tempcnta| somehow. The
+% problem is that that depends on the parameter |\fam| having a
+% suitable value. It's not clear to me what this corresponds to in
+% \LaTeXe. See the \TeX book, chapter 17.
+% \begin{macrocode}
+\def\arrow#1#2#3{\@latex@error{Do not use the \string\arrow macro any more}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% Declare symbols. All of these are ligatures.
+% \begin{macrocode}
+\DeclareMathSymbol{\wfermion}{0}{feynman}{"64}
+%\DeclareMathSymbol{\Wfermion}{0}{feynman}{"44}
+\DeclareMathSymbol{\hfermion}{0}{feynman}{"6B}
+%\DeclareMathSymbol{\Hfermion}{0}{feynman}{"4B}
+\DeclareMathSymbol{\shfermion}{0}{feynman}{"6C}
+%\DeclareMathSymbol{\sHfermion}{0}{feynman}{"4C}
+\DeclareMathSymbol{\whfermion}{0}{feynman}{"6D}
+%\DeclareMathSymbol{\wHfermion}{0}{feynman}{"4D}
+\DeclareMathSymbol{\gvcropped}{0}{feynman}{"07}
+% \end{macrocode}
+% But the following are not ligatures.
+% \begin{macrocode}
+\DeclareMathSymbol{\bigbosonloop}{0}{feynman}{"7B}
+%\DeclareMathSymbol{\Bigbosonloop}{7}{feynman}{"21}
+\DeclareMathSymbol{\smallbosonloop}{0}{feynman}{"7C}
+\DeclareMathSymbol{\bigbosonloopA}{0}{feynman}{"5B}
+\DeclareMathSymbol{\smallbosonloopA}{0}{feynman}{"5C}
+\DeclareMathSymbol{\bigbosonloopV}{0}{feynman}{"1B}
+\DeclareMathSymbol{\smallbosonloopV}{0}{feynman}{"1C}
+% \end{macrocode}
+%
+%
+% \Finale
+\endinput
diff --git a/Master/texmf-dist/source/fonts/feyn/feyn.ins b/Master/texmf-dist/source/fonts/feyn/feyn.ins
new file mode 100644
index 00000000000..5a56e95876d
--- /dev/null
+++ b/Master/texmf-dist/source/fonts/feyn/feyn.ins
@@ -0,0 +1,14 @@
+\input docstrip
+\preamble
+ Feyn: package to manage the font feyn10
+\endpreamble
+\keepsilent
+\askforoverwritefalse
+
+\generate{\file{feyn.drv}{\from{feyn.dtx}{driver}}
+ \file{feyn.sty}{\from{feyn.dtx}{package}}
+ }
+
+\endbatchfile
+
+%% $Id: feyn.ins,v 1.1 2001/08/06 17:21:31 norman Exp $