[tex-k] a bug in the \ninebig macro of manmac.tex & other reports

胡亚捷 (Hu Yajie) 2500418497 at qq.com
Tue Jul 28 20:57:02 CEST 2020

If you look closely at the displayed formula on page 245 of The TeXbook
or the last line on page 298 of The METAFONTbook, taking careful measurements,
you'll notice that the ordinary and \big delimiters don't share the same axis:

       )                          ]
       )                          ]
    )  )                       ]  ]
    )  )          and          ]  ]
    )  )                       ]  ]
       )                          ]

If you prepare the following file

\input manmac
\ninepoint $\bigl(()\big) \quad \bigl[[]\big]$

and zoom in the PDF output, you'll be able to confirm the asymmetry. Yet
ten-point formulas in The TeXbook (e.g. Chapter 17) are free of the problem.
Why? The \ninebig macro in manmac.tex (listed on page 415 of The TeXbook):

\def\ninepoint{\def\rm{\fam0\ninerm}% switch to 9-point type
  ... \let\big=\ninebig ...}
  \left#1\vbox to7.25pt{}\right.\n at space$}}}

Why does the macro say \textfont0=\tenrm\textfont2=\tensy? Since manmac uses
the ten-point extension font (cmex10) for nine-point math, you would jump from
a 9-point $($ to a 12-point $\bigl($, which would be too drastic. By switching
to ten-point roman and symbol fonts, the larger delimiters will start from
the 10-point size, which bends better with nine-point formulas.

However, switching to the ten-point symbol font also changes \fontdimen22 or
axis_height, which is used to center large delimiters vertically according to
Appendix G of The TeXbook. The \tensy (cmsy10) font has an axis height of
2.5pt (compared with the 2.25pt axis height of \ninesy or cmsy9), so $\bigl($
yields not only a 10-point parenthesis but also a 10-point axis height, making
it visually incompatible with the rest of the nine-point formula.

How can we retain the 9-point axis height while switching to a 10-point font?
We can restore the nine-point \fontdimen22 manually in \ninebig, e.g.

\input manmac \catcode`@=11
\newdimen\tenaxis \tenaxis=\fontdimen22\tensy
\newdimen\nineaxis \nineaxis=\fontdimen22\ninesy
  \left#1\vbox to7.25pt{}\right.\n at space$%

Now \ninepoint $\bigl(()\big) \quad \bigl[[]\big]$ produces vertically
symmetric results, and everyone will be happy. (Another way is to say
\fontdimen22\tensy=\tenaxis in \tenpoint and \fontdimen22\tensy=\nineaxis in
\ninepoint, which might not work if you have 10-point math in 9-point text.)


Page C93, line 8 says that blacker=.1 in luxo mode, and the mode_def on
page C94 confirms it. Page C240, line 1 also confirms it. But the example
local.mf settings on pages C278--9 have blacker=.2 for luxo mode instead.

Page C96, lines 15
Best to put a smallskip after this line, as on the previous page.
(On the other hand, the smallskip following page C97 line 16 seems redundant.)

Page C136, line 18
The `0.28' is an approximate number, but the text doesn't say `about',
`approximately', $\approx$, etc. The real value is 0.27614 according to
the following program:
  vardef posttension expr t of p =
   save q; path q;
   q = point t of p {direction t of p} .. {direction t+1 of p} point t+1 of p;
   length(postcontrol 0 of q - point 0 of q)
   / length(postcontrol t of p - point t of p) enddef;
  vardef pretension expr t of p =
   save q; path q;
   q = point t-1 of p {direction t-1 of p} .. {direction t of p} point t of p;
   length(precontrol 1 of q - point 1 of q)
   / length(precontrol t of p - point t of p) enddef;
  path p; p = (0,0) .. controls (1,1) and (0,1) .. (1,0);
  show posttension 0 of p, pretension 1 of p;

Volume A, index
`` (reverse apostrophe or left quote)'
`left quote'
`reverse apostrophe'
    Change `see also alphabetic constant' to `see also alphabetic constants',
    since the ref'd entry uses plural form, and since we have similar refs
    like `<>, see angle brackets'.

`diamond leaders'
    Change `viii' to `viii-ix' (since the table of contents spans two pages).

Volume C, index
    Change `150' to `150--151', since the entire page of 151 is devoted
    to `cutoff'.

    Add page `116', which says that `The fact that edges are represented,
    rather than entire arrays of pixels, makes it possible for METAFONT
    to operate efficiently at high resolutions [...]'.

    Add `123--124', since the `quartercircle', `halfcircle', and `fullcircle'
    on these pages are all indexed.

    Move `143' to `unknown quantities, nonnumeric', since that page describes
    unknown transforms.


Previous reports:

More information about the tex-k mailing list.