Section Page

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 2. The character set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 10 3. Input and output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13 4. String handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 19 5. On-line and off-line printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 24 6. Reporting errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 30 7. Arithmetic with scaled dimensions . . . . . . . . . . . . . . . . . . . . . . . . 99 38 8. Packed data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 42 9. Dynamic memory allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 44 10. Data structures for boxes and their friends . . . . . . . . . . . . . . . 133 50 11. Memory layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 58 12. Displaying boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 62 13. Destroying boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 69 14. Copying boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 71 15. The command codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 73 16. The semantic nest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 77 17. The table of equivalents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 81 18. The hash table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 102 19. Saving and restoring equivalents . . . . . . . . . . . . . . . . . . . . . . . . 268 109 20. Token lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 115 21. Introduction to the syntactic routines . . . . . . . . . . . . . . . . . . . . 297 119 22. Input stacks and states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 121 23. Maintaining the input stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 131 24. Getting the next token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 134 25. Expanding the next token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 144 26. Basic scanning subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 155 27. Building token lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 174 28. Conditional processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 181 29. File names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 188 30. Font metric data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 196 31. Device-independent file format . . . . . . . . . . . . . . . . . . . . . . . . . . 583 214 32. Shipping pages out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 220 33. Packaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644 239 34. Data structures for math mode . . . . . . . . . . . . . . . . . . . . . . . . . 680 249 35. Subroutines for math mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699 258 36. Typesetting math formulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719 265 37. Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768 285 38. Breaking paragraphs into lines . . . . . . . . . . . . . . . . . . . . . . . . . . 813 302 39. Breaking paragraphs into lines, continued . . . . . . . . . . . . . . . . 862 319 40. Pre-hyphenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891 330 41. Post-hyphenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900 334 42. Hyphenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919 344 43. Initializing the hyphenation tables . . . . . . . . . . . . . . . . . . . . . . . 942 350 44. Breaking vertical lists into pages . . . . . . . . . . . . . . . . . . . . . . . . 967 360 45. The page builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980 366 46. The chief executive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029 383 47. Building boxes and lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055 395 48. Building math lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136 417 49. Mode-independent processing . . . . . . . . . . . . . . . . . . . . . . . . . . 1208 435 50. Dumping and undumping the tables . . . . . . . . . . . . . . . . . . . . 1299 455 51. The main program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1330 465 52. Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338 470 53. Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1340 472 54. System-dependent changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379 481 55. Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380 482