1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
|
% Bugs (sigh) in Computers \& Typesetting --- the most recent errata
\input manmac
\def\.#1{\hbox{\tt#1}}
\font\sltt=cmsltt10
\font\niness=cmss9
\font\ninessi=cmssi9
\proofmodefalse
\raggedbottom
\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
\def\today{\number\day\
\ifcase\month\or
Jan\or Feb\or Mar\or Apr\or May\or Jun\or
Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
\ \number\year}
\def\cutpar{{\parfillskip=0pt\endgraf}}
\def\rhead{Bugs in {\tensl Computers \& Typesetting as of \today}}
\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
\hrule width\hsize
\line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
\nobreak\medskip}
\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
\hrule width\hsize
\line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
\nobreak\medskip}
\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
\newcount\nn
\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
\tenpoint
\noindent This is a list of all substantial corrections made to {\sl Computers
\& Typesetting\/} since the publication of the second ``Millennium Edition''
at the close of the year 2001. (More precisely, it lists errors corrected
since the 16th printing of Volume~A, the 7th printing
of Volume~B, the 6th printing of Volume~C, the 4th printing of Volume~D,
and the 5th printing of Volume~E.)
Corrections made to the softcover version of {\sl The \TeX book\/},
beginning with its 32nd printing, are
the same as corrections to Volume~A\null. Corrections to the softcover
version of {\sl The \slMF\kern1ptbook}, beginning with its 11th printing,
are the same as corrections to Volume~C\null. Changes to the mini-indexes
and master indexes of Volumes B, D, and~E are not shown here unless they are
not obviously derivable from what has been shown. Some (or all) of these
errors have been corrected in the most recent printings.
\looseness=-1
% volume A
\bugonpage A7, line 4 from the bottom (01/15/04)
\noindent
since control sequences of the second kind always have exactly one
symbol after\cutpar
\bugonpage A123, line 7 from the bottom (02/27/08)
\ninepoint\noindent
that it won't make the natural height-plus-depth
of\/ |\box|$\,n$ surpass |\dimen|$\,n$, when it~is\cutpar
\bugonpage A124, lines 12 and 13 (02/27/08)
\ninepoint\noindent
means that \TeX\ has tried to split an |\insert254| to height $180.2\pt$;
the natural height-plus-depth of the best such split is $175.3\pt$,
and the penalty for breaking there is~100.)
\bugonpage A206, lines 12--17 (05/21/07)
\ninepoint\noindent
or alignment template
is also considered to be |\outer| in this sense; for example, a
file shouldn't end in the middle of a definition. If you are designing a
format for others to use, you can help them detect errors before too much
harm is done, by using |\outer| with all control sequences that should
appear only at ``quiet times'' within a document. For example, Appendix~B
defines |\proclaim| to be |\outer|, since a user shouldn't be stating a
theorem as part of a definition or argument or preamble.
\bugonpage A216, line 3 from the bottom (12/20/07)
\ninepoint\indent|\openin|\<number>|=|\<file name>
\bugonpage A290, lines 25--26 (02/24/08)
\ninepoint\textindent{$\bull$}
\<leaders>\<box or rule>\<horizontal skip>.\enskip
Here \<horizontal skip> refers to one of the first five glue-appending
commands just mentioned; the formal syntax for \<leaders>\cutpar
\bugonpage A292, line 15 (12/02/02)
\ninepoint\noindent
are defined as in the
second alternative of a \<math field>, are
recorded in a ``choice\cutpar
\bugonpage A308, lines 25 and 26 (06/17/02)
\ninepoint
\begintt
\def\appendroman#1#2#3{\expandafter\def\expandafter#1\expandafter
{\csname\expandafter\gobble\string#2\romannumeral#3\endcsname}}
\endtt
\bugonpage A311, line 14 (12/02/02)
\ninepoint\indent
|\def\\{\if\space\next\ % assume that \next is unexpandable|
\bugonpage A311, line 17 (12/29/07)
\ninepoint\indent
| \leavevmode\copy0\kern-\wd0\makelightbox}|
\bugonpage A318, lines 24 and 25 (10/01/03)
\ninepoint\noindent
\hbox to\parindent{\bf\hss15.13.\enspace}%
Yes, in severe circumstances. (1)~Previous footnotes might
have left no room for any more footnotes on the page.
(2)~If |\vadjust{\eject}| occurs on the same line\cutpar
\bugonpage A364, lines 12--15 from the bottom (02/29/08)
\ninepoint\noindent
|\def\loggingall{\tracingcommands=2 \tracingstats=2|\par\noindent
| \tracingpages=1 \tracingoutput=1 \tracinglostchars=1 |\par\noindent
| \tracingmacros=2 \tracingparagraphs=1 \tracingrestores=1 |\par\noindent
| \showboxbreadth=\maxdimen \showboxdepth=\maxdimen}|\par
\noindent
|\def\tracingall{\tracingonline=1 \loggingall}|
\bugonpage A364, line 5 from the bottom (02/29/08)
\ninepoint\noindent
|\def\fmtversion{3.141592653} % identifies the current format|
\bugonpage A399, line 18, through what used to be page A400, line 14 (02/26/08)
\ninepoint
Finally, the reformatting of\/ |\box\footins| can be achieved easily with
an elegant technique suggested by David Kastrup, using the following
\TeX\ code within the |\output| routine:
\begindisplay
|\def\makefootnoteparagraph{\unvbox\footins|\cr
| \baselineskip=\footnotebaselineskip \removehboxes}|\cr
|\def\removehboxes{\unskip\setbox0=\lastbox|\cr
| \ifhbox0{\removehboxes}\unhbox0 \else\noindent \fi}|\cr
\enddisplay
The key idea here is |\removehboxes|, a macro that has the magical ability to
take a vertical box such as `|\vbox{\box1\box2\box3\removehboxes}|' and
transform it into
`|\vbox{\noindent\unhbox1\unhbox2\unhbox3}|'\kern-1pt,
if\/ |\box1|, \kern-2pt|\box2|, and
|\box3| are hboxes. Notice how |\removehboxes| introduces braces so that
\TeX's {save stack} will hold all of the hboxes before they are unboxed. Each
level of recursion in this routine uses one cell of input stack space and
three cells of save stack space; thus, it is generally safe to do more than
100 footnotes without exceeding \TeX's capacity.
In our application there is no interline glue within |\box\footins|,
so the |\unskip| command could be deleted from |\removehboxes|.
Incidentally, the |\unskip| and |\lastbox| operations have running
times of the approximate form
$a+mb$, where $m$~is the number of items {efficiency} on the
list preceding the glue or box that is removed. Hence |\removehboxes| has a
running time of order $n^2$ when it removes $n$~boxes.
But the constant~$b$ is so small that
for practical purposes it's possible to think of\/ |\unskip| and
|\lastbox| as almost instantaneous.
\bugonpage A416, lines 18--22 (06/08/07)
\ninepoint\noindent\beginlines
|\def\leftheadline{\hbox to \pagewidth{\spaceskip=0pt|
| \vbox to 10pt{}% strut to position the baseline|
| \llap{\tenbf\folio\kern1pc}% folio to left of text|
| \tenit\rhead\hfil}} % running head flush left|
|\def\rightheadline{\hbox to \pagewidth{\spaceskip=0pt\vbox to 10pt{}%|
\endlines
\bugonpage A450, lines 14--16 from the bottom (12/19/02)
\begingroup\def\\#1{$_{\kern\scriptspace#1}$}
\indent\qquad{\tt s\\1tic
\\1exp x\\3p pi\\3a \\2i\\1a i\\2al \\2id \\1do \\1ci \\2io ou\\2 \\2us}
\medskip\noindent
(where subscripts that aren't shown are zero), and this yields
$$\centerline{%
\tt.\\0s\\0u\\1p\\0e\\0r\\1c\\0a\\0l\\1i\\0f\\0r\\0a\\0g\\1i\\0l\\4i%
\\0s\\1t\\2i\\0c\\1e\\0x\\3p\\2i\\3a\\0l\\2i\\1d\\0o\\1c\\2i\\0o\\2u\\2s\\0.}$$
\endgroup
\bugonpage A458, left column (01/11/07)
\eightpoint\noindent
|\\|, 38, {\it356}, {\it378}, {\it418}.
\bugonpage A459, left column (03/17/06)
\eightpoint\noindent
angle brackets ( $\langle\,\rangle$ ), 59, {\it146--147}, 150,~156,\par
\noindent\qquad $\underline{268}$, 420, 437;
{\sl see also\/} |\langle|, |\rangle|.
\bugonpage A461, left column (02/24/08)
\eightpoint\noindent
|\boxit|, 223, 331.
\bugonpage A468, right column (02/26/08)
\eightpoint\noindent
interline glue, 78--79, $\underline{80}$, 104, 105, 125, 221,\par
\noindent\qquad 245, 263, 281--282, 335, 352, 399, 409.
\bugonpage A469, left column (02/26/08)
\eightpoint\noindent
Kastrup, David Friedrich, 399.
\bugonpage A470, left column (01/21/03)
\eightpoint\noindent
|\loggingall|, $\underline{364}$.
\bugonpage A477, right column (06/08/07)
\eightpoint\noindent
\llap{*}|\spaceskip|, 76, 274, {\it317}, {\it356}, {\it416}, 429.
\bugonpage A479, right column (09/11/07)
\eightpoint\noindent
|\undefined|, 350, 384.
\bugonpage A483, line 5 from the bottom (11/18/03)
\eightpoint
\rightline{\eightss--- HIERONYMUS HORNSCHUCH, %
{\eightrm'}$O\mkern-1mu\rho\mkern1mu\vartheta o\mkern1mu %
\tau\upsilon\pi o\gamma\mkern-1mu %
\rho\alpha\phi\acute\iota\alpha\varsigma$\enspace(1608)}
% volume B
\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
\def\to{\mathrel{.\,.}} % double dot, used only in math mode
\bugonpage Bvii, bottom two lines (12/20/02)
\eightpoint\noindent
all of those changes.
I~now believe that the final bug was discovered and removed on
27~February 2008.
The finder's fee has converged to \$327.68.
\hsize=35pc
\bugonpage B2, line 10 from the bottom (02/29/08)
\ninepoint\noindent\hskip10pt
{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
{\tt This\]is\]TeX,\]Version\]3.1415926\char'23}\quad
$\{\,$printed when \TeX\ starts$\,\}$
\bugonpage B3, new paragraph to follow line 9 (12/20/02)
\tenpoint\noindent\quad
Incidentally, Pascal's standard \\{round} function can be problematical,
because it disagrees with the IEEE floating-point standard.
Many implementors have
therefore chosen to substitute their own home-grown rounding procedure.
\bugonpage B21, lines 33 and 34 (09/11/07)
\def\Oct#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant
\tenpoint\noindent
$[\Oct{41}\to\Oct{46},\Oct{60}%
\to\Oct{71},\Oct{136},\Oct{141}\to\Oct{146},\Oct{160}\to\Oct{171}]$ must be printable.
Thus, at least 81 printable characters are needed.
\bugonpage B114, line 25 (09/11/07)
\def\#{\hbox{\tt\char`\#}} % parameter sign
\ninepoint\noindent
{\bf define} $\\{save\_index}(\#)\equiv\\{save\_stack}[\#].\\{hh}.\\{rh}$\quad
$\{\,$\\{eqtb} location or token or \\{save\_stack} location$\,\}$
\bugonpage B139, line 20 (12/19/02)
\ninepoint\noindent
\quad{\bf begin while} $(\\{state}=\\{token\_list}) \land
(\\{loc}=\\{null}) \land (\\{token\_type}\ne\\{v\_template})$ {\bf do}\par
\noindent\qquad\\{end\_token\_list};\quad$\{\,$conserve stack space$\,\}$
\bugonpage B144, line 14 (09/11/07)
\ninepoint\noindent
\quad\\{cat}: $0\to\\{max\_char\_code}$;\quad$\{\,$\\{cat\_code}(\\{cur\_char}), usually$\,\}$
\bugonpage B153, lines 2 and 3 (09/11/07)
\tenpoint\noindent
In fact, these three procedures account for almost every use of \\{get\_next}.
\bugonpage B161, line 19 (12/19/02)
\ninepoint\noindent
\quad{\bf while} $(\\{state}=\\{token\_list}) \land
(\\{loc}=\\{null}) \land (\\{token\_type}\ne\\{v\_template})$ {\bf do}\par
\noindent\qquad\\{end\_token\_list};\quad$\{\,$conserve stack space$\,\}$
\bugonpage B163, line 29 (12/19/02)
\ninepoint\noindent
\quad$\\{long\_state}\gets\\{call}$;
$\\{cur\_tok}\gets\\{par\_token}$;
$\\{ins\_error}$;
{\bf goto} \\{continue};
\bugonpage B172, lines 2--6 from the bottom (09/11/07)
\ninepoint\noindent
{\bf else if\/} $m=\\{vmode}$ {\bf then} \\{scanned\_result}(\\{prev\_depth})(\\{dimen\_val})\par\noindent
\quad{\bf else} \\{scanned\_result}(\\{space\_factor})(\\{int\_val})
\bugonpage B178, line 4 (09/11/07)
\ninepoint\noindent
\quad$\\{cur\_val}\gets0$;
$\\{cur\_val\_level}\gets\\{int\_val}$;
$\\{radix}\gets0$;
$\\{cur\_order}\gets\\{normal}$;
\bugonpage B184, line 9 from the bottom (04/18/07)
\tenpoint\noindent
and denominator sum to 32768 or less.
According to the definitions here, $\rm2660\,dd\approx1000.33297\,mm$;\kern-6.6pt\cutpar
\bugonpage B206, line 14 (10/30/02)
\tenpoint\noindent
used input files like \.{webmac.tex}.
\bugonpage B206, new paragraph to follow line 22 (12/20/02)
\tenpoint\noindent\quad
The following procedures don't allow spaces to be part of
file names; but some users seem to like names that are spaced-out.
System-dependent changes to allow such things should probably
be made with reluctance, and only when an entire file name that
includes spaces is ``quoted'' somehow.
\bugonpage B227, new line to precede line 23 (09/11/07)
\ninepoint\noindent
{\bf if} $(\\{nw}=0)\lor(\\{nh}=0)\lor(\\{nd}=0)\lor(\\{ni}=0)$
{\bf then} \\{abort};
\bugonpage B256, line 25 (12/20/02)
\ninepoint\noindent
\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent
\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded
equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent
\quad{\bf begin} $\\{cur\_g}\gets0$;
$\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent
\quad$\\{this\_box}\gets\\{temp\_ptr}$;
$\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$;
$\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$;
\bugonpage B258, line 5 from the bottom (12/20/02)
\ninepoint\noindent
\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$;
$\\{rule\_wd}\gets\\{width}(g)-\\{cur\_g}$;
\bugonpage B258, bottom line (12/20/02)
\ninepoint\noindent
\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$;
$\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
\bugonpage B259, line 4 (12/20/02)
\ninepoint\noindent
\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$;
$\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
\bugonpage B259, new line to precede old line 7 (12/20/02)
\ninepoint\noindent
\quad$\\{rule\_wd}\gets\\{rule\_wd}+\\{cur\_g}$;
\bugonpage B260, line 21 (12/19/02)
\ninepoint\noindent
\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$;
\bugonpage B261, line 9 (12/20/02)
\ninepoint\noindent
\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent
\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded
equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent
\quad{\bf begin} $\\{cur\_g}\gets0$;
$\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent
\quad$\\{this\_box}\gets\\{temp\_ptr}$;
$\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$;
$\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$;
\bugonpage B262, line 10 from the bottom (12/20/02)
\ninepoint\noindent
\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$;
$\\{rule\_ht}\gets\\{width}(g)-\\{cur\_g}$;
\bugonpage B262, line 6 from the bottom (12/20/02)
\ninepoint\noindent
\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$;
$\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
\bugonpage B262, line 2 from the bottom (12/20/02)
\ninepoint\noindent
\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$;
$\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
\bugonpage B263, new line to precede old line 2 (12/20/02)
\ninepoint\noindent
\quad$\\{rule\_ht}\gets\\{rule\_ht}+\\{cur\_g}$;
\bugonpage B264, line 10 (12/19/02)
\ninepoint\noindent
\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$;
\bugonpage B266, line 29 (09/11/07)
\tenpoint\noindent
$\\{total\_pages}\ge65536$, the \.{DVI} file will lie. And if
$\\{max\_push}\ge65536$, the user deserves whatever chaos might ensue.
\bugonpage B279, line 19 (09/11/07)
\ninepoint\noindent
\qquad\\{p}: \\{pointer};\quad$\{\,$a new glue node$\,\}$
\bugonpage B288, lines 18--20 (09/11/07)
\ninepoint\noindent
\\{left\_noad}: {\bf begin} \\{print\_esc}(\.{"left"});
\\{print\_delimiter}(\\{delimiter}($p$));\par\noindent
\quad{\bf end};\par\noindent
\\{right\_noad}: {\bf begin} \\{print\_esc}(\.{"right"});
\\{print\_delimiter}(\\{delimiter}($p$));
\bugonpage B290, line 12 (09/11/07)
\ninepoint\noindent
\quad{\bf begin if\/} $s=\\{text\_size}$ {\bf then}
\\{print\_esc}(\.{"textfont"});
\bugonpage B299, line 9 (12/20/02)
\ninepoint\noindent
\qquad\qquad\quad{\bf if\/} $\\{type}(r)=\\{kern\_node}$ {\bf then}
\quad$\{\,$unneeded italic correction$\,\}$
\bugonpage B332, line 6 (12/19/02)
\tenpoint\noindent
is being scanned, or when no alignment preamble is active.
\bugonpage B332, line 8 (12/19/02)
\ninepoint\noindent
\quad{\bf begin if\/} $(\\{scanner\_status}=\\{aligning}) \lor
(\\{cur\_align}=\\{null})$ {\bf then}
\bugonpage B336, line 11 from the bottom (10/13/03)
\tenpoint\noindent
$j-i+\\{min\_quarterword}$ in their
\\{link} fields. The values of $w_{ii}$ were initialized to
\\{null\_flag},\cutpar
\bugonpage B342, lines 5 and 6 (09/11/07)
\tenpoint
In restricted horizontal mode, the \\{clang} part of \\{aux} is undefined;
an over-cautious Pascal runtime system may complain about this.
\bugonpage B416, line 22 (02/29/08)
\ninepoint\noindent
\qquad\qquad{\bf if\/} $\\{count}(t)=1000$ {\bf then} $t\gets\\{height}(r)$
\par\noindent
\qquad\qquad{\bf else} $t\gets\\{x\_over\_n}(\\{height}(r),1000)*\\{count}(t)$;
\par\noindent
\qquad\qquad\\{print\_scaled}$(t)$
\bugonpage B438, lines 1--3 (09/11/07)
\tenpoint\noindent
{\bf1035.\quad}If \\{link}(\\{cur\_q}) is nonnull when \\{wrapup} is invoked,
\\{cur\_q} points to
the list of characters that were consumed while building the ligature
character~\\{cur\_l}.
\bugonpage B438, lines 19 and 20 (09/11/07)
\ninepoint\noindent
\qquad\qquad\qquad{\bf begin if\/} $\\{link}(\\{cur\_q})>\\{null}$ {\bf then}
\par\noindent
\qquad\qquad\qquad\quad{\bf if\/} $\\{character}(\\{tail})=\\{qi}(
\\{hyphen\_char}[\\{main\_f}])$ {\bf then} $\\{ins\_disc}\gets\\{true}$;
\bugonpage B438, line 4 from the bottom (09/11/07)
\ninepoint\noindent
\quad$\\{link}(\\{tail})\gets\\{lig\_stack}$;
$\\{tail}\gets\\{lig\_stack}$\quad$\{\,$\\{main\_loop\_lookahead} is next$\,\}$
\bugonpage B439, line 3 (09/11/07)
\ninepoint\noindent
\quad{\bf if\/} $\\{main\_p}>\\{null}$ {\bf then}
\\{tail\_append}(\\{main\_p});\quad$\{\,$append a single character$\,\}$
\bugonpage B440, new line to follow line 9 (09/11/07)
\ninepoint\noindent
\quad{\bf if\/} $\\{cur\_r}=\\{non\_char}$ {\bf then goto}
\\{main\_loop\_wrapup};
\bugonpage B455, lines 3 and 4 (09/11/07)
\ninepoint\noindent
\quad{\bf if\/} $((\\{cur\_cmd}=\\{hskip})\land(\\{abs}(\\{mode})\ne\\{vmode}))
\lor ((\\{cur\_cmd}=\\{vskip})\land(\\{abs}(\\{mode})=\\{vmode}))$ {\bf then}
\bugonpage B472, new paragraph to follow line 10 (12/20/02)
\tenpoint\noindent\quad
A devious user might force an \\{endv} command to occur just about anywhere;
we must defeat such hacks.
\bugonpage B472, replacement for what used to be line 13 (12/20/02)
\ninepoint\noindent
\quad{\bf begin} $\\{base\_ptr}\gets\\{input\_ptr}$;
$\\{input\_stack}[\\{base\_ptr}]\gets\\{cur\_input}$;\par\noindent
\quad{\bf while} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne
\\{v\_template}) \land{}$\par\noindent
\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}=
\\{null}) \land {}$\par\noindent
\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}=
\\{token\_list})$ {\bf do} \\{decr}(\\{base\_ptr});\par\noindent
\quad{\bf if\/} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne
\\{v\_template}) \lor {}$\par\noindent
\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}\ne
\\{null}) \lor {}$\par\noindent
\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}\ne
\\{token\_list})$ {\bf then}\par\noindent
\qquad\\{fatal\_error}(\hbox{\tt\char'23(interwoven\]alignment\]preambles\]%
are\]not\]allowed)\char'23});\par\noindent
\quad{\bf if\/} $\\{cur\_group}=\\{align\_group}$ {\bf then}
\bugonpage B505, line 19 (09/11/07)
\ninepoint\noindent
\qquad(\.{"since\]the\]result\]is\]out\]of\]range."});\par\noindent
\qquad{\bf if\/} $p\ge\\{glue\_val}$ {\bf then}
\\{delete\_glue\_ref}(\\{cur\_val});\par\noindent
\qquad\\{error}; {\bf return};
\bugonpage B506, line 1 (10/13/03)
\tenpoint\noindent
{\bf 1237.\quad}Here we use the fact that the consecutive codes
$\\{int\_val}\to\\{mu\_val}$ and
$\\{assign\_int}\to$\cutpar
\bugonpage B520, line 8 (06/25/04)
\tenpoint\noindent
says,
for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year,
month, and day\cutpar
\bugonpage B535, new line to follow line 11 (09/11/07)
\ninepoint\noindent
\qquad{\bf if\/} $\\{last\_glue}\ne\\{max\_halfword}$ {\bf then}
\\{delete\_glue\_ref}(\\{last\_glue});
\bugonpage B578, new entry (06/04/06)
\eightpoint\noindent
Trabb Pardo, Luis Isidoro, 2.
% volume C
\hsize=29pc
\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}}
\def\tension{\mathop{\rm tension}}
\def\controls{\mathop{\rm controls}}
\def\and{\,{\rm and}\,}
\bugonpage Cxi, line 4 (05/20/07)
\line{\hbox to\parindent{\bf\hbox to 1em{\hss27}\hss}%
\rm Recovery from Errors\leaders\hbox to 20pt{\kern13pt.\hss}\hfil
\hbox to 2em{\hss223}}
\bugonpage C11, line 11 (10/11/01)
\noindent
the area below the bar to the area above it equal to
$(\sqrt5+1)/2\approx1.61803$, the\cutpar
\bugonpage C29, illustration for exercise 4.11 (09/09/01)
\noindent
[points 2 and 5 should not be labeled twice]
\bugonpage C129, line 16 (02/21/08)
\ninepoint\beginsyntax
<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null
\endsyntax
\bugonpage C130, lines 13--15 from the bottom (09/13/03)
\ninepoint\noindent
point but not after it, the
nonempty one is duplicated in a similar way. A~basic path join
`$\to\controls u\and v\to$' specifies explicit control points that
override any direction specifiers that may immediately surround it.
\bugonpage C137, lines 5--7 from the bottom (02/21/08)
\danger Let's conclude this chapter by applying what we've learned about
paths to a real-life example. The {\sl Journal of Algorithms\/} was
published for many years by Academic Press, and its cover page carried the
following logo, which was designed\cutpar
\enddanger
\bugonpage C137, bottom two lines (02/21/08)
\ninepoint\noindent
A \MF\ program to produce this logo made it possible for the editors
of the journal to use it on letterheads in their correspondence.
Here is one way to do that job,\cutpar
% actually the MS now says "to write that program," and the
% correction therefore extends to page C138
\bugonpage C156, line 15 from the bottom (09/09/01)
\ninepoint\noindent
be the values they had upon entry to the group.)
\bugonpage C159, lines 12--15 (12/01/06)
\begintt
def --- = ..tension infinity.. enddef;
\endtt
it makes `$z_1\ddashto z_2$' become
`$z_1\to\tension\\{infinity}\to z_2$'.
The {replacement text} can be any sequence of tokens not including
`{\bf enddef}\kern1pt'; or it can include entire subdefinitions like
`{\bf def}~$\ldots$~{\bf enddef}\kern1pt', according to certain rules
that we shall explain later.
\bugonpage C171, line 16 from the bottom (06/18/02)
\tenpoint
\<loop>\is\<loop header>|:|\<loop text> {\tt endfor}
\bugonpage C179, line 7 from the bottom (09/09/01)
\ninepoint\noindent
next time \MF\ gets to the end of an input line, it will stop reading
from the\cutpar
\bugonpage C180, lines 14--16 (04/25/03)
\ninepoint\noindent
digits should be a
file name that works in essentially the same way on all installations of
\MF\kern-.03em\null. Uppercase letters are considered to be distinct from their
lowercase counterparts, on many systems.
\bugonpage C180, new line to be inserted 4 from the bottom (06/25/04)
\ninepoint\item\bull
When \MF\ is reading the symbolic tokens to be saved by {\bf save}.
\bugonpage C203, line 12 from the bottom (04/25/03)
\ninepoint\hbox to 237pt{point~3 at the right of the triangle
might digitize into a}
\bugonpage C213, line 26 (02/21/08)
\ninepoint\beginsyntax
<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null
\endsyntax
\bugonpage C226, line 23 (02/21/08)
\ninepoint\noindent following nineteen things will be mentioned:
\bugonpage C226, new line to be second from the bottom (02/21/08)
\ninepoint\indent|independent variables|\qquad(distinct numeric variables)
\bugonpage C246, line 12 (02/21/08)
\ninepoint\noindent
is performed whenever \MF\ uses the last two alternatives
in the definition\cutpar
\bugonpage C250, lines 13 and 14 (02/19/08)
\ninepoint\noindent\hbox to\parindent{\bf\hss19.3.\enspace}%
Yes, if and only if $n-{1\over2}$ is a nonnegative even integer.
\ (Because ambiguous values are rounded upwards.)
\bugonpage C250, line 12 from the bottom (04/25/03)
\ninepoint\noindent
following \<boolean primary>.)
\bugonpage C286, line 25 (09/09/01)
\ninepoint\noindent
problem; it would simply have put |ENDFOR| into the
replacement text of |asts|, because\cutpar
\bugonpage C289, line 7 (09/09/01)
\vskip-6pt\ninepoint\begintt
if if pair x: x>(0,0) else: false fi: A else: B fi.
\endtt
\bugonpage C292, line 10 from the bottom (09/09/01)
\ninepoint\noindent
be known by saying `{\bf if\/} known $p-q$: $p=q$ {\bf else}:~{\bf false}
{\bf fi}'; transforms could be handled\cutpar
\bugonpage C293, line 5 from the bottom (04/25/03)
\ninepoint\noindent
given angle~$\phi$. We can consider
the common angle~$\theta$ of $z_{1r}-z_{1l}$ and $z_{0r}-z_{0l}$ to be\cutpar
\bugonpage C315, line 15 from the bottom (04/25/03)
\ninepoint\noindent
`b' was shipped out.) \ The second letter,~`o', is placed
in a second little box adjacent\cutpar
\bugonpage C325, bottom line (02/29/08)
\rightline{\eightss--- CAROLUS LINN\AE US,
{\eightssi Philosophia Botanica\/}\enspace(1751)}
\bugonpage C332, line 4 from the bottom (04/25/03)
\ninepoint\noindent
(The proofsheet resolution will be 50 pixels per inch, because {\it cheapo\/}
has 200 pixels per\cutpar
\bugonpage C346, left column (06/18/02)
\eightpoint\noindent
\llap{*}|:|, 169, 171, 317--319.
\bugonpage C346, right column (07/09/01)
\eightpoint\noindent
\llap{*}|angle|, {\it29}, {\it67}, $\underline{72}$, {\it107},
{\it135}, 211, {\it238}.
\bugonpage C351, right column (02/21/08)
\eightpoint\noindent
independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226.
\bugonpage C352, right column (02/29/08)
\eightpoint\noindent
Linn\'e, Carl von (= Linn\ae us, Carolus), 325.
\bugonpage C355, right column (02/29/08)
\eightpoint\noindent
\llap{*}|save|, $\underline{155}$--$\underline{156}$, {\it160}, 173,
{\it178}, 180, 218,\par
\noindent\qquad{\it236}, {\it244}, {\it296}, 299.
% Volume D
\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
\def\to{\mathrel{.\,.}} % double dot, used only in math mode
\bugonpage Dvii, bottom two lines (02/29/08)
\eightpoint\noindent
corporates all of those changes.
I~now believe that the final bug was discovered on 27~December 2004,
and removed in version 2.718281.
The finder's fee has converged to \$327.68.
\hsize=35pc
\parindent=1em
\bugonpage D2, line $-17$ (02/27/08)
\ninepoint\noindent
{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
{\tt This\]is\]METAFONT,\]Version\]2.718281\char'23}\quad
$\{\,$printed when \MF\ starts$\,\}$
\bugonpage D2, lines 4 and 5 from the bottom (12/23/02)
\tenpoint\noindent
types; there are no `{\bf var}' parameters, except in the case of files
or in the system-dependent \\{paint\_row} procedure;
there are no tag fields on variant records; there are no \\{real} variables;
no procedures are declared local to other procedures.)
\bugonpage D16, new paragraph to follow line 26 (06/25/04)
The first line is special also because it may be read before \MF\ has
input a base file. In such cases, normal error messages cannot yet
be given. The following code uses concepts that will be explained later.
(If the Pascal compiler does not support non-local {\bf goto}, the
statement `{\bf goto} \\{final\_end}' should be replaced by something that
quietly terminates the program.)
\bugonpage D22, line 26 (09/11/07)
\noindent
ASCII codes $[\Oct{60}\to\Oct{71},%
\Oct{136},\Oct{141}\to\Oct{146}]$
must be printable.
\bugonpage D31, line 29 (06/25/04)
\noindent
This is the only nontrivial {\bf goto} statement in the
whole program. It is used when there is no\cutpar
\bugonpage D42, replacement for lines 8--13 (12/23/02)
\tenpoint\noindent\quad
Notice that if 64-bit integer arithmetic were available,
we could simply compute $(2^{29}*p+\nobreak q)\allowbreak\,
\hbox{\bf div}\,(2*q)$.
But when we are restricted to Pascal's 32-bit arithmetic we
must either resort to multiple-precision maneuvering
or use a simple but slow iteration. The multiple-precision technique
would be about three times faster than the code adopted here, but it
would be comparatively long and tricky, involving about sixteen
additional multiplications and divisions.
\bugonpage D43, line 20 (12/23/02)
\tenpoint\noindent
language or 64-bit substitute is advisable.
\bugonpage D44, lines 24--26 (12/23/02)
\tenpoint\noindent\quad
Once again it is a good idea to use 64-bit arithmetic if
possible; otherwise \\{take\_scaled} will use more than 2\% of the running time
when the Computer Modern fonts are being generated.
\bugonpage D58, line 16 from the bottom (06/25/04)
\ninepoint\noindent
\hskip5em{\bf if\/} $\\{j\_random}=0$ {\bf then} \\{new\_randoms}
{\bf else} \\{decr}(\\{j\_random})
\bugonpage D63, line 21 (06/25/04)
Locations of \\{mem} between \\{mem\_min} and \\{mem\_top} may be dumped as
part
of preloaded base\cutpar
\bugonpage D75, line 13 (06/25/04)
\ninepoint\noindent
\quad{\bf define} $\\{fi\_or\_else}=2$\quad$\{\,$delimiters for conditionals
{\bf elseif\/}, {\bf else}, {\bf fi})$\,\}$
\bugonpage D76, line 5 (06/25/04)
\ninepoint\noindent
\quad{\bf define} $\\{type\_name}=30$\quad$\{\,$declare a type
({\bf numeric}, {\bf pair}, etc.)$\,\}$
\bugonpage D77, line 16 (06/25/04)
\ninepoint\noindent
\quad{\bf define} $\\{lig\_kern\_token}=76$\quad$\{\,$the operators
`{\bf kern}' and `\.{=:}' and `\.{=:\char'174}', etc.$\,\}$
\bugonpage D98, bottom two lines (06/25/04)
\noindent
They consist of zero or more parameter tokens followed
by a code for the type of macro.
\bugonpage D101, line 3 (06/25/04)
\noindent
\MF\ user assigns a type to a variable like \.{x20a.b} by saying, for
example, `\.{boolean} \.{x[]a.b}'.
\bugonpage D102, lines 10--16 (06/25/04)
\noindent
variable that is relevant
when no attributes are attached to the parent. The \\{attr\_head} node
has the fields of either
a value node, a subscript node, or an attribute node, depending on what
the parent would be if it were not structured; but the subscript and
attribute fields are ignored, so it effectively contains only the data of
a value node. The \\{link} field in this special node points to an attribute
node whose \\{attr\_loc} field is zero; the latter node represents a collective
subscript `\.{[]}' attached to the parent, and its \\{link} field points to
the first non-special attribute node (or to \\{end\_attr} if there are none).
\bugonpage D102, lines 7 and 8 from the bottom (06/25/04)
\noindent
$\\{subscr\_head}(\\{q1})=\\{qq1}$;
\\{qq} is a three-word ``attribute-as-value'' node with
$\\{type}(\\{qq})=\break\\{numeric\_type}$
(assuming that \.{x5} is numeric, because \\{qq} represents `\.{x[]}'
with no further\break
attributes), $\\{name\_type}(\\{qq})=\\{structured\_root}$,
$\\{attr\_loc}(\\{qq})=0$, $\\{parent}(\\{qq})=p$,\cutpar
\bugonpage D103, line 6 (06/25/04)
\noindent
The value of variable \.{x20b}
appears in node~$\\{qqq2}=\\{link}(\\{qqq1})$, as you can well imagine.
Similarly, the value of `\.{x.a}' appears in node $\\{q2}=\\{link}(\\{q1})$,
where $\\{attr\_loc}(\\{q2})=h(a)$ and $\\{parent}(\\{q2})=p$.
\bugonpage D114, line 12 (06/25/04)
\noindent
\qquad Such save stack entries are generated by \&{save} commands.
\bugonpage D120, line 3 (06/25/04)
\ninepoint\noindent
[delete the line `The code here \dots', since the
code {\it doesn't\/} use the stated fact]
\bugonpage D126, line 10 (06/25/04)
\tenpoint\noindent
If $\theta_0$ is supposed to have a given value $E_0$, we simply
define $C_0=1$, $D_0=0$, and $R_0=E_0$.\cutpar
\bugonpage D138, line 11 from the bottom (10/26/06)
\tenpoint\noindent
for the bisected interval are $z'_0=z_0$
and $z''_0=z_0+(Z'_1+Z'_2+\cdots+Z'_n)/2^{l+1}$.
\bugonpage D142, line 3 (06/25/04)
\tenpoint\noindent
out to hold if and only if $x_0\le x_1$ and $x_2\le x_3$, and either
$x_1\le x_2$ or $(x_1-x_2)^2\le(x_1-x_0)(x_3-x_2)$.\cutpar
\bugonpage D142, line 8 (10/26/06)
\tenpoint\noindent\quad
For example, if we start with $(x_1-x_0,x_2-x_1,x_3-x_2)=
(X_1,X_2,X_3)=(7,-16,39)$, the\cutpar
\bugonpage D142, lines 21--23 (06/25/04)
\tenpoint\noindent
monotonic
cubic, then $B(x_0,x_1,x_2,x_3;{1\over2})$ is always between
$.06[x_0,x_3]$ and $.94[x_0,x_3]$; and it is impossible for $\bar x$
to be within~$\epsilon$ of such a number. Contradiction!
(The constant .06 is actually $(2-\sqrt3\,)/4$; the worst case
occurs for polynomials like $B(0,2-\sqrt3,1-\sqrt3,3;t)$.)
\bugonpage D177, line 18 (06/25/04)
\ninepoint\noindent
$\\{cur\_x},\\{cur\_y}$: \\{scaled};\quad$\{\,$outputs of \\{skew},
\\{unskew}, and a few other routines$\,\}$
\bugonpage D182, lines 27--29 (06/25/04)
\noindent
{\bf399.\quad}If
the segment numbers on the cycle are $t_1$, $t_2$, \dots, $t_m$,
and if $m\le\\{max\_quarterword}$,
we have $t_{k-1}\le t_k$ except for at most one value of~$k$. If there are
no exceptions, $f$ will point to $t_1$; otherwise it will point to the
exceptional~$t_k$.
\bugonpage D184, line 18 (12/21/02)
\ninepoint\noindent
\qquad\\{chopped}: \\{integer};\quad
$\{\,$positive if data truncated, negative if data dangerously large$\,\}$
\bugonpage D184, line 25 (12/21/02)
\ninepoint\noindent
\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>0)\land(\\{chopped}=0)$
{\bf then} \\{xy\_round};
\bugonpage D184, line 27 (12/21/02)
\ninepoint\noindent
\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>\\{unity})\land
(\\{chopped}=0)$ {\bf then} \\{diag\_round};
\bugonpage D184, line 32 (12/21/02)
\ninepoint\noindent
\qquad{\bf if\/} $(\\{internal}[\\{autorounding}]\le0)\lor(\\{chopped}\ne0)$
{\bf then} \\{print\_spec}({\tt\char`",\]after\]subdivision\char`"})
\bugonpage D185, lines 15--19 (12/21/02)
\ninepoint\noindent
\quad{\bf define} \\{procrustes}({\tt\char`#})${}\equiv{}${\bf if\/}
$\\{abs}(\.\#)\ge\\{dmax}$ {\bf then}\par\noindent
\qquad\qquad\quad{\bf if\/} $\\{abs}(\.\#)>\\{max\_allowed}$ {\bf then}\par
\noindent\qquad\qquad\qquad{\bf begin} $\\{chopped}\gets1$;\par\noindent
\qquad\qquad\qquad{\bf if\/} $\.\#>0$ {\bf then} $\.\#\gets\\{max\_allowed}$
{\bf else} $\.\#\gets-\\{max\_allowed}$;\par\noindent
\qquad\qquad\qquad{\bf end}\par\noindent
\qquad\qquad\quad{\bf else if\/} $\\{chopped}=0$ {\bf then}
$\\{chopped}\gets-1$
\bugonpage D185, old line 22 (12/21/02)
\ninepoint\noindent
\quad$p\gets\\{cur\_spec}$; $k\gets1$; $\\{chopped}\gets0$;
$\\{dmax}\gets\\{half}(\\{max\_allowed})$;
\bugonpage D185, old line 28 (12/21/02)
\ninepoint\noindent
\quad{\bf if\/} $\\{chopped}>0$ {\bf then}
\bugonpage D196, lines 3--8 (06/25/04)
The first job is to fix things so that $x(t)$ plus the horizontal
pen offset is an integer multiple of the
current ``granularity'' when the derivative $x'(t)$ crosses through zero.
The given cyclic path contains regions where $x'(t)\ge0$ and regions
where $x'(t)\le0$. The \\{quadrant\_subdivide} routine is called into action
before any of the path coordinates have been skewed, but some of them
may have been negated. In regions where $x'(t)\ge0$ we have $\\{right\_type}=%
\\{first\_octant}$ or $\\{right\_type}=\\{eighth\_octant}$; in regions where
$x'(t)\le0$,
we have $\\{right\_type}=\\{fifth\_octant}$ or $\\{right\_type}=\\{fourth%
\_octant}$.
\bugonpage D196, lines 15 and 16 (06/25/04)
\noindent
current pen might be unsymmetric in such a way that $x$ coordinates
should round dif-\break ferently in different parts of the curve.
These considerations imply that round$(x_0)$\cutpar
\bugonpage D200, line 4 (06/25/04)
\noindent
and that there are similar ways to address other important offsets.\par
\smallskip\ninepoint
[Also delete the definitions of \\{north\_south\_edge}, etc.,
on lines 11--15; those definitions are never used.]
\bugonpage D212, line 18 (06/25/04)
\noindent
at $(x_0,y_0)$ and ends at $(x_1,y_1)$, it's possible to
prove (by induction on the length of the truncated\cutpar
\bugonpage D216, bottom line (06/25/04)
\noindent
we list it twice (with coordinates
interchanged, so as to make the second octant look like\cutpar
\bugonpage D217, lines 2--10 (06/25/04)
\noindent
$$\tabskip\centering
\halign to\hsize{$\hfil#\;\mapsto\;{}$\tabskip=0pt&
$#\hfil$&\quad in the #\hfil\tabskip\centering\cr
w_2\;w_2\;w_2&(-5,6)\;(-5,6)\;(-5,6)\cr
\noalign{\vskip\belowdisplayskip
\vbox{\noindent\strut as the list of transformed and skewed offsets to use
when curves that travel in the second octant. Similarly, we will have\strut}
\vskip\abovedisplayskip}
w_2\;w_2\;w_2&(7,-6)\;(7,-6)\;(7,-6)&third;\cr
w_2\;w_2\;w_3\;w_3&(-7,1)\;(-7,1)\;(-3,2)\;(-3,2)&fourth;\cr
w_3\;w_3\;w_3&(3,-2)\;(3,-2)\;(3,-2)&fifth;\cr
w_3\;w_3\;w_0\;w_0&(-3,1)\;(-3,1)\;(1,0)\;(1,0)&sixth;\cr
w_0\;w_0\;w_0&(1,0)\;(1,0)\;(1,0)&seventh;\cr
w_0\;w_0\;w_0&(-1,1)\;(-1,1)\;(-1,1)&eighth.\cr}$$
\bugonpage D218, lines 2 and 3 (06/25/04)
\noindent
count followed by pointers to the eight offset lists, followed
by an indication of the pen's range of values.
\bugonpage D218, line 15 (06/25/04)
The \\{link} field of a pen header node should be \\{null} if and only if
the pen is a single point.
\bugonpage D227, line 11 (06/25/04)
\noindent
\\{endpoint}. The cubics all have
monotone-nondecreasing $x(t)$ and $y(t)$.
\bugonpage D228, lines 4--7 from the bottom (06/25/04)
\noindent
In odd-numbered octants, the numerator and denominator of this fraction
will be nonnegative; in even-numbered octants they will both be nonpositive.
Furthermore we always have $0=s_0\le s_1\le\cdots\le s_n=\infty$. The goal of
\\{offset\_prep} is to find an offset index~$k$ to associate with
each cubic, such that the slope $s(t)$ of the cubic satisfies
\bugonpage D231, line 7 (06/25/04)
\ninepoint\noindent
\quad{\bf if\/} $\\{abs}(\\{du})\ge\\{abs}(\\{dv})$ {\bf then}\quad $\{\,
s_{k-1}\le1$ or $s_k\le1\,\}$
\bugonpage D231, line 16 (06/25/04)
\noindent
and return towards $s_{k-1}$ or $s_k$,
respectively, yielding another solution of $(*)$.
\bugonpage D246, line 4 from the bottom (06/25/04)
\noindent
dinate fields. Hence, for example,
the point $\bigl($$\\{x\_coord}(p)-\\{left\_v}(q),\\{y\_coord}(p)+%
\\{right\_u}(p)$$\bigr)$
also\cutpar
\bugonpage D248, line 24 (06/25/04)
\ninepoint\noindent
\qquad{\bf else begin} $\\{beta}\gets\\{minor\_axis}$;
$\\{gamma}\gets\\{major\_axis}$;
$\\{theta}\gets0$;
\bugonpage D256, line 2 from the bottom (06/25/04)
\noindent
we have $2^lu_{\min}=2^lu_0+U_{\min}$, etc.; the condition for overlap
reduces to
\bugonpage D261, line 5 (06/25/04)
\ninepoint\noindent
\\{tol}: \\{integer};\quad$\{\,$bound on the uncertainty in the overlap test$\,\}$
\bugonpage D262, lines 26 and 27 (06/25/04)
\ninepoint\noindent
\qquad\quad$\\{uv}\gets\\{uv}+\\{int\_packets}$;\quad$\{\,$switch
from \\{l\_packets} to \\{r\_packets}$\,\}$\par\noindent
\qquad\quad$\\{decr}(\\{cur\_tt})$;
$\\{xy}\gets\\{xy}-\\{int\_packets}$;\quad$\{\,$switch
from \\{r\_packets} to \\{l\_packets}$\,\}$
\bugonpage D262, line 11 from the bottom (06/25/04)
\ninepoint\noindent
\qquad$\\{xy}\gets\\{xy}+\\{int\_packets}$;\quad$\{\,$switch
from \\{l\_packets} to \\{r\_packets}$\,\}$
\bugonpage D274, line 15 from the bottom (06/25/04)
\ninepoint\noindent
\qquad\qquad{\bf begin if\/} $\\{serial\_no}>\\{el\_gordo}-\\{s\_scale}$
{\bf then}\par\noindent
\qquad\qquad\quad$\\{overflow}(\.{"independent\]variables"},
\\{serial\_no}\mathbin{\hbox{\bf div}}\\{s\_scale})$;\par\noindent
\qquad\qquad$\\{type}(\#)\gets\\{independent}$;
$\\{serial\_no}\gets\\{serial\_no}+\\{s\_scale}$;
$\\{value}(\#)\gets\\{serial\_no}$;
\bugonpage D309, line 21 (06/25/04)
\noindent
{\bf670.\quad}We go to \\{restart} instead of to \\{switch},
because we might enter \\{token\_state} after the error\cutpar
\bugonpage D314, line 6 from the bottom (06/25/04)
\noindent
\\{macro\_def} or \\{iteration}).
\bugonpage D330, line 1 (06/25/04)
\noindent
{\bf728.\quad}A {\bf suffix} or {\bf text} parameter will have been scanned as
a token list pointed to by \\{cur\_exp},\cutpar
\bugonpage D354, lines 15 and 16 from the bottom (06/25/04)
\noindent\hangindent 3em
$\\{cur\_type}=\\{unknown\_boolean}$ means that \\{cur\_exp} points to a
capsule node that is in
a ring of equivalent booleans whose value has not yet been defined.
\bugonpage D354, lines 11 and 12 from the bottom (06/25/04)
\noindent\hangindent 3em
$\\{cur\_type}=\\{unknown\_string}$ means that \\{cur\_exp} points to a
capsule node that is in
a ring of equivalent strings whose value has not yet been defined.
\bugonpage D354, lines 7 and 8 from the bottom (06/25/04)
\noindent\hangindent 3em
$\\{cur\_type}=\\{unknown\_pen}$ means that \\{cur\_exp} points to a
capsule node that is in
a ring of equivalent pens whose value has not yet been defined.
\bugonpage D355, lines 1 and 2 (06/25/04)
\noindent\hangindent 3em
$\\{cur\_type}=\\{unknown\_path}$ means that \\{cur\_exp} points to a
capsule node that is in
a ring of equivalent paths whose value has not yet been defined.
\bugonpage D355, lines 5 and 6 (06/25/04)
\noindent\hangindent 3em
$\\{cur\_type}=\\{unknown\_picture}$ means that \\{cur\_exp} points to a
capsule node that is in
a ring of equivalent pictures whose value has not yet been defined.
\bugonpage D355, lines 21 and 22 (06/25/04)
\noindent
$\\{cur\_type}=\\{token\_list}$ means that \\{cur\_exp} points to a linked list
of tokens.
\bugonpage D356, lines 2--3 (06/25/04)
\noindent
nodes have $\\{name\_type}=\\{capsule}$,
and their \\{type} field is one of the possibilities for \\{cur\_type}
listed above.
Also $\\{link}\le\\{void}$ in capsules that aren't part of a token list.
\bugonpage D368, line 13 (06/25/04)
\ninepoint\noindent
\qquad\\{my\_var\_flag}: $0\to\\{max\_command\_code}$;\quad$\{\,$initial
value of \\{var\_flag}$\,\}$
\bugonpage D378, line 9 from the bottom (06/25/04)
\ninepoint\noindent
\qquad\quad{\bf begin} $\\{cur\_type}\gets\\{known}$;
$\\{cur\_exp}\gets0$;
$\\{free\_node}(q,\\{dep\_node\_size})$;
\bugonpage D380, line 12 (06/25/04)
\ninepoint\noindent
\qquad\qquad{\bf begin} $\\{type}(r)\gets\\{known}$;
$\\{value}(r)\gets0$;
$\\{free\_node}(p,\\{dep\_node\_size})$;
\bugonpage D390, lines 2 and 3 (06/25/04)
\noindent
by a previous operation. We must maintain
the value of $\\{right\_type}(q)$ in cases such as\break
`|..\\{curl2\}z\{0,0\}..|'.
\bugonpage D437, line 1 (06/25/04)
\noindent
{\bf996.\quad}And \\{do\_assignment} is similar to \\{do\_equation}:
\bugonpage D439, line 10 (06/25/04)
\ninepoint\noindent
\qquad{\bf begin} $\\{nonlinear\_eq}(v,\\{cur\_exp},\\{false})$;
$\\{cur\_type}\gets t$;
{\bf goto} \\{done};
\bugonpage D443, line 11 (06/25/04)
\ninepoint\noindent
\\{done}: {\bf if\/} $\\{eq\_type}(x)\mathbin{\hbox{\bf mod}}\\{outer\_tag}
\ne\\{tag\_token}$ {\bf then}
$\\{clear\_symbol}(x,\\{false})$;
\bugonpage D452, line 9 (06/25/04)
\noindent
though they don't necessarily correspond to primitive tokens.
\bugonpage D476, line 12 from the bottom (06/25/04)
\ninepoint\noindent
\quad{\bf if\/} $\\{nl}-\\{skip\_table}[c]>128$ {\bf then}
\bugonpage D483, line 7 (06/25/04)
\ninepoint\noindent
\quad$\\{max\_tfm\_dimen}\gets16\ast\\{internal}[\\{design\_size}]-1
-\\{internal}[\\{design\_size}]\mathbin{\hbox{\bf div}}\Oct{10000000}$;
\bugonpage D483, lines 15--17 (06/25/04)
\ninepoint\noindent
\qquad{\bf if\/} $x>0$ {\bf then}
$x\gets\\{max\_tfm\_dimen}$ {\bf else}
$x\gets-\\{max\_tfm\_dimen}$;\par\noindent
\qquad{\bf end};\par\noindent
\quad$x\gets\\{make\_scaled}(x\ast16,\\{internal}[\\{design\_size}])$;
\bugonpage D496, line 2 (06/25/04)
\noindent
a pointer to
an edge structure. Its mission is to describe the positive pixels
in \.{GF} form,\cutpar
\bugonpage D500, line 16 (06/25/04)
\ninepoint\noindent
\quad$\\{selector}\gets\\{old\_setting}$;
$\\{gf\_out}(\\{cur\_length})$;
$\\{gf\_string}(0,\\{make\_string})$;
$\\{decr}(\\{str\_ptr})$;
\bugonpage D506, lines 8--10 (06/25/04)
\noindent
\MF\ it says,
for example, `\.{(preloaded base=plain 1984.2.29)}', showing the year,
month, and day that the base file was created. We have $\\{base\_ident}=0$
before \MF's tables are loaded.
\bugonpage D514, line 14 from the bottom (06/25/04)
\noindent
\.{CMMF}, should also be provided for commonly used bases such as \.{cmbase}.
% volume E
\hsize=29pc
\newbox\shorthyf \setbox\shorthyf=\hbox{-\kern-.05em}
\mathchardef\period=`\.
{\catcode`\-=\active \global\def-{\copy\shorthyf\mkern3.9mu}
\catcode`\.=\active \global\def.{\period\mkern3mu}}
\def\8#1{\mathrel{\mathcode`\.="8000 \mathcode`\-="8000
#1\unkern}} % `..' and `--'
\bugonpage E1, line 3 (01/06/06)
\tenpoint\noindent
Zillions of alphabets can be generated by the programs in this book.
All\cutpar
\bugonpage E6, lines 16--19 (12/29/04)
\textindent\bull
{\it square\_dots\/} tells whether dots should be square, not rounded;\smallskip
\textindent\bull
{\it hefty\/} tells whether weight-reducing strategies should be used;\smallskip
\textindent\bull\hangindent\parindent
{\it monospace\/} tells whether the characters should all be forced to
have the same width;
\bugonpage E7, line 11 (12/21/02)
\ninepoint\indent
\\{hair}, \\{vair}, \\{stem}, \\{curve}, \\{ess}, \\{flare}, \\{dot\_size},
\\{bar}, \\{slab},
\bugonpage E7, line 14 (12/21/02)
\ninepoint\indent
\\{crisp}, \\{tiny}, \\{fine};
\medskip\noindent
and \\{thin\_join} should not be less than \\{fine}.
\bugonpage E19, line 19 (11/07/01)
\tenpoint
\line{\\{cap\_notch\_cut}\hskip 0pt plus1.5fil46/36\hfil31/36\hfil25/36\hfil
24/36\hfil22/36\hskip0pt plus3fil25/36}
\bugonpage E41, line 8 (12/21/02)
\ninepoint\noindent\mathchardef\AM="2026 % ampersand
\quad$\\{extra\_endchar}\gets\\{extra\_endchar}\AM
\.{\char`"charcode:=charcode+code\_offset;"}$;
\bugonpage E53, line 7 (12/21/02)
\def\frac#1/#2{\leavevmode\kern.1em
\raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
\ninepoint\noindent
{\bf numeric} \\{mid\_thickness};
$\\{mid\_thickness}={\rm Vround}$ \frac1/3[$\\{vair},\\{stem}$];
\bugonpage E125, line 6 from the bottom (07/10/05)
\ninepoint\noindent
$\\{top}\,y_1=\\{top}\,y_6=h$; $z_2=.5[z_3,z_1]+\\{bend}$;
\bugonpage E125, line 3 from the bottom (07/10/05)
\ninepoint\noindent
{\bf draw} $z_1-\\{flourish\_change}\{\\{up}\}+(0,.15\\{asc\_height})
\{\\{up}\}$\par
\line{\quad$\8{...}\{\\{right}\}(z_1+(2u,0))\8{---}z_6\8{...}\{\\{down}\}z_7$;
\hfil\% upper bar}
\bugonpage E146, also pages 164 and 540 (02/08/03)
\eightpoint\noindent
[The labels on the new illustrations of beta, omega, and spadesuit
are too large, and the resolution of the shapes is too small.]
\bugonpage E147, line 11 from the bottom (04/23/04)
\ninepoint\noindent
$x_0=x_1=x_9$; $\\{lft}\,x_{0r}={\rm hround}(1.5u-.5\\{hair})$;
$x_2=x_4=x_6=x_8=.5w-.25u$;
\bugonpage E147, line 8 from the bottom (04/23/04)
\ninepoint\noindent
$y_5=.5[y_4,y_6]$; $\\{top}\,y_{6r}-\\{bot}\,y_{4r}=\\{vstem}+\\{eps}$;
$\\{bot}\,y_{8r}=-\\{oo}$; $y_7=y_9=.55[y_6,y_8]$;
\bugonpage E149, line 8 from the bottom (04/23/04)
\ninepoint\noindent
$y_5+.1\\{x\_height}=y_7=.5[y_6,y_8]$; $\\{bot}\,y_{6r}=-\\{oo}$;
\bugonpage E157, line 11 (02/29/08)
\ninepoint\noindent
\line{{\bf filldraw} $z_{1l}\8{--}z_{2l}\8{...}(x_3,y_{2l})\8{...}z\8{--}
z_{1r}\8{--}\rm cycle$;\hfil\% stem}
\bugonpage E161, line 7 from the bottom (04/23/04)
\ninepoint\noindent
$\\{top}\,y_{1r}=\\{x\_height}+\\{oo}$; $y_2=y_4=.5[y_1,y_3]$;
$\\{bot}\,y_{3r}=-\\{oo}$;
\bugonpage E209, line 3 (12/29/04)
\ninepoint
\rightline{\% This lowercase italic alphabet was prepared by D. E. Knuth
in December, 1979,}
\bugonpage E377, lines 3 and 4 from the bottom (12/22/02)
\ninepoint\noindent
\qquad {\bf path} \\{p\_}; $\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...}
\\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]\8{...}z_{@2}$\par\noindent
\qquad\quad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}%
{\rm cycle}$;\par\noindent
\qquad{\bf if\/} $(y_{\$\$}>y_\$) \ne ({\rm ypart}\,\hbox{\bf precontrol}\,1
\,\hbox{\bf of\/}\,\\{p\_} > {\rm ypart}\,\hbox{\bf postcontrol}\,1\,
\,\hbox{\bf of\/}\,\\{p\_})$:\par\noindent
\qquad\quad$\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...}
\\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]$\par\noindent
\qquad\qquad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}%
{\rm cycle}$;\ {\bf fi}\par\noindent
\line{\qquad {\bf filldraw} \\{p\_};\hfil \% arm and beak}
\bugonpage E489, bottom line (06/25/04)
\ninepoint\noindent
{\bf labels}$(1,2,3,4,5,6)$; {\bf endchar};\hfil\break
[Labels `\.5' and `\.6' should also be added to
the lower illustration on page E488.]
\bugonpage E545, line 11 from the bottom (12/29/04)
The most important general routine in |cmbase| is probably the {\it pos}\cutpar
\bugonpage E551, line 3 from the bottom (12/29/04)
\noindent quantities needed in the |calu|
programs are also established at this time.
\bugonpage E577, right column (12/23/02)
\eightpoint\noindent
\\{p\_}\kern1pt, 305, 377.\par\noindent
{\bf padded}, 103--111, 117--121, $\underline{549}$.
\bugonpage E578, left column (12/23/02)
\eightpoint\noindent
{\bf postcontrol}, 347, 377.\par\noindent
{\bf precontrol}, 347, 377.
\bye
|