summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/plain/impatient
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-05-23 00:04:06 +0000
committerKarl Berry <karl@freefriends.org>2009-05-23 00:04:06 +0000
commit20d25e62ad99344ee37e88fb0787319391107640 (patch)
treeb956bd202233c91691644f7177f7440cf44d673b /Master/texmf-dist/doc/plain/impatient
parented6a6417c1055f64cde693e71238dc996d1710e6 (diff)
move plain docs out of texmf-doc
git-svn-id: svn://tug.org/texlive/trunk@13404 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/plain/impatient')
-rw-r--r--Master/texmf-dist/doc/plain/impatient/Makefile15
-rw-r--r--Master/texmf-dist/doc/plain/impatient/README40
-rw-r--r--Master/texmf-dist/doc/plain/impatient/backm.tex92
-rw-r--r--Master/texmf-dist/doc/plain/impatient/book.pdfbin0 -> 1421239 bytes
-rw-r--r--Master/texmf-dist/doc/plain/impatient/book.tex47
-rw-r--r--Master/texmf-dist/doc/plain/impatient/capsule.tex1134
-rw-r--r--Master/texmf-dist/doc/plain/impatient/concepts.tex4097
-rw-r--r--Master/texmf-dist/doc/plain/impatient/config.tex0
-rw-r--r--Master/texmf-dist/doc/plain/impatient/copyrght.tex48
-rw-r--r--Master/texmf-dist/doc/plain/impatient/eplain.tex1196
-rw-r--r--Master/texmf-dist/doc/plain/impatient/errata.future256
-rw-r--r--Master/texmf-dist/doc/plain/impatient/errors.tex325
-rw-r--r--Master/texmf-dist/doc/plain/impatient/examples.tex56
-rw-r--r--Master/texmf-dist/doc/plain/impatient/fdl.tex463
-rw-r--r--Master/texmf-dist/doc/plain/impatient/fonts.tex241
-rw-r--r--Master/texmf-dist/doc/plain/impatient/frontm.tex82
-rw-r--r--Master/texmf-dist/doc/plain/impatient/genops.tex2827
-rw-r--r--Master/texmf-dist/doc/plain/impatient/index.tex39
-rw-r--r--Master/texmf-dist/doc/plain/impatient/index1.icn90
-rw-r--r--Master/texmf-dist/doc/plain/impatient/index2.icn239
-rw-r--r--Master/texmf-dist/doc/plain/impatient/macros.tex2295
-rw-r--r--Master/texmf-dist/doc/plain/impatient/math.tex2190
-rw-r--r--Master/texmf-dist/doc/plain/impatient/modes.tex2078
-rw-r--r--Master/texmf-dist/doc/plain/impatient/pages.tex1153
-rw-r--r--Master/texmf-dist/doc/plain/impatient/paras.tex2166
-rw-r--r--Master/texmf-dist/doc/plain/impatient/preface.tex157
-rw-r--r--Master/texmf-dist/doc/plain/impatient/read1st.tex45
-rw-r--r--Master/texmf-dist/doc/plain/impatient/tips.tex1011
-rw-r--r--Master/texmf-dist/doc/plain/impatient/usebook.tex243
-rw-r--r--Master/texmf-dist/doc/plain/impatient/usermacs.tex1168
-rw-r--r--Master/texmf-dist/doc/plain/impatient/usingtex.tex822
-rw-r--r--Master/texmf-dist/doc/plain/impatient/xmptext.tex449
32 files changed, 25064 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/plain/impatient/Makefile b/Master/texmf-dist/doc/plain/impatient/Makefile
new file mode 100644
index 00000000000..63c0d7841ce
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/Makefile
@@ -0,0 +1,15 @@
+# public domain
+all: book.dvi book.pdf #book.html
+
+book.dvi: fdl.tex preface.tex
+ tex '\nonstopmode\input book'
+book.pdf: fdl.tex preface.tex
+ pdftex '\nonstopmode\input book'
+book.html:
+ httex book.tex
+
+dist: all
+ rm -f x.tex
+ tar czf impatient.tgz Makefile README *.icn \
+ *.tex book.aux book.idx book.toc book.ccs book.sdx \
+ book.dvi book.pdf
diff --git a/Master/texmf-dist/doc/plain/impatient/README b/Master/texmf-dist/doc/plain/impatient/README
new file mode 100644
index 00000000000..07dee675182
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/README
@@ -0,0 +1,40 @@
+This is the README file for version 1.0 of the free edition of the book
+TeX for the Impatient, released under the GNU Free Documentation License.
+(This README file itself is public domain.)
+
+Primary distribution point:
+ ftp://tug.org/tex/impatient
+It is also available from http://mirror.ctan.org/info/impatient/.
+
+Information about the free edition is included at the end of the preface
+and on the copyright page.
+
+We'd be interested in hearing about any projects undertaken with this
+material. See errata.future for some relatively small ideas for
+enhancements.
+
+TeX for the Impatient is also a GNU project, and the development
+sources, contact information, and other project details are available at
+http://savannah.gnu.org/projects/teximpatient.
+
+TeX for the Impatient has been (independently!) translated into a wikibook:
+http://en.wikibooks.org/wiki/TeX_for_the_Impatient
+
+
+Some random thoughts for people thinking of working with the source:
+
+- You may want to translate the source into some more standard format; we
+used many homegrown macros to make typing and markup easier.
+
+- You may want to redo the index creation to use makeindex or some
+other standard program, instead of our homegrown Icon programs (included
+in the distribution, for what it's worth). Until the index can be
+easily regenerated, the page breaks can't change without the index
+becoming useless.
+
+- Printing the GFDL required many kludges, a true Eplain-compatible
+version is needed (which in turn would require using the current eplain
+to print the book).
+
+
+Happy (and quick) TeXing!
diff --git a/Master/texmf-dist/doc/plain/impatient/backm.tex b/Master/texmf-dist/doc/plain/impatient/backm.tex
new file mode 100644
index 00000000000..11d1502718f
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/backm.tex
@@ -0,0 +1,92 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+%
+% Backmatter.
+
+\input macros
+
+\ifcompletebook
+ \noheadlinetrue\pagebreak
+ \ifodd\pageno\else \noheadlinetrue\pagebreak \fi
+\fi
+
+\edgetabsfalse
+
+% About the authors.
+%
+\backsinkage
+\leftline{\sectionfonts About the authors}
+\vskip\belowsectionskip
+
+\noindent Paul W. Abrahams, Sc.D., CCP, is a consulting computer
+scientist and a past president of the Association for Computing
+Machinery. His specialties are programming languages, software systems
+design and implementation, and technical writing. He received his
+doctorate from the Massachusetts Institute of Technology in 1963 in
+mathematics, studying artificial intelligence under Marvin Minsky and
+John McCarthy. He is one of the designers of the first {\sc LISP}
+system and the designer of the {\sc CIMS PL/I} system, developed when he
+was a professor at New York University. More recently, he has designed
+{\sc SPLASH}, a Systems Programming LAnguage for Software Hackers. Paul
+resides in Deerfield, Massachusetts, where he writes, hacks, hikes,
+hunts wild mushrooms, and listens to classical music.
+
+Kathryn A. Hargreaves received her M.S. degree in computer science from
+the University of Massachusetts, Boston, in August 1989. Her
+specialities are digital typography and human vision. She developed a
+set of programs to produce high-quality, freely distributable digital
+type for the Free Software Foundation and also worked with
+Robert~A. Morris as an Adjunct Research Associate. In 1986 she completed
+the Reentry Program in Computer Science for Women and Minorities at the
+University of California at Berkeley, where she also worked in the \TeX\
+research group under Michael Harrison. She has studied letterform design
+with Don Adleta, Andr\'e G\"urtler, and Christian Mengelt at the Rhode
+Island School of Design. A journeyman typographer, she has worked at
+Headliners\slash Identicolor, San Francisco, and Future Studio, Los
+Angeles, two leading typographical firms. She also holds an M.F.A. in
+Painting\slash Sculpture\slash Graphic Arts from the University of
+California at Los Angeles. Kathy paints watercolors, designs
+letterforms, plays piano, and reads feminist film criticism.
+
+Like Kathy, Karl Berry received his M.S. degree in computer science from
+the University of Massachusetts, Boston, in August 1989. He also
+worked for the Free Software Foundation, did research with Morris,
+and has studied with Adleta, G\"urtler, and Mengelt. He has been
+working with \TeX\ since 1983 and has installed and maintained the \TeX\
+system at a number of universities. He was the maintainer of the Web2c
+system developed by Tim Morgan for a number of years, among other \TeX\
+projects. He became the president of the \TeX\ Users Group in 2003.
+
+\noheadlinetrue\pagebreak
+
+
+% Colophon.
+%
+\backsinkage
+\leftline{\sectionfonts Colophon}
+\vskip\belowsectionskip
+
+\noindent This book was composed using \TeX\ (of course), developed by
+Donald~E. Knuth. The main text is set in Computer Modern, also designed
+by Knuth. The heads of the original book were set in Zapf Humanist (the
+Bitstream version of Optima), designed by Hermann Zapf.
+
+The paper was Amherst Ultra Matte 45 lb. The printing and binding were
+done by Arcadia Graphics-Halliday. The phototypeset output was produced
+at Type 2000,~Inc., in Mill Valley, California. Proofs were made on an
+Apple LaserWriter Plus and on a Hewlett Packard LaserJet~II\null.
+
+Cross-referencing, indexing, and the table of contents were done
+mechanically, using the macros of \chapterref{eplain} together with
+additional macros custom-written for this book. The production of the
+index was supported by an additional program written in Icon.
+
+
+\noheadlinetrue
+\iftrue
+ \pagebreak
+ \printconceptpage
+\fi
+
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/book.pdf b/Master/texmf-dist/doc/plain/impatient/book.pdf
new file mode 100644
index 00000000000..988068a123e
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/book.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/plain/impatient/book.tex b/Master/texmf-dist/doc/plain/impatient/book.tex
new file mode 100644
index 00000000000..9d656f7c998
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/book.tex
@@ -0,0 +1,47 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+% Top-level control.
+%
+\input macros
+% Here we override part of the configuration
+% since we're doing a full run.
+\rewritetocfiletrue % always do a table of contents
+\xrefwarningtrue
+\completebooktrue
+\edgetabsfalse
+\input frontm
+% (not for web) \edgetabstrue
+\settabdepth{\bigtab}
+\input usebook
+\input usingtex
+\input examples
+\nextedgetab
+\input concepts
+\nextedgetab
+\settabdepth{\smalltab}
+\input paras
+\nextedgetab
+\input pages
+\nextedgetab
+\input modes
+\nextedgetab
+\input math
+\nextedgetab
+\input genops
+\nextedgetab
+\settabdepth{\bigtab}
+\input tips
+\input errors
+\input usermacs
+\nextedgetab
+\input capsule
+\nextedgetab
+\backmatter
+\input fdl
+\input index
+\edgetabsfalse
+\input backm
+
+\bye
diff --git a/Master/texmf-dist/doc/plain/impatient/capsule.tex b/Master/texmf-dist/doc/plain/impatient/capsule.tex
new file mode 100644
index 00000000000..59e9a2bef09
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/capsule.tex
@@ -0,0 +1,1134 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter{Capsule summary \linebreak of commands}
+
+\chapterdef{capsule}
+
+This section contains one-line descriptions of the primitive \TeX\
+commands and the \TeX\ commands defined in \plainTeX. These include both
+control sequences and
+special characters.
+We've omitted those commands that are only intended for internal use
+in the
+\plainTeX\ definition (\knuth{Appendix~B}).
+Note that ordinary characters
+such as `|a|' or `|6|' are also commands, and indeed the most common
+ones \seeconcept{character}.
+
+To keep the descriptions brief, we've adopted
+certain conventions:
+
+\ulist
+
+\li An asterisk in front of a command indicates that the command is primitive,
+^^{primitive//command} i.e., built into the \TeX\ computer program
+\seeconcept{primitive}.
+
+\li The words ``music'', ``punctuation'', ``function'',
+``symbol'', ``relation'', ``delimiter'', or ``operator'' in a command
+description imply that the command is only legal in math modes.
+
+\li The verb ``display'' applies to information
+that \TeX\ sends to the ^{log file}, unless otherwise indicated. If
+|\tracingonline| is positive, \TeX\ also sends that output to the
+terminal. We use the noun ``display'' to refer to math displays (see
+\xref{display math}), i.e., material between |$$|'s.
+
+\li The phrase ``produce $x$'' indicates that the command will typeset
+$x$ and put the result in a box.
+We sometimes omit ``produce'' when the omission is unlikely to
+cause confusion. For example, we describe |\alpha| as ``math Greek
+letter $\alpha$'', not ``produce the math Greek letter $\alpha$''.
+\margin{Remove explanations of ``space'' and ``glue''}
+
+\endulist
+
+\begincapsum
+
+{\catcode `@ = \letter
+\caplineout {\\\visiblespace} {interword space}*{\@space}}%
+ {\catcode `\ =\other\ctsidxref{ }}
+\capcs ! {negative thin space for math}{}{\@shriek}
+\capcs " {umlaut accent for text, as in \"o}{}{\@quote}
+\capactwo # {introduce a macro parameter, or indicate where the text of
+ an entry goes in an alignment preamble}{}{@msharp:@asharp}
+\capcs # {produce \# character from current font}{}{\@pound}
+\capac $ {begin or end a math formula}{}{mathform}
+\capcs $ {produce \$ character from current font}{}{\@bucks}
+\capac % {begin a comment}*{comments}
+\capcs % {produce \% character from current font}{}{\@percent}
+\capac & {separate templates and entries in an alignment}{}{@and}
+\capcs & {produce \& character from current font}{}{\@and}
+\capac ' {prime symbol for math, as in $p'$}{}{@prime}
+\capcs ' {acute accent for text, as in \'e}{}{\@prime}
+\capcs * {multiplication symbol that allows a line break}{}{\@star}
+\capcs + {begin tabbed line}{}{\@plus}
+\capcs , {thin space for math}{}{\@comma}
+\capcs - {specify a legal hyphenation point}*{\@minus}
+\capcs . {dot accent for text, as in \.n}{}{\@dot}
+\capcs / {italic correction for the previous character}*{\@slash}
+\capcs ; {thick space for math}{}{\@semi}
+\capcs = {macron accent for text, as in \=r}{}{\@equal}
+\capac \ {begin a control sequence}*{@backslash}
+\capcs > {medium space for math}{}{\@greater}
+\capac ^ {produce a specified subformula as a superscript}{}{@hat}
+\capcs ^ {circumflex accent for text, as in \^o}{}{\@hat}
+{\catcode `@ = \letter
+\caplineout {\twocarets L}{equivalent to the |\\par| primitive}
+ {}{\@par}\ttidxref{^^L}
+\caplineout {\twocarets M}{an end-of-line}*{@newline}\ttidxref{^^M}
+}%
+\capac _ {produce a specified subformula as a subscript}{}{@underscore}
+\capcs _ {underscore: \_}{}{\@underscore}
+%x \capac ` {in a \<number> context, \ascii\ code for character that follows}*{@lquote}
+\capcs ` {grave accent for text, as in \`e}{}{\@lquote}
+\capac { {start a group}{}{@lbrace}
+\capcs { {left brace delimiter for math: $\{$}{}{\@lbrace}
+\capcs | {parallel lines for math: $\Vert$}{}{\@bar}
+\capac } {end a group}{}{@rbrace}
+\capcs } {right brace delimiter for math: $\}$}{}{\@rbrace}
+\capac ~ {interword space at which a line will not break}{}{@not}
+\capcs ~ {tilde accent for text, as in \~a}{}{\@not}
+\capcs aa {Scandinavian letter: \aa}{}{}
+\capcs AA {Scandinavian letter: \AA}{}{}
+\capcs above {produce a fraction with a bar of specified thickness}*{}
+\capcs abovedisplayshortskip {glue \TeX\ inserts before a display when the
+ previous line fits in the display's indentation, by
+ default 0\pt\ plus 3\pt}*{}
+\capcs abovedisplayskip {glue \TeX\ inserts before a display when the previous
+ line doesn't fit in the display's indentation, by default 12\pt\
+ plus 3\pt\ minus 9\pt}*{}
+\capcs abovewithdelims {produce a fraction with a bar of specified thickness
+ and surrounded by specified delimiters}*{}
+\capcs accent {put specified accent over the next character}*{}
+\capcs active {category code for active characters, viz., the number $13$}{}{}
+\capcs acute {acute accent for math, as in $\acute x$}{}{}
+\capcs adjdemerits {additional demerits for a line break which would result in
+ adjacent lines with incompatible word spacing, by default~10000}*{}
+\capcs advance {add a number to a |\\count| register}*{}
+\capcs advancepageno {if |\\pageno| is positive, add one;
+ if it's negative, subtract one}{}{}
+\capcs ae {\ae\ ligature}{}{}
+\capcs AE {\AE\ ligature}{}{}
+\capcs afterassignment {wait to expand the following token until
+ the next assignment is done}*{}
+\capcs aftergroup {wait to expand the following token until the end
+ of the current group}*{}
+\capcs aleph {only Hebrew letter for math: $\aleph$}{}{}
+\capcstwo allowbreak {do |\\penalty0|, i.e., allow a line or page break
+ where one could not ordinarily occur}{}{hallowbreak:vallowbreak}
+\capcs alpha {math Greek letter $\alpha$}{}{}
+\capcs amalg {amalgamation operator: $\amalg$}{}{}
+\capcs angle {angle symbol: $\angle$}{}{}
+\capcs approx {approximation relation: $\approx$}{}{}
+\capcs arccos {arc cosine function: $\arccos$}{}{}
+\capcs arcsin {arc sine function: $\arcsin$}{}{}
+\capcs arctan {arc tangent function: $\arctan$}{}{}
+\capcs arg {argument (phase) function: $\arg$}{}{}
+\capcs arrowvert {vertical portion of an extensible double arrow}{}{}
+\capcs Arrowvert {vertical portion of an extensible single arrow}{}{}
+\capcs ast {asterisk operator: $\ast$}{}{}
+\capcs asymp {asymptote relation: $\asymp$}{}{}
+\capcs atop {produce a fraction without a fraction bar}*{}
+\capcs atopwithdelims {produce a fraction without a fraction bar and
+ surrounded by specified delimiters}*{}
+\capcs b {bar-under accent for math, as in $\b x$}{}{}
+\capcs backslash {backslash symbol: $\backslash$}{}{}
+\capcs badness {the badness of the glue setting in the last box
+ made}*{}
+\capcs bar {bar accent for math, as in $\bar x$}{}{}
+\capcs baselineskip {glue for the normal vertical distance from one baseline
+ to the next, by default 12\pt}*{}
+\capcs batchmode {don't stop at errors and don't output to terminal}*{}
+\capcs begingroup {start a group to be ended by |\\endgroup|}*{}
+\capcs beginsection {begin a major subdivision of a document}{}%
+ {\@beginsection}
+\capcs belowdisplayshortskip {glue \TeX\ inserts after a display when the
+ previous line fits in the display's indentation,
+ by default 7\pt\ plus 0.3\pt\ minus 4\pt}*{}
+\capcs belowdisplayskip {glue \TeX\ inserts after a display when the previous
+ line doesn't fit in the display's indentation,
+ by default 12\pt\ plus 3\pt\ minus 9\pt}*{}
+\capcs beta {math Greek letter $\beta$}{}{}
+\capcs bf {use boldface, i.e., do |\\tenbf\\fam=\\bffam|}{}{}
+\capcs bffam {boldface family for math}{}{}
+\capcs bgroup {implicit beginning-of-group character}{}{}
+\capcs big {make the specified delimiter larger than an ordinary one, but
+ still small enough for text}{}{}
+\capcs Big {make the specified delimiter about 11.5\pt\ tall}{}{}
+\capcs bigbreak {indicate desirable page break with |\\penalty-200|
+ and produce |\\bigskipamount| glue}{}{}
+\capcs bigcap {large cap operator (no, it doesn't produce a large
+ capital letter!): $\bigcap$}{}{}
+\capcs bigcirc {large circle operator: $\bigcirc$}{}{}
+\capcs bigcup {large cup operator: $\bigcup$}{}{}
+\capcs bigg {make the specified delimiter about 14.5\pt\ tall}{}{}
+\capcs Bigg {make specified delimiter about 17.5\pt\ tall}{}{}
+\capcs biggl {sized like |\\bigg|, but spaced as an opening}{}{}
+\capcs Biggl {sized like |\\Bigg|, but spaced as an opening}{}{}
+\capcs biggm {sized like |\\bigg|, but spaced as a relation}{}{}
+\capcs Biggm {sized like |\\Bigg|, but spaced as a relation}{}{}
+\capcs biggr {sized like |\\bigg|, but spaced as a closing}{}{}
+\capcs Biggr {sized like |\\Bigg|, but spaced as a closing}{}{}
+\capcs bigl {sized like |\\big|, but spaced as an opening}{}{}
+\capcs Bigl {sized like |\\Big|, but spaced as an opening}{}{}
+\capcs bigm {sized like |\\big|, but spaced as a relation}{}{}
+\capcs Bigm {sized like |\\Big|, but spaced as a relation}{}{}
+\capcs bigodot {large circled dot operator: $\bigodot$}{}{}
+\capcs bigoplus {large circled plus operator: $\bigoplus$}{}{}
+\capcs bigotimes {large circled times operator: $\bigotimes$}{}{}
+\capcs bigr {sized like |\\big|, but spaced as a closing}{}{}
+\capcs Bigr {sized like |\\Big|, but spaced as a closing}{}{}
+\capcs bigskip {produce |\\bigskipamount| glue}{}{}
+\capcs bigskipamount {glue for a big vertical skip, by default 12\pt\
+ plus 4\pt\ minus 4\pt}{}{}
+\capcs bigsqcup {large square cup operator: $\bigsqcup$}{}{}
+\capcs bigtriangledown {triangle operator pointing downward:
+ $\bigtriangledown$}{}{}
+\capcs bigtriangleup {triangle operator pointing upward: $\bigtriangleup$}{}{}
+\capcs biguplus {large cupped plus operator: $\biguplus$}{}{}
+\capcs bigvee {large logical ``or'' operator: $\bigvee$}{}{}
+\capcs bigwedge {large logical ``and'' operator: $\bigwedge$}{}{}
+\capcs binoppenalty {additional penalty for breaking after a binary math
+ operator, by default~700}*{}
+\capcs bmod {modulus operator, as in $n \bmod 2$}{}{}
+\capcs bordermatrix {produce matrix with labelled rows and columns}{}{}
+\capcs bot {lattice bottom symbol: $\bot$}{}{}
+\capcs botmark {the last mark item on the page just boxed}*{}
+\capcs bowtie {bowtie relation: $\bowtie$}{}{}
+\capcs box {append the box in a specified box register
+ to the current list, and void the register}*{}
+\capcs boxmaxdepth {maximum depth of vboxes, by default |\\maxdimen|}*{}
+\capcs brace {|\char36 n\\brace k\char36| produces
+ braced notation: $n \brace k$}{}{}
+\capcs bracevert {vertical portion of extensible large brace}{}{}
+\capcs brack {|\char36 n\\brack k\char36| produces bracketed notation: $n \brack k$}{}{}
+\capcstwo break {do |\\penalty-10000|, i.e., force a line or page
+ break}{}{hbreak:vbreak}
+\capcs breve {breve accent for math, as in $\breve x$}{}{}
+\capcs brokenpenalty {penalty for line break at a discretionary item, by
+ default~100}*{}
+\capcs buildrel {produce specified formula over the specified relation}{}{}
+\capcs bullet {bullet operation: $\bullet$}{}{}
+\capcs bye {|\\vfill| the last page with blank space, |\\supereject| it,
+ and |\\end| the job}{}{\@bye}
+\capcs c {cedilla accent for text, as in \c c}{}{}
+\capcs cal {use calligraphic font for uppercase letters in math,
+ as in $\cal XYZ$}{}{}
+\capcs cap {cap operator: $\cap$}{}{}
+\capcs cases {produce cases for math, as in $\bigl\{{\cdots\atop\cdots}$}{}{}
+\capcs catcode {the category code of a specified character}*{}
+\capcs cdot {centered dot operator: $\cdot$}{}{}
+\capcs cdotp {centered dot punctuation: $\cdotp$}{}{}
+\capcs cdots {centered dots for math: $\cdots$}{}{}
+\capcs centerline {produce line with its text centered}{}{}
+\capcs char {produce the character from the current font with the specified
+ code}*{}
+\capcs chardef {define a specified control sequence to be a character's
+ code, a number between 0 and $255$}*{}
+\capcs check {check accent for math, as in $\check x$}{}{}
+\capcs chi {math Greek letter $\chi$}{}{}
+\capcs choose {|\char36 n\\choose k\char36| produces combinatorial notation:
+ $n \choose k$}{}{}
+\capcs circ {circle operation: $\circ$}{}{}
+\capcs cleaders {produce leaders with half of leftover space before
+ the first box, and half after the last}*{}
+\capcs cleartabs {clear all the tabs for tabbing alignments}{}{}
+\capcs closein {close a specified input stream}*{}
+\capcs closeout {close a specified output stream}*{}
+\capcs clubpenalty {additional penalty for a single line remaining before
+ a page break, by default~150}*{}
+\capcs clubsuit {club suit symbol: $\clubsuit$}{}{}
+\capcs colon {colon punctation symbol for math: $:$}{}{}
+\capcs cong {congruence relation: $\cong$}{}{}
+\capcs coprod {coproduct operator: $\coprod$}{}{}
+\capcs copy {like |\\box|, but don't void the register}*{}
+\capcs copyright {copyright mark: \copyright}{}{}
+\capcs cos {cosine function: $\cos$}{}{}
+\capcs cosh {hyperbolic cosine function: $\cosh$}{}{}
+\capcs cot {cotangent function : $\cot$}{}{}
+\capcs coth {hyperbolic cotangent function: $\coth$}{}{}
+\capcs count {the specified integer register}*{}
+\capcs countdef {define a specified control sequence to be a number
+ corresponding to a |\\count| register}*{}
+\capcs cr {end a row (or column) within an alignment}*{}
+\capcs crcr {does nothing if the last command was |\\cr| or |\\noalign|;
+ otherwise, equivalent to |\\cr|}*{}
+\capcs csc {cosecant function: $\csc$}{}{}
+\capcs csname {start a control sequence name to be ended by |\\endcsname|}*{}
+\capcs cup {cup operator: $\cup$}{}{}
+\capcs d {underdot accent for text, as in \d r}{}{}
+\capcs dag {dagger symbol for text: \dag}{}{}
+\capcs dagger {dagger operator for math: $\dagger$}{}{}
+\capcs dashv {right turnstile relation: $\dashv$}{}{}
+\capcs day {current day of the month, as a number}*{}
+\capcs ddag {double dagger symbol for text: \ddag}{}{}
+\capcs ddagger {double dagger operator for math: $\ddagger$}{}{}
+\capcs ddot {double dot accent for math: $\ddot x$}{}{}
+\capcs ddots {diagonal dots for math: \smash{$\ddots$}}{}{}
+\capcs deadcycles {number of |\\output| initiations since the last
+ |\\shipout|}*{}
+\capcs def {define a control sequence to be a macro}*{}
+\capcs defaulthyphenchar {default hyphenation character code}*{}
+\capcs defaultskewchar {default accent skewing character code}*{}
+\capcs deg {degree function: $\deg$}{}{}
+\capcs delcode {the delimiter code of a specified character}*{}
+\capcs delimiter {produce a specified delimiter}*{}
+\capcs delimiterfactor {1000 times the ratio of the minimum size of a
+ delimiter to the size that would completely cover the formula, by
+ default~901}*{}
+\capcs delimitershortfall {minimum difference between formula height and
+ delimiter height, by default 5\pt}*{}
+\capcs delta {math Greek letter $\delta$}{}{}
+\capcs Delta {math Greek letter $\Delta$}{}{}
+\capcs det {determinant function: $\det$}{}{}
+\capcs diamond {diamond operator: $\diamond$}{}{}
+\capcs diamondsuit {diamond suit symbol: $\diamondsuit$}{}{}
+\capcs dim {dimension function: $\dim$}{}{}
+\capcs dimen {the specified dimension register}*{}
+\capcs dimendef {define a specified control sequence to be a number
+ corresponding to a |\\dimen| register}*{}
+\capcs discretionary {specify three texts, the first two for before and
+ after a line break, the third for no line break}*{}
+\capcs displayindent {\TeX\ sets this to the indentation of a display}*{}
+\capcs displaylimits {place limits above and below operators only in display
+ styles}*{}
+\capcs displaylines {produce specified multiline display with each
+ line centered}{}{}
+\capcs displaystyle {use displaystyle size in a formula}*{}
+\capcs displaywidowpenalty {penalty for a single line beginning a page
+ just before a display, by default~50}*{}
+\capcs displaywidth {\TeX\ sets this to the width of a display}*{}
+\capcs div {division operator: $\div$}{}{}
+\capcs divide {divide a specified |\\count| register by a specified integer}*{}
+\capcs dot {dot accent for math, as in $\dot x$}{}{}
+\capcs doteq {dotted equality relation: $\doteq$}{}{}
+\capcs dotfill {fill enclosing horizontal space with dots}{}{}
+\capcs dots {ellipsis for sequences: $x_1$, \dots, $x_n$}{}{}
+\capcs doublehyphendemerits {demerits for two consecutive lines ending
+ with hyphens, by default~10000}*{}
+\capcs downarrow {relation: $\downarrow$}{}{}
+\capcs Downarrow {relation: $\Downarrow$}{}{}
+\capcs downbracefill {fill enclosing hbox with a downwards facing brace:
+ \hbox to 3.5em{\downbracefill}}{}{}
+\capcs dp {the depth of the box in a specified box register}*{}
+\capcs dump {end the job and produce a format file}*{}
+\capcs edef {define a control sequence to be a macro, immediately expanding the
+ replacement text}*{}
+\capcs egroup {implicit end-of-group character}{}{}
+\capcs eject {end current paragraph and force a page break,
+ stretching out current page}{}{}
+\capcs ell {script letter for math: $\ell$}{}{}
+\capcs else {false or default case alternative for a conditional}*{\@else}
+\capcs emergencystretch {additional stretch added to every line if
+ |\\tol\-er\-ance| is not satisfied}*{}
+\capcs empty {macro that expands to nothing}{}{}
+\capcs emptyset {empty set symbol: $\emptyset$}{}{}
+\capcs end {|\\output| the last page and end the job}*{}
+\capcs endcsname {end a control sequence name started by
+ |\\csname|}*{}
+\capcs endgraf {equivalent to the |\\par| primitive}{}{}
+\capcs endgroup {end a group started by |\\begingroup|}*{}
+\capcs endinput {terminate input from the current file}*{}
+\capcs endinsert {end insertion}{}{}
+\capcs endline {equivalent to the |\\cr| primitive}{}{}
+\capcs endlinechar {character \TeX\ inserts at the end of each input
+ line, by default |\twocarets M|}*{}
+\capcs enskip {horizontal glue with width \frac1/2\em}{}{}
+\capcs enspace {kern \frac1/2\em}{}{}
+\capcs epsilon {math Greek letter $\epsilon$}{}{}
+\capcs eqalign {produce specified multiline display whose indicated parts
+ are vertically aligned}{}{}
+\capcs eqalignno {produce specified multiline display
+ with equation numbers whose indicated parts are vertically aligned}{}{}
+\capcs eqno {put a specified equation number on the right of a display}*{}
+\capcs equiv {equivalence relation: $\equiv$}{}{}
+\capcs errhelp {token list whose expansion \TeX\ displays when the user asks
+ for help in response to an |\\errmessage|}*{}
+\capcs errmessage {give specified error message}*{}
+\capcs errorcontextlines {the number of lines of context \TeX\
+ displays at an error, by default~5}*{}
+\capcs errorstopmode {stop for interaction at error messages}*{}
+\capcs escapechar {character with which \TeX\ precedes control sequence
+ names that are displayed}*{}
+\capcs eta {math Greek letter $\eta$}{}{}
+\capcs everycr {token list \TeX\ expands after a |\\cr|, or a |\\crcr|
+ not following |\\cr| or |\\noalign|}*{}
+\capcs everydisplay {token list \TeX\ expands when a math display begins}*{}
+\capcs everyhbox {token list \TeX\ expands when an hbox begins}*{}
+\capcs everyjob {token list \TeX\ expands when a job begins}*{}
+\capcs everymath {token list \TeX\ expands when text math mode
+ begins}*{}
+\capcs everypar {token list \TeX\ expands when a paragraph begins}*{}
+\capcs everyvbox {token list \TeX\ expands when a vbox begins }*{}
+\capcs exhyphenpenalty {additional penalty for a line break after
+ an explicit hyphen, by default~50}*{}
+\capcs exists {``there exists'' symbol: $\exists$}{}{}
+\capcs exp {exponential function: $\exp$}{}{}
+\capcs expandafter {expand the next token only after expanding the token
+ following it}*{}
+\capcs fam {font family \TeX\ uses for characters with class seven
+ (i.e., variables) in math}*{}
+\capcs fi {end a conditional}*{\@fi}
+\capcs filbreak {force a page break unless the text up to another |\\filbreak|
+ also fits on the page}{}{}
+\capcs finalhyphendemerits {penalty for the second to last line breaking at a
+ hyphen, by default~5000}*{}
+\capcs firstmark {first mark item on the page just boxed}*{}
+\capcs fivebf {use $5$-point bold font, |cmbx5|}{}{}
+\capcs fivei {use $5$-point math italic font, |cmmi5|}{}{}
+\capcs fiverm {use $5$-point roman font, |cmr5|}{}{}
+\capcs fivesy {use $5$-point symbol font, |cmsy5|}{}{}
+\capcs flat {flat symbol for music: $\flat$}{}{}
+\capcs floatingpenalty {penalty for insertions that are split across
+ pages, by default~0}*{}
+\capcs fmtname {name of the current format}{}{}
+\capcs fmtversion {version number of the current format}{}{}
+\capcs folio {produce |\\pageno| as characters;
+ in roman numerals if it's negative}{}{}
+\capcs font {define a specified control sequence to select a font}*{}
+\capcs fontdimen {a specified parameter of a specified font}*{}
+\capcs fontname {produce the filename of a specified font as characters}*{}
+\capcs footline {token list that produces line at the bottom of each page}{}{}
+\capcs footnote {produce a specified footnote
+ with a specified reference mark}{}{}
+\capcs forall {``for all'' symbol: $\forall$}{}{}
+\capcs frenchspacing {make interword spacing independent of punctuation}{}{}
+\capcs frown {frown relation: $\frown$}{}{}
+\capcs futurelet {assign the third following token to a specified control
+ sequence, then expand the second following token}*{}
+\capcs gamma {math Greek letter $\gamma$}{}{}
+\capcs Gamma {math Greek letter $\Gamma$}{}{}
+\capcs gcd {greatest common denominator function: $\gcd$}{}{}
+\capcs gdef {equivalent to |\\global\\def|, i.e., globally define a macro}*{}
+\capcs ge {greater than or equal relation: $\ge$}{}{}
+\capcs geq {equivalent to |\\ge|}{}{}
+\capcs gets {gets relation: $\gets$}{}{}
+\capcs gg {much greater than relation: $\gg$}{}{}
+\capcs global {make the following definition global}*{}
+\capcs globaldefs {overrides |\\global| prefixes on assignments}*{}
+\capcs goodbreak {indicate desirable page break with |\\penalty-500|}{}{}
+\capcs grave {grave accent for math, as in $\grave x$}{}{}
+\capcs H {Hungarian umlaut accent for text, as in \H o}{}{}
+\capcs halign {align text in columns}*{}
+\capcs hang {indent the current paragraph by |\\parindent|}{}{}
+\capcs hangafter {starting line number for hanging indentation}*{}
+\capcs hangindent {space for hanging indentation}*{}
+\capcs hat {hat accent for math, as in $\hat x$}{}{}
+\capcs hbadness {badness threshold for reporting underfull or overfull
+ hboxes, by default 1000}*{}
+\capcs hbar {math symbol: $\hbar$}{}{}
+\capcs hbox {produce a specified hbox}*{}
+\capcs headline {token list that produces the line at the
+ top of every page}{}{}
+\capcs heartsuit {heart suit symbol: $\heartsuit$}{}{}
+\capcs hfil {produce infinitely stretchable horizontal glue}*{}
+\capcs hfill {produce horizontal glue even more infinitely stretchable
+ than that produced by |\\hfil|}*{}
+\capcs hfilneg {produce infinitely negative stretchable horizontal glue}*{}
+\capcs hfuzz {space threshold for reporting overfull hboxes, by default
+ 0.1\pt}*{}
+\capcs hglue {produce horizontal glue that doesn't disappear at line
+ breaks}{}{}
+\capcs hidewidth {ignore width of an entry in an alignment, so that it
+ extends out from its box in the direction of the |\\hidewidth|}{}{}
+\capcs hoffset {page offset relative to one inch from the paper's left edge}*{}
+\capcs holdinginserts {if positive, do not remove insertions from the
+ current page}*{}
+\capcs hom {homology function: $\hom$}{}{}
+\capcs hookleftarrow {relation: $\hookleftarrow$}{}{}
+\capcs hookrightarrow {relation: $\hookrightarrow$}{}{}
+\capcs hphantom {produce an invisible formula with zero height and depth but
+ natural width}{}{}
+\capcs hrule {produce a horizontal rule; legal only in vertical modes}*{}
+\capcs hrulefill {fill enclosing space with a horizontal rule}{}{}
+\capcs hsize {line length, by default 6.5\thinspace in}*{}
+\capcs hskip {produce specified horizontal glue}*{}
+\capcs hss {produce horizontal glue that is infinitely stretchable and
+ infinitely shrinkable}*{}
+\capcs ht {the height of the box in a specified box register}*{}
+\capcs hyphenation {add specified words to the
+ hyphenation exception dictionary}*{}
+\capcs hyphenchar {the hyphenation character in a specified font}*{}
+\capcs hyphenpenalty {additional penalty for a line break at a hyphen, by
+ default~50}*{}
+\capcs i {dotless letter `\i' for use with accents}{}{}
+\capcs ialign {start an |\\halign| with the |\\tabskip| glue zero and
+ |\\everycr| empty}{}{}
+\capcs if {test if two specified tokens have the same character code}*{\@if}
+\capcs ifcase {expand case $n$ for specified value $n$}*{\@ifcase}
+\capcs ifcat {test if two specified tokens have the same category
+ code}*{\@ifcat}
+\capcs ifdim {test for a specified relationship between two specified
+ dimensions}*{\@ifdim}
+\capcs ifeof {test for being at the end of a specified file}*{\@ifeof}
+\capcs iff {if and only if relation: $\iff$}{}{}
+\capcs iffalse {test that is always false}*{\@iffalse}
+\capcs ifhbox {test if a specified box register contains an hbox}*{\@ifhbox}
+\capcs ifhmode {test if \TeX\ is in a horizontal mode}*{\@ifhmode}
+\capcs ifinner {test if \TeX\ is in an internal mode}*{\@ifinner}
+\capcs ifmmode {test if \TeX\ is in a math mode}*{\@ifmmode}
+\capcs ifnum {test for a specified relationship
+ between two specified numbers}*{\@ifnum}
+\capcs ifodd {test if a specified number is odd}*{\@ifodd}
+\capcs iftrue {test that is always true}*{\@iftrue}
+\capcs ifvbox {test if a specified box register contains a vbox}*{\@ifvbox}
+\capcs ifvmode {test if \TeX\ is in a vertical mode}*{\@ifvmode}
+\capcs ifvoid {test if a specified box register is void}*{\@ifvoid}
+\capcs ifx {test if two tokens are the same, or if
+ two macros have the same top-level definition}*{\@ifx}
+\capcs ignorespaces {ignore any following space tokens}*{}
+\capcs Im {complex imaginary part symbol: $\Im$}{}{}
+\capcs imath {dotless letter `$\imath$' for use with math accents}{}{}
+\capcs immediate {perform the specified file operation without delay}*{}
+\capcs in {containment relation: $\in$}{}{}
+\capcs indent {produce an empty box of width |\\parindent| and enter
+ horizontal mode}*{}
+\capcs inf {inferior function: $\inf$}{}{}
+\capcs infty {infinity symbol: $\infty$}{}{}
+\capcs input {begin to read from a specified file}*{}
+\capcs inputlineno {the current line number of the current input file}*{}
+\capcs insert {produce an insertion of a specified class}*{}
+\capcs insertpenalties {sum of penalties due to insertions}*{}
+\capcs int {integral symbol: $\int$}{}{}
+\capcs interlinepenalty {additional penalty for a page break
+ between lines of a paragraph, by default~0}*{}
+\capcs iota {math Greek letter $\iota$}{}{}
+\capcs it {use italics, i.e., do |\\tenit\\fam=\\itfam|}{}{}
+\capcs item {begin a paragraph with hanging indentation of |\\parindent|
+ and preceded by a specified label}{}{}
+\capcs itemitem {like |\\item|, but with indentation of |2\\parindent|}{}{}
+\capcs itfam {italic family for math}{}{}
+\capcs j {dotless letter `\j', for use with accents}{}{}
+\capcs jmath {dotless letter `$\jmath$' for use with math accents}{}{}
+\capcs jobname {base name of the file with which \TeX\ was invoked}*{}
+\capcs jot {unit of measure for opening up displays}{}{}
+\capcs kappa {math Greek letter $\kappa$}{}{}
+\capcs ker {kernel function: $\ker$}{}{}
+\capcs kern {produce a specified amount of space at which
+ a break is not allowed}*{}
+\capcs l {Polish letter: \l}{}{}
+\capcs L {Polish letter: \L}{}{}
+\capcs lambda {math Greek letter $\lambda$}{}{}
+\capcs Lambda {math Greek letter $\Lambda$}{}{}
+\capcs land {logical ``and'' operator: $\land$}{}{}
+\capcs langle {left angle delimiter: $\langle$}{}{}
+\capcs language {the current set of hyphenation patterns}*{}
+\capcs lastbox {retrieve and remove the last item from the current list, if
+ it's a box}*{}
+\capcs lastkern {retrieve the last item from the current list, if it's a
+ kern}*{}
+\capcs lastpenalty {retrieve the last item from the current list, if it's a
+ penalty}*{}
+\capcs lastskip {retrieve the last item from the current list, if it's
+ glue}*{}
+\capcs lbrace {left brace delimiter: $\lbrace$}{}{}
+\capcs lbrack {left bracket delimiter: $\lbrack$}{}{}
+\capcs lccode {the character code for the lowercase form of a letter}*{}
+\capcs lceil {left ceiling delimiter: $\lceil$}{}{}
+\capcs ldotp {dot on baseline as punctuation: $\ldotp$}{}{}
+\capcs ldots {dots on baseline for math: $\ldots$}{}{}
+\capcs le {less than or equal relation: $\le$}{}{}
+\capcs leaders {fill a specified horizontal or vertical space by repeating a
+ specified box or rule}*{}
+\capcs left {produce the specified delimiter, sizing it to cover the
+ following subformula ended by |\\right|}*{}
+\capcs leftarrow {relation: $\leftarrow$}{}{}
+\capcs Leftarrow {relation: $\Leftarrow$}{}{}
+\capcs leftarrowfill {fill enclosing hbox with a |\\leftarrow|:
+ \hbox to 3.5em{\leftarrowfill}}{}{}
+\capcs leftharpoondown {relation: $\leftharpoondown$}{}{}
+\capcs leftharpoonup {relation: $\leftharpoonup$}{}{}
+\capcs lefthyphenmin {size of the smallest word fragment \TeX\ allows
+ before a hyphen at the beginning of a word, by default~2}*{}
+\capcs leftline {produce line with its text pushed to left margin}{}{}
+\capcs leftrightarrow {relation: $\leftrightarrow$}{}{}
+\capcs Leftrightarrow {relation: $\Leftrightarrow$}{}{}
+\capcs leftskip {glue \TeX\ inserts at the left of each line}*{}
+\capcs leq {equivalent to |\\le|}{}{}
+\capcs leqalignno {produce specified multiline display with equation numbers
+ on the left whose indicated parts are vertically aligned}{}{}
+\capcs leqno {put a specified equation number on the left of a display}*{}
+\capcs let {define a control sequence to be the next token}*{}
+\capcs lfloor {left floor delimiter: $\lfloor$}{}{}
+\capcs lg {logarithm function: $\lg$}{}{}
+\capcs lgroup {left group delimiter (the smallest size is shown here):
+ $\Big\lgroup$}{}{}
+\capcs lim {limit function: $\lim$}{}{}
+\capcs liminf {inferior limit function: $\liminf$}{}{}
+\capcs limits {place superscript above and subscript below a
+ large operator}*{}
+\capcs limsup {superior limit function: $\limsup$}{}{}
+\capcs line {produce a justified line of type}{}{}
+\capcs linepenalty {penalty for line breaking added to each line,
+ by default~10}*{}
+\capcs lineskip {vertical glue from one baseline to the next if the
+ lines are closer together than |\\lineskiplimit|, by default 1\pt}*{}
+\capcs lineskiplimit {threshold for using |\\lineskip| instead of
+ |\\base\-line\-skip|, by default 0\pt}*{}
+\capcs ll {much less than relation: $\ll$}{}{}
+\capcs llap {produce text (with no width) extending to the left
+ of the current position}{}{}
+\capcs lmoustache {top half of a large brace: $\big\lmoustache$}{}{}
+\capcs ln {natural logarithm function: $\ln$}{}{}
+\capcs lnot {logical ``not'' symbol: $\lnot$}{}{}
+\capcs log {logarithm function: $\log$}{}{}
+\capcs long {allow |\\par| tokens in the argument(s) of
+ the following definition}*{}
+\capcs longleftarrow {relation: $\longleftarrow$}{}{}
+\capcs Longleftarrow {relation: $\Longleftarrow$}{}{}
+\capcs longleftrightarrow {relation: $\longleftrightarrow$}{}{}
+\capcs Longleftrightarrow {relation: $\Longleftrightarrow$}{}{}
+\capcs longmapsto {relation: $\longmapsto$}{}{}
+\capcs longrightarrow {relation: $\longrightarrow$}{}{}
+\capcs Longrightarrow {relation: $\Longrightarrow$}{}{}
+\capcs loop {start a loop to be ended by |\\repeat|}{}{}
+\capcs looseness {difference between the number of lines you want a
+ paragraph to be relative to the optimal number}*{}
+\capcs lor {logical ``or'' operator: $\lor$}{}{}
+\capcs lower {lower a specified box by a specified amount}*{}
+\capcs lowercase {convert uppercase letters in the specified text
+ to lowercase}*{}
+\capcs lq {left quote character for text: \lq}{}{}
+\capcs mag {$1000$ times the ratio for enlarging all dimensions}*{}
+\capcs magnification {like |\\mag|, but don't enlarge the page size}{}{}
+\capcs magstep {$1000 \cdot 1.2^n$ for a specified $n$}{}{}
+\capcs magstephalf {$1000\cdot\sqrt{1.2}$}{}{}
+\capcs mapsto {relation: $\mapsto$}{}{}
+\capcs mark {produce a mark item with a specified text}*{}
+\capcs mathaccent {put specified math accent over the next character}*{}
+\capcs mathbin {space a specified subformula as a binary operator}*{}
+\capcs mathchar {produce the math character with the specified mathcode}*{}
+\capcs mathchardef {define a specified control sequence to be a mathcode,
+ a number between 0 and $2^{15}-1$}*{}
+\capcs mathchoice {select one of four specified math subformulas
+ depending on the current style}*{}
+\capcs mathclose {space a specified subformula as a closing delimiter}*{}
+\capcs mathcode {the mathcode of a specified character}*{}
+\capcs mathinner {space a specified subformula as an inner formula, e.g., a
+ fraction}*{}
+\capcs mathop {space a specified subformula as a large math operator}*{}
+\capcs mathopen {space a specified subformula as an opening delimiter}*{}
+\capcs mathord {space a specified subformula as an ordinary character}*{}
+\capcs mathpalette {produce a |\\mathchoice| which expands a specified
+ control sequence depending on the current style}{}{}
+\capcs mathpunct {space a specified subformula as punctuation}*{}
+\capcs mathrel {space a specified subformula as a relation}*{}
+\capcs mathstrut {produce an invisible box with the height and depth of a
+ left parenthesis and no width}{}{}
+\capcs mathsurround {space \TeX\ kerns before and after math in text}*{}
+\capcs matrix {produce a specified matrix}{}{}
+\capcs max {maximum function: $\max$}{}{}
+\capcs maxdeadcycles {value of |\\deadcycles| at which \TeX\ complains,
+ and then uses its own output routine, by default~25}*{}
+\capcs maxdepth {maximum depth of the bottom box on a page,
+ by default 4\pt}*{}
+\capcs maxdimen {largest dimension acceptable to \TeX}{}{}
+\capcs meaning {produce the human-understandable meaning of a specified
+ token as characters}*{}
+\capcs medbreak {indicate desirable page
+ break with |\\penalty-100| and produce |\\medskipamount| glue}{}{}
+\capcs medmuskip {glue for a medium math space, by default 4\mud\ plus 2\mud\
+ minus 4\mud}*{}
+\capcs medskip {produce |\\medskipamount| glue}{}{}
+\capcs medskipamount {glue for a medium vertical skip, by default 6\pt
+ plus 2\pt\ minus 2\pt}{}{}
+\capcs message {show expansion of the specified text on the terminal}*{}
+\capcs mid {middle relation: $\mid$}{}{}
+\capcs midinsert {produce the specified text at the current position if
+ possible, otherwise at the top of the next page}{}{}
+\capcs min {minimum function: $\min$}{}{}
+\capcs mit {use math italics, i.e., do |\\fam=1|}{}{}
+\capcs mkern {produce a specified kern in units of |mu| for math}*{}
+\capcs models {models relation: $\models$}{}{}
+\capcs month {current month, as a number}*{}
+\capcs moveleft {move a specified box left by a specified space; legal
+ only in vertical modes}*{}
+\capcs moveright {move a specified box right by a specified space; legal
+ only in vertical modes}*{}
+\capcs mp {minus and plus operator: $\mp$}{}{}
+\capcs mskip {produce specified glue in units of |mu| for math}*{}
+\capcs mu {math Greek letter $\mu$}{}{}
+\capcs multiply {multiply a specified |\\count| register by a specified
+ integer}*{}
+\capcs multispan {make next alignment entry span a specified number of
+ columns (or rows)}{}{}
+\capcs muskip {the specified muglue register}*{}
+\capcs muskipdef {define a specified control sequence to be a number
+ corresponding to a |\\muskip| register}*{}
+\capcs nabla {backwards difference symbol: $\nabla$}{}{}
+\capcs narrower {make both left and right margins narrower by
+ |\\parindent|}{}{}
+\capcs natural {natural symbol for music: $\natural$}{}{}
+\capcs nearrow {northeast arrow relation: $\nearrow$}{}{}
+\capcs ne {not equal relation: $\ne$}{}{}
+\capcs neg {logical ``not'' symbol: $\neg$}{}{}
+\capcs negthinspace {kern $-\frac1/6$\em}{}{}
+\capcs neq {not equal relation: $\neq$}{}{}
+\capcs newbox {reserve and name a |\\box| register}{}{\@newbox}
+\capcs newcount {reserve and name a |\\count| register}{}{\@newcount}
+\capcs newdimen {reserve and name a |\\dimen| register}{}{\@newdimen}
+\capcs newfam {reserve and name a math family}{}{\@newfam}
+\capcs newhelp {name a specified help message}{}{\@newhelp}
+\capcs newif {define a new conditional with the specified name}{}{\@newif}
+\capcs newinsert {name an insertion class, and reserve a
+ corresponding |\\box|, |\\count|, |\\dimen|, and |\\skip| registers}
+ {}{\@newinsert}
+\capcs newlanguage {reserve and name a |\\language|}{}{\@newlanguage}
+\capcs newlinechar {end-of-line character for |\\write|, etc.}*{}
+\capcs newmuskip {reserve and name a |\\muskip| register}{}{\@newmuskip}
+\capcs newread {reserve and name an input stream}{}{\@newread}
+\capcs newskip {reserve and name a |\\skip| register}{}{\@newskip}
+\capcs newtoks {reserve and name a |\\toks| register}{}{\@newtoks}
+\capcs newwrite {reserve and name an output stream}{}{\@newwrite}
+\capcs ni {``reverse in'' relation: $\ni$}{}{}
+\capcs noalign {insert material between rows (or columns) of an
+ alignment}*{}
+\capcs noboundary {inhibit ligatures or kerns involving the current font's
+ |boundarychar|}*{}
+\capcstwo nobreak {do |\\penalty10000|, i.e.,
+ inhibit a line or page break}{}{hnobreak:vnobreak}
+\capcs noexpand {suppress expansion of the next token}*{}
+\capcs noindent {enter horizontal mode without indenting the paragraph}*{}
+\capcs nointerlineskip {inhibit interline glue before the next line}{}{}
+\capcs nolimits {place superscript and subscript after large operators}*{}
+\capcs nonfrenchspacing {make interword spacing depend on punctuation}{}{}
+\capcs nonscript {inhibit any following glue or kern when
+ in script and scriptscript styles}*{}
+\capcs nonstopmode {don't stop at errors, even those about missing files}*{}
+\capcs nopagenumbers {inhibit printing of page numbers, i.e., do
+ |\\footline = {\\hfil}|}{}{}
+\capcs normalbaselines {set |\\baselineskip|, |\\line\-skip|, and
+ |\\line\-skip\-limit| to the normal values for the current type size}{}{}
+\capcs normalbaselineskip {value of |\\baselineskip| for the
+ current type size}{}{}
+\capcs normalbottom {make the bottom margin be the same from page to page}{}{}
+\capcs normallineskip {value of |\\lineskip| for the current type
+ size}{}{}
+\capcs normallineskiplimit {value of |\\lineskiplimit| for the
+ current type size}{}{}
+\capcs not {a slash with zero width for constructing negations of math
+ relations, as in $\not=$}{}{}
+\capcs notin {noninclusion relation: $\notin$}{}{}
+\capcs nu {math Greek letter $\nu$}{}{}
+\capcs null {expands to an empty hbox}{}{}
+\capcs nulldelimiterspace {space produced by a null delimiter, by
+ default 1.2\pt}*{}
+\capcs nullfont {primitive font with no characters in it}*{}
+\capcs number {produce a specified number as characters}*{}
+\capcs nwarrow {northwest arrow relation: $\nwarrow$}{}{}
+\capcs o {Danish letter: \o}{}{}
+\capcs O {Danish letter: \O}{}{}
+\capcs obeylines {make each end-of-line in the input file
+ equivalent to |\\par|}{}{}
+\capcs obeyspaces {produce space in the output for each space character in the
+ input}{}{}
+\capcs odot {centered dot operation: $\odot$}{}{}
+\capcs oe {\oe\ ligature}{}{}
+\capcs OE {\OE\ ligature}{}{}
+\capcs offinterlineskip {inhibit interline glue from now on}{}{}
+\capcs oint {contour integral operator: $\oint$}{}{}
+\capcs oldstyle {use old style digits: {\oldstyle1234567890}}{}{}
+\capcs omega {math Greek letter $\omega$}{}{}
+\capcs Omega {math Greek letter $\Omega$}{}{}
+\capcs ominus {circled minus operator: $\ominus$}{}{}
+\capcs omit {skip a column's (or row's) template in an alignment}*{}
+\capcs openin {prepare a specified input stream to read from a file}*{}
+\capcs openout {prepare a specified output stream to write to a file}*{}
+\capcs openup {increase |\\baselineskip|, |\\lineskip|, and
+ |\\lineskiplimit| by a specified amount}{}{}
+\capcs oplus {circled plus operator: $\oplus$}{}{}
+\capcs or {separate the cases of an |\\ifcase|}*{\@or}
+\capcs oslash {circled slash operator: $\oslash$}{}{}
+\capcs otimes {circled times operator: $\otimes$}{}{}
+\capcs outer {make the following macro definition illegal in contexts in
+ which tokens are absorbed at high speed}*{}
+\capcs output {token list \TeX\ expands when it finds a page break}*{}
+\capcs outputpenalty {if the page break occurred at a penalty, the value
+ of that penalty; otherwise zero}*{}
+\capcs over {produce a fraction with a bar of default thickness}*{}
+\capcs overbrace {produce a brace covering the top of a formula,
+ as in $\overbrace{h+w}{}$}{}{}
+\capcs overfullrule {width of the rule appended to an overfull box}*{}
+\capcs overleftarrow {produce a left arrow covering the top of
+ a formula, as in $\overleftarrow{r+a}$}{}{}
+\capcs overline {produce a line covering the top of a formula,
+ as in $\overline{2b}$}*{}
+\capcs overrightarrow {produce a right arrow covering the top of a
+ formula, as in $\overrightarrow{i+t}$}{}{}
+\capcs overwithdelims {produce a fraction with a bar of the default thickness
+ and surrounded by specified delimiters}*{}
+\capcs owns {owns relation: $\owns$}{}{}
+\capcs P {paragraph character for text: \P}{}{}
+\capcs pagedepth {\TeX\ sets this to the current depth of the current
+ page}*{}
+\capcs pagefilllstretch {\TeX\ sets this to the amount of |filll| stretch on
+ the current page}*{}
+\capcs pagefillstretch {\TeX\ sets this to the amount of |fill| stretch on
+ the current page}*{}
+\capcs pagefilstretch {\TeX\ sets this to the amount of |fil| stretch on the
+ current page}*{}
+\capcs pagegoal {\TeX\ sets this to the desired height for the current page
+ (i.e., |\\vsize| when the first box is put on the page)}*{}
+\capcs pageinsert {produce the specified text on the following page, and use up
+ the full page}{}{}
+\capcs pageno {the register |\\count0|, which contains the
+ (possibly negative) page number}{}{}
+\capcs pageshrink {\TeX\ sets this to the total amount of shrinkability
+ on the current page}*{}
+\capcs pagestretch {\TeX\ sets this to the total amount of stretchability
+ on the current page}*{}
+\capcs pagetotal {\TeX\ sets this to the natural height of the current
+ page}*{}
+\capcs par {finish paragraph and terminate horizontal mode}*{\@par}
+\capcs parallel {parallel relation: $\parallel$}{}{}
+\capcs parfillskip {horizontal glue \TeX\ inserts at the end of a
+ paragraph}*{}
+\capcs parindent {horizontal space \TeX\ inserts at the start of a
+ paragraph}*{}
+\capcs parshape {specify the width and length of each line
+ in the next paragraph}*{}
+\capcs parskip {vertical glue \TeX\ inserts before a paragraph}*{}
+\capcs partial {partial derivative symbol: $\partial$}{}{}
+\capcs pausing {if positive, stop after reading each line of input for a
+ possible replacement}*{}
+\capcstwo penalty {produce penalty (or bonus, if negative) for breaking
+ line or page here}*{hpenalty:vpenalty}
+\capcs perp {perpendicular relation: $\perp$}{}{}
+\capcs phantom {produce an invisible formula with the
+ dimensions of a specified subformula}{}{}
+\capcs phi {math Greek letter $\phi$}{}{}
+\capcs Phi {math Greek letter $\Phi$}{}{}
+\capcs pi {math Greek letter $\pi$}{}{}
+\capcs Pi {math Greek letter $\Pi$}{}{}
+\capcs plainoutput {\plainTeX's |\\output| routine}{}{}
+\capcs pm {plus and minus operator: $\pm$}{}{}
+\capcs pmatrix {produce a parenthesized matrix}{}{}
+\capcs pmod {parenthesized modulus notation to put at the end of a formula, as
+ in $x \equiv y+1 \pmod 2$}{}{}
+\capcs postdisplaypenalty {additional penalty for a line break
+ just after a display, by default~0}*{}
+\capcs Pr {probability function: $\Pr$}{}{}
+\capcs prec {precedes relation: $\prec$}{}{}
+\capcs preceq {precedes or equals relation: $\preceq$}{}{}
+\capcs predisplaypenalty {additional penalty for a line break just
+ before a display, by default~0}*{}
+\capcs predisplaysize {\TeX\ sets this to the width of the
+ line preceding a display}*{}
+\capcs pretolerance {badness tolerance for line breaks without
+ hyphenation, by default~100}*{}
+\capcs prevdepth {depth of the last nonrule box on the
+ current vertical list}*{}
+\capcs prevgraf {\TeX\ sets this to the number
+ of lines in the paragraph so far (in horizontal mode)
+ or in the previous paragraph (in vertical mode)}*{}
+\capcs prime {prime math symbol, as in $r^\prime$}{}{}
+\capcs proclaim {begin a theorem, lemma, hypothesis, $\ldots$}{}{\@proclaim}
+\capcs prod {large product operator: $\prod$}{}{}
+\capcs propto {proportional to relation: $\propto$}{}{}
+\capcs psi {math Greek letter $\psi$}{}{}
+\capcs Psi {math Greek letter $\Psi$}{}{}
+\capcs qquad {produce horizontal glue with width 2\em}{}{}
+\capcs quad {produce horizontal glue with width 1\em}{}{}
+\capcs radical {produce a specified radical symbol}*{}
+\capcs raggedbottom {allow the bottom margin to vary from page to page}{}{}
+\capcs raggedright {allow the right margin to vary from line to line}{}{}
+\capcs raise {raise a specified box by a specified amount}*{}
+\capcs rangle {right angle delimiter: $\rangle$}{}{}
+\capcs rbrace {right brace delimiter: $\rbrace$}{}{}
+\capcs rbrack {right bracket delimiter: $\rbrack$}{}{}
+\capcs rceil {right ceiling delimiter: $\rceil$}{}{}
+\capcs Re {complex real part symbol: $\Re$}{}{}
+\capcs read {read a line from a specified input stream}*{}
+\capcs relax {do nothing}*{}
+\capcs relpenalty {additional penalty for breaking after a relation,
+ by default~500}*{}
+\capcs repeat {end a loop started with |\\loop|}{}{\@repeat}
+\capcs rfloor {right floor delimiter: $\rfloor$}{}{}
+\capcs rgroup {right group delimiter (the smallest size is shown here):
+ $\Big\rgroup$}{}{}
+\capcs rho {math Greek letter $\rho$}{}{}
+\capcs right {produce the specified delimiter at the right end of a
+ subformula started with |\\left|}*{}
+\capcs rightarrow {relation: $\rightarrow$}{}{}
+\capcs Rightarrow {relation: $\Rightarrow$}{}{}
+\capcs rightarrowfill {fill enclosing hbox with a |\\rightarrow|:
+ \hbox to 3.5em{\rightarrowfill}}{}{}
+\capcs rightharpoondown {relation: $\rightharpoondown$}{}{}
+\capcs rightharpoonup {relation: $\rightharpoonup$}{}{}
+\capcs rightleftharpoons {relation: $\rightleftharpoons$}{}{}
+\capcs rightline {produce line with its text pushed to right margin}{}{}
+\capcs rightskip {glue \TeX\ inserts at the right of each line}*{}
+\capcs righthyphenmin {size of the smallest word fragment \TeX\ allows
+ after a hyphen at the end of a word, by default~3}*{}
+\capcs rlap {produce text (with no width) extending to the right
+ of the current position}{}{}
+\capcs rm {use roman type, i.e., do |\\tenrm\\fam=0|}{}{}
+\capcs rmoustache {bottom half of a large brace: $\big\rmoustache$}{}{}
+\capcs romannumeral {produce the lowercase roman numeral representation of a
+ specified number as characters}{}{}
+\capcs root {produce a specified root of a specified subformula, as in
+ $\root 3 \of 2$}{}{}
+\capcs rq {right quote character for text: \rq}{}{}
+\capcs S {section character for text: \S}{}{}
+\capcs sb {implicit subscript character}{}{}
+\capcs scriptfont {the script style font in a specified math family}*{}
+\capcs scriptscriptfont {the scriptscript style font in a specified
+ math family}*{}
+\capcs scriptscriptstyle {use scriptscriptstyle size in a formula}*{}
+\capcs scriptspace {additional space \TeX\ kerns after a subscript or
+ superscript, by default 0.5\pt}*{}
+\capcs scriptstyle {use scriptstyle size in a formula}*{}
+\capcs scrollmode {don't stop at most errors, but do stop at errors
+ about missing files}*{}
+\capcs searrow {southeast arrow relation: $\searrow$}{}{}
+\capcs sec {secant function: $\sec$}{}{}
+\capcs setbox {define a specified box register to be a box}*{}
+\capcs setlanguage {change to a specified set of hyphenation rules, but
+ don't change |\\language|}{*}{}
+\capcs setminus {set difference operator: $\setminus$}{}{}
+\capcs settabs {define the tabs for a tabbing alignment}{}{}
+\capcs sevenbf {use $7$-point bold font, |cmbx7|}{}{}
+\capcs seveni {use $7$-point math italic font, |cmmi5|}{}{}
+\capcs sevenrm {use $7$-point roman font, |cmr7|}{}{}
+\capcs sevensy {use $7$-point symbol font, |cmsy7|}{}{}
+\capcs sfcode {the space factor code of a specified character}*{}
+\capcs sharp {sharp symbol for music: $\sharp$}{}{}
+\capcs shipout {output a box to the |.dvi| file}*{}
+\capcs show {show, in the log and
+ on the terminal, the meaning of a specified token}*{}
+\capcs showbox {display the contents of a specified box register}*{}
+\capcs showboxbreadth {maximum number of items shown on each nesting
+ level, by default~5}*{}
+\capcs showboxdepth {maximum nesting level shown, by default~3}*{}
+\capcs showhyphens {show, in the log
+ and on the terminal, hyphenations in the specified text}{}{}
+\capcs showlists {display all lists being worked on}*{}
+\capcs showthe {show, in the log
+ and on the terminal, what |\\the| would produce}*{}
+\capcs sigma {math Greek letter $\sigma$}{}{}
+\capcs Sigma {math Greek letter $\Sigma$}{}{}
+\capcs sim {similarity relation: $\sim$}{}{}
+\capcs simeq {similar or equal relation: $\simeq$}{}{}
+\capcs sin {sine function: $\sin$}{}{}
+\capcs sinh {hyperbolic sine function: $\sinh$}{}{}
+\capcs skew {shift a specified accent by a specified amount
+ on a specified accented character}{}{}
+\capcs skewchar {character in a specified font used for positioning accents}*{}
+\capcs skip {the specified glue register}*{}
+\capcs skipdef {define a specified control sequence to be a number
+ corresponding to a |\\skip| register}*{}
+\capcs sl {use slanted type, i.e., do |\\tensl\\fam=\\slfam|}{}{}
+\capcs slash {\slash\ character that allows a line break}{}{}
+\capcs slfam {slanted family for math}{}{}
+\capcs smallbreak {indicate somewhat desirable page break
+ with |\\penalty-50| and produce |\\smallskipamount| glue}{}{}
+\capcs smallint {small integral symbol: $\smallint$}{}{}
+\capcs smallskip {produce |\\smallskipamount| glue}{}{}
+\capcs smallskipamount {glue for a small vertical skip, by default 3\pt\
+ plus 1\pt\ minus 1\pt}{}{}
+\capcs smash {produce formula with zero height and depth}{}{}
+\capcs smile {smile relation: $\smile$}{}{}
+\capcs sp {implicit superscript character}{}{}
+\capcs space {produce normal interword glue}{}{}
+\capcs spacefactor {modifies stretch and shrink of interword glue
+ if not 1000}*{}
+\capcs spaceskip {if nonzero and |\\spacefactor|${}<2000$, overrides
+ the normal interword glue}*{}
+\capcs spadesuit {spade suit symbol: $\spadesuit$}{}{}
+\capcs span {either combine entries in an alignment body or expand tokens in a
+ preamble}*{}
+\capcs special {write tokens to the |.dvi| file to be interpreted by a
+ DVI-reading program}*{}
+\capcs splitbotmark {last mark item in a box resulting from |\\vsplit|}*{}
+\capcs splitfirstmark {first mark item in a box resulting from
+ |\\vsplit|}*{}
+\capcs splitmaxdepth {maximum depth of a box resulting from |\\vsplit|}*{}
+\capcs splittopskip {glue \TeX\ inserts at the top of a box resulting from
+ |\\vsplit|}*{}
+\capcs sqcap {square cap operator: $\sqcap$}{}{}
+\capcs sqcup {square cup operator: $\sqcup$}{}{}
+\capcs sqrt {produce square root of a subformula, as in $\sqrt 2$}{}{}
+\capcs sqsubseteq {square subset or equal relation: $\sqsubseteq$}{}{}
+\capcs sqsupseteq {square superset or equal relation: $\sqsupseteq$}{}{}
+\capcs ss {German letter: \ss}{}{}
+\capcs star {star operator: $\star$}{}{}
+\capcs string {produce a specified token, most commonly a control
+ sequence, as characters}*{}
+\capcs strut {box with zero width, but height and depth of a standard
+ line, from baseline to baseline, in the current font}{}{}
+\capcs subset {subset relation: $\subset$}{}{}
+\capcs subseteq {subset or equal relation: $\subseteq$}{}{}
+\capcs succ {successor relation: $\succ$}{}{}
+\capcs succeq {successor or equal relation: $\succeq$}{}{}
+\capcs sum {large summation operator: $\sum$}{}{}
+\capcs sup {superior function: $\sup$}{}{}
+\capcs supereject {force a page break, and output all insertions}{}{}
+\capcs supset {superset relation: $\supset$}{}{}
+\capcs supseteq {superset or equal relation: $\supseteq$}{}{}
+\capcs surd {surd symbol: $\surd$}{}{}
+\capcs swarrow {southwest arrow relation: $\swarrow$}{}{}
+\capcs t {tie-after accent for text, as in \t uu}{}{}
+\capcs tabalign {equivalent to |\\+|, except it's not |\\outer|}{}{}
+\capcs tabskip {glue between columns (or rows) of an alignment}*{}
+\capcs tan {tangent function: $\tan$}{}{}
+\capcs tanh {hyperbolic tangent function: $\tanh$}{}{}
+\capcs tau {math Greek letter $\tau$}{}{}
+\capcs tenbf {use $10$-point bold font, |cmbx10|}{}{}
+\capcs tenex {use $10$-point math extension font, |cmex10|}{}{}
+\capcs teni {use $10$-point math italic font, |cmmi10|}{}{}
+\capcs tenit {use $10$-point text italic font, |cmti10|}{}{}
+\capcs tenrm {use $10$-point roman text font, |cmr10|}{}{}
+\capcs tensl {use $10$-point slanted roman font, |cmsl10|}{}{}
+\capcs tensy {use $10$-point math symbol font, |cmsy10|}{}{}
+\capcs tentt {use $10$-point typewriter font, |cmtt10|}{}{}
+\capcs TeX {produce the \TeX\ logo}{}{}
+\capcs textfont {the text style font in a specified math family}*{}
+\capcs textindent {like |\\item|, but doesn't do hanging indentation}{}{}
+\capcs textstyle {use textstyle size in a formula}*{}
+\capcs the {give the value of a specified token}*{}
+\capcs theta {math Greek letter $\theta$}{}{}
+\capcs Theta {math Greek letter $\Theta$}{}{}
+\capcs thickmuskip {glue for a thick math space, by default 5\mud\ plus 5\mud}*{}
+\capcs thinmuskip {glue for a thin math space, by default 3\mud}*{}
+\capcs thinspace {kern \frac1/6\em}{}{}
+\capcs tilde {tilde accent for math, as in $\tilde x$}{}{}
+\capcs time {the time of day, in minutes since midnight}*{}
+\capcs times {times operator: $\times$}{}{}
+\capcs toks {the specified token register}*{}
+\capcs toksdef {define a specified control sequence to be a number
+ corresponding to a |\\toks| register}*{}
+\capcs tolerance {badness tolerance for line breaks with hyphenation}*{}
+\margin{{\tt\\topglue} command added; recent addition to \TeX}
+\capcs to {mapping relation: $\to$}{}{}
+\capcs top {lattice top symbol: $\top$}{}{}
+\capcs topglue {produce specified vertical glue at the
+ top of a page}{}{}
+\capcs topinsert {produce the specified text at top of a page}{}{}
+\capcs topmark {|\\botmark| before the current page was boxed}*{}
+\capcs topskip {glue between the headline and the first line of text
+ on a page, by default 10\pt}*{}
+\capcs tracingall {turn on maximal tracing}{}{}
+\capcs tracingcommands {display execution of commands}*{}
+\capcs tracinglostchars {display characters that are asked for, but not
+ defined}*{}
+\capcs tracingmacros {display macro expansions}*{}
+\capcs tracingonline {show diagnostic output on the terminal as well as in
+ the log file}*{}
+\capcs tracingoutput {display contents of shipped-out boxes}*{}
+\capcs tracingpages {display page break calculations}*{}
+\capcs tracingparagraphs {display line break calculations}*{}
+\capcs tracingrestores {display values restored at the end
+ of a group}*{}
+\capcs tracingstats {display memory usage statistics}*{}
+\capcs triangle {triangle symbol: $\triangle$}{}{}
+\capcs triangleleft {left triangle operator: $\triangleleft$}{}{}
+\capcs triangleright {right triangle operator: $\triangleright$}{}{}
+\capcs tt {use typewriter type, i.e., do |\\tentt\\fam=\\ttfam|}{}{}
+\capcs ttfam {typewriter family for math}{}{}
+\capcs ttraggedright {use typewriter type and allow right margins of
+ paragraphs to vary from line to line}{}{}
+\capcs u {breve accent for text, as in \u r}{}{}
+\capcs uccode {the character code for the uppercase form of a letter}*{}
+\capcs uchyph {if positive, consider hyphenating words that start with a
+ capital letter}*{}
+\capcs underbar {underline the specified text without avoiding
+ any descenders, as in \underbar{fog}}{}{}
+\capcs underbrace {produce a brace covering the bottom of a formula, as in
+ $\underbrace{x+x}{}$}{}{}
+\capcs underline {underline a math formula below the descenders, as in
+ $\underline{x+y}$}*{}
+\capcs unhbox {append the contents of the box
+ in a specified box
+ register to the current list, and void the register; legal only in
+ horizontal modes}*{}
+\capcs unhcopy {like |\\unhbox|, but doesn't void the register}*{}
+\capcs unkern {if the last item on the current list is a kern, remove it}*{}
+\capcs unpenalty {if the last item on the current list is a penalty, remove
+ it}*{}
+\capcs unskip {if the last item on the current list is glue, remove it}*{}
+\capcs unvbox {append the contents of the box
+ in a specified box
+ register to the current list, and void the register; legal only in
+ vertical modes}*{}
+\capcs unvcopy {like |\\unvbox|, but doesn't void the register}*{}
+\capcs uparrow {relation: $\uparrow$}{}{}
+\capcs Uparrow {relation: $\Uparrow$}{}{}
+\capcs upbracefill {fill enclosing hbox with an upwards facing brace:
+ \hbox to 3.5em{\upbracefill}}{}{}
+\capcs updownarrow {relation: $\updownarrow$}{}{}
+\capcs Updownarrow {relation: $\Updownarrow$}{}{}
+\capcs uplus {cupped plus operator: $\uplus$}{}{}
+\capcs uppercase {convert lowercase letters in the specified text
+ to uppercase}*{}
+\capcs upsilon {math Greek letter $\upsilon$}{}{}
+\capcs Upsilon {math Greek letter $\Upsilon$}{}{}
+\capcs v {check accent for text, as in \v o}{}{}
+\capcs vadjust {produce vertical mode material after the current line}*{}
+\capcs valign {align text in rows}*{}
+\capcs varepsilon {variant math Greek letter $\varepsilon$}{}{}
+\capcs varphi {variant math Greek letter $\varphi$}{}{}
+\capcs varpi {variant math Greek letter $\varpi$}{}{}
+\capcs varrho {variant math Greek letter $\varrho$}{}{}
+\capcs varsigma {variant Greek letter $\varsigma$}{}{}
+\capcs vartheta {variant math Greek letter $\vartheta$}{}{}
+\capcs vbadness {badness threshold for reporting underfull or overfull
+ vboxes, by default~1000}*{}
+\capcs vbox {produce a vbox whose baseline is that of the bottom box
+ enclosed}*{}
+\capcs vcenter {center the specified text on the math axis}*{}
+\capcs vdash {left turnstile symbol: $\vdash$}{}{}
+\capcs vdots {vertical dots for math: \smash{$\vdots$}}{}{}
+\capcs vec {vector accent for math, as in $\vec x$}{}{}
+\capcs vee {logical ``or'' operator: $\vee$}{}{}
+\capcs vert {bar relation: $\vert$}{}{}
+\capcs Vert {double bar relation: $\Vert$}{}{}
+\capcs vfil {produce infinitely stretchable vertical glue}*{}
+\capcs vfill {produce even more infinitely stretchable vertical glue
+than that produced by |\\vfil|}*{}
+\capcs vfilneg {produce infinitely negative stretchable vertical glue}*{}
+\capcs vfootnote {produce a specified footnote with a specified
+ reference mark, but don't produce the reference mark in the text}{}{}
+\capcs vfuzz {space threshold for reporting overfull vboxes, by default
+ 0.1\pt}*{}
+\capcs vglue {produce specified vertical glue
+ that doesn't disappear at page breaks}{}{}
+\capcs voffset {vertical offset relative to one inch from the
+ paper's top edge}*{}
+\capcs vphantom {produce an invisible formula with zero width but natural
+ height and depth}{}{}
+\capcs vrule {produce a vertical rule; legal only in horizontal modes}*{}
+\capcs vsize {page height, by default 8.9\thinspace in}*{}
+\capcs vskip {produce specified vertical glue}*{}
+\capcs vsplit {break the contents of a specified box
+ register to the specified height}*{}
+\capcs vss {produce vertical glue that is infinitely stretchable and
+ infinitely shrinkable}*{}
+\capcs vtop {produce a vbox whose baseline is that of the top box enclosed}*{}
+\capcs wd {the width of the box in a specified box register}*{}
+\capcs wedge {logical ``and'' operator: $\wedge$}{}{}
+\capcs widehat {math accent, as in $\widehat {y+z+a}$}{}{}
+\capcs widetilde {math accent $\widetilde {b+c+d}$}{}{}
+\capcs widowpenalty {penalty for a single line beginning a page,
+ by default~150}*{}
+\capcs wlog {|\\write| the specified token list in the log file}{}{}
+\capcs wp {Weierstra\ss\ `p' symbol: $\wp$}{}{}
+\capcs wr {wreath product operator: $\wr$}{}{}
+\capcs write {write a line to a specified output stream}*{}
+\capcs xdef {equivalent to |\\global\\edef|, i.e., globally define a
+ macro, immediately expanding the replacement text}*{}
+\capcs xi {math Greek letter $\xi$}{}{}
+\capcs Xi {math Greek letter $\Xi$}{}{}
+\capcs xleaders {produce leaders with leftover space distributed equally
+ between the leader boxes}*{}
+\capcs xspaceskip {if nonzero and |\\spacefactor|${}\ge2000$,
+ overrides the normal interword glue}*{}
+\capcs year {the current year, as a number}*{}
+\capcs zeta {math Greek letter $\zeta$}{}{}
+
+\endcapsum
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/concepts.tex b/Master/texmf-dist/doc/plain/impatient/concepts.tex
new file mode 100644
index 00000000000..ad5f4cc42d2
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/concepts.tex
@@ -0,0 +1,4097 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter{Concepts}
+
+\chapterdef{concepts}
+
+This part of the book contains definitions and explanations of
+the concepts that we use in describing \TeX.
+The concepts include both
+technical terms that we use in explaining the commands and
+important topics that don't fit elsewhere in the book.
+
+The concepts are arranged alphabetically.
+The inside back cover of the book contains a complete list of
+concepts and the pages on which they are explained.
+We suggest that you make a copy of the inside back cover and keep it nearby
+so that you'll be able to identify and look up an unfamiliar
+concept immediately.
+As far as possible, we've kept our terminology consistent with that of
+\texbook.\idxref{\texbook}
+
+\beginconcepts
+
+\conceptindex{active characters}
+\concept {active character}
+
+An \defterm{active character} is a \refterm{character}
+that has a definition, e.g., a macro definition, associated with it.
+^^{macros//named by active characters}
+You can think of an active character as a special kind of control sequence.
+When \TeX\ encounters an active character, it
+executes the definition associated with the character.
+If \TeX\ encounters an active character that does not have
+an associated definition, it will complain about an
+undefined control sequence.
+
+An active character has a \refterm{category code} of $13$ (the value
+of ^|\active|).
+To define an active character, you should first
+use the ^|\catcode| command
+\ctsref{\catcode} to make it active
+and then provide the definition of the character, using
+a command such as |\def|, |\let|, or |\chardef|.
+The definition of an active character has the same form as
+the definition of a \refterm{control sequence}.
+^^{category codes//of active characters}
+If you try to define the macro for an active character
+before you make the character active, \TeX\ will complain about a
+missing control sequence.
+
+For example, the tilde character (|~|) is defined as an active character
+in \plainTeX. It
+produces a space between two words but links those words so that
+\TeX\ will not turn the space into a \refterm{line break}.
+\refterm{\PlainTeX:\plainTeX} defines `|~|' by the commands:
+
+\csdisplay
+\catcode `~ = \active \def~{\penalty10000\!visiblespace}
+|
+(The |\penalty| inhibits a line break and the `|\!visiblespace|'
+inserts a space.)
+\endconcept
+
+
+\conceptindex{alignments}
+\concept alignment
+
+\bix^^{tables}
+An \defterm{alignment} is a construct for aligning material, such as a
+table, in columns or rows. To form an alignment you need to
+(a)~describe the layout of the columns or rows and (b)~tell \TeX\ what
+material goes into the columns or rows. A tabbing alignment or a
+horizontal alignment is organized as a sequence of rows; a vertical
+alignment is organized as a sequence of columns. We first describe
+tabbing and horizontal alignments and then more briefly describe
+vertical alignments.
+
+Tabbing alignments are defined by \plainTeX. They are simpler but less
+flexible than horizontal alignments. Tabbing and horizontal alignments
+differ principally in how you describe their layouts.
+
+\bix^^|\settabs|
+\bix\ctsidxref{+}
+\bix\ctsidxref{cr}
+
+To construct a tabbing alignment you first issue a |\settabs| command
+\ctsref{\settabs} that specifies how \TeX\ should divide the available
+horizontal space into columns. Then you provide a sequence of rows for
+the table. Each row consists of a |\+| control sequence \ctsref{\@plus}
+followed by a list of ``entries'', i.e., row\slash column intersections.
+^^{entry (column or row)}
+Adjacent entries in a row are separated by an ampersand (|&|).
+\xrdef{@and}
+\ttidxref{&}
+The end of a row is indicated by ^|\cr| after its
+last entry.
+If a row has fewer entries than there are columns in the alignment,
+\TeX\ effectively fills out the row with blank entries.
+
+As long as it's preceded by a |\settabs| command, you can put a row of a
+tabbing alignment anywhere in your document. In particular, you can put
+other things between the rows of a tabbing alignment or describe several
+tabbing alignments with a single |\settabs|. Here's an example of a
+tabbing alignment:
+
+\xrdef{tabbedexample}\csdisplay
+{\hsize = 1.7 in \settabs 2 \columns
+\+cattle&herd\cr
+\+fish&school\cr
+\+lions&pride\cr}
+|
+The |\settabs 2 \columns| command in this example \ctsref{\settabs}
+tells \TeX\ to produce two equally wide columns.
+The line length is $1.7$ inches.
+The typeset alignment looks like this:
+
+{\def\+{\tabalign}% so it isn't \outer.
+\vdisplay{%
+\hsize 1.7 in \settabs 2 \columns
+\+cattle&herd\cr
+\+fish&school\cr
+\+lions&pride\cr}
+}%
+
+\margin{Missing explanation added here.}
+There's another form of tabbing alignment in which you specify the column
+widths with a template. The column widths in the template
+determine the column widths in the rest of the alignment:
+\csdisplay
+{\settabs\+cattle\quad&school\cr
+\+cattle&herd\cr
+\+fish&school\cr
+\+lions&pride\cr}
+|
+Here's the result:
+{\def\+{\tabalign}% so it isn't \outer.
+\vdisplay{%
+\settabs\+cattle\quad&school\cr
+\+cattle&herd\cr
+\+fish&school\cr
+\+lions&pride\cr}
+}%
+
+\eix^^|\settabs|
+\eix\ctsidxref{+}
+\bix^^|\halign|
+Horizontal alignments are constructed with |\halign| \ctsref\halign.
+\TeX\ adjusts the column widths of a horizontal alignment according to
+what is in the columns. When \TeX\ encounters the |\halign| command
+that begins a horizontal alignment, it first examines all the rows of
+the alignment to see how wide the entries are. It then sets each column
+width to accommodate the widest entry in that column.
+
+A horizontal alignment governed by |\halign| consists of a
+``\pix^{preamble}'' that indicates the row layout followed by the rows
+themselves.
+\ulist
+\li The preamble consists of a sequence of \pix^{template}s, one for each
+column. The template for a column specifies how the text for that
+column should be typeset. Each template must include a single |#|
+character
+\ttidxref{#}\xrdef{@asharp}
+to indicate where \TeX\ should substitute the text of an entry into the
+template. The templates are separated by ampersands (|&|), \ttidxref{&}
+and the end of the preamble is indicated by |\cr|. By providing an
+appropriate template you can obtain effects such as centering a column,
+left or right justifying a column, or setting a column in a particular
+\refterm{font}.
+
+\li The rows have the same form as in a tabbing alignment, except that
+you omit the |\+| at the beginning of each row.
+As before, entries are separated by |&| and the end of the row
+is indicated by |\cr|.
+\TeX\ treats each entry as a
+\refterm{group}, so any
+font-setting command or other \refterm{assignment}
+in a column template is in effect only for the entries in that column.
+\endulist
+\noindent The preamble and the rows must all be enclosed in the braces
+that follow |\halign|. Each |\halign| alignment must include
+its own preamble.
+
+For example, the horizontal alignment:
+\csdisplay
+\tabskip=2pc
+\halign{\hfil#\hfil &\hfil#\hfil &\hfil#\hfil \cr
+ &&\it Table\cr
+\noalign{\kern -2pt}
+ \it Creature&\it Victual&\it Position\cr
+\noalign{\kern 2pt}
+ Alice&crumpet&left\cr
+ Dormouse&muffin&middle\cr
+ Hatter&tea&right\cr}
+|
+
+\noindent produces the result:
+
+\xrdef{halignexample}
+\vdisplay{%
+\tabskip=2pc \halign{\hfil#\hfil &\hfil#\hfil &\hfil#\hfil \cr
+ &&\it Table\cr
+\noalign{\kern -2pt}
+ \it Creature&\it Victual&\it Position\cr
+\noalign{\kern 2pt}
+ Alice&crumpet&left\cr
+ Dormouse&muffin&middle\cr
+ Hatter&tea&right\cr}
+}%
+\noindent The ^|\tabskip| \ctsref{\tabskip} in this example
+tells \TeX\ to insert |2pc| of
+\refterm{glue} between the columns.
+The ^|\noalign| \ctsref{\noalign} commands tell \TeX\ to insert
+\refterm{vertical mode} material between two rows.
+In this example we've
+used |\noalign| to produce some extra space between the title rows and
+the data rows, and also to bring ``Table'' and ``Position'' closer together.
+(You can also use |\noalign| before the first row or after the
+last row.)
+\eix^^|\halign|
+
+You can construct a vertical alignment with the ^|\valign| command
+\ctsref{\valign}. A vertical alignment is organized as a series of
+columns rather than as a series of rows. A vertical alignment follows
+the same rules as a horizontal alignment except that the roles of rows
+and columns are interchanged. For example, the vertical alignment:
+
+\csdisplay
+{\hsize=0.6in \parindent=0pt
+\valign{#\strut&#\strut&#\strut\cr
+ one&two&three\cr
+ four&five&six\cr
+ seven&eight&nine\cr
+ ten&eleven\cr}}
+|
+\noindent yields:
+\vdisplay{%
+{\hsize=0.6in \parindent=\listleftindent % Because lists and displays
+ % are not indented just by \parindent.
+\valign{#\strut&#\strut&#\strut\cr
+ one&two&three\cr
+ four&five&six\cr
+ seven&eight&nine\cr
+ ten&eleven\cr}}
+}
+The ^|\strut| commands \ctsref{\strut}
+in the template are necessary to get the entries in each row
+to line up properly, i.e., to have a common \refterm{baseline},
+and to keep the distance between baselines uniform.
+\eix\ctsidxref{cr}
+\eix^^{tables}
+
+\endconcept
+
+
+\concept{\anatomy}
+
+\texbook\ describes the way that {\TeX} processes its input in terms of \TeX's
+``digestive tract''---its ``^{eyes}'', ``^{mouth}'',
+``^{gullet}'', ``^{stomach}'', and ``^{intestines}''. Knowing how this
+processing works can be helpful when you're trying to understand subtle
+aspects of \TeX's behavior as it's digesting a document.
+
+\ulist
+
+\li Using its ``\pix^{eyes}'', \TeX\ reads \refterm{characters:character} from
+^{input files} and passes them to its mouth. Since an input file
+can contain ^|\input| commands \ctsref{\input},
+\TeX\ can in effect ``shift its gaze'' from one file to another.
+
+\li Using its ``\pix^{mouth}'', {\TeX} assembles the characters into
+\refterm{tokens:token} and passes them to its gullet.
+Each token is either a \refterm{control sequence} or a single
+character. A control sequence always starts with an \refterm{escape
+character}. Note that spaces and ends-of-line are characters in their
+own right, although \TeX\ compresses a sequence of input spaces into a single
+space token. See \knuth{pages~46--47} for the rules by which \TeX\ assembles
+characters into tokens.
+^^{tokens//assembled from characters}
+
+\li Using its ``\pix^{gullet}'', {\TeX} expands any macros, conditionals, and
+^^{macros//expanded in \TeX's stomach}
+^^{tokens//passed to \TeX's stomach}
+similar constructs that it finds (see \knuth{pages~212--216}) and passes
+the resulting sequence of \refterm{tokens:token}
+to \TeX's stomach. Expanding one token
+may yield other tokens that in turn need to be expanded. {\TeX} carries
+out this expansion from left to right unless the order is modified by
+a command such as |\expandafter| \ctsref{\expandafter}.
+In other words, \TeX's gullet always expands the leftmost un\-ex\-panded
+token that it has not yet sent to \TeX's stomach.
+
+\li Using its ``\pix^{stomach}'', {\TeX} processes the tokens in
+groups.
+Each group contains a primitive command followed by its arguments, if any.
+Most of the commands are of the ``typeset this character'' variety,
+so their groups consist of just one token.
+Obeying the instructions given by the commands,
+\TeX's stomach assembles larger and larger
+units, starting with
+characters and ending with pages,
+and passes the pages to \TeX's intestines.
+^^{pages//assembled in \TeX's stomach}
+\TeX's stomach handles the tasks of \refterm{line break}ing---%
+^^{line breaking}
+i.e., breaking each paragraph into a sequence of lines---%
+and of \refterm{page break}ing---i.e., breaking a continuous sequence of lines
+and other vertical mode material
+into pages.
+
+\li Using its ``\pix^{intestines}'', \TeX\ transforms the pages produced by its
+stomach into a form intended for processing
+by other programs. It then sends the transformed output to the
+\dvifile.
+^^{\dvifile//created by \TeX's intestines}
+
+\endulist
+
+Most of the time you can think of the processes that take place in \TeX's
+eyes, mouth, gullet, stomach, and intestines
+as happening one after the other. But the
+truth of the matter is that commands executed in \TeX's stomach can
+influence the earlier stages of digestion. For instance, when \TeX's stomach
+encounters the |\input| command \ctsref{\input},
+its eyes start reading from a different
+file; when \TeX's stomach encounters a |\catcode| command
+ \ctsref{\catcode} specifying a category code
+for a character $c$, the interpretation of $c$ by \TeX's mouth is affected.
+And when
+\TeX's stomach encounters a \refterm{macro} definition, the expansions carried
+out in \TeX's gullet are affected.
+
+You can understand how the processes interact by imagining that each
+process eagerly gobbles up the output of its predecessor as soon as it
+becomes available. For instance, once \TeX's stomach has seen
+the last character of the filename in an |\input| command, \TeX's gaze
+immediately shifts to the first character of the specified input file.
+\endconcept
+
+\pagebreak
+\conceptindex{arguments}
+\concept argument
+
+^^{commands//arguments of}
+An \defterm{argument} contains text that is passed to a
+\refterm{command}.
+The arguments of a command complete the description of what
+the command is supposed to do.
+The command can either be a \refterm{primitive} command or a
+\refterm{macro}.
+
+Each primitive command ^^{primitive//command}
+has its own convention about the form of its
+arguments. For instance, the sequence of \refterm{tokens:token}:
+
+\csdisplay
+\hskip 3pc plus 1em
+|
+consists of the command `|\hskip|' and the arguments
+`|3pc plus 1em|'. But if you were to write:
+
+\csdisplay
+\count11 3pc plus 1em
+|
+you'd get an entirely different effect.
+\TeX\ would treat `|\count11|' as a command with argument `|3|',
+followed by the ordinary text tokens `|pc plus 1em|'
+(because count registers expect a number to be assigned to them)%
+---probably not what
+you intended. The effect of the command, by the way, would be to
+assign $3$ to count register $11$ (see the discussion of ^|\count|,
+\xref\count).
+
+Macros, on the other hand, all follow the same convention
+for their arguments.
+^^{macros//arguments of}
+Each argument passed to a macro
+corresponds to a \refterm{parameter}
+^^{parameters//and arguments}
+in the definition of that
+macro. ^^{macros//parameters of}
+A macro parameter is either ``delimited'' or ``undelimited''.
+The macro definition determines the number and nature of the macro parameters
+and therefore the number and nature of the macro arguments.
+
+The difference between a delimited argument and an undelimited argument
+lies in the way that \TeX\ decides where the argument ends.
+^^{delimited arguments}
+^^{undelimited arguments}
+\ulist
+\li A delimited argument consists of the tokens
+from the start of the argument up to, but not including, the
+particular sequence of tokens that serves as the delimiter for that argument.
+The delimiter is specified in the macro definition. Thus you
+supply a delimited argument to a macro by writing the argument itself
+followed by the delimiter. A delimited argument can be empty, i.e., have
+no text at all in it. Any braces in a delimited argument must be paired
+properly, i.e., every left brace must have a corresponding right brace
+and vice versa.
+
+\li An undelimited argument consists of a single token or a sequence of
+tokens enclosed in braces, like this:
+`|{Here is {the} text.}|'. Despite appearances, the outer braces don't
+form a \refterm{group}---\TeX\ uses them only to determine what the
+argument is. Any inner braces, such as the ones around `|the|', must be
+paired properly. If you make a mistake and put in too many right
+braces, \TeX\ will complain about an unexpected right brace. \TeX\ will
+also complain if you put in too many left braces, but you'll probably
+get \emph{that} complaint long after the place where you intended to
+end the argument (see \xref{mismatched}).
+\endulist
+\noindent
+See \conceptcit{macro} for more information
+about parameters and arguments. You'll find the precise rules pertaining
+to delimited and undelimited arguments in \knuth{pages~203--204}.
+\endconcept
+
+
+\concept{ASCII}
+
+\defterm{\ascii} is the abbreviation of ``American Standard Code for
+Information Interchange''. There are $256$ \ascii\
+^{characters}, each with its own code number, but
+the meanings of only the first~$128$ have been standardized. You can
+find these meanings in an \ascii\ ``code table'' such as the one on
+\knuth{page~367}. Characters $32$--$126$ are ``printable characters'',
+^^{printable characters} such as letters, numbers, and punctuation
+marks. The remaining characters are ``^{control characters}'' that are
+typically used (in the computer industry, not in \TeX) to control
+input\slash output and data communications devices. For instance,
+\ascii\ code $84$ corresponds to the letter `T', while \ascii\
+code~$12$ corresponds to the ``form feed'' function (interpreted by most
+printers as ``start a new page''). Although the \ascii\ standard
+specifies meanings for the control characters, many manufacturers of
+equipment such as modems and printers have used the control characters
+for purposes other than the standard ones.
+
+The meaning of a
+character in \TeX\ is usually consistent with its meaning in standard \ascii,
+and \refterm{fonts:font} that contain \ascii\
+printable characters usually have those characters in the same positions as
+their \ascii\ counterparts.
+But some fonts, notably those used for math, replace the \ascii\
+printable characters by other characters unrelated to the \ascii\ characters.
+For instance, the Computer Modern math font
+^^{Computer Modern fonts}
+|cmsy10| has the math symbol
+`{$\forall$}' in place of the \ascii\ digit `8'.
+
+
+\endconcept
+
+\conceptindex{assignments}
+\concept assignment
+
+An \defterm{assignment} is a construct that tells \TeX\ to assign a
+value to a register,
+^^{registers//assignment to}
+to one of its internal
+\refterm{parameters:parameter},
+^^{parameters//assignments to}
+to an entry in one of its internal tables,
+or to a \refterm{control sequence}. Some examples of assignments are:
+
+\csdisplay
+\tolerance = 2000
+\advance\count12 by 17
+\lineskip = 4pt plus 2pt
+\everycr = {\hskip 3pt \relax}
+\catcode\`@ = 11
+\let\graf = \par
+\font\myfont = cmbx12
+|
+
+The first assignment indicates that \TeX\ should assign the numeric value
+|2000| to the numeric parameter |\tolerance|, i.e., make the value of
+|\tolerance| be $2000$. The other assignments are similar. The `|=|'
+and the spaces are optional, so you could also write the first
+assignment more tersely as:
+
+\csdisplay
+\tolerance2000
+|
+
+See \knuth{pages~276--277} for the detailed syntax of assignments.
+\endconcept
+
+
+\concept badness
+
+The \defterm{badness} of a line is a measure of how far the interword
+spaces ^^{interword spacing}
+in the line deviate from their natural values,
+i.e., the values specified in the \refterm{fonts:font} used in the line.
+The greater the
+deviation, the greater the badness. Similarly, the badness of a page is
+a measure of how far the spaces between the boxes that
+make up the page deviate from their ideal values. (Ordinarily, most of these
+boxes are single lines of paragraphs.)
+
+More precisely, the badness
+is a measure of how much the \refterm{glue} associated with these spaces needs
+to stretch or shrink to fill the line or page exactly.
+\TeX\ computes the badness as approximately $100$
+times the cube of the ratio by which it must stretch or shrink the glue
+in order to compose a line or a page of the required size.
+^^{line breaks//badness for}^^{page breaks//badness for}
+For example, stretching the glue by twice its stated stretch yields a ratio of
+$2$ and a badness of $800$; stretching it by half its stated stretch yields
+a ratio of $.5$ and a badness of $13$.
+\TeX\ treats a badness greater than $10000$ as
+equal to $10000$.
+
+\TeX\ uses the badness of a line when it's breaking a paragraph into lines
+\seeconcept{line break}. It uses this information in two stages:
+
+\olist
+\li When \TeX\ is choosing line breaks,
+it will eventually accept lines whose badness is less than or equal to
+the value of |\tolerance| (\xref \tolerance). If \TeX\ cannot avoid setting
+a line whose badness exceeds this
+value, it will set it as an underfull or overfull \refterm{hbox}.
+\TeX\ will set
+an overfull or underfull hbox only as a last resort, i.e., only if there's no
+other way to break the paragraph into lines.
+\li Assuming that all lines are tolerably bad, \TeX\ uses the badness of lines
+in order to evaluate the different ways of breaking the paragraph into lines.
+During this evaluation it associates ``demerits'' with each potential line.
+The badness increases the number of \refterm{demerits}.
+\TeX\ then
+breaks the paragraph into lines in a way that minimizes the
+total demerits for the paragraph.
+Most
+often \TeX\ arranges the paragraph in a way that minimizes the badness of the
+worst line. See \knuth{pages~97--98} for the details of how \TeX\
+breaks a paragraph into lines.
+\endolist
+
+\TeX's procedure for assembling a sequence of lines and other vertical
+mode material into pages is similar to its procedure for line breaking.
+However, assembling pages is
+not as complicated because \TeX\ only considers one page at a time
+when it looks for page breaks.
+Thus the only decision it must make is where to end the current page.
+In contrast, when \TeX\ is choosing line breaks it
+considers several of them simultaneously.
+(Most word processors choose line breaks one at a time,
+and thus don't do as good a job at it as \TeX\ does.)
+See \knuth{pages~111--113} for the details of how \TeX\ chooses its
+page breaks.
+\endconcept
+
+
+\conceptindex{baselines}
+\concept baseline
+
+The \defterm{baseline} of a \refterm{box} is an imaginary line that runs
+across the box.
+^^{boxes//baselines of}
+When \TeX\ is
+assembling the boxes of a \refterm{horizontal list} into a larger box,
+it lines up the boxes in the list so that their baselines coincide.
+As an analogy, think of writing on a pad of ruled paper. Each letter
+that you write has
+an implicit baseline.
+In order to line up the letters horizontally,
+you place them on the pad so that their baselines
+agree with the light guidelines that are printed on the pad.
+
+A box can and often does extend below its baseline.
+For instance, the letter `g' extends below the baseline of its box because
+it has a descender (the bottom loop of the `g').
+\endconcept
+
+
+\conceptindex{boxes}
+\concept box
+
+A \defterm{box} is a rectangle of material to be typeset. A single
+\refterm{character} is a box by itself,
+and an entire page is also a box.
+\TeX\ forms a page as a nest of boxes within boxes within boxes. The
+outermost box is the page itself, the innermost boxes are mostly
+single characters, and single lines are boxes that are
+somewhere in the middle.
+
+\TeX\ carries out most of its box-building activities implicitly as it
+constructs paragraphs and pages.
+You can construct boxes explicitly
+using a number of \TeX\ \refterm{commands}, notably
+^|\hbox| \ctsref{\hbox},
+^|\vbox| \ctsref{\vbox}, and
+^|\vtop| \ctsref{\vtop}.
+The ^|\hbox| command
+constructs a box by appending smaller boxes horizontally from left to right;
+it operates on a \refterm{horizontal list} and yields
+an \refterm{hbox} ^^{hboxes} (horizontal box).
+^^{horizontal lists}
+The ^|\vbox| and |\vtop| commands
+construct a box by appending smaller boxes vertically from top to bottom;
+^^{vboxes}
+they operate on a \refterm{vertical list}
+and yield a \refterm{vbox} ^^{vboxes} (vertical box).
+^^{vertical lists}
+These horizontal and vertical lists can include not just smaller boxes but
+several other kinds of entities as well, e.g., \refterm{glue} and
+kerns.
+^^{kerns//as list items}
+
+A box has \refterm{height}, \refterm{depth}, and \refterm{width},
+^^{height} ^^{depth} ^^{width}
+like this:
+\vdisplay{\offinterlineskip\sevenrm
+ \halign{#&#&\kern3pt \hfil#\hfil\cr
+ &\hrulefill\cr
+ &\vrule
+ \vtop to .7in{\vss \hbox to .9in{\hss baseline\hss}\vskip4pt}%
+ \vrule
+ &\labelledheight{.7in}{height}\cr
+ %
+ \vbox to 0pt{
+ \vss
+ \hbox{reference point \hbox to 15pt{\rightarrowfill}%
+ \hskip3pt}%
+ \kern-4.5pt}&{\box\refpoint}\hrulefill\cr
+ %
+ \omit
+ &\vrule\hfil\vrule
+ &\labelledheight{.4in}{depth}\cr
+ %
+ &\hrulefill\cr
+ %
+ \noalign{\vskip3pt}%
+ &\leftarrowfill { width }\rightarrowfill\cr
+}}
+
+^^{baselines}
+The \refterm{baseline} is like one of
+the light guidelines on a pad of ruled paper.
+The boxes for letters such as `g'
+extend below the baseline; the boxes for letters such as `h' don't.
+The height of a box is the distance that the box extends above its
+baseline, while its depth is the distance that it extends below its
+baseline. \bix^^{reference point}
+The \minref{reference point}
+of a box is the place where its baseline intersects its left edge.
+
+{\tighten
+\TeX\ builds an hbox $H$ from a horizontal list by assuming
+a reference point for $H$ and then appending the items in the list to $H$
+one by one from left to right.
+Each box in the list is placed so that its baseline coincides with the
+baseline of $H$\kern-2pt,
+i.e., the component boxes are lined up horizontally.%
+\footnote{If a box is moved up or down with ^|\raise| or
+^|\lower|, \TeX\ uses its reference point before the move when
+placing it.}
+The height of $H$ is the
+height of the tallest box in the list, and the depth of $H$ is the depth
+of the deepest box in the list.
+The width of $H$ is the sum of the
+widths of all the items in the list.
+If any of these items are \refterm{glue} and \TeX\ needs to stretch or shrink
+the glue,
+the width of $H$ will be larger or smaller accordingly.
+See \knuth{page~77} for the~details.
+\par}
+
+Similarly, \TeX\ builds a vbox $V$ from a vertical list by assuming a
+temporary reference point for $V$ and then appending the items in the
+list to $V$ one by one from top to bottom. Each box in the list is
+placed so that its reference point is lined up vertically with the
+reference point of \Vperiod.\footnote{If a box is moved left or right with
+^|\moveleft| or ^|\moveright|, \TeX\ uses its reference point before the
+move when placing it.} As each box other than the first one is added to
+\Vcomma, \TeX\ puts \minref{interline glue} just above it. (This
+^{interline glue} has no analogue for hboxes.) The width of $V$ is the
+width of the widest box in the list, and the vertical extent (height
+plus depth) of $V$ is the sum of the vertical extents of all the
+items in the list.
+
+\bix^^|\vbox|
+\bix^^|\vtop|
+The difference between |\vbox| and |\vtop| is in how they partition
+the vertical extent of $V$ into a height and a depth.
+Choosing the reference point of $V$ determines that partition.
+\ulist
+\li For |\vbox|, \TeX\ places the reference point on a horizontal line
+with the reference point of the last component box
+or rule of \Vcomma, except
+that if the last box (or rule) is followed by glue or a kern, \TeX\ places the
+reference point at the very bottom of \Vperiod.%
+\footnote{The depth is limited by
+the parameter ^|\boxmaxdepth| \ctsref{\boxmaxdepth}.}
+
+\li For |\vtop|, \TeX\ places the reference point on a horizontal line
+with the reference point of the first component box or rule of \Vcomma,
+except that if the first box (or rule)
+is preceded by glue or a kern, \TeX\ places
+the reference point at the very top of \Vperiod.
+
+\endulist
+\noindent
+Roughly speaking, then, |\vbox| puts the reference point near the bottom
+of the vbox and |\vtop| puts it near the top.
+When you want to align a
+row of vboxes so that their tops line up horizontally,
+you should usually use |\vtop| rather than |\vbox|.
+See \knuth{pages~78 and 80--81} for the
+details of how \TeX\ builds vboxes.
+\eix^^|\vbox|
+\eix^^|\vtop|
+\eix^^{reference point}
+
+You have quite a lot of freedom in constructing boxes. The typeset
+material in a box can extend beyond the boundaries of the box as it does
+for some letters (mostly italic or slanted ones). The component boxes
+of a larger box can overlap. A box can have negative width, depth, or
+height, though boxes like that are not often needed.
+
+You can save a box in a box \refterm{register} and retrieve it later.
+Before using a box register,
+^^{box registers}
+you should reserve it and give it a name
+with the ^|\newbox| command \ctsref{\@newbox}. See
+\conceptcit{register} for more information about box
+registers.
+\endconcept
+
+
+\conceptindex{category codes}
+\concept {category code}
+
+The \defterm{category code} of a \refterm{character} determines that
+character's role in \TeX.
+^^{characters//category code of}
+For instance, \TeX\ assigns a certain role to
+letters, another to space characters, and so forth. \TeX\ attaches a
+code to each character that it reads. When \TeX\ reads the
+letter `|r|', for example, it ordinarily
+attaches the category code $11$ (letter)
+to it. For simple \TeX\ applications you won't need to worry about
+category codes, but they become important when you are trying to achieve
+special effects.
+
+Category codes apply only to characters that \TeX\ reads from input
+files. Once a character has gotten past \TeX's ^{gullet}
+\seeconcept{\anatomy} and been interpreted, its category code no
+longer matters. A character that you produce with the ^|\char| command
+\ctsref{\char} does not have a category code because |\char|
+is an instruction to \TeX\ to produce a certain character in a certain
+\refterm{font}. For instance, the ^{\ascii} code for `|\|'
+(the usual escape character) is $92$. If
+you type `|\char92 grok|', it is \emph{not} equivalent to |\grok|.
+Instead it tells \TeX\ to
+typeset `$c$grok', where $c$ is the character in position $92$
+of the code table for the current font.
+
+You can use the ^|\catcode| command \ctsref{\catcode} to reassign the
+category code of any character. By changing category codes you can
+change the roles of various characters. For instance, if you type
+`|\catcode`\@ = 11|', the category code of the at sign (|@|) will be set
+to ``letter''. You then can use `|@|' in the name of a control
+sequence.
+
+Here is a list of the category codes as they're defined in
+\refterm{\plainTeX} (see \xref{twocarets} for an explanation of
+the |^^| notation),
+together with the characters in each category:
+
+\xrdef{catcodes}
+\vskip\abovedisplayskip
+%k \vskip 0pt plus 2pt % to fix bad page break
+{%k \interlinepenalty = 10000
+\halign{\indent\hfil\strut#&\qquad#\hfil\cr
+\it Code&\it Meaning\cr
+\noalign{\vskip\tinyskipamount}
+0&Escape character \quad |\| ^^{escape character//category code of}
+ {\recat!ttidxref[\//category code of]]
+ \cr
+1&Beginning of group \quad |{| ^^{groups}
+ {\recat!ttidxref[{//category code of]]
+ \cr
+2&End of group \quad |}|
+ {\recat!ttidxref[}//category code of]]
+ \cr
+3&Math shift \quad |$| ^^{math shift}
+ {\recat!ttidxref[$//category code of]]
+ \cr
+4&Alignment tab \quad |&| ^^{tabs} ^^{alignments//tab character for}
+ \ttidxref{&//category code of} \cr
+5&End of line \quad |^^M| \tequiv \ascii\ \asciichar{return}
+ ^^{end of line} \ttidxref{^^M//category code of}\cr
+6&Macro parameter \quad |#|
+ ^^{macros//parameters of}
+ ^^{parameters//indicated by \b\tt\#\e}
+ \ttidxref{#//category code of} \cr
+7&Superscript \quad |^| and |^^K| ^^{superscripts}
+ \ttidxref{^^K}
+ \ttidxref{^//category code of} \cr
+8&Subscript \quad |_| and |^^A| ^^{subscripts}
+ \ttidxref{^^A}
+ \ttidxref{_//category code of} \cr
+9&Ignored character \quad |^^@| \tequiv \ascii\ \asciichar{null}
+ ^^{ignored characters} \indexchar ^^@ \cr
+10&Space \quad \visiblespace\ and |^^I| \tequiv \ascii\
+ \asciichar{horizontal\ tab}
+ ^^{horizontal tab}
+ ^^{space characters//category code of} \indexchar ^^I
+ {\recat!ttidxref[ ]]
+ \cr
+11&Letter \quad |A| \dots |Z| and |a| \dots |z| ^^{letter}\cr
+12&Other character \quad (everything not listed above or below)
+ ^^{other characters}\cr
+13&Active character \quad |~| and |^^L| \tequiv\ascii\ \asciichar{form\ feed}
+ ^^{active characters} ^^{form feed} \indexchar ~ \indexchar ^^L \cr
+14&Comment character \quad |%| ^^{comments}
+ {\recat!ttidxref[%//category code of]]
+ \cr
+15&Invalid character \quad |^^?| \tequiv \ascii\ \asciichar{delete}
+ ^^{invalid character} \indexchar ^^? \cr
+}}
+\vskip\belowdisplayskip
+%k \vskip 0pt plus 2pt % to fix bad page break
+
+\noindent Except for categories $11$--$13$,
+all the characters in a particular category produce the same effect.
+\margin{Misleading material removed.}
+For instance, suppose
+that you type:
+\csdisplay
+\catcode`\[ = 1 \catcode`\] = 2
+|
+Then the left and right bracket characters become
+beginning-of-group and end-of-group characters equivalent to
+the left and right brace characters. With these definitions `|[a b]|'
+is a valid group, and so are \hbox{`|[a b}|'} and~\hbox{`|{a b]|'}.
+
+The characters in categories $11$ (letter) and $12$
+(other character) act as \refterm{commands:command}
+that mean
+``produce a \refterm{box} containing this character
+typeset in the current font''.
+The only distinction between letters and ``other'' characters is
+that letters can appear in \refterm{control word}s but
+``other'' characters~can't.
+
+A character in category $13$ (active) acts like a control sequence
+all by itself. \TeX\ complains if it encounters an active character that
+doesn't have a definition associated with it.
+^^{active characters}
+
+If \TeX\ encounters an ^{invalid character} (category $15$)
+in your input, it will complain about it.
+
+The `|^^K|' and `|^^A|' characters have been included in categories
+$8$ (subscript) and $9$ (superscript), even though these meanings
+don't follow the standard \refterm{\ascii} interpretation.
+That's because some keyboards, notably some at Stanford
+University where \TeX\ originated,
+have down arrow and up arrow keys that generate these characters.
+\ttidxref{^^A}
+\ttidxref{^^K}
+
+There's a subtle point about the way \TeX\ assigns category codes that
+can trip you up if you're not aware of it. \TeX\ sometimes needs to
+look at a character twice as it does its initial scan: first to find the
+end of some preceding construct, e.g., a control sequence, and later to
+turn that character into a token. \TeX\ doesn't assign the category
+code until its \emph{second} look at the character. For example:
+
+\csdisplay
+\def\foo{\catcode`\$ = 11 }% Make $ be a letter.
+\foo$ % Produces a `$'.
+\foo$ % Undefined control sequence `foo$'.
+|
+\noindent
+This bit of \TeX\ code produces `\$' in the typeset output. When
+\TeX\ first sees the `|$|' on the second line,
+it's looking for the end of a control sequence name. Since
+the `|$|' isn't yet a letter, it marks the end of `|\foo|'. Next,
+\TeX\ expands the `|\foo|' macro and changes the category code of `|$|'
+to $11$ (letter). Then \TeX\ reads the `|$|' ``for real''. Since
+`|$|' is now a letter, \TeX\ produces a box
+containing the `|$|' character in the current font.
+When \TeX\ sees the third line, it treats `|$|' as a letter and thus
+considers it to be part of the control sequence name.
+As a result it complains about an undefined control sequence |\foo$|.
+
+\TeX\ behaves this way even when the terminating character is an
+end of line. For example, suppose that the macro |\fum| activates the
+end-of-line character. Then if |\fum| appears on a line $\ell$ by
+itself, \TeX\ will first interpret the end of line of $\ell$ as
+the end of the |\fum| control sequence and then will \emph{reinterpret}
+the end of line of $\ell$ as an active character.
+\endconcept
+
+
+\conceptindex{characters}
+\concept character
+
+{\tighten
+\TeX\ works with \defterm{characters} in two contexts:
+as input characters, which it reads, and as output characters,
+which it typesets.
+\TeX\ transforms most input characters
+into the output characters that depict them.
+For example, it normally
+transforms the input letter `|h|' into the letter `h' typeset in the current
+font.
+That is not the case, however, for an input character such as `|$|' that has a
+special meaning.
+\par}
+
+\TeX\ gets its input characters by reading them from input files (or from your
+terminal) and by expanding \refterm{macros:macro}. These are the
+\emph{only} ways that \TeX\ can acquire an input character.
+Each input character has a code number corresponding to its position in the
+\refterm{\ascii} code table. ^^{\ascii}
+For instance, the letter `|T|' has \ascii\ code~$84$.
+
+When \TeX\ reads
+a character, it attaches a \refterm{category code}
+^^{category codes//attached during input}
+to it. The category code affects how \TeX\ interprets the
+character once it has been read in. \TeX\ determines
+(and remembers) the category codes of the characters in a macro when it
+reads the macro's definition. As \TeX\ reads characters with its eyes
+\seeconcept{\anatomy} it does some ``filtering'',
+such as condensing
+sequences of spaces to a single space. See \knuth{pages~46--48} for the
+details of this filtering.
+
+The \ascii\
+``^{control characters}'' have codes $0$--$31$ and $127$--$255$.
+They either don't
+show up or cause strange behavior on most terminals if you try to
+display them. Nonetheless they are sometimes needed in \TeX\ input,
+so \TeX\ has a special notation for them.
+\xrdef{twocarets}
+If you type `|^^|$c$', where $c$ is any character, you get the character
+whose \ascii\ code is either $64$ greater or $64$ less than $c$'s
+\ascii\ code. The largest acceptable code value using this notation
+is $127$, so the notation is unambiguous.
+Three particularly common instances of this
+notation are `|^^M|' (the \ascii\ \asciichar{return} character),
+`|^^J|' (the \ascii\ \asciichar{line\ feed} character) and `|^^I|'
+(the \ascii\ \asciichar{horizontal\ tab} character).
+\ttidxref{^^M}\ttidxref{^^J}\ttidxref{^^I}
+
+{\tighten
+\TeX\ also has another notation for indicating \ascii\ code values
+that works for all character codes from $0$ to $255$.
+\xrdef{hexchars}
+If you type `|^^|$xy$', where $x$
+and $y$ are any of the ^{hexadecimal digit}s `|0123456789abcdef|',
+you get the single character with the specified code.
+(Lowercase letters are required here.)
+\TeX\ opts for the ``hexadecimal digits''
+interpretation whenever it has a choice, so you must not follow a character
+like `|^^a|' with a lowercase hexadecimal digit---if you do, you'll get the
+wrong interpretation.
+If you need to use this
+notation you'll find it handy to have a table of \ascii\ codes.
+\par}
+
+An output character is a character to be typeset.
+A command for producing an output character has the meaning
+``Produce a \refterm{box} containing
+character number $n$ from the current \refterm{font}'',
+where $n$ is determined by the command.
+\TeX\ produces your typeset document by combining such boxes with
+other typographical \hbox{elements} and arranging them
+on the page.
+
+An input character whose category code is $11$ (^{letter}) or $12$ (other)
+^^{other characters}
+acts as a command to produce the corresponding output character. In
+addition you can get \TeX\ to produce character $n$ by issuing the
+command `|\char |$n$' \ctsref{\char}, ^^|\char| where $n$ is a
+\refterm{number} between $0$ and $255$. The commands `|h|',
+|\char`h|, and |\char104| all have the same effect. ($104$ is the
+\ascii\ code for `h'.)
+
+\endconcept
+
+
+\concept class
+
+The \defterm{class} of a \refterm{character} specifies that character's
+role in math formulas. The class of a character is encoded in its
+\refterm{mathcode}. ^^{mathcodes//class encoded in} For example, the
+equals sign `|=|' is in class $3$ (Relation). \TeX\ uses its knowledge
+of character classes to decide how much space to put between different
+components of a math formula. \margin{clarifying material added} For
+example, here's a math formula shown first as \TeX\ normally prints it
+and then with the class of each character randomly changed:
+$$\strut a+(b-a)=a \qquad
+ \mathopen{a}\mathord{+}\mathrel{(}\mathclose{b}\mathclose{-}
+ \mathop{a}\mathopen{)}\mathord{=}\mathopen{a}$$
+
+See \xrefpg\mathord\ of this book for a list of the classes and
+\knuth{page~154} for their meanings.
+
+\endconcept
+
+
+\conceptindex{commands}
+\concept command
+
+A \defterm{command} instructs \TeX\ to carry out a certain action.
+Every \refterm{token} that reaches \TeX's stomach \seeconcept{\anatomy}
+acts as a command, except for those that are parts of arguments to
+other commands (see below).
+^^{tokens//as commands}
+A command can be invoked by a
+\refterm{control sequence}, by an \refterm{active character}, or by an
+ordinary character. It might seem odd that \TeX\ treats an ordinary
+character as a command, but in fact that's what it does:
+when \TeX\ sees
+an ordinary character
+it constructs a \refterm{box} containing that character typeset in
+the current font.
+
+A command can have arguments.
+The arguments of a command are single tokens or
+groups of tokens that complete the description of what
+the command is supposed to do.
+For example, the command `|\vskip 1in|' tells \TeX\ to skip
+$1$ inch vertically. It has an argument `|1in|',
+which consists of three tokens.
+The description of what |\vskip| is supposed to do would be incomplete
+without specifying how far it is supposed to skip.
+The tokens in the arguments to a command are not themselves considered
+to be commands.
+
+Some examples of different kinds of \TeX\ commands are:
+\ulist\compact
+\li Ordinary characters, such as `|W|', which instructs \TeX\
+to produce a box containing a typeset `W'
+\li Font-setting commands,
+such as |\bf|, which begins boldface type
+\li Accents, such as |\`|, which produces a grave accent as in `\`e'
+\li Special symbols and ligatures, such as |\P| (\P) and |\ae| (\ae)
+\li Parameters, such as |\parskip|, the amount of glue that
+\TeX\ puts between paragraphs
+\li Math symbols, such as |\alpha| ($\alpha$) and |\in| ($\in$)
+\li Math operators, such as |\over|, which produces a fraction
+\endulist
+\endconcept
+
+
+\conceptindex{conditional tests}
+\concept {conditional test}
+
+A \defterm{conditional test} is a command that tests whether or not a certain
+condition is true and
+causes \TeX\ either to expand or to skip some text, depending on
+the outcome.
+The general form of a conditional test is either:
+\display{
+{\tt \\if}$\alpha$\<true text>{\tt \\else}\<false text>{\tt \\fi}}
+^^|\else|^^|\fi|
+\noindent or:\hfil\
+\display{
+{\tt \\if}$\alpha$\<true text>{\tt \\fi}}
+\noindent where $\alpha$ specifies the particular test.
+For example, |\ifvmode| tests the condition that \TeX\
+is currently in a \refterm{vertical mode}.
+If the condition is true, \TeX\ expands \<true text>.
+If the condition is false, \TeX\ expands \<false text> (if it's present).
+Conditional tests are interpreted in \TeX's gullet
+\seeconcept{\anatomy}, so any expandable \minref{token}s in
+the interpreted text are expanded after the test has been resolved.
+The
+various conditional tests are explained in \headcit{Conditional tests}%
+{conds}.
+
+\endconcept
+
+
+\conceptindex{control sequences}
+\concept{control sequence}
+
+A \defterm{control sequence} is a name for a \TeX\ \refterm{command}.
+A control sequence always starts with an ^{escape character}, usually
+a backslash (|\|).
+\indexchar \
+A control sequence takes one of two forms:
+
+\ulist
+
+\li A \refterm{control word} is a control sequence consisting of an
+\refterm{escape character} followed by one or more letters.
+^^{control words}
+The control
+word ends when \TeX\ sees a nonletter. For instance, when \TeX\ reads
+`\hbox{|\hfill!visiblespace,!visiblespace!.the|}', it sees six
+\refterm{tokens:token}:
+the control sequence `|\hfill|', comma, space, `|t|', `|h|', `|e|'. The
+space after `|\hfill|' ends the control sequence and
+is absorbed by \TeX\ when it scans the control sequence.
+(For the text `|\hfill,!visiblespace!.the|', on the other hand,
+the comma both ends the control sequence and counts as a character in its
+own right.)
+
+\li A \refterm{control symbol}
+^^{control symbols}
+is a control sequence consisting of an
+^{escape character} followed by any character other than a letter---%
+even a space or an end of line.
+A control symbol is self-delimited, i.e., \TeX\ knows where it ends without
+having to look at what character comes after it.
+The character after a control symbol is never absorbed by
+the control symbol.
+\endulist
+\noindent See \xrefpg{spaces} for more information about spaces after control
+sequences.
+
+\TeX\ provides a great many predefined control sequences. The
+\refterm{primitive} control sequences are built into the \TeX\ computer
+program and thus are available in all forms of \TeX.
+^^{primitive//control sequence}
+Other
+predefined control sequences are provided by \refterm{\plainTeX}, the
+form of \TeX\ described in this book.
+
+You can augment the predefined control sequences with ones of your own,
+using commands such as ^|\def| and ^|\let| to define them.
+\chapterref{eplain} of this book contains a
+collection of control sequence definitions that you may find
+useful. In addition, your computing facility may
+be able to provide a collection of
+locally developed \TeX\ macros.
+\endconcept
+
+
+\conceptindex{control symbols}
+\concept{control symbol}
+
+A \defterm{control symbol} is a \refterm{control sequence} that consists
+of an \refterm{escape character} followed by any character other than a
+letter---even a space or end of line.
+^^{escape character}
+\endconcept
+
+
+\conceptindex{control words}
+\concept{control word}
+
+A \defterm{control word} is a \refterm{control sequence} that consists
+of an \refterm{escape character} followed by one or more
+letters.\footnote{A ``letter'' here has the strict meaning of a
+character with category code $11$.}
+\TeX\
+ignores any spaces or ends-of-line that follow a control word, except to
+note that they end the control word.
+^^{escape character}
+\endconcept
+
+
+
+\concept {decimal constant}
+
+See \conceptcit{number}.
+\endconcept
+
+\conceptindex{delimiters}
+\concept delimiter
+
+A \defterm{delimiter} is a character
+that is intended to be used as
+a visible boundary of a math formula.
+The essential property of a delimiter is that \TeX\ can adjust
+its size according
+to the vertical size (\refterm{height} plus \refterm{depth})
+of the subformula.
+However, \TeX\ performs the adjustment only if the delimiter
+appears in a ``delimiter context'', namely, as an argument to
+one of the commands ^|\left|,
+^|\right|,
+|\over!-with!-delims|,
+|\atop!-with!-delims|,
+or |\above!-with!-delims|
+^^|\overwithdelims|
+^^|\atopwithdelims|
+^^|abovewithdelims|
+\margin{Footnote deleted}
+(see \pp\xrefn{\overwithdelims},~\xrefn{\left}).
+The delimiter contexts also include any \refterm{argument}
+to a \refterm{macro} that uses the argument in a delimiter context.
+
+For example, the left and right
+parentheses are delimiters.
+If you use ^{parentheses} in a delimiter context
+around a formula, \TeX\ makes the parentheses big
+enough to enclose the \refterm{box} that contains the formula (as long as the
+\refterm{fonts:font} you're using have big enough parentheses).
+For example:
+\csdisplay
+$$ \left( a \over b \right) $$
+|
+yields:
+\centereddisplays $$\left (a \over b \right ) $$
+Here \TeX\ has made the parentheses big enough to accommodate the fraction.
+But if you write, instead:
+\csdisplay
+$$({a \over b})$$
+|
+you'll get:
+$$({a \over b})$$
+Since the parentheses aren't in a delimiter context,
+they are \emph{not} enlarged.
+
+Delimiters come in pairs:
+an opening delimiter at the left of the subformula
+and a closing delimiter at its right.
+You can explicitly choose a larger height for a
+delimiter with the commands ^|\bigl|, ^|\bigr|, and their
+relatives \ctsref{\bigl}.\footnote
+{\PlainTeX\ defines the various |\big| commands by using |\left| and |\right|
+to provide a delimiter context. It sets the size by
+constructing an empty formula with the desired height.}
+For instance, in order to get the
+displayed formula:
+$$\bigl(f(x) - x \bigr) \bigl(f(y) - y \bigr)$$
+
+\noindent in which the outer parentheses are a little bigger than the inner
+ones, you should write:
+
+\csdisplay
+$$\bigl( f(x) - x \bigr) \bigl( f(y) - y \bigr)$$
+|
+
+The $22$ \plainTeX\ delimiters, shown at their normal size, are:
+\display{%
+$( \>) \>[ \>] \>\{ \>\}
+\>\lfloor \>\rfloor \>\lceil \>\rceil
+\>\langle \>\rangle \>/ \>\backslash
+\>\vert \>\Vert
+\>\uparrow \>\downarrow \>\updownarrow
+\>\Uparrow \>\Downarrow \>\Updownarrow$}
+^^|)| ^^|)| ^^|[| ^^|]| ^^|\lbrack| ^^|\rbrack|
+^^|\{| ^^|\}| ^^|\lbrace| ^^|\rbrace|
+^^|\lfloor| ^^|\rfloor| ^^|\lceil| ^^|\rceil|
+^^|\langle| ^^|\rangle| ^^|/| ^^|\backslash|
+^^|\vert| ^^|\Vert|
+^^|\uparrow| ^^|\downarrow| ^^|\updownarrow|
+^^|\Uparrow| ^^|\Downarrow| ^^|\Updownarrow|
+\noindent
+Here they are at the largest size provided explicitly by \plainTeX\
+ (the |\Biggl|, |\Biggr|, etc., versions):
+\nobreak\vskip .5\abovedisplayskip
+\display{%
+$\Biggl( \>\Biggr) \>\Biggl[ \>\Biggr]
+\>\Biggl\{ \>\Biggr\} \>\Biggl\lfloor \>\Biggr\rfloor
+\>\Biggl\lceil \>\Biggr\rceil
+\>\Biggl\langle \>\Biggr\rangle
+\>\Biggm/ \>\Biggm\backslash
+\>\Biggm\vert \>\Biggm\Vert
+\>\Biggm\uparrow \>\Biggm\downarrow \>\Biggm\updownarrow
+\>\Biggm\Uparrow \>\Biggm\Downarrow \>\Biggm\Updownarrow$}
+\vskip .5\belowdisplayskip
+\noindent
+The delimiters (except for `|(|', `|)|', and
+`|/|')
+are among the symbols listed on
+pages~\xrefn{\lbrace}--\xrefn{\Uparrow}.
+They are listed in one place on \knuth{page~146}.
+
+A delimiter can belong to any class.
+^^{class//of a delimiter}
+For a delimiter that you enlarge with
+|\bigl|, |\bigr|, etc., the class is determined by the command:
+``opener'' for |l|-commands, ``closer'' for |r|-commands,
+``relation'' for |m|-commands, and ``ordinary symbol'' for |g|-commands,
+e.g., |\Big|.
+
+You can obtain a delimiter in two different ways:
+\olist
+\li You can make a character be a delimiter by assigning it a
+nonnegative delimiter code
+\bix^^{delimiter codes}
+(see below) with the ^|\delcode| command (\xref\delcode).
+Thereafter the character acts as a delimiter whenever you use it in a
+delimiter context.\footnote{%
+It's possible to use a character with a nonnegative delimiter code in
+a context where it isn't a delimiter. In this case \TeX\ doesn't perform the
+search; instead it just uses the character in the ordinary way
+(see \knuth{page~156}).}
+\li You can produce a delimiter explicitly with the ^|\delimiter| command
+(\xref\delimiter), in analogy to the way that you can produce an ordinary
+character with the |\char| command or a math character with the |\mathchar|
+command.
+The |\delimiter| command uses the same delimiter codes that are used in a
+|\delcode| table entry, but with an extra digit in front to indicate a
+class.
+It's rare to use |\delimiter| outside of a macro definition.
+\endolist
+
+A delimiter code tells
+\TeX\ how to search for an appropriate output character to represent
+a delimiter.
+The rules for this search are rather complicated
+(see \knuth{pages~156 and 442}).
+A complete understanding of these rules requires knowing
+about the organization of font ^{metrics file}s, a topic that is not just beyond
+the scope of this book but beyond the scope of \texbook\ as well.
+
+In essence the search works like this. The delimiter code specifies a
+``small'' output character and a ``large'' output character by
+providing a \refterm{font} position and a font \refterm{family} for each
+(see \xref\delcode).
+Using this information, \TeX\ can find (or construct)
+larger and larger versions of the delimiter. \TeX\ first tries
+different sizes (from small to large)
+of the ``small'' character in the ``small'' font
+and then
+different sizes (also from small to large)
+of the ``large'' character in the ``large'' font,
+seeking one whose height plus depth is sufficiently large.
+If none of the characters it finds are large
+enough, it uses the largest one that it finds.
+It's possible that
+the small character, the large character, or both have been left unspecified
+(indicated by a zero in the appropriate part of the delimiter code).
+If only one character
+has been specified, \TeX\ uses that one. If neither has been specified,
+it replaces the delimiter by a space of width ^|\nulldelimiterspace|.
+\eix^^{delimiter codes}
+
+\endconcept
+
+
+\concept demerits
+
+\TeX\ uses \refterm{demerits} as a measure of how undesirable a line is
+when it's breaking a paragraph into lines \seeconcept{line break}.
+^^{line breaks//demerits for}
+The demerits of a line are affected both by the \refterm{badness} of the line
+and by \refterm{penalties:penalty} associated with the line.
+^^{badness}
+\TeX's goal in choosing a particular arrangement of lines is to minimize the
+total demerits for the paragraph, which it computes by adding up the demerits
+for the individual lines.
+See \knuth{pages~97--98} for the details of how \TeX\
+breaks a paragraph into lines.
+\TeX\ does not use demerits when it's choosing page breaks; instead, it uses
+a similar measure known as the ``cost'' of a particular page break.
+\endconcept
+
+\concept depth
+
+^^{boxes//depth of}
+The \defterm{depth} of a \refterm{box} is the distance that the box extends
+below its \refterm{baseline}.
+\endconcept
+
+
+\conceptindex{dimensions}
+\concept dimension
+
+A \defterm{dimension} specifies a distance, that is, a linear measure of
+space. You use dimensions to specify sizes of things, such as the length
+of a line. Printers in English-speaking countries traditionally measure
+distance in points and picas, while printers in continental Europe
+traditionally measure distance in did\^ot points and ciceros. You can
+use these units or others, such as inches, that may be more
+familiar to you. The font-independent
+^{units of measure} that \TeX\ understands are:
+
+\xrdef{dimdefs}
+\nobreak\vskip\abovedisplayskip
+\halign{\indent\hfil\tt #\qquad&#\hfil\cr
+pt&^{point} (72.27 points = 1 inch)\cr
+pc&^{pica} (1 pica = 12 points)\cr
+bp&big point (72 big points = 1 inch)\cr
+in&^{inch}\cr
+cm&^{centimeter} (2.54 centimeters = 1 inch)\cr
+mm&^{millimeter} (10 millimeters = 1 centimeter)\cr
+dd&^{\didotpt} (1157 {\didotpt}s = 1238 points)\cr
+cc&^{cicero} (1 cicero = 12 {\didotpt}s)\cr
+sp&^{scaled point} (65536 scaled points = 1 point)\cr
+}
+\vskip\belowdisplayskip
+
+Two additional units of measure are associated with every font: `^|ex|',
+a vertical measure usually about the height of the letter `x'
+in the font, and `^|em|', a
+horizontal measure usually equal to the point size of the font and
+about the width of the letter `M' in the font. Finally,
+\TeX\ provides three ``infinite'' units of measure: `^|fil|', `^|fill|', and
+`^|filll|', in increasing order of~strength.
+
+A dimension is written as a ^{factor}, i.e, a multiplier,
+followed by a unit of measure.
+^^{units of measure}
+The factor can be either a whole \refterm{number} or
+a \refterm{decimal constant} containing a decimal point
+or decimal comma.
+The factor can be preceded by a plus or minus sign, so a dimension
+can be positive or negative.
+^^{dimensions//negative}
+The unit of measure must be there, even if the number is
+zero. Spaces between the number and the unit of measure are permitted
+but not required. You'll find a precise definition of a
+dimension on \knuth{page~270}. Here are some examples of dimensions:
+
+\csdisplay
+5.9in 0pt -2,5 pc 2fil
+|
+The last of these represents a first-order infinite distance.
+
+An infinite distance outweighs any finite distance or any weaker infinite
+distance. If you add |10in| to |.001fil|, you get |.001fil|; if you add
+|2fil| to |-1fill| you get |-1fill|; and so forth.
+\TeX\ accepts infinite distances
+only when you are specifying the \refterm{stretch} and \refterm{shrink}
+of \refterm{glue}.
+
+\TeX\ multiplies all dimensions in your document by a
+\refterm{magnification} factor $f/1000$,
+where $f$ is the value of the ^|\mag| parameter.
+^^{magnification}
+Since the default value of
+|\mag| is $1000$, the normal case is that your document is
+typeset just as specified. You can specify a dimension as it will be
+measured in the final document independent of magnification by putting
+`|true|' in front of the unit. For instance, `|\kern 8 true pt|'
+produces a kern of $8$ points whatever the magnification.
+\endconcept
+
+
+\concept {display math}
+
+The term \defterm{display math} refers to a math formula that \TeX\
+places on a line by itself with extra space above and below
+so as to set it off from the surrounding text.
+A display math formula is enclosed by `|$$|'s.
+\ttidxref{$$}
+\TeX\ reads display math in display math \refterm{mode}.
+\endconcept
+
+
+\concept{escape character}
+
+An \defterm{escape character} introduces a control sequence. The escape
+character in \refterm{\plainTeX} is the backslash (|\|).
+\indexchar \
+You can change the escape character from $c_1$ to $c_2$
+by reassigning the category codes of $c_1$ and $c_2$
+with the ^|\catcode| command \ctsref{\catcode}.
+You can also define additional escape characters similarly.
+If you want to typeset material containing literal escape characters, you must
+either
+(a) define a control sequence that stands for the printed escape character or
+(b) temporarily
+disable the escape character by changing its category code, using the
+method shown on \xrefpg{verbatim}. The definition:
+
+\csdisplay
+\def\\{$\backslash$}
+|
+is one way of creating a control sequence that stands for `$\backslash$'
+(a backslash typeset in a math font).
+
+You can use the ^|\escapechar| parameter \ctsref{\escapechar} to specify
+how the escape character is represented in synthesized control sequences,
+e.g., those created by |\string| and |\message|.
+
+
+\endconcept
+
+
+\concept family
+
+A \defterm{family} is a group of three related \refterm{fonts:font} used
+when \TeX\ is in \refterm{math mode}.
+^^{fonts//families of}
+Outside of math mode, families
+have no effect. The three fonts in a family are used for normal symbols
+(\refterm{text size}), subscripts and superscripts (\refterm{script
+size}), and sub-subscripts, super-superscripts, etc.\
+(\refterm{scriptscript size}).
+^^{text size}
+^^{script size}
+^^{scriptscript size}
+For example, the numeral `|2|' set in
+these three fonts would give you `$2$', `$\scriptstyle 2$', and
+`$\scriptscriptstyle 2$' (in \plainTeX).
+Ordinarily you would set up the
+three fonts in a family as different point sizes of the same typeface,
+but nothing prevents you from using different typefaces for the three
+fonts as well or using the same font twice in a family.
+
+{\tighten
+\TeX\ provides for up to sixteen families, numbered $0$--$15$. For
+example, family $0$ in \refterm{\plainTeX} consists of $10$-point roman
+for text, $7$-point roman for script, and $5$-point roman for
+scriptscript.
+^^{\plainTeX//font families in}
+\PlainTeX\ also defines family $1$ to consist of math
+italic fonts and reserves families $2$ and $3$ for ^{special symbols} and
+^{math extensions} respectively.\footnote{Families $2$ and $3$ are special
+in that their font metric files must include parameters for math
+spacing.} If you need to define a family for yourself, you should use
+the ^|\newfam| command \ctsref{\@newfam} to get the number of a family that
+isn't in use, and the ^|\textfont|, ^|\scriptfont|,
+and ^|\scriptscriptfont| commands \ctsref{\scriptscriptfont}
+to assign fonts to that family.
+\par}
+
+\endconcept
+
+
+\conceptindex{files}
+\concept file
+
+A \defterm{file} is a stream of information that \TeX\ interprets or
+creates. Files are managed by the ^{operating system} that supervises your
+\TeX\ run. \TeX\ deals with files in four different contexts:
+\olist
+\li A ``^{source file}'' is one that \TeX\ reads with its ``eyes''
+\seeconcept{\anatomy} and interprets according to its ordinary rules.
+Your primary input file---the one you specify after `|**|' or
+on the command line when
+you invoke \TeX---is a source file, and so is any file that you call for
+with an ^|\input| command \ctsref \input.
+
+\li A ``^{result file}'' is one that contains the results of
+running \TeX. A \TeX\ run creates two result files: the
+\dvifile\ and the log file.
+^^{\dvifile//as a result file}
+^^{log file//as a result file}
+The \dvifile\ contains the information needed to print your document;
+the
+log file contains a record of what happened during the run, including any
+error messages that \TeX\ generated.
+If your primary source file is named
+|screed.tex|, your \dvifile\ and log file will be named |screed.dvi|
+and |screed.log|.\footnote{This is the usual convention, but
+particular implementations of \TeX\ are free to change it.}
+
+\li To read from a file with the ^|\read|
+command \ctsref{\read} you need to associate the file with an input stream.
+^^{input streams//reading with \b\tt\\read\e}
+You can have up to $16$ input streams active
+at once, numbered $0$--$15$.
+The |\read| command reads a single line and makes it the value of a
+designated \refterm{control sequence}, so reading with
+|\read| is very different from reading with ^|\input| (which brings in an
+entire file).
+\TeX\ takes any input stream number not between
+$0$ and $15$ to refer to the terminal,
+so `|\read16|', say, reads the next line that you type at the terminal.
+
+\li To write to a file with the |\write|
+command \ctsref \write\ you need to associate the file
+with an output stream.
+^^|\write//output stream for|
+^^{output streams}
+You can have up to $16$ output streams active
+at once, numbered $0$--$15$.
+Input and output streams are independent.
+Anything sent to an output stream with a negative number goes to the log
+file; anything sent to an output stream with a number greater than $15$
+goes both to the log file and to the terminal.
+Thus `|\write16|', say, writes a line on the terminal and also sends
+that line
+to the log~file.
+
+\endolist
+
+You must open a stream file before you can use it.
+An input stream file is opened with an ^|\openin|
+command \ctsref \openin\ and an output stream file is opened with an
+^|\openout| command \ctsref\openout.
+For tidiness
+you should close a stream file when you're done with it, although
+\TeX\ will do that at the end of the run if you don't.
+The two commands for closing a stream file are ^|\closein| \ctsref\closein\
+and ^|\closeout| \ctsref\closeout.
+An advantage of closing a stream when
+you're done with it is that you can then reuse the stream for a different file.
+Doing this can be essential when you're reading a long sequence of files.
+
+Although you can assign numbers yourself to input and output streams,
+it's better to do it with the ^|\newread| and
+^|\newwrite| \ctsref{\@newwrite} commands.
+You can have more than one stream associated with a particular file,
+but you'll get (probably undiagnosed) garbage unless all of the streams
+are input streams. Associating more than one stream with an input file
+can be useful when you want to use the same input file for two different
+purposes.
+
+\TeX\ ordinarily defers the actions of opening, writing to, or closing
+an output stream until it ships out a page with ^|\shipout|
+(see \knuth{page~227}
+for the details). This behavior applies even to messages written to the
+terminal with |\write|. But you can get \TeX\ to perform an action
+on an output stream immediately by preceding the action command with
+^|\immediate| \ctsref\immediate. For example:
+\csdisplay
+\immediate\write16{Do not pass GO!! Do not collect $200!!}
+|
+\endconcept
+
+
+\conceptindex{file names}
+\concept {file name}
+
+A \defterm{file name} names a
+\refterm{file} that is known to the ^{operating system}
+that in turn
+supervises your \TeX\ run. The syntax of a file name does \emph{not}
+follow the usual rules of \TeX\ syntax, and in fact it is different
+in different implementations of \TeX.
+In particular, most \TeX\ implementations consider a file name to be
+terminated by a blank or an end of line. Thus \TeX\ is likely to
+misinterpret `|{\input chapter2}|'
+by taking the right brace as part of the file name.
+As a general rule, you should follow a file name by a blank or the
+end of the line as in `|{\input chapter2!visiblespace}|'.
+
+\endconcept
+
+
+\eject
+\conceptindex{fonts}
+\concept font
+
+A \defterm{font} in \TeX\ is a collection of up to $256$ output
+characters, usually having the same typeface design, style (roman,
+italic, bold, condensed, etc.),
+and point size.\footnote{\PlainTeX\ uses a special
+font for constructing ^{math symbols} in which the characters have
+different sizes. Other special fonts are often useful for applications
+such as typesetting ^{logos}.} The ^{Computer Modern fonts} that
+generally come with \TeX\ have only $128$ characters. The colophon on
+the last page of this book describes the typefaces that we used to set
+this book.
+
+For instance, here is the alphabet in the Palatino Roman $10$ point font:
+^^{Palatino fonts}
+\vskip\abovedisplayskip{\narrower\tenpal
+\noindent ABCDEFGHIJKLMNOPQRSTUVWXYZ\hfil\break
+abcdefghijklmnopqrstuvwxyz\par
+}\vskip\belowdisplayskip
+\noindent
+And here it is in the Computer Modern Bold Extended $12$
+point font:
+^^{Computer Modern fonts}
+\vskip\abovedisplayskip{\narrower\font\twelvebf=cmbx12\twelvebf
+\noindent ABCDEFGHIJKLMNOPQRSTUVWXYZ\hfil\break
+abcdefghijklmnopqrstuvwxyz\par
+}\vskip\belowdisplayskip
+The characters in a font are numbered.
+The numbering usually agrees with the ^{\ascii} numbering
+for those characters that exist in the \ascii\ character set.
+The code table for each font indicates what the character
+with code $n$ looks like in that font.
+Some fonts, such as the ones used for mathematical symbols, have no
+letters at all in them. You can produce a \refterm{box} containing the
+character numbered $n$, typeset in the current font, by writing `|\char |$n$'
+ \ctsref{\char}.
+
+In order to use a font in your document,
+you must first name it with a control sequence and load it. Thereafter you
+can select it by typing
+that control sequence whenever you want to use it.
+\PlainTeX\ provides a number of fonts that are already named and~loaded.
+
+You name and load a font as a single operation, using a
+command such as `|\font\twelvebf=cmbx12|'. Here `|\twelvebf|' is the
+control sequence that you use to name the font
+and `|cmbx12|' identifies the font metrics file
+|cmbx12.tfm|
+in your computer's file system.
+You then can start to use the font by typing
+`|\twelvebf|'. After that, the font will be in effect until
+either (a)~you select another font or (b)~you terminate the
+\refterm{group}, if any, in which you started the
+font. For example, the input:
+
+\csdisplay
+{\twelvebf white rabbits like carrots}
+|
+will cause the |cmbx12| font to be in effect just for the
+text `|white rabbits like carrots|'.
+
+You can use \TeX\ with fonts other than
+Computer Modern (look at the example on \xrefpg{palatino} and
+at the page headers).
+The files for such fonts need to be
+installed in your computer's file system in a place where \TeX\ can find
+them. \TeX\ and its companion programs generally need two files for each font:
+one to give its metrics (|cmbx12.tfm|,
+^^{\tfmfile}
+for example) and another to
+give the shape of the characters (|cmbx12.pk|, for example).
+\TeX\ itself uses only the metrics
+file. Another program, the device driver,
+^^{device drivers}
+converts the \dvifile\
+^^{\dvifile//converted by driver}
+produced by \TeX\ to a form that your printer
+or other output device can handle. The driver
+uses the shape file (if it exists).
+
+The font metrics file contains the information that \TeX\ needs in
+order to allocate space for each typeset character.
+Thus it includes the size of each character, the ligatures and
+kerns that pertain to sequences of adjacent characters, and so on.
+What the metrics file
+\emph{doesn't} include is any information about the shapes
+of the characters in the font.
+
+{\tighten
+The shape (pixel) file \xrdef{shape}
+^^{pixel file}^^{shape file}
+may be in any of several
+formats. The extension part of the name (the part after the dot)
+tells the driver which format the shape file is in. For example,
+|cmbx12.pk| ^^{\pkfile} might be the shape file for font |cmbx12| in
+packed format, while |cmbx12.gf| ^^{\gffile} might be the shape file
+for font |cmbx12| in generic font format.
+A shape file may not be needed for a font that's resident in your
+output device.
+\par}
+
+\endconcept
+
+
+\conceptindex{footers}
+\concept footer
+
+A \defterm{footer} is material that \TeX\ puts at the bottom of every page,
+below the text of that page.
+The default footer in \plainTeX\ is a centered page number.
+Ordinarily a footer consists of a single line, which you can set by
+assigning a token list to ^|\footline| \ctsref\footline.
+See \xrefpg{bighead} for a method of producing multiline footers.
+
+\endconcept
+
+%k \vskip 0pt plus 2pt % to solve page break problem
+
+\concept {format file}
+
+{\tighten
+A \defterm{format file} is a file that contains an image of
+\TeX's memory in a form in which it can be reloaded quickly.
+A format file can be created with the ^|\dump| command \ctsref\dump.
+The image contains a complete record
+of the definitions (of \refterm{fonts:font}, \refterm{macros:macro}, etc.)
+that were present when the dump took place.
+By using ^|virtex|, a special ``virgin'' form of \TeX,
+you can then reload the format file at high speed and
+continue in the same state that \TeX\ was in at the time of the dump.
+The advantage of a format file over an ordinary input
+file containing the same information is that \TeX\ can load it much
+faster.
+\par}
+
+Format files can only be created by ^|initex|, another special
+form of \TeX\ intended just for that purpose.
+Neither |virtex| nor |initex| has any
+facilities other than the primitives built into the
+\TeX\ program itself.
+
+A ^{preloaded} form of \TeX\ is one that has a format file already
+loaded and is ready to accept user input.
+The form of \TeX\ that's called |tex|
+often has the \plainTeX\ definitions preloaded.
+(\PlainTeX\ is ordinarily available in two other forms as well:
+as a format file and as a \TeX\ source file.
+In some environments, |tex| is equivalent to calling |virtex|
+and then loading |plain|.)
+Creating preloaded forms of \TeX\ requires a special program;
+it cannot be done using only the facilities of \TeX\ itself.
+
+\endconcept
+
+\concept global
+
+A \defterm{global} definition is effective
+until the end of the
+document or until it is overridden by another definition,
+even when it occurs within a \refterm{group}.
+Thus a global definition is unaffected by group boundaries.
+You can make any definition global by prefixing it with the |\global|
+command \ctsref{\global} unless ^|\globaldefs| \ctsref\globaldefs{}
+is negative.
+^^|\global|
+
+There's a special way of making a \refterm{macro} definition global.
+^^{macros//global}
+Normally you define a macro using either the |\def| command
+or the |\edef| command \ctsref{\edef}.
+^^|\edef//making global|
+^^|\def//making global|
+If you use |\gdef| or |\xdef|
+instead of |\def| and |\edef| respectively, the macro definition will
+be global. That is, `^|\gdef|' is equivalent to `|\global\def|' and
+`^|\xdef|' is equivalent to `|\global\edef|'.
+\endconcept
+
+
+\concept glue
+
+\bix^^{stretch}
+\bix^^{shrink}
+\defterm{Glue} is blank space that can stretch or shrink.
+Glue gives \TeX\ the flexibility that it needs in order to produce
+handsome
+documents. Glue comes in two flavors: horizontal glue and vertical glue.
+Horizontal glue occurs within \refterm{horizontal lists:horizontal list},
+while vertical glue occurs within \refterm{vertical lists:vertical list}.
+^^{horizontal lists}
+^^{vertical lists}
+You
+can produce a glue item either implicitly, e.g., with an interword space, or
+explicitly, e.g., with the ^|\hskip| command.
+^^{spaces//interword}
+\TeX\ itself produces many glue
+items as it typesets your document.
+We'll just describe horizontal glue---vertical glue is analogous.
+
+When \TeX\ assembles a list of boxes and glue into a larger
+unit,
+^^{boxes//glue with}
+it adjusts the size of the glue to meet the space requirements of the
+larger unit. For instance, \TeX\ ensures that the ^{right margin} of a page
+is uniform by adjusting the horizontal glue within lines.
+Similarly, it ensures that different pages have the
+same ^{bottom margin}
+by adjusting the glue between blocks of text such as paragraphs and
+math displays
+(where the change is least likely to be conspicuous).
+
+A glue item has a natural space---the size it ``wants to be''. Glue
+also has two other attributes: its \refterm{stretch} and its
+\refterm{shrink}. You can produce a specific amount of horizontal glue
+with the ^|\hskip| \refterm{command} \ctsref{\hskip}. The command
+|\hskip 6pt plus 2pt minus 3pt|
+produces a horizontal glue item whose natural
+size is $6$ points, whose stretch is $2$ points, and whose shrink is
+$3$ points. Similarly, you can produce a specific amount of vertical
+glue with the ^|\vskip| command \ctsref{\vskip}.
+
+The best way to understand what stretch and shrink are about
+is to see an example of glue at work.
+Suppose you're constructing an \refterm{hbox} from three boxes and two glue
+items, as in this picture:
+\gluepicture
+ 29 {\picbox 4 \gluebox 6 4 1 6 \picbox 5 \gluebox 10 8 3 10 \picbox 4 }
+\noindent
+The units of measurement here could be points, millimeters, or anything else.
+If the hbox is allowed to assume its natural width, then each glue item in the
+box also assumes its natural width. The total width of the hbox is then the
+sum of the widths of its parts, namely, $29$ units.
+
+Next, suppose that the hbox is required to be wider than $29$ units, say
+$35$ units. This
+could happen, for example, if the hbox is required to occupy an entire
+line and the line width is $35$ units.
+Since the boxes can't change their width,
+\TeX\ produces the necessary extra space by making the glue items wider.
+The picture now looks like this:
+\gluepicture
+ 35 {\picbox 4 \gluebox 6 4 2 8 \picbox 5 \gluebox 10 8 6 14 \picbox 4 }
+The glue items don't become wider equally; they became wider in proportion to
+their stretch. Since the second glue item
+has twice as much stretch as the first one,
+it gets wider by four units while the first glue item gets wider by only
+two units.
+Glue can be stretched as far as necessary, although \TeX\ is
+somewhat reluctant to
+stretch it beyond the amount of stretch given in its definition.
+
+Finally, suppose that the hbox is required to be narrower than $29$ units, say
+$25$ units. In this case \TeX\ makes the glue items narrower.
+The picture looks like this:
+\gluepicture
+ 25 {\picbox 4 \gluebox 6 4 2 5 \picbox 5 \gluebox 10 8 6 7 \picbox 4 }
+The glue items become narrower in proportion to their shrink.
+The first glue item becomes narrower by one unit, while the second glue item
+becomes narrower by three units. Glue cannot shrink by a distance
+less than the amount of shrink
+given in its definition even though the distance it can stretch is
+unlimited. In this important sense the shrink and
+the stretch behave differently.
+
+A good rule of thumb for glue is to set the natural size to the amount
+of space that looks best, the stretch to the largest amount of space
+that \TeX\ can add before the document starts to look bad, and the
+shrink to the largest amount of space that \TeX\ can take away before
+the document starts to look bad. You may need to set the values by
+experiment.
+
+You can produce glue that is infinitely stretchable by specifying
+its stretch in units of `^|fil|', `^|fill|', or `^|filll|'. Glue measured in
+`|fill|' is infinitely more stretchable than glue measured in `|fil|', and
+glue measured in `|filll|' is infinitely more stretchable than glue measured
+in `|fill|'. You should rarely have any need for `|filll|' glue. Glue whose
+stretch is |2fil| has twice as much stretch as glue whose stretch is |1fil|,
+and similarly for the other kinds of infinitely stretchable glue.
+
+When \TeX\ is
+apportioning extra space among glue items, the infinitely stretchable
+ones, if there
+are any, get all of it. Infinitely stretchable glue is particularly useful for
+setting text flush left, flush right, or centered:
+
+\ulist\compact
+\li To set text ^{flush left}, put infinitely stretchable
+horizontal glue to the right of it.
+That glue will consume all the
+extra space that's available on the line.
+You can use the ^|\leftline| command \ctsref{\leftline}
+or the |\raggedright| command \ctsref{\raggedright} to do~this.
+\li To set text ^{flush right}, put infinitely
+stretchable horizontal glue to the left of it.
+As before, that glue will consume all the extra space on the line.
+You can use the ^|\rightline| command \ctsref{\rightline} to do~this.
+\li To set ^{centered text}, put identical infinitely stretchable
+horizontal glue items
+on both sides of it.
+These two glue items will divide all the extra space on the line
+equally between them.
+You can use the ^|\centerline| command \ctsref{\centerline} to do~this.
+\endulist
+
+You can also specify infinitely shrinkable glue
+^^{glue//infinitely shrinkable}
+in a similar way. Infinitely shrinkable glue can act as negative space.
+Note that |fil|, etc., can be used only
+to specify the stretch and shrink of glue---they can't be used to specify
+its natural size.
+\eix^^{stretch}
+\eix^^{shrink}
+\endconcept
+
+
+\conceptindex{groups}
+\concept group
+
+A \defterm{group} is a part of your manuscript that \TeX\ treats as a unit.
+You indicate a group by enclosing it in the braces
+`|{|' and `|}|' (or any other characters with the appropriate
+\refterm{category codes}).
+^^|{//starting a group|
+^^|}//ending a group|
+
+The most important property of a group is that any nonglobal
+definition or assignment that you make inside a group disappears when
+the group ends. For instance, if you write:
+
+\csdisplay
+Please don't pour {\it any} more tea into my hat.
+|
+the |\it| \refterm{control sequence} causes \TeX\ to set the word
+`|any|' in italic type but does not affect the rest of the text.
+As another example, if you use the |\hsize| parameter
+\ctsref{\hsize} to change the line length within a group, the line length
+reverts to its previous value once \TeX\ has gotten past the group.
+
+Groups are also useful as a way of controlling spacing. For instance, if you
+write:
+
+\csdisplay
+\TeX for the Impatient and the Outpatient too.
+|
+\noindent
+you'll get:
+\display{%
+\TeX for the Impatient and the Outpatient too.
+}
+\noindent
+since the control sequence |\TeX| (which produces the \TeX\
+logo) absorbs the following space.
+What you probably want is:
+\display{%
+{\TeX} for the Impatient and the Outpatient too.
+}
+\noindent
+One way to get it is to enclose `|\TeX|' in a group:
+\csdisplay
+{\TeX} for the Impatient and the Outpatient too.
+|
+The right brace prevents the control sequence from absorbing the space.
+\endconcept
+
+
+\conceptindex{hboxes}
+\concept hbox
+
+An \defterm{hbox} (horizontal box) is a \refterm{box} that \TeX\
+constructs by placing the items of a \refterm{horizontal list} one after
+another, left to right.
+^^{horizontal lists//hboxes formed from}
+An hbox, taken as a unit, is neither
+inherently horizontal nor inherently vertical, i.e., it can appear as an
+item of either a horizontal list or a \refterm{vertical list}. You can
+construct an hbox with the |\hbox| command \ctsref{\hbox}.
+\endconcept
+
+
+\conceptindex{headers}
+\concept header
+
+A \defterm{header} is material that \TeX\ puts at the top of every page,
+above the text of that page.
+The header for a simple report
+might consist of the title on the left side of
+the page and the text ``Page $n$'' on the right side of the page.
+Ordinarily a header consists of a single line, which you can set by
+assigning a token list to ^|\headline| \ctsref\headline.
+The default \plainTeX\ header is blank.
+It's possible to produce multiline headers too; see \xrefpg{bighead} for
+how to do it.
+\endconcept
+
+
+\concept height
+
+The \defterm{height} of a \refterm{box} is the distance that the box
+extends above its \refterm{baseline}.
+^^{boxes//height of}
+\endconcept
+
+
+\conceptindex{horizontal lists}
+\concept{horizontal list}
+
+A \defterm{horizontal list} is a list of items
+that \TeX\ has produced while it is
+in one of its \refterm{horizontal modes:horizontal mode}, i.e., assembling
+either a paragraph or an hbox. See ``horizontal mode'' below.
+\endconcept
+
+
+\concept {horizontal mode}
+
+^^{hboxes//horizontal mode for}
+When \TeX\ is assembling a paragraph or an \refterm{hbox}, it is in one
+of two \defterm{horizontal modes}: ^{ordinary horizontal
+mode} for assembling paragraphs and ^{restricted horizontal mode} for
+assembling hboxes. Whenever \TeX\ is in a horizontal mode its stomach
+\seeconcept{\anatomy} is constructing a \refterm{horizontal
+list} of items (boxes, glue, penalties, etc.).
+\TeX\ typesets the items in the list
+one after another, left to right.
+
+A horizontal list can't contain any
+items produced by inherently vertical commands, e.g., |\vskip|.
+^^{horizontal lists//can't contain vertical commands}
+
+\ulist
+\li If \TeX\ is assembling a horizontal list in ordinary horizontal mode and
+encounters an inherently vertical command, \TeX\ ends the paragraph and
+enters \refterm{vertical mode}.
+
+\li If \TeX\ is assembling a horizontal list in restricted horizontal
+mode and encounters an inherently vertical command, it complains.
+\endulist Two commands that you might at first think are inherently
+horizontal are in fact inherently vertical: |\halign| \ctsref{\halign}
+and |\hrule| \ctsref{\hrule}.
+^^|\hrule//inherently vertical|
+^^|\halign//inherently vertical|
+See \knuth{page~286} for a list
+of the inherently vertical commands.
+
+{\tighten
+You should be aware of a subtle but important property of restricted
+horizontal mode: \emph{you can't enter restricted horizontal mode
+when you're in ordinary horizontal mode}. What this means in practice is that
+when \TeX\ is assembling an hbox it
+won't handle paragraph-like text, i.e., text for which it does
+\refterm{line breaking}. You can get
+around this restriction by enclosing the paragraph-like text in a
+\refterm{vbox} within the hbox. The same method works if you want to
+put, say, a horizontal \refterm{alignment} inside an~hbox.
+}% end scope of tighten
+
+\endconcept
+
+
+\concept{hyphenation}
+
+\TeX\ automatically hyphenates words as it is processing your document.
+\TeX\ is not eager to insert hyphens, preferring instead to find good
+line breaks by adjusting the spacing between words and moving words
+from one line to another.
+\TeX\ is clever enough to understand
+hyphens that are already in words.
+
+You can control \TeX's hyphenation in several ways:
+\ulist
+\li You can tell \TeX\ to
+allow a hyphen in a particular place by inserting a
+discretionary hyphen
+^^{discretionary hyphens}
+with the ^|\-| command \ctsref{\@minus}.
+\li You can tell \TeX\ how to
+hyphenate particular words throughout your document with the ^|\hyphenation|
+command \ctsref{\hyphenation}.
+\li You can enclose a word in an \refterm{hbox}, thus preventing \TeX\
+from hyphenating it.
+\li You can set the value of penalties such as |\hyphenpenalty|
+\ctsref\hyphenpenalty.
+\endulist
+\noindent If a word contains an explicit or discretionary hyphen,
+\TeX\ will never break it elsewhere.
+\endconcept
+
+
+\conceptindex{input streams}
+\concept {input stream}
+
+See \conceptcit{file}.
+\endconcept
+
+\conceptindex{insertions}
+\concept insertion
+
+\looseness = -1
+An \defterm{insertion} is a vertical list containing material
+to be inserted into
+a page when \TeX\ has finished building that page.\footnote
+{\tighten
+\TeX\ itself doesn't
+insert the material---it just makes the material available to
+the output routine, which is then responsible for transferring
+it to the composed page.
+^^{output routine//insertions, treatment of}
+The only immediate effect of the ^|\insert| command
+\ctsref{\insert} is to change \TeX's page break calculations so that it
+will leave room on the page for the inserted material. Later, when
+\TeX\ actually breaks the page, it divides the inserted material into
+two groups: the material that fits on the current page and the material
+that doesn't.
+^^{page breaks//insertions at}
+The material that fits on the page is placed into box registers,
+one per insertion,
+and the material that doesn't fit is carried over to the next page.
+This procedure allows \TeX\ to do such
+things as distributing parts of a long footnote over several consecutive
+pages.} Examples of such insertions are footnotes and figures. The
+\refterm{\plainTeX} commands for
+creating insertions are ^|\footnote|, ^|\topinsert|, |\mid!-insert|,
+^^|\midinsert|
+and ^|\pageinsert|, as well as the primitive ^|\insert| command
+itself (\pp\xrefn\footnote--\xrefn{endofinsert}).
+\TeX's mechanism for handling insertions is rather complicated;
+see \knuth{pages~122--125} for the details.
+\endconcept
+
+
+\concept {interline glue}
+
+\defterm{Interline glue} is the glue that \TeX\ inserts in front of every
+\refterm{box} in a \refterm{vertical list} except for the first one.
+The interline glue is ordinarily specified so as to maintain a constant
+distance between the baselines of the boxes.
+Its value is jointly determined by the ^|\baselineskip|,
+^|\lineskip|, and ^|\lineskiplimit| parameters \ctsref{\baselineskip}.
+\endconcept
+
+
+\conceptindex{items}
+\concept item
+
+The term \defterm{item} is often used to refer to a component of
+a horizontal, vertical, or math list, i.e., a list of items that
+\TeX\ is building while it is in a horizontal, vertical, or math mode.
+\endconcept
+
+
+
+\conceptindex{justification}
+\concept {justified text}
+
+\defterm{Justified text} is text that has been typeset so that both
+margins are even. Unjustified text, on the other hand, has been typeset
+with ``ragged'' margins on one or both sides.
+Documents typed on old-fashioned typewriters almost always have
+ragged right margins.
+Although documents produced by \TeX\ are
+justified by default, you can if you wish produce documents (or
+sequences of lines) that have ^{ragged right}---or ^{ragged left}---margins.
+You can also get \TeX\ to center a sequence of lines, thus making both
+margins ragged.
+^^{centered text}
+You can use the
+^|\leftskip|, ^|\rightskip|, and ^|\raggedright| commands
+(\pp \xrefn{\leftskip},~\xrefn{\raggedright}) for these purposes.
+
+When \TeX\ is producing justified text, it usually
+needs to stretch or shrink the glue within each line to make the margins
+come out even. When \TeX\ is producing unjustified text, on the other
+hand, it usually leaves the glue within each line at its natural width.
+Many typographers prefer unjustified text because its interword
+spacing is more uniform.
+\endconcept
+
+
+\conceptindex{kerns}
+\concept kern
+
+^^{spacing//adjusting with kerns}
+A \defterm{kern} indicates a change to the normal spacing between
+the items of a vertical or horizontal list.
+A kern can be either positive or negative. By
+putting a positive kern between two items, you push them further apart
+by the amount of the kern. By putting a negative kern between two
+items, you bring them closer together by the amount of the kern. For
+instance, this text:
+\csdisplay
+11\quad 1\kern1pt 1\quad 1\kern-.75pt 1
+|
+produces letter pairs that look like this:
+\display{11\quad 1\kern1pt 1\quad 1\kern-.75pt 1}
+You can use kerns in vertical mode to adjust the space between
+particular pairs of lines.
+
+A kern of size $d$ is very similar to a \refterm{glue} item that has
+size $d$ and no stretch or shrink. Both the kern and the glue insert or
+remove space between neighboring items. The essential difference is
+that \TeX\ considers two boxes with only kerns between them to be tied
+together. That is, \TeX\ won't break a line or a page at a kern unless
+the kern is immediately followed by glue. Bear this difference in mind
+when you're deciding whether to use a kern or a glue item for a
+particular purpose.
+
+\TeX\ automatically inserts kerns between particular pairs of adjacent
+letters, thus adjusting the space between those letters and enhancing
+the appearance of your typeset document.
+For instance, the Computer Modern $10$-point roman font contains a kern
+for the pair `To' that brings the left edge of the `o' under the
+`T'. Without the kern, you'd get \hbox{``T{o}p''} rather than ``Top''---%
+the difference is slight but noticeable.
+The metrics file
+(^{\tfmfile})
+for each \refterm{font} specifies the placement and size of the
+kerns that \TeX\ automatically inserts when it is setting text in that~font.
+\margin{paragraph deleted to save space; most of the material was
+already in this section.}
+
+\endconcept
+
+
+\concept leaders
+
+You can use \defterm{leaders} to fill a space with copies of
+a pattern, e.g.,
+to put repeated dots between a title and a page number in a table of contents.
+A leader is a single copy of the pattern.
+The specification of leaders contains three pieces of information:
+\olist\compact
+\li what a single leader is
+\li how much space needs to be filled
+\li how the copies of the pattern should be arranged within the space
+\endolist
+
+\bix^^|\leaders|
+\bix^^|\cleaders|
+\bix^^|\xleaders|
+{\tighten
+\TeX\ has three commands for specifying leaders:
+|\leaders|, \hbox{|\cleaders|}, and |\xleaders| (\xref\leaders). The
+\refterm{argument} of each command specifies the leader.
+The command must be followed by \refterm{glue}; the size of the glue
+specifies how much space is to be filled. The choice of command determines
+how the leaders are arranged within the space.}
+
+Here's an example showing how |\leaders| works:
+\csdisplay
+\def\dotting{\leaders\hbox to 1em{\hfil.\hfil}\hfil}
+\line{The Political Process\dotting 18}
+\line{Bail Bonds\dotting 26}
+|
+Here we've put the leaders and their associated glue into a \refterm{macro}
+definition so that we can conveniently
+use them in two places. This input produces:
+
+\vdisplay{\advance\hsize by -\parindent
+\def\dotting{\leaders\hbox to 1em{\hfil{.}\hfil}\hfill}%
+\line{The Political Process{\dotting}18}
+\line{Bail Bonds{\dotting}26}
+}
+
+The \refterm{hbox} following |\leaders| specifies
+the leader, namely, an hbox 1\em\ wide containing a dot
+at its center.
+The space is filled with copies of this box,
+effectively filling it
+with dots whose centers are 1\em{} apart.
+The following |\hfil| (the one at the
+end of the macro definition) is glue that
+specifies the space to be filled.
+In this case it's whatever space is needed to fill out the line.
+By choosing |\leaders| rather than |\cleaders| or |\xleaders| we've insured
+that the dots on different lines line up with each other.
+
+In general, the space to be filled acts as a window
+on the repeated copies of the leader.
+\TeX\ inserts as many copies as possible, but some space is
+usually left over---either because of where the leaders fall
+within the window or because
+the width of the window isn't an exact multiple of the width of the
+leader.
+The difference among the three commands is in how they arrange the leaders
+within the window and how they distribute any leftover space:
+
+\ulist
+\li For |\leaders|, \TeX\ first produces a row of copies of the leader.
+It then aligns the start of this row with the left end of the innermost
+box $B$ that is to contain the result of the |\leaders| command.
+In the two-line example above, $B$ is a box produced by |\line|.
+Those leaders that fit entirely in the window are placed into $B$,
+and the leftover space at the left and right ends is left empty.
+The picture is like this:
+\vdisplay{%
+\def\dotting{\leaders\hbox to 1em{\hfil{.}\hfil}\hfill}%
+\def\pp{The Political Process}
+\line{\dotting}
+\line{\hphantom\pp\hfil$\Downarrow$\hfil\hphantom{18}}
+\vskip 4pt
+\setbox0 = \hbox{\pp}
+\setbox1 = \hbox{18}
+\dimen0 = \hsize \advance\dimen0 by -\wd0 \advance \dimen0 by -\wd1
+\advance\dimen0 by -0.8pt
+\hbadness=10000
+\line{\pp
+ \vrule\vbox{\hrule width \dimen0\vskip 2pt
+ \hbox to \dimen0{\hfil window\strut\hfil}
+ \vskip 2pt\hrule width \dimen0}%
+ \vrule 18}
+\line{\hphantom\pp\hfil$\Downarrow$\hfil\hphantom{18}}
+\vskip 2pt
+\line{\pp{\dotting}18}
+}
+\vskip\medskipamount
+{\tighten
+\noindent
+This procedure ensures that in the two-line example on the previous page,
+the dots in the two lines
+are vertically aligned (since the \refterm{reference points:reference point}
+of the hboxes produced by |\line| are vertically aligned).
+\par}
+
+\li For |\cleaders|, \TeX\ centers the leaders within the window
+by dividing the leftover space between the two ends of the window.
+The leftover space is always less than the width of a single leader.
+
+\li For |\xleaders|, \TeX\ distributes the
+leftover space evenly within the window.
+In other words, if the leftover space is $w$ and the
+leader is repeated $n$ times,
+\TeX\ puts space of width $w/(n+1)$ between adjacent leaders and
+at the two ends of the leaders.
+The effect is usually to spread out the leaders a little bit.
+The leftover space for |\xleaders|, like that for |\cleaders|,
+is always less than the width of a single leader.
+\endulist
+
+So far we've assumed that the leaders consist of hboxes arranged
+horizontally. Two variations are possible:
+\olist
+\li You can use a
+rule instead of an hbox for the leader.
+\TeX\ makes the rule as wide as necessary to extend
+across the glue (and the three commands are equivalent).
+\li You
+can produce vertical leaders that run down the page by including them in
+a \refterm{vertical list} rather than a \refterm{horizontal list}. In
+this case you need vertical glue following the leaders.
+\endolist
+\noindent
+See \knuth{pages~223--225} for the precise rules that \TeX\ uses
+in typesetting leaders.
+\eix^^|\leaders|
+\eix^^|\cleaders|
+\eix^^|\xleaders|
+\endconcept
+
+
+\conceptindex{ligatures}
+\concept ligature
+
+A \defterm{ligature} is a single character that replaces a
+particular sequence of adjacent characters in a typeset document.
+For example, the word `|office|' is typeset as \hbox{``office''},
+not \hbox{``of{f}ice''}, by high-quality typesetting systems.
+Knowledge of ligatures is built into the
+\refterm{fonts:font} that you use, so there's nothing explicit you need do
+in order to get \TeX\ to produce them. (You could defeat the ligature
+in ``office'', as we did just above, by writing `|of{f}ice|' in your input.)
+\TeX\ is also capable of using its ligature mechanism to typeset the
+first or last letter of a word differently than the same letter as it would
+appear in the middle of a word.
+You can defeat this effect (if you ever encounter it) by using the
+^|\noboundary| command (\xref\noboundary).
+
+Sometimes you may need a ligature from a European language.
+^^{European languages}
+\TeX\ won't
+produce these automatically unless you're using a font designed for that
+language. A number of these ligatures, e.g., `\AE', are available as
+commands (see ``Letters and ligatures for European alphabets'',
+\xref{fornlets}).
+\endconcept
+
+
+\conceptindex{line breaks}
+\concept{line break}
+
+A \defterm{line break} is a place in your document where \TeX\ ends
+a line as it typesets a paragraph.
+When \TeX\ processes your document, it collects the contents of each
+paragraph in a \refterm{horizontal list}.
+When it has collected an entire paragraph,
+it analyzes the list to find what it considers to be the best possible
+line breaks. \TeX\ associates ``^{demerits}'' with various symptoms of
+unattractive line breaks---lines that have too much or too little
+space between words, consecutive lines that end in hyphens, and so forth. It
+then chooses the line breaks so as to minimize the total number of demerits.
+See \knuth{pages~96--101} for a full description of \TeX's line-breaking rules.
+
+You can control \TeX's choice of line breaks in several ways:
+\ulist
+
+\li You can insert a \refterm{penalty} (\xref{hpenalty}) somewhere in
+the horizontal list that \TeX\ builds as it forms a paragraph.
+^^{penalties//in horizontal lists}
+A
+positive penalty discourages \TeX\ from breaking the line there, while a
+negative penalty---a bonus, in other words---encourages \TeX\ to break
+the line there. A penalty of $10000$ or more prevents a line break,
+while a penalty of $-10000$ or less forces a line break. You can get
+the same effects with the ^|\break| and
+^|\nobreak| commands (\pp\xrefn{hbreak},~\xrefn{hnobreak}).
+
+\li You can tell \TeX\ to allow a hyphen in a particular place by
+inserting a discretionary hyphen
+^^{discretionary hyphens}
+with the |\-| command \ctsref{\@minus}, or
+otherwise control how \TeX\ hyphenates your document \seeconcept
+{hyphenation}.
+^^|\-//in line breaking|
+
+\li You can tell \TeX\ to allow a line break after a ^{solidus} (/) between
+two words by inserting ^|\slash| \ctsref{\slash}
+between them, e.g., `|fur!-longs\slash fortnight|'.
+
+\li You can tell \TeX\ not to break a line between two particular words by
+inserting a ^{tie} (|~|) between those words.
+^^|~//in line breaking|
+
+\li You can adjust the penalties associated with line breaking by
+assigning different values to \TeX's line-breaking
+\refterm{parameters:parameter}.
+
+\li You can enclose a word or sequence of words in an \refterm{hbox},
+thus preventing \TeX\ from breaking the line anywhere within the hbox.
+^^{hboxes//controlling line breaks}
+\endulist
+
+It's useful to know the places where \TeX\ can break a line:
+\ulist
+\li at glue, provided that:
+\olist
+\li the item preceding the glue is one of the following:
+a box, a discretionary item (e.g., a discretionary hyphen),
+the end of a math formula,
+a whatsit,
+or vertical material produced by |\mark| or |\vadjust|
+or |\insert|
+\li the glue is not part of a math formula
+\endolist
+\noindent
+When \TeX\ breaks a line at glue, it makes the break at the left edge
+of the glue space and forgets about the rest of the glue.
+\li at a kern that's immediately followed by glue,
+provided that this kern isn't within a math formula
+\li at the end of a math formula that's immediately followed by glue
+\li at a penalty, even one within a math formula
+\li at a discretionary break
+\endulist
+When \TeX\ breaks a line, it discards any
+sequence of glue, kerns, and penalty items that follows the break point.
+If such a sequence is followed by the beginning of a math formula, it
+also discards any kern produced by the beginning of the formula.
+\endconcept
+
+
+\conceptindex{lists}
+\concept list
+
+A \defterm{list} is a sequence of \refterm{items:item}
+(\refterm{boxes:box}, \refterm{glue}, \refterm{kerns:kern}, etc.)
+that comprise the contents of an hbox, a vbox,
+or a math formula.
+See \conceptcit{horizontal list}, \conceptcit{vertical list}.
+
+\endconcept
+
+
+\concept {log file}
+
+See \conceptcit{file}.
+\endconcept
+
+
+\conceptindex{macros}
+\concept macro
+
+{% Use a brace here so that definitions of explanatory macros remain local.
+% The closing brace is at the end of the concept.
+A \defterm{macro} is a definition that gives a name to a pattern of
+\TeX\ input text.\footnote{More precisely, the definition gives a name
+to a sequence of tokens.} The name can be either a \refterm{control
+sequence} or an \refterm{active character}. The pattern is called the
+``replacement text''. The primary command for defining macros is the
+|\def| control sequence.
+
+\def\arctheta{\cos \theta + i \sin \theta}
+As a simple example, suppose that you have a document in which
+the sequence `$\cos \theta + i \sin \theta$' occurs many times.
+Instead of writing it out each time, you can define a macro for it:
+\csdisplay
+\def\arctheta{\cos \theta + i \sin \theta}
+|
+Now whenever you need this sequence, you can just ``call'' the macro
+by writing `|\arctheta|'
+and you'll get it. For example, `|$e^{\arctheta}$|' will give you
+`$e^{\arctheta}$'.
+
+\bix^^{macros//parameters of}
+But the real power of macros lies in the fact that a macro can have
+parameters. When you call a macro that has parameters, you provide
+arguments that are substituted for those parameters. For example, suppose
+you write:
+\pix\indexchar #
+\def\arc#1{\cos #1 + i \sin #1}
+\csdisplay
+\def\arc#1{\cos #1 + i \sin #1}
+|
+
+The notation |#1| \xrdef{@msharp} indicates the first parameter
+of the macro, which in this case has only one parameter. You now can
+produce a similar form, such as `$\arc{2t}$', with the macro call `|\arc
+{2t}|'.
+
+More generally, a macro can have up to nine parameters, which you
+indicate as `|#1|', `|#2|', etc\null. in the macro definition. \TeX\
+provides two kinds of parameters: delimited parameters and undelimited
+parameters. Briefly, a delimited parameter has an \refterm{argument}
+that's delimited, or ended, by a
+specified sequence of tokens (the delimiter), while an undelimited
+parameter has an argument that doesn't need a delimiter to end it.
+First we'll explain how macros work when they have only undelimited
+parameters, and then we'll explain how they work when
+they have delimited parameters.
+
+^^{parameters//undelimited}
+If a macro has only undelimited parameters, those parameters must appear
+one after another in the macro definition \emph{with nothing between
+them or between the last parameter and the left brace in front of the
+replacement text}.
+A call on such a macro consists of the macro name followed by
+the arguments of the call, one for each parameter. Each argument is
+either:
+
+\ulist \compact
+\li a single \refterm{token} other than a left or right brace, or
+
+\li a sequence of tokens enclosed between a left brace and
+a matching right brace.\footnote{The
+argument can have nested pairs of braces within it, and each of these
+pairs can indicate either a \refterm{group} or a further macro
+argument.}
+\endulist
+
+When \TeX\ encounters a macro, it expands the macro in its gullet
+\seeconcept{\anatomy}
+by substituting each argument for the corresponding
+parameter in the replacement text. The resulting text may contain other macro
+calls. When \TeX\ encounters such an embedded macro call, it expands
+that call immediately without looking at what follows the
+call.\footnote{In computer science terminology, the expansion is ``depth
+first'' rather than ``breadth first''. Note that you can modify the
+order of expansion with commands such as |\expandafter|.} When \TeX's
+gullet gets to a \refterm{primitive} \refterm{command} that
+cannot be further expanded, \TeX\ passes that command to \TeX's stomach.
+The order of expansion is sometimes critical, so in order to help
+you understand it we'll give you an example of \TeX\ at work.
+
+Suppose you provide \TeX\ with the following input:
+\csdisplay
+\def\a#1#2{\b#2#1\kern 2pt #1}
+\def\b{bb}
+\def\c{\char49 cc}
+\def\d{dd}
+\a\c{e\d} % Call on \a.
+|
+Then the argument corresponding to |#1| is |\c|,
+and the argument corresponding to |#2| is |e\d|.
+\TeX\ expands the macro call in the following steps:
+
+{\vskip\abovedisplayskip\obeylines % ugly
+|\b e\d\c\kern 2pt \c|
+|bbe\d\c\kern 2pt \c|
+|\d\c\kern 2pt \c|\quad(`|b|', `|b|', `|e|' sent to stomach)
+|dd\c\kern 2pt \c|
+|\c\kern 2pt \c|\quad(`|d|', `|d|' sent to stomach)
+|\char49 cc\kern 2pt \c|
+|\c|\quad(`|\char|', `|4|', `|9|', `|c|', `|c|', %
+`|\kern|', `|2|', `|p|', `|t|' sent to stomach)
+|\char49 cc|
+(`|\char49|', `|c|', `|c|' sent to stomach)
+\vskip\belowdisplayskip}
+
+\noindent Note that the letters `|b|', `|c|', `|d|', and `|e|' and the
+control sequences `|\kern|' and `|\char|' are all primitive
+commands that cannot be expanded further.
+
+\bix^^{parameters//delimited}
+A macro can also have ``delimited parameters'', which can be mixed with
+the undelimited ones in any combination. The idea of a delimited
+parameter is that \TeX\ finds the corresponding argument by looking for
+a certain sequence of tokens that marks the end of the argument---the
+delimiter. That is, when \TeX\ is looking for such an argument, it
+takes the argument to be all the tokens from \TeX's current position up
+to but not including the delimiter.
+
+You indicate a delimited parameter by writing `|#|$n$' ($n$
+must be between $0$
+and $9$) followed by one or more tokens that act as the delimiter. The
+delimiter extends up to the next `|#|' or `|{|'---which makes sense
+since `|#|' starts another parameter and `|{|' starts the replacement text.
+
+The delimiter can't be `|#|' or `|{|', so you can tell a delimited
+parameter from an undelimited one by looking at what comes after it.
+
+If the character after the parameter is `|#|' or `|{|', you've got an
+undelimited parameter; otherwise you've got a delimited one. Note
+the difference in arguments for the two kinds of parameters---an
+undelimited parameter is matched either by a single token or by
+a sequence of tokens enclosed in braces, while a
+delimited parameter is matched by any number of tokens, even zero.
+
+An example of a macro that uses two delimited parameters is:
+\def\diet#1 #2.{On #1 we eat #2!}
+\csdisplay
+\def\diet#1 #2.{On #1 we eat #2!!}
+|
+Here the first parameter is delimited by a single space
+and the second parameter is delimited by a period. If you write:
+\csdisplay
+\diet Tuesday turnips.
+|
+you'll get the text ``\diet Tuesday turnips.''.
+But if the delimiting tokens are enclosed in a group, \TeX\ doesn't consider
+them as delimiting. So if you write:
+\csdisplay
+\diet {Sunday mornings} pancakes.
+|
+you'll get the text `\diet {Sunday mornings} pancakes.'
+even though there's a space between `|Sunday|' and `|morning|'.
+When you use a space as a delimiter,
+an end-of-line character ordinarily also delimits the argument
+since \TeX\ converts the end-of-line to a space before the macro
+mechanism ever sees it.
+\eix^^{parameters//delimited}
+\eix^^{macros//parameters of}
+
+Once in a while you might need to define a macro that has `|#|' as a
+meaningful character within it.
+You're most likely to need to do this when you're defining a macro
+that in turn defines a second macro.
+What then do you do about
+the parameters of the second macro to avoid getting \TeX\ confused?
+The answer is that you write
+two `|#|'s for every one that you want
+when the first macro is expanded. For example, suppose you
+write the macro definition:
+\def\first#1{\def\second##1{#1/##1}}
+\csdisplay
+\def\first#1{\def\second##1{#1/##1}}
+|
+Then the call `|\first{One}|' defines `|\second|' as:
+\csdisplay
+\def\second#1{One/#1}
+|
+and the subsequent call `|\second{Two}|' produces the text
+\def\second#1{One/#1}%
+`\second {Two}'.
+
+A number of commands provide additional ways of defining macros
+(see pp.~\xrefn{mac1}--\xrefn{mac2}).
+For the complete rules pertaining to macros, see \knuth{Chapter~20}.
+}% close brace at the start of the `macro' concept.
+\endconcept
+
+
+\concept magnification
+
+When \TeX\ typesets your document, it multiplies all dimensions
+by a
+\refterm{magnification} factor $f/1000$,
+where $f$ is the value of the ^|\mag| parameter \ctsref\mag.
+Since the default value of |\mag| is $1000$, the normal case is that
+your document is typeset just as specified.
+Increasing the magnification is often useful when you're typesetting a document
+that will later be photoreduced.
+
+You can also apply magnification to a single \refterm{font} so as to get
+a smaller or larger version of that font than its ``^{design size}''. You
+need to provide the device driver with a ^{shape file}
+\seeconcept{font} for
+each magnification of a font that you're using---%
+unless the fonts are built into your printer and your device driver
+knows about them.
+When you're defining a font with
+the |\font| command \ctsref{\font}, you can specify a magnification with
+the word `|scaled|'. For example:
+
+\csdisplay
+\font\largerbold = cmbx10 scaled 2000
+|
+defines `|\largerbold|' as a font that is
+twice as big as |cmbx10| (Computer Modern
+Bold Extended $10$-point) and has the character shapes
+uniformly enlarged by a factor of~$2$.
+
+Many computer centers find it convenient to provide fonts scaled by a ratio
+of $1.2$, corresponding to magnification values of $1200$, $1440$, etc.
+\TeX\ has special names for these values:
+^^|\magstep|
+`|\magstep1|' for $1200$,
+`|\magstep2|' for $1440$, and so forth up to `|\magstep5|'. The special
+value `^|\magstephalf|' corresponds to magnification by $\sqrt{1.2}$, which
+is visually halfway between `|\magstep0|' (no magnification) and
+`|\magstep1|'. For example:
+
+\csdisplay
+\font\bigbold = cmbx10 scaled \magstephalf
+|
+
+You can specify a \refterm{dimension} as it will be
+measured in the final document independent of magnification by putting
+`^|true|' in front of the unit. For instance, `|\kern 8 true pt|'
+produces a kern of $8$ points whatever the magnification.
+
+\endconcept
+
+\concept margins
+
+The \refterm{margins}
+of a page define a rectangle that normally
+contains the printed matter on the page.
+You can get \TeX\ to print material outside of this rectangle,
+but only by taking some explicit action that moves the material there.
+\TeX\ considers headers and footers to lie outside the margins.
+
+The rectangle is defined in terms of its upper-left corner, its width, and
+its depth. The location of the upper-left corner is defined by
+the ^|\hoffset|
+and ^|\voffset| parameters
+\ctsref\voffset. The default is to place that corner one inch from the top
+and one inch from the left side of the page, corresponding to a value of
+zero for both |\hoffset| and |\voffset|.%
+\footnote{This seems to us to be an odd convention.
+It would have been more natural to have the $(0,0)$
+point for |\hoffset| and |\voffset| be at the upper-left corner of the
+paper and to have set their default values to one inch.}
+The width of the rectangle is given by ^|\hsize| and the depth by ^|\vsize|.
+
+The implications of these conventions are:
+\ulist\compact
+\li The left margin is given by |\hoffset|\tplus|1in|.
+\li The right margin is given by the width of the paper minus
+ |\hoffset|\tplus|1in|\tplus|\hsize|.
+\li The top margin is given by |\voffset|\tplus|1in|.
+\li The bottom margin is given by the length of the paper minus
+ |\voff!-set|\tplus|1in|\tplus|\vsize|.
+\endulist
+From this information you can see what parameters you need to
+change in order to change the margins.
+
+Any changes that you make to |\hoffset|, |\voffset|, or |\vsize| become
+effective the next time \TeX\ starts a page. In other words, if you change
+them within a page, the change will affect only the \emph{following} pages.
+If you change |\hsize|, the change will become effective immediately.
+\endconcept
+
+
+\conceptindex{marks}
+\concept mark
+
+A \defterm{mark} is an item that you can insert into a
+horizontal, vertical, or math list and later recover from within your
+output routine. Marks are useful for purposes such as
+keeping track of topics to appear in page headers.
+Each mark has a list of tokens---the ``^{mark text}''---associated with it.
+The ^|\mark| command \ctsref{\mark} expects such a token list as its argument,
+and appends an item containing that token list (after
+expansion) to whatever list \TeX\ is
+currently building. The ^|\topmark|, ^|\firstmark|, and ^|\botmark| commands
+\ctsref{\topmark} can be used to retrieve various marks on a page.
+These commands are most often used in page headers and footers.
+^^{footers//marks used in}
+^^{headers//marks used in}
+
+\margin{This example of {\tt\\mark} replaces the previous explanatory
+paragraph.}
+Here is a simplified example.
+Suppose you define a section heading macro as follows:
+\csdisplay
+\def\section#1{\medskip{\bf#1}\smallskip\mark{#1}}
+% #1 is the name of the section
+|
+^^|\mark|
+This macro, when called, will produce a section heading in boldface and
+will also record the name of the section as a mark.
+You can now define the header for each printed page
+as follows:
+\csdisplay
+\headline = {\ifodd\pageno \hfil\botmark\quad\folio
+ \else \folio\quad\firstmark\hfil \fi}
+|
+Each even (left-hand) page will now have the page number followed by the
+name of the first section on that page, while each odd (right-hand) page
+will have the page number followed by the name of the last section on
+that page. Special cases, e.g., no sections starting on a page, will
+generally come out correctly because of how ^|\firstmark|
+and ^|\botmark| work.
+
+When you split a page using the |\vsplit| command \ctsref{\vsplit} you can
+retrieve the mark texts of the first and last marks of the split-off
+portion with the ^|\splitfirstmark| and ^|\splitbotmark| commands
+\ctsref{\splitfirstmark}.
+
+See \knuth{pages~258--260} for a more precise explanation of how
+to create and retrieve marks.
+\endconcept
+
+
+\concept math mode
+
+{\tighten
+A \defterm{math mode} is a \refterm{mode} that \TeX\ is in when it is
+building a math formula. \TeX\ has two different math modes: ^{text
+math mode} for building a formula to be embedded within a line of text,
+and ^{display math mode} for building a formula to appear on a line by
+itself. You indicate text math mode by enclosing the formula in
+|$|'s, and display math mode by enclosing the formula in
+|$$|'s.
+%\TeX\ will accept most \refterm{commands:command} in
+%math mode. If it encounters a command in math mode that doesn't make
+%sense in a formula, it will complain.
+An important property of both
+math modes is that \emph{input spaces don't count}. See
+\knuth{pages~290--293} for details on how \TeX\ responds to different
+commands in math mode.
+\par}
+
+\endconcept
+
+
+\conceptindex{mathcodes}
+\concept mathcode
+
+A \defterm{mathcode} is a number that \TeX\ uses to identify and
+describe a math character,
+^^{math characters//described by mathcodes}
+i.e., a character that has a
+particular role in a math formula. A mathcode conveys three pieces of
+information about a character: its \refterm{font} position, its
+\refterm{family}, and its \refterm{class}.
+Each of the $256$ possible
+input characters has a mathcode, which is defined by the \TeX\ program
+but can be changed.
+
+^^{family//as part of mathcode}
+\TeX\ has sixteen families of fonts, numbered $0$--$15$. Each
+family contains three fonts: one for \refterm{text size}, one for
+\refterm{script size}, and one for \refterm{scriptscript size}. \TeX\
+chooses the size of a particular character, and therefore its font,
+according to the context. The class of a character specifies its role
+in a formula (see \knuth{page~154}). For example, the equals sign `|=|'
+is in class $3$ (Relation). \TeX\ uses its knowledge of character
+classes when it is deciding how much space to put between different
+components of a math formula.
+
+The best way to understand what mathcodes are all about is to see how
+\TeX\ uses them. So we'll show you what \TeX\ does with a
+character token $t$ of \refterm{category code}~11 or~12 in a math
+formula:
+
+\olist\compact
+\li It looks up the character's mathcode.
+\li It determines a family $f$ from the mathcode.
+\li It determines the size $s$ from the context.
+\li It selects a font $F$ by picking the font for size $s$ in family $f$.
+\li It determines a character number $n$ from the mathcode.
+\li It selects as the character $c$ to be typeset the character
+at position $n$ of font $F$.
+\li It adjusts the spacing around $c$ according to the class of $t$ and
+the surrounding context.
+\li It typesets the character $c$.
+\endolist
+
+The context dependence in
+items (3) and (7) implies that \TeX\ cannot typeset a math character
+until it has seen the entire formula containing the
+math character. For example, in the formula
+`|$a\over b$|', \TeX\ doesn't know what size the `|a|' should be until it
+has seen the |\over|.
+
+{\tighten
+The mathcode of a character is encoded according to the formula $4096c
++ 256f + n$, where $c$ is the class of the character, $f$ is its
+\refterm{family}, and $n$ is its \refterm{\ascii\ character} code within
+the family. You can change \TeX's interpretation of an input character
+in math mode by assigning a value to the ^|\mathcode|
+table entry \ctsref{\mathcode}
+for that character. The character must have a
+\refterm{category code} of $11$ (letter) or $12$ (other) for \TeX\ to
+look at its |\mathcode|.
+}\par
+
+^^{family//variable}
+You can define a mathematical character to have a ``variable'' family by
+giving it a class of $7$. Whenever \TeX\ encounters that character in a
+math formula, it takes the family of the character to be the current
+value of the |\fam| parameter \ctsref{\fam}. A variable family enables
+you to specify the font of ordinary text in a math formula. For
+instance, if the roman characters are in family $0$, the assignment
+|\fam = 0|
+will cause ordinary text in a math formula to be set in roman type
+rather than in something else like math italic type. If the value of
+|\fam| is not in the range from $0$ to $15$, \TeX\ takes the value to be
+$0$, thus making classes $0$ and $7$ equivalent.
+\TeX\ sets |\fam| to $-1$ whenever it enters math mode.
+\endconcept
+
+
+\conceptindex{mathematical units}
+\concept{mathematical unit}
+
+A \defterm{mathematical unit}, denoted by `|mu|', is a unit of distance
+that is used to specify \refterm{glue} in math formulas. See
+\conceptcit{muglue}.
+\endconcept
+
+
+\conceptindex{modes}
+\concept mode
+
+When \TeX\ is processing your input in its stomach \seeconcept{\anatomy},
+it is in one of six \defterm{modes}:
+\ulist\compact
+\li ^{ordinary horizontal mode} (assembling a paragraph)
+\li ^{restricted horizontal mode} (assembling an \refterm{hbox})
+\li ^{ordinary vertical mode} (assembling a page)
+\li ^{internal vertical mode} (assembling a \refterm{vbox})
+\li ^{text math mode} (assembling a formula that appears in text)
+\li ^{display math mode}
+(assembling a formula that appears on a line by~itself)
+^^{horizontal mode}^^{vertical mode}^^{math mode}
+\endulist
+The mode describes the kind of entity that \TeX\ is putting together.
+
+Because you can embed one kind of entity within another, e.g., a vbox
+within a math formula, \TeX\ keeps track not just of one mode but of a
+whole list of modes (what computer scientists call a ``stack'').
+Suppose that \TeX\ is in mode $M$ and encounters something that
+puts it into a new mode \Mprimeperiod. When it finishes its work in
+mode \Mprimecomma, it resumes what it was doing in mode \Mperiod.
+
+\endconcept
+
+
+\concept muglue
+
+\defterm{Muglue} is a kind of \refterm{glue} that you can use only in math
+formulas. It is measured in ^|mu| (\refterm{mathematical
+units:mathematical unit}).
+^^{mathematical units}^^{glue//mathematical}
+One |mu| is equal to \frac1/{18} em, where
+the size of an em is taken from \refterm{family} 2 of the math fonts.
+\TeX\ automatically adjusts the size of muglue according to the context.
+For instance, a glue size of |2mu| is normally smaller within a
+subscript than it is within ordinary text.
+You must use the ^|\mskip| command to produce muglue.
+For example, `|\mskip 4mu plus 5mu|' produces mathematical glue with
+natural space of four |mu| and \refterm{stretch} of five |mu|.
+
+\endconcept
+
+
+\conceptindex{numbers}
+\concept number
+
+In \TeX, a \defterm{number} is a positive or negative integer.
+You can write a number in \TeX\ in four different ways:
+\olist\compact
+\li as an ordinary decimal integer, e.g., |52|
+\li as an octal number, e.g., |'14| ^^{octal numbers}
+\li as a hexadecimal number, e.g., |"FF0| ^^{hexadecimal numbers}
+\li as the code for an \refterm{\ascii\ character}, e.g., |`)|
+or |`\)|
+\endolist
+\noindent
+Any of these forms can be preceded by `|+|' or `|-|'.
+
+An octal number can have only the digits |0|--|7|.
+^^{octal numbers}
+A hexadecimal number can have digits |0|--|9| and
+|A|--|F|, representing
+values from $0$ to $15$.
+^^{hexadecimal numbers}
+You can't, alas, use lowercase letters when you write a hexadecimal number.
+If you need an explanation of octal and hexadecimal numbers,
+you'll find one on \knuth{pages~43--44}.
+
+A decimal, octal, or hexadecimal number
+ends at the first character that can't be part of the number.
+Thus a decimal number ends when \TeX\ sees, say, a letter, even though a
+letter between `|A|' and `|F|' would not end a hexadecimal number.
+You can end a number with one or more spaces and
+\TeX\ will ordinarily ignore them.\footnote{
+When you're defining a macro that ends in a number, you should always
+put a space after that number; otherwise \TeX\ may later combine that
+number with something else.}
+
+The fourth form above specifies a number as the
+\minref{\ascii} code for a character.
+^^{characters//\ascii\ codes for}
+\TeX\ ignores spaces after this form of number also.
+You can write a number in this form either as |`|$c$ or as |`\|$c$.
+The second form, though longer, has the advantage that you can use it
+with \emph{any} character, even `|\|', `|%|', or `|^^M|'.
+It does have one rather technical disadvantage: when \TeX\ is expanding
+a token sequence for a command such as |\edef| or |\write|,
+^^|\edef//expansion of {\tt\\'\it c} in|
+^^|\write//expansion of {\tt\\'\it c} in|
+occurrences of `|\|$c$' within numbers will also be expanded if they can be.
+That's rarely the effect you want.
+
+The following are all valid representations of the decimal number
+$78$:
+\csdisplay
+78 +078 "4E '116 `N `\N
+|
+
+
+You can't use a number in text by itself since a number isn't
+a command.
+However, you can insert the decimal form of a number in text
+by putting a ^|\number| command (\xref\number) in front of it
+or the roman numeral form by putting a ^|\romannumeral| command
+in front of it.
+
+You can also use ^{decimal constant}s, i.e., numbers with a fractional part,
+for specifying dimensions \seeconcept{dimension}.
+A decimal constant has a ^{decimal point}, which
+can be the first character of the constant.
+You can use a comma instead of a period to represent the decimal point.
+A decimal constant can be preceded by a plus or minus sign.
+Thus `|.5in|',
+`|-3.22pt|', and `|+1,5\baselineskip|' are valid dimensions.
+You can't, however, use decimal constants
+in any context \emph{other} than as the ``factor'' part of a dimension,
+i.e., its multiplier.
+
+
+\endconcept
+
+
+\concept{ordinary mode}
+
+An \defterm{ordinary mode} is a \refterm{mode} that \TeX\ is in when it is
+assembling a paragraph into lines or assembling lines
+into a page. See \conceptcit{horizontal mode}, \conceptcit{vertical mode}.
+\endconcept
+
+
+\concept outer
+
+\bix^^{macros//outer}
+An \defterm{outer} macro is one that you can't use in certain contexts
+where \TeX\ is processing tokens at high speed.
+The purpose of making a command outer is to enable \TeX\ to catch
+errors before it's gone too far.
+When you define a macro, you can make it outer with the
+^|\outer| command \ctsref\outer.
+
+You cannot use an outer macro in any of the following contexts:
+\ulist\compact
+\li within an argument to a macro
+\li in the parameter text or replacement text of a definition
+\li in the preamble to an alignment
+\li in the unexecuted part of a conditional test
+\endulist
+\noindent
+An outer context is a context in which you can use an outer macro,
+i.e., it's any context other than the ones just listed.
+
+For example, the following input would be a forbidden use of an
+outer macro:
+\csdisplay
+\leftline{\proclaim Assertion 2. That which is not inner
+ is outer.}
+|
+The |\proclaim| macro (\xref{\@proclaim}) is defined in \plainTeX\
+to be outer, but it's being used here in a macro argument to |\leftline|.
+\eix^^{macros//outer}
+
+\endconcept
+
+
+\concept {output routine}
+
+When \TeX\ has accumulated
+at least enough material to fill up a page, it chooses a breakpoint
+and places the material before the breakpoint in |\box255|. It then
+calls the
+current \defterm{output routine}, which processes the material and eventually
+sends it to the \dvifile.
+^^{\dvifile//material from output routine}
+The output routine can perform further
+processing, such as inserting headers, footers, and footnotes.
+\refterm{\PlainTeX:\plainTeX} provides
+a default output routine that inserts a centered page number
+at the bottom of each page.
+By providing a different output routine you can achieve such
+effects as double-column output.
+You can think of the output routine as having a single responsibility:
+disposing of the material in |\box255| one way or another.
+
+The current output routine is defined by the value of ^|\output|
+\ctsref{\output}, which is a list of \refterm{tokens:token}. When \TeX\
+is ready to produce a page, it just expands the token list.
+
+You can make some simple changes to the actions of the \plainTeX\
+output routine without actually modifying it. For example, by assigning
+a list of \refterm{tokens:token} to |\headline| or
+|\footline| \ctsref{\footline} you can have \TeX\ produce a different
+header or footer than it ordinarily would.
+
+The output routine is also
+responsible for collecting any \refterm{insertions:insertion};
+combining those insertions and any
+``decorations'' such as headers and
+footers with the main contents of the page and packaging all
+of this material in a box; and
+eventually sending that box to the \dvifile\
+^^{\dvifile//material from output routine}
+with the ^|\shipout|
+command \ctsref{\shipout}.
+Although this is what an output routine most often does,
+a special-purpose output routine might behave differently.
+\endconcept
+
+
+\conceptindex{output streams}
+\concept {output stream}
+
+\margin{This concept was out of order.}
+See \conceptcit{file}.
+\endconcept
+
+
+\conceptindex{pages}
+\concept page
+
+\TeX\ processes a document by assembling \defterm{pages} one at a time
+and passing them to the output routine.
+As it proceeds through your document, \TeX\ maintains a list of lines
+and other
+items to be placed on the page. (The lines are actually hboxes.)
+This list is called the ``^{main vertical list}''.
+Periodically \TeX\ goes through a process called ``exercising the
+^{page builder}''.
+The items added to the main vertical list between exercises of the
+page builder are called ``^{recent contributions}''.
+
+The page builder first examines the main vertical list to see if it's
+necessary to ship out a page yet, either because the items on the main
+vertical list won't all fit on the page or because of an explicit item,
+such as |\eject| \ctsref\eject, that tells \TeX\ to end the page.
+If it's not necessary to ship out a page, then the page builder is done
+for the time being.
+
+Otherwise the page builder analyzes the main vertical
+list to find what it considers to be the best possible page break.
+It associates penalties with various kinds of unattractive page
+breaks---a break that would leave an
+isolated line at the top or bottom of a page, a break just before a
+math display, and so forth. It then
+chooses the least costly page break,
+where the cost of a break is increased by any penalty associated with that
+break and by the badness of the page that would result
+(see \knuth{page~111} for the cost formula). If it finds several
+equally costly page breaks, it chooses the last one.
+
+{\tighten
+Once the page builder has chosen a page break,
+it places the items on the list that are before that break
+into ^|\box255| and leaves the remaining ones for the next page.
+It then calls the output routine. |\box255| acts as a mailbox, with the
+page builder as the sender and the output routine as the receiver.
+Ordinarily the output routine processes |\box255|, adds
+other items, such as insertions, headers, and footers, to the page, and
+ships out the page to the \dvifile\
+^^{\dvifile//material from output routine}
+with a |\shipout| command.
+(Specialized output routines may behave differently.)
+From \TeX's standpoint, it doesn't matter whether or not the output
+routine ships out a page;
+the only
+responsibility of the output routine is to process |\box255| one way or
+another.
+\par}
+
+{\tighten
+It's important to realize that the best place to break a page isn't
+necessarily the last possible place to break the page.
+Penalties and other considerations may cause the page break
+to come earlier.
+Furthermore, \TeX\ appends items to the main vertical list in batches,
+not just singly.
+The lines of a paragraph are an example of such a batch.
+For these reasons the page builder usually has items left over when it
+breaks a page.
+These leftover items then form the beginning of the main vertical list
+for the next page (possibly in the middle of a batch).
+Because items are carried over from one page to another,
+you can't assume that as \TeX\ is processing
+input, the current page number accurately reflects the page on which the
+corresponding output will appear. See \knuth{pages~110--114} for a full
+description of \TeX's page-breaking rules.
+\par}
+
+\endconcept
+
+
+\conceptindex{page breaks}
+\concept{page break}
+
+A \defterm{page break} is a place in your document where \TeX\ ends a
+page and (except at the end of the document) starts a new one.
+See \conceptcit{page} for the process that \TeX\ goes through in choosing
+a page break.
+
+You can control \TeX's choice of page breaks in several ways:
+\ulist
+\li You can insert a penalty (\xref{vpenalty})
+^^{penalties//in vertical lists}
+between two items in the main vertical list. A positive
+penalty discourages \TeX\ from breaking the page
+there, while a negative penalty---a bonus, in other words---%
+encourages \TeX\ to break the page there. A penalty of $10000$
+or more prevents a
+page break, while a penalty of $-10000$ or less forces a page break.
+You can get the same effects with the |\break| and
+|\nobreak| commands \ctsref{vbreak}.
+
+\li You can adjust the penalties associated with page breaking
+by assigning different values to \TeX's page-breaking
+\refterm{parameters:parameter}.
+
+\li You can enclose a sequence of paragraphs
+or other items in the main vertical list within a \refterm{vbox},
+thus preventing \TeX\ from breaking the page anywhere within the sequence.
+\endulist
+
+Once \TeX\ has chosen a page break, it places the portion of the main vertical
+list that precedes the break into |\box255|.
+It then calls the current \refterm{output routine}
+to process |\box255| and eventually ships its contents to the \dvifile.
+^^{\dvifile//material from output routine}
+The output routine must
+also handle \refterm{insertions}, such as footnotes, that \TeX\ has accumulated
+while processing the page.
+
+It's useful to know the places where \TeX\ can break a page:
+\ulist
+\li At glue, provided that the item preceding the glue is
+a box, a whatsit, a mark, or an insertion.
+When \TeX\ breaks a page at glue, it makes the break at the top
+of the glue space and forgets about the rest of the glue.
+\li At a kern that's immediately followed by glue.
+\li At a penalty, possibly between the lines of a paragraph.
+\endulist
+When \TeX\ breaks a page, it discards any
+sequence of glue, kerns, and penalty items that follows the break point.
+
+
+\endconcept
+
+
+\concept page builder
+
+See \conceptcit{page}.
+\endconcept
+
+
+\concept {page layout}
+
+\bix^^{margins}
+\bix^^{headers}
+\bix^^{footers}
+When you're designing a document, you need to decide on its
+\defterm{page layout}: the page size,
+the margins on all four sides, the headers and footers, if any,
+that appear at the top and bottom of the page,
+and the amount of space between the body of the text and the headers or
+footers. \TeX\ has defaults for all of these. It assumes an $8 \frac1/2$-%
+by-$11$-inch page with margins of approximately one inch
+on all four sides, no header,
+and a footer consisting of a centered page number.
+
+The margins are determined jointly by the four parameters
+^|\hoffset|, ^|\voffset|, ^|\hsize|, and ^|\vsize| (see
+``margins'', \xrefpg{margins},
+for advice on how to adjust them).
+\eix^^{margins}
+The header normally consists of a single line that appears at the top of each
+page, within the top margin area. You can set it by assigning
+a \refterm{token} list to the ^|\headline| parameter (\xref{\headline}).
+Similarly,
+the footer normally consists of a single line that appears at the bottom
+of each
+page, within the bottom margin area. You can set it by assigning
+a \refterm{token} list to the ^|\footline| parameter (\xref{\footline}).
+For example, the input:
+\csdisplay
+\headline = {Baby's First Document\dotfill Page\folio}
+\footline = {\hfil}
+|
+produces a header line like this on each page:
+\vdisplay{
+\dimen0 = \hsize
+\advance \dimen0 by -\parindent
+\hbox to \dimen0{Baby's First Document\dotfill Page 19}}
+\noindent
+and no footer line.
+
+You can use marks to place the current topic of a section
+of text into the header or footer.
+^^{marks//with headers or footers}
+See \conceptcit{mark} for an explanation of how to do this.
+\eix^^{headers}
+\eix^^{footers}
+\endconcept
+
+\conceptindex{paragraphs}
+\concept paragraph
+
+Intuitively, a \defterm{paragraph} is a sequence of input lines that's
+ended by a blank line, by a ^|\par| command \ctsref{\@par},
+^^|\par//ending a paragraph with|
+or by an intrinsically vertical command, such as |\vskip|.
+More precisely, a paragraph is a sequence of commands that \TeX\ processes
+in ordinary horizontal mode.
+When \TeX\ has collected an entire paragraph, it forms it into a sequence of
+lines by choosing line breaks \seeconcept{line break}.
+The result is a list of hboxes with glue, interline penalties,
+and interspersed vertical material between them.
+Each hbox is a single line, and the glue is the interline glue.
+
+\eject
+\TeX\ starts a paragraph when it's in a vertical mode
+and encounters an inherently horizontal command.
+In particular, it's in a vertical mode when it's just finished a paragraph,
+so the horizontal material on the line after a blank input line starts the
+next paragraph in a natural way.
+There are many kinds of inherently horizontal commands, but the most common
+kind is an ordinary character, e.g., a letter.
+
+\looseness = -1
+The ^|\indent| and ^|\noindent| commands
+(\pp\xrefn{\indent},~\xrefn{\noindent})
+are also inherently horizontal commands that tell
+\TeX\ either to indent or not to indent the beginning of a paragraph.
+Any other horizontal command in vertical
+mode causes \TeX\ to do an implicit |\indent|.
+Once \TeX\ has started a paragraph, it's in ordinary horizontal mode.
+It first obeys any commands that are in ^|\everypar|.
+It then proceeds to collect items for the paragraph until it gets a signal
+that the paragraph is ended.
+At the end of the paragraph it
+resets the paragraph shape parameters ^|\parshape|, |\hang!-indent|,
+^^|\hangindent|
+and ^|\looseness|.
+
+\TeX\ ordinarily translates a blank line into |\par|.
+It also
+inserts a |\par| into the input whenever it's in horizontal mode and
+sees an intrinsically vertical command.
+So ultimately the thing that ends a paragraph is always a |\par| command.
+
+When \TeX\ receives a |\par| command, it first
+fills out\footnote{%
+More precisely, it executes the commands:
+\csdisplay
+\unskip \penalty10000 \hskip\parfillskip
+|
+thus appending items for these commands
+to the end of the current horizontal list.}
+the paragraph it's working on.
+It then breaks the paragraph into lines,
+adds the resulting list of items to the enclosing vertical list,
+and exercises the page builder
+(in the case where the enclosing vertical list is the main vertical list).
+If the paragraph was ended by an intrinsically vertical command,
+\TeX\ then executes that command.
+
+\endconcept
+
+\conceptindex{parameters}
+\concept parameter
+
+The term \defterm{parameter} has two different meanings---it can refer
+either to a \TeX\ parameter or to a macro parameter.
+
+A \TeX\ parameter is a \refterm{control sequence} that names
+a value.
+The value of a parameter can be a \refterm{number}, a \refterm{dimension},
+an amount of \refterm{glue} or muglue, or a \refterm{token list}.
+For example, the ^|\parindent| parameter
+specifies the distance that \TeX\ skips at the start of an
+indented paragraph.
+
+You can use the control sequence for a parameter either to retrieve the value
+of the parameter or to set that value. \TeX\ interprets the control sequence
+as a request for a value if it appears in a context where a value is expected,
+and as an \refterm{assignment} otherwise.
+^^{assignments}
+For example:
+\csdisplay
+\hskip\parindent
+|
+produces horizontal \refterm{glue} whose natural size is given by |\parindent|,
+while:
+\csdisplay
+\parindent = 2pc % (or \parindent 2pc)
+|
+sets |\parindent| to a length of two picas. The assignment:
+\csdisplay
+\parindent = 1.5\parindent
+|
+uses |\parindent| in both ways. Its effect is to multiply the value of
+|\parindent| by $1.5$.
+
+You can think of a parameter as a built-in \refterm{register}.
+^^{registers//parameters as}
+You'll find a complete list of the \TeX\ parameters on \knuth{pages~272--275}.
+
+A \refterm{macro} parameter is a placeholder for text that is to be
+plugged into the definition of a macro. See \conceptcit{macro}
+for more information about this kind of parameter.
+
+\endconcept
+
+
+\conceptindex{penalties}
+\concept penalty
+
+A \defterm{penalty} is an item that you can include in a
+horizontal, vertical, or math list
+in order to discourage \TeX\ from breaking the list
+at that point or encourage \TeX\ to break the list there.
+^^{horizontal lists//penalties in}
+^^{vertical lists//penalties in}
+A positive penalty indicates a bad break point, while
+a negative penalty indicates a good break point.
+Breaking an
+ordinary horizontal
+list produces a \refterm{line break}, while breaking an
+ordinary vertical list produces
+a \refterm{page break}.
+(A penalty has no effect in restricted horizontal or
+internal vertical \refterm{mode}.)
+
+You can use the
+|\penalty| command (\pp\xrefn{hpenalty},~\xrefn{vpenalty})
+to insert a penalty explicitly.
+A penalty of $10000$ or more prevents a break, while a penalty of
+$-10000$ or less forces a break.
+\endconcept
+
+
+\concept{\plainTeX}
+
+\defterm{\PlainTeX} is the form of \TeX\ described in this
+book and in \texbook. \PlainTeX\ is part of the standard \TeX\
+system, so documents that use only the facilities of \plainTeX\ can
+usually be transferred from one installation to another without
+difficulty.
+
+\PlainTeX\ consists of the \refterm{primitive} commands together with a
+large collection of macros and
+other definitions. These additional definitions are given in
+\knuth{Appendix~B}. They should also be in the file |plain.tex|
+somewhere in your computer system.
+\endconcept
+
+
+\concept{primitive}
+
+A \defterm{primitive} \refterm{command} is one whose definition is built
+into the \TeX\ computer program. In contrast, a command that is not
+primitive is defined by a \refterm{macro} or some other form of
+definition written in \TeX\ itself. The commands in \refterm{\plainTeX}
+consist of the primitive commands together with
+other commands defined in terms of the
+primitive ones.
+\endconcept
+
+
+\concept {reference point}
+
+^^{baselines}
+^^{boxes//reference point of}
+The \defterm{reference point} of a \refterm{box} is the point where the
+left edge of the box intersects its \refterm{baseline}. When \TeX\ is
+processing a \refterm{horizontal:horizontal list} or \refterm{vertical
+list}, it uses the reference points of the boxes in the list to line up
+those boxes horizontally or vertically \seeconcept{box}.
+\endconcept
+
+\conceptindex{registers}
+\concept register
+
+A \defterm{register} is a named location for storing a value.
+It is much like a variable in a programming language.
+\TeX\ has five kinds of registers, as shown in the following table:
+
+\vdisplay{\tabskip 10pt\halign{\tt #\hfil &#\hfil\cr
+{\it Register type}&{\it Contents}\cr
+box&a \refterm{box} \idxref{box registers}\cr
+count&a \refterm{number} \idxref{count registers}\cr
+dimen&a \refterm{dimension} \idxref{dimension registers}\cr
+muskip&\refterm{muglue} \idxref{muglue registers}\cr
+skip&\refterm{glue} \idxref{glue registers}\cr
+toks&a \refterm{token} list\idxref{token registers}\cr}}
+
+The registers of each type are numbered from $0$ to $255$.
+You can access register $n$ of category $c$ by using the form `|\|$cn$',
+e.g., |\muskip192|.
+You can use a register
+anywhere that information of the appropriate type is called for. For
+instance, you can use |\count12|
+in any context calling for a number or |\skip0|
+in any context calling for glue.
+
+You put information into a register by \refterm{assigning:assignment}
+something to it:
+
+\csdisplay
+\setbox3 = \hbox{lagomorphs are not mesomorphs}
+\count255 = -1
+|
+The first assignment constructs an hbox and assigns it to
+box register~$3$.
+You can
+subsequently use `|\box3|' wherever a box is called for, and you will
+get just that hbox.\footnote{But note carefully: using a box register
+also empties it so that its contents become void. The other kinds of
+registers don't behave that way. You can use the |\copy| command
+\ctsref{\copy} to retrieve the contents of a box register without
+emptying it.}
+The second assignment assigns $-1$ to count register~$255$.
+
+A register of a given type, e.g., a glue register, behaves just like
+a parameter of that type.
+^^{parameters//like registers}
+You retrieve its value or assign to it
+just as you would with a \refterm{parameter}.
+Some \TeX\ parameters, e.g., |\pageno|,
+are implemented as registers, in fact.
+
+\PlainTeX\
+uses many registers for its own purposes, so you should not just
+pick an arbitrary
+register number when you need a register. Instead you should ask
+\TeX\ to reserve a register by using one of the commands
+^|\newbox|, ^|\newcount|, ^|\newdimen|, ^|\newmuskip|, ^|\newskip|,
+or ^|\newtoks|
+\ctsref{\@newbox}. These commands are outer, so you can't
+use them in a macro definition.
+If you could,
+you'd use up a register every time the macro was called and probably run out
+of registers before long.
+
+Nonetheless you can with some caution use any register temporarily
+within a \refterm{group}, even one that \TeX\ is using for something
+else.
+After \TeX\ finishes executing the commands in a group,
+it restores the contents of every register
+to what they were before it started executing the group.
+When you use an explicitly numbered register inside a group,
+you must be sure that the register isn't modified by any
+\refterm{macro}
+that you might call within the group.
+Be especially careful
+about using arbitrary registers in a group that calls macros
+that you didn't write yourself.
+
+{\tighten
+\TeX\ reserves certain registers for special purposes: |\count0| through
+|\count9| for page numbering information and
+^^{page numbering}
+^|\box255| for the contents
+of a page just before it is offered to the \refterm{output routine}.
+Registers |\dimen0|--|\dimen9|, |\skip0|--|\skip9|,
+|\muskip0|--|\mu!-skip9|, |\box0|--|\box9|,
+and the |255| registers other than |\box255|
+are generally available as ``scratch'' registers.
+Thus \plainTeX\ provides only one scratch register, |\count255|, for
+counts.
+See \knuth{pages~122 and 346} for conventions to follow
+in choosing register numbers.
+\par}
+
+You can examine the contents of registers during a \TeX\ run with the
+^|\showthe| command \ctsref\showthe, e.g., with `|\showthe\dimen0|'.
+\endconcept
+
+
+\concept{restricted mode}
+
+A \defterm{restricted mode} is a \refterm{mode} that \TeX\ is in when it is
+assembling an \refterm{hbox} or a \refterm{vbox}.
+We follow \texbook\ in using the term ``internal vertical mode''
+for what you might expect to be ``restricted vertical mode''.
+See \conceptcit{horizontal
+mode} and \conceptcit{vertical mode}.\endconcept
+
+
+\conceptindex{rules}
+\concept rule
+
+A \defterm{rule} is a solid black rectangle.
+A rule, like a \refterm{box},
+has \refterm{width}, \refterm{height}, and \refterm{depth}.
+The vertical dimension of the rectangle
+is the sum of its height and its depth.
+An ordinary horizontal or vertical straight line is a special case of a rule.
+
+\bix^^{horizontal rules}
+\bix^^{vertical rules}
+\bix^^|\hrule|
+\bix^^|\vrule|
+A rule can be either horizontal or vertical. The distinction between a
+horizontal rule and a vertical one has to do with how you produce the
+rule, since a vertical rule can be short and fat (and therefore look
+like a horizontal line), while a horizontal rule can be tall and skinny
+(and therefore look like a vertical line). \TeX's notion of a rule is
+more general than that of typographers, who think of a rule as a line
+and would not usually call a square black box a rule.
+
+You can produce a horizontal rule using the
+|\hrule| command and a vertical rule using
+the |\vrule| command \ctsref{\vrule}.
+For example, the control sequence |\hrule| by itself
+produces a thin rule that runs across the page, like this:
+
+{\offinterlineskip
+\nobreak\medskip
+\hrule
+\medskip}
+
+The command `|\vrule height .25in|' produces a vertical rule
+that runs $.25$~inches down the page like this:
+\nobreak\vskip \abovedisplayskip
+\leftline{\vrule height .25in}
+\vskip \belowdisplayskip
+
+There are two differences between horizontal rules and vertical rules:
+\olist
+\li For a horizontal rule, \TeX\ defaults the width to the width of the
+smallest \refterm{box} or \refterm{alignment} that encloses it. For a
+vertical rule, \TeX\ defaults the height and depth in the same way. (The
+default is the size that you get if you don't give a size explicitly for that
+dimension.)
+
+^^{horizontal lists//rule in}
+^^{vertical lists//rule in}
+\li
+{\tighten
+A horizontal rule is an inherently vertical item that cannot participate in
+a \refterm{horizontal list},
+while a vertical
+rule is an inherently horizontal item
+that cannot participate in a \refterm{vertical list}. This behavior
+may seem strange at first but there is good reason for it:
+a horizontal rule ordinarily runs visually from left
+to right and thus separates items in a vertical list,
+while a vertical rule ordinarily runs visually from top to bottom
+and thus separates items in a horizontal list.
+%(Look at the rules that are shown above.)
+\par}
+\endolist
+
+{\tighten
+If you construct a rule with three explicit dimensions, it will look the
+same whether you make it a horizontal rule or a vertical rule.
+For example, the command `|\vrule height1pt depth2pt width3in|' produces this
+horizontal-looking rule:
+\par}
+
+{\offinterlineskip
+\nobreak\medskip\nobreak\vskip3pt
+\leftline{\vrule height1pt depth2pt width3in}
+\medskip}
+
+You'll find a precise statement of \TeX's treatment of rules on
+\knuth{pages~221--222}.
+\eix^^{horizontal rules}
+\eix^^{vertical rules}
+\eix^^|\hrule|
+\eix^^|\vrule|
+\endconcept
+
+
+\concept {script size}
+
+\defterm{Script size} describes one of the three related
+\refterm{fonts:font} in a family.
+^^{family//script size in}
+Script size is smaller than \refterm{text size} but larger than
+\refterm{scriptscript size}. \TeX\ uses script size for subscripts and
+superscripts, as well as for the numerators and denominators of
+fractions in text.
+\endconcept
+
+
+\concept {scriptscript size}
+
+\defterm{Scriptscript size} describes the smallest of the three related
+\refterm{fonts:font} in a family.
+^^{family//scriptscript size in}
+\TeX\ uses \refterm{scriptscript size} for second-order subscripts,
+superscripts, numerators, and denominators. For example, \TeX\ will use
+scriptscript size for a subscript on a subscript or for a superscript on
+a scriptsize numerator.
+\endconcept
+
+\concept shrink
+
+See \conceptcit{glue}.
+\endconcept
+
+\concept space
+
+You can cause \TeX\ to put \defterm{space} between two items in
+several~ways:
+
+\olist
+^^{end of line}
+\li You can write something that \TeX\ treats as a space
+\refterm{token}: one or more blank characters, the end of a line (the
+end-of-line character acts like a space), or any \refterm{command} that
+expands into a space token. \TeX\ generally treats several consecutive
+spaces as equivalent to a single one, including the case where the
+spaces include a single end-of-line. (An empty line
+indicates the end of a paragraph; it
+causes \TeX\ to generate a |\par| token.)
+^^|\par//from empty line|
+\TeX\ adjusts the size of
+this kind of space to suit the length required by the context.
+
+^^{glue//creating space with}
+\li You can write a skip command that produces the glue
+you specify in the command. The glue can
+\refterm{stretch} or \refterm{shrink},
+producing more or less space. You can have vertical glue as
+well as horizontal glue. Glue disappears whenever it is next to a
+line or page break.
+
+^^{kerns//creating space with}
+\li You can write a \refterm{kern}. A kern produces a fixed amount of
+space that does not stretch or shrink and does not disappear at a line
+or page break (unless it is immediately followed by glue). The most
+common use of a kern is to establish a fixed spatial relationship
+between two adjacent \refterm{boxes}.
+\endolist
+
+Glue and kerns can have negative values. Negative glue or a negative kern
+between adjacent items brings those items closer together.
+\endconcept
+
+
+\concept stretch
+
+See \conceptcit{glue}.
+\endconcept
+
+
+\conceptindex{struts}
+\concept strut
+
+{\tighten
+A \defterm{strut} is an invisible \refterm{box}
+^^{boxes//invisible}
+whose width is zero and whose height and depth are slightly more than
+those of a ``normal''
+line of type in the context. Struts are useful for obtaining
+uniform vertical spacing when \TeX's
+usual line spacing is disabled, e.g., within a math formula
+or within a horizontal alignment where you've specified ^|\offinterlineskip|.
+Because a strut is taller and deeper than everything else on its line,
+it determines the height and depth of the line.
+You can produce a strut with
+the ^|\strut| command \ctsref{\strut} or the ^|\mathstrut| command
+\ctsref\mathstrut.
+You can use |\strut| anywhere, but you can only use |\mathstrut| when
+\TeX\ is in math \refterm{mode}. A strut in \plainTeX\ has height 8.5\pt\ and
+depth 3.5\pt, while a math strut has the height and depth of a left
+parenthesis in the current \refterm{style} (so it's smaller for
+subscripts and superscripts).
+\par}
+
+Here's an example showing how you might use a strut:
+\csdisplay
+\vbox{\hsize = 3in \raggedright
+ \strut Here is the first of two paragraphs that we're
+ setting in a much narrower line length.\strut}
+\vbox{\hsize = 3in \raggedright
+ \strut Here is the second of two paragraphs that we're
+ setting in a much narrower line length.\strut}
+|
+This input yields:
+\display{\vbox{
+\vbox{\hsize = 3in \raggedright
+\strut Here is the first of two paragraphs that we're setting
+in a much narrower line length.\strut}
+\vbox{\hsize = 3in \raggedright
+\strut Here is the second of two paragraphs that we're setting
+in a much narrower line length.\strut}
+}}
+\noindent
+Without the struts the \refterm{vboxes:vbox} would be too close
+together. Similarly, in the formula:
+\csdisplay
+$\overline{x\mathstrut} \otimes \overline{t\mathstrut}$
+|
+the math struts cause both bars to be set at the same height even
+though the `$x$' and the `$t$' have different heights:
+\display{
+$\overline{x\mathstrut} \otimes \overline{t\mathstrut}$
+}
+\vskip -\belowdisplayskip
+\endconcept
+\nobreak
+
+\conceptindex{styles}
+\concept {style}
+
+Material in a math formula is set in one of eight \defterm{styles},
+depending on the context. Knowing about styles can be useful if you want to
+set part of a formula in a different size of type than the one
+that \TeX\ has chosen according to its usual rules.
+
+\eject
+The four primary styles are:
+
+\vdisplay{%
+\halign{\refterm{# style}\hfil&\hskip .25in(for #)\hfil\cr
+display&formulas displayed on a line by themselves\cr
+text&formulas embedded in ordinary text\cr
+script&superscripts and subscripts\cr
+scriptscript&superscripts on superscripts, etc.\cr
+}}
+
+The other four styles are so-called ^{cramped variants}. In these
+variants superscripts aren't raised as high as usual, and so the formula
+needs less vertical space than it otherwise would. See
+\knuth{pages~140--141} for the details of how \TeX\ selects the style.
+
+\TeX\ chooses a size of type according to the style:
+
+\ulist\compact
+^^{display style}^^{text style}
+\li Display style and text style are set in \refterm{text size}, like
+`$\rm this$'.
+
+^^{script style}
+\li Script style is set in \refterm{script size}, like `$\scriptstyle
+\rm this$'.
+
+^^{scriptscript style}
+\li Scriptscript style is set in \refterm{scriptscript size}, like
+`$\scriptscriptstyle \rm this$'.
+\endulist
+
+See \conceptcit{family} for more information about these three sizes.
+
+\TeX\ doesn't have a ``scriptscriptscript'' style because such a style
+would usually have to be set in a size of type too small to read. \TeX\
+therefore sets third-order subscripts, superscripts, etc., using the
+scriptscript style.
+
+Once in a while you may find that \TeX\ has set a formula in a different style
+than the one you'd prefer. You can override \TeX's choice with the
+^|\textstyle|, ^|\displaystyle|, ^|\scriptstyle|, and ^|\scriptscriptstyle|
+commands \ctsref{\textstyle}.
+\endconcept
+
+\concept {\TeXMeX}
+
+(a)~A variant of \TeX\ used for mathematical typesetting in
+Central American countries.
+(b)~A spicy cuisine favored by the \TeX\-ni\-cians of ^{El Paso}.
+\endconcept
+
+
+\concept {text math}
+
+We use the term \defterm{text math} to refer to a math formula set within a
+line of text, i.e., enclosed in |$|'s.
+\ttidxref{$}
+\TeX\ sets text math in text math \refterm{mode}.
+\endconcept
+
+
+\concept {text size}
+
+\defterm{Text size} describes the largest of the three related
+\refterm{fonts:font} in a \refterm{family}.
+^^{family//text size in}
+\TeX\ uses text size for ordinary symbols appearing in
+\refterm{math mode}.
+\endconcept
+
+
+\conceptindex{tokens}
+\concept token
+
+A \defterm{token} is either a single character tagged with a
+\refterm{category code}, or a \refterm{control sequence}. \TeX\ reads
+characters from a file using its eyes \seeconcept{\anatomy}
+and groups the characters into tokens using its mouth. When a token
+reaches \TeX's stomach, \TeX\ interprets it as a \refterm{command}
+unless it's part of an argument of a preceding command.
+\endconcept
+
+
+\conceptindex{units of measure}
+\concept {unit of measure}
+
+See \conceptcit{dimension}.
+\endconcept
+
+\conceptindex{vboxes}
+\concept vbox
+
+^^{vertical lists//vboxes formed from}
+A \defterm{vbox} (vertical box) is a \refterm{box} that \TeX\ constructs
+by placing the items of a \refterm{vertical list} one after another, top
+to bottom. A vbox, taken as a unit, is neither inherently horizontal
+nor inherently vertical, i.e., it can appear as an item of either a
+vertical list or a \refterm{horizontal list}. You can construct a vbox
+with the ^|\vbox| or the ^|\vtop| command
+\ctsref{\vtop}. The difference is that for |\vbox|,
+the \refterm{reference point}
+of the constructed vbox is derived from that of the last (and
+usually bottommost) constituent list item, but for |\vtop|, it's that of the
+first (and usually topmost) constituent list item.
+\endconcept
+
+
+\conceptindex{vertical lists}
+\concept{vertical list}
+
+A \defterm{vertical list} is a list of items
+that \TeX\ has produced while it is
+in one of its vertical modes, i.e.,
+assembling either a
+\refterm{vbox} or a page. See ``vertical mode'' below.
+
+\endconcept
+
+
+\concept{vertical mode}
+
+^^{vboxes//vertical mode for} When \TeX\ is assembling either a
+\refterm{vbox} or the main vertical list from which pages are derived,
+it is in one of two \defterm{vertical modes}: ^{ordinary
+vertical mode} for assembling the main vertical list, and ^{internal
+vertical mode} for assembling vboxes. Whenever \TeX\ is in a vertical mode
+its stomach \seeconcept{\anatomy} is constructing a \refterm{vertical
+list} of items (boxes, glue, penalties, etc.).
+\TeX\ typesets the items in the list
+one below another, top to bottom.
+
+A vertical list can't contain any items produced by
+inherently horizontal commands, e.g.,
+^^{vertical lists//can't contain horizontal commands}
+|\hskip| or an ordinary (nonspace) character.
+\footnote{\TeX\ \emph{ignores} any space characters
+that it encounters while it's in a vertical mode.}
+
+\ulist
+\li If \TeX\ is assembling a vertical list in ordinary vertical mode and
+encounters an inherently horizontal command, it switches to ordinary
+\refterm{horizontal mode}.
+\li If \TeX\ is assembling a vertical list in internal vertical mode and
+encounters an inherently horizontal command, it complains.
+\endulist
+
+Two commands that you might at first think are inherently vertical are
+in fact inherently horizontal: |\valign| \ctsref{\valign} and |\vrule|
+\ctsref{\vrule}.
+^^|\valign//inherently horizontal|
+^^|\vrule//inherently horizontal|
+See \knuth{page~283} for a list of the
+inherently horizontal commands.
+
+It's particularly important to be aware that \TeX\ considers an ordinary
+character other than a space character to be inherently horizontal. If
+\TeX\ suddenly starts a new paragraph when you weren't expecting it,
+a likely cause is a
+character that \TeX\ encountered while in vertical mode.
+You can convince \TeX\
+not to treat that character as inherently horizontal by enclosing it in
+an \refterm{hbox} since the |\hbox| command, despite its name, is
+neither inherently horizontal nor inherently vertical.
+\endconcept
+
+
+\concept whatsit
+
+A \defterm{whatsit} is an item of information that
+tells \TeX\ to carry out some action
+that doesn't fit into its ordinary scheme of things.
+A whatsit can appear in a horizontal or vertical list, just like a box
+or a glue item.
+\TeX\ typesets a whatsit
+as a \refterm{box} having zero width, height, and depth---in other
+words, a box that contains nothing and occupies no space.
+
+Three sorts of whatsits are built into \TeX:
+\ulist
+\li The |\openout|, |\closeout|, and |\write| commands
+(\p\xrefn{\openout})
+% (2nd) removed \xref to \write, since it's on the same page
+produce a whatsit for operating on an output file.
+^^|\openout//whatsit produced by|
+^^|\write//whatsit produced by|
+^^|\closeout//whatsit produced by|
+\TeX\ postpones the operation until it next ships out a page
+to the {\dvifile}
+^^{\dvifile//whatsits in}
+(unless the operation is preceded by ^|\immediate|).
+\TeX\ uses a whatsit for these commands because they don't have anything
+to do with what it's typesetting when it encounters them.
+\li The ^|\special| command \ctsref{\special} tells \TeX\ to
+insert certain text directly into the \dvifile.
+As with the |\write| command, \TeX\ postpones the insertion
+until it next ships out a page to the {\dvifile}.
+^^{\dvifile//material inserted by \b\tt\\special\e}
+A typical use of |\special| would be to
+name a graphics file that the device driver should incorporate into
+your final output.
+\li When you change languages with the ^|\language| or ^|\setlanguage|
+commands \ctsref{\language},
+\TeX\ inserts a whatsit that instructs it to use a
+certain set of hyphenation rules later on when it's breaking a paragraph
+into lines.
+\endulist
+\noindent
+A particular implementation of \TeX\ may provide additional whatsits.
+\endconcept
+
+
+\concept width
+
+^^{boxes//width of}
+The \defterm{width} of a \refterm{box} is the amount of horizontal space
+that it occupies, i.e., the distance from its left edge to its
+right edge. The typeset material in a box can be wider than the box itself.
+\endconcept
+
+\endconcepts
+
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/config.tex b/Master/texmf-dist/doc/plain/impatient/config.tex
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/config.tex
diff --git a/Master/texmf-dist/doc/plain/impatient/copyrght.tex b/Master/texmf-dist/doc/plain/impatient/copyrght.tex
new file mode 100644
index 00000000000..2fe8addc6c9
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/copyrght.tex
@@ -0,0 +1,48 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+
+
+% Copyright page.
+%
+\noheadlinetrue
+\sinkage
+
+\noindent `\TeX' is a trademark of the American Mathematical Society.
+
+\noindent `\Metafont' is a trademark of Addison-Wesley Publishing Company.
+
+\bigskip
+\noindent This book, \thisbook, contains both tutorial and reference
+information on all features of both plain and primitive \TeX.
+
+\bigskip
+
+\noindent Copyright \copyright{} 2003 Paul~W. Abrahams,
+Kathryn~A. Hargreaves, and Karl Berry.
+
+\bigskip
+\noindent Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version
+1.1 or any later version published by the Free Software Foundation; with
+no Invariant Sections, with no Front-Cover texts, and with no Back-Cover
+texts. A copy of the license is included in the chapter entitled ``GNU
+Free Documentation License''.
+
+\medskip\noindent
+Under the terms of the GFDL, anyone is allowed to modify and
+redistribute this material, and it is our hope that others will find it
+useful to do so. That includes translations, either to other natural
+languages, or to other computer source or output formats.
+
+\medskip\noindent
+In our interpretation of the GFDL, you may also extract text from this
+book for use in a new document, as long as the new document is also
+under the GFDL, and as long as proper credit is given (as provided for
+in the license).
+
+
+\pagebreak
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/eplain.tex b/Master/texmf-dist/doc/plain/impatient/eplain.tex
new file mode 100644
index 00000000000..19ad8cf59f6
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/eplain.tex
@@ -0,0 +1,1196 @@
+%% @texfile{
+%% author = "Karl Berry et al.",
+%% version = "1.9a",
+%% date = "28jul03",
+%% filename = "eplain.tex",
+%% email = "karl@cs.umb.edu",
+%% codetable = "ISO/ASCII",
+%% supported = "yes",
+%% docstring = "This file defines macros that expand on plain TeX, and
+%% is used in the production of the book TeX for the Impatient. It was
+%% originally version 1.9 from 11mar91, and differs only in this header
+%% material. Sadly, newer versions of eplain have more
+%% incompatibilities with the features we used to produce TFTI. Of
+%% course new documents should use the latest eplain, available from
+%% http://tug.org/eplain and from http://www.ctan.org/macros/eplain.
+%% ",
+%% }
+\def\makeactive#1{\catcode`#1 = \active \ignorespaces}%
+\chardef\letter = 11
+\chardef\other = 12
+\catcode`@ = \letter
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1 = \other}%
+ \dospecials
+}%
+{%
+ \makeactive\^^M
+ \long\gdef\letreturn#1{\let^^M = #1}%
+}%
+\def\gobble#1{}%
+\def\gobbletwo#1#2{}%
+\def\gobblethree#1#2#3{}%
+\def\@gobblemeaning#1:->{}%
+\def\sanitize{\expandafter\@gobblemeaning\meaning}%
+\def\futurenonspacelet#1{\def\cs{#1}%
+ \afterassignment\@stepone\let\nexttoken=
+}%
+\def\\{\let\@stoken= }%
+\\ % now \@stoken is a space token (\\ is a control symbol, so that
+\def\@stepone{\expandafter\futurelet\cs\@steptwo}%
+\def\@steptwo{\expandafter\ifx\cs\@stoken\let\@@next=\@stepthree
+ \else\let\@@next=\nexttoken\fi \@@next}%
+\def\@stepthree{\afterassignment\@stepone\let\@@next= }%
+\let\@plainwlog = \wlog
+\let\wlog = \gobble
+\newlinechar = `^^J
+\def\loggingall{\tracingcommands\tw@\tracingstats\tw@
+ \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne
+ \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen
+}%
+\def\tracingboxes{\showboxbreadth = \maxdimen \showboxdepth = \maxdimen}%
+\newdimen\hruledefaultheight \hruledefaultheight = 0.4pt
+\newdimen\hruledefaultdepth \hruledefaultdepth = 0.0pt
+\newdimen\vruledefaultwidth \vruledefaultwidth = 0.4pt
+\def\ehrule{\hrule height\hruledefaultheight depth\hruledefaultdepth}%
+\def\evrule{\vrule width\vruledefaultwidth}%
+\begingroup
+ \catcode`\{ = 12 \catcode`\} = 12
+ \catcode`\[ = 1 \catcode`\] = 2
+ \gdef\lbracechar[{]%
+ \gdef\rbracechar[}]%
+ \catcode`\% = \other
+ \gdef\percentchar[%]\endgroup
+\def^^L{\par}%
+\let\@ifempty = \iffalse
+\ifx\@undefinedmessage\@undefined
+ \def\@undefinedmessage
+ {No .aux file; I won't warn you about undefined labels.}%
+\fi
+%% @texfile{
+%% author = "Karl Berry and Oren Patashnik",
+%% version = "0.99h",
+%% date = "24 Apr 1991",
+%% filename = "btxmac.tex",
+%% address = "Please use electronic mail",
+%% checksum = "812 4053 30557",
+%% email = "opbibtex@neon.stanford.edu",
+%% codetable = "ISO/ASCII",
+%% supported = "yes",
+%% docstring = "Defines macros that make BibTeX work with plain TeX",
+%% }
+\edef\cite{\the\catcode`@}%
+\catcode`@ = 11
+\let\@oldatcatcode = \cite
+\chardef\@letter = 11
+\chardef\@other = 12
+\def\@innerdef#1#2{\edef#1{\expandafter\noexpand\csname #2\endcsname}}%
+\@innerdef\@innernewcount{newcount}%
+\@innerdef\@innernewdimen{newdimen}%
+\@innerdef\@innernewif{newif}%
+\@innerdef\@innernewwrite{newwrite}%
+\def\@gobble#1{}%
+\ifx\inputlineno\@undefined
+ \let\@linenumber = \empty % Pre-3.0.
+\else
+ \def\@linenumber{\the\inputlineno:\space}%
+\fi
+\def\@getoptionalarg#1{\let\temp = #1\futurelet\next\@bracketcheck}%
+\def\@bracketcheck{\begingroup
+ \if [\next
+ \aftergroup\@@getoptionalarg
+ \else
+ \global\let\@optionalarg = \empty
+ \aftergroup\temp
+ \fi
+\endgroup}%
+\def\@@getoptionalarg[#1]{%
+ \def\@optionalarg{#1}%
+ \temp
+}%
+\def\@tokstostring#1{\@ttsA#1 \@ttsmarkA}%
+\def\@ttsA#1 #2\@ttsmarkA{%
+ \@ifempty{#1}\else
+ \@ttsB #1\@ttsmarkB
+ \@ifempty{#2}\else
+ \@spacesub\@ttsA#2\@ttsmarkA
+ \fi
+ \fi
+}%
+\def\@ttsB#1{%
+ \ifx #1\@ttsmarkB\else
+ \string #1%
+ \expandafter\@ttsB
+ \fi
+}%
+\def\@ttsmarkB{\@ttsmarkB}% should never be expanded
+\def\@spacesub{+}%
+\def\@ifempty#1{\@@ifempty #1\@emptymarkA\@emptymarkB}%
+\def\@@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
+\def\@emptymarkA{\@emptymarkA}% Again, so \ifx won't complain.
+\def\@nnil{\@nil}%
+\def\@fornoop#1\@@#2#3{}%
+\def\@for#1:=#2\do#3{%
+ \edef\@fortmp{#2}%
+ \ifx\@fortmp\empty \else
+ \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}%
+ \fi
+}%
+\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi
+}%
+\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@fornoop \else
+ #4\relax\let\@nextwhile=\@iforloop\fi\@nextwhile#2\@@#3{#4}%
+}%
+\@innernewif\if@fileexists
+\def\@testfileexistence{\@getoptionalarg\@finishtestfileexistence}%
+\def\@finishtestfileexistence#1{%
+ \begingroup
+ \def\extension{#1}%
+ \immediate\openin0 =
+ \ifx\@optionalarg\empty\jobname\else\@optionalarg\fi
+ \ifx\extension\empty \else .#1\fi
+ \space
+ \ifeof 0
+ \global\@fileexistsfalse
+ \else
+ \global\@fileexiststrue
+ \fi
+ \immediate\closein0
+ \endgroup
+}%
+\toks0 = {%
+\def\bibliographystyle#1{%
+ \@readauxfile
+ \@writeaux{\string\bibstyle{#1}}%
+}%
+\let\bibstyle = \@gobble
+\def\bibliography#1{%
+ \@readauxfile
+ \@writeaux{\string\bibdata{#1}}%
+ \@testfileexistence{bbl}%
+ \if@fileexists
+ \@readbblfile
+ \fi
+}%
+\let\bibdata = \@gobble
+\def\nocite#1{%
+ \@readauxfile
+ \@writeaux{\string\citation{#1}}%
+}%
+\@innernewif\if@notfirstcitation
+\def\cite{\begingroup\catcode`_ = \@letter \@getoptionalarg\@cite}%
+\def\@cite#1{%
+ \nocite{#1}%
+ \printcitestart
+ \@notfirstcitationfalse
+ \@for \@citation :=#1\do
+ {%
+ \expandafter\@onecitation\@citation\@@
+ }%
+ \ifx\empty\@optionalarg\else
+ \printcitenote{\@optionalarg}%
+ \fi
+ \printcitefinish
+ \endgroup
+}%
+\def\@onecitation#1\@@{%
+ \if@notfirstcitation
+ \printbetweencitations
+ \fi
+ \expandafter \ifx \csname\@citelabel{#1}\endcsname \relax
+ \if@citewarning
+ \message{\@linenumber Undefined citation `#1'.}%
+ \fi
+ \expandafter\gdef\csname\@citelabel{#1}\endcsname{%
+ {\tt \nobreak\hskip0pt#1\nobreak\hskip0pt}}%
+ \fi
+ \csname\@citelabel{#1}\endcsname
+ \@notfirstcitationtrue
+}%
+\def\@citelabel#1{\@tokstostring{b@#1}}%
+\def\@citedef#1{%
+ \begingroup
+ \@resetnumerals
+ \@finishcitedef{#1}%
+}%
+\def\@finishcitedef#1#2{%
+ \expandafter\gdef\csname\@citelabel{#1}\endcsname{#2}%
+ \endgroup
+}%
+\def\@resetnumerals{%
+ \catcode`0 = \@other \catcode`1 = \@other \catcode`2 = \@other
+ \catcode`3 = \@other \catcode`4 = \@other \catcode`5 = \@other
+ \catcode`6 = \@other \catcode`7 = \@other \catcode`8 = \@other
+ \catcode`9 = \@other \catcode`" = \@other \catcode`' = \@other
+ \catcode`` = \@other \catcode`, = \@other \catcode`. = \@other
+}%
+\def\@readbblfile{%
+ \@innernewcount\@itemnum
+ \begingroup
+ \def\begin##1##2{%
+ \setbox0 = \hbox{\biblabelcontents{##2}}%
+ \biblabelwidth = \wd0
+ }%
+ \def\end##1{}% ##1 is `thebibliography' again.
+ \@itemnum = 0
+ \def\bibitem{\futurelet\next\@bibitem}%
+ \def\@bibitem{%
+ \begingroup \if [\next
+ \aftergroup\@alphabibitem
+ \else
+ \aftergroup\@numberedbibitem
+ \fi \endgroup
+ }%
+ \def\@alphabibitem[##1]##2{%
+ \expandafter \xdef\csname\@citelabel{##2}\endcsname {##1}%
+ \@finishbibitem{##2}%
+ }%
+ \def\@numberedbibitem##1{%
+ \advance\@itemnum by 1
+ \expandafter \xdef\csname\@citelabel{##1}\endcsname{\number\@itemnum}%
+ \@finishbibitem{##1}%
+ }%
+ \def\@finishbibitem##1{%
+ \biblabelprint{\csname\@citelabel{##1}\endcsname}%
+ \@writeaux{\string\@citedef{##1}{\csname\@citelabel{##1}\endcsname}}%
+ \ignorespaces
+ }%
+ \let\em = \bblem
+ \let\newblock = \bblnewblock
+ \let\sc = \bblsc
+ \frenchspacing
+ \clubpenalty = 4000 \widowpenalty = 4000
+ \tolerance = 10000 \hfuzz = .5pt
+ \everypar = {\hangindent = \biblabelwidth
+ \advance\hangindent by \biblabelextrahang}%
+ \bblrm
+ \parskip = 1.5ex plus .5ex minus .5ex
+ \biblabelextrahang = .5em
+ \bblhook
+ \input \jobname.bbl
+ \endgroup
+}%
+\@innernewdimen\biblabelwidth
+\@innernewdimen\biblabelextrahang
+\def\biblabelprint#1{%
+ \noindent\hbox to \biblabelwidth{\biblabelcontents{#1}\hss}\enspace}%
+\def\biblabelcontents#1{\bblrm [#1]}%
+\def\bblrm{\rm}%
+\def\bblem{\it}%
+\def\bblsc{\ifx\@scfont\@undefined
+ \font\@scfont = cmcsc10
+ \fi
+ \@scfont
+}%
+\def\bblnewblock{\hskip .11em plus .33em minus .07em}%
+\let\bblhook = \empty
+\def\printcitestart{[}% left bracket
+\def\printcitefinish{]}% right bracket
+\def\printbetweencitations{, }% comma, space
+\def\printcitenote#1{, #1}% comma, space, note (if it exists)
+\let\citation = \@gobble
+\@innernewcount\@numparams
+\def\newcommand#1{%
+ \def\@commandname{#1}%
+ \futurelet\@next\@continuenewcommand
+}%
+\def\@continuenewcommand{\begingroup
+ \if [\@next
+ \aftergroup\@newcommandwithargs
+ \else
+ \global\@numparams = 0
+ \aftergroup\@newcommand
+ \fi
+\endgroup}%
+\def\@newcommandwithargs[#1]{%
+ \global\@numparams = #1
+ \@newcommand
+}%
+\def\@newcommand#1{%
+ \def\@startdef{\expandafter\edef\@commandname}%
+ \ifnum\@numparams=0
+ \let\@paramdef = \empty
+ \else
+ \ifnum\@numparams>9
+ \errmessage{\the\@numparams\space is too many parameters}%
+ \else
+ \ifnum\@numparams<0
+ \errmessage{\the\@numparams\space is too few parameters}%
+ \else
+ \edef\@paramdef{%
+ \ifcase\@numparams
+ \empty No arguments.
+ \or ####1%
+ \or ####1####2%
+ \or ####1####2####3%
+ \or ####1####2####3####4%
+ \or ####1####2####3####4####5%
+ \or ####1####2####3####4####5####6%
+ \or ####1####2####3####4####5####6####7%
+ \or ####1####2####3####4####5####6####7####8%
+ \or ####1####2####3####4####5####6####7####8####9%
+ \fi
+ }%
+ \fi
+ \fi
+ \fi
+ \expandafter\@startdef\@paramdef{#1}%
+}%
+}%
+\ifx\nobibtex\@undefined \the\toks0 \fi
+\def\@readauxfile{%
+ \if@auxfiledone \else % remember: \@auxfiledonetrue if \noauxfile is defined
+ \global\@auxfiledonetrue
+ \@testfileexistence{aux}%
+ \if@fileexists
+ \begingroup
+ \endlinechar = -1
+ \@setletters
+ \input \jobname.aux
+ \endgroup
+ \else
+ \message{\@undefinedmessage}%
+ \global\@citewarningfalse
+ \fi
+ \immediate\openout\@auxfile = \jobname.aux
+ \fi
+}%
+\newif\if@auxfiledone
+\ifx\noauxfile\@undefined \else \@auxfiledonetrue\fi
+\def\@setletters{%
+ \count255 = 0
+ \edef\temp{\ifx\inputlineno\@undefined 128\else 256\fi}%
+ \loop
+ \ifnum\catcode\count255 = \@other
+ \catcode\count255 = \@letter
+ \fi
+ \advance\count255 by 1
+ \ifnum\count255<\temp
+ \repeat
+ \catcode`\_ = \@letter
+}%
+\@innernewwrite\@auxfile
+\def\@writeaux#1{\ifx\noauxfile\@undefined \write\@auxfile{#1}\fi}%
+\ifx\@undefinedmessage\@undefined
+ \def\@undefinedmessage{No .aux file; I won't give you warnings about
+ undefined citations.}%
+\fi
+\@innernewif\if@citewarning
+\ifx\noauxfile\@undefined \@citewarningtrue\fi
+\catcode`@ = \@oldatcatcode
+\let\auxfile = \@auxfile
+\let\for = \@for
+\let\getoptionalarg = \@getoptionalarg
+\let\ifempty = \@ifempty
+\def\iffileexists{\if@fileexists}%
+\let\innerdef = \@innerdef
+\let\innernewcount = \@innernewcount
+\let\innernewdimen = \@innernewdimen
+\let\innernewif = \@innernewif
+\let\innernewwrite = \@innernewwrite
+\let\linenumber = \@linenumber
+\let\readauxfile = \@readauxfile
+\let\spacesub = \@spacesub
+\let\testfileexistence = \@testfileexistence
+\let\tokstostring = \@tokstostring
+\let\writeaux = \@writeaux
+\def\innerinnerdef#1{\expandafter\innerdef\csname inner#1\endcsname{#1}}%
+\innerinnerdef{newbox}%
+\innerinnerdef{newfam}%
+\innerinnerdef{newhelp}%
+\innerinnerdef{newinsert}%
+\innerinnerdef{newlanguage}%
+\innerinnerdef{newmuskip}%
+\innerinnerdef{newread}%
+\innerinnerdef{newskip}%
+\innerinnerdef{newtoks}%
+\def\immediatewriteaux#1{%
+ \ifx\noauxfile\@undefined
+ \immediate\write\@auxfile{#1}%
+ \fi
+}%
+\begingroup
+ \makeactive\^^M \makeactive\ % No spaces or ^^M's from here on.
+\gdef\obeywhitespace{%
+\makeactive\^^M\def^^M{\par\futurelet\next\@finishobeyedreturn}%
+\makeactive\ \def {\ }%
+\aftergroup\@removebox%
+\futurelet\next\@finishobeywhitespace%
+}%
+\gdef\@finishobeywhitespace{{%
+\ifx\next %
+\aftergroup\@obeywhitespaceloop%
+\else\ifx\next^^M%
+\aftergroup\gobble%
+\fi\fi}}%
+\gdef\@finishobeyedreturn{%
+\ifx\next^^M\vskip\blanklineskipamount\fi%
+\indent%
+}%
+\endgroup
+\def\@obeywhitespaceloop#1{\futurelet\next\@finishobeywhitespace}%
+\def\@removebox{%
+ \setbox0 = \lastbox
+ \ifdim\wd0=\parindent
+ \setbox2 = \hbox{\unhbox0}%
+ \ifdim\wd2=0pt
+ \ignorespaces
+ \else
+ \box2 % Put it back: it wasn't empty.
+ \fi
+ \else
+ \box0 % Put it back: it wasn't the right width.
+ \fi
+}%
+\newskip\blanklineskipamount
+\blanklineskipamount = 0pt
+\def\frac#1/#2{\leavevmode
+ \kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}%
+ \kern-.1em $/$%
+ \kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}%
+}%
+\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\null}%
+\def\LaTeX{L\kern -.26em \raise .6ex \hbox{\sevenrm A}\kern -.15em \TeX}%
+\def\AMSTeX{$\cal A\kern -.1667em
+ \lower .5ex\hbox{$\cal M$}%
+ \kern -.125em S$-\TeX
+}%
+\def\BibTeX{{\rm B\kern-.05em{\sevenrm I\kern-.025em B}\kern-.08em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}%
+\font\mflogo = logo10
+\def\MF{{\mflogo META}{\tenrm \-}{\mflogo FONT}}%
+\def\blackbox{\vrule height .8ex width .6ex depth -.2ex }% square bullet
+\def\makeblankbox#1#2{%
+ \ifvoid0
+ \errmessage{Box 0 is void}%
+ \errhelp = \@makeblankboxhelp
+ \fi
+ \hbox{\lower\dp0
+ \vbox{\hidehrule{#1}{#2}%
+ \kern -#1% overlap rules
+ \hbox to \wd0{\hidevrule{#1}{#2}%
+ \raise\ht0\vbox to #1{}% vrule height
+ \lower\dp0\vtop to #1{}% vrule depth
+ \hfil\hidevrule{#2}{#1}%
+ }%
+ \kern-#1\hidehrule{#2}{#1}%
+ }%
+ }%
+}%
+\newhelp\@makeblankboxhelp{Assigning to the dimensions of a void^^J%
+ box has no effect. Do `\string\setbox0=\string\null' before you^^J%
+ define its dimensions.}%
+\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2}%
+\def\hidevrule#1#2{%
+ \kern-#1%
+ \dimen0=#1\advance\dimen0 by #2%
+ \vrule width\dimen0
+ \kern-#2%
+}%
+\newdimen\boxitspace \boxitspace = 3pt
+\def\boxit#1{%
+ \vbox{%
+ \hrule
+ \hbox{%
+ \vrule
+ \kern\boxitspace
+ \vbox{\kern\boxitspace \parindent = 0pt #1\kern\boxitspace}%
+ \kern\boxitspace
+ \vrule
+ }%
+ \hrule
+ }%
+}%
+\def\numbername#1{\ifcase#1%
+ zero%
+ \or one%
+ \or two%
+ \or three%
+ \or four%
+ \or five%
+ \or six%
+ \or seven%
+ \or eight%
+ \or nine%
+ \or ten%
+ \or #1%
+ \fi
+}%
+\def\environment#1{%
+ \ifx\@groupname\@undefined\else
+ \errhelp = \@unnamedendgrouphelp
+ \errmessage{`\@groupname' was not closed by \string\endenvironment}%
+ \fi
+ \def\@groupname{#1}%
+ \begingroup
+ \let\@groupname = \@undefined
+}%
+\def\endenvironment#1{%
+ \endgroup
+ \def\@thearg{#1}%
+ \ifx\@groupname\@thearg
+ \else
+ \ifx\@groupname\@undefined
+ \errhelp = \@isolatedendenvironmenthelp
+ \errmessage{Isolated \string\endenvironment\space for `#1'}%
+ \else
+ \errhelp = \@mismatchedenvironmenthelp
+ \errmessage{Environment `#1' ended, but `\@groupname' started}%
+ \endgroup % Probably a typo in the names.
+ \fi
+ \fi
+ \let\@groupname = \@undefined
+}%
+\newhelp\@unnamedendgrouphelp{Most likely, you just forgot an^^J%
+ \string\endenvironment. Maybe you should try inserting another^^J%
+ \string\endgroup to recover.}%
+\newhelp\@isolatedendenvironmenthelp{You ended an environment X, but^^J%
+ no \string\environment\space to start it is anywhere in sight.^^J%
+ You might also be at an \string\endenvironment\space that would match^^J%
+ a \string\begingroup, i.e., you forgot an \string\endgroup.}%
+\newhelp\@mismatchedenvironmenthelp{You started an environment X, but^^J%
+ you ended it with Y. Maybe you made a typo in one or the other^^J%
+ of the names.}%
+\newif\ifenvironment
+\def\checkenv{\ifenvironment \errhelp = \@interwovenenvhelp
+ \errmessage{Interwoven environments}%
+ \endgroup \fi
+}%
+\newhelp\@interwovenenvhelp{Perhaps you forgot to end the previous^^J%
+ environment? I'm finishing off the current group,^^J%
+ hoping that will fix it.}%
+\newif\ifeqno
+\newif\ifleqno
+\def\eq{\the\@eqtoks}%
+\def\eqn{\the\@eqnotoks}%
+\newtoks\@eqtoks
+\newtoks\@eqnotoks
+\long\def\displaysetup#1$${%
+ \@ddisplaytest#1\eqdef\eqdef\@ddisplaytest
+ \expandafter\@displaytest\the\toks0\eqno\eqno\@displaytest
+}%
+\def\@removetrailingspaces#1 #2 \endmark{#1}%
+\long\def\@ddisplaytest#1\eqdef#2\eqdef#3\@ddisplaytest{%
+ \if !\noexpand#3!%
+ \toks0 = {#1}%
+ \else
+ \toks2 = {#1}%
+ \begingroup
+ \def\temp{\@removetrailingspaces #2}%
+ \def\\{ }%
+ \xdef\temp{{\expandafter\temp\\ \endmark}}%
+ \endgroup
+ \toks4 = \expandafter\expandafter\expandafter{\expandafter\eqdef\temp}%
+ \edef\@setupeq{\toks0 = {\the\toks2 \the\toks4}}%
+ \@setupeq
+ \fi
+}%
+\long\def\@displaytest#1\eqno#2\eqno#3\@displaytest{%
+ \if !\noexpand#3!%
+ \@ldisplaytest#1\leqno\leqno\@ldisplaytest
+ \else
+ \eqnotrue
+ \leqnofalse
+ \@eqnotoks = {#2}%
+ \@eqtoks = {#1}%
+ \fi
+ \generaldisplay$$%
+}%
+\long\def\@ldisplaytest#1\leqno#2\leqno#3\@ldisplaytest{%
+ \@eqtoks = {#1}%
+ \if !\noexpand#3!%
+ \eqnofalse
+ \else
+ \eqnotrue
+ \leqnotrue
+ \@eqnotoks = {#2}%
+ \fi
+}%
+\newdimen\leftdisplayindent
+\newtoks\previouseverydisplay
+\newtoks\displayhook
+\def\leftdisplays{%
+ \previouseverydisplay = \everydisplay
+ \everydisplay = {\the\previouseverydisplay \the\displayhook \displaysetup}%
+ \def\generaldisplay{%
+ \leftline{%
+ \strut
+ \indent \hskip\leftskip \hskip\leftdisplayindent
+ \dimen0 = \parindent \advance\dimen0 by \leftskip
+ \advance\dimen0 by \leftdisplayindent
+ \advance\displaywidth by -\dimen0
+ \@redefinealignmentdisplays
+ \ifeqno\ifleqno
+ \kern-\dimen0\rlap{$\displaystyle\eqn$}\kern\dimen0
+ \fi\fi
+ $\displaystyle\eq$%
+ \ifeqno\ifleqno\else
+ \hfill $\displaystyle\eqn$%
+ \fi\fi
+ }%
+ }%
+}%
+\def\@redefinealignmentdisplays{%
+ \def\displaylines##1{\displ@y
+ \vcenter{%
+ \let\oldeqprint = \eqprint
+ \def\eqprint{\hfill\oldeqprint}%
+ \halign{\hbox to\displaywidth{$\@lign\displaystyle####\hfil$}\crcr
+ ##1\crcr}}}%
+ \def\eqalignno##1{\displ@y
+ \vcenter{%
+ \halign to\displaywidth{%
+ $\@lign\displaystyle{####}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
+ &\llap{$\@lign####$}\tabskip\z@skip\crcr
+ ##1\crcr}}}%
+ \def\leqalignno##1{\displ@y
+ \vcenter{%
+ \halign to\displaywidth{%
+ $\@lign\displaystyle{####}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
+ &\kern-\displaywidth
+ \rlap{\kern-\parindent\kern-\leftskip$\@lign####$}%
+ \tabskip\displaywidth\crcr
+ ##1\crcr}}}%
+}%
+\def\centereddisplays{\let\displaysetup = \relax}%
+\def\monthname{%
+ \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
+}%
+\def\fullmonthname{%
+ \ifcase\month
+ \or January\or February\or March\or April\or May\or June%
+ \or July\or August\or September\or October\or November\or December%
+ \fi
+}%
+\def\timestring{\begingroup
+ \count0 = \time
+ \divide\count0 by 60
+ \count2 = \count0 % The hour, from zero to 23.
+ \count4 = \time
+ \multiply\count0 by 60
+ \advance\count4 by -\count0 % The minute, from zero to 59.
+ \ifnum\count4<10
+ \toks1 = {0}%
+ \else
+ \toks1 = {}%
+ \fi
+ \ifnum\count2<12
+ \toks0 = {a.m.}%
+ \else
+ \toks0 = {p.m.}%
+ \advance\count2 by -12
+ \fi
+ \ifnum\count2=0
+ \count2 = 12
+ \fi
+ \number\count2:\the\toks1 \number\count4 \thinspace \the\toks0
+\endgroup}%
+\def\timestamp{\number\day\space\monthname\space\number\year\quad\timestring}%
+\newskip\abovelistskip \abovelistskip = .5\baselineskip
+\newskip\interitemskip \interitemskip = 0pt
+\newskip\belowlistskip \belowlistskip = .5\baselineskip
+\newdimen\listleftindent \listleftindent = 0pt
+\newdimen\listrightindent \listrightindent = 0pt
+\def\listcompact{\interitemskip = 0pt \relax}%
+\newdimen\@listindent
+\def\beginlist{%
+ \@listindent = \parindent
+ \advance\@listindent by \listleftindent
+ \everydisplay = \expandafter{\the\everydisplay
+ \advance\displayindent by \@listindent
+ \advance\displaywidth by -\@listindent
+ \advance\displaywidth by -\listrightindent}%
+ \nobreak\vskip\abovelistskip
+ \advance\leftskip by \@listindent
+ \advance\rightskip by \listrightindent
+}%
+\def\printitem{%
+ \par
+ \vskip-\parskip
+ \noindent
+ \llap{\marker \enspace}%
+}%
+\def\endlist{\vskip\belowlistskip}%
+\newcount\numberedlistdepth
+\newcount\itemnumber
+\newcount\itemletter
+\def\numberedmarker{%
+ \ifcase\numberedlistdepth
+ (impossible)%
+ \or \itemnumberout)%
+ \or \itemletterout)%
+ \else *%
+ \fi
+}%
+\def\numberedlist{\environment{@numbered-list}%
+ \advance\numberedlistdepth by 1
+ \itemnumber = 1
+ \itemletter = `a
+ \beginlist
+ \let\marker = \numberedmarker
+ \def\li{%
+ \ifnum\itemnumber=1\else
+ \vskip\interitemskip
+ \fi
+ \printitem
+ \advance\itemnumber by 1
+ \advance\itemletter by 1
+ }%
+}%
+\def\itemnumberout{\number\itemnumber}%
+\def\itemletterout{\char\itemletter}%
+\def\endnumberedlist{%
+ \par
+ \endenvironment{@numbered-list}%
+ \endlist
+}%
+\newcount\unorderedlistdepth
+\def\unorderedmarker{%
+ \ifcase\unorderedlistdepth
+ (impossible)%
+ \or \blackbox
+ \or ---%
+ \else *%
+ \fi
+}%
+\def\unorderedlist{\environment{@unordered-list}%
+ \advance\unorderedlistdepth by 1
+ \beginlist
+ \itemnumber = 1
+ \let\marker = \unorderedmarker
+ \def\li{%
+ \ifnum\itemnumber=1\else
+ \vskip\interitemskip
+ \fi
+ \printitem
+ \advance\itemnumber by 1
+ }%
+}%
+\def\endunorderedlist{%
+ \par
+ \endenvironment{@unordered-list}%
+ \endlist
+}%
+\def\listing#1{%
+ \par \begingroup
+ \@setuplisting
+ \setuplistinghook
+ \input #1
+ \endgroup
+}%
+\let\setuplistinghook = \empty
+\def\@setuplisting{%
+ \uncatcodespecials
+ \obeywhitespace
+ \makeactive\`
+ \makeactive\^^I
+ \def^^L{\vfill\eject}%
+ \tt
+}%
+{%
+ \makeactive\`
+ \gdef`{\relax\lq}% Defeat ligatures.
+}%
+{%
+ \makeactive\^^I
+ \tt
+ \gdef^^I{\hskip8\fontdimen2\font \relax}%
+}%
+\newif\if@tocfileopened
+\newwrite\tocfile
+\def\opentocfile{%
+ \if@tocfileopened\else
+ \global\@tocfileopenedtrue
+ \immediate\openout\tocfile = \jobname.toc
+ \fi
+}%
+\def\writetocentry#1#2{\writenumberedtocentry{#1}{#2}\empty}%
+\def\writenumberedtocentry#1#2#3{%
+ \ifrewritetocfile
+ \opentocfile
+ \toks0 = {\expandafter\noexpand \csname toc#1entry\endcsname}%
+ \def\temp{#2}%
+ \def\cs{#3}%
+ \edef\@wr{%
+ \write\tocfile{%
+ \the\toks0
+ {\sanitize\temp}%
+ \ifx \empty\cs\else{#3}\fi
+ {\noexpand\folio}%
+ }%
+ }%
+ \@wr
+ \fi
+ \ignorespaces
+}%
+\newif\ifrewritetocfile \rewritetocfiletrue
+\def\readtocfile{%
+ \testfileexistence{toc}%
+ \if@fileexists
+ \input \jobname.toc
+ \ifrewritetocfile
+ \opentocfile
+ \fi
+ \fi
+}%
+\def\tocchapterentry#1#2{\line{\bf #1 \dotfill\ #2}}%
+\def\tocsectionentry#1#2{\line{\quad\sl #1 \dotfill\ \rm #2}}%
+\def\tocsubsectionentry#1#2{\line{\qquad\rm #1 \dotfill\ #2}}%
+\def\xrdef#1{%
+ \@readauxfile
+ \begingroup
+ \xrlabel{#1}%
+ \edef\@wr{\@writexrdef{\the\xrlabeltoks}}%
+ \@wr
+ \endgroup
+ \ignorespaces
+}%
+\def\@writexrdef#1{%
+ \@writeaux{%
+ \string\gdef\expandafter\string\csname#1\endcsname {\noexpand\folio}%
+ }%
+}%
+\newtoks\xrlabeltoks
+\def\xrlabel#1{%
+ \begingroup
+ \escapechar = `\_
+ \edef\tts{\tokstostring{#1_}}%
+ \global\xrlabeltoks = \expandafter{\tts}%
+ \endgroup
+}%
+\let\ifxrefwarning = \iftrue
+\def\xrefwarningtrue{\@citewarningtrue \let\ifxrefwarning = \iftrue}%
+\def\xrefwarningfalse{\@citewarningfalse let\ifxrefwarning = \iffalse}%
+\def\xrefn#1{%
+ \@readauxfile
+ \xrlabel{#1}% \xrlabeltoks now has the control sequence name.
+ \toks0 = \expandafter{\csname\the\xrlabeltoks\endcsname}%
+ \expandafter \ifx\the\toks0\relax
+ \if@citewarning
+ \message{\linenumber Undefined label `\tokstostring{#1}'.}%
+ \fi
+ \begingroup
+ \let\spacesub = \space
+ \expandafter\xdef\the\toks0{`{\tt \tokstostring{#1}}'}%
+ \endgroup
+ \fi
+ \the\toks0 % Always produce something.
+}%
+\def\xref#1{p.\thinspace\xrefn{#1}}%
+\newcount\eqnumber
+\def\eqdefn#1{%
+ \@readauxfile
+ \global\advance\eqnumber by 1
+ \begingroup
+ \xrlabel{#1}% \xrlabeltoks now has the control sequence name.
+ \edef\@wr{\@writeeqdef{\the\xrlabeltoks}{\the\eqnumber}}%
+ \@wr
+ \endgroup
+ \expandafter\xdef\csname\the\xrlabeltoks\endcsname{\the\eqnumber}%
+ \ignorespaces
+}%
+\def\@writeeqdef#1#2{%
+ \immediatewriteaux{%
+ \string\gdef\expandafter\string\csname#1\endcsname{#2}%
+ }%
+}%
+\def\eqdef#1{%
+ \@maybedisableeqno
+ \eqno \eqdefn{#1}\eqprint{\the\eqnumber}%
+ \@mayberestoreeqno
+ \ignorespaces
+}%
+\let\@mayberestoreeqno = \empty
+\def\@maybedisableeqno{%
+ \ifinner
+ \global\let\eqno = \relax
+ \global\let\@mayberestoreeqno = \@restoreeqno
+ \fi
+}%
+\let\@primitiveeqno = \eqno
+\def\@restoreeqno{%
+ \global\let\eqno = \@primitiveeqno
+ \global\let\@mayberestoreeqno = \empty
+}%
+\def\eqref#1{%
+ \@readauxfile
+ \xrlabel{#1}% \xrlabeltoks now has the control sequence name.
+ \toks0 = \expandafter{\csname\the\xrlabeltoks\endcsname}%
+ \expandafter \ifx\the\toks0\relax
+ \if@citewarning
+ \message{\linenumber Undefined equation label `\tokstostring{#1}'.}%
+ \fi
+ \begingroup
+ \let\spacesub = \space
+ \expandafter\xdef\the\toks0{`{\tt \tokstostring{#1}}'}%
+ \endgroup
+ \fi
+ \eqprint{\the\toks0}%
+}%
+\def\eqprint#1{(#1)}%
+\begingroup
+ \catcode `\^^M = \active %
+ \globaldefs = 1 %
+ \def\flushleft{\beforejustify %
+ \aftergroup\@endflushleft %
+ \def^^M{\null\hfil\break}%
+ \def\@eateol^^M{}%
+ \@eateol %
+ }%
+ \def\flushright{\beforejustify %
+ \aftergroup\@endflushright %
+ \def^^M{\break\null\hfil}%
+ \def\@eateol^^M{\hfil\null}%
+ \@eateol %
+ }%
+ \def\center {\beforejustify %
+ \aftergroup\@endcenter %
+ \def^^M{\hfil\break\null\hfil}%
+ \def\@eateol^^M{\hfil\null}%
+ \@eateol %
+ }%
+\endgroup
+\def\@endflushleft{\unpenalty{\parfillskip = 0pt plus 1 fil\par}\ignorespaces}%
+\def\@endflushright{% Remove the \hfil\null\break we just put on.
+ \unskip \setbox0=\lastbox \unpenalty
+ {\parfillskip = 0pt \par}\ignorespaces
+}%
+\def\@endcenter{% Remove the \hfil\null\break we just put on.
+ \unskip \setbox0=\lastbox \unpenalty
+ {\parfillskip = 0pt plus 1fil \par}\ignorespaces
+}%
+\def\beforejustify{%
+ \par\noindent
+ \catcode`\^^M = \active
+ \checkenv \environmenttrue
+}%
+\newcount\abovecolumnspenalty \abovecolumnspenalty = 10000
+\newcount\@linestogo % Lines remaining to process.
+\newcount\@linestogoincolumn % Lines remaining in column.
+\newcount\@columndepth % Number of lines in a column.
+\newdimen\@columnwidth % Width of each column.
+\newtoks\crtok \crtok = {\cr}%
+\newcount\currentcolumn
+\def\makecolumns#1/#2: {\par \begingroup
+ \@columndepth = #1
+ \advance\@columndepth by #2
+ \advance\@columndepth by -1
+ \divide \@columndepth by #2
+ \@linestogoincolumn = \@columndepth
+ \@linestogo = #1
+ \currentcolumn = 1
+ \def\@endcolumnactions{%
+ \ifnum \@linestogo<2
+ \the\crtok \egroup \endgroup \par % End \valign and \makecolumns.
+ \else
+ \global\advance\@linestogo by -1
+ \ifnum\@linestogoincolumn<2
+ \global\advance\currentcolumn by 1
+ \global\@linestogoincolumn = \@columndepth
+ \the\crtok
+ \else
+ &\global\advance\@linestogoincolumn by -1
+ \fi
+ \fi
+ }%
+ \makeactive\^^M
+ \letreturn \@endcolumnactions
+ \@columnwidth = \hsize
+ \advance\@columnwidth by -\parindent
+ \divide\@columnwidth by #2
+ \penalty\abovecolumnspenalty
+ \noindent % It's not a paragraph (usually).
+ \valign\bgroup
+ &\hbox to \@columnwidth{\strut \hsize = \@columnwidth ##\hfil}\cr
+}%
+\newcount\footnotenumber
+\newdimen\footnotemarkseparation \footnotemarkseparation = .5em
+\newskip\interfootnoteskip \interfootnoteskip = 0pt
+\newtoks\everyfootnote
+\newdimen\footnoterulewidth \footnoterulewidth = 2true in
+\newdimen\footnoteruleheight \footnoteruleheight = 0.4pt
+\newdimen\belowfootnoterulespace \belowfootnoterulespace = 2.6pt
+\let\@plainfootnote = \footnote
+\let\@plainvfootnote = \vfootnote
+\def\vfootnote#1{\insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \advance\splittopskip by \interfootnoteskip
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
+ \everypar = {}%
+ \the\everyfootnote
+ \vskip\interfootnoteskip
+ \indent\llap{#1\kern\footnotemarkseparation}\footstrut\futurelet\next\fo@t
+}%
+\def\footnoterule{\dimen0 = \footnoteruleheight
+ \advance\dimen0 by \belowfootnoterulespace
+ \kern-\dimen0
+ \hrule width\footnoterulewidth height\footnoteruleheight depth0pt
+ \kern\belowfootnoterulespace
+ \vskip-\interfootnoteskip
+}%
+\def\numberedfootnote{%
+ \global\advance\footnotenumber by 1
+ \@plainfootnote{$^{\number\footnotenumber}$}%
+}%
+\newdimen\paperheight \paperheight = 11in
+\def\topmargin{\afterassignment\@finishtopmargin \dimen0}%
+\def\@finishtopmargin{%
+ \dimen2 = \voffset % Remember the old \voffset.
+ \voffset = \dimen0 \advance\voffset by -1in
+ \advance\dimen2 by -\voffset % Compute the change in \voffset.
+ \advance\vsize by \dimen2 % Change type area accordingly.
+}%
+\def\advancetopmargin{%
+ \dimen0 = 0pt \afterassignment\@finishadvancetopmargin \advance\dimen0
+}%
+\def\@finishadvancetopmargin{%
+ \advance\voffset by \dimen0
+ \advance\vsize by -\dimen0
+}%
+\def\bottommargin{\afterassignment\@finishbottommargin \dimen0}%
+\def\@finishbottommargin{%
+ \@computebottommargin % Result in \dimen2.
+ \advance\dimen2 by -\dimen0 % Compute the change in the bottom margin.
+ \advance\vsize by \dimen2 % Change the type area.
+}%
+\def\advancebottommargin{%
+ \dimen0 = 0pt \afterassignment\@finishadvancebottommargin \advance\dimen0
+}%
+\def\@finishadvancebottommargin{%
+ \advance\vsize by -\dimen0
+}%
+\def\@computebottommargin{%
+ \dimen2 = \paperheight % The total paper size.
+ \advance\dimen2 by -\vsize % Less the text size.
+ \advance\dimen2 by -\voffset % Less the offset at the top.
+ \advance\dimen2 by -1in % Less the default offset.
+}%
+\newdimen\paperwidth \paperwidth = 8.5in
+\def\leftmargin{\afterassignment\@finishleftmargin \dimen0}%
+\def\@finishleftmargin{%
+ \dimen2 = \hoffset % Remember the old \hoffset.
+ \hoffset = \dimen0 \advance\hoffset by -1in
+ \advance\dimen2 by -\hoffset % Compute the change in \hoffset.
+ \advance\hsize by \dimen2 % Change type area accordingly.
+}%
+\def\advanceleftmargin{%
+ \dimen0 = 0pt \afterassignment\@finishadvanceleftmargin \advance\dimen0
+}%
+\def\@finishadvanceleftmargin{%
+ \advance\hoffset by \dimen0
+ \advance\hsize by -\dimen0
+}%
+\def\rightmargin{\afterassignment\@finishrightmargin \dimen0}%
+\def\@finishrightmargin{%
+ \@computerightmargin % Result in \dimen2.
+ \advance\dimen2 by -\dimen0 % Compute the change in the right margin.
+ \advance\hsize by \dimen2 % Change the type area.
+}%
+\def\advancerightmargin{%
+ \dimen0 = 0pt \afterassignment\@finishadvancerightmargin \advance\dimen0
+}%
+\def\@finishadvancerightmargin{%
+ \advance\hsize by -\dimen0
+}%
+\def\@computerightmargin{%
+ \dimen2 = \paperwidth % The total paper size.
+ \advance\dimen2 by -\hsize % Less the text size.
+ \advance\dimen2 by -\hoffset % Less the offset at the left.
+ \advance\dimen2 by -1in % Less the default offset.
+}%
+\newskip\abovedoublecolumnskip \abovedoublecolumnskip = \bigskipamount
+\newskip\belowdoublecolumnskip \belowdoublecolumnskip = \bigskipamount
+\newdimen\gutter \gutter = 2pc
+\newdimen\doublecolumnhsize
+\newbox\@partialpage \newdimen\singlecolumnhsize \newdimen\singlecolumnvsize
+\newtoks\previousoutput
+\def\doublecolumns{%
+ \doublecolumnhsize = \hsize % If \hsize changed, get the new value.
+ \par % Shouldn't start in horizontal mode.
+ \previousoutput = \expandafter{\the\output}%
+ \advance\doublecolumnhsize by -\gutter
+ \divide\doublecolumnhsize by 2
+ \output = {%
+ \global\setbox\@partialpage =
+ \vbox{\unvbox255\vskip\abovedoublecolumnskip}%
+ }%
+ \pagegoal = \pagetotal
+ \break % Now expand the \output just above.
+ \output = {\doublecolumnoutput}%
+ \singlecolumnhsize = \hsize
+ \singlecolumnvsize = \vsize
+ \hsize = \doublecolumnhsize
+ \vsize = 2\vsize
+}%
+\def\@doublecolumnsplit{%
+ \splittopskip = \topskip
+ \splitmaxdepth = \maxdepth
+ \dimen0 = \singlecolumnvsize
+ \advance\dimen0 by -\ht\@partialpage
+ \advance\dimen0 by -\ht\footins
+ \ifvoid\footins\else \advance\dimen0 by -\skip\footins \fi
+ \advance\dimen0 by -\ht\topins
+ \ifvoid\topins\else \advance\dimen0 by -\skip\topins \fi
+ \begingroup
+ \vbadness = 10000
+ \global\setbox1 = \vsplit255 to \dimen0
+ \wd1 = \hsize
+ \global\setbox3 = \vsplit255 to \dimen0
+ \wd3 = \hsize
+ \endgroup
+ \global\setbox4 = \vbox{\unvbox255 \penalty\outputpenalty}%
+ \global\setbox255
+ = \vbox{%
+ \unvbox\@partialpage
+ \hbox to \singlecolumnhsize{\box1\hfil\box3}%
+ }%
+}%
+\def\doublecolumnoutput{%
+ \@doublecolumnsplit
+ \hsize = \singlecolumnhsize % Local to the \output group.
+ \vsize = \singlecolumnvsize
+ \the\previousoutput
+ \unvbox4
+}%
+\def\singlecolumn{%
+ \par % Shouldn't start in horizontal mode.
+ \output = {\global\setbox1 = \box255}%
+ \pagegoal = \pagetotal
+ \break % Exercise the page builder, i.e., \output.
+ \setbox255 = \box1 % Retrieve what the fake \output set.
+ \begingroup
+ \singlecolumnvsize = \ht\@partialpage
+ \advance\singlecolumnvsize by \ht\footins
+ \ifvoid\footins\else \advance\singlecolumnvsize by \skip\footins\fi
+ \advance\singlecolumnvsize by \ht\topins
+ \ifvoid\topins\else \advance\singlecolumnvsize by \skip\topins\fi
+ \dimen0 = \ht255 \divide\dimen0 by 2
+ \advance\singlecolumnvsize by \dimen0
+ \advance\singlecolumnvsize by .5\baselineskip
+ \@doublecolumnsplit
+ \endgroup
+ \hsize = \singlecolumnhsize
+ \vsize = \singlecolumnvsize
+ \output = \expandafter{\the\previousoutput}%
+ \unvbox255
+ \vskip\belowdoublecolumnskip
+ \nointerlineskip
+}%
+\let\wlog = \@plainwlog
+\catcode`@ = \other
+\def\fmtname{eplain}%
+\def\eplain{t}%
+{\edef\plainversion{\fmtversion}%
+ \xdef\fmtversion{1.9: 26 April 1991 (and plain \plainversion)}%
+}%
diff --git a/Master/texmf-dist/doc/plain/impatient/errata.future b/Master/texmf-dist/doc/plain/impatient/errata.future
new file mode 100644
index 00000000000..8b364ffc315
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/errata.future
@@ -0,0 +1,256 @@
+$Id: errata.future,v 1.2 2003/09/16 21:17:27 karl Exp $
+
+Ideas for future changes. Did not make these in the free edition since
+I didn't want to change the page breaks because I didn't want to install
+Icon so I could regenerate the index -- aside from lack of time and
+inclination. :)
+
+
+from Will Adams:
+
+ - p. 105 (and throughout) the encoding for Zapf Dingbats doesn't
+agree w/ what was used and instead of a right pointing hand dingbat, a
+Star of David appears on the .pdf
+
+ - p. 113 - text overlaps / crashes here, I think 'cause some stuff
+escaped out of Verbatim mode.
+
+ - colophon - this appears on a verso, not a recto, which I find a bit odd.
+
+One last bit of consideration is how you want to handle the cover /
+frontmatter.
+
+
+from Karl and Kathy:
+
+* The default values should probably be in roman everywhere. I don't
+think `6pt plus 1pt minus 2pt' looks bad in roman any more, which was
+the original impetus for printing them in typewriter, as I recall.
+It is pretty random right now. (Numbers are usually printed in roman,
+for example.)
+
+* The index might look better printed without the commas after the term.
+Also, there should be some way to indicate usages of control sequences,
+as opposed to explanations. We could do what Knuth did, and print the
+entries in another font (typewriter would be appropriate, perhaps). We
+could also just have a subentry `examples' or `using' or something.
+
+* `\langle f' and `l\rangle' are too close. I don't know if the macros
+can be hacked to add more space for just those characters.
+
+* The way (short) lists are punctuated is inconsistent. In (at least)
+four places (pp.3,18,56,265) the items are capitalized and end with
+period. In most others (2,72,74,81,83,234) they are not capitalized and
+have no ending punctuation. And in two (76,238) they are not capitalized
+and end with a period. I realize that the same form is not always
+appropriate, but this is not true very often. Personally, I prefer a
+form like:
+
+\list
+\item item 1,
+\item item 2,
+\item last item.
+\endlist
+
+but whatever.
+
+* In most places where we say `.dvi' we aren't really talking about the
+file extension. `{\sc DVI}' would be more appropriate.
+
+* The Preface, Brief Contents, and Contents chapter opening pages start
+too high and too far to the left. This is probably a consequence of
+\chapter changing and \shortchapter not.
+
+
+(The rest of the changes are by page number.)
+
+1 Section 13 is also designed to be accessed randomly. Also, wouldn't it
+be better to use section names as well as numbers?
+
+7 (first para) local information tells you => local information will
+tell you, since they couldn't have found it yet.
+
+9 (first para) by typing something => by first typing something, since
+they have to do more to input screed.
+(bottom) unclosed left parenthesis => unmatched left parenthesis.
+
+10 The third in the subsection (with ``typeset me'') looks like it has
+extra space in it.
+
+12 (bottom) supposed to produce => supposed to do, because the macro
+might not be supposed to produce anything at all.
+
+16 Say that TeX does its own spacing in formulas. This is probably the
+most crucial fact about doing math in TeX. Index `spacing, in formulas'
+and `formulas, spacing in'.
+(math formulas) can appear in text ... or set off => can appear in
+text ... or can appear set off, for structure.
+enclose a text formula in => enclose a text formula within
+
+17 (last para) The kind of entity TeX is assembling determines the mode
+it's in, it doesn't define it. I tend to think of it in the other
+direction: the mode TeX is in determines the entity TeX is assembling.
+
+21 (last para) It would be clearer to actually define \xmpheader in the
+first example and then use it. As it is, it's not entirely clear which
+commands in the first example go into it.
+(bottom) is defined in plain TeX => is either a primitive or defined
+in plain TeX.
+
+22 You use the en-dash in the place where an em-dash should be in the
+last sentence.
+
+23 (three instances near the top) The comments should have periods at
+the end and be capitalized properly. We are remarkably inconsistent on
+this throughout. In some cases, the comments aren't complete sentences,
+so periods are unnecessary. But sometimes, as here, they are complete
+sentences, so we should have periods. And sometimes they're sentences
+and not capitalized.
+
+24 If we didn't put space between these paragraphs, you would have a
+hard time => If we hadn't ..., you would have had ..., to remove the
+time warp.
+
+25 % The left brace start => % The { starts, to shorten the line.
+(middle) % Skips like this => % Skips like that, because one of the
+skips was just given.
+
+26 fonts won't give you => fonts don't give you
+page 100 and page 97 => pages 97 and 100
+
+32 (bottom) try to use these commands => try to use those commands,
+since the commands are above the comment.
+Also, they can get lists with more levels than one by using the Eplain
+list stuff, instead of programming it themselves, alas.
+
+34 The title might be better as `Using non-Computer Modern fonts' or
+something, since we haven't said what the first source is.
+
+37 (towards the top) => Use \vtop for short multiline entries => Use
+\vtop to get whole paragraphs, since ``multiline entries'' is a pretty
+stupid term (that I wrote).
+(towards the bottom) % without the kern, the `f' and `l' would be too
+close => % Without the kern, the `f' and `l' would be a ligature.
+
+44 (after example input) Put the page reference (p.176) after the
+`\settabs 2 \columns'.
+
+45 (towards the bottom) treats each entry as a group => puts each entry
+into a group, because alignment entries are certainly other things
+besides groups.
+
+46 (top) The \tabskip (p.184) => The \tabskip parameter (p.184), and
+(top) The \noalign (p.183) commands => The \noalign commands (p.183),
+because it reads better; also, we say `the \strut commands (p.167)'
+below.
+(third para) Two consecutive sentences start with ``A vertical
+alignment''. The second one could probably be ``It''.
+
+51 I guess the box picture never got fixed. (The `reference point' moved
+up quite a bit, and the arrow moved up a little. Also, the `baseline'
+could be moved down.)
+
+52 (first two paragraphs): the height/depth of hboxes takes \raise and
+\lower into account, and the width of vboxes takes \moveleft and
+\moveright into account.
+(the list) the box (or rule) => the box or rule, because the rule
+case isn't subordinate or anything. This is in both items.
+
+53 In `cgrok', the `c' is too close to the `grok'. I realize it
+shouldn't be a full space, but right now they're practically touching.
+Italic correction? Explicit space?
+
+54 (first line) It would be nice to say the names of categories 11--13.
+(third para from top) Chars in categories 11 and 12 don't mean
+``produce a box containing this character typeset in the current font''.
+They don't produce a box, for one thing. And they don't typeset ``this
+character'', either. They typeset whatever is in the font at their
+character code. I don't know how you want to explain this, but I think
+this is seriously wrong.
+(example) control sequence `foo$' => control sequence `\foo$'
+
+55 (second para) Same problem with characters vs. character code. The
+input letter `h' is not transformed into the letter `h' typeset in the
+current font. It's transformed into the character at position 104.
+The locution now makes it sound as if TeX somehow searches the font for
+the letter `h'.
+(next para) We should say that the input character's ``code number'' is
+the ``character code''. As it is, we never define the latter (I don't
+think).
+(two more paras) An example showing the 64 less/greater stuff would be
+nice.
+
+56 (under class) is in class 3 => has class 3, because the class is
+really an attribute of a character, not an external set of characters.
+(before class example) Wouldn't ``arbitrarily changed'' be better
+than ``randomly changed''? (Unless you really used a random number
+generator.)
+(first para of command concept): same problem with characters. TeX
+doesn't construct a box containing that character typeset in the current
+font.
+
+57 (under control sequence) with an escape character, usually a
+backslash (\) => with an escape character, which is usually the
+backslash character, since \ isn't always an escape character.
+
+58 (control word) It seems a bit inconsistent to footnote ``letter''
+here, and not in either of the previous two concepts.
+(delimiter) In `... to one of the commands \left, \right, \overwithdelims,
+... (see pp. 201,204)', either the 201 and 204 or the command names
+should be switched, since it's \left and \right that are on 204.
+(next para) fonts you're using have big enough parens => fonts you're
+using can construct big enough parens, because of extensible characters.
+Also, it isn't clear that the delimiters produced by \bigl et al. have
+fixed size.
+
+59 (before the list) The terms l-commands and r-commands need some
+explanation.
+
+60 (first line) `the ``small'' character in the ``small'' font' is
+misleading. We've already said the small char is in the small font. As
+it is, when, a couple sentences below, we say that small character can
+be left undefined, it sounds like the small font can't be left
+undefined.
+(demerits) `cost' should be a concept.
+
+62 (second para) Put a tie between `family' and `1'.
+
+65 (under format file) can be created => is created, because there's no
+other way to make one.
+(last line) two refs to page 228.
+
+66 (example) the shrinks are 1 and 3, whereas the shrinks on the next
+page are 2 and 6. Might as well make them all the same.
+
+69 {\TeX} => \TeX{} (if we must keep this horrible example).
+
+71 The item concept is pretty useless as it is; it would be nice to say
+what the possible items were, and clearly distinguish items from tokens,
+etc.
+
+72 (towards the bottom) insured that the dots => made the dots, because
+we've done something active than ``insure''.
+
+73 (ligature) the '' and , in office'', aren't kerned. You put
+``office'' in an \hbox for some reason.
+
+80 (math mode) Should say that display math gives you space above and
+below the formula.
+
+84 (page) between exercises => between exercisings?
+
+86 (page layout) We don't give the default space between the body of the
+text and the headers or footers.
+
+217 \mathsurround should make an index entry for `formulas, spacing
+around' or something like that.
+
+224 I think `Converting information to tokens' is really a misnomer.
+How about just calling it `Conversions' and making `Environmental
+information' its own section.
+
+263 `Ending the job' should be next to `Initializing TeX'.
+
+294 Have an index entry for `logos'.
+
+298 \unnumberedlist has become \unorderedlist.
diff --git a/Master/texmf-dist/doc/plain/impatient/errors.tex b/Master/texmf-dist/doc/plain/impatient/errors.tex
new file mode 100644
index 00000000000..f2e59773363
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/errors.tex
@@ -0,0 +1,325 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter{Making sense \linebreak of error messages}
+
+\chapterdef{errors}
+
+\codefuzz = 4pc % for this chapter only (in scope of \chapter)
+\bix^^{error messages}
+Interpreting \TeX's error messages can sometimes
+be like going to your physician
+with a complaint that you're feeling fatigued and being handed,
+in response,
+a breakdown of your blood chemistry. The explanation of your distress
+is probably there, but it's not easy to figure out what it is.
+A few simple rules will go a long way in helping you to understand \TeX's
+error messages and get the most benefit from them.
+
+Your first goal should be
+to understand what you did that caused \TeX\ to complain.
+Your second goal (if you're working interactively)
+should be to catch as many errors as you can in a single run.
+
+Let's look at an example. Suppose that your input
+contains the line:
+\csdisplay
+We skip \quid a little bit.
+|
+You meant to type `|\quad|', but you typed `|\quid|' instead.
+Here's what you'll get from \TeX\ in response:
+\csdisplay
+!! Undefined control sequence.
+l.291 We skip \quid
+ a little bit.
+?
+|
+This message will appear both at your terminal and in your log file.
+^^{log file//error messages}
+The first line, which always starts with an exclamation point (|!!|),
+tells you what the problem is. The last two lines before the `|?|' prompt
+(which in this case are also
+the next two lines) tell you how far \TeX\ has gotten
+when it found the error.
+It found the error on line $291$ of the current input file,
+and the break between the two message lines indicates
+\TeX's precise position within line $291$, namely, just after |\quid|.
+The current input file is the one just after the most recent unclosed
+left parenthesis in the terminal output of your run (see \xref{infiles}).
+
+This particular error, an undefined control
+sequence, is one of the most common ones you can get.
+If you respond to the prompt with another~`|?|',
+\TeX\ will display the following message:
+{\hfuzz = 2in
+\csdisplay
+Type <return> to proceed, S to scroll future error messages,
+R to run without stopping, Q to run quietly,
+I to insert something, E to edit your file,
+1 or ... or 9 to ignore the next 1 to 9 tokens of input,
+H for help, X to quit.
+|
+}%
+Here's what these alternatives mean:
+\ulist
+\li If you type \asciichar{return},
+\TeX\ will continue processing your document.
+In this case it will just ignore the |\quid|.
+\li If you type `|S|' (or `|s|'---uppercase and lowercase are equivalent
+here), \TeX\ will process your document without stopping \emph{except}
+if it encounters a missing file. Error messages will still appear at your
+terminal and in the log file.
+\li If you type `|R|' or `|r|',
+you'll get the same effect as `|S|' except that
+\TeX\ won't even stop for missing files.
+\li If you type `|Q|' or `|q|',
+\TeX\ will continue processing your document but
+will neither stop for errors nor display them at your terminal. The
+errors will still show up in the log file.
+\li If you type `|X|' or `|x|',
+\TeX\ will clean up as best it can, discard the page
+it's working on, and quit. You can still print or view the
+pages that \TeX\ has already processed.
+\li If you type `|E|' or `|e|', \TeX\ will clean up and terminate
+as it would for `|X|' or `|x|' and then enter your text editor,
+positioning you at the erroneous line.
+(Not all systems support this option.)
+\li If you type `|H|' or `|h|',
+you'll get a further explanation of the error displayed
+at your terminal and
+possibly some advice about what to do about it. This explanation will also
+appear in your log file. For the undefined control sequence above,
+you'll get:
+{\hfuzz = 2in
+\csdisplay
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+|
+}
+\li If you type `|?|', you'll get this same message again.
+\endulist
+\noindent
+The other two alternatives, typing `|I|' or a small integer, provide ways of
+getting \TeX\ back on the track so that your error won't cause further errors
+later in your document:
+\ulist
+\li If you type `|I|' or `|i|'
+followed by some text, then \TeX\ will insert
+that text as though it had occurred just after the point of the error,
+at the innermost level where \TeX\ is working.
+In the case of the example above, that means at \TeX's
+position in your original input, namely, just after `|\quid|'.
+Later you'll see an example that shows
+the difference between inserting something at the innermost level and
+inserting it into your original input. In the example above of the undefined
+control sequence, if you type:
+\csdisplay
+I\quad
+|
+\TeX\ will carry out the |\quad| command and produce a quad space
+where you intended to have one.
+\li If you type a positive integer less than $100$ (not less than $10$ as the
+message misleadingly suggests),
+\TeX\ will delete that number of tokens from the innermost
+level where it is working.
+(If you type an integer greater than or equal to $100$, \TeX\ will
+delete $10$ tokens!)
+\endulist
+
+Here's an example of another common error:
+\csdisplay
+Skip across \hskip 3cn by 3 centimeters.
+|
+The error message for this is:
+\csdisplay
+!! Illegal unit of measure (pt inserted).
+<to be read again>
+ c
+<to be read again>
+ n
+l.340 Skip across \hskip 3cn
+ by 3 centimeters.
+|
+^^|<to be read again>|
+In this case \TeX\ has observed that `|3|' is followed by something that
+isn't a proper unit of measure, and so it's assumed the unit of measure to be
+points. \TeX\ will read the tokens of `|cn|' again and insert them into
+your input, which is not what you want. In this case you can get a better
+result by first typing `|2|' to bypass the `|cn|'.
+You'll get the message:
+\csdisplay
+<recently read> n
+
+l.340 Skip across \hskip 3cn
+ by 3 centimeters.
+|
+
+Now you can type
+`|I\hskip 3cm|' to get the skip you wanted (in addition to the |3pt| skip
+that you've already gotten).\footnote
+{By typing `|I\unskip\hskip 3cm|' you can get rid of the |3pt| skip.}
+
+If you type something that's only valid in math mode, \TeX\ will switch over
+to math mode for you whether or not that's what you really wanted.
+For example:
+\csdisplay
+So \spadesuit s are trumps.
+|
+Here's \TeX's error message:
+\csdisplay
+!! Missing $ inserted.
+<inserted text>
+ $
+<to be read again>
+ \spadesuit
+l.330 So \spadesuit
+ s are trumps.
+|
+Since the |\spadesuit| symbol is only allowed in math mode,
+\TeX\ has inserted a `|$|' in front of it.
+After \TeX\ inserts a token, it's positioned in \emph{front} of
+that token, in this case the `|$|', ready to read it.
+Typing `|2|' will cause \TeX\ to skip both the `|$|'
+and the `|\spadesuit|' tokens, leaving it ready to process the `|s|'
+in `|s are trumps.|'.
+(If you just let \TeX\ continue, it will typeset `|s are trumps|'
+in math mode.)
+
+Here's an example where \TeX's error diagnostic is downright wrong:
+\csdisplay
+\hbox{One \vskip 1in two.}
+|
+The error message is:
+\csdisplay
+!! Missing } inserted.
+<inserted text>
+ }
+<to be read again>
+ \vskip
+l.29 \hbox{One \vskip
+ 1in two.}
+|
+^^|<inserted text>|
+The problem is that you can't use |\vskip| when \TeX\ is in
+restricted horizontal mode, i.e, constructing an hbox.
+But instead of rejecting the |\vskip|, \TeX\ has inserted a right brace
+in front of it in an attempt to close out the hbox.
+If you accept \TeX's correction, \TeX\ will complain again
+when it gets to the correct right brace later on. It will also complain
+about anything before that right brace that isn't allowed in vertical mode.
+These additional complaints will be particularly confusing
+because the errors they indicate are bogus, a
+result of the propagated effects of the inappropriate
+insertion of the right brace.
+Your best bet is to type `|5|', skipping past all the tokens
+in `|}\vskip 1in|'.
+
+Here's a similar example in which the error message is longer
+than any we've seen so far:
+\csdisplay
+\leftline{Skip \smallskip a little further.} But no more.
+|
+The mistake here is that |\smallskip| only works in a vertical mode.
+The error message is something like:
+\csdisplay
+!! Missing } inserted.
+<inserted text>
+ }
+<to be read again>
+ \vskip
+\smallskip ->\vskip
+ \smallskipamount
+<argument> Skip \smallskip
+ a little further.
+\leftline #1->\line {#1
+ \hss }
+l.93 ...Skip \smallskip a little further.}
+ But no more.
+|
+The error messages here give you a tour through the macros that are used in
+\plainTeX's implementation of |\leftline|---macros
+that you probably don't care about.
+The first line tells you that \TeX\ intends to cure the problem by
+inserting a right brace.
+\TeX\ hasn't actually read the
+right brace yet, so you can delete it if you choose to.
+Each component of the message after the first line
+(the one with the `!') occupies a pair of lines.
+Here's what the successive pairs of lines mean:
+\olist
+\li The first pair indicates that \TeX\ has inserted, but not yet read,
+a right brace.
+\li The next pair indicates that after reading the right brace, \TeX\ will
+again read a `|\vskip|' command (gotten from the macro definition
+of |\smallskip|).
+\li The third pair indicates that \TeX\ was expanding the |\smallskip|
+macro when it found the error. The pair also displays the definition of
+|\smallskip| and indicates how far \TeX\ has gotten in expanding and
+executing that definition. Specifically, it's just attempted
+unsuccessfully to execute the |\vskip| command. In general, a
+diagnostic line that starts with a control sequence followed by `|->|'
+indicates that \TeX\ has been expanding and executing a macro by that
+name.
+\li The fourth pair indicates that \TeX\ was processing a macro argument
+when it found the |\smallskip| and also indicates \TeX's position in that
+argument, i.e., it's just processed the |\smallskip| (unsuccessfully).
+By looking ahead to the next pair of lines
+we can see that the argument was passed to
+|\leftline|.
+\li The fifth pair indicates that \TeX\ was expanding
+the |\leftline|
+macro when it found the error.
+(In this example the error occurred while \TeX\ was
+in the middle of interpreting several
+macro definitions at different levels of expansion.)
+Its position after |#1| indicates that the last thing it saw was the
+first (and in this case the only) argument to |\leftline|.
+\li The last pair indicates where \TeX\ is positioned in your input file.
+Note that this position is well beyond the position where it's
+inserting the right brace and reading `|\vskip|' again.
+That's because \TeX\ has already read the entire argument to |\leftline|
+from your input file, even though it's only processed part of that argument.
+The dots at the beginning of the pair indicate a preceding part of the
+input line that isn't shown. This preceding part, in fact, includes
+the |\leftline| control sequence that made the |\vskip| illegal.
+\endolist
+\noindent
+In a long message like this, you'll generally find only the first line and the
+last pair of lines to be useful; but it sometimes helps to know what the other
+lines are about. Any text that you insert or delete will be
+inserted or deleted at the
+innermost level. In this example the insertion or deletion would occur
+just before the
+inserted right brace.
+Note in particular that in this case \TeX\ puts any text you might insert
+\emph{not} into your input text but into a macro definition
+several levels down. (The original macro definition is of course not modified.)
+
+You can use the ^|\errorcontextlines| command \ctsref{\errorcontextlines}
+to limit the
+number of pairs of error context lines that \TeX\ produces.
+If you're not interested in all the information that \TeX\ is giving you,
+you can set |\error!-contextlines| to $0$. That will give you just the first
+and last pairs of lines.
+
+Finally,
+we'll mention two other indicators that can appear at the start of a pair
+of error message lines:
+\ulist
+\li ^|<output>| indicates that \TeX\ was in the middle of its output routine
+when this error occurred.
+\li ^|<write>| indicates that \TeX\ was in the middle of executing a
+|\write| command when this error occurred.
+\TeX\ will detect such an error when it is actually doing the |\write|
+(during a |\shipout|), rather than when it first encounters the |\write|.
+\endulist
+
+
+\eix^^{error messages}
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/examples.tex b/Master/texmf-dist/doc/plain/impatient/examples.tex
new file mode 100644
index 00000000000..1b244362d61
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/examples.tex
@@ -0,0 +1,56 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter{Examples}
+
+\chapterdef{examples}
+
+This section of the book contains a set of examples
+to help get you started and to show you how to do various things with \TeX.
+Each example has \TeX\ output on the left-hand page and the \TeX \
+input that led to that output on the right-hand page.
+You can use these examples both as forms to imitate and
+as a way of finding the
+\TeX\ commands that you need in order to achieve a particular effect.
+However, these examples can illustrate only a few of the
+about $900$ \TeX\ commands.
+
+Some of the examples are self-descriptive---that is, they discuss the very
+features of \TeX\ that they are illustrating. These discussions are
+necessarily sketchy because there isn't room in the examples for all the
+information you'd need. The capsule summary of commands
+(\chapterref{capsule})
+and the index will help you
+locate the complete explanation of every \TeX\ feature shown in the
+examples.
+
+Because we've designed the examples to illustrate
+many things at once, some examples contain a great variety of
+typographical effects. These examples generally are \emph{not} good
+models of typographical practice. For instance, Example~8 has some of its
+equation numbers on the left and some on the right. You'd never want to
+do that in a real publication.
+
+\xrdef{xmphead}
+Each example except for the first one starts with a macro (see
+\xref{macro}) named |\xmpheader|. We've used |\xmpheader| in order to
+conserve space in the input, since without it each example would have
+several lines of material you'd already seen.
+|\xmpheader| produces the title of an example and the
+extra space that goes with it. You can see in the first example
+what |\xmpheader| does, so you can imitate it if you wish.
+Except for |\xmpheader|, every command that we use in these examples is
+defined in \plainTeX.
+
+% The first example does the necessary eject here.
+{%
+ \let\bye = \relax % We don't want to obey \bye in the example input.
+ % These switches can't be done by a macro since \bye is outer.
+ \doexamples {xmptext}% Typeset the actual examples.
+}%
+
+
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/fdl.tex b/Master/texmf-dist/doc/plain/impatient/fdl.tex
new file mode 100644
index 00000000000..4ae17d2d753
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/fdl.tex
@@ -0,0 +1,463 @@
+% This file is a chapter. It must be included in a larger document to work
+% properly.
+
+\chapter{GNU Free Documentation \linebreak License}
+
+\begingroup
+% pseudo-latex since that's what the original source used.
+\let\label=\eqdefn
+\def\eqprint#1{#1\relax}
+\def\\{\hfil\break}
+\let\ref=\eqref
+
+% we have to have section numbers since we have internal references.
+\def\fdlkludge{\begingroup
+ \count255=\eqnumber \advance\count255 by 1
+ \the\count255.
+\endgroup}
+
+Version 1.2, November 2002
+
+ Copyright \copyright\ 2000,2001,2002 Free Software Foundation, Inc.\\
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\\
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+\section{PREAMBLE}
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document ``free'' in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+\section{APPLICABILITY AND DEFINITIONS}
+
+\label{applicability}
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (Thus, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, \LaTeX\ input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+
+\section{VERBATIM COPYING}
+
+\label{verbatim}
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in
+section~\ref{copying}.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+\section{COPYING IN QUANTITY}
+
+\label{copying}
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+\section{MODIFICATIONS}
+
+\label{modifications}
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections~\ref{verbatim} and \ref{copying} above,
+provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+%\begin{enumerate}
+\smallskip
+\itemletter = `A
+\def\item{\vskip\interitemskip \char\itemletter. \advance\itemletter by 1}
+\item Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+\item List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+\item State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+\item Preserve all the copyright notices of the Document.
+\item Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+\item Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+\item Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+\item Include an unaltered copy of this License.
+\item Preserve the section Entitled ``History'', Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled ``History'' in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+\item Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the ``History'' section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+\item For any section Entitled ``Acknowledgements'' or ``Dedications'',
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+\item Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+\item Delete any section Entitled ``Endorsements''. Such a section
+ may not be included in the Modified Version.
+\item Do not retitle any existing section to be Entitled ``Endorsements''
+ or to conflict in title with any Invariant Section.
+\item Preserve any Warranty Disclaimers.
+
+\smallskip
+%\end{enumerate}
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+\section{COMBINING DOCUMENTS}
+
+\label{combining}
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section~\ref{modifications}
+above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all sections
+Entitled ``Endorsements''.
+
+
+\section{COLLECTIONS OF DOCUMENTS}
+
+\label{collections}
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+\section{AGGREGATION WITH INDEPENDENT WORKS}
+
+\label{aggregation}
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section~\ref{copying} is applicable to
+these copies of the Document, then if the Document is less than one half
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+\section{TRANSLATION}
+
+\label{translation}
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of
+section~\ref{modifications}.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement
+(section~\ref{modifications}) to Preserve
+its Title (section~\ref{applicability}) will typically require
+changing the actual title.
+
+
+\section{TERMINATION}
+
+\label{termination}
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+\section{FUTURE REVISIONS OF THIS LICENSE}
+
+\label{future}
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+% this section title is so long, it messes up everything.
+% don't put it in the headline and don't write it to the toc
+\let\markinfo=\gobble
+\let\writetocentry=\gobbletwo
+\section{\vtop{\noindent ADDENDUM: How to use this License
+ \\for your documents\hfil}}
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+%\begin{quote}
+\smallskip
+{\narrower\obeylines\eightrm\baselineskip=10pt
+ Copyright \copyright\ YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+\par}
+%\end{quote}
+\smallskip
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with...Texts.'' line with this:
+
+\smallskip
+{\narrower\obeylines\eightrm\baselineskip=10pt
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+\par}
+\smallskip
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+\endgroup
+
+\endchapter\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/fonts.tex b/Master/texmf-dist/doc/plain/impatient/fonts.tex
new file mode 100644
index 00000000000..ad10cf4e455
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/fonts.tex
@@ -0,0 +1,241 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+% Fonts for TeX for the Impatient.
+
+% This file is being distributed with the macros because the macro file
+% refers to it. We used a combination of Bitstream and standard TeX
+% fonts for the original printed book, but for the free edition, we
+% stick to Computer Modern.
+% -----------------------------------------------------------------------
+%
+% We used Computer Modern for the main text and math, and Zapf Humanist
+% (i.e., Optima) for heads. (bs00015 is Optima Roman, 16 italic, 17
+% bold, 18 bold italic.)
+%
+% First we define all of the fonts we use for any purpose, in terms of the
+% font files. Later we define fonts functionally, using \let or \def.
+
+% Computer Modern fonts.
+%
+\font\fiverm = cmr5
+\font\eightrm = cmr8
+\font\ninerm = cmr9 % Glue pictures, small caps for ASCII.
+%\font\tenrm = xcmr10 % with our kerning
+\font\tenrm = cmr10 % don't have the xcmr10 source any more
+\font\oldtenrm = cmr10 % straight CM
+\font\twelverm = cmr12
+\font\twentysixrm = cmr10 at 26pt
+%
+\font\eightit = cmti8
+\font\nineit = cmti9
+\font\tenit = cmti10
+%
+\font\eighttt = cmtt8
+\font\eleventt = cmtt10 at 11pt
+\font\twelvett = cmtt10 scaled \magstep2
+%
+\font\tenbt = cmtt10
+%
+\font\elevensf = cmss10 scaled\magstephalf
+\font\fourteensf = cmss10 scaled\magstep2
+%
+\font\eightbf = cmbx8
+\font\tenbf = cmbx10
+\font\elevenbf = cmbx10 scaled \magstephalf
+\font\twelvebf = cmbx12
+\font\thirtysixbf = cmbx10 at 36pt
+%
+\font\tenbi = cmbxti10
+\font\elevenbi= cmbxti10 scaled \magstephalf
+\font\fourteenbi= cmbxti10 scaled \magstep2
+%
+\font\tensc = cmcsc10
+\font\eightsl = cmsl8
+\font\eighti = cmmi8
+\font\eightsy = cmsy8
+
+% % Optima fonts.
+% %
+% \font\eightopt = bs0015 at 8pt
+% \font\nineopt = bs0015 at 9pt
+% \font\twelveopt = bs0015 at 12pt
+% \font\twentysixopt = bs0015 at 26pt
+% \font\nineoptit = bs0016 at 9pt
+% \font\tenoptit = bs0016 at 10pt
+% \font\tenoptbf = bs0017 at 10pt
+% \font\thirtysixoptbf = bs0017 at 36pt
+% \font\tenbt = bs00175 at 10pt
+% \font\tenoptbi = bs0018 at 10pt
+% \font\elevenoptbi = bs0018 at 11pt
+% \font\fourteenoptbi = bs0018 at 14pt
+
+% Palatino fonts.
+%
+\font\tenpal = pplr
+%\font\tenpal = bs0023
+%\font\tenpalit = bs0024
+%\font\tenpalbf = bs0025
+%\font\tenpalbi = bs0026
+
+% Logo and picture fonts.
+%
+\font\eightlogo = logo8
+\font\logosl = logosl10
+\font\handfont = pzdr
+
+% The following changes are to avoid driver overflow
+\ifmsdos
+ \font\cnum = cnum % 36-pt bold Optima, numbers only (just for MS-DOS)
+ \let\chapternumeralfont = \cnum
+ %\let\thirtysixoptbf = \twentysixopt
+ %\font\sevensy = cmsy8
+ %\font\seveni = cmmi8
+\fi
+
+\def\undefinedfont{\errmessage{Undefined font}}
+
+% This should only be called when \rm et al. are going to be defined
+% directly.
+%
+\def\clearfonts{\let\rm = \undefinedfont \let\bf = \undefinedfont
+ \let\it = \undefinedfont \let\bi = \undefinedfont
+ \let\tt = \undefinedfont \let\bt = \undefinedfont
+ \let\sc = \undefinedfont
+ \let\ss = \undefinedfont
+}
+
+% We only need to assign to \fam if the font is going to be used in math
+% mode, which isn't the case with any of these. \rm, \it, \sl, \bf, and
+% \tt are defined in plain.
+%
+\def\bi{\tenbi}
+
+\def\mapquotes{\catcode`` = \active \catcode`' = \active}
+{\mapquotes
+ \gdef\bt{% The font change also draws \ ` ' from a different font.
+ \tenbt
+ \def\\{{\tentt \char92}}%
+ \def`{{\tentt \char96}}\def'{{\tentt \char39}}%
+ }
+}
+
+\def\bti{\tenbi}
+\def\sc{\tensc}
+
+% Text fonts.
+%
+\def\textfonts{%
+ \def\rm{\fam0\tenrm}%
+ \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\tenit}\textfont\itfam=\tenit
+ \def\sl{\fam\slfam\tensl}\textfont\slfam=\tensl
+ \def\bf{\fam\bffam\tenbf}\textfont\bffam=\tenbf
+ \scriptfont\bffam=\sevenbf \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\tentt}\textfont\ttfam=\tentt
+ \let\sc = \tensc
+ \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}%
+ \normalbaselineskip=12pt
+ \normalbaselines \rm
+}
+
+
+% Footnote fonts. We generally use eight point.
+%
+\def\footnotefonts{%
+ \def\rm{\fam0\eightrm}%
+ \textfont0=\eightrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \textfont1=\eighti \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \textfont2=\eightsy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\eightit}\textfont\itfam=\eightit
+ \def\sl{\fam\slfam\eightsl}\textfont\slfam=\eightsl
+ \def\bf{\fam\bffam\eightbf}\textfont\bffam=\eightbf
+ \scriptfont\bffam=\sevenbf \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\eighttt}\textfont\ttfam=\eighttt
+ \let\sc = \eightsc
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width\z@}%
+ \normalbaselineskip=9pt
+ \normalbaselines \rm
+}
+
+% Fonts for the example titles. They are defined in the first example,
+% also.
+%
+
+\def\exampletitlefonts{\clearfonts
+ \let\bf = \elevenbf
+ \let\bi = \elevenbi
+ \baselineskip = 13pt \bf
+}
+
+% Fonts for the subsection titles.
+%
+\def\subsectionfonts{\clearfonts \let\sf = \elevensf
+ \baselineskip = 12pt \sf
+}
+
+
+% Fonts for the section titles.
+%
+\def\sectionfonts{\clearfonts \let\sf = \fourteensf
+ \baselineskip = 16pt \sf
+}
+
+% Fonts for the chapter titles.
+%
+\let\chapternumeralfont = \thirtysixbf
+
+\def\chapterfonts{\clearfonts \let\bf = \twentysixrm
+ \baselineskip = 32pt \bf
+}
+
+% Fonts for the table of contents.
+%
+\def\shorttocfonts{\clearfonts \let\rm = \twelverm
+ \baselineskip = 20pt \rm
+}
+
+\def\tocfonts{\clearfonts \let\rm = \ninerm
+ \let\it = \tenit \let\bf = \tenbf
+ \baselineskip = 12pt \rm
+}
+
+% Fonts for the index.
+%
+
+\def\indexfonts{\clearfonts
+ \let\rm = \eightrm
+ \let\it = \eightit
+ \let\tt = \eighttt
+ \let\sc = \tensc
+ \let\sl = \eightsl
+ \textfont2 = \eightsy % For \AMSTeX.
+ \let\mflogo = \eightlogo % For \Metafont.
+ \normalbaselineskip = 10pt \normallineskip = 1.5pt \normalbaselines
+ \setbox\strutbox=\hbox{\vrule height 7.5pt depth2.5pt width0pt}%
+ \rm
+}
+
+% Fonts for the inside back cover.
+%
+\def\conceptpagefonts{\clearfonts
+ \let\rm = \ninerm
+ \let\sc = \eightrm
+ \let\sl = \nineit
+ \baselineskip = 12pt
+ \rm
+}
+
+% We don't want any automatic hyphenation within the code font
+
+\hyphenchar\tentt = -1
+\hyphenchar\eighttt = -1
+
+
+
+\textfonts
diff --git a/Master/texmf-dist/doc/plain/impatient/frontm.tex b/Master/texmf-dist/doc/plain/impatient/frontm.tex
new file mode 100644
index 00000000000..40a0189f5b5
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/frontm.tex
@@ -0,0 +1,82 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+%
+% Front matter.
+
+\input macros
+
+
+% Frontmatter is numbered i, ii, ...
+\pageno = -1
+
+
+% Bastard title.
+%
+% \sinkage
+\leftline{\chapterfonts \TeX\ for the Impatient}
+
+\noheadlinetrue\pagebreak
+
+
+% Title spread.
+%
+%(title page, lhs)
+%\noheadlinetrue\pagebreak
+\blankpage
+
+%(title page, rhs)
+%\noheadlinetrue\pagebreak
+\blankpage
+
+
+{\input copyrght }
+\noheadlinetrue
+
+
+% Dedication.
+%
+\sinkage
+{\it \flushright
+ For Jodi.
+ ---{\sc p.w.a.}
+
+ In memory of my father,
+ who had faith in me.
+ ---{\sc k.a.h.}
+
+ For Dan.
+ ---{\sc k.b.}
+}
+\pagebreak
+
+% From here on, the convention is that every frontchapter does its own
+% ending pagebreak and encloses its fonts in a group if necessary.
+
+% The preface should start on a right-hand page.
+
+\blankpage
+{\input preface }
+
+% Contents.
+%
+% We never want to empty the file after doing the brief contents.
+%
+\rewritetocfilefalse
+%
+\blankpage
+\frontchapter{Brief\linebreak contents}
+
+\shortcontents
+
+
+\ifcompletebook \global\rewritetocfiletrue \fi
+
+\frontchapter{Contents}
+
+\contents
+
+\blankpage
+{\input read1st }
+
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/genops.tex b/Master/texmf-dist/doc/plain/impatient/genops.tex
new file mode 100644
index 00000000000..46bc83a1a88
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/genops.tex
@@ -0,0 +1,2827 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter {Commands for \linebreak general operations}
+
+\chapterdef{general}
+
+This section covers
+\TeX's ^{programming features} and
+everything else that doesn't fit into the categories
+of commands in the previous chapters.
+For an explanation of the conventions used in this section,
+see \headcit{Descriptions of the commands}{cmddesc}.
+
+\begindescriptions
+
+%==========================================================================
+\section {Naming and modifying fonts}
+
+\begindesc
+\bix^^{fonts//naming and modifying}
+\cts font {}
+\aux\cts font {\<control sequence> = \<fontname>}
+\aux\cts font {\<control sequence> = \<fontname> {\bt scaled} \<number>}
+\aux\cts font {\<control sequence> = \<fontname> {\bt at} \<dimen>}
+\explain
+Used alone, the |\font| control sequence designates the current font.
+|\font| isn't a true command when it's used alone,
+since it then can appear only as an argument to another command.
+
+For the other three forms of |\font|,
+\<font\-name> names a set of files that define a font.
+These forms of |\font| are commands. Each of these forms has two effects:
+{\tighten
+\olist
+\li It defines \<control sequence> as a name that selects
+the font \<font\-name>, possibly magnified (see below).
+\li It causes \TeX\ to load the font ^{metrics file}
+(^{\tfmfile}) for \<fontname>.
+\endolist
+}% end tighten
+
+\noindent
+The name of a font file usually indicates its design size.
+For example, |cmr10| indicates Computer Modern roman with a
+design size of $10$ points.
+The design size of a font is recorded in its metrics file.
+
+If neither |scaled| \<number> nor |at| \<dimen>
+is present, the font is used
+at its design size---the size at which it usually looks best.
+Otherwise, a magnified version of the font is loaded:
+\ulist
+\li If |scaled| \<number>
+is present, the font is magnified by a factor of $\hbox{\<number>}/1000$.
+\li If |at| \<dimen> is present, the font is scaled to \<dimen> by magnifying
+it by $\hbox{\<dimen>}/ds$, where $ds$ is the design size of
+\<fontname>.
+\<dimen> and $ds$ are nearly always given in points.
+\endulist
+\noindent
+Magnifications of less than $1$ are possible; they reduce the size.
+
+You usually need to provide a shape file (\xref{shape}) for each
+magnification of a font that you load.
+However, some ^{device drivers} can utilize fonts that are resident
+in a printer. ^^{resident fonts}
+Such fonts don't need shape files.
+
+See \conceptcit{font} and
+\conceptcit{magnification} for further information.
+
+\example
+\font\tentt = cmtt10
+\font\bigttfont = cmtt10 scaled \magstep2
+\font\eleventtfont = cmtt10 at 11pt
+First we use {\tentt regular CM typewriter}.
+Then we use {\eleventtfont eleven-point CM typewriter}.
+Finally we use {\bigttfont big CM typewriter}.
+|
+\produces
+\font\regttfont = cmtt10
+\font\bigttfont = cmtt10 scaled \magstep 2
+\font\eleventtfont = cmtt10 at 11pt
+First we use {\regttfont regular CM typewriter}.
+Then we use {\eleventtfont eleven-point CM typewriter}.
+Finally we use {\bigttfont big CM typewriter}.
+\endexample
+\enddesc
+
+\begindesc
+\cts fontdimen {\<number> \<font>\param{dimen}}
+\explain
+^^{fonts//parameters of}
+These parameters specify various dimensions associated with
+the font named by the control sequence \<font>
+(as distinguished from the \<font\-name> that names the font files).
+Values of these parameters are specified in the metrics
+file for \<font>, but you can
+retrieve or change their values during a \TeX\ run.
+The numbers and meanings of the parameters are:
+\display{\halign{\hfil#\hfil\quad&#\hfil\cr
+\it Number&\it Meaning\cr
+\noalign{\vskip 1\jot}%
+1&slant per point\cr
+2&interword space\cr
+3&interword stretch\cr
+4&interword shrink\cr
+5&x-height (size of |1ex|)\cr
+6&quad width (size of |1em|)\cr
+7&extra space\cr}}
+\noindent
+\TeX\ uses the slant per point for positioning accents.
+It uses the interword parameters for producing interword spaces
+(see |\spaceskip|, \xref\spaceskip) and the extra space parameter
+for the additional space after a period (see |\xspaceskip|,
+\xref\xspaceskip).
+The values of these parameters for the
+\plainTeX\ fonts are enumerated on \knuth{page~433}.
+Math symbol fonts have $15$ additional parameters, which we won't discuss here.
+
+Beware:
+assignments to these parameters are \emph{not} undone at the end
+of a group.
+If you want to change these parameters locally, you'll need to
+save and restore their original settings explicitly.
+\example
+Here's a line printed normally.\par
+\fontdimen2\font = 3\fontdimen2\font
+% Triple the interword spacing.
+\noindent Here's a really spaced-out line.
+|
+\produces
+Here's a line printed normally.\par
+\dimen0 = \fontdimen2\font % to undo global assignment
+\fontdimen2\font = 3\fontdimen2\font
+% triple the interword spacing
+\noindent Here's a really spaced-out line.
+\fontdimen2\font = \dimen0
+\endexample
+\enddesc
+
+\begindesc
+\cts magnification {{\bt =} \<number>}
+\cts mag {\param{number}}
+\explain
+\margin{{\tt\\mag} and {\tt\\magnification} combined.}
+An assignment to |\magnification| establishes
+the ``^{scale factor}'' $f$ that determines
+the \minref{magnification} ratio of your document \seeconcept{magnification}.
+The assignment to |\magni!-fication| must occur before the first page
+of your document has been shipped out.
+
+The assignment sets $f$ to \<number> and also
+sets |\hsize| and |\vsize|
+^^|\hsize//set by {\tt\\magnification}|
+^^|\vsize//set by {\tt\\magnification}|
+respectively to |6.5true in| and |8.9true in|,
+the values appropriate for an $8 \frac1/2$-%
+by-$11$-inch page.
+$f$ must be between $0$ and $32768$.
+The \minref{magnification} ratio of the
+document is $f/1000$.
+A scale factor
+of $1000$ provides unit magnification, i.e., it leaves the size of your
+document
+unchanged. It's customary to use powers of $1.2$ as scale factors, and
+most libraries of fonts are based on such factors. You can use the
+^|\magstep| and ^|\magstephalf| commands to specify magnifications by
+these factors.
+
+|\magnification| is not a parameter. You can't use it
+to \emph{retrieve} the scale factor. If you write something like
+|\dimen0 = \mag!-nifi!-cation|, \TeX\ will complain about it.
+
+The |\mag| parameter contains the scale factor.
+Changing the value of |\mag| rescales the page dimensions, which is not
+usually what you want.
+Therefore it's usually better to change the magnification by
+assigning to |\magnification| rather than to |\mag|.
+
+\example
+\magnification = \magstep2
+% magnify fonts by 1.44 (=1.2x1.2)
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts magstep {\<number>}
+\explain
+This command expands to the \minref{magnification} ratio needed to
+magnify everything in your document
+(other than |true| dimensions)
+by $1.2^r$, where $r$ is
+the value of \<number>. \<number> must be between $0$ and $5$.
+\example
+\magnification = \magstep1 % Magnify by ratio of 1.2.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts magstephalf {}
+\explain
+This command expands to the \minref{magnification} ratio needed to
+magnify everything in your document
+(other than |true| dimensions)
+by $\sqrt{1.2}$,
+i.e., halfway between $1$ and $1.2$.
+\example
+\magnification = \magstephalf
+|
+\endexample
+\eix^^{fonts//naming and modifying}
+\enddesc
+
+%==========================================================================
+\section {Converting information to tokens}
+
+\subsection {Numbers}
+
+\begindesc
+\xrdef{convert}
+\bix^^{numbers//converting to characters}
+%
+\cts number {\<number>}
+\explain
+This command produces the representation of a \minref{number}
+as a sequence of
+character \minref{token}s. The number can be either an explicit integer,
+a \<number> parameter, or a \<number> register.
+\example
+\number 24 \quad \count13 = -10000 \number\count13
+|
+\produces
+\number 24 \quad \count13 = -10000 \number\count13
+\endexample
+\enddesc
+
+\begindesc
+^^{Roman numerals}
+\easy\cts romannumeral {\<number>}
+\explain
+This command produces the roman numeral representation of a \minref{number}
+as a sequence of
+character \minref{token}s. The number can be either an explicit integer,
+a \<number> parameter, or a \<number> register.
+If the number is zero or negative, |\romannumeral| produces
+no tokens.
+\example
+\romannumeral 24 \quad (\romannumeral -16)\quad
+\count13 = 6000 \romannumeral\count13
+|
+\produces
+\romannumeral 24 \quad (\romannumeral -16)\quad
+\count13 = 6000 \romannumeral\count13
+\endexample
+
+\eix^^{numbers//converting to characters}
+\enddesc
+
+%==========================================================================
+\subsection {Environmental information}
+
+\begindesc
+^^{time of day}
+\cts time {\param{number}}
+\explain
+\TeX\ sets this parameter to the
+number of minutes that have elapsed since midnight (of the current day).
+At noon, for instance, |\time| is $720$.
+This command and the next three make use of the time and date as
+recorded in your computer.
+\TeX\ retrieves them just once, at the beginning of your run, so |\time|
+at the end of the run always has the same value as |\time| at the
+beginning of the run (unless you've explicitly changed it).
+\enddesc
+
+\bix^^{date}
+\begindesc
+\cts day {\param{number}}
+\explain
+\TeX\ sets this parameter to the current day of the month. It is
+a number between $1$ and $31$.
+|\day| is set at the beginning of your run (see the comments on
+|\time| above).
+\enddesc
+
+\begindesc
+\cts month {\param{number}}
+\explain
+\TeX\ sets this parameter to the current month. It is
+a number between $1$ and $12$.
+|\month| is set at the beginning of your run (see the comments on
+|\time| above).
+\enddesc
+
+\begindesc
+\cts year {\param{number}}
+\explain
+\TeX\ sets this parameter to the current year ({\sc A.D.}).
+It is a number such as $1991$.
+|\year| is set at the beginning of your run (see the comments on
+|\time| above).
+
+\eix^^{date}
+\enddesc
+
+\begindesc
+^^{version number}
+\cts fmtname {}
+\cts fmtversion {}
+\explain
+These commands produce the name and version number
+of the \TeX\ format,
+e.g., \minref{\plainTeX} or ^{\LaTeX}, that you're using.
+\example
+This book was produced with the \fmtname\ format,
+version~\fmtversion.
+|
+\produces
+This book was produced with the \fmtname\ format,
+version~\fmtversion.
+\endexample
+\enddesc
+
+\begindesc
+\cts jobname {}
+\explain
+This command produces the base
+name of the file with which \TeX\ was invoked.
+For example, if your main input file is |hatter.tex|,
+|\jobname| will expand to |hatter|.
+|\jobname| is most useful when you're
+creating an auxiliary file to be associated with a document.
+^^{auxiliary files}
+\example
+\newwrite\indexfile \openout\indexfile = \jobname.idx
+% For input file `hatter.tex', open index file `hatter.idx'.
+|
+\endexample\enddesc
+
+%==========================================================================
+\subsection {Values of variables}
+
+\begindesc
+\cts meaning {\<token>}
+\explain
+^^{tokens//showing the meaning of}
+This command produces
+the meaning of \<token>. It is useful for diagnostic output.
+You can use the ^|\the| command (\xref\the) in a similar way
+to get information about the values of \minref{register}s and other
+\TeX\ entities.
+\example
+[{\tt \meaning\eject}] [\meaning\tenrm] [\meaning Y]
+|
+\produces
+[{\tt \meaning\eject}] [\meaning\tenrm] [\meaning Y]
+\endexample\enddesc
+
+\begindesc
+\cts string {\<control sequence>}
+\explain
+^^{control sequences//converting to strings}
+This command produces
+the characters that form the name of \<control sequence>,
+including the \minref{escape character}.
+The escape character is represented by the current value of
+^|\escapechar|.
+^^{escape character//represented by \b\tt\\escapechar\e}
+\TeX\ gives the characters in the list a category code of $12$ (other).
+
+You can perform the reverse operation with
+the ^|\csname| command (\xref \csname),
+which turns a string into a control sequence.
+\example
+the control sequence {\tt \string\bigbreak}
+|
+\produces
+the control sequence {\tt \string\bigbreak}
+\endexample\enddesc
+
+\begindesc
+\cts escapechar {\param{number}}
+\explain
+This parameter specifies the \ascii\ code \minrefs{\ascii} of the
+character that \TeX\ uses to represent the \minref{escape character}
+^^{escape character//represented by \b\tt\\escapechar\e}
+when it's
+converting a control sequence name to a sequence of character tokens.
+This conversion occurs when you use the |\string| command and also when
+\TeX\ is producing diagnostic messages. The default value of the escape
+character is $92$, the {\ascii} character code for a ^{backslash}.
+If |\escapechar| is not in the range $0$--$255$,
+\TeX\ does not include an escape character in the result of the conversion.
+\example
+\escapechar = `!!
+the control sequence {\tt \string\bigbreak}
+|
+\produces
+\escapechar = `!
+the control sequence {\tt \string\bigbreak}
+\endexample
+\enddesc
+
+\begindesc
+\cts fontname {\<font>}
+\explain
+^^{fonts//names of}
+This command produces the filename
+for \<font>. The filename is the \<font\-name> that was used to define
+\<font>.
+\example
+\font\myfive=cmr5 [\fontname\myfive]
+|
+\produces
+\font\myfive=cmr5 [\fontname\myfive]
+\endexample
+\enddesc
+
+
+%==========================================================================
+\section {Grouping}
+
+\begindesc
+\bix^^{groups}
+%
+\cts begingroup {}
+\cts endgroup {}
+\explain
+These two commands begin and end a \minref{group}.
+A |\begingroup| does not match up with a right brace,
+nor an |\endgroup| with a left brace.
+
+\TeX\ treats |\begingroup| and |\endgroup| like any other
+\minref{control sequence} when it's scanning its input. In particular,
+you can define a \minref{macro} that contains a |\begingroup|
+but not an |\endgroup|, and conversely.
+^^{macros//using \b\tt\\begingroup\e\ and \b\tt\\endgroup\e\ in}
+This technique is often useful
+when you're defining paired macros, one of which establishes
+an environment and the other of which terminates that environment.
+You can't, however, use |\begingroup| and |\endgroup| as substitutes for
+braces other than the ones that surround a group.
+\example
+\def\a{One \begingroup \it two }
+\def\enda{\endgroup four}
+\a three \enda
+|
+\produces
+\def\a{One \begingroup \it two }
+\def\enda{\endgroup four}
+\a three \enda
+\endexample
+\enddesc
+
+\begindesc
+\makecolumns 4/2:
+\easy%
+\ctsact { \xrdef{@lbrace}
+\cts bgroup {}
+\ctsact } \xrdef{@rbrace}
+\cts egroup {}
+\explain
+The left and right braces are commands that begin and end a
+\minref{group}.
+The |\bgroup| and |\egroup| \minref{control sequence}s are equivalent
+to `|{|' and `|}|', except that
+\TeX\ treats |\bgroup| and |\egroup| like any other
+\minref{control sequence} when it's scanning its input.
+
+|\bgroup| and |\egroup| can be useful when you're
+defining paired macros, one of which
+starts a brace-delimited construct (not necessarily a group)
+and the other one of which ends that construct.
+^^{macros//using \b\tt\\bgroup\e\ and \b\tt\\egroup\e\ in}
+You can't define such macros using ordinary braces---if you try,
+your macro definitions will contain unmatched braces
+and will therefore be unacceptable to \TeX.
+Usually you should use these commands only when you can't use
+ordinary braces.
+
+\example
+Braces define the {\it boundaries\/} of a group.
+|
+\produces
+Braces define the {\it boundaries\/} of a group.
+\nextexample
+\def\a{One \vbox\bgroup}
+% You couldn't use { instead of \bgroup here because
+% TeX would not recognize the end of the macro
+\def\enda#1{{#1\egroup} two}
+% This one is a little tricky, since the \egroup actually
+% matches a left brace and the following right brace
+% matches the \bgroup. But it works!!
+\a \enda{\hrule width 1in}
+|
+\produces
+\def\a{One \vbox\bgroup}
+% You couldn't use { instead of \bgroup here because
+% TeX would not recognize the end of the macro
+\def\enda#1{{#1\egroup} two}
+% This one is a little tricky, since the \egroup actually
+% matches a left brace and the following right brace
+% matches the \bgroup. But it works!
+\a \enda{\hrule width 1in}
+\endexample
+\enddesc
+
+\begindesc
+\cts global {}
+\explain
+This command makes the following definition
+or \minref{assignment} \minref{global} \seeconcept{global} so that it
+becomes effective independent of \minref{group} boundaries.
+You can apply a |\global| prefix to any kind of definition
+or \minref{assignment},
+including a \minref{macro} definition or a \minref{register} assignment.
+\example
+{\global\let\la = \leftarrow}
+$a \la b$
+|
+\produces
+% for safety's sake we fake this one!
+\let\la = \leftarrow
+$a \la b$
+\endexample
+\enddesc
+
+\begindesc
+\cts globaldefs {\param{number}}
+\explain
+This parameter controls whether or not \TeX\ takes definitions
+and other assignments to be
+\minref{global}:
+\ulist
+\li If |\globaldefs| is zero (as it is by default), a definition is global
+if and only if it is preceded by |\global| either explicitly or implicitly.
+(The ^|\gdef| and ^|\xdef| commands (\xref\gdef) have an implicit
+|\global| prefix).
+\li If |\globaldefs| is greater than zero, all assignments and
+definitions are implicitly prefixed by ^|\global|.
+\li If |\globaldefs| is less than zero, all ^|\global| prefixes are ignored.
+\endulist
+\enddesc
+
+\begindesc
+\margin{Order of {\tt\\aftergroup} and {\tt\\afterassignment} changed.}
+\cts aftergroup {\<token>}
+\explain
+When \TeX\ encounters this command during input,
+it saves \<token>.
+After the end of the current \minref{group},
+it inserts \<token> back into the input and expands it.
+If a group contains several |\aftergroup|s, the corresponding tokens
+are \emph{all} inserted following the end of the group, in the order
+in which they originally appeared.
+
+The example that follows shows how you can use |\aftergroup| to postpone
+processing a token that you generate within a \minref{conditional test}.
+\example
+\def\neg{negative} \def\pos{positive}
+% These definitions are needed because \aftergroup applies
+% to a single token, not to a sequence of tokens or even
+% to a brace-delimited text.
+\def\arith#1{Is $#1>0$? \begingroup
+ \ifnum #1>-1 Yes\aftergroup\pos
+ \else No\aftergroup\neg\fi
+ , it's \endgroup. }
+\arith 2
+\arith {-1}
+|
+\produces
+\def\neg{negative} \def\pos{positive}
+% These definitions are needed because \aftergroup applies
+% to a single token, not a sequence of tokens or even
+% a group.
+\def\arith#1{Is $#1>0$? \begingroup
+ \ifnum #1>-1 Yes\aftergroup\pos
+ \else No\aftergroup\neg\fi
+ , it's \endgroup. }
+\arith 2
+\arith {-1}
+\endexample
+\eix^^{groups}
+\enddesc
+
+\begindesc
+\cts afterassignment {\<token>}
+\explain
+When \TeX\ encounters this command it saves \<token> in a special
+place. After it next performs an \minref{assignment}, it inserts
+\<token> into the input and expands it. If you call |\afterassignment|
+more than once before an assignment, only the last call has any effect.
+One use of |\afterassignment|
+is in writing \minref{macro}s for commands intended to be written
+in the
+form of assignments, as in the example below.
+
+See \knuth{page~279} for a precise description
+of the behavior of |\afterassignment|.
+\example
+\def\setme{\afterassignment\setmeA\count255}
+\def\setmeA{$\number\count255\advance\count255 by 10
+ +10=\number\count255$}
+Some arithmetic: \setme = 27
+% After expanding \setme, TeX sets \count255 to 27 and
+% then calls \setmeA.
+|
+\produces
+\def\setme{\afterassignment\setmeA\count255}
+\def\setmeA{$\number\count255\advance\count255 by 10
++10=\number\count255$}
+Some arithmetic: \setme = 27
+% After expanding \setme, TeX sets \count255 to 27 and
+% then calls \setmeA.
+\endexample
+\enddesc
+
+
+%==========================================================================
+\section {Macros}
+
+%==========================================================================
+\subsection {Defining macros}
+
+\begindesc
+\bix^^{macros}
+\bix^^{macros//defining}
+\xrdef{mac1}% begin the section on macros
+%
+\cts def {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+\explain
+This command defines \<control sequence> as a \minref{macro} with the
+specified \<parameter text> and \<replacement text>.
+See \xrefpg{macro} for a full explanation of how to write a macro
+definition.
+\example
+\def\add#1+#2=?{#1+#2&=
+ \count255=#1 \advance\count255 by #2 \number\count255\cr}
+$$\eqalign{
+ \add 27+9=?
+ \add -5+-8=?}$$
+|
+\dproduces
+\def\add#1+#2=?{#1+#2&=
+ \count255=#1 \advance\count255 by #2 \number\count255\cr}
+$$\eqalign{
+ \add 27+9=?
+ \add -5+-8=?}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts edef {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+\explain
+This command defines a macro in the same general way as |\def|.
+The difference is that \TeX\ expands the \<replacement text>
+of an |\edef| immediately (but still without executing anything).
+Thus any definitions within the \<replacement text> are expanded, but
+assignments and commands that produce things such as boxes and glue
+are left as is. For example, an |\hbox| command within
+the \<replacement text> of an |\edef| remains as a command and is not
+turned into a box as \TeX\ is processing the definition.
+It isn't always obvious what's expanded and what isn't, but you'll
+find a complete list of expandable control sequences on
+\knuth{pages~212--215}.
+
+You can inhibit the expansion of a control sequence that would otherwise
+be expanded by using |\no!-expand| (\xref\noexpand). ^^|\noexpand|
+You can postpone the expansion of a control sequence by using
+^|\expandafter| (\xref\expandafter).
+
+The |\write|, |\message|, |\errmessage|, |\wlog|, and |\csname|
+commands expand their
+token lists using the same rules that |\edef| uses to expand its
+replacement text.
+^^|\write//expanded by {\tt\\edef} rules|
+^^|\message//expanded by {\tt\\edef} rules|
+^^|\errmessage//expanded by {\tt\\edef} rules|
+^^|\wlog//expanded by {\tt\\edef} rules|
+^^|\csname//expanded by {\tt\\edef} rules|
+\example
+\def\aa{xy} \count255 = 1
+\edef\bb{w\ifnum \count255 > 0\aa\fi z}
+% equivalent to \def\bb{wxyz}
+\def\aa{} \count255 = 0 % leaves \bb unaffected
+\bb
+|
+\produces
+\def\aa{xy} \count255 = 1
+\edef\bb{w\ifnum \count255 > 0\aa\fi z}
+% equivalent to \def\bb{wxyz}
+\def\aa{} \count255 = 0 % leaves \bb unaffected
+\bb
+\endexample
+\enddesc
+
+\begindesc
+\cts gdef {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+\explain
+This command is equivalent to |\global\def|.
+\enddesc
+
+\begindesc
+\cts xdef {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+\explain
+This command is equivalent to |\global\edef|.
+\enddesc
+
+\begindesc
+\cts long {}
+\explain
+This command is used as a prefix to a \minref{macro} definition.
+It tells \TeX\ that the arguments to the macro are permitted to include
+|\par| tokens (\xref{\@par}), which normally indicate the end of a paragraph.
+^^|\par//in macro arguments|
+If \TeX\
+tries to expand a macro defined without |\long| and any of
+the macro's arguments include a |\par| token,
+\TeX\ will complain about a runaway argument. The purpose
+of this behavior is to provide you with some protection against unterminated
+macro arguments.
+|\long| gives you a way of bypassing the protection.
+\example
+\long\def\aa#1{\par\hrule\smallskip#1\par\smallskip\hrule}
+\aa{This is the first line.\par
+This is the second line.}
+% without \long, TeX would complain
+|
+\produces
+\medskip
+\long\def\aa#1{\par\hrule\smallskip#1\par\smallskip\hrule}
+\aa{This is the first line.\par
+This is the second line.}
+% without \long, TeX would complain
+\endexample
+\enddesc
+
+\begindesc
+\cts outer {}
+\explain
+\null ^^{outer}
+This command is used as a prefix to a \minref{macro} definition.
+It tells \TeX\ that the macro is outer (\xref{outer})
+and cannot be used in certain contexts.
+If the macro is used in a forbidden context, \TeX\ will complain.
+
+\example
+\outer\def\chapterhead#1{%
+ \eject\topglue 2in \centerline{\bf #1}\bigskip}
+% Using \chapterhead in a forbidden context causes an
+% error message.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts chardef {\<control sequence>=\<charcode>}
+\explain
+^^{characters//defined by \b\tt\\chardef\e}
+This command defines \<control sequence>
+to be \<charcode>.
+Although |\chardef| is most often used to define characters, you can also
+use it to give a name to a number in the range $0$--$255$ even when you
+aren't using that number as a character code.
+\example
+\chardef\percent = `\% 21\percent, {\it 19\percent}
+% Get the percent character in roman and in italic
+|
+\produces
+\chardef\percent = `\%
+21\percent, {\it 19\percent}
+% You'll get the percent character in roman and in italic
+\endexample
+\enddesc
+
+\begindesc
+^^{math characters}
+^^{mathcodes}
+\cts mathchardef {\<control sequence>=\<mathcode>}
+\explain
+This command defines \<control sequence> as a math character
+with the given \minrefs{mathcode}\<mathcode>.
+The control sequence will only be legal in math mode.
+\example
+\mathchardef\alphachar = "010B % As in plain TeX.
+$\alphachar$
+|
+\produces
+\mathchardef\alphachar = "010B % As in plain TeX.
+$\alphachar$
+\endexample
+\eix^^{macros//defining}
+\enddesc
+
+%==========================================================================
+\subsection {Other definitions}
+
+\begindesc
+\cts let {\<control sequence> = \<token>}
+\explain
+^^{control sequences//defining with \b\tt\\let\e}
+\minrefs{token}
+This command causes
+\<control sequence> to acquire the current meaning of \<token>.
+Even if you redefine \<token> later, the meaning of \<control sequence>
+will not change. Although \<token> is most commonly a control sequence,
+it can also be a \minref{character} token.
+\enddesc
+
+\begindesc
+\cts futurelet {\<control sequence> \<token$_1$> \<token$_2$>}
+\explain
+This command tells \TeX\ to make \<token$_2$> the meaning of
+\<control sequence> (as would be done with |\let|), and then to
+process \<token$_1$> and \<token$_2$> normally.
+|\futurelet| is useful at the end of macro definitions
+because it gives you a way of looking beyond the token that \TeX\
+is about to process before it processes it.
+\example
+\def\predict#1{\toks0={#1}\futurelet\next\printer}
+% \next will acquire the punctuation mark after the
+% argument to \predict
+\def\printer#1{A \punc\ lies ahead for \the\toks0. }
+\def\punc{%
+ \ifx\next;semicolon\else
+ \ifx\next,comma\else
+ ``\next''\fi\fi}
+\predict{March}; \predict{April}, \predict{July}/
+|
+\produces
+\def\predict#1{\toks0={#1}\futurelet\next\printer}
+\def\printer#1{A \punc\ lies ahead for \the\toks0. }
+\def\punc{%
+ \ifx\next;semicolon\else
+ \ifx\next,comma\else
+ ``\next''\fi\fi
+ }
+\predict{March};
+\predict{April},
+\predict{July}/
+\endexample
+\enddesc
+
+\begindesc
+\cts csname {\<token list> {\bt \\endcsname}}
+\xrdef{\endcsname}
+\explain
+This command produces a control sequence from \<token list>.
+It provides a way of synthesizing control sequences,
+including ones that you can't normally write.
+\<token list> can itself include control sequences; it is expanded
+in the same way as the replacement text of an |\edef| definition (\xref\edef).
+If the final expansion
+yields anything that isn't a character, \TeX\ will complain.
+|\csname| goes from a list of tokens to a control sequence;
+you can go the other way with ^|\string| \ctsref\string.
+\example
+\def\capTe{Te}
+This book purports to be about \csname\capTe X\endcsname.
+|
+\produces
+\def\capTe{Te}
+This book purports to be about \csname\capTe X\endcsname.
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Controlling expansion}
+
+\begindesc
+\bix^^{macros//controlling expansion of}
+\cts expandafter {\<token$_1$> \<token$_2$>}
+\explain
+This command tells \TeX\ to expand \<token$_1$> according to its rules
+for \minref{macro} expansion \emph{after} it has expanded \<token$_2$>
+by one level. It's useful when \<token$_1$> is something like `|{|'
+^^|{//with {\tt\\expandafter}|
+or ^|\string| that inhibits expansion of \<token$_2$>,
+but you want to expand \<token$_2$> nevertheless.
+\example
+\def\aa{xyz}
+\tt % Use this font so `\' prints that way.
+[\string\aa] [\expandafter\string\aa]
+[\expandafter\string\csname TeX\endcsname]
+|
+\produces
+\def\aa{xyz}
+\tt
+[\string\aa] [\expandafter\string\aa]
+[\expandafter\string\csname TeX\endcsname]
+\endexample
+\enddesc
+
+\begindesc
+\cts noexpand {\<token>}
+\explain
+This command tells \TeX\ to
+suppress expansion of \<token> if \<token> is a
+\minref{control sequence} that can be expanded.
+If \<token> can't be expanded, e.g., it's a letter,
+\TeX\ acts as though the |\noexpand| wasn't there
+and processes \<token> normally.
+In other words the expansion of `|\noexpand|\<token>'
+is simply \<token> no matter what \<token> happens to be.
+\example
+\def\bunny{rabbit}
+\edef\magic{Pull the \noexpand\bunny\ out of the hat!! }
+% Without \noexpand, \bunny would always be replaced
+% by `rabbit'
+\let\oldbunny=\bunny \def\bunny{lagomorph} \magic
+\let\bunny=\oldbunny \magic
+|
+\produces
+\def\bunny{rabbit}
+\edef\magic{Pull the \noexpand\bunny\ out of the hat! }
+% Without \noexpand, \bunny would always be replaced
+% by `rabbit'
+\let\oldbunny=\bunny \def\bunny{lagomorph} \magic
+\let\bunny=\oldbunny \magic
+\endexample
+\enddesc
+
+\begindesc
+\cts the {\<token>}
+\explain
+This command generally expands to a list of \minref{character} tokens
+that represents \<token>. \<token> can be any of the following:
+
+\ulist\compact
+\li a \TeX\ \minref{parameter}, e.g., |\parindent| or |\deadcycles|
+^^{parameters//using \b\tt\\the\e\ with}
+\li a \minref{register}, e.g., |\count0|
+^^{registers//with \b\tt\\the\e}
+\margin{Item for special registers removed}
+\li a code associated with an input character, e.g., |\catcode`(|
+\li a font parameter, e.g., |\fontdimen3\sevenbf|
+\li the ^|\hyphenchar| or ^|\skewchar| of a font, e.g.,
+|\skewchar\teni|
+\li ^|\lastpenalty|, ^|\lastskip|, or ^|\lastkern| (values derived from
+the last item on the current horizontal \minrefs{horizontal list}
+or \minref{vertical list})
+\li a control sequence defined by ^|\chardef| or
+^|\mathchardef|
+\endulist
+
+\noindent
+In addition, |\the| can expand to noncharacter tokens in the following two
+cases:
+\ulist\compact
+\li |\the| \<font>, which expands to the most recently defined
+control sequence that selects
+the same font as the control sequence \<font>
+\li |\the| \<token variable>, which expands to a copy of the value of the
+variable, e.g., |\the\everypar|
+\endulist
+
+See \knuth{pages~214--215} for a more detailed description of what
+|\the| does in various cases.
+\example
+The vertical size is currently \the\vsize.
+The category code of `(' is \the\catcode `(.
+|
+\produces
+The vertical size is currently \the\vsize.
+The category code of `(' is \the\catcode `(.
+\endexample
+\enddesc
+
+{\tighten
+\see \headcit{Converting information to tokens}{convert},
+|\showthe| (\xref\showthe).
+\par}
+
+\eix^^{macros//controlling expansion of}
+
+%==========================================================================
+\subsection {Conditional tests}
+
+\begindesc
+\xrdef{conds}
+\bix^^{conditional tests}
+%
+\ctspecial if {\<token$_1$> \<token$_2$>}\ctsxrdef{@if}
+\explain
+{\emergencystretch=1em
+This command tests if \<token$_1$> and \<token$_2$>
+have the same \minref{character} code, independent of their
+\minref{category code}s.
+Before performing the test, \TeX\ expands tokens following the |\if|
+until it obtains two tokens that can't be expanded further.
+These two tokens become \<token$_1$> and \<token$_2$>.
+The expansion
+includes replacing a control sequence |\let| equal to a character token
+by that character token.
+A \minref{control sequence} that can't be further expanded is
+considered to have character code $256$.\par}
+\example
+\def\first{abc}
+\if\first true\else false\fi;
+% ``c'' is left over from the expansion of \first.
+% It lands in the unexecuted ``true'' part.
+\if a\first\ true\else false\fi;
+% Here ``bc'' is left over from the expansion of \first
+\if \hbox\relax true\else false\fi
+% Unexpandable control sequences test equal with ``if''
+|
+\produces
+\def\first{abc}
+\if\first true\else false\fi;
+% ``c'' is left over from the expansion of \first.
+% It lands in the unexecuted ``true'' part.
+\if a\first\ true\else false\fi;
+% Here ``bc'' is left over from the expansion of \first
+\if \hbox\relax true\else false\fi
+% Unexpandable control sequences test equal with ``if''
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifcat {\<token$_1$> \<token$_2$>}\ctsxrdef{@ifcat}
+\explain
+^^{category codes//testing}
+This command tests if \<token$_1$> and \<token$_2$>
+have the same \minref{category code}.
+Before performing the test, \TeX\ expands tokens following the |\ifcat|
+until it obtains two tokens that can't be expanded further.
+These two tokens become \<token$_1$> and \<token$_2$>.
+The expansion
+includes replacing a control sequence |\let| equal to a character token
+by that character token.
+A \minref{control sequence} that can't be further expanded is
+considered to have category code $16$.
+\example
+\ifcat axtrue\else false\fi;
+\ifcat ]}true\else false\fi;
+\ifcat \hbox\day true\else false\fi;
+\def\first{12345}
+\ifcat (\first true\else false\fi
+% ``2345'' lands in the true branch of the test
+|
+\produces
+\ifcat axtrue\else false\fi;
+\ifcat ]}true\else false\fi;
+\ifcat \hbox\day true\else false\fi;
+\def\first{12345}
+\ifcat (\first true\else false\fi
+% ``2345'' lands in the true branch of the test
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifx {\<token$_1$> \<token$_2$>}\ctsxrdef{@ifx}
+\explain
+This command tests if \<token$_1$> and \<token$_2$> agree.
+Unlike |\if| and |\ifcat|, |\ifx| does \emph{not} expand the tokens
+following |\ifx|, so \<token$_1$> and \<token$_2$> are the two
+tokens immediately after |\ifx|.
+There are three cases:
+\olist
+\li If one token is a \minref{macro} and the other one isn't,
+the tokens don't agree.
+\li If neither token is a macro, the tokens agree if:
+\olist
+\li both tokens are characters (or control sequences denoting characters) and
+their \minref{character} codes and \minref{category code}s agree, or
+\li both tokens refer to the same \TeX\ command,
+font, etc.
+\endolist
+\li If both tokens are macros, the tokens agree if:
+\olist\compact
+\li their ``first level'' expansions, i.e.,
+their replacement texts, are identical, and
+\li they have the same status with respect to ^|\long| (\xref\long)
+and ^|\outer| (\xref\outer).
+\endolist
+Note in particular that \emph{any two undefined control
+sequences agree}.
+\endolist
+\noindent
+This test is generally more useful than |\if|.
+\example
+\ifx\alice\rabbit true\else false\fi;
+% true since neither \rabbit nor \alice is defined
+\def\a{a}%
+\ifx a\a true\else false\fi;
+% false since one token is a macro and the other isn't
+\def\first{\a}\def\second{\aa}\def\aa{a}%
+\ifx \first\second true\else false\fi;
+% false since top level expansions aren't the same
+\def\third#1:{(#1)}\def\fourth#1?{(#1)}%
+\ifx\third\fourth true\else false\fi
+% false since parameter texts differ
+|
+\produces
+\ifx\alice\rabbit true\else false\fi;
+% true since neither \rabbit nor \alice is defined
+\def\a{a}%
+\ifx a\a true\else false\fi;
+% false since one token is a macro and the other isn't
+\def\first{\a}\def\second{\aa}\def\aa{a}%
+\ifx \first\second true\else false\fi;
+% false since top level expansions aren't the same
+\def\third#1:{(#1)}\def\fourth#1?{(#1)}%
+\ifx\third\fourth true\else false\fi
+% false since parameter texts differ
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifnum {\<number$_1$> \<relation> \<number$_2$>}\ctsxrdef{@ifnum}
+\explain
+^^{numbers//comparing}
+This command tests if \<number$_1$> and \<number$_2$>
+satisfy \<relation>, which must be either `|<|', `|=|', or `|>|'.
+The numbers can be constants such as |127|, count registers such as
+|\pageno| or |\count22|, or numerical parameters such as |\hbadness|.
+Before performing the test, \TeX\ expands tokens following the |\ifnum|
+until it obtains a sequence of tokens having
+the form \<number$_1$> \<relation> \<number$_2$>, followed by a token
+that can't be part of \<number$_2$>.
+\example
+\count255 = 19 \ifnum \count255 > 12 true\else false\fi
+|
+\produces
+\count255 = 19 \ifnum \count255 > 12 true\else false\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifodd {\<number>}\ctsxrdef{@ifodd}
+\explain
+^^{numbers//testing for odd/even}
+This command tests if \<number> is odd.
+Before performing the test, \TeX\ expands tokens following the |\ifodd|
+until it obtains a sequence of tokens having the form \<number>,
+followed by a token that can't be part of \<number>.
+\example
+\count255 = 19
+\ifodd 5 true\else false\fi
+|
+\produces
+\ifodd 5 true\else false\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifdim {\<dimen$_1$> \<relation> \<dimen$_2$>}\ctsxrdef{@ifdim}
+\explain
+^^{dimensions//comparing}
+This command tests if \<dimen$_1$> and \<dimen$_2$>
+satisfy \<relation>, which must be either `|<|', `|=|', or `|>|'.
+The dimensions can be constants such as |1in|, dimension registers
+such as |\dimen6|, or dimension parameters such as |\parindent|.
+Before performing the test, \TeX\ expands tokens following the |\ifdim|
+until it obtains a sequence of tokens having
+the form \<dimen$_1$> \<relation> \<dimen$_2$>, followed by a token
+that can't be part of \<dimen$_2$>.
+
+\example
+\dimen0 = 1000pt \ifdim \dimen0 > 3in true\else false\fi
+|
+\produces
+\dimen0 = 1000pt \ifdim \dimen0 > 3in true\else false\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifhmode {}\ctsxrdef{@ifhmode}
+\ctspecial ifvmode {}\ctsxrdef{@ifvmode}
+\ctspecial ifmmode {}\ctsxrdef{@ifmmode}
+\ctspecial ifinner {}\ctsxrdef{@ifinner}
+\explain
+^^{horizontal mode//testing for}
+^^{vertical mode//testing for}
+^^{math mode//testing for}
+^^{internal mode//testing for}
+These commands test what \minref{mode} \TeX\ is in:
+\ulist
+\li |\ifhmode| is true if \TeX\ is in ordinary or restricted horizontal mode.
+\li |\ifvmode| is true if \TeX\ is in ordinary or internal vertical mode.
+\li |\ifmmode| is true if \TeX\ is in text math or display math mode.
+\li |\ifinner| is true if \TeX\ is in an ``internal'' mode:
+restricted horizontal, internal vertical, or text math.
+\endulist
+\example
+\def\modes{{\bf
+ \ifhmode
+ \ifinner IH\else H\fi
+ \else\ifvmode
+ \ifinner \hbox{IV}\else \hbox{V}\fi
+ \else\ifmmode \hbox{M}\else
+ error\fi\fi\fi}}
+Formula $\modes$; then \modes,
+ \hbox{next \modes\ and \vbox{\modes}}.
+\par\modes
+|
+\produces
+\def\modes{{\bf
+ \ifhmode
+ \ifinner IH\else H\fi
+ \else\ifvmode
+ \ifinner \hbox{IV}\fi
+ \else\ifmmode \hbox{M}\else
+ error\fi\fi\fi}}
+Formula $\modes$; then \modes,
+ \hbox{next \modes\ and \vbox{\modes}}.
+\par\noindent{\bf V} % sorry folks, we have to fake this one
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifhbox {\<register>}\ctsxrdef{@ifhbox}
+\ctspecial ifvbox {\<register>}\ctsxrdef{@ifvbox}
+\ctspecial ifvoid {\<register>}\ctsxrdef{@ifvoid}
+\explain
+^^{hboxes//testing for}
+^^{vboxes//testing for}
+^^{boxes//testing if void}
+These commands test the contents of
+the box register numbered \<reg\-ister>.
+Let \<register> be $n$. Then:
+\ulist
+\li |\ifhbox| is true if |\box|$\,n$ is an \minref{hbox}.
+\li |\ifvbox| is true if |\box|$\,n$ is an \minref{vbox}.
+\li |\ifvoid| is true if |\box|$\,n$ is void, i.e, doesn't have
+a box in it.
+\endulist
+\example
+\setbox0 = \vbox{} % empty but not void
+\setbox1 = \hbox{a}
+\setbox2 = \box1 % makes box1 void
+\ifvbox0 true\else false\fi;
+\ifhbox2 true\else false\fi;
+\ifvoid1 true\else false\fi
+|
+\produces
+\setbox0 = \vbox{}
+\setbox1 = \hbox{a}
+\setbox2 = \box1 % empties box1
+\ifvbox0 true\else false\fi;
+\ifhbox2 true\else false\fi;
+\ifvoid1 true\else false\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifeof {\<number>}\ctsxrdef{@ifeof}
+\explain
+^^{end of file, testing for}
+\minrefs{file}
+This command tests an input stream for end of file.
+It is true if input stream \<number> has not been opened,
+or has been opened and the associated file has been entirely read in
+(or doesn't exist).
+\enddesc
+
+\begindesc
+\ctspecial ifcase
+{\<number>\<case$_0$ text> {\bt \\or }\<case$_1$ text> {\bt \\or}
+ $\ldots$ {\bt \\or} \<case$_n$ text>\hfil\break
+\hglue 3pc{\bt \\else} \<otherwise text> {\bt \\fi}}
+\ctsxrdef{@ifcase}
+\ctsxrdef{@or}
+\explain
+^^{case testing}
+This command introduces a test with numbered multiple cases.
+If \<num\-ber> has the value $k$, \TeX\ will expand \<case$_k$ text> if
+it exists, and \<other\-wise text> if it doesn't. You can omit the |\else|---%
+in this case, \TeX\ won't expand anything if none of the cases are satisfied.
+\example
+\def\whichday#1{\ifcase #1<day 0>\or Sunday\or Monday%
+ \or Tuesday\or Wednesday\or Thursday\or Friday%
+ \or Saturday\else Nonday\fi
+ \ is day \##1. }
+\whichday2 \whichday3 \whichday9
+|
+\produces
+\def\whichday#1{\ifcase #1<day 0>\or Sunday\or Monday%
+ \or Tuesday\or Wednesday\or Thursday\or Friday%
+ \or Saturday\else Nonday\fi
+ \ is day \##1. }
+\whichday2 \whichday3 \whichday9
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial iftrue {}\ctsxrdef{@iftrue}
+\ctspecial iffalse {}\ctsxrdef{@iffalse}
+\explain
+These commands are equivalent to tests that are always true or always
+false. The main use of these commands is in defining macros that keep
+track of the result of a test.
+\example
+\def\isbigger{\let\bigger=\iftrue}
+\def\isnotbigger{\let\bigger=\iffalse}
+% These \let's MUST be buried in macros!! If they aren't,
+% TeX erroneously tries to match them with \fi.
+\def\test#1#2{\ifnum #1>#2 \isbigger\else\isnotbigger\fi}
+\test{3}{6}
+\bigger$3>6$\else$3\le6$\fi
+|
+\produces
+\def\isbigger{\let\bigger=\iftrue}
+\def\isnotbigger{\let\bigger=\iffalse}
+% These \let's MUST be buried in macros!
+% If they aren't, TeX erroneously tries to match them with \fi
+\def\test#1#2{\ifnum #1>#2 \isbigger\else\isnotbigger\fi}
+\test{3}{6}
+\bigger$3>6$\else$3\le6$\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial else {} \ctsxrdef{@else}
+\explain
+This command introduces the ``false'' alternative of a conditional test.
+\enddesc
+
+\begindesc
+\ctspecial fi {} \ctsxrdef{@fi}
+\explain
+This command ends the text of a conditional test.
+\enddesc
+
+\begindesc
+\ctspecial newif {{\bt \\if}\<test name>}\ctsxrdef{@newif}
+\explain
+This command names a trio of control sequences with names |\alpha!-true|,
+|\alphafalse|,
+and |\ifalpha|, where |alpha| is \<test name>.
+You can use them to define your own tests by
+creating a logical variable that records
+true\slash false information:
+\ulist\compact
+\li |\alphatrue| sets the logical variable |alpha| true.
+\li |\alphafalse| sets the logical variable |alpha| false
+\li |\ifalpha| is a conditional test that is true if the logical
+variable |alpha| is true and false otherwise.
+\endulist
+The logical variable |alpha| doesn't really exist, but \TeX\ behaves as
+though it did. After |\newif\ifalpha|, the logical variable is initially
+false.
+
+|\newif| is an outer command, so you can't use it inside a macro
+definition.
+\example
+\newif\iflong \longtrue
+\iflong Rabbits have long ears.
+\else Rabbits don't have long ears.\fi
+|
+\produces
+\newif\iflong
+\longtrue
+\iflong Rabbits have long ears.\else Rabbits don't have long ears.\fi
+\endexample
+\eix^^{conditional tests}
+\enddesc
+
+
+%==========================================================================
+\subsection {Repeated actions}
+
+{\def\test{{\bt \\if}$\Omega$}%
+\begindesc
+\bix^^{repeated actions}
+\bix^^{loops}
+\cts loop {$\alpha$ {\test} $\beta$ {\bt \\repeat}}
+\ctspecial repeat {}\ctsxrdef{@repeat}
+\explain
+These commands provide a looping construct for \TeX.
+Here $\alpha$ and $\beta$ are arbitrary sequences of commands
+and \test\ is any of the conditional tests described in
+\headcit{Conditional tests}{conds}.
+The |\repeat| replaces the |\fi| corresponding to the test,
+so you must not write an explicit |\fi| to terminate the test.
+Nor, unfortunately, can you associate an |\else| with the test.
+If you want to use the test in the opposite sense, you need to
+rearrange the test or
+define an auxiliary test with |\newif| (see above) and use that
+test in the sense you want (see the second example below).
+
+\TeX\ expands |\loop| as follows:
+\olist
+\li $\alpha$ is expanded.
+\li {\test} is performed. If the result is false, the loop is terminated.
+\li $\beta$ is expanded.
+\li The cycle is repeated.
+\endolist
+\example
+\count255 = 6
+\loop
+ \number\count255\
+ \ifnum\count255 > 0
+ \advance\count255 by -1
+\repeat
+|
+\produces
+\count255 = 6
+\loop
+ \number\count255\
+ \ifnum\count255 > 0
+ \advance\count255 by -1
+\repeat
+\nextexample
+\newif\ifnotdone % \newif uses \count255 in its definition
+\count255=6
+\loop
+ \number\count255\
+ \ifnum\count255 < 1 \notdonefalse\else\notdonetrue\fi
+ \ifnotdone
+ \advance\count255 by -1
+\repeat
+|
+\produces
+\newif\ifnotdone
+\count255=6
+\loop
+ \number\count255\
+ \ifnum\count255 < 1 \notdonefalse\else\notdonetrue\fi
+ \ifnotdone
+ \advance\count255 by -1
+\repeat
+%
+\eix^^{repeated actions}
+\eix^^{loops}
+%
+\endexample
+\enddesc
+} % end scope of definition of \test
+
+%==========================================================================
+\subsection {Doing nothing}
+
+\begindesc
+\cts relax {}
+\explain
+This command tells \TeX\ to do nothing. It's useful in a context where
+you need to provide a command but there's nothing that you want \TeX\ to do.
+\example
+\def\medspace{\hskip 12pt\relax}
+% The \relax guards against the possibility that
+% The next tokens are `plus' or `minus'.
+|
+
+\endexample
+\enddesc
+
+\begindesc
+\cts empty {}
+\explain
+This command expands to no tokens at all.
+It differs from |\relax| in that it disappears after macro expansion.
+%
+\xrdef{mac2}% end the section on macros
+\eix^^{macros}
+\enddesc
+
+%==========================================================================
+\section {Registers}
+
+%==========================================================================
+\subsection {Using registers}
+
+\begindesc
+\bix^^{registers}
+\makecolumns 11/2:
+\cts count {\<register> {\bt =} \<number>}
+\cts dimen {\<register> {\bt =} \<dimen>}
+\cts skip {\<register> {\bt =} \<glue>}
+\cts muskip {\<register> {\bt =} \<muglue>}
+\cts toks {\<register> {\bt =} \<token variable>}
+\aux\cts toks {\<register> {\bt =} \rqbraces{\<token list>}}
+\aux\cts count {\<register>}
+\aux\cts dimen {\<register>}
+\aux\cts skip {\<register>}
+\aux\cts muskip {\<register>}
+\aux\cts toks {\<register>}
+\explain
+^^{assignments//of registers}
+The first six commands listed here assign something to a register.
+The |=|'s in the assignments are optional.
+The remaining five control sequences are not true commands
+because they can only appear as part of an argument.
+They yield the contents of the specified register.
+Although you can't use these control sequences by themselves as commands
+in text, you can use ^|\the| to convert them to text so that
+you can typeset their values.
+
+You can name and reserve registers
+with the ^|\newcount| command and its relatives
+(\xref{\@newcount}).
+Using these commands is a safe way to obtain registers that
+are known not to have any conflicting usage.
+
+^^{count registers}
+A |\count| register contains an integer, which can be either positive or
+negative.
+Integers can be as large as you're ever likely to need them to be.\footnote
+{Here's the only exercise in this book: find out what's the largest
+integer that \TeX\ will accept.}
+\TeX\ uses count registers $0$--$9$ to keep track of the
+page number (see \knuth{page~119}).
+|\count255| is the only count register available for use
+without a reservation.
+\example
+\count255 = 17 \number\count255
+|
+\produces
+\count255 = 17 \number\count255
+\endexample
+
+\medskip\noindent
+^^{dimension registers}
+A |\dimen| register contains a dimension.
+Registers |\dimen0| through |\dimen9| and |\dimen255| are available
+for scratch use.
+
+\example
+\dimen0 = 2.5in
+\hbox to \dimen0{$\Leftarrow$\hfil$\Rightarrow$}
+|
+\produces
+\dimen0 = 2.5in
+\hbox to \dimen0{$\Leftarrow$\hfil$\Rightarrow$}
+\doruler{\8\8\8}3{in}
+\endexample
+
+\medskip\noindent
+^^{skip registers}
+A |\skip| register contains the dimensions of glue.
+Unlike a |\dimen| register, it
+records an amount of shrink and stretch as well as a natural size.
+Registers |\skip0| through |\skip9| and |\skip255| are available
+for use without a reservation.
+
+\example
+\skip2 = 2in
+$\Rightarrow$\hskip \skip2 $\Leftarrow$
+|
+\produces
+\skip2 = 2in
+$\Rightarrow$\hskip \skip2 $\Leftarrow$\par
+\noindent\hphantom{$\Rightarrow$}\ruler{\8\8}2{in}
+\endexample
+
+\medskip\noindent
+^^{muskip registers}
+A |\muskip| register is like a |\skip| register,
+but the glue in it is always measured in ^|mu|
+\seeconcept{mathematical unit}.
+The size of a |mu| depends on the current font.
+For example, it's usually a little
+smaller in a subscript than in ordinary text.
+Registers |\muskip0| through |\muskip9| and |\muskip255| are available
+for use without a reservation.
+
+\example
+\muskip0 = 24mu % An em and a half, no stretch or shrink.
+$\mathop{a \mskip\muskip0 b}\limits^{a \mskip\muskip0 b}$
+% Note the difference in spacing.
+|
+\produces
+\muskip0 = 24mu % an em and a half
+$\mathop{a \mskip\muskip0 b}\limits^{a \mskip\muskip0 b}$
+% Note the difference in spacing
+\endexample
+
+\medskip\noindent
+^^{token registers}
+You can assign either a token variable
+(a register or a parameter) or a token list
+to a |\toks| register.
+When you assign a token list to a token register,
+the tokens in the token list are \emph{not} expanded.
+
+Once the tokens in a token list have been inserted into text
+using ^|\the|, they are
+expanded just like tokens that were read in directly.
+They have the category codes that they received when \TeX\ first
+saw them in the~\hbox{input}.
+
+\example
+\toks0 = {the \oystereaters\ were at the seashore}
+% This assignment doesn't expand \oystereaters.
+\def\oystereaters{Walrus and Carpenter}
+\toks1 = \toks0
+% the same tokens are now in \toks0 and \toks1
+Alice inquired as to whether \the\toks1.
+|
+\produces
+\toks0 = {the \oystereaters\ were at the seashore}
+% This assignment doesn't expand \oystereaters
+\def\oystereaters{Walrus and Carpenter}
+\toks1 = \toks0
+% the same tokens are now in \toks0 and \toks1
+Alice inquired as to whether \the\toks1.
+\endexample
+\enddesc
+
+\begindesc
+\cts maxdimen {}
+\explain
+^^{dimensions//maximum}
+This control sequence yields a \<dimen> that is the
+largest dimension acceptable to \TeX\ (nearly 18 feet).
+It is not a true command because it can only appear as part of an argument
+to another command.
+\example
+\maxdepth = \maxdimen % Remove restrictions on \maxdepth.
+|
+\endexample
+\enddesc
+
+\see |\advance| (\xref\advance), |\multiply|,
+|\divide| (\xref\divide), |\set!-box|, |\box| (\xref\box).
+
+%==========================================================================
+\subsection {Naming and reserving registers, etc.}
+
+\begindesc
+\bix^^{registers//reserving}
+\makecolumns 11/2:
+\ctspecial newcount \ctsxrdef{@newcount}
+\ctspecial newdimen \ctsxrdef{@newdimen}
+\ctspecial newskip \ctsxrdef{@newskip}
+\ctspecial newmuskip \ctsxrdef{@newmuskip}
+\ctspecial newtoks \ctsxrdef{@newtoks}
+\ctspecial newbox \ctsxrdef{@newbox}
+\ctspecial newread \ctsxrdef{@newread}
+\ctspecial newwrite \ctsxrdef{@newwrite}
+\ctspecial newfam \ctsxrdef{@newfam}
+\ctspecial newinsert \ctsxrdef{@newinsert}
+\ctspecial newlanguage \ctsxrdef{@newlanguage}
+\explain
+These commands
+reserve and name an entity of the indicated type:
+\ulist
+{\tolerance = 5000
+\fontdimen3\the\font = 2\fontdimen3\the\font % allow spaces to stretch more
+\li |\new!-count|, |\newdimen|, |\newskip|, |\new!-mu!-skip|, |\new!-toks|,
+and |\new!-box| each reserve a \minref{register} of the indicated type.
+}
+^^{count registers//reserved by \b\tt\\newcount\e}
+^^{dimension registers//reserved by \b\tt\\newdimen\e}
+^^{skip registers//reserved by \b\tt\\newskip\e}
+^^{muskip registers//reserved by \b\tt\\newmuskip\e}
+^^{token registers//reserved by \b\tt\\newtoks\e}
+^^{box registers//reserved by \b\tt\\newbox\e}
+\li |\newread| and |\newwrite| reserve an input stream and
+an output stream \minrefs{input stream}\minrefs{output stream}
+respectively.
+^^{input streams//reserved by \b\tt\\newread\e}
+^^{output streams//reserved by \b\tt\\newwrite\e}
+\li |\newfam| reserves a \minref{family} of math fonts.
+^^{family//reserved by \b\tt\\newfam\e}
+\li |\newinsert| reserves an insertion type.
+(Reserving an insertion type involves reserving several different registers.)
+^^{insertions//numbers reserved by \b\tt\\newinsert\e}
+\li |\newlanguage| reserves a set of hyphenation patterns.
+\endulist
+You should use these commands whenever you need one of these entities,
+other than in a very local region,
+in order to avoid numbering conflicts.
+
+There's an important difference among these commands:
+\ulist
+\li The control sequences defined by
+|\newcount|, |\newdimen|, |\newskip|, |\newmuskip|, and |\newtoks|
+each designate an entity of the appropriate type.
+For instance, after the command:
+\csdisplay
+\newdimen\listdimen
+|
+the control sequence |\listdimen| can be used as a dimension.
+\li The control sequences defined by
+|\newbox|, |\newread|, |\newwrite|, |\newfam|, |\newinsert|,
+and |\newlanguage| each
+evaluate to the \emph{number} of an entity of the appropriate type.
+For instance, after the command:
+\csdisplay
+\newbox\figbox
+|
+the control sequence |\figbox| must be used in conjunction with
+a |\box|-like command, e.g.:
+\csdisplay
+\setbox\figbox = \vbox{!dots}
+|
+\endulist
+\enddesc
+
+\begindesc
+\cts countdef {\<control sequence> {\bt =} \<register>}
+\cts dimendef {\<control sequence> {\bt =} \<register>}
+\cts skipdef {\<control sequence> {\bt =} \<register>}
+\cts muskipdef {\<control sequence> {\bt =} \<register>}
+\cts toksdef {\<control sequence> {\bt =} \<register>}
+\explain
+These commands define \<control sequence> to refer to the
+\minref{register} of the indicated category whose number is \<register>.
+Normally you should use the commands in the previous group
+(|\newcount|, etc.) in preference to these commands in order to avoid
+numbering conflicts. The commands in the previous group are
+defined in terms of the commands \hbox{in this group}.
+\example
+\countdef\hatters = 19 % \hatters now refers to \count19
+\toksdef\hares = 200 % \hares now refers to \toks200
+|
+\endexample
+\enddesc
+
+\see |\newif| (\xref{\@newif}), |\newhelp| (\xref{\@newhelp}).
+\eix^^{registers//reserving}
+
+%==========================================================================
+\subsection {Doing arithmetic in registers}
+
+\begindesc
+\bix^^{arithmetic}
+\bix^^{registers//arithmetic in}
+%
+\cts advance {\<count register> {\bt by} \<number>}
+\aux\cts advance {\<dimen register> {\bt by} \<dimen>}
+\aux\cts advance {\<skip register> {\bt by} \<glue>}
+\aux\cts advance {\<muskip register> {\bt by} \<muglue>}
+\explain
+This command adds a compatible quantity to a register. For \<glue>
+or \<muglue> all three components (natural value, stretch, and shrink)
+\minrefs{glue} are added.
+Any of the quantities can be negative. For purposes of these calculations
+(and other assignments as well), \<glue> can be converted to a
+\<dimen> by dropping the stretch and shrink, and a \<dimen> can be converted
+to a \<number> by taking its value in scaled points
+\seeconcept{dimension}.
+You can omit the word |by| in these commands---\TeX\ will understand them
+anyway.
+\example
+\count0 = 18 \advance\count0 by -1 \number\count0\par
+\skip0 = .5in \advance\skip0 by 0in plus 1in % add stretch
+\hbox to 2in{a\hskip\skip0 b}
+|
+\produces
+\count0 = 18 \advance\count0 by -1 \number\count0\par
+\skip0 = .5in \advance\skip0 by 0in plus 1in % add stretch
+\hbox to 2in{a\hskip\skip0 b}
+\doruler{\8\8}2{in}
+\endexample
+\enddesc
+
+\begindesc
+\cts multiply {\<register> {\bt by} \<number>}
+\cts divide {\<register> {\bt by} \<number>}
+\explain
+These commands multiply and divide the value in \<register>
+by \<number> (which can be negative).
+The register can be a ^|\count|, ^|\dimen|, ^|\skip|, or ^|\muskip|
+register.
+For a ^|\skip| or ^|\muskip| register (\xref\skip),
+all three components of the \minref{glue} in the register are modified.
+You can omit the word |by| in these commands---\TeX\ will understand them
+anyway.
+
+You can also obtain a multiple of a \<dimen> by preceding it by a \<number>
+\minrefs{number}
+or decimal constant, e.g.,
+|-2.5\dimen2|.
+You can also use this notation for \<glue>, but watch out---the result
+is a \<dimen>, not \<glue>.
+Thus |2\baselineskip| yields a \<dimen> that is twice the natural size
+of |\baselineskip|, with no stretch or shrink.
+\example
+\count0 = 9\multiply \count0 by 8 \number\count0 ;
+\divide \count0 by 12 \number\count0 \par
+\skip0 = 20pt plus 2pt minus 3pt \multiply \skip0 by 3
+Multiplied value of skip0 is \the\skip0.\par
+\dimen0 = .5in \multiply\dimen0 by 6
+\hbox to \dimen0{a\hfil b}
+|
+\produces
+\count0 = 9\multiply \count0 by 8 \number\count0 ;
+\divide \count0 by 12 \number\count0 \par
+\skip0 = 20pt plus 2pt minus 3pt \multiply \skip0 by 3
+Multiplied value of skip0 is \the\skip0.\par
+\dimen0 = .5in \multiply\dimen0 by 6
+\hbox to \dimen0{a\hfil b}
+\doruler{\8\8\8}3{in}
+\endexample
+
+\eix^^{arithmetic}
+\eix^^{registers//arithmetic in}
+\eix^^{registers}
+\enddesc
+
+%==========================================================================
+\section {Ending the job}
+
+\begindesc
+^^{ending the job}
+\easy\ctspecial bye \ctsxrdef{@bye}
+\explain
+This command tells \TeX\ to fill out and produce the last page, print
+any held-over \minref{insertion}s, and end the job.
+It is the usual way to end your input file.
+\enddesc
+
+\begindesc
+\cts end {}
+\explain
+This command tells \TeX\ to produce the last page and end the job.
+It does not fill out the page, however,
+so it's usually better to use |\bye| rather than |\end|.
+\enddesc
+
+%==========================================================================
+\section {Input and output}
+
+%==========================================================================
+\subsection {Operations on input files}
+
+\begindesc
+\bix^^{files}
+\bix^^{input files}
+\easy\cts input {\<filename>}
+\explain
+\minrefs{file}\minrefs{file name}
+This command tells \TeX\ to read its input from file \<filename>.
+When that file is exhausted, \TeX\ returns to reading from its previous
+input source. You can nest input files to any level you like
+(within reason).
+
+When you're typesetting a large document, it's usually a good idea to
+structure your main file as a sequence of |\input| commands that refer
+to the subsidiary parts of the document. That way you can process the
+individual parts easily as you're working on drafts. It's also a good
+practice to put all of your \minref{macro} definitions into a separate file and
+summon that file with an |\input| command as the first action in your
+main file.
+
+\TeX\ uses different rules for scanning file names than it does for scanning
+\minref{token}s in general (see \xref{file name}).
+If your implementation expects file names to have extensions (usually
+indicated by a preceding dot), then \TeX\ provides a default extension
+of |.tex|.
+\example
+\input macros.tex
+\input chap1 % equivalent to chap1.tex
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts endinput {}
+\explain
+This command tells \TeX\ to stop reading input from the current file when it
+next reaches the end of a line.
+\enddesc
+
+\begindesc
+\cts inputlineno {}
+\explain
+This command yields a number (not a string) giving the line number of the
+current line, defined to be the number that would appear in an error message
+if an error occurred at this point.
+\enddesc
+
+\begindesc
+\cts openin {\<number> {\bt =} \<filename>}
+\explain
+This command tells \TeX\ to open the file named \<filename>
+and make it available for reading via the input stream
+designated by \<number>.
+^^{input streams//opening}
+\<number> must be between $0$ and $15$.
+Once you've opened a file and connected it to an input stream,
+you can read from the file using the |\read| command
+with the input stream's number.
+
+You can associate more than one input stream with the same
+file. You can then read from several different positions within
+the file, one for each input stream.
+
+You should allocate stream numbers for |\openin| using
+|\new!-read| (\xref{\@newread}).
+\example
+\newread\auxfile \openin\auxfile = addenda.aux
+% \auxfile now denotes the number of this opening
+% of addenda.aux.
+|
+\endexample
+\enddesc
+
+\begindesc\secondprinting{\vglue-.5\baselineskip\vskip0pt}
+\cts closein {\<number>}
+\explain
+This command tells \TeX\ to close the \minref{input stream} numbered
+\<number>, i.e.,
+end the association between the input stream and its file.
+The input stream with this number then becomes available for use with a
+different file.
+You should close an input stream once you're finished using its file.
+\example
+\closein\auxfile
+|
+\endexample
+\enddesc
+
+\begindesc\secondprinting{\vglue-.5\baselineskip\vskip0pt}
+\cts read {\<number> {\bt to} \<control sequence>}
+\explain
+^^{input streams//reading with \b\tt\\read\e}
+^^{reading a file}
+This command tells \TeX\ to read a line from the file
+associated with the \minref{input stream}
+designated by \<number> and assign the tokens on that line to
+\<control sequence>. The \minref{control sequence} then becomes a
+parameterless \minref{macro}. No macro expansion takes place
+during the reading operation. If the line contains any unmatched
+left braces, \TeX\ will read additional lines until the braces are
+all matched. If \TeX\ reaches the end of the file without matching all the
+braces, it will complain.
+
+If \<number> is greater than $15$ or hasn't been associated with a file
+using ^|\openin|, \TeX\ prompts you with `\<control sequence> |=|'
+on your terminal and waits for you to type a line of input.
+It then assigns the input line to \<control sequence>.
+If \<number> is less than zero, it reads a line of input from your
+terminal but omits the prompt.
+\example
+\read\auxfile to \holder
+% Expanding \holder will produce the line just read.
+|
+\endexample
+\eix^^{input files}
+\enddesc
+
+\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+\subsection {Operations on output files}
+
+\bix^^{output files}
+\begindesc
+\cts openout {\<number> {\bt =} \<filename>}
+\explain
+^^{output streams//opening}
+This command tells \TeX\ to open the file named \<filename>
+and make it available for writing via the \minref{output stream}
+designated by \<number>.
+\<number> must be between $0$ and $15$.
+Once you've opened a file and connected it to an output stream,
+you can write to the file using the |\write| command
+with the output stream's number.
+
+An |\openout| generates a whatsit that becomes part of a box.
+The |\openout| does not take effect until \TeX\ ships out that box
+to the \dvifile,
+unless you've preceded the |\openout| with ^|\immediate|.
+
+\TeX\ won't complain if you associate more than one output stream with the
+same file, but you'll get garbage in the file if you try it!
+
+You should allocate stream numbers for |\openout| using
+|\newwrite| (\xref{\@newwrite}).
+\example
+\newwrite\auxfile \openout\auxfile = addenda.aux
+% \auxfile now denotes the number of this opening
+% of addenda.aux.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts closeout {\<number>}
+\explain
+^^{output streams//closing}
+This command tells \TeX\ to close the \minref{output stream} numbered
+\<number>. i.e.,
+end the association between the output stream and its file.
+The output stream with this number then becomes available for use with a
+different file.
+You should close an output stream once you're finished using its file.
+
+A |\closeout| generates a whatsit that becomes part of a box.
+The |\closeout| does not take effect until \TeX\ ships out that box
+to the \dvifile,
+unless you've preceded the |\closeout| with ^|\immediate|.
+\example
+\closeout\auxfile
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts write {\<number> \rqbraces{\<token list>}}
+\explain
+^^{output streams//writing}
+^^{writing a file}
+This command tells \TeX\ to write \<token list> to the file
+associated with the \minref{output stream}
+designated by \<number>.
+It generates a whatsit that becomes part of a box.
+The actual writing does not take place until \TeX\ ships out that box
+to the \dvifile,
+unless you've preceded the |\write| with ^|\immediate|.
+
+For a |\write| that is not immediate, \TeX\ does not expand macros in
+\<token list> until the token list is actually written to the file.
+The macro expansions follow the same rules as |\edef| (\xref\edef).
+In particular, any control sequence that is not
+the name of a macro is written as
+^|\escapechar| followed by the control sequence name
+and a space. Any `|#|' tokens
+in \<token list> are doubled, i.e., written as `|##|'.
+
+If \<number> is not in the range from $0$ to $15$, \TeX\ writes
+\<token list> to the log file.
+^^{log file//written by \b\tt\\write\e}
+If \<number> is greater than $15$ or isn't associated with an output
+stream, \TeX\ also writes \<token list> to the terminal.
+\example
+\def\aa{a a}
+\write\auxfile{\hbox{$x#y$} \aa}
+% Writes the string `\hbox {$x##y$} a a' to \auxfile.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts immediate {}
+\explain
+This command should precede an |\openout|, |\closeout|, or |\write|.
+^^|\write//with {\tt\\immediate}|
+^^|\openout//with {\tt\\immediate}|
+^^|\closeout//with {\tt\\immediate}|
+It tells \TeX\ to perform the specified file operation without delay.
+\example
+\immediate\write 16{I'm stuck!!}
+% has the same effect as \message
+|
+\endexample\enddesc
+
+\begindesc
+\cts special {\rqbraces{\<token list>}}
+\explain
+This command tells \TeX\ to
+write \<token list> directly to the \dvifile\ when it next
+ships out a page.
+A typical use of |\special| would be to tell the device driver to incorporate
+the contents of a named graphics file into the output page.
+^^{device drivers//instructions from \b\tt\\special\e}
+The |\special| command produces a whatsit that associates
+\<token list> with a particular position on the page, namely,
+the position that a zero-size box would have had if such a box
+had appeared instead of the |\special| command.
+Any use you might make of |\special| depends strictly on
+the ^{device drivers} that you have available.
+\example
+\special{graphic expic}
+% Display the graphics file `expic' here.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts newlinechar {\param{number}}
+\explain
+This parameter contains a character that indicates a new line on
+output. When \TeX\ encounters this character
+while reading the argument of
+a |\write|, |\message|, or
+|\errmessage| command, it starts a new line.
+If |\newlinechar| is not in the range $0$--$255$,
+there is no character that indicates
+a new line on output.
+\PlainTeX\ sets |\newlinechar| to $-1$.
+\example
+\newlinechar = `\^^J
+\message{This message appears^^Jon two lines.}
+|
+\logproduces
+This message appears
+on two lines.
+|
+\endexample
+\enddesc
+
+\see |\newread|, |\newwrite| (\xref{\@newwrite}).
+\eix^^{files}
+\eix^^{output files}
+
+%==========================================================================
+\subsection {Interpreting input characters}
+
+\begindesc
+\cts catcode {\<charcode> \tblentry{number}}
+\explain
+^^{category codes//in \b\tt\\catcode\e\ table}
+This table entry contains the \minref{category code} of the character
+whose \ascii\ code is \<charcode>.
+The category codes are listed on \xrefpg{catcodes}.
+By changing the category code of a character you can get \TeX\ to treat
+that character differently.
+\example
+\catcode `\[ = 1 \catcode `\] = 2
+% Make [ and ] act like left and right braces.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts active {}
+\explain
+This command contains the
+category code for an active character, namely, the number $13$.
+\example
+\catcode `\@ = \active % Make @ an active character.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts mathcode {\<charcode> \tblentry{number}}
+\explain
+This table entry contains the \minref{mathcode} of the character
+whose \ascii\ code is \<charcode> \seeconcept{mathcode}.
+The mathcode specifies that character's interpretation in math mode.
+\example
+\mathcode\> = "313E % as in plain TeX
+% The > character has class 3 (relation), family 1 (math
+% italic), and character code "3E
+|
+\endexample
+\enddesc
+
+\begindesc
+\margin{{\tt\\delcode} was explained in two places. This explanation
+combines them. (The other place was in the math section.)}
+\cts delcode {\<charcode>\tblentry{number}}
+\explain
+^^{delimiter codes}
+This table entry specifies the \minref{delimiter} code for the input character
+whose \ascii\ code is \<charcode>.
+The delimiter code tells \TeX\ how to find the best output character to use
+for typesetting the indicated input character as a delimiter.
+
+\<number> is normally written in hexadecimal notation.
+Suppose that \<number> is the hexadecimal number $s_1s_2s_3\,
+l_1l_2l_3$. Then when the character is used as a delimiter,
+\TeX\ takes the character to have small variant
+$s_1s_2s_3$ and large variant $l_1l_2l_3$. Here $s_1s_2s_3$ indicates
+the math character found in position $s_2s_3$ of family $s_1$, and
+similarly for $l_1l_2l_3$. This is the same convention as the one
+used for ^|\mathcode| (\xref \mathcode),
+except that |\mathcode| also specifies a class.
+\example
+\delcode `( = "028300 % As in plain TeX.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts endlinechar {\param{number}}
+\explain
+This parameter
+contains the character code for the character that
+\TeX\ appends to the end of each input line.
+^^{input lines}
+A value not in the range $0$--$255$
+indicates that no character should be appended.
+\PlainTeX\ leaves |\end!-line!-char| at
+|`\^^M| (the {\ascii} code for \asciichar{return}).
+\enddesc
+
+\begindesc
+\cts ignorespaces {}
+\explain
+This command tells \TeX\ to read and expand tokens until it finds one that
+is not a space \minref{token}, ignoring any space tokens
+that it finds on the way.
+|\ignorespaces| is often useful at the end of a \minref{macro} as a way
+of making the macro insensitive to any spaces or ends of line
+that might follow calls on it.
+(An empty line after |\ignorespaces| still produces a |\par| token,
+however.)
+\example
+\def\aa#1{yes #1\ignorespaces}
+\aa{may}
+be
+|
+\produces
+\def\aa#1{yes #1\ignorespaces}
+\aa{may}
+be
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Controlling interaction with \TeX}
+
+\begindesc
+\bix^^{controlling \TeX}
+\bix^^{running \TeX}
+\cts errorstopmode {}
+\explain
+This command tells \TeX\
+to stop for interaction whenever it finds an error.
+This is the normal mode of operation.
+\enddesc
+
+\begindesc
+\cts scrollmode {}
+\explain
+This command tells \TeX\
+not to stop for most errors,
+but to continue displaying the error messages on your terminal.
+Typing `|S|' or `|s|' in response to an error message puts you
+into scroll mode.
+\enddesc
+
+\begindesc
+\cts nonstopmode {}
+\explain
+This command tells \TeX\
+not to stop for errors, even those pertaining to files that
+it can't find, but to continue displaying the error messages on your terminal.
+Typing `|R|' or `|r|' in response to an error message puts you
+into nonstop mode.
+\enddesc
+
+\begindesc
+\cts batchmode {}
+\explain
+This command tells \TeX\
+not to stop for errors and to suppress all further output to your terminal.
+Typing `|Q|' or `|q|' in response to an error message puts you
+into batch mode.
+\enddesc
+
+\begindesc
+\cts pausing {\param{number}}
+\explain
+If this parameter is greater than zero, \TeX\ will pause
+at each line of input to give you an opportunity to
+replace it with a different line. If you type in a replacement,
+\TeX\ will use that line instead of the original one; if you respond
+with \asciichar{return}, \TeX\ will use the original line.
+
+Setting |\pausing| to $1$ can be useful as a way of patching a document as
+\TeX\ is processing it. For example,
+you can use this facility to insert ^|\show| commands (see below).
+\eix^^{running \TeX}
+\eix^^{controlling \TeX}
+\enddesc
+
+%==========================================================================
+\section {Diagnostic aids}
+
+\subsection{Displaying internal data}
+
+\begindesc
+\bix^^{tracing}
+\bix^^{debugging}
+\bix^^{diagnostic aids}
+\cts show {\<token>}
+\cts showthe {\<argument>}
+\cts showbox {\<number>}
+\cts showlists {}
+\explain
+These commands record information in the log of your \TeX\ run:
+\ulist
+\li |\show| records the meaning of \<token>.\minrefs{token}
+^^{tokens//displayed by \b\tt\\show\e}
+\li |\showthe| records
+ whatever tokens would be produced by
+|\the| \<arg\-u\-ment> (see \xref \the).
+\li |\showbox| records the contents of the \minref{box}
+\minref{register} numbered \<num\-ber>.
+The number of
+leading dots in the log indicates the number of
+levels of nesting of inner boxes.
+\li |\showlists| records
+the contents of each list that \TeX\ is currently constructing.
+(These lists are nested one within another.)
+See \knuth{pages~88--89} for further information about interpreting
+the output of |\showlists|.
+\endulist
+For |\show| and |\showthe|, \TeX\ also displays the information at your
+^{terminal}.
+For |\showbox| and |\showlists|, \TeX\ displays the information at your
+terminal only
+if ^|\tracingonline| (\xref \tracingonline) is greater than zero;
+if ^|\tracingonline| is zero or less (the default case),
+the information is not displayed.
+
+Whenever \TeX\ encounters a |\show|-type command it
+stops for interaction. The request for interaction does \emph{not}
+indicate an error, but it does give you an opportunity to ask \TeX\ to
+show you something else. If you don't want to see anything else, just
+press \asciichar{return}.
+
+You can control the amount of output produced by |\showbox| by setting
+|\show!-box!-breadth| and |\show!-box!-depth| (\xref\showboxbreadth).
+^^|\showboxbreadth| ^^|\showboxdepth|
+These parameters respectively have default values of $5$
+and $3$, which is why
+just five items appear for each box described
+in the log output below. (The `|..etc.|' indicates additional items
+within the boxes that aren't displayed.)
+\example
+\show a
+\show \hbox
+\show \medskip
+\show &
+|
+\logproduces
+> the letter a.
+> \hbox=\hbox.
+> \medskip=macro:
+->\vskip \medskipamount .
+> alignment tab character &.
+|
+\nextexample
+\showthe\medskipamount
+\toks27={\hbox{Joe's\quad\ Diner}}
+\showthe\toks27
+|
+\logproduces
+> 6.0pt plus 2.0pt minus 2.0pt.
+> \hbox {Joe's\quad \ Diner}.
+|
+\nextexample
+\setbox 3=\vbox{\hbox{A red dog.}\hrule A black cat.}
+\showbox 3
+|
+\logproduces
+> \box3=
+\vbox(16.23332+0.0)x53.05565
+.\hbox(6.94444+1.94444)x46.41675
+..\tenrm A
+..\glue 3.33333 plus 1.66498 minus 1.11221
+..\tenrm r
+..\tenrm e
+..\tenrm d
+..etc.
+.\rule(0.4+0.0)x*
+.\hbox(6.94444+0.0)x53.05565
+..\tenrm A
+..\glue 3.33333 plus 1.66498 minus 1.11221
+..\tenrm b
+..\tenrm l
+..\tenrm a
+..etc.
+|
+\endexample
+\vfil\eject
+\example
+\vbox{A \hbox
+ {formula
+ $x \over y\showlists$}}
+|
+\logproduces
+### math mode entered at line 3
+\mathord
+.\fam1 y
+this will be denominator of:
+\fraction, thickness = default
+\\mathord
+\.\fam1 x
+### restricted horizontal mode entered at line 2
+\tenrm f
+\tenrm o
+\tenrm r
+\tenrm m
+\kern-0.27779
+\tenrm u
+\tenrm l
+\tenrm a
+\glue 3.33333 plus 1.66666 minus 1.11111
+spacefactor 1000
+### horizontal mode entered at line 1
+\hbox(0.0+0.0)x20.0
+\tenrm A
+\glue 3.33333 plus 1.66498 minus 1.11221
+spacefactor 999
+### internal vertical mode entered at line 1
+prevdepth ignored
+### vertical mode entered at line 0
+prevdepth ignored
+|
+\endexample
+\enddesc
+
+\see |\showboxbreadth|, |\showboxdepth| \ctsref\showboxbreadth.
+
+\subsection{Specifying what is traced}
+
+\begindesc
+\cts tracingonline {\param{number}}
+\explain
+If this parameter is greater than zero,
+\TeX\ will display the results of tracing
+(including ^|\showbox| and ^|\showlists|)
+at your terminal in addition to recording them in the log file.
+\enddesc
+
+\begindesc
+\cts tracingcommands {\param{number}}
+\explain
+If this parameter is $1$ or greater,
+\TeX\ will record in the log file most commands that it executes.
+If ^|\tracingonline| is greater than zero, this information will also appear
+at your terminal.
+Typesetting the first character of a word counts as a command,
+but (for the purposes of the trace only)
+the actions of typesetting the subsequent characters
+and any punctuation following them
+do not count as commands.
+If |\tracingcommands| is $2$ or greater,
+\TeX\ will also record commands that are expanded
+rather than executed, e.g., conditional tests and their outcomes.
+\example
+\tracingcommands = 1 If $x+y>0$ we quit.\par
+On the other hand, \tracingcommands = 0
+|
+\logproduces
+{vertical mode: the letter I}
+{horizontal mode: the letter I}
+{blank space }
+{math shift character $}
+{math mode: the letter x}
+{the character +}
+{the letter y}
+{the character >}
+{the character 0}
+{math shift character $}
+{horizontal mode: blank space }
+{the letter w}
+{blank space }
+{the letter q}
+{blank space }
+{\par}
+{vertical mode: the letter O}
+{horizontal mode: the letter O}
+{blank space }
+{the letter t}
+{blank space }
+{the letter o}
+{blank space }
+{the letter h}
+{blank space }
+{\tracingcommands}
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts tracinglostchars {\param{number}}
+\explain
+If this parameter is greater than zero,
+\TeX\ will record an indication in the log file of each time
+that it drops an output character because that character does not exist
+in the current font.
+If ^|\tracingonline| is greater than zero, this information will also appear
+at your terminal.
+\PlainTeX\ defaults it to $1$ (unlike the others).
+\example
+\tracinglostchars = 1
+A {\nullfont few} characters.
+|
+\logproduces
+Missing character: There is no f in font nullfont!!
+Missing character: There is no e in font nullfont!!
+Missing character: There is no w in font nullfont!!
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts tracingmacros {\param{number}}
+\explain
+If this parameter is $1$ or greater,
+\TeX\ will record in the log file the expansion and arguments
+of every macro that it executes.
+^^{macros//tracing}
+If |\tracingmacros| is $2$ or greater,
+\TeX\ will record, in addition,
+every expansion of a \minref{token} list such as
+|\output| or |\everycr|.
+If ^|\tracingonline| is greater than zero, this information will also appear
+at your terminal.
+\example
+\def\a{first \b, then \c}
+\def\b{b} \def\c{c}
+\tracingmacros = 2
+Call \a once.
+|
+\logproduces
+\a ->first \b , then \c
+
+\b ->b
+
+\c ->c
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts tracingoutput {\param{number}}
+\explain
+If this parameter is greater than zero,
+\TeX\ will record in the log file the contents of every box that
+it sends to the \dvifile.
+^^{\dvifile//boxes recorded in log file}
+If ^|\tracingonline| is greater than zero, this information will also appear
+at your terminal.
+The number of leading dots in each line of the trace output indicates
+the nesting level of the box at that line.
+You can control the amount of tracing by setting
+^|\showboxbreadth| and ^|\showboxdepth| (\xref\showboxbreadth).
+
+Setting |\tracingoutput| to $1$ can be particularly helpful when you're trying
+to determine why you've gotten ^{extra space} on a page.
+
+\example
+% This is the entire file.
+\tracingoutput = 1 \nopagenumbers
+One-line page. \bye
+|
+\logproduces
+Completed box being shipped out [1]
+\vbox(667.20255+0.0)x469.75499
+.\vbox(0.0+0.0)x469.75499, glue set 13.99998fil
+..\glue -22.5
+..\hbox(8.5+0.0)x469.75499, glue set 469.75499fil
+...\vbox(8.5+0.0)x0.0
+...\glue 0.0 plus 1.0fil
+..\glue 0.0 plus 1.0fil minus 1.0fil
+.\vbox(643.20255+0.0)x469.75499, glue set 631.2581fill
+..\glue(\topskip) 3.05556
+..\hbox(6.94444+1.94444)x469.75499, glue set 386.9771fil
+...\hbox(0.0+0.0)x20.0
+...\tenrm O
+...\tenrm n
+...\tenrm e
+...\tenrm -
+...etc.
+..\glue 0.0 plus 1.0fil
+..\glue 0.0 plus 1.0fill
+.\glue(\baselineskip) 24.0
+.\hbox(0.0+0.0)x469.75499, glue set 469.75499fil
+..\glue 0.0 plus 1.0fil
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts tracingpages {\param{number}}
+\explain
+If this parameter is greater than zero,
+\TeX\ will record in the log file its calculations of the cost of
+various page breaks that it tries.
+^^{page breaks//tracing}
+If |\tracing!-online| ^^|\tracingonline|
+is greater than zero, this information will also appear
+at your terminal.
+\TeX\ produces a line of this output
+whenever it first places a box or \minref{insertion}
+on the current page list, and also whenever it processes a potential
+break point for the page.
+Examining this output can be helpful when you're trying to determine
+the cause of a bad page break.
+See \knuth{pages~112--114} for an illustration and explanation of
+this output.
+
+Some production forms of \TeX\ ignore the value of |\tracingpages|
+so that they can run faster.
+If you need to use this parameter, be sure to use a form that
+responds to it.
+\enddesc
+
+\begindesc
+\cts tracingparagraphs {\param{number}}
+\explain
+If this parameter is greater than zero,
+\TeX\ will record in the log file its calculations of the cost of
+various line breaks that it tries.
+^^{line breaking//tracing}
+If ^|\tracingonline| is greater than zero, this information will also appear
+at your terminal.
+\TeX\ produces this output when it reaches the end of each paragraph.
+See \knuth{pages~98--99} for an illustration and explanation of
+this output.
+
+Some production forms of \TeX\ ignore the value of |\tracing!-para!-graphs|
+so that they can run faster.
+If you need to use this parameter, be sure to use a form that
+responds to it.
+\enddesc
+
+\begindesc
+\cts tracingrestores {\param{number}}
+\explain
+If this parameter is greater than zero,
+\TeX\ will record in the log file
+the values that it restores when it encounters the end of a \minref{group}.
+If ^|\tracingonline| is greater than zero, this information will also appear
+at your terminal.
+
+Some production forms of \TeX\ ignore the value of |\tracing!-restores|
+so that they can run faster.
+If you need to use this parameter, be sure to use a form that
+responds to it.
+\enddesc
+
+\begindesc
+\cts tracingstats {\param{number}}
+\explain
+If this parameter is $1$ or greater, \TeX\ will
+include a report on the resources that it used to run your job
+(see \knuth{page~300} for a list and explanation of these resources).
+Moreover, if |\tracingstats| is $2$ or greater,
+\TeX\ will report on its memory usage whenever it does a
+^|\shipout| (\xref \shipout) for a page.
+The report appears at the end of the log file.
+^^{log file//tracing statistics in}
+If ^|\tracingonline| is greater than zero, the information will also appear
+at your terminal.
+If you're having trouble with \TeX\ exceeding one of its
+capacities, the information provided by |\tracingstats| may help you
+pinpoint the cause of the difficulty.
+
+Some production forms of \TeX\ ignore the value of |\tracingstats|
+so that they can run faster.
+If you need to use this parameter, be sure to use a form that
+responds to it.
+
+The following example shows a sample of
+the tracing output you'd get on one implementation
+of \TeX. It may be different on other implementations.
+{\codefuzz = 1in
+\example
+\tracingstats=1
+|
+\logproduces
+Here is how much of TeX's memory you used:
+ 4 strings out of 5540
+ 60 string characters out of 72328
+ 5956 words of memory out of 262141
+ 921 multiletter control sequences out of 9500
+ 14794 words of font info for 50 fonts, out of 72000 for 255
+ 14 hyphenation exceptions out of 607
+ 7i,4n,1p,68b,22s stack positions out of 300i,40n,60p,3000b,4000s
+|
+\endexample
+}% end scope of codefuzz
+\enddesc
+
+\begindesc
+\cts tracingall {}
+\explain
+This command tells \TeX\ to
+turn on every available form of tracing.
+It also sets ^|\tracingonline| to $1$ so that the trace output will appear
+at your terminal.
+\enddesc
+
+\begindesc
+\cts showboxbreadth {\param{number}}
+\explain
+This parameter specifies the maximum number of list items
+that \TeX\ displays for one level of one box when it is producing
+the output for ^|\showbox| or ^|\tracingoutput|.
+\PlainTeX\ sets |\showboxbreadth| to $5$.
+\enddesc
+
+\begindesc
+\cts showboxdepth {\param{number}}
+\explain
+This parameter specifies the
+level of the deepest list that \TeX\ displays when
+it is producing the output for ^|\showbox| or ^|\showlists|.
+\PlainTeX\ sets |\showboxdepth| is $3$.
+\eix^^{tracing}
+\eix^^{debugging}
+\eix^^{diagnostic aids}
+\enddesc
+
+%==========================================================================
+\subsection {Sending messages}
+
+\begindesc
+\bix^^{messages, sending}
+\bix^^{error messages}
+\cts message {\rqbraces{\<token list>}}
+\cts errmessage {\rqbraces{\<token list>}}
+\explain
+These commands display the message given by \<token list> on your
+terminal and also enter it into the log. Any \minref{macro}s in the
+message are expanded, but no commands are executed. This is the same rule
+that \TeX\ uses for |\edef| (\xref \edef).
+
+For |\errmessage|, \TeX\ pauses
+in the same way that it does for one of its own error messages
+and displays the |\errhelp| tokens if you ask for help.
+
+You can generate multiline messages by using the ^|\newlinechar|
+character (\xref \newlinechar).
+\example
+\message{Starting a new section.}
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts wlog {\rqbraces{\<token list>}}
+\explain
+This command writes \<token list> on the log file.
+^^{log file//written by \b\tt\\wlog\e}
+\minrefs{log file}
+\TeX\ expands \<token list> according to the same rules that it uses
+for |\edef| (\xref\edef).
+\example
+\wlog{Take two aspirins and call me in the morning.}
+|
+\logproduces
+Take two aspirins and call me in the morning.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts errhelp {\param{token list}}
+\explain
+This parameter contains the token list that \TeX\ displays
+when you ask for help in response to an |\errmessage| command.
+We recommend that when
+you're generating an error message with |\errmessage|, you
+set |\errhelp| to a string that describes the nature of the
+error and use |\newhelp| to produce that string.
+You can use the ^|\newlinechar| character to produce multiline messages.
+\enddesc
+
+\begindesc
+\ctspecial newhelp \ctsxrdef{@newhelp} {\<control sequence>
+ \rqbraces{\<help text>}}
+\explain
+This command assigns the ^{help message} given by \<help text> to
+\<control sequence>. It provides an efficient way of defining
+the ^{help text} that further explains an error message.
+Before issuing the error message with the |\errmessage| command,
+you should assign \<control sequence> to ^|\errhelp|. The help text
+will then appear if the user types `|H|'
+or `|h|' in response to the error message.
+\example
+\newhelp\pain{Your input includes a token that I find^^J
+ to be offensive. Don't bother me again with this^^J
+ document until you've removed it.}
+\errhelp = \pain \newlinechar = `\^^J
+% ^^J will start a new line
+\errmessage{I do not appreciate receiving this token}
+|
+\logproduces
+!! I do not appreciate receiving this token.
+l.8 ...t appreciate receiving this token.}
+
+? H
+\Your input includes a token that I find
+ to be offensive. Don't bother me again with this
+ document until you've removed it.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts errorcontextlines {\param{number}}
+\explain
+This parameter determines the number of pairs of context lines,
+not counting the top and bottom pairs, that \TeX\ prints when it
+encounters an error. By setting it to $0$ you can get rid of long
+error messages.
+You can still force out the full context by typing something like:
+\csdisplay
+I\errorcontextlines=100\oops
+|
+in response to an error,
+since the undefined control sequence |\oops| will cause another error.
+\PlainTeX\ sets |\error!-context!-lines| to $5$.
+\enddesc
+
+\see |\write| (\xref \write), |\escapechar| (\xref \escapechar).
+\eix^^{messages, sending}
+\eix^^{error messages}
+
+%==========================================================================
+\section {Initializing \TeX}
+
+\begindesc
+\cts dump {}
+\explain
+This command, which must not appear inside a group, dumps the
+contents of \TeX's memory
+to a ^{format file} (\xref{format file}).
+By using ^|virtex|, a special ``virgin'' form of \TeX,
+you can then reload the format file at high speed and
+continue in the same state that \TeX\ was in at the time of the dump.
+|\dump| also ends the run. Since |\dump| can only be used
+in ^|initex|, not in production forms of \TeX, it is only useful
+to people who are installing \TeX.
+\enddesc
+
+\begindesc
+\cts everyjob {\param{token list}}
+\explain
+This parameter contains a \minref{token} list that \TeX\ expands at the
+start of every job. Because an assignment to |\everyjob| cannot affect
+the current run (by the time you've done the assignment it's already too
+late), it is only useful to people who are preparing format files.
+\enddesc
+
+
+\enddescriptions \endchapter \byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/index.tex b/Master/texmf-dist/doc/plain/impatient/index.tex
new file mode 100644
index 00000000000..54e2e04b384
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/index.tex
@@ -0,0 +1,39 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter{Index}
+
+\par
+\kern-\baselineskip
+
+\noindent In the entries of this index, a page number in italics
+indicates a principal or defining entry.
+
+\par
+% Let's try to collect indexing cross-references here.
+%
+\idxsee{diacritical marks}{accents}
+\idxsee{drawing lines}{rules}
+\idxsee{drivers}{device drivers}
+\idxsee{eyes}{\anatomy}
+\idxsee{foreign languages}{European languages}
+\idxsee{intestines}{\anatomy}
+\idxsee{mouth}{\anatomy}
+\idxsee{page footers}{footers}
+\idxsee{page headers}{headers}
+\idxsee{paragraphs//indenting}{indentation}
+\idxsee{recursive macros}{macros, recursive}
+\idxsee{stomach}{\anatomy}
+\idxsee{tables}{alignments}
+\beginindex
+
+\let\+ = 0 % This can't occur in a macro...
+
+\input book.sdx
+
+\endindex
+
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/index1.icn b/Master/texmf-dist/doc/plain/impatient/index1.icn
new file mode 100644
index 00000000000..29cc4a6ed61
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/index1.icn
@@ -0,0 +1,90 @@
+# This Icon program carries out the first phase of preparing the index for
+# TeX for the Impatient. The input is the .idx file produced by TeX using
+# our macros. The output should be piped through a sort and then to the
+# index2 program.
+#
+# This program was written by Paul Abrahams and is public domain.
+#
+# An index entry has the form:
+# term::type::page suffix
+# where `term' is the index term, `type' is T, N, or C,
+# `page' is either a folio number or *s, where s is a see-string,
+# and `suffix' is either empty or P, E, B, PE, or PB.
+# P indicates a principal entry, B and E begin and end a page range.
+
+
+global printable, specials
+record index_item(term, type, pages)
+record pgrec(number, pflag)
+
+procedure main(a)
+ local idx, fn, entry
+ fn := a[1]
+ printable := &ascii[33:-1]
+ specials := string(printable -- (&ucase ++ &lcase ++ &digits))
+ every entry := !&input do
+ write(key(entry), "@@@", entry)
+ write(&errout, "First indexing pass is complete.")
+ return
+end
+
+procedure key(entry)
+ local symb, symb1, type, page
+ static collate, hi, sortsequence
+ initial {
+ collate := specials || &ucase || &digits
+ sortsequence := printable -- &lcase
+ hi := repl(char(128), 26)
+ }
+ entry ? (symb := tab(find("::")), move(2), type := move(1),
+ move(2), page := tab(many('-0123456789*')))
+ symb := remove_leading_specials(symb)
+ symb1 := map(symb, &lcase, &ucase)
+ return map(map_term(symb1, type), collate, sortsequence) ||
+ map(symb, &ucase, hi) || char(1) || page_key(page)
+end
+
+procedure remove_leading_specials(s)
+# remove leading period, backslash, or less-than
+ local a, b, c, k
+ static kills
+ initial {kills := '\\.<'}
+
+# a one-character special is left unchanged
+ c := s[1:upto("//", s) | 0]
+ if *c = 1 & any(kills, c) then
+ return s
+
+ k := 1
+ while s ? (a := tab(k), b:= tab(upto(kills)),
+ tab(many(kills)), c := tab(0)) do
+ {s := a || b || c; k +:= *b}
+ return s
+end
+
+procedure map_term(t, c)
+# t is an index term, c is "N", "T", or "C"
+# Encode NTC as char(1), char(2), char(3)
+# Replace each // by the NTC code, then follow t by the NTC code and 1
+ local code
+
+ code := char(find(c, "NTC") | 4)
+ while t[find("//", t)+:2] := code
+ return t || code || char(1)
+end
+
+procedure page_key(p)
+# convert p, which may be negative, to a character string key
+# Negative numbers must sort with the smallest closest to 0.
+# A see-string always starts with *; we replace the * with ~
+# so that see references always come last. (They are usually unique.)
+ if p == "*" then
+ return "~"
+ p := integer(p)
+ return (
+ if p < 0 then
+ "-" || right(-p, 4, "0")
+ else
+ right(p, 5, 0)
+ )
+end
diff --git a/Master/texmf-dist/doc/plain/impatient/index2.icn b/Master/texmf-dist/doc/plain/impatient/index2.icn
new file mode 100644
index 00000000000..19913c42880
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/index2.icn
@@ -0,0 +1,239 @@
+# This Icon program is the second pass of the indexing process for TeX for the
+# Impatient. It must be preceded by index1 and by a sort of the intermediate
+# file.
+
+# This program was written by Paul Abrahams and is public domain.
+
+record topic_entry(term, type, groupchar, pages, level)
+record pgrec(number, flags)
+record term_list_record(term_list, start)
+procedure main(a)
+ local gen, pages, term, topic
+ local groupchar
+
+ write(&errout, "Second indexing pass has started.")
+
+# Each pass through this loop produces the entry for a single topic
+# or subtopic, including both the text of the topic and its pages.
+
+ every topic := get_topic_info() do {
+
+# If we're starting a new group (initial character), produce the macro
+# for it.
+ if topic.level = 1 then { # only primary topics affect the group
+ if not(\groupchar == topic.groupchar) then
+ write("\\indexgroup ", groupchar := topic.groupchar)
+ }
+ else
+ topic.type := "N" # subtopics are always printed normally
+
+# Write the index term
+ writes("\\indexentry {", topic.level - 1, "}{",
+ edit_term(topic.term), "}{", topic.type, "}{")
+
+# Write the list of pages
+ write(edit_pages(topic.pages, topic.term), "}")
+ }
+end
+
+procedure get_topic_info()
+ local page, type, full_term, flags # info in an index item
+ local term # the index term to be printed (part of full_term)
+ local item_text # holds an input item to be parsed
+ local topic # the topic we're now working on
+ local term_list_info # returned term_list_record from get_term_list
+ local term_list # list of index terms extracted from the input item
+ local first # position of first thing in term_list to print
+ local t # loop variable
+ local term1 # first term in full_term, usually the only one
+
+ term_list := []
+
+# At the start of each pass through this loop, `topic' contains the text of
+# the index topic most recently seen together with the pages seen so far for
+# that index topic.
+
+ every !&input ? (tab(find("@@@")\1), move(3), item_text := tab(0)) do {
+
+# Dissect the original index item, discarding the key
+
+ item_text ? (full_term := tab(find("::")), move(2),
+ type := tab(find("::")), move(2),
+ page := tab(many('-0123456789*')), flags := tab(0))
+# a page of * indicates a see-also
+
+ term_list_info := get_term_list(full_term, term_list)
+ term_list := term_list_info.term_list
+ if type == (\topic).type then # no change of type
+ first := term_list_info.start
+ else
+ first := 1 # change of type, so all terms are different
+ term1 := term_list[\first]
+
+# If we've finished the current topic, produce it and start the next one
+
+ if \first then {
+ suspend \topic
+ topic := topic_entry(term1, type, find_groupchar(term1), [], first)
+ every t := !term_list[first + 1:0] do {
+ suspend topic
+ topic.term := t; topic.type := "N"; topic.level +:= 1
+ } }
+ put(topic.pages,
+ if page == "*" then
+ flags # flags here is the see-also
+ else
+ pgrec(page, cset(flags)))
+ }
+ suspend topic
+ fail
+end
+
+procedure edit_term(term)
+# This procedure edits `term' into a proper argument for \indexterm
+
+ if term == " " then
+ term := "\\visiblespace"
+ else if *term = 1 then
+ term := "\\char `\\" || term
+ else if match("^^", term) then
+ term := "\\twocarets " || term[3:0]
+ else if term == "$$" then
+ term := "\\$\\$"
+# $$ is the only other 2-character sequence that has to be protected.
+ return term
+end
+
+procedure edit_pages(l, term)
+# edit_pages removes duplicate pages from the page list, produces the
+# macro call for a principal entry, and coalesces page ranges.
+# It also converts negative numbers to roman numerals.
+# Each element of l is a pgrec, except that the last (and possibly only)
+# element may be a see-also string starting with *.
+# The result is a list of strings
+ local pg, n, m, pf, see_also, pagelist
+ local l1, k
+
+# If the last element of l is a string, remove it and set it aside.
+# It's a see-also.
+ if type(l[-1]) == "string" then
+ {see_also := l[-1]; l := l[1:-1]}
+
+
+# First pass through the page list, coalescing duplicates and combining
+# their flags.
+
+ l1 := []
+ while *l > 0 do {
+ pg := pop(l); n := pg.number; pf := pg.flags
+
+# Loop over pages 2..k within a group
+
+ while n = l[1].number do
+ pf ++:= pop(l).flags
+
+ if *(pf ** 'BE') = 2 then # delete B and E if they both occur
+ pf --:= 'BE'
+ put(l1, pgrec(n, pf))
+ }
+
+# Now l1 has no duplicates and no trivial page ranges. Replace each
+# page range by a single entry, inverting the order for negative page
+# numbers since those indicate roman numerals.
+# When we're done, l1 has a list of strings rather than a list of pgrecs.
+
+ l := l1; l1 := []
+ while *l > 0 do {
+ pg := pop(l); n := pg.number; pf := pg.flags
+ if *(pf ** 'E') > 0 then {
+ every write(errfiles(), "Unmatched end of page range, page ",
+ integer(n), ", index term `", term, "'!")
+ pf --:= 'E'
+ }
+ if *(pf ** 'B') > 0 then { # beginning a page range
+ every k := 1 to *l do {
+ pf ++:= l[k].flags
+ if *(pf ** 'E') > 0 then break
+ }
+ if *(pf ** 'E') = 0 then {
+ every write(errfiles(), "Unmatched beginning of page range, page ",
+ integer(n), ", index term `", term, "'!")
+ pf := pg.flags
+ }
+ else {
+ m := l[k].number
+ if m < 0 then { # roman numerals
+ m := "\\r" || -m
+ n := "\\r" || -n
+ }
+ n := string(n || "--" || m)
+ l := l[k+ 1:0]
+ } }
+ else if n < 0 then
+ n := "\\r" || -n
+ if *(pf ** 'P') > 0 then
+ n := "\\pp{" || n || "}"
+ put(l1, n)
+ }
+
+# Now l1 is a list of page numbers and page ranges.
+# If it's empty and we have a see-also, make it a \see and return it.
+
+ if *l1 = 0 then
+ return "\\see{" || \see_also || "}" | ""
+
+# Turn l1 into a string and insert the comma commands \ic and \c
+# \ic goes at the beginning, \c between the remaining elements.
+
+ pagelist := "\\ic " || pop(l1) | ""
+ every pagelist ||:= "\\c " || !l1
+
+# Now attach the see-also to pagelist if we had one and return the result
+
+ return pagelist || ("\\seealso{" || \see_also || "}" | "")
+end
+
+procedure find_groupchar(t)
+# This procedure finds the character that heads the group containing
+# the index term `t'. We want all special characters in a single group
+# and all digits in a single group.
+# A term that begins with `\<c' or `\c' or `.c' is grouped as `c'.
+ local c
+ static printable, specials
+ initial {
+ printable := &ascii[33:-1]
+ specials := string(printable -- (&ucase ++ &lcase ++ &digits))
+ }
+
+ return map(
+ if t ? (tab(many('\\.<')), c := move(1)) then c
+ else if any(specials, t[1]) then "+"
+ else if any(&digits, t[1]) then "0"
+ else t[1] | "",
+ &lcase, &ucase)
+end
+
+procedure get_term_list(ft, tl)
+# `ft' is the full term just read in, `tl' is the current term list
+# return a record containing all the terms and the position of the first
+# one that's different from the previous full term
+ local tl1, pos, pos1, first, k
+
+ tl1 := []
+ pos := 1
+ every pos1 := (find("//", ft) | 0) do
+ {put(tl1, ft[pos:pos1]); pos := pos1 + 2}
+
+ first := &null
+ every k := 1 to *tl1 do
+ if not(tl1[k] == tl[k]) then
+ {first := k; break}
+ return term_list_record(tl1, first)
+end
+
+procedure errfiles()
+ static errf
+ initial
+ errf := open("index.err", "w")
+ suspend &errout | errf
+end
diff --git a/Master/texmf-dist/doc/plain/impatient/macros.tex b/Master/texmf-dist/doc/plain/impatient/macros.tex
new file mode 100644
index 00000000000..e3a84adac70
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/macros.tex
@@ -0,0 +1,2295 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+%
+% Macros for typesetting TeX for the Impatient.
+%
+% These macros are being distributed without any warranty whatsoever.
+% The level of commentary is that which we, the authors, found necessary
+% for our own purposes.
+%
+% ==========================================================================
+%
+% The macros use the term `chapter' for what in the book is called
+% a `section', `section' for the book's `subsection', etc. For purposes of
+% defining macros it's convenient to think of the book as divided into
+% chapters, but because of the nonsequential nature of the book we don't
+% want to tell the readers that they are reading chapters.
+
+
+% An embedded file should end with \byebye.
+%
+\begingroup
+\ifx \macsin\relax
+ % In frontm.tex, we do \input macros several times, and we still want
+ % the \byebye at the end to end the job.
+ % So we \input inside a group in frontm, and make the assignment to
+ % \endinput local.
+ \aftergroup\let\aftergroup\byebye\aftergroup\endinput
+ \aftergroup\endinput % Don't read this file again.
+\else
+ \global\let\byebye = \end
+ \global\let\macsin = \relax
+\fi
+\endgroup
+
+% This must come before config.tex.
+\input eplain
+
+% Define configuration switches and then read their values.
+%
+\newif\ifcenterpage \centerpagetrue
+\newif\ifcompletebook
+\newif\iffinal % true for the 2000dpi copy
+\newif\ifmsdos
+\newif\ifedgetabs \edgetabstrue
+\newif\ifdvi \dvitrue % true if we want a .dvi file
+
+%\xrefwarningfalse
+
+% The config file contains settings for flags, e.g.,
+% \completebookfalse
+% It can be empty as long as it exists.
+\input config
+\ifcompletebook \else\rewritetocfilefalse \fi
+\edef\tempfile{\ifmsdos g:temp \else x \fi}
+\ifx\setmodes\undefined\else\setmodes\fi % modify from command line input
+
+% Certain defaults are forced by certain others.
+%
+\iffinal \centerpagetrue \edgetabstrue\fi
+
+% Initial definitions. (These should come before \input fonts.)
+%
+\catcode`\@ = \letter % For the macro file only.
+
+% We don't want register allocation information in the log,
+% so we redefine the relevant macro from plain.tex.
+
+\def\alloc@#1#2#3#4#5{\global\advance\count1#1 by 1
+ \ch@ck#1#4#2%
+ \allocationnumber=\count1#1 \global#3#5=\allocationnumber
+}
+
+% The fonts. This should come before defining the new character control
+% sequences that follow.
+%
+\input fonts
+
+\hyphenation{script-script base-line-skip no-base-line-skip line-skip
+ line-skip-limit max-dead-cycles output-penalty no-inter-line-skip
+ show-box-depth show-box-breadth if-hmode if-vmode if-mmode
+ back-spaces back-space par-indent tracing-on-line}
+
+{
+ \catcode`\| = 0
+ \catcode`\\ = \other
+ |global|let|bsc = \ % \bsc is a true backslash character.
+}
+
+\let\\ = \bsc
+
+\def\bslash{$\backslash$} % backslash suitable for printing
+\let\shriek = !
+\let\vbar = |
+{
+ \catcode `\[ = 1 \catcode `\] = 2
+ \catcode `\{ = \other \catcode `\} = \other
+ \global\let\lbracechar = {
+ \global\let\rbracechar = }
+]
+\def\blbrace{{\bt \{}}
+\def\brbrace{{\bt \}}}
+
+{
+ \catcode`\ =\other% Notice no spaces at beginning of next line.
+\gdef\otherspace{ }
+}
+
+\let\mathlbrace = \{ \let\mathrbrace = \}
+{
+ \catcode `\[ = 1 \catcode `\] = 2
+ \catcode `\{ = \other \catcode `\} = \other
+ \gdef\{[\ifmmode\mathlbrace\else [\bt {]\fi]
+ \gdef\}[\ifmmode\mathrbrace\else [\bt }]\fi]
+]
+
+
+% These are for debugging (less drastically than \tracingall or \loggingall).
+%
+\def\tron{\tracingmacros=2 \tracingcommands=2 \tracingonline=1}
+\def\troff{\tracingmacros=0 \tracingcommands=0}
+
+% \pagebreak should always cause a break, even if the resulting
+% page is empty.
+%
+\def\pagebreak{\null\vfill\eject}
+
+% \linebreak causes a line break in chapter headings, but outside of that
+% context we don't want it to do anything.
+%
+\let\linebreak = \relax
+
+
+% Parameters.
+%
+\parskip = 0pt plus 0.3pt
+\newdimen\codefuzz \codefuzz = 10pt % for \csdisplay, \example
+\hbadness = 4000
+\vbadness = 8000
+\hfuzz = 0.1pt % as in plain TeX
+\vfuzz = 0.1pt % as in plain TeX
+\exhyphenpenalty = 0 % we don't mind these
+\widowpenalty = 10000 % these are very bad
+\clubpenalty = 10000 % these are very bad too
+
+% Page margins.
+%
+% Note that the \newdimens can't be within an \if or a \def
+% because \newdimen is an \outer macro (thanks to DEK).
+%
+\newdimen\insidemargin \newdimen\outsidemargin
+\newdimen\topmargin \newdimen\bottommargin
+\newdimen\headmargin
+\newdimen\totalwidth \newdimen\totalheight
+\newdimen\oddoffset \newdimen\evenoffset
+\newif\ifnoheadline
+
+% \totalwidth and \totalheight are the actual trim size of the book.
+% \insidemargin, \outsidemargin, \topmargin, and \bottommargin are margins
+% with respect to the pages of the book, not the draft 8 1/2 x 11 pages.
+%
+
+% This makes it so that we only have to cut twice on a page.
+% 8.5" = 51.19125pc exactly.
+% \totalwidth should = \outsidemargin + \insidemargin + \hsize.
+%
+\totalwidth = 7.375in % 44.4159375pc = 7 3/8".
+\outsidemargin = 8pc
+\insidemargin = 10pc
+\hsize = \totalwidth
+\advance \hsize by -\outsidemargin
+\advance \hsize by -\insidemargin
+% \hsize should now be 26.4159375pc
+
+% Now that we know \hsize, we can set \parfillskip to eliminate (most)
+% widows.
+%
+\parfillskip = .75\hsize plus .06\hsize minus .75\hsize
+
+
+% \oddoffset and \evenoffset are the \hoffset values needed to
+% align the left edge of the virtual page with the left edge of the
+% draft paper (not the left edge of the book pages).
+%
+% The -1in below comes from the default margin, which the DVI driver must
+% set at 1in. Odd pages are on the left, even on the right.
+%
+% First, align the left edge of the virtual page with the left edge of the
+% draft page.
+%
+\oddoffset = -1in
+\advance\oddoffset by \insidemargin
+%
+\evenoffset = -1in
+\advance\evenoffset by \outsidemargin
+
+% For centered pages, move the virtual page right by half the trim width.
+%
+\ifcenterpage
+ \dimen0 = 8.5in
+ \advance\dimen0 by -\totalwidth
+ \divide\dimen0 by 2
+ \advance\oddoffset by \dimen0
+ \advance\evenoffset by \dimen0
+
+% For uncentered even-numbered pages, align the right edge of the virtual
+% page with the right edge of the draft paper so that we can remove the trim
+% of two-sided pages with a single cut.
+%
+\else
+ \advance\evenoffset by 8.5in
+ \advance\evenoffset by -\totalwidth
+\fi
+
+\hoffset = \oddoffset % First page is numbered one.
+
+% Now for the vertical, which is simpler, since it doesn't vary from
+% page to page.
+% 11" = 66.2475pc exactly.
+% \totalheight should = \topmargin + \bottommargin + \vsize.
+%
+\totalheight = 9.25in % 9 1/4" = 55.708125pc
+\topmargin = 6pc % Distance from top of page to baseline of text line 1
+\bottommargin = 6pc % Distance from last line to bottom of page.
+\topskip = 2pc % Distance from top of \box255 to baseline of text line 1
+% \vsize Distance from top of \box255 to last line of text.
+% \headmargin Distance from top of \box255 to top of page
+% We'll place the headline just above \box255
+
+\headmargin = \topmargin \advance \headmargin by -\topskip
+
+\vsize = \totalheight
+\advance \vsize by -\headmargin
+\advance \vsize by -\bottommargin
+% \vsize should now be 46.708125pc
+
+\voffset = -1in % align top of logical page with top of physical page
+\advance \voffset by \headmargin
+\ifcenterpage
+ \dimen0 = 11in
+ \advance\dimen0 by -\totalheight
+ \divide\dimen0 by 2
+ \advance\voffset by \dimen0
+\fi
+
+\topskip = 2pc % Distance from headline to first line of text.
+
+
+% Other formatting parameters.
+%
+% The basic increments we'll use in the layout.
+%
+\def\setskip#1 = #2 {%
+ \dimen0 = #2\baselineskip
+ \csname #1skipamount\endcsname =
+ \dimen0 plus .33\dimen0 minus .25\dimen0
+ \ignorespaces
+}
+\newskip\greaterskipamount
+\newskip\greatskipamount
+\newskip\biggerskipamount
+\newskip\medbigskipamount
+\newskip\medsmallskipamount
+\newskip\tinyskipamount
+
+\setskip greater = 2.5
+\setskip great = 2.0
+\setskip bigger = 1.5
+\setskip big = 1.0
+\setskip medbig = .75
+\setskip med = .5
+\setskip medsmall = .375
+\setskip small = .25
+\setskip tiny = .125
+
+\parindent = 1em
+\newdimen\normalindent \normalindent = \parindent
+
+\footnotemarkseparation = .16666em
+
+\abovelistskip = \smallskipamount
+\interitemskip = \tinyskipamount
+\belowlistskip = \smallskipamount
+\listleftindent = \parindent
+
+% Displays involve text and math. We don't want as much flexibility in
+% the glue as plain.tex sets.
+%
+\abovedisplayskip = \medsmallskipamount
+\abovedisplayshortskip = 0pt plus 2pt
+\belowdisplayskip = \medsmallskipamount
+\belowdisplayshortskip = \belowdisplayskip
+
+\newskip\intercapsuleskip \intercapsuleskip = .75\tinyskipamount plus 0.4pt
+\newdimen\capsulehangindent \capsulehangindent = 2pc
+
+\newskip\aboveconceptskip \aboveconceptskip = \bigskipamount
+
+
+\newskip\abovesectionskip \abovesectionskip = \greaterskipamount
+% No stretch or shrink below heads, according to A-W.
+\newskip\belowsectionskip \belowsectionskip = 1\biggerskipamount
+
+\newskip\abovesubsectionskip \abovesubsectionskip = \greatskipamount
+\newskip\belowsubsectionskip \belowsubsectionskip = 1\bigskipamount
+
+\newskip\abovedescriptionskip \abovedescriptionskip = \biggerskipamount
+\newskip\belowdescriptionskip \belowdescriptionskip = \medskipamount
+
+\newskip\explainskip \explainskip = \tinyskipamount
+\newskip\exampleskip \exampleskip = \smallskipamount
+
+\def\interexampleskip{\vskip\medsmallskipamount}
+\def\tinyskip{\vskip\tinyskipamount}
+
+% Space in which a symbol is shown in a columnated list of commands.
+\newdimen\symbolspace \symbolspace = 14pt
+
+% \colsindent is the indentation before material arranged in columns and
+% displayed, as in the list of Greek letters.
+\newskip\colsindent \colsindent = \parindent
+
+% The indentation for page lists in the index that don't fit on one line.
+\newdimen\indexpageindent \indexpageindent = 1pc
+
+% The indentation for subsidiary entries in the index. (Should be less
+% than \indexpageindent.)
+\newdimen\indexlevelindent \indexlevelindent = .5pc
+
+\newskip\codebaselineskip \codebaselineskip = \baselineskip
+
+% Fill the previous page with blank space before a command.
+%
+\def\cmdbreak{\par\nobreak\vfil\penalty 1000\vfilneg\par}
+
+% Penalties.
+%
+\newcount\conceptpenalty \conceptpenalty = -1500
+\newcount\intercmdnamepenalty \intercmdnamepenalty = 300
+\newcount\@intercmdnamepenalty \@intercmdnamepenalty = \intercmdnamepenalty
+
+
+
+% The output routine.
+%
+\output = {%
+ \onepageout
+ %
+ % Odd pages are right-hand pages.
+ %
+ % Note \pageno has been incremented when we get here -- it now refers
+ % to the page number of the page about to be typeset, not the page
+ % that we just shipped out.
+ %
+ \ifodd\pageno % \onepageout advances \pageno.
+ \global\hoffset = \oddoffset
+ \global\intercmdnamepenalty = 10000
+ \else
+ \global\hoffset = \evenoffset
+ \global\intercmdnamepenalty = \@intercmdnamepenalty
+ \fi
+}
+
+\ifdvi\else\output={%
+ \setbox0=\box255\deadcycles=0
+ \advancepageno
+ \global\advance \truepage by 1
+ \ifnum\outputpenalty>-20000\else \dosupereject \fi
+ }
+\fi
+
+\def\onepageout{%
+ \shipout\vbox{%
+ \offinterlineskip % The page should have vertically abutting boxes.
+ \ifodd\pageno
+ \cropmargin = \insidemargin
+ \else
+ \cropmargin = \outsidemargin
+ \fi
+ \addcropmarks % Does not affect the position.
+ \ifcenterpage \addtruepage \fi
+ %
+ \ifedgetabs \ifodd\pageno \ifnoheadline\else
+ \edgetabs % Does not affect the position.
+ \fi\fi\fi
+ %
+ \vbox to 0pt{\vskip-\headmargin \vskip-3.5pc
+ \rightline{\sevenrm\timestamp}\vss}%
+ %
+ \smash{\line{\the\headline}}% Simplified \makeheadline.
+ \pagebody
+ \vskip 2\normalbaselineskip
+ % The footline is needed on one page (for an example).
+ \line{\the\footline}%
+ }%
+ % Now the rest from \plainoutput:
+ \advancepageno
+ \global\advance\truepage by 1
+ \ifnum\outputpenalty>-20000\else \dosupereject \fi
+}
+
+\footline = {\hfil}
+
+% The headline always includes the name of the current chapter. This
+% goes on the inside. If more information, such as the concept we're
+% explaining, is included, it goes on the outside.
+%
+\headline = {%
+ % Produce the timestamp
+ \ifnoheadline
+ \hfil
+ \global\noheadlinefalse
+ \else
+ \let\\ = \ignorespaces
+ \ifodd \pageno % Right-hand page.
+ {\tenit \firstmark}\hfil {\tenbf \folio}%
+ \else % Left-hand page.
+ {\tenbf \folio}%
+ \hfil
+ {\tenit
+ \chaptername
+ \ifnum\pageno>0\ifback\else
+ \quad $\backslash$\quad\S\the\chapterno
+ \fi\fi
+ }%
+ \fi
+ \fi
+}
+
+% Sizes for cropmarks:
+%
+\newdimen\cropthick \cropthick = 0.4pt
+\newdimen\crophsize \crophsize = 1pc
+\newdimen\cropvsize \cropvsize = 1pc
+\newdimen\cropoffset \cropoffset = .0625in
+
+% Each of the following macros generates a quarter of a cropmark as
+% a zero-size box at the center point of the cropmark.
+% We want the cropmarks to be centered with respect to their thicknesses.
+
+\def\vcropdown {\hbox to 0pt{%
+ \kern -.5\cropthick
+ \vbox to 0pt{%
+ \vskip \cropoffset
+ \hrule width\cropthick depth\cropvsize height0pt
+ \vss}%
+ \kern -.5\cropthick}%
+}
+
+\def\vcropup {\hbox to 0pt{%
+ \kern -.5\cropthick
+ \vbox to 0pt{%
+ \vss
+ \hrule width\cropthick depth\cropvsize height0pt
+ \vskip \cropoffset}%
+ \kern -.5\cropthick}%
+}
+
+\def\hcropright{\rlap{\kern\cropoffset\smash{%
+ \vrule width\crophsize depth .5\cropthick height .5\cropthick}}}
+
+\def\hcropleft{\llap{\smash{%
+ \vrule width\crophsize depth .5\cropthick height .5\cropthick}%
+ \kern\cropoffset}}
+
+% \cropmargin will be set to the left margin on the current page.
+%
+\newdimen\cropmargin
+\def\cropline#1{\moveleft\cropmargin\hbox to \totalwidth{#1}}
+
+% \addcropmarks adds the cropmarks to a page while leaving everything else
+% alone. It assumes we're positioned at the top of the page.
+
+\def\addcropmarks{%
+ \vbox to 0pt{%
+ \offinterlineskip % contextually redundant but precautionary
+ \vskip -\headmargin % to get to logical top of page
+ \ifcenterpage
+ \cropline{\hcropleft\vcropup \hfil \vcropup\hcropright}
+ \else
+ \cropline{\hfil \vcropdown}%
+ \fi
+ \vskip\totalheight
+ \ifcenterpage
+ \cropline{\hcropleft\vcropdown \hfil \vcropdown\hcropright}%
+ \else
+ \cropline{\hcropright\hfil\hcropleft\vcropup\vcropdown\hcropright}%
+ \fi
+ \vss
+}}
+
+% \addtruepage adds a small page number near the upper right cropmark.
+%
+\newcount\truepage \truepage = 1
+\def\addtruepage{%
+ \vbox to 0pt{\vskip -\headmargin\vskip -2pc
+ \moveleft\cropmargin\hbox to \totalwidth{%
+ \twelvebf
+ \quad\TeX\ for the Impatient\hss
+ N\raise 3.3pt\hbox{o} \the\truepage\quad}%
+ \vss}%
+}
+
+
+% The mark information is output by \markinfo.
+%
+% We can use a different mark, e.g., a shorter heading, by calling
+% \changemark.
+%
+\newtoks\shortmark \shortmark = {}
+\newif\ifchangemark
+
+\def\markinfo#1{%
+ \ifchangemark
+ \mark{\the\shortmark}\changemarkfalse
+ \else
+ \mark{#1}%
+ \fi
+}
+
+\def\changemark#1{\shortmark = {#1}\changemarktrue}
+
+
+% ``Tabs'' down the side of the book.
+% Say \nextedgetab to move the thing down to the next.
+% Say \edgetabsfalse to turn them off.
+%
+\newcount\numtabs \numtabs = 7
+\newdimen\edgetabjump \edgetabjump = 0pt
+\def\nextedgetab{%
+ \advance\edgetabjump by \edgetabdepth
+}
+
+\def\settabdepth#1{%
+ \edgetabdepth = #1
+ \setbox\tabbox = \vbox to \edgetabdepth{%
+ \leaders
+ \vbox{\vskip \edgespacing
+ \hrule width\edgetabwidth height0pt depth\edgethick}%
+ \vfil}
+}
+
+\newskip\bigtab \newskip\smalltab
+\newskip\edgetabdepth
+\newbox\tabbox
+
+\bigtab = \totalheight \divide\bigtab by \numtabs
+\smalltab = .4\bigtab % five smalls make two bigs
+
+\newdimen\edgetabin \edgetabin = .25in
+\newdimen\edgetabbleed \edgetabbleed = .25in
+\newdimen\edgetabwidth
+ \edgetabwidth = \edgetabin
+ \advance \edgetabwidth by \edgetabbleed
+\newdimen\edgethick \edgethick = .3pt % line thickness
+\newdimen\edgespacing \edgespacing = .9pt % line spacing
+
+
+\def\edgetabs{\vbox to 0pt{%
+ \vskip-\headmargin
+ \vskip\edgetabjump
+ \hbox{%
+ \hskip \hsize
+ \hskip\outsidemargin
+ \hskip-\edgetabin
+ \copy\tabbox
+ }%
+ \vss
+}}
+
+
+% We can simplify \pagecontents (which is called by \pagebody) somewhat,
+% since we don't have \topinserts.
+%
+\def\pagecontents{%
+ \unvbox255 % The main page contents.
+ %
+ \ifvoid\footins\else % Footnotes are present.
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins
+ \fi
+}
+
+
+% The command chapters had a mini-index at the bottom of right-hand
+% pages. These definitions are the way to put entries into it.
+%
+% \minref generates a reference for the mini-index, and prints the
+% reference on the page, also.
+%
+\def\minref#1{%
+ #1% Print it on the page.
+ % That's it, now.
+}
+
+% Mini-index entry without printing the argument on the page.
+% Just ignore the argument now.
+%
+\def\minrefs#1{%
+ \ignorespaces
+}
+
+% This is used for producing the concept mini-index.
+%
+\def\minrefsdelim#1\endmark{\minrefs{#1}}
+
+% One last insertion-oriented thing:
+% we always want numbered footnotes, as defined in eplain.
+% We'll do them in 8-point type.
+%
+\let\@plainfootnote = \footnote
+\let\footnote = \numberedfootnote
+\everyfootnote = {\footnotefonts}
+
+
+% The \margin macro produces a marginal note at the same level as its call.
+% It should only be used in a paragraph or in the main vertical list.
+% It is nullified when we're printing the final copy.
+%
+\def\margin#1{%
+ \ifhmode
+ \vadjust{\printmarginnote{#1}}%
+ \else
+ \dimen0 = \prevdepth
+ \prevdepth = -1000pt
+ \printmarginnote{#1}%
+ \prevdepth = \dimen0
+ \fi
+ \ignorespaces
+}
+
+\def\printmarginnote#1{%
+ \hbox to 0pt{%
+ \hskip 1.1\hsize
+ \vbox to 0pt{%
+ \everypar = {}% Don't inherit hanging indentation.
+ \hsize = 1in \rightskip = 0pt plus 1fil \noindent \sevenrm
+ \let\tt = \eighttt
+ \parfillskip = 0pt plus 1fil
+ \baselineskip = 8pt #1%
+ \vss
+ }%
+ \hss
+ }%
+}
+
+%\iffinal
+\iftrue
+ \def\margin#1{\ignorespaces}
+\fi
+
+
+% Stuff to preserve page breaks inserted for the 2nd printing.
+% This macro takes one ``argument''.
+%
+\def\secondprinting{\afterassignment\finishsecondprinting \toks0 = }
+\def\finishsecondprinting{\the\toks0}
+
+
+
+% Parts of the book.
+%
+%
+% Chapters.
+%
+\let\chaptername = \empty
+\newcount\chapterno
+
+\def\chaprule{\vrule depth3\baselineskip height1.5pc width1pt}
+
+% Chapter openings should not have headlines.
+% The text of each chapter starts on a right-hand page in the final
+% book. The facing page has an illustration. This means that if the
+% previous chapter ended on a left-hand (i.e., even) page, we have to
+% eject an extra blank page.
+%
+\outer\def\chapter#1 \par{%
+ \ifcompletebook % Don't do the blank pages for proof copies.
+ \blankpage % the illustration page
+ % The first real chapter starts on page 1.
+ \ifnum\pageno < 0 \pageno = 1 \fi
+ \fi
+ %
+ \def\chaptername{#1}%
+ \advance\chapterno by 1
+ %
+ \setbox0 = \hbox{\chapternumeralfont
+ \kern1pt
+ \expandafter\kernchapno\the\chapterno\empty
+ \kern3pt}%
+ \vglue 0pt % But we get a \topskip of 2pc now.
+ \nointerlineskip
+ \leftline{%
+ \ifback\else
+ \vtop{%
+ \copy0
+ \vskip6pt
+ \hrule width\wd0 height2.2pc
+ }%
+ \kern 16pt
+ \fi
+ \chapterfonts % to get \baselineskip now
+ \chaprule
+ \kern 6pt
+ \vtop{%
+ \def\linebreak{\hfil\break}%
+ \noindent \chaptername}%
+ }%
+ \vskip 6pc plus.5pc minus.5pc
+ \noheadlinetrue
+ \toks0=\expandafter{\chaptername}
+ \edef\writechaptertoc{%
+ \noexpand\writenumberedtocentry{chapter}{\the\toks0}{\the\chapterno}%
+ }%
+ \writechaptertoc
+ %
+ % Use chaptername as first A-head (or only one).
+ \mark{\chaptername}%
+ \footnotenumber = 0 % Number footnotes from 1 in each chapter.
+ \beginit{CHAPTER}%
+ \noindent
+ \ignorespaces
+}
+
+\def\endchapter{%
+ \mark{\chaptername}% Use chapter name on last blank recto page
+ \vfil\eject % be sure everything's out before testing for recto
+ \ifodd\pageno
+ \message{Chapter ends on a verso page.}%
+ \blankpage
+ \fi
+ \endit{CHAPTER}%
+}
+%
+% \blankpage creates a blank page with no headline.
+% In the final book, it just advances the page number.
+% For the web edition, the blank pages serve no purpose except to keep
+% the indexing correct. I didn't want to rerun the index.
+%
+\def\blankpage{%
+ \iffinal
+ \advancepageno
+ \global \advance \truepage by 1
+ \else
+ \noheadlinetrue\pagebreak
+ \fi
+}
+
+% This hokey little macro kerns between the numerals in the chapter
+% number. We want to kern more between `11' then otherwise; also, we
+% want to remove the extra space before the chapter number, and after
+% `11'.
+%
+\def\kernchapno#1#2{%
+ \ifx\empty#2\else \kern-3pt \fi
+ #1%
+ \ifx\empty#2\else
+ \if1#2%
+ \kern-.1em
+ \else
+ \kern-.05em
+ \fi
+ \fi
+ #2%
+ \if 1#2\kern-.1em\fi
+}
+
+% Sections.
+%
+\newif\ifheading % Avoid breaking after a heading.
+
+% get section numbers for the fdl only, since it has internal references.
+\let\fdlkludge=\empty
+
+% The heading flag is turned on by headings and turned off
+% at the start of a description.
+%
+\outer\def\section#1 \par{%
+ \par % be sure we're in vertical mode
+ \saveskip = \lastskip % will be 0 if no skip
+ \cmdbreak
+ \combineskips\abovesectionskip
+ \dimen0 = 2.5\baselineskip \advance\dimen0 by -\topskip
+ \vskip -\dimen0
+ \vglue \dimen0
+ %
+ {\sectionfonts \leftline{\fdlkludge #1}}%
+ %
+ \markinfo{#1}%
+ \writetocentry{section}{#1}%
+ \nobreak
+ % Don't go into horizontal mode within the command descriptions.
+ %
+ \vskip\belowsectionskip
+ \ifcommands \else \noindent \fi
+ \headingtrue
+ \everypar = {\headingfalse \global\everypar = {}}%
+ % only gets executed for \par in horizontal mode
+ \ignorespaces
+}
+
+
+% Subsections. We don't want a break at the glue if we were preceded by
+% a \nobreak.
+%
+\def\subsection#1 \par{%
+ \par % be sure we're in vertical mode
+ \saveskip = \lastskip % will be 0 if no skip
+ \ifheading % Did we just have \section?
+ \nobreak
+ \fi
+ \combineskips\abovesubsectionskip
+ \dimen0 = 2.5\baselineskip \advance\dimen0 by -\topskip
+ \vskip -\dimen0
+ \vglue \dimen0
+ %
+ {\subsectionfonts
+ \leftline{\vrule width.5em height1.2ex depth.2ex \enspace #1}}%
+ \writetocentry{subsection}{#1}%
+ \nobreak
+ % Don't go into horizontal mode within the command descriptions.
+ \vskip\belowsubsectionskip
+ \ifcommands \else \noindent \fi
+ \headingtrue
+ \everypar = {\headingfalse \global\everypar = {}}%
+ % only gets executed for \par in horizontal mode
+ \ignorespaces
+}
+
+% \combineskips combines the current skip (#1) with the previous skip
+% (which must be in \saveskip), and effectively skips by the larger of
+% the two.
+%
+\newskip\saveskip
+\def\combineskips#1{\ifdim\saveskip<#1\vskip-\saveskip \vskip#1\fi}
+
+
+
+% List macros.
+%
+
+% We want to use different names than eplain.
+%
+\let\ulist = \unorderedlist
+\let\endulist = \endunorderedlist
+%
+\let\olist = \numberedlist
+\let\endolist = \endnumberedlist
+
+\let\compact = \listcompact
+
+% The \noindent here keeps us from getting indentation on the first line.
+% It also makes the display into a `short' display, FYI.
+% The \belowdisplayskip and \abovedisplayskip glue are inserted by the
+% display.
+%
+\long\def\display#1{%
+ \ifvmode \noindent \fi
+ $$\vtop{\everypar = {}\hsize = \displaywidth
+ \parfillskip = 0pt plus 1fil % don't worry about widows
+ \noindent #1\par\global\savedepth = \prevdepth}$$%
+ \endgraf
+ \prevdepth = \savedepth
+}
+
+% \vdisplay is like \display, except it's for vertical mode material. Use it
+% to avoid an unwanted initial lineskip.
+%
+\long\def\vdisplay#1{%
+ \ifvmode \noindent \fi
+ $$\vtop{\everypar = {}\hsize = \displaywidth
+ \parfillskip = 0pt plus 1fil % don't worry about widows
+ #1\par\global\savedepth = \prevdepth}$$%
+ \endgraf
+ \prevdepth = \savedepth
+}
+
+
+
+% Indexing.
+% Derived from Knuth's manmac macros.
+%
+\newwrite\index
+
+\immediate\openout\index = \jobname.idx
+\newif\ifsilent
+
+% We need ^ to be active temporarily, while we define it.
+%
+{ \catcode`\^ = \active
+%
+\gdef^{%
+ \ifmmode
+ \let \nextaction = \sp
+ \else
+ \let \nextaction = \beginindexref
+ \begingroup
+ \catcode `| = \other \catcode `^ = \other
+ \fi
+ \nextaction
+}}
+
+\def\beginindexref{\futurelet\next\checksilence}
+
+{% And for here, we need ^ to be deactivated
+\catcode `^ = \other
+
+\gdef\checksilence{%
+ \if ^\next
+ \silenttrue \let\nextaction = \secondhat
+ \else
+ \silentfalse \let\nextaction = \checkbar
+ \fi
+ \nextaction
+}
+
+% Eat the `^' that we saw would be the next token.
+%
+\gdef\secondhat^{\checkbar}
+
+} % end scope where ^ is \other
+
+\def\checkbar{\futurelet\next\iswitch}
+
+% Here we start reading the text of the actual index entry;
+% we've determined whether it's silent or not.
+%
+% We handle the following cases:
+% ^{alpha} and ^^{alpha}
+% ^|alpha| and ^^|alpha|
+% ^|\alpha| and ^^|\alpha|
+%
+% When this is called, \next is either `|' or `{'.
+%
+\def\iswitch{%
+ \ifx |\next
+ \let \nextaction = \checkbackslash
+ \else
+ \let \nextaction = \normalidx
+ \fi
+ \nextaction
+}
+
+\def\checkbackslash|{%
+ % within |...| we allow anything (but another |)
+ \deactivate \catcode `\ = \other
+ \futurelet\next\litidx
+}
+
+% The thing after the ^ is a |. We have further checking to do -- is
+% the next character a \?
+%
+{ % reverse \ and /
+\catcode`\/ = 0
+\catcode`\\ = \other
+/gdef/litidx{%
+ /if \/next
+ /expandafter/litidxA
+ /else
+ /expandafter/litidxB
+ /fi
+}
+
+% The thing being indexed starts with a \.
+%
+/gdef/litidxA \#1|{%
+ /ctsidxref{#1}%
+ /litidxswitch{/\#1}%
+}
+
+% The thing being indexed is just a word.
+%
+/gdef/litidxB #1|{%
+ /ttidxref{#1}%
+ /litidxswitch{#1}%
+}
+}% end reversal of \ and /
+
+% The thing after the ^ is not a |.
+%
+\def\normalidx#1{%
+ \ifsilent
+ \aftergroup\ignorespaces
+ \else
+ #1%
+ \fi
+ \idxref{#1}%
+ \endgroup % group started by \iswitch.
+}
+
+\def\litidxswitch#1{%
+ \ifsilent
+ \aftergroup\ignorespaces
+ \else
+ {\tt #1}%
+ \fi
+ \endgroup % group started by \iswitch.
+}
+
+
+
+% Indexing macros for external use.
+
+% \idxref generates an index entry for #1. If #1 contains any control
+% sequences, they are treated literally.
+%
+\def\idxref#1{\indexwrite{#1}N\ignorespaces}
+
+
+% For creating an index entry for control space.
+{\catcode `\ =\other
+\gdef\blankidxref{\ctsidxref{ }}
+}
+
+% I removed this macro from eplain because \csname works as well, but
+% since the macros below are already written to use it ...
+\def\@tokstostring#1{\@ttsA#1 \@ttsmarkA}%
+\let\tokstostring=\@tokstostring
+\def\@ttsA#1 #2\@ttsmarkA{%
+ \@ifempty{#1}\else
+ \@ttsB #1\@ttsmarkB
+ \@ifempty{#2}\else
+ \@spacesub\@ttsA#2\@ttsmarkA
+ \fi
+ \fi
+}%
+\def\@ttsB#1{%
+ \ifx #1\@ttsmarkB\else
+ \string #1%
+ \expandafter\@ttsB
+ \fi
+}%
+\def\@ttsmarkB{\@ttsmarkB}% should never be expanded
+%
+\def\@spacesub{+}%
+\let\spacesub = \@spacesub
+%
+\def\@ifempty#1{\@@ifempty #1\@emptymarkA\@emptymarkB}%
+\def\@@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
+\def\@emptymarkA{\@emptymarkA}% Again, so \ifx won't complain.
+
+% #1 is the index term, #2 is the reference as in
+% Diacritical mark, see accent.
+
+\def\idxsee#1#2{%
+ \begingroup
+ \def\spacesub{\otherspace}%
+ \edef\nextaction{\write\index{\tokstostring{#1}::N::*\tokstostring{#2}}}%
+ \nextaction
+ \ignorespaces
+\endgroup}
+
+
+% \ttidxref generates an index entry for #1 in the program font.
+% If #1 contains any control sequences, they are treated literally.
+%
+\def\ttidxref#1{\indexwrite{#1}T\ignorespaces}
+
+
+% \ctsidxref generates an index entry for a control sequence. #1
+% should not have a preceding backslash, so that the proper call for
+% indexing \alpha is \ctsidxref{alpha}.
+%
+\def\ctsidxref #1{\indexwrite{#1}C\ignorespaces}
+
+% \indexchar is needed to generate index entries for three especially
+% difficult single characters: {, }, and \. They are blank-delimited.
+%
+\def\indexchar{\begingroup \deactivate \indexcharA}
+\def\indexcharA#1 {\indexwrite{#1}T\endgroup}
+
+% \pix indicates that the next index entry is a principal one.
+%
+\newif\ifpix
+\def\pix{\global\pixtrue}
+
+% \bix and \eix indicate that the next index entry begins or ends a
+% range of pages.
+%
+\newif\ifbix \def\bix{\bixtrue}
+\newif\ifeix \def\eix{\eixtrue}
+
+% #1 is the text of the entry, #2 is N (normal), T (typewriter) or
+% C (control sequence) or `cs' for now.
+%
+\def\indexwrite#1#2{\begingroup
+ \def\spacesub{\otherspace}%
+ \edef\tts{\tokstostring{#1}}%
+ \edef\nextaction{\write\index{\tts::#2::\noexpand\number\noexpand\pageno
+ \ifpix P\fi\ifbix B\fi\ifeix E\fi}}%
+ \nextaction
+ \global\pixfalse \global\bixfalse \global\eixfalse
+\endgroup}
+
+{\catcode `\^ = \other \gdef\twocarets{^^}}
+
+
+% For generating index entries with weird characters, we need to deactivate
+% them: { } blank \ and substitute [ ] ! for { } \ . \recat does this.
+% It should be enclosed in a group (which must end in `]').
+\def\recat{%
+ \aftergroup\ignorespaces
+ \catcode `\! = 0 \catcode `[ = 1 \catcode `] = 2
+ \catcode `\ = \other \deactivate
+}
+
+
+
+% Macros for the front matter.
+%
+% Space at the top of the frontmatter pages.
+%
+\def\sinkage{\vglue 7pc \relax}
+
+% And at the top of the backmatter pages.
+%
+\def\backsinkage{\vglue 2pc \relax}
+
+% \frontchapter doesn't care if we're on an even page or an odd page.
+%
+\def\frontchapter#1 \par{%
+ \def\chaptername{#1}%
+ \leftline{%
+ \chapterfonts
+ \chaprule
+ \kern 6pt
+ \vtop{%
+ \def\linebreak{\hfil\break}%
+ \noindent \chaptername}%
+ }%
+ \vskip 4pc
+ \noheadlinetrue
+ % Use chaptername as first A-head (or only one)
+ \mark{\chaptername}%
+ \noheadlinetrue
+ \noindent \ignorespaces
+}
+
+
+% We are called from inside a group, so we can redefine the \toc... macros.
+%
+\def\shortcontents{{%
+ \firsttoctrue
+ \backfalse
+ \shorttocfonts
+ \let\tocchapterentry = \shorttocchapter
+ \let\tocsectionentry = \gobblethree
+ \let\tocsubsectionentry = \gobblethree
+ \halign{\hfil\strut##&\strut ##\hfil\cr
+ \readtocfile
+ \crcr}}%
+ \pagebreak
+ \global\backfalse
+}
+
+% #1 is the chapter name, #2 the chapter number, #3 the page number.
+%
+\def\shorttocchapter#1#2#3{%
+ \ifback\else#2\quad $\backslash$\quad\fi&#1\qquad
+ \raise3pt\hbox{\vrule height2pt width4pt depth2pt}$\,\,$#3\cr
+}
+
+% Yes, we read the entire contents (several pages) as one alignment.
+%
+\def\contents{{%
+ \firsttoctrue
+ \backfalse
+ \tocfonts
+ \interlinepenalty = 100
+ \halign{\hfil\strut##&\strut ##\hfil\cr
+ \readtocfile
+ \crcr}}%
+ \pagebreak
+ % We want to end the contents on a recto page, even if it's blank
+ \ifodd\pageno\pagebreak\fi % leaves us on an even page.
+ \global\backfalse
+}
+
+\newif\iffirsttoc
+
+\def\tocchapterentry#1#2#3{%
+ \iffirsttoc
+ \global\firsttocfalse
+ \else
+ \noalign{\penalty-1000 \bigskip\smallskip}%
+ \fi
+ %
+ \ifback\else\bf#2\quad $\backslash$\quad\fi
+ &\bf#1\qquad\raise3pt\hbox{\vrule height2pt width4pt depth2pt}%
+ $\,\,$#3\cr
+ \noalign{\nobreak\vskip2pt}%
+}
+
+\def\tocsectionentry#1#2#3{%
+ \noalign{\penalty-500 \vskip\medsmallskipamount}%
+ &\it #1\quad \openbox$\,\,$\rm #3\cr
+}
+
+\def\tocsubsectionentry#1#2#3{%
+ &\qquad #1\quad $\cdot\,$#3\cr
+}
+
+\def\openbox{\ht0 = 1.75pt \dp0 = 1.75pt \wd0 = 3.5pt
+ \raise 2.75pt \makeblankbox{.2pt}{.2pt}%
+}
+
+\newif\ifback
+% \ifback is true when we're doing the table of contents and are about
+% to do the back matter. It is also true just before we do the back matter
+% chapters (really, only the index).
+%
+\def\backmatter{\write\tocfile{\noexpand\setback}\backtrue}
+\def\setback{\noalign{\bigskip\global\backtrue}}
+
+
+
+% Macros for the examples chapter.
+%
+% \doexamples is called with the name of the examples file
+% Each example is ended by ::: (including the last one)
+% A line starting with ~ is executed in the output (without the ~)
+% but dropped from the input.
+%
+% Within the input, ! is an escape character, but {} are not recognized.
+% This provides a limited control sequence capability, which is sufficient
+% for delimited macros and therefore for cross-references (see \xrefdelim).
+% !! stands for !.
+%
+\def\endmark{:::}
+
+\newif\ifnotatend \newif\ifnotatendfile \newif\iftildeline
+\newread\exfileA \newread\exfileB \newwrite\exfileC
+\newcount\examplenumber
+
+\def\doexamples#1{%
+ % Here we assume that two read-only openings of the same file are OK.
+ \immediate\openin\exfileA = #1
+ \immediate\openin\exfileB = #1
+ \loop
+ \advance\examplenumber by 1
+ \reader
+ \ifx\holder\empty \notatendfilefalse \else \notatendfiletrue \fi
+ \ifnotatendfile
+ \dooneexample
+ \repeat
+}
+
+
+% We want control sequences to be executed as the input of each example
+% is formatted, but we don't want to execute them for the output of each
+% example until we generate that output with an \input command.
+% Therefore, we treat ! differently for \holder, which produces example
+% input, and \holderA, which produces example output.
+%
+% We can't say \global\immediate\read, but \immediate is implied with \read.
+%
+\def\reader{{\deactivate
+ \catcode`\! = \other % To execute control sequences on \input.
+ \catcode`\^^M = 9 \global\read\exfileA to \holder
+ %
+ \catcode`\! = 0 % To execute control sequences right away.
+ \obeyspaces \global\read\exfileB to \holderA
+ }%
+}
+
+\def\dooneexample{{%
+ % We want to mention \! in one of the examples:
+ \edef\examplenum{\numbername\examplenumber}%
+
+ \immediate\openout\exfileC = \tempfile
+
+ \catcode`\| = \other % No literal code in these examples.
+ \chardef\! = `\! % !! means a literal ! character.
+
+
+ % Collect the input page, as it is to be printed, in a box
+ % At the same time, write out each line to \exfileC
+ % We make the box 0pt tall to avoid problems with overfull pages.
+ \setbox\xmpinput = \vbox to 0pt{%
+ %
+ \baselineskip = \codebaselineskip
+ \loop
+ \ifx\endmark\holder \notatendfalse \else\notatendtrue \fi
+ \ifnotatend
+ \expandafter\tildecheck\holder \empty \marker
+ \iftildeline\else
+ \leftline{\tt\frenchspacing \holderA \thinspace}%
+ \immediate\write\exfileC{\holder}%
+ \fi
+ \reader
+ \repeat
+ \vss % reduce height to 0pt
+ }% end \vtop
+
+ \immediate\closeout\exfileC
+
+ {%
+ \maxdepth = \maxdimen % allow long input
+ \vfill\eject
+ \catcode`\! = 0
+ \restoreplainTeX
+ {%
+ \let\eject = \relax \input\tempfile
+ % Every example ends with \bye, but \bye is disabled in the main text.
+ \vfill\par\penalty-10000
+ \global\footline = {\hfil}%
+ }%
+ \box\xmpinput
+ }%
+}}
+
+{
+ \catcode `\~ = \other % So the \ifx works.
+ \gdef\tildecheck#1#2\marker{%
+ \ifx #1~%
+ \immediate\write\exfileC {#2}\tildelinetrue
+ \else
+ \tildelinefalse
+ \fi
+ }
+}
+
+% This definition is more or less repeated verbatim in the first example
+% in xmptext.tex.
+%
+\def\xmpheader #1/#2{%
+ {\exampletitlefonts \leftline{Example #1:\quad \bi#2}}%
+ \vglue .5\baselineskip
+ \count255 = \pageno
+ \xdef\examplepage{\number\count255}%
+ \markinfo{Example #1: #2}
+ \ifrewritetocfile
+ \write\tocfile{\string\tocsectionentry{#2}{}{\examplepage}}%
+ \fi
+}
+% Let's number examples automatically; it makes it easier to move them
+% around and add new ones.
+
+\def\xmpnum{\number\examplenumber}
+
+\newbox\xmpinput
+
+
+% \negthin lets us put `\!' in examples.
+
+\def\negthin{\ifmmode \mskip-\thinmuskip \else \char`\\ \char`\! \fi}
+
+\def\xmpheaddef{see \xref{xmphead}}
+
+\def\restoreplainTeX{%
+ % Restore plain TeX's parameters (except for \hsize and \hoffset).
+ \parindent = 20pt
+ \parskip = 0pt plus 1pt
+ \parfillskip = 0pt plus 1fil
+ \hfuzz = 0.1pt
+ \hbadness = 1000
+ \abovedisplayskip=12pt plus 3pt minus 9pt
+ \abovedisplayshortskip=0pt plus 3pt
+ \belowdisplayskip=12pt plus 3pt minus 9pt
+ \belowdisplayshortskip=7pt plus 3pt minus 4pt
+ \everymath = {}%
+ \everydisplay = {}%
+ \centereddisplays
+ \let\vfootnote = \@plainvfootnote
+ \let\footnote = \@plainfootnote
+ \let\tenrm = \oldtenrm
+ \textfont0 = \tenrm
+ \rm
+ \ignorespaces
+}%
+
+
+
+% Macros for the concepts chapter.
+%
+%
+% Start off the chapter.
+%
+\def\beginconcepts{\openout\conceptfile = \jobname.ccs }
+\def\endconcepts{\closeout\conceptfile}
+
+\newwrite\conceptfile
+
+% \concept produces a concept heading and also generates a crossreference
+% suitable for the mini-index. It even works for concepts with several words
+% or containing control sequences like `\ascii'.
+%
+\def\concept#1 \par{%
+ \par
+ %k \cmdbreak
+ \penalty\conceptpenalty\vskip\aboveconceptskip
+ %k \vskip 0pt plus 1pt % allow a little more stretch
+ \noindent
+ % generate the index entry
+ \ifconceptindex \else \global\indextoks = {\idxref{#1}}\fi
+ \conceptindexfalse
+ \pix\bix\the\indextoks
+ %
+ {\bt \let\it=\bti \unskip\null #1.\hskip1em plus.2em minus.2em }%
+ \markinfo{#1}%
+ \xrdef{#1}%
+ \write\conceptfile{\string\doconcept{#1}{\number\pageno}}%
+ \beginit{CONCEPT}%
+ \nobreak
+ \ignorespaces
+}
+
+\def\endconcept{%
+ \par % always go to vertical mode here
+ \eix\the\indextoks
+ \endit{CONCEPT}%
+ \ignorespaces
+}
+
+\def\doconcept#1#2{\hbox{#1\quad #2}}
+
+% Sometimes we want to index a concept under some other name than the
+% concept name, e.g., indexing `delimiter' as `delimiters'. The
+% \conceptindex macro lets us do this.
+%
+\newif\ifconceptindex
+\newtoks\indextoks
+\def\conceptindex#1{%
+ \conceptindextrue
+ \global\indextoks = {\idxref{#1}}%
+ \ignorespaces
+}
+
+
+% Commands for cross-referencing within the concepts chapter.
+% Each refterm has the form {a} or {a:b}, where b is the term to
+% actually reference (e.g., \refterm{\PlainTeX:\plainTeX}).
+%
+\def\refterm#1{%
+ \reftermA #1:\endmark % Parse the stuff.
+ \expandafter\minrefsdelim\termtoref\endmark
+ \relax % Cancel the \ignorespaces.
+}%
+\def\reftermA#1:{\reftermfirst{#1}\futurelet\next\reftermB}
+\def\reftermB#1\endmark{\ifx\endmark \next \else \reftermsecond#1\fi}
+
+\def\reftermfirst#1{#1\def\termtoref{#1}}
+\def\reftermsecond#1:{\def\termtoref{#1}}%
+
+% The defining sentence for a concept.
+%
+\def\defterm#1{{\it #1\/}}
+
+
+% This macro prints the single page that will go on the back cover.
+%
+\def\printconceptpage{%
+ % Make sure this is considered an odd page.
+ \ifodd\pageno\else\blankpage\fi
+ \noheadlinetrue
+ \advance\hsize by 2pc
+ \vglue2pc % Plus a \topskip of 2pc.
+ {\sectionfonts \leftline{List of concepts}}%
+ \vskip\belowsectionskip
+ {\conceptpagefonts
+ \parindent=0pt
+ \makecolumns 94/3:
+ \input \jobname.ccs
+ \vfil
+ % Put the `logo' at the bottom of the page.
+ \rightline{\thisbook}%
+ }%
+ \eject
+}
+
+
+
+% Macros for the commands chapters.
+%
+% \ifcommands is true when we're within \begindescriptions ...
+
+\newif\ifcommands
+
+
+% \begindescriptions should be called to start the actual control sequences.
+%
+\outer\def\begindescriptions{\beginit{DESCRIPTIONS}%
+ % The following definitions are local to this chapter.
+ %
+ \let\example = \commandexample
+ \let\endexample = \endcommandexample
+ \interlinepenalty = 50
+ %
+ \commandstrue
+ \ignorespaces
+}
+
+% The \endgroup that \enddescriptions does must come after the page
+% break, so the last page of descriptions will get a mini-index.
+%
+\def\enddescriptions{%
+ \vskip -\lastskip % undo the skip created by \enddesc
+ \endit{DESCRIPTIONS}%
+ \ignorespaces
+}
+
+
+% Begin or end the description of a control sequence or group thereof.
+%
+\def\begindesc{%
+ \par % force vertical mode
+ \saveskip = \lastskip % will be 0 if no skip
+ \ifheading % Did we just have \section or \subsection?
+ \nobreak
+ \else
+ \cmdbreak
+ \fi
+ \combineskips\abovedescriptionskip
+ \headingfalse
+ \beginit{DESCRIPTION}%
+ \beginit{COMMANDS}%
+ % Each command name is set as a paragraph (for reasons I don't
+ % remember, \leftline doesn't work because of the way the manuscript
+ % was typed), and so \clubpenalty will be the penalty at the
+ % interline glue (see p.96).
+ \clubpenalty = \intercmdnamepenalty
+ \parfillskip = 0pt plus 1fil
+ \ignorespaces
+}
+
+\def\enddesc{%
+ \nobreak % if we need a break, we'll get it from the next group opener
+ \vskip\belowdescriptionskip
+ \endit{DESCRIPTION}%
+ \ignorespaces
+}
+
+% Begin the explanation of a control sequence. Don't break at the
+% space above the explanation, or the interline glue before the first line.
+%
+\def\explain{%
+ \par
+ \endit{COMMANDS}%
+ \nobreak \vskip\explainskip
+ \interlinepenalty = 50
+ \nobreak \noindent
+ \ignorespaces
+}
+
+% Here is how \example looks in the text:
+% \example
+% ...
+% |
+% \produces
+% ...
+% \endexample
+%
+% repeated an indefinite number of times.
+%
+% We want to set the code of an example in a box so as to prevent it from
+% being broken across pages. By using \vtop we assure that the code is the
+% right distance from the `Example:' line. In order to keep the `produces:'
+% the right distance from the last code line, we save the depth of that code
+% line and then fool TeX into thinking that the \vtop has that depth by
+% assigning it to \prevdepth. If we didn't do this, the last line of the code
+% would be too close to the `produces:' (as indeed it was in earlier versions
+% of the book.
+%
+\newdimen\savedepth
+
+{\makeactive|
+\gdef\commandexample{% a.k.a. \example, inside \begindescriptions.
+ \cmdbreak\vskip\exampleskip
+ \leftline{\it Example:}%
+ \nobreak % At the interline glue.
+ \beginit{EXAMPLE}%
+ \parfillskip = 0pt plus 1fil
+ \hbox\bgroup\hskip\parindent\vtop\bgroup
+ \begincs
+ \let | = \endcode
+ \advance\hsize by -\parindent
+ \parindent = 0pt
+ \bgroup\obeywhitespace
+}}%
+
+\def\endcode{%
+ \egroup % end \obeywhitespace group
+ \par\global\savedepth=\prevdepth
+ \egroup % end inner \vbox
+ \egroup % end outer \hbox
+ \prevdepth = \savedepth
+ \ignorespaces
+}
+
+% \dproduces should be used when the following material is a math
+% display.
+%
+\newif\ifexampledisplay
+\def\dproduces{\global\exampledisplaytrue \produces}
+
+\newif\ifproduces
+
+% \produces puts its material into a vbox so it won't be broken.
+% The material starts in VERTICAL MODE! It uses the plainTeX conventions
+% except that \parindent is 0pt.
+
+\def\produces{%
+ \producestrue
+ \ifodd\pageno \par \nobreak \else \cmdbreak\fi
+ \vskip\tinyskipamount
+ \noindent {\it produces\ifexamplelog\ in the log\examplelogfalse\fi :}%
+ \vadjust{\nobreak}% At the interline glue.
+ \ifexampledisplay
+ \centereddisplays
+ \else
+ \par\nobreak
+ \advance\hsize by -\parindent
+ \savedepth = \prevdepth
+ \nointerlineskip
+ \hbox\bgroup\hskip\normalindent
+ \vtop\bgroup \restoreplainTeX \parindent = 0pt
+ \prevdepth = \savedepth
+ \fi
+}%
+
+% we need another ``produces'' form for when a command puts things in
+% the log. In this case, the produces text also ends with a |.
+%
+\newif\ifexamplelog
+{\makeactive|
+\gdef\logproduces{\examplelogtrue\produces
+ \begincs
+ \def |{\endcode\producesfalse}%
+ % Every line is set as a paragraph, so we get one \parindent for free.
+ % But we also did \advance\leftskip in \produces, so now we have two.
+ % We only want one.
+ \advance\leftskip by -\parindent
+ \bgroup\obeywhitespace
+}}%
+
+\def\nextexample{\endexample\interexampleskip\example}
+
+\def\endcommandexample{%
+ \par % force vertical mode, set previous paragraph
+ \ifproduces \ifexampledisplay \global\exampledisplayfalse \else
+ \global\savedepth = \prevdepth
+ \egroup % Matches the \vtop in either the \produces or the \example.
+ \egroup % Matches the \hbox in \producesbox.
+ \global\producesfalse
+ \par
+ \prevdepth = \savedepth
+ \fi\fi
+ \endit{EXAMPLE}%
+ \ignorespaces
+}
+
+\def\see{%
+ \ifodd\pageno\nobreak\fi % don't put at the top of a verso page
+ \vskip -\lastskip % should be \belowdescriptionskip
+ \bigskip
+ \noindent
+ {\tenbi \spaceskip = 3.33pt plus 2pt minus 1.1pt
+ \parfillskip = 0pt plus 1fil
+ See also: %k \hskip 1em plus .5em minus .25em
+ }%
+ \ignorespaces
+}%
+
+
+\newif\ifxref \xreftrue
+
+% \aux acts as a prefix to a \cts command, specifying that a
+% cross-reference should not be generated.
+%
+\def\aux{\xreffalse}
+
+% So does \easy, which prints a hand, pointing at the control sequence.
+% (The hand font doesn't define an em.)
+%
+\newif\ifeasy
+\let\easy = \easytrue
+\def\testeasy{\ifeasy\llap{\hand\ \kern 6pt}\easyfalse\fi}
+
+% \cts typesets the beginning of a control sequence description, and
+% generates an index entry and cross-reference definition for it. The
+% control sequence name must be delimited by a blank, since there may be
+% parameters that follow. The control sequence name can contain special
+% characters; they are deactivated. The initial \ must be omitted.
+%
+\def\cts{\begingroup \deactivate \ctsA}
+\def\ctsA#1 {\endgroup \ctsB{#1}}
+\def\ctsB#1#2{%
+ \ctsbasic{\\#1}{#2}%
+ \ifxref \ctsxrdef{#1}\else \xreftrue \fi
+ \pix\ctsidxref{#1}%
+}
+
+% \ctsx is like \cts, but separates the control sequence name and the
+% text by more space. (`x' for `extra')
+%
+\def\ctsx{\begingroup \deactivate \ctsxA}
+\def\ctsxA#1 {\endgroup \ctsxB{#1}}
+\def\ctsxB#1#2{%
+ \ctsbasic{\\#1}{\quad #2}%
+ \ifxref \ctsxrdef{#1}\else \xreftrue \fi
+ \pix\ctsidxref{#1}%
+}
+
+
+% \ctscol is like \cts, but doesn't start a new paragraph. It's used in
+% in columns of cs's and their explanations.
+%
+\def\ctscol#1 #2{%
+ {\bt \\#1}\quad #2%
+ \ifxref \ctsxrdef{#1}\else \xreftrue \fi
+ \pix\ctsidxref{#1}%
+}
+
+% \ctsbasic does the actual printing of a cs name. It's needed on its
+% own for `\ '. It does not generate any index or cross-reference
+% entries. #1 is the command name, #2 some (possibly empty) text to go
+% next to it.
+%
+\def\ctsbasic#1#2{%
+ \par
+ \nobreak % At the \parskip glue the \noindent will produce.
+ \noindent\testeasy {{\bt #1}\space #2}%
+}
+
+% \ctsxrdef generates a control sequence cross-reference definition.
+% For example, `\ctsxrdef{@star}' generates a cross-reference definition
+% for `\@star'.
+%
+\def\ctsxrdef#1{\expandafter\xrdef\csname#1\endcsname}
+
+% \ctsact prints an active character #1 and generates an index entry
+% for it. #1 is blank-delimited. \ctsact does not generate a
+% cross-reference definition.
+%
+\def\ctsact{\begingroup \deactivate \ctsactA}
+\def\ctsactA#1 {\endgroup
+ \ctsbasic{#1}{}%
+ \pix\ttidxref{#1}}
+
+% \ctspecial prints a control sequence #1 and generates an index
+% entry for it. #1 is blank-delimited. \ctspecial does not
+% automatically generate a cross-reference definition, and so it's used
+% for things like \newbox and \%.
+%
+\def\ctspecial{\begingroup \deactivate \ctspecialA}
+\def\ctspecialA#1 {\endgroup
+ \ctsbasic{\\#1}{}%
+ \pix\ctsidxref{#1}%
+}
+
+% \ctspecialx is like \ctspecial, but leaves more space after its
+% argument. We want ` and ' to come from cmtt, instead of Optima, so we
+% call \mapquotes before reading the argument. This only affects the \`
+% and \' descriptions.
+%
+\def\ctspecialx{\begingroup \deactivate \mapquotes \ctspecialxA}
+\def\ctspecialxA#1 {\endgroup
+ \ctsbasic{\\#1}{}\quad
+ \pix\ctsidxref{#1}%
+}
+
+% \ctsdisplay has a blank-delimited argument consisting of a control
+% sequence such as alpha. It produces $\alpha$ followed by \alpha.
+%
+\def\ctsdisplay#1 {\basicdisplay {$\csname #1\endcsname$}{\\#1}%
+ \ifxref\ctsxrdef{#1}\else\xreftrue\fi \pix\ctsidxref {#1}}
+
+% \ctsdoubledisplay has a blank-delimited argument consisting of a
+% control sequence such as bigvee. It produces $\bigvee$ and
+% $\big\bigvee$ followed by \bigvee.
+%
+\def\ctsdoubledisplay#1 {
+ {%
+ \symbolspace = 42pt
+ \basicdisplay{$\csname #1\endcsname\quad
+ \displaystyle\csname #1\endcsname$\ddstrut}%
+ {\\#1}%
+ }%
+ \ifxref\ctsxrdef{#1}\else\xreftrue\fi
+ \pix\ctsidxref{#1}%
+}
+\def\ddstrut{\vrule width0pt height15pt depth11pt}
+
+% \ctsydisplay displays a control symbol. #1 is a single character,
+% which may be active. #2 is the cross-reference label,
+% blank-delimited.
+%
+\def\ctsydisplay{\begingroup \deactivate\catcode`\|=\other \ctsydisplayA}
+\def\ctsydisplayA#1 #2 {\endgroup
+ \basicdisplay{$\csname\string#1\endcsname$}{\\#1}%
+ \ifxref \ctsxrdef{#2}\else \xreftrue \fi
+ \pix\ctsidxref{#1}%
+}
+
+% \actdisplay displays an active character. #1 is the character, and
+% #2 is the cross-reference label, blank-delimited.
+%
+\def\actdisplay{\begingroup\catcode `\|=\other\actdisplayA}
+\def\actdisplayA#1 #2 {\endgroup
+ \basicdisplay{$#1$}{\string#1}%
+ \ifxref \xrdef{#2}\else \xreftrue \fi
+ \pix\ttidxref{#1}%
+}
+
+% \basicdisplay does the actual typesetting of a control sequence name.
+% for inside displays.
+%
+\def\basicdisplay#1#2{\testeasy\hbox to \symbolspace{#1\hfil}{\bt #2}}
+
+% Printing parameter and table entry headings.
+%
+\def\param#1{\printparam{#1}{parameter}}
+\def\tblentry#1{\printparam{#1}{table entry}}
+\def\printparam#1#2{\hskip1.5em [\kern3pt \<#1> #2\kern2pt]}
+
+% Required braces.
+%
+\def\rqbraces#1{\{\hskip2pt#1\hskip2pt\}}
+
+% Printing rulers.
+%
+\def\1{\vrule height 0pt depth 2pt}
+\def\2{\vrule height 0pt depth 4pt}
+\def\3{\vrule height 0pt depth 6pt}
+\def\4{\vrule height 0pt depth 8pt}
+\def\ruler#1#2#3{{$\vcenter{\hrule\hbox{\4#1}}\,\,\rm#2\,{#3}$}}
+\def\doruler{\par \noindent\ruler}
+\def\tick#1{\hbox to .125in{\hfil#1}}
+\def\8{\tick\1\tick\2\tick\1\tick\3\tick\1\tick\2\tick\1\tick\4}
+
+% Macros for the capsule summary chapter.
+%
+\def\begincapsum{\beginit{CAPSULE SUMMARY}%
+ \let\bt = \tentt
+ \bigskip
+}
+
+\def\endcapsum{\endit{CAPSULE SUMMARY}}
+
+\newbox\@primitivebox \setbox\@primitivebox = \hbox{\tt *}
+\newif\ifcs
+
+\def\capline{\begingroup \deactivate\catcode `\| = \other \caplineA}
+\def\caplineA#1 {\endgroup
+ \begingroup
+ \catcode `@ = \letter % for constructing labels
+ \caplineB{#1}%
+}
+
+% Parameters of \caplineB:
+% #1 name of control sequence
+% #2 description
+% #3 * or empty
+% #4 xref or xref1:xref2 or empty
+
+\def\caplineB#1#2#3#4{%
+ \ifempty {#4}\temptrue\else\tempfalse\fi
+ % \iftemp needed to avoid \if ... \else ... \fi nesting problems
+ \ifcs
+ \toks0 = {\caplineout{\\#1}{#2}{#3}}%
+ \iftemp
+ \toks1 = \expandafter{\csname #1\endcsname}%
+ \else
+ \toks1 = {#4}%
+ \fi
+ \edef\nextaction{\the\toks0 {\the\toks1}}%
+ \nextaction
+ \ctsidxref {#1}%
+ \else
+ % The \space makes one-character entries line up nicely.
+ \caplineout{\space #1}{#2}{#3}{#4}%
+ \ttidxref {#1}%
+ \fi
+ \endgroup
+}
+
+\newif\iftemp
+
+
+% In a few cases we have two cross-references for a single control
+% sequence.
+%
+\newif\ifcstwo
+
+\def\capac{\cstwofalse\csfalse\capline}
+\def\capactwo{\cstwotrue\csfalse\capline}
+\def\capcs{\cstwofalse\cstrue\capline}
+\def\capcstwo{\cstwotrue\cstrue\capline}
+
+% \caplineout produces an output line (or several lines) for the capsule
+% summary. #1 is the command text, #2 is the description, #3 is either * or
+% empty, and #4 is the cross-reference label.
+%
+\def\caplineout#1#2#3#4{%
+ \setbox0 = \ifempty {#3}\box\voidb@x \else \copy\@primitivebox\fi
+ \vskip\intercapsuleskip
+ % If we use \vbox here, a multi-line summary at the top of a page
+ % will cause \topskip to disappear.
+ %
+ \vtop{\noindent \hangindent = \capsulehangindent
+ \spaceskip = 3.33pt plus 2pt minus 1.5pt
+ \rightskip = 0pt plus 4em % a little more stretch
+ \parfillskip = 0pt plus 1fil
+ \llap{\box0}{\bt #1}% Bold typewriter for the cs name.
+ \quad \hskip 0pt plus 1pt minus 1pt
+ #2\unskip\
+ (\ifcstwo \tworefs #4:\else \xref{#4}\fi)%
+ }%
+ \par
+}
+
+\def\tworefs#1:#2:{\xref{#1}, \xref{#2}}
+
+
+
+% Macros for printing the index.
+%
+% Set up to print it.
+%
+\def\beginindex{%
+ \doublecolumns
+ \beginit{THE INDEX}
+ \markinfo{\chaptername}%
+ \indexfonts
+ \parindent = 0pt
+ \def\pp##1{{\it ##1}} % Principal entry.
+ \def\c{,\thinspace\allowbreak}%
+ \def\ic{,\quad}
+ \def\see##1{.\quad{\it See} ##1 }
+ \def\seealso##1{\hfil\break{\it See also} ##1 }
+ \let\r = \romannumeral
+
+ \raggedright
+}
+
+\def\endindex{\endit{THE INDEX}\singlecolumn}
+
+
+% #1 is the level of this index entry minus 1 (i.e., 0 for a main
+% entry), #2 is the index term, #3 is the kind of term
+% (T for ttfont, C for control sequence, N for normal), and
+% #4 is the list of pages. The page list can have \pp (principal
+% entry)in it, and each page is separated by \c.
+%
+\def\indexentry#1#2#3#4{%
+ \beginit{INDEX ENTRY}%
+ \leftskip = #1\indexpageindent
+ \par
+ \leavevmode
+ \hangindent = \indexlevelindent
+ \ifx #3T%
+ {\tt #2}% Typewriter.
+ \else \ifx #3C%
+ {\tt \llap{\\}#2}% Control sequence.
+ \else
+ % in normal entries, \b and \e enclose a group. ({ and } don't work.)
+ {\let \b = \bgroup \let \e = \egroup #2}%
+ \fi\fi
+ #4% The list of pages.
+ \par
+ \endit{INDEX ENTRY}%
+}
+
+% Nah, let's forget printing the initial.
+%
+\def\indexgroup#1{%
+ \bigskip
+}
+
+
+
+% Code formatting.
+%
+%
+% Turn off normally special characters.
+%
+\def\deactivate{%
+ \catcode`\\ = \other \catcode`\{ = \other \catcode`\} = \other
+ \catcode`\$ = \other \catcode`\& = \other \catcode`\# = \other
+ \catcode`\% = \other \catcode`\~ = \other \catcode`\^ = \other
+ \catcode`\_ = \other
+}
+
+% It is convenient to have |...| mean print the ... verbatim, except for !.
+% (But | should just be a vertical bar in math mode.) This should be
+% used only for inline code; returns inside |...| become spaces.
+%
+\catcode`\| = \active
+\def|{%
+ \ifmmode
+ \vert
+ \else
+ \begingroup
+ \obeyspaces
+ \begincs
+ \let| = \endgroup
+ \fi
+}
+
+% \csdisplay is similar, but it inserts glue before and after.
+% It also is ended by |, so we have to redefine that.
+%
+\def\csdisplay{%
+ \par
+ \nobreak % don't break above displays
+ \vskip\abovedisplayskip
+ \begingroup
+ \interlinepenalty = 10000
+ \obeywhitespace
+ \begincs
+ \def|{\endgroup\vskip\belowdisplayskip \noindent\ignorespaces}%
+}
+
+% \begincs does the setup for verbatim printing. It does not confine
+% its effects to a group.
+%
+\def\begincs{%
+ \hfuzz = \codefuzz
+ \parfillskip = 0pt plus 1fil
+ \parskip = 0pt % don't stretch interparagraph space within code displays
+ \catcode`\! = 0
+ \let\! = \exclam
+ \let\| = \verticalbar
+ \let\$ = $%
+ \let\. = \empty % Use !. to end a control sequence to be executed.
+ \def\-{\discretionary{-}{}{}}% but allow explicit discretionary hyphens
+ \tt \deactivate
+}
+
+
+\chardef\exclam = `\!
+\chardef\verticalbar = `\|
+
+% In math mode we want vertical bars and exclamation points to be
+% regular characters again.
+%
+\everymath = {\setmathchars}
+\everydisplay = {\setmathchars}
+\leftdisplays
+
+\def\setmathchars{%
+ \catcode`\| = \other \catcode`\! = \other
+ \let\{ = \lbrace \let\} = \rbrace
+}
+
+
+
+
+% Some miscellanous macros.
+%
+\def\anatomy{anatomy of \TeX}
+\def\ascii{{\ninerm ASCII}}
+\def\asciichar#1{$\langle \rm #1\rangle$}
+\def\bblfile{{\tt .bbl} file}
+\def\bibfile{{\tt .bib} file}
+\def\bstfile{{\tt .bst} file}
+\def\didotpt{did\^ot point}
+\def\dvifile{{\tt .dvi} file}
+\def\em{\thinspace {\rm em}}
+\def\emph#1{{\it #1}\itcorr} % Emphasize.
+\def\ftp{{\tt ftp}}
+\def\gffile{{\tt .gf} file}
+\def\hand{{\handfont A}}
+\def\ifatest{{\tt \\if} test}
+\chardef\inches = "7D
+\def\knuth#1{#1 of \texbook}
+\let\Metafont = \MF
+\def\Mperiod.{$M$\kern-1.6pt.}
+\def\Mprimecomma,{$M'$\kern-3.5pt,}
+\def\Mprimeperiod.{$M'$\kern-2.5pt.}
+\def\mud{\thinspace {\rm mu}} % can't use \mu; it'a a Greek letter!
+\def\newTeX{new \TeX}
+\def\p{p.\thinspace}
+\def\pkfile{{\tt .pk} file}
+\def\plainTeX{plain \TeX}
+\def\PlainTeX{Plain \TeX}
+\def\pp{p\p}
+\def\pt{\thinspace {\rm pt}}
+\def\pxlfile{{\tt .pxl} file}
+\def\tequiv{\unskip $\>\equiv\>$} % equivalence in text
+\def\texbook{{\sl The \TeX book}\itcorr}
+\let\tex@ = \TeX
+\def\TeX{\tex@\null}
+\def\TeXMeX{\TeX\ M\kern-.11em\lower .5ex\hbox{E}\kern-.125em X\null}%
+\def\tfmfile{{\tt .tfm} file}
+\def\thisbook{{\sl \TeX\ for the Impatient\/}}
+\let\ths = \thinspace
+\def\tminus{\unskip\allowbreak $\>-\>$\allowbreak} % minus in text
+\def\tplus{\unskip\allowbreak $\>+\>$\allowbreak} % plus in text
+\def\TUG{\TeX{} Users Group}
+\def\Vcomma,{$V$\kern-2pt,}
+\def\visiblespace{{\tentt \char'040}}
+\def\Vperiod.{$V$\kern-2pt.}
+\let\vs=\visiblespace
+\def\xrefpg#1{page~\xrefn{#1}}
+
+% \tighten attempts to shorten the number of lines occupied by a paragraph.
+\def\tighten{\looseness=-1
+ \spaceskip = .9\fontdimen2\font plus \fontdimen3\font
+ minus 1.1\fontdimen4\font
+}
+
+% \itcorr can be used at the end of a macro that puts its argument in
+% italics in order to produce an italic correction just when it's needed.
+% It won't look inside a following macro call, however.
+
+\def\itcorr{\futurelet\next\itcorrA}
+\def\itcorrA{\ifx.\next\else\ifx,\next\else\/\fi\fi}
+
+
+% Arrange N items in three columns.
+% A right brace is needed at the end of the list to match the \bgroup.
+%
+\def\threecolumns{\nobreak\vskip\abovedisplayskip\dothreecolumns}
+
+\def\dothreecolumns#1 {\bgroup
+ \parindent = 0pt
+ \makecolumns #1/3:
+}
+
+% We don't want to make < an active character because then it cannot be used
+% in \ifnum tests. So, \<foo> denotes a nonterminal `foo'.
+%
+\def\<#1>{$\langle${\rm\it \kern-.2pt #1\kern.65pt}$\rangle$}
+
+\let\beginit = \environment
+\let\endit = \endenvironment
+
+\def\eatpar#1\par{}
+
+% \needspace breaks out the page if there's less than #1 left on it.
+
+\def\needspace#1{%
+ \saveskip = \lastskip
+ \par % force vertical mode
+ \vfil
+ \penalty 1000
+ \vskip #1
+ \penalty9999
+ \par % exercise the page builder
+ \vskip -#1 plus -1fil
+ \vskip -\saveskip \vskip \saveskip % to restore \lastskip
+}
+
+
+
+
+% Expanded cross-referencing for various parts of the books.
+%
+
+% Sometimes it is clearer to refer to a cross-reference as a control
+% sequence.
+%
+\def\ctsref{\begingroup \catcode`\@ = \letter \@ctsref}
+\def\@ctsref#1{(\xref{#1})\endgroup}
+
+\def\xrefdelim[#1]{page~\xrefn{#1}} % this form doesn't need braces
+
+% This command comes at the beginning of chapters, after the \chapter
+% command and before the text. Hence the \par in the template
+% and the \noindent
+%
+\def\chapterdef#1#2\par{%
+ \@writeaux{%
+ \string\gdef\expandafter\string
+ \csname#1_C\endcsname{\the\chapterno}}%
+ \noindent
+}
+
+\def\chapternum#1{%
+ \def\csn{#1_C}%
+ \expandafter\ifx\csname\csn\endcsname \relax
+ \expandafter\def\csname\csn\endcsname{`#1'}%
+ \ifxrefwarning
+ \message{Undefined chapter `#1'.}%
+ \fi
+ \fi
+ \csname\csn\endcsname
+}
+
+\def\chapterref#1{Section~\chapternum{#1}}
+
+\def\headcit#1#2{``{\rm #1}'' (\xref{#2})}
+
+\def\conceptcit#1{\headcit{#1}{#1}}
+
+\def\seeconcept#1{(see ``{\rm #1}'', \xref{#1})}
+
+
+
+
+% Special types of pictures.
+%
+% Glue pictures:
+%
+\newdimen\glueboxwidth
+\newdimen\boxdepth \boxdepth = 3.5pc
+\newskip\underlabel \underlabel= .1\boxdepth % space under `width n'.
+\def\squeezeglue{\glueboxwidth = .725\glueboxwidth}
+
+\def\labelledbox#1 #2 #3{\vtop{%
+ \hrule
+ \hbox{%
+ \vrule
+ \hbox to #1{\hfil \vbox to #2{\vfil#3\vskip\underlabel}\hfil}%
+ \vrule
+ }%
+ \hrule
+}}%
+
+% Make a picture of a box.
+%
+\def\picbox#1 {%
+ \glueboxwidth = #1pc \squeezeglue
+ \vtop{%
+ \hbox to \glueboxwidth{\strut \hfil {\it box}\hfil}%
+ \labelledbox % Have to have spaces after the arguments.
+ {\glueboxwidth}
+ {\boxdepth}
+ {\halign{\hfil##\hfil\cr width #1\cr}}%
+ }%
+}
+
+% And of glue.
+%
+\def\gluebox#1 #2 #3 #4 {\vtop{%
+ \glueboxwidth = #4pc \squeezeglue
+ \hbox to \glueboxwidth{\strut \hfil {\it glue}\hfil}%
+ \nointerlineskip
+ \kern2pt % to move the brace down a bit
+ \hbox{$\overbrace{\hbox{\hskip\glueboxwidth}}$}%
+ \kern-3pt % The \overbrace puts in 3pt below itself.
+ \nointerlineskip
+ \vbox to \boxdepth{%
+ \hsize = \glueboxwidth
+ \vskip 2pt
+ \advance\baselineskip by -2pt
+ \centerline{\strut size #1}%
+ \centerline{stretch #2}%
+ \centerline{shrink #3}%
+ \centerline{width #4}%
+ \vss
+ }%
+ \kern 1.5pt % I don't know why this is needed.
+ \nointerlineskip
+ \hbox{$\underbrace{\hbox{\hskip\glueboxwidth}}$}%
+}}
+
+\def\gluepicture#1 #2{{\ninerm
+ \medskip
+ \vtop{%
+ \setbox0 = \hbox{#2}% The glue and box pictures.
+ \glueboxwidth = \wd0
+ \leftline{\box0}%
+ \kern 6pt
+ \hbox to \glueboxwidth{\leftarrowfill{ width #1 }\rightarrowfill}%
+ }%
+ \medskip
+}}
+
+% Box pictures.
+%
+% Set up a `reference point' and the macro for a labelled height, for use
+% in forming pictures of boxes.
+%
+\newbox\refpoint
+
+\setbox\refpoint = \vbox to 0pt{%
+ \kern-2.6pt
+ \hbox to 0pt{\kern-2.2pt $\bullet$\hss}
+ \vss
+}%
+
+\def\labelledheight#1#2{%
+\vtop to #1{\offinterlineskip
+ \setbox0=\hbox{#2}\skip0=\wd0
+ \hbox to \skip0{\hss\tenex\char"78\hss}\kern-4pt
+ {\cleaders\hbox to \skip0{\hss\tenex\char"3F\hss}\vfil}%
+ \vskip1pt\box0\vskip1pt
+ {\cleaders\hbox to \skip0{\hss\tenex\char"3F\hss}\vfil}%
+ \kern -6pt\boxmaxdepth 0pt\hbox to \skip0{\hss\tenex\char"79\hss}}}
+
+
+
+% Paul's updates -- no longer needed; we have converged.
+%
+%\input paulmacs
+
+% Read the cross-reference definitions.
+%
+\readauxfile
+
+\catcode`\@ = \other % Make @ an `other' character again.
+\catcode`\^ = \active % Make ^'s do indexing outside of math mode.
diff --git a/Master/texmf-dist/doc/plain/impatient/math.tex b/Master/texmf-dist/doc/plain/impatient/math.tex
new file mode 100644
index 00000000000..31d7f1aa157
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/math.tex
@@ -0,0 +1,2190 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter {Commands \linebreak for composing \linebreak math formulas}
+
+\bix^^{math}
+\chapterdef{math}
+
+This section covers commands for constructing math formulas.
+For an explanation of the conventions used in this section,
+see \headcit{Descriptions of the commands}{cmddesc}.
+
+\begindescriptions
+%==========================================================================
+\section {Simple parts of formulas}
+
+%==========================================================================
+\subsection {Greek letters}
+
+\begindesc
+\bix^^{Greek letters}
+\dothreecolumns 40
+\easy\ctsdisplay alpha {}
+\ctsdisplay beta {}
+\ctsdisplay chi {}
+\ctsdisplay delta {}
+\ctsdisplay Delta {}
+\ctsdisplay epsilon {}
+\ctsdisplay varepsilon {}
+\ctsdisplay eta {}
+\ctsdisplay gamma {}
+\ctsdisplay Gamma {}
+\ctsdisplay iota {}
+\ctsdisplay kappa {}
+\ctsdisplay lambda {}
+\ctsdisplay Lambda {}
+\ctsdisplay mu {}
+\ctsdisplay nu {}
+\ctsdisplay omega {}
+\ctsdisplay Omega {}
+\ctsdisplay phi {}
+\ctsdisplay varphi {}
+\ctsdisplay Phi {}
+\ctsdisplay pi {}
+\ctsdisplay varpi {}
+\ctsdisplay Pi {}
+\ctsdisplay psi {}
+\ctsdisplay Psi {}
+\ctsdisplay rho {}
+\ctsdisplay varrho {}
+\ctsdisplay sigma {}
+\ctsdisplay varsigma {}
+\ctsdisplay Sigma {}
+\ctsdisplay tau {}
+\ctsdisplay theta {}
+\ctsdisplay vartheta {}
+\ctsdisplay Theta {}
+\ctsdisplay upsilon {}
+\ctsdisplay Upsilon {}
+\ctsdisplay xi {}
+\ctsdisplay Xi {}
+\ctsdisplay zeta {}
+\egroup
+\explain
+These commands produce Greek letters suitable for mathematics.
+You can only use them
+within a math formula, so if you need a Greek letter within ordinary
+text you must enclose it in dollar signs (|$|). \TeX\ does not have
+commands for Greek letters that look like their roman
+counterparts, since you can get them by using those roman
+counterparts. For example, you can get a lowercase
+^{omicron} in a formula by writing the letter `o', i.e.,
+`|{\rm o}|' or an uppercase ^{beta} (`B') by writing
+`|{\rm B}|'.
+
+Don't confuse the following letters:
+\ulist \compact
+\li |\upsilon| (`$\upsilon$'), |{\rm v}| (`v'), and |\nu| (`$\nu$').
+\li |\varsigma| (`$\varsigma$') and |\zeta| (`$\zeta$').
+\endulist
+
+You can get slanted capital Greek letters by using the math italic
+(|\mit|) \minref{font}.
+
+\TeX\ treats Greek letters as ordinary symbols when it's figuring how
+much space to put around them.
+
+\example
+If $\rho$ and $\theta$ are both positive, then $f(\theta)
+-{\mit \Gamma}_{\theta} < f(\rho)-{\mit \Gamma}_{\rho}$.
+|
+\produces
+If $\rho$ and $\theta$ are both positive, then
+$f(\theta)-{\mit \Gamma}_{\theta} < f(\rho)-{\mit \Gamma}_{\rho}$.
+\endexample
+\eix^^{Greek letters}
+\enddesc
+
+%==========================================================================
+\subsection {Miscellaneous ordinary math symbols}
+
+\begindesc
+\xrdef{specsyms}
+\dothreecolumns 34
+\easy\ctsdisplay infty {}
+\ctsdisplay Re {}
+\ctsdisplay Im {}
+\ctsdisplay angle {}
+\ctsdisplay triangle {}
+\ctsdisplay backslash {}
+\ctsdisplay vert {}
+\ctsydisplay | @bar {}
+\ctsdisplay Vert {}
+\ctsdisplay emptyset {}
+\ctsdisplay bot {}
+\ctsdisplay top {}
+\ctsdisplay exists {}
+\ctsdisplay forall {}
+\ctsdisplay hbar {}
+\ctsdisplay ell {}
+\ctsdisplay aleph {}
+\ctsdisplay imath {}
+\ctsdisplay jmath {}
+\ctsdisplay nabla {}
+\ctsdisplay neg {}
+\ctsdisplay lnot {}
+\actdisplay ' @prime \ (apostrophe)
+\ctsdisplay prime {}
+\ctsdisplay partial {}
+\ctsdisplay surd {}
+\ctsdisplay wp {}
+\ctsdisplay flat {}
+\ctsdisplay sharp {}
+\ctsdisplay natural {}
+\ctsdisplay clubsuit {}
+\ctsdisplay diamondsuit {}
+\ctsdisplay heartsuit {}
+\ctsdisplay spadesuit {}
+\egroup
+\explain
+^^{music symbols} ^^{card suits}
+These commands produce various symbols. They are called
+``^{ordinary symbol}s'' to distinguish them from other classes of
+symbols such as relations. You can only use
+an ordinary symbol
+within a math formula, so if you need an ordinary symbol within ordinary text
+you must enclose it in dollar signs (|$|).
+
+The commands |\imath| and |\jmath| are useful when you need to put an
+accent on top of an `$i$' or a `$j$'.
+
+An apostrophe (|'|) is a short way of writing a superscript |\prime|. (The
+|\prime| command by itself generates a big ugly prime.)
+
+The |\!|| and ^|\Vert| commands are synonymous, as
+are the ^|\neg| and ^|\lnot| commands.
+\margin{explanation of {\tt\\vert} added}
+The |\vert| command produces the same result as `|!||'.
+\indexchar |
+
+The symbols produced by |\backslash|, |\vert|, and |\Vert|
+are \minref{delimiter}s. These symbols can be produced in larger sizes
+by using ^|\bigm| et al.\ (\xref \bigm).
+
+\example
+The Knave of $\heartsuit$s, he stole some tarts.
+|
+\produces
+The Knave of $\heartsuit$s, he stole some tarts.
+\nextexample
+If $\hat\imath < \hat\jmath$ then $i' \leq j^\prime$.
+|
+\produces
+If $\hat\imath < \hat\jmath$ then $i' \leq j^\prime$.
+\nextexample
+$${{x-a}\over{x+a}}\biggm\backslash{{y-b}\over{y+b}}$$
+|
+\dproduces
+$${{x-a}\over{x+a}}\biggm\backslash{{y-b}\over{y+b}}$$
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Binary operations}
+
+\begindesc
+\bix^^{operations}
+\xrdef{binops}
+\dothreecolumns 34
+\easy\ctsdisplay vee {}
+\ctsdisplay wedge {}
+\ctsdisplay amalg {}
+\ctsdisplay cap {}
+\ctsdisplay cup {}
+\ctsdisplay uplus {}
+\ctsdisplay sqcap {}
+\ctsdisplay sqcup {}
+\ctsdisplay dagger {}
+\ctsdisplay ddagger {}
+\ctsdisplay land {}
+\ctsdisplay lor {}
+\ctsdisplay cdot {}
+\ctsdisplay diamond {}
+\ctsdisplay bullet {}
+\ctsdisplay circ {}
+\ctsdisplay bigcirc {}
+\ctsdisplay odot {}
+\ctsdisplay ominus {}
+\ctsdisplay oplus {}
+\ctsdisplay oslash {}
+\ctsdisplay otimes {}
+\ctsdisplay pm {}
+\ctsdisplay mp {}
+\ctsdisplay triangleleft {}
+\ctsdisplay triangleright {}
+\ctsdisplay bigtriangledown {}
+\ctsdisplay bigtriangleup {}
+\ctsdisplay ast {}
+\ctsdisplay star {}
+\ctsdisplay times {}
+\ctsdisplay div {}
+\ctsdisplay setminus {}
+\ctsdisplay wr {}
+\egroup
+\explain
+These commands produce the symbols for various binary operations.
+Binary operations are one of \TeX's \minref{class}es of math symbols.
+\TeX\ puts different amounts of space around different classes of math
+symbols. When \TeX\ needs to break a line of text within a math
+formula, \minrefs{line break} it will consider placing the break
+after a binary operation---but only if
+the operation is at the outermost level of
+the formula, i.e., not enclosed in~a~group.
+
+In addition to these commands, \TeX\ also treats `|+|' and `|-|'
+as binary operations. It considers `|/|' to be an ordinary symbol,
+despite the fact that mathematically it is a binary operation,
+because it looks better with less space around it.
+
+\example
+$$z = x \div y \quad \hbox{if and only if} \quad
+z \times y = x \;\hbox{and}\; y \neq 0$$
+|
+\dproduces
+$$z = x \div y \quad \hbox{if and only if} \quad
+z \times y = x \;\hbox{and}\; y \neq 0$$
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial * \ctsxrdef{@star}
+\explain
+The |\*| command indicates a discretionary multiplication symbol
+($\times$), which is a binary operation. This multiplication symbol
+behaves like a discretionary hyphen when it appears in a formula within
+text\minrefs{text math}. That is, \TeX\ will typeset the |\times|
+symbol \emph{only} if the formula needs to be broken at that point.
+There's no point in using |\*| in a displayed formula \minrefs{display
+math} since \TeX\ never breaks displayed formulas on its own.
+
+\example
+Let $c = a\*b$. In the case that $c=0$ or $c=1$, let
+$\Delta$ be $(\hbox{the smallest $q$})\*(\hbox{the
+largest $q$})$ in the set of approximate $\tau$-values.
+|
+\produces
+Let $c = a\*b$. In the case that $c=0$ or $c=1$, let
+$\Delta$ be $(\hbox{the smallest $q$})\*(\hbox{the
+largest $q$})$ in the set of approximate $\tau$-values.
+
+\eix^^{operations}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Relations}
+
+\begindesc
+\xrdef {relations}
+\bix^^{relations}
+\dothreecolumns 39
+\easy\ctsdisplay asymp {}
+\ctsdisplay cong {}
+\ctsdisplay dashv {}
+\ctsdisplay vdash {}
+\ctsdisplay perp {}
+\ctsdisplay mid {}
+\ctsdisplay parallel {}
+\ctsdisplay doteq {}
+\ctsdisplay equiv {}
+\ctsdisplay ge {}
+\ctsdisplay geq {}
+\ctsdisplay le {}
+\ctsdisplay leq {}
+\ctsdisplay gg {}
+\ctsdisplay ll {}
+\ctsdisplay models {}
+\ctsdisplay ne {}
+\ctsdisplay neq {}
+\ctsdisplay notin {}
+\ctsdisplay in {}
+\ctsdisplay ni {}
+\ctsdisplay owns {}
+\ctsdisplay prec {}
+\ctsdisplay preceq {}
+\ctsdisplay succ {}
+\ctsdisplay succeq {}
+\ctsdisplay bowtie {}
+\ctsdisplay propto {}
+\ctsdisplay approx {}
+\ctsdisplay sim {}
+\ctsdisplay simeq {}
+\ctsdisplay frown {}
+\ctsdisplay smile {}
+\ctsdisplay subset {}
+\ctsdisplay subseteq {}
+\ctsdisplay supset {}
+\ctsdisplay supseteq {}
+\ctsdisplay sqsubseteq {}
+\ctsdisplay sqsupseteq {}
+\egroup
+\explain
+These commands produce the symbols for various relations.
+Relations are one of \TeX's \minref{class}es of math symbols.
+\TeX\ puts different amounts of space
+around different \minref{class}es of math symbols.
+When \TeX\ needs to break a line of text
+within a math formula, \minrefs{line break} it will consider
+placing the break after a relation---but only if
+the relation is at the outermost level of the formula,
+i.e., not enclosed in a group.
+
+In addition to the commands listed here, \TeX\ treats `^|=|' and the
+``arrow'' commands (\xref{arrows}) as relations.
+
+Certain relations have more than one command that you can use
+to produce them:
+\ulist \compact
+\li `$\ge$' (|\ge| and |\geq|).
+\li `$\le$' (|\le| and |\leq|).
+\li `$\ne$' (|\ne|, |\neq|, and |\not=|).
+\li `$\ni$' (|\ni| and |\owns|).
+\endulist
+
+\xrdef{\not}
+You can produce negated relations by prefixing them with |\not|, as follows:
+
+\nobreak
+\threecolumns 21
+\basicdisplay {$\not\asymp$}{\\not\\asymp}\ctsidxref{asymp}
+\basicdisplay {$\not\cong$}{\\not\\cong}\ctsidxref{cong}
+\basicdisplay {$\not\equiv$}{\\not\\equiv}\ctsidxref{equiv}
+\basicdisplay {$\not=$}{\\not=}\ttidxref{=}
+\basicdisplay {$\not\ge$}{\\not\\ge}\ctsidxref{ge}
+\basicdisplay {$\not\geq$}{\\not\\geq}\ctsidxref{geq}
+\basicdisplay {$\not\le$}{\\not\\le}\ctsidxref{le}
+\basicdisplay {$\not\leq$}{\\not\\leq}\ctsidxref{leq}
+\basicdisplay {$\not\prec$}{\\not\\prec}\ctsidxref{prec}
+\basicdisplay {$\not\preceq$}{\\not\\preceq}\ctsidxref{preceq}
+\basicdisplay {$\not\succ$}{\\not\\succ}\ctsidxref{succ}
+\basicdisplay {$\not\succeq$}{\\not\\succeq}\ctsidxref{succeq}
+\basicdisplay {$\not\approx$}{\\not\\approx}\ctsidxref{approx}
+\basicdisplay {$\not\sim$}{\\not\\sim}\ctsidxref{sim}
+\basicdisplay {$\not\simeq$}{\\not\\simeq}\ctsidxref{simeq}
+\basicdisplay {$\not\subset$}{\\not\\subset}\ctsidxref{subset}
+\basicdisplay {$\not\subseteq$}{\\not\\subseteq}\ctsidxref{subseteq}
+\basicdisplay {$\not\supset$}{\\not\\supset}\ctsidxref{supset}
+\basicdisplay {$\not\supseteq$}{\\not\\supseteq}\ctsidxref{supseteq}
+\basicdisplay {$\not\sqsubseteq$}{\\not\\sqsubseteq}%
+ \ctsidxref{sqsubseteq}
+\basicdisplay {$\not\sqsupseteq$}{\\not\\sqsupseteq}%
+ \ctsidxref{sqsupseteq}
+\egroup
+
+\example
+We can show that $AB \perp AC$, and that
+$\triangle ABF \not\sim \triangle ACF$.
+|
+\produces
+We can show that $AB \perp AC$, and that
+$\triangle ABF \not\sim \triangle ACF$.
+
+\eix^^{relations}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Left and right delimiters}
+
+\begindesc
+\bix^^{delimiters}
+%
+\dothreecolumns 12
+\easy\ctsdisplay lbrace {}
+\ctsydisplay { @lbrace {}
+\ctsdisplay rbrace {}
+\ctsydisplay } @rbrace {}
+\ctsdisplay lbrack {}
+\ctsdisplay rbrack {}
+\ctsdisplay langle {}
+\ctsdisplay rangle {}
+\ctsdisplay lceil {}
+\ctsdisplay rceil {}
+\ctsdisplay lfloor {}
+\ctsdisplay rfloor {}
+\egroup
+\explain
+These commands produce left and right \minref{delimiter}s.
+Mathematicians use delimiters to indicate the boundaries between parts
+of a formula. Left delimiters are also called ``^{opening}s'', and
+right delimiters are also called ``^{closing}s''. Openings and closings
+are two of \TeX's \minref{class}es of math symbols. \TeX\ puts
+different amounts of space around different \minref{class}es of math
+symbols. You might expect the space that \TeX\ puts around openings and
+closings to be symmetrical, but in fact it isn't.
+
+Some left and right delimiters have more than one command that you can
+use to produce them:
+
+\ulist\compact
+\li `$\{$' (|\lbrace| and |\{|)
+\li `$\}$' (|\rbrace| and |\}|)
+\li `$[$' (|\lbrack| and `|[|')
+\li `$]$' (|\rbrack| and `|]|')
+\endulist
+\noindent You can also use the left and right bracket characters
+(in either form) outside of math mode.
+
+In addition to these commands, \TeX\ treats `|(|' as a left
+delimiter and `|)|' as a right delimiter.
+
+You can have \TeX\
+choose the size for a delimiter by using |\left| and |\right| (\xref\left).
+Alternatively,
+you can get a delimiter of a specific size by using one of the |\big|$x$
+commands (see |\big| et al., \xref{\big}).
+
+\example
+The set $\{\,x \mid x>0\,\}$ is empty.
+|
+\produces
+The set $\{\,x \mid x>0\,\}$ is empty.
+
+\eix^^{delimiters}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Arrows}
+
+\begindesc
+\bix^^{arrows}
+\xrdef{arrows}
+%
+{\symbolspace=24pt \makecolumns 34/2:
+\easy%
+\ctsdisplay leftarrow {}
+\ctsdisplay gets {}
+\ctsdisplay Leftarrow {}
+\ctsdisplay rightarrow {}
+\ctsdisplay to {}
+\ctsdisplay Rightarrow {}
+\ctsdisplay leftrightarrow {}
+\ctsdisplay Leftrightarrow {}
+\ctsdisplay longleftarrow {}
+\ctsdisplay Longleftarrow {}
+\ctsdisplay longrightarrow {}
+\ctsdisplay Longrightarrow {}
+\ctsdisplay longleftrightarrow {}
+\ctsdisplay Longleftrightarrow {}
+\basicdisplay {$\Longleftrightarrow$}{\\iff}\pix\ctsidxref{iff}\xrdef{\iff}
+\ctsdisplay hookleftarrow {}
+\ctsdisplay hookrightarrow {}
+\ctsdisplay leftharpoondown {}
+\ctsdisplay rightharpoondown {}
+\ctsdisplay leftharpoonup {}
+\ctsdisplay rightharpoonup {}
+\ctsdisplay rightleftharpoons {}
+\ctsdisplay mapsto {}
+\ctsdisplay longmapsto {}
+\ctsdisplay downarrow {}
+\ctsdisplay Downarrow {}
+\ctsdisplay uparrow {}
+\ctsdisplay Uparrow {}
+\ctsdisplay updownarrow {}
+\ctsdisplay Updownarrow {}
+\ctsdisplay nearrow {}
+\ctsdisplay searrow {}
+\ctsdisplay nwarrow {}
+\ctsdisplay swarrow {}
+}
+\explain
+These commands provide arrows of different kinds. They
+are classified as relations (\xref{relations}).
+The vertical arrows in the list are also \minref{delimiter}s, so you can make
+them larger by using |\big| et al.\ (\xref \big).
+
+The command |\iff| differs from |\Longleftrightarrow| in that
+it produces extra space to the left and right of the arrow.
+
+You can place symbols or other legends on top of a left or right arrow
+with |\buildrel| (\xref \buildrel).
+
+\example
+$$f(x)\mapsto f(y) \iff x \mapsto y$$
+|
+\dproduces
+$$f(x)\mapsto f(y) \iff x \mapsto y$$
+
+\eix^^{arrows}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Named mathematical functions}
+
+\begindesc
+\xrdef{namedfns}
+\bix^^{functions, names of}
+{\symbolspace = 36pt
+\threecolumns 32
+\easy\ctsdisplay cos {}
+\ctsdisplay sin {}
+\ctsdisplay tan {}
+\ctsdisplay cot {}
+\ctsdisplay csc {}
+\ctsdisplay sec {}
+\ctsdisplay arccos {}
+\ctsdisplay arcsin {}
+\ctsdisplay arctan {}
+\ctsdisplay cosh {}
+\ctsdisplay coth {}
+\ctsdisplay sinh {}
+\ctsdisplay tanh {}
+\ctsdisplay det {}
+\ctsdisplay dim {}
+\ctsdisplay exp {}
+\ctsdisplay ln {}
+\ctsdisplay log {}
+\ctsdisplay lg {}
+\ctsdisplay arg {}
+\ctsdisplay deg {}
+\ctsdisplay gcd {}
+\ctsdisplay hom {}
+\ctsdisplay ker {}
+\ctsdisplay inf {}
+\ctsdisplay sup {}
+\ctsdisplay lim {}
+\ctsdisplay liminf {}
+\ctsdisplay limsup {}
+\ctsdisplay max {}
+\ctsdisplay min {}
+\ctsdisplay Pr {}
+\egroup}
+\explain
+These commands set the names of various mathematical functions
+in roman type, as is customary.
+If you apply a superscript or subscript to one of these commands,
+\TeX\ will in most cases typeset it in the usual place.
+In display style, \TeX\ typesets superscripts and subscripts
+on |\det|, |\gcd|, |\inf|, |\lim|, |\liminf|,
+|\limsup|, |\max|, |\min|, |\Pr|, and |\sup|
+as though they were limits,
+i.e., directly above or directly below the function name.
+
+\example
+$\cos^2 x + \sin^2 x = 1\qquad\max_{a \in A} g(a) = 1$
+|
+\produces
+$\cos^2 x + \sin^2 x = 1\qquad\max_{a \in A} g(a) = 1$
+\endexample\enddesc
+
+\begindesc
+\cts bmod {}
+\explain
+This command produces a binary operation for indicating a ^{modulus}
+within a formula.
+\example
+$$x = (y+1) \bmod 2$$
+|
+\dproduces
+$$x = (y+1) \bmod 2$$
+\endexample
+\enddesc
+
+\begindesc
+\cts pmod {}
+\explain
+This command provides a notation for indicating a ^{modulus} in parentheses
+at the end of a formula.
+\example
+$$x \equiv y+1 \pmod 2$$
+|
+\dproduces
+$$x \equiv y+1 \pmod 2$$
+
+\eix^^{functions, names of}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Large operators}
+
+\begindesc
+\bix^^{operators//large}
+\threecolumns 15
+\easy\ctsdoubledisplay bigcap {}
+\ctsdoubledisplay bigcup {}
+\ctsdoubledisplay bigodot {}
+\ctsdoubledisplay bigoplus {}
+\ctsdoubledisplay bigotimes {}
+\ctsdoubledisplay bigsqcup {}
+\ctsdoubledisplay biguplus {}
+\ctsdoubledisplay bigvee {}
+\ctsdoubledisplay bigwedge {}
+\ctsdoubledisplay coprod {}
+{\symbolspace = 42pt\basicdisplay {\hskip 26pt$\smallint$}%
+ {\\smallint}\ddstrut}%
+ \xrdef{\smallint} \pix\ctsidxref{smallint}
+\ctsdoubledisplay int {}
+\ctsdoubledisplay oint {}
+\ctsdoubledisplay prod {}
+\ctsdoubledisplay sum {}
+}
+\explain
+These commands produce various large operator symbols.
+\TeX\ produces the smaller size when it's in ^{text style}
+\minrefs{math mode} and the larger size when it's in ^{display style}.
+Operators are one of \TeX's \minref{class}es of math symbols.
+\TeX\ puts different amounts of space
+around different classes of math symbols.
+
+The large operator symbols with `|big|' in their names are different
+from the corresponding binary operations (see \xref{binops}) such as
+|\cap| ($\cap$) since they usually appear at the beginning
+of a formula. \TeX\ uses different spacing for a large operator
+than it does for a binary operation.
+
+Don't confuse `$\sum$' (|\sum|) with `$\Sigma$'^^|\Sigma| (|\Sigma|)
+or confuse `$\prod$' (|\prod|) with `$\Pi$' ^^|\Pi| (|\Pi|).
+|\Sigma| and |\Pi| produce capital Greek letters, which are smaller and
+have a different appearance.
+
+A large operator can have ^{limits}. The lower limit is specified as a
+subscript and the upper limit as a superscript.
+
+\example
+$$\bigcap_{k=1}^r (a_k \cup b_k)$$
+|
+\dproduces
+$$\bigcap_{k=1}^r (a_k \cup b_k)$$
+\endexample
+\interexampleskip
+\example
+$${\int_0^\pi \sin^2 ax\,dx} = {\pi \over 2}$$
+|
+\dproduces
+$${\int_0^\pi \sin^2 ax\,dx} = {\pi \over 2}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts limits {}
+\explain
+When it's in text style, \TeX\ normally places limits after a large operator.
+This command tells \TeX\ to place
+limits above and below a large operator rather than after it.
+
+If you specify more than one of |\limits|, |\nolimits|,
+and |\display!-limits|, the last command rules.
+
+\example
+Suppose that $\bigcap\limits_{i=1}^Nq_i$ contains at least
+two elements.
+|
+\produces
+Suppose that $\bigcap\limits_{i=1}^Nq_i$ contains at least
+two elements.
+\endexample
+\enddesc
+
+\begindesc
+\cts nolimits {}
+\explain
+When it's in display
+style, \TeX\ normally places limits above and below a large operator.
+(The |\int| operator is an exception---\TeX\
+places limits for |\int| after the operator in all cases.)
+^^|\int//limits after|
+This command tells \TeX\ to place
+limits after a large operator rather than above and below it.
+
+If you specify more than one of |\limits|, |\nolimits|,
+and |\display!-limits|, the last command rules.
+
+\example
+$$\bigcap\nolimits_{i=1}^Nq_i$$
+|
+\dproduces
+$$\bigcap\nolimits_{i=1}^Nq_i$$
+\endexample
+\enddesc
+
+\begindesc
+\cts displaylimits {}
+\explain
+This command tells \TeX\ to
+follow its normal rules for placement of limits:
+\olist\compact
+\li Limits on ^|\int| are placed after the operator.
+\li Limits on other large operators are placed after the
+operator in text style.
+\li Limits on other large operators are placed above and below the operator
+in display style.
+\endolist
+It's usually simpler to use |\limits| or |\nolimits|
+to produce a specific effect, but |\display!-limits| is sometimes
+useful in \minref{macro} definitions.
+
+Note that \plainTeX\ defines ^|\int| as a macro that sets |\nolimits|,
+so |\int\displaylimits| in text style restores the |\limits|
+convention.
+
+If you specify more than one of |\limits|, |\nolimits|,
+and |\display!-limits|, the last command rules.
+
+\example
+$$a(\lambda) = {1 \over {2\pi}} \int\displaylimits
+_{-\infty}^{+\infty} f(x)e^{-i\lambda x}\,dx$$
+|
+\dproduces
+$$a(\lambda) = {1 \over {2\pi}} \int\displaylimits
+_{-\infty}^{+\infty} f(x)e^{-i\lambda x}\,dx$$
+
+\eix^^{operators//large}
+\endexample
+\enddesc
+
+
+%==========================================================================
+\subsection {Punctuation}
+
+\begindesc
+\bix^^{punctuation in math formulas}
+\cts cdotp {}
+\cts ldotp {}
+\explain
+These two commands respectively produce a centered dot and a dot
+positioned on the \minref{baseline}. They are valid only in math
+\minref{mode}. \TeX\ treats them as punctuation, putting no extra space in
+front of them but a little extra space after them.
+In contrast, \TeX\ puts an equal amount of space on both sides
+of a centered dot generated by the ^|\cdot| command (\xref \cdot).
+\example
+$x \cdotp y \quad x \ldotp y \quad x \cdot y$
+|
+\produces
+$x \cdotp y \quad x \ldotp y \quad x \cdot y$
+\endexample
+\enddesc
+
+\begindesc
+\cts colon {}
+\explain
+This command produces a colon punctation symbol.
+It is valid only in math mode.
+The difference between |\colon| and the colon character (|:|) is that
+`|:|' is an operator, so \TeX\ puts extra space to the left of it whereas
+it doesn't put extra space to the left of |\colon|.
+\example
+$f \colon t \quad f : t$
+|
+\produces
+$f \colon t \quad f : t$
+
+\eix^^{punctuation in math formulas}
+\endexample
+\enddesc
+
+
+%==========================================================================
+\secondprinting{\vfill\eject\null\vglue-30pt\vskip0pt}
+\section {Superscripts and subscripts}
+
+\begindesc
+\margin{Two groups of commands have been combined here.}
+\bix^^{superscripts}
+\bix^^{subscripts}
+\secondprinting{\vglue-12pt}
+\makecolumns 4/2:
+\easy\ctsact _ \xrdef{@underscore} {\<argument>}
+\cts sb {\<argument>}
+\ctsact ^ \xrdef{@hat} {\<argument>}
+\cts sp {\<argument>}
+\secondprinting{\vglue-4pt}
+\explain
+The commands in each column are equivalent. The commands in the first
+column typeset \<argument> as a subscript, and those in the second
+column typeset \<argument> as a superscript. The |\sb| and |\sp|
+commands are mainly useful if you're working on a terminal that lacks an
+underscore or caret, or if you've redefined `|_|' or `|^|' and need
+access to the original definition. These commands are also used for
+setting lower and upper limits on summations and integrals. ^^{lower
+limits} ^^{upper limits}
+
+If a subscript or superscript is not a single \minref{token}, you need
+to enclose it in a \minref{group}. \TeX\ does not prioritize subscripts
+or superscripts, so it will reject formulas such as |a_i_j|, |a^i^j|, or
+|a^i_j|.
+
+Subscripts and superscripts are normally typeset in ^{script style}, or
+in ^{scriptscript style} if they are second-order, e.g., a subscript on
+a subscript or a superscript on a a subscript. You can set \emph{any}
+text in a math formula in a script or scriptscript \minref{style} with
+the ^|\scriptstyle| and ^|\scriptscriptstyle| commands (\xref
+\scriptscriptstyle).
+
+You can apply a subscript or superscript to any of the commands that
+produce named mathematical functions in roman type (see
+\xref{namedfns}). In certain cases (again, see \xref{namedfns}) the
+subscript or superscript appears directly above or under the function
+name as shown in the examples of ^|\lim| and ^|\det| below.
+
+\example
+$x_3 \quad t_{\max} \quad a_{i_k} \quad \sum_{i=1}^n{q_i}
+ \quad x^3\quad e^{t \cos\theta}\quad r^{x^2}\quad
+ \int_0^\infty{f(x)\,dx}$
+$$\lim_{x\leftarrow0}f(x)\qquad\det^{z\in A}\qquad\sin^2t$$
+|
+\produces
+\secondprinting{\divide\abovedisplayskip by 2}
+$x_3 \quad t_{\max} \quad a_{i_k} \quad \sum_{i=1}^n{q_i}
+ \quad x^3\quad e^{t \cos\theta}\quad r^{x^2}\quad
+ \int_0^\infty{f(x)\,dx}$
+$$\lim_{x \leftarrow 0} f(x)\qquad
+ \det^{z \in A}\qquad \sin^2 t$$
+
+\eix^^{superscripts}
+\eix^^{subscripts}
+\endexample
+\enddesc
+
+\secondprinting{\vfill\eject}
+
+%==========================================================================
+\subsection {Selecting and using styles}
+
+\begindesc
+\bix^^{styles}
+\cts textstyle {}
+\cts scriptstyle {}
+\cts scriptscriptstyle {}
+\cts displaystyle {}
+\explain
+^^{text style} ^^{script style} ^^{scriptscript style} ^^{display style}
+These commands override the normal \minref{style} and hence the
+font that \TeX\ uses in setting a formula. Like
+font-setting commands such as |\it|, they are in
+effect until the end of the group containing them.
+They are useful when \TeX's choice of style is inappropriate for the formula
+you happen to be setting.
+\example
+$t+{\scriptstyle t + {\scriptscriptstyle t}}$
+|
+\produces
+$t+{\scriptstyle t + {\scriptscriptstyle t}}$
+\endexample
+\enddesc
+
+
+\begindesc
+\cts mathchoice {%
+ \rqbraces{\<math$_1$>}
+ \rqbraces{\<math$_2$>}
+ \rqbraces{\<math$_3$>}
+ \rqbraces{\<math$_4$>}}
+\explain
+This command tells \TeX\ to typeset one of the subformulas
+\<math$_1$>, \<math$_2$>, \<math$_3$>, or \<math$_4$>, making its choice
+according to the current \minref{style}.
+That is, if \TeX\ is in
+display style it sets the |\mathchoice| as \<math$_1$>; in text style it sets
+it as \<math$_2$>; in script style it sets it as \<math$_3$>;
+and in scriptscript style it sets it as \<math$_4$>.
+\example
+\def\mc{{\mathchoice{D}{T}{S}{SS}}}
+The strange formula $\mc_{\mc_\mc}$ illustrates a
+mathchoice.
+|
+\produces
+\def\mc{{\mathchoice{D}{T}{S}{SS}}}
+The strange formula $\mc_{\mc_\mc}$ illustrates a
+mathchoice.
+\endexample
+\enddesc
+
+\begindesc
+\cts mathpalette {\<argument$_1$> \<argument$_2$>}
+\explain
+^^{math symbols}
+This command provides a convenient way of
+producing a math construct that works in all four \minref{style}s.
+To use it, you'll normally need to define an additional macro,
+which we'll call |\build|.
+The call on |\math!-palette| should then have the form
+|\mathpalette|\allowbreak|\build|\<argument>.
+
+|\build| tests what style \TeX\ is in and typesets \<argu\-ment> accordingly.
+It should be defined to have two parameters.
+When you call |\math!-palette|, it will in turn call |\build|,
+with |#1| being a
+command that selects the current style and |#2| being \<argument>.
+Thus, within the definition of |\build| you can typeset something
+in the current style by preceding it with `|#1|'.
+See \knuth{page~360} for examples of using |\mathpalette|
+and \knuth{page~151} for a further explanation of how it works.
+
+\eix^^{styles}
+\enddesc
+
+%==========================================================================
+\section {Compound symbols}
+
+%==========================================================================
+\subsection {Math accents}
+
+\begindesc
+\xrdef{mathaccent}
+^^{accents}
+^^{math//accents}
+%
+\easy\ctsx acute {^{acute accent} as in $\acute x$}
+\ctsx b {^{bar-under accent} as in $\b x$}
+\ctsx bar {^{bar accent} as in $\bar x$}
+\ctsx breve {^{breve accent} as in $\breve x$}
+\ctsx check {^{check accent} as in $\check x$}
+\ctsx ddot {^{double dot accent} as in $\ddot x$}
+\ctsx dot {^{dot accent} as in $\dot x$}
+\ctsx grave {^{grave accent} as in $\grave x$}
+\ctsx hat {^{hat accent} as in $\hat x$}
+\ctsx widehat {^{wide hat accent} as in $\widehat {x+y}$}
+\ctsx tilde {^{tilde accent} as in $\tilde x$}
+\ctsx widetilde {^{wide tilde accent} as in $\widetilde {z+a}$}
+\ctsx vec {^{vector accent} as in $\vec x$}
+\explain
+These commands produce accent marks in math formulas. You'll ordinarily
+need to leave a space after any one of them.
+A wide accent can be applied to a multicharacter subformula;
+\TeX\ will center the accent over the subformula.
+The other accents are usefully applied only to a single character.
+
+\example
+$\dot t^n \qquad \widetilde{v_1 + v_2}$
+|
+\produces
+$\dot t^n \qquad \widetilde{v_1 + v_2}$
+\endexample
+
+\begindesc
+\cts mathaccent {\<mathcode>}
+\explain
+This command tells \TeX\ to typeset a math accent
+whose family and character code are given by \<mathcode>. (\TeX\ ignores
+the class of the \minref{mathcode}.)
+See \knuth{Appendix~G} for the details of how \TeX\ positions such an accent.
+The usual way to use |\mathaccent| is to put it in a macro definition
+that gives a name to a math accent.
+\example
+\def\acute{\mathaccent "7013}
+|
+\endexample
+\enddesc
+
+\see ``Accents'' (\xref {accents}).
+\enddesc
+
+%==========================================================================
+\subsection {Fractions and other stacking operations}
+
+\begindesc
+\bix^^{fractions}
+\bix^^{stacking subformulas}
+\easy\cts over {}
+\cts atop {}
+\cts above {\<dimen>}
+\cts choose {}
+\cts brace {}
+\cts brack {}
+\explain
+{\def\fri{\<formula$_1$>}%
+\def\frii{\<formula$_2$>}%
+These commands stack one subformula on top of another one. We will explain how
+|\over| works, and then relate the other commands to it.
+
+|\over| is the command that you'd normally use to produce a fraction.
+^^{fractions//produced by \b\tt\\over\e}
+If you write something in one of the following forms:
+\csdisplay
+$$!fri\over!frii$$
+$!fri\over!frii$
+\left!<delim>!fri\over!frii\right!<delim>
+{!fri\over!frii}
+|
+you'll get a fraction with numerator \fri\ and denominator \<for\-mu\-la$_2$>,
+i.e., \fri\ over \frii.
+In the first three of
+these forms the |\over| is not implicitly contained in a group;
+it absorbs
+everything to its left and to its right until it comes to a boundary,
+namely, the beginning or end of a group.
+
+You can't use |\over| or any of the other commands in this group
+more than once in a formula.
+Thus a formula such as:
+\csdisplay
+$$a \over n \choose k$$
+|
+isn't legal.
+This is not a severe restriction because
+you can always enclose one of the commands in braces.
+The reason for the restriction is that if you had two of these commands
+in a single formula, \TeX\ wouldn't know how to group them.
+
+The other commands are similar to |\over|, with the following exceptions:
+\ulist\compact
+\li |\atop| leaves out the fraction bar.
+\li |\above| provides a fraction bar of thickness \<dimen>.
+\li |\choose|
+leaves out the fraction bar and encloses the construct in parentheses.
+(It's called ``choose'' because $n \choose k$ is the notation for the
+number of ways of choosing $k$ things out of $n$ things.)
+\li |\brace| leaves out the fraction bar and encloses the construct in braces.
+\li |\brack|
+leaves out the fraction bar and encloses the construct in brackets.
+\endulist
+}%
+\example
+$${n+1 \over n-1} \qquad {n+1 \atop n-1} \qquad
+ {n+1 \above 2pt n-1} \qquad {n+1 \choose n-1} \qquad
+ {n+1 \brace n-1} \qquad {n+1 \brack n-1}$$
+|
+\dproduces
+$${n+1 \over n-1} \qquad {n+1 \atop n-1} \qquad
+ {n+1 \above 2pt n-1} \qquad {n+1 \choose n-1} \qquad
+ {n+1 \brace n-1} \qquad {n+1 \brack n-1}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts overwithdelims {\<delim$_1$> \<delim$_2$>}
+\cts atopwithdelims {\<delim$_1$> \<delim$_2$>}
+\cts abovewithdelims {\<delim$_1$> \<delim$_2$> \<dimen>}
+\explain
+Each of these commands stacks one subformula on top of another one and
+surrounds the entire construct with \<delim$_1$> on the left and
+\<delim$_2$> on the right. These commands follow the same rules as
+|\over|, |\atop|, and |\above|. The \<dimen> in |\abovewithdelims|
+specifies the thickness of the fraction bar.
+\example
+$${m \overwithdelims () n}\qquad
+ {m \atopwithdelims !|!| n}\qquad
+ {m \abovewithdelims \{\} 2pt n}$$
+|
+\dproduces
+$${m \overwithdelims () n}\qquad
+ {m \atopwithdelims || n}\qquad
+ {m \abovewithdelims \{\} 2pt n}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts cases {}
+\explain
+^^{combinations, notation for}
+This command produces the mathematical form that denotes a choice among
+several cases.
+Each case has two parts, separated by `|&|'.
+\TeX\ treats the first part as a math formula
+and the second part as ordinary text. Each
+case must be followed by |\cr|.
+
+\example
+$$g(x,y) = \cases{f(x,y),&if $x<y$\cr
+ f(y,x),&if $x>y$\cr
+ 0,&otherwise.\cr}$$
+|
+\dproduces
+$$g(x,y) = \cases{f(x,y),&if $x<y$\cr
+ f(y,x),&if $x>y$\cr
+ 0,&otherwise.\cr}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts underbrace {\<argument>}
+\cts overbrace {\<argument>}
+\cts underline {\<argument>}
+\cts overline {\<argument>}
+\cts overleftarrow {\<argument>}
+\cts overrightarrow {\<argument>}
+\explain
+These commands place extensible ^{braces}, lines, or ^{arrows}
+over or under the subformula given by \<argument>.
+\TeX\ will make these constructs as wide as they need to be for
+the context.
+When \TeX\ produces the extended braces, lines, or arrows, it considers
+only the dimensions of the \minref{box} containing \<argument>.
+If you use more than one of these commands in a single formula, the
+braces, lines, or arrows they produce
+may not line up properly with each other.
+You can use the |\mathstrut| command (\xref \mathstrut)
+to overcome this difficulty.
+\example
+$$\displaylines{
+\underbrace{x \circ y}\qquad \overbrace{x \circ y}\qquad
+\underline{x \circ y}\qquad \overline{x \circ y}\qquad
+\overleftarrow{x \circ y}\qquad
+\overrightarrow{x \circ y}\cr
+{\overline r + \overline t}\qquad
+{\overline {r \mathstrut} + \overline {t \mathstrut}}\cr
+}$$
+|
+\dproduces
+$$\displaylines{
+\underbrace{x \circ y}\qquad \overbrace{x \circ y}\qquad
+\underline{x \circ y}\qquad \overline{x \circ y}\qquad
+\overleftarrow{x \circ y}\qquad
+\overrightarrow{x \circ y}\cr
+{\overline r + \overline t}\qquad
+{\overline {r \mathstrut} + \overline {t \mathstrut}}\cr
+}$$
+\endexample
+\enddesc
+
+\begindesc\secondprinting{\vglue-.5\baselineskip\vskip0pt}
+\cts buildrel {\<formula> {\bt \\over} \<relation>}
+\explain
+^^{relations//putting formulas above}
+This command produces a \minref{box} in which \<formula>
+is placed on top of \<relation>. \TeX\ treats the result as a relation
+for spacing purposes \seeconcept{class}.
+\example
+$\buildrel \rm def \over \equiv$
+|
+\produces
+$\buildrel \rm def \over \equiv$
+
+\eix^^{fractions}
+\eix^^{stacking subformulas}
+\endexample
+\enddesc
+
+\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+\subsection {Dots}
+
+\begindesc
+\bix^^{dots}
+\easy\cts ldots {}
+\cts cdots {}
+\explain
+These commands produce three ^{dots} in a row. For |\ldots|, the dots
+are on the baseline; for |\cdots|, the dots are centered with respect to
+the axis (see the explanation of |\vcenter|, \xref\vcenter).
+
+\example
+$t_1 + t_2 + \cdots + t_n \qquad x_1,x_2, \ldots\,, x_r$
+|
+\produces
+$t_1 + t_2 + \cdots + t_n \qquad x_1,x_2, \ldots\,, x_r$
+\endexample
+\enddesc
+
+\begindesc
+\easy\cts vdots {}
+\explain
+This command produces three vertical dots.
+\example
+$$\eqalign{f(\alpha_1)& = f(\beta_1)\cr
+ \noalign{\kern -4pt}%
+ &\phantom{a}\vdots\cr % moves the dots right a bit
+ f(\alpha_k)& = f(\beta_k)\cr}$$
+|
+\dproduces
+$$\eqalign{f(\alpha_1)& = f(\beta_1)\cr
+ \noalign{\kern -4pt}%
+ &\phantom{a}\vdots\cr
+ f(\alpha_k)& = f(\beta_k)\cr}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts ddots {}
+\explain
+This command produces three dots on a diagonal.
+Its most common use is to indicate repetition along the diagonal of a matrix.
+\example
+$$\pmatrix{0&\ldots&0\cr
+ \vdots&\ddots&\vdots\cr
+ 0&\ldots&0\cr}$$
+|
+\dproduces
+$$\pmatrix{0&\ldots&0\cr
+ \vdots&\ddots&\vdots\cr
+ 0&\ldots&0\cr}$$
+
+\eix^^{dots}
+\endexample
+\enddesc
+
+\see |\dots| \ctsref\dots.
+
+%==========================================================================
+\subsection {Delimiters}
+
+\begindesc
+\bix^^{delimiters}
+%
+\cts lgroup {}
+\cts rgroup {}
+\explain
+These commands produce large left and right ^{parentheses}
+that are defined as opening and closing \minref{delimiter}s.
+The smallest available size for these delimiters is |\Big|.
+If you use smaller sizes, you'll get weird characters.
+\example
+$$\lgroup\dots\rgroup\qquad\bigg\lgroup\dots\bigg\rgroup$$
+|
+\dproduces
+$$\lgroup\dots\rgroup\qquad\bigg\lgroup\dots\bigg\rgroup$$
+\endexample
+\enddesc
+
+\begindesc
+\margin{{\tt\\vert} and {\tt\\Vert} were explained elsewhere.}
+\easy\cts left {}
+\cts right {}
+\explain
+These commands must be used together in the pattern:
+\display
+{{\bt \\left} \<delim$_1$> \<subformula> {\bt \\right} \<delim$_2$>}
+This construct causes \TeX\ to produce \<subformula>,
+enclosed in the \minref{delimiter}s \<delim$_1$> and \<delim$_2$>.
+The vertical size of the delimiter is adjusted to fit the
+vertical size (height plus depth) of \<subformula>. \<delim$_1$> and
+\<delim$_2$> need not correspond.
+For instance, you could use `|]|' as a left delimiter
+and `|(|' as a right delimiter in a single use of |\left|
+and |\right|.
+
+|\left| and |\right| have the important property that they define a
+group, i.e., they act like left and right braces. This grouping
+property is particularly useful when you put ^|\over| (\xref{\over}) or
+a related command between |\left| and |\right|, since you don't need to
+put braces around the fraction constructed by |\over|.
+
+If you want a left delimiter but not a right delimiter, you can use `|.|' in
+place of the delimiter you don't want and it will turn into empty space
+(of width ^|\nulldelimiterspace|).
+\example
+$$\left\Vert\matrix{a&b\cr c&d\cr}\right\Vert
+ \qquad \left\uparrow q_1\atop q_2\right.$$
+|
+\dproduces
+$$\left\Vert\matrix{a&b\cr c&d\cr}\right\Vert
+ \qquad \left\uparrow q_1\atop q_2\right.$$
+\endexample
+\enddesc
+
+\begindesc
+\cts delimiter {\<number>}
+\explain
+This command produces a delimiter whose characteristics are given by
+\<number>. \<number> is normally written in hexadecimal notation.
+You can use the |\delimiter| command instead of a character in any context
+where \TeX\ expects a delimiter (although the command is rarely used
+outside of a macro definition).
+Suppose that \<number> is the hexadecimal number $cs_1s_2s_3
+l_1l_2l_3$. Then \TeX\ takes the delimiter to have
+\minref{class} $c$, small variant
+$s_1s_2s_3$, and large variant $l_1l_2l_3$. Here $s_1s_2s_3$ indicates
+the math character found in position $s_2s_3$ of family $s_1$, and
+similarly for $l_1l_2l_3$. This is the same convention as the one
+used for ^|\mathcode| (\xref\mathcode).
+\example
+\def\vert{\delimiter "026A30C} % As in plain TeX.
+|
+\endexample
+\enddesc
+
+
+\begindesc
+\margin{{\tt\\delcode} was explained in two places. The
+combined explanation is now in `General operations'.}
+\cts delimiterfactor {\param{number}}
+\cts delimitershortfall {\param{number}}
+\explain
+^^{delimiters//height of}
+These parameters together tell \TeX\ how the height of a \minref{delimiter}
+should be related to the vertical size of the subformula
+with which the delimiter is associated.
+|\delimiterfactor| gives the minimum
+ratio of the delimiter size to the vertical size of the subformula, and
+|\delimitershortfall| gives the maximum by which the height of the
+delimiter will be reduced from that of the vertical size of the subformula.
+
+Suppose that the \minref{box} containing the subformula
+has height $h$ and depth $d$, and let $y=2\,\max(h,d)$.
+Let the value of |\delimiterfactor| be $f$ and the value of
+|\delimitershortfall| be $\delta$.
+Then \TeX\ takes the minimum delimiter size to be at least $y \cdot
+f/1000$ and at least $y-\delta$. In particular, if |\delimiterfactor|
+is exactly $1000$ then \TeX\ will try to make a delimiter at least as tall
+as the formula to which it is attached.
+See \knuth{page~152 and page~446 (Rule 19)}
+for the exact details of how \TeX\ uses these parameters.
+\PlainTeX\ sets |\delimiter!-factor| to $901$ and
+|\delimiter!-shortfall| to |5pt|.
+\enddesc
+
+\see |\delcode| (\xref\delcode), |\vert|, |\Vert|,
+and |\backslash| (\xref\vert).
+\eix^^{delimiters}
+
+%==========================================================================
+\subsection {Matrices}
+
+\begindesc
+\cts matrix
+ {{\bt \rqbraces{\<line> \\cr $\ldots$ \<line> \\cr}}}
+\cts pmatrix
+ {{\bt \rqbraces{\<line> \\cr $\ldots$ \<line> \\cr}}}
+\cts bordermatrix
+ {{\bt \rqbraces{\<line> \\cr $\ldots$ \<line> \\cr}}}
+\explain
+Each of these three commands produces a ^{matrix}.
+The elements of each row of the input matrix
+are separated by `|&|' and each row in turn is ended
+by |\cr|.
+(This is the same form that is used for an
+\minref{alignment}.)
+The commands differ in the following ways:
+\ulist\compact
+\li |\matrix| produces a matrix without any surrounding or inserted
+\minref{delimiter}s.
+\li |\pmatrix| produces a matrix surrounded by parentheses.
+\li |\bordermatrix| produces a matrix in which the first row and the first
+column are treated as labels. (The first element of the first row is
+usually left blank.) The rest of the matrix is enclosed in
+parentheses.
+\endulist
+\TeX\ can make the parentheses for |\pmatrix| and |\bordermatrix| as large as
+they need to be by inserting vertical extensions. If you want a matrix
+to be surrounded by delimiters other than parentheses, you should use
+|\matrix| in conjunction with |\left| and |\right| (\xref \left).
+
+\example
+$$\displaylines{
+ \matrix{t_{11}&t_{12}&t_{13}\cr
+ t_{21}&t_{22}&t_{23}\cr
+ t_{31}&t_{32}&t_{33}\cr}\qquad
+\left\{\matrix{t_{11}&t_{12}&t_{13}\cr
+ t_{21}&t_{22}&t_{23}\cr
+ t_{31}&t_{32}&t_{33}\cr}\right\}\cr
+\pmatrix{t_{11}&t_{12}&t_{13}\cr
+ t_{21}&t_{22}&t_{23}\cr
+ t_{31}&t_{32}&t_{33}\cr}\qquad
+\bordermatrix{&c_1&c_2&c_3\cr
+ r_1&t_{11}&t_{12}&t_{13}\cr
+ r_2&t_{21}&t_{22}&t_{23}\cr
+ r_3&t_{31}&t_{32}&t_{33}\cr}\cr}$$
+|
+\dproduces
+$$\displaylines{
+ \matrix{t_{11}&t_{12}&t_{13}\cr
+ t_{21}&t_{22}&t_{23}\cr
+ t_{31}&t_{32}&t_{33}\cr}\qquad
+\left\{\matrix{t_{11}&t_{12}&t_{13}\cr
+ t_{21}&t_{22}&t_{23}\cr
+ t_{31}&t_{32}&t_{33}\cr}\right\}\cr
+\pmatrix{t_{11}&t_{12}&t_{13}\cr
+ t_{21}&t_{22}&t_{23}\cr
+ t_{31}&t_{32}&t_{33}\cr}\qquad
+\bordermatrix{&c_1&c_2&c_3\cr
+ r_1&t_{11}&t_{12}&t_{13}\cr
+ r_2&t_{21}&t_{22}&t_{23}\cr
+ r_3&t_{31}&t_{32}&t_{33}\cr}\cr}$$
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Roots and radicals}
+
+\begindesc
+\easy\cts sqrt {\<argument>}
+\explain
+This command produces the notation for the square root of \<argument>.
+\example
+$$x = {-b\pm\sqrt{b^2-4ac} \over 2a}$$
+|
+\dproduces
+$$x = {-b\pm\sqrt{b^2-4ac} \over 2a}$$
+\endexample
+\enddesc
+
+\begindesc
+\easy\cts root {\<argument$_1$> {\bt \\of} \<argument$_2$>}
+\explain
+This command produces the notation for a root of \<argument$_2$>, where the
+root is given by \<argument$_1$>.
+\example
+$\root \alpha \of {r \cos \theta}$
+|
+\produces
+$\root \alpha \of {r \cos \theta}$
+\endexample
+\enddesc
+
+\begindesc
+\cts radical {\<number>}
+\explain
+This command produces a radical sign
+whose characteristics are given by
+\<number>. It uses the same representation as the delimiter code
+^^{delimiter codes}
+in the ^|\delcode| command (\xref \delcode).
+
+\example
+\def\sqrt{\radical "270370} % as in plain TeX
+|
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Equation numbers}
+
+\begindesc
+\easy\cts eqno {}
+\cts leqno {}
+\explain
+These commands attach an equation number to a displayed formula.
+|\eqno| puts the equation number on the right and |\leqno| puts it on
+the left.
+The commands must be given at the end of the formula.
+If you have a multiline display and you want to number more than one
+of the lines, use the |\eq!-alignno| or |\leq!-alignno| command
+(\xref \eqalignno).
+
+These commands are valid only in display math mode.
+
+\example
+$$e^{i\theta} = \cos \theta + i \sin \theta\eqno{(11)}$$
+|
+\produces
+$$e^{i\theta} = \cos \theta + i \sin \theta\eqno{(11)}$$
+\endexample
+\example
+$$\cos^2 \theta + \sin^2 \theta = 1\leqno{(12)}$$
+|
+\produces
+\abovedisplayskip = -\baselineskip
+$$\cos^2 \theta + \sin^2 \theta = 1\leqno{(12)}$$
+\endexample
+\enddesc
+
+
+%==========================================================================
+\section {Multiline displays}
+
+\begindesc
+\bix^^{displays//multiline}
+\cts displaylines
+ {{\bt \rqbraces{\<line>\ths\\cr$\ldots$\<line>\ths\\cr}}}
+\explain
+This command produces a multiline math display in which each line is
+centered independently of the other lines.
+You can use the |\noalign| command (\xref \noalign) to change the amount
+of space between two lines of a multiline display.
+
+If you want to attach equation numbers to some or all of the equations
+in a multiline math display, you should use |\eqalignno| or
+|\leqalignno|.
+\example
+$$\displaylines{(x+a)^2 = x^2+2ax+a^2\cr
+ (x+a)(x-a) = x^2-a^2\cr}$$
+|
+\dproduces\centereddisplays
+$$\displaylines{
+(x+a)^2 = x^2+2ax+a^2\cr
+(x+a)(x-a) = x^2-a^2\cr
+}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts eqalign {}
+ {{\bt \rqbraces{\<line> \\cr $\ldots$ \<line> \\cr}}}
+\cts eqalignno {}
+ {{\bt \rqbraces{\<line> \\cr $\ldots$ \<line> \\cr}}}
+\cts leqalignno {}
+ {{\bt \rqbraces{\<line> \\cr $\ldots$ \<line> \\cr}}}
+\explain
+^^{equation numbers}
+These commands produce a multiline math display
+in which certain corresponding parts of the lines are lined up vertically.
+The |\eqalignno| and |\leqalignno| commands also let you
+provide equation numbers for some or all of the lines.
+|\eqalignno| puts the equation numbers on the right and
+|\leqalignno| puts them on the left.
+
+Each line in the display is ended by |\cr|. Each of the parts to be aligned
+(most often an equals sign) is preceded by
+`|&|'. An `|&|' also precedes each equation number, which comes at the
+end of a line.
+You can put more than one of these commands in a single display in order
+to produce several groups of equations. In this case, only the rightmost
+or leftmost group can be produced by |\eqalignno| or |\leqalignno|.
+
+You can use the |\noalign| command (\xref \noalign) to change the amount
+of space between two lines of a multiline display.
+\example
+$$\left\{\eqalign{f_1(t) &= 2t\cr f_2(t) &= t^3\cr
+ f_3(t) &= t^2-1\cr}\right\}
+ \left\{\eqalign{g_1(t) &= t\cr g_2(t) &= 1}\right\}$$
+|
+\dproduces
+$$\left\{\eqalign{f_1(t) &= 2t\cr f_2(t) &= t^3\cr
+ f_3(t) &= t^2-1\cr}\right\}
+\left\{\eqalign{g_1(t) &= t\cr g_2(t) &= 1}\right\}$$
+\nextexample
+$$\eqalignno{
+\sigma^2&=E(x-\mu)^2&(12)\cr
+ &={1 \over n}\sum_{i=0}^n (x_i - \mu)^2&\cr
+ &=E(x^2)-\mu^2\cr}$$
+|
+\produces
+\abovedisplayskip = -\baselineskip
+$$\eqalignno{
+\sigma^2&=E(x-\mu)^2&(12)\cr
+ &={1 \over n}\sum_{i=0}^n (x_i - \mu)^2&\cr
+ &=E(x^2)-\mu^2\cr}$$
+\nextexample
+$$\leqalignno{
+\sigma^2&=E(x-\mu)^2&(6)\cr
+ &=E(x^2)-\mu^2&(7)\cr}$$
+|
+\produces
+\abovedisplayskip = -\baselineskip
+$$\leqalignno{
+\sigma^2&=E(x-\mu)^2&(6)\cr
+ &=E(x^2)-\mu^2&(7)\cr}$$
+\nextexample
+$$\eqalignno{
+ &(x+a)^2 = x^2+2ax+a^2&(19)\cr
+ &(x+a)(x-a) = x^2-a^2\cr}$$
+% same effect as \displaylines but with an equation number
+|
+\dproduces
+$$\eqalignno{
+&(x+a)^2 = x^2+2ax+a^2&(19)\cr
+&(x+a)(x-a) = x^2-a^2\cr
+}$$
+% same effect as \displaylines but with an equation number
+
+\eix^^{displays//multiline}
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Fonts in math formulas}
+
+\begindesc
+^^{fonts}
+\xrdef{mathfonts}
+%
+\easy\ctsx cal {use calligraphic uppercase font}
+\ctsx mit {use math italic font}
+\ctsx oldstyle {use old style digit font}
+\explain
+These commands cause \TeX\ to typeset the following text in the
+specified font. You can only use them in \minref{math mode}.
+The |\mit| command is useful for producing slanted capital ^{Greek letters}.
+You can also use the commands given in
+\headcit{Selecting fonts}{selfont} to change fonts in math mode.
+\example
+${\cal XYZ} \quad
+{\mit AaBb\Gamma \Delta \Sigma} \quad
+{\oldstyle 0123456789}$
+|
+\produces
+${\cal XYZ} \quad
+{\mit AaBb\Gamma \Delta \Sigma} \quad
+{\oldstyle 0123456789}$
+\endexample
+\enddesc
+
+^^{type styles}
+\begindesc
+\ctsx itfam {family for italic type}
+\ctsx bffam {family for boldface type}
+\ctsx slfam {family for slanted type}
+\ctsx ttfam {family for typewriter type}
+\explain
+These commands define type families \minrefs{family} for use in
+\minref{math mode}. Their principal use is in defining the
+|\it|, |\bf|, |\sl|, and |\tt| commands so that they work in math mode.
+\enddesc
+
+\begindesc
+\cts fam {\param{number}}
+\explain
+When \TeX\ is in \minref{math mode}, it ordinarily typesets a character
+using the font family ^^{class} given in its \minref{mathcode}.
+^^{family//given by \b\tt\\fam\e}
+However, when \TeX\ is in math mode and encounters a character whose
+\minref{class} is $7$ (Variable), it typesets that character using
+the font \minref{family} given by the value of |\fam|, provided that the
+value of |\fam| is between $0$ and $15$.
+If the value of |\fam| isn't in that range, \TeX\ uses the family in
+the character's mathcode as in the ordinary case.
+\TeX\ sets |\fam| to $-1$ whenever it enters math mode.
+Outside of math mode, |\fam| has no effect.
+
+By assigning a value to
+|\fam| you can change the way that \TeX\ typesets ordinary
+characters such as variables.
+For instance, by setting |\fam| to |\ttfam|, you cause \TeX\ to typeset
+variables using a typewriter font.
+\PlainTeX\ defines |\tt| as a \minref{macro} that, among other things,
+sets |\fam| to |\ttfam|.
+\example
+\def\bf{\fam\bffam\tenbf} % As in plain TeX.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts textfont {\<family>\param{fontname}}
+\cts scriptfont {\<family>\param{fontname}}
+\cts scriptscriptfont {\<family>\param{fontname}}
+\explain
+^^{text style}
+^^{script style}
+^^{scriptscript style}
+Each of these parameters specifies the font that \TeX\ is to use for
+typesetting the indicated \minref{style} in the indicated \minref{family}.
+These choices have no effect outside of \minref{math mode}.
+\example
+\scriptfont2 = \sevensy % As in plain TeX.
+|
+\endexample
+\enddesc
+
+\see ``Type styles'' (\xref{seltype}).
+%==========================================================================
+\section {Constructing math symbols}
+
+%==========================================================================
+\subsection {Making delimiters bigger}
+
+\begindesc
+\makecolumns 16/4:
+\easy\cts big {}
+\cts bigl {}
+\cts bigm {}
+\cts bigr {}
+\cts Big {}
+\cts Bigl {}
+\cts Bigm {}
+\cts Bigr {}
+\cts bigg {}
+\cts biggl {}
+\cts biggm {}
+\cts biggr {}
+\cts Bigg {}
+\cts Biggl {}
+\cts Biggm {}
+\cts Biggr {}
+\explain
+^^{delimiters//enlarging}
+These commands make \minref{delimiter}s bigger than their normal size.
+The commands in the four columns
+produce successively larger sizes. The difference between |\big|,
+|\bigl|, |\bigr|, and |bigm| has to do with the \minref{class} of the
+enlarged delimiter:
+\ulist\compact
+\li |\big| produces an ordinary symbol.
+\li |\bigl| produces an opening symbol.
+\li |\bigr| produces a closing symbol.
+\li |\bigm| produces a relation symbol.
+\endulist
+\noindent
+\TeX\ uses the class of a symbol in order to decide how much space to put
+around that symbol.
+
+These commands, unlike |\left| and |\right|,
+do \emph{not} define a group.
+
+\example
+$$(x) \quad \bigl(x\bigr) \quad \Bigl(x\Bigr) \quad
+ \biggl(x\biggr) \quad \Biggl(x\Biggr)\qquad
+[x] \quad \bigl[x\bigr] \quad \Bigl[x\Bigr] \quad
+ \biggl[x\biggr] \quad \Biggl[x\Biggr]$$
+|
+\dproduces
+$$(x) \quad \bigl(x\bigr) \quad \Bigl(x\Bigr) \quad
+\biggl(x\biggr) \quad \Biggl(x\Biggr)\qquad
+[x] \quad \bigl[x\bigr] \quad \Bigl[x\Bigr] \quad
+\biggl[x\biggr] \quad \Biggl[x\Biggr]$$
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Parts of large symbols}
+
+\begindesc
+\cts downbracefill {}
+\cts upbracefill {}
+\explain
+These commands respectively produce upward-pointing
+and downward-pointing extensible ^{horizontal braces}. ^^{braces}
+\TeX\ will make the braces as wide as necessary.
+These commands
+are used in the definitions of ^|\overbrace| and ^|\underbrace|
+(\xref \overbrace).
+\example
+$$\hbox to 1in{\downbracefill} \quad
+ \hbox to 1in{\upbracefill}$$
+|
+\dproduces
+$$\hbox to 1in{\downbracefill} \quad
+ \hbox to 1in{\upbracefill}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts arrowvert {}
+\cts Arrowvert {}
+\cts lmoustache {}
+\cts rmoustache {}
+\cts bracevert {}
+\explain
+These commands produce portions of certain large
+delimiters
+^^{delimiters//parts of}
+and can themselves be used as delimiters.
+They refer to characters in the ^|cmex10| math font.
+\example
+$$\cdots \Big\arrowvert \cdots \Big\Arrowvert \cdots
+ \Big\lmoustache \cdots \Big\rmoustache \cdots
+ \Big\bracevert \cdots$$
+|
+\dproduces
+$$\cdots \Big\arrowvert \cdots \Big\Arrowvert \cdots
+ \Big\lmoustache \cdots \Big\rmoustache \cdots
+ \Big\bracevert \cdots$$
+\endexample
+\enddesc
+
+
+%==========================================================================
+\section {Aligning parts of a formula}
+
+%==========================================================================
+\subsection {Aligning accents}
+
+\begindesc
+\bix^^{accents//aligning}
+\cts skew {\<number> \<argument$_1$> \<argument$_2$>}
+\explain
+This command shifts the accent \<argument$_1$> by
+\<number> \minref{mathematical unit}s to the right of its normal position
+with respect to \<argu\-ment$_2$>.
+The most common use of this command is for
+modifying the position of an accent that's over
+another accent.
+\example
+$$\skew 2\bar{\bar z}\quad\skew 3\tilde{\tilde y}\quad
+ \skew 4\tilde{\hat x}$$
+|
+\dproduces
+$$\skew 2\bar{\bar z}\quad\skew 3\tilde{\tilde y}\quad
+ \skew 4\tilde{\hat x}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts skewchar {\<font>\param{number}}
+\explain
+The |\skewchar| of a font
+is the character in the font whose kerns,
+as defined in the font's metrics file, determine the positions
+of math accents. That is, suppose that \TeX\ is applying a math accent
+to the character `|x|'. \TeX\ checks if the character pair
+`|x\skewchar|' has a kern; if so, it moves the accent by the amount of
+that kern. The complete algorithm that \TeX\ uses to position math
+accents (which involves many more things) is in \knuth{Appendix~G}.
+
+If the value of |\skewchar| is not in the range $0$--$255$,
+\TeX\ takes the kern value to be zero.
+
+Note that \<font> is a control sequence
+that names a font, not a \<font\-name> that names font files.
+Beware:
+an assignment to |\skewchar| is \emph{not} undone at the end
+of a group.
+If you want to change |\skewchar| locally, you'll need to
+save and restore its original value explicitly.
+\enddesc
+
+\begindesc
+\cts defaultskewchar {\param{number}}
+\explain
+When \TeX\ reads the metrics file
+^^{metrics file//default skew character in}
+for a font in response to a
+^|\font| command, it sets the font's ^|\skewchar| to
+|\default!-skewchar|.
+If the value of |\default!-skewchar| is
+not in the range $0$--$255$, \TeX\ does not assign any
+skew characters by default.
+\PlainTeX\ sets |\defaultskewchar| to $-1$, and it's usually best
+to leave it there.
+\margin{Misleading example deleted.}
+\eix^^{accents//aligning}
+\enddesc
+
+%==========================================================================
+\subsection {Aligning material vertically}
+
+\begindesc
+\cts vcenter {\rqbraces{\<vertical mode material>}}
+\ctsbasic {\\vcenter to \<dimen> \rqbraces{\<vertical mode material>}}{}
+\ctsbasic {\\vcenter spread \<dimen> \rqbraces{\<vertical mode material>}}{}
+\explain
+Every math formula has an invisible
+``^{axis}'' that \TeX\ treats as a kind of
+horizontal centering line for that formula.
+For instance, the axis of a formula consisting of a
+fraction is at the center of the fraction bar.
+The |\vcenter| command tells \TeX\ to place the \<vertical mode material>
+in a \minref{vbox} and to center the vbox
+with respect to the axis of the formula it is currently constructing.
+
+The first form of the command
+centers the material as given. The second and third
+forms expand or shrink the material vertically as in the |\vbox| command
+(\xref \vbox).
+
+\example
+$${n \choose k} \buildrel \rm def \over \equiv \>
+\vcenter{\hsize 1.5 in \noindent the number of
+combinations of $n$ things taken $k$ at a time}$$
+|
+\dproduces
+$${n \choose k} \buildrel \rm def \over \equiv \>
+\vcenter{\hsize 1.5 in \noindent the number of
+combinations of $n$ things taken $k$ at a time}$$
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Producing spaces}
+
+%==========================================================================
+\subsection {Fixed-width math spaces}
+
+\begindesc
+\bix^^{space//in math formulas}
+\ctspecial ! \ctsxrdef{@shriek}
+\ctspecial , \ctsxrdef{@comma}
+\ctspecial > \ctsxrdef{@greater}
+\ctspecial ; \ctsxrdef{@semi}
+\explain
+These commands produce various amounts of ^{extra space} in formulas. They
+are defined in terms of \minref{mathematical unit}s, so \TeX\ adjusts
+the amount of space according to the current \minref{style}.
+\ulist
+\li |\!!| produces a negative thin space, i.e., it reduces the space
+between its neighboring subformulas by the amount of a thin space.
+\li |\,| produces a thin space.
+\li |\>| produces a medium space.
+\li |\;| produces a thick space.
+\endulist
+\example
+$$00\quad0\!!0\quad0\,0\quad0\>0\quad0\;0\quad
+{\scriptstyle 00\quad0\!!0\quad0\,0\quad0\>0\quad0\;0}$$
+|
+\dproduces
+$$00\quad0\!0\quad0\,0\quad0\>0\quad0\;0\quad
+{\scriptstyle 00\quad0\!0\quad0\,0\quad0\>0\quad0\;0}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts thinmuskip {\param{muglue}}
+\cts medmuskip {\param{muglue}}
+\cts thickmuskip {\param{muglue}}
+\explain
+These parameters define thin, medium, and thick spaces in
+math mode.
+\example
+$00\quad0\mskip\thinmuskip0\quad0\mskip\medmuskip0
+ \quad0\mskip\thickmuskip0$
+|
+\produces
+$00\quad0\mskip\thinmuskip0\quad0\mskip\medmuskip0
+ \quad0\mskip\thickmuskip0$
+\endexample
+\enddesc
+
+\begindesc
+\cts jot {\param{dimen}}
+\explain
+This parameter defines a distance that is equal to three points (unless
+you change it).
+The |\jot| is a convenient unit of measure for opening up \hbox{math displays}.
+\enddesc
+
+%==========================================================================
+\subsection {Variable-width math spaces}
+
+\begindesc
+\cts mkern {\<mudimen>}
+\explain
+^^{kerns//in math formulas}
+This command
+produces a \minref{kern}, i.e., blank space, of width \<mudimen>.
+The kern is measured
+in \minref{mathematical unit}s, which vary according to the style.
+Aside from its unit of measurement, this command behaves just like
+|\kern| (\xref \kern) does in horizontal mode.
+
+\example
+$0\mkern13mu 0 \qquad {\scriptscriptstyle 0 \mkern13mu 0}$
+|
+\produces
+$0\mkern13mu 0 \qquad {\scriptscriptstyle 0 \mkern13mu 0}$
+\endexample
+\enddesc
+
+\begindesc
+\cts mskip {\<mudimen$_1$> {\bt plus} \<mudimen$_2$> {\bt minus}
+ \<mudimen$_3$>}
+\explain
+^^{glue}
+This command produces horizontal \minref{glue}
+that has natural width \<mu\-dimen$_1$>, stretch \<mudimen$_2$>,
+and shrink \<mudimen$_3$>.
+The glue is measured in \minref{mathematical unit}s, which vary according
+to the style. Aside from its units of measurement, this command behaves
+just like |\hskip| (\xref \hskip).
+
+\example
+$0\mskip 13mu 0 \quad {\scriptscriptstyle 0 \mskip 13mu 0}$
+|
+\produces
+$0\mskip 13mu 0 \quad {\scriptscriptstyle 0 \mskip 13mu 0}$
+\endexample
+\enddesc
+
+\begindesc
+\cts nonscript {}
+\explain
+When \TeX\ is currently typesetting in script or scriptscript
+\minref{style} and encounters this command
+immediately in front of glue or a kern,
+it cancels the glue or kern.
+|\nonscript| has no effect in the other styles.
+
+This command provides a way of ``tightening up'' the spacing in
+script and scriptscript styles, which generally are set in smaller type.
+It is of little use outside of macro definitions.
+\example
+\def\ab{a\nonscript\; b}
+$\ab^{\ab}$
+|
+\produces
+\def\ab{a\nonscript\; b}
+$\ab^{\ab}$
+\endexample
+\enddesc
+
+\see |\kern| (\xref\kern), |\hskip| (\xref\hskip).
+\eix^^{space//in math formulas}
+
+
+%==========================================================================
+\subsection {Spacing parameters for displays}
+
+\begindesc
+\bix^^{displays//spacing parameters for}
+\cts displaywidth {\param{dimen}}
+\explain
+This parameter specifies the maximum width that
+\TeX\ allows for a math display. If \TeX\ cannot fit the display
+into a space of this width, it sets an overfull \minref{hbox}
+and complains.
+\TeX\ sets the value of |\displaywidth| when it encounters the `|$$|'
+that starts the display. This initial value is
+|\hsize| (\xref \hsize) unless it's overridden by changes to the
+paragraph shape.
+See \knuth{pages~188--189} for a more detailed explanation of this parameter.
+\enddesc
+
+\begindesc
+\cts displayindent {\param{dimen}}
+\explain
+This parameter specifies the space by which \TeX\ indents a
+math display.
+\TeX\ sets the value of |\displayindent| when it encounters the `|$$|'
+that starts the display. Usually this initial value is zero,
+but if the paragraph shape indicates that the display should
+be shifted by an amount $s$,
+\TeX\ will set |\displayindent| to $s$.
+See \knuth{pages~188--189} for a more detailed explanation of this parameter.
+\enddesc
+
+\begindesc
+\cts predisplaysize {\param{dimen}}
+\explain
+\TeX\ sets this parameter to the width of the line preceding
+a math display.
+\TeX\ uses |\predisplaysize| to determine whether or not
+the display starts to
+the left of where the previous line ends, i.e., whether or not it visually
+overlaps the previous line.
+If there is overlap, it uses the |\abovedisplayskip| and
+|\belowdisplayskip| glue in setting the display;
+otherwise it uses the |\abovedisplay!-shortskip| and
+|\belowdisplay!-shortskip| glue.
+See \knuth{pages~188--189} for a more detailed explanation of this parameter.
+\enddesc
+
+\begindesc
+\cts abovedisplayskip {\param{glue}}
+\explain
+This parameter specifies the amount of vertical glue that
+\TeX\ inserts before a display when the display starts to
+the left of where the previous line ends, i.e., when it visually
+overlaps the previous line.
+\PlainTeX\ sets |\abovedisplayskip| to |12pt plus3pt minus9pt|.
+See \knuth{pages~188--189} for a more detailed explanation of this parameter.
+\enddesc
+
+\begindesc
+\cts belowdisplayskip {\param{glue}}
+\explain
+This parameter specifies the amount of vertical glue that
+\TeX\ inserts after a display when the display starts to
+the left of where the previous line ends, i.e., when it visually
+overlaps the previous line.
+\PlainTeX\ sets |\belowdisplay!-skip| to |12pt plus3pt minus9pt|.
+See \knuth{pages~188--189} for a more detailed explanation of this parameter.
+\enddesc
+
+\begindesc
+\cts abovedisplayshortskip {\param{glue}}
+\explain
+This parameter specifies the amount of vertical glue that
+\TeX\ inserts before a math display
+when the display starts to
+the right of where the previous line ends, i.e., when it does not visually
+overlap the previous line.
+\PlainTeX\ sets |\abovedisplay!-shortskip| to |0pt plus3pt|.
+See \knuth{pages~188--189} for a more detailed explanation of this parameter.
+\enddesc
+
+\begindesc
+\cts belowdisplayshortskip {\param{glue}}
+\explain
+This parameter specifies the amount of vertical glue that
+\TeX\ inserts after a display
+when the display starts to
+the right of where the previous line ends, i.e., when it does not visually
+overlap the previous line.
+\PlainTeX\ sets |\belowdisplay!-shortskip| to |7pt plus3pt minus4pt|.
+See \knuth{pages~188--189} for a more detailed explanation of this parameter.
+
+\eix^^{displays//spacing parameters for}
+\enddesc
+
+
+%==========================================================================
+\subsection {Other spacing parameters for math}
+
+\begindesc
+\cts mathsurround {\param{dimen}}
+\explain
+This parameter specifies the amount of space that \TeX\
+inserts before and after a math formula in text mode (i.e., a formula
+surrounded by single |$|'s). See \knuth{page~162} for further details about
+its behavior.
+\PlainTeX\ leaves |\mathsurround| at |0pt|.
+\enddesc
+
+\begindesc
+\cts nulldelimiterspace {\param{dimen}}
+\explain
+^^{delimiters//null, space for}
+This parameter specifies the width of the
+space produced by a null \minref{delimiter}.
+\PlainTeX\ sets |\nulldelimiterspace| to |1.2pt|.
+\enddesc
+
+\begindesc
+\cts scriptspace {\param{dimen}}
+\explain
+This parameter specifies the amount of space that \TeX\
+inserts before and after a subscript or superscript.
+The |\nonscript| command (\xref\nonscript) ^^|\nonscript|
+after a subscript or superscript cancels this space.
+\PlainTeX\ sets |\script!-space| to |0.5pt|.
+\enddesc
+
+%==========================================================================
+\section {Categorizing math constructs}
+
+\begindesc
+\makecolumns 7/2:
+\cts mathord {}
+\cts mathop {}
+\cts mathbin {}
+\cts mathrel {}
+\cts mathopen {}
+\cts mathclose {}
+\cts mathpunct {}
+\explain
+These commands tell \TeX\ to treat the construct that follows as belonging
+to a particular ^{class} (see \knuth{page~154} for the definition
+of the classes). They are listed here in the order of the class numbers,
+from $0$ to $6$. Their primary
+effect is to adjust the spacing around the construct
+to be whatever it is for the specified class.
+
+\example
+$\mathop{\rm minmax}\limits_{t \in A \cup B}\,t$
+% By treating minmax as a math operator, we can get TeX to
+% put something underneath it.
+|
+\produces
+$\mathop{\rm minmax}\limits_{t \in A \cup B}\,t$
+\endexample
+\enddesc
+
+\begindesc
+\cts mathinner {}
+\explain
+This command tells \TeX\ to treat the construct that follows
+as an ``inner formula'', e.g., a fraction, for spacing purposes.
+It resembles the class commands given just above.
+\enddesc
+
+%==========================================================================
+\section {Special actions for math formulas}
+
+\begindesc
+\cts everymath {\param{token list}}
+\cts everydisplay {\param{token list}}
+\explain
+^^{displays//actions for every display}
+These parameters specify \minref{token} lists that \TeX\ inserts
+at the start of every text math or display math formula, respectively.
+You can
+take special actions at the start of each math formula by
+assigning those actions to |\everymath| or
+|\everydisplay|. Don't forget that if you want both kinds of formulas to
+be affected, you need to set \emph{both} parameters.
+\example
+\everydisplay={\heartsuit\quad}
+\everymath = {\clubsuit}
+$3$ is greater than $2$ for large values of $3$.
+$$4>3$$
+|
+\produces
+\everydisplay={\heartsuit\quad}
+\everymath = {\clubsuit}
+$3$ is greater than $2$ for large values of $3$.
+$$4>3$$
+\endexample
+\enddesc
+
+\enddescriptions
+\eix^^{math}
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/modes.tex b/Master/texmf-dist/doc/plain/impatient/modes.tex
new file mode 100644
index 00000000000..1adce6a950a
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/modes.tex
@@ -0,0 +1,2078 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter {Commands for \linebreak horizontal and \linebreak vertical modes}
+
+\chapterdef{hvmodes}
+
+This section covers commands that have corresponding or identical
+forms for both horizontal and vertical modes.
+These commands provide boxes, spaces, rules, leaders,
+and alignments.
+For an explanation of the conventions used in this section,
+see \headcit{Descriptions of the commands}{cmddesc}.
+
+\begindescriptions
+
+%==========================================================================
+\section {Producing space}
+
+%==========================================================================
+
+\subsection {Fixed-width horizontal space}
+
+\begindesc
+\bix^^{space//producing}
+\bix^^{horizontal space}
+\cts thinspace {}
+\explain
+This command produces a positive \minref{kern}
+whose width is one-sixth of an em
+(\xref{dimdefs})
+i.e., it causes \TeX\ to move its position right by that amount.
+It is useful
+when you have a nested quotation, for example,
+and you want to separate the levels of quotes.
+\TeX\ won't break a line at
+a |\thinspace|.\minrefs{line break}
+
+\example
+``\thinspace`A quote.'\thinspace''\par
+24,\thinspace 29--31,\thinspace 45,\thinspace 102
+|
+\produces
+``\thinspace`A quote.'\thinspace''\par
+24,\thinspace 29--31,\thinspace 45,\thinspace 102
+\endexample
+\enddesc
+
+\begindesc
+\cts negthinspace {}
+\explain
+This command
+produces a negative kern whose width is one-sixth of an em
+(\xref{dimdefs}),
+i.e., it causes \TeX\ to move its position left by that amount.
+It is useful for bringing together characters that are a little too
+far apart.
+\TeX\ won't break a line at a |\negthinspace|.\minrefs{line break}
+\example
+The horror, the horror\negthinspace, the horror of it all!!
+|
+\produces
+The horror, the horror\negthinspace, the horror of it all!
+\endexample
+\enddesc
+
+\begindesc
+\cts enspace {}
+\explain
+This command produces a \minref{kern} whose width is one ^{en}
+(half of an em, see \xrefpg{dimdefs}).
+\TeX\ won't break a line
+at an |\enspace| unless it's followed by glue.
+In a bulleted list, the bullets are usually separated from the following
+text by an |\enspace|.
+\example
+Lemma 1.\enspace There exists a white rabbit.
+|
+\produces
+Lemma 1.\enspace There exists a white rabbit.
+\endexample
+% the enspace here follows the \proclaim convention (Knuth p. 355).
+\enddesc
+
+\begindesc
+\easy\cts enskip {}
+\cts quad {}
+\cts qquad {}
+\explain
+^^{en}
+Each of these commands
+produces a glob of horizontal \minref{glue}
+that can neither stretch nor shrink.
+\TeX\ can break a line \minrefs{line break} at such glue.
+The width of these glues (which are relative to the current font)
+are as follows for |cmr10|, the default \plainTeX\ font:
+\medskip
+
+\def\distance#1{\hbox{\strut $\rightarrow$\vrule\hskip #1\vrule$\leftarrow$}}
+
+{\def\l#1{\hfil$#1$\thinspace em}
+\tabskip 3pc \halign{#&#&\hfil#\hfil\cr
+{\it Command}&{\it Space}&{\it Illustration}\cr
+\noalign{\vskip 4pt}
+|\enskip|&\l{\frac 1/2}&\distance{.5em}\cr
+|\quad|&\l1&\distance{1em}\cr
+|\qquad|&\l2&\distance{2em}\cr
+}}
+\example
+en\enskip skip; quad\quad skip; qquad\qquad skip
+|
+\produces
+en\enskip skip; quad\quad skip; qquad\qquad skip
+\endexample
+\eix^^{horizontal space}
+\enddesc
+
+%==========================================================================
+\subsection {Fixed-length vertical space}
+
+\begindesc
+\bix^^{vertical space}
+\easy\cts smallskip {}
+\cts medskip {}
+\cts bigskip {}
+\explain
+These commands produce successively larger
+amounts of vertical space:
+\display{{\def\bar{\kern 2pt\hrule width 5pc}
+\def\lbl#1{\hbox to 5pc{\hfil #1skip\hfil}}
+\leavevmode
+\vtop{\lbl{small}\bar\smallskip\bar}\quad
+\vtop{\lbl{med}\bar\medskip\bar}\quad\vtop{\lbl{big}\bar\bigskip\bar}}}
+\noindent
+|\smallskip| skips by $3$ points and can stretch or
+shrink by $1$ point. |\med!-skip| is equivalent to two |\smallskip|s
+and |\bigskip| is equivalent to two |\medskip|s.
+
+These commands end a paragraph since they are inherently vertical.
+The skips that they produce
+are in addition to the normal interparagraph skip.
+\example
+Hop \smallskip skip \medskip and \bigskip jump.
+|
+\produces
+Hop \smallskip skip \medskip and \bigskip jump.
+\endexample
+\enddesc
+
+\begindesc
+\cts smallskipamount {\param{glue}}
+\cts medskipamount {\param{glue}}
+\cts bigskipamount {\param{glue}}
+\explain
+These parameters specify the amounts of glue produced by
+the |\small!-skip|, |\med!-skip|, and |\big!-skip| commands.
+By changing these parameters you change the effect of the commands.
+The default values (for \plainTeX)
+correspond to a quarter of a linespace, half a linespace,
+and a full linespace.
+We recommend that you maintain this ratio by changing
+these values whenever
+you change |\baselineskip| (\xref\baselineskip).
+^^|\baselineskip//and {\tt\\smallskipamount}, etc.|
+\eix^^{vertical space}
+
+\enddesc
+
+%==========================================================================
+\subsection {Variable-size space}
+
+\begindesc
+\easy\cts hskip {\<dimen$_1$> {\bt plus} \<dimen$_2$> {\bt minus} \<dimen$_3$>}
+\cts vskip {\<dimen$_1$> {\bt plus} \<dimen$_2$> {\bt minus} \<dimen$_3$>}
+^^{vertical skip}^^{vertical glue}
+^^{horizontal skip}^^{horizontal glue}
+\bix^^{horizontal space}
+\bix^^{vertical space}
+\explain
+These commands produce horizontal and vertical glue respectively.
+In the simplest and most common case when only \<dimen$_1$> is present,
+|\hskip| skips to the right by \<dimen$_1$>
+and |\vskip| skips down the page by \<dimen$_1$>.
+More generally, these commands
+produce \minref{glue} whose natural size is
+\<dimen$_1$>, whose stretch is \<dimen$_2$>, and whose shrink is \<dimen$_3$>.
+Either the |plus| \<dimen$_2$>, the |minus |\<dimen$_3$>,
+or both can be omitted.
+If both are present, the |plus| must come before the |minus|.
+An omitted value
+is taken to be zero. Any of the \<dimen>s can be negative.
+
+You can use |\hskip| in math mode, but you can't use |mu| units
+\seeconcept{mathematical unit}
+for any of the dimensions. If you want |mu| units, use |\mskip|
+(\xref\mskip) instead.
+
+\example
+\hbox to 2in{one\hskip 0pt plus .5in two}
+|
+\produces
+\hbox to 2in{one\hskip 0pt plus 2in two}
+
+\doruler{\8\8}2{in}
+\nextexample
+\hbox to 2in{Help me!! I can't fit
+{\hskip 0pt minus 2in} inside this box!!}
+|
+\produces
+\hbox to 2in{Help me! I can't fit
+{\hskip 0pt minus 2in} inside this box!}
+
+\doruler{\8\8}2{in}
+\nextexample
+\vbox to 4pc{\offinterlineskip% Just show effects of \vskip.
+ \hbox{one}\vskip 0pc plus 1pc \hbox{two}
+ \vskip .5pc \hbox{three}}
+|
+\produces
+\smallskip
+\vbox to 4pc{\offinterlineskip% Just show effects of \vskip.
+ \hbox{one}\vskip 0pc plus 1pc \hbox{two}
+ \vskip .5pc \hbox{three}}
+\endexample
+\enddesc
+
+\begindesc
+\cts hglue {\<glue>}
+\cts vglue {\<glue>}
+^^{vertical glue}
+^^{horizontal glue}
+\explain
+The |\hglue| command produces horizontal \minref{glue} that won't disappear at
+a line break; the |\vglue| command
+produces vertical \minref{glue} that won't disappear at a page break.
+In other respects these commands are just like |\hskip| and |\vskip|.
+You can use |\vglue| to produce blank space at the top of a page,
+e.g., above a title on the first page of a document, but
+^|\topglue| (next) is usually better for this purpose.
+\enddesc
+
+\begindesc
+\cts topglue {\<glue>}
+\explain
+\margin{Command added; recent addition to \TeX}
+This command\footnote{|\topglue| was added to \TeX\ in version 3.0,
+later than the other enhancements introduced by ^{\newTeX}
+(\xref{newtex}). It is first described in the \emph{eighteenth\/}
+edition of \texbook.} causes the space from the top of the page to the
+top of the first box on the page to be \<glue> precisely.
+The top of the page is considered to be at the baseline of an
+imaginary line of text just above the top line of the page.
+More precisely, it's a distance |\topskip| above the origin as given by
+|\hoffset| and |\voffset|.
+
+This command is useful because \TeX\ ordinarily adjusts the glue
+produced by |\topskip| in a complex way. By using |\topglue| you can
+control the position of the first box on the page without worrying about
+those adjustments.
+
+\enddesc
+
+\begindesc
+\cts kern {\<dimen>}
+\explain
+The effect of this command depends on the mode that \TeX\ is in when
+it encounters it:
+\ulist
+
+\li In a horizontal mode, \TeX\ moves its position to the right (for a positive
+kern) or to the left (for a negative kern).
+
+\li In a vertical mode, \TeX\ moves its position down the page (for a positive
+kern) or up the page (for a negative kern).
+
+\endulist
+\noindent
+Thus a positive kern produces empty space while a negative kern
+causes \TeX\ to back up over something that it's already produced.
+This notion of a kern ^^{kerns}
+is different from the notion of a kern in some computerized
+typesetting systems---in \TeX, positive kerns push two letters \emph{apart}
+instead of bringing them closer together.
+
+A kern is similar to
+\minref{glue}, except that (a)~a kern can neither stretch nor shrink,
+and (b)~\TeX\ will only break a line or a page at a kern if the kern
+is followed by glue and is not part of a math formula.
+If \TeX\ finds a kern at the
+end of a line or a page, it discards the kern.
+If you want to get the effect of a kern that never disappears,
+use ^|\hglue| or ^|\vglue|.
+
+You can use |\kern| in math mode, but you can't use |mu| units
+\seeconcept{mathematical unit}
+for \<dimen>. If you want |mu| units, use |\mkern|
+(\xref\mkern) instead.
+^^{line breaks//kerns at}
+^^{page breaks//kerns at}
+
+\example
+\centerline{$\Downarrow$}\kern 3pt % a vertical kern
+\centerline{$\Longrightarrow$\kern 6pt % a horizontal kern
+ {\bf Heed my warning!!}\kern 6pt % another horizontal kern
+ $\Longleftarrow$}
+\kern 3pt % another vertical kern
+\centerline{$\Uparrow$}
+|
+\produces
+\centerline{$\Downarrow$}\kern 3pt % a vertical kern
+\centerline{$\Longrightarrow$\kern 6pt % a horizontal kern
+ {\bf Heed my warning!}\kern 6pt % another horizontal kern
+ $\Longleftarrow$}
+\kern 3pt % another vertical kern
+\centerline{$\Uparrow$}
+\endexample
+\enddesc
+
+\begindesc
+\makecolumns 4/2:
+\cts hfil {}
+\cts hfill {}
+\cts vfil {}
+\cts vfill {}
+\explain
+\bix^^{glue//infinitely stretchable}
+These commands produce infinitely stretchable horizontal
+and vertical glue that
+overwhelms any finite stretch that may be present.
+|\hfil| and |\hfill| produce horizontal glue, while
+|\vfil| and |\vfill| produce vertical glue.
+
+|\hfill| is infinitely larger than |\hfil|.
+If both |\hfill| and |\hfil| appear in the same \minref{box},
+the |\hfill| will consume all the available extra space
+and the |\hfil| will be effectively ignored.
+|\hfill| can in turn be overwhelmed by |\hskip 0pt plus 1filll|.
+The glue produced by
+|\hfil| and |\hfill| never shrinks.
+
+The behavior of |\vfil| and |\vfill| is analogous.
+
+\example
+\hbox to 2in{Left\hfil Middle \hfil Right}
+|
+\produces
+\hbox to 2in{Left\hfil Middle \hfil Right}
+
+\doruler{\8\8}2{in}
+\nextexample
+\hbox to 2in{Left\hfil Middle \hfill Right}
+|
+\produces
+\hbox to 2in{Left\hfil Middle \hfill Right}
+
+\doruler{\8\8}2{in}
+\nextexample
+\leftline{%
+\vbox to 4pc{%
+ \hbox{Top}\vfil\hbox{Middle}\vfil \hbox{Bottom}}\quad
+\vbox to 4pc{%
+ \hbox{Top}\vfil\hbox{Middle}\vfill\hbox{Bottom}}}
+|
+\produces
+\smallskip
+\leftline{%
+\vbox to 4pc{%
+ \hbox{Top}\vfil\hbox{Middle}\vfil \hbox{Bottom}}\quad
+\vbox to 4pc{%
+ \hbox{Top}\vfil\hbox{Middle}\vfill\hbox{Bottom}}}
+\endexample
+
+\eix^^{glue//infinitely stretchable}
+\enddesc
+
+\begindesc
+\cts hss {}
+\cts vss {}
+\explain
+These commands produce horizontal and vertical glue
+that is both infinitely stretchable and
+infinitely shrinkable. The glue can shrink
+to a negative distance, producing the effect of backspacing along a line
+(for |\hss|) or moving back up a page (for |\vss|).
+
+\example
+\line{text\hfil\hbox to 0pt{margin\hss}}
+% `margin\hss' shrinks to the zero width of the hbox.
+|
+\produces
+\line{text\hfil\hbox to 0pt{margin\hss}}
+\nextexample
+\vbox to 1pc{\hrule width 6pc % Top of box.
+ \hbox{1} \vskip 1pc\hbox to 2pc{\hfil 2}
+ % The \vss absorbs the extra distance produced by \vskip.
+ \vss \hbox to 3pc{\hfil 3}
+ \hrule width 6pc}% Bottom of box.
+|
+\produces
+\medskip
+\vbox to 1pc{\hrule width 6pc % top of box
+ \hbox{1} \vskip 1pc\hbox to 2pc{\hfil 2}
+ \vss \hbox to 3pc{\hfil 3}
+ \hrule width 6pc}% bottom of box
+\vskip 2.5pc
+\endexample
+\enddesc
+
+\begindesc
+\cts hfilneg {}
+\cts vfilneg {}
+\explain
+^^{glue//negative}
+These commands cancel the effect of a preceding |\hfil|
+or |\vfil|. While |\hfil| and |\vfil|
+produce infinitely stretchable positive \minref{glue}, |\hfilneg|
+and |\vfilneg| produce infinitely stretchable negative glue.
+(Thus, $n$ |\hfilneg|s cancel $n$ ^|\hfil|s, and similarly for
+|\vfilneg|.)
+The main use of |\hfilneg| and |\vfilneg|
+is to counteract the effect of an |\hfil| or |\vfil|
+inserted by a \minref{macro}.
+
+|\hfilneg| and |\vfilneg| have
+the curious property that if they are the only infinitely stretchable
+glue in a box, they produce exactly the same effect as |\hfil|
+and |\vfil|.
+
+\example
+\leftline{\hfil on the right\hfilneg}
+% Cancel the \hfil that \leftline produces to the right
+% of its argument.
+|
+\produces
+\leftline{\hfil on the right \hfilneg}
+% Cancel the \hfil that \leftline produces to the right
+% of its argument.
+%
+\nextexample
+\def\a{\hbox to 1pc{\hfil 2}\vfil}
+\vbox to 4pc{\hbox{1} \vfil \a
+ \vfilneg \hbox to 2pc{\hfil 3}}
+|
+\produces
+\smallskip
+\def\a{\hbox to 1pc{\hfil 2}\vfil}
+\vbox to 4pc{\hbox{1} \vfil \a
+ \vfilneg \hbox to 2pc{\hfil 3}}
+\endexample\enddesc
+
+{\emergencystretch=2em
+\see |\hbadness| and |\vbadness| (\xref \vbadness),
+|\hfuzz| and |\vfuzz| (\xref \vfuzz),
+\conceptcit{leaders}.\par}
+\eix^^{space//producing}
+\eix^^{horizontal space}
+\eix^^{vertical space}
+
+%==========================================================================
+\section {Manipulating boxes}
+
+%==========================================================================
+\subsection {Constructing hboxes and vboxes}
+
+\begindesc
+\bix^^{box commands}
+^^{hboxes//constructing with \b\tt\\hbox\e}
+%
+\cts hbox {\rqbraces{\<horizontal mode material>}}
+\aux\cts hbox {{\bt to} \<dimen> \rqbraces{\<horizontal mode material>}}
+\aux\cts hbox {{\bt spread} \<dimen> \rqbraces{\<horizontal mode material>}}
+\explain
+This command produces an hbox
+(horizontal \minref{box}) containing \<horizontal mode material>.
+The braces around \<horizontal mode material> define a group.
+\TeX\ doesn't break the \<horizontal mode material> into lines,
+since it's in restricted horizontal mode when it's assembling the box.
+\TeX\ won't change the size of the box once it's been produced.
+
+|\hbox| is often useful when you want to keep some text all on one line.
+If your use of |\hbox| prevents \TeX\ from breaking lines in an acceptable
+way, \TeX\ will complain about an overfull hbox.
+
+The width of the hbox depends on the arguments to |\hbox|:
+\ulist\compact
+\li If you specify only \<horizontal mode material>,
+the hbox will have its natural \minref{width}.
+\li If you specify |to| \<dimen>, the width of the hbox will be \<dimen>.
+\li If you specify |spread| \<dimen>, the width of the hbox will be
+its natural width plus \<dimen>, i.e., the hbox will be spread out by
+\<dimen>.
+\endulist
+
+The ^|\hfil| command (\xref\hfil) is useful for filling out an
+hbox with empty space when the material in the box isn't as wide as
+the width of the box.
+\example
+\hbox{ugly suburban sprawl}
+\hbox to 2in{ugly \hfil suburban \hfil sprawl}
+\hbox spread 1in {ugly \hfil suburban \hfil sprawl}
+% Without \hfil in the two preceding lines,
+% you'd get `underfull hbox'es.
+|
+\produces
+\hbox{ugly suburban sprawl}
+\hbox to 2in{ugly \hfil suburban \hfil sprawl}
+\hbox spread 1in {ugly \hfil suburban \hfil sprawl}
+% Without \hfil in the two preceding lines,
+% you'd get `underfull hbox'es.
+
+\doruler{\8\8\8}3{in}
+\endexample
+\enddesc
+
+\begindesc
+\cts vtop {\<vertical mode material>}
+\aux\cts vtop {{\bt to} \<dimen> \rqbraces{\<vertical mode material>}}
+\aux\cts vtop {{\bt spread} \<dimen> \rqbraces{\<vertical mode material>}}
+\cts vbox {\rqbraces{\<vertical mode material>}}
+\aux\cts vbox {{\bt to} \<dimen> \rqbraces{\<vertical mode material>}}
+\aux\cts vbox {{\bt spread} \<dimen> \rqbraces{\<vertical mode material>}}
+\explain
+^^{hbox//constructing with \b\tt\\hbox\e}
+These commands
+produce a \minref{vbox} (vertical \minref{box})
+containing \<vertical mode material>.
+The braces around \<vertical mode material> define a group.
+\TeX\ is in internal vertical mode when it's assembling the box.
+\TeX\ won't change the size of the box once it's been produced.
+
+The difference between |\vtop| and |\vbox| lies in where \TeX\ puts
+the reference point of the constructed vbox.
+Ordinarily, the reference point gotten from |\vtop| tends to be at or near
+the top of the constructed vbox,
+while
+the reference point gotten from |\vbox| tends to be at or near
+the bottom of the constructed vbox.
+Thus a row of vboxes all constructed with |\vtop|
+will tend to have their tops nearly in a line,
+while a row of vboxes all constructed with |\vbox|
+will tend to have their bottoms nearly in a line.
+
+|\vtop| and |\vbox| are often useful
+when you want to keep some text together on a single page.
+(For this purpose, it usually doesn't matter which command you use.)
+If your use of these commands
+prevents \TeX\ from breaking pages in an acceptable
+way, \TeX\ will complain that it's found an overfull or underfull vbox while
+|\output| is active.
+
+The height of a vbox depends on
+the arguments to |\vtop| or |\vbox|.
+For |\vbox|, \TeX\ determines the height as follows:
+\ulist\compact
+\li If you specify only \<vertical mode material>,
+the vbox will have its natural height.
+\li If you specify |to| \<dimen>,
+the height of the vbox will be \<dimen>.
+\li If you specify |spread| \<dimen>, the height of the vbox will be
+its natural height plus \<dimen>, i.e.,
+the height of the vbox will be stretched vertically by \<dimen>.
+\endulist
+\noindent
+For |\vtop|,
+\TeX\ constructs the box using its rules for |\vbox| and then
+apportions the vertical extent between the height and the depth as
+described below.
+
+Ordinarily, the width of a constructed vbox is the width of the widest
+item inside it.\footnote
+{More precisely, it's the distance from the reference point to the rightmost
+edge of the constructed vbox. Therefore,
+if you move any of the items right using ^|\moveright| or
+^|\moveleft| (with a negative distance),
+the constructed vbox might be wider.}
+The rules for apportioning the vertical extent between the
+height and the depth are more complicated:
+\ulist
+\li For |\vtop|,
+the height is the height of its first item, if that item is a box or rule.
+Otherwise the height is zero. The depth is whatever vertical
+extent remains after the height is subtracted.
+\li For |\vbox|,
+the depth is the depth of its last item, if that item is a box or rule.
+Otherwise the depth is zero. The height is whatever vertical
+extent remains after the depth is subtracted.%
+\footnote{In fact, there's a further complication.
+Suppose that after the depth has been determined
+using the two rules just given, the depth turns out to be greater than
+^|\boxmaxdepth|.
+Then the depth is reduced to |\boxmaxdepth| and the height is adjusted
+accordingly.}
+\endulist
+
+The |\vfil| command (\xref\vfil) is useful for filling out a vbox
+^^|\vfil//filling a vbox|
+with empty space when the material in the box isn't as tall as
+the vertical extent of the box.
+\example
+\hbox{\hsize = 10pc \raggedright\parindent = 1em
+\vtop{In this example, we see how to use vboxes to
+produce the effect of double columns. Each vbox
+contains two paragraphs, typeset according to \TeX's
+usual rules except that it's ragged right.\par
+This isn't really the best way to get true double
+columns because the columns}
+\hskip 2pc
+\vtop{\noindent
+aren't balanced and we haven't done anything to choose
+the column break automatically or even to fix up the
+last line of the first column.\par
+However, the technique of putting running text into a
+vbox is very useful for placing that text where you
+want it on the page.}}
+|
+\produces
+\hbox{\hsize = 10pc \raggedright\parindent = 1em
+\vtop{In this example, we see how to use vboxes to
+produce the effect of double columns. Each vbox
+contains two paragraphs, typeset according to \TeX's
+usual rules except that it's ragged right.\par
+This isn't really the best way to get true double
+columns because the columns}
+\hskip 2pc
+\vtop{\noindent
+aren't balanced and we haven't done anything to choose
+the column break automatically or even to fix up the
+last line of the first column.\par
+However, the technique of putting running text into a
+vbox is very useful for placing that text where you
+want it on the page.}}
+\nextexample
+\hbox{\hsize = 1in \raggedright\parindent = 0pt
+\vtop to .75in{\hrule This box is .75in deep. \vfil\hrule}
+\qquad
+\vtop{\hrule This box is at its natural depth. \vfil\hrule}
+\qquad
+\vtop spread .2in{\hrule This box is .2in deeper than
+ its natural depth.\vfil\hrule}}
+|
+\produces
+\hbox{\hsize = 1in \raggedright\parindent=0pt
+\vtop to .75in{\hrule This box is .75in deep. \vfil\hrule}
+\qquad
+\vtop{\hrule This box is at its natural depth. \vfil\hrule}
+\qquad
+\vtop spread .2in{\hrule This box is .2in deeper than
+ its natural depth.\vfil\hrule}}
+\nextexample
+% See how \vbox lines up boxes at their bottoms
+% instead of at their tops.
+\hbox{\hsize = 1in \raggedright
+\vbox to .5in{\hrule This box is .5in deep.\vfil\hrule}
+\qquad
+\vbox to .75in{\hrule This box is .75in deep.\vfil\hrule}}
+|
+\produces
+\hbox{\hsize = 1in \raggedright
+\vbox to .5in{\hrule This box is .5in deep.\vfil\hrule}
+\qquad
+\vbox to .75in{\hrule This box is .75in deep.\vfil\hrule}}
+\vskip 16pt % to avoid running into the next command description
+\endexample
+\enddesc
+
+\begindesc
+\margin{Two commands interchanged here.}
+\cts boxmaxdepth {\param{dimen}}
+\explain
+This parameter contains a dimension $D$.
+\TeX\ will not construct a box whose depth exceeds $D$.
+If you produce a box whose depth $d$ would exceed $D$,
+\TeX\ will transfer the
+excess depth to the height of the box, effectively moving the
+\minref{reference point} of the box down by $d-D$.
+If you set |\boxmaxdepth| to zero, \TeX\ will line up a row of vboxes
+so that their bottom boundaries all lie on the same horizontal line.
+\PlainTeX\ sets |\boxmaxdepth| to |\maxdimen| \ctsref{\maxdimen},
+so |\boxmaxdepth| won't affect your boxes unless you change it.
+\enddesc
+
+\begindesc
+\cts underbar {\<argument>}
+\explain
+This command puts \<argument> into an \minref{hbox}
+and underlines it without regard to anything that protrudes below the
+\minref{baseline} of the box.
+\example
+\underbar{Why not learn \TeX?}
+|
+\produces
+\underbar{Why not learn \TeX?}
+\endexample
+\enddesc
+
+\begindesc
+\cts everyhbox {\param{token list}}
+\cts everyvbox {\param{token list}}
+\explain
+These parameters contain token lists that \TeX\ expands at the start of
+every \minref{hbox} or \minref{vbox} that it constructs.
+Any items resulting from the expansion then become
+the beginning of the list of items for the box.
+By default these token lists are empty.
+\enddesc
+
+%==========================================================================
+\subsection {Setting and retrieving the contents of boxes}
+
+\begindesc
+\bix^^{box registers}
+%
+\cts setbox {\<register>\thinspace{\bt =}\thinspace\<box>}
+\cts box {\<register>}
+\explain
+^^{assignments//of boxes}
+These commands respectively set and retrieve the contents
+of the box register
+whose number is \<register>.
+Note that you set a box register a little differently than
+you set the other kinds of registers: you use
+|\setbox|$\,n$~|=| rather than |\box|$\,n$~|=|.
+
+\emph{Retrieving the contents of a box register
+with these commands has the side effect of emptying it,
+so that the box register become void.} If you don't want that to happen,
+you can use |\copy| (see below) to retrieve the contents.
+You should use |\box| in preference to |\copy|
+when you don't care about what's in a box register after you've used it,
+so as not to exhaust \TeX's memory by filling it with obsolete boxes.
+\example
+\setbox0 = \hbox{mushroom}
+\setbox1 = \vbox{\copy0\box0\box0}
+\box1
+|
+\produces
+\setbox0 = \hbox{mushroom}
+\setbox1 = \vbox{\copy0\box0\box0}
+\box1
+\endexample
+\enddesc
+
+\begindesc
+\cts copy {\<register>}
+\explain
+^^{boxes//copying}\minrefs{box}
+This command
+produces a copy of box register \<register>.
+This command is useful when you want to retrieve the contents of a box
+register but don't want to destroy the contents.
+(Retrieving the register contents with ^|\box| makes the register void.)
+\example
+\setbox0 = \hbox{good }
+Have a \copy0 \box0 \box0 day!!
+|
+\produces
+\setbox0 = \hbox{good }
+Have a \copy0 \box0 \box0 day!
+\endexample
+\enddesc
+
+\begindesc
+\cts unhbox {\<register>}
+\cts unvbox {\<register>}
+^^{boxes//extracting contents of}
+\explain
+These commands produce the list contained in box register \<register> and make
+that box register void.
+|\unhbox| applies to box registers containing
+hboxes and |\unvbox| applies to box registers containing vboxes.
+You should use these commands in preference to |\unhcopy| and |\unvcopy|
+(see below)
+when you don't care about what's in the box register after you've used it,
+so as not to exhaust \TeX's memory by filling it with obsolete boxes.
+\example
+\setbox0=\hbox{The Mock Turtle sighed deeply, and
+drew the back of one flapper across his eyes. }
+\setbox1=\hbox{He tried to speak, but sobs choked
+ his voice. }
+\unhbox0 \unhbox1
+% \box0 \box1 would set two hboxes side by side
+% (and produce a badly overfull line).
+\box1 % produces nothing
+|
+\produces
+\setbox0=\hbox{The Mock Turtle sighed deeply, and
+drew the back of one flapper across his eyes. }
+\setbox1=\hbox{He tried to speak, but sobs choked
+ his voice. }
+\unhbox0 \unhbox1
+% \hbox0 \hbox1 would set two hboxes side by side
+% (and produce a badly overfull line).
+\box1 % Produces nothing.
+\endexample
+\enddesc
+
+\begindesc
+\cts unhcopy {\<register>}
+\cts unvcopy {\<register>}
+^^{boxes//extracting contents of}
+^^{boxes//copying }\minrefs{box}
+\explain
+These commands produce the list contained in box register \<register> and
+leave the contents of the register undisturbed.
+|\unhcopy| applies to box registers containing hboxes
+and |\unvcopy| applies to box registers containing vboxes.
+\example
+\setbox0=\hbox{The Mock Turtle sighed deeply, and
+drew the back of one flapper across his eyes. }
+\setbox1=\hbox{He tried to speak, but sobs choked his
+ voice. }
+\unhcopy0 \unhcopy1\par\noindent
+% \box0 \box1 would set two hboxes side by side
+% (and produce a badly overfull line).
+\box1 % Produces an hbox (which can't be broken).
+|
+\produces
+\setbox0=\hbox{The Mock Turtle sighed deeply, and
+drew the back of one flapper across his eyes. }
+\setbox1=\hbox{He tried to speak, but sobs choked his
+ voice. }
+\unhcopy0 \unhcopy1\par\noindent
+% \hbox0 \hbox1 would set two hboxes side by side
+% (and produce a badly overfull line).
+\box1 % produces an hbox (which can't be broken)
+\endexample
+\enddesc
+
+\see |\wd|, |\dp|, |\ht| (\xref\ht).
+\eix^^{box registers}
+
+%==========================================================================
+\subsection {Shifting boxes}
+
+\begindesc
+\cts moveleft {\<dimen> \<box>}
+\cts moveright {\<dimen> \<box>}
+\bix^^{boxes//shifting}
+\minrefs{box}
+\explain
+These commands move \<box> left or right by \<dimen> (which can be
+negative). You can only apply |\moveleft| and |\moveright| to a box
+that's in a \minref{vertical list}.
+\example
+\vbox{\vbox{Phoebe}\vbox{walked}%
+\moveleft 20pt\vbox{a}\moveright 20pt\vbox{crooked}%
+\vbox{mile.}}
+|
+\produces
+\hfuzz = \maxdimen
+\vbox{\vbox{Phoebe}\vbox{walked}%
+\moveleft 20pt\vbox{a}\moveright 20pt\vbox{crooked}%
+\vbox{mile.}}
+\endexample
+\enddesc
+
+\begindesc
+\cts lower {\<dimen> \<box>}
+\cts raise {\<dimen> \<box>}
+\explain
+These commands move \<box> up or down by \<dimen>
+(which can be negative).
+You can only apply |\raise| and |\lower| to a box
+that's in a \minref{horizontal list}.
+\example
+Are you feeling \lower 6pt \hbox{depressed} about the
+ \raise 6pt \hbox{bump} on your nose?
+|
+\produces
+Are you feeling \lower 6pt \hbox{depressed} about the
+ \raise 6pt \hbox{bump} on your nose?
+\endexample
+
+\eix^^{boxes//shifting}
+\enddesc
+
+%==========================================================================
+\subsection {Dimensions of box registers}
+
+\begindesc
+\bix^^{box registers}
+\bix^^{dimensions//of box registers}
+\cts ht {\<register>\param{dimen}}
+\cts dp {\<register>\param{dimen}}
+\cts wd {\<register>\param{dimen}}
+\explain
+These parameters refer to the ^{height}, ^{depth}, and ^{width}
+respectively of \minref{box} \minref{register} \<register>.
+You can use them to find out the dimensions of a box.
+You can also change the dimensions of a box, but it's a tricky business;
+if you want to be adventurous you can
+learn all about it from \knuth{pages~388--389}.
+\example
+\setbox0 = \vtop{\hbox{a}\hbox{beige}\hbox{bunny}}%
+The box has width \the\wd0, height \the\ht0,
+and depth \the\dp0.
+|
+\produces
+\setbox0 = \vtop{\hbox{a}\hbox{beige}\hbox{bunny}}%
+The box has width \the\wd0, height \the\ht0,
+and depth \the\dp0.
+\endexample
+\eix^^{box registers}
+\eix^^{dimensions//of box registers}
+\enddesc
+
+%==========================================================================
+\subsection {Struts, phantoms, and empty boxes}
+
+\begindesc
+\margin{This subsection is a merger of two previous subsections.
+The commands have also been reordered.}
+\bix^^{struts}
+\cts strut {}
+\explain
+This command produces a box whose width is zero
+and whose height (|8.5pt|) and depth (|3.5pt|)
+are those of a more or less typical line of type in |cmr10|,
+the default \plainTeX\ font.
+Its main use is in forcing lines to have the same height
+when you've disabled \TeX's interline glue with
+|\offinter!-lineskip| ^^|\offinterlineskip| or a similar command,
+e.g., when you're constructing an alignment.
+If the natural height of a line is
+too short, you can bring it up to standard by including a |\strut|
+in the line. The strut will force the height and depth of the line
+to be larger, but it won't print anything or consume any horizontal
+space.
+
+If you're setting type in a font that's bigger or smaller than |cmr10|,
+you should redefine |\strut| for that context.
+\example
+\noindent % So we're in horizontal mode.
+\offinterlineskip % So we get the inherent spacing.
+% The periods in this vbox are not vertically equidistant.
+\vtop{\hbox{.}\hbox{.(}\hbox{.x}
+ \hbox{.\vrule height 4pt depth 0pt}}\qquad
+% The periods in this vbox are vertically equidistant
+% because of the struts.
+\vtop{\hbox{.\strut}\hbox{.(\strut}\hbox{.x\strut}
+ \hbox{.\vrule height 4pt depth 0pt\strut}}
+|
+
+\produces
+\noindent % So we're in horizontal mode.
+\offinterlineskip % So we get the inherent spacing.
+% The periods in this vbox are not vertically equidistant.
+\vtop{\hbox{.}\hbox{.(}\hbox{.x}
+ \hbox{.\vrule height 4pt depth 0pt}}\qquad
+% The periods in this vbox are vertically equidistant
+% because of the struts.
+\vtop{\hbox{.\strut}\hbox{.(\strut}\hbox{.x\strut}
+ \hbox{.\vrule height 4pt depth 0pt\strut}}
+\endexample
+\enddesc
+
+\begindesc
+\cts mathstrut {}
+\explain
+This command produces a phantom formula whose width is zero
+and whose height and depth are the same as those of a left parenthesis.
+|\mathstrut| is in fact defined as `|\vphantom(|'.
+Its main use is for getting radicals, underbars, and overbars to line
+up with other radicals, underbars, and overbars in a formula.
+It is much like ^|\strut| (\xref \strut),
+except that it adjusts itself to the different \minref{style}s
+that can occur in math formulas.
+\example
+$$\displaylines{
+\overline{a_1a_2} \land \overline{b_1b_2}
+\quad{\rm versus}\quad \overline{a_1a_2\mathstrut}
+ \land \overline{b_1b_2\mathstrut}\cr
+\sqrt{\epsilon} + \sqrt{\xi} \quad{\rm versus}\quad
+\sqrt{\epsilon\mathstrut} + \sqrt{\xi\mathstrut}\cr}$$
+|
+\dproduces
+\kern 4pt
+$$\displaylines{
+\overline{a_1a_2} \land \overline{b_1b_2}
+\quad{\rm versus}\quad \overline{a_1a_2\mathstrut}
+ \land \overline{b_1b_2\mathstrut}\cr
+\sqrt{\epsilon} + \sqrt{\xi} \quad{\rm versus}\quad
+\sqrt{\epsilon\mathstrut} + \sqrt{\xi\mathstrut}\cr}$$
+\endexample
+\eix^^{struts}
+\enddesc
+
+\begindesc
+\cts phantom {\<argument>}
+\explain
+\bix^^{boxes//phantom}
+\bix^^{phantoms}
+This command produces an empty \minref{box}
+having the same size and placement
+that \<argument> would have were it typeset.
+One use of |\phantom| is for reserving space for a symbol that for some
+reason needs to be drawn in by hand.
+\example
+$1\phantom{9}2$
+|
+\produces
+$1\phantom{9}2$
+\endexample
+\enddesc
+
+\begindesc
+\cts hphantom {\<argument>}
+\cts vphantom {\<argument>}
+\explain
+These commands produce phantom boxes\minrefs{box}\ that
+don't print anything:
+\ulist\compact
+\li |\hphantom| produces a box with the same width as \<argument>
+but zero height and depth.
+\li |\vphantom| produces a box with the same height and depth as \<argu\-ment>
+but zero width.
+\endulist
+\noindent
+Their main purpose is to force a subformula to have a certain minimum
+horizontal or vertical dimension.
+\example
+$$\left[\vphantom{u\over v}t\right] \star
+ \left[{u\over v}\right]\quad
+ \{\hphantom{xx}\}$$
+|
+\dproduces
+\kern 4pt
+$$\left[\vphantom{u\over v}t\right] \star
+ \left[{u\over v}\right]\quad
+ \{\hphantom{xx}\}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts smash {\<argument>}
+\explain
+This command typesets \<argument>,
+but forces the height and depth of its containing \minref{box} to be zero.
+You can use |\smash| and |\vphantom| in combination to give a subformula
+any height and depth that you wish.
+\example
+$${\smash{r_m \brace r_n}\vphantom{r}} \Longrightarrow r$$
+|
+\dproduces
+\kern 4pt
+$${\smash{r_m \brace r_n}\vphantom{r}} \Longrightarrow r$$
+\endexample
+\eix^^{boxes//phantom}
+\eix^^{phantoms}
+\enddesc
+
+\begindesc
+^^{boxes//empty}
+\cts null {}
+\explain
+This command produces an empty \minref{hbox}.
+\example
+\setbox0 = \null
+The null box \null has width \the\wd0, height \the\ht0,
+and depth \the\dp0.
+|
+\produces
+\setbox0 = \null
+The null box \null has width \the\wd0, height \the\ht0,
+and depth \the\dp0.
+\endexample
+\enddesc
+
+
+%==========================================================================
+\subsection {Parameters pertaining to malformed boxes}
+
+\begindesc
+\bix^^{boxes//overfull}
+\bix^^{boxes//underfull}
+\cts overfullrule {\param{dimen}}
+\explain
+This parameter specifies the width of the rule
+that \TeX\ appends to an overfull \minref{hbox}.
+\PlainTeX\ sets it to |5pt|.
+\enddesc
+
+\begindesc
+\cts hbadness {\param{number}}
+\cts vbadness {\param{number}}
+\explain
+These parameters specify the thresholds of horizontal and vertical
+\minref{badness} for reporting underfull or overfull boxes.
+|\hbadness| applies to hboxes and |\vbadness| applies to vboxes.
+If the badness of a constructed box exceeds the threshold,
+\TeX\ will report an error. If you raise the thresholds
+(the \plainTeX\ defaults are both $1000$),
+\TeX\ will be less likely to complain.
+Note that the settings of |\hbadness| and |\vbadness| have no effect on
+the appearance of your typeset document; they only affect the error
+messages that you get.
+See \knuth{page~302} for a precise description
+of how \TeX\ decides when to complain about an overfull or underfull
+box.
+
+\margin{The material on tolerance was inappropriate here and has been
+removed. A new example replaces it.}
+\example
+\hbadness = 10000 % Suppress any hbadness complaints.
+\hbox to 2in{a b}\par
+\hbadness = 500 % Report hbadness exceeding 500.
+\hbox to 2in{a\hskip 0pt plus .5in b}
+|
+\logproduces
+Underfull \hbox (badness 5091) detected at line 4
+\tenrm a b
+
+\hbox(6.94444+0.0)x144.54, glue set 3.70787
+.\tenrm a
+.\glue 0.0 plus 36.135
+.\tenrm b
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts badness {}
+\explain
+This command yields the numerical value of the badness of the \minref{box}
+(either horizontal or vertical) that \TeX\ has most recently produced.
+If the box was overfull, |\badness| will be $1000000$; in all other cases
+it will be between $0$ and $10000$.
+\enddesc
+
+\begindesc
+\cts hfuzz {\param{dimen}}
+\cts vfuzz {\param{dimen}}
+\explain
+These parameters specify the amount that
+a \minref{box} can exceed its natural size before \TeX\ considers it to be
+overfull. ^^{boxes//overfull}
+|\hfuzz| applies to hboxes and |\vfuzz| applies to vboxes.
+\PlainTeX\ sets both parameters to |0.1pt|.
+\example
+\hfuzz = .5in
+\hbox to 2in{This box is longer than two inches.}
+% No error results
+|
+\produces
+\hfuzz = .5in
+\hbox to 2in{This box is longer than two inches.}
+% No error results
+\doruler{\8\8\8}3{in}
+\endexample
+
+\eix^^{boxes//overfull}
+\eix^^{boxes//underfull}
+\eix^^{box commands}
+\enddesc
+
+\see |\tolerance| \ctsref{\tolerance}.
+%==========================================================================
+\section {Retrieving the last item from a list}
+
+\begindesc
+^^{boxes//last box in a list}
+^^{kerns//last kern in a list}
+^^{penalties//last penalty in a list}
+^^{glue//last glue item in a list}
+\margin{This section has been moved in its entirety from the chapter
+(`Commands for general operations')}
+\cts lastkern {}
+\cts lastskip {}
+\cts lastpenalty {}
+\cts lastbox {}
+\explain
+These control sequences yield the value of the last item on the current
+list. They aren't true commands because they can only appear as
+part of an argument.
+If the last item on the list isn't of the indicated type,
+they yield a zero value (or an empty box, in the case of |\lastbox|).
+For example,
+if the last item on the current list is a \minref{kern},
+|\lastkern| yields the dimension of that kern; if it
+isn't a kern, it yields a dimension of $0$.
+
+Using |\lastbox| has the additional effect of removing the last box from
+the list.
+If you want the original |\last!-box| to remain on the list, you
+have to add a copy of it to the list.
+|\last!-box| is not permitted in a math list or in the main
+vertical~list.
+
+These control sequences are
+most useful after macro calls that might have inserted entities of
+the indicated kinds.
+
+\example
+\def\a{two\kern 15pt}
+one \a\a\hskip 2\lastkern three\par
+% Get three times as much space before `three'.
+\def\a{\hbox{two}}
+one \a
+\setbox0 = \lastbox % Removes `two'.
+three \box0.
+|
+\produces
+\def\a{two\kern 15pt}
+one \a\a\hskip 2\lastkern three\par
+% get three times as much space before `three'
+\def\a{\hbox{two}}
+one \a
+\setbox0 = \lastbox % removes `two'
+three \box0.
+\endexample
+\enddesc
+
+\begindesc
+\cts unkern {}
+\cts unskip {}
+\cts unpenalty {}
+\explain
+If the last item on the current list is of type \minref{kern},
+\minref{glue}, or \minref{penalty} respectively, these commands remove it
+from that list. If the item isn't of the right type, these commands have
+no effect. Like ^|\lastbox|, you can't apply them to lists in math mode or to
+the main vertical list.
+These commands
+are most useful after a macro call that is known to have inserted
+a specific item that you don't want there.
+\TeX\ doesn't provide an ^|\unbox| command because |\lastbox| produces
+nearly the same effect.
+\enddesc
+
+
+%==========================================================================
+\section {Rules and leaders}
+
+\begindesc
+\bix^^{rules}
+\bix^^{horizontal rules}
+\bix^^{vertical rules}
+%
+\cts hrule {}
+\aux\cts hrule {\bt height \<dimen> width \<dimen> depth \<dimen>}
+\cts vrule {}
+\aux\cts vrule {{\bt width \<dimen> height \<dimen> depth \<dimen>}}
+\explain
+The |\hrule| command produces a horizontal rule; the |\vrule| command
+produces a vertical rule. You can specify any or all of the width,
+height, and depth of the rule---\TeX\ supplies default values for those
+that you omit. You can give the dimensions of the rule in any order;
+the forms listed above show just two of the possible combinations. You
+can even give a dimension of a given kind more than once---if you do,
+the last one is the one that counts.
+
+If you don't specify the width of a horizontal rule, the rule is
+extended horizontally to the boundaries of the innermost \minref{box} or
+\minref{alignment} that contains the rule. If you don't specify the
+height of a horizontal rule, it defaults to |0.4pt|; if you don't
+specify the depth of a horizontal rule, it defaults to |0pt|.
+
+If you don't specify the width of a vertical rule, it defaults to
+|0.4pt|. If you don't specify the height or the depth of a vertical
+rule, the rule is extended to the boundary of the innermost \minref{box}
+or \minref{alignment} that contains the rule.
+
+\TeX\ treats a horizontal rule as an inherently vertical item
+and a vertical rule as an inherently horizontal item.
+Thus a horizontal rule is legal only in a \minref{vertical mode},
+while a vertical rule is legal only in a \minref{horizontal mode}.
+^^{horizontal mode//rules in}
+^^{vertical mode//rules in}
+If this seems surprising, visualize it---a horizontal rule runs
+from left to right and separates vertical items in a sequence, while
+a vertical rule runs up and down and
+separates horizontal items in a sequence.
+
+\example
+\hrule\smallskip
+\hrule width 2in \smallskip
+\hrule width 3in height 2pt \smallskip
+\hrule width 3in depth 2pt
+|
+\produces
+\medskip
+\hrule\smallskip
+\hrule width 2in \smallskip
+\hrule width 3in height 2pt \smallskip
+\hrule width 3in depth 2pt
+\nextexample
+% Here you can see how the baseline relates to the
+% height and depth of an \hrule.
+\leftline{
+ \vbox{\hrule width .6in height 5pt depth 0pt}
+ \vbox{\hrule width .6in height 0pt depth 8pt}
+ \vbox{\hrule width .6in height 5pt depth 8pt}
+ \vbox{\hbox{ baseline}\kern 3pt \hrule width .6in}
+}
+|
+\produces
+\medskip
+\leftline{
+ \vbox{\hrule width .6in height 5pt depth 0pt}
+ \vbox{\hrule width .6in height 0pt depth 8pt}
+ \vbox{\hrule width .6in height 5pt depth 8pt}
+ \vbox{\hbox{ baseline}\kern 3pt \hrule width .6in}
+}
+\nextexample
+\hbox{( {\vrule} {\vrule width 8pt} )}
+\hbox {( {\vrule height 13pt depth 0pt}
+ {\vrule height 13pt depth 7pt} x)}
+% the parentheses define the height and depth of each of the
+% two preceding boxes; the `x' sits on the baseline
+|
+\produces
+\medskip
+\hbox{( {\vrule} {\vrule width 8pt} )}
+\hbox {( {\vrule height 13pt depth 0pt}
+ {\vrule height 13pt depth 7pt} x)}
+\endexample
+
+\eix^^{rules}
+\eix^^{horizontal rules}
+\eix^^{vertical rules}
+\enddesc
+
+\begindesc
+\bix^^{leaders}
+\easy\cts leaders {\<box or rule> \<skip command>}
+\cts cleaders {\<box or rule> \<skip command>}
+\cts xleaders {\<box or rule> \<skip command>}
+\explain
+These commands produce \minref{leaders}, i.e., they fill a
+horizontal or vertical space with
+copies of a pattern \seeconcept{leaders}.
+The \<box> or \<rule> specifies a leader,
+i.e., a single copy of the pattern,
+while the \<skip command> specifies a
+window to be filled with a
+row or a column of the leaders.
+The pattern is repeated as many times as will fit into the window.
+If \<skip command> is a horizontal skip, the window
+contains a row of leaders and \TeX\ must be in a horizontal mode;
+if \<skip command> is a vertical skip, the window
+contains a column of leaders and \TeX\ must be in a vertical mode.
+
+The commands differ in how they arrange the repeated pattern in the space
+and where they put any leftover space:
+
+\ulist\compact
+\li For |\leaders|, \TeX\ aligns a row of leaders with the left end of
+the innermost \minref{box} $B$ that is to contain the result of the
+|\leaders| command.
+It aligns a column of leaders with the top of $B$.
+Those leaders that fall entirely within the window are retained.
+Any leftover space at the top and bottom of the window is left empty.
+\li For |\cleaders|, the leaders are centered within the window.
+\li For |\xleaders| the pattern is uniformly distributed throughout the window.
+If the leftover space is $l$ and the leader is repeated $n$ times,
+\TeX\ puts space of width or height $l/(n+1)$ between adjacent leaders and
+at the two ends (left and right or top and bottom) of the leaders.
+\endulist
+
+\example
+\def\pattern{\hbox to 15pt{\hfil.\hfil}}
+\line{Down the Rabbit-Hole {\leaders\pattern\hfil} 1}
+\line{The Pool of Tears {\leaders\pattern\hfil} 9}
+\line{A Caucus-Race and a Long Tale {\cleaders\pattern
+ \hfil} 19}
+\line{Pig and Pepper {\xleaders\pattern\hfil} 27}
+|
+\produces
+\def\pattern{\hbox to 15pt{\hfil.\hfil}}\par
+\line{Down the Rabbit-Hole {\leaders\pattern\hfil} 1}
+\line{The Pool of Tears {\leaders\pattern\hfil} 9}
+\line{A Caucus-Race and a Long Tale {\cleaders\pattern
+ \hfil} 19}
+\line{Pig and Pepper {\xleaders\pattern\hfil} 27}
+\nextexample
+\def\bulletfill{\vbox to 3ex{\vfil\hbox{$\bullet$}\vfil}}%
+\def\mybox{\vbox to 1in}
+\def\myrule{\hrule width 4pt}\hsize=2in
+\hrule \line{%
+ \mybox{\myrule depth 8pt \leaders\bulletfill\vfill}
+ \hfil
+ \mybox{\myrule depth 15pt \leaders\bulletfill\vfill}
+ \hfil
+ \mybox{\myrule depth 18pt \cleaders\bulletfill\vfill}
+ \hfil
+ \mybox{\myrule depth 12pt \xleaders\bulletfill\vfill}%
+}\hrule
+|
+\produces
+\medskip
+\def\bulletfill{\vbox to 3ex{\vfil\hbox{$\bullet$}\vfil}}%
+\def\mybox{\vbox to 1in}\def\myrule{\hrule width 4pt}\hsize=2in
+\hrule \line{%
+ \mybox{\myrule depth 8pt \leaders\bulletfill\vfill}
+ \hfil
+ \mybox{\myrule depth 15pt \leaders\bulletfill\vfill}
+ \hfil
+ \mybox{\myrule depth 18pt \cleaders\bulletfill\vfill}
+ \hfil
+ \mybox{\myrule depth 12pt \xleaders\bulletfill\vfill}%
+}\hrule
+\endexample\enddesc
+
+\begindesc
+\cts dotfill {}
+\cts hrulefill {}
+\explain
+^^{fill}
+These commands respectively fill the enclosing horizontal space with
+a row of dots on the baseline and with
+a horizontal line on the baseline.
+It's usually a good idea to leave a space between
+|\dotfill| or |\hrulefill|
+and any text that precedes or follows it (see the example below).
+\example
+\hbox to 3in{Start {\dotfill} Finish}
+\hbox to 3in{Swedish {\hrulefill} Finnish}
+|
+\produces
+\par\hbox to 3in{Start {\dotfill} Finish}
+\hbox to 3in{Swedish {\hrulefill} Finnish}
+\endexample\enddesc
+
+\begindesc
+\cts leftarrowfill {}
+\cts rightarrowfill {}
+\explain
+^^{fill}
+These commands fill the enclosing horizontal space with
+left-pointing or right-pointing ^{arrows}.
+\example
+\hbox to 3in{\vrule \rightarrowfill \ 3 in
+ \leftarrowfill\vrule}
+|
+\produces
+\medskip
+\hbox to 3in{\vrule \rightarrowfill \ 3 in
+ \leftarrowfill\vrule}
+\endexample
+
+\eix^^{leaders}
+\enddesc
+
+%==========================================================================
+\section {Alignments}
+
+%==========================================================================
+\subsection {Tabbing alignments}
+
+\begindesc
+\bix^^{tabbing alignments}
+\bix^^{alignments//commands for}
+%
+\ctspecial + {{\bt \<text>\thinspace\&\thinspace\<text>%
+ \thinspace\& $\cdots$ \\cr}}
+\ctsxrdef{@plus}
+\cts tabalign {}
+\explain
+These commands begin a single line in a tabbed \minref{alignment}.
+The only difference between |\+| and |\tabalign| is that
+|\+| is an outer macro---you can't use it when \TeX\ is reading tokens at
+high speed \seeconcept{outer}.
+
+If you place an `|&|' at a position
+to the right of all existing tabs in a tabbing alignment,
+the `|&|' establishes a new tab at that position.
+\example
+\cleartabs % Nullify any previous \settabs.
+\+ {\bf if }$a[i] < a[i+1]$ &{\bf then}&\cr
+\+&&$a[i] := a[i+1]$;\cr
+\+&&{\it found }$:=$ {\bf true};\cr
+\+&{\bf else}\cr
+\+&&{\it found }$:=$ {\bf false};\cr
+\+&{\bf end if};\cr
+|
+\produces
+\cleartabs % Nullify any previous \settabs.
+\+ {\bf if }$a[i] < a[i+1]$ &{\bf then}&\cr
+\+&&$a[i] := a[i+1]$;\cr
+\+&&{\it found }$:=$ {\bf true};\cr
+\+&{\bf else}\cr
+\+&&{\it found }$:=$ {\bf false};\cr
+\+&{\bf end if};\cr
+\endexample
+\enddesc
+
+\begindesc
+\cts settabs {\<number> {\bt \\columns}}
+\aux\cts settabs {{\bt \\+} \<sample line> {\bt \\cr}}
+\explain
+The first form of
+this command defines a set of tab stops ^^{tabs}
+for a tabbing \minref{alignment}.
+It tells \TeX\ to set the tab stops so as to divide each line into
+\<number> equal parts. \TeX\ takes the length of a line to be
+|\hsize|, as usual. You can make the alignment narrower by decreasing
+|\hsize|.
+\margin{paragraph ``The tab settings $\ldots$'' moved to below.}
+\example
+{\hsize = 3in \settabs 3 \columns
+\+$1$&one&first\cr
+\+$2$&two&second\cr
+\+$3$&three&third\cr}
+|
+\produces
+{\hsize = 3in \settabs 3 \columns
+\+$1$ & one & first\cr
+\+$2$ & two & second\cr
+\+$3$ & three & third\cr}
+
+\noindent\doruler{\8\8\8}3{in}
+\smallskip
+\endexample
+
+The second form of this command defines tab stops by setting the tab stops
+at the positions indicated by the `|&|'s in the sample line.
+The sample line itself does not appear in the output. When you
+use this form you'll usually want to put material into the sample line that is
+somewhat wider than the widest corresponding material in the alignment,
+in order to produce space between the columns.
+That's what we've done in the
+example below. The material following the last tab
+stop is irrelevant, since \TeX\ does not need to position
+anything at the place where the |\cr|~appears.
+
+The tab settings established by |\settabs| remain in effect until
+you issue a new |\settabs| command or end a group containing
+the |\settabs| command.
+This is true for both forms of the command.
+
+\example
+% The first line establishes the template.
+\settabs \+$1$\qquad & three\quad & seventh\cr
+\+$1$&one&first\cr
+\+$2$&two&second\cr
+\+$3$&three&third\cr
+|
+\produces
+\settabs \+$1$\qquad & three\quad & seventh\cr % the sample line
+\+$1$&one&first\cr
+\+$2$&two&second\cr
+\+$3$&three&third\cr
+\smallskip
+\endexample
+\enddesc
+
+\begindesc
+
+\cts cleartabs {}
+\explain
+This command clears all the tabs to the right of the current column.
+Its main use is in applications such as typesetting computer programs
+in which the tab positions change from line to line.
+\enddesc
+
+\see |\cr|, |\endline|, |\crcr| (\xref \endline).
+\eix^^{tabbing alignments}
+
+%==========================================================================
+\subsection {General alignments}
+
+\begindesc
+\cts halign {{\bt \rqbraces{\<preamble> \\cr \<row> \\cr $\ldots$ \<row> \\cr}}}
+ \xrdef{@and}\xrdef{@pound}
+\aux\cts halign {{\bt to \<dimen>%
+ \rqbraces{\<preamble> \\cr \<row> \\cr $\ldots$ \<row> \\cr}}}
+\aux\cts halign {{\bt spread \<dimen>%
+ \rqbraces{\<preamble> \\cr \<row> \\cr $\ldots$ \<row> \\cr}}}
+\explain
+This command produces a horizontal \minref{alignment} consisting of a
+sequence of rows, where each row in turn contains a sequence of column
+entries. \TeX\ adjusts the widths of the column entries to accommodate
+the widest one in each column.
+
+A horizontal alignment can only appear when \TeX\ is in a vertical
+\minref{mode}. We recommend that you first study alignments in general
+(\xref{alignment}) before you attempt to use this command.
+
+An alignment consists of a ^{preamble}
+followed by the text to be aligned. The preamble,
+which describes the layout of the rows that follow, consists of a
+sequence of column templates, separated by `|&|' and ended
+by |\cr|.
+\bix^^{template}
+\bix^^{entry (column or row)}
+Each row consists of a sequence of column
+entries, also separated by `|&|' and ended by |\cr|. Within
+a template, `|#|' indicates where \TeX\ should insert the
+corresponding text of a column entry.
+In contrast, |\settabs| uses a fixed implicit template of `|#|',
+i.e., it just inserts the text as is.
+
+\TeX\ typesets each column entry in restricted horizontal mode,
+i.e., as the contents of an \minref{hbox},
+and implicitly encloses it in a group.
+
+The |to| form of this command instructs \TeX\
+to make the width of the alignment be \<dimen>,
+adjusting the space between columns as necessary.
+The |spread| form of this command instructs \TeX\
+to make the alignment wider by \<dimen> than its natural width.
+These forms are like the corresponding forms of |\hbox| \ctsref\hbox.
+
+See |\tabskip| \ctsref\tabskip{} for an example using the
+|to| form.
+
+\example
+\tabskip = 1em \halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ United States&Washington&dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+|
+\produces
+\tabskip = 1em \halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ United States&Washington&dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+\endexample
+\enddesc
+
+\begindesc
+{\tighten
+\cts valign {{\bt \rqbraces{\<preamble>\\cr \<column>\\cr $\ldots$
+ \<column>\\cr}}}
+\aux\cts valign {{\bt to \<dimen>%
+ \rqbraces{\<preamble>\\cr \<column>\\cr $\ldots$ \<column>\\cr}}}
+\aux\cts valign {{\bt spread \<dimen>%
+ \rqbraces{\<preamble>\\cr \<column>\\cr $\ldots$ \<column>\\cr}}}
+\par}
+\explain
+This command produces a vertical \minref{alignment}
+consisting of
+a sequence of columns, where each column in turn contains a sequence
+of row entries.
+\TeX\ adjusts the heights of the row entries to accommodate the tallest one
+in each row.
+
+A vertical alignment
+can only appear when \TeX\ is in a horizontal \minref{mode}.
+Because vertical alignments are (a)~conceptually somewhat difficult and
+(b)~not often used, we recommend that you learn about
+alignments in general
+(\xref{alignment}) and the |\halign| command (see above) before
+you attempt to use the |\valign| command.
+
+An alignment consists of a ^{preamble}
+followed by the text to be aligned. The preamble,
+which describes the layout of the columns that follow,
+consists of a
+sequence of row templates, separated by `|&|' and ended
+by |\cr|.
+\bix^^{template}
+Each column consists of a sequence of ^{row}
+entries, also separated by `|&|' and ended by |\cr|. Within
+a template, `|#|' indicates where \TeX\ should insert the
+corresponding text of a row entry.
+
+\TeX\ typesets each row entry in internal vertical
+mode, i.e., as the contents of a \minref{vbox},
+and implicitly encloses the entry in a group.
+It always gives the vbox zero depth.
+Any text or other horizontal mode material in a row entry then puts \TeX\
+into ordinary horizontal mode.
+(This is just an application of the general rules for \TeX's behavior
+in internal vertical mode.)
+The usual paragraphing parameters apply in this case:
+the row entry has an initial
+indentation of |\parindent| (\xref\parindent) and
+its lines have the
+|\leftskip| and |\rightskip| (\xref\leftskip) \minref{glue}
+appended to~them.
+
+Note in particular that a row entry containing text has
+a width of |\hsize| (\xref\hsize). Unless you reset
+|\hsize| to the row width that you want, you're likely to
+encounter overfull \minref{hbox}es, or find that
+the first column takes up the width of the entire page, or both.
+\eix^^{entry (column or row)}
+
+Normally, you need to include a \minref{strut}
+^^{struts//in vertical alignments}
+in each
+template so that the rows don't come out crooked as a result
+of the varying heights of the entries in the alignment. You
+can produce a strut with the |\strut| command.
+
+The |to| form of this command instructs \TeX\
+to make the vertical extent of the alignment be \<dimen>,
+adjusting the space between rows as necessary.
+The |spread| form of this command instructs \TeX\
+to make the alignment taller by \<dimen> than its natural height.
+These forms are like the corresponding forms of |\vbox| \ctsref\vbox.
+
+\example
+{\hsize=1in \parindent=0pt
+\valign{#\strut&#\strut&#\strut&#\strut\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ ketchup&marinara&mayonnaise&mustard\cr
+ rarebit&tartar\cr}}
+|
+\produces
+{\hsize=1in \parindent=0pt \leftskip=0pt
+\valign{#\strut&#\strut&#\strut&#\strut\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ ketchup&marinara&mayonnaise&mustard\cr
+ rarebit&tartar\cr}}
+\nextexample
+% same thing but without struts (shows why you need them)
+{\hsize=1in \parindent=0pt
+\valign{#&#&#&#\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ ketchup&marinara&mayonnaise&mustard\cr
+ rarebit&tartar\cr}}
+|
+\produces
+{\hsize=1in \parindent=0pt \leftskip=0pt
+\valign{#&#&#&#\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ ketchup&marinara&mayonnaise&mustard\cr
+ rarebit&tartar\cr}}
+\endexample
+\enddesc
+
+\begindesc
+\cts ialign {}
+\explain
+This command behaves just like ^|\halign|,
+except that it first sets the |\tabskip| glue to zero and
+sets |\everycr| empty.
+\enddesc
+
+\begindesc
+\cts cr {}
+\explain
+This command ends the preamble of a horizontal or vertical
+alignment, a row of a horizontal or tabbing alignment,
+or a column of a vertical alignment.
+You can cause \TeX\ to take certain actions whenever it sees a |\cr|
+by setting the value of the ^|\everycr| parameter \ctsref\everycr.
+\enddesc
+
+\begindesc
+\cts endline {}
+\explain
+This command is a synonym for the ^|\cr| command. It is useful when
+you've redefined |\cr| but still need access to the original definition.
+\enddesc
+
+\begindesc
+\cts crcr {}
+\explain
+This command behaves just like ^|\cr|, except that \TeX\ ignores it if
+it comes immediately after a |\cr| or a ^|\noalign|.
+Its main application is as a safety measure to avoid a misleading error
+message caused by a \minref{macro} that expects an argument ending in |\cr|.
+If you put |\crcr| after the `|#|$n$' that denotes such an argument
+in the macro's definition, the
+macro will work properly whether or not the argument ends with |\cr|.
+\enddesc
+
+\begindesc
+\cts omit {}
+\explain
+This command tells \TeX\ to ignore a template in a horizontal or vertical
+\minref{alignment} while processing a particular column or row entry
+respectively.
+|\omit| must appear as the first item in a column or row entry; in effect,
+it overrides the template from the preamble with the simple
+template `|#|'.
+
+
+\example
+\tabskip = 2em\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ United States&Washington&dollar&1.00\cr
+ \omit \dotfill France\dotfill&Paris&franc&0.174\cr
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+|
+\produces
+\tabskip = 2em\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ United States&Washington&dollar&1.00\cr
+ \omit \dotfill France\dotfill&Paris&franc&0.174\cr
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+\nextexample
+{\hsize=1.2in \parindent=0pt
+\valign{(#)\strut&(#)\strut&(#)\strut&(#)\strut\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ ketchup&\omit\strut{\bf MARINARA!!}&mayonnaise&mustard\cr
+ rarebit&tartar\cr}}
+|
+\produces
+{\hsize=1.2in \parindent=0pt \leftskip=0pt
+\valign{(#)\strut&(#)\strut&(#)\strut&(#)\strut\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ ketchup&\omit\strut{\bf MARINARA!}&mayonnaise&mustard\cr
+ rarebit&tartar\cr}}
+\endexample
+\enddesc
+
+\begindesc
+\cts span {}
+\explain
+The meaning of this command depends on whether it appears in a preamble
+or in an alignment entry.
+\ulist
+\li Normally, \TeX\ does not expand tokens in the preamble
+when it reads them.
+Putting |\span| in front of a token in the preamble causes
+that token to be expanded immediately according to \TeX's usual rules
+of \minref{macro} expansion.
+\li Putting |\span| instead of `|&|' between two column or row entries
+causes those columns or rows to be combined.
+For a horizontal alignment,
+the width of the combined column is the sum of the
+widths of the component columns.
+For a vertical alignment,
+the height of the combined row is the sum of the
+heights of the component rows.
+The template of the combined column or combined row forms a single group,
+so font-setting commands preceding a |\span| affect everything up to
+the next `|&|'.
+\endulist
+\noindent
+|\span| is rarely useful by itself outside of a template,
+but it provides the basic mechanism
+for defining ^|\multispan|.
+\enddesc
+
+\begindesc
+\cts multispan {\<number>}
+\explain
+This command tells \TeX\ that the following
+\<number> columns in a row of a horizontal alignment,
+or
+\<number> rows in a column of a vertical alignment,
+should be combined into a single column or row (as with
+|\span|) and that their templates should be omitted (as with |\omit|).
+
+\example
+\tabskip = 13pt\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ United States&Washington&dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ Israel&Jerusalem &
+ \multispan 2 \hfil\it(no information)\hfil \cr
+ Japan&Tokyo&yen&0.0829\cr}
+|
+\produces
+\tabskip = 13pt\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ United States&Washington&dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ Israel&Jerusalem &
+ \multispan 2 \hfil\it(no information)\hfil \cr
+ Japan&Tokyo&yen&0.0829\cr}
+\nextexample
+{\hsize=1.2in \parindent=0pt
+\valign{(#)\strut&(#)\strut&(#)\strut&(#)\strut\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ \multispan 3$$\left\{{{\rm ketchup}\atop{\rm marinara}}
+ \right\}$$&mustard\cr
+ rarebit&tartar\cr}}
+|
+\produces
+{\hsize=1.2in \parindent=0pt \leftskip=0pt
+\valign{(#)\strut&(#)\strut&(#)\strut&(#)\strut\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ \multispan 3$$\left\{{{\rm ketchup}\atop{\rm marinara}}
+ \right\}$$&mustard\cr
+ rarebit&tartar\cr}}
+\endexample
+
+\eix^^{template}
+\enddesc
+
+\begindesc
+\cts noalign {\rqbraces{\<vertical mode material>}}
+\aux\cts noalign {\rqbraces{\<horizontal mode material>}}
+\explain
+This command inserts
+\<vertical mode material>
+after the current row of a horizontal \minref{alignment} or
+\<horizontal mode material> after the current column of a vertical
+\minref{alignment}.
+The material can be text, glue, a rule, or anything else.
+
+The most common use of |\noalign|
+is to put extra space after a row or column.
+If you want to put extra space after \emph{every\/} row of a horizontal
+alignment, use ^|\openup| (\xref\openup).
+
+\example
+\halign{%
+ \hfil\it#\hfil\tabskip=2em&\hfil#\hfil&#&
+ \hfil\$#\tabskip=0em\cr
+ % The \tabskip changes prevent the rule below
+ % from sticking out.
+ United States&Washington&dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ \noalign{\smallskip\hrule\smallskip}
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+|
+\produces
+\halign{%
+ \hfil\it#\hfil\tabskip=2em&\hfil#\hfil&#&
+ \hfil\$#\tabskip=0em\cr
+ % The \tabskip changes prevent the rule below
+ % from sticking out.
+ United States&Washington&dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ \noalign{\smallskip\hrule\smallskip}
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+\nextexample
+{\hsize=1in \parindent=0pt
+\valign{#\strut&#\strut&#\strut&#\strut\cr
+ \noalign{\vrule width 2pt\quad}
+ bernaise&curry&hoisin&hollandaise\cr
+ \noalign{\vrule width 2pt\quad}
+ ketchup&marinara&mayonnaise&mustard\cr
+ \noalign{\vrule width 2pt\quad}
+ rarebit&tartar\cr
+ \noalign{\vrule width 2pt\quad}}}
+|
+\produces
+\medskip
+{\hsize=1in \parindent=0pt
+\valign{#\strut&#\strut&#\strut&#\strut\cr
+ \noalign{\vrule width 2pt\quad}
+ bernaise&curry&hoisin&hollandaise\cr
+ \noalign{\vrule width 2pt\quad}
+ ketchup&marinara&mayonnaise&mustard\cr
+ \noalign{\vrule width 2pt\quad}
+ rarebit&tartar\cr
+ \noalign{\vrule width 2pt\quad}}}
+\endexample
+\enddesc
+
+\begindesc
+\cts tabskip {\param{glue}}
+\explain
+This parameter specifies the amount of horizontal or vertical glue
+that \TeX\ puts between the
+columns of a horizontal alignment or between the
+rows of a vertical alignment.
+\TeX\ also puts the |\tabskip| glue
+to the left of the first column and to the right of the last column
+of a horizontal alignment, and
+above the first row
+and below the last row of a vertical alignment.
+You can change |\tabskip| within a template---%
+the change will affect the glue associated with all the following
+|&|'s as well as the glue after the last row or column.
+\example
+\halign to 3.5in{%
+ \hfil\it#\tabskip = 2em plus 8pt
+ \hfil&\hfil#\hfil&#\tabskip = 1em
+ &\hfil\$#\tabskip = 0em\cr
+ United States&Washington&dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+|
+\produces
+\halign to 3.5in{%
+ \hfil\it#\tabskip = 2em plus 8pt
+ \hfil&\hfil#\hfil&#\tabskip = 1em
+ &\hfil\$#\tabskip = 0em\cr
+ United States&Washington&dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+\nextexample
+{\hsize = 1in \parindent=0pt \tabskip=5pt
+\valign{#\strut&#\strut\tabskip = 3pt
+ &#\strut&#\strut\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ ketchup&marinara&mayonnaise&mustard\cr
+ rarebit&tartar\cr}}
+|
+\produces
+{\hsize = 1in \parindent=0pt \tabskip=5pt
+\valign{#\strut&#\strut\tabskip = 3pt
+ &#\strut&#\strut\cr
+ bernaise&curry&hoisin&hollandaise\cr
+ ketchup&marinara&mayonnaise&mustard\cr
+ rarebit&tartar\cr}}
+\endexample
+\enddesc
+
+\begindesc
+\cts hidewidth {}
+\explain
+This command tells \TeX\ to ignore the width of the next column entry in a
+horizontal alignment. It's useful when you have an entry that is longer
+than most of the others in the same column,
+and you'd rather have that entry stick out of the column than
+make all the entries
+in the column wider. If the |\hidewidth| is at the left of the
+entry, the entry sticks out to the left; if the |\hidewidth| is at the
+right of the entry, the entry sticks out to the~right.
+\example
+\tabskip = 25pt\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ United States&\hidewidth Washington&
+ dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+|
+\produces
+\tabskip = 25pt\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ United States&\hidewidth Washington&
+ dollar&1.00\cr
+ France&Paris&franc&0.174\cr
+ Israel&Jerusalem&shekel&0.507\cr
+ Japan&Tokyo&yen&0.0829\cr}
+\endexample
+\enddesc
+
+\begindesc
+\cts everycr {\param{token list}}
+\explain
+\TeX\ expands \<token list> whenever it executes
+a |\cr|---at the end of every preamble,
+at the end of every row of a horizontal alignment,
+and at the end of every column of a vertical alignment.
+The |\everycr| commands are expanded just after the |\cr|.
+Thus you can cause \TeX\ to
+execute certain commands at the end of a preamble, row, or column by
+assigning a list of those commands to |\everycr|.
+
+The |\everycr| tokens shouldn't include any commands other than |\no!-align|.
+That's because
+the |\everycr| tokens will reappear after the last
+|\cr| of the alignment. A command other than
+|\noalign| will then make \TeX\ think that it's starting a new
+row or column.
+\TeX\ will complain about a missing |\cr|, insert
+a |\cr|, insert the |\everycr| tokens again, and repeat these actions
+indefinitely.
+\example
+\everycr={\noalign{\smallskip\hrule\smallskip}}
+\halign{#\tabskip = 11pt&\hfil#\hfil&\hfil#\hfil
+ \tabskip = 0pt\cr
+ $1$&one&first\cr
+ $2$&two&second\cr
+ $3$&three&third\cr}
+|
+\produces
+\medskip
+\everycr={\noalign{\smallskip\hrule\smallskip}}
+\halign{#\tabskip = 11pt&\hfil#\hfil&\hfil#\hfil
+ \tabskip = 0pt\cr
+ $1$&one&first\cr
+ $2$&two&second\cr
+ $3$&three&third\cr}
+\endexample
+
+\eix^^{alignments//commands for}
+\enddesc
+
+\enddescriptions
+
+
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/pages.tex b/Master/texmf-dist/doc/plain/impatient/pages.tex
new file mode 100644
index 00000000000..230802e9b5f
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/pages.tex
@@ -0,0 +1,1153 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter {Commands for \linebreak composing pages}
+
+\chapterdef{pages}
+
+This section covers commands that deal with
+pages, their components, and the output routine.
+For an explanation of the conventions used in this section,
+see \headcit{Descriptions of the commands}{cmddesc}.
+
+\begindescriptions
+
+%==========================================================================
+\section {Interline and interparagraph spaces}
+
+\begindesc
+\cts baselineskip {\param{glue}}
+\cts lineskiplimit {\param{dimen}}
+\cts lineskip {\param{glue}}
+\explain
+^^{line spacing}
+\bix^^{interline glue}
+\bix^^|\baselineskip|
+\bix^^|\lineskip|
+\bix^^|\lineskiplimit|
+These three parameters jointly determine how much space \TeX\ leaves between
+consecutive \minref{box}es of an ordinary \minref{vertical list},
+e.g., the lines of a paragraph.
+This space is called ``\minref{interline glue}''.
+It is also inserted between the component boxes of a vbox constructed in
+internal vertical mode.
+^^{vboxes//interline glue for}
+
+In the usual case, when the boxes aren't abnormally high or deep, \TeX\
+makes the distance from the baseline of one box to the baseline of the
+next one equal to |\baselineskip|. It does this by inserting interline
+glue equal to |\baselineskip| minus the depth of the upper box (as given
+by ^|\prevdepth|) and the height of the lower box. But if this
+interline glue would be less than |\lineskiplimit|, indicating that the
+two boxes are too close together, \TeX\ inserts the |\lineskip| glue
+instead.\footnote
+{\TeX\ actually accounts for the beginning of a
+vertical list by setting |\prevdepth| to $-1000$\pt\ and testing
+|\prevdepth| before \emph{every} box. If |\prevdepth|$\>\le-1000$\pt\
+it does not insert any interline glue.} See \knuth{pages~79--80} for a
+precise description.
+
+Note that |\baselineskip| and |\lineskip| measure \emph{different
+things}: the distance between baselines on the one hand and the distance
+between the bottom of one box and the top of the next box on the other
+hand. See \knuth{page~78} for further details. The first example below
+shows the effects of |\lineskiplimit|.
+
+You can obtain the effect of ^{double spacing} by doubling the value
+of |\baselineskip| as illustrated in the second example below.
+A change to |\baselineskip| at any point before the end of a paragraph affects
+the entire paragraph.
+
+\example
+\baselineskip = 11pt \lineskiplimit = 1pt
+\lineskip = 2pt plus .5pt
+Sometimes you'll need to typeset a paragraph that has
+tall material, such as a mathematical formula, embedded
+within it. An example of such a formula is $n \choose k$.
+Note the extra space above and below this line as
+compared with the other lines.
+(If the formula didn't project below the line,
+we'd only get extra space above the line.)
+|
+\produces
+\baselineskip = 11pt \lineskiplimit = 1pt
+\lineskip = 2pt plus .5pt
+Sometimes you'll need to typeset a paragraph that has
+tall material, such as a mathematical formula, embedded
+within it. An example of such a formula is $n \choose k$.
+Note the extra space above and below this line as
+compared with the other lines.
+(If the formula didn't project below the line,
+we'd only get extra space above the line.)
+\endexample
+
+\example
+\baselineskip = 2\baselineskip % Start double spacing.
+|
+\endexample
+
+\eix^^{interline glue}
+\eix^^|\baselineskip|
+\eix^^|\lineskip|
+\eix^^|\lineskiplimit|
+\enddesc
+
+\begindesc
+\cts prevdepth {\param{dimen}}
+\explain
+When \TeX\ adds a box to a vertical list, it sets |\prevdepth| to the
+depth of that box. \TeX\ sets |\prevdepth| to $-1000$\pt\ at the start
+of a vertical list, indicating that the usual interline glue should be
+suppressed.
+\enddesc
+
+\begindesc
+\cts normalbaselineskip {\param{glue}}
+\cts normallineskiplimit {\param{dimen}}
+\cts normallineskip {\param{glue}}
+\cts normalbaselines {}
+\explain
+The three parameters contain values for |\base!-line!-skip|,
+|\line!-skip|, and |\line!-skip!-limit| respectively.
+^^|\baselineskip| ^^|\lineskip| ^^|\lineskiplimit|
+The |\normalbaselines| command sets |\base!-line!-skip|,
+|\line!-skip|, and |\line!-skip!-limit| to the values contained in the
+three parameters.
+\enddesc
+
+\begindesc
+\cts offinterlineskip {}
+\explain
+This command tells \TeX\ to stop inserting interline glue from
+now on. Unless you want it to be in effect for the rest of the document
+(which you probably don't), you should enclose it in a group
+together with the text you want it to affect.
+Its main purpose is to let you do interline spacing yourself,
+e.g., using ^{struts},
+without interference from \TeX's normal interline glue.
+|\offinterlineskip| is often useful when
+you're constructing a horizontal \minref{alignment}.
+^^{alignments//using \b\tt\\offinterlineskip\e\ in}
+\example
+\def\entry#1:#2 {\strut\quad#1\quad&\quad#2\quad\cr}
+\offinterlineskip \tabskip = 0pt \halign{%
+\vrule\quad\hfil#\hfil\quad\vrule&
+ \quad\hfil#\hfil\quad\vrule\cr
+\noalign{\hrule}
+\vphantom{\vrule height 2pt}&\cr \noalign{\hrule}
+\entry \it Opera:\it Composer
+\vphantom{\vrule height 2pt}&\cr \noalign{\hrule}
+\vphantom{\vrule height 2pt}&\cr
+\entry Fidelio:Beethoven
+\entry Peter Grimes:Britten
+\entry Don Giovanni:Mozart
+\vphantom{\vrule height 2pt}&\cr \noalign{\hrule}}
+|
+\produces
+\medskip
+\def\entry#1:#2 {\strut\quad#1\quad&\quad#2\quad\cr}
+\offinterlineskip \tabskip = 0pt \halign{%
+\vrule\quad\hfil#\hfil\quad\vrule&
+ \quad\hfil#\hfil\quad\vrule\cr
+\noalign{\hrule}
+\vphantom{\vrule height 2pt}&\cr \noalign{\hrule}
+\entry \it Opera:\it Composer
+\vphantom{\vrule height 2pt}&\cr \noalign{\hrule}
+\vphantom{\vrule height 2pt}&\cr
+\entry Fidelio:Beethoven
+\entry Peter Grimes:Britten
+\entry Don Giovanni:Mozart
+\vphantom{\vrule height 2pt}&\cr \noalign{\hrule}}
+\endexample
+\enddesc
+
+\begindesc
+\cts nointerlineskip {}
+\explain
+This command tells \TeX\ not to insert interline glue in front of the
+next line.
+It has no effect on subsequent lines.
+\enddesc
+
+\begindesc
+\cts openup {\<dimen>}
+\explain
+This command increases ^|\baselineskip| by \<dimen>.
+An |\openup| command before the end of a paragraph affects
+the entire paragraph, so you shouldn't use |\openup| to
+change |\baseline!-skip| within a paragraph. |\openup| is
+most useful for typesetting tables and math displays---a
+little extra space between rows often makes them more readable.
+^^{alignments//space between rows of}
+\example
+Alice picked up the White King very gently, and lifted him
+across more slowly than she had lifted the Queen; but before
+she put him on the table, she thought she might well dust
+him a little, he was so covered with ashes.
+\openup .5\baselineskip % 1.5 linespacing.
+|
+\produces
+Alice picked up the White King very gently, and lifted him
+across more slowly than she had lifted the Queen; but before
+she put him on the table, she thought she might well dust
+him a little, he was so covered with ashes.
+\openup .5\baselineskip %1.5 linespacing
+\endexample\enddesc
+
+%==========================================================================
+\section {Page breaks}
+
+%==========================================================================
+\subsection {Encouraging or discouraging page breaks}
+
+\begindesc
+\bix^^{page breaks}
+\bix^^{page breaks//encouraging or discouraging}
+\ctspecial break {} \xrdef{vbreak}
+\explain
+%
+\margin{Four commands identical to ones for line breaks (\xref{hbreak})
+have been added to correct an omission. The descriptions are exactly parallel.}
+%
+This command forces a page break.
+Unless you do something to fill out the page, you're likely to
+get an underfull vbox.
+|\break| can also be used in horizontal mode.
+\enddesc
+
+\begindesc
+\ctspecial nobreak {} \xrdef{vnobreak}
+\explain
+This command prevents a page break where it
+otherwise might occur.
+|\nobreak| can also be used in horizontal mode.
+\enddesc
+
+\begindesc
+\ctspecial allowbreak {} \xrdef{vallowbreak}
+\explain
+This command tells \TeX\ to
+allow a page break where one could not ordinarily occur.
+|\allowbreak| can also be used in horizontal mode.
+\enddesc
+
+\begindesc
+\ctspecial penalty {\<number>} \xrdef{vpenalty}
+\explain
+This command produces a \minref{penalty} item.
+The penalty item makes \TeX\ more or less willing to break a page
+at the point where that item occurs.
+A negative penalty, i.e., a bonus, encourages a page break;
+a positive penalty discourages a page break.
+A penalty of $10000$ or more prevents a break altogether,
+while a penalty of $-10000$ or less forces a break.
+|\penalty| can also be used in horizontal mode.
+\example
+\def\break{\penalty-10000 } % as in plain TeX
+\def\nobreak{\penalty10000 } % as in plain TeX
+\def\allowbreak{\penalty0 } % as in plain TeX
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts goodbreak {}
+\explain
+This command ends a paragraph and also indicates to \TeX\ that
+this is a good place to break the page.
+\enddesc
+
+\begindesc
+\cts smallbreak {}
+\cts medbreak {}
+\cts bigbreak {}
+\explain
+These commands indicate increasingly desirable places for \TeX\ to
+break a page. They also cause \TeX\ to
+insert a ^|\smallskip|, ^|\medskip|, or
+^|\bigskip| (\xref \smallskip) if the page break doesn't actually
+happen. \TeX\ suppresses this skip if it occurs just after an
+equal or larger skip.
+\enddesc
+
+\begindesc
+\easy\cts eject {}
+\cts supereject {}
+\explain
+These commands force a page break at the current position
+and end the current paragraph.
+If you don't precede them with |\vfil| (\xref \vfil),
+^^|\vfil//needed with {\tt\\eject}|
+\TeX\ will try to stretch out the page contents
+(and will probably complain about an underfull vbox).
+The |\supereject| command, in addition,
+instructs the \plainTeX\ output routine to
+force out any leftover insertions,
+^^{insertions//forced out by \b\tt\\supereject\e}
+such as long footnotes,
+so that they are produced before any more input
+is processed. Thus |\supereject| is a good command to use at the end of each
+chapter or other major unit of your document.
+\enddesc
+
+\begindesc
+\cts filbreak {}
+\explain
+This command provides a kind of conditional page break.
+It tells \TeX\ to
+break the page---but not if the text up to a later |\filbreak| also
+fits on the same page.
+By enclosing a paragraph in a pair of |\filbreak|s,
+you can ensure that \TeX\ will keep a paragraph on a single page if it can.
+You should not use |\filbreak| within a paragraph, since it
+forces \TeX\ into vertical mode and thus ends the paragraph.
+See \xrefpg{filbreak} for more advice on this subject.
+\enddesc
+
+\begindesc
+\cts raggedbottom {}
+\cts normalbottom {}
+\explain
+Normally \TeX\ tries hard to ensure that all pages have the same depth,
+i.e., that their bottom margins are equal.
+The |\raggedbottom| command tells \TeX\ to
+allow some variability among the bottom margins on different pages.
+It's often appropriate to use |\raggedbottom| when you have material that
+contains large blocks of material that should not be split across pages.
+The |\normalbottom| command cancels the effect of |\raggedbottom|.
+
+\eix^^{page breaks//encouraging or discouraging}
+\enddesc
+
+%==========================================================================
+\subsection {Page breaking parameters}
+
+\bix^^{page breaks//parameters for}
+\begindesc
+\cts interlinepenalty {\param{number}}
+\explain
+This parameter specifies the \minref{penalty} for
+breaking a page between the lines of a paragraph.
+By setting it to $10000$ you can force all page breaks to occur
+between paragraphs, provided that the pages have enough stretch so
+that \TeX\ can still compose them decently.
+\PlainTeX\ leaves |\inter!-linepenalty| at~$0$.
+\enddesc
+
+\begindesc
+\cts clubpenalty {\param{number}}
+\explain
+^^{club line}
+This parameter specifies the \minref{penalty} for
+breaking a page just after the first line of a paragraph.
+A line by itself at the bottom of a page is called a ``club line''.
+\PlainTeX\ sets |\clubpenalty| to $150$.
+\enddesc
+
+\begindesc
+\cts widowpenalty {\param{number}}
+\explain
+^^{widow line}
+This parameter specifies the \minref{penalty} for
+breaking a page just before the last line of a paragraph.
+A line by itself at the top of a page is called a ``widow line''.
+\PlainTeX\ sets |\widowpenalty| to $150$.
+\enddesc
+
+\begindesc
+\cts displaywidowpenalty {\param{number}}
+\explain
+^^{widow line}^^{math display}
+This parameter specifies the \minref{penalty} for
+breaking a page just before the last line of a partial paragraph
+that immediately precedes a math display.
+\PlainTeX\ sets |\displaywidowpenalty| to $50$.
+
+\enddesc
+
+\begindesc
+\cts predisplaypenalty {\param{number}}
+\explain
+^^{math display}
+This parameter specifies the \minref{penalty} for
+breaking a page just before a math display.
+\PlainTeX\ sets |\predisplaypenalty| to $10000$.
+\enddesc
+
+\begindesc
+\cts postdisplaypenalty {\param{number}}
+\explain
+^^{math display}
+This parameter specifies the \minref{penalty} for
+breaking a page just after a math display.
+\PlainTeX\ leaves |\postdisplaypenalty| at $0$.
+\enddesc
+
+\begindesc
+\cts brokenpenalty {\param{number}}
+\explain
+This parameter specifies the \minref{penalty} for
+breaking a page just after a line that ends in
+a discretionary item (usually a hyphen).
+^^{hyphenation}
+|\brokenpenalty| applies to page breaking, while
+^|\hyphenpenalty| \ctsref{\hyphenpenalty} applies to line breaking.
+\PlainTeX\ sets |\brokenpenalty| to $100$.
+\enddesc
+
+\begindesc
+\cts insertpenalties {\param{number}}
+\explain
+\bix^^{insertions//penalties for}
+\bix^^{floating material}
+This parameter contains the sum of certain penalties \minrefs{penalty}
+that \TeX\ accumulates as it is placing insertions onto the
+current page.
+These penalties are incurred when \TeX\ is processing an |\insert|
+command
+and discovers that a previous insertion of the same kind on this page has
+been split, leaving part of it for subsequent pages.
+See \knuth{pages~123--125} for the details of this
+calculation.
+
+\margin{Material moved from a footnote to the main text.}
+|\insertpenalties| has an entirely different meaning during an
+^^{output routine//meaning of \b\tt\\insertpenalties\e\ in}
+output routine---it's the number of insertions that have been seen
+but that don't fit on the current page (see \knuth{page~125}).
+\enddesc
+
+\begindesc
+\cts floatingpenalty {\param{number}}
+\explain
+This parameter specifies the \minref{penalty} that
+\TeX\ adds to |\insertpenalties|
+^^|\insertpenalties|
+when the page builder is adding an insertion to the current page
+and discovers that a previous insertion of the same kind on this page has
+been split, leaving part of it for subsequent pages.
+\PlainTeX\ leaves |\floatingpenalty| at~$0$.
+\eix^^{insertions//penalties for}
+\eix^^{floating material}
+
+\enddesc
+
+\begindesc
+\cts pagegoal {\param{dimen}}
+\explain
+This parameter specifies the
+desired height for the current page.
+\TeX\ sets
+|\pagegoal| to the current value of |\vsize|
+when it first puts a box or an insertion on the current page.
+You can shorten a page while \TeX\ is working on it by
+changing the value of |\pagegoal|---even if the new value is
+less than the height of the material already on that page.
+\TeX\ will just put the extra material on the next page.
+But remember---|\pagegoal| is reset to |\vsize| again when \TeX\
+starts the next page.
+\enddesc
+
+\begindesc
+\cts pagetotal {\param{dimen}}
+\explain
+This parameter specifies the
+accumulated natural height of the current page.
+\TeX\ updates |\pagetotal| as it adds
+items to the main \minref{vertical list}.
+
+
+\enddesc
+
+\begindesc
+\cts pagedepth {\param{dimen}}
+\explain
+This parameter specifies the depth of the current page.
+\TeX\ updates |\pagedepth| as it adds
+items to the main \minref{vertical list}.
+\enddesc
+
+\begindesc
+\cts pageshrink {\param{dimen}}
+\explain
+This parameter specifies the amount of \minref{shrink}
+in the accumulated \minref{glue} on the current page.
+\TeX\ updates |\pageshrink| as it adds
+items to the main \minref{vertical list}.
+\enddesc
+
+\begindesc
+\cts pagestretch {\param{dimen}}
+\cts pagefilstretch {\param{dimen}}
+\cts pagefillstretch {\param{dimen}}
+\cts pagefilllstretch {\param{dimen}}
+\explain
+These four parameters together specify the amount of \minref{stretch}
+in the \minref{glue} on the current page. The amount of stretch has
+the form
+{\def\f#1{\hbox{\tt fi#1}}%
+$n_0 + n_1\f{l} + n_2\f{ll} + n_3\f{lll}$}, with the four parameters
+giving the values of the four $n_i$.
+\TeX\ updates these parameters as it adds
+items to the main \minref{vertical list}.
+
+\eix^^{page breaks//parameters for}
+\eix^^{page breaks}
+\enddesc
+
+%==========================================================================
+\section{Page layout}
+
+\subsection {Page description parameters}
+
+\begindesc
+\bix^^{page dimensions}
+\margin{This command was also described in the `Paragraphs' section.
+The combined description now appears there.}
+\aux\cts hsize {\param{dimen}}
+\explain
+This parameter specifies the current line length.
+See \xrefpg{\hsize} for a more complete explanation.
+\enddesc
+
+\begindesc
+\cts vsize {\param{dimen}}
+\explain
+This parameter specifies the current vertical extent of a page.
+\TeX\ examines it only when it is starting a page. Thus if you change
+|\vsize| in the
+middle of a page, your change won't affect anything until the following page.
+If you want to change the vertical extent of a page when
+you're in the middle of it, you should assign the new
+height to ^|\pagegoal| (\xref \pagegoal) instead. (If you
+want the change to affect the following pages too, you should
+change \emph{both} |\vsize| and |\pagegoal|.)
+\PlainTeX\ sets |\vsize| to |8.9in|.
+\eix^^{page dimensions}
+\enddesc
+
+\begindesc
+\cts hoffset {\param{dimen}}
+\cts voffset {\param{dimen}}
+\margin{These commands were moved up from later in the subsection.}
+^^{page origin}
+\idxsee{origin}{page origin}
+\explain
+\TeX\ normally takes the ``origin'' of a page, that is, the point where
+it starts printing, as being one inch down from the top of the page and one
+inch to the right of the left end of the page.\footnote{
+\TeX\ itself is indifferent to where the origin of the page is,
+but this information has to be built into the device drivers
+^^{device drivers//page origin known to}
+that convert \dvifile s into printable form so that different devices
+will yield the same results.}
+The values of |\hoffset| and
+|\voffset| give the horizontal and vertical offset of the actual origin
+from this point. Thus if |\hoffset| and |\voffset| are both
+zero, \TeX\ uses its normal origin.
+\example
+\hoffset = -.3in
+ % Start printing .7 inches from left edge of paper.
+\voffset = 1in
+ % Start printing 2 inches from top edge of paper.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts topskip {\param{glue}}
+\explain
+\TeX\ inserts glue at the top of each
+page in order to ensure that the baseline of the first box on the page
+always is the same distance $d$ from the top of the page.
+|\topskip| determines the amount of that glue,
+called the ``|\topskip| glue'', by specifying
+what $d$ should be (provided that the first box
+on the page isn't too tall).
+$d$ is given by the natural size of the |\topskip| glue.
+If the height of the first box on the page exceeds $d$,
+so that the glue would be negative, \TeX\ simply inserts no
+|\topskip| glue at all on that page.
+
+To understand better the effect of these rules, assume that |\topskip|
+has no stretch or shrink and that the first item on the page is indeed a box.
+Then if the height of that box is no greater than |\topskip|,
+its baseline will be |\topskip|
+from the top of the page independently of its height. On the other hand,
+if the height of the box is $e$ greater than |\topskip|, its baseline will be
+|\topskip|\tplus$e$ from the top of the page.
+See \knuth{pages~113--114} for the remaining details of how
+|\topskip| works.
+\PlainTeX\ sets |\topskip| to |10pt|.
+\enddesc
+
+
+\begindesc
+\cts parskip {\param{glue}}
+\explain
+This parameter specifies the ``^{paragraph skip}'', i.e., the
+vertical glue that \TeX\ inserts at the start of a paragraph.
+^^{paragraphs//glue between}
+See |\par| (\xref{\@par}) for more information about what happens
+when \TeX\ starts a paragraph.
+\PlainTeX\ sets |\parskip| to |0pt plus 0.1pt|.
+\enddesc
+
+\begindesc
+\cts maxdepth {\param{dimen}}
+\explain
+This parameter specifies the maximum depth of the bottom \minref{box} on
+a page. It is related to |\boxmaxdepth| (\xref \boxmaxdepth). If the
+depth of the bottom box on a page exceeds |\maxdepth|, \TeX\ moves the
+box's reference point down so that it's
+|\maxdepth| from the bottom of that box.
+Without this adjustment, the bottom box on
+a page could extend well into the bottom margin or even off
+the page entirely. \PlainTeX\ sets |\maxdepth| to |4pt|.
+\enddesc
+
+%==========================================================================
+\subsection{Page numbers}
+
+\begindesc
+\bix^^{page numbering}
+\cts pageno {\param{number}}
+\explain
+This parameter contains the current page number as an integer. The page
+number is normally negative for front-matter pages that are numbered
+with small roman numerals instead of arabic numerals. If you change the
+page number within a page,
+the changed number will be used in any headers or footers that
+appear on that page.
+The actual
+printing of page numbers is handled by \TeX's \minref{output routine},
+which you can modify.
+
+\PlainTeX\ keeps the page number in the \minref{register} ^|\count0|.
+(|\pageno| is, in fact, a synonym for |\count0|.)
+Whenever it ships out a page to the \dvifile,
+^^|\shipout//{\tt\\count} registers displayed at|
+\TeX\ displays the current value of |\count0| on your
+terminal so that you can tell which page it is working on.
+It's possible to use registers |\count1|--|\count9| for nested
+levels of page numbers (you must program this yourself).
+If any of these registers are nonzero, \TeX\ displays them on your
+terminal also.\footnote{
+More precisely, it displays all registers in sequence from
+|\count0| to |\count9|, but omits trailing zero registers.
+For instance, if the values of |\count0|--|\count3|
+are $(17, 0 , 0, 7)$ and the others are $0$,
+\TeX\ displays the page number as {\tt [17.0.0.7]}.}
+\example
+This explanation appears on page \number\pageno\
+of our book.
+|
+\produces
+This explanation appears on page \number\pageno\
+of our book.
+
+\nextexample
+\pageno = 30 % Number the next page as 30.
+Don't look for this explanation on page \number\pageno.
+|
+\produces
+Don't look for this explanation on page 30.
+\endexample
+\enddesc
+
+\begindesc
+\cts advancepageno {}
+\explain
+This command adds $1$ to the page number
+$n$ in |\pageno| if $n\ge0$
+and subtracts $1$ from it if $n<0$.
+\enddesc
+
+\begindesc
+\easy\cts nopagenumbers {}
+\explain
+By default, \plainTeX\ produces a footer containing a centered page number.
+This command tells \TeX\ to produce a blank footer instead.
+\enddesc
+
+\begindesc
+\cts folio {}
+\explain
+This command produces the current page number, whose value is the number
+$n$ contained in ^|\pageno|.
+If $n\ge0$,
+\TeX\ produces $n$ as a decimal number,
+while if $n<0$,
+\TeX\ produces $-n$ in lowercase roman numerals.
+\example
+This explanation appears on page \folio\ of the book.
+|
+\produces
+This explanation appears on page \folio\ of the book.
+\endexample
+
+\eix^^{page numbering}
+\enddesc
+
+
+%==========================================================================
+\subsection{Header and footer lines}
+
+\begindesc\secondprinting{\vglue-.75\baselineskip\vskip0pt}
+\cts headline {\param{token list}}
+\cts footline {\param{token list}}
+\explain
+These parameters
+contain, respectively, the current headline (header) and the current
+footline (footer).
+The \plainTeX\ output routine
+places the headline at the top of each page and the footline
+at the bottom of each page.
+The default headline is empty and the default footline is a centered
+page number.
+
+The headline and footline should both
+be as wide as |\hsize| (use |\hfil|, \xref{\hfil}, for this
+if necessary).
+You should always include a font-setting command in these lines, since
+the current font is unpredictable when \TeX\ is calling the
+output routine. If you don't set the font explicitly,
+you'll get whatever font \TeX\ was using when it broke the page.
+
+You shouldn't try to use |\headline| or |\footline|
+to produce multiline headers or footers.
+Although \TeX\ won't complain, it will give you something that's very ugly.
+See \xrefpg{bighead} for a method of creating multiline headers or
+footers.
+\example
+\headline = {\tenrm My First Reader\hfil Page \folio}
+|
+\produces
+\pageno = 10
+\line{\tenrm \noindent My First Reader\hfil Page \folio}
+\par ({\it at the top of page \folio}\/)
+\nextexample
+\footline = {\tenit\ifodd\pageno\hfil\folio
+ \else\folio\hfil\fi}
+% Produce the page number in ten-point italic at
+% the outside bottom corner of each page.
+|
+\endexample\enddesc
+
+\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+\subsection {Marks}
+
+\begindesc
+\cts mark {\rqbraces{\<text>}}
+\explain
+\bix^^{marks}
+This command causes \TeX\ to append a mark
+containing \<mark text>
+to whatever list it is currently constructing.
+Generally you shouldn't use |\mark| within an
+``inner'' construct such as a math formula or a \minref{box}
+you've built with an |\hbox|, |\vbox|, or |\vtop| command, because
+\TeX\ won't see the mark when it's constructing the main box of the page. But
+if you use |\mark| in ordinary horizontal \minref{mode}
+or directly in an hbox that's part of the main vertical list,
+the mark migrates out
+to the main \minref{vertical list}.
+See \knuth{pages~259--260} for examples showing how |\mark| can be used.
+\enddesc
+
+\begindesc
+\cts firstmark {}
+\cts botmark {}
+\cts topmark {}
+\explain
+These commands expand to the mark text in an item generated by an earlier
+^|\mark| command.
+The mark text has the form of a token list.
+\TeX\ sets the values of these commands when it
+finishes placing the contents of a page into ^|\box255|,
+just before calling the \minref{output routine}
+as part of its \minref{page break}ing actions. \TeX\ determines
+these values as follows:
+\ulist\compact
+\li |\firstmark| contains the tokens of the first mark on the page.
+\li |\botmark| contains the tokens of the last mark on the page.
+\li |\topmark| contains the tokens of the mark that is in effect at
+the very top of the page.
+That mark is the last mark
+that \emph{preceded} the page,
+i.e., the |\botmark| of the previous page.
+It is empty if no marks preceded the page.
+\endulist
+\noindent
+If a page has no marks on it, \TeX\ will set |\firstmark| and |\botmark| to
+the same mark as |\topmark|, i.e., the most recent preceding mark.
+The table at the bottom of \knuth{page~258} illustrates the relation among
+|\firstmark|, |\botmark|, and |\topmark|.
+\enddesc
+
+\begindesc
+\cts splitfirstmark {}
+\cts splitbotmark {}
+\explain
+^^{marks//for split lists}
+These commands expand to the ^{mark text} generated by an earlier
+^|\mark| command that produced an item in the item list of a vbox $V$.
+The mark text has the form of a token list.
+When \TeX\
+splits $V$ in response to a ^|\vsplit| command (\xref \vsplit),
+it sets the values of these commands as follows:
+\ulist\compact
+\li |\splitfirstmark| contains the tokens of the first mark in
+the item list of $V$.
+\li |\splitbotmark| contains the tokens of the last mark in
+the item list of $V$.
+\endulist
+These commands produce no tokens if there was no preceding |\vsplit|,
+or if the most recent preceding |\vsplit| didn't contain any marks.
+\eix^^{marks}
+\enddesc
+
+%==========================================================================
+\section {Insertions}
+
+\subsection {Footnotes}
+
+\begindesc
+\easy\cts footnote {\<argument$_1$> \<argument$_2$>}
+\cts vfootnote {\<argument$_1$> \<argument$_2$>}
+\explain
+These commands produce footnotes.
+\<argument$_1$> is the ``^{reference mark}''
+for the footnote and \<argument$_2$> is its text.
+The text can be several paragraphs long if necessary and can contain
+constructs such as math displays, but it shouldn't contain any
+\minref{insertion}s (such as other footnotes).
+
+You shouldn't use these commands inside a subformula of a math formula,
+in a box within a box being contributed to a page,
+or in an insertion of any kind.
+If you're unsure whether these restrictions apply, you can be safe by
+only using |\footnote| and |\vfootnote| directly within a paragraph or
+between paragraphs.
+
+These restrictions aren't as severe as they seem because you can use
+|\vfootnote| to footnote most anything.
+Both |\foot!-note| and |\vfoot!-note| insert the reference mark in front of the
+footnote itself, but |\vfoot!-note| doesn't insert the reference mark into the
+text.
+Thus, when you use |\vfoot!-note| you can
+explicitly insert the reference mark
+wherever it belongs without concern about the context
+and place the |\vfootnote| in the next paragraph.
+If you find that the footnote lands on
+the page following the one where it belongs, move the |\vfootnote| back
+to the previous paragraph.
+There are rare circumstances where you'll need to
+alter the text of your document in order to get a footnote to appear on
+the same page as its reference mark.
+\example
+To quote the mathematician P\'olya is a ploy.\footnote
+*{This is an example of an anagram, but not a strict one.}
+|
+\produces
+To quote the mathematician P\'olya is a ploy.*
+\par\line{\hskip .5in \vdots\hfil}
+\nointerlineskip \bigskip
+\footnoterule\par\parindent = 12pt
+\textindent{*}This is
+an example of an anagram, but not a strict one.
+\endexample
+\example
+$$f(t)=\sigma\sigma t\;\raise 1ex \hbox{\dag}$$
+\vfootnote \dag{The $\sigma\sigma$ notation was explained in
+the previous section.}
+|
+\produces
+$$f(t)=\sigma\sigma t\>\raise 1ex \hbox{\dag}$$
+\par\line{\hskip .5in \vdots\hfil}
+\nointerlineskip \bigskip
+\footnoterule\par\parindent = 12pt
+\textindent{\dag}{The $\sigma\sigma$ notation was explained in
+the previous section.}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {General insertions}
+
+\begindesc
+\bix^^{insertions//commands for}
+\cts topinsert {\<vertical mode material> {\bt \\endinsert}}
+\cts midinsert {\<vertical mode material> {\bt \\endinsert}}
+\cts pageinsert {\<vertical mode material> {\bt \\endinsert}}
+\explain
+These commands produce different forms of insertions that
+instruct
+(or allow) \TeX\ to relocate the \<vertical mode material>:
+\ulist
+\li |\topinsert| attempts to put the material at the top of the current page.
+If it won't fit there, |\topinsert|
+will move the material to the next available top of page.
+\li |\midinsert| attempts to put the material at the current position.
+If it won't fit there, |\midinsert|
+will move the material to the next available top of page.
+\li |\pageinsert| puts the material by itself on the next page.
+To avoid an underfull page, be sure to end the inserted material with
+|\vfil| or fill out the excess space some other way.
+% Knuth doesn't say this, but I tried an experiment that verified it.
+% Nor does he say explicitly that an insertion does a \par.
+\endulist
+\noindent
+The \<vertical mode material>
+is said to be ``floating'' ^^{floating material} because \TeX\
+can move it from one place to another.
+Insertions are very useful for material such as figures and tables because
+you can position such material where you want it without knowing where the
+page breaks will fall.
+
+Each of these commands implicitly ends the current paragraph, so
+you should use them only between paragraphs.
+You should not use them within a box or within another insertion.
+If you have several insertions competing for
+the same space, \TeX\ will retain their relative order.
+\example
+\pageinsert
+% This text will appear on the following page, by itself.
+This page is reserved for a picture of the Queen of Hearts
+sharing a plate of oysters with the Walrus and
+the Carpenter.
+\endinsert
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts endinsert {}
+\explain
+This command ends an insertion started by
+|\topinsert|, |\midinsert|, or |\pageinsert|.
+\enddesc
+
+\begindesc
+\cts insert {\<number> \rqbraces{\<vertical mode material>}}
+\explain
+\minrefs{insertion}
+This primitive command provides the
+underlying mechanism for constructing insertions, but
+it is hardly ever used outside of a \minref{macro} definition.
+The definitions of the
+|\foot!-note|, |\vfoot!-note|,
+|\top!-insert|, |\mid!-insert|, and |\page!-insert| commands are
+all built around |\insert|.
+^^|\topinsert|
+^^|\midinsert| ^^|\pageinsert| ^^|\footnote| ^^|\vfootnote|
+
+When you design insertions for a document, you should assign a different
+integer code\footnote
+{\texbook{} uses the term ``class'' for a code.
+We use a different term to avoid confusion with the other meaning of
+``class'' (\xref{class}).}
+$n$ to each kind of insertion,
+using the ^|\newinsert| command (\xref{\@newinsert}) to obtain the
+integer codes.
+The |\insert| command itself appends the \<vertical mode material>
+to the current horizontal or \minref{vertical list}.
+Your \minref{output routine} is responsible for
+moving the inserted material from where it resides in |\box|$\,n$
+to an output page.
+^^{output routine}
+
+\TeX\ groups together all insertions having the same code
+number. Each insertion
+code $n$ has four \minref{register}s associated with it:
+\ulist
+\li |\box|$\,n$ is where \TeX\ accumulates the material for insertions
+with code $n$. When \TeX\ breaks a page, it puts into |\box|$\,n$
+as much insertion $n$ material as will fit on the page.
+Your output routine should then move this material to the actual page.
+You can use ^|\ifvoid| \ctsref{\@ifvoid}
+to test if there is any material in |\box|$\,n$.
+If not all the material fits, \TeX\ saves the leftovers for the next page.
+\li |\count|$\,n$ is a magnification factor $f.$ When \TeX\ is computing
+the vertical space occupied on the page
+by insertion $n$ material, it multiplies the
+vertical extent of this material by $f/1000$.
+Thus you would ordinarily set $f$ to $500$ for a double-column insertion
+and to $0$ for a marginal~note.
+\li |\dimen|$\,n$ specifies the maximum amount
+of insertion $n$ material that \TeX\ will put on a single page.
+\li |\skip|$\,n$ specifies extra space that \TeX\ allocates on the page
+if the page contains any insertion $n$ material.
+This space is in addition to the space occupied by the insertion itself.
+For example, it would account for the space on a page above the footnotes
+(if there are~any).
+\endulist
+\noindent
+\TeX\ sets |\box|$\,n$, and you should set the other three registers
+so that \TeX\ can correctly compute the vertical space required by the
+insertion.
+See \knuth{pages~122--125} for further details of how \TeX\ processes this
+command and of how insertions interact with page breaking.
+\xrdef{endofinsert}
+\enddesc
+
+\see |\floatingpenalty| (\xref \floatingpenalty).
+\eix^^{insertions//commands for}
+
+
+%==========================================================================
+\section{Modifying the output routine}
+
+\bix^^{output routine}
+\begindesc
+\cts output {\param{token list}}
+\explain
+This parameter contains the current \minref{output routine}, i.e.,
+the token list that \TeX\ expands when it finds a page break.
+\TeX\ puts the page into ^|\box255|, so |\output| is responsible
+for doing something with |\box255|---either shipping it out or
+putting it somewhere else.
+The output routine is also responsible for attaching things such as
+headers and footers.
+\enddesc
+
+\begindesc
+\cts plainoutput {}
+\explain
+This command invokes \plainTeX's output routine.
+^^{output routine//default in \plainTeX}
+\PlainTeX\ defines ^|\output| as
+a token list containing the single token |\plainoutput|.
+\enddesc
+
+\begindesc
+\cts shipout {\<box>}
+\explain
+This command instructs \TeX\ to send \<box> to the \dvifile.
+^^{\dvifile//receives boxes from \b\tt\\shipout\e}
+\TeX\ expands any |\write| command in \<box> as part of |\shipout|.
+^^|\write//expanded during {\tt\\shipout}|
+The principal use of |\shipout| is in the output routine, but you can
+use it anywhere.
+\enddesc
+
+\begindesc
+\cts deadcycles {\param{number}}
+\explain
+This parameter contains the number of times that \TeX\ has initiated
+the \minref{output routine} since the last time it did a
+^^|\shipout| |\ship!-out|.\footnote{
+More precisely, \TeX\ sets |\dead!-cyles| to $0$ whenever it executes
+|\ship!-out|
+and increments it by $1$ whenever it executes |\output|.}
+If |\deadcycles| gets too big, you've probably gotten
+\TeX\ into a loop, e.g., one where the page builder is trying the same page
+break over and over again.
+\enddesc
+
+\begindesc
+\cts maxdeadcycles {\param{number}}
+\explain
+If the value of |\deadcycles| exceeds the value of |\maxdeadcycles|,
+\TeX\ assumes that the output routine has gotten into a loop.
+\TeX\ then complains and runs its own simple output routine,
+equivalent to |\shipout!allowbreak\box255|,
+that is likely to break the loop.
+\PlainTeX\ sets |\maxdeadcycles| \hbox{to $25$}.
+\enddesc
+
+\begindesc
+\cts outputpenalty {\param{number}}
+\explain
+\TeX\ sets this parameter when it breaks a page. If the breakpoint was at a
+\minref{penalty} item, \TeX\ removes the penalty item and
+sets |\outputpenalty| to the penalty value at
+the breakpoint; otherwise it sets |\outputpenalty| \hbox{to $0$}.
+
+Suppose that you are undoing a page break
+in order to break the page at a different place than the one that \TeX\
+has just chosen. In order to reconstruct the page, you need to recreate
+the penalty at \TeX's chosen breakpoint.
+You can accomplish this with the command
+|\penalty!allowbreak\outputpenalty|.
+\enddesc
+
+\begindesc
+\cts holdinginserts {\param{number}}
+\explain
+If this parameter is greater than $0$ when \TeX\
+is processing a page break, \TeX\ will refrain from processing insertions.
+Setting this parameter to $1$
+can be useful when you're writing an output routine
+that needs to reprocess the contents of the page, e.g.,
+an output routine that uses a value of |\vsize| (\xref \vsize) different from
+the one used by the page builder.
+
+\eix^^{output routine}
+\enddesc
+
+%==========================================================================
+\section {Splitting vertical lists}
+
+\begindesc
+\cts vsplit {\<number> {\bt to} \<dimen>}
+\explain
+This command causes \TeX\ to split the \minref{box} numbered
+\<number>, which we'll call $B_2$, into two parts.
+It uses the same algorithm that it would use if $B_2$ was a page
+and it was breaking that page;
+the division point then corresponds to the page break that it would find.
+The box $B_2$ must be a vbox, not an hbox.
+% we avoid starting the previous sentence with a symbol, a copyediting no-no.
+\TeX\ puts the material preceding the division point into
+another box $B_1$ and leaves the material after the division point in $B_2$.
+The |\vsplit| command then produces $B_1$.
+Normally you'd assign $B_1$ to a different
+box register, as in the example below.
+If the division point is at the end of $B_2$,
+$B_2$ will be empty after the |\vsplit|.
+
+\TeX\ employs its usual page-breaking algorithm
+^^{page breaks//in split lists}
+for the split.
+It uses \<dimen> for ^|\pagegoal|, the desired height of $B_1$.
+The vertical extent of $B_1$ may not be exactly
+\<dimen> because \TeX\ may not be able to achieve its page goal perfectly.
+\TeX\ does not consider insertions in calculating the split,
+so insertions in the original vertical list of $B_2$ will be retained
+but won't affect the split point.
+
+\example
+\setbox 20 = \vsplit 30 to 7in
+% Split off the first seven inches or so of material from
+% box 30 and place that material in box 20.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts splitmaxdepth {\param{dimen}}
+\explain
+This parameter specifies the
+maximum allowable depth of a box resulting from a |\vsplit|.
+|\splitmaxdepth| plays the
+same role that ^|\maxdepth| (\xref \maxdepth) plays for a page.
+\enddesc
+
+\begindesc
+\cts splittopskip {\param{glue}}
+\explain
+This parameter specifies the glue that \TeX\ inserts at the top of
+a box resulting from a |\vsplit|.
+|\splittopskip| plays the
+same role that ^|\topskip| (\xref \topskip) plays for a page.
+\enddesc
+
+\see |\splitbotmark|, |\splitfirstmark| (\xref \splitfirstmark).
+
+\enddescriptions \endchapter \byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/paras.tex b/Master/texmf-dist/doc/plain/impatient/paras.tex
new file mode 100644
index 00000000000..81501f57721
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/paras.tex
@@ -0,0 +1,2166 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter {Commands \linebreak for composing \linebreak paragraphs}
+
+\chapterdef{paras}
+
+This section covers commands that
+deal with characters, words, lines, and entire paragraphs.
+For an explanation of the conventions used in this section,
+see \headcit{Descriptions of the commands}{cmddesc}.
+
+\begindescriptions
+
+\section {Characters and accents}
+
+%==========================================================================
+\subsection {Letters and ligatures for European alphabets}
+
+\begindesc
+\xrdef{fornlets}
+\bix^^{ligatures}
+^^{special symbols}
+^^{European alphabets}
+%
+\ctsx AA {Scandinavian letter \AA}
+\ctsx aa {Scandinavian letter \aa}
+\ctsx AE {\AE\ ligature}
+\ctsx ae {\ae\ ligature}
+\ctsx L {Polish letter \L}
+\ctsx l {Polish letter \l}
+\ctsx O {Danish/Norwegian letter \O}
+\ctsx o {Danish/Norwegian letter \o}
+\ctsx OE {\OE\ ligature}
+\ctsx oe {\oe\ ligature}
+\ctsx ss {German letter \ss}
+\explain
+These commands produce various letters and ligatures from European
+alphabets.
+They are useful for occasional words and phrases in these
+languages---but if you need to typeset a large amount of text in a European
+language, you should probably be using a version of \TeX\ adapted
+to that language.\footnote{The \TeX\ Users Group (\xref{resources}) can
+provide you with information about European language versions of \TeX.}
+
+You'll need a space after these commands when you use them within a word,
+so that
+\TeX\ will treat the following letters as part of the word
+rather than as part of the command.
+You needn't be in \minref{math mode} to use these commands.
+\example
+{\it les \oe vres de Moli\`ere}
+|
+\produces
+{\it les \oe vres de Moli\`ere}
+\endexample
+\eix^^{ligatures}
+\enddesc
+
+%==========================================================================
+\subsection {Special symbols}
+
+\begindesc
+^^{special characters}
+%
+\easy\ctspecialx # \ctsxrdef{@pound} {pound sign \#}
+\ctspecialx $ \ctsxrdef{@bucks} {dollar sign \$}
+\ctspecialx % \ctsxrdef{@percent} {percent sign \%}
+\ctspecialx & \ctsxrdef{@and} {ampersand \&}
+\ctspecialx _ \ctsxrdef{@underscore} {underscore \_}
+\ctsx lq {left quote \lq}
+\ctsx rq {right quote \rq}
+\aux\ctsx lbrack left bracket [
+\aux\ctsx rbrack right bracket ]
+\ctsx dag {dagger symbol \dag}
+\ctsx ddag {double dagger symbol \ddag}
+\ctsx copyright {copyright symbol \copyright}
+\ctsx P {paragraph symbol \P}
+\ctsx S {section symbol \S}
+\explain
+These commands produce various special characters and marks. The first
+five commands are necessary because \TeX\ by default
+attaches special meanings to
+the characters (|#|, |$|, |%|, |&|, |_|).
+You needn't be in \minref{math mode} to use these commands.
+
+You can use the dollar sign in the Computer Modern
+italic fonts to get the ^{pound
+sterling} symbol, as shown in the example below.
+
+\example
+\dag It'll only cost you \$9.98 over here, but in England
+it's {\it \$}24.98.
+|
+\produces
+\dag It'll only cost you \$9.98 over here, but in England
+it's {\it \$}24.98.
+\endexample
+\enddesc
+
+\begindesc
+\cts TeX {}
+\explain
+This command produces the \TeX\ logo. Remember to follow it by
+|\!vs| or to enclose it in a \minref{group} when you want a space
+after it.
+
+\example
+A book about \TeX\ is in your hands.
+|
+\produces
+A book about \TeX\ is in your hands.
+\endexample
+\enddesc
+
+\begindesc
+\cts dots {}
+\explain
+^^{dots}
+This command produces an ^{ellipsis}, i.e., three dots, in ordinary text.
+It's intended for use in mathematical writing; for an ellipsis
+between ordinary words, you should use |$\ldots$| \ctsref{\ldots} instead.
+Since |\dots| includes its own space, you shouldn't follow it by
+|\!vs|.
+\example
+The sequence $x_1$, $x_2$, \dots, $x_\infty$
+does not terminate.
+|
+\produces
+The sequence $x_1$, $x_2$, \dots, $x_\infty$
+does not terminate.
+\endexample
+\enddesc
+
+\see ``Miscellaneous ordinary math symbols'' (\xref{specsyms}).
+%==========================================================================
+\subsection {Arbitrary characters}
+
+\begindesc
+\bix^^{characters}
+\cts char {\<charcode>}
+\explain
+This command produces the character located at position \<charcode>
+of the current font.
+\example
+{\char65} {\char `A} {\char `\A}
+|
+\produces
+{\char65} {\char `A} {\char `\A}
+\endexample
+\enddesc
+
+\begindesc
+\cts mathchar {\<mathcode>}
+\explain
+This command produces the math character whose class, family, and
+font position are given by \<mathcode>.
+It is only legal in math mode.
+\example
+\def\digger{\mathchar "027F} % Like \spadesuit in plain TeX.
+% Class 0, family 2, font position "7F.
+$\digger$
+|
+\produces
+\def\digger{\mathchar "027F}
+% class 0, family 2, font position "7F
+$\digger$
+\endexample
+\enddesc
+
+\see |\delimiter| (\xref\delimiter).
+\eix^^{characters}
+
+%==========================================================================
+\subsection {Accents}
+
+\begindesc
+^^{accents}
+\xrdef{accents}
+%
+\ctspecialx ' \ctsxrdef{@prime} {^{acute accent} as in \'e}
+\ctspecialx . \ctsxrdef{@dot} {^{dot accent} as in \.n}
+\ctspecialx = \ctsxrdef{@equal} {^{macron accent} as in \=r}
+\ctspecialx ^ \ctsxrdef{@hat} {^{circumflex accent} as in \^o}
+\ctspecialx ` \ctsxrdef{@lquote} {^{grave accent} as in \`e}
+\ctspecialx " \ctsxrdef{@quote} {^{umlaut accent} as in \"o}
+\ctspecialx ~ \ctsxrdef{@not} {^{tilde accent} as in \~a}
+\ctsx c {^{cedilla accent} as in \c c}
+\ctsx d {^{underdot accent} as in \d r}
+\ctsx H {^{Hungarian umlaut accent} as in \H o}
+\ctsx t {^{tie-after accent} as in \t uu}
+\ctsx u {^{breve accent} as in \u r}
+\ctsx v {^{check accent} as in \v o}
+\explain
+These commands produce accent marks in ordinary text. You'll usually
+need to leave a space after the ones denoted by a single letter
+(see ``Spaces'', \xref{spaces}).
+
+\example
+Add a soup\c con of \'elan to my pin\~a colada.
+|
+\produces
+Add a soup\c con of \'elan to my pin\~a colada.
+\endexample
+
+\margin{`see also' moved to end of group, replacing the one there.}
+\enddesc
+
+\begindesc
+\cts i {}
+\cts j {}
+\explain
+These commands produce dotless versions of the letters `i' and `j'.
+You should use them instead of the ordinary `i' and `j' when you are putting
+an accent above those letters in ordinary text.
+^^{dotless letters}
+Use the ^|\imath| and ^|\jmath| commands (\xref\imath)
+for dotless `i's and `j's in math formulas.
+\example
+long `i' as in l\=\i fe \quad \v\j
+|
+\produces
+long `i' as in l\=\i fe \quad \v\j
+\endexample
+\enddesc
+
+\begindesc
+\cts accent {\<charcode>}
+\explain
+^^{accents}
+This command puts an accent over the character following this command.
+The accent is the character at position \<charcode> in the current font.
+\TeX\ assumes that the accent has been designed to fit over a character
+$1$\thinspace ex high in the same font as the accent. If the
+character to be accented
+is taller or shorter, \TeX\ adjusts the position accordingly. You can
+change \minref{font}s between the accent and the next character, thus
+drawing the accent character and the character to be accented
+from different fonts. If
+the accent character isn't really intended to be
+an accent, \TeX\ won't complain; it
+will just typeset something ridiculous.
+\example
+l'H\accent94 otel des Invalides
+% Position 94 of font cmr10 has a circumflex accent.
+|
+\produces
+l'H\accent94 otel des Invalides
+% Position 94 of font cmr10 has a circumflex accent.
+\endexample
+\see Math accents (\xref{mathaccent}).
+\enddesc
+%==========================================================================
+\subsection {Defeating boundary ligatures}
+
+\begindesc
+\bix^^{ligatures}
+\cts noboundary {}
+\explain
+You can defeat a ligature
+or kern that \TeX\ applies to the
+first or last character of a word by putting |\noboundary| just before
+or just after the word.
+Certain fonts intended for languages other than English
+contain a special boundary
+character that \TeX\ puts at the beginning
+and end of each word.
+The boundary character occupies no space and is invisible when printed.
+It enables \TeX\ to provide different typographical
+treatment to characters at the beginning or end of a word,
+since
+the boundary character can be part of a sequence of
+characters to be kerned or replaced by a ligature.
+(None of the standard \TeX\ fonts contain this boundary character.)
+The effect of |\noboundary| is to delete the
+boundary character if it's there, thus preventing \TeX\
+from recognizing the ligature or kern.
+\eix^^{ligatures}
+\enddesc
+
+%==========================================================================
+\section {Selecting fonts}
+
+\xrdef{selfont}
+
+%==========================================================================
+\subsection {Particular fonts}
+
+\begindesc
+^^{fonts}
+%
+\ctsx fivebf {use $5$-point bold font}
+\ctsx fivei {use $5$-point math italic font}
+\ctsx fiverm {use $5$-point roman font}
+\ctsx fivesy {use $5$-point math symbol font}
+\ctsx sevenbf {use $7$-point bold font}
+\ctsx seveni {use $7$-point math italic font}
+\ctsx sevenrm {use $7$-point roman font}
+\ctsx sevensy {use $7$-point math symbol font}
+\ctsx tenbf {use $10$-point bold text font}
+\ctsx tenex {use $10$-point math extension font}
+\ctsx teni {use $10$-point math italic font}
+\ctsx tenrm {use $10$-point roman text font}
+\ctsx tensl {use $10$-point slanted roman font}
+\ctsx tensy {use $10$-point math symbol font}
+\ctsx tenit {use $10$-point italic font}
+\ctsx tentt {use $10$-point typewriter font}
+\explain
+These commands cause \TeX\ to typeset the following text in the
+specified font. Normally you would enclose
+one of these font-selecting commands in a
+group, together with the text to be set in the selected font.
+Outside of a group a font-selecting command is
+effective until the end of the document
+(unless you override it with another such command).
+\example
+See how I've reduced my weight---from
+120 lbs.\ to {\sevenrm 140 lbs}.
+|
+\produces
+See how I've reduced my weight---from
+120 lbs.\ to {\sevenrm 140 lbs}.
+\endexample
+\enddesc
+
+\begindesc
+\cts nullfont {}
+\explain
+This command selects a font, built into \TeX,
+that has no characters in it. \TeX\ uses it
+as a replacement for an undefined font in a family of math fonts.
+\enddesc
+
+%==========================================================================
+\subsection {Type styles}
+
+\xrdef{seltype}
+\begindesc
+^^{type styles}
+\easy\ctsx bf {use boldface type}
+\ctsx it {use italic type}
+\ctsx rm {use roman type}
+\ctsx sl {use slanted type}
+\ctsx tt {use typewriter type}
+\explain
+These commands select a type style without changing the typeface or
+the point size.\footnote{
+\TeX\ does not provide predefined commands for changing just the point
+size, e.g., |\eightpoint|.
+Supporting such commands would require a great number of fonts,
+most of which would never be used.
+Such commands were, however, used in typesetting \texbook.}
+Normally you would enclose
+one of these type style commands in a
+group, together with the text to be set in the selected font.
+Outside of a group a type style command is
+effective until the end of the document
+(unless you override it with another such command).
+\example
+The Dormouse was {\it not} amused.
+|
+\produces
+The Dormouse was {\it not} amused.
+\endexample
+\enddesc
+
+\see ``Fonts in math formulas'' (\xref{mathfonts}).
+%==========================================================================
+\section {Uppercase and lowercase}
+
+\begindesc
+\bix^^{case conversion}
+\bix^^{uppercase//conversion to}
+\bix^^{lowercase//conversion to}
+\cts lccode {\<charcode> \tblentry{number}}
+\cts uccode {\<charcode> \tblentry{number}}
+\explain
+The |\lccode| and |\uccode| values for the $256$ possible input
+characters specify the correspondence between the lowercase and
+uppercase forms of letters. These values are used by the |\lowercase|
+and |\uppercase| commands respectively and by \TeX's hyphenation
+algorithm.
+
+\TeX\ initializes the values of |\lccode| and |\uccode| as follows:
+
+\ulist\compact
+\li The |\lccode| of a lowercase letter is the {\ascii} code for that letter.
+\li The |\lccode| of an uppercase letter is the {\ascii} code for the
+corresponding lowercase letter.
+\li The |\uccode| of an uppercase letter is the {\ascii} code for that letter.
+\li The |\uccode| of a lowercase letter is the {\ascii} code for the
+corresponding uppercase letter.
+\li The |\lccode| and |\uccode| of a nonletter are both zero.
+\endulist
+
+Most of the time there's no reason to change these values,
+but you might want to change them if you're using a language
+that has more letters than English.
+\example
+\char\uccode`s \char\lccode`a \char\lccode`M
+|
+\produces
+\char\uccode`s \char\lccode`a \char\lccode`M
+\endexample
+\enddesc
+
+\begindesc
+\cts lowercase {\rqbraces{\<token list>}}
+\cts uppercase {\rqbraces{\<token list>}}
+\explain ^^{case conversion}
+These commands convert the letters in \<token list>,
+i.e., those tokens with category code $11$, to their lowercase
+and uppercase forms.
+The conversion of a letter is defined by its |\lccode| (for lowercase)
+or |\uccode| (for uppercase) table value.
+Tokens in the list that are not letters are not affected---even if the
+tokens are \minref{macro} calls or other commands that expand into letters.
+\example
+\def\x{Cd} \lowercase{Ab\x} \uppercase{Ab\x}
+|
+\produces
+\def\x{Cd} \lowercase{Ab\x} \uppercase{Ab\x}
+
+\eix^^{case conversion}
+\eix^^{uppercase//conversion to}
+\eix^^{lowercase//conversion to}
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Interword spacing}
+
+\begindesc
+\bix^^{spaces//interword}
+\easy\ctsbasic {\\\vs}{}
+\blankidxref\ctsxrdef{@space}
+\explain
+This command explicitly produces an interword
+space called a ``^{control space}''.
+A control space is useful when a
+letter occurs immediately after a control sequence, or in any other
+circumstance where you don't want two tokens to be run together in the
+output.
+The amount of space produced by |\!vs|
+is independent of preceding punctuation, i.e., its space factor
+(\xref\spacefactor) is $1000$.
+
+Incidentally, if you want to print the `\vs' ^^{visible space}
+character that we've used here to denote a space, you can get it by typing
+|{\tt \char `\ }|.
+
+\example
+The Dormouse was a \TeX\ expert, but he never let on.
+|
+\produces
+The Dormouse was a \TeX\ expert, but he never let on.
+\endexample
+\enddesc
+
+\begindesc
+\cts space {}
+\explain
+This command is equivalent to an input space character.
+It differs from ^|\ | in that its
+width \emph{can} be affected by preceding punctuation.
+\example
+Yes.\space No.\space Maybe.\par
+Yes.\!vs!.No.\!vs!.Maybe.
+
+|
+\produces
+Yes.\space No.\space Maybe.\par
+Yes.\ No.\ Maybe.
+\endexample
+\enddesc
+
+\begindesc
+\ctsact ^^M \xrdef{@newline}
+\explain
+This construct produces the ^{end of line} character.
+It normally has two effects when \TeX\ encounters it in
+your input:
+\olist
+\li It acts as a command, producing either an input space
+(if it comes at the end of a nonblank line)
+or a |\par| token (if it comes at the end of a blank line).
+^^|\par//from empty line|
+\li It ends the input line, causing \TeX\ to ignore the remaining
+characters on the line.
+\endolist
+\noindent
+However, |^^M| does \emph{not} end the line when it appears in the
+context |`\^^M|, denoting the ASCII code for control-M (the number $13$).
+You can change the meaning of |^^M|
+by giving it a different \minref{category code}.
+See \xrefpg{twocarets} for a more general explanation of the |^^| notation.
+\example
+Hello.^^MGoodbye.
+Goodbye again.\par
+The \char `\^^M\ character.\par
+% The fl ligature is at position 13 of font cmr10
+\number `\^^M\ is the end of line code.\par
+Again, \number `^^M is the end of line code,
+isn't it? % 32 is the ASCII code for a space
+|
+\produces
+{\catcode `\^ = 7 % disable indexing use within this display
+Hello.^^MGoodbye
+Goodbye again.\par
+The \char `\^^M\ character.\par
+\number `\^^M\ is the end of line code.\par
+Again, \number `^^M is the end of line code,
+isn't it?}
+\endexample
+\enddesc
+
+\begindesc
+\easy\ctsact ~ \xrdef{@not}
+\explain
+The \minref{active character} `|~|', called a ``^{tie}'',
+produces a normal interword space
+between two words and links those words so that
+a line break will not occur between them.
+You should use a tie in any context where a line break would be confusing,
+e.g., before a middle initial, after an abbreviation such as ``Dr.'',
+or after ``Fig.'' in ``Fig.~8''.
+
+\example
+P.D.Q.~Bach (1807--1742), the youngest and most
+imitative son of Johann~S. Bach, composed the
+{\sl Concerto for Horn and Hardart}.
+|
+\produces
+\margin{The inversion of dates is deliberate---cf. Peter Schickele.}
+P.D.Q.~Bach (1807--1742), the youngest and most
+imitative son of Johann~S. Bach, composed the
+{\sl Concerto for Horn and Hardart}.
+\endexample\enddesc
+
+\begindesc
+\easy\ctspecial / \ctsxrdef{@slash}
+\explain
+Every character in a \TeX\ \minref{font}
+has an ``^{italic correction}'' associated with it, although
+the italic correction
+is normally zero for a character in an unslanted (upright) font.
+The italic correction specifies the extra space that's needed
+when you're switching from a slanted font (not necessarily
+an italic font) to an unslanted font.
+The extra
+space is needed because a slanted character projects into the
+space that follows it, making the space look too small when the
+next character is unslanted.
+The metrics file for a font includes the italic correction of each
+character in the font.
+^^{metrics file//italic correction in}
+
+The |\/| command
+produces an ^{italic correction} for the preceding character.
+You should insert an italic correction when you're switching from
+a slanted font to an unslanted font,
+except when the next character is a period or comma.
+\example
+However, {\it somebody} ate {\it something}: that's clear.
+
+However, {\it somebody\/} ate {\it something\/}:
+that's clear.
+|
+\produces
+However, {\it somebody} ate {\it something}: that's clear.
+
+However, {\it somebody\/} ate {\it something\/}:
+that's clear.
+\endexample
+\enddesc
+
+\begindesc
+\cts frenchspacing {}
+\cts nonfrenchspacing {}
+\explain
+^^{interword spacing}
+\TeX\ normally adjusts the spacing between words to account for
+punctuation marks. For example, it inserts extra space at the end of a
+sentence and adds some stretch to the \minref{glue} following any
+punctuation mark there. The |\frenchspacing| command tells \TeX\ to make
+the interword spacing independent of punctuation, while the
+|\nonfrenchspacing| command tells \TeX\ to use its normal spacing rules.
+If you don't specify
+|\frenchspacing|, you'll get \TeX's normal spacing.
+
+See \xrefpg{periodspacing} for advice on how to control \TeX's treatment
+of punctuation at the end of sentences.
+
+\example
+{\frenchspacing An example: two sentences. Right? No.\par}
+{An example: two sentences. Right? No. \par}%
+|
+\produces
+{\frenchspacing An example: two sentences. Right? No.\par}
+{An example: two sentences. Right? No. \par}%
+\endexample
+
+\enddesc
+
+\begindesc
+\cts obeyspaces {}
+\explain
+\TeX\ normally condenses a sequence of several spaces to a single space.
+|\obeyspaces| instructs \TeX\ to produce a space in the output
+for each space in the input.
+|\obeyspaces| does not cause spaces at the beginning of a line
+to show up, however; for that we recommend the |\obey!-white!-space|
+command defined in |eplain.tex|
+(\xref{ewhitesp}).
+^^|\obeywhitespace|
+|\obeyspaces| is often useful when you're typesetting something,
+computer input for example,
+in a monospaced font (one in which each character takes up the
+same amount of space)
+and you want to show exactly what each line of input looks like.
+
+You can use the |\obeylines| command (\xref{\obeylines}) to get \TeX\
+to follow the line boundaries of your input. |\obeylines| is often
+used in combination with |\obeyspaces|.
+\example
+These spaces are closed up
+{\obeyspaces but these are not }.
+|
+\produces
+These spaces are closed up
+{\obeyspaces but these are not }.
+\endexample
+\enddesc
+
+\begindesc
+\cts spacefactor {\param{number}}
+\cts spaceskip {\param{glue}}
+\cts xspaceskip {\param{glue}}
+\cts sfcode {\<charcode> \tblentry{number}}
+\explain
+These primitive \minref{parameter}s affect how much space \TeX\
+puts between two adjacent words, i.e., the ^{interword spacing}.
+The normal interword spacing is supplied by the current font.
+As \TeX\ is processing a \minref{horizontal list}, it keeps track of the
+^{space factor} $f$ in |\spacefactor|.
+As it processes each input character $c$, it updates $f$ according to the
+value of $f_c$, the space factor code of $c$ (see below).
+For most characters, $f_c$ is $1000$ and \TeX\ sets $f$ to $1000$.
+(The initial value of $f$ is also $1000$.)
+When \TeX\ sees an interword space, it adjusts the size of that space
+by multiplying the stretch and shrink of that space by
+$f/1000$ and $1000/f$ respectively.
+Thus:
+\olist\compact
+\li If $f=1000$, the interword space keeps its normal value.
+\li If $f<1000$, the interword space gets less \minref{stretch}
+and more \minref{shrink}.
+\li If $f>1000$, the interword space gets more \minref{stretch}
+and less \minref{shrink}.
+\endolist
+% > changed to \ge on the next line after second edition was typeset.
+% Correction made by A-W production.
+In addition, if $f\ge2000$ the interword space is further increased by the
+``extra space'' parameter associated with the current font.
+
+Each
+input character $c$ has an entry in the |\sfcode| (space factor code)
+table.
+The |\sfcode| table entry is independent of the font.
+Usually \TeX\ just sets $f$ to $f_c$ after it processes $c$.
+However:
+\ulist
+\li If $f_c$ is zero, \TeX\ leaves $f$ unchanged.
+Thus a character such as `|)|' in \plainTeX,
+for which $f_c$ is zero, is essentially transparent to
+the interword space calculation.
+\li If $f<1000<f_c$, \TeX\ sets $f$ to $1000$ rather than to $f_c$,
+i.e., it refuses to raise $f$ very rapidly.
+\endulist
+The |\sfcode| value for a period is normally $3000$,
+which is why \TeX\ usually puts extra space after a period
+% > to \ge here, too, as above.
+(see the rule above for the case $f\ge2000$).
+Noncharacter items in a horizontal list, e.g., vertical rules,
+generally act like characters with a space factor of $1000$.
+
+You can change the space factor explicitly by assigning
+a different numerical value to |\spacefactor|.
+You can also override the normal
+interword spacing by assigning a different numerical
+value to |\xspaceskip| or to |\spaceskip|:
+\ulist
+\li |\xspaceskip| specifies the glue to be used when $f\ge2000$;
+in the case where
+|\xspaceskip| is zero, the normal rules apply.
+\li |\spaceskip| specifies the glue to be used when $f<2000$ or when
+\hbox{|\xspaceskip|} is zero; if |\spaceskip| is zero, the normal rules apply.
+The stretch and shrink of
+the |\spaceskip| glue, like that of the ordinary interword glue,
+is modified according to the value of $f$.
+\endulist
+
+See \knuth{page~76} for the precise rules that \TeX\ uses in calculating
+interword \minref{glue}, and \knuth{pages~285--287} for the adjustments
+made to |\spacefactor| after various items in a horizontal list.
+\eix^^{spaces//interword}
+\enddesc
+
+%==========================================================================
+\section {Centering and justifying lines}
+
+\begindesc
+\bix^^{centering}
+\bix^^{flush left}
+\bix^^{flush right}
+\bix^^{justification}
+\easy\cts centerline {\<argument>}
+\cts leftline {\<argument>}
+\cts rightline {\<argument>}
+\explain
+The |\centerline| command produces an \minref{hbox} exactly as wide
+as the current line and places \<argument> at the center of the box.
+The |\leftline| and |\rightline| commands are analogous; they
+place \<argument> at the left end or at the right end of the box.
+If you want to apply one of these commands to
+several consecutive lines, you must apply
+it to each one individually.
+See \xrefpg{eplaincenter} for an alternate approach.
+
+Don't use these commands within a paragraph---if you do,
+\TeX\ probably won't be able to break the paragraph into lines and
+will complain about an overfull hbox.
+\example
+\centerline{Grand Central Station}
+\leftline{left of Karl Marx}
+\rightline{right of Genghis Khan}
+|
+\produces
+\centerline{Grand Central Station}
+\leftline{left of Karl Marx}
+\rightline{right of Genghis Khan}
+
+\eix^^{centering}
+\eix^^{flush left}
+\eix^^{flush right}
+\eix^^{justification}
+
+\endexample
+\enddesc
+
+\begindesc
+\easy\cts line {\<argument>}
+\explain
+This command produces an \minref{hbox} containing \<argument>.
+The hbox is exactly as wide as the current line, i.e., it
+extends from the right margin to the left margin.
+\example
+\line{ugly \hfil suburban \hfil sprawl}
+% Without \hfil you'd get an `underfull box' from this.
+|
+\produces
+\line{ugly \hfil suburban \hfil sprawl}%
+\endexample
+
+\enddesc
+
+\begindesc
+^^{overlapping text}
+\cts llap {\<argument>}
+\cts rlap {\<argument>}
+\explain
+These commands enable you to produce text that overlaps
+whatever happens to be to the left or to the right of the current
+position. |\llap| backspaces by the width of \<argument> and then
+typesets \<argument>. |\rlap| is similar, except that it typesets
+\<argument> first and then backspaces. |\llap| and |\rlap| are useful for
+placing text outside of the current margins.
+Both |\llap| and |\rlap| do their work by creating
+a \minref{box} of zero~width.
+
+You can also use |\llap| or |\rlap| to construct special characters by
+^{overprinting}, but don't try it unless you're sure that the characters
+you're using have the same width (which is the case for a monospaced
+font such as ^|cmtt10|, the Computer Modern $10$-point ^{typewriter font}).
+^^{Computer Modern fonts}
+\example
+\noindent\llap{off left }\line{\vrule $\Leftarrow$
+left margin of examples\hfil right margin of examples
+$\Rightarrow$\vrule}\rlap{ off right}
+|
+\produces
+\noindent\llap{off left }\line{\vrule $\Leftarrow$
+left margin of examples\hfil right margin of examples
+$\Rightarrow$\vrule}\rlap{ off right}
+\endexample
+
+%\example
+%{\tt O\llap{!|}}
+%|
+%\produces
+%{\cm \tt O\llap{\char `|}}
+%\endexample
+
+\nobreak % don't lose the \see
+\enddesc
+
+\see |\hsize| (\xref{\hsize}).
+
+%==========================================================================
+\section {Shaping paragraphs}
+
+\subsection {Starting, ending, and indenting paragraphs}
+
+\begindesc
+\bix^^{paragraphs//shaping}
+\ctspecial par \ctsxrdef{@par}
+\explain
+This command ends a paragraph and puts \TeX\ into \minref{vertical mode},
+ready to add more items to the page. Since \TeX\ converts a blank line in
+your input file into a |\par| \minref{token}, you don't ordinarily need to
+type an explicit |\par| in order to end a paragraph.
+
+An important point is that |\par| doesn't tell
+\TeX\ to start a paragraph; it only tells \TeX\ to end a paragraph.
+\TeX\ starts a paragraph when it is in ordinary vertical mode (which it
+is after a |\par|) and encounters an inherently horizontal item such as
+a letter. As part of its ceremony for starting a paragraph, \TeX\
+^^{paragraphs//starting}
+inserts an amount of vertical space given by the parameter |\parskip|
+(\xref{\parskip}) and indents the paragraph by a horizontal space given
+by |\parindent| (\xref{\parindent}).
+
+You can usually cancel any interparagraph space produced by a |\par| by giving
+the command |\vskip -\lastskip|. It can often
+be helpful to do this when you're writing a \minref{macro} that is
+supposed to work the same way whether or not it is preceded by a blank
+line.
+
+You can get \TeX\ to take some special action at the start of each paragraph
+by placing the instructions in ^|\everypar| (\xref\everypar).
+
+See \knuth{pages~283 and 286} for the precise effect of |\par|.
+
+\example
+\parindent = 2em
+``Can you row?'' the Sheep asked, handing Alice a pair of
+knitting-needles as she was speaking.\par ``Yes, a little%
+---but not on land---and not with needles---'' Alice was
+starting to say, when suddenly the needles turned into oars.
+|
+\produces
+\parindent = 2em
+``Can you row?'' the Sheep asked, handing Alice a pair of
+knitting-needles as she was speaking.\par ``Yes, a little%
+---but not on land---and not with needles---'' Alice was
+starting to say, when suddenly the needles turned into oars.
+\endexample
+\enddesc
+
+\begindesc
+\cts endgraf {}
+\explain
+This command is a synonym for the ^|\par| primitive command.
+It is useful when you've redefined ^|\par| but still want access to the
+original definition of |\par|.
+\enddesc
+
+\begindesc
+\cts parfillskip {\param{glue}}
+\explain
+^^{paragraphs//glue at end of}
+This parameter specifies the horizontal glue that
+\TeX\ inserts at the end of a paragraph.
+The default value of |\parfillskip| is |0pt plus 1fil|,
+which causes the last line of a paragraph to be
+filled out with blank space. A value of |0pt| forces
+\TeX\ to end the last line of a paragraph at the right margin.
+\enddesc
+
+\bix^^{indentation}
+\begindesc
+\easy\cts indent {}
+\explain
+If \TeX\ is in vertical mode, as it is after ending a paragraph,
+this command inserts the ^|\parskip| interparagraph glue,
+puts \TeX\ into horizontal mode, starts a paragraph, and
+indents that paragraph by |\parindent|.
+If \TeX\ is already in horizontal mode, this command merely produces
+a blank space of width |\parindent|.
+Two |\indent|s in a row
+produce two indentations.
+^^{indentation}
+
+As the example below shows, an |\indent| at a point where \TeX\
+would start a paragraph anyway is redundant.
+When \TeX\ is in vertical mode and sees a letter or some other
+inherently horizontal command, it starts a paragraph by
+switching to horizontal mode,
+doing an |\indent|, and processing the horizontal command.
+
+\example
+\parindent = 2em This is the first in a series of three
+paragraphs that show how you can control indentation. Note
+that it has the same indentation as the next paragraph.\par
+\indent This is the second in a series of three paragraphs.
+It has \indent an embedded indentation.\par
+\indent\indent This doubly indented paragraph
+is the third in the series.
+|
+\produces
+\parindent = 2em This is the first in a series of three
+paragraphs that show how you can control indentation. Note
+that it has the same indentation as the next paragraph.\par
+\indent This is the second in a series of three paragraphs.
+It has \indent an embedded indentation.\par
+\indent\indent This doubly indented paragraph
+is the third in the series.
+\endexample
+\enddesc
+
+
+\begindesc
+\easy\cts noindent {}
+\explain
+If \TeX\ is in vertical mode, as it is after ending a paragraph,
+this command inserts the ^|\parskip| interparagraph glue,
+puts \TeX\ into horizontal mode, and starts an unindented paragraph.
+It has no effect in horizontal mode, i.e., within a paragraph.
+Starting a paragraph with |\noindent| thus cancels
+the indentation by |\parindent|
+that would normally occur there.
+^^{indentation}
+
+A common use of |\noindent| is to cancel the indentation of
+the first line of a
+paragraph when the paragraph follows some displayed material.
+
+\example
+\parindent = 1em
+Tied round the neck of the bottle was a label with the
+words \smallskip \centerline{EAT ME}\smallskip
+\noindent beautifully printed on it in large letters.
+|
+\produces
+\parindent = 1em
+Tied round the neck of the bottle was a label with the
+words \smallskip \centerline{EAT ME}\smallskip
+\noindent beautifully printed on it in large letters.
+\endexample
+\enddesc
+
+\margin{{\tt\\textindent} moved here from later in the section.}
+\begindesc
+\cts textindent {\<argument>}
+\explain
+^^{indentation}
+This command tells \TeX\ to start a paragraph and indent it by
+|\par!-indent|,
+as usual.
+\TeX\ then right-justifies \<argument> within the indentation
+and
+follows it with an en space (half an em).
+\PlainTeX\ uses this command to typeset footnotes (\xref\footnote)
+^^{footnotes//using \b\tt\\textindent\e\ with}
+and items in lists (see |\item|, \xref\item).
+
+\example
+\parindent = 20pt \textindent{\raise 1pt\hbox{$\bullet$}}%
+You are allowed to use bullets in \TeX\ even if
+you don't join the militia, and many peace-loving
+typographers do so.
+|
+\produces
+\parindent = 20pt \textindent{\raise 1pt\hbox{$\bullet$}}%
+You are allowed to use bullets in \TeX\ even if
+you don't join the militia, and many peace-loving
+typographers do so.
+\endexample\enddesc
+
+\begindesc
+\cts parindent {\param{dimen}}
+\explain
+This \minref{parameter} specifies the amount by which
+the first line of each paragraph is to be indented. ^^{indentation}
+As the example below shows, it's a bad idea to set both |\parindent|
+and ^|\parskip| to zero since then the paragraph breaks are
+no longer apparent.
+\example
+\parindent = 2em This paragraph is indented by 2 ems.
+\par \parindent=0pt This paragraph is not indented at all.
+\par Since we haven't reset the paragraph indentation,
+this paragraph isn't indented either.
+|
+\produces
+\parindent = 2em This paragraph is indented by 2 ems.
+\par \parindent=0pt This paragraph is not indented at all.
+\par Since we haven't reset the paragraph indentation,
+this paragraph isn't indented either.
+\endexample\enddesc
+
+\begindesc
+\cts everypar {\param{token list}}
+\explain
+\TeX\ performs the commands in \<token list> whenever it
+enters horizontal mode, e.g., when it starts a paragraph.
+By default |\everypar| is empty, but you can
+take extra actions at the start of every paragraph by putting
+the commands for those actions into a token list
+%
+% This \vglue makes the example overwrite the example, but since we are
+% not reprinting this page, it doesn't matter. For reasons I did not
+% attempt to track down, a page break happened before the example,
+% unlike in the first printing.
+%
+\secondprinting{\vglue-48pt}
+and assigning that token list to |\everypar|.
+\example
+\everypar = {$\Longrightarrow$\enspace}
+Now pay attention!!\par
+I said, ``Pay attention!!''.\par
+I'll say it again!! Pay attention!!
+|
+\produces
+\everypar = {$\Longrightarrow$\enspace}
+Now pay attention!\par
+I said, ``Pay attention!''.\par
+I'll say it again! Pay attention!
+\endexample
+\enddesc
+\secondprinting{\vfill\eject}
+
+%==========================================================================
+\subsection {Shaping entire paragraphs}
+
+\begindesc
+\margin{This command was also described in the `Pages' chapter. The
+description here now combines the two earlier descriptions.}
+\bix^^{line breaks//and paragraph shape}
+\easy\cts hsize {\param{dimen}}
+\explain
+This \minref{parameter} specifies the current ^{line length},
+i.e., the usual width of lines in a paragraph
+starting at the left margin.
+A great many \TeX\ commands, e.g., |\centerline| (\xref{\centerline})
+and |\hrule| (\xref{\hrule}), implicitly use the value of
+|\hsize|. By changing |\hsize| within a group
+you can change the width of the constructs produced by such commands.
+
+If you
+set |\hsize| within a \minref{vbox} that contains text, the vbox will
+have whatever width you've given to |\hsize|.
+^^{vboxes//width determined by \b\tt\\hsize\e}
+
+\PlainTeX\ sets |\hsize| to |6.5in|.
+
+\example
+{\hsize = 3.5in % Set this paragraph 3.5 inches wide.
+The hedgehog was engaged in a fight with another hedgehog,
+which seemed to Alice an excellent opportunity for
+croqueting one of them with the other.\par}%
+|
+\produces
+{\hsize = 3.5in
+The hedgehog was engaged in a fight with another hedgehog,
+which seemed to Alice an excellent opportunity for croqueting
+one of them with the other.\par}%
+
+\doruler{\8\8\8\tick\1\tick\2\tick\1\tick\3}{3.5}{in}
+\nextexample
+\leftline{\raggedright\vtop{\hsize = 1.5in
+Here is some text that we put into a paragraph that is
+an inch and a half wide.}\qquad
+\vtop{\hsize = 1.5in Here is some more text that
+we put into another paragraph that is an inch and a
+half wide.}}
+|
+\produces
+\leftline{\raggedright\vtop{\hsize = 1.5in
+Here is some text that we put into a paragraph that is
+an inch and a half wide.}\qquad
+\vtop{\hsize = 1.5in Here is some more text that
+we put into another paragraph that is an inch and a
+half wide.}}
+\endexample
+\enddesc
+
+\begindesc
+\easy\cts narrower {}
+\explain
+^^{paragraphs//narrow}
+This command makes paragraphs narrower, increasing the left and right
+margins by |\parindent|, the
+current paragraph ^{indentation}.
+It achieves this by increasing
+both |\leftskip| and |\rightskip| by |\parindent|.
+Normally you place |\narrower| at the
+beginning of a \minref{group} containing the paragraphs that you want to
+make narrower. If you forget to enclose |\narrower| within a group,
+you'll find that all the rest of your document will have narrow
+paragraphs.
+
+|\narrower| affects just those paragraphs that end after you invoke it.
+If you end a |\narrower| group before you've ended
+a paragraph, \TeX\ won't make that paragraph narrower.
+
+\example
+{\parindent = 12pt \narrower\narrower\narrower
+This is a short paragraph. Its margins are indented
+three times as much as they would be
+had we used just one ``narrower'' command.\par}
+|
+\produces
+{\parindent = 12pt \narrower\narrower\narrower
+This is a short paragraph. Its margins are indented
+three times as much as they would be
+had we used just one ``narrower'' command.\par}
+\endexample\enddesc
+
+\begindesc
+\cts leftskip {\param{glue}}
+\cts rightskip {\param{glue}}
+\explain
+These parameters tell \TeX\ how much glue to place
+at the left and at the right end of each line of the current
+paragraph. We'll just explain how |\leftskip| works since |\rightskip|
+is analogous.
+
+^^{indentation} You can increase the left margin by setting |\leftskip|
+to a fixed nonzero \minref{dimension}. If you give |\leftskip| some
+stretch, you can produce ^{ragged left} text, i.e.,
+text that has an uneven left margin.
+
+Ordinarily, you should enclose any \minref{assignment} to |\leftskip|
+in a \minref{group} together with the affected text
+in order to keep its effect from continuing to
+the end of your document. However, it's pointless to change
+|\leftskip|'s value inside a group that is in turn
+contained within a paragraph---the value of |\leftskip| at the
+\emph{end} of a paragraph
+is what determines how \TeX\ breaks the paragraph into lines. \minrefs{line
+break}
+
+\example
+{\leftskip = 1in The White Rabbit trotted slowly back
+again, looking anxiously about as it went, as if it had
+lost something. {\leftskip = 10in % has no effect
+It muttered to itself, ``The Duchess!! The Duchess!! She'll
+get me executed as sure as ferrets are ferrets!!''}\par}%
+|
+\produces
+{\leftskip = 1in The White Rabbit trotted slowly back
+again, looking anxiously about as it went, as if it had
+lost something. {\leftskip = 10in % has no effect
+It muttered to itself, ``The Duchess! The Duchess!
+She'll get me executed as sure as ferrets are ferrets!''}\par}%
+\nextexample
+\pretolerance = 10000 % Don't hyphenate.
+\rightskip = .5in plus 2em
+The White Rabbit trotted slowly back again, looking
+anxiously about as it went, as if it had lost something.
+It muttered to itself, ``The Duchess!! The Duchess!! She'll
+get me executed as sure as ferrets are ferrets!!''
+|
+\produces
+\pretolerance = 10000 % Don't hyphenate.
+\rightskip = .5in plus 2em
+The White Rabbit trotted slowly back again, looking
+anxiously about as it went, as if it had lost something.
+It muttered to itself, ``The Duchess! The Duchess! She'll
+get me executed as sure as ferrets are ferrets!''
+\endexample
+\enddesc
+
+\begindesc
+\easy\cts raggedright {}
+\cts ttraggedright {}
+\explain
+These commands cause \TeX\ to typeset your document
+``^{ragged right}''. Interword spaces all
+have their natural size, i.e., they all have the same width and
+don't stretch or shrink.
+Consequently the right margin is generally not even.
+The alternative, which is \TeX's default, is to typeset your document
+justified,
+^^{justification}
+i.e., with uniform left and right margins.
+In justified text, interword spaces are stretched in order to
+make the right margin even.
+Some typographers prefer ragged right because
+it avoids distracting ``rivers'' of white space on the printed page.
+\minrefs{justified text}
+
+You should use the |\ttraggedright| command when typesetting text in a
+monospaced font and the |\raggedright| command when typesetting text in any
+other font.
+
+Most of the time you'll want to apply these commands to an entire document,
+but you can limit their effects by enclosing them
+in a \minref{group}.
+\example
+\raggedright ``You couldn't have it if you {\it did\/}
+want it,'' the Queen said. ``The rule is, jam tomorrow
+and jam yesterday---but never jam {\it today\/}.''
+``It {\it must\/} come sometimes to `jam today,%
+thinspace'' Alice objected. ``No, it can't'', said the
+Queen. ``It's jam every {\it other\/} day: today isn't
+any {\it other\/} day.''
+|
+\produces
+\raggedright ``You couldn't have it if you {\it did\/}
+want it,'' the Queen said. ``The rule is, jam tomorrow
+and jam yesterday---but never jam {\it today\/}.''
+``It {\it must\/} come sometimes to `jam today,%
+'\thinspace'' Alice objected. ``No, it can't'', said the
+Queen. ``It's jam every {\it other\/} day: today isn't
+any {\it other\/} day.''
+\endexample
+\enddesc
+
+\begindesc
+\cts hang {}
+\explain
+This command indents the second and subsequent lines of a paragraph
+by |\parindent|, the paragraph ^{indentation}
+(\xref{\parindent}).
+Since the first line is already indented by |\parindent|
+(unless you've cancelled the indentation with |\noindent|), the
+entire paragraph appears to be indented by |\parindent|.
+
+\example
+\parindent=24pt \hang ``I said you {\it looked} like an
+egg, Sir,'' Alice gently explained to Humpty Dumpty. ``And
+some eggs are very pretty, you know,'' she added.
+|
+\produces
+\parindent=24pt \hang ``I said you {\it looked} like an
+egg, Sir,'' Alice gently explained to Humpty Dumpty. ``And
+some eggs are very pretty, you know,'' she added.
+\endexample
+\enddesc
+
+\begindesc
+\cts hangafter {\param{number}}
+\cts hangindent {\param{dimen}}
+
+\explain
+These two \minref{parameter}s jointly
+specify ``^{hanging indentation}'' for a paragraph.
+The hanging indentation indicates to \TeX\ that certain lines
+of the paragraph should
+be indented and the remaining lines should have their normal width.
+^^{indentation}
+|\hangafter| determines which lines
+are indented, while |\hangindent| determines the amount of indentation
+and whether it occurs on the left or on the right:
+
+\ulist
+\li Let $n$ be the value of |\hangafter|. If $n < 0$,
+the first $-n$ lines of the paragraph will be indented.
+If $n\ge0$, all but the first $n$ lines of the paragraph will be
+indented.
+
+\li Let $x$ be the value of |\hangindent|.
+If $x\ge0$, the lines will be indented
+by $x$ on the left. If $x<0$ the lines will be indented by $-x$ on
+the right.
+\endulist
+
+When you specify hanging indentation, it applies
+only to the next paragraph (if you're in vertical mode) or to
+the current paragraph (if you're in horizontal mode).
+\TeX\ uses the values of |\hangafter| and |\hangindent| at the end of a
+paragraph, when it breaks that paragraph into lines.\minrefs{line
+break}
+
+Unlike most of the other paragraph-shaping parameters,
+|\hangafter| and |\hangindent| are reset to their default values
+at the start of each paragraph, namely,
+$1$ for |\hangafter| and $0$ for |\hangindent|.
+If you want to typeset a sequence of paragraphs with hanging
+indentation, use |\everypar| (\xref{\everypar}).
+^^|\everypar//for hanging indentation|
+If you specify |\hangafter| and |\hangindent| as well as ^|\parshape|,
+\TeX\ ignores the |\hangafter| and |\hangindent|.
+
+\example
+\hangindent=6pc \hangafter=-2
+This is an example of a paragraph with hanging indentation.
+In this case, the first two lines are indented on the left,
+but after that we return to unindented text.
+|
+\produces
+\hangindent=6pc \hangafter=-2
+This is an example of a paragraph with hanging indentation.
+In this case, the first two lines are indented on the left,
+but after that we return to unindented text.
+\nextexample
+\hangindent=-6pc \hangafter=1
+This is another example of a paragraph with hanging
+indentation. Here, all lines after the first have been
+indented on the right. The first line, on the other
+hand, has been left unindented.
+|
+\produces
+\hangindent=-6pc \hangafter=1
+This is another example of a paragraph with hanging
+indentation. Here, all lines after the first have been
+indented on the right. The first line, on the other
+hand, has been left unindented.
+\endexample
+\enddesc
+
+\margin{{\tt\\textindent} has been moved to earlier in this section.}
+
+\begindesc
+\cts parshape {$n\; i_1 l_1\; i_2 l_2\; \ldots \;i_n l_n$}
+\explain
+This command specifies the shape of the first $n$ lines of a paragraph---
+the next paragraph if you're in vertical mode and the current paragraph
+if you're in horizontal mode.
+The $i$'s and $l$'s are all
+dimensions. The first line is indented by $i_1$ and has length $l_1$,
+the second line is indented by $i_2$ and has length $l_2$, and so forth.
+If the paragraph has more than $n$ lines, the last indentation\slash
+length pair is used for the extra lines.
+To achieve special effects such as the one
+shown here, you usually have to experiment a lot, insert kerns here and
+there, and choose your words to fit the shape.
+
+|\parshape|, like ^|\hangafter| and ^|\hangindent|, is effective only for one
+paragraph.
+If you specify |\hangafter| and |\hangindent| as well as |\par!-shape|,
+\TeX\ ignores the ^|\hangafter| and ^|\hangindent|.
+\ifodd\pageno\vfill\eject\fi % so the wineglass is on a single page.
+
+\example
+% A small font and close interline spacing make this work
+\smallskip\font\sixrm=cmr6 \sixrm \baselineskip=7pt
+\fontdimen3\font = 1.8pt \fontdimen4\font = 0.9pt
+\noindent \hfuzz 0.1pt
+\parshape 30 0pt 120pt 1pt 118pt 2pt 116pt 4pt 112pt 6pt
+108pt 9pt 102pt 12pt 96pt 15pt 90pt 19pt 84pt 23pt 77pt
+27pt 68pt 30.5pt 60pt 35pt 52pt 39pt 45pt 43pt 36pt 48pt
+27pt 51.5pt 21pt 53pt 16.75pt 53pt 16.75pt 53pt 16.75pt 53pt
+16.75pt 53pt 16.75pt 53pt 16.75pt 53pt 16.75pt 53pt 16.75pt
+53pt 14.6pt 48pt 24pt 45pt 30.67pt 36.5pt 51pt 23pt 76.3pt
+The wines of France and California may be the best
+known, but they are not the only fine wines. Spanish
+wines are often underestimated, and quite old ones may
+be available at reasonable prices. For Spanish wines
+the vintage is not so critical, but the climate of the
+Bordeaux region varies greatly from year to year. Some
+vintages are not as good as others,
+so these years ought to be
+s\kern -.1pt p\kern -.1pt e\kern -.1pt c\hfil ially
+n\kern .1pt o\kern .1pt t\kern .1pt e\kern .1pt d\hfil:
+1962, 1964, 1966. 1958, 1959, 1960, 1961, 1964,
+1966 are also good California vintages.
+Good luck finding them!!
+|
+%\margin{Wineglass text replaced because of permissions problem.}
+\produces
+% A small font and close interline spacing make this work
+\smallskip\font\sixrm=cmr6 \sixrm \baselineskip=7pt
+\fontdimen3\font = 1.8pt \fontdimen4\font = 0.9pt
+\noindent \hfuzz 0.1pt
+\parshape 30 0pt 120pt 1pt 118pt 2pt 116pt 4pt 112pt 6pt 108pt 9pt 102pt
+12pt 96pt 15pt 90pt 19pt 84pt 23pt 77pt 27pt 68pt 30.5pt 60pt 35pt 52pt
+39pt 45pt 43pt 36pt 48pt 27pt 51.5pt 21pt 53pt 16.75pt 53pt 16.75pt
+53pt 16.75pt 53pt 16.75pt 53pt 16.75pt 53pt 16.75pt 53pt 16.75pt
+53pt 16.75pt 53pt 14.6pt 48pt 24pt 45pt 30.67pt 36.5pt 51pt 23pt 76.3pt
+The wines of France and California may be the best
+known, but they are not the only fine wines. Spanish
+wines are often underestimated, and quite old ones may
+be available at reasonable prices. For Spanish wines
+the vintage is not so critical, but the climate of the
+Bordeaux region varies greatly from year to year. Some
+vintages are not as good as others,
+so these years ought to be
+s\kern -.1pt p\kern -.1pt e\kern -.1pt c\hfil ially
+n\kern .1pt o\kern .1pt t\kern .1pt e\kern .1pt d\hfil:
+1962, 1964, 1966. 1958, 1959, 1960, 1961, 1964,
+1966 are also good California vintages.
+Good luck finding them!
+\endexample
+\eix^^{indentation}
+\enddesc
+
+\begindesc
+\cts prevgraf {\param{number}}
+\explain
+In horizontal mode, this parameter specifies the
+number of lines in the paragraph so far; in vertical mode,
+it specifies the number of lines in the previous paragraph.
+\TeX\ only sets |\prevgraf| after it has finished breaking some text into
+lines, i.e., at a math display or at the end of a paragraph.
+See \knuth{page~103} for more details about it.
+\enddesc
+
+\begindesc
+\cts vadjust {\rqbraces{\<vertical mode material>}}
+\explain
+This command inserts the specified \<vertical mode material> just after the
+output line containing the position where the command occurs.
+^^{vertical lists//inserting in paragraphs}
+You can use it, for instance, to cause a page eject or to insert extra
+space after a certain line.
+
+\example
+Some of these words are \vadjust{\kern8pt\hrule} to be
+found above the line and others are to be found below it.
+|
+\produces
+Some of these words are \vadjust{\kern8pt
+\hbox to \hsize{\hfil\vbox{\advance\hsize by -\parindent
+\hrule width \hsize}}}
+to be found above the line and others are to be found below it.
+\endexample
+\enddesc
+
+\see |\parindent| (\xref\parindent),
+|\parskip| (\xref\parskip), |\everypar| (\xref\everypar).
+\eix^^{line breaks//and paragraph shape}
+\eix^^{paragraphs//shaping}
+
+%==========================================================================
+\section {Line breaks}
+
+%==========================================================================
+\subsection {Encouraging or discouraging line breaks}
+
+\begindesc
+\bix^^{line breaks}
+\bix^^{line breaks//encouraging or discouraging}
+\ctspecial break {} \xrdef{hbreak}
+\explain
+This command forces a line break.
+Unless you do something to fill out the line, you're likely to
+get an ``underfull hbox'' complaint.
+|\break| can also be used in vertical mode.
+\example
+Fill out this line\hfil\break and start another one.\par
+% Use \hfil here to fill out the line.
+This line is underfull---we ended it\break prematurely.
+% This line causes an `underfull hbox' complaint.
+|
+\produces
+\hbadness = 10000 % avoid hbadness message
+Fill out this line\hfil\break and start another one.\par
+% Use \hfil here to fill out the line.
+This line is underfull---we ended it\break prematurely.
+% This line causes an `underfull hbox' complaint.
+\endexample\enddesc
+
+\begindesc
+\ctspecial nobreak {} \xrdef{hnobreak}
+\explain
+This command prevents a line break where it
+otherwise might occur.
+|\nobreak| can also be used in vertical mode.
+\example
+Sometimes you'll encounter a situation where
+a certain space\nobreak\qquad must not get lost.
+|
+\produces
+Sometimes you'll encounter a situation where
+a certain space\nobreak\qquad must not get lost.
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial allowbreak {} \xrdef{hallowbreak}
+\explain
+This command tells \TeX\ to
+allow a line break where one could not ordinarily occur.
+It's most often useful within a math formula, since \TeX\
+is reluctant to break lines there. ^^{line breaks//in math formulas}
+|\allowbreak| can also be used in vertical mode.
+\example
+Under most circumstances we can state with some confidence
+that $2+2\allowbreak=4$, but skeptics may disagree.
+\par For such moronic automata, it is not difficult to
+analyze the input/\allowbreak output behavior in the limit.
+|
+\produces
+Under most circumstances we can state with some confidence
+that $2+2\allowbreak=4$, but skeptics may disagree.
+\par For such moronic automata, it is not difficult to
+analyze the input/\allowbreak output behavior in the limit.
+\endexample\enddesc
+
+\begindesc
+\ctspecial penalty {\<number>} \xrdef{hpenalty}
+\explain
+This command produces a \minref{penalty} item.
+The penalty item makes \TeX\ more or less willing to break a line
+at the point where that item occurs.
+A negative penalty, i.e., a bonus, encourages a line break;
+a positive penalty discourages a line break.
+A penalty of $10000$ or more prevents a break altogether,
+while a penalty of $-10000$ or less forces a break.
+|\penalty| can also be used in vertical mode.
+\secondprinting{\vfill\eject}
+\example
+\def\break{\penalty -10000 } % as in plain TeX
+\def\nobreak{\penalty 10000 } % as in plain TeX
+\def\allowbreak{\penalty 0 } % as in plain TeX
+|
+\endexample
+\enddesc
+
+\secondprinting{\vglue-\baselineskip\vskip0pt}
+\begindesc
+\cts obeylines {}
+\explain
+\TeX\ normally treats an end of line as a space.
+|\obeylines| instructs \TeX\ to treat each end of line as
+an end of paragraph, thus forcing a line break.
+|\obeylines| is often useful when you're typesetting verse or
+computer programs.
+^^{verse, typesetting}^^{poetry, typesetting}^^{computer programs, typesetting}
+If any of your lines are longer than the effective line length
+(|\hsize|\tminus|\parindent|),
+however,
+you may get an extra line break within those lines.
+
+Because \TeX\ inserts the |\parskip| glue (\xref\parskip)
+between lines controlled by |\obeylines| (since it thinks each line is a
+paragraph), you should normally set |\parskip| to zero when you're using
+|\obeylines|.
+
+You can use the ^|\obeyspaces| command (\xref{\obeyspaces}) to get
+\TeX\ to take spaces within a line literally. |\obeylines| and |\obeyspaces|
+are often used together.
+\example
+\obeylines
+``Beware the Jabberwock, my son!!
+\quad The jaws that bite, the claws that catch!!
+Beware the Jubjub bird, and shun
+\quad The frumious Bandersnatch!!''
+|
+\produces
+\obeylines
+``Beware the Jabberwock, my son!
+\quad The jaws that bite, the claws that catch!
+Beware the Jubjub bird, and shun
+\quad The frumious Bandersnatch!''
+\endexample
+\enddesc
+
+\secondprinting{\vglue-\baselineskip\vskip0pt}
+
+\begindesc
+\easy\cts slash {}
+\explain
+This command produces a ^{solidus} (/) and also tells \TeX\ that it can
+break the line after the solidus, if necessary.
+\example
+Her oldest cat, while apparently friendly to most people,
+had a Jekyll\slash Hyde personality when it came to mice.
+|
+\produces
+Her oldest cat, while apparently friendly to most people,
+had a Jekyll\slash Hyde personality when it came to mice.
+\endexample
+\eix^^{line breaks//encouraging or discouraging}
+\enddesc
+
+\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+\subsection {Line breaking parameters}
+
+\begindesc
+\bix^^{line breaks//parameters affecting}
+%
+\cts pretolerance {\param{number}}
+\cts tolerance {\param{number}}
+\explain
+These parameters determine the \minref{badness} that \TeX\ will tolerate
+on each line when it is choosing line breaks
+for a paragraph.
+The badness is a measure of how far the interword spacing deviates from
+the ideal.
+|\pretolerance| specifies the tolerable badness for
+line breaks without hyphenation;
+|\tolerance| specifies the tolerable badness for line breaks with
+hyphenation.
+The tolerable badness can be exceeded in either of two ways:
+a line is too tight (the interword spaces are too
+small) or it is too loose (the interword spaces are too big).
+
+\ulist
+\li If \TeX\ must set a line too loosely, it
+complains about an ``underfull hbox''.
+\li If \TeX\ must set a line too rightly,
+it lets the line run past the right margin and
+complains about an ``overfull \minref{hbox}''.
+\endulist
+
+\noindent \TeX\ chooses line breaks in the following steps:
+\olist
+\li It attempts to choose line breaks without hyphenating.
+If none of the
+resulting lines have a badness exceeding |\pretolerance|, the
+line breaks are acceptable and the paragraph can now be set.
+\li Otherwise, it tries another set of line breaks, this
+time allowing hyphenation. If none of the resulting lines have a badness
+exceeding |\tolerance|, the new set of line breaks is
+acceptable and the paragraph can now be set.
+\li Otherwise, it adds ^|\emergencystretch| (see below) to the stretch
+of each line and tries again.
+\li If none of these attempts have produced an acceptable
+set of line breaks,
+it sets the paragraph with one or more overfull hboxes
+and complains about them.
+\endolist
+
+\PlainTeX\ sets |\tolerance| to $200$ and |\pretolerance| to $100$.
+If you set |\tolerance| to $10000$, \TeX\
+becomes infinitely tolerant and accepts any spacing, no matter how bad
+(unless it encounters a word that won't fit on a line, even with
+hyphenation). Thus by changing |\tolerance| you can avoid
+overfull and underfull hboxes, but at the cost of making the spacing worse.
+By making |\pretolerance| larger you can get \TeX\ to avoid hyphenation
+(and also run faster),
+again at the cost of possibly worse spacing.
+If you set |\pretolerance| to $-1$,
+\TeX\ will not even try to set the paragraph without hyphenation.
+
+The ^|\hbadness| parameter (\xref \hbadness) determines the level of badness
+that \TeX\ will tolerate before it complains, but |\hbadness| does not affect
+the way that \TeX\ typesets your document.
+The ^|\hfuzz| parameter (\xref \hfuzz) determines the amount that
+an hbox can exceed its specified width before \TeX\ considers it to be
+erroneous.
+\enddesc
+
+\begindesc
+\cts emergencystretch {\param{dimen}}
+\explain
+By setting this parameter to be greater than zero,
+you can make it easier for \TeX\
+to typeset your document without generating overfull hboxes.
+^^{overfull boxes}
+This is a better alternative than setting |\tolerance=10000|,
+since that tends to produce really ugly lines.
+If \TeX\ can't typeset a paragraph without exceeding ^|\tolerance|,
+it will try again, adding |\emergencystretch| to the stretch of each
+line.
+The effect of the change is to scale down the badness of each
+line, enabling \TeX\ to make spaces wider than they would otherwise be
+and thus choose line breaks that are as
+good as possible under the circumstances.
+\enddesc
+
+\begindesc
+\cts looseness {\param{number}}
+\explain
+\minrefs{line break}
+This parameter gives you a way
+to change the total number of lines in a paragraph from what they
+optimally would be.
+|\looseness| is so named because it's a
+measure of how loose the paragraph is, i.e., how much extra space there is in
+it.
+
+Normally, |\looseness| is $0$ and
+\TeX\ chooses line breaks in its usual way. But if
+|\looseness| is, say, $3$, \TeX\ does the following:
+\olist
+\li It chooses line breaks normally, resulting in a paragraph of $n$ lines.
+\li It discards these line breaks and
+tries to find a new set of line breaks that gives the paragraph $n+3$ lines.
+(Without the previous step, \TeX\ wouldn't know the value of $n$.)
+\li If the previous attempt results in lines whose badness exceeds
+|\tol!-er!-ance|,
+^^|\tolerance|
+it tries to get $n+2$ lines---and if that also fails,
+$n+1$ lines, and finally $n$ lines again.
+\endolist
+\noindent
+Similarly, if looseness is $-n$,
+\TeX\ attempts to set the paragraph with $n$
+fewer lines than normal.
+The easiest way for \TeX\ to make a paragraph one line longer is to put
+a single word on the excess line. You can prevent this by
+putting a tie (\xref{@not}) between the last two words of the paragraph.
+
+Setting |\looseness| is the best way to force a paragraph
+to occupy a given number of lines.
+Setting it to a negative value is useful when you're trying to
+increase the amount of text you can fit on a page.
+Similarly, setting it to a positive
+value is useful when you're trying to
+decrease the amount of text on a page.
+
+\TeX\ sets |\looseness| to $0$ when it ends a paragraph, after breaking
+the paragraph into lines.
+If you want to change the looseness of several paragraphs, you must do it
+individually for each one or put the change into |\everypar|
+\ctsref\everypar.
+^^|\everypar//for setting \b\tt\\looseness\e|
+\enddesc
+
+\begindesc
+\cts linepenalty {\param{number}}
+\explain
+\minrefs{line break}
+This parameter specifies \minref{demerits} that \TeX\ assesses for each line
+break when it is breaking a paragraph into lines.
+The penalty is independent of where the line break occurs.
+Increasing the value
+of this parameter causes \TeX\ to try harder to set a paragraph with a
+minimum number of lines, even at the cost of other aesthetic considerations
+such as avoiding overly tight interword spacing.
+Demerits are in units of \minref{badness} squared, so
+you need to assign a rather large value to this parameter (in the
+thousands) for it to have any effect.
+\PlainTeX\ sets |\linepenalty| to $10$.
+\enddesc
+
+\begindesc
+\cts adjdemerits {\param{number}}
+\explain
+\minrefs{line break}
+^^{hyphenation//penalties for}
+{\tighten
+This parameter specifies additional \minref{demerits} that \TeX\ attaches to a
+breakpoint between two adjacent lines that are
+``visually incompatible''.
+Such a pair of lines makes a paragraph appear uneven.
+Incompatibility is evaluated in terms of the tightness or looseness
+of lines:
+}
+\olist\compact
+\li A line is tight if its \minref{glue} needs to shrink by at least $50\%$.
+\li A line is decent if its badness is $12$ or less.
+\li A line is loose if its glue needs to stretch by more than $50\%$.
+\li A line is very loose if its glue needs to stretch so much
+that its badness exceeds $100$.
+\endolist
+Two adjacent lines are visually incompatible
+if their categories are not adjacent, e.g., a tight line is next to a loose one
+or a decent line is next to a very loose one.
+
+Demerits are in units of \minref{badness} squared, so
+you need to assign a rather large value to this parameter (in the
+thousands) for it to have any effect.
+\PlainTeX\ sets |\adjdemerits| to~$10000$.
+\enddesc
+
+\begindesc
+\bix^^{hyphenation//penalties for}
+\cts exhyphenpenalty {\param{number}}
+\explain
+\minrefs{line break}
+This parameter specifies the \minref{penalty} that \TeX\ attaches to a
+breakpoint at an explicit hyphen such as the one in
+``helter-skelter''. Increasing this parameter has the effect of discouraging
+\TeX\ from ending a line at an explicit hyphen.
+\PlainTeX\ sets |\exhyphenpenalty| to $50$.
+\enddesc
+
+\begindesc
+\cts hyphenpenalty {\param{number}}
+\explain
+\minrefs{line break}
+This parameter specifies the \minref{penalty} that \TeX\ attaches to a
+breakpoint at an implicit hyphen.
+Implicit hyphens can come from \TeX's hyphenation dictionary or
+from ^{discretionary hyphens} that you've inserted with |\-|~(\xref{\@minus}).
+^^|-//leads to {\tt\\hyphenpenalty}|
+Increasing this parameter has the effect of discouraging
+\TeX\ from hyphenating words.
+\PlainTeX\ sets |\hyphenpenalty| to $50$.
+\enddesc
+
+\begindesc
+\cts doublehyphendemerits {\param{number}}
+\explain
+\minrefs{line break}
+{\tighten
+This parameter specifies additional \minref{demerits} that \TeX\
+attaches to a breakpoint when that breakpoint leads to
+two consecutive lines that end in a hyphen.
+Increasing the value of this parameter has the effect of discouraging
+\TeX\ from hyphenating two lines in a row.
+Demerits are in units of \minref{badness} squared, so
+you need to assign a rather large value to this parameter (in the
+thousands) for it to have any effect.
+\PlainTeX\ sets |\doublehyphendemerits| to $10000$.
+}
+\enddesc
+
+\begindesc
+\cts finalhyphendemerits {\param{number}}
+\explain
+\minrefs{line break}
+{\tighten
+This parameter specifies additional \minref{demerits} that \TeX\
+attaches to a breakpoint that causes
+the next to last line of a paragraph to end with a hyphen.
+Such a hyphen is generally considered to be unaesthetic
+because of the possible blank space from a short last line beneath it.
+Increasing the value of this parameter has the effect of discouraging
+\TeX\ from ending the next to the last line with a hyphen.
+Demerits are in units of \minref{badness} squared, so
+you need to assign a rather large value to this parameter (in the
+thousands) for it to have any effect.
+\PlainTeX\ sets |\finalhyphendemerits| to $5000$.
+}
+\eix^^{hyphenation//penalties for}
+\enddesc
+
+\begindesc
+\cts binoppenalty {\param{number}}
+\explain
+^^{operators}
+This parameter specifies the penalty for breaking a math formula
+after a binary operator when the formula appears in a paragraph.
+\PlainTeX\ sets |\binoppenalty| to $700$.
+\enddesc
+
+\begindesc
+\cts relpenalty {\param{number}}
+\explain
+^^{relations}
+This parameter specifies the penalty for breaking a math formula
+after a relation when the formula appears in a paragraph.
+\PlainTeX\ sets |\rel!-penal!-ty| to~$500$.
+
+\eix^^{line breaks//parameters affecting}
+\enddesc
+
+%==========================================================================
+\subsection {Hyphenation}
+
+\begindesc
+\bix^^{hyphenation}
+%
+\easy\ctspecial - \ctsxrdef{@minus}
+\explain
+The |\-| command inserts a ``discretionary hyphen''
+^^{discretionary hyphens}
+into a word.
+The discretionary hyphen allows \TeX\ to hyphenate the word at that
+place. \TeX\ isn't obliged to hyphenate there---it does so
+only if it needs to. This command is useful when a word
+that occurs in one or two places in your document
+needs to be hyphenated,
+but \TeX\ can't find an appropriate hyphenation point on its own.
+\example
+Alice was exceedingly reluctant to shake hands first
+with either Twee\-dle\-dum or Twee\-dle\-dee, for
+fear of hurting the other one's feelings.
+|
+\produces
+Alice was exceedingly reluctant to shake hands first
+with either Twee\-dle\-dum or Twee\-dle\-dee, for
+fear of hurting the other one's feelings.
+\endexample
+\enddesc
+
+\begindesc
+\cts discretionary {\rqbraces{\<pre-break text>}
+ \rqbraces{\<post-break text>}
+ \rqbraces{\<no-break text>}}
+\explain
+\minrefs{line break}
+^^{hyphenation}
+This command specifies a ``discretionary break'', namely,
+a place where \TeX\ can break a line.
+It also tells \TeX\ what text to put on either side of the break.
+\ulist
+\li If \TeX\ does not break there, it uses the \<no-break text>.
+\li If \TeX\ does break there, it puts the \<pre-break text> just before
+the break and the \<post-break text> just after the break.
+\endulist
+\noindent
+Just as with |\-|,
+\TeX\ isn't obligated to break a line at a discretionary break.
+In fact, |\-| is ordinarily equivalent to |\discretionary!allowbreak{-}{}{}|.
+
+\TeX\ sometimes inserts discretionary breaks on its own.
+For example, it inserts |\discretionary!allowbreak{}{}{}| after
+an explicit hyphen or dash.
+
+{\hyphenchar\tentt=-1 % needed to avoid weirdnesses
+\example
+% An ordinary discretionary hyphen (equivalent to \-):
+\discretionary{-}{}{}
+% A place where TeX can break a line, but should not
+% insert a space if the line isn't broken there, e.g.,
+% after a dash:
+\discretionary{}{}{}
+% Accounts for German usage: `flicken', but `flik-
+% ken':
+German ``fli\discretionary{k-}{k}{ck}en''
+|
+^^{hyphenation//German}
+\endexample}
+
+\enddesc
+
+\begindesc
+\cts hyphenation {\rqbraces{\<word>\thinspace\vs\ $\ldots$\ \vs
+ \thinspace\<word>}}
+\explain
+\TeX\ keeps a dictionary of exceptions to its ^{hyphenation} rules.
+Each dictionary entry indicates how a particular word should
+be hyphenated.
+The |\hyphenation| command adds words to the dictionary.
+Its argument is a sequence of words separated by blanks.
+Uppercase and lowercase letters are equivalent.
+The hyphens in each word indicate the places
+where \TeX\ can hyphenate that word.
+A word with no hyphens in it will never be hyphenated.
+However, you can still override the hyphenation dictionary by
+using |\-| in a particular occurrence of a word.
+You need to provide all the grammatical forms of a word
+that you want \TeX\ to handle, e.g., both the singular and the plural.
+
+\example
+\hyphenation{Gry-phon my-co-phagy}
+\hyphenation{man-u-script man-u-scripts piz-za}
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts uchyph {\param{number}}
+\explain
+A positive value of |\uchyph| (uppercase hyphenation)
+permits hyphenation of words, such as proper names,
+that start with a capital letter.
+A zero or negative
+value inhibits such hyphenation. \PlainTeX\ sets |\uchyph| to $1$,
+so \TeX\ normally tries to hyphenate words that start with a capital letter.
+\enddesc
+
+\begindesc
+\cts showhyphens {\rqbraces{\<word>\thinspace\vs\ $\ldots$\ \vs
+ \thinspace\<word>}}
+\explain
+This command isn't normally used in documents, but you can use it at
+your terminal to see how \TeX\ would hyphenate some random set of words.
+The words, with hyphenations indicated, appear both in the log and at
+your terminal. You'll get a complaint about an underfull hbox---just
+ignore it.
+\example
+\showhyphens{threshold quizzical draughts argumentative}
+|
+\logproduces
+Underfull \hbox (badness 10000) detected at line 0
+[] \tenrm thresh-old quizzi-cal draughts ar-gu-men-ta-tive
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts language {\param{number}}
+\explain
+Different languages have different sets of hyphenation rules.
+This parameter determines the set of ^{hyphenation rules} that \TeX\ uses.
+By changing |\language| you can get \TeX\
+to hyphenate portions of text or entire documents according to the
+hyphenation rules appropriate to a particular language.
+^^{European languages}
+Your ^{local information} about \TeX\ will tell you if any
+additional sets of hyphenation rules are available (besides the
+ones for English)
+and what the appropriate values of |\language| are.
+The default value of |\language| is $0$.
+
+\TeX\ sets the current language to $0$ at the start of every paragraph,
+and compares |\language| to the current language whenever it adds
+a character to the current paragraph.
+If they are not the same, \TeX\ adds a ^{whatsit} indicating the
+language change.
+This whatsit is the clue in later processing that the language rules
+should change.
+\enddesc
+
+\begindesc
+\cts setlanguage {\<number>}
+\explain
+This command sets the current language to \<number>
+by inserting the same whatsit that you'd get by changing ^|\language|.
+However, it does not change the value of |\language|.
+\enddesc
+
+\begindesc
+\cts lefthyphenmin {\param{number}}
+\cts righthyphenmin {\param{number}}
+\explain
+These parameters specify the smallest word fragments that \TeX\ allows
+at the left and at the right end of a hyphenated word.
+\PlainTeX\ defaults them to $2$ and $3$ respectively;
+these are the recommended values for English.
+\enddesc
+
+\begindesc
+\bix^^{fonts//hyphenation characters for}
+\cts hyphenchar {\<font>\param{number}}
+\explain
+\TeX\ doesn't necessarily use the `-' character at hyphenation points.
+Instead, it uses the |\hyphenchar| of the current font, which is usually
+`-' but need not be. If a font has a negative |\hyphenchar| value,
+\TeX\ won't hyphenate words in that font.
+
+Note that \<font> is a control sequence
+that names a font, not a \<font\-name> that names font files.
+Beware:
+an assignment to |\hyphenchar| is \emph{not} undone at the end
+of a group.
+If you want to change |\hyphenchar| locally, you'll need to
+save and restore its original value explicitly.
+
+\example
+\hyphenchar\tenrm = `-
+ % Set hyphenation for tenrm font to `-'.
+\hyphenchar\tentt = -1
+ % Don't hyphenate words in font tentt.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts defaulthyphenchar {\param{number}}
+\explain
+When \TeX\ reads the metrics file
+^^{metrics file//default hyphen in}
+for a font in response to a
+^|\font| command, it sets the font's ^|\hyphenchar| to
+|\default!-hyphen!-char|.
+If the value of |\default!-hyphen!-char| is
+not in the range $0$--$255$ when you load a font,
+\TeX\ won't hyphenate any words in that font unless you
+override the decision by setting the font's |\hyphenchar| later on.
+\PlainTeX\ sets |\default!-hyphen!-char| to $45$, the \ascii\ code
+for `|-|'.
+\example
+\defaulthyphenchar = `-
+ % Assume `-' is the hyphen, unless overridden.
+\defaulthyphenchar = -1
+ % Don't hyphenate, unless overridden.
+|
+\endexample
+
+\eix^^{fonts//hyphenation characters for}
+\enddesc
+
+\see |\pretolerance| (\xref \pretolerance).
+\eix^^{hyphenation}
+\eix^^{line breaks}
+
+%==========================================================================
+\section {Section headings, lists, and theorems}
+
+\begindesc
+^^{section headings}
+\easy\ctspecial beginsection {\<argument>\thinspace{\bt\\par}}
+ \ctsxrdef{@beginsection}
+\explain
+You can use this command to begin a major subdivision of your document.
+\<argument> is intended to serve as a section title.
+|\beginsection| surrounds \<argument>
+by extra vertical space and sets it in
+boldface, left-justified.
+You can produce the |\par| that ends \<argument> with a blank line.
+\let\message = \gobble % Don't bother to tell us about Pig and Pepper.
+\example
+$\ldots$ till she had brought herself down to nine
+inches high.
+
+\beginsection Section 6. Pig and Pepper
+
+For a minute or two she stood looking at the house $\ldots$
+|
+\produces
+$\ldots$ till she had brought herself down to nine
+inches high.
+
+\beginsection Section 6. Pig and Pepper
+
+For a minute or two she stood looking at the house $\ldots$
+\endexample
+\enddesc
+
+\begindesc
+\cts item {\<argument>}
+\cts itemitem {\<argument>}
+\explain
+^^{itemized lists}
+These commands are useful for creating ^{itemized lists}. The entire paragraph
+following \<argument> is indented by |\parindent|
+^^|\parindent//indentation for itemized lists|
+(for |\item|) or by |2\parindent| (for |\itemitem|).
+(See \xrefpg{\parindent} for an explanation of |\parindent|.)
+Then \<argument>,
+followed by an en space, is placed just to
+the left of the text of the
+first line of the paragraph so that it falls within the paragraph indentation
+as specified by |\parindent|.
+
+If you want to include more than one
+paragraph in an item, put |\item{}| in front of the additional paragraphs.
+\example
+{\parindent = 18pt
+\noindent Here is what we require:
+\item{1.}Three eggs in their shells,
+but with the yolks removed.
+\item{2.}Two separate glass cups containing:
+\itemitem{(a)}One-half cup {\it used} motor oil.
+\itemitem{(b)}One cup port wine, preferably French.
+\item{3.}Juice and skin of one turnip.}
+|
+\produces
+{\parindent = 18pt
+\noindent Here is what we require:
+\item{1.}Three eggs in their shells,
+but with the yolks removed.
+\item{2.}Two separate glass cups containing:
+\itemitem{(a)}One-half cup {\it used} motor oil.
+\itemitem{(b)}One cup port wine, preferably French.
+\item{3.}Juice and skin of one turnip.}
+\endexample
+\enddesc
+
+\begindesc
+\easy\ctspecial proclaim {\<argument>{\tt.}\vs\thinspace
+ \<general text>\thinspace{\bt\\par}}
+ \ctsxrdef{@proclaim}
+\explain
+^^{theorems}
+^^{lemmas}
+^^{hypotheses}
+This command ``proclaims'' a theorem, lemma, hypothesis, etc.
+It sets \<argument> in boldface type and the following paragraph in
+italics. \<arg\-u\-ment> must be followed by a period and a space token,
+which serve
+to set off \<argument> from \<general text>.
+\<general text> consists of the text up to the next paragraph
+boundary, except that you can include multiple paragraphs by putting them
+within braces and ending a paragraph after the closing right brace.
+\example
+\proclaim Theorem 1.
+What I say is not to be believed.
+
+\proclaim Corollary 1. Theorem 1 is false.\par
+|
+\produces
+\proclaim Theorem 1.
+What I say is not to be believed.
+
+\proclaim Corollary 1. Theorem 1 is false.\par
+\endexample
+\enddesc
+
+\enddescriptions
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/preface.tex b/Master/texmf-dist/doc/plain/impatient/preface.tex
new file mode 100644
index 00000000000..b48193d749a
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/preface.tex
@@ -0,0 +1,157 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\frontchapter{Preface}
+
+{\tighten
+Donald Knuth's \TeX, a computerized typesetting system,
+provides nearly everything
+needed for high-quality typesetting of mathematical
+notations as well as of ordinary text.
+It is particularly notable for its flexibility, its superb hyphenation, and its
+ability to choose aesthetically satisfying line breaks.
+Because
+of its extraordinary capabilities, \TeX\ has become the leading typesetting
+system for mathematics, science, and engineering and has been adopted as
+a standard by the American Mathematical Society. A companion program,
+^{\Metafont},
+can construct arbitrary letterforms including, in particular, any symbols that
+might be needed in mathematics.
+Both \TeX\ and \Metafont\ are widely available within the
+scientific and engineering community and have been implemented on a
+variety of computers.
+\TeX\ isn't perfect---it lacks integrated support for graphics, and
+some effects such as ^{revision bars} are very difficult to produce---%
+but these drawbacks are far outweighed by its advantages.
+\par}
+
+\thisbook\/ is intended to serve scientists, mathematicians, and
+technical typists for whom \TeX\ is a useful tool rather than a primary
+interest, as well as computer people who have a strong interest in \TeX\
+for its own sake. We also intend it to serve both newcomers to \TeX\
+and those who are already familiar with \TeX. We assume that our
+readers are comfortable working with computers and that they want to get
+the information they need as quickly as possible. Our aim is to provide
+that information clearly, concisely, and accessibly.
+
+{\tighten This book therefore provides a bright searchlight, a stout
+walking-stick, and detailed maps for exploring and using \TeX. It will
+enable you to master \TeX\ at a rapid pace through inquiry and
+experiment, but it will not lead you by the hand through the entire
+\TeX\ system. Our approach is to provide you with a handbook for \TeX\
+that makes it easy for you to retrieve whatever information you need.
+We explain both the full repertoire of \TeX\ commands and the concepts
+that underlie them. You won't have to waste your time plowing through
+material that you neither need nor want. \par}
+
+In the early sections we also provide you with enough orientation so
+that you can get started if you haven't used \TeX\ before. We assume
+that you have access to a \TeX\ implementation and that you know how to
+use a text editor, but we don't assume much else about your background.
+Because this book is organized for ready reference, you'll continue to
+find it useful as you become more familiar with \TeX. If you prefer to
+start with a carefully guided tour, we recommend that you first read
+Knuth's ^{\texbook} (see \xrefpg{resources} for a citation), passing
+over the ``dangerous bend'' sections, and then return to this book for
+additional information and for reference as you start to use \TeX. (The
+dangerous bend sections of \texbook\ cover advanced topics.)
+
+The structure of \TeX\ is really quite simple: a \TeX\ input document
+consists of ordinary text interspersed with commands that give \TeX\
+further instructions on how to typeset your document. Things like math
+formulas contain many such commands, while expository text contains
+relatively few of them.
+
+The time-consuming part of learning \TeX\ is learning the commands and
+the concepts underlying their descriptions. Thus we've devoted most of
+the book to defining and explaining the commands and the concepts.
+We've also provided examples showing \TeX\ typeset output and the
+corresponding input, hints on solving common problems, information about
+error messages, and so forth. We've supplied extensive cross-references
+by page number and a complete index.
+
+We've arranged the descriptions of the commands so that you can look
+them up either by function or alphabetically. The functional
+arrangement is what you need when you know what you want to do but you
+don't know what command might do it for you. The alphabetical arrangement
+is what you need when you know the name of a command but you don't know exactly
+what it does.
+
+We must caution you that we haven't tried to provide a complete
+definition of \TeX. For that you'll need ^{\texbook}, which is the
+original source of information on \TeX. \texbook\ also contains a lot
+of information about the fine points of using \TeX, particularly on the
+subject of composing math formulas. We recommend it highly.
+
+In 1989 Knuth made a major revision to \TeX\ in order to adapt it to
+$8$-bit character sets, needed to support typesetting for languages
+other than English. The description of \TeX\ in this book incorporates
+that revision (see \xref{newtex}).
+
+{\tighten You may be using a specialized form of \TeX\ such as ^{\LaTeX}
+or ^{\AMSTeX} (see \xref{resources}). Although these specialized forms
+are self-contained, you may still want to use some of the facilities of
+\TeX\ itself now and then in order to gain the finer control that only
+\TeX\ can provide. This book can help you to learn what you need to
+know about those facilities without having to learn about a lot of other
+things that you aren't interested~in. \par}
+
+Two of us (K.A.H. and K.B.) were generously supported by the
+University of Massachusetts at Boston during the preparation of this
+book. In particular, Rick Martin kept the machines running, and
+Robert~A. Morris and Betty O'Neil made the machines available. Paul
+English of Interleaf helped us produce proofs for a cover design.
+
+We wish to thank the reviewers of our book: Richard Furuta of the
+University of Maryland, John Gourlay of Arbortext, Inc., Jill Carter
+Knuth, and Richard Rubinstein of the Digital Equipment Corporation. We
+took to heart their perceptive and unsparing criticisms of the original
+manuscript, and the book has benefitted greatly from their insights.
+
+We are particularly grateful to our editor, Peter Gordon of
+Addison-Wesley. This book was really his idea, and throughout its
+development he has been a source of encouragement and valuable
+advice. We thank his assistant at Addison-Wesley, Helen Goldstein, for
+her help in so many ways, and Loren Stevens of Addison-Wesley for her
+skill and energy in shepherding this book through the production
+process. Were it not for our copyeditor, Janice Byer, a number of small
+but irritating errors would have remained in this book. We appreciate
+her sensitivity and taste in correcting what needed to be corrected
+while leaving what did not need to be corrected alone. Finally, we wish
+to thank Jim Byrnes of Prometheus Inc. for making this collaboration
+possible by introducing us to each other.
+\vskip1.5\baselineskip
+
+\line{\it Deerfield, Massachusetts\hfil\rm P.\thinspace W.\thinspace A.}
+\line{\it Manomet, Massachusetts\hfil\rm K.\thinspace A.\thinspace H.,
+ K.\thinspace B.}
+
+\vskip2\baselineskip
+
+\noindent {\bf Preface to the free edition:} This book was originally
+published in 1990 by Addison-Wesley. In 2003, it was declared out of
+print and Addison-Wesley generously reverted all rights to us, the
+authors. We decided to make the book available in source form, under
+the GNU Free Documentation License, as our way of supporting the
+community which supported the book in the first place. See the
+copyright page for more information on the licensing.
+
+The illustrations which were part of the original book are not included
+here. Some of the fonts have also been changed; now, only
+freely-available fonts are used. We left the cropmarks and galley
+information on the pages, to serve as identification. An old version of
+Eplain was used to produce it; see the {\tt eplain.tex} file for
+details.
+
+We don't plan to make any further changes or additions to the book
+ourselves, except for correction of any outright errors reported to us,
+and perhaps inclusion of the illustrations.
+
+Our distribution of the book is at {\tt
+ftp://tug.org/tex/impatient}. You can reach us by email at {\tt
+impatient@tug.org}.
+
+\pagebreak
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/read1st.tex b/Master/texmf-dist/doc/plain/impatient/read1st.tex
new file mode 100644
index 00000000000..fddaed637e6
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/read1st.tex
@@ -0,0 +1,45 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\frontchapter{Read this first}
+
+% We don't need anything but \rm here.
+{\font\rm = cmr10 scaled \magstephalf \baselineskip = 1.1\baselineskip
+If you're new to \TeX:
+\ulist
+\li Read Sections \chapternum{usebook}--\chapternum{usingtex} first.
+\li Look at the examples in \chapterref{examples}
+for things that resemble what you want to do.
+Look up any related commands in ``Capsule summary of commands'',
+\chapterref{capsule}.
+Use the page references there to find the more complete descriptions of
+those commands and others that are similar.
+\li Look up unfamiliar words in ``Concepts'', \chapterref{concepts},
+using the list on the back cover of the book to find the
+explanation quickly.
+\li Experiment and explore.
+\endulist
+\bigskip
+\noindent
+If you're already familiar with \TeX, or if you're editing or
+otherwise modifying a \TeX\ document that someone else has created:
+\ulist
+\li For a quick reminder of what a command does, look in
+\chapterref{capsule}, ``Capsule summary of commands''. It's
+alphabetized and has page references for more complete descriptions of
+the commands.
+\li Use the functional groupings of command descriptions
+to find those related to a
+particular command that you already know, or to find a command that serves a
+particular purpose.
+\li Use \chapterref{concepts}, ``Concepts'', to get an explanation of
+any concept that you don't understand, or need to understand more
+precisely, or have forgotten.
+Use the list on the inside back cover of the book to find a concept quickly.
+\endulist
+}
+\pagebreak
+
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/tips.tex b/Master/texmf-dist/doc/plain/impatient/tips.tex
new file mode 100644
index 00000000000..b55408f71d4
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/tips.tex
@@ -0,0 +1,1011 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter{Tips and techniques}
+
+\chapterdef{tips}
+
+\TeX\ is a complex program that occasionally works its will in
+mysterious ways. In this section we offer some tips on solving
+problems that you might encounter and explain some handy techniques.
+
+
+\section Correcting bad page breaks
+
+\bix^^{page breaks//bad}
+Sometimes \TeX\ breaks a page right in the middle of material that you
+want to keep together---for example,
+a section heading and the text that follows it,
+or a short list of related items. There are two ways to correct the
+situation:
+\ulist\compact
+\li You can force the material to be kept together.
+\li You can force a page break at a different place.
+\endulist
+
+The simplest way to force \TeX\ to keep material together on a page is
+to enclose the material in a vbox using the |\vbox| command \ctsref{\vbox}.
+^^|\vbox//fixing page breaks with|
+A vbox is ordinarily better than an hbox for this purpose because most
+often the material to be kept together,
+e.g., a sequence of paragraphs, will be vertical mode material.
+You should
+precede and follow the vbox by an implicit or explicit paragraph command
+(either a blank line or |\par|); otherwise
+\TeX\ may try to make the vbox part of an an adjacent paragraph.
+The vbox method has an important limitation:
+you can't apply it to portions of text smaller than a paragraph.
+
+You can sometimes keep the lines of a single paragraph together by enclosing
+the paragraph in a group and assigning |\interlinepenalty|
+\ctsref{\interlinepenalty}
+a value of $10000$ at the start of the group (or elsewhere before the
+end of the paragraph).
+This method causes \TeX\ to consider page breaks within that paragraph to be
+infinitely undesirable.
+However, if all the page breaks that \TeX\ can find are infinitely undesirable,
+it may break the page within the paragraph anyway.
+
+A ^|\nobreak| command (\xref{vnobreak})
+after the end of a paragraph prevents \TeX\
+from breaking the page at the following item
+(unless that item happens to be a penalty of less than $10000$).
+This is also the best way to prevent a page break after a heading,
+since a heading usually behaves like a paragraph.
+The |\nobreak| must follow the blank line or |\par| that ends
+the paragraph so that \TeX\ won't treat the |\nobreak| as part of the
+paragraph.
+For the |\nobreak| to be effective, it must also come before
+any legal breakpoint at the end of the paragraph.
+The glue that \TeX\ inserts
+before the next paragraph is such a breakpoint,
+and so is any vertical glue that you insert explicitly after a paragraph.
+Thus the |\nobreak| should usually be
+the very first thing after the end of the paragraph or heading.
+
+You can use the ^|\eject| command \ctsref{\eject}
+to force \TeX\ to break a page at a
+particular place. Within a paragraph, you can use the combination
+`|\vadjust{\vfill\eject}|'
+\ctsref{\vadjust}
+^^|\vadjust|
+to force a break after the next complete output line.
+The reason for preceding |\eject| by ^|\vfill|
+\ctsref{\vfill} is to
+get \TeX\ to fill out the page with blank space.
+However, using |\eject| to fix page break problems
+has a major disadvantage:
+if the page boundaries in your document change,
+the page breaks that you've inserted may no longer be where you want them.
+
+If you don't provide \TeX\ with a |\vfill| command to fill out the page
+after an |\eject|,
+\TeX\ redistributes the extra blank space as best it can and then usually
+complains that ``an
+underfull |\vbox| (badness $10000$) has occurred while |\output| is active.''
+You may encounter a similar problem with
+any of the methods mentioned above for enclosing
+material that you want to keep together.
+
+The ^|\filbreak| command \ctsref\filbreak{}
+\xrdef{filbreak}
+provides a way of keeping the lines of one or more paragraphs
+(or other vertical mode material) together on
+a page. If you enclose a paragraph in |\filbreak|s, \TeX\ will effectively
+ignore the |\filbreak|s if the paragraph fits on the current page and
+break the page before the first |\filbreak| if the paragraph doesn't fit.
+If you put |\filbreak|s around each paragraph in a sequence of paragraphs,
+like this:
+{\obeylines\display{
+{\tt \\filbreak}
+\<paragraph>
+{\tt \\filbreak}
+\<paragraph>
+{\tt \\filbreak}
+\leavevmode\indent\vdots
+\<paragraph>
+{\tt \\filbreak}
+}}
+\vfil\eject
+\noindent
+\TeX\ will keep the lines of each paragraph together on a page.
+If \TeX{} breaks a page at a |\filbreak|, it will fill the bottom of the
+page with blank space.
+
+Sometimes you can get \TeX\ to modify the length of a page by changing
+the ^|\looseness| parameter \ctsref\looseness{} for one or more paragraphs.
+Setting |\looseness| negative within a paragraph causes \TeX\ to try to squeeze
+the paragraph into fewer lines; setting it positive causes \TeX\ to try to
+expand the paragraph into more lines. The disadvantage of changing |\looseness|
+is that the interword spacing in the affected region won't be optimal.
+You can get further information about \TeX's attempted line breaks by
+setting |\tracingpages| (\xref\tracingpages) to $1$.
+
+
+\section Preserving the end of a page
+
+Sometimes you need to modify something on a single page and you want to avoid
+reprinting the entire document. If your modification doesn't
+change the page length too much, there's hope. You need to fix the end
+of the page so that it falls in the same place;
+the methods are similar to the ones for fixing a bad page break.
+
+If the original end of page came between paragraphs, you can
+force a page break at the same place
+using any of the methods we've described above. Otherwise,
+you must force \emph{both} a line break and a page break at a particular
+place. If the new page is shorter than the old one, the sequence:
+\csdisplay
+\vadjust{\vfill\eject}\break
+|
+^^|\vadjust|
+should do the trick.
+But if the new page is longer,
+the problem is far more difficult because \TeX\ has probably already
+squeezed the page as tightly as it can. Your only hopes in this case are
+to set ^|\looseness| \ctsref\looseness{} to a negative value,
+to shorten some of the vertical skips on the page, to add some shrink to
+^|\parskip| (\xref\parskip) if it was nonzero, or, as a last resort,
+to decrease |\baselineskip| \ctsref{\baselineskip} ever so slightly.
+^^|\baselineskip//and preserving end of page|
+
+\section Leaving space at the top of a page
+
+\null
+^^{vertical space//reserving at top of page}
+You can usually use the |\vskip| command \ctsref\vskip{}
+to leave vertical space on a page.
+That doesn't work at the top of a page, however, since
+\TeX\ discards glue, kerns, and penalties that occur just after a page break.
+^^{page breaks//glue at}
+Use the ^|\topglue| command \ctsref\topglue\ instead; it produces glue that
+never disappears.
+\eix^^{page breaks//bad}
+
+
+
+\section Correcting bad line breaks
+
+\null
+\bix^^{line breaks//bad}
+If \TeX\ breaks a line in the middle of material that you wanted to keep
+on a single line, there are several ways to correct the situation:
+\ulist\compact
+\li You can force a break in a nearby place with the
+|\break| command (\xref{hbreak}).
+^^|\break//correcting line breaks with|
+\li You can insert a tie (|~|) between two words
+(see \xref{@not}) to prevent a break between them.\ttidxref{~}
+\li You can tell \TeX\ about hyphenations that it wouldn't
+otherwise consider by
+inserting one or more discretionary hyphens in various words
+(see |\-|, \xref{\@minus}).
+\ctsidxref{-//in line breaking}
+^^{discretionary hyphens//bad line breaks, correcting with}
+\li You can enclose several words in an hbox using the ^|\hbox|
+command \ctsref{\hbox}.
+\endulist
+
+The disadvantage of all of these methods, except for inserting discretionary
+hyphens, is that they may make it impossible for \TeX\ to find a
+satisfactory set of line breaks. Should that happen, \TeX\ will
+set one or more underfull or overfull boxes and complain about it.
+^^{underfull boxes} ^^{overfull boxes}
+The hbox method has a further disadvantage: because \TeX\ sets an hbox
+as a single unit without considering its context, the interword space
+within the hbox may not be consistent with the interword space in the rest of
+the line.
+\eix^^{line breaks//bad}
+
+
+\section Correcting overfull or underfull boxes
+
+\null
+\bix^^{overfull boxes}
+\bix^^{underfull boxes}
+\bix^^{boxes//overfull}
+\bix^^{boxes//underfull}
+If \TeX\ complains about an overfull box, it means you've put
+more material into a box than that box has room for.
+Similarly, if \TeX\ complains about an underfull box, it means you
+haven't put enough material into the box. You can encounter
+these complaints under many different circumstances, so let's look at the more
+common ones:
+
+\ulist
+\li An overfull hbox that's a line of a paragraph indicates that the line was
+too long and that
+\TeX\ couldn't rearrange the paragraph
+to make the line shorter. If you set ^|\emergencystretch|
+\ctsref{\emergencystretch} to some nonzero
+value, that may cure the problem by allowing \TeX\ to put more space between
+words. Another solution is to set |\tolerance| \ctsref{\tolerance}
+to $10000$, but that's likely
+to yield lines with far too much space in them. Yet another solution is to
+insert a discretionary hyphen
+^^{discretionary hyphens//overfull boxes, correcting with}
+in a critical word that \TeX\ didn't know how to hyphenate.
+If all else fails, you might try rewording the paragraph.
+A solution that is rarely satisfactory is increasing ^|\hfuzz| \ctsref\hfuzz,
+allowing \TeX\ to construct lines that project beyond the right margin.
+
+\li An underfull hbox that's a line of a paragraph indicates that the line was
+too short and that \TeX\ couldn't rearrange the paragraph to
+make the line longer.
+\TeX\ will set such a line by stretching its interword spaces
+beyond their normal
+limits. Two of the cures for overfull lines mentioned above
+also apply to underfull lines:
+inserting discretionary hyphens and rewording the paragraph.
+Underfull lines
+won't trouble you if you're using ragged right formatting, which you can get
+with the ^|\raggedright| command \ctsref\raggedright.
+
+\li The complaint:
+\csdisplay
+Underfull \vbox (badness 10000) has occurred
+ while \output is active
+|
+indicates that \TeX\ didn't have enough material to fill up a page. The
+likely cause is that you've been using vboxes to keep material together
+and \TeX\ has encountered a vbox near the bottom of a page that wouldn't fit on
+that page.
+It has put the vbox on the next page, but in doing so has left too much
+empty space in the current page.
+In this case you'll either have to insert some more space
+elsewhere on the current page or break up the vbox into smaller parts.
+
+Another possible cause of this complaint is having a long paragraph
+that occupies an entire page without a break.
+Since \TeX\ won't ordinarily vary the spacing between lines,
+it may be unable to fill a gap at the bottom of the page
+amounting to a fraction of the line spacing.
+This can happen if |\vsize| \ctsref{\vsize}, the page length,
+is not an even multiple of |\baselineskip| \ctsref{\baselineskip},
+the space between consecutive
+baselines.
+
+Yet another cause of this complaint,
+similar to the previous one, is setting ^|\parskip| \ctsref{\parskip},
+the interparagraph glue, to a value that doesn't have any
+stretch or shrink. You can fix these last two problems by increasing ^|\vfuzz|
+\ctsref\vfuzz.
+
+\li The complaint
+\csdisplay
+Overfull \vbox (296.30745pt too high) has occurred
+ while \output is active
+|
+indicates that you constructed a vbox that was longer than the page. You'll
+just have to make it shorter.
+
+\li
+\bix^^|\hbox//overfull box from|
+\bix^^|\vbox//overfull box from|
+The only cures for an overfull hbox or vbox that you've constructed
+with the |\hbox| or |\vbox| commands
+(\pp\xrefn\hbox, \xrefn\vbox)
+are to take something out of the box, to insert some negative glue
+with ^|\hss| or ^|\vss| (\xref\hss), or to increase the size
+of the box.
+
+\li If you encounter an underfull hbox or vbox that you've constructed
+with |\hbox| or |\vbox|,
+you're usually best off to fill out the box with ^|\hfil|
+or ^|\vfil| (\xref\hfil).
+\eix^^|\hbox//overfull box from|
+\eix^^|\vbox//overfull box from|
+
+\endulist
+\eix^^{boxes//overfull}
+\eix^^{boxes//underfull}
+\eix^^{overfull boxes}
+\eix^^{underfull boxes}
+
+
+\section Recovering lost interword spaces
+
+\null
+^^{space//lost}
+^^{words run together}
+If you find that \TeX\ has run two words together, the likely cause is a
+control sequence that's absorbed the spaces after it.
+Put a ^{control space} (|\!visiblespace|) after the control
+sequence.
+
+
+\section Avoiding unwanted interword spaces
+
+\null
+\bix^^{space//unwanted}\xrdef{unwantedspace}
+If you get a space in your document where you don't want and don't
+expect one, the most likely cause, in our experience,
+is an end of line or a space following a brace.
+^^{braces//space after}
+(If you're doing fancy things with category codes,
+^^{category codes//cause of unwanted spaces}
+you've introduced lots of other likely causes.)
+\TeX\ ordinarily translates an end-of-line into a space,
+and it considers a space after a right or left brace to be significant.
+
+If the unwanted space is caused by a space after a brace within
+an input line, then remove that space.
+If the unwanted space is caused by a brace at the end of an input line,
+put a `|%|' immediately after the brace.
+{\recat!ttidxref[%//to eliminate unwanted spaces]]
+The `|%|' starts a comment, but this comment needn't
+have any text.
+
+A macro definition can also
+introduce unwanted spaces if you haven't written it
+carefully. If you're getting unwanted spaces when you call a macro, check
+its definition to be sure that you don't have an unintended space after a
+brace and that you haven't ended a line of the definition immediately
+after a brace.
+People often end lines of macro definitions after braces in order to make
+the definitions more readable.
+To be safe, put a `|%|' after any brace that ends a line of a macro
+definition.
+It may not be needed, but it won't do any harm.\footnote{
+Admittedly there are rare cases where you really do want an end of line
+after a brace.}
+
+When you're having trouble locating the source of an unwanted space,
+try setting |\tracingcommands| \ctsref{\tracingcommands} to $2$.
+You'll get a |{blank space}| command in the log file for each space
+that \TeX\ sees.
+
+It helps to know \TeX's rules for spaces:
+
+\olist
+\li Spaces are ignored at the beginnings of input lines.
+\li Spaces at the ends of input lines are ignored under \emph{all}
+circumstances, although the end of line itself is treated like a space.
+(A completely blank line, however, generates a |\par| token.)
+\li Multiple spaces are treated like a single space, but
+only if they appear together in your input.
+Thus a space following the arguments of a macro call is not combined
+with a final space produced by the macro call. Instead, you get two spaces.
+\li Spaces are ignored after control words.
+\li Spaces are in effect ignored after numbers, dimensions,
+and the `|plus|' and `|minus|' in glue specifications.%
+\footnote{Actually, \TeX\ ignores only a
+single space in these places.
+Since multiple spaces ordinarily reduce to a single space, however, the
+effect is that of ignoring any number of spaces.}
+\endolist
+\noindent If you've changed the category code of the space or the end-of-line
+character, all bets are off.
+\eix^^{space//unwanted}
+
+
+\section Avoiding excess space around a display
+
+\null
+^^{math display}
+If you're getting too much space above a math display, it may be because
+you've left a blank line in your input above the display.
+The blank line starts a new paragraph and puts \TeX\ into
+vertical mode. When
+\TeX\ sees a `|$|' in vertical mode, it switches back to horizontal mode
+and inserts the interparagraph glue (|\parskip|) followed by
+the interline glue (|\baselineskip|).
+Then, when it starts the display itself,
+it inserts \emph{more} glue (either ^|\abovedisplayskip|
+or ^|\abovedisplayshortskip|, depending on the length of the preceding
+line).
+This last glue is the only glue that you want.
+To avoid getting the interparagraph glue as well, don't leave a blank line above a
+math display or otherwise
+end a paragraph (with |\par|, say) just before a math display.
+
+Similarly,
+if you're getting too much space below a math display, it may be because
+you've left a blank line in your input below the display.
+Just remove it.
+
+
+\section Avoiding excess space after a paragraph
+
+If you get too much vertical space after a paragraph that was produced by a
+macro, you may be getting the interparagraph glue produced by the macro,
+an empty paragraph, and then more interparagraph glue.
+You can get rid of the second paragraph skip by inserting:
+\csdisplay
+\vskip -\parskip
+\vskip -\baselineskip
+|
+just after the macro call.
+If you always get this problem with a certain macro, you can put these
+lines at the end of the macro definition instead.
+You may also be able to cure the problem by never leaving a blank line
+after the macro call---if you want a blank line just to make your input
+more readable, start it with a `|%|'.
+
+
+\section Changing the paragraph shape
+
+\null
+\bix^^{paragraphs//shaping}
+Several \TeX\ parameters---^|\hangindent|, ^|\leftskip|, etc.---%
+affect the way that \TeX\ shapes paragraphs and breaks them into lines.
+^^{line breaking}
+These parameters are used indirectly in \plainTeX{} commands such as
+^|\narrower| and ^|\hang|; you can also assign to them directly.
+If you've used one of these commands (or changed one of these parameters),
+but the command or parameter change
+does not seem to be having any effect on a paragraph,
+the problem may be that you've ended a group before you've ended the
+paragraph. For example:
+\csdisplay
+{\narrower She very soon came to an open field, with
+a wood on the other side of it: it looked much darker
+than the last wood, and Alice felt a little timid
+about going into it.}
+|
+This paragraph won't be set narrower because the right brace at the end
+terminates the |\narrower| group before \TeX\ has had a chance to
+break the paragraph into lines. Instead, put a |\par| before the
+right brace; then you'll get the effect you want.
+^^|\par//when changing paragraph shape|
+\eix^^{paragraphs//shaping}
+
+
+\section Putting paragraphs into a box
+
+Suppose you have a few paragraphs of text that you want to put in a
+particular place on the page. The obvious way to do it is to enclose
+the paragraphs in an hbox of an appropriate size, and then place the hbox
+where you want it to be. Alas, the obvious way doesn't work because
+\TeX\ won't do line breaking in restricted horizontal mode.
+^^{restricted mode//horizontal}
+If you try it,
+you'll get a misleading error message that suggests you're
+missing the end of a group.
+The way around this restriction is to write:
+\csdisplay
+\vbox{\hsize = !<dimen> !dots !<paragraphs> !dots}
+|
+where \<dimen> is the line length that you want for the paragraphs.
+This is what you need to do, in particular, when you want to enclose some
+paragraphs in a box (a box enclosed in ruled lines, not a \TeX\ box).
+
+\section Drawing lines
+
+\null
+\bix^^{rules}
+You can use the ^|\hrule| and ^|\vrule| commands (\xref\hrule)
+to draw lines, i.e., rules. You'll need to
+know (a)~where you can use each command and
+(b)~how \TeX\ determines the lengths of rules when
+you haven't given the lengths explicitly.
+\ulist
+\li You can only use |\hrule| when \TeX\ is in a vertical mode and |\vrule|
+when \TeX\ is in a horizontal mode.
+This requirement means that
+you can't put a horizontal rule into an hbox or a vertical rule
+into a vbox.
+You can, however, construct a horizontal rule that looks vertical by
+specifying all three dimensions and making it tall and skinny.
+Similarly, you can construct a vertical rule that looks horizontal
+by making it short and fat.
+
+\li A horizontal rule inside a vbox
+has the same width as does the vbox if you haven't
+given the width of the rule explicitly.
+Vertical rules
+inside hboxes behave analogously.
+If your rules are coming out too long or too short,
+check the dimensions of the enclosing box.
+\endulist
+
+As an example, suppose we want to produce:
+\display{%
+\hbox{\vrule
+ \vbox{\hrule\vskip 3pt
+ \hbox{\hskip 3pt
+ \vbox{\hsize .7in\raggedright
+ \noindent Help! Let me out of here!}%
+ \hskip 3pt}
+ \vskip 3pt\hrule}%
+\vrule}}
+The following input will do it:
+\csdisplay
+\hbox{\vrule
+ \vbox{\hrule \vskip 3pt
+ \hbox{\hskip 3pt
+ \vbox{\hsize = .7in \raggedright
+ \noindent Help!! Let me out of here!!}%
+ \hskip 3pt}%
+ \vskip 3pt \hrule}%
+\vrule}
+|
+We need to put the text into a vbox in order to get \TeX\ to process it
+as a paragraph.
+The four levels of boxing are really
+necessary---if you doubt it, try to run this example with fewer levels.
+\eix^^{rules}
+
+
+\section Creating multiline headers or footers
+
+\null
+\xrdef{bighead}
+\bix^^{headers//multiple-line}
+\bix^^{footers//multiple-line}
+You can use
+the ^|\headline| and ^|\footline| commands
+(\xref\footline) to produce headers and footers, but they don't work properly
+for headers and footers having more than one line. However, you can get
+multiline headers and footers by redefining some of the subsidiary
+macros in \TeX's output routine.
+
+For a multiline header, you need to do three things:
+\olist\compact
+\li Redefine the ^|\makeheadline| macro that's called from \TeX's
+output routine.
+\li Increase ^|\voffset| by the amount of vertical space consumed by the
+extra lines.
+\li Decrease ^|\vsize| by the same amount.
+\endolist
+\noindent The following example shows how you might do this:
+\csdisplay
+\advance\voffset by 2\baselineskip
+\advance\vsize by -2\baselineskip
+\def\makeheadline{\vbox to 0pt{\vss\noindent
+ Header line 1\hfil Page \folio\break
+ Header line 2\hfil\break
+ Header line 3\hfil}%
+ \vskip\baselineskip}
+|
+You can usually follow the pattern of this definition quite closely, just
+substituting your own header lines and choosing an appropriate multiple
+of |\baselineskip| (one less than the number of lines in the header).
+
+For a multiline footer, the method is similar:
+\olist
+\li Redefine the ^|\makefootline| macro that's called from \TeX's
+output routine.
+\li Decrease ^|\vsize| by the amount of vertical space consumed by the
+extra lines.
+\endolist
+\noindent The following example shows how you might do this:
+\csdisplay
+\advance\vsize by -2\baselineskip
+\def\makefootline{%
+ \lineskip = 24pt
+ \vbox{\raggedright\noindent
+ Footer line 1\hfil\break
+ Footer line 2\hfil\break
+ Footer line 3\hfil}}
+|
+Again, you can usually follow the pattern of this definition quite closely.
+The value of |\lineskip| determines the amount of space between the
+baseline of the last line
+of the main text on the page and the baseline of the first line of the footer.
+\eix^^{headers//multiple-line}
+\eix^^{footers//multiple-line}
+
+
+\section Finding mismatched braces
+
+\bix^^{braces//mismatched}
+\xrdef{mismatched}
+Most times when your \TeX\ input suffers from mismatched braces, you'll
+get a diagnostic from \TeX\ fairly near the place where you actually
+made the mistake.
+But one of the most frustrating errors you can get from a \TeX\ run,
+just before \TeX\ quits, is
+the following:
+\csdisplay
+(\end occurred inside a group at level 1)
+|
+This indicates that there is an extra left brace
+or a missing right brace somewhere
+in your document, but it gives you no hint at all
+about where the problem might be. So how can you find it?
+
+A debugging trick we've found useful
+is to insert the following line or its equivalent
+at five or six places equally spaced within the document (and not within
+a known group):
+\csdisplay
+}% a fake ending
+|
+Let's assume the problem is an extra left brace.
+If the extra left brace
+is, say, between the third and fourth fake ending,
+you'll get error messages from the first three fake endings but not from
+the fourth one. The reason is that \TeX\ will ignore the first three
+fake endings after complaining about them,
+but the fourth fake ending will match
+the extra left brace.
+Thus you know that the extra left brace
+is somewhere between the third and fourth
+fake ending.
+If the region of the error
+is still too large for you to find it,
+just remove the original set of fake endings and
+repeat the process within that region.
+If the problem is a missing right brace rather than an extra left brace,
+you should be able to track it down once you've found its mate.
+
+This method doesn't work under all circumstances. In particular, it doesn't
+work if your document consists of several really large groups. But often
+you can find some variation on this method that will lead you to that
+elusive brace.
+
+If all else fails, try shortening your input by removing
+the last half of the file
+(after stashing away the original version first!) or inserting a
+|\bye| command in the middle.
+If the error persists, you know it's in the first half; if it goes away,
+you know it's in the second half.
+By repeating this process you'll eventually find the error.
+\eix^^{braces//mismatched}
+
+
+\section Setting dimensions
+
+\null
+\bix^^{\<dimen>}
+The simplest way to set a dimension is to specify it directly, e.g.:
+\csdisplay
+\hsize = 6in
+|
+You can also specify a dimension in terms of other dimensions or as a mixture
+of different units, but it's a little more work. There are two ways
+to construct a dimension as such a combination:
+\olist\compact
+\li You can add a dimension to a dimension parameter or to a dimension
+register.
+For example:
+\csdisplay
+\hsize = 6in \advance\hsize by 3pc % 6in + 3pc
+|
+\li You can indicate a dimension as a multiple of a dimension
+or glue parameter or register.
+In this case, \TeX\ converts glue to a dimension by throwing away
+the stretch and shrink. For example:
+\csdisplay
+\parindent = .15\hsize
+\advance\vsize by -2\parskip
+|
+\endolist
+\eix^^{\<dimen>}
+
+
+\section Creating composite fonts
+
+\null
+\bix^^{fonts//composite}
+It's sometimes useful to create a ``composite font'',
+named by a control sequence $\cal F$, in which all the characters
+are taken from a font $f_1$ except for a few that are
+borrowed from another font $f_2$.
+You can then set text in the composite font by using $\cal F$ just as
+you'd use any other font identifier.
+
+You can create such a composite font by defining $\cal F$ as a macro.
+In the definition of $\cal F$, you first select font $f_1$ and then
+define control sequences that produce the borrowed characters,
+set in $f_2$.
+For example, suppose that you want to
+create a composite font |\britrm| which has all the characters of |cmr10|
+except for the dollar sign, for which you want to borrow
+the pound sterling symbol
+from font |cmti10|.
+The pound sterling symbol in |cmti10| happens to be in the same font position
+as the dollar sign in |cmr10|.
+Here's how to do it:
+\csdisplay
+\def\britrm{%
+ \tenrm % \tenrm names the cmr10 font
+ \def\${{\tenit\char `\$}}% \tenit names the cmti10 font.
+}
+|
+Now whenever you start the font named |\britrm|,
+|\$| will produce a pound sterling symbol.
+
+You can also get the same effect by changing the category codes
+of the characters in question to make those characters active and then
+providing a definition for the character. For example:
+\csdisplay
+\catcode `* = \active
+\def*{{\tentt \char `\*}}
+|
+In this case the asterisk will be taken from the |\tentt| font.
+If you then type the input line:
+\csdisplay
+Debbie was the * of the show.
+|
+it will be set as:
+{\font\tentt=cmtt10%
+\catcode `* = \active
+\def*{{\tentt \char `\*}}%
+\display{Debbie was the * of the show.}}
+\noindent
+
+\eix^^{fonts//composite}
+
+
+\section Reproducing text verbatim
+
+\null
+^^{verbatim text}\xrdef{verbatim}
+Verbatim text is text that is reproduced in a typeset
+document just as it appeared in the input.
+The most common use of verbatim text is in typesetting
+computer input,
+including both computer programs and input to \TeX\ itself.
+^^{computer programs, typesetting}
+Computer input is not easy to produce verbatim for two reasons:
+\olist\compact
+\li Some characters (control symbols, escape characters, braces,
+etc.) have
+special meanings to \TeX.
+\li Ends of line and multiple spaces are translated to single spaces.
+\endolist
+\noindent
+In order to produce verbatim text, you have to cancel the special meanings
+and disable the translation. This is best done with macros.
+
+To cancel the special meanings, you need to change the category codes
+of those characters that have special meanings.
+^^{category codes//for verbatim text}
+The following macro illustrates how you might do it:
+\csdisplay
+\chardef \other = 12
+\def\deactivate{%
+ \catcode`\\ = \other \catcode`\{ = \other
+ \catcode`\} = \other \catcode`\$ = \other
+ \catcode`\& = \other \catcode`\# = \other
+ \catcode`\% = \other \catcode`\~ = \other
+ \catcode`\^ = \other \catcode`\_ = \other
+}
+|
+But beware! Once you've changed the category codes in this way, you've lost
+the ability to use control sequences since there's no longer an escape
+character. You need some way of getting back to the normal mode of
+operation. We'll explain how to do that in a moment, after considering
+the other problem: disabling the translation of spaces and ends of line.
+
+\PlainTeX\ has two commands that together nearly solve the problem:
+^|\obeyspaces| \ctsref{\obeyspaces} and ^|\obeylines| \ctsref{\obeylines}.
+The two things that they don't do are to preserve spaces at the start of
+a line
+and to preserve blank lines.
+For that you need stronger measures---which are provided by
+the ^|\obeywhitespace| macro that we are about to define.
+
+\TeX\ normally insists on collecting lines into paragraphs. One way to
+convince it to take line boundaries literally is to turn individual lines
+into paragraphs.\footnote{%
+Another way is to turn the end of line character into a |\break|
+command and provide infinite glue at the end of each line.
+^^|\break//end of line as|
+}
+You can do this by redefining the end of line character to produce
+the |\par| control sequence. The following three macro definitions
+show how:
+
+^^{whitespace, preserving}
+\xrdef{\obeywhitespace}
+\csdisplay
+\def\makeactive#1{\catcode`#1 = \active \ignorespaces}
+{% The group delimits the text over which ^^M is active.
+ \makeactive\^^M %
+ \gdef\obeywhitespace{%
+ % Use \gdef so the definition survives the group.
+ \makeactive\^^M %
+ \let^^M = \newline %
+ \aftergroup\removebox % Kill extra paragraph at end.
+ \obeyspaces %
+ }%
+}
+\def\newline{\par\indent}
+\def\removebox{\setbox0=\lastbox}
+
+|
+A subtle point about the definition of |\obeywhitespace| is that
+|^^M| must be made active both
+when |\obeywhitespace| is being \emph{defined} and when
+it is being \emph{used}.
+
+In order to be able to get back to normal operation after verbatim text,
+you need to choose a character that
+appears rarely if at all in the verbatim text. This character serves as
+a temporary escape character.
+The vertical bar (|!||) is sometimes a good choice.
+With this choice, the macros:
+\csdisplay
+\def\verbatim{\par\begingroup\deactivate\obeywhitespace
+ \catcode `\!| = 0 % Make !| the new escape character.
+}
+
+\def\endverbatim{\endgroup\endpar}
+
+\def\!|{!|}
+|
+will do the trick. Within the verbatim text, you can use a double
+vertical bar (|!|!||) to denote a single one, and you end the verbatim text
+with |!|endverbatim|.
+
+There are many variations on this technique:
+\ulist
+\li If a programming language has keywords, you can turn
+each keyword into a command that typesets
+that keyword in boldface. Each keyword in the input should then be
+preceded by the temporary escape character.
+\li If you have a character (again, let's assume it's the vertical bar)
+that
+\emph{never} appears in the verbatim text, you can make it active and
+cause it to end the verbatim text. The macro definitions then go like
+this:
+\csdisplay
+{\catcode `\!| = \active
+\gdef\verbatim{%
+ \par\begingroup\deactivate\obeywhitespace
+ \catcode `!| = \active
+ \def !|{\endgroup\par}%
+}}
+|
+\endulist
+
+The ideas presented here provide only a simple approach to typesetting
+computer programs.
+Verbatim reproduction is often not as revealing or easy to read as a version
+that uses typographical conventions to reflect the syntax
+and even the semantics of the program.
+If you'd like to pursue this subject further, we recommend the following book:
+
+\smallskip{\narrower\noindent
+Baecker, Ronald M., and Marcus, Aaron, {\sl Human Factors
+and Typography for More Readable Programs}. Reading, Mass.:
+Addison-Wesley, 1990.\par}
+
+
+\section Using outer macros
+
+\null
+^^{forbidden control sequence}^^{incomplete conditional}
+If \TeX\ complains about a ``forbidden control sequence'',
+you've probably used an outer macro in a non-outer context
+\seeconcept{outer}.
+^^{macros//outer}
+An outer macro is one whose definition is
+preceded by ^|\outer|.
+An outer macro can't be used in a macro argument, in a macro definition,
+in the preamble of an alignment, or in conditional
+text, i.e., text that will be expanded only when a conditional test
+has a particular outcome.
+^^{alignments//outer control sequence in}
+Certain macros have been defined as outer because they aren't
+intended to be used in these contexts and such a use is probably an error.
+The only ways around this problem are to redefine the
+macro or to move its use to an acceptable context.
+
+Using an outer macro in an improper context can also cause
+\TeX\ to complain about a runaway situation or an incomplete conditional.
+The problem can be hard to diagnose because the error message
+gives no hint as to what it is.
+If you get such an error message, look around for a call on an outer macro.
+You may not always know that a particular macro is outer, but the
+command `^|\show||\a|' \ctsref{\show}
+will show you the definition of |\a| and also tell you
+if |\a| is outer.
+
+
+\section Changing category codes
+
+\null
+\bix^^{category codes//changing}
+Sometimes it's useful to make local changes to the category code of a
+character in some part of your document. For instance, you might be
+typesetting a computer program
+^^{computer programs, typesetting}
+or something else that uses normally active
+characters for special purposes. You'd then want to deactivate those
+characters so that \TeX\ will treat them as being like any other character.
+
+If you make such a local change to the category code of a character,
+you may sometimes be dismayed to find that
+\TeX\ seems to be paying no attention whatsoever to your change.
+Two aspects of \TeX's behavior are likely causes:
+\olist
+\li \TeX\ determines the category code of an input character
+^^{input characters}
+and attaches it to the character when it reads in the character.
+Let's say you read in a tilde (|~|) and later
+change the category code of tildes,
+but make the change
+before \TeX's stomach has actually processed that \emph{particular\/}
+tilde \seeconcept{\anatomy}.
+\TeX\ will still respond to that
+tilde using the category code as it was before the change.
+This difficulty typically arises
+when the tilde is part of an argument to a macro
+and the macro itself changes the category code of tilde.
+
+\li When \TeX\ is matching a call of a macro to the definition of that macro,
+it matches not just the characters in the parameter pattern but also their
+category codes.
+^^{macros//arguments of}
+^^{macros//parameters of}
+If the category code of a pattern character isn't equal to
+the category code of the same character in the call, \TeX\ won't consider
+the characters as matching.
+This effect can produce mysterious results because it
+\emph{looks} as though the pattern should match.
+For example, if you've defined a macro:
+\csdisplay
+\def\eurodate#1/#2/#3{#2.#1.#3}
+|
+then the slash character must have the same category code when you
+call |\eurodate| as it had when you defined |\eurodate|.
+\endolist
+If the problem arises because the troublesome character is an argument to
+a macro, then
+the usual cure is to redefine the macro as a pair
+of macros |\mstart| and |\mfinish|, where
+|\mstart| is to be called before the argument text
+and |\mfinish| is to be called after it.
+|\mstart| then sets up the category codes and |\mfinish| undoes the change,
+perhaps just by ending a group.
+\eix^^{category codes//changing}
+
+
+\section Making macro files more readable
+
+\null
+\bix^^{macros//making readable}
+You can make a file of macros more readable by
+setting the category codes of space to $9$ (ignored
+character) and ^|\endlinechar| \ctsref{\endlinechar} to $-1$
+at the beginning of the file.
+Then you can use spaces and ends of line freely in the
+macro definitions without getting
+unwanted spaces when you call the macros.
+The ignored characters won't generate spaces, but they'll still
+act as terminators for control sequences.
+If you really do want a space, you can still get it with the ^|\space|
+command \ctsref\space.
+
+Of course you'll need to restore the category codes of space and end of line
+to their normal values ($10$ and $5$, respectively) at the end of the file.
+You can do this either by enclosing the entire file in a group or by
+restoring the values explicitly. If you choose to enclose the file in a group,
+then you should also set ^|\globaldefs| to $1$ so that
+all the macro definitions will be global and thus visible outside of the group.
+
+A miniature example of a macro file of this form is:
+
+\csdisplay
+\catcode `\ = 9 \endlinechar = -1
+
+\def \makeblankbox #1 #2 {
+ \hbox{\lower \dp0 \vbox{\hidehrule {#1} {#2}
+ \kern -#1 % overlap rules
+ \hbox to \wd0{\hidevrule {#1} {#2}%
+ \raise \ht0 \vbox to #1{} % vrule height
+ \lower \dp0 \vtop to #1{} % vrule depth
+ \hfil \hidevrule {#2} {#1} }
+ \kern -#1 \hidehrule {#2} {#1} } }
+
+\def\hidehrule #1 #2 {
+ \kern -#1 \hrule height#1 depth#2 \kern -#2 }
+\def\hidevrule #1 #2 {
+ \kern -#1 {\dimen0 = #1 \advance \dimen0 by #2
+ \vrule width \dimen0 } \kern -#2 }
+
+\catcode `\ = 10 \endlinechar = `\^^M
+|
+\noindent
+Without the changed category codes,
+these macros would have to be written much more compactly, using fewer
+spaces and more `|%|'s at the ends of lines.
+\eix^^{macros//making readable}
+
+\endchapter\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/usebook.tex b/Master/texmf-dist/doc/plain/impatient/usebook.tex
new file mode 100644
index 00000000000..e9d01c6841f
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/usebook.tex
@@ -0,0 +1,243 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter{Using this book}
+
+\chapterdef{usebook}
+
+This book is a do-it-yourself guide and handbook for \TeX.
+Here in this section we tell you how to use the book to maximum advantage.
+
+We recommend that you first either read or skim in sequence Sections
+\chapternum{usebook} through \chapternum{examples},
+which tell you what you need to know in order to get started using \TeX.
+If you've already had experience using \TeX, it will still be helpful
+to know what kinds of information are in these sections of the book.
+Sections~\chapternum{concepts}--\chapternum{tips}, which
+occupy most of
+the rest of the book, are designed to be accessed randomly.
+Nevertheless, if you're the kind of person who likes to read reference manuals,
+you'll find that it \emph{is} possible to proceed sequentially if you're
+willing to take a lot of detours at first.
+
+In \chapterref{usingtex}, ``Using \TeX'',
+we explain how to produce a \TeX\ document from a
+\TeX{} input file.
+We also describe the conventions for preparing that input file,
+explain a little about how \TeX{} works, and tell you about additional
+resources that are available.
+Reading this section will help you understand
+the examples in the next section.
+
+\chapterref{examples}, ``Examples'',
+contains a sequence of
+examples that illustrate the use of \TeX.
+Each example consists of a page of output
+together with the input that we used to create it.
+These examples will orient you and help you
+locate the more detailed material that you'll need as you go.
+By seeing which commands are used in the input, you'll know
+where to look for more detailed information on how to achieve
+the effects shown in the output.
+The
+examples can also serve as models for simple documents, although we must
+caution you that
+because we've tried to pack a variety of \TeX\ commands into a small
+number of pages,
+the examples are not necessarily illustrations of good or complete
+document~design.
+
+As you read the explanation of a command, you may encounter
+some unfamiliar technical terms.
+In \chapterref{concepts}, ``Concepts'',
+we define and explain these terms.
+We also discuss other topics that aren't covered
+elsewhere in the book.
+The inside back cover of the book contains a list of all the
+concepts and the pages where they are described.
+We suggest that you make a copy of this list and keep it nearby
+so that you'll be able to identify and look up an unfamiliar
+concept immediately.
+
+\TeX's commands are its primary vocabulary,
+and the largest part of this book is
+devoted to explaining them. In Sections~\chapternum{paras}
+through~\chapternum{general} we describe the commands.
+You'll find general information about the command descriptions
+on \xrefpg{cmddesc}.
+The command descriptions are arranged
+functionally, rather like a thesaurus, so if you know what you want to
+do but you don't know which command does it for you, you can use the
+table of contents to guide you to the right group of commands.
+Commands that we think are both particularly useful and easy to understand
+are indicated with a pointing~hand~(\hand).
+
+\chapterref{capsule}, ``Capsule summary of commands'', is a
+specialized index that complements the more complete descriptions
+in Sections~\chapternum{paras}--\chapternum{general}.
+It lists \TeX's commands
+alphabetically, with a brief explanation of each command
+and a reference to the page
+where it is described more completely. The capsule summary
+will help you when you just want a quick reminder of what a command
+does.
+
+\TeX\ is a complex program that occasionally works its will in
+mysterious ways.
+In \chapterref{tips}, ``Tips and techniques'',
+we provide advice on solving a variety of specific
+problems that you may encounter from time to time.
+And if you're stumped by
+\TeX's error messages, you'll find succor in \chapterref{errors},
+``Making sense of error messages''.
+
+The gray tabs on the side of the book will help you locate parts of the
+book quickly. They divide the book into the following major parts:
+\olist
+\li general explanations and examples
+\li concepts
+\li descriptions of commands (five shorter tabs)
+\li advice, error messages, and the |eplain.tex| macros
+\li capsule summary of commands
+\li index
+\endolist
+
+In many places we have provided page references to
+^{\texbook} (see \xrefpg{resources} for a citation).
+These references apply to the seventeenth edition of \texbook.
+For other editions, some references may be off by a page or two.
+
+
+\section Syntactic conventions
+
+In any book about preparing input for a computer,
+it's necessary to indicate clearly the literal characters that should be typed
+and to distinguish those characters from the explanatory text.
+We use the Computer Modern typewriter font for {\tt literal input
+like this}, and also for the names of \TeX{} commands.
+When there's any possibility of confusion, we enclose \TeX\
+input in single quotation marks, `{\tt like this}'.
+However, we occasionally use parentheses when we're indicating single
+characters such as (|`|) (you can see why).
+
+For the sake of your eyes we usually just put spaces
+where you should put spaces. In some places where
+we need to emphasize the space, however,
+we use a `\visiblespace' character
+{\catcode `\ =\other\pix^^| |}%
+to indicate it.
+Naturally enough, this character is called a \emph{visible space}.
+\pix^^{spaces//visible}
+
+
+\section Descriptions of the commands
+
+\xrdef{cmddesc}
+Sections~\chapternum{paras}--\chapternum{general} contain
+a description of what nearly every \TeX\ command does. ^^{commands}
+Both the primitive commands ^^{primitive//command}
+and those of ^{\plainTeX} are covered.
+The primitive commands are those built into the \TeX\ computer program, while
+the \plainTeX{} commands are defined in a standard file of
+auxiliary definitions (see \xref\plainTeX).
+The only commands we've omitted are those that are used purely locally
+in the definition of \plainTeX\ (\knuth{Appendix~B}).
+The commands are organized as follows:
+\ulist\compact
+\li ``Commands for composing paragraphs'', \chapterref{paras},
+deal with characters, words, lines, and entire paragraphs.
+\li ``Commands for composing pages'', \chapterref{pages},
+deal with pages, their components, and the output routine.
+\li ``Commands for horizontal and vertical modes'', \chapterref{hvmodes},
+have corresponding or identical
+forms for both horizontal modes (paragraphs and hboxes) and vertical
+modes (pages and vboxes).
+These commands provide boxes, spaces, rules, leaders,
+and alignments.
+\li ``Commands for composing math formulas'', \chapterref{math},
+provide capabilities for constructing math formulas.
+\li ``Commands for general operations'', \chapterref{general},
+provide
+\TeX's programming features and
+everything else that doesn't fit into any of the other sections.
+\endulist
+You should think of these categories as being suggestive rather than
+rigorous, because the commands don't really fit neatly into these
+(or any other) categories.
+
+Within each section, the descriptions of the commands are organized
+by function. When several commands are closely related, they are described as
+a group; otherwise, each command has its own explanation.
+The description of each command
+includes one or more examples and the output
+produced by each example when examples are appropriate (for
+some commands they aren't).
+When you are looking at a subsection containing functionally related
+commands, be sure to check the end of a subsection for a ``see also''
+item that refers you to related commands that are described elsewhere.
+
+Some commands are closely related to certain concepts.
+For instance, the |\halign| and |\valign| commands are related to
+``alignment'', the |\def|
+command is related to ``macro'',
+and the |\hbox| and |\vbox| commands are related to ``box''.
+In these cases we've usually given a bare-bones des\-crip\-tion of the
+commands themselves and explained the underlying ideas
+in the concept.
+
+The examples associated with the commands have been typeset with
+^|\parindent|, the paragraph indentation, set to zero so that
+paragraphs are normally unindented.
+This convention makes the examples easier to read.
+In those examples where the paragraph indentation is essential,
+we've set it explicitly to a nonzero value.
+
+The pointing hand in front of a command or a group of commands indicates
+that we judged this command or group of commands to be particularly useful
+and easy to understand.
+
+Many commands expect ^{arguments} of one kind or another
+(\xref{arg1}). The arguments of
+a command give \TeX\ additional information that it needs in order to
+carry out the command. Each argument is indicated by an italicized
+term in angle brackets that indicates what kind of argument it~is:
+
+\display{%
+\halign{\<#>\quad&#\hfil\cr
+argument&a single token or some text enclosed in braces\cr
+charcode&a character code, i.e., an integer between $0$ and $255$\cr
+dimen&a dimension, i.e., a length\cr
+glue&glue (with optional stretch and shrink)\cr
+number&an optionally signed integer (whole number)\cr
+register&a register number between $0$ and $255$\cr
+}}
+^^{\<dimen>}
+^^{\<argument>}
+^^{\<charcode>}
+^^{\<glue>}
+^^{\<number>}
+^^{\<register>}
+
+\noindent
+All of these terms are explained in more detail in \chapterref{concepts}.
+In addition, we sometimes use terms such as \<token list> that are either
+self-explanatory or explained in the description of the command.
+Some commands have special formats that require either braces or
+particular words.
+These are set in the same bold font that we use
+for the command headings.
+
+Some commands are parameters (\xref{introparms}) or table entries.
+^^{parameters//as commands}
+This is indicated in the command's listing.
+You can either use a parameter as an argument or assign a value to it.
+The same holds for table entries.
+We use the term ``parameter'' to refer to entities such as |\pageno|
+that are actually registers but behave just like parameters.
+^^{registers//parameters as}
+
+
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/usermacs.tex b/Master/texmf-dist/doc/plain/impatient/usermacs.tex
new file mode 100644
index 00000000000..71d8d64bc26
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/usermacs.tex
@@ -0,0 +1,1168 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter{A compendium \linebreak of useful macros}
+
+\chapterdef{eplain}
+
+This section describes |eplain.tex|, a collection of macros and other
+definitions that extend plain \TeX.
+\bix^^|eplain.tex|
+The descriptions of the various macros explain their purposes,
+but usually do not explain how they
+work or provide explicit details on
+how to use them. That information is contained in the source files for
+|eplain.tex| and in the documentation that comes with it.
+See \headcit{Resources}{resources} for how to obtain |eplain.tex|.
+
+
+\section{Preliminaries}
+
+We start with some macros for changing category codes and convenient
+definitions for two of the commonly used ones.
+^^{category codes//useful definitions for}
+
+\pix^^|\makeactive|
+\pix^^|\letter|
+\pix^^|\other|
+\pix^^|\uncatcodespecials|
+
+\csdisplay
+\def\makeactive#1{\catcode`#1 = \active \ignorespaces}%
+\chardef\letter = 11 \chardef\other = 12
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1 = \other}%
+ \dospecials}% Defined in plain.
+|
+
+In order to define `|^^M|' as an active character, you need to encase
+the definition in a group and invoke some extra machinery.
+\ttidxref{^^M}
+The \pix^|\letreturn| macro lets you define `|^^M|' without that
+extra machinery (which you can see in the definition below).
+
+\csdisplay
+{\makeactive\^^M \long\gdef\letreturn#1{\let^^M = #1}}%
+|
+
+These macros consume one, two, or three arguments.
+
+\pix^^|\gobble|
+\pix^^|\gobbletwo|
+\pix^^|\gobblethree|
+\csdisplay
+\def\gobble#1{}\def\gobbletwo#1#2{}%
+\def\gobblethree#1#2#3{}%
+|
+
+Now we establish some conventions for reading the rest of the file.
+Within the file we allow ``private'' control sequences that contain
+`|@|' in their names.
+These control sequences aren't accessible outside of this file (unless
+you change the category code of `|@|' again).
+\xrdef{eplainconv}
+
+\csdisplay
+\catcode`@ = \letter % Allow control sequences with @.
+\let\@plainwlog = \wlog % Don't log register allocations.
+\let\wlog = \gobble
+\newlinechar = `^^J
+|
+
+The next two macros provide convenient forms of diagnostic output.
+\pix^|\loggingall| turns on all tracing, but causes the trace
+output to appear only in the log file and not at your terminal.
+\pix^|\tracingboxes| causes boxes to be displayed completely when
+they're traced. (\TeX\ normally shows only three levels of boxing
+and five items within each box.)
+
+
+\csdisplay
+\def\loggingall{\tracingcommands\tw@\tracingstats\tw@
+ \tracingpages\@ne\tracingoutput\@ne
+ \tracinglostchars\@ne\tracingmacros\tw@
+ \tracingparagraphs\@ne\tracingrestores\@ne
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen}%
+\def\tracingboxes{\showboxbreadth = \maxdimen
+ \showboxdepth = \maxdimen}%
+|
+
+
+The default thickness of rules is $0.4$\pt.
+You can produce rules of any default thickness you choose by redefining
+|\vruledefaultwidth|, |\hruledefaultheight|, and |\hruledefaultdepth|
+and then using
+\pix^^|\ehrule|
+|\eh!-rule|
+and \pix^|\evrule|
+instead of |\hrule| and |\vrule|. (The `e' stands for
+``eplain''.)
+^^{rules//thickness of}
+If you give an explicit
+dimension (e.g., |\ehrule height 16pt|), \TeX\ will use it.
+
+\csdisplay
+\newdimen\hruledefaultheight \hruledefaultheight = 0.4pt
+\newdimen\hruledefaultdepth \hruledefaultdepth = 0.0pt
+\newdimen\vruledefaultwidth \vruledefaultwidth = 0.4pt
+\def\ehrule{\hrule height\hruledefaultheight
+ depth\hruledefaultdepth}%
+\def\evrule{\vrule width\vruledefaultwidth}%
+|
+
+The |\%| convention for writing a `|%|' character doesn't work when you
+want to include that character in the token list of |\write|.
+^^|\write//writing \b\tt\%\e\ with|
+^^|%//writing out|
+You can use ^|\percentchar| to achieve this.
+We also redefine ^|^^L| to be nonouter so that you can use it in a
+macro definition or argument.
+
+\csdisplay
+{\catcode`\% = \other \gdef\percentchar{%}}%
+ \def^^L{\par
+}%
+|
+
+\pix^|\tokstostring| converts its argument into a list of ^{character
+tokens}.
+It uses only expansions that are handled in \TeX's gullet.
+This property is necessary
+for it to work with |\edef|. It is used by the cross-referencing
+macros (\xref{xrefs}).
+
+In order to split the argument up at spaces, we have to use two
+subsidiary macros. |\@ttsA| finds the spaces, and |\@ttsB| handles a
+token sequence without any spaces. Each space is replaced by the
+expansion of \pix^|\spacesub|.
+
+\csdisplay
+\def\tokstostring#1{\@ttsA#1 \ttsmarkA}%
+\def\@ttsA#1 #2\ttsmarkA{\ifempty{#1}\else
+ \@ttsB #1\@ttsmarkB
+ \ifempty{#2}\else
+ \spacesub\@ttsA#2\ttsmarkA\fi\fi}%
+\def\@ttsB#1{\ifx #1\@ttsmarkB\else
+ \string #1%
+ \expandafter\@ttsB\fi}%
+\def\@ttsmarkB{\@ttsmarkB}% should never be expanded
+\def\spacesub{+}%
+|
+
+\noindent
+\pix^|\ifempty| tests if its argument is empty.
+
+\csdisplay
+\def\ifempty#1{\@ifempty #1\@emptymarkA\@emptymarkB}%
+\def\@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
+\def\@emptymarkA{\@emptymarkA}%
+|
+
+The ^|\for| macro implements a \TeX\ version of the ^{for loop} in
+traditional programming languages. These macros come directly from
+\LaTeX.
+
+\csdisplay
+\def\for#1:=#2\do#3{\edef\@fortmp{#2}%
+ \ifx\@fortmp\empty \else
+ \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}%
+\def\@nnil{\@nil}%
+\def\@fornoop#1\@@#2#3{}%
+\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil
+ \else #5\def#4{#2} ifx #4\@nnil \else
+ #5\@iforloop #3\@@#4{#5}\fi\fi}%
+\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@fornoop \else #4\relax
+ \let\@nextwhile=\@iforloop\fi
+ \@nextwhile#2\@@#3{#4}}%
+|
+
+\pix^|\obeywhitespace| is useful for reproducing line breaks, blank lines,
+and spaces in your input. It combines the effects of |\obey!-lines| and
+|\obey!-spaces|,
+^^|\obeylines| ^^|\obeyspaces|
+and also causes spaces at the start of a line to
+be printed. Tab characters are not affected by this; they still produce
+normal glue.
+\xrdef{ewhitesp}
+^^{space characters}
+^^|\fontdimen|
+^^|\font|
+^^|\letreturn|
+
+\csdisplay
+\def\alwaysspace{\hglue\fontdimen2\the\font \relax}%
+{\makeactive\^^M \makeactive\ %
+\gdef\obeywhitespace{%
+\makeactive\^^M\def^^M{\par\indent}%
+\aftergroup\@removebox% Kill extra paragraph at end.
+\makeactive\ \let =\alwaysspace}}%
+\def\@removebox{\setbox0=\lastbox}
+|
+
+\pix^|\frac| is a good way to print fractions in text when you don't
+want to use |\over| and
+``1/2'' just doesn't look right. This macro is the answer to
+\knuth{Exercise~11.6}.^^{fractions//slashed form}
+
+\csdisplay
+\def\frac#1/#2{\leavevmode
+ \kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}%
+ \kern-.1em $/$%
+ \kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}}%
+|
+
+The following macros produce logos that are useful in the \TeX\ world.
+The \AMSTeX\ logo is from \knuth{page~420}. The \LaTeX\ logo is
+slightly modified from the one in |latex.tex| (we use a different font
+for the `A'); similarly, the \BibTeX\ logo uses |\sevenrm| instead of a
+true caps-and-small-caps font. The |.mf| source file for the \MF\ logo
+is given in the \MF\ manual:
+\smallskip
+{\narrower\noindent
+^{Knuth, Donald E.},{\sl The {\logosl METAFONT}book}.
+ Reading, Mass.: Addison-Wesley, 1986.\par}
+\smallskip
+\pix^^|\LaTeX|
+\pix^^|\AMSTeX|
+\pix^^|\BibTeX|
+\pix^^|\MF|
+
+\csdisplay
+\def\LaTeX{L\kern-.26em \raise.6ex\hbox{\fiverm A}%
+ \kern-.15em TeX}%
+\def\AMSTeX{$\cal A\kern-.1667em \lower.5ex\hbox{$\cal M$}%
+ \kern-.125em S$-\TeX}%
+\def\BibTeX{{\rm B\kern-.05em {\sevenrm I\kern-.025em B}%
+ \kern-.08em T\kern-.1667em \lower.7ex\hbox{E}%
+ \kern-.125emX}}%
+\font\mflogo = logo10
+\def\MF{{\mflogo META}{\tenrm \-}{\mflogo FONT}}%
+|
+
+The next two macros produce boxes. \pix^|\blackbox| produces a ``square
+bullet'', used in the list macros (\xref{listmacs}).
+\pix^|\makeblankbox| (from \knuth{page~311}) produces an unfilled
+rectangle, with the thickness of the border rules given by the
+arguments.
+
+\csdisplay
+\def\blackbox{\vrule height .8ex width .6ex depth -.2ex}%
+\def\makeblankbox#1#2{%
+ \hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}%
+ \kern -#1% overlap rules
+ \hbox to \wd0{\hidevrule{#1}{#2}%
+ \raise\ht0\vbox to #1{}% vrule height
+ \lower\dp0\vtop to #1{}% vrule depth
+ \hfil\hidevrule{#2}{#1}}%
+ \kern-#1\hidehrule{#2}{#1}}}}%
+\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2
+ \kern-#2}%
+\def\hidevrule#1#2{\kern-#1{\dimen0 = #1
+ \advance\dimen0 by #2 \vrule width\dimen0}\kern-#2}%
+|
+
+\pix^|\numbername| produces the written-out form of a number. (If the
+number is greater than ten, the macro just reproduces the numerals
+of its argument.)
+
+\csdisplay
+\def\numbername#1{\ifcase#1%
+ zero\or one\or two\or three\or four\or five%
+ \or six\or seven\or eight\or nine\or ten\or #1\fi}%
+|
+
+\pix^|\testfileexistence| determines whether a file |\jobname.#1| is
+non\-empty and sets |\if!-fileexists| appropriately.
+^^{files//testing for existence of}
+The file name in the argument need not end in a space token since
+the macro provides the space token.
+
+\csdisplay
+\newif\iffileexists
+\def\testfileexistence#1{\begingroup
+ \immediate\openin0 = \jobname.#1\space
+ \ifeof 0\global\fileexistsfalse
+ \else \global\fileexiststrue\fi
+ \immediate\closein0
+ \endgroup}%
+|
+
+
+\section Displays
+
+By default, \TeX\ centers displayed material (the material between
+|$$|'s). ^^{displays, formatting} \pix^|\leftdisplays| causes displays
+to be left-justified by default. You can return to centered displays
+with \pix^|\centereddisplays|.
+
+The macros here are more general than they need to be just for doing
+left-justified displays. For every display,
+\pix^|\ifeqno| will be true if an |\eqno| occurred in the display.
+\pix^|\ifleqno| will be true if an |\leqno| occurred. If either
+kind of equation number occurred, \pix^|\eqn| produces the text of the
+equation number. \pix^|\eq| always produces the text of the
+equation itself.
+
+These macros are based on the code on \knuth{page~376}.
+
+\csdisplay
+\newif\ifeqno \newif\ifleqno
+\newtoks\@eqtoks \newtoks\@eqnotoks
+\def\eq{\the\@eqtoks}\def\eqn{\the\@eqnotoks}%
+\def\displaysetup#1$${%
+ \@displaytest#1\eqno\eqno\@displaytest}%
+\def\@displaytest#1\eqno#2\eqno#3\@displaytest{%
+ \if !#3!% No \eqno, check for \leqno:
+ \@ldisplaytest#1\leqno\leqno\@ldisplaytest
+ \else
+ \eqnotrue \leqnofalse % Have \eqno, not \leqno.
+ \@eqnotoks = {#2}\@eqtoks = {#1}%
+ \fi
+ \generaldisplay$$}%
+\def\@ldisplaytest#1\leqno#2\leqno#3\@ldisplaytest{%
+ \@eqtoks = {#1}%
+ \if !#3!%
+ \eqnofalse % No \leqno; we're done.
+ \else
+ \eqnotrue \leqnotrue % Have \leqno.
+ \@eqnotoks = {#2}%
+ \fi}%
+|
+
+You can format displays differently by defining your own macro,
+analogous to \pix^|\leftdisplays|.
+The macro definition must
+place a call on |\display!-setup| in |\every!-display| ^^|\everydisplay|
+so as to ensure
+that |\dis!-play!-setup| ^^|\displaysetup| is called at the start of
+every display. The macro definition must also include a definition of
+^|\generaldisplay|.
+
+\csdisplay
+\newtoks\previouseverydisplay
+\def\leftdisplays{%
+ \previouseverydisplay = \everydisplay
+ \everydisplay =
+ {\the\previouseverydisplay \displaysetup}%
+ \def\generaldisplay{%
+ \leftline{%
+ \strut \indent \hskip\leftskip
+ \dimen0 = \parindent
+ \advance\dimen0 by \leftskip
+ \advance\displaywidth by -\dimen0
+ \@redefinealignmentdisplays
+ \ifeqno \ifleqno
+ \kern-\dimen0
+ \rlap{$\displaystyle\eqn$}%
+ \kern\dimen0
+ \fi\fi
+ $\displaystyle{\eq}$%
+ \ifeqno \ifleqno\else
+ \hfill $\displaystyle{\eqn}$%
+ \fi\fi}}}%
+\def\centereddisplays{\let\displaysetup = \relax}%
+|
+
+\filbreak
+\pix^|\leftdisplays| must go to some pains to make sure that
+|\dis!-play!-lines|, ^^|\displaylines|
+^|\eqalignno|, and ^|\leqalignno| still work properly.
+|\eq| is typeset in math mode,
+and |\halign| is illegal in math mode.
+^^|\halign//illegal in math mode|
+We use ^|\vcenter| to change the context so that |\halign| becomes
+legal again. We also remove the |\hfil| commands at the left of the template
+to obtain the flush left formatting. Other than those changes, the macros
+are the same as in |plain.tex|.
+
+\csdisplay
+\def\@redefinealignmentdisplays{%
+ \def\displaylines##1{\displ@y
+ \vcenter{\halign{\hbox to\displaywidth{$\@lign
+ \displaystyle####\hfil$}\crcr##1\crcr}}}%
+ \def\eqalignno##1{\displ@y
+ \vcenter{\halign to\displaywidth{%
+ $\@lign\displaystyle{####}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}####}$
+ \hfil\tabskip\centering
+ &\llap{$\@lign####$}\tabskip\z@skip\crcr
+ ##1\crcr}}}%
+ \def\leqalignno##1{\displ@y
+ \vcenter{\halign to\displaywidth{%
+ $\@lign\displaystyle{####}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}####}
+ $\hfil\tabskip\centering
+ &\kern-\displaywidth
+ \rlap{\kern-\parindent\kern-\leftskip$
+ \@lign####$}%
+ \tabskip\displaywidth\crcr
+ ##1\crcr}}}}%
+|
+
+
+\section Time of day
+
+When \TeX\ starts up, it sets the values of the
+^|\time|, ^|\day|, ^|\month|, and ^|\year| parameters.
+^^{time of day}^^{date}
+\pix^|\monthname|
+produces the name of the month, abbreviated to three letters.
+\pix^|\timestring| produces the current time, as in ``1:14\thinspace
+p.m.''. \pix^|\timestamp| produces the text of the complete date, as
+in ``23 Apr 1964\quad 1:14\thinspace p.m.''.
+
+\csdisplay
+\def\monthname{%
+ \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}%
+\def\timestring{\begingroup
+ \count0 = \time \divide\count0 by 60
+ \count2 = \count0 % The hour.
+ \count4 = \time \multiply\count0 by 60
+ \advance\count4 by -\count0 % The minute.
+ \ifnum\count4<10 \toks1 = {0}% Get a leading zero.
+ \else \toks1 = {}%
+ \fi
+ \ifnum\count2<12 \toks0 = {a.m.}%
+ \else \toks0 = {p.m.}%
+ \advance\count2 by -12
+ \fi
+ \ifnum\count2=0 \count2 = 12 \fi % Make midnight `12'.
+ \number\count2:\the\toks1 \number\count4
+ \thinspace \the\toks0
+\endgroup}%
+\def\timestamp{\number\day\space\monthname\space
+ \number\year\quad\timestring}%
+|
+
+
+\section Lists
+
+\null
+\xrdef{listmacs}
+\bix^^{itemized lists}
+\bix^^{enumerations}
+\pix^|\numberedlist| produces numbered lists; |\endnumberedlist| ends
+them.
+\pix^|\unorderedlist| is analogous.
+For either of these, items inside the lists begin
+with \pix^|\li| (``list item''). You can put \pix^|\listcompact|
+at the beginning of a list if
+you don't want any additional space between the items of that list.
+Lists can be nested arbitrarily.
+
+You can control the spacing between the items more generally by
+assigning values to the registers listed below. If the items in
+your lists tend to be long, you might want to make |\interitemskip|
+nonzero.
+The left indentation of each list item is given by |\par!-indent| plus
+|\list!-left!-indent|; the right indentation of each list item
+is given by |\list!-right!-indent|.
+
+\csdisplay
+\newskip\abovelistskip \abovelistskip = .5\baselineskip
+\newskip\interitemskip \interitemskip = 0pt
+\newskip\belowlistskip \belowlistskip = .5\baselineskip
+\newdimen\listleftindent \listleftindent = \parindent
+\newdimen\listrightindent \listrightindent = 0pt
+\def\listcompact{\interitemskip = 0pt \relax}%
+|
+
+Both numbered and unnumbered lists use the macros that follow.
+We don't change |\parindent|, since many existing macros, e.g.,
+|\footnote|, depend on |\parindent|.
+We must account for the
+possibility that items are more than one paragraph long. In this case, all
+paragraphs after the first will be indented.
+We use
+|\leftskip| and |\rightskip| to indent the list items.
+Indentation of displays is accounted for by changes to |\every!-dis!-play|.
+^^|\everydisplay|
+
+\csdisplay
+\newdimen\@listindent
+\def\beginlist{%
+ \@listindent = \parindent
+ \advance\@listindent by \listleftindent
+ \everydisplay = \expandafter{\the\everydisplay
+ % Don't lose user's \everydisplay:
+ \advance\displayindent by \@listindent
+ \advance\displaywidth by -\@listindent
+ \advance\displaywidth by -\listrightindent}%
+ \nobreak\vskip\abovelistskip
+ \parskip = 0pt
+ % \leftskip shifts nested lists to the right on the page.
+ \advance\leftskip by \@listindent
+ \advance\rightskip by \listrightindent}%
+\def\printitem{\par\noindent
+ \llap{\hskip-\listleftindent \marker \enspace}}%
+\def\endlist{\vskip\belowlistskip}%
+|
+
+\noindent
+You can change the way the item labels are typeset by
+redefining the |\numbered!-marker| macro.
+\pix^^|\numberedmarker|
+
+\csdisplay
+\newcount\numberedlistdepth \newcount\itemnumber
+\newcount\itemletter
+\def\numberedmarker{%
+ \ifcase\numberedlistdepth
+ (impossible)%
+ \or \itemnumberout)%
+ \or \itemletterout)%
+ \else *%
+ \fi}%
+|
+
+\noindent Here are the definitions of |\numberedlist| and
+|\unorderedlist|.
+Both definitions have the same structure.
+
+\csdisplay
+\def\numberedlist{\environment{@numbered-list}%
+ \advance\numberedlistdepth by 1
+ \itemnumber = 1 \itemletter = `a
+ \beginlist \let\marker = \numberedmarker
+ \def\li{%
+ \ifnum\itemnumber=1\else \vskip\interitemskip \fi
+ \printitem
+ \advance\itemnumber by 1 \advance\itemletter by 1
+ }}%
+\def\itemnumberout{\number\itemnumber}%
+\def\itemletterout{\char\itemletter}%
+\def\endnumberedlist{\par
+ \endenvironment{@numbered-list}\endlist}%
+!bigskip
+\newcount\unorderedlistdepth
+\def\unorderedmarker{%
+ \ifcase\unorderedlistdepth
+ (impossible)%
+ \or \blackbox
+ \or ---%
+ \else *%
+ \fi}%
+\def\unorderedlist{\environment{@unordered-list}%
+ \advance\unorderedlistdepth by 1
+ \beginlist \itemnumber = 1
+ \let\marker = \unorderedmarker
+ \def\li{%
+ \ifnum\itemnumber=1\else \vskip\interitemskip \fi
+ \printitem \advance\itemnumber by 1
+ }}%
+\def\endunorderedlist{\par
+ \endenvironment{@unordered-list}\endlist}%
+|
+
+\eix^^{itemized lists}
+\eix^^{enumerations}
+
+
+\section Verbatim listing
+
+The \pix^|\listing| macro produces a verbatim listing of a specified
+file in the |\tt| font.
+It is based on the code on \knuth{page~380}.
+Tabs produce a fixed amount of space, and form
+feeds produce a page break. Other control characters produce whatever
+happens to be at that font position, which is generally not very useful.
+By redefining |\setup!-listing!-hook|,
+\pix^^|\setuplistinghook|
+you can take additional actions that are appropriate for your particular
+fonts and\slash or environment before the file is read in.
+
+\csdisplay
+\def\listing#1{%
+ \par \begingroup \@setuplisting \setuplistinghook
+ \input #1 \endgroup}%
+\let\setuplistinghook = \empty
+\def\@setuplisting{%
+ \uncatcodespecials
+ \obeywhitespace \makeactive\` \makeactive\^^I
+ \def^^L{\vfill\eject}\tt}%
+{\makeactive\` \gdef`{\relax\lq}}% Defeat ligatures.
+{\makeactive\^^I\gdef^^I{\hskip8\fontdimen2\tt \relax}}%
+|
+
+
+\section Tables of contents
+
+\null ^^{table of contents}
+The macro \pix^|\writetocentry| writes a macro call to the file
+|\jobname.toc|. The first argument of |\writetocentry|, e.g.,
+``chapter'', is used to compose the name of the called macro. The second
+argument is the text to appear in the table of contents entry.
+|\writetocentry| appends the page number to the macro call. For
+example:
+\csdisplay
+\writetocentry{chapter}{Introduction}
+|
+\noindent
+will produce the line:
+\csdisplay
+\tocchapterentry{Introduction}{2}
+|
+\noindent in the |.toc| file, indicating
+that `Introduction' started on page 2.
+
+You can use |\writenumberedtocentry| to provide a third parameter, such
+as a chapter number. For example:
+\csdisplay
+\writenumberedtocentry{chapter}{The second chapter}{2}
+|
+\noindent will write a line:
+\csdisplay
+\tocchapterentry{The second chapter}{2}{14}
+|
+\noindent
+You can also |\write| to |\tocfile| yourself.
+
+\csdisplay
+\newwrite\tocfile \newif\iftocfileopened
+\def\opentocfile{\iftocfileopened\else
+ \tocfileopenedtrue
+ \immediate\openout\tocfile = \jobname.toc
+\fi}%
+\def\writenumberedtocentry#1#2#3{\ifrewritetocfile
+ \opentocfile
+ \write\tocfile{%
+ \expandafter\noexpand \csname toc#1entry\endcsname
+ {#2}{#3}{\folio}}%
+\ignorespaces\fi}%
+\def\writenumberedtocentry#1#2#3{\ifrewritetocfile
+ \opentocfile
+ \write\tocfile{%
+ \expandafter\noexpand \csname toc#1entry\endcsname
+ {#2}{#3}{\folio}}%
+\ignorespaces\fi}%
+|
+
+To produce a table of contents, read the |.toc| file with
+\pix^|\readtocfile|. You should call |\read!-tocfile| before the first
+|\write!-toc!-entry|. When you're processing the table of contents
+without regenerating it, you should not rewrite
+the |.toc| file---if you do, its contents will be lost.
+The command
+|\rewrite!-tocfile!-false| will prevent the rewrite.
+
+\csdisplay
+\newif\ifrewritetocfile \rewritetocfiletrue
+\def\readtocfile{\testfileexistence{toc}%
+ \iffileexists
+ \input \jobname.toc
+ \ifrewritetocfile \opentocfile \fi
+ \fi}%
+|
+
+Here are some definitions of possible |\toc|\dots|entry| macros. These
+definitions are meant only as examples---running leaders across the line
+is usually not the best way to typeset a table of contents.
+
+\csdisplay
+\def\tocchapterentry#1#2{\line{\bf #1 \dotfill\ #2}}%
+\def\tocsectionentry#1#2{%
+ \line{\quad\sl #1 \dotfill\ \rm #2}}%
+\def\tocsubsectionentry#1#2{%
+ \line{\qquad\rm #1 \dotfill\ #2}}%
+|
+
+
+\section Cross-references
+
+\null ^^{cross-references}
+\xrdef{xrefs}
+The macros that follow provide symbolic
+cross-referencing, so that you can refer to something in another part of
+a document by name instead of by its actual page number.
+\pix^|\xrdef||{foo}| defines a label |foo| to be the current page
+number, and \pix^|\xrefn||{foo}| produces that page number, e.g., $77$.
+More often you'll want to say something like ``see p.\thinspace77'', so
+\pix^|\xref||{foo}| produces ``p.\thinspace 77''. If |foo| is not
+defined, a warning message will be given. |\xrefwarningfalse|
+suppresses the warning.
+
+These macros provide no protection against duplicate definitions. You can
+check for duplicate definitions by sorting the cross-reference file and
+checking, either mechanically or by eye, for adjacent definitions of
+the same symbol.
+
+\csdisplay
+\newif\ifxrefwarning \xrefwarningtrue
+\def\xrdef#1{\begingroup
+ \xrlabel{#1}%
+ \edef\@wr{\@writexrdef{\the\@xrlabeltoks}}%
+ \@wr
+ \endgroup \ignorespaces}%
+\def\@writexrdef#1{\write\reffile{%
+ \string\gdef
+ \expandafter\string\csname#1\endcsname
+ {\noexpand\folio}\percentchar}}%
+\def\xrefnumber#1{%
+ \xrlabel{#1}%
+ % \@xrlabeltoks now has the control sequence name.
+ \toks0 =
+ \expandafter{\csname\the\@xrlabeltoks\endcsname}%
+ \expandafter \ifx\the\toks0\relax
+ \ifxrefwarning \message{Undefined label
+ `\tokstostring{#1}'.}\fi
+ {\let\spacesub = \space
+ \expandafter\xdef\the\toks0
+ {`{\tt \tokstostring{#1}}'}}\fi
+ \the\toks0}%
+\def\xref#1{p.\thinspace\xrefnumber{#1}}%
+\def\xrefn#1{\xrefnumber{#1}}%
+|
+
+This macro turns a label into a list of character tokens in the token
+register |\labeltoks|. A label can include blanks and control sequences in
+it as well as normal characters, but it can't include braces.
+
+\csdisplay
+\newtoks\@xrlabeltoks
+\def\xrlabel#1{\begingroup
+ \escapechar = `\_ \edef\tts{\tokstostring{#1_}}%
+ \global\@xrlabeltoks = \expandafter{\tts}%
+ \endgroup}%
+|
+
+It takes two passes to get the cross-references right, since the
+definitions are written out to the auxiliary file |\jobname.aux|.
+\pix^|\readreffile| reads them back in. If you don't issue this command
+before the first definition, you'll lose all the definitions from the
+previous run.
+
+\csdisplay
+\newwrite\reffile \newif\ifreffileopened
+\def\openreffile{\ifreffileopened\else
+ \reffileopenedtrue
+ \immediate\openout\reffile = \jobname.aux
+ \fi}%
+\def\readreffile{%
+ \testfileexistence{aux}%
+ \iffileexists
+ \begingroup
+ \@setletters
+ \input \jobname.aux
+ \endgroup
+ \else
+ \message{No cross-reference file; I won't give you
+ warnings about undefined labels.}%
+ \xrefwarningfalse
+ \fi
+ \openreffile}%
+\def\@setletters{%
+ \catcode`_ = \letter \catcode`+ = \letter
+ \catcode`- = \letter \catcode`@ = \letter
+ \catcode`0 = \letter \catcode`1 = \letter
+ \catcode`2 = \letter \catcode`3 = \letter
+ \catcode`4 = \letter \catcode`5 = \letter
+ \catcode`6 = \letter \catcode`7 = \letter
+ \catcode`8 = \letter \catcode`9 = \letter
+ \catcode`( = \letter \catcode`) = \letter}%
+|
+
+^^{equations, labelling}
+You can give symbolic names to equations in a similar way, using
+\pix^|\eqdef| and \pix^|\eqref|. |\eqdef| inserts its own |\eqno|
+command, so it must be invoked in a place where |\eqno| is legal.
+
+\csdisplay
+\newcount\eqnumber
+\def\eqdef#1{\global\advance\eqnumber by 1
+ \expandafter\xdef
+ \csname#1eqref\endcsname{\the\eqnumber}%
+ \immediate\write\reffile{\string\def
+ \expandafter\string\csname#1eqref\endcsname
+ {\the\eqnumber}}%
+ \eqno
+ \eqprint{\the\eqnumber}}%
+|
+
+|\eqref| produces ``(equation number)''. You can handle fancier
+formatting by redefining \pix^|\eqprint|. For example, you could redefine
+it so that the equation numbers include
+the chapter number.
+
+\csdisplay
+\def\eqref#1{%
+ \expandafter \ifx \csname#1eqref\endcsname \relax
+ \ifxrefwarning \message{Undefined equation label
+ `#1'.}\fi
+ \expandafter\def\csname#1eqref\endcsname{00}%
+ \else \eqprint{\csname#1eqref\endcsname}%
+ \fi}%
+\def\eqprint#1{(#1)}%
+|
+
+
+\section Environments
+
+\null ^^{environments} These macros let you define your own named groups
+(environments) for parts of your manuscript. Like \TeX\ groups, these
+groups can be nested, and in fact their nesting can be intertwined with
+the nesting of \TeX\ groups. If the names at the beginning and end of
+an environment don't match, you'll get an error message. The macros are
+designed so that the message you get when such an error occurs will give
+you a good chance of localizing the cause of the error easily.
+
+You begin an environment with
+\pix^^|\environment|
+|\envi!-ron!-ment| |{foo}| and end it with |\endenvironment{foo}|, where
+|foo| is the name of the environment. Our macros slightly improve on
+the answer to Exercise~5.7 of \texbook, by doing some checks on
+|\begingroup| and |\endgroup| pairs, as well as making sure
+|\environment| and |\endenvironment| pairs match.
+
+\csdisplay
+\def\environment#1{\ifx\@groupname\undefined\else
+ \errhelp = \@unnamedendgrouphelp
+ \errmessage{`\@groupname' was not closed by
+ \string\endenvironment}\fi
+ \def\@groupname{#1}%
+ \begingroup
+ \let\@groupname = \undefined \ignorespaces}%
+\def\endenvironment#1{\endgroup
+ \def\@thearg{#1}%
+ \ifx\@groupname\@thearg
+ \else
+ \ifx\@groupname\undefined
+ \errhelp = \@isolatedendenvironmenthelp
+ \errmessage{Isolated
+ \string\endenvironment\space for `#1'}%
+ \else
+ \errhelp = \@mismatchedenvironmenthelp
+ \errmessage{Environment `#1' ended,
+ but `\@groupname' started}%
+ \endgroup % Probably a typo in the names.
+ \fi
+ \fi
+ \let\@groupname = \undefined \ignorespaces}%
+|
+
+We also define help messages for each of the errors above.
+^^|\newhelp|
+
+\csdisplay
+\newhelp\@unnamedendgrouphelp{%
+ Most likely, you just forgot an^^J%
+ \string\endenvironment.
+ Maybe you should try inserting another^^J%
+ \string\endgroup to recover.}%
+\newhelp\@isolatedendenvironmenthelp{%
+ You ended an environment X, but^^J%
+ no \string\environment\space to start it
+ is anywhere in sight.^^J%
+ You might also be at an
+ \string\endenvironment\space that would match^^J%
+ a \string\begingroup, i.e., you forgot an
+ \string\endgroup.}%
+\newhelp\@mismatchedenvironmenthelp{%
+ You started an environment X, but^^J%
+ you ended it with Y. Maybe you made a typo
+ in one or the other^^J%
+ of the names.}%
+|
+
+Some environments should not be allowed to occur within
+another environment. Let's call these environments
+``outer environments''. |\check!-env| checks that no outer environment
+is currently in effect and complains if one is. To use |\check!-env|, you
+must issue the command |\environment!-true| at the beginning of every
+outer environment.
+
+\csdisplay
+\newif\ifenvironment
+\def\checkenv{%
+ \ifenvironment
+ \errhelp = \@interwovenenvhelp
+ \errmessage{Interwoven environments}%
+ \endgroup
+ \fi}%
+\newhelp\@interwovenenvhelp{%
+ Perhaps you forgot to end the previous^^J%
+ environment? I'm finishing off the current group,^^J%
+ hoping that will fix it.}%
+|
+
+
+\section Justification
+
+\bix^^{flush left}
+\bix^^{flush right}
+\bix^^{centered text}
+The three macros \pix^|\flushleft|, \pix^|\flushright|, and
+\xrdef{eplaincenter}
+\pix^|\center| justify the text on the following lines in the indicated way.
+The command should appear on a line by itself.
+Both the command and the text should be enclosed in a group---%
+the end of the group indicates the end of the text.
+The entire group is set as a single paragraph, with lines filled out
+on one side or another as appropriate. Blank lines are reproduced.
+
+\csdisplay
+\begingroup
+ \catcode `\^^M = \active
+ \globaldefs = 1 %
+ \def\flushleft{\beforejustify %
+ \aftergroup\@endflushleft %
+ \def^^M{\null\hfil\break}%
+ \def\@eateol^^M{}\@eateol}%
+ \def\flushright{\beforejustify %
+ \aftergroup\@endflushright %
+ \def^^M{\break\null\hfil}%
+ \def\@eateol^^M{\hfil\null}\@eateol}%
+ \def\center {\beforejustify %
+ \aftergroup\@endcenter %
+ \def^^M{\hfil\break\null\hfil}%
+ \def\@eateol^^M{\hfil\null}\@eateol}%
+\endgroup
+|
+
+The following commands are called as a result of the |\after!-group|
+^^|\aftergroup|
+in the definitions of |\flush!-left|, |\flush!-right|, and |\center|.
+They perform the necessary cleanup operations.
+
+\csdisplay
+\def\@endflushleft{\unpenalty
+ {\parfillskip = 0pt plus 1 fil\par}%
+ \ignorespaces}%
+\def\@endflushright{%
+ % Remove the \hfil\null\break we just put on.
+ \unskip \setbox0=\lastbox \unpenalty
+ % We have fil glue at the left of the line;
+ % \parfillskip shouldn't affect that.
+ {\parfillskip = 0pt \par}\ignorespaces}%
+\def\@endcenter{%
+ % Remove the \hfil\null\break we just put on.
+ \unskip \setbox0=\lastbox \unpenalty
+ % We have fil glue at the left of the line;
+ % \parfillskip must balance it.
+ {\parfillskip = 0pt plus 1fil \par}\ignorespaces}%
+\def\beforejustify{%
+ \par\noindent
+ \catcode`\^^M = \active
+ \checkenv \environmenttrue}%
+|
+
+\eix^^{flush left}
+\eix^^{flush right}
+\eix^^{centered text}
+
+
+\section Tables
+
+The \pix^|\makecolumns| macro enables you to give all the entries in a
+table without having to worry about where the columns break. For
+example, if you're typing a long alphabetical list that will be
+formatted in several columns, you usually won't know in advance where
+one column ends and the next begins. Moreover, if another item gets
+added, the column breaks will change.
+
+|\makecolumns| takes two (delimited) arguments: the total number of
+entries in the table and the number of columns in the table. For
+example, `|\makecolumns 37/3:|' specifies a three-column table whose
+entries are the next $37$ lines. You can adjust the positioning of the
+table on the page by changing |\parindent|, which determines the space
+to the left, and |\hsize|, which determines the space from the left
+margin of the page to the right of the block. You can allow a page
+break above the |\valign|
+^^|\valign//used in {\tt\\makecolumns}|
+by changing
+\pix^|\abovecolumnspenalty|.
+
+\csdisplay
+\newcount\abovecolumnspenalty
+\abovecolumnspenalty = 10000
+\newcount\@linestogo % Lines remaining to process.
+\newcount\@linestogoincolumn % Lines remaining in column.
+\newcount\@columndepth % Number of lines in a column.
+\newdimen\@columnwidth % Width of each column.
+\newtoks\crtok \crtok = {\cr}%
+\def\makecolumns#1/#2: {\par \begingroup
+ \@columndepth = #1 \advance\@columndepth by #2
+ \advance\@columndepth by -1
+ \divide \@columndepth by #2
+ \@linestogoincolumn = \@columndepth \@linestogo = #1
+ \def\@endcolumnactions{%
+ \ifnum \@linestogo<2
+ \the\crtok \egroup \endgroup \par
+ % End \valign and \makecolumns.
+ \else
+ \global\advance\@linestogo by -1
+ \ifnum\@linestogoincolumn<2
+ \global\@linestogoincolumn = \@columndepth
+ \the\crtok
+ \else &\global\advance\@linestogoincolumn by -1
+ \fi
+ \fi}%
+ \makeactive\^^M\letreturn\@endcolumnactions
+ \@columnwidth = \hsize
+ \advance\@columnwidth by -\parindent
+ \divide\@columnwidth by #2
+ \penalty\abovecolumnspenalty
+ \noindent % It's not a paragraph (usually).
+ \valign\bgroup
+ &\hbox to \@columnwidth{\strut ##\hfil}\cr
+}% The next end-of-line starts everything going.
+|
+
+
+\section Footnotes
+
+\null ^^{footnotes}
+Footnotes are most commonly typeset by using a raised number as the
+reference mark. We define the \pix^|\numberedfootnote| macro to do
+this. It also redefines ^|\vfootnote| to allow slightly more general
+formatting of footnotes than \plainTeX\ does. The dimension register
+\pix^^|\footnotemarkseparation| |\foot!-note!-mark!-sepa!-ra!-tion|
+controls the space between the footnote mark (e.g., the number) and the
+beginning of the text. The \pix^|\everyfootnote| tokens are inserted
+before producing the footnote.
+
+The \plainTeX\ definitions of |\footnote| and |\vfootnote| are
+preserved in |\@plain!-footnote| and |\@plain!-vfootnote| in case you should
+need them.
+\csdisplay
+\newcount\footnotenumber \newtoks\everyfootnote
+\newdimen\footnotemarkseparation
+\footnotemarkseparation = .5em
+\let\@plainfootnote = \footnote
+\let\@plainvfootnote = \vfootnote
+\def\vfootnote#1{\insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \everypar = {}%
+ \the\everyfootnote
+ \indent\llap{#1\kern\footnotemarkseparation}\footstrut
+ \futurelet\next\fo@t}%
+\def\numberedfootnote{\global\advance\footnotenumber by 1
+ \@plainfootnote{$^{\number\footnotenumber}$}}%
+|
+
+
+\section Double columns
+
+\null ^^{double columns} The |\doublecolumns| command begins
+double-column output, while the |\single!-column|
+\pix^^|\singlecolumn|
+command restores
+single-column output. You can switch back and forth between them
+on a single page.
+The glue specified by |\above!-double!-column!-skip| and
+|\below!-double!-column!-skip| is inserted before and after the
+double-column material.
+
+The approach is derived from \knuth{page~417}.
+
+\csdisplay
+\newskip\abovedoublecolumnskip
+\newskip\belowdoublecolumnskip
+\abovedoublecolumnskip = \bigskipamount
+\belowdoublecolumnskip = \bigskipamount
+\newdimen\gutter \gutter = 2pc
+\newdimen\doublecolumnhsize \doublecolumnhsize = \hsize
+\newbox\@partialpage \newdimen\singlecolumnhsize
+\newdimen\singlecolumnvsize \newtoks\previousoutput
+\def\doublecolumns{\par % Don't start in horizontal mode.
+ \previousoutput = \expandafter{\the\output}
+ \advance\doublecolumnhsize by -\gutter
+ \divide\doublecolumnhsize by 2
+ \output = {\global\setbox\@partialpage =
+ \vbox{\unvbox255\vskip\abovedoublecolumnskip}}%
+ \pagegoal = \pagetotal \break % Expands \output above.
+ \output = {\doublecolumnoutput}%
+ \singlecolumnhsize = \hsize
+ \singlecolumnvsize = \vsize
+ \hsize = \doublecolumnhsize \vsize = 2\vsize}%
+|
+
+The |\@double!-column!-split| macro does the actual splitting.
+Insertions are assumed to be single-column material. If you don't want
+this to be the case, you'll have to modify the output routine. After
+|\@double!-column!-split| has done its work, |\box255| will have the
+double-column material. The double-column material will be preceded by
+any single-column material that was typeset before |\doublecolumns| was
+invoked. |\box4| will have the material that didn't fit on the page.
+
+\csdisplay
+\def\@doublecolumnsplit{%
+ \splittopskip = \topskip \splitmaxdepth = \maxdepth
+ \dimen0 = \singlecolumnvsize
+ \advance\dimen0 by -\ht\@partialpage
+ \advance\dimen0 by -\ht\footins
+ \advance\dimen0 by -\skip\footins
+ \advance\dimen0 by -\ht\topins
+ \begingroup
+ \vbadness = 10000
+ \global\setbox1=\vsplit255 to \dimen0 \wd1=\hsize
+ \global\setbox3=\vsplit255 to \dimen0 \wd3=\hsize
+ \endgroup
+ \global\setbox4=\vbox{\unvbox255
+ \penalty\outputpenalty}%
+ \global\setbox255=\vbox{\unvbox\@partialpage
+ \hbox to \singlecolumnhsize{\box1\hfil\box3}%
+ \vfill}}%
+|
+\needspace{.5in}
+|\double!-column!-out!-put| is the real output routine. We call the old
+|\output| to do the work of actually shipping out the box.
+
+\csdisplay
+\def\doublecolumnoutput{\@doublecolumnsplit
+ \hsize = \singlecolumnhsize \vsize = \singlecolumnvsize
+ \previousoutput \unvbox4}%
+|
+
+|\singlecolumn| resumes typesetting in one column. It assumes that
+|\doublecolumns| has been called.
+
+\csdisplay
+\def\singlecolumn{\par % Don't start in horizontal mode.
+ \output = {\global\setbox1 =
+ \vbox{\unvbox255\vskip\abovedoublecolumnskip}}%
+ \pagegoal = \pagetotal \break \setbox255 = \box1
+ {\singlecolumnvsize = \ht255
+ \divide\singlecolumnvsize by 2
+ \advance\singlecolumnvsize by +\ht\@partialpage
+ \advance\singlecolumnvsize by +\ht\footins
+ \advance\singlecolumnvsize by +\skip\footins
+ \advance\singlecolumnvsize by +\ht\topins
+ \@doublecolumnsplit}%
+ \hsize = \singlecolumnhsize
+ \vsize = \singlecolumnvsize
+ \output = \expandafter{\the\previousoutput}%
+ \unvbox255}%
+|
+
+\margin{`Sensible paragraph skips' section deleted}
+
+
+\section Finishing up
+
+We now must undo the changes that we made when we started (see
+\xref{eplainconv}). We also give a version identification, which is
+subsequently available in |\fmt!-name| and |\fmt!-version|.
+
+\csdisplay
+\let\wlog = \@plainwlog \catcode`@ = \other
+\def\fmtname{eplain}%
+{\edef\plainversion{\fmtversion}%
+ \xdef\fmtversion{1.0: 15 May 1990
+ (and plain \plainversion)}%
+}%
+|
+
+\eix^^|eplain.tex|
+
+\endchapter
+\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/usingtex.tex b/Master/texmf-dist/doc/plain/impatient/usingtex.tex
new file mode 100644
index 00000000000..35ec5310d23
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/usingtex.tex
@@ -0,0 +1,822 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% See file fdl.tex for copying conditions.
+
+\input macros
+\chapter{Using \TeX}
+
+\chapterdef{usingtex}
+
+% Avoid underfull box complaint about the empty paragraph
+% that precedes the first section heading.
+%
+\def\par{{\parfillskip = 0pt plus 1fil\endgraf}\let\par=\endgraf}
+\vglue-\abovesectionskip % we've skipped enough already
+\vskip0pt % Make \combineskips work.
+
+\section Turning input into ink
+
+\subsection Programs and files you need
+
+In order to produce a \TeX\ document, you'll need to run the \TeX\
+program and several related programs as well. You'll also need
+supporting files for \TeX\ and possibly for these other programs. In
+this book we can tell you about \TeX, but we can't tell you about the
+other programs and the supporting files except in very general terms
+because they depend on your local \TeX\ environment. The people who
+provide you with \TeX\ should be able to supply you with what we call
+\emph{local information}.
+\pix^^{local information}
+The local information tells you how to
+start up \TeX, how to use the related programs, and how to gain access
+to the supporting files.
+
+Input to \TeX\ consists of a file of ordinary text that you can prepare
+with a ^{text editor}. A \TeX\ input file, unlike an input file for a
+typical word processor, doesn't ordinarily contain any invisible
+^{control characters}.
+Everything that \TeX\ sees is visible to you too if you
+look at a listing of the file.
+
+Your input file may turn out to be little more than a skeleton that
+calls for other input files. \TeX\ users often organize large documents
+such as books this way. You can use the ^|\input| command (\xref\input)
+to embed one input file within another. In particular, you can use
+|\input| to incorporate files containing \emph{macro definitions}---%
+^^{macros//in auxiliary files}
+auxiliary definitions that enhance \TeX's capabilities.
+If any macro files are available at your \TeX\ installation, the local
+information about \TeX\ should tell you how to get at the macro files
+and what they can do for you. The standard form of \TeX,
+the one described in this book, incorporates a
+collection of macros and other definitions known as ^{\plainTeX}
+(\xref{\plainTeX}).
+
+When \TeX\ processes your document, it produces a file called the
+^{\dvifile}. The abbreviation ``|dvi|'' stands for ``device
+independent''. The abbreviation was chosen because the information in
+the \dvifile\ is independent of the device that you use to print or
+display your document.
+
+To print your document or view it with a \emph{previewer},
+^^{previewer}
+you need to process the ^{\dvifile} with
+a \emph{device driver\/} program.
+^^{device drivers}
+(A previewer is a program that
+enables you to see on a screen some approximation of what the typeset
+output will look like.)
+Different output devices usually
+require different device drivers.
+After running the device driver,
+you may also need to transfer the output of the device driver to the
+printer or other output device.
+^^{printers} ^^{output devices}
+The local information about \TeX\ should tell
+you how to get the correct device driver and use it.
+
+Since \TeX\ has no built-in knowledge of particular fonts, it uses
+\emph{font files}
+^^{font files}
+to obtain information about the fonts used in your
+document. The font files should also be part of your local \TeX\
+environment. Each font normally requires two files: one containing the
+dimensions of the characters in the font (the \emph{metrics file})
+^^{metrics file}
+and one containing the shapes of the characters (the \emph{shape file}).
+^^{shape file}
+Magnified versions of a font share the metrics file but have
+different shape files. ^^{magnification} Metrics files are sometimes
+referred to as ^{\tfmfile}s, and the different varieties of shape files
+are sometimes referred to as ^{\pkfile}s, ^{\pxlfile}s, and ^{\gffile}s.
+These names correspond to the names of the files that \TeX\ and its
+companion programs use. For example, |cmr10.tfm| is the metrics file
+for the |cmr10| font (10-point Computer Modern Roman).
+
+\TeX\ itself uses only the metrics file, since it doesn't care what the
+characters look like but only how much space they occupy. The device
+driver ordinarily uses the shape file, since it's responsible for
+creating the printed image of each typeset character. Some device
+drivers need to use the metrics file as well. Some device drivers can
+utilize fonts that are resident in a printer and don't need shape files
+for those fonts.
+\secondprinting{\vfill\eject}
+
+
+\subsection Running {\TeX}
+
+\bix^^{running \TeX}
+You can run \TeX\ on an input file |screed.tex| by typing
+^^{input files}
+something like `|run tex|' or just `|tex|' (check your local information).
+\TeX\ will respond with something like:
+% 4/23/90 is Shakespeare's 426th birthday, and Karl's 26th.
+\csdisplay
+This is TeX, Version 3.0 (preloaded format=plain 90.4.23)
+**
+|
+The ``preloaded format'' here refers to a predigested form of the
+^{\plainTeX} macros that come with \TeX.
+You can now type `|screed|' to get \TeX\ to process your file.
+When it's done, you'll see something like:
+\csdisplay
+(screed.tex [1] [2] [3] )
+Output written on screed.dvi (3 pages, 400 bytes).
+Transcript written on screed.log.
+|
+displayed on your terminal, or printed in the record of your
+run if you're not working at a terminal. Most of this output is
+self-explanatory.
+The numbers in brackets are page numbers that \TeX\ displays when it
+ships out each page of your document to the \dvifile.
+\TeX\ will usually assume an
+extension `|.tex|' to an input file name
+if the input file name you gave doesn't
+have an extension. For some forms of \TeX\ you may be able to
+invoke \TeX\ directly for an input file by typing:
+\csdisplay
+tex screed
+|
+or something like this.
+
+Instead of providing your \TeX\ input from a file, you can type it directly at
+your terminal. To do so, type `^|\relax|' instead of `|screed|' at the
+`|**|' prompt.
+\TeX\ will now prompt you with a `|*|' for each line of input and interpret
+each line of input as it sees it.
+To terminate the input, type a command such as `|\bye|' that tells \TeX\
+you're done.
+Direct input is sometimes a handy way of experimenting with \TeX.
+
+When your input file contains other embedded input files, the displayed
+information indicates when \TeX\ begins and ends processing each
+embedded file.
+^^{input files//embedded}
+\xrdef{infiles}
+\TeX\ displays a left parenthesis and the file name
+when it starts working on a file and displays the corresponding right
+parenthesis when it's done with the file.
+If you get any ^{error messages} in the displayed output, you can match
+them with a file by looking for the most recent unclosed left parenthesis.
+
+For a more complete explanation of how to run \TeX,
+see \knuth{Chapter~6} and your ^{local information}.
+\eix^^{running \TeX}
+
+
+\section Preparing an input file
+
+In this section we explain some of the conventions that you must follow in
+preparing input for \TeX\null. Some of the information given here also
+appears in the examples in \chapterref{examples} of this book.
+^^{input, preparing}
+
+\subsection Commands and control sequences
+
+\bix^^{commands}
+\bix^^{control sequences}
+Input to \TeX\ consists of a sequence of commands that tell \TeX\ how to
+typeset your document. Most characters act as commands of a particularly
+simple kind: ``typeset me''. The letter `|a|', for instance, is a
+command to typeset an `a'. But there's another kind of command---a
+\emph{control sequence}---that gives \TeX\ a more elaborate
+instruction. A control sequence ordinarily starts with a backslash
+(|\|), though you can change that convention if you need to.
+\xrdef{@backslash}
+For instance, the input:
+
+\csdisplay
+She plunged a dagger (\dag) into the villain's heart.
+|
+contains the control sequence |\dag|; it produces the typeset output:
+\display{%
+She plunged a dagger (\dag) into the villain's heart.
+}
+\noindent Everything in this example except for the |\dag| and the spaces
+acts like a ``typeset me'' command. We'll explain more about spaces
+on \xrefpg{spaces}.
+
+There are two kinds of control sequences: \emph{control words}
+^^{control words}
+and \emph{control symbols}:
+^^{control symbols}
+\ulist\compact
+\li A control word consists of a
+backslash followed by one or more letters, e.g., `|\dag|'.
+The first character that isn't a letter marks the end
+of the control word.
+\li A control symbol consists of a backslash followed by a single character
+that isn't a letter, e.g., `|\$|'.
+The character can be a space or even the end of a line (which is a perfectly
+legitimate character).
+\endulist
+\noindent
+A control word (but not a control symbol)
+absorbs any spaces or ends of line that follow it.
+^^{control sequences//absorbing spaces}
+If you don't want to lose a space after a control word,
+follow the control sequence with a ^{control space}
+(|\!visiblespace|) or with `|{}|'. Thus either:
+\csdisplay
+The wonders of \TeX\!visiblespace!.shall never cease!!
+|
+or:\hfil\
+\csdisplay
+The wonders of \TeX{} shall never cease!!
+|
+produces:
+\display{%
+The wonders of \TeX{} shall never cease!
+}
+\noindent rather than:
+\display{%
+The wonders of \TeX shall never cease!
+}
+\noindent
+which is what you'd get if you left out the `|\|\visiblespace'
+or the `|{}|'.
+
+Don't run a control word together with the text that follows it---\TeX\
+won't know where the control word ends. For instance, the |\c| control
+sequence places a cedilla accent on the character that follows it. The
+French word {\it gar\c con\/} must be typed as
+`|gar\c!visiblespace!.con|', not `|gar\ccon|'; if you write the latter,
+\TeX\ will complain about an undefined control sequence |\ccon|.
+
+A control symbol, on the other hand, doesn't absorb anything that
+follows it. Thus you must type `\$13.56' as `|\$13.56|', not
+`|\$!vs13.56|'; the latter form would produce `\hbox{\$ 13.56}'.
+However, those accenting commands that are named by control symbols are
+defined in such a way that they produce the effect of absorbing a
+following space. Thus, for example, you can type the French word {\it
+d\'eshabiller\/} either as `|d\'eshabiller|' or as
+`|d\'!visiblespace!.eshabiller|'.
+
+Every control sequence is also a command,
+but not the other way around.
+^^{commands//versus control sequences}
+^^{control sequences//versus commands}
+For instance, the letter `|N|'
+is a command, but it isn't a control sequence.
+In this book we ordinarily use ``command'' rather than
+``control sequence'' when either term would do.
+We use ``control sequence'' when we want to emphasize aspects of \TeX\
+syntax that don't apply to commands in general.
+
+\eix^^{control sequences}
+\eix^^{commands}
+
+
+\subsection Arguments
+
+\xrdef{arg1}
+Some commands need to be followed by one or more
+\emph{arguments} ^^{arguments}
+that help to determine what the command does.
+For instance, the |\vskip| command, which
+tells \TeX\ to skip down (or up) the page,
+expects an argument specifying how much space to skip. To skip
+down two inches, you would type `|\vskip 2in|', where |2in|
+is the argument of |\vskip|.
+
+Different commands expect different kinds of arguments. Many commands
+expect dimensions, such as the |2in| in the example above.
+Some commands, particularly those defined by macros,
+expect arguments that are either a single character or some
+text enclosed in braces.
+Yet others require that their arguments be enclosed in braces, i.e.,
+they don't accept single-character arguments.
+The description of each command in this book tells you what kinds of arguments,
+if any, the command expects.
+In some cases, required braces define a group (see \xref{bracegroup}).
+
+\secondprinting{\vfill\eject}
+
+
+\subsection Parameters
+
+\xrdef{introparms}
+Some commands are parameters (\xref{parameter}).
+^^{parameters//as commands}
+You can use a parameter in either of two ways:
+\olist
+\li You can use the value of a parameter
+as an argument to another command. For example, the command
+\hbox{|\vskip\parskip|}
+causes a vertical skip by the value of the |\parskip| (paragraph skip)
+glue parameter.
+\li You can change the value of the parameter by assigning
+something to it. For example, the assignment \hbox{|\hbadness=200|}
+causes the value of the |\hbadness| number parameter to be $200$.
+\endolist
+\noindent
+We also use the term ``parameter'' to refer to entities such as |\pageno|
+that are actually registers but behave just like parameters.
+^^{registers//parameters as}
+
+Some commands are names of tables. These commands are used like
+parameters, except that they require an additional argument that
+specifies a particular entry in the table. For example, |\catcode| names
+a table of category codes (\xref{category code}). Thus
+the command
+\hbox{|\catcode`~=13|} sets the category code of the `|~|'
+character to $13$.
+
+
+\subsection Spaces
+
+\xrdef{spaces}
+\bix^^{spaces}
+You can freely use extra spaces in your input. Under nearly all circumstances
+\TeX\ treats several spaces in a row as being equivalent to a
+single space. For instance, it doesn't matter whether you put one space
+or two spaces after a ^{period} in your input. Whichever you do, \TeX\
+performs its end-of-sentence maneuvers and leaves the appropriate
+(in most cases) amount of space after the period.
+\TeX\ also treats the end of an input line as equivalent to a space.
+Thus you can end your input lines wherever it's convenient---%
+\TeX\ makes input
+lines into
+paragraphs in the same way no matter where the line breaks are in your
+input.
+
+A blank line in your input marks the end of a paragraph.
+^^{paragraphs//ending}
+Several blank lines are equivalent to a single one.
+
+\TeX\ ignores input spaces within math formulas (see below). Thus you can
+include or omit spaces anywhere within a math formula---\TeX\ doesn't care.
+Even within a math formula, however,
+you must not run a control word together with a following letter.
+
+If you are defining your own macros, you need to be particularly careful about
+where you put ends of line in their definitions.
+It's all too easy to define a macro that produces an
+^{unwanted space} in addition to whatever else it's supposed to produce.
+We discuss this problem elsewhere since it's somewhat
+technical; see \xrefpg{unwantedspace}.
+
+A space or its equivalent between two words in your input doesn't simply turn
+into a space character in your output.
+A few of these input spaces turn into ends of lines
+in the output,
+since input lines generally don't correspond to output lines.
+The others turn into spaces of variable width called ``glue'' (\xref{glue}),
+which has a natural size (the size it ``wants to be'')
+but can stretch or shrink.
+When \TeX\ is typesetting a paragraph
+that is supposed to have an even right margin (the usual
+case), it adjusts the widths of the glue in each line
+to get the lines to end at the margin.
+(The last line of a paragraph is an exception, since it isn't ordinarily
+required to end at the right margin.)
+
+You can prevent an input space from turning into an end of line by using a
+^{tie} (^|~|).
+For example, you wouldn't want \TeX\ to put a line break between the
+`Fig.' and `8' of `Fig.~8'.
+By typing `|Fig.~8|' you can prevent such a line break.
+\eix^^{spaces}
+\needspace{2in}
+
+\subsection Comments
+
+\xrdef{comments}
+\pix\bix^^{comments}
+You can include comments in your \TeX\ input.
+When \TeX\ sees a comment it just passes over it, so
+what's in a comment doesn't affect your typeset document in any way.
+Comments are useful for
+providing extra information about what's in your input file.
+For example:
+\csdisplay
+% ========= Start of Section `Hedgehog' =========
+|
+
+{\indexchar % }%
+A comment starts with a percent sign (|%|) and extends to the end of the
+input line.
+\TeX\ ignores not just the comment but the end of the line as well, so
+comments have another very
+important use: connecting two lines so that the end of line
+^^{line breaks//deleting}
+between them is invisible to \TeX\ and doesn't generate
+an output space or an end of line.
+For instance, if you type:
+\csdisplay
+A fool with a spread%
+sheet is still a fool.
+|
+you'll get:
+\display{
+A fool with a spread%
+sheet is still a fool.
+}
+\eix^^{comments}
+
+
+\subsection Punctuation
+
+\null
+\xrdef{periodspacing}
+\TeX\ normally adds some extra space after what it thinks is a
+^{punctuation} mark at the end of a sentence,
+namely, `^|.|', `^|?|', or `|!!|' \indexchar !
+^^{period} ^^{question mark} ^^{exclamation point}
+followed by an input space.
+\TeX\ doesn't add
+the extra space if the punctuation mark follows
+a capital letter, though, because it assumes the capital
+letter to be an initial in someone's name.
+You can force the extra space where it wouldn't otherwise occur by
+typing something like:
+\csdisplay
+A computer from IBM\null?
+|
+The |\null| doesn't produce any output, but it does prevent \TeX\
+from associating the capital `M' with the question mark.
+On the other hand, you can cancel the
+extra space where it doesn't belong by typing a control space
+after the punctuation mark, e.g.:
+\csdisplay
+Proc.\!visiblespace!.Royal Acad.\!visiblespace!.of Twits
+|
+so that you'll get:
+\display{Proc.\ Royal Acad.\ of Twits}
+\noindent rather than:
+\display{Proc. Royal Acad. of Twits}
+
+Some people prefer not to leave more space after punctuation at the
+end of a sentence. You can get this effect with the
+^|\frenchspacing| command (\xref\frenchspacing).
+|\frenchspacing| is often recommended for ^{bibliographies}.
+
+For single ^{quotation marks}, you should use the left and right
+single quotes
+(|`| and |'|) on your keyboard. For left and right
+double quotation marks, use two left single
+quotes or two right single quotes (|``| or |''|) rather
+than the double quote (|"|) on your keyboard.
+The keyboard double quote
+will in fact give you a right double quotation mark in
+many fonts, but the two right single quotes
+are the preferred \TeX\ style.
+For example:
+
+\vbox{%
+\csdisplay
+There is no `q' in this sentence.
+``Talk, child,'' said the Unicorn.
+She said, ``\thinspace`Enough!!', he said.''
+|
+}%
+These three lines yield:
+\display{\par\restoreplainTeX
+There is no `q' in this sentence.
+\par ``Talk, child,'' said the Unicorn.
+\par She said, ``\thinspace`Enough!', he said.''
+}
+\noindent
+The |\thinspace| in the third input line prevents
+the single quotation mark from coming
+too close to the double quotation marks.
+Without it, you'd just see three
+nearly equally spaced quotation marks in a row.
+
+\TeX\ has three kinds of ^{dashes}:
+\ulist\compact
+\li Short ones (hyphens) like this ( - ). You get them by typing~`^|-|'.
+\li Medium ones (en-dashes) like this ( -- ). You get them by typing~`^|--|'.
+\li Long ones (em-dashes) like this ( --- ). You get them by typing~`^|---|'.
+\endulist
+\noindent
+Typically you'd use hyphens to indicate compound words like
+``will-o'-the-wisp'',
+en-dashes to indicate
+page ranges such as ``pages~81--87'', and em-dashes to indicate
+a break in continuity---like this.
+
+
+\subsection Special characters
+
+Certain characters have special meaning to \TeX, so you shouldn't use them
+in ordinary text. They are:
+
+\csdisplay
+ $ # & % _ ^ ~ { } \
+|
+^^|$//in ordinary text|
+^^|#//in ordinary text|
+^^|&//in ordinary text|
+^^|_//in ordinary text|
+^^|^//in ordinary text|
+^^|~//in ordinary text|
+^^|%//in ordinary text|
+^^|{//in ordinary text|
+^^|}//in ordinary text|
+{\recat!ttidxref[\//in ordinary text]]
+\noindent
+In order to produce them in your typeset document,
+you need to use circumlocutions. For the first five,
+you should instead type:
+^^|\$|
+^^|\#|
+^^|\&|
+^^|\%|
+^^|\_|
+\csdisplay
+ \$ \# \& \% \_
+|
+
+\noindent
+For the others, you need something more elaborate:
+
+\csdisplay
+ \^{!visiblespace} \~{!visiblespace} $\{$ $\}$ $\backslash$
+|
+
+
+\subsection Groups
+
+\bix^^{groups}
+A \emph{group}
+consists of material enclosed in matching left and right braces (|{| and
+|}|).
+^^|{//starting a group|
+^^|}//ending a group|
+By placing a command within a group, you can limit its effects to
+the material within the group.
+For instance, the |\bf| command tells \TeX\ to set
+something in {\bf boldface} type. If you were to put |\bf| into your input
+and do nothing else to counteract it, everything in your document following the
+|\bf| would be set in boldface.
+By enclosing |\bf| in a group,
+you limit its effect to the group. For example, if you type:
+\csdisplay
+We have {\bf a few boldface words} in this sentence.
+|
+\noindent you'll get:
+\display{We have {\bf a few boldface words} in this sentence.}
+
+\noindent You can also use a group to limit the effect of
+an assignment to one of \TeX's parameters.
+These parameters contain values that affect how \TeX\ typesets your document.
+For example, the value of the |\parindent|
+parameter specifies the indentation at the beginning of a paragraph.
+The assignment |\parindent = 15pt|
+sets the indentation to $15$ printer's points.
+By placing this assignment at the beginning
+of a group containing a few paragraphs, you can change
+the indentation of just those paragraphs. If you don't enclose
+the assignment in a group,
+the changed indentation will apply to the rest of the document (or up to the
+next assignment to |\parindent|, if there's a later one).
+
+\xrdef{bracegroup}
+Not all pairs of braces indicate a group.
+In particular, the braces associated with an argument for which the
+braces are \emph{not} required don't indicate a group---they just
+serve to delimit the argument.
+Of those commands that do require braces for their arguments,
+some treat the braces as defining a group
+and the others interpret the argument in some special way that depends on
+the command.\footnote
+{More precisely, for primitive commands either
+the braces define a group or they enclose tokens that aren't processed in
+\TeX's stomach.
+For |\halign| and |\valign| the group has a trivial
+effect because everything within the braces either doesn't reach the stomach
+(because it's in the template) or is enclosed in a further inner group.
+^^|\halign//grouping for|
+^^|\valign//grouping for|
+}
+\eix^^{groups}
+
+
+\subsection Math formulas
+
+\bix^^{math}
+\xrdef{mathform}
+A math formula can appear in text (\emph{text math})
+^^{text math}
+or set off on a line by itself
+with extra vertical space around it (\emph{display math}).
+^^{display math}
+You enclose a text formula in single dollar signs (|$|)
+and a displayed formula in double dollar signs (|$$|).
+\ttidxref{$}\ttidxref{$$}
+For example:
+
+\csdisplay
+If $a<b$, then the relation $$e^a < e^b$$ holds.
+|
+\noindent This input produces:
+\display{\centereddisplays
+If $a<b$, then the relation $$e^a < e^b$$ holds.}
+\smallskip
+\noindent \chapterref{math} describes the commands that are useful
+in math formulas.
+\eix^^{math}
+
+
+\section How \TeX\ works
+
+In order to use \TeX\ effectively, it helps to
+have some idea of how \TeX\ goes about
+its activity of transmuting input into output.
+You can imagine \TeX\ as a kind of organism with ``eyes'',
+``mouth'', ``gullet'',
+``stomach'', and ``intestines''.
+Each part of the organism transforms its input in some way and passes
+the transformed input to the next stage.
+
+The ^{eyes} transform an input file into a sequence of characters.
+The ^{mouth} transforms the sequence of characters into a sequence of
+\emph{tokens},
+^^{tokens}
+where each token is either a single character or a control sequence.
+^^{control sequences//as tokens}
+The gullet expands the tokens into a sequence of
+\emph{primitive commands}, which are also tokens.
+^^{expanding tokens}
+The ^{stomach} carries out the operations specified by the primitive commands,
+producing a sequence of pages.
+Finally, the ^{intestines} transform each page into the form required
+for the \dvifile\ and send it there.
+^^{\dvifile//created by \TeX's intestines}
+These actions are described in more detail
+in \chapterref{concepts} under \conceptcit{\anatomy}.
+^^{\anatomy}
+
+The real typesetting goes on in the stomach.
+The commands instruct \TeX\ to typeset such-and-such a character in
+such-and-such a font, to insert an interword space, to end a paragraph, and
+so on.
+Starting with individual typeset characters and other simple typographic
+elements, \TeX\ builds up a page ^^{pages} as a nest of
+^{boxes} within boxes within boxes \seeconcept{box}.
+Each typeset character occupies a box, and so does an entire page.
+A box can contain not just smaller boxes but also \emph{glue} ^^{glue}
+(\xref{glue}) and a few other things.
+The glue produces
+space between the smaller boxes.
+An important property of glue is that it can stretch and shrink;
+thus \TeX\ can make a box
+larger or smaller by stretching or shrinking
+the glue within~it.
+
+Roughly speaking, a line is a box containing a sequence of character boxes,
+and a page is a box containing a sequence of line boxes.
+There's glue between the words of a line and between the lines of a page.
+\TeX\ stretches or shrinks
+the glue on each line so as to make the right margin
+of the page come out even and the glue on each page
+so as to make the bottom margins of different pages be equal.
+Other kinds of typographical elements can also appear in a line or in a page,
+but we won't go into them here.
+
+As part of the process of assembling pages, \TeX\ needs to break paragraphs
+into lines and lines into pages. The stomach first sees a paragraph as one
+long line, in effect. It inserts \emph{line breaks}
+^^{line breaking}
+in order to transform
+the paragraph into a sequence of lines of the right length, performing a
+rather elaborate analysis in order to choose the set of breaks
+that makes the paragraph look best
+\seeconcept{line break}.
+The stomach carries out a similar
+but simpler process in order to transform a sequence of lines into a page.
+Essentially the stomach accumulates lines until no more lines can fit on the
+page. It then chooses a single place to break the page, putting the lines
+before the break on the current page
+and saving the lines after the break for the
+next page \seeconcept{page break}. ^^{page breaks//inserted by \TeX's stomach}
+
+When \TeX\ is assembling an entity from a list of items (boxes, glue, etc.),
+it is in one of six
+\emph{modes} ^^{modes} (\xref{mode}).
+The kind of entity it is assembling defines the mode that it is in.
+There are two ordinary modes: ordinary horizontal mode for assembling
+paragraphs (before they are broken into lines)
+and ordinary vertical mode for assembling pages.
+There are two restricted modes:
+restricted horizontal mode for appending items horizontally to form
+a horizontal box
+and internal vertical mode for appending items vertically to form
+a vertical box (other than a page).
+Finally, there are two math modes: text math mode for assembling math formulas
+within a paragraph and display math mode for assembling math formulas that are
+displayed on lines by themselves (see ``Math formulas'', \xref{mathform}).
+
+
+\section New \TeX\ versus old {\TeX}
+
+\xrdef{newtex}
+In 1989 Knuth made a major revision to \TeX\ in order to
+adapt it to the
+character sets needed to support typesetting for languages other than
+English.\space ^^{foreign languages}
+The revision included a few minor extra features that could be added
+without disturbing anything else.
+This book describes ``^{\newTeX}''.
+If you're still using an older version
+of \TeX\ (version $2.991$ or earlier),
+you'll want to know what features of {\newTeX} you can't use.
+The following features aren't available in the older versions:
+\ulist\compact
+\li ^|\badness| (\xref\badness)
+\li ^|\emergencystretch| (\xref\emergencystretch)
+\li ^|\errorcontextlines| (\xref\errorcontextlines)
+\li ^|\holdinginserts| (\xref\holdinginserts)
+\li ^|\language|, ^|\setlanguage|, and |\new!-lan!-guage|
+(\pp\xrefn\language, \xrefn{\@newlanguage}) ^^|\newlanguage|
+\li ^|\lefthyphenmin| and ^|\righthyphenmin| (\xref\lefthyphenmin)
+\li ^|\noboundary| (\xref\noboundary)
+\li ^|\topglue| (\xref\topglue)
+\li The |^^|$xy$ notation for hexadecimal digits (\xref{hexchars})
+\endulist
+\noindent
+We recommend that you obtain new \TeX\ if you can.
+
+\section Resources
+
+\xrdef{resources}
+A number of resources are available to help you in using \TeX.
+\texbook\ is the definitive source of information on \TeX:
+
+\smallskip
+{\narrower\noindent
+^{Knuth, Donald E.}, \texbook. Reading, Mass.: Addison-Wesley, 1984.\par}
+\smallskip
+\noindent
+Be sure to get the seventeenth printing (January 1990) or later;
+the earlier printings don't cover the features of new \TeX.
+
+^{\LaTeX} is a very popular collection of commands designed to simplify the use
+of \TeX. It is described in:
+\smallskip
+{\narrower\noindent\frenchspacing\spaceskip = 3.33pt plus 2pt minus 1.2pt
+^{Lamport, Leslie}, {\sl The \LaTeX\ Document Preparation System}.
+Reading, Mass.: Addison-Wesley, 1986.\par}
+\smallskip
+\noindent
+^{\AMSTeX} is the collection of commands adopted by the American Mathematical
+Society as a standard for submitting mathematical man\-u\-scripts
+electronically.
+It is described in:
+\smallskip
+{\narrower\noindent
+^{Spivak, Michael~D.}, {\sl The Joy of \TeX}. Providence, R.I.:
+American Mathematical Society, 1986.
+\par}
+\smallskip
+\noindent
+You can join the ^{\TUG} (TUG), which publishes a newsletter
+called {\it ^{TUGBoat}}.
+TUG is an excellent source not only for information about \TeX\ but also
+for collections of macros, including \AMSTeX.
+Its address is:
+\smallskip
+{\obeylines
+^{\TUG}
+c/o American Mathematical Society
+P.O. Box 9506
+Providence, RI 02940
+U.S.A.
+}
+\smallskip
+\noindent
+Finally, you can obtain copies of the ^|eplain.tex| macros
+described in \chapterref{eplain} as well as the macros used in typesetting
+this book.
+They are available through the Internet network by anonymous \ftp\ from the
+following hosts:
+{\obeylines\display{\tt
+labrea.stanford.edu [36.8.0.47]
+ics.uci.edu [128.195.1.1]
+june.cs.washington.edu [128.95.1.4]}}
+
+The electronic version includes additional macros
+that format input for the
+^{\BibTeX}\ computer program, written by Oren Patashnik at Stanford
+University, ^^{Patashnik, Oren}
+and print the output from that program.
+If you find bugs in the macros, or think of improvements, you can send
+electronic mail to Karl at {\tt karl@cs.umb.edu}.
+
+The macros are also available for US \$10.00 on $5\frac1/4$\inches\
+or $3\frac1/2$\inches\ PC-format diskettes from:
+\smallskip
+{\obeylines
+Paul Abrahams
+214 River Road
+Deerfield, MA 01342
+\vskip\tinyskipamount
+Email: {\tt Abrahams\%Wayne-MTS@um.cc.umich.edu}
+}
+\smallskip
+\noindent
+These addresses are correct as of June 1990; please be aware that they may
+change after that, particularly the electronic addresses.
+
+\endchapter\byebye
diff --git a/Master/texmf-dist/doc/plain/impatient/xmptext.tex b/Master/texmf-dist/doc/plain/impatient/xmptext.tex
new file mode 100644
index 00000000000..47599421fde
--- /dev/null
+++ b/Master/texmf-dist/doc/plain/impatient/xmptext.tex
@@ -0,0 +1,449 @@
+~% This is part of the book TeX for the Impatient.
+~% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+~% See file fdl.tex for copying conditions.
+% TeX ignores anything on a line after a %
+% The next two lines define fonts for the title
+\font\xmplbx = cmbx10 scaled \magstephalf
+\font\xmplbxti = cmbxti10 scaled \magstephalf
+% Now here's the title.
+\leftline{\xmplbx Example !xmpnum:\quad\xmplbxti Entering simple text}
+\vglue .5\baselineskip % skip an extra half line
+~\count255 = \pageno
+~\xdef\examplepage{\number\count255}
+~\markinfo{Example 1: Entering simple text}
+~\ifrewritetocfile
+~\write\tocfile{\string\tocsectionentry{Entering simple text}{}{\examplepage}}%
+~\fi
+~^^{footnotes} ^^{comments} ^^{punctuation} ^^{quotation marks}
+~^^{space characters} ^^{dashes} ^^{paragraphs//ending}
+~\edef\examplepageno{\number\count255}%
+It's easy to prepare ordinary text for \TeX\ since
+\TeX\ usually doesn't care about how you break up your input into
+lines. It treats the end of a line of text like a space.%
+\footnote \dag{\TeX\ treats a tab like a space too, as we point
+out in this {\it footnote}.} If you don't want a space there,
+put a per%
+cent sign (the comment character) at the end of the line.
+ \TeX\ ignores spaces at the start of a line, and treats more
+than one space as equivalent to a single space,
+even after a period. You indicate a new paragraph by
+skipping a line (or more than one line).
+
+
+When \TeX\ sees a period followed by a space (or the end of the
+line, which is equivalent), it ordinarily assumes you've ended a
+sentence and inserts a little extra space after the period. It
+treats question marks and exclamation points the same way.
+
+ But \TeX's rules for handling periods sometimes need fine
+tuning. \TeX\ assumes that a capital letter before a period
+doesn't end the sentence, so you have to do something a little
+different if, say, you're writing about DNA\null.
+% The \null prevents TeX from perceiving the capital `A'
+% as being next to the period.
+It's a good idea to tie words together in references such as
+``see Fig.~8'' and in names such as V.~I\null. Lenin and in
+$\ldots$ so that \TeX\ will never split them in an awkward place
+between two lines. (The three dots indicate an ellipsis.)
+
+You should put quotations in pairs of left and right
+single ``quotes'' so that you get the correct left and right
+double quotation marks. ``For adjacent single and double
+quotation marks, insert a `thinspace'\thinspace''. You can
+get en-dashes--like so, and em-dashes---like so.
+
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Indentation}% !xmpheaddef
+~^^{indentation} ^^{margins} ^^{paragraphs//narrow}
+\noindent Now let's see how to control indentation. If an
+ordinary word processor can do it, so surely can \TeX. Note
+that this paragraph isn't indented.
+
+Usually you'll either want to indent paragraphs or to leave
+extra space between them. Since we haven't changed anything
+yet, this paragraph is indented.
+
+{\parindent = 0pt \parskip = 6pt
+% The left brace starts a group containing the unindented text.
+Let's do these two paragraphs a different way,
+with no indentation and six printer's points of extra space
+between paragraphs.
+
+So here's another paragraph that we're typesetting without
+indentation. If we didn't put space between these paragraphs,
+you would have a hard time knowing where one ends
+and the next begins.
+\par % The paragraph *must* be ended within the group.
+}% The right brace ends the group containing unindented text.
+
+It's also possible to indent both sides of entire paragraphs.
+The next three paragraphs illustrate this:
+\smallskip % Provide a little extra space here.
+% Skips like this and \vskip below end a paragraph.
+{\narrower
+``We've indented this paragraph on both sides by the paragraph
+indentation. This is often a good way to set long quotations.
+
+``You can do multiple paragraphs this way if you choose. This
+is the second paragraph that's singly indented.''\par}
+
+{\narrower \narrower You can even make paragraphs doubly narrow
+if that's what you need. This is an example of a doubly
+narrowed paragraph.\par}
+\vskip 1pc % Skip down one pica for visual separation.
+In this paragraph we're back to the normal margins, as you can
+see for yourself. We'll let it run on a little longer so that
+the margins are clearly visible.
+
+{\leftskip .5in Now we'll indent the left margin by half
+an inch and leave the right margin at its usual position.\par}
+{\rightskip .5in Finally, we'll indent the right margin by half
+an inch and leave the left margin at its usual position.\par}
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Fonts and special characters}% !xmpheaddef
+\chardef \\ = `\\ % Let \\ denote a backslash.
+~^^{fonts} ^^{characters//special} ^^{accents}
+~^^{music symbols} ^^{card suits}
+~^^|$| ^^|&| ^^|#| ^^|_| ^^|%| ^^|^| ^^|~| ^^|{| ^^|}| \indexchar \
+{\it Here are a few words in an italic font}, {\bf a
+few words in a boldface font}, {\it and a\/ {\bf mixture}
+of the two, with two\/ {\rm roman words} inserted}.
+Where an italic font is followed by a nonitalic font, we've
+inserted an ``italic correction'' ({\tt \\/}) to make the
+spacing look right.
+Here's a {\sevenrm smaller} word---but the standard \TeX\
+fonts won't give you anything smaller than {\fiverm this}.
+
+If you need any of the ten characters:
+\medskip
+\centerline{\$ \quad \& \quad \# \quad \_ \quad \% \quad
+ \char `\^ \quad \char `\~ \quad $\{$ \quad
+ $\}$ \quad $\backslash$}
+% The \quad inserts an em space between characters.
+\medskip
+\noindent you'll need to write them a special way. Look at
+the facing page to see how to do it.
+
+\TeX\ has the accents and letters that you'll need
+for French words such as {\it r\^ ole\/} and {\it \'
+el\` eve\/}, for German words such as {\it Schu\ss\/},
+and for words in several other languages as well.
+You'll find a complete list of \TeX's accents and letters
+of European languages on !xrefdelim[accents] and !xrefdelim[fornlets].
+
+You can also get Greek letters such as ``$\alpha$'' and
+``$\Omega$'' for use in math, card suits such as
+``$\spadesuit$'' and ``$\diamondsuit$'', music symbols
+such as ``$\sharp$'' and ``$\flat$'', and many other special
+symbols that you'll find listed on !xrefdelim[specsyms].
+\TeX\ will only accept these sorts of special symbols in its
+``math mode'', so you'll need to enclose them
+within `{\tt \$}' characters.
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Interline spacing}% !xmpheaddef
+~^^{spacing//interline} ^^{baselines}
+\baselineskip = 2\baselineskip % double spacing
+\parskip = \baselineskip % Skip a line between paragraphs.
+\parindent = 3em % Increase indentation of paragraphs.
+
+% The following macro definition gives us nice inline
+% fractions. You'll find it in our eplain macros.
+\def\frac#1/#2{\leavevmode
+ \kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}%
+ \kern-.1em $/$%
+ \kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}%
+}%
+
+Once in a while you may want to print a document with extra
+space between the lines. For instance, bills before Congress
+are printed this way so that the legislators can mark them up.
+For the same reason, book publishers usually insist that
+manuscripts be double-spaced. Double spacing is rarely
+appropriate for finished documents, however.
+
+A baseline is an imaginary line that acts like the lines
+on a pad of ruled paper. You can control the interline
+spacing---what printers call ``leading''---%
+by setting the amount of space between baselines. Take a
+look at the input to see how to do it. You could use
+the same method for $1\;1/2$ spacing as well, using {\tt 1.5}
+instead of {\tt 2}. (You can also write $1\frac 1/2$
+a nicer way.)
+% Here we've used the macro definition given above.
+
+For this example we've also increased the paragraph indentation
+and skipped an extra line between paragraphs.
+
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Spacing, rules, and boxes}% !xmpheaddef
+~^^{description lists} ^^{boxes//drawing} ^^{revision bars}
+Here's an example of a ``description list''. In practice you'd
+be better off using a macro to avoid the repetitive constructs
+and to make sure that the subhead widths are wide enough:
+\bigskip
+% Call the indentation for descriptions \descindent
+% and set it to 8 picas.
+\newdimen\descindent \descindent = 8pc
+% Indent paragraphs by \descindent.
+% Skip an additional half line between paragraphs.
+{\noindent \leftskip = \descindent \parskip = .5\baselineskip
+% Move the description to the left of the paragraph.
+\llap{\hbox to \descindent{\bf Queen of Hearts\hfil}}%
+An ill-tempered woman, prone to saying ``Off with his
+head!!''\ at the slightest provocation.\par
+\noindent\llap{\hbox to \descindent{\bf Cheshire Cat\hfil}}%
+A cat with an enormous smile that Alice found
+in a tree.\par
+\noindent\llap{\hbox to \descindent{\bf Mock Turtle\hfil}}%
+A lachrymose creature, quite a storyteller, who was a
+companion to the Gryphon. Reputedly the principal ingredient
+of Mock Turtle Soup.
+\par}
+\bigskip\hrule\bigskip % A line with vertical space around it.
+Here's an example of some words in a ruled box, just as
+Lewis Carroll wrote them:
+\bigskip
+% Put 8pt of space between the text and the surrounding rules.
+\hbox{\vrule\vbox{\hrule
+ \hbox spread 8pt{\hfil\vbox spread 8pt{\vfil
+ \hbox{Who would not give all else for twop}%
+ \hbox{ennyworth only of Beautiful Soup?}%
+ \vfil}\hfil}
+\hrule}\vrule}%
+
+\bigskip\line{\hfil\hbox to 3in{\leaders\hbox{ * }\hfil}\hfil}
+\bigskip
+
+\line{\hskip -4pt\vrule\hfil\vbox{
+Here we've gotten the effect of a revision bar on the material
+in this paragraph. The revision bar might indicate a change.}}
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Odds and ends}% !xmpheaddef
+~^^{hyphenation} ^^{theorems} ^^{lemmas} ^^{itemized lists}
+~^^{flush left} ^^{flush right} ^^{centering}
+\chardef \\ = `\\ % Let \\ denote a backslash.
+\footline{\hfil{\tenit - \folio -}\hfil}
+~\global\footline{\hfil{\tenit - \folio\ -}\hfil}
+% \footline provides a footer line.
+% Here it's a centered, italicized page number.
+\TeX\ knows how to hyphenate words, but it isn't infallible.
+If you are discussing the chemical
+${\it 5}$-[p-(Flouro\-sul\-fonyl)ben\-zoyl]-l,%
+$N^6$-ethe\-no\-adeno\-sine
+and \TeX\ complains to you about an ``overfull hbox'', try
+inserting some ``discretionary hyphens''. The notation
+`{\tt \\-}' tells \TeX\ about a dis\-cre\-tion\-ary hyphen,
+that is, one that it might not have inserted otherwise.
+\medskip
+{\raggedright You can typeset text unjustified, i.e., with
+an uneven right margin. In the old days, before word
+processors were common, typewritten documents were
+unjustified because there was no convenient alternative.
+Some people prefer text to be unjustified so that the
+spacing between words can be uniform. Most books are set
+with justified margins, but not all. \par}
+
+\proclaim Assertion 27. There is an easy way to typeset
+the headings of assertions, lemmas, theorems, etc.
+
+Here's an example of how to typeset an itemized list two
+levels deep. If you need more levels, you'll have to
+program it yourself, alas.
+\smallskip
+\item {1.} This is the first item.
+\item {2.} This is the second item. It consists of two
+paragraphs. We've indented the second paragraph so that
+you can easily see where it starts.
+
+\item{} \indent The second paragraph has three subitems
+underneath it.
+\itemitem {(a)} This is the first subitem.
+\itemitem {(b)} This is the second subitem.
+\itemitem {(c)} This is the third subitem.
+\item {$\bullet$} This is a strange-looking item because it's
+completely different from the others.
+\smallskip
+\leftline{Here's a left-justified line.$\Leftarrow$}
+\rightline{$\Rightarrow$Here's a right-justified line.}
+\centerline{$\Rightarrow$Here's a centered line.$\Leftarrow$}
+% Don't try to use these commands within a paragraph.
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Using fonts from other sources}% !xmpheaddef
+~\xrdef{palatino}
+~\idxref{Palatino fonts}
+~\idxref{Zapf, Hermann}
+~\idxref{Computer Modern fonts} ^^{\Metafont}
+\font\tenrm = pplr % Palatino
+% Define a macro for invoking Palatino.
+\def\pal{\let\rm = \tenrm \baselineskip=12.5pt \rm}
+\pal % Use Palatino from now on.
+
+You aren't restricted to using the Computer Modern fonts that
+come with \TeX. Other fonts are available from many sources,
+and you may prefer them. For instance, we've set this page
+in 10-point Palatino Roman. Palatino was designed by
+Hermann Zapf, considered to be one of the greatest type
+designers of the twentieth century. This page will
+give you some idea of what it looks like.
+
+Fonts can be provided either as outlines or as bitmaps. An
+outline font describes the shapes of the characters, while a
+bitmap font specifies each pixel (dot) that makes up each
+character. A font outline can be used to generate many
+different sizes of the same font. The Metafont program
+that's associated with \TeX\ provides a particularly
+powerful way of generating bitmap fonts, but it's not the
+only way.
+
+The fact that a single outline can generate a great range of
+point sizes for a font tempts many vendors of digital
+typefaces to provide just one set of outlines for a typeface
+such as Palatino Roman. This may be a sensible economic
+decision, but it is an aesthetic sacrifice. Fonts cannot be
+scaled up and down linearly without loss of quality.
+Larger sizes of letters should not, in general, have the
+same proportions as smaller sizes; they just don't look
+right. For example, a font that's linearly scaled down will
+tend to have too little space between strokes, and its
+x-height will be too~small. % tie added to avoid widow word
+
+A type designer can compensate for these changes by
+providing different outlines for different point sizes, but
+it's necessary to go to the expense of designing these
+different outlines. One of the great advantages of Metafont
+is that it's possible to parameterize the descriptions of
+characters in a font. Metafont can then maintain the
+typographical quality of characters over a range of point
+sizes by adjusting the character shapes accordingly.
+\bye % end the document
+:::
+~\idxref{mushrooms}
+\xmpheader !xmpnum/{A ruled table}% !xmpheaddef
+\bigskip
+\offinterlineskip % So the vertical rules are connected.
+% \tablerule constructs a thin rule across the table.
+\def\tablerule{\noalign{\hrule}}
+% \tableskip creates 9pt of space between entries.
+\def\tableskip{\omit&height 9pt&&&\omit\cr}
+% & separates templates for each column. TeX substitutes
+% the text of the entries for #. We must have a strut
+% present in every row of the table; otherwise, the boxes
+% won't butt together properly, and the rules won't join.
+\halign{\tabskip = .7em plus 1em % glue between columns
+% Use \vtop for short multiline entries in the first column.
+% Typeset the lines ragged right, without hyphenation.
+ \vtop{\hsize=6pc\pretolerance = 10000\hbadness = 10000
+ \normalbaselines\noindent\it#\strut}%
+ &\vrule #&#\hfil &\vrule #% the rules and middle column
+% Use \vtop to get whole paragraphs in the last column.
+ &\vtop{\hsize=11pc \parindent=0pt \normalbaselineskip=12pt
+ \normalbaselines \rightskip=3pt plus2em #}\cr
+% The table rows begin here.
+\noalign{\hrule height2pt depth2pt \vskip3pt}
+ % The header row spans all the columns.
+ \multispan5\bf Some Choice Edible Mushrooms\hfil\strut\cr
+\noalign{\vskip3pt} \tablerule
+ \omit&height 3pt&\omit&&\omit\cr
+ \bf Botanical&&\bf Common&&\omit \bf Identifying \hfil\cr
+\noalign{\vskip -2pt}% close up lines of heading
+ \bf Name&&\bf Name &&\omit \bf Characteristics \hfil\cr
+\tableskip Pleurotus ostreatus&&Oyster mushroom&&
+ Grows in shelf\kern 1pt like clusters on stumps or logs,
+ % without the kern, the `f' and `l' would be too close
+ pink-gray oyster-shaped caps, stem short or absent.\cr
+\tableskip Lactarius hygrophoroides&&Milky hygroph&&
+ Butterscotch-brown cap and stem, copious white latex,
+ often on ground in woods near streams.\cr
+\tableskip Morchella esculenta&&White morel&&Conical cap
+ with black pits and white ridges; no gills. Often found
+ near old apple trees and dying elms in the spring.\cr
+\tableskip Boletus edulus&&King bolete&&Reddish-brown to
+ tan cap with yellow pores (white when young),
+ bulbous stem, often near conifers, birch, or~aspen.\cr
+\tableskip \tablerule \noalign{\vskip 2pt} \tablerule
+}\bye
+:::
+\xmpheader !xmpnum/{Typesetting mathematics}% !xmpheaddef
+~^^{math}
+For a spherical triangle with sides $a$, $b$, and $c$, and
+opposite angles $\alpha$, $\beta$, and $\gamma$, we have:
+$$\cos \alpha = -\cos \beta \cos \gamma +
+ \sin \beta \sin \gamma \cos \alpha \quad
+ \hbox{(Law of Cosines)}$$
+and:
+$$\tan {\alpha \over 2} = \sqrt{
+ {- \cos \sigma \cdot \cos(\sigma - \alpha)} \over
+ {\cos (\sigma - \beta) \cdot \cos (\sigma - \gamma)}},\quad
+ \hbox{where $\sigma = {1 \over 2}(a+b+c)$}$$
+We also have:$$\sin x = {{e^{ix}-e^{-ix}}\over 2i}$$
+and:
+$$\int _0 ^\infty {{\sin ax \sin bx}\over{x^2}}\,dx
+% The \, above produces a thin space
+ = {\pi a\over 2}, \quad \hbox{if $a < b$}$$
+
+\noindent The number of combinations ${}_nC_r$ of $n$
+things taken $r$ at a time is:
+$$C(n,r) = {}_nC_r = {n \choose r} =
+ {{n(n-1) \cdots (n-r+1)} \over {r(r-1) \cdots (1)}} =
+ {{n!!}\over {r!!(n-r)!!}}$$
+
+\noindent
+The value of the determinant $D$ of order $n$:
+$$D = \left|\matrix{a_{11}&a_{12}&\ldots&a_{1n}\cr
+ a_{21}&a_{22}&\ldots&a_{2n}\cr
+ \vdots&\vdots&\ddots&\vdots\cr
+ a_{n1}&a_{n2}&\ldots&a_{nn}\cr}\right| $$
+is defined as the sum of $n!!$ terms:
+$$\sum\>(\pm)\>a_{1i}a_{2j} \ldots a_{nk}$$
+% The \> above produces a medium space.
+where $i$, $j$, \dots,~$k$\/ take on all possible values
+between $1$ and $n$, and the sign of the product is
+$+$ if the sequence $i$, $j$, \dots,~$k$\/ is an
+even permutation and $-$ otherwise. Moreover:
+$$Q(\xi) = \lambda_1 y_1^2 \sum_{i=2}^n \sum_{j=2}^n y_i
+b_{ij} y_j,\qquad B = \Vert b_{ij} \Vert = B'$$
+\bye
+:::
+\xmpheader !xmpnum/{More mathematics}% !xmpheaddef
+~^^{math}
+The absolute value of $X$, $|x|$, is defined by:
+$$|x| = \cases{x, &if $x\ge 0$;\cr
+-x,&otherwise.\cr}$$
+Now for some numbered equations.
+It is the case that for $k \ge 0$:
+$$x^{k^2}=\overbrace{x\>x\>\cdots\> x}^{2k\ \rm times}
+ \eqno (1)$$
+
+Here's an example that shows some spacing controls, with
+a number on the left:
+$$[u]!negthin[v][w]\,[x]\>[y]\;[z]\leqno(2a)$$
+The amount of space between the items in brackets
+gradually increases from left to right. (We've made
+the space between the first two items be {\it less\/}
+than the natural space.)
+It is sometimes the case that $$\leqalignno{
+u'_1 + tu''_2 &= u'_2 + tu''_1&(2b)\cr
+\hat\imath &\ne \hat \jmath&(2c)\cr
+\vec {\vphantom{b}a}&\approx \vec b\cr}$$
+% The \vphantom is an invisible rule as tall as a `b'.
+The result is of order $O(n \log\log n)$. Thus
+$$\sum_{i=1}^n x_i = x_1+x_2+\cdots+x_n
+= {\rm Sum}(x_1,x_2,\ldots,x_n). \eqno(3)$$
+and
+$$dx\,dy = r\,dr\,d\theta!negthin.\eqno(4)$$
+The set of all $q$ such that $q\le0$ is written as:
+$$\{\,q\mid q\le0\, \}$$
+Thus
+$$\forall x\exists y\;P(x,y)\Rightarrow
+\exists x\exists y\;P(x,y)$$
+where
+$$P(x,y) \buildrel \rm def \over \equiv
+\hbox{\rm any predicate in $x$ and $y$} . $$
+\bye
+:::