1 Before We Get Started.- 1.1 What Is TEX?.- 1.2 Complexity and Power of Systems.- 1.3 Summary.- 2 Processing with TEX.- 2.1 Properties and Capabilities of TEX.- 2.1.1 A Convention About Input and Output of TEX.- 2.1.2 The Structure of TEX's Input.- 2.1.3 The Extensibility of TEX.- 2.1.4 Processing a Document with TEX.- 2.2 Macros, Macro Packages and Formats.- 2.2.1 Some Basic Terminology.- 2.2.2 The Different Meanings of the Word TEX.- 2.2.3 Standard Macro Packages (Formats) of TEX.- 2.3 Files Accessed by TEX.- 2.4 Preparations for Using TEX Efficiently.- 2.4.1 Maintaining Your Own TEX Notebook and File.- 2.4.2 Choosing a Good Text Editor Is Important.- 2.5 Utilities.- 2.6 Information about TEX.- 2.6.1 The Original Books Describing TEX and METAFONT.- 2.6.2 TUG, the TEX Users Group.- 2.6.3 TEX is a Public Domain Software Product.- 2.6.4 Electronic Mailing Lists.- 2.7 Entering Text.- 2.7.1 Letters and Digits.- 2.7.2 Special Characters in TEX.- 2.7.3 Minus Sign, Hyphen, En-Dash and Em-Dash.- 2.8 The Space, Tab and End-of-Line Characters.- 2.8.1 Related Definitions.- 2.8.2 Rules Governing Spaces, Tabs and End-of-Line Characters.- 2.9 Organizing Your TEX Sources.- 2.10 How to Experiment with TEX.- 2.11 Summary.- 3 Registers, Numbers, and Counter Registers In Particular.- 3.1 Registers in General.- 3.2 Register Arithmetic.- 3.2.1 Assignments of Values to Registers.- 3.2.2 Arithmetic in TEX.- 3.3 Numbers and Counter Registers in TEX.- 3.3.1 Numerical Constants.- 3.3.2 Characters, Character-Based Constants, etc.- 3.3.3 The Different Notations of Numerical Constants.- 3.3.4 Printing Numerical Values, number, romannumeral.- 3.3.5 Printing a Character Based on Its Character Code, char, PrintAlph.- 3.3.6 Counter Registers, newcount.- 3.3.7 Assign a Name to a Counter Register, countdef.- 3.3.8 Arithmetic with Counter Registers.- 3.3.9 Modulo Arithmetic, the Definition of Macro ModuloOneAdvanceNumCond.- 3.3.10 Counter Parameters.- 3.3.11 Numerical Conditionals, ifnum, ifcase.- 3.3.12 Computing the Absolute Value.- 3.3.13 Modulo Computation, IModN.- 3.3.14 Compute the Value in a Certain Position, ValueOfDecimalPosition.- 3.3.15 The Definition of Macro LargestDecimalPlace and Its Use.- 3.3.16 Printing a Number in Textual Form.- 3.4 Generic Counter Register Macros.- 3.4.1 Printing Counter Registers, arabic, roman, Roman, alph, Alph.- 3.4.2 Macros to Administer Counter Registers.- 3.4.3 The Definition of Macro ReassignCounter.- 3.4.4 Examples Using the Counter Register Macros.- 3.5 Summary.- 4 More on Registers, Dimensions.- 4.1 Dimensions and Dimension Units.- 4.1.1 "Absolute" Dimension Units.- 4.1.2 "Font Relative" Dimension Units.- 4.1.3 Writing Dimensions in TEX.- 4.1.4 "Infinite" Dimension Units.- 4.1.5 True Dimensions and Global Magnification.- 4.1.6 Saving Tokens When Writing Dimension Values.- 4.1.7 Dimension Registers, dimen.- 4.1.8 The Largest Legal Dimension, maxdimen.- 4.1.9 Dimension Parameters.- 4.1.10 A Rounding Error Problem.- 4.1.11 Computing an Absolute Dimension.- 4.2 Glue Registers.- 4.2.1 Glue Registers in General.- 4.2.2 Glue Parameters.- 4.3 Math Glue Registers.- 4.4 Mixing Counter, Dimension and Glue Registers.- 4.5 Box Registers.- 4.5.1 Allocating a New Box Register, newbox.- 4.5.2 Box Register States.- 4.5.3 Retrieving the Content of a Box Register, box, copy.- 4.5.4 Loading Box Registers, setbox.- 4.5.5 Exchanging Two Box Registers, SwapBoxRegs.- 4.5.6 Clearing a Box Register, ClearBoxReg.- 4.5.7 Conditionals Related to Box Registers, ReportBoxType.- 4.5.8 Accessing the Dimensions of a Box Register's Content, ht, dp, wd.- 4.5.9 Modifying the Dimensions of a Box Stored in a Box Register.- 4.5.10 Arithmetic with Dimensions of Box Registers, AdvanceBoxDimension, OverallSize.- 4.5.11 Dimensions of Void Box Registers.- 4.5.12 Generating an Empty Box, EmptyBox.- 4.5.13 Setting All Dimensions of a Box Register to Zero, ZeroBox, ZeroBoxOut.- 4.5.14 Dumping the Contents of a Box Register into the Log File: showbox, showboxdepth, showboxbreadth.- 4.5.15 The Definitions of Macros ShowBoxAll, ShowBoxDepthOne and ShowBoxDepthTwo.- 4.5.16 Grouping and Box Register Dimensions.- 4.6 Summary of the new... Macros.- 4.6.1 A List of All new... Macros.- 4.6.2 outer-free Definitions of the new... Macros.- 4.6.3 Name Conflicts in new... Macros.- 4.7 Dumping All Parameters into the Logfile.- 4.8 Summary.- 5 Glue, Leaders and Rules.- 5.1 Basic Properties of Glue.- 5.2 Horizontal Glue.- 5.2.1 Glue Without Stretch- and Shrinkability, Negative Glue.- 5.2.2 Getting Glue to Stretch and Shrink.- 5.2.3 Stretching, Overstretching, Shrinking and Overshrinking of Glue.- 5.3 Badness of Boxes.- 5.3.1 Computing the Badness.- 5.3.2 Computing the Badness When Shrinking Occurs.- 5.3.3 The Counter Parameter badness.- 5.3.4 Examples of TEX's Badness Computations.- 5.3.5 Overfull and Underfull Boxes, hbadness, vbadness.- 5.3.6 The Marking of Overfull Horizontal Boxes, overfullrule.- 5.3.7 Dimension Parameters hfuzz, vfuzz.- 5.3.8 Stretching of Multiple Glues.- 5.4 Glue with Infinite Stretchability and Shrinkability.- 5.4.1 "Infinite" Units of Dimension.- 5.4.2 More on the Use of Infinite Units.- 5.4.3 hfil, hfill, hss, hfilneg.- 5.4.4 The Hierarchy in the Dimensions Units of the Stretchability and Shrinkability of Glues.- 5.4.5 Examples Involving Glue with Infinite Stretchabilities.- 5.4.6 Glue Is a Discardable Item.- 5.4.7 Zero Glue Versus No Glue.- 5.4.8 Kern, kern.- 5.4.9 Macros of the Plain Format Relating to Horizontal Glue and Kern.- 5.5 Vertical Glue, vskip.- 5.5.1 Implicit Vertical Glues, Glue Parameters.- 5.5.2 Macros of the Plain Format Generating Vertical Glue, smallskip, medskip, bigskip.- 5.5.3 vfil, vfill, vss, vfilneg.- 5.5.4 Examples of Explicit Vertical Glue.- 5.6 Leaders.- 5.6.1 Leader Definitions Based on Rules, "Visible Glue".- 5.6.2 Leaders Based on Boxes.- 5.6.3 Leader Example Macros.- 5.6.4 Sample Figure Source Codes.- 5.6.5 Leader Related Macro Definitions in the Plain Format of TEX.- 5.7 Rules.- 5.7.1 Rule Dimensions.- 5.7.2 Keywords height, depth and width.- 5.7.3 Examples of Rules.- 5.8 Penalties.- 5.8.1 Penalty Values.- 5.8.2 Macros Involving Penalties.- 5.9 Summary.- 6 Boxes.- 6.1 Basics About Boxes, Box Types.- 6.1.1 Coding a Box.- 6.1.2 Reference Point and Dimensions of Boxes.- 6.2 Horizontal Boxes (Hboxes).- 6.2.1 Making Boxes Visible.- 6.2.2 The Contents of an Hbox.- 6.2.3 The Building of an Hbox.- 6.2.4 Implicit Grouping and Hboxes.- 6.2.5 Characters Are Almost Hboxes.- 6.2.6 The null Macro.- 6.2.7 How to Structure the Source Code of an hbox Command.- 6.2.8 hboxbgroup... egroup.- 6.3 Examples of Building Horizontal Boxes.- 6.3.1 Characters in Hboxes.- 6.3.2 Other Boxes Inside an Hbox.- 6.3.3 Using Boxes Stored in Box Registers.- 6.3.4 Raising and Lowering Boxes, raise, lower.- 6.3.5 More raise and lower Examples.- 6.3.6 Vertical Boxes Inside Horizontal Boxes.- 6.3.7 Horizontal Glue Inside Hboxes.- 6.3.8 Vertical Rules Inside Hboxes.- 6.3.9 Mathematical Formulas Inside Hboxes.- 6.4 Determining the Dimensions of Hboxes.- 6.4.1 A Little Bit of Theory.- 6.4.2 Examples of Width Computations of Hboxes.- 6.4.3 Computing Height and Depth of an Hbox.- 6.4.4 Empty Hboxes Built with hbox to ?dimen?.- 6.5 Hboxes of Zero or Nearly Zero Width, hbox to Opt {...}.- 6.5.1 The Problem of Overprinting Two Characters.- 6.5.2 Macros rlap and llap.- 6.5.3 Poor Man's Boldface, Macro BoldfaceFake.- 6.5.4 Constructing a Special Symbol.- 6.5.5 Solving the Same Problem Using Box Registers.- 6.6 ...line Macros line, leftline, rightline and centerline.- 6.6.1 The Definitions of the ... line Macros.- 6.6.2 The Definitions of Macros LeftLeaderLine, RightLeaderLine, and CenterLeaderLine.- 6.6.3 Examples.- 6.6.4 Paragraphs Preceding ... line Calls.- 6.6.5 line... Macros and Glue Used.- 6.6.6 Using the line... Macros Inside a Vbox.- 6.7 Generating More Hboxes.- 6.7.1 Hboxes Prevent Hyphenation.- 6.7.2 Generating the TEX Logo.- 6.7.3 Building Letterheads.- 6.7.4 Removing Glue from a Horizontal List, unskip.- 6.8 A Table Generated with Hboxes.- 6.8.1 An Outline of Printing a Table Using Hboxes.- 6.8.2 An Example Table Built Using Hboxes.- 6.8.3 Adding Headers to an Hbox-Based Table.- 6.8.4 Adding Vertical Glue to an Hbox-Built Table.- 6.8.5 Using a Macro Building Table Rows.- 6.8.6 Adding Horizontal Rules.- 6.8.7 Modifications to the Discussed Table.- 6.9 Building Tables Using settabs.- 6.10 More Hbox Examples.- 6.10.1 Underlining, underbar.- 6.10.2 A Macro for Signature Lines, SignatureLine.- 6.10.3 A Form Line Macro, FormLine.- 6.10.4 Another Interesting Example.- 6.11 hidevidth.- 6.12 Infinite Glues and Hboxes.- 6.13 Token Parameters everyhbox and everyvbox.- 6.14 Summary.- 7 Vertical Boxes.- 7.1 Basics of Vertical Boxes.- 7.1.1 Primitives vbox, vtop and vcenter for the Generation of Vboxes.- 7.1.2 Making Vboxes Visible.- 7.1.3 Comparing Hboxes and Vboxes.- 7.1.4 The Vertical List of a Vbox.- 7.2 Building Simple Vboxes.- 7.2.1 A Paragraph Inside a Vbox, Centering a Vbox.- 7.2.2 Vertical Glue and Other Boxes Inside Vboxes.- 7.2.3 More on Boxes Inside Vboxes, leavevmode.- 7.2.4 Moving Items Inside a Vbox Horizontally, moveleft, moveright.- 7.3 Line Spacing and Interline Glue.- 7.3.1 Overlapping of Lines Is Prevented.- 7.3.2 Changing baselineskip.- 7.3.3 Typical Settings of baselineskip.- 7.3.4 Explaining baselineskip, lineskiplimit, and lineskip.- 7.3.5 Computing the Interline Glue.- 7.3.6 An Example of Interline Glue Computations.- 7.3.7 Visualizing Interline Glue Computations.- 7.3.8 Interline Glue Computations and vskips.- 7.3.9 The Depth of the Preceding Box or Line, prevdepth.- 7.3.10 Suppressing Interline Glue Using nointerlineskip.- 7.3.11 How to Disable and Enable Interline Glue, offinterlineskip, normalbaselines.- 7.3.12 Comparing offinterlineskip and nointerlineskip.- 7.3.13 The Definition of Macro AlwaysBaselineskip.- 7.3.14 Interline Glue and Horizontal Rules.- 7.3.15 Increasing Interline Spacing Using Macro openup.- 7.4 Struts.- 7.4.1 Different Ways to Generate Struts and Strut-Like Constructs.- 7.4.2 Strut Examples.- 7.4.3 Automatic Strut Computations, Macros ComputeStrut, HigherStrut and DeeperStrut.- 7.4.4 Macro ReduceToStrut to Generate a Strut Based on Some Arbitrary Text.- 7.5 The Dimensions of Vboxes.- 7.5.1 The Width of Vboxes.- 7.5.2 The Height and Depth Computations of Vboxes.- 7.5.3 Some More Examples of Vbox Dimension Computations.- 7.5.4 Limiting the Depth of a Vbox, boxmaxdepth.- 7.5.5 A Discussion of vcenter and Its Restrictions, Macro VcenterX.- 7.5.6 Predefined Heights or Depths in Vboxes: vbox, vtop and vcenter to or spread ?dimen?.- 7.5.7 A Macro to Shift the Reference Point of a Box Up or Down, ShiftRefPointUpOrDown.- 7.5.8 Alignment Problems in Vboxes.- 7.6 Summary.- 8 More on Vertical Boxes.- 8.1 Unwrapping Boxes Using un... Primitives.- 8.1.1 Showing the Workings of unhbox, etc..- 8.1.2 Interline Glue and unvbox.- 8.1.3 Determining the Natural Height or Depth of a Vbox, NaturalHeight, NaturalDepth.- 8.1.4 The Macro Vtbox to Move the Reference Point of a Vbox.- 8.2 Splitting Vboxes, vsplit.- 8.2.1 The Syntax of vsplit.- 8.2.2 The First vsplit Example.- 8.2.3 Glue Is Removed at a Break Point.- 8.2.4 Protecting Glue at a Break Point.- 8.2.5 Protecting Glue at a Break Point, Exceptions.- 8.2.6 Leaders Are Removed at a Break Point.- 8.2.7 The Insertion of splittopskip Glue by TEX.- 8.2.8 Using a Penalty in vsplit.- 8.2.9 The 'dimen' of vsplit ?dimen?.- 8.2.10 Splitting Requires Glue or Penalty (or Both).- 8.2.11 The Dimension Parameter splitmaxdepth.- 8.2.12 Applying vsplit: Adding Line Numbers to the Beginning of Every Line of a Paragraph.- 8.3 Making a Box Larger, BoxLarger.- 8.4 Another More Complicated Vbox Example.- 8.5 Removing Items from a Box Related List.- 8.5.1 The lastbox Primitive.- 8.5.2 Examples of lastskip, lastkern, lastpenalty.- 8.5.3 An Example of Using unskip.- 8.6 Vertical Spacing Macros.- 8.7 Summary.- 9 Boxes and Rules.- 9.1 Rule Placement and Borderline of Boxes.- 9.2 Macros to Draw Simple Graphs.- 9.2.1 The Macro Source Code.- 9.2.2 An Example Applying the Presented Macros.- 9.3 Drawing Rules Around a Box.- 9.3.1 A Simple Macro to Draw Rules Around a Box (BoxingA).- 9.3.2 An Example Application of BoxingA: Reserving Space for a Figure, FigureBox.- 9.3.3 A Macro for Drawing Rules Around Boxes with User-Controlled Thickness of those Rules, BoxingB.- 9.3.4 Macros Including the Marking of Reference Points of Boxes, BoxingC, and Baseline, BoxingD.- 9.3.5 Correcting Reference Point and Dimensions.- 9.3.6 Rule Macros for Marking Boxes.- 9.3.7 The Definition of Macro BoxingE.- 9.3.8 An Example of Using BoxingE.- 9.3.9 Replacing hbox by HboxR, vbox by VboxR, etc..- 9.3.10 Examples.- 9.3.11 Empty Ruled Boxes, EmptyRuledBox.- 9.3.12 Eliminating Ruled Boxes, EliminateRuledBoxes.- 9.3.13 LineR, LeftLineR, RightLineR and CenterLineR.- 9.3.14 The Combined Loading of the Most Important Box-Related Macros.- 9.4 Summary.- Source Code File Index.