diff options
author | Karl Berry <karl@freefriends.org> | 2009-09-29 13:26:56 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-09-29 13:26:56 +0000 |
commit | b954d12567641db62081229186f2b73bac268000 (patch) | |
tree | f294a793944dce9f1e7cb9cb0528547a70d97e0f /Master/texmf-dist/doc/generic/knuth/errata/cm85.bug | |
parent | b95c8524f071f7faff4a51eef0f8773930a8bc8b (diff) |
knuth errata in source now
git-svn-id: svn://tug.org/texlive/trunk@15551 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/generic/knuth/errata/cm85.bug')
-rw-r--r-- | Master/texmf-dist/doc/generic/knuth/errata/cm85.bug | 1906 |
1 files changed, 0 insertions, 1906 deletions
diff --git a/Master/texmf-dist/doc/generic/knuth/errata/cm85.bug b/Master/texmf-dist/doc/generic/knuth/errata/cm85.bug deleted file mode 100644 index d8cbea6442d..00000000000 --- a/Master/texmf-dist/doc/generic/knuth/errata/cm85.bug +++ /dev/null @@ -1,1906 +0,0 @@ -This file is a log of changes made to the "new generation" of Computer Modern -fonts, after the first output proofs were ready. I had a great deal of -advice from Neenie Billawala, Matthew Carter, and Richard Southall while -I was making these revisions. - -Entries are in chronological order; thus the most recent news appears -at the bottom of the file. - -------------------------------------------------------------------------------- -Changes based on the proofsheets of April 26, 1985 -ACCENT.MF: - lower the idots, umlauts, and tilde (MC) - Polish ell cross: longer stroke in bold -CMBASE.MF: -COMLIG.MF: - double quotes too close together in bold (MC) -CSCSPU.MF: - SS made from two S's -GREEKU.MF: - Gamma: .25u longer arm - Lambda: too narrow (MC,NB) - Xi: 1u wider; shorten middle serifs (MC) - top and bottom strokes to be arms (NB) - Psi: more super; thin the lower curve (MC) - add points 3' and 7' for crisp sans - Omega: redo the bottom, curl 0 becomes vertical (MC) - thin from hair to vair at points 3 and 5 -PUNCT.MF: - Monospace period, comma, colon, semicolon made heavier (MC) -ROMAN.MF: - ligs=2 gets ff, fi, etc.; ligs=1 gets only --, '', etc. - II kerning introduced - kern between a and ' in csc -ROMAND.MF: - 0: med_curve decreased to curve; y2l and y4l raised - 1: cap_bar changed to bar in the top stroke - sans-serif serifs also use bar as the slab height - 2: lighten cap_curve and cap_stem slightly (RS) - move point 3 down by .5vair (MC) - 4: thin the diagonal still more (NB) - bar line moves up one pixel when there's a serif below it - 6: move bulb to the right (MC) - make the lower left curve more_super (RS,NB) - 9: make the upper right curve more_super (RS,NB) -ROMANL.MF: - a: bulb positioned by its center rather than the left (MC) - c: right terminals moved closer to the edge (MC,NB) - more pull on the inside left (RS) - e: less left sidebar in monospace (MC) - bold versions to be wider (MC) - more pull on inside left (MC,RS) - g: lower edge of loop goes one pixel lower - varg: point 6 raised above baseline (MC) - y0 calculated so that it works when x7l=stem_edge - lower arc goes one pixel lower - i: monospace version gets more left sidebar (MC) - dot moves slightly right (NB) - stem'' increased to stem' (MC,RS,NB) - slab replaces tiny in correction for dot-too-close - j: diminish monospace sidebars (MC) - shift slightly to right (MC) - k: serif right_jut decreased .8 to .6 - bug fixed in alpha2 (had y1 not y11)(MC,RS,NB) - decreased diagonal weights - "if abs(angle(z3-z4)-45)<2:y4:=y3-(x3-x4);fi" rejected; moves y4 down too much - n: omit pull inside the arch (MC,RS) - introduce stem_shift, shifts this character and others slightly right (MC) - o: raise y2l and y4l (RS) - s: reduced sidebearing in sans (MC) - increased thickness at edges (.35 to .5) (RS) - changed to super_arc, and made it more_super (RS) - raised the top of upper barb to equal top of the character (RS) - removed typo (`tiny' for `fine') - reduced flare in upper terminal of sans, and rounded it properly - t: width to grow in bold case - height made independent of bar_height - slightly longer bar (MC) - v: decreased left stem (RS) - w: decreased stems (MC,RS) - monospace version drops middle from 2/3 to .6 and lengthens inner serifs - x: decreased left stem - y: decreased left stem - z: lighter diagonal, longer upper arm (MC,RS,NB) -ROMANP.MF: - $: tau eliminated -ROMANU.MF: - A: decrease right stem (MC) - make the bar thinner (MC,NB) - bar position based on y0 rather than bar_height - C: use cap_band instead of vair' at top and bottom (RS) - correct typo: x2l to be reset, not y2l - E: middle arm .35u longer, but beak reduced from .7 to .6 (MC) - F: top arm .25u longer; middle arm as E (MC) - G: same as C; also the bar is raised one pixel - J: slightly longer upper left serif - K: lower diagonal thinned and moved outward - M: monospace version raised still more in middle - N: diagonal thinned (MC,RS) - O: y2l and y4l raised - R: tail should move to the right (MC,RS,NB) - bold case gets wider (RS,NB) - S: changed as s (RS) - V: took stem_corr off the left stem (MC) - W: monospace version takes center down from 2/3 to .6, lengthens inner jut - X: took stem_corr off the left stem (MC) - Y: took stem_corr off the left stem (MC) - Z: diagonal made lighter in sans (MC) - upper arm made longer (MC,RS) -ROMLIG.MF: - equalize stem weights (RS,NB) -ROMSPL.MF: - ae, oe: incorporate changes of a and e and o - ss: more stem weight, less curve weight, less bulb (MC,NB) - dotless i,j: see i,j -ROMSPU.MF: - AE: middle arm changes as E (MC) - if hefty and monospace, avoid the serif on middle arm - bars not aligned if hefty - if monospace, middle stem moves to right - OE: middle arm changes as in AE (MC) - middle stem lightened -ROMSUB.MF: - blankspace: not so close to sides -SYM.MF: -CMR10.MF etc: - bar_height raised in the quote and bold fonts (MC,NB) - comma_depth in cmtt10 increased from 40 to 50 (MC) - cap_notch_cut decreased in cmsc10, cmsx10 - apex_o decreased in cmr10, cmb10, cmbx10, cmbx5, cmcsc10, cmtt10 - o decreased in cmb10 - cap_jut decreased from 39 to 34 in cmb10; cap_serif_fit increased 5 to 6 - cmbx5 gets smaller beak, fudge, cap_ess; more apex_corr -GENERAL: - "robustness" added when points like x8r of "a" are calculated - (this affects a,b,d,varg,j,p,q,t,u,dj,ae,6,9,f_stroke) - "robustness" also added to avoid curl at end of paths - (this affects c,e,s,C,G,S,1,5,ae,oe,breve,parens) - "term" subroutine adds robustness for sans-serif terminals - (this affects C,G,J,S,f_stroke,j,ss,ae,oe,2,3,5,6,9,$,&,?,@) - code revised to use "pos" instead of "penpos" when possible -Changes based on the proofsheets of May and June, 1985 -ROMAND.MF: - 1: use o instead of apex_o - 4: bar line height shouldn't depend on bar_height - 5: sans-serif lower terminal position raised; depends on upper left edge - bug in arm at top (0 for 90) made all hefty arms too small - 9: disappears at link -ROMANU.MF: - B: middle bar positioned by its middle, not its bottom (RS) - serifed lobes thickened slightly at bottom (RS) - C: lower terminal is tilted the other way - C,G: upper terminal in sans-serif is tilted slightly - upper barb is darkened - J: tilt the lower terminal - K: lighten the main diagonal (serif case) (RS) - lighten the upper diagonal (sans-serif case) (RS) - M: remove apex_corr (RS) - N: lighten the diagonal - P: too light below counter (RS) - Q: sharpen upper right corner of sans-serif tail (RS) - top of tail thickened and moved slightly left - S: less super at upper left and lower right (MC) - barb to go below baseline - barbs darkened - add weight at top, bottom in sans_serif version (RS) - tilt the lower terminal like the upper one - top weight needs to be maxed with fine.breadth - W: top middle stems allowed to overlap in serifed case - second inner serif made no longer than left outer serif (MC) - ceiling must become floor, to ensure that x5r>=x4r-mid_corr - Z: diagonal still too heavy, because previous change was ineffective - beaks made darker - better positioning of y2 and y3 when tiny is zero -CSCSPU.MF: - J,SS: changes from J and S -ROMANL.MF: - a: inappropriate uses of "fine" are removed - bh introduced to guard against "wild" bar heights - thin_join introduced at point 9 - robustness logic changed so that x8l-x8r<=u - c: too much weight constrast between strokes in sans_serif (RS) - top terminal lowered to match a - bottom terminal tilted the other way - d: fine.breadth should have been thin_join as in b, p, q - e: 1+xpart changed to xpart - bottom terminal tilted the other way - g: sans-serif ear to use z0l and z0r - h,m,n: left inner serifs stay at jut length - i,l: mod_width for better fit at lowres - j: reposition stem for better fit (use .5w+2.5u, not w-2.5u) - remove bug in "pos" change - k: upper diagonal serif lengthened from 1.2jut to 1.4jut (RS) - diagonals made still lighter - r: thin_join introduced - s: barb to go below baseline - barbs darkened - add weight at top, bottom in sans_serif version (RS) - tilt the lower terminal like the upper one (RS) - top weight needs to be maxed with fine.breadth - t: bar extended still more at right (RS) - v: decreased the width by .25width_adj# - w: overlap allowed as in W - second inner serif made no longer than left outer serif (MC) - ceiling must become floor, to ensure that x5r>=x4r-mid_corr - x: decreased the width by .5width_adj# (RS) - y: sans-serif tail curls up too far (RS) - z: beaks too light; decrease the diagonal to compensate (RS) - better positioning of y2 and y3 when tiny is zero -ROMSPL.MF: - dotless i and j: as i and j - ae and oe: bottom terminal tilted the other way - ae: corrected as a -ROMSPU.MF: - AE: x12 based on x1l rather than x1, works better in bold cases (RS) - OE: left curve not to be pulled -GREEKU.MF: - Phi and Psi: middle parts must keep away from the serifs -ROMANP.MF: - $: strengthened the terminals in sans-serif case, and tilted them - &: opened the eye by moving point 8 left .5u (RS) - ?: tilted the sans-serif terminal and moved it down a little more -PUNCT.MF: - %: move the diagonal a bit left at the top - ( and ): 3.5( changed to 3(. - [ and ]: round changed to ceiling and floor, avoids disappearing brackets - @: inner a placed by its edges instead of its stem centers (RS) -ITALL.MF: - f: lower bulb moved left; .5 changed to .6 between bulb and stem - k: bug in lower right stroke (missing e's) - l: bug in italic correction for math fitting (u not u#) - m: avoid hooks in monospace version - p: lengthed left serif at bottom from .5jut to .75jut - x: bulbs moved .25u further out; .5 used between bulb and stem - w: avoid hook in monospace version -ITALIG.MF: - all five: changed like f - fi: made 1u less wide - fl,ffl: made .5u less wide, bulb now touches the l stem - ffi: made .75u less wide -GREEKL.MF: - beta, gamma, zeta, xi, omega, varepsilon: +eps at the tight turns - gamma: final diagonal should be more slanted (MC) - zeta: as tall as xi, shallower diagonal slant (MC) - kappa: bug in lower right stroke (missing e's) - xi: raise the bottom diagonal and distort arc slightly (MC) - chi: introduce slight curve in main diagonal stroke - varphi: too wide at right half bowl (MC) -ITALMS.MF: - wp: bulb smaller, bottom a little more open -ITALD.MF: - 5: changed like 5 in ROMAND -OLDDIG.MF: - 2: top a bit narrower, bottom a bit wider (MC) - 5: changed like 5 in ROMAND -SYM.MF: - plus-minus: shift depends on u not asc_height -SYMBOL.MF: - minus-plus: shift depends on u not asc_height - up-and-down arrows (characters '154 and '155): taller and deeper - clubsuit: wider - spadesuit: y1+1 changed to y1+.75 (also in clubsuit) -ROMAN.MF: - eliminated kerning between L and O,C,G,Q,U (also in TEXTIT and CSC) -MATHEX.MF: - font_x_height needed to be set, for positioning of accents -CMB10.MF: - dishing is too much (on all bold fonts) -CMR5.MF: - letter_fit decreased 10 to 5 -CMBX5.MF: - fudge should be 1 (cap_stem 8=:7 in aps mode was too much) - decrease letter_fit drastically; this means f-ligatures must come back - lowercase parameters increased by 2/36 -CMBI10.MF: - lowercase serifs too short. (same change to all the italic fonts) -CMSX10.MF: - decrease `ess' (RS) -CMTC10.MF: - fudge is too much in lowercase -CMCC10.MF: - lowercase more extended - much less letterspace in caps - increase lower.cap_curve, decrease lower.o -CMSQI8.MF: - slope shouldn't be so much (RS) - increase `ess' (RS) - -GENERAL: - serif-abutment corrections changed to +1 instead of +2 - vround used for vertical rounding - -CMBASE.MF: - new way to set shrink_fit (0,1,2) for monotonicity with letter_fit - letter_fit not included in mono_charwd - fine must be positive (else we lose barbs) - thin_join must be positive (else h_stroke gives a bad pos) -Changes based on the `version 0' test fonts of July 12 -[not showing hundreds of changes to the `typography' of the programs] - -Driver files in general: -Frequency info (from MANUAL.TEX[tex,dek]) was used to order the ligtables -font_xheight changed to font_x_height (a change to PLAIN.MF) - -Program files in general: - use `hround' instead of `round' wherever granularity might be wanted - less_rounded was taken out; autorounded occasionally put in - arm($,$$,...), the value of y$$ was adjusted by eps (lower) or -eps (upper) - -Parameter files in general: - new 12pt and 17+pt fonts; more sans serif fonts - new comment at bottom of all parameter files: `switch to the driver file' - -ACCENT.MF: - ^: eps subtracted from y1 (helps avoid degenerate equations in ultralowres) - '`: eps added to y1 - -ROMAN.MF: - kern entry for gj had the wrong sign - kerns for v removed in sans serif - new kern for aj in serif case - new kern for ar in sans serif - -ROMAND.MF: - 3: pos3 needed to be maxed with fine.breadth - y1r,y9r needed to be adjusted by eps - 6,9: keep x1 on the correct side of x2 at lowlowres - (this change also affects OLDDIG, ITALD, and ITALMS partial sign) - -ROMANP.MF: - $: less_tense bulbs - -ROMSPL.MF: - ss: ensure x5 not > x4l at low resolutions - -ROMLIG.MF: - itc shouldn't include the slant... - -COMLIG.MF: - em dash should be one em wide (add letter_fit# to the adjustments) - -BIGOP.MF: - \displaystyle coproduct sign had 1.2bracket instead of 1.8bracket - charlist syntax changed from commas to colons - -BIGDEL.MF: - extensible double arrow: position wasn't computed as in top and bottom - charlist syntax changed from commas to colons - -BIGACC.MF: - charlist syntax changed from commas to colons - -ITALL.MF: - c: point 1 made definitely greater than point 2, for lowlowres - q: x4 increased by eps, for lowlowres path intersection - r: x4 based on w, not 5u - s: max(ess,fine.breadth) - add eps and 2eps for lowlowres case (cmmi6 at 100/in) - -ITALMS.MF: - wp: x6r must not be less than x1r at lowlowres - -TSETSL.MF: - gamma: last time's bugfix from GREEKL needs to be here too - -GREEKL.MF: - omega: add 2eps to x4-x6 - lambda: make sure that y3>y4 at lowlowres - zeta: make sure that x2>x0 at lowlowres - varsigma: make sure that x1>x2 at lowlowres - -CMFIB8.MF: - decreased serif_fit, cap_serif_fit; increased curve, cap_curve - -CMBASE.MF: - l,r made newinternals - serif darkness and skew switches now done with boolean variables - comma and ammoc: 2eps addedto/subtractedfrom position of x@2 - mod_width now called change_width - ess and cap_ess initialized to preserve ratios with stem and cap_stem - mode="string" had to be handled properly - ^ and ! changed to t_ and o_, as per new PLAIN conventions - make cmchar "outer" - t_ is now `relaxed' if it is useless - soft is now softjoin in PLAIN (we must set join_radius:=u) - eps is now in PLAIN - vair is vrounded but at least 1; also slab, etc. - cal nibs, yscaled by cap_hair not vair - autorounding and smoothing turned off - -ROMANL.MF: - a: `footed' version is .25u tighter at the right - b,d,varg,p,q: x4l position relative to .5(w-serif_fit) not 5u - e: testpath uses .r not .l (because of cmss10) - f: added 1 at right for monospace lowres versions - varg: robust sans-serif terminal at tail - m: missing `round' in r adjustment caused noninteger chardx - r: x4 based on w, not 5.25u - s: watch out that ess isn't so small that badpos error occurs (also ROMANU) - barbs made longer; based on middle stroke not just h - t: sans-serif terminal made more robust in extreme cases - w: in non-monospace hefty serif case, the middle point comes to .8h not h - y: robust sans-serif terminal at tail - -ROMANU.MF: - E: good.y used in y9 - -PUNCT.MF: - []: side_thickness needed to be maxed with crisp.breadth - +1 or -1 makes lowres versions more distinctive - #: tricky part lost at low resolution - -SYMBOL.MF: - angle brackets: +1 and -1 to make lowres versions more distinctive - aleph: eps added so that y5 will be well defined at lowlowres - -SYM.MF: - integral sign: bulbs need to be in right direction at lowlowres - -CALU.MF: - A: apex moved slightly down - D: less flat at top, slightly lower lobe - F: u less right sidebar - H: soft corner at upper left - I: middle stroke more like J, upper bar a little further right - K: introduce t_ in case of aspect_ratio - L: darker - M: lighter first diagonal; clean the joins - N: lighter diagonal; clean bottom right; .5u less right sidebar - O: shortened the inner stroke - P: stem comes lower - Q: tail not so long at left - R: not so flat at top; diagonal less tense; tail less high - T: narrower, also changed like I, .5u less right sidebar, - heavier, not so high at right - U: less extreme curve at lower left - V: cleaned up at bottom; lighter first diagonal; slightly wider - W: changed like V, but double - X: new design, less rigid - Y: new design based more on V than U - Z: tighter at right, heavier at top and bottom - -CMSS10.MF: - decreased notch_cut and bar_height - -%Note: The following can presumably be deleted; I removed it from CMBASE because -% I don't think it is used any more: -vardef parallel_pos(expr d,u,v,w) = % point at distance $d$ from $u$, - % on the line through $w$ that's parallel to |u..v| - pair p_; p_=w+whatever*(u-v)=u+whatever*(u-v) rotated 90; - numeric d_; d_=length(u-p_); % distance from $w$ to |u..v| - if d_>=d: p_ else: p_+(d+-+d_)*unitvector(v-u) fi enddef; -Changes subsequent to `Version 1' as released on October 7, 1985. - -1. thin_join should be subject to blacker: -@x in CMBASE.MF, the font_setup routine - define_whole_pixels(letter_fit,thin_join,fine,crisp,tiny); - define_whole_vertical_pixels(body_height,asc_height, - cap_height,fig_height,x_height,comma_depth,desc_depth,serif_drop); - define_whole_blacker_pixels(hair,stem,curve,flare, -@y - define_whole_pixels(letter_fit,fine,crisp,tiny); - define_whole_vertical_pixels(body_height,asc_height, - cap_height,fig_height,x_height,comma_depth,desc_depth,serif_drop); - define_whole_blacker_pixels(thin_join,hair,stem,curve,flare, -@z -@x - if thin_join=0: thin_join:=1; fi -@y -@z -[Note, December 11: My first correction also introduced the statement - if fine<thin_join: fine:=thin_join; fi -in place of - if fine=0: fine:=1; fi -but I can't understand why I would do such a stupid thing!] - -2. A new subroutine needed in CMBASE.MF (for cases with aspect_ratio<>1): -vardef Vround primary y = y_:=vround y; - if y_<min_Vround: min_Vround else: y_ fi enddef; -newinternal y_,min_Vround; - -@x related changes to the font_setup routine (in CMBASE.MF): - forsuffixes $=vair,bar,slab,cap_bar,cap_band: - $:=vround($.#*hppp+blacker); if $<=1: $:=1; fi endfor -@y - define_whole_vertical_blacker_pixels(vair,bar,slab,cap_bar,cap_band); -@z -@x - vair':=max(1,vround(vair+vair_corr)); - vstem:=max(1,vround .8[vair,stem]); - cap_vstem:=max(1,vround .8[vair,cap_stem]); -@y - vair':=vround(vair+vair_corr); - vstem:=vround .8[vair,stem]; cap_vstem:=vround .8[vair,cap_stem]; -@z -@x - pickup pencircle scaled rule_thickness; rule.nib:=savepen; -@y - min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth); - forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem: - if $<min_Vround: $:=min_Vround; fi endfor - pickup pencircle scaled rule_thickness; rule.nib:=savepen; -@z - -The Vround routine is substituted for vround in the programs for - Macron, line 6 (in ACCENT.MF) - Variant epsilon, line 5 (in GREEKL.MF) - Sigma, line 6 (in GREEKU.MF) - Omega, line 14 (in GREEKU.MF) - 2, line 6 (in OLDDIG.MF and ROMAND.MF) - 7, lines 6 and 8 (in OLDDIG.MF and ROMAND.MF) - g, lines 6 and 8 (in ROMANL.MF) - s, line 6 (in ROMANL.MF) - y, line 9 (in ROMANL.MF) - z, line 6 (in ROMANL.MF) - &, line 39 (in ROMANP.MF) - ?, line 18 (in ROMANP.MF) - Spanish open ?, line 17 (in ROMANP.MF) - Z, line 6 (in ROMANU.MF) - smile and frown, line 4 (in ROMMS.MF) - -3. Typo in program for oe ligature. -@x in file ROMSPL.MF -else: left_curve=max(tiny.breadth,hround(curve-2stem_corr)); -@y -else: left_curve=max(fine.breadth,hround(curve-2stem_corr)); -@z - -4. Forgotten update to program for SS. -@x in file CSCSPU.MF -pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-90); -pos0(cap_ess,theta); pos7(s_slab,-90); -x2+x7=2x0=w; x7-x2=if serifs: u else: 0 fi; top y2l=h+o; bot y7r=-o; -y0=.52h; lft x3l=hround u; rt x6r=hround(w-u); -x3r-x3l=x6r-x6l=hround .5[s_slab,cap_ess] -fine; -@y -numeric ess'; ess'=max(fine.breadth,cap_ess); -pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-90); -pos0(ess',theta); pos7(s_slab,-90); -x2+x7=2x0=w; x7-x2=if serifs: u else: 0 fi; top y2l=h+o; bot y7r=-o; -y0=.52h; lft x3l=hround u; rt x6r=hround(w-u); -x3r-x3l=x6r-x6l=hround .5[s_slab,ess']-fine; -@z - -5. Hairline in `k' was overcorrected. (Pavel Curtis) -@x in file ROMANL.MF -stem3=max(tiny.breadth,hround(fudged.hair-4stem_corr)); -@y -stem3=max(tiny.breadth,hround(fudged.hair if hefty:-\\4stem_corr fi)); -@z - -6. Too much kerning in "We", etc., in sans-serif fonts -@x in file ROMAN.MF and TEXSET.MF - ligtable "F": "V": "W": "o" kern kk#, "e" kern kk#, "u" kern kk#, - "r" kern kk#, "a" kern kk#, "A" kern kkk#, -@y - ligtable "F": "V": "W": if serifs: "o" kern kk#, "e" kern kk#, "u" kern kk#, - "r" kern kk#, "a" kern kk#, "A" kern kkk#, - else: "o" kern k#, "e" kern k#, "u" kern k#, - "r" kern k#, "a" kern k#, "A" kern kk#, fi -@z -@x in file TITLE.MF - ligtable "F": "V": "W": "A" kern kkk#, -@y - ligtable "F": "V": "W": "A" kern if serifs: kkk# else: kk#\\fi, -@z -@x in file CSC.MF - ligtable "F": "V": "W": "a" kern kkk#, "A" kern kkk#, -@y - ligtable "F": "V": "W": if serifs: "a" kern kkk#, "A" kern kkk#, - else: "a" kern kk#, "A" kern kk#, fi -@z -@x in file CSC.MF - ligtable "f": "v": "w": "a" kern kkk#, -@y - ligtable "f": "v": "w": "a" kern if serifs: kkk# else: kk#\\fi, -@z - -7. dish serifs need to be more robust when dishing is very small. -@x in file CMBASE.MF - if y$<y$$: dish_out=bot y$; dish_in=dish_out+dish; - else: dish_out=top y$; dish_in=dish_out-dish; fi - erase fill\\(x@1,dish_out)..(x$,dish_in){right}..(x@@1,dish_out)--cycle; -@y - if y$<y$$: dish_out=bot y$; dish_in=dish_out+dish; let rev_=reverse; - else: dish_out=top y$; dish_in=dish_out-dish; let rev_=relax; fi - erase fill rev_ - ((x@1,dish_out)..(x$,dish_in){right}..(x@@1,dish_out)--cycle); -@z - -8. more robustness in case thin_join is too big -@x in file ROMANL.MF, program for "b" -pos4(vair,90); pos5(curve,0); -pos6(vair,-90); penpos7(x3l-x3r,-180); -rt x3l=1/3[rt x2,edge]; y3=1/8[bar_height,x_height]; -@y -pos4(vair,90); pos5(curve,0); pos6(vair,-90); penpos7(x3l-x3r,-180); -rt x3l=max(rt x3l-(lft x3r-tiny.lft x2l),1/3[rt x2,edge]); -y3=1/8[bar_height,x_height]; -@z -@x ibid, program for "d" -pos4(vair,90); pos5(curve,180); -pos6(vair,270); penpos7(x3r-x3l,360); -lft x3l=1/3[lft x2,edge]; y3=1/8[bar_height,x_height]; -@y -pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360); -lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),1/3[lft x2,edge]); -y3=1/8[bar_height,x_height]; -@z -@x ibid, program for variant "g" -pos4(vair,90); pos5(curve,180); -pos6(vair,270); penpos7(x3r-x3l,360); -lft x3l=2/3[lft x2,edge]; y3=bar_height; -@y -pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360); -lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),2/3[lft x2,edge]); y3=bar_height; -@z -@x ibid, program for "p" -rt x3l=1/3[rt x2,edge]; y3=1/8[bar_height,x_height]; -@y -rt x3l=max(rt x3l-(lft x3r-tiny.lft x2l), 1/3[rt x2,edge]); -y3=1/8[bar_height,x_height]; -@z -@x ibid, program for "q" -lft x3l=2/3[lft x2,edge]; y3=bar_height; -@y -lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),2/3[lft x2,edge]); y3=bar_height; -@z -@x ibid, proram for "q" -x6l=x4l-.2u; bot y6r=-oo; -lft x7l=1/3[lft x2,edge]; y7=min(y3,y6+y4-y3+.6vair); -@y -x6l=x4l-.2u; bot y6r=-oo; y7=min(y3,y6+y4-y3+.6vair); -lft x7l=min(lft x7l-(rt x7r-tiny.rt x2r),1/3[lft x2,edge]); -@z - -9. More robust "c" and "e" and "C" -@x in file ROMANL.MF, program for "c" - (x,y4l)=whatever[z4r,z5l]; x4l:=x; -@y - (x,y4l)=whatever[z4r,z5l]; x4l:=min(x,x4l+.5u); -@z -@x ibid, program for "e" - (x,y4l)=whatever[z4r,z5]; x4l:=x; -@y - (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u); -@z -@x in file ROMSPL.MF, programs for "ae" and "oe" - (x,y14l)=whatever[z14r,z15]; x14l:=x; -@y - (x,y14l)=whatever[z14r,z15]; x14l:=min(x,x14l+.5u); -@z -@x in file ROMANU.MF, programs for "C" and "G" - (x2l',y2l)=whatever[z2r,z1l]; x2l:=x2l'; - (x4l',y4l)=whatever[z4r,z5l]; x4l:=x4l'; -@y - (x2l',y2l)=whatever[z2r,z1l]; x2l:=min(x2l',x2l+.5u); - (x4l',y4l)=whatever[z4r,z5l]; x4l:=min(x4l',x4l+.5u); -@z - -10. More robust foot in "a" -@x in file ROMANL.MF - filldraw stroke z5'e---z10e...z11e{right}; % foot -@y - pos12(shaved_stem,0); x11=x12; top y12=slab+eps; - filldraw z5'l---z10l...z11l{right}--z11r - --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle; % foot -@z - -11. Barbs less sharp -@x in file ROMANU.MF, programs for "C" and "G" - x6=x1r; top y6=h+o; x1r-x1'=2cap_curve-fine; y1'=y1; - path upper_arc; upper_arc=z1{x2-x1,10(y2-y1)}..z2{left}; - numeric t; t=xpart(upper_arc intersectiontimes (z6--z1')); - filldraw z1r--z6--subpath(t,0) of upper_arc--cycle; % barb -@y [actually "G" had something similar but not identical] - pos6(.3[fine.breadth,cap_hair],0); x6r=x1r; top y6=h+o; - x1r-x1'=2cap_curve-fine; y1'=y1; - path upper_arc; upper_arc=z1{x2-x1,10(y2-y1)}..z2{left}; - numeric t; t=xpart(upper_arc intersectiontimes (z6l--z1')); - filldraw z1r--z6r--z6l--subpath(t,0) of upper_arc--cycle; % barb -@z -@x ibid, program for "S" - x10=x1l; top y10=top y2l; x9=x8r; bot y9=bot y7r; - x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8; - numeric t; t=xpart(upper_arc intersectiontimes(z10--z1')); - filldraw z1l--z10--subpath(t,0) of upper_arc--cycle; % upper barb - t:=xpart(lower_arc intersectiontimes(z9--z8')); - filldraw z8r--z9--subpath(t,1) of lower_arc--cycle; % lower barb -@y - pos10(.3[fine.breadth,cap_hair],0); pos9(.3[fine.breadth,cap_hair],0); - x10r=x1l; top y10=top y2l; x9l=x8r; bot y9=bot y7r; - x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8; - numeric t; t=xpart(upper_arc intersectiontimes(z10l--z1')); - filldraw z1l--z10r--z10l--subpath(t,0) of upper_arc--cycle; % upper barb - t:=xpart(lower_arc intersectiontimes(z9r--z8')); - filldraw z8r--z9l--z9r--subpath(t,1) of lower_arc--cycle; % lower barb -@z [the same change goes into file CSCSPU.MF, the program for two S's] -@x in file ROMANL.MF, program for "s" - x10=x1l; top y10=top y2l; x9=x8r; bot y9=bot y7r; - x1l-x1'=x8'-x8r=1.6curve-fine; y1'=y1; y8'=y8; - numeric t; t=xpart(upper_arc intersectiontimes(z10--z1')); - filldraw z1l--z10--subpath(t,0) of upper_arc--cycle; % upper barb - t:=xpart(lower_arc intersectiontimes(z9--z8')); - filldraw z8r--z9--subpath(t,1) of lower_arc--cycle; % lower barb -@y - pos10(.3[fine.breadth,cap_hair],0); pos9(.3[fine.breadth,cap_hair],0); - x10r=x1l; top y10=top y2l; x9l=x8r; bot y9=bot y7r; - x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8; - numeric t; t=xpart(upper_arc intersectiontimes(z10l--z1')); - filldraw z1l--z10r--z10l--subpath(t,0) of upper_arc--cycle; % upper barb - t:=xpart(lower_arc intersectiontimes(z9r--z8')); - filldraw z8r--z9l--z9r--subpath(t,1) of lower_arc--cycle; % lower barb -@z - -12. Italic ampersand more robust -@x in file ITALP - & pulled_arc.e(9,10)...{dir(theta+90)}z11e; % bowls, loop, and stem -@y - & {{interim superness:=more_super; pulled_arc.e(9,10)}} - ..tension .9 and 1..{dir(theta+100)}z11e; % bowls, loop, and stem -@z - -13. h_stroke more robust (esp in case of typewriter-style m) -@x in file CMBASE - pickup fine.nib; pos@0(thin_join,180); -@y - penpos@0(min(rt x$r-lft x$l,thin_join)-fine,180); pickup fine.nib; -@z - -14. eliminate dishing in conflict with arm. -Put a new subroutine into CMBASE.MF: -def nodish_serif(suffix $,$$,@)(expr left_darkness,left_jut) - (suffix @@)(expr right_darkness,right_jut) suffix modifier = - serif($,$$,@,left_darkness,-left_jut) modifier; - serif($,$$,@@,right_darkness,right_jut) modifier; enddef; - -Now use this instead of dish_serif in the following places: -GREEKU: Gamma, upper serif - Pi, both upper serifs (fix erroneous comments!) -SYMBOL: Amalgamation, both lower serifs (fix erroneous comments!) -ROMANU: B, both serifs - D, both serifs - E, both serifs - F, upper serif - L, lower serif - P, upper serif - R, upper serif - T, upper bracketing -ROMSPU: AE, upper and lower middle serifs - -15. Change #2 wasn't quite good enough! -@x in CMBASE - min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth); -@y - min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth); - if min_Vround<vround min_Vround: min_Vround:=vround min_Vround; fi - if flare<vround flare: flare:=vround flare; fi -@z - -16. body_depth# is now called paren_depth#, since body_depth is -computed differently. (This is a cosmetic change only; it affects -files CMBASE, PUNCT, SYM, SYMBOL, and ROMMS.) - -17. more robust Sigma -@x in GREEKU, page 9 -top y1=h; bot y2=h-slab; bot y4=0; x3l-x1l=4/11(w-2u); y3=.5h; -@y -top y1=h; bot y2=h-slab-eps; bot y4=0; x3l-x1l=4/11(w-2u); y3=.5h; -@z -@x in BIGOP, page 7 -top_arm_thickness=rule_thickness; -@y -top_arm_thickness=Vround rule_thickness; -@z -@x in BIGOP, page 7 (this change needed twice) -top y1=0; bot y2=-top_arm_thickness; bot y4=-d; y3=-.5d; -@y -top y1=0; bot y2=-top_arm_thickness-eps; bot y4=-d; y3=-.5d; -@z - -18. yet another refinement of change #2 -@x in CMBASE - forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem: -@y - forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem,bold: -@z - -19. slightly more robust `k' -@x in ROMANL -top y3=x_height; rt x3r=hround(r-letter_fit-.7u-right_jut); -bot y6=0; rt x6r=hround(r-letter_fit-.3u-right_jut); -@y -top y3=x_height; rt x3r=hround(r-letter_fit-.7u-right_jut)+eps; -bot y6=0; rt x6r=hround(r-letter_fit-.3u-right_jut)+eps; -@z - -20. small parameter changes for consistency -@x in CMBX6 -dish#:=.9/36pt#; % amount erased at top or bottom of serifs -@y -dish#:=.8/36pt#; % amount erased at top or bottom of serifs -@z -@x in CMBX5 -dish#:=.75/36pt#; % amount erased at top or bottom of serifs -@y -dish#:=.7/36pt#; % amount erased at top or bottom of serifs -@z -@x in CMSS9 and CMSSI9 [these two lines are not consecutive in the files!] -notch_cut#:=23/36pt#; % maximum breadth above or below notches -cap_notch_cut#:=29/36pt#; % max breadth above/below uppercase notches -@y -notch_cut#:=17/36pt#; % maximum breadth above or below notches -cap_notch_cut#:=24/36pt#; % max breadth above/below uppercase notches -@z -@x in CMSS8 and CMSSI8 [these two lines are not consecutive in the files!] -notch_cut#:=21/36pt#; % maximum breadth above or below notches -cap_notch_cut#:=27/36pt#; % max breadth above/below uppercase notches -@y -notch_cut#:=16/36pt#; % maximum breadth above or below notches -cap_notch_cut#:=22/36pt#; % max breadth above/below uppercase notches -@z -@x in CMTI9 -cap_hair#:=10/36pt#; % uppercase hairline breadth -@y -cap_hair#:=11/36pt#; % uppercase hairline breadth -@z -@x in CMTI8 -cap_hair#:=9.5/36pt#; % uppercase hairline breadth -@y -cap_hair#:=11/36pt#; % uppercase hairline breadth -@z -@x in CMTI7 -cap_hair#:=9/36pt#; % uppercase hairline breadth -@y -cap_hair#:=10.5/36pt#; % uppercase hairline breadth -@z -@x in CMTCSC10 -lower.cap_notch_cut#:=24pt#; % max breadth above/below uppercase notches -@y -lower.cap_notch_cut#:=24/36pt#; % max breadth above/below uppercase notches -@z - -21. New parameter file CMFI10 was added; font_identifier is "CMFI". -Also changed the name `cmit10' to `cmitt10'; font_identifier is "CMITT". - -22. Still more changes for robustness (based on resolution h120 x v108). -@x in ROMAND and ITALD, "5" -bot y5=vround(.53h-vair); top y6r=vround .61803h+o; -@y -bot y5=vround(.53h-vair); top y6r=max(vround .61803h+o,top y6r+y5+eps-y6l); -@z -@x in OLDDIG, "5" -bot y5=vround(.53[-d,h]-vair); top y6r=(vround .61803[-d,h])+o; -@y -bot y5=vround(.53[-d,h]-vair); -top y6r=max((vround .61803[-d,h])+o,top y6r+y5+eps-y6l); -@z -@x in ROMANU, "C" - bot y1=vround max(.6h,x_height-.5vair); y5=good.y .95(h-y1); -@y - bot y1=min(vround max(.6h,x_height-.5vair),bot y2l-eps); - y5=max(good.y .95(h-y1),y4l+eps); -@z -@x in ROMANU, "G" - bot y1=vround max(.6h,x_height-.5vair); -@y - bot y1=min(vround max(.6h,x_height-.5vair),bot y2l-eps); -@z -@x in GREEKL page 6 and TSETSL page 8 -y1=.9h; top y2l=h+oo; top y8r=x_height+oo; y4=y8; -@y -top y2l=h+oo; y1=min(.9h,y2r-eps); top y8r=x_height+oo; y4=y8; -@z -@x in GREEKL page 16 -x6=x7=w-2u; x8=.5w+.5u; y6=-.3d; y8=-3/4d-oo; bot y7r=-d-oo; -@y -x6=x7=w-2u; x8=.5w+.5u; y6=-.3d; bot y7r=-d-oo; y8=max(-3/4d-oo,y7l); -@z -@x in ITALL page 12, ITALMS page 6, ITALSP page 4 -lft x5r=hround-.5u; x4=1/3(w-u); -@y -x4=1/3(w-u); lft x5r=min(hround-.5u,lft x5r+x4-x5l-eps); -@z -@x in ROMANL, "g" -x11=x13=.5w; bot y13r=-d-oo-1; x14=w-x12; z10'l=z10l; -@y -x11=x13=max(.5w,x10+eps); bot y13r=-d-oo-1; x14=w-x12; z10'l=z10l; -@z -@x in ROMANL, "s" - filldraw stroke z1e..tension.9..{left}z2e; % upper arc and terminal - filldraw stroke z7e{left}..z8e; fi % lower arc and terminal -@y - filldraw stroke term.e(2,1,right,.9,4); % upper arc and terminal - filldraw stroke term.e(7,8,left,1,4); fi % lower arc and terminal -@z -@x in ROMANL, "c" - filldraw stroke pulled_super_arc.e(2,3)(.7superpull) - & pulled_super_arc.e(3,4)(.5superpull) - ..tension .9 and 1..z5e; fi % arc and lower terminal -@y - forsuffixes e=l,r: path p.e; p.e=z4e{right}..tension .9 and 1..z5e; - if angle direction 1 of p.e>75: - p.e:=z4e{right}..tension atleast.9 and 1..{dir 75}z5e; fi endfor - filldraw stroke pulled_super_arc.e(2,3)(.7superpull) - & pulled_super_arc.e(3,4)(.5superpull) & p.e; fi % arc and lower terminal -@z -@x in ROMSPL, page 5 -lft x8r=hround(stem_edge+.5u+1); x7=max(x8l+eps,.4[lft x8r,x6]); -@y -lft x8r=min(hround(stem_edge+.5u+1),lft x8r+x6r-2eps-x8l); -x7=max(x8l+eps,.4[lft x8r,x6]); -@z -@x in ROMAND and OLDDIG, "2" - lft x1r=hround .75u; bot y1l=vround .7h; y1r:=good.y y1r; x1l:=good.x x1l; -@y - lft x1r=hround .75u; bot y1l=vround .7h; y1r:=good.y y1r+eps; x1l:=good.x x1l; -@z -@x in SYMBOL, page 42 (Fraktur R) -z=(z20{up}...{right}z21)intersectionpoint(z22l--z22l+(h,0) rotated theta); -@y -path p; p=z20{up}...(z21--(w,y21)); -z=p intersectionpoint(z22l--z22l+(h,0) rotated theta); -@z - -23. Another consequence of change 2: -"vround" should be "Vround" in the BIGDEL programs for extensible arrows -(five times). -Also five times in the BIGOP programs for summation, product, coproduct. - -24. Cosmetic change to bring CMBASE in line with PLAIN. -@x in CMBASE.MF -def pickup secondary q = - if numeric q: currentpen:=pen_[q]; - pen_top:=pen_top_[q]; pen_bot:=pen_bot_[q]; - pen_lft:=pen_lft_[q]; pen_rt:=pen_rt_[q]; - currentpen_path:=pen_path_[q]; - if known breadth_[q]: currentbreadth:=breadth_[q]; fi - else: currentpen:=q yscaled aspect_ratio; - pen_top:=(ypart penoffset left of currentpen)_o_; - pen_bot:=(ypart penoffset right of currentpen)_o_; - pen_lft:=xpart penoffset down of currentpen; - pen_rt:=xpart penoffset up of currentpen; - path currentpen_path; - fi enddef; -@y -def numeric_pickup_ primary q = - currentpen:=pen_[q]; - pen_lft:=pen_lft_[q]; pen_rt:=pen_rt_[q]; - pen_top:=pen_top_[q]; pen_bot:=pen_bot_[q]; - currentpen_path:=pen_path_[q]; - if known breadth_[q]: currentbreadth:=breadth_[q]; fi enddef; -@z - -25. false italic correction in lambda of texset fonts (Feb 25, 1986) -@x in TEXSET -mode_setup; font_setup; -@y -mode_setup; font_setup; mono_charic#:=0; -@z -@x ibid -slant:=mono_charic#:=0; % the remaining characters will not be slanted -@y -slant:=0; % the remaining characters will not be slanted -@z -[now remove the occurrences of `charic:=0;' in TSETSL, as they are unnecessary] - -*** The above changes are incorporated into the published book, -*** Computer Modern Typefaces; this is "Version 2" (released March 5, 1986). -Changes subsequent to `Version 2' as published in C&T, Volume E: - -@x in GREEKU -numeric shaved_stem; shaved_stem=hround .9[vair,.85cap_stem]; -@y -numeric shaved_stem; shaved_stem=hround .9[vair,.85cap_stem]; -if shaved_stem<crisp.breadth: shaved_stem:=crisp.breadth; fi -@z - -@x in CMSS9 [this affects the TFM file to a small extent!] -fig_height#:=236/36pt#; % height of numerals -@y -fig_height#:=212/36pt#; % height of numerals -@z - -@x in CMSSI9 [this affects the TFM file in ten hts and eleven italcorrs] -fig_height#:=236/36pt#; % height of numerals -@y -fig_height#:=212/36pt#; % height of numerals -@z - -@x in CMR17 [no change to TFM file] -curve#:=41/36pt#; % lowercase curve breadth -@y -curve#:=40/36pt#; % lowercase curve breadth -@z -@x -cap_stem#:=40/36pt#; % uppercase stem breadth -cap_curve#:=48/36pt#; % uppercase curve breadth -@y -cap_stem#:=41/36pt#; % uppercase stem breadth -cap_curve#:=47/36pt#; % uppercase curve breadth -@z -@x -serif_drop#:=17/36pt#; % vertical drop of sloped serifs -@y -serif_drop#:=7/36pt#; % vertical drop of sloped serifs -@z - -@x in ROMAND [this fixes the `disappearing hairline' in some lowres 8's] - lower_side=hround(.5[hair,stem]+stem_corr); -@y - lower_side=hround(.5[hair,stem]+stem_corr); - if lower_side>1.2upper_side: upper_side:=lower_side; fi -@z -% Note: the SAME change should also be made in files ITALD and OLDDIG - -@x in ITALL [this fixes italic ell especially at low resolutions] -top y1=h; x1=x2; filldraw stroke z1e--z2e; % stem -@y -top y1=h; x1=x2; filldraw stroke z1e--z2'e; % stem -@z - -@x in SYM, the plus-or-minus character -x1=x2=.5w; lft x3=lft=x5=hround u-eps; x4=x6=w-x3; -@y -x1=x2=.5w; lft x3=lft x5=hround u-eps; x4=x6=w-x3; -@z actually the code worked but it was "infelicitous" - -@x in SYMBOL, the minus-or-plus character -x1=x2=.5w; lft x3=lft=x5=hround u-eps; x4=x6=w-x3; -@y -x1=x2=.5w; lft x3=lft x5=hround u-eps; x4=x6=w-x3; -@z actually the code worked but it was "infelicitous" - -@x in ROMANU, letter J [fixes a bug if dish=0 and crisp<tiny and serifs] - bulb(3,4,5); % bulb -@y - pickup tiny.nib; bulb(3,4,5); % bulb -@z - -@x in ROMANL, letter w [makes notch_cut more useful] - else: fill diag_end(6r,5r,1,1,5l,6l)--.5[z5l,z6l] - --.5[z5r,z6r]--cycle;% middle stem -@y - else: fill diag_end(6r,5r,1,1,5l,6l)--.9[z5l,z6l] - ..{z5-z6}.1[z5r,z6r]--cycle; % middle stem -@z the same change applies also to letter W in ROMANU - -@x in CMBASE, makes lowres types (especially TT) look better - define_blacker_pixels(notch_cut,cap_notch_cut); -@y - define_blacker_pixels(notch_cut,cap_notch_cut); - forsuffixes $=notch_cut,cap_notch_cut: if $<3: $:=3; fi endfor -@z - -@x in BIGOP, the \displaystyle coproduct sign -lft x11=hround u; x1l-x11=x2l-x12=x22-x2r=hround cap_jut; -@y -lft x11=hround u; x1l-x11=x2l-x12=x22-x2r=hround 1.6cap_jut; -@z - -@x in ROMANL, the letter m -lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l; -lft x3l=hround(.5w-.5stem); x5-x3=x3-x1; -if not monospace: r:=hround(x5+x1)-l; fi % change width for better fit -@y -lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l; % stem, sic -lft x3l=hround(.5w-.5mfudged.stem); x5-x3=x3-x1; -if not monospace: r:=hround(x5+x1)+r-w; fi % change width for better fit -@z - -@x a new routine for CMBASE, following change_width -@y -def center_on(expr x) = if not monospace: % change width for symmetric fit - r:=r+2x-w; w:=2x; fi enddef; -@z -@x in SYMBOL, the elementary division operator -x3-.5dot_size=hround(.5w-.5dot_size); w:=r:=2x3; -@y -x3-.5dot_size=hround(.5w-.5dot_size); center_on(x3); -@z -Similarly, whenever the construction "w:=r:=2x*" appears, change it to -"center_on(x*)". This happens in the programs for elementary division operator -(as noted above), large triangle, large inverted triangle, lattice top, -lattice bottom, dagger mark, double dagger mark, club/diamond/heart/spade suit -(all in SYMBOL), plus the diamond operator and universal quantifier in SYM. -The following additional change needs to be made in the programs -for lattice top and lattice bottom: -@x -x1=x2=good.x .5w; center_on(x1); lft x3=hround u; x4=r-x3; -@y -x1=x2=good.x .5w; center_on(x1); lft x3=hround u; x4=w-x3; -@z - -@x in SYMBOL, at end of zero-width slash -labels(1,2); zero_width; endchar; -@y -labels(5,6); zero_width; endchar; -@z - -@x in ROMANU, the letter Q (this change simply labels point 8 on proofs) -math_fit(-.3cap_height#*slant-.5u#,ic#); penlabels(1,2,3,4,5,6,7); endchar; -@y -math_fit(-.3cap_height#*slant-.5u#,ic#); -penlabels(1,2,3,4,5,6,7,8); endchar; -@z - -@x in ROMANL, the letter i (this change by Jonathan Kew makes the dot rounder) -if serifs: x3r=max(x1r,x1+.5(dot_diam-tiny)-.2jut) else: x3=x1-.5 fi; -@y -if serifs: x3r=max(x1r,hround(x1+.5dot_diam-.2jut)-.5tiny) -else: x3=x1-.5 fi; -@z - ------------Improvements made in January 1992 -[No change to TFM files] -@x in cmbase (improve lowres as suggested by John Hobby) -def normal_adjust_fit(expr left_adjustment,right_adjustment) = - l:=-hround(left_adjustment*hppp)-letter_fit; - interim xoffset:=-l; - charwd:=charwd+2letter_fit#+left_adjustment+right_adjustment; - r:=l+hround(charwd*hppp)-shrink_fit; - w:=r-hround(right_adjustment*hppp)-letter_fit; - enddef; - -def mono_adjust_fit(expr left_adjustment,right_adjustment) = - numeric expansion_factor; - mono_charwd#=2letter_fit# - +expansion_factor*(charwd+left_adjustment+right_adjustment); - forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr: - $:=$.#*expansion_factor*hppp; endfor - l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit; - interim xoffset:=-l; - r:=l+mono_charwd-shrink_fit; - w:=r-hround(right_adjustment*expansion_factor*hppp)-letter_fit; - charwd:=mono_charwd#; charic:=mono_charic#; - enddef; -@y -def do_expansion(expr expansion_factor) = - forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr: - $:=$.#*expansion_factor*hppp; endfor -enddef; - -def normal_adjust_fit(expr left_adjustment,right_adjustment) = - numeric charwd_in; charwd_in=charwd; - l:=-hround(left_adjustment*hppp)-letter_fit; - interim xoffset:=-l; - charwd:=charwd+2letter_fit#+left_adjustment+right_adjustment; - r:=l+hround(charwd*hppp)-shrink_fit; - w:=r-hround(right_adjustment*hppp)-letter_fit; - do_expansion(w/(charwd_in*hppp)); - enddef; - -def mono_adjust_fit(expr left_adjustment,right_adjustment) = - numeric charwd_in; charwd_in=charwd; - numeric expansion_factor; - mono_charwd#=2letter_fit# - +expansion_factor*(charwd+left_adjustment+right_adjustment); - l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit; - interim xoffset:=-l; - r:=l+mono_charwd-shrink_fit; - w:=r-hround(right_adjustment*expansion_factor*hppp)-letter_fit; - charwd:=mono_charwd#; charic:=mono_charic#; - do_expansion(w/(charwd_in*hppp)); - enddef; -@z -@x in SYM, Downward arrow -pos3(bar,90); pos4(bar,90); -lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h; -x0=x1=x2; bot y0=-d; x0-x3=x4-x0=3u+eps; -y3=y4=y0+.24asc_height+eps; -pos5(bar,angle(z4-z0)); z5l=z0; -pos6(bar,angle(z3-z0)); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y (make arrowheads heavier, as suggested by Zapf) -pos3(rule_thickness,90); pos4(rule_thickness,90); -lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h; -x0=x1=x2; bot y0=-d; x0-x3=x4-x0=if monospace:3u else:4u fi+eps; -y3=y4=y0+if monospace:.24 else:.36 fi asc_height+eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x in SYM, Upward arrow -pos3(bar,90); pos4(bar,90); -lft x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d; -x0=x1=x2; top y0=h; x0-x3=x4-x0=3u+eps; -y3=y4=y0-.24asc_height-eps; -pos5(bar,angle(z4-z0)); z5l=z0; -pos6(bar,angle(z3-z0)); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y -pos3(rule_thickness,90); pos4(rule_thickness,90); -lft x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d; -x0=x1=x2; top y0=h; x0-x3=x4-x0=if monospace:3u else:4u fi+eps; -y3=y4=y0-if monospace:.24 else:.36 fi asc_height-eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x in SYM, Leftward arrow -pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); -y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; -y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; -pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y -pos1(rule_thickness,90); pos2(rule_thickness,90); -pos3(rule_thickness,0); pos4(rule_thickness,0); -y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; -y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps; -x3=x4=x0+if monospace:3u else:4u fi+eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x in SYM, Rightward arrow -pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); -y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); -y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-4u-eps; -pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y -pos1(rule_thickness,90); pos2(rule_thickness,90); -pos3(rule_thickness,0); pos4(rule_thickness,0); -y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); -y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps; -x3=x4=x0-if monospace:3u else:4u fi-eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x in SYM, Left-and-right arrow -pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); -y0=y1=y2=math_axis if monospace:+vround.3asc_height fi; lft x0=hround u; -if monospace: x1+.5rule_thickness=hround(w-u) else: x1=.5w fi; -y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; -pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y -pos1(rule_thickness,90); pos2(rule_thickness,90); -pos3(rule_thickness,0); pos4(rule_thickness,0); -y0=y1=y2=math_axis if monospace:+vround.3asc_height fi; lft x0=hround u; -if monospace: x1+.5rule_thickness=hround(w-u) else: x1=.5w fi; -y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps; -x3=x4=x0+if monospace:3u else:4u fi+eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x ibid -pos11(rule_thickness,90); pos12(rule_thickness,90); pos13(bar,0); pos14(bar,0); -y10=y11=y12=math_axis if monospace:-vround.3asc_height fi; -rt x10=hround(w-u); -if monospace: x11-.5rule_thickness=hround u else: x11=.5w fi; -y13-y10=y10-y14=.24asc_height+eps; x13=x14=x10-3u-eps; -pos15(bar,angle(z14-z10)); z15l=z10; pos16(bar,angle(z13-z10)); z16l=z10; -z19=.381966[.5[z13,z14],z10]; -@y -pos11(rule_thickness,90); pos12(rule_thickness,90); -pos13(rule_thickness,0); pos14(rule_thickness,0); -y10=y11=y12=math_axis if monospace:-vround.3asc_height fi; -rt x10=hround(w-u); -if monospace: x11-.5rule_thickness=hround u else: x11=.5w fi; -y13-y10=y10-y14=if monospace:.24 else:.36 fi asc_height+eps; -x13=x14=x10-if monospace:3u else:4u fi-eps; -pos15(rule_thickness,angle(z14-z10)); z15l=z10; -pos16(rule_thickness,angle(z13-z10)); z16l=z10; -z19=.2[.5[z13,z14],z10]; -@z -@x in SYMBOL, Up-and-down arrow -pos3(bar,90); pos4(bar,90); -lft x1l=hround(.5w-.5rule_thickness); y1=.5[-d,h]; -x0=x1=x2; bot y0=-d-o; x0-x3=x4-x0=3u+eps; -y3=y4=y0+.24asc_height+eps; -pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y -pos3(rule_thickness,90); pos4(rule_thickness,90); -lft x1l=hround(.5w-.5rule_thickness); y1=.5[-d,h]; -x0=x1=x2; bot y0=-d-o; x0-x3=x4-x0=4u+eps; -y3=y4=y0+.36asc_height+eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x ibid -pos13(bar,90); pos14(bar,90); -x10=x11=x12; top y10=h+o; x10-x13=x14-x10=3u+eps; -y13=y14=y10-.36asc_height-eps; -pos15(bar,angle(z14-z10)); z15l=z10; -pos16(bar,angle(z13-z10)); z16l=z10; -z19=.381966[.5[z13,z14],z10]; -@y -pos13(rule_thickness,90); pos14(rule_thickness,90); -x10=x11=x12; top y10=h+o; x10-x13=x14-x10=4u+eps; -y13=y14=y10-.24asc_height-eps; -pos15(rule_thickness,angle(z14-z10)); z15l=z10; -pos16(rule_thickness,angle(z13-z10)); z16l=z10; -z19=.2[.5[z13,z14],z10]; -@z -@x in SYMBOL, Northeast arrow -pos3(bar,theta); pos4(bar,theta); -y3=y0; x4=x0; x0-x3=y0-y4=delta+eps; -pos5(bar,-90); z5l=z0; pos6(bar,-180); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y -pos3(rule_thickness,theta); pos4(rule_thickness,theta); -z3-z0=(-4u,.36asc_height) rotated theta; -z4-z0=(-4u,-.36asc_height) rotated theta; -pos5(rule_thickness,-90); z5l=z0; pos6(rule_thickness,-180); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x in SYMBOL, Southeast arrow -pos3(bar,theta); pos4(bar,theta); -x3=x0; y4=y0; y3-y0=x0-x4=delta+eps; -pos5(bar,180); z5l=z0; pos6(bar,90); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y -pos3(rule_thickness,theta); pos4(rule_thickness,theta); -z3-z0=(-4u,.36asc_height) rotated theta; -z4-z0=(-4u,-.36asc_height) rotated theta; -pos5(rule_thickness,180); z5l=z0; pos6(rule_thickness,90); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x in SYMBOL, Northwest arrow -pos3(bar,-180+theta); pos4(bar,-180+theta); -x3=x0; y4=y0; x4-x0=y0-y3=delta+eps; -pos5(bar,0); z5l=z0; pos6(bar,-90); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y -pos3(rule_thickness,-180+theta); pos4(rule_thickness,-180+theta); -z4-z0=(4u,.36asc_height) rotated theta; -z3-z0=(4u,-.36asc_height) rotated theta; -pos5(rule_thickness,0); z5l=z0; pos6(rule_thickness,-90); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x in SYMBOL, Southwest arrow -pos3(bar,-180+theta); pos4(bar,-180+theta); -y3=y0; x4=x0; x3-x0=y4-y0=delta+eps; -pos5(bar,90); z5l=z0; pos6(bar,0); z6l=z0; -z9=.381966[.5[z3,z4],z0]; -@y -pos3(rule_thickness,-180+theta); pos4(rule_thickness,-180+theta); -z4-z0=(4u,.36asc_height) rotated theta; -z3-z0=(4u,-.36asc_height) rotated theta; -pos5(rule_thickness,90); z5l=z0; pos6(rule_thickness,0); z6l=z0; -z9=.2[.5[z3,z4],z0]; -@z -@x in ROMMS, Leftward top half arrow -pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); -y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; -y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; -pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; -@y -pos1(rule_thickness,90); pos2(rule_thickness,90); -pos3(rule_thickness,0); pos4(rule_thickness,0); -y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; -y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0+4u+eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -@z -@x in ROMMS, Leftward bottom half arrow -pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); -y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; -y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; -pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; -@y -pos1(rule_thickness,90); pos2(rule_thickness,90); -pos3(rule_thickness,0); pos4(rule_thickness,0); -y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; -y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0+4u+eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -@z -@x in ROMMS, Rightward top half arrow -pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); -y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); -y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps; -pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; -@y -pos1(rule_thickness,90); pos2(rule_thickness,90); -pos3(rule_thickness,0); pos4(rule_thickness,0); -y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); -y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0-4u-eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -@z -@x in ROMMS, Rightward bottom half arrow -pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); -y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); -y3-y0=y0-y4=.asc_height+eps; x3=x4=x0-3u-eps; -pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; -@y -pos1(rule_thickness,90); pos2(rule_thickness,90); -pos3(rule_thickness,0); pos4(rule_thickness,0); -y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); -y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0-4u-eps; -pos5(rule_thickness,angle(z4-z0)); z5l=z0; -pos6(rule_thickness,angle(z3-z0)); z6l=z0; -@z -@x in CALU, Calligraphic F -top y1=top y6=h; z2=.5[z3,z1]+bend; -bot y3=-o; y4=.1h; y5=y2; y7=.9h; -draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem -draw z1-flourish_change{up}...z1---z6...{down}z7; % upper bar -@y -top y1=top y6=h; z2=.5[z3,z1]+1.2bend; -bot y3=-o; y4=.1h; y5=y2; y7=.9h; -draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem -draw z1-flourish_change{up}...(z1-(u,0))---z6...{down}z7; % upper bar -@z -@x in CALU, Calligraphic H -lft x1=lft x3=0; rt x4=rt x6=.8w; rt x9=w; -top y1=top y4=h; bot y3=-o; bot y6=bot_flourish_line; y9=y6+.1h; -z2=.6[z3,z1]+bend; z5=.4[z6,z4]-2bend; -path p[]; p1=flex(z1,z2,z3); p2=flex(z4,z5,z6); -p3=(-w,.55h)--(2w,.55h); -lft z7=p3 intersectionpoint p1; rt z8=p3 intersectionpoint p2; -draw (z1-flourish_change{up}....z1-(u,0)---z1) softjoin p1; % left stem -@y -lft x1=lft x3=.5u; rt x4=rt x6=.8w-.6u; rt x9=w; -top y1=top y4=h; bot y3=-.06h; bot y6=bot_flourish_line; y9=y6+.1h; -z2=.6[z3,z1]+bend; z5=.4[z6,z4]-bend; -path p[]; p1=flex(z1,z2,z3); p2=flex(z4,z5,z6); -p3=(-w,.45h)--(2w,.45h); -rt z7+2bend=p3 intersectionpoint p1; rt z8=p3 intersectionpoint p2; -draw (z1-flourish_change-bend{curl2}....z1-(u,0)---z1) softjoin p1; % left stem -@z -@x in CALU, Calligraphic I -lft x0=0; x1=.9w; x2=x4=.5w; x5=.2w; x6=.75w; rt x7=w; -@y -lft x0=0; x1=.9w; x2=x4=.5w; x5=.2w; x6=.8w; rt x7=1.05w; -@z -@x in CALU, Calligraphic T -x1=x3=.5w; lft x4=0; x5=w-x6=.25w; rt x7=w; -x1=.47w; x3=.5w; lft x4=0; x5=w-x6=.25w; rt x7=1.05w; -z2=.5[z3,z1]+bend; -x1-x8=x9-x1=2u; y8=y9=y3; -z0=1/3[z1,z6]; -draw z0{left}...z2{down}...{left}z8; % stem -draw z8--z9; % foot -draw z4{up}...z5{right}...z6{right}...{up}z7; % arms -math_fit(.5u#-5/7h#*slant,-u#); labels(1,2,3,4,5,6,7,8,9); endchar; -@y -x1=.47w; x3=.5w; lft x4=0; x5=.25w; x6=.85w; rt x7=1.05w; -top y1=h; bot y3=-.1h; y4=3/4h; top y5=top y6=h; top y7=1.05h; -z2=.3[z3,z1]+bend; -top y0=y1; x0=x2; -z8=(2u,.2h); -draw z0---z2...z3; % stem -draw z4{curl 2}...z5{right}...z6{right}...{up}z7; % arms -math_fit(.5u#-5/7h#*slant,-u#); labels(1,2,3,4,5,6,7); endchar; -@z -@x in GREEKL, lowercase delta -pos1(hair,-180); pos2(vair,-90); -numeric theta; theta=angle(18u,-h); -pos3(stem,theta+90); pos4(stem,theta+90); pos5(1/4[hair,stem],20); -pos6(vair,-90); pos7(curve,-180); pos8(vair,-270); -rt x1l=hround(w-2u+.5hair); x2=.5w; x3r=3u; rt x5r=hround(w-u); -x4=x6=x8=.5w+.5u; lft x7r=hround(1.5u-.5curve); -top y2l=h+oo; y1=min(.9h,y2r-eps); top y8r=x_height+oo; y4=y8; -z4-z3=whatever*(18u,-h); y5=y7=.5[y6,y8]; bot y6=-oo; -filldraw stroke z1e{x2-x1,3(y2-y1)}...z2e{left}...z3e---z4e - ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl -math_fit(-.3x_height#*slant+.5curve#-u#,.7x_height#*slant-.5u#); -penlabels(1,2,3,4,5,6,7,8); endchar; -@y -x0=-u; y0=1.1h; -numeric light_flare; light_flare=2/3[vair,flare]; -x1=w-2u-.5light_flare; y1=h-.5light_flare; -numeric theta; theta=angle (z1-z0); -pos1(light_flare,theta-90); pos2(.2[vair,light_flare],-90); pos3(vair,theta); -x2=x3+u; y2=h; -x4=x6=.5w+.5u; top y8r=x_height+oo; z4=z8; -pos6(vair,-90); pos7(stem,-180); pos8(vair,-270); -pos4(stem,angle(z4-z0)+90); pos5(stem,30); -z3=.5[.5[z1,z4],z0]; -y5+.1x_height=y7=.5[y6,y8]; bot y6=-oo; -lft x7r=hround(1.4u-.5stem); rt x5r=hround(w-u); -filldraw stroke z1e{z0-z1e}....z2e....z3e{(z0-z1)rotated 90} - ...z4e{z4e-.8[z4,z0]} - ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl -filldraw z1r{z1r-z0}...z1l{z0-z1l}--cycle; % bulb -math_fit(-.3x_height#*slant+.5curve#-u#,.7x_height#*slant-.5u#); -penlabels(0,1,2,3,4,5,6,7,8); endchar; -@z -@x in TSETSL, lowercase delta for extended ASCII -pos1(hair,-180); pos2(vair,-90); -numeric theta; theta=angle(18u,-h); -pos3(stem,theta+90); pos4(stem,theta+90); pos5(1/4[hair,stem],20); -pos6(vair,-90); pos7(curve,-180); pos8(vair,-270); -rt x1l=hround(w-2u+.5hair); x2=.5w; x3r=3u; rt x5r=hround(w-u); -x4=x6=x8=.5w+.5u; lft x7r=hround(1.5u-.5curve); -top y2l=h+oo; y1=min(.9h,y2r-eps); top y8r=x_height+oo; y4=y8; -z4-z3=whatever*(18u,-h); y5=y7=.5[y6,y8]; bot y6=-oo; -filldraw stroke z1e{x2-x1,3(y2-y1)}...z2e{left}...z3e---z4e - ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl -penlabels(1,2,3,4,5,6,7,8); endchar; -@y this next line differs from GREEKL, but the other lines agree -x0=-u; y0=1.05h; -numeric light_flare; light_flare=2/3[vair,flare]; -x1=w-2u-.5light_flare; y1=h-.5light_flare; -numeric theta; theta=angle (z1-z0); -pos1(light_flare,theta-90); pos2(.2[vair,light_flare],-90); pos3(vair,theta); -x2=x3+u; y2=h; -x4=x6=.5w+.5u; top y8r=x_height+oo; z4=z8; -pos6(vair,-90); pos7(stem,-180); pos8(vair,-270); -pos4(stem,angle(z4-z0)+90); pos5(stem,30); -z3=.5[.5[z1,z4],z0]; -y5+.1x_height=y7=.5[y6,y8]; bot y6=-oo; -lft x7r=hround(1.4u-.5stem); rt x5r=hround(w-u); -filldraw stroke z1e{z0-z1e}....z2e....z3e{(z0-z1)rotated 90} - ...z4e{z4e-.8[z4,z0]} - ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl -filldraw z1r{z1r-z0}...z1l{z0-z1l}--cycle; % bulb -penlabels(0,1,2,3,4,5,6,7,8); endchar; -@z - ------------ Changes made after the fourth printing (1993) of Volume E - -@x in CSCSPU, letter J [fixes a bug if dish=0 and crisp<tiny and serifs] - bulb(3,4,5); % bulb -@y - pickup tiny.nib; bulb(3,4,5); % bulb -@z - -@x in BIGDEL, two harmless bugs caught by Robert Hunt -"Extensible vertical arrow--extension module"; -@y -cmchar "Extensible vertical arrow--extension module"; -@z -@x -"Extensible double vertical arrow--extension module"; -@y -cmchar "Extensible double vertical arrow--extension module"; -@z - -@x in GREEKU, letter Phi (hi-res glitch found by Robert Hunt) -lft x1l=lft x2l=hround(.5w-.5cap_stem); top y1=h; bot y2=0; -@y -lft x1l=lft x2l=hround(.5w-.5shaved_stem); top y1=h; bot y2=0; -@z -@x in GREEKU, letter Psi similarly -lft x1l=lft x2l=hround(.5w-.5cap_stem); top y1=h; bot y2=0; -@y -lft x1l=lft x2l=hround(.5w-.5shaved_stem); top y1=h; bot y2=0; -@z - -@x in BIGOP, teststyle integral sign -x5=.5[x4,x6]; x4-x6=1.2u; lft x5r=hround(.5w-.5stem); -@y -x5=.5[x4,x6]; x4-x6=1.2u; lft x5r=hround(.5w-.5curve); -@z -@x same, displaystyle integral sign -x5=.5[x4,x6]; x4-x6=4.8u; lft x5r=hround(.5w-.5stem); -@y -x5=.5[x4,x6]; x4-x6=4.8u; lft x5r=hround(.5w-.5max_size); -@z -@x same, textstyle contour integral sign -x5=.5[x4,x6]; x4-x6=1.2u; lft x5r=hround(.5w-.5stem); -@y -x5=.5[x4,x6]; x4-x6=1.2u; lft x5r=hround(.5w-.5curve); -@z -@x same, displaystyle contour integral sign -x5=.5[x4,x6]; x4-x6=4.8u; lft x5r=hround(.5w-.5stem); -@y -x5=.5[x4,x6]; x4-x6=4.8u; lft x5r=hround(.5w-.5max_size); -@z - -@x in ITALMS, the partial differential sign -path p; p=pulled_super_arc.l(3,4)(pull); -@y -path p; {{interim superness:=more_super; p=pulled_super_arc.l(3,4)(pull)}}; -@z - -@x in SYMBOL, the elementary division operator -beginarithchar(oct"004"); pickup rule.nib; -x3-.5dot_size=hround(.5w-.5dot_size); center_on(x3); -y3+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]+.5dot_size); -@y note that pickup rule.nib leaves currentbreadth unchanged -beginarithchar(oct"004"); pickup fine.nib; pickup rule.nib; -numeric del; del=dot_size-currentbreadth; % currentbreadth=fine -x3-.5del=good.x(.5w-.5del); center_on(x3); -y3+.5del=good.y(math_axis+math_spread[.5x_height,.6x_height]+.5del); -@z - -@x in CMBASE, compute_spread can force even spreads for better rounding - spread:=ceiling(spread#*hppp)+eps; enddef; -@y - spread:=2ceiling(spread#*hppp/2)+eps; enddef; -@z - -@x in CMBASE, better diag_ratio routine avoids overflow in hi-res chars - numeric a_,b_; b_=b/y; a_=a*a-b_*b_; - (a*(c++y*sqrt a_)-b_*c)/a_/y enddef; -@y - numeric a_,b_,c_; b_=b/y; c_=c/y; a_=a*a-b_*b_; - (a*(c_++sqrt a_)-b_*c_)/a_ enddef; -@z - -@x in ROMAND, numeral 3, allow hi-res cminch to run without overflow (MacKay) -x4=1/3[x5,x3l]; z4=z5+whatever*(150u,h); -@y -x4=1/3[x5,x3l]; z4=z5+whatever*(15u,.1h); -@z - -@x in ITALP, the Sterling sign (bug caught by Yannis Haralambous) -lft x6r=hround u; x7=3u; x8=w-3.5u; rt x9r=hround(w-u); -@y -lft x6r=hround u; x7=3u; x8=w-3.5u; rt x9l=hround(w-u); -@z - -@x in GREEKL, lowercase omega, I made minor changes for new edition of TAOCP: -y1+.5hair=h; x1=x2+.75u; pos1(hair,angle(2(x1-x2),y1-y2)+90); -@y -y1+.5hair=h; x1=x2+.75u; pos1(hair+dw,angle(2(x1-x2),y1-y2)+90); -@z -@x -x3=.5[x2,x4]; x7+.25u=.5[x6,x8]; rt x8r=hround(w-.5u); -@y -x3=.5[x2,x4]; x7-.25u=.5[x6,x8]; rt x8r=hround(w-.5u); -@z - -@x in GREEKL, lowercase beta, I made minor changes for new edition of TAOCP: -pos3(stem,0); pos4(vair,-90); pos5(hair,-180); -pos6(vair,-270); pos7(curve,-360); pos8(vair,-450); pos9(hair,-540); -x0=x1=x9; lft x0l=hround(1.5u-.5hair); x2=x4=x6=x8=.5w+.25u; -rt x3r=hround(w-1.5u); rt x7r=hround(w-1.5u+.5curve); rt x5l=hround(x4-u); -bot y0=-d; y1=top y6r=x_height; top y2r=h+oo; y3=.5[y2,y4]; -y5=.5[y4,y6]; top y6r-bot y4r=vstem+eps; bot y8=-oo; y7=y9=.5[y6,y8]; -@y (this change also is made in TSETSL) -pos3(.8[hair,stem],0); pos4(vair,-90); pos5(hair,-180); -pos6(vair,-270); pos7(stem,-360); pos8(vair,-450); pos9(hair,-540); -x0=x1=x9; lft x0l=hround(1.5u-.5hair); x2=x4=x6=x8=.5w-.25u; -rt x3r=hround(w-1.75u); rt x7r=hround(w-u); rt x5l=hround(x4-u); -bot y0=-d; y1=top y6r=x_height; top y2r=h+oo; y3=.5[y2,y4]; -y5=.5[y4,y6]; top y6r-bot y4r=vstem+eps; bot y8=-oo; y7=y9=.55[y6,y8]; -@z - -@x in ROMANU, less overshoot on uppercase sans serif C (for Vol 2 of TAOCP) - top y1r=vround .95h+o; top y2r=h+o; y3=.5h; - bot y4r=-o; bot y5r=vround .08h-o; y5l:=good.y y5l; x5l:=good.x x5l; -@y - top y1r=vround .95h+oo; top y2r=h+oo; y3=.5h; - bot y4r=-oo; bot y5r=vround .08h-oo; y5l:=good.y y5l; x5l:=good.x x5l; -@z - -@x in ROMANU, likewise for G - top y1r=vround .93h+o; top y2r=h+o; y3=.5h; - bot y4r=-o; bot y5r=vround .07h-o; -@y - top y1r=vround .93h+oo; top y2r=h+oo; y3=.5h; - bot y4r=-oo; bot y5r=vround .07h-oo; -@z - -@x in SYMBOL, spade suit, a cosmetic change that doesn't affect any fonts: -labels(1,2,3,5,6,10,11,12,13,14,15); endchar; -@y -labels(1,2,3,5,6,7,8,9,10,11,12,13,14,15); endchar; -@z - -@x in CMBASE, sloped_serif.l never used $$ except rarely in letter p - y@0=max(y@2l-bracket,y$$)-eps; -@y and in letter p, it was wrong to do so! (but not in any normal font) - y@0=y@2l-bracket-eps; -@z -@x sloped_serif.r never used $$ in any reasonable way at all - y@0=min(y@2l+bracket,y$$)+eps; -@y - y@0=y@2l+bracket+eps; -@z - -in ITALD, programs for 6 and 9: same change as above for partial derivative -in OLDDIG, programs for 6 and 9: same change as above for partial derivative -in ROMAND, programs for 6 and 9: same change as above for partial derivative -in TSETSL, program for partial derivative: same change as above - -@x in ROMANL, slight change to cmss10 and cmssbx10 `g' improves meta-ness -loop_top=Vround .77[vair,fudged.stem]; -@y -loop_top=if serifs: Vround .77[vair,fudged.stem] else: vair fi; -@z - -@x in CMBASE, recent change shouldn't clobber a_, b_, and c_ of plain.mf - numeric a_,b_,c_; b_=b/y; c_=c/y; a_=a*a-b_*b_; - (a*(c_++sqrt a_)-b_*c_)/a_ enddef; -@y - numeric aa_,bb_,cc_; bb_=b/y; cc_=c/y; aa_=a*a-bb_*bb_; - (a*(cc_++sqrt aa_)-bb_*cc_)/aa_ enddef; -@z - -@x in ITALMS, Arrow (vector) accent -lft x1=hround .5u; x2=w-x1; y1=y2=good.x .7[x_height,asc_height]; -@y a correction of almost purely academic interest -lft x1=hround .5u; x2=w-x1; y1=y2=good.y .7[x_height,asc_height]; -@z - -the following patches make the arrows more robust, but essentially unchanged -@x in SYM, Downward arrow - --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r) -@y - ---z1r..z1l---subpath (t,0) of\\(z3r{z9-z3}..z5r) -@z -@x in SYM, Upward arrow - --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3l{z9-z3}..z5r) -@y - ---z1r..z1l---subpath (t,0) of\\(z3l{z9-z3}..z5r) -@z -@x in SYM, Leftward arrow - --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) -@y - ---z1l..z1r---subpath (t,0) of\\(z3r{z9-z3}..z5r) -@z -@x in SYM, Rightward arrow - --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) -@y - ---z1l..z1r---subpath (t,0) of\\(z3l{z9-z3}..z5r) -@z -@x in SYM, Left-and-right arrow - --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) -@y - ---z1l..z1r---subpath (t,0) of\\(z3r{z9-z3}..z5r) -@z -@x ibid - --z12l---z11l..z11r---z12r--subpath (t,0) of\\(z13l{z19-z13}..z15r) -@y - ---z11l..z11r---subpath (t,0) of\\(z13l{z19-z13}..z15r) -@z -@x in SYMBOL, Up-and-down arrow - --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r) -@y - ---z1r..z1l---subpath (t,0) of\\(z3r{z9-z3}..z5r) -@z -@x ibid - --z12r---z11r..z11l---z12l--subpath (t,0) of\\(z13l{z19-z13}..z15r) -@y - ---z11r..z11l---subpath (t,0) of\\(z13l{z19-z13}..z15r) -@z -@x in SYMBOL, Northeast arrow - --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) -@y - ---z1l..z1r---subpath (t,0) of\\(z3l{z9-z3}..z5r) -@z -@x in SYMBOL, Southeast arrow - --z2l---z1l..z1r---z2r - --subpath (t,0) of\\(z3l{z9-z3}..z5r) -@y - ---z1l..z1r---subpath (t,0) of\\(z3l{z9-z3}..z5r) -@z -@x in SYMBOL, Northwest arrow - --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r) -@y - ---z1l..z1r---subpath (t,0) of\\(z3l{z9-z3}..z5r) -@z -@x in SYMBOL, Southwest arrow - --z2l---z1l..z1r---z2r - --subpath (t,0) of\\(z3l{z9-z3}..z5r) -@y - ---z1l..z1r---subpath (t,0) of\\(z3l{z9-z3}..z5r) -@z -@x in ROMMS, Leftward top half arrow -filldraw z0--(x0,y2l)---z1l..z1r---z2r - ..subpath (t,0) of\\(z3r..{2(x0-x3),y0-y3}z5r) -@y -filldraw z0--(x0,y2l)--z1l{right}..{left}z1r - --subpath (t,0) of\\(z3r..{2(x0-x3),y0-y3}z5r) -@z -@x in ROMMS, Leftward bottom half arrow -filldraw z0{2(x4-x0),y4-y0}..z4l - --subpath (0,t) of\\(z4r..{2(x0-x4),y0-y4}z6r) -@y - --z1l{right}..{left}z1r--(x0,y2r)--cycle; % arrowhead and stem -@z -@x in ROMMS, Rightward top half arrow -filldraw z0--(x0,y2l)---z1l..z1r---z2r - ..subpath (t,0) of\\(z3l..{2(x0-x3),y0-y3}z5r) -@y -filldraw z0--(x0,y2l)--z1l{left}..{right}z1r - --subpath (t,0) of\\(z3l..{2(x0-x3),y0-y3}z5r) -@z -@x in ROMMS, Rightward bottom half arrow - ..z2l---z1l..z1r---(x0,y2r)--cycle; % arrowhead and stem -@y - --z1l{left}..{right}z1r--(x0,y2r)--cycle; % arrowhead and stem -@z -@x in BIGDEL, Extensible vertical arrow--top - --z2r---z1r--z1l---z2l--subpath (t,0) of\\(z3l{z9-z3}..z5r) -@y - --z1r--z1l--subpath (t,0) of\\(z3l{z9-z3}..z5r) -@z -@x in BIGDEL, Extensible vertical arrow--bottom - --z2r---z1r--z1l---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r) -@y - --z1r--z1l--subpath (t,0) of\\(z3r{z9-z3}..z5r) -@z - -@x in ROMLIG, the ligature fi - x13=x11-.5; top y14r=min(2x_height,h+1); top y11=x_height; -@y make the center of the dot consistent with ordinary i, in sans-serif fonts - x13=x11-.5; top y14r=min(10/7x_height+.5bulb_diam,h)+1; top y11=x_height; -@z -@x in ROMLIG, the ligature ffi - x23=x21-.5; top y24r=min(2x_height,h+1); top y21=x_height; -@y same corrections as to fi - x23=x21-.5; top y24r=min(10/7x_height+.5bulb_diam,h)+1; top y21=x_height; -@z - -@x in SYMBOL, the circle operator -lft x6=hround u; x2=w-x6; top y8=h; y2=math_axis; -@y this correction makes it a circle even at small size, low resolution -lft x6=hround u; x2=w-x6; top y8=h; y8-y4=x2-x6; -@z -@x in SYMBOL, the bullet -lft x6=hround u; x2=w-x6; top y8=h; y2=math_axis; circle_points; -@y likewise -lft x6=hround u; x2=w-x6; top y8=h; y8-y4=x2-x6; circle_points; -@z - -@x in ROMAND, the numeral 2 - ..z3e{down}.. z4e---z5e--z6e; % stroke -@y it's more robust to avoid --- next to -- (in case of tiny loops) - ..z3e{down}..{z5e-z4e}z4e--z5e--z6e; % stroke -@z -@x in OLDDIG, oldstyle numeral 2 - ..z3e{down}.. z4e---z5e--z6e; % stroke -@y likewise - ..z3e{down}..{z5e-z4e}z4e--z5e--z6e; % stroke -@z - -@x in CSC, after the second font_setup -extra_endchar:=extra_endchar&"charcode:=charcode+code_offset"; -@y -extra_endchar:=extra_endchar&"charcode:=charcode+code_offset;"; -@z - -@x in ACCENT, in program for Breve -numeric mid_thickness; mid_thickness=vround 1/3[vair,stem]; -@y -numeric mid_thickness; mid_thickness=Vround 1/3[vair,stem]; -@z - -@x in CMBASE, a more robust arm routine fixes the 7 in cmbx5,6,7,8 - filldraw z$$l{z@1-z$$l}...darkness[z@1,.5[z@2,z$$l] ]...z@2 - ---z$l--z$r--z@0--z$$r--cycle; % arm and beak -@y - path p_; p_= z$$l{z@1-z$$l}...darkness[z@1,.5[z@2,z$$l] ]...z@2 - ---z$l--z$r--z@0--z$$r--cycle; - if (y$$>y$) <> (ypart precontrol 1 of p_ > ypart postcontrol 1 of p_): - p_:=z$$l{z@1-z$$l}...darkness[z@1,.5[z@2,z$$l] ] - ---z$l--z$r--z@0--z$$r--cycle; fi - filldraw p_; % arm and beak -@z - -@x in CALU, I decided in July 2005 that I really wanted a less swashy F -top y1=top y6=h; z2=.5[z3,z1]+1.2bend; -bot y3=-o; y4=.1h; y5=y2; y7=.9h; -draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem -draw z1-flourish_change{up}...(z1-(u,0))---z6...{down}z7; % upper bar -@y -top y1=top y6=h; z2=.5[z3,z1]+bend; -bot y3=-o; y4=.1h; y5=y2; y7=.9h; -draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem -draw z1-flourish_change+(0,.15asc_height){up}...{right}(z1-(2u,0)) - ---z6...{down}z7; % upper bar -@z - -@x in SYMBOL, two points of Hardy's asymptotic equivalence sign were unlabeled -labels(1,2,3,4); endchar; -@y -labels(1,2,3,4,5,6); endchar; -@z - -@x in GREEKL, correct a tiny notch that can show up at hires (Charles Duan) -filldraw z1l--z2l--z--z1r--cycle; % stem -@y -filldraw z1l--z2l...(x3,y2l)...z--z1r--cycle; % stem -@z - -@x in GREEKL, make almost-invisible semantic corrections to beta -x0=x1=x9; lft x0l=hround(1.5u-.5hair); x2=x4=x6=x8=.5w-.25u; -@y -x0=x1=x9; lft x0r=hround(1.5u-.5hair); x2=x4=x6=x8=.5w-.25u; -@z -@x -y5=.5[y4,y6]; top y6r-bot y4r=vstem+eps; bot y8=-oo; y7=y9=.55[y6,y8]; -@y -y5=.5[y4,y6]; top y6r-bot y4r=vstem+eps; bot y8r=-oo; y7=y9=.55[y6,y8]; -@z -@x and also to delta -y5+.1x_height=y7=.5[y6,y8]; bot y6=-oo; -@y -y5+.1x_height=y7=.5[y6,y8]; bot y6r=-oo; -@z -@x and also to phi -top y1=x_height+oo; y2=y4=.5[y1,y3]; bot y3=-oo; -@y -top y1r=x_height+oo; y2=y4=.5[y1,y3]; bot y3r=-oo; -@z - ------------Here I draw the line with respect to further changes - -(I sincerely believe there won't be any more!) - -I absolutely guarantee that the TFM files will never change again. -(Otherwise I would consider zeroing the depth of italic 7, -which I admit is strange... we can live with it.) |