summaryrefslogtreecommitdiff
path: root/macros/latex209/contrib/feynman/gluonlinks.tex
blob: c6c1a12388b672bb02dfbfa383fb8dfbc76fb8a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
%                       GLUONLINKS.TEX (FEB. 5, 1989)
%  CALLED BY FEYNMAN(34).TEX.
%
%  Routines for drawing GLUON LINKS and GLUON CAPS used by FEYNMAN.TEX.
%  Formerly in separate files (GLUONLINKS & GLUONCAPS).
%  This file is read in when \gluonlink, \gluoncap, defined in GLUONSETUP(21+),
%  and related commands (in \drawvetex) are used.
%
%  GLUON LINKS are used to link \CENTRAL-type gluon lines together 
%  (eg: \REG & \FLIPPED gluons drawn diagonally).
%  Syntax:   \drawline\gluon[\W\CENTRAL](x,y)[number of loops]\gluonlink
%            \drawline\gluon[\W\CENTRAL](\pbackx,\pbacky)[number of loops]
%
%  GLUON CAPS are used on vertical and horizontal gluons to make the
%  terminus of the gluon line end along the gluon axis.  It then draws
%  a stem of length \stemlength (as though the command \BACKSTEMMED had
%  been issued).  Principal use is when \drawvertex is used.
%  Syntax:   \drawline\gluon[\W\FLAT](x,y)[number of loops]\gluoncap
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                           %
%                                                                           %
%                                GLUON LINKS                                %
%                                                                           %
%                                                                           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%        ROUTINE FOR LINKING \CENTRAL AND \FLIPPEDCENTRAL GLUONS
%
\gdef\gluonlink{
\global\stemlengthx=401 \SETDIR \setadjxy \divide\adjx by -2 \divide\adjy by -2
\ifcase\LDIR  
     \linksetupB \ifodd\LCONFIG\LINKPUT[l]  \else\LINKPUT[r] \fi %\Ngluon
\or  \ifodd\LCONFIG \linksetupBx \LINKPUT[tr]\LINKPUT[l]         %\NEgluon
     \else          \linksetupBy \LINKPUT[tr]\LINKPUT[b]     \fi
\or  \linksetupB \ifodd\LCONFIG\LINKPUT[t]  \else\LINKPUT[b] \fi %\Egluon
\or  \ifodd\LCONFIG \linksetupBy \LINKPUT[br]\LINKPUT[t]         %\SEgluon
     \else          \linksetupBx \LINKPUT[br]\LINKPUT[l]     \fi
\or  \linksetupB \ifodd\LCONFIG\LINKPUT[r]  \else\LINKPUT[l] \fi %\Sgluon
\or  \ifodd\LCONFIG \linksetupBx \LINKPUT[bl]\LINKPUT[r]         %\SWgluon
     \else          \linksetupBy \LINKPUT[bl]\LINKPUT[t]     \fi
\or  \linksetupB \ifodd\LCONFIG\LINKPUT[b]  \else\LINKPUT[t] \fi %\Wgluon
\or  \ifodd\LCONFIG \linksetupBy \LINKPUT[tl]\LINKPUT[b]         %\NWgluon
     \else          \linksetupBx \LINKPUT[tl]\LINKPUT[r]     \fi
\else \UNIMPERROR 
\fi
\ifodd\LDIR\relax 
\else \global\advance\pbackx by \adjx   \global\advance\pbacky by \adjy \fi
\linksetupC
}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                           %
%                                                                           %
%                                GLUONCAPS                                  %
%                                                                           %
%                                                                           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%            ROUTINE FOR CENTRALIZING/CAPPING GLUONS
%
\gdef\gluoncap{  % For centralizing gluons
\global\stemlengthx=0  
\ifodd\LDIR\message{NOTE:  Diagonal Gluons are not Capped}\relax
\else
\ifcase\LCONFIG \global\stemlengthx=1000  %\REG case for NSEW
\or \global\stemlengthx=1000  %\FLIPPED case (NSEW)
\or \global\stemlengthx=825   %\CURLY case (NSEW)
\or \global\stemlengthx=825   %\FLIPPEDCURLY  case (NSEW)
\or \global\stemlengthx=1030  %\FLAT case (NSEW)
\or \global\stemlengthx=1030  %\FLIPPEDFLAT case (NSEW)
\or \global\stemlengthx=0     %\CENTRAL case (NSEW)
\or \global\stemlengthx=0     %\FLIPPEDCENTRAL case (NSEW)
\or \global\stemlengthx=800   %\SQUASHED case (NSEW)
\else\UNIMPERROR
\fi % end \ifcase\LCONFIG
\ifnum\stemlengthx>400
\global\advance\LDIR by 2 \moduloeight\LDIR   \SETDIR 
\global\advance\LDIR by 6 \moduloeight\LDIR   \setadjxy
\ifodd\LCONFIG \multiply \adjx by -1   \multiply \adjy by -1 \fi
\divide\adjx by 2  \divide\adjy by 2 \linksetupB
\ifcase\LDIR 
     \ifodd\LCONFIG\LINKPUT[tr]  \else\LINKPUT[tl]   \fi   %\NGLUON
\or  \relax % \NEGLUON
\or  \ifodd\LCONFIG\LINKPUT[br]  \else\LINKPUT[tr]   \fi   %\Egluon
\or  \relax % \SEgluon
\or  \ifodd\LCONFIG\LINKPUT[bl]  \else\LINKPUT[br]   \fi   %\Sgluon
\or  \relax % \SWgluon
\or  \ifodd\LCONFIG\LINKPUT[tl]  \else\LINKPUT[bl]   \fi   %\Wgluon
\or  \relax % \NWgluon
\else \UNIMPERROR 
\fi
\linksetupD
\else\message{* NOTE:  Attempt to use gluoncap of less that 401 centipoints *}
\fi % End of \ifnum\stemlengthx
\fi % end \ifodd
}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                           %
%                                                                           %
%       AUXILIARY ROUTINES USED BY BOTH \gluonlink and \gluoncap            %
%                                                                           %
%                                                                           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\gdef\setadjxy{
\adjx=\stemlengthx   \adjy=\stemlengthx % Yes, it's `x', not `y'.
\multiply \adjx by \XDIR%  
\multiply \adjy by \YDIR%  
}
\gdef\advancegluonlength{
\global\advance\particlelengthx by \adjx \global\advance\particlelengthy by\adjy
\global\advance\gluonlengthx by \adjx  \global\advance\gluonlengthy by \adjy
% The new adjusted gluon lengths.
}
\gdef\LINKPUT[#1]{\ifnum\phantomswitch=0\put(\gluonbackx,\gluonbacky)
{\oval(\stemlengthx,\stemlengthx)[#1]}\fi}  
\gdef\linksetupBx{\global\advance\gluonbackx by \adjx}
\gdef\linksetupBy{\global\advance\gluonbacky by \adjy}
\gdef\linksetupB{\linksetupBx\linksetupBy}
\gdef\linksetupC{
\global\advance\pbackx by \adjx  \global\advance\pbacky by \adjy
\global\gluonbackx=\pbackx   \global\gluonbacky=\pbacky
% Take negative particle lengths into account.  \BOXLENGTHX,Y remain as before.
\ifnum\plengthx<0 \multiply\adjx by -1 \fi
\ifnum\plengthy<0 \multiply\adjy by -1 \fi
\advancegluonlength
}
\gdef\linksetupD{
\linksetupC
\SETDIR 
\setadjxy
\divide\adjx by 2  \divide\adjy by 2 \linksetupB
\global\pbackx=\gluonbackx   \global\pbacky=\gluonbacky
\advancegluonlength
\ifnum\phantomswitch=0\put(\pbackx,\pbacky){\line(\XDIR,\YDIR){\stemlength}}\fi
\stemlengthx=\stemlength  %TESTING
\setadjxy
\global\advance\pbackx by \adjx  \global\advance\pbacky by \adjy
\global\gluonbackx=\pbackx   \global\gluonbacky=\pbacky
\advancegluonlength
% The new adjusted gluon lengths and rear positions
}