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
|