[tex-k] another bunch of bugs in The METAFONTbook

胡亚捷 (Hu Yajie) 2500418497 at qq.com
Fri Jul 17 17:06:17 CEST 2020

First, a correction: Earlier I said that <future pen argument> should be added
to the syntax of <future pen primary>. Please do it only on page 214, not on
page 148, since other syntaxes in the earlier chapters don't have <argument>.

Page C68, line -13
If you run `expr.mf' and type `z slanted 1/6', you get `(0.16667y+x,y)'
instead of `(x+0.16667y,y)'. All other `expr' results in the book seem correct
(except for the four random results on page 68 which I'm unable to verify).

Page C234, answer 4.6
Since what is rendered $z_2'$ in the book should be typed z2' (cf. page 55),
a reader might assume the $z_k'$ here is typed z k'. However, k cannot be used
as a <subscript> without being enclosed in brackets, since it's a capsule.

Page C238, answer 9.4
If you substitute alpha and beta for the whatevers, the machine will not only
calculate these values, but also introduce rounding errors for z:
   z1=whatever[(1,5),(8,19)]; z1=whatever[(0,17),(6,1)]; show z1; % (3,9)
   z2=alpha[(1,5),(8,19)]; z2=beta[(0,17),(6,1)]; show z2; % (2.99998,9.00003)
The capsule produced by `whatever' is recycled quicker than alpha:
   (1,5)+capsule1*((8,19)-(1,5))     (1,5)+alpha*((8,19)-(1,5))
   (1,5)+capsule1*(7,14)             (1,5)+alpha*(7,14)
   (1,5)+(0.5capsule2,capsule2)      (1,5)+(7alpha,14alpha)
   (0.5capsule3-1.5,capsule3)        (7alpha+1,14alpha+5)
eliminating the large coefficients 7 and 14 which caused the rounding errors.
On the other hand,
   z3=(alpha/7)[(1,5),(8,19)]; z3=beta[(0,17),(6,1)]; show z3; % (3,9)

Page C250, answer 18.13
Pages 155 and 217 tell us that a <statement> is (<statement> ;)*, that is, a
list of statements separated by semicolons and followed by one more semicolon.
The final semicolon isn't necessary when using the `hide' macro, so it's
better to change the `<statement list>' to something like `<statements>'.

Appendix I
    Add `65' to match the entry for `<'. (Page 65 has both `>' and `<'.)

`Boolean expressions'
    Should not be capitalized (as reported before).

    Delete `66'. That page does not discuss comparison (except in floor).

    Add `68', since other operators illustrated on page 68 and discussed on
    page 69 are indexed in both places.

`greatest integer function, see floor'
    Put the `floor' in typewriter type. (Compare similar entries such as
    `exponential, see mexp'.)

`least integer function, see ceiling'
    Put the `ceiling' in typewriter type. (Ditto.)

    Add `80', since `top', `bot', `lft', and `right' are all indexed there.

    The primitive `string' isn't mentioned on page 69. If `the string type'
    is the intended meaning, then `path' probably needs to be indexed too,
    c.f. mfbook.tex, lines 3962--4:
suffice to give a few examples, keeping in mind that the file |expr.mf|
defines |s| with any subscript to be a ^{string}, while |p| with any subscript
is a path. Furthermore $s_1$ has been given the value |"abra"|, while

Note: I failed to understand how the `scan_expression' procedure of Volume D
works, thus I don't know whether the syntax for <path expression> in Volume C
matches the implementation. If anyone wants to check it, good luck.


Previous reports:

More information about the tex-k mailing list.