% \iffalse meta-comment % % Copyright (C) 2015 % by Byron Cook, Tauba Auerbach, and David Reinfurt % % This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license or (at your option) any later version. The latest version of this license is [here](http://www.latex-project.org/lppl.txt) and version 1.3c or later is part of all distributions of LaTeX version 2005/12/01 or later. % % \fi % % \iffalse % % \end{macrocode} % \begin{macrocode} %<*mf> %% mf setup font_coding_scheme:="TeX math symbols"; mode_setup; font_setup; autorounding:=0; font_slant slant; font_x_height x_height#; font_quad 18u# if not monospace:+4letter_fit# fi; slant:=mono_charic#:=0; % the remaining characters will not be slanted currenttransform:=identity yscaled aspect_ratio scaled granularity; %% identify symbols %% brackets bracket_project_right=oct"025"; bracket_project_left=oct"024"; bracket_lifting=oct"026"; %% symbols restrict_wand=oct"027"; restrict_barb=oct"030"; restrict_mallet=oct"021"; restrict_wand_up=oct"050"; restrict_barb_up=oct"051"; restrict_mallet_up=oct"052"; %% arrows r_arrow22=oct"021"; arrow_project_right=oct"022"; arrow_project_left=oct"023"; %% bars barshort=oct"040"; barlong=oct"043"; verticalbarlongleft=oct"044"; verticalbarlongright=oct"046"; verticalbarshort=oct"045"; %% declare extensible extensible oct"025": oct"025",0,0,oct"044"; extensible oct"024": oct"024",0,0,oct"044"; %% define pixels define_pixels(em, cap, sb, penscaler); % Convert to device-specific units. define_corrected_pixels(o); % Same, but add a device-specific fudge factor. %% relation utility dims %% u = (w-(2*sb))/8; % utility measurement uu = (h-(2*sb))/8; % utility measurement (using h, not w) super = 3.9; % offset utility for curve roundness [2.8] %% Arrow project Right iff known arrow_project_right: cmchar "arrow_project_right"; compute_spread(.45x_height#,.55x_height#); beginchar(arrow_project_right,10u#,cap#, 1pt#); adjust_fit(0,0); pickup pencircle scaled (penscaler); % small, circular tip %% Points z1 = (-5u, math_axis); z2 = (10u, y1); z3 = (x2-5u, y2+5u); %% Draw draw z1 -- z2 -- z3; % right arrow penlabels(1,2,3,4,5,6); endchar; %% Arrow project Left iff known arrow_project_left: cmchar "arrow_project_left"; compute_spread(.45x_height#,.55x_height#); beginchar(arrow_project_left,10u#,cap#, 1pt#); adjust_fit(0,0); pickup pencircle scaled (penscaler); % small, circular tip %% Points z1 = (15u, math_axis); z2 = (0, y1); z3 = (x2+5u, y2+5u); %% Draw draw z1 -- z2 -- z3; % right arrow penlabels(1,2,3,4,5,6); endchar; %% Bracket project Right iff known bracket_project_right: cmchar "bracket_project_right"; compute_spread(.45x_height#,.55x_height#); beginchar(bracket_project_right,5u#,cap#, 1pt#); adjust_fit(0,0); pickup pencircle scaled (penscaler); % small, circular tip %% Points z1 = (0, -3*desc_depth); z2 = (x1, math_axis-4u); z3 = (x1+5u/super, y4-5u/super); z4 = (x1+4u, math_axis); z5 = (15u, y4); %% Draw draw z1 -- z2 .. z3 .. z4 -- z5; % right bracket penlabels(1,2,3,4,5,6); endchar; %% Bracket project Left iff known bracket_project_left: cmchar "bracket_project_left"; compute_spread(.45x_height#,.55x_height#); beginchar(bracket_project_left,5u#,cap#, 1pt#); adjust_fit(0,0); pickup pencircle scaled (penscaler); % small, circular tip %% Points z1 = (w, -3*desc_depth); z2 = (x1, math_axis-4u); z3 = (x1-5u/super, y4-5u/super); z4 = (x1-4u, math_axis); z5 = (-10u, y4); %% Draw draw z1 -- z2 .. z3 .. z4 -- z5; % right bracket penlabels(1,2,3,4,5,6); endchar; %% Bracket Lifting iff known bracket_lifting: cmchar "bracket_lifting"; compute_spread(.45x_height#,.55x_height#); beginchar(bracket_lifting,5u#,cap#, 1pt#); adjust_fit(0,0); pickup pencircle scaled (penscaler); % small, circular tip %% Points z1 = (0, h+10u); z2 = (x1, math_axis+4u); z3 = (x1+5u/super, y4+5u/super); z4 = (4u, math_axis); z5 = (w+10u, y4); %% Draw draw z1 -- z2 .. z3 .. z4 -- z5; % bracket penlabels(1,2,3,4,5,6); endchar; % Bar Short iff known barshort: cmchar "barshort"; compute_spread(.45x_height#,.55x_height#); beginchar(barshort,3u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); % pickup rule.nib; pickup pencircle scaled (penscaler); % small, circular tip x1=eps; x2=w-eps+1u; y1=y2=math_axis; draw z1--z2; penlabels(1,2); endchar; %% Bar Long iff known barlong: cmchar "barlong"; compute_spread(.45x_height#,.55x_height#); beginchar(barlong,6u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); % pickup rule.nib; pickup pencircle scaled (penscaler); % small, circular tip x1=eps; x2=w-eps+1u; y1=y2=math_axis; draw z1--z2; penlabels(1,2); endchar; %% Vertical Bar Long Left iff known verticalbarlongleft: cmchar "verticalbarlongleft"; compute_spread(.45x_height#,.55x_height#); beginchar(verticalbarlongleft,5u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup pencircle scaled (penscaler); % small, circular tip x1=x2=0; y1=asc_height-5u; y2=0; draw z1--z2; penlabels(1,2); endchar; %% Vertical Bar Long Right iff known verticalbarlongright: cmchar "verticalbarlongright"; compute_spread(.45x_height#,.55x_height#); beginchar(verticalbarlongright,5u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup pencircle scaled (penscaler); % small, circular tip x1=x2=w; y1=asc_height-5u; y2=0; draw z1--z2; penlabels(1,2); endchar; %% Vertical Bar Short iff known verticalbarshort: cmchar "verticalbarshort"; compute_spread(.45x_height#,.55x_height#); beginchar(verticalbarshort,5u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup pencircle scaled (penscaler); % small, circular tip x1=x2=0; y1=1u; y2=0; draw z1--z2; penlabels(1,2); endchar; %% restrict Wand iff known restrict_wand: cmchar "restrict_wand"; compute_spread(.45x_height#,.55x_height#); beginchar(restrict_wand,5u#,v_center(spread#+rule_thickness#)); pickup pencircle scaled (penscaler); %% Points z1 = (3u, asc_height); % bar z2 = (x1, -2*u); z3 = (x1-2*u, 0); % asterisk z4 = (x1+2*u, y3); z5 = (x1-1.4*u, y3+1.4*u); z6 = (x1+1.4*u, y3-1.4*u); z7 = (x6, y5); z8 = (x5, y6); %% Draw draw z1 -- z2; % | draw z3 -- z4; % * draw z5 -- z6; draw z7 -- z8; penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar; %% restrict Wand Up iff known restrict_wand_up: cmchar "restrict_wand_up"; compute_spread(.45x_height#,.55x_height#); beginchar(restrict_wand_up,5u#,v_center(spread#+rule_thickness#)); pickup pencircle scaled (penscaler); %% Points z1 = (3u, -2u); % bar z2 = (x1, asc_height); z3 = (x1-2*u, y2-2u); % asterisk z4 = (x1+2*u, y3); z5 = (x1-1.4*u, y3+1.4*u); z6 = (x1+1.4*u, y3-1.4*u); z7 = (x6, y5); z8 = (x5, y6); %% Draw draw z1 -- z2; % | draw z3 -- z4; % * draw z5 -- z6; draw z7 -- z8; penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar; %% restrict Barb iff known restrict_barb: cmchar "restrict_barb"; compute_spread(.45x_height#,.55x_height#); beginchar(restrict_barb,5u#,v_center(spread#+rule_thickness#)); pickup pencircle scaled (penscaler); % Use a pen with a small, circular tip. %% Points z1 = (3u, asc_height); % bar z2 = (x1, -2*u); z3 = (x1-2*u, 0); % diamond z4 = (x1+2*u, y3); z5 = (x1, 2*u); %% Draw draw z1 -- z2; % | draw z3 -- z4 -- z5; % _\ draw z2 -- z3; % \ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar; %% restrict Barb Up iff known restrict_barb_up: cmchar "restrict_barb_up"; compute_spread(.45x_height#,.55x_height#); beginchar(restrict_barb_up,5u#,v_center(spread#+rule_thickness#)); pickup pencircle scaled (penscaler); % Use a pen with a small, circular tip. %% Points z1 = (3u, -2u); % bar z2 = (x1, asc_height); z3 = (x1-2*u, y2-2u); % diamond z4 = (x1+2*u, y3); z5 = (x1, y3-2u); %% Draw draw z1 -- z2; % | draw z3 -- z4 -- z5; % _\ draw z2 -- z3; % \ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar; %% restrict Mallet iff known restrict_mallet: cmchar "restrict_mallet"; compute_spread(.45x_height#,.55x_height#); beginchar(restrict_mallet,5u#,v_center(spread#+rule_thickness#)); pickup pencircle scaled (penscaler); % Use a pen with a small, circular tip. %% Points z1 = (3u, asc_height); % bar z2 = (x1, -2*u); z3 = (x1-(4/3)*u, (-2/3)*u); % diamond z4 = (x1+(4/3)*u, y3); z5 = (x1, (2/3)*u); %% Draw draw z1 -- z2; % | draw z3 .. z5 .. z4 .. z2 .. z3; % o penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar; %% restrict Mallet up iff known restrict_mallet_up: cmchar "restrict_mallet_up"; compute_spread(.45x_height#,.55x_height#); beginchar(restrict_mallet_up,5u#,v_center(spread#+rule_thickness#)); pickup pencircle scaled (penscaler); % Use a pen with a small, circular tip. %% Points z1 = (3u, -2u); % bar z2 = (x1, asc_height); z3 = (x1-(4/3)*u, y2-4/3u); % diamond z4 = (x1+(4/3)*u, y3); z5 = (x1, y3-4/3u); %% Draw draw z1 -- z2; % | draw z3 .. z5 .. z4 .. z2 .. z3; % o penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar; bye. % % \end{macrocode} % \begin{macrocode} %<*mf10> if unknown cmbase: input cmbase fi font_identifier:="VECT"; font_size 10pt#; %% relation specific measures em# := 10pt#; % ``M'' width cap# := 7pt#; % cap height sb# := 1/4pt#; % sidebearing o# := 1/16pt#; % amt curves overshoot borders penscaler# := 0.3pt#; % pen stroke scaler ** fix ** %% relation non-sharped values * fix * %% u = (w-(2*sb))/8; % utility measurement %% super = 3.9; % offset utility for curve roundness [2.8] %% cm values from esvect u#:=20/36pt#; % unit width width_adj#:=0pt#; % width adjustment for certain characters serif_fit#:=0pt#; % extra sidebar near lowercase serifs cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs letter_fit#:=0pt#; % extra space added to all sidebars body_height#:=270/36pt#; % height of tallest characters asc_height#:=250/36pt#; % height of lowercase ascenders cap_height#:=246/36pt#; % height of caps fig_height#:=232/36pt#; % height of numerals x_height#:=155/36pt#; % height of lowercase without ascenders math_axis#:=90/36pt#; % axis of symmetry for math symbols bar_height#:=87/36pt#; % height of crossbar in lowercase e comma_depth#:=70/36pt#; % depth of comma below baseline desc_depth#:=70/36pt#; % depth of lowercase descenders crisp#:=8/36pt#; % diameter of serif corners tiny#:=8/36pt#; % diameter of rounded corners fine#:=7/36pt#; % diameter of sharply rounded corners thin_join#:=7/36pt#; % width of extrafine details hair#:=9/36pt#; % lowercase hairline breadth stem#:=24/36pt#; % lowercase stem breadth curve#:=29/36pt#; % lowercase curve breadth ess#:=27/36pt#; % breadth in middle of lowercase s flare#:=32/36pt#; % diameter of bulbs or breadth of terminals dot_size#:=38/36pt#; % diameter of dots cap_hair#:=11/36pt#; % uppercase hairline breadth cap_stem#:=30/36pt#; % uppercase stem breadth cap_curve#:=35/36pt#; % uppercase curve breadth cap_ess#:=33/36pt#; % breadth in middle of uppercase s rule_thickness#:=.4pt#; % thickness of lines in math symbols dish#:=1/36pt#; % amount erased at top or bottom of serifs bracket#:=20/36pt#; % vertical distance from serif base to tangent jut#:=30/36pt#; % protrusion of lowercase serifs cap_jut#:=37/36pt#; % protrusion of uppercase serifs beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs beak#:=70/36pt#; % vertical protrusion of beak serifs vair#:=8/36pt#; % vertical diameter of hairlines notch_cut#:=10pt#; % maximum breadth above or below notches bar#:=11/36pt#; % lowercase bar thickness slab#:=11/36pt#; % serif and arm thickness cap_bar#:=11/36pt#; % uppercase bar thickness cap_band#:=11/36pt#; % uppercase thickness above/below lobes cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches serif_drop#:=4/36pt#; % vertical drop of sloped serifs stem_corr#:=1/36pt#; % for small refinements of stem breadth vair_corr#:=1/36pt#; % for small refinements of hairline height apex_corr#:=0pt#; % extra width at diagonal junctions %% o#:=8/36pt#; % amount of overshoot for curves apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions slant:=.25; % tilt ratio $(\Delta x/\Delta y)$ fudge:=1; % factor applied to weights of heavy characters math_spread:=0; % extra openness of math symbols superness:=1/sqrt2; % parameter for superellipses superpull:=1/6; % extra openness inside bowls beak_darkness:=11/30; % fraction of triangle inside beak serifs ligs:=2; % level of ligatures to be included square_dots:=false; % should dots be square? hefty:=false; % should we try hard not to be overweight? serifs:=true; % should serifs and bulbs be attached? monospace:=false; % should all characters have the same width? variant_g:=true; % should an italic-style g be used? low_asterisk:=false; % should the asterisk be centered at the axis? math_fitting:=true; % should math-mode spacing be used? subs:=7/10; % subscripts to 10pt will normally be in 7pt type rth#:=.4pt#; % assume that rules will come from cmex10 fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1 math_axis#+1.51rth#+30/36pt#, % num2 math_axis#+1.51rth#+48/36pt#, % num3 -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1 -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2 8.99pt#-subs*asc_height#, % sup1 8.49pt#-subs*asc_height#, % sup2 104/36pt#, % sup3 54/36pt#, % sub1 -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2 subs*asc_height#-36/36pt#, % sup\_drop 18/36pt#, % sub\_drop 23.9pt#, % delim1 10.1pt#, % delim2 math_axis#; % axis\_height generate esrelation % switch to the driver file % % \end{macrocode} % \Finale