summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public/feyn/feyn.mf
blob: fe748a05fb7ada86f0d1bf81507b116ada504a94 (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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
%   This is the metafont for the feynfont font.
%
%   When I look at the property list of the generated TFM (using
%   tftopl) it starts with `(FAMILY CMR)': but this isn't in the cmr
%   family.  I can't find anything in cmbase.mf which would cause
%   this.  Perhaps I need to read the Metafont Book more closely.
%
%   $Id: feyn.mf,v 1.6 2002/04/18 22:32:10 norman Exp $


mode_setup; font_setup;

% a# is the position of the characters above the baseline.
a# := math_axis#;		% math_axis is defined by cmr

% Feyn macros
input feynmac;

define_pixels (module,bigarrow,littlearrow,blobr,a);
define_blacker_pixels (linewidth,thinlinewidth);

pickup pencircle scaled linewidth;
diagram_pen := savepen;

% general definitions
phangle := 75;


%   All the character positions between 0 and hex"7F"
%   have characters in them.  Not all of these characters are ones
%   which should appear on paper; some (such as `s' or `l') only
%   appear in ligatures, and others shouldn't appear at all.  If,
%   however, there are no characters in these positions, some DVI
%   readers (including TFtoPL and OzTeX for example) complain about a
%   `bad TFM file'.  These locations are therefore occupied by the
%   character generated by the errorchar macro, which is 0pt wide, and
%   1module# high.  This character doesn't generate any real error,
%   but the glyph will be manifestly peculiar on paper.


gfermion (0, -45);
gfermion (1,  45);
gfermion (2,  90);

beginchar (3, 0, module#, 0); errorchar (h); endchar;

gboson (4, -45, 1, 0);
gboson (5,  45, 1, 0);
gboson (6, 90, 1, 0);
gboson (7, 90, 0.85, 0);
gboson (8, 90, 1.7, 1);

for c=hex"09" upto hex"0F":
  beginchar (c, 0, module#, 0); errorchar (h); endchar;
endfor

gghost (hex"10", -45);
gghost (hex"11",  45);

for c=hex"12" upto hex"1F":
  beginchar (c, 0, module#, 0); errorchar (h); endchar;
endfor

gbhalfloop (hex"20", 1.3, 9,  0);		% small loop
gbhalfloop (hex"21", 3,   13, 0);		% large loop

beginchar (hex"22", 0, module#, 0); errorchar (h); endchar;
beginchar (hex"23", 0, module#, 0); errorchar (h); endchar;
beginchar (hex"24", 0, module#, 0); errorchar (h); endchar;
beginchar (hex"25", 0, module#, 0); errorchar (h); endchar;
beginchar (hex"26", 0, module#, 0); errorchar (h); endchar;
beginchar (hex"27", 0, module#, 0); errorchar (h); endchar;

garrow (hex"28", 0,   0);
garrow (hex"29", 45,  0);
garrow (hex"2A", 90,  0);
garrow (hex"2B", 135, 0);
garrow (hex"2C", 180, 0);
garrow (hex"2D", 225, 0);
garrow (hex"2E", 270, 0);
garrow (hex"2F", 315, 0);

% Digits 0x30--0x39 go here.  Obtain these from the cmr source file: romand.mf.
input romand;

for c=hex"3A" upto hex"5F":
  beginchar (c, 0, module#, 0); errorchar (h); endchar;
endfor

beginchar (hex"60", 2module#, 0, 0);		"spacer";
endchar;

garrow ("a", 0, 1);				"arrow";

beginchar ("b", module#, 0, 0);			"short spacer";
  % A previous version of this font had this curious construction, without
  % explanation.  I don't know why it was thought necessary.  It seems 
  % to result in a hairline being put in this character.  Remove it
  % for the moment.
  %pickup pencircle scaled 0pt;
  %draw (0,0) .. (w,0);
endchar;

beginchar ("c", 2blobr#, blobr# + a#, blobr#);	"complete vertex";
  pen;
  draw (0,a) .. (w,a) .. cycle;
endchar;

beginchar ("d", module#/2, 0, 0);		"weeny fermion";
  pen;
  draw (0,a)..(w,a);
endchar;

beginchar ("e", module#, 0, 0);			"short fermion";
  pen;
  draw (0,a)..(w,a);
endchar;

beginchar ("f", 2module#, 0, 0);		"fermion";
  pen;
  draw (0,a)..(w,a);
endchar;

beginchar ("g", 2module#, 0, 0);
  pen;						"gauge boson";
  def ::(expr b) = {dir b} looselink {dir -b} enddef;
  z1 = (0,a);  z5 = (w,a);
  z2-z1 = z3-z2 = z4-z3 = z5-z4;
  draw z1 ::(phangle) z2 ::(-phangle) z3 ::(phangle) z4 ::(-phangle) z5;
endchar;

beginchar ("h", 2module#, 0, 0);		"ghost";
  pen;
  z1 = (0,a);  z10 = (w,a);
  z4-z3 = 2(z2-z1);
  z4-z3 = z6-z5 = z8-z7;
  z2-z1 = z3-z2 = z5-z4 = z7-z6 = z9-z8 = z10-z9;
  draw z1..z2; draw z3..z4; draw z5..z6; draw z7..z8; draw z9..z10;
endchar;

beginchar ("i", module#, 0, 0);			"short ghost";
  pen;
  z1 = (0,a);  z6 = (w,a);
  z4-z3 = 2(z2-z1);
  z2-z1 = z3-z2 = 1/2(z4-z3) = z5-z4 = z6-z5;
  draw z1..z2; draw z3..z4; draw z5..z6;
endchar;

beginchar ("j", 0, module#, 0); errorchar (h); endchar;

beginchar ("k", module#/2, 0, 0);		"weeny massive fermion";
  pen;
  y1 - a = y2 - a = a - y3 = a - y4 = module#/3.5;
  x1 = x3 = 0;
  x2 = x4 = w;
  draw z1--z2;
  draw z3--z4;
endchar;

beginchar ("l", module#, 0, 0);			"short massive fermion";
  pen;
  y1 - a = y2 - a = a - y3 = a - y4 = module#/3.5;
  x1 = x3 = 0;
  x2 = x4 = w;
  draw z1--z2;
  draw z3--z4;
endchar;

beginchar ("m", 2module#, 0, 0);		"massive fermion";
  pen;
  y1 - a = y2 - a = a - y3 = a - y4 = module#/3.5;
  x1 = x3 = 0;
  x2 = x4 = w;
  draw z1--z2;
  draw z3--z4;
endchar;

beginchar ("n", 4module#, 2module#-a#, 2module#-a#);
  pen;						"fermion loop";
  z0 = (0,a); z1 = (w,a);
  draw z0{dir  phangle} ..tension 1.15.. {dir -phangle}z1;
  draw z0{dir -phangle} ..tension 1.15.. {dir  phangle}z1;
endchar;

gbhalfloop ("o", 2, 11, 0);	% gauge boson half loop";

beginchar ("p", 2blobr#, blobr# + a#, blobr# - a#);
  pen;						"proper vertex";
  picture p[];
  pair t[];
  fill (-blobr, 0) .. (blobr, 0) .. cycle;
  p1 := currentpicture; clearit;
  draw (-blobr, 0) .. (blobr, 0) .. cycle;
  p2 := currentpicture; clearit;
  t1 = 5/6[origin, (0,blobr)] shifted (-blobr, 0);
  t7 = 5/6[origin, (0,blobr)] shifted (+blobr, 0);
  forsuffixes s = 2,3,4,5,6 :
    t[s]   = t[s-1] shifted (0, -blobr/3);
    t[s+6] = t[s+5] shifted (0, -blobr/3);
  endfor
  forsuffixes s = 1,2,3,4,5,6,7,8,9,10,11,12 :
    z[s] = t[s] rotated 45;
  endfor
  forsuffixes s = 1,2,3,4,5,6 :
    draw z[s] -- z[s+6]; 
  endfor
  addto currentpicture also p1;
  cull currentpicture keeping (2,2);  % & the two pictures
  addto currentpicture also p2;
  currentpicture := currentpicture shifted (blobr,a);
  labels (range 1 thru 12);
endchar;

beginchar ("q", 0, module#, 0); errorchar(h); endchar;
beginchar ("r", 0, module#, 0); errorchar(h); endchar;
beginchar ("s", 0, module#, 0); errorchar(h); endchar;
beginchar ("t", 0, module#, 0); errorchar(h); endchar;
beginchar ("u", 0, module#, 0); errorchar(h); endchar;
beginchar ("v", 0, module#, 0); errorchar(h); endchar;

gbhalfloop ("w", 2, 11, 1); % "gauge boson (half) loop, inverted";

beginchar ("x", 0, blobr#/sqrt 2 + a# , blobr#/sqrt2 - a#);	"counterterm";
  pen;
  -x1 = -x2 = x3 = x4;
  y1 = -y2 = y3 = -y4;
  z3 = (2blobr/3, 0) rotated 45;
  draw z1 .. z4;
  draw z2 .. z3;
  currentpicture := currentpicture shifted (0,a);
endchar;

beginchar ("y", 0, module#, 0);     errorchar(h); endchar;
beginchar ("z", 0, module#, 0);     errorchar(h); endchar;
beginchar (hex"7b", 0, module#, 0); errorchar(h); endchar;
beginchar (hex"7c", 0, module#, 0); errorchar(h); endchar;
beginchar (hex"7d", 0, module#, 0); errorchar(h); endchar;
beginchar (hex"7e", 0, module#, 0); errorchar(h); endchar;

beginchar (hex"7F", module#, a#, 0);		"space block";
  pen;
  draw origin--(w,h);
  draw (0,h)--(w,0);
  % nothing
endchar;


%   Construct the ligature tables.
ligtable "f" :		% fermion
    "s" =: hex"65",	% short
    "u" =: hex"01",	% up
    "d" =: hex"00",	% down
    "v" =: hex"02",	% vertical
    "l" =: hex"6e",	% loop
    "0" =: hex"60";	% spacer
ligtable hex"65" :	% short fermion
    "0" =: hex"62";	% short spacer
ligtable "m" :
    "s" =: hex"6c";	% short massive
ligtable "g" :		% gauge boson
    "l" =: hex"6F",	% loop
    "u" =: hex"05",	% up
    "d" =: hex"04",	% down
    "v" =: hex"06";	% vertical
ligtable hex"06" :	% vertical boson
    "s" =: hex"07",	% short
    "b" =: hex"08";	% big
ligtable hex"6F" :	% gauge boson loop
    "u" =: hex"77";	% lower loop
ligtable "h" :		% ghost
    "s" =: "i",		% short
    "u" =: hex"11",	% up
    "d" =: hex"10";	% down