diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/feyn/feyn.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/feyn/feyn.mf | 654 |
1 files changed, 505 insertions, 149 deletions
diff --git a/Master/texmf-dist/fonts/source/public/feyn/feyn.mf b/Master/texmf-dist/fonts/source/public/feyn/feyn.mf index fe748a05fb7..01477d5d467 100644 --- a/Master/texmf-dist/fonts/source/public/feyn/feyn.mf +++ b/Master/texmf-dist/fonts/source/public/feyn/feyn.mf @@ -1,17 +1,22 @@ -% This is the metafont for the feynfont font. +% This is the metafont for the feynfont font, release 0.3.1, 2008 February 29 +% +% Copyright 1991, 1994, 2001, 2002, 2005, 2008, Norman Gray. +% See the file LICENCE for licence details. +% +% % % 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 $ +% $Id: feyn.mf,v 1.17 2008/02/29 21:26:27 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 +a# := on_math_axis * math_axis#; % math_axis is defined by cmr % Feyn macros input feynmac; @@ -36,153 +41,406 @@ phangle := 75; % 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. +% +% Add code to extra_beginchar so that we keep a record of all the +% characters that we generate, so that we can generate an errochar +% character for each of the codepoints that we've skipped. `charcode' +% is defined in the expansion of beginchar() + +numeric donechar[]; +string donecharerror; +donecharerror := "Duplicate character"; +extra_beginchar := extra_beginchar & "if known donechar[charcode]: errmessage donecharerror; fi donechar[charcode] := 1;"; + +path charpath; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Digits 0x30--0x39. Obtain these from the cmr source file: romand.mf. +input romand; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Fermions + +def path_fermion (expr scale_sharp, ang) = + begingroup + save scale; + scale := hround(scale_sharp*hppp); + if ang > 0: % slopes upward + (0,a) .. (scale*(cosd ang), scale*(abs sind ang)+a) + else : + (0,scale*(abs sind ang)+a) .. (scale*(cosd ang), a) + fi + endgroup +enddef; + +threechars ("f", "fermion", + path_fermion(2module#, 0), 0.5, 2module#, 0, 0, + (0,0.1module), "top"); + +beginchar ("k", module#, 0, 0); + "short fermion"; + pen; + draw path_fermion(module#, 0); +endchar; -gfermion (0, -45); -gfermion (1, 45); -gfermion (2, 90); -beginchar (3, 0, module#, 0); errorchar (h); endchar; +% The following characters are in boxes the same vertical size as the black +% bit of the character, but they project out of the top by an amount equal to +% the height of the math axis, and are that same height clear of the bottom +% of the box. +% +%%%% -90 <= ang <= +90, or all hell will break loose -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); +threechars ("e", "upward fermion", + path_fermion(2module#, 45), 0.5, + 2module#*(cosd 45), 2module#*(abs sind 45), 0, + 0, "ulft"); -for c=hex"09" upto hex"0F": - beginchar (c, 0, module#, 0); errorchar (h); endchar; -endfor +threechars ("d", "downward fermion", + path_fermion(2module#, -45), 0.5, + 2module#*(cosd -45), 2module#*(abs sind -45), 0, + 0, "urt"); -gghost (hex"10", -45); -gghost (hex"11", 45); +threechars ("b", "vertically upward fermion", + path_fermion(2module#, 90), 0.5, + 2module#*(cosd 90), 2module#*(abs sind 90), 0, + 0, "urt"); -for c=hex"12" upto hex"1F": - beginchar (c, 0, module#, 0); errorchar (h); endchar; -endfor +charpath := path_fermion(2module#, 0); +beginchar("m", 2module#, 0, 0); "massive fermion"; + pen; + draw charpath shifted (0,linewidth); + draw charpath shifted (0,-linewidth); + annotate_at(point 0.5 of charpath shifted (0,linewidth), "top"); +endchar; -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; +beginchar("M", 2module#, 0, 0); "r-arrowed massive fermion"; + pen; + draw charpath shifted (0,linewidth); + draw charpath shifted (0,-linewidth); + drawarrow (bigarrow, point 0.5 of charpath, 0); + annotate_at(point 0.5 of charpath shifted (0,linewidth), "top"); +endchar; -for c=hex"3A" upto hex"5F": - beginchar (c, 0, module#, 0); errorchar (h); endchar; -endfor +beginchar(byte"m"-hex"60", 2module#, 0, 0); "l-arrowed massive fermion"; + pen; + draw charpath shifted (0,linewidth); + draw charpath shifted (0,-linewidth); + drawarrow (bigarrow, point 0.5 of charpath, 180); + annotate_at(point 0.5 of charpath shifted (0,linewidth), "top"); +endchar; -beginchar (hex"60", 2module#, 0, 0); "spacer"; +charpath := path_fermion(module#, 0); +beginchar(hex"0B", module#, 0, 0); "short massive fermion"; + pen; + draw charpath shifted (0,linewidth); + draw charpath shifted (0,-linewidth); + %drawarrow (littlearrow, point 0.5 of charpath, 0); + annotate_at(point 0.5 of charpath shifted (0,linewidth), "top"); endchar; -garrow ("a", 0, 1); "arrow"; +begingroup + clearxy; + save width; + width# := 4module#; + define_pixels(width); + x2-x0 = 2(x1-x0) = width; + x1 = 0; + y0 = y2 = 0; + y1 = 1.6module; + %charpath := z0{dir 60} .. {dir -60}z2; + charpath := z0 .. z1 .. z2; + + threechars("l", "fermion loop", + charpath shifted (0,a), 1, + 0, module#+a#, 0, + 0, "top"); + threechars("n", "fermion loop, inverted", + charpath yscaled -1 shifted (0,a), 1, + 0, module#+a#, 0, + 0, "bot"); + threechars("o", "fermion loop, small", + charpath scaled 0.66667 shifted (0,0.66667a), 1, + 0, module#+a#, 0, + 0, "top"); + threechars("w", "fermion loop, small, inverted", + charpath xscaled 0.66667 yscaled -0.66667 shifted(0,0.66667a), 1, + 0, module#+a#, 0, + 0, "bot"); +endgroup; + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Gauge bosons +% -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); +def path_boson (expr scale_sharp, ang, taper) = + begingroup + save scale; + clearxy; + scale := hround(scale_sharp*hppp); + x1 = 0; x5 = scale*(cosd ang); + if ang > 0 : % slopes upward + y1 = a; + y5 = scale*(abs sind ang) + a; + else : + y1 = scale*(abs sind ang) + a; + y5 = a; + fi + z2-z1 = z3-z2 = z4-z3 = z5-z4; + def ::(expr b) = {dir (ang+b)} looselink {dir (ang-b)} enddef; + + z1 ::(phangle) z2 ::(-phangle) z3 ::(phangle) z4 + if taper <> 0 : + {dir (ang-phangle)} .. tension 1 and 0.8 .. {dir (ang+phangle/2)} + else : + ::(-phangle) + fi + z5 + endgroup +enddef; + +threechars ("g", "gluon", + path_boson(2module#, 0, 0), 2, + 2module#, 0, 0, + (0, 0.2module), "top"); +threechars ("u", "upward gluon", + path_boson(2module#, 45, 0), 2, + 2module#*(cosd 45), 2module#*(abs sind 45), 0, + 0, "ulft"); +threechars ("v", "downward gluon", + path_boson(2module#, -45, 0), 2, + 2module#*(cosd -45), 2module#*(abs sind -45), 0, + 0, "urt"); +threechars (oct"175", + "vertical gluon", + path_boson(2module#, 90, 1), 2, + 0, 2module#, 0, + 0, "urt"); + + +% plus or minus phangle, depending on whether n is odd or even +def pm_angle(expr n) = + if odd n: -1 else: 1 fi*phangle +enddef; + +% a gluon quarter loop: +% wid: radius of loop in modules +% nopts: number of points +% inv: if 1, the loop goes from the axis to the top; +% if 0, from the top down to the axis +% negang: if 1, negate the photon angle (so it wiggles oppositely); +% if 0, don't +% taper: if 1, the line tapers as it approaches the axis +def path_quadloop (expr wid, nopts, inv, negang, taper) = + begingroup + save halfwidth, myangle; + clearxy; + halfwidth# := wid*module#; + define_pixels(halfwidth); + myangle = if negang <> 0: -phangle else: phangle fi; + z0 = (halfwidth, 0); + for x = 1 upto nopts: + z[x] = z0 rotated (x*90/nopts); + endfor + if inv = 0: + def ::(expr p,ang) = p{p rotated(-90-ang)} looselink enddef; + for x=nopts downto 2: + ::(z[x], pm_angle(x+negang)) + endfor + if taper <> 0: + z[1]{z[1] rotated(-90+myangle)} .. tension 1 and 0.8 .. {dir -(90+myangle/2)} + else: + ::(z[1], pm_angle(1+negang)) + fi + z0 + else: + def ::(expr p,ang) = looselink {p rotated (90+ang)}p enddef; + if taper <> 0: + z0 {dir (90+myangle/2)} .. tension 0.8 and 1 .. z[1]{z[1] rotated(90-myangle)} + else: + z0{dir (90+myangle)} + ::(z[1], pm_angle(1+negang)) + fi + for x=1 upto nopts: + ::(z[x], pm_angle(x+negang)) + endfor + fi + endgroup +enddef; + + +threechars ("q", "gluon, quadrant 1", + path_quadloop(2, 6, 1, 0, 1) xscaled -1 shifted (0,a), 4, + 0, 2module#+a#, 0, + 0, "ulft"); +threechars ("r", "gluon, quadrant 2", + path_quadloop(2, 6, 0, 0, 1) shifted (0,a), 3, + 0, 2module#+a#, 0, + 0, "urt"); +threechars ("s", "gluon, quadrant 3", + path_quadloop(2, 6, 0, 1, 1) yscaled -1 shifted (0,a), 3, + 0, a#, a#-2module#, + 0, "lrt"); +threechars ("t", "gluon, quadrant 4", + path_quadloop(2, 6, 1, 1, 1) scaled -1 shifted (0,a), 4, + 0, a#, a#-2module#, + 0, "llft"); +% The two loops following have the annotation off-centre, to keep +% it clear of the wiggles. Would it look better being "top" and "bot" +% again, but with a non-zero offset in the second-last argument? +threechars ("y", "gluon half loop", + ((path_quadloop(2, 6, 1, 0, 0) xscaled -1) + .. path_quadloop(2, 6, 0, 0, 0)) shifted (0,a), 7, + 0, 2module#+a#, 0, + 0, "urt"); +threechars ("z", "gluon half loop, inverted", + ((path_quadloop(2, 6, 1, 1, 0) scaled -1) + .. (path_quadloop(2, 6, 0, 1, 0) yscaled -1)) shifted (0,a), 7, + 0, a#, a#-2module#, + 0, "llft"); + +% Small and large boson half loops are at positions which are not characters. +% That's OK -- they can still be accessed by ligatures. +% 7b='{', 7c='|' +threechars (hex"7B", "large gluon half loop", + ((path_quadloop(2.66667, 8, 1, 0, 0) xscaled -1) + .. path_quadloop(2.66667, 8, 0, 0, 0)) shifted (0,a), 9, + 0, 2.66667module#+a#, 0, + 0, "urt"); +threechars (hex"7C", "small gluon half loop", + ((path_quadloop(1.3333, 4, 1, 0, 0) xscaled -1) + .. path_quadloop(1.3333, 4, 0, 0, 0)) shifted (0,a), 6, + 0, 1.3333module#+a#, 0, + 0, "llft"); + + + +def draw_ghost(expr a, b, apos) = + begingroup + clearxy; + %z1 = (0,a); z10 = (2module,a); + z1 = a; z10 = b; + z4-z3 = 2(z2-z1); + z4-z3 = z6-z5 = z8-z7; + z2-z1 = z3-z2 = z5-z4 = z7-z6 = z9-z8 = z10-z9; + pen; + draw z1..z2; draw z3..z4; draw z5..z6; draw z7..z8; draw z9..z10; + annotate_at(0.5[z5,z6], apos); + endgroup +enddef; + +beginchar ("h", 2module#, 0, 0); "ghost"; + pen; + draw_ghost((0,a), (w,a), "top"); endchar; - -beginchar ("c", 2blobr#, blobr# + a#, blobr#); "complete vertex"; +beginchar (byte "h"-hex"20", 2module#, 0, 0); "r-arrowed ghost"; pen; - draw (0,a) .. (w,a) .. cycle; + draw_ghost((0,a), (w,a), "top"); + drawarrow (littlearrow, .5[(0,a), (w,a)], 0); endchar; - -beginchar ("d", module#/2, 0, 0); "weeny fermion"; +beginchar (byte "h"-hex"60", 2module#, 0, 0); "l-arrowed ghost"; pen; - draw (0,a)..(w,a); + draw_ghost((0,a), (w,a), "top"); + drawarrow (littlearrow, .5[(0,a), (w,a)], 180); endchar; - -beginchar ("e", module#, 0, 0); "short fermion"; +beginchar ("i", 2module#*(cosd 45), 2module#*(sind 45), 0); "upward ghost"; pen; - draw (0,a)..(w,a); + draw_ghost((0,a), (w,h+a), "ulft"); endchar; - -beginchar ("f", 2module#, 0, 0); "fermion"; +beginchar (byte"i"-hex"20", 2module#*(cosd 45), 2module#*(sind 45), 0); + "r-arrowed upward ghost"; pen; - draw (0,a)..(w,a); + draw_ghost((0,a), (w,h+a), "ulft"); + drawarrow (littlearrow, .5[(0,a), (w,h+a)], 45); 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; +beginchar (byte"i"-hex"60", 2module#*(cosd 45), 2module#*(sind 45), 0); + "l-arrowed upward ghost"; + pen; + draw_ghost((0,a), (w,h+a), "ulft"); + drawarrow (littlearrow, .5[(0,a), (w,h+a)], 45+180); endchar; - -beginchar ("h", 2module#, 0, 0); "ghost"; +beginchar ("j", 2module#*(cosd 45), 2module#*(sind 45), 0); + "downward 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; + draw_ghost((0,h+a), (w,a), "urt"); +endchar; +beginchar (byte"j"-hex"20", 2module#*(cosd 45), 2module#*(sind 45), 0); + "r-arrowed downward ghost"; + pen; + draw_ghost((0,h+a), (w,a), "urt"); + drawarrow (littlearrow, .5[(0,a), (w,h+a)], -45); +endchar; +beginchar (byte"j"-hex"60", 2module#*(cosd 45), 2module#*(sind 45), 0); + "l-arrowed downward ghost"; + pen; + draw_ghost((0,h+a), (w,a), "urt"); + drawarrow (littlearrow, .5[(0,a), (w,h+a)], -45+180); endchar; -beginchar ("i", module#, 0, 0); "short ghost"; +beginchar ("K", 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; + annotate_at(0.5[z3,z4], "top") 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; +beginchar (hex"60", 2module#, 0, 0); + "spacer"; 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; +beginchar (hex"40", module#, 0, 0); + "short spacer"; endchar; -beginchar ("m", 2module#, 0, 0); "massive fermion"; +beginchar ("c", 2blobr#, blobr# + a#, blobr#); "complete vertex"; pen; - y1 - a = y2 - a = a - y3 = a - y4 = module#/3.5; - x1 = x3 = 0; - x2 = x4 = w; - draw z1--z2; - draw z3--z4; + draw (0,a) .. (w,a) .. cycle; + annotate_at((w/2,w/2+a), "top"); 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; +%beginchar ("d", module#/2, 0, 0); "weeny fermion"; +% pen; +% draw (0,a)..(w,a); +%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 ("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; + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Other symbols -gbhalfloop ("o", 2, 11, 0); % gauge boson half loop"; +garrow("a", 0, 1); beginchar ("p", 2blobr#, blobr# + a#, blobr# - a#); pen; "proper vertex"; @@ -209,18 +467,16 @@ beginchar ("p", 2blobr#, blobr# + a#, blobr# - a#); addto currentpicture also p2; currentpicture := currentpicture shifted (blobr,a); labels (range 1 thru 12); + annotate_at((blobr,blobr+a), "top"); 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 ("P", 2blobr#, blobr#+a#, blobr#-a#); % see complete vertex "c" + pen; "proper vertex 2"; + fill (0,a) .. (w,a) .. cycle;% withcolor black; + annotate_at((w/2,w/2+a), "top"); +endchar; -beginchar ("x", 0, blobr#/sqrt 2 + a# , blobr#/sqrt2 - a#); "counterterm"; +beginchar ("x", 0, a#, -a#); "counterterm"; pen; -x1 = -x2 = x3 = x4; y1 = -y2 = y3 = -y4; @@ -228,15 +484,9 @@ beginchar ("x", 0, blobr#/sqrt 2 + a# , blobr#/sqrt2 - a#); "counterterm"; draw z1 .. z4; draw z2 .. z3; currentpicture := currentpicture shifted (0,a); + annotate_at(0.5[z1,z3] shifted (0,a), "top"); 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); @@ -245,30 +495,136 @@ beginchar (hex"7F", module#, a#, 0); "space block"; endchar; +% Now generate an errorchar() in each of the code positions we've skipped +for n = 0 upto hex"7F": + if not known(donechar[n]): + beginchar (n, 0, module#, 0); errorchar(h); endchar; + fi +endfor + + % 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 +ligtable "f" : % fermion +"A" =: "F", % right-arrowed +"V" =: hex"06", % left-arrowed +"u" =: "e", % upward +"d" =: "d", % downward +"v" =: "b", % vertical +"s" =: "k", % short +"l" =: "l", % loop +"0" =: hex"60"; % spacer + +ligtable "e" : % downward fermion, fd +"A" =: "E", % arrowed +"V" =: hex"05"; + +ligtable "d" : % upward fermion, fu +"A" =: "D", +"V" =: hex"04"; + +ligtable "b" : % vertical fermion, fv +"A" =: "B", +"V" =: hex"02"; + +ligtable "k" : % short fermion +"0" =: hex"40"; % short spacer + +ligtable "l" : % fermion loop +"u" =: "n", % upside down +"S" =: "o", % small +"A" =: "L", +"V" =: hex"0C"; + +ligtable "g" : % gluon +"A" =: "G", +"V" =: hex"07", +"u" =: "u", +"d" =: "v", +"v" =: oct"175", +"l" =: "y", % gluon half-loop +"1" =: "q", % gluon quarter-loop, 1st quadrant (upper-left) +"2" =: "r", % 2nd +"3" =: "s", % 3rd +"4" =: "t"; % 4th + +ligtable "m" : % massive fermion +"A" =: "M", +"V" =: hex"0D", +"s" =: hex"0B"; + +ligtable "n" : % inverted fermion +"A" =: "N", +"V" =: hex"0E"; + +ligtable "o" : % fermion loop small +"u" =: "w", % upside down +"A" =: "O", +"V" =: hex"0F"; + +ligtable "q" : % gluon, 1st quadrant +"A" =: "Q", +"V" =: hex"11"; + +ligtable "r" : % gluon, 2nd quadrant +"A" =: "R", +"V" =: hex"12"; + +ligtable "s" : % gluon, 3rd quadrant +"A" =: "S", +"V" =: hex"13"; + +ligtable "t" : % gluon, 4th quadrant +"A" =: "T", +"V" =: hex"14"; + +ligtable "u" : % upward gluon +"A" =: "U", +"V" =: hex"15"; + +ligtable "v" : % downward gluon +"A" =: "V", +"V" =: hex"16"; + +ligtable "w" : % fermion loop, small, upside-down +"A" =: "W", +"V" =: oct"027"; + +ligtable oct"175" : % vertical gluon +"A" =: oct"135", +"V" =: oct"035"; + +ligtable "y" : % gluon half-loop +"A" =: "Y", +"V" =: hex"19", +"B" =: hex"7B", % large +"S" =: hex"7C", % small +"u" =: "z"; % ...upside down + +ligtable hex"7B" : % large gluon half loop +"A" =: hex"5B", +"V" =: hex"1B"; + +ligtable hex"7C" : % small gluon half loop +"A" =: hex"5C", +"V" =: hex"1C"; + +ligtable "z" : % upside-down gluon loop +"A" =: "Z", +"V" =: hex"1A"; + +ligtable "h" : % ghost +"A" =: "H", +"V" =: hex"08", +"u" =: "i", % upward +"d" =: "j", % downward +"s" =: "K"; % short + +ligtable "i" : % upward ghost +"A" =: "I", +"V" =: hex"09"; + +ligtable "j" : % downward ghost +"A" =: "J", +"V" =: hex"0A"; + |