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 fine1): vardef Vround primary y = y_:=vround y; if y_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_stem1.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