summaryrefslogtreecommitdiff
path: root/info/impatient
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /info/impatient
Initial commit
Diffstat (limited to 'info/impatient')
-rw-r--r--info/impatient/Makefile15
-rw-r--r--info/impatient/Makefile.in118
-rw-r--r--info/impatient/NEWS21
-rw-r--r--info/impatient/README46
-rw-r--r--info/impatient/artwork/0cover.pngbin0 -> 14357024 bytes
-rw-r--r--info/impatient/artwork/0watchrock.pngbin0 -> 109628 bytes
-rw-r--r--info/impatient/artwork/README5
-rw-r--r--info/impatient/artwork/ch01-usingbook.pngbin0 -> 553931 bytes
-rw-r--r--info/impatient/artwork/ch02-usingtex.pngbin0 -> 687970 bytes
-rw-r--r--info/impatient/artwork/ch03-examples.pngbin0 -> 863236 bytes
-rw-r--r--info/impatient/artwork/ch04-concepts.pngbin0 -> 777992 bytes
-rw-r--r--info/impatient/artwork/ch05-para.pngbin0 -> 750415 bytes
-rw-r--r--info/impatient/artwork/ch06-pages.pngbin0 -> 625297 bytes
-rw-r--r--info/impatient/artwork/ch07-horizvert.pngbin0 -> 589042 bytes
-rw-r--r--info/impatient/artwork/ch08-math.pngbin0 -> 575250 bytes
-rw-r--r--info/impatient/artwork/ch09-general.pngbin0 -> 839974 bytes
-rw-r--r--info/impatient/artwork/ch10-tips.pngbin0 -> 692861 bytes
-rw-r--r--info/impatient/artwork/ch11-errors.pngbin0 -> 761209 bytes
-rw-r--r--info/impatient/artwork/ch12-compendium.pngbin0 -> 227893 bytes
-rw-r--r--info/impatient/artwork/ch13-summary.pngbin0 -> 683061 bytes
-rw-r--r--info/impatient/backm.tex92
-rw-r--r--info/impatient/book.pdfbin0 -> 1345712 bytes
-rw-r--r--info/impatient/book.sdx1691
-rw-r--r--info/impatient/book.tex47
-rw-r--r--info/impatient/capsule.tex1134
-rw-r--r--info/impatient/cn/Makefile15
-rw-r--r--info/impatient/cn/backm.tex97
-rw-r--r--info/impatient/cn/book.tex63
-rw-r--r--info/impatient/cn/capsule.tex2000
-rw-r--r--info/impatient/cn/cnbook.pdfbin0 -> 3614365 bytes
-rw-r--r--info/impatient/cn/concepts.tex6635
-rw-r--r--info/impatient/cn/config.tex0
-rw-r--r--info/impatient/cn/copyrght.tex48
-rw-r--r--info/impatient/cn/eplain.tex1198
-rw-r--r--info/impatient/cn/eplain3.tex4346
-rw-r--r--info/impatient/cn/errors.tex575
-rw-r--r--info/impatient/cn/examples.tex83
-rw-r--r--info/impatient/cn/fdl.tex464
-rw-r--r--info/impatient/cn/fonts.tex334
-rw-r--r--info/impatient/cn/frontm.tex85
-rw-r--r--info/impatient/cn/genops.tex5017
-rw-r--r--info/impatient/cn/index.tex41
-rw-r--r--info/impatient/cn/macros.tex2405
-rw-r--r--info/impatient/cn/math.tex3697
-rw-r--r--info/impatient/cn/modes.tex2595
-rw-r--r--info/impatient/cn/pages.tex1646
-rw-r--r--info/impatient/cn/paras.tex3536
-rw-r--r--info/impatient/cn/preface.tex246
-rw-r--r--info/impatient/cn/read1st.tex69
-rw-r--r--info/impatient/cn/tips.tex1685
-rw-r--r--info/impatient/cn/usebook.tex413
-rw-r--r--info/impatient/cn/usermacs.tex1455
-rw-r--r--info/impatient/cn/usingtex.tex1393
-rw-r--r--info/impatient/cn/xeCJK-base.tex645
-rw-r--r--info/impatient/cn/xmptext.tex706
-rw-r--r--info/impatient/concepts.tex4097
-rw-r--r--info/impatient/config.tex0
-rw-r--r--info/impatient/configure3172
-rw-r--r--info/impatient/configure.ac16
-rw-r--r--info/impatient/copyrght.tex48
-rw-r--r--info/impatient/eplain.tex1196
-rw-r--r--info/impatient/errata.future268
-rw-r--r--info/impatient/errors.tex325
-rw-r--r--info/impatient/examples.tex56
-rw-r--r--info/impatient/fdl.tex518
-rw-r--r--info/impatient/fonts.tex241
-rw-r--r--info/impatient/fr/README8
-rw-r--r--info/impatient/fr/config.tex0
-rw-r--r--info/impatient/fr/eplain.tex1196
-rw-r--r--info/impatient/fr/fbackm.tex103
-rw-r--r--info/impatient/fr/fbook.pdfbin0 -> 1552306 bytes
-rw-r--r--info/impatient/fr/fbook.tex50
-rw-r--r--info/impatient/fr/fcapsule.tex1123
-rw-r--r--info/impatient/fr/fconcept.tex4069
-rw-r--r--info/impatient/fr/fcopyrgh.tex58
-rw-r--r--info/impatient/fr/fdl.tex463
-rw-r--r--info/impatient/fr/ferrors.tex309
-rw-r--r--info/impatient/fr/fexamples.tex56
-rw-r--r--info/impatient/fr/ffrontm.tex82
-rw-r--r--info/impatient/fr/fgenops.tex2834
-rw-r--r--info/impatient/fr/findex.tex37
-rw-r--r--info/impatient/fr/fmacros.tex2345
-rw-r--r--info/impatient/fr/fmath.tex2176
-rw-r--r--info/impatient/fr/fmodes.tex2077
-rw-r--r--info/impatient/fr/fonts.tex242
-rw-r--r--info/impatient/fr/fpages.tex1153
-rw-r--r--info/impatient/fr/fparas.tex2152
-rw-r--r--info/impatient/fr/fpreface.tex158
-rw-r--r--info/impatient/fr/fread1st.tex46
-rw-r--r--info/impatient/fr/ftips.tex1004
-rw-r--r--info/impatient/fr/fusebook.tex227
-rw-r--r--info/impatient/fr/fusermacs.tex1168
-rw-r--r--info/impatient/fr/fusingtex.tex860
-rw-r--r--info/impatient/fr/fxmptext.tex452
-rw-r--r--info/impatient/frontm.tex82
-rw-r--r--info/impatient/genops.tex2827
-rw-r--r--info/impatient/index.tex39
-rw-r--r--info/impatient/index1.icn90
-rw-r--r--info/impatient/index2.icn239
-rw-r--r--info/impatient/macros.tex2295
-rw-r--r--info/impatient/math.tex2180
-rw-r--r--info/impatient/modes.tex2078
-rw-r--r--info/impatient/pages.tex1153
-rw-r--r--info/impatient/paras.tex2166
-rw-r--r--info/impatient/preface.tex157
-rw-r--r--info/impatient/read1st.tex45
-rw-r--r--info/impatient/tips.tex1011
-rw-r--r--info/impatient/usebook.tex243
-rw-r--r--info/impatient/usermacs.tex1169
-rw-r--r--info/impatient/usingtex.tex822
-rw-r--r--info/impatient/xmptext.tex449
111 files changed, 96091 insertions, 0 deletions
diff --git a/info/impatient/Makefile b/info/impatient/Makefile
new file mode 100644
index 0000000000..63c0d7841c
--- /dev/null
+++ b/info/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/info/impatient/Makefile.in b/info/impatient/Makefile.in
new file mode 100644
index 0000000000..53617389ba
--- /dev/null
+++ b/info/impatient/Makefile.in
@@ -0,0 +1,118 @@
+# $Id: Makefile.in,v 1.7 2014/11/13 17:12:55 karl Exp $
+# public domain
+# Makefile[.in] for TeX for the Impatient.
+
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_URL = @PACKAGE_URL@
+
+prefix = @prefix@
+datarootdir = @datarootdir@
+docdir = @docdir@
+pdfdir = @pdfdir@
+dvidir = @dvidir@
+htmldir = @htmldir@
+DESTDIR =
+
+SHELL = /bin/sh
+ICON = @ICON@
+TEX = @TEX@
+PDFTEX = @PDFTEX@
+HTTEX = @HTTEX@
+
+MKDIR_P = @MKDIR_P@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+TEXFILES = backm.tex book.tex capsule.tex concepts.tex config.tex \
+ copyrght.tex eplain.tex errors.tex examples.tex fdl.tex fonts.tex \
+ frontm.tex genops.tex index.tex macros.tex math.tex modes.tex \
+ pages.tex paras.tex preface.tex read1st.tex tips.tex usebook.tex \
+ usermacs.tex usingtex.tex xmptext.tex
+
+ICONSCRIPTS = index1.icn index2.icn
+
+SDXFILE = book.sdx
+
+AUXFILES = book.aux book.ccs book.idx book.toc
+
+LOGFILES = book.log
+
+PDFFILE = book.pdf
+
+DVIFILE = book.dvi
+
+HTMLFILE = book.html
+
+all: pdf #html dvi
+
+dvi: $(DVIFILE)
+
+pdf: $(PDFFILE)
+
+html: $(HTMLFILE)
+
+install: installdirs install-dvi install-pdf
+
+installdirs:
+ $(MKDIR_P) $(DESTDIR)$(dvidir)
+ $(MKDIR_P) $(DESTDIR)$(pdfdir)
+ $(MKDIR_P) $(DESTDIR)$(htmldir)
+
+install-dvi: dvi
+ $(INSTALL_DATA) book.dvi $(DESTDIR)$(dvidir)/teximpatient.dvi
+
+install-pdf: pdf
+ $(INSTALL_DATA) book.pdf $(DESTDIR)$(dvidir)/teximpatient.pdf
+
+install-html: html
+ $(INSTALL_DATA) book.html $(DESTDIR)$(dvidir)/teximpatient.html
+
+book.dvi: $(TEXFILES)
+ $(TEX) '\nonstopmode\input book'
+
+book.pdf: $(TEXFILES) $(SDXFILE)
+ $(PDFTEX) '\nonstopmode\input book'
+
+book.html: book.tex
+ $(HTTEX) book.tex "html"
+
+book.idx: book.dvi
+
+# + chars in book.idx need to be changed to SPC chars in book.sdx
+# somewhere, but currently aren't. Therefore, we effectively disable
+# the rule as long as book.sdx exists. This also avoids rerunning every
+# time (since book.idx changes every time; that file is written by TeX).
+# But the page numbers in the existing book.sdx are probably wrong by now :(.
+book.sdx: #book.idx $(ICONSCRIPTS)
+ if test -z "$(ICON)"; then touch book.sdx; else \
+ (cat book.idx | $(ICON) index1.icn | sort \
+ | $(ICON) index2.icn >book.sdx); fi
+
+dist: all
+ tar czf $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz \
+ Makefile.in configure configure.ac \
+ NEWS README errata.future \
+ $(ICONSCRIPTS) \
+ $(TEXFILES) \
+ $(SDXFILE) \
+ $(PDFFILE)
+
+dist-cn:
+ tar czf $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)cn.tar.gz \
+ cn-git/Makefile cn-git/*.tex cn-git/cnbook.pdf
+
+distclean: clean
+ -rm -rf config.log config.status autom4te.cache Makefile
+
+clean:
+ -rm -f $(LOGFILES) $(AUXFILES) x.tex
+
+.PHONY: all dist clean pdf dvi html install installdirs \
+ install-dvi install-pdf install-html
+
+configure: configure.ac
+ autoconf
diff --git a/info/impatient/NEWS b/info/impatient/NEWS
new file mode 100644
index 0000000000..69931f5d07
--- /dev/null
+++ b/info/impatient/NEWS
@@ -0,0 +1,21 @@
+$Id: NEWS,v 1.3 2014/11/13 17:07:59 karl Exp $
+This NEWS file records noteworthy changes, very tersely.
+
+ Copyright 2013, 2014 Karl Berry.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved.
+
+
+ Version 2.4 (13 November 2014)
+- Chinese translation.
+- fixes from new Chinese translator, Zou Hu.
+
+ Version 2.3 (21 May 2013)
+- first release on ftp.gnu.org. Now looking for a maintainer.
+- update to GFDLv1.3.
+- simple configure script and Makefile added.
+- no changes to the text.
+- There is now a `NEWS' file (this one), giving a history of
+ user-visible changes.
diff --git a/info/impatient/README b/info/impatient/README
new file mode 100644
index 0000000000..e4920fc0e7
--- /dev/null
+++ b/info/impatient/README
@@ -0,0 +1,46 @@
+$Id: README,v 1.5 2014/11/13 17:07:59 karl Exp $
+This is the README file for the GNU (free documentation) 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://ftp.gnu.org/gnu/teximpatient/
+ automatic redirection: http://ftpmirror.gnu.org/teximpatient
+ list of mirrors for manual selection: http://www.gnu.org/prep/ftp.html
+
+Home page: http://www.gnu.org/software/teximpatient/
+
+Development sources, etc.: http://savannah.gnu.org/projects/teximpatient/
+
+Information about the free edition is included at the end of the preface
+and on the copyright page.
+
+A French translation is included in the distribution,
+and a Chinese translation is at https://bitbucket.org/zohooo/impatient
+(with PDF at
+http://zoho.is-programmer.com/user_files/zoho/epics/tex-impatient-cn.pdf).
+
+Original high-resolution scans of the artwork are available from
+http://ftpmirror.gnu.org/teximpatient/artwork. Reduced-size bitmaps are
+in the artwork/ subdirectory here.
+
+
+Some random thoughts for people thinking of working with the source:
+
+- See errata.future for some relatively small ideas for enhancements.
+
+- You may want to translate the source into some more standard
+format, such as Texinfo; we used many homegrown macros mostly to make
+typing and markup easier.
+
+- You may also want to redo the index creation to use makeindex or some
+other standard program, instead of the homegrown Icon programs (or else
+they need to be fixed; right now somehow the + characters used for
+spaces in book.idx are preserved in book.sdx, which is wrong). 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 TeXing.
diff --git a/info/impatient/artwork/0cover.png b/info/impatient/artwork/0cover.png
new file mode 100644
index 0000000000..ee31790a11
--- /dev/null
+++ b/info/impatient/artwork/0cover.png
Binary files differ
diff --git a/info/impatient/artwork/0watchrock.png b/info/impatient/artwork/0watchrock.png
new file mode 100644
index 0000000000..7875489e14
--- /dev/null
+++ b/info/impatient/artwork/0watchrock.png
Binary files differ
diff --git a/info/impatient/artwork/README b/info/impatient/artwork/README
new file mode 100644
index 0000000000..e40b0d32b3
--- /dev/null
+++ b/info/impatient/artwork/README
@@ -0,0 +1,5 @@
+$Id: README,v 1.1 2011/01/27 22:16:26 karl Exp $
+These original drawings by Kathryn Hargreaves are released under the
+GFDL, version 1.2 or later, just like the text of the book.
+
+Updates to the book source to incorporate these images would be very welcome.
diff --git a/info/impatient/artwork/ch01-usingbook.png b/info/impatient/artwork/ch01-usingbook.png
new file mode 100644
index 0000000000..eca225ebc8
--- /dev/null
+++ b/info/impatient/artwork/ch01-usingbook.png
Binary files differ
diff --git a/info/impatient/artwork/ch02-usingtex.png b/info/impatient/artwork/ch02-usingtex.png
new file mode 100644
index 0000000000..0395e750a1
--- /dev/null
+++ b/info/impatient/artwork/ch02-usingtex.png
Binary files differ
diff --git a/info/impatient/artwork/ch03-examples.png b/info/impatient/artwork/ch03-examples.png
new file mode 100644
index 0000000000..03762a0425
--- /dev/null
+++ b/info/impatient/artwork/ch03-examples.png
Binary files differ
diff --git a/info/impatient/artwork/ch04-concepts.png b/info/impatient/artwork/ch04-concepts.png
new file mode 100644
index 0000000000..127bd03fdf
--- /dev/null
+++ b/info/impatient/artwork/ch04-concepts.png
Binary files differ
diff --git a/info/impatient/artwork/ch05-para.png b/info/impatient/artwork/ch05-para.png
new file mode 100644
index 0000000000..6a07bbd1f1
--- /dev/null
+++ b/info/impatient/artwork/ch05-para.png
Binary files differ
diff --git a/info/impatient/artwork/ch06-pages.png b/info/impatient/artwork/ch06-pages.png
new file mode 100644
index 0000000000..af8e38460d
--- /dev/null
+++ b/info/impatient/artwork/ch06-pages.png
Binary files differ
diff --git a/info/impatient/artwork/ch07-horizvert.png b/info/impatient/artwork/ch07-horizvert.png
new file mode 100644
index 0000000000..587956df5d
--- /dev/null
+++ b/info/impatient/artwork/ch07-horizvert.png
Binary files differ
diff --git a/info/impatient/artwork/ch08-math.png b/info/impatient/artwork/ch08-math.png
new file mode 100644
index 0000000000..62fddcbce3
--- /dev/null
+++ b/info/impatient/artwork/ch08-math.png
Binary files differ
diff --git a/info/impatient/artwork/ch09-general.png b/info/impatient/artwork/ch09-general.png
new file mode 100644
index 0000000000..5d8986d5ae
--- /dev/null
+++ b/info/impatient/artwork/ch09-general.png
Binary files differ
diff --git a/info/impatient/artwork/ch10-tips.png b/info/impatient/artwork/ch10-tips.png
new file mode 100644
index 0000000000..ca5afc361c
--- /dev/null
+++ b/info/impatient/artwork/ch10-tips.png
Binary files differ
diff --git a/info/impatient/artwork/ch11-errors.png b/info/impatient/artwork/ch11-errors.png
new file mode 100644
index 0000000000..db3720fb4a
--- /dev/null
+++ b/info/impatient/artwork/ch11-errors.png
Binary files differ
diff --git a/info/impatient/artwork/ch12-compendium.png b/info/impatient/artwork/ch12-compendium.png
new file mode 100644
index 0000000000..8b374a474a
--- /dev/null
+++ b/info/impatient/artwork/ch12-compendium.png
Binary files differ
diff --git a/info/impatient/artwork/ch13-summary.png b/info/impatient/artwork/ch13-summary.png
new file mode 100644
index 0000000000..94b3b11680
--- /dev/null
+++ b/info/impatient/artwork/ch13-summary.png
Binary files differ
diff --git a/info/impatient/backm.tex b/info/impatient/backm.tex
new file mode 100644
index 0000000000..11d1502718
--- /dev/null
+++ b/info/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/info/impatient/book.pdf b/info/impatient/book.pdf
new file mode 100644
index 0000000000..7cfbc01f56
--- /dev/null
+++ b/info/impatient/book.pdf
Binary files differ
diff --git a/info/impatient/book.sdx b/info/impatient/book.sdx
new file mode 100644
index 0000000000..c78157987a
--- /dev/null
+++ b/info/impatient/book.sdx
@@ -0,0 +1,1691 @@
+\indexgroup +
+\indexentry {0}{\visiblespace}{T}{\ic \pp{3}\c 53}
+\indexentry {0}{\visiblespace}{C}{\ic 104\c 105\c 313}
+\indexentry {0}{\char `\!}{T}{\ic 13}
+\indexentry {0}{\char `\!}{C}{\ic \pp{214}\c 313}
+\indexentry {0}{\char `\"}{C}{\ic \pp{100}\c 313}
+\indexentry {0}{\char `\#}{T}{\ic 26\c \pp{45}\c \pp{75}\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {0}{\char `\#}{C}{\ic 15\c \pp{98}\c 314}
+\indexentry {0}{\char `\$}{T}{\ic 16\c 26\c 93\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {0}{\char `\$}{C}{\ic 15\c \pp{98}\c 314}
+\indexentry {0}{\$\$}{T}{\ic 16\c 61}
+\indexentry {0}{\char `\%}{T}{\ic 13\c 26\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {1}{to eliminate unwanted spaces}{N}{\ic 270}
+\indexentry {1}{writing out}{N}{\ic 292}
+\indexentry {0}{\char `\%}{C}{\ic 15\c \pp{98}\c 314}
+\indexentry {0}{\char `\&}{T}{\ic 26\c 44\c 45\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {0}{\char `\&}{C}{\ic 15\c \pp{98}\c 314}
+\indexentry {0}{\char `\'}{T}{\ic \pp{188}\c 314}
+\indexentry {0}{\char `\'}{C}{\ic \pp{100}\c 314}
+\indexentry {0}{\char `\)}{T}{\ic 59}
+\indexentry {0}{\char `\*}{C}{\ic \pp{190}\c 314}
+\indexentry {0}{\char `\+}{C}{\ic 44--45\c \pp{176}\c 314}
+\indexentry {0}{\char `\,}{C}{\ic \pp{214}\c 314}
+\indexentry {0}{\char `\-}{T}{\ic 14}
+\indexentry {1}{leads to {\tt\\hyphenpenalty}}{N}{\ic 125}
+\indexentry {0}{\char `\-}{C}{\ic 70\c \pp{126}\c 314}
+\indexentry {1}{in line breaking}{N}{\ic 74\c 268}
+\indexentry {0}{--}{T}{\ic 14}
+\indexentry {0}{---}{T}{\ic 14}
+\indexentry {0}{\char `\.}{T}{\ic 13}
+\indexentry {0}{\char `\.}{C}{\ic \pp{100}\c 314}
+\indexentry {0}{\char `\/}{T}{\ic 59}
+\indexentry {0}{\char `\/}{C}{\ic \pp{106}\c 314}
+\indexentry {0}{\char `\;}{C}{\ic \pp{214}\c 314}
+\indexentry {0}{\char `\=}{T}{\ic 191}
+\indexentry {0}{\char `\=}{C}{\ic \pp{100}\c 314}
+\indexentry {0}{\char `\>}{C}{\ic \pp{214}\c 314}
+\indexentry {0}{\char `\?}{T}{\ic 13}
+\indexentry {0}{\char `\[}{T}{\ic 59}
+\indexentry {0}{\char `\\}{T}{\ic 26\c 57\c 61\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {0}{\char `\]}{T}{\ic 59}
+\indexentry {0}{\char `\^}{T}{\ic 26\c \pp{197}\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {0}{\char `\^}{C}{\ic \pp{100}\c 314}
+\indexentry {0}{\twocarets ?}{T}{\ic 53}
+\indexentry {0}{\twocarets @}{T}{\ic 53}
+\indexentry {0}{\twocarets A}{T}{\ic 53\c 54}
+\indexentry {0}{\twocarets I}{T}{\ic 53\c 55}
+\indexentry {0}{\twocarets J}{T}{\ic 55}
+\indexentry {0}{\twocarets K}{T}{\ic 53\c 54}
+\indexentry {0}{\twocarets L}{T}{\ic 53\c 292\c 314}
+\indexentry {0}{\twocarets M}{T}{\ic 55\c \pp{105}\c 291\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {0}{\char `\_}{T}{\ic 26\c \pp{197}\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {0}{\char `\_}{C}{\ic 15\c \pp{98}\c 314}
+\indexentry {0}{\char `\`}{C}{\ic \pp{100}\c 314}
+\indexentry {0}{\char `\{}{T}{\ic 26\c \pp{227}\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {1}{starting a group}{N}{\ic 15\c 68}
+\indexentry {1}{with {\tt\\expandafter}}{N}{\ic 233}
+\indexentry {0}{\char `\{}{C}{\ic 59\c \pp{191}\c 314}
+\indexentry {0}{\char `\|}{T}{\ic 189}
+\indexentry {0}{\char `\|}{C}{\ic \pp{188}\c 314}
+\indexentry {0}{\char `\}}{T}{\ic 26\c \pp{227}\c 314}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{ending a group}{N}{\ic 15\c 68}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {0}{\char `\}}{C}{\ic 59\c \pp{191}\c 314}
+\indexentry {0}{\char `\~}{T}{\ic 13\c 26\c 53\c \pp{105}\c 268\c 314}
+\indexentry {1}{in line breaking}{N}{\ic 74}
+\indexentry {1}{in ordinary text}{N}{\ic 15}
+\indexentry {0}{\char `\~}{C}{\ic \pp{100}\c 314}
+\indexgroup A
+\secondprinting{\vskip\baselineskip}
+\indexentry {0}{aa}{C}{\ic \pp{97}\c 314}
+\indexentry {0}{AA}{C}{\ic \pp{97}\c 314}
+\indexentry {0}{above}{C}{\ic \pp{200}\c 314}
+\indexentry {0}{abovecolumnspenalty}{C}{\ic \pp{308}}
+\indexentry {0}{abovedisplayshortskip}{C}{\ic \pp{217}\c 271\c 314}
+\indexentry {0}{abovedisplayskip}{C}{\ic \pp{217}\c 271\c 315}
+\indexentry {0}{abovewithdelims}{T}{\ic 58}
+\indexentry {0}{abovewithdelims}{C}{\ic \pp{201}\c 315}
+\indexentry {0}{accent}{C}{\ic \pp{100}\c 315}
+\indexentry {0}{accents}{N}{\ic 26\c 100\c 199}
+\indexentry {1}{aligning}{N}{\ic 212--213}
+\indexentry {0}{active}{C}{\ic 43\c \pp{251}\c 315}
+\indexentry {0}{active characters}{N}{\ic \pp{43--44}\c 53\c 54}
+\indexentry {0}{acute}{C}{\ic \pp{199}\c 315}
+\indexentry {0}{acute accent}{N}{\ic 100\c 199}
+\indexentry {0}{adjdemerits}{C}{\ic \pp{125}\c 315}
+\indexentry {0}{advance}{C}{\ic \pp{245}\c 315}
+\indexentry {0}{advancepageno}{C}{\ic \pp{142}\c 315}
+\indexentry {0}{ae}{C}{\ic \pp{97}\c 315}
+\indexentry {0}{AE}{C}{\ic \pp{97}\c 315}
+\indexentry {0}{afterassignment}{C}{\ic \pp{229}\c 315}
+\indexentry {0}{aftergroup}{C}{\ic \pp{229}\c 307\c 315}
+\indexentry {0}{aleph}{C}{\ic \pp{188}\c 315}
+\indexentry {0}{alignments}{N}{\ic \pp{44--46}}
+\indexentry {1}{commands for}{N}{\ic 176--185}
+\indexentry {1}{outer control sequence in}{N}{\ic 279}
+\indexentry {1}{space between rows of}{N}{\ic 135}
+\indexentry {1}{tab character for}{N}{\ic 53}
+\indexentry {1}{using \b\tt\\offinterlineskip\e\ in}{N}{\ic 135}
+\indexentry {0}{allowbreak}{C}{\ic \pp{121}\c \pp{136}\c 315}
+\indexentry {0}{alpha}{C}{\ic \pp{187}\c 315}
+\indexentry {0}{amalg}{C}{\ic \pp{189}\c 315}
+\indexentry {0}{\AMSTeX}{N}{\ic \r8\c 18}
+\indexentry {0}{AMSTeX}{C}{\ic \pp{294}}
+\indexentry {0}{\anatomy}{N}{\ic 16\c \pp{46--47}}
+\indexentry {0}{angle}{C}{\ic \pp{188}\c 315}
+\indexentry {0}{approx}{C}{\ic \pp{190}\c 191\c 315}
+\indexentry {0}{arccos}{C}{\ic \pp{193}\c 315}
+\indexentry {0}{arcsin}{C}{\ic \pp{193}\c 315}
+\indexentry {0}{arctan}{C}{\ic \pp{193}\c 315}
+\indexentry {0}{arg}{C}{\ic \pp{193}\c 315}
+\indexentry {0}{\<argument>}{N}{\ic 4}
+\indexentry {0}{arguments}{N}{\ic 4\c 11\c \pp{48--49}}
+\indexentry {0}{arithmetic}{N}{\ic 245--246}
+\indexentry {0}{arrows}{N}{\ic 175\c 192--193\c 202}
+\indexentry {0}{arrowvert}{C}{\ic \pp{212}\c 315}
+\indexentry {0}{Arrowvert}{C}{\ic \pp{212}\c 315}
+\indexentry {0}{\ascii}{N}{\ic \pp{49} \c 53\c 55\c 64}
+\indexentry {0}{assignments}{N}{\ic \pp{49--50}\c 87}
+\indexentry {1}{of boxes}{N}{\ic 164}
+\indexentry {1}{of registers}{N}{\ic 242}
+\indexentry {0}{ast}{C}{\ic \pp{189}\c 315}
+\indexentry {0}{asymp}{C}{\ic \pp{190}\c 191\c 315}
+\indexentry {0}{atop}{C}{\ic \pp{200}\c 315}
+\indexentry {0}{atopwithdelims}{C}{\ic 58\c \pp{201}\c 315}
+\indexentry {0}{auxiliary files}{N}{\ic 226}
+\indexentry {0}{axis}{N}{\ic 213}
+\indexgroup B
+\indexentry {0}{\char `\b}{C}{\ic \pp{199}\c 315}
+\indexentry {0}{backslash}{N}{\ic 227}
+\indexentry {0}{backslash}{C}{\ic 59\c \pp{188}\c 315}
+\indexentry {0}{badness}{N}{\ic \pp{50}\c 60}
+\indexentry {0}{badness}{C}{\ic 18\c \pp{170}\c 315}
+\indexentry {0}{bar}{C}{\ic \pp{199}\c 316}
+\indexentry {0}{bar accent}{N}{\ic 199}
+\indexentry {0}{bar-under accent}{N}{\ic 199}
+\indexentry {0}{baselines}{N}{\ic 28\c \pp{51}\c 88}
+\indexentry {0}{baselineskip}{C}{\ic 70\c \pp{133--134}\c 135\c 316}
+\indexentry {1}{and {\tt\\smallskipamount}, etc.}{N}{\ic 155}
+\indexentry {1}{and preserving end of page}{N}{\ic 267}
+\indexentry {0}{batchmode}{C}{\ic \pp{253}\c 316}
+\indexentry {0}{begingroup}{C}{\ic \pp{227}\c 316}
+\indexentry {0}{beginsection}{C}{\ic \pp{129}\c 316}
+\indexentry {0}{belowdisplayshortskip}{C}{\ic \pp{217}\c 316}
+\indexentry {0}{belowdisplayskip}{C}{\ic \pp{217}\c 316}
+\indexentry {0}{beta}{N}{\ic 188}
+\indexentry {0}{beta}{C}{\ic \pp{187}\c 316}
+\indexentry {0}{bf}{C}{\ic \pp{103}\c 316}
+\indexentry {0}{bffam}{C}{\ic \pp{210}\c 316}
+\indexentry {0}{bgroup}{C}{\ic \pp{227}\c 316}
+\indexentry {0}{bibliographies}{N}{\ic 14}
+\indexentry {0}{\BibTeX}{N}{\ic 19}
+\indexentry {0}{BibTeX}{C}{\ic \pp{294}}
+\indexentry {0}{big}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{Big}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{bigbreak}{C}{\ic \pp{137}\c 316}
+\indexentry {0}{bigcap}{C}{\ic \pp{194}\c 316}
+\indexentry {0}{bigcirc}{C}{\ic \pp{189}\c 316}
+\indexentry {0}{bigcup}{C}{\ic \pp{194}\c 316}
+\indexentry {0}{bigg}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{Bigg}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{biggl}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{Biggl}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{biggm}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{Biggm}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{biggr}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{Biggr}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{bigl}{C}{\ic 58\c \pp{211}\c 316}
+\indexentry {0}{Bigl}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{bigm}{C}{\ic 189\c \pp{211}\c 316}
+\indexentry {0}{Bigm}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{bigodot}{C}{\ic \pp{194}\c 316}
+\indexentry {0}{bigoplus}{C}{\ic \pp{194}\c 316}
+\indexentry {0}{bigotimes}{C}{\ic \pp{194}\c 316}
+\indexentry {0}{bigr}{C}{\ic 58\c \pp{211}\c 316}
+\indexentry {0}{Bigr}{C}{\ic \pp{211}\c 316}
+\indexentry {0}{bigskip}{C}{\ic 137\c \pp{154}\c 317}
+\indexentry {0}{bigskipamount}{C}{\ic \pp{155}\c 317}
+\indexentry {0}{bigsqcup}{C}{\ic \pp{194}\c 317}
+\indexentry {0}{bigtriangledown}{C}{\ic \pp{189}\c 317}
+\indexentry {0}{bigtriangleup}{C}{\ic \pp{189}\c 317}
+\indexentry {0}{biguplus}{C}{\ic \pp{194}\c 317}
+\indexentry {0}{bigvee}{C}{\ic \pp{194}\c 317}
+\indexentry {0}{bigwedge}{C}{\ic \pp{194}\c 317}
+\indexentry {0}{binoppenalty}{C}{\ic \pp{126}\c 317}
+\indexentry {0}{blackbox}{C}{\ic \pp{294}}
+\indexentry {0}{bmod}{C}{\ic \pp{193}\c 317}
+\indexentry {0}{bordermatrix}{C}{\ic \pp{205}\c 317}
+\indexentry {0}{bot}{C}{\ic \pp{188}\c 317}
+\indexentry {0}{botmark}{C}{\ic 79\c 80\c \pp{144}\c 317}
+\indexentry {0}{bottom margin}{N}{\ic 66}
+\indexentry {0}{bowtie}{C}{\ic \pp{190}\c 317}
+\indexentry {0}{box}{C}{\ic \pp{164}\c 165\c 317}
+\indexentry {0}{box commands}{N}{\ic 160--171}
+\indexentry {0}{box registers}{N}{\ic 52\c 89\c 164--166\c 167}
+\indexentry {1}{reserved by \b\tt\\newbox\e}{N}{\ic 244}
+\indexentry {0}{boxes}{N}{\ic 17\c \pp{51--53}}
+\indexentry {1}{baselines of}{N}{\ic 51}
+\indexentry {1}{copying}{N}{\ic 164\c 165}
+\indexentry {1}{depth of}{N}{\ic 60}
+\indexentry {1}{drawing}{N}{\ic 30}
+\indexentry {1}{empty}{N}{\ic 169}
+\indexentry {1}{extracting contents of}{N}{\ic 165}
+\indexentry {1}{glue with}{N}{\ic 66}
+\indexentry {1}{height of}{N}{\ic 69}
+\indexentry {1}{invisible}{N}{\ic 92}
+\indexentry {1}{last box in a list}{N}{\ic 171}
+\indexentry {1}{overfull}{N}{\ic 170--171\c 268--270}
+\indexentry {1}{phantom}{N}{\ic 168--169}
+\indexentry {1}{reference point of}{N}{\ic 88}
+\indexentry {1}{shifting}{N}{\ic 166--167}
+\indexentry {1}{testing if void}{N}{\ic 238}
+\indexentry {1}{underfull}{N}{\ic 170--171\c 268--270}
+\indexentry {1}{width of}{N}{\ic 95}
+\indexentry {0}{boxmaxdepth}{C}{\ic 52\c 162\c \pp{163}\c 317}
+\indexentry {0}{box255}{C}{\ic 84\c 90\c 144\c 148}
+\indexentry {0}{brace}{C}{\ic \pp{200}\c 317}
+\indexentry {0}{braces}{N}{\ic 202\c 211}
+\indexentry {1}{mismatched}{N}{\ic 275}
+\indexentry {1}{space after}{N}{\ic 270}
+\indexentry {0}{bracevert}{C}{\ic \pp{212}\c 317}
+\indexentry {0}{brack}{C}{\ic \pp{200}\c 317}
+\indexentry {0}{break}{C}{\ic 74\c \pp{120}\c \pp{136}\c 317}
+\indexentry {1}{correcting line breaks with}{N}{\ic 268}
+\indexentry {1}{end of line as}{N}{\ic 278}
+\indexentry {0}{breve}{C}{\ic \pp{199}\c 317}
+\indexentry {0}{breve accent}{N}{\ic 100\c 199}
+\indexentry {0}{brokenpenalty}{C}{\ic \pp{139}\c 317}
+\indexentry {0}{buildrel}{C}{\ic \pp{202}\c 317}
+\indexentry {0}{bullet}{C}{\ic \pp{189}\c 317}
+\indexentry {0}{bye}{C}{\ic \pp{246}\c 317}
+\indexgroup C
+\indexentry {0}{\char `\c}{C}{\ic \pp{100}\c 317}
+\indexentry {0}{cal}{C}{\ic \pp{209}\c 317}
+\indexentry {0}{cap}{C}{\ic \pp{189}\c 317}
+\indexentry {0}{card suits}{N}{\ic 26\c 188}
+\indexentry {0}{case conversion}{N}{\ic 103--104}
+\indexentry {0}{case testing}{N}{\ic 239}
+\indexentry {0}{cases}{C}{\ic \pp{201}\c 317}
+\indexentry {0}{catcode}{C}{\ic 43\c 53\c 61\c \pp{251}\c 317}
+\indexentry {0}{category codes}{N}{\ic \pp{53--55}}
+\indexentry {1}{attached during input}{N}{\ic 55}
+\indexentry {1}{cause of unwanted spaces}{N}{\ic 270}
+\indexentry {1}{changing}{N}{\ic 280}
+\indexentry {1}{for verbatim text}{N}{\ic 277}
+\indexentry {1}{in \b\tt\\catcode\e\ table}{N}{\ic 251}
+\indexentry {1}{of active characters}{N}{\ic 43}
+\indexentry {1}{testing}{N}{\ic 235}
+\indexentry {1}{useful definitions for}{N}{\ic 291}
+\indexentry {0}{cdot}{C}{\ic \pp{189}\c 196\c 317}
+\indexentry {0}{cdotp}{C}{\ic \pp{196}\c 317}
+\indexentry {0}{cdots}{C}{\ic \pp{203}\c 317}
+\indexentry {0}{cedilla accent}{N}{\ic 100}
+\indexentry {0}{center}{C}{\ic \pp{306}}
+\indexentry {0}{centered text}{N}{\ic 68\c 71\c 306--307}
+\indexentry {0}{centereddisplays}{C}{\ic \pp{295}}
+\indexentry {0}{centering}{N}{\ic 32\c 108--109}
+\indexentry {0}{centerline}{C}{\ic 68\c \pp{108}\c 317}
+\indexentry {0}{centimeter}{N}{\ic 60}
+\indexentry {0}{char}{C}{\ic 53\c 56\c \pp{99}\c 318}
+\indexentry {0}{character tokens}{N}{\ic 292}
+\indexentry {0}{characters}{N}{\ic 49\c \pp{55--56}\c 99}
+\indexentry {1}{\ascii\ codes for}{N}{\ic 82}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{defined by \b\tt\\chardef\e}{N}{\ic 232}
+\indexentry {1}{special}{N}{\ic 26}
+\indexentry {0}{\<charcode>}{N}{\ic 4}
+\indexentry {0}{chardef}{C}{\ic \pp{232}\c 234\c 318}
+\indexentry {0}{check}{C}{\ic \pp{199}\c 318}
+\indexentry {0}{check accent}{N}{\ic 100\c 199}
+\indexentry {0}{chi}{C}{\ic \pp{187}\c 318}
+\indexentry {0}{choose}{C}{\ic \pp{200}\c 318}
+\indexentry {0}{cicero}{N}{\ic 60}
+\indexentry {0}{circ}{C}{\ic \pp{189}\c 318}
+\indexentry {0}{circumflex accent}{N}{\ic 100}
+\indexentry {0}{class}{N}{\ic \pp{56}\c 210\c 218}
+\indexentry {1}{of a delimiter}{N}{\ic 59}
+\indexentry {0}{cleaders}{C}{\ic 72--73\c \pp{174}\c 318}
+\indexentry {0}{cleartabs}{C}{\ic \pp{177}\c 318}
+\indexentry {0}{closein}{C}{\ic 63\c \pp{248}\c 318}
+\indexentry {0}{closeout}{C}{\ic 63\c \pp{249}\c 318}
+\indexentry {1}{whatsit produced by}{N}{\ic 95}
+\indexentry {1}{with {\tt\\immediate}}{N}{\ic 250}
+\indexentry {0}{closing}{N}{\ic 191}
+\indexentry {0}{club line}{N}{\ic 138}
+\indexentry {0}{clubpenalty}{C}{\ic \pp{138}\c 318}
+\indexentry {0}{clubsuit}{C}{\ic \pp{188}\c 318}
+\indexentry {0}{cmex10}{T}{\ic 212}
+\indexentry {0}{cmtt10}{T}{\ic 109}
+\indexentry {0}{colon}{C}{\ic \pp{196}\c 318}
+\indexentry {0}{combinations, notation for}{N}{\ic 201}
+\indexentry {0}{commands}{N}{\ic 3\c 10--11\c \pp{56}}
+\indexentry {1}{arguments of}{N}{\ic 48}
+\indexentry {1}{versus control sequences}{N}{\ic 11}
+\indexentry {0}{comments}{N}{\ic \pp{13}\c 22\c 53}
+\indexentry {0}{Computer Modern fonts}{N}{\ic 34\c 49\c 64\c 109}
+\indexentry {0}{computer programs, typesetting}{N}{\ic 122\c 277\c 280}
+\indexentry {0}{conditional tests}{N}{\ic \pp{57}\c 235--240}
+\indexentry {0}{cong}{C}{\ic \pp{190}\c 191\c 318}
+\indexentry {0}{control characters}{N}{\ic 7\c 49\c 55}
+\indexentry {0}{control sequences}{N}{\ic 10--11\c \pp{57}}
+\indexentry {1}{absorbing spaces}{N}{\ic 10}
+\indexentry {1}{as tokens}{N}{\ic 16}
+\indexentry {1}{converting to strings}{N}{\ic 226}
+\indexentry {1}{defining with \b\tt\\let\e}{N}{\ic 232}
+\indexentry {1}{versus commands}{N}{\ic 11}
+\indexentry {0}{control space}{N}{\ic 10\c 104\c 270}
+\indexentry {0}{control symbols}{N}{\ic 10\c 57\c \pp{58}}
+\indexentry {0}{control words}{N}{\ic 10\c 57\c \pp{58}}
+\indexentry {0}{controlling \TeX}{N}{\ic 252--253}
+\indexentry {0}{coprod}{C}{\ic \pp{194}\c 318}
+\indexentry {0}{copy}{C}{\ic \pp{164}\c 318}
+\indexentry {0}{copyright}{C}{\ic \pp{98}\c 318}
+\indexentry {0}{cos}{C}{\ic \pp{193}\c 318}
+\indexentry {0}{cosh}{C}{\ic \pp{193}\c 318}
+\indexentry {0}{cot}{C}{\ic \pp{193}\c 318}
+\indexentry {0}{coth}{C}{\ic \pp{193}\c 318}
+\indexentry {0}{count}{C}{\ic 48\c \pp{242}\c 246\c 318}
+\indexentry {0}{count registers}{N}{\ic 89\c 242}
+\indexentry {1}{reserved by \b\tt\\newcount\e}{N}{\ic 244}
+\indexentry {0}{countdef}{C}{\ic \pp{245}\c 318}
+\indexentry {0}{count0}{C}{\ic 142}
+\indexentry {0}{cr}{C}{\ic 44--46\c \pp{180}\c 318}
+\indexentry {0}{cramped variants}{N}{\ic 93}
+\indexentry {0}{crcr}{C}{\ic \pp{180}\c 318}
+\indexentry {0}{cross-references}{N}{\ic 302}
+\indexentry {0}{csc}{C}{\ic \pp{193}\c 318}
+\indexentry {0}{csname}{C}{\ic 226\c \pp{233}\c 318}
+\indexentry {1}{expanded by {\tt\\edef} rules}{N}{\ic 231}
+\indexentry {0}{cup}{C}{\ic \pp{189}\c 318}
+\indexgroup D
+\indexentry {0}{\char `\d}{C}{\ic \pp{100}\c 318}
+\indexentry {0}{dag}{C}{\ic \pp{98}\c 318}
+\indexentry {0}{dagger}{C}{\ic \pp{189}\c 318}
+\indexentry {0}{dashes}{N}{\ic 14\c 22}
+\indexentry {0}{dashv}{C}{\ic \pp{190}\c 318}
+\indexentry {0}{date}{N}{\ic 225\c 297}
+\indexentry {0}{day}{C}{\ic \pp{225}\c 297\c 318}
+\indexentry {0}{ddag}{C}{\ic \pp{98}\c 318}
+\indexentry {0}{ddagger}{C}{\ic \pp{189}\c 318}
+\indexentry {0}{ddot}{C}{\ic \pp{199}\c 319}
+\indexentry {0}{ddots}{C}{\ic \pp{203}\c 319}
+\indexentry {0}{deadcycles}{C}{\ic \pp{148}\c 319}
+\indexentry {0}{debugging}{N}{\ic 253--261}
+\indexentry {0}{decimal constant}{N}{\ic \pp{58}\c 83}
+\indexentry {0}{decimal point}{N}{\ic 83}
+\indexentry {0}{def}{C}{\ic 57\c \pp{230}\c 319}
+\indexentry {1}{making global}{N}{\ic 66}
+\indexentry {0}{defaulthyphenchar}{C}{\ic \pp{129}\c 319}
+\indexentry {0}{defaultskewchar}{C}{\ic \pp{213}\c 319}
+\indexentry {0}{deg}{C}{\ic \pp{193}\c 319}
+\indexentry {0}{delcode}{C}{\ic 59\c 207\c \pp{251}\c 319}
+\indexentry {0}{delimited arguments}{N}{\ic 48}
+\indexentry {0}{delimiter}{C}{\ic 59\c \pp{204}\c 319}
+\indexentry {0}{delimiter codes}{N}{\ic 59--60\c 207\c 251}
+\indexentry {0}{delimiterfactor}{C}{\ic \pp{205}\c 319}
+\indexentry {0}{delimiters}{N}{\ic \pp{58--60}\c 191--192\c 204--205}
+\indexentry {1}{enlarging}{N}{\ic 211}
+\indexentry {1}{height of}{N}{\ic 205}
+\indexentry {1}{null, space for}{N}{\ic 217}
+\indexentry {1}{parts of}{N}{\ic 212}
+\indexentry {0}{delimitershortfall}{C}{\ic \pp{205}\c 319}
+\indexentry {0}{delta}{C}{\ic \pp{187}\c 319}
+\indexentry {0}{Delta}{C}{\ic \pp{187}\c 319}
+\indexentry {0}{demerits}{N}{\ic \pp{60}\c 74}
+\indexentry {0}{depth}{N}{\ic 51\c \pp{60}\c 167}
+\indexentry {0}{description lists}{N}{\ic 30}
+\indexentry {0}{design size}{N}{\ic 78}
+\indexentry {0}{det}{C}{\ic \pp{193}\c 197\c 319}
+\indexentry {0}{device drivers}{N}{\ic 8\c 64\c 222\c 250}
+\indexentry {1}{instructions from \b\tt\\special\e}{N}{\ic 250}
+\indexentry {1}{page origin known to}{N}{\ic 141}
+\indexentry {0}{diacritical marks}{N}{\see{accents}}
+\indexentry {0}{diagnostic aids}{N}{\ic 253--261}
+\indexentry {0}{diamond}{C}{\ic \pp{189}\c 319}
+\indexentry {0}{diamondsuit}{C}{\ic \pp{188}\c 319}
+\indexentry {0}{\didotpt}{N}{\ic 60}
+\indexentry {0}{dim}{C}{\ic \pp{193}\c 319}
+\indexentry {0}{dimen}{C}{\ic \pp{242}\c 246\c 319}
+\indexentry {0}{\<dimen>}{N}{\ic 4\c 276}
+\indexentry {0}{dimendef}{C}{\ic \pp{245}\c 319}
+\indexentry {0}{dimension registers}{N}{\ic 89\c 242}
+\indexentry {1}{reserved by \b\tt\\newdimen\e}{N}{\ic 244}
+\indexentry {0}{dimensions}{N}{\ic \pp{60--61}}
+\indexentry {1}{comparing}{N}{\ic 237}
+\indexentry {1}{maximum}{N}{\ic 244}
+\indexentry {1}{negative}{N}{\ic 61}
+\indexentry {1}{of box registers}{N}{\ic 167}
+\indexentry {0}{discretionary}{C}{\ic \pp{127}\c 319}
+\indexentry {0}{discretionary hyphens}{N}{\ic 70\c 74\c 125\c 126}
+\indexentry {1}{bad line breaks, correcting with}{N}{\ic 268}
+\indexentry {1}{overfull boxes, correcting with}{N}{\ic 269}
+\indexentry {0}{display math}{N}{\ic 16\c \pp{61}}
+\indexentry {0}{display math mode}{N}{\ic 80\c 81}
+\indexentry {0}{display style}{N}{\ic 93\c 194\c 198}
+\indexentry {0}{displayindent}{C}{\ic \pp{216}\c 319}
+\indexentry {0}{displaylimits}{C}{\ic \pp{195}\c 319}
+\indexentry {0}{displaylines}{C}{\ic \pp{208}\c 297\c 319}
+\indexentry {0}{displays}{N}{}
+\indexentry {1}{actions for every display}{N}{\ic 218}
+\indexentry {1}{multiline}{N}{\ic 208--209}
+\indexentry {1}{spacing parameters for}{N}{\ic 216--217}
+\indexentry {0}{displays, formatting}{N}{\ic 295}
+\indexentry {0}{displaysetup}{C}{\ic 296}
+\indexentry {0}{displaystyle}{C}{\ic 93\c \pp{198}\c 319}
+\indexentry {0}{displaywidowpenalty}{C}{\ic \pp{138}\c 319}
+\indexentry {0}{displaywidth}{C}{\ic \pp{216}\c 319}
+\indexentry {0}{div}{C}{\ic \pp{189}\c 319}
+\indexentry {0}{divide}{C}{\ic \pp{246}\c 319}
+\indexentry {0}{dot}{C}{\ic \pp{199}\c 319}
+\indexentry {0}{dot accent}{N}{\ic 100\c 199}
+\indexentry {0}{doteq}{C}{\ic \pp{190}\c 319}
+\indexentry {0}{dotfill}{C}{\ic \pp{175}\c 319}
+\indexentry {0}{dotless letters}{N}{\ic 100}
+\indexentry {0}{dots}{N}{\ic 99\c 203}
+\indexentry {0}{dots}{C}{\ic \pp{99}\c 319}
+\indexentry {0}{double columns}{N}{\ic 309}
+\indexentry {0}{double dot accent}{N}{\ic 199}
+\indexentry {0}{double spacing}{N}{\ic 134}
+\indexentry {0}{doublehyphendemerits}{C}{\ic \pp{125}\c 320}
+\indexentry {0}{downarrow}{C}{\ic 59\c \pp{192}\c 320}
+\indexentry {0}{Downarrow}{C}{\ic 59\c \pp{192}\c 320}
+\indexentry {0}{downbracefill}{C}{\ic \pp{211}\c 320}
+\indexentry {0}{dp}{C}{\ic \pp{167}\c 320}
+\indexentry {0}{drawing lines}{N}{\see{rules}}
+\indexentry {0}{drivers}{N}{\see{device drivers}}
+\indexentry {0}{dump}{C}{\ic 65\c \pp{263}\c 320}
+\indexentry {0}{\dvifile}{N}{\ic 8}
+\indexentry {1}{as a result file}{N}{\ic 62}
+\indexentry {1}{boxes recorded in log file}{N}{\ic 258}
+\indexentry {1}{converted by driver}{N}{\ic 65}
+\indexentry {1}{created by \TeX's intestines}{N}{\ic 16\c 47}
+\indexentry {1}{material from output routine}{N}{\ic 83\c 84\c 85}
+\indexentry {1}{material inserted by \b\tt\\special\e}{N}{\ic 95}
+\indexentry {1}{receives boxes from \b\tt\\shipout\e}{N}{\ic 148}
+\indexentry {1}{whatsits in}{N}{\ic 95}
+\indexgroup E
+\indexentry {0}{edef}{C}{\ic \pp{230}\c 320}
+\indexentry {1}{expansion of {\tt\\'\it c} in}{N}{\ic 82}
+\indexentry {1}{making global}{N}{\ic 66}
+\indexentry {0}{egroup}{C}{\ic \pp{227}\c 320}
+\indexentry {0}{ehrule}{C}{\ic \pp{292}}
+\indexentry {0}{eject}{C}{\ic \pp{137}\c 266\c 320}
+\indexentry {0}{El Paso}{N}{\ic 93}
+\indexentry {0}{ell}{C}{\ic \pp{188}\c 320}
+\indexentry {0}{ellipsis}{N}{\ic 99}
+\indexentry {0}{else}{C}{\ic 57\c \pp{239}\c 320}
+\indexentry {0}{em}{T}{\ic 60}
+\indexentry {0}{emergencystretch}{C}{\ic 18\c 123\c \pp{124}\c 268\c 320}
+\indexentry {0}{empty}{C}{\ic \pp{241}\c 320}
+\indexentry {0}{emptyset}{C}{\ic \pp{188}\c 320}
+\indexentry {0}{en}{N}{\ic 154}
+\indexentry {0}{end}{C}{\ic \pp{247}\c 320}
+\indexentry {0}{end of file, testing for}{N}{\ic 239}
+\indexentry {0}{end of line}{N}{\ic 53\c 91\c 105}
+\indexentry {0}{endcsname}{C}{\ic 320}
+\indexentry {0}{endgraf}{C}{\ic \pp{111}\c 320}
+\indexentry {0}{endgroup}{C}{\ic \pp{227}\c 320}
+\indexentry {0}{ending the job}{N}{\ic 246}
+\indexentry {0}{endinput}{C}{\ic \pp{247}\c 320}
+\indexentry {0}{endinsert}{C}{\ic \pp{147}\c 320}
+\indexentry {0}{endline}{C}{\ic \pp{180}\c 320}
+\indexentry {0}{endlinechar}{C}{\ic \pp{252}\c 281\c 320}
+\indexentry {0}{enskip}{C}{\ic \pp{154}\c 320}
+\indexentry {0}{enspace}{C}{\ic \pp{154}\c 320}
+\indexentry {0}{entry (column or row)}{N}{\ic 44\c 178--179}
+\indexentry {0}{enumerations}{N}{\ic 298--300}
+\indexentry {0}{environment}{C}{\ic \pp{305}}
+\indexentry {0}{environments}{N}{\ic 304}
+\indexentry {0}{eplain.tex}{T}{\ic 19\c 291--311}
+\indexentry {0}{epsilon}{C}{\ic \pp{187}\c 320}
+\indexentry {0}{eq}{C}{\ic \pp{295}}
+\indexentry {0}{eqalign}{C}{\ic \pp{208}\c 320}
+\indexentry {0}{eqalignno}{C}{\ic \pp{208}\c 297\c 320}
+\indexentry {0}{eqdef}{C}{\ic \pp{304}}
+\indexentry {0}{eqn}{C}{\ic \pp{295}}
+\indexentry {0}{eqno}{C}{\ic \pp{207}\c 320}
+\indexentry {0}{eqprint}{C}{\ic \pp{304}}
+\indexentry {0}{eqref}{C}{\ic \pp{304}}
+\indexentry {0}{equation numbers}{N}{\ic 208}
+\indexentry {0}{equations, labelling}{N}{\ic 304}
+\indexentry {0}{equiv}{C}{\ic \pp{190}\c 191\c 320}
+\indexentry {0}{errhelp}{C}{\ic \pp{261}\c 262\c 320}
+\indexentry {0}{errmessage}{C}{\ic \pp{261}\c 320}
+\indexentry {1}{expanded by {\tt\\edef} rules}{N}{\ic 231}
+\indexentry {0}{error messages}{N}{\ic 9\c 261--262\c 283--288}
+\indexentry {0}{errorcontextlines}{C}{\ic 18\c \pp{262}\c 288\c 320}
+\indexentry {0}{errorstopmode}{C}{\ic \pp{252}\c 321}
+\indexentry {0}{escape character}{N}{\ic 57\c 58\c \pp{61}}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {1}{represented by \b\tt\\escapechar\e}{N}{\ic 226}
+\indexentry {0}{escapechar}{C}{\ic 61\c \pp{226}\c 250\c 321}
+\indexentry {0}{eta}{C}{\ic \pp{187}\c 321}
+\indexentry {0}{European alphabets}{N}{\ic 97}
+\indexentry {0}{European languages}{N}{\ic 74\c 128}
+\indexentry {0}{everycr}{C}{\ic 180\c \pp{185}\c 321}
+\indexentry {0}{everydisplay}{C}{\ic \pp{218}\c 296\c 299\c 321}
+\indexentry {0}{everyfootnote}{C}{\ic \pp{309}}
+\indexentry {0}{everyhbox}{C}{\ic \pp{164}\c 321}
+\indexentry {0}{everyjob}{C}{\ic \pp{263}\c 321}
+\indexentry {0}{everymath}{C}{\ic \pp{218}\c 321}
+\indexentry {0}{everypar}{C}{\ic 87\c 110\c \pp{113}\c 321}
+\indexentry {1}{for hanging indentation}{N}{\ic 117}
+\indexentry {1}{for setting \b\tt\\looseness\e}{N}{\ic 124}
+\indexentry {0}{everyvbox}{C}{\ic \pp{164}\c 321}
+\indexentry {0}{evrule}{C}{\ic \pp{292}}
+\indexentry {0}{ex}{T}{\ic 60}
+\indexentry {0}{exclamation point}{N}{\ic 13}
+\indexentry {0}{exhyphenpenalty}{C}{\ic \pp{125}\c 321}
+\indexentry {0}{exists}{C}{\ic \pp{188}\c 321}
+\indexentry {0}{exp}{C}{\ic \pp{193}\c 321}
+\indexentry {0}{expandafter}{C}{\ic 231\c \pp{233}\c 321}
+\indexentry {0}{expanding tokens}{N}{\ic 16}
+\indexentry {0}{extra space}{N}{\ic 214\c 258}
+\indexentry {0}{eyes}{N}{\ic 16\c \pp{46}\seealso{\anatomy}}
+\indexgroup F
+\indexentry {0}{factor}{N}{\ic 61}
+\indexentry {0}{fam}{C}{\ic \pp{210}\c 321}
+\indexentry {0}{family}{N}{\ic \pp{62}}
+\indexentry {1}{as part of mathcode}{N}{\ic 80}
+\indexentry {1}{given by \b\tt\\fam\e}{N}{\ic 210}
+\indexentry {1}{reserved by \b\tt\\newfam\e}{N}{\ic 244}
+\indexentry {1}{script size in}{N}{\ic 91}
+\indexentry {1}{scriptscript size in}{N}{\ic 91}
+\indexentry {1}{text size in}{N}{\ic 93}
+\indexentry {1}{variable}{N}{\ic 81}
+\indexentry {0}{fi}{C}{\ic 57\c \pp{240}\c 321}
+\indexentry {0}{fil}{T}{\ic 61\c 67}
+\indexentry {0}{filbreak}{C}{\ic \pp{137}\c 266\c 321}
+\indexentry {0}{file names}{N}{\ic \pp{63}}
+\indexentry {0}{files}{N}{\ic \pp{62--63}\c 247--251}
+\indexentry {1}{testing for existence of}{N}{\ic 295}
+\indexentry {0}{fill}{N}{\ic 175}
+\indexentry {0}{fill}{T}{\ic 61\c 67}
+\indexentry {0}{filll}{T}{\ic 61\c 67}
+\indexentry {0}{finalhyphendemerits}{C}{\ic \pp{126}\c 321}
+\indexentry {0}{firstmark}{C}{\ic 79\c 80\c \pp{144}\c 321}
+\indexentry {0}{fivebf}{C}{\ic \pp{102}\c 321}
+\indexentry {0}{fivei}{C}{\ic \pp{102}\c 321}
+\indexentry {0}{fiverm}{C}{\ic \pp{102}\c 321}
+\indexentry {0}{fivesy}{C}{\ic \pp{102}\c 321}
+\indexentry {0}{flat}{C}{\ic \pp{188}\c 321}
+\indexentry {0}{floating material}{N}{\ic 139\c 146}
+\indexentry {0}{floatingpenalty}{C}{\ic \pp{139}\c 321}
+\indexentry {0}{flush left}{N}{\ic 32\c 68\c 108--109\c 306--307}
+\indexentry {0}{flush right}{N}{\ic 32\c 68\c 108--109\c 306--307}
+\indexentry {0}{flushleft}{C}{\ic \pp{306}}
+\indexentry {0}{flushright}{C}{\ic \pp{306}}
+\indexentry {0}{fmtname}{C}{\ic \pp{225}\c 321}
+\indexentry {0}{fmtversion}{C}{\ic \pp{225}\c 321}
+\indexentry {0}{folio}{C}{\ic \pp{143}\c 321}
+\indexentry {0}{font}{C}{\ic 129\c 213\c \pp{221}\c 293\c 321}
+\indexentry {0}{font files}{N}{\ic 8}
+\indexentry {0}{fontdimen}{C}{\ic \pp{222}\c 293\c 321}
+\indexentry {0}{fontname}{C}{\ic \pp{227}\c 321}
+\indexentry {0}{fonts}{N}{\ic 26\c \pp{64--65}\c 102\c 209}
+\indexentry {1}{composite}{N}{\ic 276--277}
+\indexentry {1}{families of}{N}{\ic 62}
+\indexentry {1}{hyphenation characters for}{N}{\ic 129}
+\indexentry {1}{names of}{N}{\ic 227}
+\indexentry {1}{naming and modifying}{N}{\ic 221--224}
+\indexentry {1}{parameters of}{N}{\ic 222}
+\indexentry {0}{footers}{N}{\ic \pp{65}\c 86}
+\indexentry {1}{marks used in}{N}{\ic 79}
+\indexentry {1}{multiple-line}{N}{\ic 274--275}
+\indexentry {0}{footline}{C}{\ic 65\c 86\c \pp{143}\c 274\c 322}
+\indexentry {0}{footnote}{C}{\ic 70\c \pp{145}\c 147\c 322}
+\indexentry {0}{footnotemarkseparation}{C}{\ic \pp{309}}
+\indexentry {0}{footnotes}{N}{\ic 22\c 309}
+\indexentry {1}{using \b\tt\\textindent\e\ with}{N}{\ic 112}
+\indexentry {0}{for}{C}{\ic 293}
+\indexentry {0}{for loop}{N}{\ic 293}
+\indexentry {0}{forall}{C}{\ic \pp{188}\c 322}
+\indexentry {0}{forbidden control sequence}{N}{\ic 279}
+\indexentry {0}{foreign languages}{N}{\ic 18\seealso{European languages}}
+\indexentry {0}{form feed}{N}{\ic 53}
+\indexentry {0}{format file}{N}{\ic \pp{65}\c 263}
+\indexentry {0}{frac}{C}{\ic \pp{294}}
+\indexentry {0}{fractions}{N}{\ic 200--202}
+\indexentry {1}{produced by \b\tt\\over\e}{N}{\ic 200}
+\indexentry {1}{slashed form}{N}{\ic 294}
+\indexentry {0}{frenchspacing}{C}{\ic 14\c \pp{106}\c 322}
+\indexentry {0}{frown}{C}{\ic \pp{190}\c 322}
+\indexentry {0}{functions, names of}{N}{\ic 193--194}
+\indexentry {0}{futurelet}{C}{\ic \pp{232}\c 322}
+\indexgroup G
+\indexentry {0}{gamma}{C}{\ic \pp{187}\c 322}
+\indexentry {0}{Gamma}{C}{\ic \pp{187}\c 322}
+\indexentry {0}{gcd}{C}{\ic \pp{193}\c 322}
+\indexentry {0}{gdef}{C}{\ic 66\c 228\c \pp{231}\c 322}
+\indexentry {0}{ge}{C}{\ic \pp{190}\c 191\c 322}
+\indexentry {0}{generaldisplay}{C}{\ic 296}
+\indexentry {0}{geq}{C}{\ic \pp{190}\c 191\c 322}
+\indexentry {0}{gets}{C}{\ic \pp{192}\c 322}
+\indexentry {0}{\gffile}{N}{\ic 8\c 65}
+\indexentry {0}{gg}{C}{\ic \pp{190}\c 322}
+\indexentry {0}{global}{N}{\ic \pp{65--66}}
+\indexentry {0}{global}{C}{\ic 65\c \pp{228}\c 229\c 322}
+\indexentry {0}{globaldefs}{C}{\ic 65\c \pp{228}\c 281\c 322}
+\indexentry {0}{glue}{N}{\ic 17\c \pp{66--68}\c 215}
+\indexentry {1}{creating space with}{N}{\ic 91}
+\indexentry {1}{infinitely shrinkable}{N}{\ic 68}
+\indexentry {1}{infinitely stretchable}{N}{\ic 157--158}
+\indexentry {1}{last glue item in a list}{N}{\ic 171}
+\indexentry {1}{mathematical}{N}{\ic 82}
+\indexentry {1}{negative}{N}{\ic 159}
+\indexentry {0}{glue registers}{N}{\ic 89}
+\indexentry {0}{\<glue>}{N}{\ic 4}
+\indexentry {0}{gobble}{C}{\ic \pp{291}}
+\indexentry {0}{gobblethree}{C}{\ic \pp{291}}
+\indexentry {0}{gobbletwo}{C}{\ic \pp{291}}
+\indexentry {0}{goodbreak}{C}{\ic \pp{137}\c 322}
+\indexentry {0}{grave}{C}{\ic \pp{199}\c 322}
+\indexentry {0}{grave accent}{N}{\ic 100\c 199}
+\indexentry {0}{Greek letters}{N}{\ic 187--188\c 210}
+\indexentry {0}{groups}{N}{\ic 15--16\c 53\c \pp{68--69}\c 227--229}
+\indexentry {0}{gullet}{N}{\ic 46\c \pp{47}\c 53}
+\indexgroup H
+\indexentry {0}{\char `\H}{C}{\ic \pp{100}\c 322}
+\indexentry {0}{halign}{C}{\ic 45--46\c \pp{178}\c 180\c 322}
+\indexentry {1}{grouping for}{N}{\ic 16}
+\indexentry {1}{illegal in math mode}{N}{\ic 297}
+\indexentry {1}{inherently vertical}{N}{\ic 69}
+\indexentry {0}{hang}{C}{\ic \pp{117}\c 272\c 322}
+\indexentry {0}{hangafter}{C}{\ic \pp{117}\c 118\c 322}
+\indexentry {0}{hangindent}{C}{\ic 87\c \pp{117}\c 118\c 272\c 322}
+\indexentry {0}{hanging indentation}{N}{\ic 117}
+\indexentry {0}{hat}{C}{\ic \pp{199}\c 322}
+\indexentry {0}{hat accent}{N}{\ic 199}
+\indexentry {0}{hbadness}{C}{\ic 123\c \pp{170}\c 322}
+\indexentry {0}{hbar}{C}{\ic \pp{188}\c 322}
+\indexentry {0}{hbox}{N}{}
+\indexentry {1}{constructing with \b\tt\\hbox\e}{N}{\ic 161}
+\indexentry {0}{hbox}{C}{\ic 51\c \pp{160}\c 268\c 322}
+\indexentry {1}{overfull box from}{N}{\ic 269--270}
+\indexentry {0}{hboxes}{N}{\ic 51\c \pp{69}}
+\indexentry {1}{constructing with \b\tt\\hbox\e}{N}{\ic 160}
+\indexentry {1}{controlling line breaks}{N}{\ic 74}
+\indexentry {1}{horizontal mode for}{N}{\ic 69}
+\indexentry {1}{testing for}{N}{\ic 238}
+\indexentry {0}{headers}{N}{\ic \pp{69}\c 86}
+\indexentry {1}{marks used in}{N}{\ic 79}
+\indexentry {1}{multiple-line}{N}{\ic 274--275}
+\indexentry {0}{headline}{C}{\ic 69\c 86\c \pp{143}\c 274\c 322}
+\indexentry {0}{heartsuit}{C}{\ic \pp{188}\c 322}
+\indexentry {0}{height}{N}{\ic 51\c \pp{69}\c 167}
+\indexentry {0}{help message}{N}{\ic 262}
+\indexentry {0}{help text}{N}{\ic 262}
+\indexentry {0}{hexadecimal digit}{N}{\ic 55}
+\indexentry {0}{hexadecimal numbers}{N}{\ic 82}
+\indexentry {0}{hfil}{C}{\ic \pp{157}\c 159\c 160\c 270\c 322}
+\indexentry {0}{hfill}{C}{\ic \pp{157}\c 322}
+\indexentry {0}{hfilneg}{C}{\ic \pp{159}\c 322}
+\indexentry {0}{hfuzz}{C}{\ic 123\c \pp{171}\c 269\c 322}
+\indexentry {0}{hglue}{C}{\ic \pp{156}\c 157\c 323}
+\indexentry {0}{hidewidth}{C}{\ic \pp{184}\c 323}
+\indexentry {0}{hoffset}{C}{\ic 79\c 86\c \pp{140}\c 323}
+\indexentry {0}{holdinginserts}{C}{\ic 18\c \pp{149}\c 323}
+\indexentry {0}{hom}{C}{\ic \pp{193}\c 323}
+\indexentry {0}{hookleftarrow}{C}{\ic \pp{192}\c 323}
+\indexentry {0}{hookrightarrow}{C}{\ic \pp{192}\c 323}
+\indexentry {0}{horizontal braces}{N}{\ic 211}
+\indexentry {0}{horizontal glue}{N}{\ic 155\c 156}
+\indexentry {0}{horizontal lists}{N}{\ic 51\c 66\c \pp{69}}
+\indexentry {1}{can't contain vertical commands}{N}{\ic 69}
+\indexentry {1}{hboxes formed from}{N}{\ic 69}
+\indexentry {1}{penalties in}{N}{\ic 88}
+\indexentry {1}{rule in}{N}{\ic 90}
+\indexentry {0}{horizontal mode}{N}{\ic \pp{69--70}\c 81}
+\indexentry {1}{rules in}{N}{\ic 173}
+\indexentry {1}{testing for}{N}{\ic 238}
+\indexentry {0}{horizontal rules}{N}{\ic 90--91\c 172--173}
+\indexentry {0}{horizontal skip}{N}{\ic 155}
+\indexentry {0}{horizontal space}{N}{\ic 153--154\c 155--159}
+\indexentry {0}{horizontal tab}{N}{\ic 53}
+\indexentry {0}{hphantom}{C}{\ic \pp{169}\c 323}
+\indexentry {0}{hrule}{C}{\ic 90--91\c \pp{172}\c 273\c 323}
+\indexentry {1}{inherently vertical}{N}{\ic 69}
+\indexentry {0}{hrulefill}{C}{\ic \pp{175}\c 323}
+\indexentry {0}{hsize}{C}{\ic 79\c 86\c \pp{114}\c \pp{140}\c 323}
+\indexentry {1}{set by {\tt\\magnification}}{N}{\ic 223}
+\indexentry {0}{hskip}{C}{\ic 66\c \pp{155}\c 323}
+\indexentry {0}{hss}{C}{\ic \pp{158}\c 269\c 323}
+\indexentry {0}{ht}{C}{\ic \pp{167}\c 323}
+\indexentry {0}{Hungarian umlaut accent}{N}{\ic 100}
+\indexentry {0}{hyphenation}{N}{\ic 32\c \pp{70}\c 126--129\c 139}
+\indexentry {1}{German}{N}{\ic 127}
+\indexentry {1}{penalties for}{N}{\ic 125--126}
+\indexentry {0}{hyphenation}{C}{\ic 70\c \pp{127}\c 323}
+\indexentry {0}{hyphenation rules}{N}{\ic 128}
+\indexentry {0}{hyphenchar}{C}{\ic \pp{129}\c 234\c 323}
+\indexentry {0}{hyphenpenalty}{C}{\ic \pp{125}\c 139\c 323}
+\indexentry {0}{hypotheses}{N}{\ic 131}
+\indexgroup I
+\indexentry {0}{\char `\i}{C}{\ic \pp{100}\c 323}
+\indexentry {0}{ialign}{C}{\ic \pp{180}\c 323}
+\indexentry {0}{if}{C}{\ic \pp{235}\c 323}
+\indexentry {0}{ifcase}{C}{\ic \pp{239}\c 323}
+\indexentry {0}{ifcat}{C}{\ic \pp{235}\c 323}
+\indexentry {0}{ifdim}{C}{\ic \pp{237}\c 323}
+\indexentry {0}{ifempty}{C}{\ic \pp{293}}
+\indexentry {0}{ifeof}{C}{\ic \pp{239}\c 323}
+\indexentry {0}{ifeqno}{C}{\ic \pp{295}}
+\indexentry {0}{iff}{C}{\ic \pp{192}\c 323}
+\indexentry {0}{iffalse}{C}{\ic \pp{239}\c 323}
+\indexentry {0}{ifhbox}{C}{\ic \pp{238}\c 323}
+\indexentry {0}{ifhmode}{C}{\ic \pp{238}\c 323}
+\indexentry {0}{ifinner}{C}{\ic \pp{238}\c 323}
+\indexentry {0}{ifleqno}{C}{\ic \pp{295}}
+\indexentry {0}{ifmmode}{C}{\ic \pp{238}\c 323}
+\indexentry {0}{ifnum}{C}{\ic \pp{237}\c 323}
+\indexentry {0}{ifodd}{C}{\ic \pp{237}\c 324}
+\indexentry {0}{iftrue}{C}{\ic \pp{239}\c 324}
+\indexentry {0}{ifvbox}{C}{\ic \pp{238}\c 324}
+\indexentry {0}{ifvmode}{C}{\ic \pp{238}\c 324}
+\indexentry {0}{ifvoid}{C}{\ic 147\c \pp{238}\c 324}
+\indexentry {0}{ifx}{C}{\ic \pp{236}\c 324}
+\indexentry {0}{ignored characters}{N}{\ic 53}
+\indexentry {0}{ignorespaces}{C}{\ic \pp{252}\c 324}
+\indexentry {0}{Im}{C}{\ic \pp{188}\c 324}
+\indexentry {0}{imath}{C}{\ic 100\c \pp{188}\c 324}
+\indexentry {0}{immediate}{C}{\ic 63\c 95\c 249\c \pp{250}\c 324}
+\indexentry {0}{in}{C}{\ic \pp{190}\c 324}
+\indexentry {0}{inch}{N}{\ic 60}
+\indexentry {0}{incomplete conditional}{N}{\ic 279}
+\indexentry {0}{indent}{C}{\ic 87\c \pp{111}\c 324}
+\indexentry {0}{indentation}{N}{\ic 24\c 111--119}
+\indexentry {0}{inf}{C}{\ic \pp{193}\c 324}
+\indexentry {0}{infty}{C}{\ic \pp{188}\c 324}
+\indexentry {0}{initex}{T}{\ic 65\c 263}
+\indexentry {0}{input}{C}{\ic 7\c 46\c 62\c \pp{247}\c 324}
+\indexentry {0}{input characters}{N}{\ic 280}
+\indexentry {0}{input files}{N}{\ic 9\c 46\c 247--248}
+\indexentry {1}{embedded}{N}{\ic 9}
+\indexentry {0}{input lines}{N}{\ic 252}
+\indexentry {0}{input streams}{N}{\ic \pp{70}}
+\indexentry {1}{opening}{N}{\ic 248}
+\indexentry {1}{reading with \b\tt\\read\e}{N}{\ic 62\c 248}
+\indexentry {1}{reserved by \b\tt\\newread\e}{N}{\ic 244}
+\indexentry {0}{input, preparing}{N}{\ic 10}
+\indexentry {0}{inputlineno}{C}{\ic \pp{247}\c 324}
+\indexentry {0}{insert}{C}{\ic 70\c \pp{147}\c 324}
+\indexentry {0}{<inserted text>}{T}{\ic 286}
+\indexentry {0}{insertions}{N}{\ic \pp{70}}
+\indexentry {1}{commands for}{N}{\ic 146--148}
+\indexentry {1}{forced out by \b\tt\\supereject\e}{N}{\ic 137}
+\indexentry {1}{numbers reserved by \b\tt\\newinsert\e}{N}{\ic 244}
+\indexentry {1}{penalties for}{N}{\ic 139}
+\indexentry {0}{insertpenalties}{C}{\ic \pp{139}\c 324}
+\indexentry {0}{int}{C}{\ic \pp{194}\c 195\c 196\c 324}
+\indexentry {1}{limits after}{N}{\ic 195}
+\indexentry {0}{interline glue}{N}{\ic 52\c \pp{70}\c 133--134}
+\indexentry {0}{interlinepenalty}{C}{\ic \pp{138}\c 324}
+\indexentry {0}{internal mode}{N}{}
+\indexentry {1}{testing for}{N}{\ic 238}
+\indexentry {0}{internal vertical mode}{N}{\ic 81\c 94}
+\indexentry {0}{interword spacing}{N}{\ic 50\c 106\c 107}
+\indexentry {0}{intestines}{N}{\ic 16\c 46\c \pp{47}\seealso{\anatomy}}
+\indexentry {0}{invalid character}{N}{\ic 53\c 54}
+\indexentry {0}{iota}{C}{\ic \pp{187}\c 324}
+\indexentry {0}{it}{C}{\ic \pp{103}\c 324}
+\indexentry {0}{italic correction}{N}{\ic 106}
+\indexentry {0}{item}{C}{\ic \pp{130}\c 324}
+\indexentry {0}{itemitem}{C}{\ic \pp{130}\c 324}
+\indexentry {0}{itemized lists}{N}{\ic 32\c 130\c 298--300}
+\indexentry {0}{items}{N}{\ic \pp{71}}
+\indexentry {0}{itfam}{C}{\ic \pp{210}\c 324}
+\indexgroup J
+\indexentry {0}{\char `\j}{C}{\ic \pp{100}\c 324}
+\indexentry {0}{jmath}{C}{\ic 100\c \pp{188}\c 324}
+\indexentry {0}{jobname}{C}{\ic \pp{225}\c 324}
+\indexentry {0}{jot}{C}{\ic \pp{215}\c 324}
+\indexentry {0}{justification}{N}{\ic \pp{71}\c 108--109\c 116}
+\indexgroup K
+\indexentry {0}{kappa}{C}{\ic \pp{187}\c 324}
+\indexentry {0}{ker}{C}{\ic \pp{193}\c 324}
+\indexentry {0}{kern}{C}{\ic \pp{157}\c 324}
+\indexentry {0}{kerns}{N}{\ic \pp{71--72}\c 157}
+\indexentry {1}{as list items}{N}{\ic 51}
+\indexentry {1}{creating space with}{N}{\ic 91}
+\indexentry {1}{in math formulas}{N}{\ic 215}
+\indexentry {1}{last kern in a list}{N}{\ic 171}
+\indexentry {0}{Knuth, Donald E.}{N}{\ic 18\c 294}
+\indexgroup L
+\indexentry {0}{\char `\l}{C}{\ic \pp{97}\c 324}
+\indexentry {0}{\char `\L}{C}{\ic \pp{97}\c 324}
+\indexentry {0}{lambda}{C}{\ic \pp{187}\c 324}
+\indexentry {0}{Lambda}{C}{\ic \pp{187}\c 324}
+\indexentry {0}{Lamport, Leslie}{N}{\ic 18}
+\indexentry {0}{land}{C}{\ic \pp{189}\c 325}
+\indexentry {0}{langle}{C}{\ic 59\c \pp{191}\c 325}
+\indexentry {0}{language}{C}{\ic 18\c 95\c \pp{128}\c 325}
+\indexentry {0}{lastbox}{C}{\ic \pp{171}\c 172\c 325}
+\indexentry {0}{lastkern}{C}{\ic \pp{171}\c 234\c 325}
+\indexentry {0}{lastpenalty}{C}{\ic \pp{171}\c 234\c 325}
+\indexentry {0}{lastskip}{C}{\ic \pp{171}\c 234\c 325}
+\indexentry {0}{\LaTeX}{N}{\ic \r8\c 18\c 225}
+\indexentry {0}{LaTeX}{C}{\ic \pp{294}}
+\indexentry {0}{lbrace}{C}{\ic 59\c \pp{191}\c 325}
+\indexentry {0}{lbrack}{C}{\ic 59\c \pp{98}\c \pp{191}\c 325}
+\indexentry {0}{lccode}{C}{\ic \pp{103}\c 325}
+\indexentry {0}{lceil}{C}{\ic 59\c \pp{191}\c 325}
+\indexentry {0}{ldotp}{C}{\ic \pp{196}\c 325}
+\indexentry {0}{ldots}{C}{\ic \pp{203}\c 325}
+\indexentry {0}{le}{C}{\ic \pp{190}\c 191\c 325}
+\indexentry {0}{leaders}{N}{\ic \pp{72--73}\c 174--176}
+\indexentry {0}{leaders}{C}{\ic 72--73\c \pp{174}\c 325}
+\indexentry {0}{left}{C}{\ic 58\c \pp{204}\c 325}
+\indexentry {0}{leftarrow}{C}{\ic \pp{192}\c 325}
+\indexentry {0}{Leftarrow}{C}{\ic \pp{192}\c 325}
+\indexentry {0}{leftarrowfill}{C}{\ic \pp{175}\c 325}
+\indexentry {0}{leftdisplays}{C}{\ic \pp{295}\c \pp{296}\c \pp{297}}
+\indexentry {0}{leftharpoondown}{C}{\ic \pp{192}\c 325}
+\indexentry {0}{leftharpoonup}{C}{\ic \pp{192}\c 325}
+\indexentry {0}{lefthyphenmin}{C}{\ic 18\c \pp{128}\c 325}
+\indexentry {0}{leftline}{C}{\ic 68\c \pp{108}\c 325}
+\indexentry {0}{leftrightarrow}{C}{\ic \pp{192}\c 325}
+\indexentry {0}{Leftrightarrow}{C}{\ic \pp{192}\c 325}
+\indexentry {0}{leftskip}{C}{\ic 71\c \pp{115}\c 272\c 325}
+\indexentry {0}{lemmas}{N}{\ic 32\c 131}
+\indexentry {0}{leq}{C}{\ic \pp{190}\c 191\c 325}
+\indexentry {0}{leqalignno}{C}{\ic \pp{208}\c 297\c 325}
+\indexentry {0}{leqno}{C}{\ic \pp{207}\c 325}
+\indexentry {0}{let}{C}{\ic 57\c \pp{232}\c 325}
+\indexentry {0}{letreturn}{C}{\ic \pp{291}\c 293}
+\indexentry {0}{letter}{N}{\ic 53\c 56}
+\indexentry {0}{letter}{C}{\ic \pp{291}}
+\indexentry {0}{lfloor}{C}{\ic 59\c \pp{191}\c 325}
+\indexentry {0}{lg}{C}{\ic \pp{193}\c 325}
+\indexentry {0}{lgroup}{C}{\ic \pp{204}\c 326}
+\indexentry {0}{li}{C}{\ic \pp{298}}
+\indexentry {0}{ligatures}{N}{\ic \pp{73--74}\c 97--98\c 101}
+\indexentry {0}{lim}{C}{\ic \pp{193}\c 197\c 326}
+\indexentry {0}{liminf}{C}{\ic \pp{193}\c 326}
+\indexentry {0}{limits}{N}{\ic 194}
+\indexentry {0}{limits}{C}{\ic \pp{195}\c 326}
+\indexentry {0}{limsup}{C}{\ic \pp{193}\c 326}
+\indexentry {0}{line}{C}{\ic \pp{109}\c 326}
+\indexentry {0}{line breaking}{N}{\ic 17\c 47\c 272}
+\indexentry {1}{tracing}{N}{\ic 259}
+\indexentry {0}{line breaks}{N}{\ic \pp{74--75}\c 120--129}
+\indexentry {1}{and paragraph shape}{N}{\ic 114--120}
+\indexentry {1}{bad}{N}{\ic 268}
+\indexentry {1}{badness for}{N}{\ic 50}
+\indexentry {1}{deleting}{N}{\ic 13}
+\indexentry {1}{demerits for}{N}{\ic 60}
+\indexentry {1}{encouraging or discouraging}{N}{\ic 120--122}
+\indexentry {1}{in math formulas}{N}{\ic 121}
+\indexentry {1}{kerns at}{N}{\ic 157}
+\indexentry {1}{parameters affecting}{N}{\ic 123--126}
+\indexentry {0}{line length}{N}{\ic 114}
+\indexentry {0}{line spacing}{N}{\ic 133}
+\indexentry {0}{linepenalty}{C}{\ic \pp{125}\c 326}
+\indexentry {0}{lineskip}{C}{\ic 70\c \pp{133--134}\c 326}
+\indexentry {0}{lineskiplimit}{C}{\ic 70\c \pp{133--134}\c 326}
+\indexentry {0}{listcompact}{C}{\ic \pp{298}}
+\indexentry {0}{listing}{C}{\ic \pp{300}}
+\indexentry {0}{lists}{N}{\ic \pp{75}}
+\indexentry {0}{ll}{C}{\ic \pp{190}\c 326}
+\indexentry {0}{llap}{C}{\ic \pp{109}\c 326}
+\indexentry {0}{lmoustache}{C}{\ic \pp{212}\c 326}
+\indexentry {0}{ln}{C}{\ic \pp{193}\c 326}
+\indexentry {0}{lnot}{C}{\ic \pp{188}\c 189\c 326}
+\indexentry {0}{local information}{N}{\ic \pp{7}\c 9\c 128}
+\indexentry {0}{log}{C}{\ic \pp{193}\c 326}
+\indexentry {0}{log file}{N}{\ic \pp{75}\c 313}
+\indexentry {1}{as a result file}{N}{\ic 62}
+\indexentry {1}{error messages}{N}{\ic 283}
+\indexentry {1}{tracing statistics in}{N}{\ic 260}
+\indexentry {1}{written by \b\tt\\wlog\e}{N}{\ic 261}
+\indexentry {1}{written by \b\tt\\write\e}{N}{\ic 250}
+\indexentry {0}{loggingall}{C}{\ic \pp{292}}
+\indexentry {0}{logos}{N}{\ic 64}
+\indexentry {0}{long}{C}{\ic \pp{231}\c 236\c 326}
+\indexentry {0}{longleftarrow}{C}{\ic \pp{192}\c 326}
+\indexentry {0}{Longleftarrow}{C}{\ic \pp{192}\c 326}
+\indexentry {0}{longleftrightarrow}{C}{\ic \pp{192}\c 326}
+\indexentry {0}{Longleftrightarrow}{C}{\ic \pp{192}\c 326}
+\indexentry {0}{longmapsto}{C}{\ic \pp{192}\c 326}
+\indexentry {0}{longrightarrow}{C}{\ic \pp{192}\c 326}
+\indexentry {0}{Longrightarrow}{C}{\ic \pp{192}\c 326}
+\indexentry {0}{loop}{C}{\ic \pp{240}\c 326}
+\indexentry {0}{loops}{N}{\ic 240--241}
+\indexentry {0}{looseness}{C}{\ic 87\c \pp{124}\c 267\c 326}
+\indexentry {0}{lor}{C}{\ic \pp{189}\c 326}
+\indexentry {0}{lower}{C}{\ic 52\c \pp{166}\c 326}
+\indexentry {0}{lower limits}{N}{\ic 197}
+\indexentry {0}{lowercase}{N}{}
+\indexentry {1}{conversion to}{N}{\ic 103--104}
+\indexentry {0}{lowercase}{C}{\ic \pp{104}\c 326}
+\indexentry {0}{lq}{C}{\ic \pp{98}\c 326}
+\indexgroup M
+\indexentry {0}{macron accent}{N}{\ic 100}
+\indexentry {0}{macros}{N}{\ic \pp{75--78}\c 230--241}
+\indexentry {1}{arguments of}{N}{\ic 48\c 280}
+\indexentry {1}{controlling expansion of}{N}{\ic 233--235}
+\indexentry {1}{defining}{N}{\ic 230--232}
+\indexentry {1}{expanded in \TeX's stomach}{N}{\ic 47}
+\indexentry {1}{global}{N}{\ic 66}
+\indexentry {1}{in auxiliary files}{N}{\ic 7}
+\indexentry {1}{making readable}{N}{\ic 281}
+\indexentry {1}{named by active characters}{N}{\ic 43}
+\indexentry {1}{outer}{N}{\ic 83\c 279}
+\indexentry {1}{parameters of}{N}{\ic 48\c 53\c 75--77\c 280}
+\indexentry {1}{tracing}{N}{\ic 258}
+\indexentry {1}{using \b\tt\\begingroup\e\ and \b\tt\\endgroup\e\ in}{N}{\ic 227}
+\indexentry {1}{using \b\tt\\bgroup\e\ and \b\tt\\egroup\e\ in}{N}{\ic 228}
+\indexentry {0}{mag}{C}{\ic 61\c 78\c \pp{223}\c 326}
+\indexentry {0}{magnification}{N}{\ic 8\c 61\c \pp{78}}
+\indexentry {0}{magnification}{C}{\ic \pp{223}\c 326}
+\indexentry {0}{magstep}{C}{\ic 78\c \pp{223}\c 326}
+\indexentry {0}{magstephalf}{C}{\ic 78\c 223\c \pp{224}\c 327}
+\indexentry {0}{main vertical list}{N}{\ic 84}
+\indexentry {0}{makeactive}{C}{\ic \pp{291}}
+\indexentry {0}{makeblankbox}{C}{\ic \pp{294}}
+\indexentry {0}{makecolumns}{C}{\ic \pp{307}}
+\indexentry {0}{makefootline}{C}{\ic 274}
+\indexentry {0}{makeheadline}{C}{\ic 274}
+\indexentry {0}{mapsto}{C}{\ic \pp{192}\c 327}
+\indexentry {0}{margins}{N}{\ic 24\c \pp{79}\c 86}
+\indexentry {0}{mark}{C}{\ic 79\c 80\c \pp{144}\c 327}
+\indexentry {0}{mark text}{N}{\ic 79\c 144}
+\indexentry {0}{marks}{N}{\ic \pp{79--80}\c 144--145}
+\indexentry {1}{for split lists}{N}{\ic 144}
+\indexentry {1}{with headers or footers}{N}{\ic 86}
+\indexentry {0}{math}{N}{\ic 16\c 38\c 40\c 187--219}
+\indexentry {1}{accents}{N}{\ic 199}
+\indexentry {0}{math characters}{N}{\ic 232}
+\indexentry {1}{described by mathcodes}{N}{\ic 80}
+\indexentry {0}{math display}{N}{\ic 138\c 271}
+\indexentry {0}{math extensions}{N}{\ic 62}
+\indexentry {0}{math mode}{N}{\ic \pp{80}\c 81}
+\indexentry {1}{testing for}{N}{\ic 238}
+\indexentry {0}{math shift}{N}{\ic 53}
+\indexentry {0}{math symbols}{N}{\ic 64\c 198}
+\indexentry {0}{mathaccent}{C}{\ic \pp{199}\c 327}
+\indexentry {0}{mathbin}{C}{\ic \pp{218}\c 327}
+\indexentry {0}{mathchar}{C}{\ic \pp{99}\c 327}
+\indexentry {0}{mathchardef}{C}{\ic \pp{232}\c 234\c 327}
+\indexentry {0}{mathchoice}{C}{\ic \pp{198}\c 327}
+\indexentry {0}{mathclose}{C}{\ic \pp{218}\c 327}
+\indexentry {0}{mathcode}{C}{\ic 81\c 205\c \pp{251}\c 252\c 327}
+\indexentry {0}{mathcodes}{N}{\ic \pp{80--81}\c 232}
+\indexentry {1}{class encoded in}{N}{\ic 56}
+\indexentry {0}{mathematical units}{N}{\ic \pp{81}\c 82}
+\indexentry {0}{mathinner}{C}{\ic \pp{218}\c 327}
+\indexentry {0}{mathop}{C}{\ic \pp{218}\c 327}
+\indexentry {0}{mathopen}{C}{\ic \pp{218}\c 327}
+\indexentry {0}{mathord}{C}{\ic \pp{218}\c 327}
+\indexentry {0}{mathpalette}{C}{\ic \pp{198}\c 327}
+\indexentry {0}{mathpunct}{C}{\ic \pp{218}\c 327}
+\indexentry {0}{mathrel}{C}{\ic \pp{218}\c 327}
+\indexentry {0}{mathstrut}{C}{\ic 92\c \pp{168}\c 327}
+\indexentry {0}{mathsurround}{C}{\ic \pp{217}\c 327}
+\indexentry {0}{matrix}{N}{\ic 205}
+\indexentry {0}{matrix}{C}{\ic \pp{205}\c 327}
+\indexentry {0}{max}{C}{\ic \pp{193}\c 327}
+\indexentry {0}{maxdeadcycles}{C}{\ic \pp{148}\c 327}
+\indexentry {0}{maxdepth}{C}{\ic \pp{141}\c 150\c 327}
+\indexentry {0}{maxdimen}{C}{\ic \pp{244}\c 327}
+\indexentry {0}{meaning}{C}{\ic \pp{226}\c 327}
+\indexentry {0}{medbreak}{C}{\ic \pp{137}\c 327}
+\indexentry {0}{medmuskip}{C}{\ic \pp{214}\c 327}
+\indexentry {0}{medskip}{C}{\ic 137\c \pp{154}\c 327}
+\indexentry {0}{medskipamount}{C}{\ic \pp{155}\c 327}
+\indexentry {0}{message}{C}{\ic \pp{261}\c 327}
+\indexentry {1}{expanded by {\tt\\edef} rules}{N}{\ic 231}
+\indexentry {0}{messages, sending}{N}{\ic 261--262}
+\indexentry {0}{\Metafont}{N}{\ic \r7\c 34}
+\indexentry {0}{metrics file}{N}{\ic 8\c 59\c 221}
+\indexentry {1}{default hyphen in}{N}{\ic 129}
+\indexentry {1}{default skew character in}{N}{\ic 213}
+\indexentry {1}{italic correction in}{N}{\ic 106}
+\indexentry {0}{MF}{C}{\ic \pp{294}}
+\indexentry {0}{mid}{C}{\ic \pp{190}\c 327}
+\indexentry {0}{midinsert}{C}{\ic 70\c \pp{146}\c 147\c 328}
+\indexentry {0}{millimeter}{N}{\ic 60}
+\indexentry {0}{min}{C}{\ic \pp{193}\c 328}
+\indexentry {0}{mit}{C}{\ic \pp{209}\c 328}
+\indexentry {0}{mkern}{C}{\ic \pp{215}\c 328}
+\indexentry {0}{models}{C}{\ic \pp{190}\c 328}
+\indexentry {0}{modes}{N}{\ic 17\c \pp{81--82}}
+\indexentry {0}{modulus}{N}{\ic 193\c 194}
+\indexentry {0}{month}{C}{\ic \pp{225}\c 297\c 328}
+\indexentry {0}{monthname}{C}{\ic \pp{297}}
+\indexentry {0}{mouth}{N}{\ic 16\c \pp{46}\seealso{\anatomy}}
+\indexentry {0}{moveleft}{C}{\ic 52\c 161\c \pp{166}\c 328}
+\indexentry {0}{moveright}{C}{\ic 52\c 161\c \pp{166}\c 328}
+\indexentry {0}{mp}{C}{\ic \pp{189}\c 328}
+\indexentry {0}{mskip}{C}{\ic 82\c \pp{215}\c 328}
+\indexentry {0}{mu}{T}{\ic 82\c 243}
+\indexentry {0}{mu}{C}{\ic \pp{187}\c 328}
+\indexentry {0}{muglue}{N}{\ic \pp{82}}
+\indexentry {0}{muglue registers}{N}{\ic 89}
+\indexentry {0}{multiply}{C}{\ic \pp{246}\c 328}
+\indexentry {0}{multispan}{C}{\ic \pp{182}\c 328}
+\indexentry {0}{mushrooms}{N}{\ic 36}
+\indexentry {0}{music symbols}{N}{\ic 26\c 188}
+\indexentry {0}{muskip}{C}{\ic \pp{242}\c 246\c 328}
+\indexentry {0}{muskip registers}{N}{\ic 243}
+\indexentry {1}{reserved by \b\tt\\newmuskip\e}{N}{\ic 244}
+\indexentry {0}{muskipdef}{C}{\ic \pp{245}\c 328}
+\indexgroup N
+\indexentry {0}{nabla}{C}{\ic \pp{188}\c 328}
+\indexentry {0}{narrower}{C}{\ic \pp{114}\c 272\c 328}
+\indexentry {0}{natural}{C}{\ic \pp{188}\c 328}
+\indexentry {0}{ne}{C}{\ic \pp{190}\c 328}
+\indexentry {0}{nearrow}{C}{\ic \pp{192}\c 328}
+\indexentry {0}{neg}{C}{\ic \pp{188}\c 189\c 328}
+\indexentry {0}{negthinspace}{C}{\ic \pp{153}\c 328}
+\indexentry {0}{neq}{C}{\ic \pp{190}\c 328}
+\indexentry {0}{newbox}{C}{\ic 53\c 89\c \pp{244}\c 328}
+\indexentry {0}{newcount}{C}{\ic 89\c 242\c \pp{244}\c 328}
+\indexentry {0}{newdimen}{C}{\ic 89\c \pp{244}\c 328}
+\indexentry {0}{newfam}{C}{\ic 62\c \pp{244}\c 328}
+\indexentry {0}{newhelp}{C}{\ic \pp{262}\c 305\c 328}
+\indexentry {0}{newif}{C}{\ic \pp{240}\c 328}
+\indexentry {0}{newinsert}{C}{\ic 147\c \pp{244}\c 328}
+\indexentry {0}{newlanguage}{C}{\ic 18\c \pp{244}\c 328}
+\indexentry {0}{newlinechar}{C}{\ic \pp{250}\c 261\c 262\c 328}
+\indexentry {0}{newmuskip}{C}{\ic 89\c \pp{244}\c 328}
+\indexentry {0}{newread}{C}{\ic 63\c \pp{244}\c 328}
+\indexentry {0}{newskip}{C}{\ic 89\c \pp{244}\c 329}
+\indexentry {0}{\newTeX}{N}{\ic 18\c 156}
+\indexentry {0}{newtoks}{C}{\ic 89\c \pp{244}\c 329}
+\indexentry {0}{newwrite}{C}{\ic 63\c \pp{244}\c 329}
+\indexentry {0}{ni}{C}{\ic \pp{190}\c 329}
+\indexentry {0}{noalign}{C}{\ic 46\c 180\c \pp{183}\c 329}
+\indexentry {0}{noboundary}{C}{\ic 18\c 73\c \pp{101}\c 329}
+\indexentry {0}{nobreak}{C}{\ic 74\c \pp{121}\c \pp{136}\c 266\c 329}
+\indexentry {0}{noexpand}{C}{\ic 231\c \pp{234}\c 329}
+\indexentry {0}{noindent}{C}{\ic 87\c \pp{112}\c 329}
+\indexentry {0}{nointerlineskip}{C}{\ic \pp{135}\c 329}
+\indexentry {0}{nolimits}{C}{\ic \pp{195}\c 329}
+\indexentry {0}{nonfrenchspacing}{C}{\ic \pp{106}\c 329}
+\indexentry {0}{nonscript}{C}{\ic \pp{215}\c 218\c 329}
+\indexentry {0}{nonstopmode}{C}{\ic \pp{253}\c 329}
+\indexentry {0}{nopagenumbers}{C}{\ic \pp{142}\c 329}
+\indexentry {0}{normalbaselines}{C}{\ic \pp{134}\c 329}
+\indexentry {0}{normalbaselineskip}{C}{\ic \pp{134}\c 329}
+\indexentry {0}{normalbottom}{C}{\ic \pp{137}\c 329}
+\indexentry {0}{normallineskip}{C}{\ic \pp{134}\c 329}
+\indexentry {0}{normallineskiplimit}{C}{\ic \pp{134}\c 329}
+\indexentry {0}{not}{C}{\ic 329}
+\indexentry {0}{notin}{C}{\ic \pp{190}\c 329}
+\indexentry {0}{nu}{C}{\ic \pp{187}\c 329}
+\indexentry {0}{null}{C}{\ic \pp{169}\c 329}
+\indexentry {0}{nulldelimiterspace}{C}{\ic 60\c 204\c \pp{217}\c 329}
+\indexentry {0}{nullfont}{C}{\ic \pp{102}\c 329}
+\indexentry {0}{number}{C}{\ic 83\c \pp{224}\c 329}
+\indexentry {0}{\<number>}{N}{\ic 4}
+\indexentry {0}{numberedfootnote}{C}{\ic \pp{309}}
+\indexentry {0}{numberedlist}{C}{\ic \pp{298}}
+\indexentry {0}{numberedmarker}{C}{\ic \pp{299}}
+\indexentry {0}{numbername}{C}{\ic \pp{295}}
+\indexentry {0}{numbers}{N}{\ic \pp{82--83}}
+\indexentry {1}{comparing}{N}{\ic 237}
+\indexentry {1}{converting to characters}{N}{\ic 224}
+\indexentry {1}{testing for odd/even}{N}{\ic 237}
+\indexentry {0}{nwarrow}{C}{\ic \pp{192}\c 329}
+\indexgroup O
+\secondprinting{\vskip.33\baselineskip}
+\indexentry {0}{\char `\o}{C}{\ic \pp{97}\c 330}
+\indexentry {0}{\char `\O}{C}{\ic \pp{97}\c 330}
+\indexentry {0}{obeylines}{C}{\ic \pp{122}\c 278\c 293\c 330}
+\indexentry {0}{obeyspaces}{C}{\ic \pp{107}\c 122\c 278\c 293\c 330}
+\indexentry {0}{obeywhitespace}{C}{\ic 107\c 278\c \pp{293}}
+\indexentry {0}{octal numbers}{N}{\ic 82}
+\indexentry {0}{odot}{C}{\ic \pp{189}\c 330}
+\indexentry {0}{oe}{C}{\ic \pp{97}\c 330}
+\indexentry {0}{OE}{C}{\ic \pp{97}\c 330}
+\indexentry {0}{offinterlineskip}{C}{\ic 92\c \pp{135}\c 167\c 330}
+\indexentry {0}{oint}{C}{\ic \pp{194}\c 330}
+\indexentry {0}{oldstyle}{C}{\ic \pp{209}\c 330}
+\indexentry {0}{omega}{C}{\ic \pp{187}\c 330}
+\indexentry {0}{Omega}{C}{\ic \pp{187}\c 330}
+\indexentry {0}{omicron}{N}{\ic 188}
+\indexentry {0}{ominus}{C}{\ic \pp{189}\c 330}
+\indexentry {0}{omit}{C}{\ic \pp{181}\c 330}
+\indexentry {0}{openin}{C}{\ic 63\c \pp{247}\c 248\c 330}
+\indexentry {0}{opening}{N}{\ic 191}
+\indexentry {0}{openout}{C}{\ic 63\c \pp{249}\c 330}
+\indexentry {1}{whatsit produced by}{N}{\ic 95}
+\indexentry {1}{with {\tt\\immediate}}{N}{\ic 250}
+\indexentry {0}{openup}{C}{\ic \pp{135}\c 183\c 330}
+\indexentry {0}{operating system}{N}{\ic 62\c 63}
+\indexentry {0}{operations}{N}{\ic 189--190}
+\indexentry {0}{operators}{N}{\ic 126}
+\indexentry {1}{large}{N}{\ic 194--196}
+\indexentry {0}{oplus}{C}{\ic \pp{189}\c 330}
+\indexentry {0}{or}{C}{\ic 330}
+\indexentry {0}{ordinary horizontal mode}{N}{\ic 69\c 81}
+\indexentry {0}{ordinary mode}{N}{\ic \pp{83}}
+\indexentry {0}{ordinary symbol}{N}{\ic 188}
+\indexentry {0}{ordinary vertical mode}{N}{\ic 81\c 94}
+\indexentry {0}{origin}{N}{\see{page origin}}
+\indexentry {0}{oslash}{C}{\ic \pp{189}\c 330}
+\indexentry {0}{other}{C}{\ic \pp{291}}
+\indexentry {0}{other characters}{N}{\ic 53\c 56}
+\indexentry {0}{otimes}{C}{\ic \pp{189}\c 330}
+\indexentry {0}{outer}{N}{\ic \pp{83}\c 232}
+\indexentry {0}{outer}{C}{\ic 83\c \pp{232}\c 236\c 279\c 330}
+\indexentry {0}{output}{C}{\ic 84\c \pp{148}\c 330}
+\indexentry {0}{output devices}{N}{\ic 8}
+\indexentry {0}{output files}{N}{\ic 249--251}
+\indexentry {0}{output routine}{N}{\ic \pp{83--84}\c 147\c 148--149}
+\indexentry {1}{default in \plainTeX}{N}{\ic 148}
+\indexentry {1}{insertions, treatment of}{N}{\ic 70}
+\indexentry {1}{meaning of \b\tt\\insertpenalties\e\ in}{N}{\ic 139}
+\indexentry {0}{output streams}{N}{\ic 63\c \pp{84}}
+\indexentry {1}{closing}{N}{\ic 249}
+\indexentry {1}{opening}{N}{\ic 249}
+\indexentry {1}{reserved by \b\tt\\newwrite\e}{N}{\ic 244}
+\indexentry {1}{writing}{N}{\ic 249}
+\indexentry {0}{<output>}{T}{\ic 288}
+\indexentry {0}{outputpenalty}{C}{\ic \pp{149}\c 330}
+\indexentry {0}{over}{C}{\ic \pp{200}\c 204\c 330}
+\indexentry {0}{overbrace}{C}{\ic \pp{202}\c 212\c 330}
+\indexentry {0}{overfull boxes}{N}{\ic 124\c 268--270}
+\indexentry {0}{overfullrule}{C}{\ic \pp{170}\c 330}
+\indexentry {0}{overlapping text}{N}{\ic 109}
+\indexentry {0}{overleftarrow}{C}{\ic \pp{202}\c 330}
+\indexentry {0}{overline}{C}{\ic \pp{202}\c 330}
+\indexentry {0}{overprinting}{N}{\ic 109}
+\indexentry {0}{overrightarrow}{C}{\ic \pp{202}\c 330}
+\indexentry {0}{overwithdelims}{C}{\ic 58\c \pp{201}\c 330}
+\indexentry {0}{owns}{C}{\ic \pp{190}\c 330}
+\indexgroup P
+\secondprinting{\vskip1.5\baselineskip}
+\indexentry {0}{\char `\P}{C}{\ic \pp{98}\c 331}
+\indexentry {0}{page breaks}{N}{\ic \pp{85--86}\c 136--140}
+\indexentry {1}{bad}{N}{\ic 265--268}
+\indexentry {1}{badness for}{N}{\ic 50}
+\indexentry {1}{encouraging or discouraging}{N}{\ic 136--138}
+\indexentry {1}{glue at}{N}{\ic 268}
+\indexentry {1}{in split lists}{N}{\ic 149}
+\indexentry {1}{inserted by \TeX's stomach}{N}{\ic 17}
+\indexentry {1}{insertions at}{N}{\ic 70}
+\indexentry {1}{kerns at}{N}{\ic 157}
+\indexentry {1}{parameters for}{N}{\ic 138--140}
+\indexentry {1}{tracing}{N}{\ic 259}
+\indexentry {0}{page builder}{N}{\ic 84\c \pp{86}}
+\indexentry {0}{page dimensions}{N}{\ic 140}
+\indexentry {0}{page footers}{N}{\see{footers}}
+\indexentry {0}{page headers}{N}{\see{headers}}
+\indexentry {0}{page layout}{N}{\ic \pp{86}}
+\indexentry {0}{page numbering}{N}{\ic 90\c 142--143}
+\indexentry {0}{page origin}{N}{\ic 140}
+\indexentry {0}{pagedepth}{C}{\ic \pp{139}\c 331}
+\indexentry {0}{pagefilllstretch}{C}{\ic \pp{140}\c 331}
+\indexentry {0}{pagefillstretch}{C}{\ic \pp{140}\c 331}
+\indexentry {0}{pagefilstretch}{C}{\ic \pp{140}\c 331}
+\indexentry {0}{pagegoal}{C}{\ic \pp{139}\c 140\c 149\c 331}
+\indexentry {0}{pageinsert}{C}{\ic 70\c \pp{146}\c 147\c 331}
+\indexentry {0}{pageno}{C}{\ic \pp{142}\c 143\c 331}
+\indexentry {0}{pages}{N}{\ic 17\c \pp{84--85}}
+\indexentry {1}{assembled in \TeX's stomach}{N}{\ic 47}
+\indexentry {0}{pageshrink}{C}{\ic \pp{140}\c 331}
+\indexentry {0}{pagestretch}{C}{\ic \pp{140}\c 331}
+\indexentry {0}{pagetotal}{C}{\ic \pp{139}\c 331}
+\indexentry {0}{Palatino fonts}{N}{\ic 34\c 64}
+\indexentry {0}{par}{C}{\ic 86\c \pp{110}\c 111\c 331}
+\indexentry {1}{ending a paragraph with}{N}{\ic 86}
+\indexentry {1}{from empty line}{N}{\ic 91\c 105}
+\indexentry {1}{in macro arguments}{N}{\ic 231}
+\indexentry {1}{when changing paragraph shape}{N}{\ic 272}
+\indexentry {0}{paragraph skip}{N}{\ic 141}
+\indexentry {0}{paragraphs}{N}{\ic \pp{86--87}}
+\indexentry {1}{ending}{N}{\ic 12\c 22}
+\indexentry {1}{glue at end of}{N}{\ic 111}
+\indexentry {1}{glue between}{N}{\ic 141}
+\indexentry {1}{indenting}{N}{\see{indentation}}
+\indexentry {1}{narrow}{N}{\ic 24\c 114}
+\indexentry {1}{shaping}{N}{\ic 110--120\c 272}
+\indexentry {1}{starting}{N}{\ic 110}
+\indexentry {0}{parallel}{C}{\ic \pp{190}\c 331}
+\indexentry {0}{parameters}{N}{\ic \pp{87--88}}
+\indexentry {1}{and arguments}{N}{\ic 48}
+\indexentry {1}{as commands}{N}{\ic 4\c 12}
+\indexentry {1}{assignments to}{N}{\ic 49}
+\indexentry {1}{delimited}{N}{\ic 77}
+\indexentry {1}{indicated by \b\tt\#\e}{N}{\ic 53}
+\indexentry {1}{like registers}{N}{\ic 89}
+\indexentry {1}{undelimited}{N}{\ic 76}
+\indexentry {1}{using \b\tt\\the\e\ with}{N}{\ic 234}
+\indexentry {0}{parentheses}{N}{\ic 58\c 204}
+\indexentry {0}{parfillskip}{C}{\ic \pp{111}\c 331}
+\indexentry {0}{parindent}{C}{\ic 4\c 87\c \pp{113}\c 331}
+\indexentry {1}{indentation for itemized lists}{N}{\ic 130}
+\indexentry {0}{parshape}{C}{\ic 87\c 117\c \pp{118}\c 331}
+\indexentry {0}{parskip}{C}{\ic 111\c 112\c 113\c \pp{141}\c 267\c 269\c 331}
+\indexentry {0}{partial}{C}{\ic \pp{188}\c 331}
+\indexentry {0}{Patashnik, Oren}{N}{\ic 19}
+\indexentry {0}{pausing}{C}{\ic \pp{253}\c 331}
+\indexentry {0}{penalties}{N}{\ic \pp{88}}
+\indexentry {1}{in horizontal lists}{N}{\ic 74}
+\indexentry {1}{in vertical lists}{N}{\ic 85}
+\indexentry {1}{last penalty in a list}{N}{\ic 171}
+\indexentry {0}{penalty}{C}{\ic \pp{121}\c \pp{136}\c 331}
+\indexentry {0}{percentchar}{C}{\ic 292}
+\indexentry {0}{period}{N}{\ic 12\c 13}
+\indexentry {0}{perp}{C}{\ic \pp{190}\c 331}
+\indexentry {0}{phantom}{C}{\ic \pp{168}\c 331}
+\indexentry {0}{phantoms}{N}{\ic 168--169}
+\indexentry {0}{phi}{C}{\ic \pp{187}\c 331}
+\indexentry {0}{Phi}{C}{\ic \pp{187}\c 331}
+\indexentry {0}{pi}{C}{\ic \pp{187}\c 331}
+\indexentry {0}{Pi}{C}{\ic \pp{187}\c 194\c 331}
+\indexentry {0}{pica}{N}{\ic 60}
+\indexentry {0}{pixel file}{N}{\ic 65}
+\indexentry {0}{\pkfile}{N}{\ic 8\c 65}
+\indexentry {0}{plainoutput}{C}{\ic \pp{148}\c 331}
+\indexentry {0}{\plainTeX}{N}{\ic 3\c 8\c 9\c \pp{88}}
+\indexentry {1}{font families in}{N}{\ic 62}
+\indexentry {0}{pm}{C}{\ic \pp{189}\c 332}
+\indexentry {0}{pmatrix}{C}{\ic \pp{205}\c 332}
+\indexentry {0}{pmod}{C}{\ic \pp{194}\c 332}
+\indexentry {0}{poetry, typesetting}{N}{\ic 122}
+\indexentry {0}{point}{N}{\ic 60}
+\indexentry {0}{postdisplaypenalty}{C}{\ic \pp{138}\c 332}
+\indexentry {0}{pound sterling}{N}{\ic 98}
+\indexentry {0}{Pr}{C}{\ic \pp{193}\c 332}
+\indexentry {0}{preamble}{N}{\ic \pp{45}\c 178\c 179}
+\indexentry {0}{prec}{C}{\ic \pp{190}\c 191\c 332}
+\indexentry {0}{preceq}{C}{\ic \pp{190}\c 191\c 332}
+\indexentry {0}{predisplaypenalty}{C}{\ic \pp{138}\c 332}
+\indexentry {0}{predisplaysize}{C}{\ic \pp{216}\c 332}
+\indexentry {0}{preloaded}{N}{\ic 65}
+\indexentry {0}{pretolerance}{C}{\ic \pp{123}\c 332}
+\indexentry {0}{prevdepth}{C}{\ic 133\c \pp{134}\c 332}
+\indexentry {0}{prevgraf}{C}{\ic \pp{120}\c 332}
+\indexentry {0}{previewer}{N}{\ic 8}
+\indexentry {0}{prime}{C}{\ic \pp{188}\c 332}
+\indexentry {0}{primitive}{N}{\ic \pp{88}}
+\indexentry {1}{command}{N}{\ic 3\c 48\c 313}
+\indexentry {1}{control sequence}{N}{\ic 57}
+\indexentry {0}{printable characters}{N}{\ic 49}
+\indexentry {0}{printers}{N}{\ic 8}
+\indexentry {0}{proclaim}{C}{\ic \pp{131}\c 332}
+\indexentry {0}{prod}{C}{\ic \pp{194}\c 332}
+\indexentry {0}{programming features}{N}{\ic 221}
+\indexentry {0}{propto}{C}{\ic \pp{190}\c 332}
+\indexentry {0}{psi}{C}{\ic \pp{187}\c 332}
+\indexentry {0}{Psi}{C}{\ic \pp{187}\c 332}
+\indexentry {0}{punctuation}{N}{\ic 13\c 22}
+\indexentry {0}{punctuation in math formulas}{N}{\ic 196}
+\indexentry {0}{\pxlfile}{N}{\ic 8}
+\indexgroup Q
+\indexentry {0}{qquad}{C}{\ic \pp{154}\c 332}
+\indexentry {0}{quad}{C}{\ic \pp{154}\c 332}
+\indexentry {0}{question mark}{N}{\ic 13}
+\indexentry {0}{quotation marks}{N}{\ic 14\c 22}
+\indexgroup R
+\indexentry {0}{radical}{C}{\ic \pp{207}\c 332}
+\indexentry {0}{ragged left}{N}{\ic 71\c 115}
+\indexentry {0}{ragged right}{N}{\ic 71\c 116}
+\indexentry {0}{raggedbottom}{C}{\ic \pp{137}\c 332}
+\indexentry {0}{raggedright}{C}{\ic 71\c \pp{116}\c 269\c 332}
+\indexentry {0}{raise}{C}{\ic 52\c \pp{166}\c 332}
+\indexentry {0}{rangle}{C}{\ic 59\c \pp{191}\c 332}
+\indexentry {0}{rbrace}{C}{\ic 59\c \pp{191}\c 332}
+\indexentry {0}{rbrack}{C}{\ic 59\c \pp{98}\c \pp{191}\c 332}
+\indexentry {0}{rceil}{C}{\ic 59\c \pp{191}\c 332}
+\indexentry {0}{Re}{C}{\ic \pp{188}\c 332}
+\indexentry {0}{read}{C}{\ic 62\c \pp{248}\c 332}
+\indexentry {0}{reading a file}{N}{\ic 248}
+\indexentry {0}{readreffile}{C}{\ic \pp{303}}
+\indexentry {0}{readtocfile}{C}{\ic \pp{301}}
+\indexentry {0}{recent contributions}{N}{\ic 84}
+\indexentry {0}{recursive macros}{N}{\see{macros, recursive}}
+\indexentry {0}{reference mark}{N}{\ic 145}
+\indexentry {0}{reference point}{N}{\ic 51--52\c \pp{88}}
+\indexentry {0}{\<register>}{N}{\ic 4}
+\indexentry {0}{registers}{N}{\ic \pp{89--90}\c 242--246}
+\indexentry {1}{arithmetic in}{N}{\ic 245--246}
+\indexentry {1}{assignment to}{N}{\ic 49}
+\indexentry {1}{parameters as}{N}{\ic 4\c 12\c 88}
+\indexentry {1}{reserving}{N}{\ic 244--245}
+\indexentry {1}{with \b\tt\\the\e}{N}{\ic 234}
+\indexentry {0}{relations}{N}{\ic 126\c 190--191}
+\indexentry {1}{putting formulas above}{N}{\ic 202}
+\indexentry {0}{relax}{C}{\ic 9\c \pp{241}\c 332}
+\indexentry {0}{relpenalty}{C}{\ic \pp{126}\c 332}
+\indexentry {0}{repeat}{C}{\ic \pp{240}\c 333}
+\indexentry {0}{repeated actions}{N}{\ic 240--241}
+\indexentry {0}{resident fonts}{N}{\ic 222}
+\indexentry {0}{restricted horizontal mode}{N}{\ic 69\c 81}
+\indexentry {0}{restricted mode}{N}{\ic \pp{90}}
+\indexentry {1}{horizontal}{N}{\ic 272}
+\indexentry {0}{result file}{N}{\ic 62}
+\indexentry {0}{revision bars}{N}{\ic \r7\c 30}
+\indexentry {0}{rfloor}{C}{\ic 59\c \pp{191}\c 333}
+\indexentry {0}{rgroup}{C}{\ic \pp{204}\c 333}
+\indexentry {0}{rho}{C}{\ic \pp{187}\c 333}
+\indexentry {0}{right}{C}{\ic 58\c \pp{204}\c 333}
+\indexentry {0}{right margin}{N}{\ic 66}
+\indexentry {0}{rightarrow}{C}{\ic \pp{192}\c 333}
+\indexentry {0}{Rightarrow}{C}{\ic \pp{192}\c 333}
+\indexentry {0}{rightarrowfill}{C}{\ic \pp{175}\c 333}
+\indexentry {0}{rightharpoondown}{C}{\ic \pp{192}\c 333}
+\indexentry {0}{rightharpoonup}{C}{\ic \pp{192}\c 333}
+\indexentry {0}{righthyphenmin}{C}{\ic 18\c \pp{128}\c 333}
+\indexentry {0}{rightleftharpoons}{C}{\ic \pp{192}\c 333}
+\indexentry {0}{rightline}{C}{\ic 68\c \pp{108}\c 333}
+\indexentry {0}{rightskip}{C}{\ic 71\c \pp{115}\c 333}
+\indexentry {0}{rlap}{C}{\ic \pp{109}\c 333}
+\indexentry {0}{rm}{C}{\ic \pp{103}\c 333}
+\indexentry {0}{rmoustache}{C}{\ic \pp{212}\c 333}
+\indexentry {0}{Roman numerals}{N}{\ic 224}
+\indexentry {0}{romannumeral}{C}{\ic 83\c \pp{224}\c 333}
+\indexentry {0}{root}{C}{\ic \pp{207}\c 333}
+\indexentry {0}{row}{N}{\ic 179}
+\indexentry {0}{rq}{C}{\ic \pp{98}\c 333}
+\indexentry {0}{rules}{N}{\ic \pp{90--91}\c 172--173\c 273}
+\indexentry {1}{thickness of}{N}{\ic 292}
+\indexentry {0}{running \TeX}{N}{\ic 9\c 252--253}
+\indexgroup S
+\indexentry {0}{\char `\S}{C}{\ic \pp{98}\c 333}
+\indexentry {0}{sb}{C}{\ic \pp{197}\c 333}
+\indexentry {0}{scale factor}{N}{\ic 223}
+\indexentry {0}{scaled point}{N}{\ic 60}
+\indexentry {0}{script size}{N}{\ic 62\c \pp{91}}
+\indexentry {0}{script style}{N}{\ic 93\c 197\c 198\c 210}
+\indexentry {0}{scriptfont}{C}{\ic 62\c \pp{210}\c 333}
+\indexentry {0}{scriptscript size}{N}{\ic 62\c \pp{91}}
+\indexentry {0}{scriptscript style}{N}{\ic 93\c 197\c 198\c 210}
+\indexentry {0}{scriptscriptfont}{C}{\ic 62\c \pp{210}\c 333}
+\indexentry {0}{scriptscriptstyle}{C}{\ic 93\c 197\c \pp{198}\c 333}
+\indexentry {0}{scriptspace}{C}{\ic \pp{218}\c 333}
+\indexentry {0}{scriptstyle}{C}{\ic 93\c 197\c \pp{198}\c 333}
+\indexentry {0}{scrollmode}{C}{\ic \pp{252}\c 333}
+\indexentry {0}{searrow}{C}{\ic \pp{192}\c 333}
+\indexentry {0}{sec}{C}{\ic \pp{193}\c 333}
+\indexentry {0}{section headings}{N}{\ic 129}
+\indexentry {0}{setbox}{C}{\ic \pp{164}\c 333}
+\indexentry {0}{setlanguage}{C}{\ic 18\c 95\c \pp{128}\c 334}
+\indexentry {0}{setminus}{C}{\ic \pp{189}\c 334}
+\indexentry {0}{settabs}{C}{\ic 44--45\c \pp{176}\c 334}
+\indexentry {0}{setuplistinghook}{C}{\ic \pp{300}}
+\indexentry {0}{sevenbf}{C}{\ic \pp{102}\c 334}
+\indexentry {0}{seveni}{C}{\ic \pp{102}\c 334}
+\indexentry {0}{sevenrm}{C}{\ic \pp{102}\c 334}
+\indexentry {0}{sevensy}{C}{\ic \pp{102}\c 334}
+\indexentry {0}{sfcode}{C}{\ic \pp{107}\c 334}
+\indexentry {0}{shape file}{N}{\ic 8\c 65\c 78}
+\indexentry {0}{sharp}{C}{\ic \pp{188}\c 334}
+\indexentry {0}{shipout}{C}{\ic 63\c 84\c \pp{148}\c 260\c 334}
+\indexentry {1}{{\tt\\count} registers displayed at}{N}{\ic 142}
+\indexentry {0}{show}{C}{\ic \pp{253}\c 280\c 334}
+\indexentry {0}{showbox}{C}{\ic \pp{253}\c 256\c 261\c 334}
+\indexentry {0}{showboxbreadth}{C}{\ic 254\c 258\c \pp{261}\c 334}
+\indexentry {0}{showboxdepth}{C}{\ic 254\c 258\c \pp{261}\c 334}
+\indexentry {0}{showhyphens}{C}{\ic \pp{128}\c 334}
+\indexentry {0}{showlists}{C}{\ic \pp{253}\c 256\c 261\c 334}
+\indexentry {0}{showthe}{C}{\ic 90\c \pp{253}\c 334}
+\indexentry {0}{shrink}{N}{\ic 66--68\c \pp{91}}
+\indexentry {0}{sigma}{C}{\ic \pp{187}\c 334}
+\indexentry {0}{Sigma}{C}{\ic \pp{187}\c 194\c 334}
+\indexentry {0}{sim}{C}{\ic \pp{190}\c 191\c 334}
+\indexentry {0}{simeq}{C}{\ic \pp{190}\c 191\c 334}
+\indexentry {0}{sin}{C}{\ic \pp{193}\c 334}
+\indexentry {0}{singlecolumn}{C}{\ic \pp{309}}
+\indexentry {0}{sinh}{C}{\ic \pp{193}\c 334}
+\indexentry {0}{skew}{C}{\ic \pp{212}\c 334}
+\indexentry {0}{skewchar}{C}{\ic \pp{213}\c 234\c 334}
+\indexentry {0}{skip}{C}{\ic \pp{242}\c 246\c 334}
+\indexentry {0}{skip registers}{N}{\ic 243}
+\indexentry {1}{reserved by \b\tt\\newskip\e}{N}{\ic 244}
+\indexentry {0}{skipdef}{C}{\ic \pp{245}\c 334}
+\indexentry {0}{sl}{C}{\ic \pp{103}\c 334}
+\indexentry {0}{slash}{C}{\ic 74\c \pp{122}\c 334}
+\indexentry {0}{slfam}{C}{\ic \pp{210}\c 334}
+\indexentry {0}{smallbreak}{C}{\ic \pp{137}\c 334}
+\indexentry {0}{smallint}{C}{\ic \pp{194}\c 334}
+\indexentry {0}{smallskip}{C}{\ic 137\c \pp{154}\c 334}
+\indexentry {0}{smallskipamount}{C}{\ic \pp{155}\c 335}
+\indexentry {0}{smash}{C}{\ic \pp{169}\c 335}
+\indexentry {0}{smile}{C}{\ic \pp{190}\c 335}
+\indexentry {0}{solidus}{N}{\ic 74\c 122}
+\indexentry {0}{source file}{N}{\ic 62}
+\indexentry {0}{sp}{C}{\ic \pp{197}\c 335}
+\indexentry {0}{space}{N}{\ic \pp{91--92}}
+\indexentry {1}{in math formulas}{N}{\ic 214--216}
+\indexentry {1}{lost}{N}{\ic 270}
+\indexentry {1}{producing}{N}{\ic 153--159}
+\indexentry {1}{unwanted}{N}{\ic 270--271}
+\indexentry {0}{space}{C}{\ic \pp{105}\c 281\c 335}
+\indexentry {0}{space characters}{N}{\ic 22\c 293}
+\indexentry {1}{category code of}{N}{\ic 53}
+\indexentry {0}{space factor}{N}{\ic 107}
+\indexentry {0}{spacefactor}{C}{\ic \pp{107}\c 335}
+\indexentry {0}{spaces}{N}{\ic 12--13}
+\indexentry {1}{interword}{N}{\ic 66\c 104--108}
+\indexentry {1}{visible}{N}{\ic \pp{3}}
+\indexentry {0}{spaceskip}{C}{\ic \pp{107}\c 335}
+\indexentry {0}{spacesub}{C}{\ic \pp{293}}
+\indexentry {0}{spacing}{N}{}
+\indexentry {1}{adjusting with kerns}{N}{\ic 71}
+\indexentry {1}{interline}{N}{\ic 28}
+\indexentry {0}{spadesuit}{C}{\ic \pp{188}\c 335}
+\indexentry {0}{span}{C}{\ic \pp{181}\c 335}
+\indexentry {0}{special}{C}{\ic 95\c \pp{250}\c 335}
+\indexentry {0}{special characters}{N}{\ic 98}
+\indexentry {0}{special symbols}{N}{\ic 62\c 97}
+\indexentry {0}{Spivak, Michael~D.}{N}{\ic 18}
+\indexentry {0}{splitbotmark}{C}{\ic 80\c \pp{144}\c 335}
+\indexentry {0}{splitfirstmark}{C}{\ic 80\c \pp{144}\c 335}
+\indexentry {0}{splitmaxdepth}{C}{\ic \pp{150}\c 335}
+\indexentry {0}{splittopskip}{C}{\ic \pp{150}\c 335}
+\indexentry {0}{sqcap}{C}{\ic \pp{189}\c 335}
+\indexentry {0}{sqcup}{C}{\ic \pp{189}\c 335}
+\indexentry {0}{sqrt}{C}{\ic \pp{206}\c 335}
+\indexentry {0}{sqsubseteq}{C}{\ic \pp{190}\c 191\c 335}
+\indexentry {0}{sqsupseteq}{C}{\ic \pp{190}\c 191\c 335}
+\indexentry {0}{ss}{C}{\ic \pp{97}\c 335}
+\indexentry {0}{stacking subformulas}{N}{\ic 200--202}
+\indexentry {0}{star}{C}{\ic \pp{189}\c 335}
+\indexentry {0}{stomach}{N}{\ic 16\c 46\c \pp{47}\seealso{\anatomy}}
+\indexentry {0}{stretch}{N}{\ic 66--68\c \pp{92}}
+\indexentry {0}{string}{C}{\ic \pp{226}\c 233\c 335}
+\indexentry {0}{strut}{C}{\ic 46\c 92\c \pp{167}\c 168\c 335}
+\indexentry {0}{struts}{N}{\ic \pp{92}\c 135\c 167--168}
+\indexentry {1}{in vertical alignments}{N}{\ic 179}
+\indexentry {0}{styles}{N}{\ic \pp{92--93}\c 198--199}
+\indexentry {0}{subscripts}{N}{\ic 53\c 197}
+\indexentry {0}{subset}{C}{\ic \pp{190}\c 191\c 335}
+\indexentry {0}{subseteq}{C}{\ic \pp{190}\c 191\c 335}
+\indexentry {0}{succ}{C}{\ic \pp{190}\c 191\c 335}
+\indexentry {0}{succeq}{C}{\ic \pp{190}\c 191\c 335}
+\indexentry {0}{sum}{C}{\ic \pp{194}\c 335}
+\indexentry {0}{sup}{C}{\ic \pp{193}\c 335}
+\indexentry {0}{supereject}{C}{\ic \pp{137}\c 335}
+\indexentry {0}{superscripts}{N}{\ic 53\c 197}
+\indexentry {0}{supset}{C}{\ic \pp{190}\c 191\c 335}
+\indexentry {0}{supseteq}{C}{\ic \pp{190}\c 191\c 335}
+\indexentry {0}{surd}{C}{\ic \pp{188}\c 336}
+\indexentry {0}{swarrow}{C}{\ic \pp{192}\c 336}
+\indexgroup T
+\indexentry {0}{\char `\t}{C}{\ic \pp{100}\c 336}
+\indexentry {0}{tabalign}{C}{\ic \pp{176}\c 336}
+\indexentry {0}{tabbing alignments}{N}{\ic 176--177}
+\indexentry {0}{table of contents}{N}{\ic 301}
+\indexentry {0}{tables}{N}{\ic 44--46\seealso{alignments}}
+\indexentry {0}{tabs}{N}{\ic 53\c 176}
+\indexentry {0}{tabskip}{C}{\ic 46\c \pp{184}\c 336}
+\indexentry {0}{tan}{C}{\ic \pp{193}\c 336}
+\indexentry {0}{tanh}{C}{\ic \pp{193}\c 336}
+\indexentry {0}{tau}{C}{\ic \pp{187}\c 336}
+\indexentry {0}{template}{N}{\ic \pp{45}\c 178--182}
+\indexentry {0}{tenbf}{C}{\ic \pp{102}\c 336}
+\indexentry {0}{tenex}{C}{\ic \pp{102}\c 336}
+\indexentry {0}{teni}{C}{\ic \pp{102}\c 336}
+\indexentry {0}{tenit}{C}{\ic \pp{102}\c 336}
+\indexentry {0}{tenrm}{C}{\ic \pp{102}\c 336}
+\indexentry {0}{tensl}{C}{\ic \pp{102}\c 336}
+\indexentry {0}{tensy}{C}{\ic \pp{102}\c 336}
+\indexentry {0}{tentt}{C}{\ic \pp{102}\c 336}
+\indexentry {0}{terminal}{N}{\ic 254}
+\indexentry {0}{testfileexistence}{C}{\ic \pp{295}}
+\indexentry {0}{TeX}{C}{\ic \pp{98}\c 336}
+\indexentry {0}{\texbook}{N}{\ic \r8\c 43}
+\indexentry {0}{\TeXMeX}{N}{\ic \pp{93}}
+\indexentry {0}{text editor}{N}{\ic 7}
+\indexentry {0}{text math}{N}{\ic 16\c \pp{93}}
+\indexentry {0}{text math mode}{N}{\ic 80\c 81}
+\indexentry {0}{text size}{N}{\ic 62\c \pp{93}}
+\indexentry {0}{text style}{N}{\ic 93\c 194\c 198\c 210}
+\indexentry {0}{textfont}{C}{\ic 62\c \pp{210}\c 336}
+\indexentry {0}{textindent}{C}{\ic \pp{112}\c 336}
+\indexentry {0}{textstyle}{C}{\ic 93\c \pp{198}\c 336}
+\indexentry {0}{\tfmfile}{N}{\ic 8\c 64\c 72\c 221}
+\indexentry {0}{the}{C}{\ic 226\c \pp{234}\c 242\c 243\c 336}
+\indexentry {0}{theorems}{N}{\ic 32\c 131}
+\indexentry {0}{theta}{C}{\ic \pp{187}\c 336}
+\indexentry {0}{Theta}{C}{\ic \pp{187}\c 336}
+\indexentry {0}{thickmuskip}{C}{\ic \pp{214}\c 336}
+\indexentry {0}{thinmuskip}{C}{\ic \pp{214}\c 336}
+\indexentry {0}{thinspace}{C}{\ic \pp{153}\c 336}
+\indexentry {0}{tie}{N}{\ic 13\c 74\c 105}
+\indexentry {0}{tie-after accent}{N}{\ic 100}
+\indexentry {0}{tilde}{C}{\ic \pp{199}\c 336}
+\indexentry {0}{tilde accent}{N}{\ic 100\c 199}
+\indexentry {0}{time}{C}{\ic \pp{224}\c 297\c 336}
+\indexentry {0}{time of day}{N}{\ic 224\c 297}
+\indexentry {0}{times}{C}{\ic \pp{189}\c 336}
+\indexentry {0}{timestamp}{C}{\ic \pp{297}}
+\indexentry {0}{timestring}{C}{\ic \pp{297}}
+\indexentry {0}{to}{C}{\ic \pp{192}\c 336}
+\indexentry {0}{<to be read again>}{T}{\ic 285}
+\indexentry {0}{token registers}{N}{\ic 89\c 243}
+\indexentry {1}{reserved by \b\tt\\newtoks\e}{N}{\ic 244}
+\indexentry {0}{tokens}{N}{\ic 16\c \pp{93}}
+\indexentry {1}{as commands}{N}{\ic 56}
+\indexentry {1}{assembled from characters}{N}{\ic 47}
+\indexentry {1}{displayed by \b\tt\\show\e}{N}{\ic 253}
+\indexentry {1}{passed to \TeX's stomach}{N}{\ic 47}
+\indexentry {1}{showing the meaning of}{N}{\ic 226}
+\indexentry {0}{toks}{C}{\ic \pp{242}\c 336}
+\indexentry {0}{toksdef}{C}{\ic \pp{245}\c 336}
+\indexentry {0}{tokstostring}{C}{\ic \pp{292}}
+\indexentry {0}{tolerance}{C}{\ic \pp{123}\c 124\c 336}
+\indexentry {0}{top}{C}{\ic \pp{188}\c 336}
+\indexentry {0}{topglue}{C}{\ic 18\c \pp{156}\c 268\c 336}
+\indexentry {0}{topinsert}{C}{\ic 70\c \pp{146}\c 147\c 336}
+\indexentry {0}{topmark}{C}{\ic 79\c \pp{144}\c 336}
+\indexentry {0}{topskip}{C}{\ic \pp{141}\c 150\c 336}
+\indexentry {0}{tracing}{N}{\ic 253--261}
+\indexentry {0}{tracingall}{C}{\ic \pp{261}\c 337}
+\indexentry {0}{tracingboxes}{C}{\ic \pp{292}}
+\indexentry {0}{tracingcommands}{C}{\ic \pp{257}\c 337}
+\indexentry {0}{tracinglostchars}{C}{\ic \pp{257}\c 337}
+\indexentry {0}{tracingmacros}{C}{\ic \pp{258}\c 337}
+\indexentry {0}{tracingonline}{C}{\ic 254\c \pp{256}\c 257\c 258\c 259\c 260\c 261\c 337}
+\indexentry {0}{tracingoutput}{C}{\ic \pp{258}\c 261\c 337}
+\indexentry {0}{tracingpages}{C}{\ic \pp{259}\c 337}
+\indexentry {0}{tracingparagraphs}{C}{\ic \pp{259}\c 337}
+\indexentry {0}{tracingrestores}{C}{\ic \pp{260}\c 337}
+\indexentry {0}{tracingstats}{C}{\ic \pp{260}\c 337}
+\indexentry {0}{triangle}{C}{\ic \pp{188}\c 337}
+\indexentry {0}{triangleleft}{C}{\ic \pp{189}\c 337}
+\indexentry {0}{triangleright}{C}{\ic \pp{189}\c 337}
+\indexentry {0}{true}{T}{\ic 78}
+\indexentry {0}{tt}{C}{\ic \pp{103}\c 337}
+\indexentry {0}{ttfam}{C}{\ic \pp{210}\c 337}
+\indexentry {0}{ttraggedright}{C}{\ic \pp{116}\c 337}
+\indexentry {0}{\TUG}{N}{\ic 19}
+\indexentry {0}{TUGBoat}{N}{\ic 19}
+\indexentry {0}{type styles}{N}{\ic 103\c 210}
+\indexentry {0}{typewriter font}{N}{\ic 109}
+\indexgroup U
+\indexentry {0}{\char `\u}{C}{\ic \pp{100}\c 337}
+\indexentry {0}{uccode}{C}{\ic \pp{103}\c 337}
+\indexentry {0}{uchyph}{C}{\ic \pp{128}\c 337}
+\indexentry {0}{umlaut accent}{N}{\ic 100}
+\indexentry {0}{unbox}{C}{\ic 172}
+\indexentry {0}{uncatcodespecials}{C}{\ic \pp{291}}
+\indexentry {0}{undelimited arguments}{N}{\ic 48}
+\indexentry {0}{underbar}{C}{\ic \pp{163}\c 337}
+\indexentry {0}{underbrace}{C}{\ic \pp{202}\c 212\c 337}
+\indexentry {0}{underdot accent}{N}{\ic 100}
+\indexentry {0}{underfull boxes}{N}{\ic 268--270}
+\indexentry {0}{underline}{C}{\ic \pp{202}\c 337}
+\indexentry {0}{unhbox}{C}{\ic \pp{165}\c 337}
+\indexentry {0}{unhcopy}{C}{\ic \pp{165}\c 337}
+\indexentry {0}{units of measure}{N}{\ic 60\c 61\c \pp{93}}
+\indexentry {0}{unkern}{C}{\ic \pp{172}\c 337}
+\indexentry {0}{unnumberedlist}{C}{\ic \pp{298}}
+\indexentry {0}{unpenalty}{C}{\ic \pp{172}\c 337}
+\indexentry {0}{unskip}{C}{\ic \pp{172}\c 337}
+\indexentry {0}{unvbox}{C}{\ic \pp{165}\c 337}
+\indexentry {0}{unvcopy}{C}{\ic \pp{165}\c 337}
+\indexentry {0}{unwanted space}{N}{\ic 12}
+\indexentry {0}{uparrow}{C}{\ic 59\c \pp{192}\c 338}
+\indexentry {0}{Uparrow}{C}{\ic 59\c \pp{192}\c 338}
+\indexentry {0}{upbracefill}{C}{\ic \pp{211}\c 338}
+\indexentry {0}{updownarrow}{C}{\ic 59\c \pp{192}\c 338}
+\indexentry {0}{Updownarrow}{C}{\ic 59\c \pp{192}\c 338}
+\indexentry {0}{uplus}{C}{\ic \pp{189}\c 338}
+\indexentry {0}{upper limits}{N}{\ic 197}
+\indexentry {0}{uppercase}{N}{}
+\indexentry {1}{conversion to}{N}{\ic 103--104}
+\indexentry {0}{uppercase}{C}{\ic \pp{104}\c 338}
+\indexentry {0}{upsilon}{C}{\ic \pp{187}\c 338}
+\indexentry {0}{Upsilon}{C}{\ic \pp{187}\c 338}
+\indexgroup V
+\indexentry {0}{\char `\v}{C}{\ic \pp{100}\c 338}
+\indexentry {0}{vadjust}{C}{\ic \pp{120}\c 266\c 267\c 338}
+\indexentry {0}{valign}{C}{\ic 46\c \pp{179}\c 338}
+\indexentry {1}{grouping for}{N}{\ic 16}
+\indexentry {1}{inherently horizontal}{N}{\ic 94}
+\indexentry {1}{used in {\tt\\makecolumns}}{N}{\ic 308}
+\indexentry {0}{varepsilon}{C}{\ic \pp{187}\c 338}
+\indexentry {0}{varphi}{C}{\ic \pp{187}\c 338}
+\indexentry {0}{varpi}{C}{\ic \pp{187}\c 338}
+\indexentry {0}{varrho}{C}{\ic \pp{187}\c 338}
+\indexentry {0}{varsigma}{C}{\ic \pp{187}\c 338}
+\indexentry {0}{vartheta}{C}{\ic \pp{187}\c 338}
+\indexentry {0}{vbadness}{C}{\ic \pp{170}\c 338}
+\indexentry {0}{vbox}{C}{\ic 51\c 52\c 94\c \pp{161}\c 338}
+\indexentry {1}{fixing page breaks with}{N}{\ic 265}
+\indexentry {1}{overfull box from}{N}{\ic 269--270}
+\indexentry {0}{vboxes}{N}{\ic 51\c \pp{94}}
+\indexentry {1}{interline glue for}{N}{\ic 133}
+\indexentry {1}{testing for}{N}{\ic 238}
+\indexentry {1}{vertical mode for}{N}{\ic 94}
+\indexentry {1}{width determined by \b\tt\\hsize\e}{N}{\ic 114}
+\indexentry {0}{vcenter}{C}{\ic \pp{213}\c 297\c 338}
+\indexentry {0}{vdash}{C}{\ic \pp{190}\c 338}
+\indexentry {0}{vdots}{C}{\ic \pp{203}\c 338}
+\indexentry {0}{vec}{C}{\ic \pp{199}\c 338}
+\indexentry {0}{vector accent}{N}{\ic 199}
+\indexentry {0}{vee}{C}{\ic \pp{189}\c 338}
+\indexentry {0}{verbatim text}{N}{\ic 277}
+\indexentry {0}{verse, typesetting}{N}{\ic 122}
+\indexentry {0}{version number}{N}{\ic 225}
+\indexentry {0}{vert}{C}{\ic 59\c \pp{188}\c 338}
+\indexentry {0}{Vert}{C}{\ic 59\c \pp{188}\c 189\c 338}
+\indexentry {0}{vertical glue}{N}{\ic 155\c 156}
+\indexentry {0}{vertical lists}{N}{\ic 51\c 66\c \pp{94}}
+\indexentry {1}{can't contain horizontal commands}{N}{\ic 94}
+\indexentry {1}{inserting in paragraphs}{N}{\ic 120}
+\indexentry {1}{penalties in}{N}{\ic 88}
+\indexentry {1}{rule in}{N}{\ic 90}
+\indexentry {1}{vboxes formed from}{N}{\ic 94}
+\indexentry {0}{vertical mode}{N}{\ic 81\c \pp{94}}
+\indexentry {1}{rules in}{N}{\ic 173}
+\indexentry {1}{testing for}{N}{\ic 238}
+\indexentry {0}{vertical rules}{N}{\ic 90--91\c 172--173}
+\indexentry {0}{vertical skip}{N}{\ic 155}
+\indexentry {0}{vertical space}{N}{\ic 154--159}
+\indexentry {1}{reserving at top of page}{N}{\ic 267}
+\indexentry {0}{vfil}{C}{\ic \pp{157}\c 270\c 338}
+\indexentry {1}{filling a vbox}{N}{\ic 162}
+\indexentry {1}{needed with {\tt\\eject}}{N}{\ic 137}
+\indexentry {0}{vfill}{C}{\ic \pp{157}\c 266\c 338}
+\indexentry {0}{vfilneg}{C}{\ic \pp{159}\c 338}
+\indexentry {0}{vfootnote}{C}{\ic \pp{145}\c 147\c 309\c 338}
+\indexentry {0}{vfuzz}{C}{\ic \pp{171}\c 269\c 338}
+\indexentry {0}{vglue}{C}{\ic \pp{156}\c 157\c 338}
+\indexentry {0}{virtex}{T}{\ic 65\c 263}
+\indexentry {0}{visible space}{N}{\ic 104}
+\indexentry {0}{voffset}{C}{\ic 79\c 86\c \pp{140}\c 274\c 339}
+\indexentry {0}{vphantom}{C}{\ic \pp{169}\c 339}
+\indexentry {0}{vrule}{C}{\ic 90--91\c \pp{172}\c 273\c 339}
+\indexentry {1}{inherently horizontal}{N}{\ic 94}
+\indexentry {0}{vsize}{C}{\ic 79\c 86\c \pp{140}\c 274\c 339}
+\indexentry {1}{set by {\tt\\magnification}}{N}{\ic 223}
+\indexentry {0}{vskip}{C}{\ic 66\c \pp{155}\c 339}
+\indexentry {0}{vsplit}{C}{\ic 144\c \pp{149}\c 339}
+\indexentry {0}{vss}{C}{\ic \pp{158}\c 269\c 339}
+\indexentry {0}{vtop}{C}{\ic 51\c 52\c 94\c \pp{161}\c 339}
+\indexgroup W
+\indexentry {0}{wd}{C}{\ic \pp{167}\c 339}
+\indexentry {0}{wedge}{C}{\ic \pp{189}\c 339}
+\indexentry {0}{whatsit}{N}{\ic \pp{94--95}\c 128}
+\indexentry {0}{whitespace, preserving}{N}{\ic 278}
+\indexentry {0}{wide hat accent}{N}{\ic 199}
+\indexentry {0}{wide tilde accent}{N}{\ic 199}
+\indexentry {0}{widehat}{C}{\ic \pp{199}\c 339}
+\indexentry {0}{widetilde}{C}{\ic \pp{199}\c 339}
+\indexentry {0}{widow line}{N}{\ic 138}
+\indexentry {0}{widowpenalty}{C}{\ic \pp{138}\c 339}
+\indexentry {0}{width}{N}{\ic 51\c \pp{95}\c 167}
+\indexentry {0}{wlog}{C}{\ic \pp{261}\c 339}
+\indexentry {1}{expanded by {\tt\\edef} rules}{N}{\ic 231}
+\indexentry {0}{words run together}{N}{\ic 270}
+\indexentry {0}{wp}{C}{\ic \pp{188}\c 339}
+\indexentry {0}{wr}{C}{\ic \pp{189}\c 339}
+\indexentry {0}{write}{C}{\ic \pp{249}\c 339}
+\indexentry {1}{expanded by {\tt\\edef} rules}{N}{\ic 231}
+\indexentry {1}{expanded during {\tt\\shipout}}{N}{\ic 148}
+\indexentry {1}{expansion of {\tt\\'\it c} in}{N}{\ic 82}
+\indexentry {1}{output stream for}{N}{\ic 63}
+\indexentry {1}{whatsit produced by}{N}{\ic 95}
+\indexentry {1}{with {\tt\\immediate}}{N}{\ic 250}
+\indexentry {1}{writing \b\tt\%\e\ with}{N}{\ic 292}
+\indexentry {0}{<write>}{T}{\ic 288}
+\indexentry {0}{writetocentry}{C}{\ic \pp{301}}
+\indexentry {0}{writing a file}{N}{\ic 249}
+\indexgroup X
+\indexentry {0}{xdef}{C}{\ic 66\c 228\c \pp{231}\c 339}
+\indexentry {0}{xi}{C}{\ic \pp{187}\c 339}
+\indexentry {0}{Xi}{C}{\ic \pp{187}\c 339}
+\indexentry {0}{xleaders}{C}{\ic 72--73\c \pp{174}\c 339}
+\indexentry {0}{xrdef}{C}{\ic \pp{302}}
+\indexentry {0}{xref}{C}{\ic \pp{302}}
+\indexentry {0}{xrefn}{C}{\ic \pp{302}}
+\indexentry {0}{xspaceskip}{C}{\ic \pp{107}\c 339}
+\indexgroup Y
+\indexentry {0}{year}{C}{\ic \pp{225}\c 297\c 339}
+\indexgroup Z
+\indexentry {0}{Zapf, Hermann}{N}{\ic 34}
+\indexentry {0}{zeta}{C}{\ic \pp{187}\c 339}
diff --git a/info/impatient/book.tex b/info/impatient/book.tex
new file mode 100644
index 0000000000..9d656f7c99
--- /dev/null
+++ b/info/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/info/impatient/capsule.tex b/info/impatient/capsule.tex
new file mode 100644
index 0000000000..59e9a2bef0
--- /dev/null
+++ b/info/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/info/impatient/cn/Makefile b/info/impatient/cn/Makefile
new file mode 100644
index 0000000000..63c0d7841c
--- /dev/null
+++ b/info/impatient/cn/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/info/impatient/cn/backm.tex b/info/impatient/cn/backm.tex
new file mode 100644
index 0000000000..4bb2ff2717
--- /dev/null
+++ b/info/impatient/cn/backm.tex
@@ -0,0 +1,97 @@
+% -*- coding: utf-8 -*-
+% 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}
+\bookmark{1}{作者简介}%
+\leftline{\sectionfonts 作者简介}
+\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}
+\bookmark{1}{书尾}%
+\leftline{\sectionfonts 书尾}
+\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/info/impatient/cn/book.tex b/info/impatient/cn/book.tex
new file mode 100644
index 0000000000..2077adb081
--- /dev/null
+++ b/info/impatient/cn/book.tex
@@ -0,0 +1,63 @@
+% 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
+\includeartwork{0cover}
+\input frontm
+% (not for web)
+\edgetabstrue
+\settabdepth{\bigtab}
+\includeartwork{0watchrock}
+\input usebook
+\includeartwork{ch01-usingbook}
+\input usingtex
+\includeartwork{ch02-usingtex}
+\input examples
+\includeartwork{ch03-examples}
+\nextedgetab
+\input concepts
+\includeartwork{ch04-concepts}
+\nextedgetab
+\settabdepth{\smalltab}
+\input paras
+\includeartwork{ch05-para}
+\nextedgetab
+\input pages
+\includeartwork{ch06-pages}
+\nextedgetab
+\input modes
+\includeartwork{ch07-horizvert}
+\nextedgetab
+\input math
+\includeartwork{ch08-math}
+\nextedgetab
+\input genops
+\includeartwork{ch09-general}
+\nextedgetab
+\settabdepth{\bigtab}
+\input tips
+\includeartwork{ch10-tips}
+\input errors
+\includeartwork{ch11-errors}
+\input usermacs
+\includeartwork{ch12-compendium}
+\nextedgetab
+\input capsule
+\includeartwork{ch13-summary}
+\nextedgetab
+\backmatter
+\input fdl
+\input index
+\edgetabsfalse
+\input backm
+
+\bye
diff --git a/info/impatient/cn/capsule.tex b/info/impatient/cn/capsule.tex
new file mode 100644
index 0000000000..e9a0cdb046
--- /dev/null
+++ b/info/impatient/cn/capsule.tex
@@ -0,0 +1,2000 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter{命令速查表}
+
+\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}.
+这一章将简å•åœ°æ述原始的 \TeX\ 与 \plainTeX\ 中定义的命令,包括控制åºåˆ—与特殊字符。
+我们忽略了那些åªåœ¨ \plainTeX\ 定义内部使用的命令。需è¦æ³¨æ„的是,普通字符,
+如 `|a|' 或 `|6|' 也是命令,并且是最常è§çš„命令\seeconcept{字符}。
+
+%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 命令å‰é¢çš„星å·è¡¨æ˜Žè¯¥å‘½ä»¤æ˜¯åŽŸå§‹çš„^^{原始的//原始命令},
+å³å†…建于 \TeX\ 计算程åºä¸­çš„命令\seeconcept{原始的}。
+
+%\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 在命令æ述中出现“音ä¹â€ã€â€œæ ‡ç‚¹â€ã€â€œå‡½æ•°â€ã€â€œç¬¦å·â€ã€â€œå…³ç³»â€ã€
+“定界符â€ã€â€œè¿ç®—符â€ï¼Œåˆ™æš—示该命令åªåœ¨æ•°å­¦æ¨¡å¼ä¸­æœ‰æ•ˆã€‚
+
+%\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 除éžæœ‰å…¶å®ƒè¯´æ˜Žï¼Œâ€œæ˜¾ç¤ºâ€ä¸€è¯åº”用于 \TeX\ å‘é€è‡³^{日志文件}中的信æ¯ã€‚
+如果 |\tracingonline| 是正值,\TeX\ 也会将其å‘é€è‡³ç»ˆç«¯ã€‚
+我们使用åè¯â€œé™ˆåˆ—â€è¡¨ç¤ºé™ˆåˆ—å…¬å¼ï¼ˆå‚è§\xref{陈列公å¼}),å³åœ¨ |$$| 之间的内容。
+
+%\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$''.
+\li 短语“输出 $x$â€è¡¨æ˜ŽæŒ‡å®šå‘½ä»¤å°†å¯¹ $x$ 进行排版,并将结果放在盒å­ä¸­ã€‚
+在ä¸ä¼šå¼•èµ·æ­§ä¹‰çš„情况下,我们有时会çœç•¥â€œè¾“出â€ä¸€è¯ã€‚
+比如,我们对 |\alpha| çš„æè¿°æ˜¯â€œæ•°å­¦å¸Œè…Šå­—æ¯ $\alpha$â€ï¼Œè€Œä¸æ˜¯â€œè¾“å‡ºæ•°å­¦å¸Œè…Šå­—æ¯ $\alpha$â€ã€‚
+%\margin{Remove explanations of ``space'' and ``glue''}
+\margin{去掉了对 ``space'' 和 ``glue'' 的解释}
+
+\endulist
+
+\begincapsum
+
+\writeidxfalse
+{\catcode `@ = \letter
+%\caplineout {\\\visiblespace} {interword space}*{\@space}}%
+\caplineout {\\\visiblespace} {å­—é—´é—´éš”}*{\@space}}%
+ {\catcode `\ =\other\ctsidxref{ }}
+%\capcs ! {negative thin space for math}{}{\@shriek}
+\capcs ! {数学中的负的细å°é—´éš”}{}{\@shriek}
+%\capcs " {umlaut accent for text, as in \"o}{}{\@quote}
+\capcs " {文本中的元音å˜éŸ³ç¬¦ï¼Œæ¯”如 \"o 中那样}{}{\@quote}
+%\capactwo # {introduce a macro parameter, or indicate where the text of
+% an entry goes in an alignment preamble}{}{@msharp:@asharp}
+\capactwo # {引入å®å‚数,或在对é½å¯¼è¨€ä¸­æŒ‡ç¤ºæ–‡æœ¬æ¡ç›®çš„ä½ç½®}{}{@msharp:@asharp}
+%\capcs # {produce \# character from current font}{}{\@pound}
+\capcs # {从当å‰å­—体中输出 \# 字符}{}{\@pound}
+%\capac $ {begin or end a math formula}{}{mathform}
+\capac $ {开始或结æŸæ•°å­¦å…¬å¼}{}{mathform}
+%\capcs $ {produce \$ character from current font}{}{\@bucks}
+\capcs $ {从当å‰å­—体中输出 \$ 字符}{}{\@bucks}
+%\capac % {begin a comment}*{comments}
+\capac % {开始注释}*{comments}
+%\capcs % {produce \% character from current font}{}{\@percent}
+\capcs % {从当å‰å­—体中输出 \% 字符}{}{\@percent}
+%\capac & {separate templates and entries in an alignment}{}{@and}
+\capac & {在对é½ä¸­åˆ†éš”模æ¿ä¸Žæ¡ç›®}{}{@and}
+%\capcs & {produce \& character from current font}{}{\@and}
+\capcs & {从当å‰å­—体中输出 \& 字符}{}{\@and}
+%\capac ' {prime symbol for math, as in $p'$}{}{@prime}
+\capac ' {数学中的素数符å·ï¼Œæ¯”如 $p'$ 中那样}{}{@prime}
+%\capcs ' {acute accent for text, as in \'e}{}{\@prime}
+\capcs ' {文本中的尖音符,比如 \'e 中那样}{}{\@prime}
+%\capcs * {multiplication symbol that allows a line break}{}{\@star}
+\capcs * {å…许断行的乘å·}{}{\@star}
+%\capcs + {begin tabbed line}{}{\@plus}
+\capcs + {开始制表符行}{}{\@plus}
+%\capcs , {thin space for math}{}{\@comma}
+\capcs , {数学中的细å°é—´éš”}{}{\@comma}
+%\capcs - {specify a legal hyphenation point}*{\@minus}
+\capcs - {指定åˆæ³•çš„断字点}*{\@minus}
+%\capcs . {dot accent for text, as in \.n}{}{\@dot}
+\capcs . {文本中的点é‡éŸ³ç¬¦ï¼Œæ¯”如 \.n 中那样}{}{\@dot}
+%\capcs / {italic correction for the previous character}*{\@slash}
+\capcs / {对之å‰å­—符的斜体校正}*{\@slash}
+%\capcs ; {thick space for math}{}{\@semi}
+\capcs ; {数学中的较大间隔}{}{\@semi}
+%\capcs = {macron accent for text, as in \=r}{}{\@equal}
+\capcs = {文本中的长音符å·ï¼Œæ¯”如 \=r 中那样}{}{\@equal}
+%\capac \ {begin a control sequence}*{@backslash}
+\capac \ {开始控制åºåˆ—}*{@backslash}
+%\capcs > {medium space for math}{}{\@greater}
+\capcs > {数学中的中等间隔}{}{\@greater}
+%\capac ^ {produce a specified subformula as a superscript}{}{@hat}
+\capac ^ {以上标形å¼è¾“出指定的å­å…¬å¼}{}{@hat}
+%\capcs ^ {circumflex accent for text, as in \^o}{}{\@hat}
+\capcs ^ {文本中的抑扬符å·ï¼Œæ¯”如 \^o 中那样}{}{\@hat}
+{\catcode `@ = \letter
+%\caplineout {\twocarets L}{equivalent to the |\\par| primitive}
+% {}{\@par}\ttidxref{^^L}
+\caplineout {\twocarets L}{ç­‰åŒäºŽåŽŸå§‹çš„ |\\par|}{}{\@par}\ttidxref{^^L}
+%\caplineout {\twocarets M}{an end-of-line}*{@newline}\ttidxref{^^M}
+\caplineout {\twocarets M}{行结æŸæ ‡å¿—}*{@newline}\ttidxref{^^M}
+}%
+%\capac _ {produce a specified subformula as a subscript}{}{@underscore}
+\capac _ {以下标形å¼è¾“出指定的å­å…¬å¼}{}{@underscore}
+%\capcs _ {underscore: \_}{}{\@underscore}
+\capcs _ {底线:\_}{}{\@underscore}
+%x \capac ` {in a \<number> context, \ascii\ code for character that follows}*{@lquote}
+%\capcs ` {grave accent for text, as in \`e}{}{\@lquote}
+\capcs ` {文本中的抑音符,比如 \`e 中那样}{}{\@lquote}
+%\capac { {start a group}{}{@lbrace}
+\capac { {开始编组}{}{@lbrace}
+%\capcs { {left brace delimiter for math: $\{$}{}{\@lbrace}
+\capcs { {数学中的左大括å·å®šç•Œç¬¦ï¼š$\{$}{}{\@lbrace}
+%\capcs | {parallel lines for math: $\Vert$}{}{\@bar}
+\capcs | {数学中的平行线:$\Vert$}{}{\@bar}
+%\capac } {end a group}{}{@rbrace}
+\capac } {结æŸç¼–组}{}{@rbrace}
+%\capcs } {right brace delimiter for math: $\}$}{}{\@rbrace}
+\capcs } {数学中的å³å¤§æ‹¬å·å®šç•Œç¬¦ï¼š$\}$}{}{\@rbrace}
+%\capac ~ {interword space at which a line will not break}{}{@not}
+\capac ~ {字间间隔,该处ä¸èƒ½æ–­è¡Œ}{}{@not}
+%\capcs ~ {tilde accent for text, as in \~a}{}{\@not}
+\capcs ~ {文本中的颚化符,比如 \~a 中那样}{}{\@not}
+\writeidxtrue
+\bookmark{2}{从A到G}%
+%\capcs aa {Scandinavian letter: \aa}{}{}
+\capcs aa {斯堪的纳维亚字æ¯ï¼š \aa}{}{}
+%\capcs AA {Scandinavian letter: \AA}{}{}
+\capcs AA {斯堪的纳维亚字æ¯ï¼š\AA}{}{}
+%\capcs above {produce a fraction with a bar of specified thickness}*{}
+\capcs above {输出带有指定厚度横线的分å¼}*{}
+%\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 abovedisplayshortskip {当å‰ä¸€è¡Œå¯ä»¥æ”¾åœ¨é™ˆåˆ—å…¬å¼çš„缩进部分时,
+\TeX\ 在陈列公å¼ä¹‹å‰æ’入的粘连,其默认值是 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 abovedisplayskip {当å‰ä¸€è¡Œä¸èƒ½æ”¾åœ¨é™ˆåˆ—å…¬å¼çš„缩进部分时,
+\TeX\ 在陈列公å¼ä¹‹å‰æ’入的粘连,其默认值是 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 abovewithdelims {输出带有指定厚度横线且被指定定界符围绕的分å¼}*{}
+%\capcs accent {put specified accent over the next character}*{}
+\capcs accent {将指定é‡é—´ç¬¦åŠ åœ¨åŽæŽ¥å­—符之上}*{}
+%\capcs active {category code for active characters, viz., the number $13$}{}{}
+\capcs active {活动字符的类别ç ï¼Œå³æ•°å­— $13$}{}{}
+%\capcs acute {acute accent for math, as in $\acute x$}{}{}
+\capcs acute {数学中的尖音符,比如 $\acute x$ 中那样}{}{}
+%\capcs adjdemerits {additional demerits for a line break which would result in
+% adjacent lines with incompatible word spacing, by default~10000}*{}
+\capcs adjdemerits {对造æˆç›¸é‚»è¡Œå•è¯é—´è·ä¸ç›¸å®¹çš„断行附加的é¢å¤–缺陷,其默认值为 10000}*{}
+%\capcs advance {add a number to a |\\count| register}*{}
+\capcs advance {å‘ |\\count| 寄存器增加一个数}*{}
+%\capcs advancepageno {if |\\pageno| is positive, add one;
+% if it's negative, subtract one}{}{}
+\capcs advancepageno {如果 |\\pageno| 为正值,加一;如果为负值,å‡ä¸€}{}{}
+%\capcs ae {\ae\ ligature}{}{}
+\capcs ae {\ae\ è¿žå­—}{}{}
+%\capcs AE {\AE\ ligature}{}{}
+\capcs AE {\AE\ è¿žå­—}{}{}
+%\capcs afterassignment {wait to expand the following token until
+% the next assignment is done}*{}
+\capcs afterassignment {直到下一赋值完æˆåŽæ‰æ‰©å±•éšåŽçš„è®°å·}*{}
+%\capcs aftergroup {wait to expand the following token until the end
+% of the current group}*{}
+\capcs aftergroup {直到当å‰ç¼–组结æŸåŽæ‰æ‰©å±•éšåŽçš„è®°å·}*{}
+%\capcs aleph {only Hebrew letter for math: $\aleph$}{}{}
+\capcs aleph {数学中唯一的希伯æ¥å­—æ¯ï¼š$\aleph$}{}{}
+%\capcstwo allowbreak {do |\\penalty0|, i.e., allow a line or page break
+% where one could not ordinarily occur}{}{hallowbreak:vallowbreak}
+\capcstwo allowbreak {执行 |\\penalty0|,å³åœ¨é€šå¸¸ä¸èƒ½æ–­è¡Œæˆ–分页的地方å…许断行或分页}{}{hallowbreak:vallowbreak}
+%\capcs alpha {math Greek letter $\alpha$}{}{}
+\capcs alpha {æ•°å­¦å¸Œè…Šå­—æ¯ $\alpha$}{}{}
+%\capcs amalg {amalgamation operator: $\amalg$}{}{}
+\capcs amalg {åˆå¹¶è¿ç®—符:$\amalg$}{}{}
+%\capcs angle {angle symbol: $\angle$}{}{}
+\capcs angle {角度符å·ï¼š$\angle$}{}{}
+%\capcs approx {approximation relation: $\approx$}{}{}
+\capcs approx {近似关系:$\approx$}{}{}
+%\capcs arccos {arc cosine function: $\arccos$}{}{}
+\capcs arccos {å余弦函数:$\arccos$}{}{}
+%\capcs arcsin {arc sine function: $\arcsin$}{}{}
+\capcs arcsin {å正弦函数:$\arcsin$}{}{}
+%\capcs arctan {arc tangent function: $\arctan$}{}{}
+\capcs arctan {å正切函数:$\arctan$}{}{}
+%\capcs arg {argument (phase) function: $\arg$}{}{}
+\capcs arg {è¾è§’(相ä½ï¼‰å‡½æ•°ï¼š$\arg$}{}{}
+%\capcs arrowvert {vertical portion of an extensible double arrow}{}{}
+\capcs arrowvert {å¯å»¶é•¿çš„åŒç®­å¤´çš„竖直部分}{}{}
+%\capcs Arrowvert {vertical portion of an extensible single arrow}{}{}
+\capcs Arrowvert {å¯å»¶é•¿çš„å•ç®­å¤´çš„竖直部分}{}{}
+%\capcs ast {asterisk operator: $\ast$}{}{}
+\capcs ast {星å·è¿ç®—符:$\ast$}{}{}
+%\capcs asymp {asymptote relation: $\asymp$}{}{}
+\capcs asymp {æ¸è¿‘关系:$\asymp$}{}{}
+%\capcs atop {produce a fraction without a fraction bar}*{}
+\capcs atop {输出没有横线的分å¼}*{}
+%\capcs atopwithdelims {produce a fraction without a fraction bar and
+% surrounded by specified delimiters}*{}
+\capcs atopwithdelims {输出没有横线且被指定定界符围绕的分å¼}*{}
+%\capcs b {bar-under accent for math, as in $\b x$}{}{}
+\capcs b {数学中下横线é‡éŸ³ç¬¦ï¼Œæ¯”如 $\b x$ 中那样}{}{}
+%\capcs backslash {backslash symbol: $\backslash$}{}{}
+\capcs backslash {å斜线符å·ï¼š$\backslash$}{}{}
+%\capcs badness {the badness of the glue setting in the last box
+% made}*{}
+\capcs badness {在上一个生æˆçš„ç›’å­ä¸­è®¾å®šçš„粘连的劣度}*{}
+%\capcs bar {bar accent for math, as in $\bar x$}{}{}
+\capcs bar {数学中横线é‡éŸ³ç¬¦ï¼Œæ¯”如 $\bar x$ 中那样}{}{}
+%\capcs baselineskip {glue for the normal vertical distance from one baseline
+% to the next, by default 12\pt}*{}
+\capcs baselineskip {从一基线到å¦ä¸€åŸºçº¿çš„正常竖直è·ç¦»çš„粘连,其默认值是 12\pt}*{}
+%\capcs batchmode {don't stop at errors and don't output to terminal}*{}
+\capcs batchmode {ä¸åœ¨é”™è¯¯å¤„åœä¸‹ï¼Œä¹Ÿä¸å‘终端输出}*{}
+%\capcs begingroup {start a group to be ended by |\\endgroup|}*{}
+\capcs begingroup {开始由 |\\endgroup| 结æŸçš„编组}*{}
+%\capcs beginsection {begin a major subdivision of a document}{}%
+% {\@beginsection}
+\capcs beginsection {开始文档的一个主è¦éƒ¨åˆ†}{}{\@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 belowdisplayshortskip {当å‰ä¸€è¡Œå¯ä»¥æ”¾åœ¨é™ˆåˆ—å…¬å¼çš„缩进部分时,
+\TeX\ 在陈列公å¼ä¹‹åŽæ’入的粘连,其默认值是 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 belowdisplayskip {当å‰ä¸€è¡Œä¸èƒ½æ”¾åœ¨é™ˆåˆ—å…¬å¼çš„缩进部分时,
+\TeX\ 在陈列公å¼ä¹‹åŽæ’入的粘连,其默认值是 12\pt\ plus 3\pt\ minus 9\pt}*{}
+%\capcs beta {math Greek letter $\beta$}{}{}
+\capcs beta {æ•°å­¦å¸Œè…Šå­—æ¯ $\beta$}{}{}
+%\capcs bf {use boldface, i.e., do |\\tenbf\\fam=\\bffam|}{}{}
+\capcs bf {使用粗体,å³æ‰§è¡Œ |\\tenbf\\fam=\\bffam|}{}{}
+%\capcs bffam {boldface family for math}{}{}
+\capcs bffam {数学中的粗体字æ—}{}{}
+%\capcs bgroup {implicit beginning-of-group character}{}{}
+\capcs bgroup {éšå¼ç¼–组开始字符}{}{}
+%\capcs big {make the specified delimiter larger than an ordinary one, but
+% still small enough for text}{}{}
+\capcs big {使得指定定界符大于正常大å°ï¼Œä½†å¯¹äºŽæ–‡æœ¬ä¾æ—§è¶³å¤Ÿå°}{}{}
+%\capcs Big {make the specified delimiter about 11.5\pt\ tall}{}{}
+\capcs Big {使得指定定界符约 11.5\pt 高}{}{}
+%\capcs bigbreak {indicate desirable page break with |\\penalty-200|
+% and produce |\\bigskipamount| glue}{}{}
+\capcs bigbreak {用 |\\penalty-200| 给出åˆé€‚分页点,
+ 并生æˆå¤§å°ä¸º |\\bigskipamount| 的粘连}{}{}
+%\capcs bigcap {large cap operator (no, it doesn't produce a large
+% capital letter!): $\bigcap$}{}{}
+\capcs bigcap {大的求交è¿ç®—符(它ä¸æ˜¯ç”¨æ¥è¾“出大写字æ¯çš„ï¼ï¼‰ï¼š$\bigcap$}{}{}
+%\capcs bigcirc {large circle operator: $\bigcirc$}{}{}
+\capcs bigcirc {大的圆圈è¿ç®—符:$\bigcirc$}{}{}
+%\capcs bigcup {large cup operator: $\bigcup$}{}{}
+\capcs bigcup {大的求并è¿ç®—符:$\bigcup$}{}{}
+%\capcs bigg {make the specified delimiter about 14.5\pt\ tall}{}{}
+\capcs bigg {使得指定定界符高度约 14.5\pt}{}{}
+%\capcs Bigg {make specified delimiter about 17.5\pt\ tall}{}{}
+\capcs Bigg {使得指定定界符高度约 17.5\pt}{}{}
+%\capcs biggl {sized like |\\bigg|, but spaced as an opening}{}{}
+\capcs biggl {大å°ä¸Ž |\\bigg| 一样,但间隔与开符å·ä¸€æ ·}{}{}
+%\capcs Biggl {sized like |\\Bigg|, but spaced as an opening}{}{}
+\capcs Biggl {大å°ä¸Ž |\\Bigg| 一样,但间隔与开符å·ä¸€æ ·}{}{}
+%\capcs biggm {sized like |\\bigg|, but spaced as a relation}{}{}
+\capcs biggm {大å°ä¸Ž |\\bigg| 一样,但间隔与关系符å·ä¸€æ ·}{}{}
+%\capcs Biggm {sized like |\\Bigg|, but spaced as a relation}{}{}
+\capcs Biggm {大å°ä¸Ž |\\Bigg|一样,但间隔与关系符å·ä¸€æ ·}{}{}
+%\capcs biggr {sized like |\\bigg|, but spaced as a closing}{}{}
+\capcs biggr {大å°ä¸Ž |\\bigg| 一样,但间隔与闭符å·ä¸€æ ·}{}{}
+%\capcs Biggr {sized like |\\Bigg|, but spaced as a closing}{}{}
+\capcs Biggr {大å°ä¸Ž |\\Bigg| 一样,但间隔与闭符å·ä¸€æ ·}{}{}
+%\capcs bigl {sized like |\\big|, but spaced as an opening}{}{}
+\capcs bigl {大å°ä¸Ž |\\big| 一样,但间隔与开符å·ä¸€æ ·}{}{}
+%\capcs Bigl {sized like |\\Big|, but spaced as an opening}{}{}
+\capcs Bigl {大å°ä¸Ž |\\Big| 一样,但间隔与开符å·ä¸€æ ·}{}{}
+%\capcs bigm {sized like |\\big|, but spaced as a relation}{}{}
+\capcs bigm {大å°ä¸Ž |\\big|一样,但间隔与关系符å·ä¸€æ ·}{}{}
+%\capcs Bigm {sized like |\\Big|, but spaced as a relation}{}{}
+\capcs Bigm {大å°ä¸Ž |\\Big|一样,但间隔与关系符å·ä¸€æ ·}{}{}
+%\capcs bigodot {large circled dot operator: $\bigodot$}{}{}
+\capcs bigodot {大的圆圈点è¿ç®—符:$\bigodot$}{}{}
+%\capcs bigoplus {large circled plus operator: $\bigoplus$}{}{}
+\capcs bigoplus {大的圆圈加å·è¿ç®—符:$\bigoplus$}{}{}
+%\capcs bigotimes {large circled times operator: $\bigotimes$}{}{}
+\capcs bigotimes {大的圆圈乘å·è¿ç®—符:$\bigotimes$}{}{}
+%\capcs bigr {sized like |\\big|, but spaced as a closing}{}{}
+\capcs bigr {大å°ä¸Ž |\\big| 一样,但间隔与闭符å·ä¸€æ ·}{}{}
+%\capcs Bigr {sized like |\\Big|, but spaced as a closing}{}{}
+\capcs Bigr {大å°ä¸Ž |\\Big| 一样,但间隔与闭符å·ä¸€æ ·}{}{}
+%\capcs bigskip {produce |\\bigskipamount| glue}{}{}
+\capcs bigskip {输出 |\\bigskipamount| 粘连}{}{}
+%\capcs bigskipamount {glue for a big vertical skip, by default 12\pt\
+% plus 4\pt\ minus 4\pt}{}{}
+\capcs bigskipamount {用于大的竖直间è·çš„粘连,其默认值为 12\pt\ plus 4\pt\ minus 4\pt}{}{}
+%\capcs bigsqcup {large square cup operator: $\bigsqcup$}{}{}
+\capcs bigsqcup {大的方形求并è¿ç®—符:$\bigsqcup$}{}{}
+%\capcs bigtriangledown {triangle operator pointing downward:
+% $\bigtriangledown$}{}{}
+\capcs bigtriangledown {å‘下的三角è¿ç®—符:$\bigtriangledown$}{}{}
+%\capcs bigtriangleup {triangle operator pointing upward: $\bigtriangleup$}{}{}
+\capcs bigtriangleup {å‘上的三角è¿ç®—符:$\bigtriangleup$}{}{}
+%\capcs biguplus {large cupped plus operator: $\biguplus$}{}{}
+\capcs biguplus {大的求并的加法è¿ç®—符:$\biguplus$}{}{}
+%\capcs bigvee {large logical ``or'' operator: $\bigvee$}{}{}
+\capcs bigvee {大的逻辑“或â€è¿ç®—符:$\bigvee$}{}{}
+%\capcs bigwedge {large logical ``and'' operator: $\bigwedge$}{}{}
+\capcs bigwedge {大的逻辑“和â€è¿ç®—符:$\bigwedge$}{}{}
+%\capcs binoppenalty {additional penalty for breaking after a binary math
+% operator, by default~700}*{}
+\capcs binoppenalty {一个二元数学è¿ç®—符åŽæ–­è¡Œæˆ–分页的é¢å¤–惩罚,默认值是 700}*{}
+%\capcs bmod {modulus operator, as in $n \bmod 2$}{}{}
+\capcs bmod {模è¿ç®—符,比如 $n \bmod 2$ 中那样}{}{}
+%\capcs bordermatrix {produce matrix with labelled rows and columns}{}{}
+\capcs bordermatrix {带有行和列标志的矩阵}{}{}
+%\capcs bot {lattice bottom symbol: $\bot$}{}{}
+\capcs bot {格底符å·ï¼š$\bot$}{}{}
+%\capcs botmark {the last mark item on the page just boxed}*{}
+\capcs botmark {在刚放入盒å­çš„页é¢å†…的最åŽä¸€ä¸ªæ ‡è®°é¡¹}*{}
+%\capcs bowtie {bowtie relation: $\bowtie$}{}{}
+\capcs bowtie {领结关系:$\bowtie$}{}{}
+%\capcs box {append the box in a specified box register
+% to the current list, and void the register}*{}
+\capcs box {将一指定的盒å­å¯„存器中的盒å­é™„加到当å‰åˆ—表中,并使寄存器失效}*{}
+%\capcs boxmaxdepth {maximum depth of vboxes, by default |\\maxdimen|}*{}
+\capcs boxmaxdepth {vbox 的最大深度,其默认值是 |\\maxdimen|}*{}
+%\capcs brace {|\char36 n\\brace k\char36| produces
+% braced notation: $n \brace k$}{}{}
+\capcs brace {|\char36 n\\brace k\char36| 输出带有一对大括å·çš„标记:$n \brace k$}{}{}
+%\capcs bracevert {vertical portion of extensible large brace}{}{}
+\capcs bracevert {å¯å»¶é•¿çš„大括å·çš„竖直部分}{}{}
+%\capcs brack {|\char36 n\\brack k\char36| produces bracketed notation: $n \brack k$}{}{}
+\capcs brack {|\char36 n\\brack k\char36| 输出带有一对方括å·çš„标记:$n \brack k$}{}{}
+%\capcstwo break {do |\\penalty-10000|, i.e., force a line or page
+% break}{}{hbreak:vbreak}
+\capcstwo break {执行 |\\penalty-10000|,å³å¼ºåˆ¶æ–­è¡Œæˆ–分页}{}{hbreak:vbreak}
+%\capcs breve {breve accent for math, as in $\breve x$}{}{}
+\capcs breve {数学中的短音é‡éŸ³ç¬¦ï¼Œè±¡ $\breve x$ 中一样}{}{}
+%\capcs brokenpenalty {penalty for line break at a discretionary item, by
+% default~100}*{}
+\capcs brokenpenalty {在自定项目处断行的惩罚,默认值是 100}*{}
+%\capcs buildrel {produce specified formula over the specified relation}{}{}
+\capcs buildrel {在一指定关系上方输出指定公å¼}{}{}
+%\capcs bullet {bullet operation: $\bullet$}{}{}
+\capcs bullet {圆点è¿ç®—符:$\bullet$}{}{}
+%\capcs bye {|\\vfill| the last page with blank space, |\\supereject| it,
+% and |\\end| the job}{}{\@bye}
+\capcs bye {用空白间隔 |\\vfill| 最åŽä¸€é¡µï¼Œ|\\supereject| 它,并且 |\\end| 作业}{}{\@bye}
+%\capcs c {cedilla accent for text, as in \c c}{}{}
+\capcs c {文本中的å˜éŸ³ç¬¦å·é‡éŸ³ç¬¦ï¼Œæ¯”如 \c c 中那样}{}{}
+%\capcs cal {use calligraphic font for uppercase letters in math,
+% as in $\cal XYZ$}{}{}
+\capcs cal {数学中,对于大写字æ¯ä½¿ç”¨ä¹¦æ³•å­—体,比如 $\cal XYZ$ 中那样}{}{}
+%\capcs cap {cap operator: $\cap$}{}{}
+\capcs cap {交集è¿ç®—符:$\cap$}{}{}
+%\capcs cases {produce cases for math, as in $\bigl\{{\cdots\atop\cdots}$}{}{}
+\capcs cases {输出数学中的æ¡ä»¶å¼ï¼Œæ¯”如 $\bigl\{{\cdots\atop\cdots}$ 中那样}{}{}
+%\capcs catcode {the category code of a specified character}*{}
+\capcs catcode {指定字符的类别ç }*{}
+%\capcs cdot {centered dot operator: $\cdot$}{}{}
+\capcs cdot {居中点æ“作符:$\cdot$}{}{}
+%\capcs cdotp {centered dot punctuation: $\cdotp$}{}{}
+\capcs cdotp {居中å¥å·ï¼š$\cdotp$}{}{}
+%\capcs cdots {centered dots for math: $\cdots$}{}{}
+\capcs cdots {数学中的居中多点:$\cdots$}{}{}
+%\capcs centerline {produce line with its text centered}{}{}
+\capcs centerline {输出文字居中的行}{}{}
+%\capcs char {produce the character from the current font with the specified
+% code}*{}
+\capcs char {从当å‰å­—体中输出指定编ç çš„字符}*{}
+%\capcs chardef {define a specified control sequence to be a character's
+% code, a number between 0 and $255$}*{}
+\capcs chardef {定义指定控制åºåˆ—,使之æˆä¸º 0 至 $255$ 之间的字符编ç }*{}
+%\capcs check {check accent for math, as in $\check x$}{}{}
+\capcs check {数学中的抑制é‡éŸ³ç¬¦ï¼Œæ¯”如 $\check x$ 中那样}{}{}
+%\capcs chi {math Greek letter $\chi$}{}{}
+\capcs chi {æ•°å­¦å¸Œè…Šå­—æ¯ $\chi$}{}{}
+%\capcs choose {|\char36 n\\choose k\char36| produces combinatorial notation:
+% $n \choose k$}{}{}
+\capcs choose {|\char36 n\\choose k\char36| 输出组åˆæ ‡è®°ï¼š$n \choose k$}{}{}
+%\capcs circ {circle operation: $\circ$}{}{}
+\capcs circ {圆圈æ“作符:$\circ$}{}{}
+%\capcs cleaders {produce leaders with half of leftover space before
+% the first box, and half after the last}*{}
+\capcs cleaders {输出在第一盒å­ä¹‹å‰å’Œæœ€åŽä¸€ä¸ªç›’å­ä¹‹åŽä¿ç•™ä¸€åŠå‰©ä½™ç©ºé—´çš„指引线}*{}
+%\capcs cleartabs {clear all the tabs for tabbing alignments}{}{}
+\capcs cleartabs {为制表阵列清除所有的制表符}{}{}
+%\capcs closein {close a specified input stream}*{}
+\capcs closein {关闭指定的输入æµ}*{}
+%\capcs closeout {close a specified output stream}*{}
+\capcs closeout {关闭指定的输出æµ}*{}
+%\capcs clubpenalty {additional penalty for a single line remaining before
+% a page break, by default~150}*{}
+\capcs clubpenalty {对分页å‰å‰©ä½™å•è¡Œçš„é¢å¤–惩罚,默认值为 150}*{}
+%\capcs clubsuit {club suit symbol: $\clubsuit$}{}{}
+\capcs clubsuit {梅花花色符å·ï¼š$\clubsuit$}{}{}
+%\capcs colon {colon punctation symbol for math: $:$}{}{}
+\capcs colon {数学中的分å·ï¼š$:$}{}{}
+%\capcs cong {congruence relation: $\cong$}{}{}
+\capcs cong {全等关系:$\cong$}{}{}
+%\capcs coprod {coproduct operator: $\coprod$}{}{}
+\capcs coprod {上积è¿ç®—符:$\coprod$}{}{}
+%\capcs copy {like |\\box|, but don't void the register}*{}
+\capcs copy {与 |\\box| 一样,但ä¸ä¼šä½¿å¯„存器失效}*{}
+%\capcs copyright {copyright mark: \copyright}{}{}
+\capcs copyright {版æƒç¬¦å·ï¼š\copyright}{}{}
+%\capcs cos {cosine function: $\cos$}{}{}
+\capcs cos {余弦函数:$\cos$}{}{}
+%\capcs cosh {hyperbolic cosine function: $\cosh$}{}{}
+\capcs cosh {åŒæ›²ä½™å¼¦å‡½æ•°ï¼š$\cosh$}{}{}
+%\capcs cot {cotangent function : $\cot$}{}{}
+\capcs cot {余切函数:$\cot$}{}{}
+%\capcs coth {hyperbolic cotangent function: $\coth$}{}{}
+\capcs coth {åŒæ›²ä½™åˆ‡å‡½æ•°ï¼š$\coth$}{}{}
+%\capcs count {the specified integer register}*{}
+\capcs count {指定的整数寄存器}*{}
+%\capcs countdef {define a specified control sequence to be a number
+% corresponding to a |\\count| register}*{}
+\capcs countdef {定义指定的控制åºåˆ—,使之æˆä¸ºä¸Ž |\\count| 寄存器相对应的数值}*{}
+%\capcs cr {end a row (or column) within an alignment}*{}
+\capcs cr {在对é½ä¸­ç»“æŸä¸€è¡Œï¼ˆæˆ–一列)}*{}
+%\capcs crcr {does nothing if the last command was |\\cr| or |\\noalign|;
+% otherwise, equivalent to |\\cr|}*{}
+\capcs crcr {如果最åŽä¸€ä¸ªå‘½ä»¤æ˜¯ |\\cr| 或 |\\noalign|,则什么也ä¸åšï¼›å¦åˆ™ç­‰åŒäºŽ |\\cr|}*{}
+%\capcs csc {cosecant function: $\csc$}{}{}
+\capcs csc {余割函数:$\csc$}{}{}
+%\capcs csname {start a control sequence name to be ended by |\\endcsname|}*{}
+\capcs csname {开始一个以 |\\endcsname| 结æŸçš„控制åºåˆ—命å}*{}
+%\capcs cup {cup operator: $\cup$}{}{}
+\capcs cup {求并è¿ç®—符:$\cup$}{}{}
+%\capcs d {underdot accent for text, as in \d r}{}{}
+\capcs d {文本中底点é‡éŸ³ç¬¦ï¼Œæ¯”如 \d r 中那样}{}{}
+%\capcs dag {dagger symbol for text: \dag}{}{}
+\capcs dag {文本中的剑形符å·ï¼š\dag}{}{}
+%\capcs dagger {dagger operator for math: $\dagger$}{}{}
+\capcs dagger {数学中的剑形è¿ç®—符:$\dagger$}{}{}
+%\capcs dashv {right turnstile relation: $\dashv$}{}{}
+\capcs dashv {å³å字转门关系:$\dashv$}{}{}
+%\capcs day {current day of the month, as a number}*{}
+\capcs day {月份中的当天,作为一个数字}*{}
+%\capcs ddag {double dagger symbol for text: \ddag}{}{}
+\capcs ddag {文本中的åŒå‰‘形符å·ï¼š\ddag}{}{}
+%\capcs ddagger {double dagger operator for math: $\ddagger$}{}{}
+\capcs ddagger {数学中的åŒå‰‘å½¢è¿ç®—符:$\ddagger$}{}{}
+%\capcs ddot {double dot accent for math: $\ddot x$}{}{}
+\capcs ddot {数学中的åŒç‚¹é‡éŸ³ç¬¦ï¼š$\ddot x$}{}{}
+%\capcs ddots {diagonal dots for math: \smash{$\ddots$}}{}{}
+\capcs ddots {数学中的斜多点:\smash{$\ddots$}}{}{}
+%\capcs deadcycles {number of |\\output| initiations since the last
+% |\\shipout|}*{}
+\capcs deadcycles {è‡ªä»Žæœ€åŽ |\\shipout| åŽçš„ |\\output| åˆå§‹åŒ–数值}*{}
+%\capcs def {define a control sequence to be a macro}*{}
+\capcs def {字义一个控制åºåˆ—,使之æˆä¸ºå®}*{}
+%\capcs defaulthyphenchar {default hyphenation character code}*{}
+\capcs defaulthyphenchar {默认断字字符代ç }*{}
+%\capcs defaultskewchar {default accent skewing character code}*{}
+\capcs defaultskewchar {默认é‡éŸ³ç¬¦å移字符代ç }*{}
+%\capcs deg {degree function: $\deg$}{}{}
+\capcs deg {角度函数:$\deg$}{}{}
+%\capcs delcode {the delimiter code of a specified character}*{}
+\capcs delcode {指定字符的定界符代ç }*{}
+%\capcs delimiter {produce a specified delimiter}*{}
+\capcs 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 delimiterfactor {1000 乘以定界符的最å°å°ºå¯¸ä¸Žå®Œæˆè¦†ç›–å…¬å¼çš„尺寸的比例1000,其默认值为 901}*{}
+%\capcs delimitershortfall {minimum difference between formula height and
+% delimiter height, by default 5\pt}*{}
+\capcs delimitershortfall {å…¬å¼é«˜åº¦ä¸Žåˆ†ç•Œç¬¦é«˜åº¦ä¹‹é—´çš„最å°å·®å¼‚,默认值为 5\pt}*{}
+%\capcs delta {math Greek letter $\delta$}{}{}
+\capcs delta {æ•°å­¦å¸Œè…Šå­—æ¯ $\delta$}{}{}
+%\capcs Delta {math Greek letter $\Delta$}{}{}
+\capcs Delta {æ•°å­¦å¸Œè…Šå­—æ¯ $\Delta$}{}{}
+%\capcs det {determinant function: $\det$}{}{}
+\capcs det {行列å¼å‡½æ•°ï¼š$\det$}{}{}
+%\capcs diamond {diamond operator: $\diamond$}{}{}
+\capcs diamond {è±å½¢è¿ç®—符:$\diamond$}{}{}
+%\capcs diamondsuit {diamond suit symbol: $\diamondsuit$}{}{}
+\capcs diamondsuit {æ–¹å—花色符å·ï¼š$\diamondsuit$}{}{}
+%\capcs dim {dimension function: $\dim$}{}{}
+\capcs dim {维度函数:$\dim$}{}{}
+%\capcs dimen {the specified dimension register}*{}
+\capcs dimen {指定尺寸寄存器}*{}
+%\capcs dimendef {define a specified control sequence to be a number
+% corresponding to a |\\dimen| register}*{}
+\capcs dimendef {定义指定控制åºåˆ—,使之æˆä¸ºå¯¹åº”于 |\\dimen| 寄存器的一个数值}*{}
+%\capcs discretionary {specify three texts, the first two for before and
+% after a line break, the third for no line break}*{}
+\capcs discretionary {指定三个文本,å‰ä¸¤ä¸ªåˆ†åˆ«ç”¨åœ¨åˆ†è¡Œå‰åŽï¼Œç¬¬ä¸‰ä¸ªä¸ºä¸åˆ†è¡Œæ—¶ç”¨}*{}
+%\capcs displayindent {\TeX\ sets this to the indentation of a display}*{}
+\capcs displayindent {\TeX\ 设定该值为陈列公å¼çš„缩进é‡}*{}
+%\capcs displaylimits {place limits above and below operators only in display
+% styles}*{}
+\capcs displaylimits {åªåœ¨é™ˆåˆ—æ ·å¼ä¸­ï¼Œå°†æžé™æ”¾åœ¨è¿ç®—符的上或下}*{}
+%\capcs displaylines {produce specified multiline display with each
+% line centered}{}{}
+\capcs displaylines {输出指定的æ¯è¡Œå±…中的多行显示陈列公å¼}{}{}
+%\capcs displaystyle {use displaystyle size in a formula}*{}
+\capcs displaystyle {在公å¼ä¸­ä½¿ç”¨é™ˆåˆ—æ ·å¼å°ºå¯¸}*{}
+%\capcs displaywidowpenalty {penalty for a single line beginning a page
+% just before a display, by default~50}*{}
+\capcs displaywidowpenalty {在一页开始处å•è¡Œä½äºŽé™ˆåˆ—å…¬å¼å‰çš„惩罚,默认值为 50}*{}
+%\capcs displaywidth {\TeX\ sets this to the width of a display}*{}
+\capcs displaywidth {\TeX\ 该定该值为陈列公å¼çš„宽度}*{}
+%\capcs div {division operator: $\div$}{}{}
+\capcs div {除å·è¿ç®—符:$\div$}{}{}
+%\capcs divide {divide a specified |\\count| register by a specified integer}*{}
+\capcs divide {用指定的 |\\count| 寄存器除以指定的整数}*{}
+%\capcs dot {dot accent for math, as in $\dot x$}{}{}
+\capcs dot {数学中的点é‡éŸ³ç¬¦ï¼Œæ¯”如 $\dot x$ 中那样}{}{}
+%\capcs doteq {dotted equality relation: $\doteq$}{}{}
+\capcs doteq {点等于关系:$\doteq$}{}{}
+%\capcs dotfill {fill enclosing horizontal space with dots}{}{}
+\capcs dotfill {用点填充闭åˆçš„水平间隔}{}{}
+%\capcs dots {ellipsis for sequences: $x_1$, \dots, $x_n$}{}{}
+\capcs dots {åºåˆ—çš„çœç•¥å·ï¼š$x_1$, \dots, $x_n$}{}{}
+%\capcs doublehyphendemerits {demerits for two consecutive lines ending
+% with hyphens, by default~10000}*{}
+\capcs doublehyphendemerits {连续以连字å·ç»“æŸè¡Œçš„处罚,默认为 10000}*{}
+%\capcs downarrow {relation: $\downarrow$}{}{}
+\capcs downarrow {关系:$\downarrow$}{}{}
+%\capcs Downarrow {relation: $\Downarrow$}{}{}
+\capcs Downarrow {关系:$\Downarrow$}{}{}
+%\capcs downbracefill {fill enclosing hbox with a downwards facing brace:
+% \hbox to 3.5em{\downbracefill}}{}{}
+\capcs downbracefill {用开å£å‘下的大括å·å¡«å……é—­åˆçš„ hbox:\hbox to 3.5em{\downbracefill}}{}{}
+%\capcs dp {the depth of the box in a specified box register}*{}
+\capcs dp {指定盒å­å¯„存器中的盒å­çš„深度}*{}
+%\capcs dump {end the job and produce a format file}*{}
+\capcs dump {结æŸä½œä¸šï¼Œå¹¶äº§ç”Ÿæ ¼å¼æ–‡ä»¶}*{}
+%\capcs edef {define a control sequence to be a macro, immediately expanding the
+% replacement text}*{}
+\capcs edef {定义一个控制åºåˆ—,使之æˆä¸ºå®ï¼Œç«‹å³å±•å¼€æ›¿æ¢æ–‡æœ¬}*{}
+%\capcs egroup {implicit end-of-group character}{}{}
+\capcs egroup {éšå¼ç¼–组结æŸå­—符}{}{}
+%\capcs eject {end current paragraph and force a page break,
+% stretching out current page}{}{}
+\capcs eject {结æŸå½“å‰æ®µè½ï¼Œå¹¶å¼ºåˆ¶åˆ†é¡µï¼Œä¼¸å±•å½“å‰é¡µ}{}{}
+%\capcs ell {script letter for math: $\ell$}{}{}
+\capcs ell {数学中的è‰ä¹¦å­—æ¯ï¼š$\ell$}{}{}
+%\capcs else {false or default case alternative for a conditional}*{\@else}
+\capcs else {æ¡ä»¶å¼çš„错误或默认情况下的替æ¢}*{\@else}
+%\capcs emergencystretch {additional stretch added to every line if
+% |\\tol\-er\-ance| is not satisfied}*{}
+\capcs emergencystretch {如果 |\\tol\-er\-ance| 没有得到满足时,加到æ¯è¡Œä¸Šçš„é¢å¤–的伸展}*{}
+%\capcs empty {macro that expands to nothing}{}{}
+\capcs empty {ä¸ä½œä»»ä½•æ‰©å±•çš„å®}{}{}
+%\capcs emptyset {empty set symbol: $\emptyset$}{}{}
+\capcs emptyset {空集符å·ï¼š$\emptyset$}{}{}
+%\capcs end {|\\output| the last page and end the job}*{}
+\capcs end {|\\output| 最åŽä¸€é¡µï¼Œå¹¶ä¸”结æŸä½œä¸š}*{}
+%\capcs endcsname {end a control sequence name started by
+% |\\csname|}*{}
+\capcs endcsname {结æŸä»¥ |\\csname| 开始的控制åºåˆ—å称}*{}
+%\capcs endgraf {equivalent to the |\\par| primitive}{}{}
+\capcs endgraf {ç­‰åŒäºŽåŽŸå§‹çš„ |\\par|}{}{}
+%\capcs endgroup {end a group started by |\\begingroup|}*{}
+\capcs endgroup {结æŸä»¥ |\\begingroup| 开始的编组}*{}
+%\capcs endinput {terminate input from the current file}*{}
+\capcs endinput {结æŸä»Žå½“å‰æ–‡ä»¶ä¸­çš„输入}*{}
+%\capcs endinsert {end insertion}{}{}
+\capcs endinsert {结æŸæ’å…¥}{}{}
+%\capcs endline {equivalent to the |\\cr| primitive}{}{}
+\capcs endline {ç­‰åŒäºŽåŽŸå§‹çš„ |\\cr|}{}{}
+%\capcs endlinechar {character \TeX\ inserts at the end of each input
+% line, by default |\twocarets M|}*{}
+\capcs endlinechar {\TeX\ 在æ¯ä¸ªè¾“入行结尾æ’入的字符,默认为 |\twocarets M|}*{}
+%\capcs enskip {horizontal glue with width \frac1/2\em}{}{}
+\capcs enskip {宽度为 \frac1/2\em 的水平粘连}{}{}
+%\capcs enspace {kern \frac1/2\em}{}{}
+\capcs enspace {\frac1/2\em 紧排}{}{}
+%\capcs epsilon {math Greek letter $\epsilon$}{}{}
+\capcs epsilon {æ•°å­¦å¸Œè…Šå­—æ¯ $\epsilon$}{}{}
+%\capcs eqalign {produce specified multiline display whose indicated parts
+% are vertically aligned}{}{}
+\capcs eqalign {输出指定的多行显示陈列公å¼ï¼Œå…¶æŒ‡å®šéƒ¨åˆ†æ˜¯ç«–直对é½çš„}{}{}
+%\capcs eqalignno {produce specified multiline display
+% with equation numbers whose indicated parts are vertically aligned}{}{}
+\capcs eqalignno {输出带有公å¼ç¼–å·çš„多行陈列公å¼ï¼Œå…¶æŒ‡å®šéƒ¨åˆ†æ˜¯ç«–直对é½çš„}{}{}
+%\capcs eqno {put a specified equation number on the right of a display}*{}
+\capcs eqno {放指定的公å¼ç¼–å·æ”¾åœ¨é™ˆåˆ—å…¬å¼çš„å³ä¾§}*{}
+%\capcs equiv {equivalence relation: $\equiv$}{}{}
+\capcs equiv {等价关系:$\equiv$}{}{}
+%\capcs errhelp {token list whose expansion \TeX\ displays when the user asks
+% for help in response to an |\\errmessage|}*{}
+\capcs errhelp {当用户在é¢å¯¹ |\\errmessage| 寻求帮助时,\TeX\ 展开并显示的记å·åˆ—}*{}
+%\capcs errmessage {give specified error message}*{}
+\capcs errmessage {给出指定的错误信æ¯}*{}
+%\capcs errorcontextlines {the number of lines of context \TeX\
+% displays at an error, by default~5}*{}
+\capcs errorcontextlines {\TeX\ é‡åˆ°é”™è¯¯æ—¶æ˜¾ç¤ºçš„åŒè¡Œä¿¡æ¯çš„数目,默认值为 5}*{}
+%\capcs errorstopmode {stop for interaction at error messages}*{}
+\capcs errorstopmode {在错误信æ¯å¤„åœä¸‹æ¥ç­‰å¾…交互过程}*{}
+%\capcs escapechar {character with which \TeX\ precedes control sequence
+% names that are displayed}*{}
+\capcs escapechar {\TeX\ 显示控制åºåˆ—å称时的å‰å¯¼å­—符}*{}
+%\capcs eta {math Greek letter $\eta$}{}{}
+\capcs eta {æ•°å­¦å¸Œè…Šå­—æ¯ $\eta$}{}{}
+%\capcs everycr {token list \TeX\ expands after a |\\cr|, or a |\\crcr|
+% not following |\\cr| or |\\noalign|}*{}
+\capcs everycr {在 |\\cr| åŽï¼Œæˆ–è€…åœ¨éž |\\cr| 或 |\\noalign| åŽçš„ |\\crcr| åŽ \TeX\ 展开的记å·åˆ—表}*{}
+%\capcs everydisplay {token list \TeX\ expands when a math display begins}*{}
+\capcs everydisplay {任一陈列公å¼å¼€å§‹æ—¶ï¼Œ\TeX\ 展开的记å·åˆ—表}*{}
+%\capcs everyhbox {token list \TeX\ expands when an hbox begins}*{}
+\capcs everyhbox {任一水平盒å­å¼€å§‹æ—¶ï¼Œ\TeX\ 展开的记å·åˆ—表}*{}
+%\capcs everyjob {token list \TeX\ expands when a job begins}*{}
+\capcs everyjob {任一作业开始时,\TeX\ 展开的记å·åˆ—表}*{}
+%\capcs everymath {token list \TeX\ expands when text math mode
+% begins}*{}
+\capcs everymath {当文本数学模å¼å¼€å§‹æ—¶ï¼Œ\TeX\ 展开的记å·åˆ—表}*{}
+%\capcs everypar {token list \TeX\ expands when a paragraph begins}*{}
+\capcs everypar {任一段è½å¼€å§‹æ—¶ï¼Œ\TeX\ 展开的记å·åˆ—表}*{}
+%\capcs everyvbox {token list \TeX\ expands when a vbox begins }*{}
+\capcs everyvbox {任一竖直盒å­å¼€å§‹æ—¶ï¼Œ\TeX\ 展开的记å·åˆ—表}*{}
+%\capcs exhyphenpenalty {additional penalty for a line break after
+% an explicit hyphen, by default~50}*{}
+\capcs exhyphenpenalty {在一显å¼è¿žå­—å·ä¹‹åŽæ–­è¡Œçš„é¢å¤–惩罚,默认值为 50}*{}
+%\capcs exists {``there exists'' symbol: $\exists$}{}{}
+\capcs exists {“那些存在â€ç¬¦å·ï¼š$\exists$}{}{}
+%\capcs exp {exponential function: $\exp$}{}{}
+\capcs exp {指数函数:$\exp$}{}{}
+%\capcs expandafter {expand the next token only after expanding the token
+% following it}*{}
+\capcs expandafter {åªæœ‰åœ¨å±•å¼€äº†ä¸‹ä¸€ä¸ªè®°å·ä¹‹åŽçš„è®°å·åŽæ‰å±•å¼€å®ƒ}*{}
+%\capcs fam {font family \TeX\ uses for characters with class seven
+% (i.e., variables) in math}*{}
+\capcs fam {在数学公å¼ä¸­ï¼Œ\TeX\ 用于第 $7$ 类(å³å˜é‡ï¼‰å­—符的字体æ—}*{}
+%\capcs fi {end a conditional}*{\@fi}
+\capcs fi {结æŸä¸€ä¸ªæ¡ä»¶è¡¨è¾¾å¼}*{\@fi}
+%\capcs filbreak {force a page break unless the text up to another |\\filbreak|
+% also fits on the page}{}{}
+\capcs filbreak {强制分页,除éžæ–‡æœ¬è¾¾åˆ°åˆ«ä¸€ä¸ª |\\filbreak| æ—¶ä»é€‚åˆäºŽæœ¬é¡µ}{}{}
+%\capcs finalhyphendemerits {penalty for the second to last line breaking at a
+% hyphen, by default~5000}*{}
+\capcs finalhyphendemerits {对第二到最åŽä¸€ä¸ªåœ¨è¿žå­—å·å¤„断行的惩罚,默认值为 5000}*{}
+%\capcs firstmark {first mark item on the page just boxed}*{}
+\capcs firstmark {刚处于盒å­å†…的页é¢çš„第一个标记项}*{}
+%\capcs fivebf {use $5$-point bold font, |cmbx5|}{}{}
+\capcs fivebf {使用 $5$-pt 粗字体,|cmbx5|}{}{}
+%\capcs fivei {use $5$-point math italic font, |cmmi5|}{}{}
+\capcs fivei {使用 $5$-pt 数学斜体,|cmmi5|}{}{}
+%\capcs fiverm {use $5$-point roman font, |cmr5|}{}{}
+\capcs fiverm {使用 $5$-pt 罗马字体,|cmr5|}{}{}
+%\capcs fivesy {use $5$-point symbol font, |cmsy5|}{}{}
+\capcs fivesy {使用 $5$-pt 符å·å­—体,|cmsy5|}{}{}
+%\capcs flat {flat symbol for music: $\flat$}{}{}
+\capcs flat {音ä¹ä¸­çš„é™è°ƒç¬¦å·ï¼š$\flat$}{}{}
+%\capcs floatingpenalty {penalty for insertions that are split across
+% pages, by default~0}*{}
+\capcs floatingpenalty {对跨页分裂æ’入的惩罚,默认值为 0}*{}
+%\capcs fmtname {name of the current format}{}{}
+\capcs fmtname {当å‰æ ¼å¼æ–‡ä»¶çš„å称}{}{}
+%\capcs fmtversion {version number of the current format}{}{}
+\capcs fmtversion {当å‰æ ¼å¼æ–‡ä»¶çš„版本å·}{}{}
+%\capcs folio {produce |\\pageno| as characters;
+% in roman numerals if it's negative}{}{}
+\capcs folio {以字符输出 |\\pageno|;如果负值,则输出罗马数字}{}{}
+%\capcs font {define a specified control sequence to select a font}*{}
+\capcs font {定义指定的控制åºåˆ—用于选择字体}*{}
+%\capcs fontdimen {a specified parameter of a specified font}*{}
+\capcs fontdimen {指定字体的指定å‚æ•°}*{}
+%\capcs fontname {produce the filename of a specified font as characters}*{}
+\capcs fontname {以字符形å¼è¾“出指定字体的å称}*{}
+%\capcs footline {token list that produces line at the bottom of each page}{}{}
+\capcs footline {在æ¯é¡µåº•éƒ¨è¾“出线的记å·åˆ—表}{}{}
+%\capcs footnote {produce a specified footnote
+% with a specified reference mark}{}{}
+\capcs footnote {输出带有指定å‚考标记的指定脚注}{}{}
+%\capcs forall {``for all'' symbol: $\forall$}{}{}
+\capcs forall {“全部â€ç¬¦å·ï¼š$\forall$}{}{}
+%\capcs frenchspacing {make interword spacing independent of punctuation}{}{}
+\capcs frenchspacing {使得字间è·ä¸ä¾èµ–于标点符å·}{}{}
+%\capcs frown {frown relation: $\frown$}{}{}
+\capcs frown {frown 关系:$\frown$}{}{}
+%\capcs futurelet {assign the third following token to a specified control
+% sequence, then expand the second following token}*{}
+\capcs futurelet {将其åŽç¬¬ä¸‰ä¸ªè®°å·èµ‹ç»™æŒ‡å®šçš„控制åºåˆ—,éšåŽå±•å¼€å…¶åŽç¬¬äºŒä¸ªè®°å·}*{}
+%\capcs gamma {math Greek letter $\gamma$}{}{}
+\capcs gamma {æ•°å­¦å¸Œè…Šå­—æ¯ $\gamma$}{}{}
+%\capcs Gamma {math Greek letter $\Gamma$}{}{}
+\capcs Gamma {æ•°å­¦å¸Œè…Šå­—æ¯ $\Gamma$}{}{}
+%\capcs gcd {greatest common denominator function: $\gcd$}{}{}
+\capcs gcd {最大公分æ¯å‡½æ•°ï¼š$\gcd$}{}{}
+%\capcs gdef {equivalent to |\\global\\def|, i.e., globally define a macro}*{}
+\capcs gdef {ç­‰åŒäºŽ |\\global\\def|,å³å®šä¹‰å…¨å±€å®}*{}
+%\capcs ge {greater than or equal relation: $\ge$}{}{}
+\capcs ge {大于或等于关系:$\ge$}{}{}
+%\capcs geq {equivalent to |\\ge|}{}{}
+\capcs geq {ç­‰åŒäºŽ |\\ge|}{}{}
+%\capcs gets {gets relation: $\gets$}{}{}
+\capcs gets {获得关系:$\gets$}{}{}
+%\capcs gg {much greater than relation: $\gg$}{}{}
+\capcs gg {远大于关系:$\gg$}{}{}
+%\capcs global {make the following definition global}*{}
+\capcs global {使得éšåŽçš„定义全局化}*{}
+%\capcs globaldefs {overrides |\\global| prefixes on assignments}*{}
+\capcs globaldefs {忽略附加于赋值å‰é¢çš„ |\\global|}*{}
+%\capcs goodbreak {indicate desirable page break with |\\penalty-500|}{}{}
+\capcs goodbreak {表示采用 |\\penalty-500| 的期望的分页}{}{}
+%\capcs grave {grave accent for math, as in $\grave x$}{}{}
+\capcs grave {数学中的抑间符é‡éŸ³ç¬¦ï¼Œæ¯”如 $\grave x$ 中那样}{}{}
+\bookmark{2}{从H到N}%
+%\capcs H {Hungarian umlaut accent for text, as in \H o}{}{}
+\capcs H {文本中匈牙利元音å˜é‡é‡éŸ³ç¬¦ï¼Œæ¯”如 \H o 中那样}{}{}
+%\capcs halign {align text in columns}*{}
+\capcs halign {在列中对é½æ–‡æœ¬}*{}
+%\capcs hang {indent the current paragraph by |\\parindent|}{}{}
+\capcs hang {当å‰æ®µè½ç¼©è¿› |\\parindent|}{}{}
+%\capcs hangafter {starting line number for hanging indentation}*{}
+\capcs hangafter {悬挂缩进开始的行数}*{}
+%\capcs hangindent {space for hanging indentation}*{}
+\capcs hangindent {悬挂缩进的间隔}*{}
+%\capcs hat {hat accent for math, as in $\hat x$}{}{}
+\capcs hat {数学中的帽å­é‡éŸ³ç¬¦ï¼Œæ¯”如 $\hat x$ 中那样}{}{}
+%\capcs hbadness {badness threshold for reporting underfull or overfull
+% hboxes, by default 1000}*{}
+\capcs hbadness {报告未满或过满水平盒å­çš„劣度的阈值,默认值为 1000}*{}
+%\capcs hbar {math symbol: $\hbar$}{}{}
+\capcs hbar {数学符å·ï¼š$\hbar$}{}{}
+%\capcs hbox {produce a specified hbox}*{}
+\capcs hbox {产生指定的 hbox}*{}
+%\capcs headline {token list that produces the line at the
+% top of every page}{}{}
+\capcs headline {在æ¯é¡µé¡¶éƒ¨è¾“出线的记å·åˆ—表}{}{}
+%\capcs heartsuit {heart suit symbol: $\heartsuit$}{}{}
+\capcs heartsuit {心形花色符å·ï¼š$\heartsuit$}{}{}
+%\capcs hfil {produce infinitely stretchable horizontal glue}*{}
+\capcs hfil {输出无é™å¯æ‰©å±•æ°´å¹³ç²˜è¿ž}*{}
+%\capcs hfill {produce horizontal glue even more infinitely stretchable
+% than that produced by |\\hfil|}*{}
+\capcs hfill {输出比 |\\hfil| 更加无é™æ‰©å±•çš„水平粘连}*{}
+%\capcs hfilneg {produce infinitely negative stretchable horizontal glue}*{}
+\capcs hfilneg {输出无é™è´Ÿæ‰©å±•çš„水平粘连}*{}
+%\capcs hfuzz {space threshold for reporting overfull hboxes, by default
+% 0.1\pt}*{}
+\capcs hfuzz {报告过满 hbox 的间隔阈值,其默认值为 0.1\pt}*{}
+%\capcs hglue {produce horizontal glue that doesn't disappear at line
+% breaks}{}{}
+\capcs hglue {输出在断行时ä¸ä¼šæ¶ˆå¤±çš„水平粘连}{}{}
+%\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 hidewidth {在对é½ä¸­å¿½ç•¥ä¸€ä¸ªæ¡ç›®çš„宽度,以致于它å¯ä»¥åœ¨ |\\hidewidth| çš„æ–¹å‘上扩展到盒å­å¤–é¢}{}{}
+%\capcs hoffset {page offset relative to one inch from the paper's left edge}*{}
+\capcs hoffset {从纸张的左边界相对于一英寸的页é¢å移é‡}*{}
+%\capcs holdinginserts {if positive, do not remove insertions from the
+% current page}*{}
+\capcs holdinginserts {如果是正值,将ä¸ä»Žå½“å‰é¡µä¸­ç§»åŽ»æ’å…¥}*{}
+%\capcs hom {homology function: $\hom$}{}{}
+\capcs hom {åŒè°ƒå‡½æ•°ï¼š$\hom$}{}{}
+%\capcs hookleftarrow {relation: $\hookleftarrow$}{}{}
+\capcs hookleftarrow {关系:$\hookleftarrow$}{}{}
+%\capcs hookrightarrow {relation: $\hookrightarrow$}{}{}
+\capcs hookrightarrow {关系:$\hookrightarrow$}{}{}
+%\capcs hphantom {produce an invisible formula with zero height and depth but
+% natural width}{}{}
+\capcs hphantom {产生一个具有自然宽度,但高度与深度å‡ä¸ºé›¶çš„ä¸å¯è§å…¬å¼}{}{}
+%\capcs hrule {produce a horizontal rule; legal only in vertical modes}*{}
+\capcs hrule {产生一个水平标线,åªèƒ½ç”¨äºŽç«–直模å¼ä¸­}*{}
+%\capcs hrulefill {fill enclosing space with a horizontal rule}{}{}
+\capcs hrulefill {使用水平标线填充闭åˆé—´éš”}{}{}
+%\capcs hsize {line length, by default 6.5\thinspace in}*{}
+\capcs hsize {行的长度,默认值为 6.5\thinspace in}*{}
+%\capcs hskip {produce specified horizontal glue}*{}
+\capcs hskip {输出指定的水平粘连}*{}
+%\capcs hss {produce horizontal glue that is infinitely stretchable and
+% infinitely shrinkable}*{}
+\capcs hss {输出å¯æ— é™æ‰©å±•å’Œæ”¶ç¼©çš„水平粘连}*{}
+%\capcs ht {the height of the box in a specified box register}*{}
+\capcs ht {在指定盒å­å¯„存器中盒å­çš„高度}*{}
+%\capcs hyphenation {add specified words to the
+% hyphenation exception dictionary}*{}
+\capcs hyphenation {å‘断字例外字典中加入指定的è¯}*{}
+%\capcs hyphenchar {the hyphenation character in a specified font}*{}
+\capcs hyphenchar {在指定字体中的连字å·}*{}
+%\capcs hyphenpenalty {additional penalty for a line break at a hyphen, by
+% default~50}*{}
+\capcs hyphenpenalty {在连字å·å¤„断行的é¢å¤–惩罚,默认值为 50}*{}
+%\capcs i {dotless letter `\i' for use with accents}{}{}
+\capcs i {与é‡éŸ³ç¬¦ä¸€èµ·ä½¿ç”¨çš„æ— ç‚¹çš„å­—æ¯ `\i'}{}{}
+%\capcs ialign {start an |\\halign| with the |\\tabskip| glue zero and
+% |\\everycr| empty}{}{}
+\capcs ialign {开始一个 |\\tabskip| 粘连为零且 |\\everycr| 为空的 |\\halign|}{}{}
+%\capcs if {test if two specified tokens have the same character code}*{\@if}
+\capcs if {判断两个指定的记å·æ˜¯å¦å…·æœ‰ç›¸åŒçš„字符代ç }*{\@if}
+%\capcs ifcase {expand case $n$ for specified value $n$}*{\@ifcase}
+\capcs ifcase {对于指定的数值 $n$ 展开第 $n$ ç§æƒ…å½¢}*{\@ifcase}
+%\capcs ifcat {test if two specified tokens have the same category
+% code}*{\@ifcat}
+\capcs ifcat {判断两个指定的记å·æ˜¯å¦å…·æœ‰ç›¸åŒçš„类别ç }*{\@ifcat}
+%\capcs ifdim {test for a specified relationship between two specified
+% dimensions}*{\@ifdim}
+\capcs ifdim {为了指定的关系在两个指定尺寸之间判断}*{\@ifdim}
+%\capcs ifeof {test for being at the end of a specified file}*{\@ifeof}
+\capcs ifeof {判断是å¦å¤„在指定文件的结尾处}*{\@ifeof}
+%\capcs iff {if and only if relation: $\iff$}{}{}
+\capcs iff {当且仅当关系:$\iff$}{}{}
+%\capcs iffalse {test that is always false}*{\@iffalse}
+\capcs iffalse {判断æŸç§æƒ…况总是错误的}*{\@iffalse}
+%\capcs ifhbox {test if a specified box register contains an hbox}*{\@ifhbox}
+\capcs ifhbox {判断指定的盒å­å¯„存器是å¦åŒ…å« hbox}*{\@ifhbox}
+%\capcs ifhmode {test if \TeX\ is in a horizontal mode}*{\@ifhmode}
+\capcs ifhmode {判断 \TeX\ 是å¦å¤„于水平模å¼ä¸­}*{\@ifhmode}
+%\capcs ifinner {test if \TeX\ is in an internal mode}*{\@ifinner}
+\capcs ifinner {判断 \TeX\ 是å¦å¤„于内部模å¼ä¸­}*{\@ifinner}
+%\capcs ifmmode {test if \TeX\ is in a math mode}*{\@ifmmode}
+\capcs ifmmode {判断 \TeX\ 是å¦å¤„于数学模å¼ä¸­}*{\@ifmmode}
+%\capcs ifnum {test for a specified relationship
+% between two specified numbers}*{\@ifnum}
+\capcs ifnum {为了指定关系在两个指定数值之间判断}*{\@ifnum}
+%\capcs ifodd {test if a specified number is odd}*{\@ifodd}
+\capcs ifodd {判断指定数值是å¦æ˜¯å¥‡æ•°}*{\@ifodd}
+%\capcs iftrue {test that is always true}*{\@iftrue}
+\capcs iftrue {判断æŸç§æƒ…况总是正错的}*{\@iftrue}
+%\capcs ifvbox {test if a specified box register contains a vbox}*{\@ifvbox}
+\capcs ifvbox {判断指定的盒å­å¯„存器是å¦åŒ…å« vbox}*{\@ifvbox}
+%\capcs ifvmode {test if \TeX\ is in a vertical mode}*{\@ifvmode}
+\capcs ifvmode {判断 \TeX\ 是å¦å¤„于竖直模å¼ä¸­}*{\@ifvmode}
+%\capcs ifvoid {test if a specified box register is void}*{\@ifvoid}
+\capcs ifvoid {判断指定盒å­å¯„存器是å¦æ˜¯æ— æ•ˆçš„}*{\@ifvoid}
+%\capcs ifx {test if two tokens are the same, or if
+% two macros have the same top-level definition}*{\@ifx}
+\capcs ifx {判断两个记å·æ˜¯å¦æ˜¯ç›¸åŒçš„,或两个å®æ˜¯å¦å…·æœ‰ç›¸åŒçš„顶级定义}*{\@ifx}
+%\capcs ignorespaces {ignore any following space tokens}*{}
+\capcs ignorespaces {忽略任何接éšå…¶åŽçš„间隔记å·}*{}
+%\capcs Im {complex imaginary part symbol: $\Im$}{}{}
+\capcs Im {å¤æ•°è™šéƒ¨ç¬¦å·ï¼š$\Im$}{}{}
+%\capcs imath {dotless letter `$\imath$' for use with math accents}{}{}
+\capcs imath {与数学é‡é—´ç¬¦ä¸€èµ·ä½¿ç”¨çš„无点的字符 `$\imath$'}{}{}
+%\capcs immediate {perform the specified file operation without delay}*{}
+\capcs immediate {ä¸ä½œå»¶è¿Ÿåœ°è¿›è¡Œç‰¹å®šçš„文件æ“作}*{}
+%\capcs in {containment relation: $\in$}{}{}
+\capcs in {属于关系:$\in$}{}{}
+%\capcs indent {produce an empty box of width |\\parindent| and enter
+% horizontal mode}*{}
+\capcs indent {输出一个宽度为 |\\parindent| 的空盒å­ï¼Œå¹¶è¿›å…¥æ°´å¹³æ¨¡å¼}*{}
+%\capcs inf {inferior function: $\inf$}{}{}
+\capcs inf {下é™å‡½æ•°ï¼š$\inf$}{}{}
+%\capcs infty {infinity symbol: $\infty$}{}{}
+\capcs infty {æ— é™ç¬¦å·ï¼š$\infty$}{}{}
+%\capcs input {begin to read from a specified file}*{}
+\capcs input {从指定文件开始读入}*{}
+%\capcs inputlineno {the current line number of the current input file}*{}
+\capcs inputlineno {当å‰è¾“入文件的当å‰è¡Œå·}*{}
+%\capcs insert {produce an insertion of a specified class}*{}
+\capcs insert {输出指定类别的æ’å…¥}*{}
+%\capcs insertpenalties {sum of penalties due to insertions}*{}
+\capcs insertpenalties {因为æ’入造æˆçš„惩罚之和}*{}
+%\capcs int {integral symbol: $\int$}{}{}
+\capcs int {积分符å·ï¼š$\int$}{}{}
+%\capcs interlinepenalty {additional penalty for a page break
+% between lines of a paragraph, by default~0}*{}
+\capcs interlinepenalty {段è½çš„行间分页时的é¢å¤–惩罚,默认值为 0}*{}
+%\capcs iota {math Greek letter $\iota$}{}{}
+\capcs iota {æ•°å­¦å¸Œè…Šå­—æ¯ $\iota$}{}{}
+%\capcs it {use italics, i.e., do |\\tenit\\fam=\\itfam|}{}{}
+\capcs it {使用斜体,å³æ‰§è¡Œ |\\tenit\\fam=\\itfam|}{}{}
+%\capcs item {begin a paragraph with hanging indentation of |\\parindent|
+% and preceded by a specified label}{}{}
+\capcs item {开始一个段è½ï¼Œé‡‡ç”¨ |\\parindent| 悬挂缩进,且其å‰æ”¾ç½®æŒ‡å®šçš„标签}{}{}
+%\capcs itemitem {like |\\item|, but with indentation of |2\\parindent|}{}{}
+\capcs itemitem {与 |\\item| 一样,但缩进为 |2\\parindent|}{}{}
+%\capcs itfam {italic family for math}{}{}
+\capcs itfam {数学中的斜体字æ—}{}{}
+%\capcs j {dotless letter `\j', for use with accents}{}{}
+\capcs j {与é‡éŸ³ç¬¦ä¸€èµ·ä½¿ç”¨çš„无点字符 `\j'}{}{}
+%\capcs jmath {dotless letter `$\jmath$' for use with math accents}{}{}
+\capcs jmath {与数学é‡éŸ³ç¬¦ä¸€èµ·ä½¿ç”¨çš„无点字符 `$\jmath$'}{}{}
+%\capcs jobname {base name of the file with which \TeX\ was invoked}*{}
+\capcs jobname {å¼•å‘ \TeX\ 执行的文件的基本å称}*{}
+%\capcs jot {unit of measure for opening up displays}{}{}
+\capcs jot {用于分开陈列公å¼çš„度é‡å•ä½}{}{}
+%\capcs kappa {math Greek letter $\kappa$}{}{}
+\capcs kappa {æ•°å­¦å¸Œè…Šå­—æ¯ $\kappa$}{}{}
+%\capcs ker {kernel function: $\ker$}{}{}
+\capcs ker {核函数:$\ker$}{}{}
+%\capcs kern {produce a specified amount of space at which
+% a break is not allowed}*{}
+\capcs kern {输出指定é‡çš„间隔,在此ä½ç½®ä¸å…许断行}*{}
+%\capcs l {Polish letter: \l}{}{}
+\capcs l {波兰字符:\l}{}{}
+%\capcs L {Polish letter: \L}{}{}
+\capcs L {波兰字符:\L}{}{}
+%\capcs lambda {math Greek letter $\lambda$}{}{}
+\capcs lambda {æ•°å­¦å¸Œè…Šå­—æ¯ $\lambda$}{}{}
+%\capcs Lambda {math Greek letter $\Lambda$}{}{}
+\capcs Lambda {æ•°å­¦å¸Œè…Šå­—æ¯ $\Lambda$}{}{}
+%\capcs land {logical ``and'' operator: $\land$}{}{}
+\capcs land {逻辑“和â€è¿ç®—符:$\land$}{}{}
+%\capcs langle {left angle delimiter: $\langle$}{}{}
+\capcs langle {左角度分界符:$\langle$}{}{}
+%\capcs language {the current set of hyphenation patterns}*{}
+\capcs language {断字模å¼çš„当å‰è®¾ç½®}*{}
+%\capcs lastbox {retrieve and remove the last item from the current list, if
+% it's a box}*{}
+\capcs lastbox {如果是一个盒å­ï¼ŒèŽ·å–并移除当å‰åˆ—表中的最åŽä¸€é¡¹}*{}
+%\capcs lastkern {retrieve the last item from the current list, if it's a
+% kern}*{}
+\capcs lastkern {如果是一个紧排,获å–当å‰åˆ—表中的最åŽä¸€é¡¹}*{}
+%\capcs lastpenalty {retrieve the last item from the current list, if it's a
+% penalty}*{}
+\capcs lastpenalty {如果是一个惩罚,获å–当å‰åˆ—表中的最åŽä¸€é¡¹}*{}
+%\capcs lastskip {retrieve the last item from the current list, if it's
+% glue}*{}
+\capcs lastskip {如果是一个粘连,获å–当å‰åˆ—表中的最åŽä¸€é¡¹}*{}
+%\capcs lbrace {left brace delimiter: $\lbrace$}{}{}
+\capcs lbrace {左大括å·å®šç•Œç¬¦ï¼š$\lbrace$}{}{}
+%\capcs lbrack {left bracket delimiter: $\lbrack$}{}{}
+\capcs lbrack {左方括å·å®šç•Œç¬¦ï¼š$\lbrack$}{}{}
+%\capcs lccode {the character code for the lowercase form of a letter}*{}
+\capcs lccode {å°å†™å­—æ¯çš„字符代ç }*{}
+%\capcs lceil {left ceiling delimiter: $\lceil$}{}{}
+\capcs lceil {左上é™å®šç•Œç¬¦ï¼š$\lceil$}{}{}
+%\capcs ldotp {dot on baseline as punctuation: $\ldotp$}{}{}
+\capcs ldotp {作为标点符å·ï¼Œä½äºŽåŸºçº¿ä¸Šçš„点:$\ldotp$}{}{}
+%\capcs ldots {dots on baseline for math: $\ldots$}{}{}
+\capcs ldots {数学中ä½äºŽåŸºçº¿ä¸Šçš„多点:$\ldots$}{}{}
+%\capcs le {less than or equal relation: $\le$}{}{}
+\capcs le {å°äºŽæˆ–等于关系:$\le$}{}{}
+%\capcs leaders {fill a specified horizontal or vertical space by repeating a
+% specified box or rule}*{}
+\capcs leaders {使用é‡å¤çš„指定的盒å­æˆ–标线对指定水平或竖直间隔填充}*{}
+%\capcs left {produce the specified delimiter, sizing it to cover the
+% following subformula ended by |\\right|}*{}
+\capcs left {输出大å°è¦†ç›–éšåŽçš„å­å…¬å¼ï¼Œç”± |\\right| 结æŸçš„指定的分界符}*{}
+%\capcs leftarrow {relation: $\leftarrow$}{}{}
+\capcs leftarrow {关系:$\leftarrow$}{}{}
+%\capcs Leftarrow {relation: $\Leftarrow$}{}{}
+\capcs Leftarrow {关系:$\Leftarrow$}{}{}
+%\capcs leftarrowfill {fill enclosing hbox with a |\\leftarrow|:
+% \hbox to 3.5em{\leftarrowfill}}{}{}
+\capcs leftarrowfill {使用 |\\leftarrow| å¡«å……é—­åˆçš„ hbox:\hbox to 3.5em{\leftarrowfill}}{}{}
+%\capcs leftharpoondown {relation: $\leftharpoondown$}{}{}
+\capcs leftharpoondown {关系:$\leftharpoondown$}{}{}
+%\capcs leftharpoonup {relation: $\leftharpoonup$}{}{}
+\capcs leftharpoonup {关系:$\leftharpoonup$}{}{}
+%\capcs lefthyphenmin {size of the smallest word fragment \TeX\ allows
+% before a hyphen at the beginning of a word, by default~2}*{}
+\capcs lefthyphenmin {\TeX\ å…许在一个è¯å¼€å§‹å¤„æ’入连字å·çš„最å°è¯ç‰‡æ®µçš„大å°ï¼Œé»˜è®¤å€¼ä¸º 2}*{}
+%\capcs leftline {produce line with its text pushed to left margin}{}{}
+\capcs leftline {输出文字é å·¦è¾¹ç•Œçš„è¡Œ}{}{}
+%\capcs leftrightarrow {relation: $\leftrightarrow$}{}{}
+\capcs leftrightarrow {关系:$\leftrightarrow$}{}{}
+%\capcs Leftrightarrow {relation: $\Leftrightarrow$}{}{}
+\capcs Leftrightarrow {关系:$\Leftrightarrow$}{}{}
+%\capcs leftskip {glue \TeX\ inserts at the left of each line}*{}
+\capcs leftskip {\TeX\ 在æ¯è¡Œå·¦ä¾§æ’入的粘连}*{}
+%\capcs leq {equivalent to |\\le|}{}{}
+\capcs leq {ç­‰åŒäºŽ |\\le|}{}{}
+%\capcs leqalignno {produce specified multiline display with equation numbers
+% on the left whose indicated parts are vertically aligned}{}{}
+\capcs leqalignno {生æˆå…¬å¼ç¼–å·åœ¨å·¦ä¾§ï¼Œä¸”指定部分竖直对é½çš„多行陈列公å¼}{}{}
+%\capcs leqno {put a specified equation number on the left of a display}*{}
+\capcs leqno {在陈列公å¼çš„左侧放置指定的公å¼ç¼–å·}*{}
+%\capcs let {define a control sequence to be the next token}*{}
+\capcs let {定义控制åºåˆ—为éšåŽçš„è®°å·}*{}
+%\capcs lfloor {left floor delimiter: $\lfloor$}{}{}
+\capcs lfloor {左下é™åˆ†ç•Œç¬¦ï¼š$\lfloor$}{}{}
+%\capcs lg {logarithm function: $\lg$}{}{}
+\capcs lg {对数函数:$\lg$}{}{}
+%\capcs lgroup {left group delimiter (the smallest size is shown here):
+% $\Big\lgroup$}{}{}
+\capcs lgroup {左编组定界符(这里显示的是最å°å°ºå¯¸çš„):$\Big\lgroup$}{}{}
+%\capcs lim {limit function: $\lim$}{}{}
+\capcs lim {æžé™å‡½æ•°ï¼š$\lim$}{}{}
+%\capcs liminf {inferior limit function: $\liminf$}{}{}
+\capcs liminf {下æžé™å‡½æ•°ï¼š$\liminf$}{}{}
+%\capcs limits {place superscript above and subscript below a
+% large operator}*{}
+\capcs limits {在一个大的è¿ç®—符的上下放置上标和下标}*{}
+%\capcs limsup {superior limit function: $\limsup$}{}{}
+\capcs limsup {上æžé™å‡½æ•°ï¼š$\limsup$}{}{}
+%\capcs line {produce a justified line of type}{}{}
+\capcs line {输出两端对é½çš„è¡Œ}{}{}
+%\capcs linepenalty {penalty for line breaking added to each line,
+% by default~10}*{}
+\capcs linepenalty {对加到æ¯ä¸€è¡Œçš„断行的惩罚,默认值为 10}*{}
+%\capcs lineskip {vertical glue from one baseline to the next if the
+% lines are closer together than |\\lineskiplimit|, by default 1\pt}*{}
+\capcs lineskip {如果行之间的è·ç¦»å°äºŽ|\\lineskiplimit| 时,从一个基线到å¦ä¸€ä¸ªåŸºçº¿çš„竖直粘连,默认值为 1\pt}*{}
+%\capcs lineskiplimit {threshold for using |\\lineskip| instead of
+% |\\base\-line\-skip|, by default 0\pt}*{}
+\capcs lineskiplimit {采用 |\\lineskip| 而ä¸æ˜¯ |\\base\-line\-skip| 的阈值,默认值为 0\pt}*{}
+%\capcs ll {much less than relation: $\ll$}{}{}
+\capcs ll {è¿œå°äºŽå…³ç³»ï¼š$\ll$}{}{}
+%\capcs llap {produce text (with no width) extending to the left
+% of the current position}{}{}
+\capcs llap {输出å‘当å‰ä½ç½®å·¦ä¾§ä¼¸å±•çš„(没有宽度的)文本}{}{}
+%\capcs lmoustache {top half of a large brace: $\big\lmoustache$}{}{}
+\capcs lmoustache {大的大括å·çš„上åŠéƒ¨åˆ†ï¼š$\big\lmoustache$}{}{}
+%\capcs ln {natural logarithm function: $\ln$}{}{}
+\capcs ln {自然对数函数:$\ln$}{}{}
+%\capcs lnot {logical ``not'' symbol: $\lnot$}{}{}
+\capcs lnot {逻辑“éžâ€ç¬¦å·ï¼š$\lnot$}{}{}
+%\capcs log {logarithm function: $\log$}{}{}
+\capcs log {对数函数:$\log$}{}{}
+%\capcs long {allow |\\par| tokens in the argument(s) of
+% the following definition}*{}
+\capcs long {在éšåŽçš„定义中å…许在å‚数中使用 |\\par| è®°å·}*{}
+%\capcs longleftarrow {relation: $\longleftarrow$}{}{}
+\capcs longleftarrow {关系:$\longleftarrow$}{}{}
+%\capcs Longleftarrow {relation: $\Longleftarrow$}{}{}
+\capcs Longleftarrow {关系:$\Longleftarrow$}{}{}
+%\capcs longleftrightarrow {relation: $\longleftrightarrow$}{}{}
+\capcs longleftrightarrow {关系:$\longleftrightarrow$}{}{}
+%\capcs Longleftrightarrow {relation: $\Longleftrightarrow$}{}{}
+\capcs Longleftrightarrow {关系:$\Longleftrightarrow$}{}{}
+%\capcs longmapsto {relation: $\longmapsto$}{}{}
+\capcs longmapsto {关系:$\longmapsto$}{}{}
+%\capcs longrightarrow {relation: $\longrightarrow$}{}{}
+\capcs longrightarrow {关系:$\longrightarrow$}{}{}
+%\capcs Longrightarrow {relation: $\Longrightarrow$}{}{}
+\capcs Longrightarrow {关系:$\Longrightarrow$}{}{}
+%\capcs loop {start a loop to be ended by |\\repeat|}{}{}
+\capcs loop {开始一个由 |\\repeat| 结æŸçš„循环}{}{}
+%\capcs looseness {difference between the number of lines you want a
+% paragraph to be relative to the optimal number}*{}
+\capcs looseness {一个段è½ä½ å¸Œæœ›çš„行数与最优值之间的差异}*{}
+%\capcs lor {logical ``or'' operator: $\lor$}{}{}
+\capcs lor {逻辑“或â€è¿ç®—符:$\lor$}{}{}
+%\capcs lower {lower a specified box by a specified amount}*{}
+\capcs lower {é™ä½ŽæŒ‡å®šç›’å­æŒ‡å®šçš„数值}*{}
+%\capcs lowercase {convert uppercase letters in the specified text
+% to lowercase}*{}
+\capcs lowercase {将指定文字中的大写字æ¯è½¬åŒ–为å°å†™å­—æ¯}*{}
+%\capcs lq {left quote character for text: \lq}{}{}
+\capcs lq {文本中的左引å·å­—符:\lq}{}{}
+%\capcs mag {$1000$ times the ratio for enlarging all dimensions}*{}
+\capcs mag {放大所有尺寸的比例 $1000$ å€}*{}
+%\capcs magnification {like |\\mag|, but don't enlarge the page size}{}{}
+\capcs magnification {与 |\\mag| 一样,但ä¸æ”¾å¤§é¡µé¢å°ºå¯¸}{}{}
+%\capcs magstep {$1000 \cdot 1.2^n$ for a specified $n$}{}{}
+\capcs magstep {对于指定的 $n$ 得到 $1000 \cdot 1.2^n$}{}{}
+%\capcs magstephalf {$1000\cdot\sqrt{1.2}$}{}{}
+\capcs magstephalf {$1000\cdot\sqrt{1.2}$}{}{}
+%\capcs mapsto {relation: $\mapsto$}{}{}
+\capcs mapsto {关系:$\mapsto$}{}{}
+%\capcs mark {produce a mark item with a specified text}*{}
+\capcs mark {产生采用指定文的标记项目}*{}
+%\capcs mathaccent {put specified math accent over the next character}*{}
+\capcs mathaccent {在接紧的字符上放置指定的数学é‡éŸ³ç¬¦}*{}
+%\capcs mathbin {space a specified subformula as a binary operator}*{}
+\capcs mathbin {åƒäºŒå…ƒè¿ç®—符那样分隔指定的å­å…¬å¼}*{}
+%\capcs mathchar {produce the math character with the specified mathcode}*{}
+\capcs mathchar {输出带有指定数学代ç çš„数学字符}*{}
+%\capcs mathchardef {define a specified control sequence to be a mathcode,
+% a number between 0 and $2^{15}-1$}*{}
+\capcs mathchardef {定义指定的控制åºåˆ—,使之ä½äºŽ 0 至 $2^{15}-1$ 之间的数学代ç }*{}
+%\capcs mathchoice {select one of four specified math subformulas
+% depending on the current style}*{}
+\capcs mathchoice {æ ¹æ®å½“å‰çš„æ ·å¼ä»Žå››ä¸ªæŒ‡å®šçš„æ•°å­¦å­å…¬å¼ä¸­é€‰æ‹©ä¸€ä¸ª}*{}
+%\capcs mathclose {space a specified subformula as a closing delimiter}*{}
+\capcs mathclose {åƒé—­åˆåˆ†ç•Œç¬¦é‚£æ ·åˆ†éš”指定的å­å…¬å¼}*{}
+%\capcs mathcode {the mathcode of a specified character}*{}
+\capcs mathcode {指定字符的数学代ç }*{}
+%\capcs mathinner {space a specified subformula as an inner formula, e.g., a
+% fraction}*{}
+\capcs mathinner {åƒè¡Œé—´åˆ†å¼é‚£æ ·åˆ†éš”指定的å­å…¬å¼}*{}
+%\capcs mathop {space a specified subformula as a large math operator}*{}
+\capcs mathop {åƒå¤§æ•°å­¦è¿ç®—符那样分隔指定的å­å…¬å¼}*{}
+%\capcs mathopen {space a specified subformula as an opening delimiter}*{}
+\capcs mathopen {åƒå¼€æ”¾åˆ†ç•Œç¬¦é‚£æ ·åˆ†éš”指定的å­å…¬å¼}*{}
+%\capcs mathord {space a specified subformula as an ordinary character}*{}
+\capcs mathord {åƒæ™®é€šå­—符那样分隔指定å­å…¬å¼}*{}
+%\capcs mathpalette {produce a |\\mathchoice| which expands a specified
+% control sequence depending on the current style}{}{}
+\capcs mathpalette {输出根æ®å½“å‰æ ·å¼å±•å¼€æŒ‡å®šçš„控制åºåˆ—çš„ |\\mathchoice|}{}{}
+%\capcs mathpunct {space a specified subformula as punctuation}*{}
+\capcs mathpunct {åƒæ ‡ç‚¹ç¬¦å·é‚£æ ·åˆ†éš”指定å­å…¬å¼}*{}
+%\capcs mathrel {space a specified subformula as a relation}*{}
+\capcs mathrel {åƒå…³ç³»é‚£æ ·åˆ†éš”指定å­å…¬å¼}*{}
+%\capcs mathstrut {produce an invisible box with the height and depth of a
+% left parenthesis and no width}{}{}
+\capcs mathstrut {输出深度与高度与左圆括å·ä¸€è‡´ï¼Œä½†å®½åº¦ä¸ºé›¶çš„ä¸å¯è§ç›’å­}{}{}
+%\capcs mathsurround {space \TeX\ kerns before and after math in text}*{}
+\capcs mathsurround {文本中,在数学公å¼å‰åŽåˆ†éš” \TeX\ 紧排}*{}
+%\capcs matrix {produce a specified matrix}{}{}
+\capcs matrix {输出指定矩阵}{}{}
+%\capcs max {maximum function: $\max$}{}{}
+\capcs max {最大化函数:$\max$}{}{}
+%\capcs maxdeadcycles {value of |\\deadcycles| at which \TeX\ complains,
+% and then uses its own output routine, by default~25}*{}
+\capcs maxdeadcycles {\TeX\ ç»™å‡ºè­¦å‘Šï¼Œå¹¶ä½¿ç”¨å…¶è‡ªèº«çš„è¾“å‡ºç¨‹åº |\\deadcycles| 的值默认值为 25}*{}
+%\capcs maxdepth {maximum depth of the bottom box on a page,
+% by default 4\pt}*{}
+\capcs maxdepth {页é¢ä¸Šåº•è¾¹ç›’å­çš„最大深度,默认值为 4\pt}*{}
+%\capcs maxdimen {largest dimension acceptable to \TeX}{}{}
+\capcs maxdimen {\TeX\ å¯æŽ¥å—的最大尺寸}{}{}
+%\capcs meaning {produce the human-understandable meaning of a specified
+% token as characters}*{}
+\capcs meaning {以字符形å¼è¾“出人类能ç†è§£çš„指定记å·çš„æ„义}*{}
+%\capcs medbreak {indicate desirable page
+% break with |\\penalty-100| and produce |\\medskipamount| glue}{}{}
+\capcs medbreak {指定使用 |\\penalty-100| 进行期望分页,并输出 |\\medskipamount| 粘连}{}{}
+%\capcs medmuskip {glue for a medium math space, by default 4\mud\ plus 2\mud\
+% minus 4\mud}*{}
+\capcs medmuskip {中等数学间隔的粘连,默认值为 4\mud\ plus 2\mud\ minus 4\mud}*{}
+%\capcs medskip {produce |\\medskipamount| glue}{}{}
+\capcs medskip {输出 |\\medskipamount| 粘连}{}{}
+%\capcs medskipamount {glue for a medium vertical skip, by default 6\pt
+% plus 2\pt\ minus 2\pt}{}{}
+\capcs medskipamount {中等竖直间隔的粘连,默认值为 6\pt plus 2\pt\ minus 2\pt}{}{}
+%\capcs message {show expansion of the specified text on the terminal}*{}
+\capcs message {展开并显示指定文本到终端上}*{}
+%\capcs mid {middle relation: $\mid$}{}{}
+\capcs mid {中项关系:$\mid$}{}{}
+%\capcs midinsert {produce the specified text at the current position if
+% possible, otherwise at the top of the next page}{}{}
+\capcs midinsert {如果å¯ä»¥æœ‰ï¼Œåœ¨å½“å‰ä½ç½®è¾“出指定文本,å¦åˆ™åœ¨ä¸‹ä¸€é¡µçš„顶部}{}{}
+%\capcs min {minimum function: $\min$}{}{}
+\capcs min {最å°åŒ–函数:$\min$}{}{}
+%\capcs mit {use math italics, i.e., do |\\fam=1|}{}{}
+\capcs mit {使用数学斜体,å³æ‰§è¡Œ |\\fam=1|}{}{}
+%\capcs mkern {produce a specified kern in units of |mu| for math}*{}
+\capcs mkern {数学中以 |mu| 为å•ä½è¾“出指定的紧排}*{}
+%\capcs models {models relation: $\models$}{}{}
+\capcs models {模关系:$\models$}{}{}
+%\capcs month {current month, as a number}*{}
+\capcs month {æ•°å­—å½¢å¼çš„当å‰æœˆä»½}*{}
+%\capcs moveleft {move a specified box left by a specified space; legal
+% only in vertical modes}*{}
+\capcs moveleft {将指定盒å­å‘左移动指定间隔;åªæœ‰ç«–直模å¼ä¸­æœ‰æ•ˆ}*{}
+%\capcs moveright {move a specified box right by a specified space; legal
+% only in vertical modes}*{}
+\capcs moveright {将指定盒å­å‘å³ç§»åŠ¨æŒ‡å®šé—´éš”ï¼›åªæœ‰ç«–直模å¼ä¸­æœ‰æ•ˆ}*{}
+%\capcs mp {minus and plus operator: $\mp$}{}{}
+\capcs mp {å‡å·ä¸ŽåŠ å·è¿ç®—符:$\mp$}{}{}
+%\capcs mskip {produce specified glue in units of |mu| for math}*{}
+\capcs mskip {数学中以|mu| 为å•ä½è¾“出指定的粘连}*{}
+%\capcs mu {math Greek letter $\mu$}{}{}
+\capcs mu {æ•°å­¦å¸Œè…Šå­—æ¯ $\mu$}{}{}
+%\capcs multiply {multiply a specified |\\count| register by a specified
+% integer}*{}
+\capcs multiply {将指定 |\\count| 寄存器乘以指定整数}*{}
+%\capcs multispan {make next alignment entry span a specified number of
+% columns (or rows)}{}{}
+\capcs multispan {使得紧接ç€çš„对é½æ¡ç›®è·¨è¶ŠæŒ‡å®šæ•°ç›®çš„列(或行)}{}{}
+%\capcs muskip {the specified muglue register}*{}
+\capcs muskip {指定的数学粘连寄存器}*{}
+%\capcs muskipdef {define a specified control sequence to be a number
+% corresponding to a |\\muskip| register}*{}
+\capcs muskipdef {定义指定的控制åºåˆ—为一个与 |\\muskip| 寄存器对应的数值}*{}
+%\capcs nabla {backwards difference symbol: $\nabla$}{}{}
+\capcs nabla {相å的微分符å·ï¼š$\nabla$}{}{}
+%\capcs narrower {make both left and right margins narrower by
+% |\\parindent|}{}{}
+\capcs narrower {使得左å³è¾¹ç•Œéƒ½å˜çª„ |\\parindent|}{}{}
+%\capcs natural {natural symbol for music: $\natural$}{}{}
+\capcs natural {音ä¹ä¸­çš„本ä½ç¬¦å·ï¼š$\natural$}{}{}
+%\capcs nearrow {northeast arrow relation: $\nearrow$}{}{}
+\capcs nearrow {东北箭头关系:$\nearrow$}{}{}
+%\capcs ne {not equal relation: $\ne$}{}{}
+\capcs ne {ä¸ç­‰äºŽå…³ç³»ï¼š$\ne$}{}{}
+%\capcs neg {logical ``not'' symbol: $\neg$}{}{}
+\capcs neg {逻辑“éžâ€ç¬¦å·ï¼š$\neg$}{}{}
+%\capcs negthinspace {kern $-\frac1/6$\em}{}{}
+\capcs negthinspace {$-\frac1/6$\em 紧排}{}{}
+%\capcs neq {not equal relation: $\neq$}{}{}
+\capcs neq {ä¸ç­‰äºŽå…³ç³»ï¼š$\neq$}{}{}
+%\capcs newbox {reserve and name a |\\box| register}{}{\@newbox}
+\capcs newbox {ä¿ç•™å¹¶å‘½å |\\box| 寄存器}{}{\@newbox}
+%\capcs newcount {reserve and name a |\\count| register}{}{\@newcount}
+\capcs newcount {ä¿ç•™å¹¶å‘½å |\\count| 寄存器}{}{\@newcount}
+%\capcs newdimen {reserve and name a |\\dimen| register}{}{\@newdimen}
+\capcs newdimen {ä¿ç•™å¹¶å‘½å |\\dimen| 寄存器}{}{\@newdimen}
+%\capcs newfam {reserve and name a math family}{}{\@newfam}
+\capcs newfam {ä¿ç•™å¹¶å‘½å数学字体æ—}{}{\@newfam}
+%\capcs newhelp {name a specified help message}{}{\@newhelp}
+\capcs newhelp {命å指定的帮助信æ¯}{}{\@newhelp}
+%\capcs newif {define a new conditional with the specified name}{}{\@newif}
+\capcs newif {用指定å称定义新的æ¡ä»¶å¼}{}{\@newif}
+%\capcs newinsert {name an insertion class, and reserve a
+% corresponding |\\box|, |\\count|, |\\dimen|, and |\\skip| registers}
+% {}{\@newinsert}
+\capcs newinsert {命åæ’入类,并ä¿ç•™ç›¸åº”çš„ |\\box|ã€|\\count|ã€|\\dimen|å’Œ|\\skip| 寄存器}{}{\@newinsert}
+%\capcs newlanguage {reserve and name a |\\language|}{}{\@newlanguage}
+\capcs newlanguage {ä¿ç•™å¹¶å‘½å |\\language|}{}{\@newlanguage}
+%\capcs newlinechar {end-of-line character for |\\write|, etc.}*{}
+\capcs newlinechar {ç»™ |\\write| 等的行结æŸå­—符}*{}
+%\capcs newmuskip {reserve and name a |\\muskip| register}{}{\@newmuskip}
+\capcs newmuskip {ä¿ç•™å¹¶å‘½å |\\muskip| 寄存器}{}{\@newmuskip}
+%\capcs newread {reserve and name an input stream}{}{\@newread}
+\capcs newread {ä¿ç•™å¹¶å‘½å输入æµ}{}{\@newread}
+%\capcs newskip {reserve and name a |\\skip| register}{}{\@newskip}
+\capcs newskip {ä¿ç•™å¹¶å‘½å |\\skip| 寄存器}{}{\@newskip}
+%\capcs newtoks {reserve and name a |\\toks| register}{}{\@newtoks}
+\capcs newtoks {ä¿ç•™å¹¶å‘½å |\\toks| 寄存器}{}{\@newtoks}
+%\capcs newwrite {reserve and name an output stream}{}{\@newwrite}
+\capcs newwrite {ä¿ç•™å¹¶å‘½å输出æµ}{}{\@newwrite}
+%\capcs ni {``reverse in'' relation: $\ni$}{}{}
+\capcs ni {“åå‘属于â€å…³ç³»ï¼š$\ni$}{}{}
+%\capcs noalign {insert material between rows (or columns) of an
+% alignment}*{}
+\capcs noalign {在对é½çš„行(或列)æ’入其它内容}*{}
+%\capcs noboundary {inhibit ligatures or kerns involving the current font's
+% |boundarychar|}*{}
+\capcs noboundary {ç¦æ­¢ä½¿ç”¨å½“å‰å­—体的边界字符进行连字或紧排}*{}
+%\capcstwo nobreak {do |\\penalty10000|, i.e.,
+% inhibit a line or page break}{}{hnobreak:vnobreak}
+\capcstwo nobreak {执行 |\\penalty10000|,å³ç¦æ­¢æ–­è¡Œæˆ–分页}{}{hnobreak:vnobreak}
+%\capcs noexpand {suppress expansion of the next token}*{}
+\capcs noexpand {抑制下一个记å·çš„展开}*{}
+%\capcs noindent {enter horizontal mode without indenting the paragraph}*{}
+\capcs noindent {进入ä¸ç¼©è¿›æ®µè½çš„水平模å¼}*{}
+%\capcs nointerlineskip {inhibit interline glue before the next line}{}{}
+\capcs nointerlineskip {在下一行å‰ç¦æ­¢è¡Œå†…粘连}{}{}
+%\capcs nolimits {place superscript and subscript after large operators}*{}
+\capcs nolimits {将上下标放在大的è¿ç®—符之åŽ}*{}
+%\capcs nonfrenchspacing {make interword spacing depend on punctuation}{}{}
+\capcs nonfrenchspacing {使字间间隔ä¾èµ–于标点符å·}{}{}
+%\capcs nonscript {inhibit any following glue or kern when
+% in script and scriptscript styles}*{}
+\capcs nonscript {在上下标或次上下标样å¼ä¸­ç¦æ­¢ä»»ä½•éšåŽçš„粘连或紧排}*{}
+%\capcs nonstopmode {don't stop at errors, even those about missing files}*{}
+\capcs nonstopmode {ä¸åœ¨ä»»ä½•é”™è¯¯å¤„åœä¸‹ï¼Œå³ä½¿æ˜¯æœ‰å…³ç¼ºå¤±æ–‡ä»¶çš„错误}*{}
+%\capcs nopagenumbers {inhibit printing of page numbers, i.e., do
+% |\\footline = {\\hfil}|}{}{}
+\capcs nopagenumbers {ç¦æ­¢æ‰“å°å‡ºé¡µç ï¼Œå³æ‰§è¡Œ |\\footline = {\\hfil}|}{}{}
+%\capcs normalbaselines {set |\\baselineskip|, |\\line\-skip|, and
+% |\\line\-skip\-limit| to the normal values for the current type size}{}{}
+\capcs normalbaselines {å°† |\\baselineskip|ã€|\\line\-skip| å’Œ |\\line\-skip\-limit| 设为当å‰å­—体大å°çš„正常值}{}{}
+%\capcs normalbaselineskip {value of |\\baselineskip| for the
+% current type size}{}{}
+\capcs normalbaselineskip {针对当å‰å­—体大å°çš„ |\\baselineskip| 值}{}{}
+%\capcs normalbottom {make the bottom margin be the same from page to page}{}{}
+\capcs normalbottom {使得底边è·ä»Žä¸€é¡µåˆ°å¦ä¸€é¡µæ˜¯ç›¸åŒçš„}{}{}
+%\capcs normallineskip {value of |\\lineskip| for the current type
+% size}{}{}
+\capcs normallineskip {针对当å‰å­—体大å°çš„ |\\lineskip| 值}{}{}
+%\capcs normallineskiplimit {value of |\\lineskiplimit| for the
+% current type size}{}{}
+\capcs normallineskiplimit {针对当å‰å­—体大å°çš„ |\\lineskiplimit| 值}{}{}
+%\capcs not {a slash with zero width for constructing negations of math
+% relations, as in $\not=$}{}{}
+\capcs not {宽度为零的斜æ ï¼Œç”¨äºŽæž„建数学关系的å¦å®šå½¢å¼ï¼Œæ¯”如 $\not=$ 中那样}{}{}
+%\capcs notin {noninclusion relation: $\notin$}{}{}
+\capcs notin {éžåŒ…å«å…³ç³»ï¼š$\notin$}{}{}
+%\capcs nu {math Greek letter $\nu$}{}{}
+\capcs nu {æ•°å­¦å¸Œè…Šå­—æ¯ $\nu$}{}{}
+%\capcs null {expands to an empty hbox}{}{}
+\capcs null {展开为空的 hbox}{}{}
+%\capcs nulldelimiterspace {space produced by a null delimiter, by
+% default 1.2\pt}*{}
+\capcs nulldelimiterspace {由空的定界符产生的间隔,默认值为 1.2\pt}*{}
+%\capcs nullfont {primitive font with no characters in it}*{}
+\capcs nullfont {没有字符的原始字体}*{}
+%\capcs number {produce a specified number as characters}*{}
+\capcs number {以字符形å¼è¾“出指定的数值}*{}
+%\capcs nwarrow {northwest arrow relation: $\nwarrow$}{}{}
+\capcs nwarrow {西北箭头关系:$\nwarrow$}{}{}
+\bookmark{2}{从O到T}%
+%\capcs o {Danish letter: \o}{}{}
+\capcs o {丹麦语字æ¯ï¼š\o}{}{}
+%\capcs O {Danish letter: \O}{}{}
+\capcs O {丹麦语字æ¯ï¼š\O}{}{}
+%\capcs obeylines {make each end-of-line in the input file
+% equivalent to |\\par|}{}{}
+\capcs obeylines {使得输入文件中的æ¯ä¸ªè¡Œç»“æŸç¬¦å·ç­‰åŒäºŽ |\\par|}{}{}
+%\capcs obeyspaces {produce space in the output for each space character in the
+% input}{}{}
+\capcs obeyspaces {对于输入中的æ¯ä¸ªé—´éš”字符在输出文件中输出间隔}{}{}
+%\capcs odot {centered dot operation: $\odot$}{}{}
+\capcs odot {居中的点è¿ç®—符:$\odot$}{}{}
+%\capcs oe {\oe\ ligature}{}{}
+\capcs oe {\oe\ è¿žå­—}{}{}
+%\capcs OE {\OE\ ligature}{}{}
+\capcs OE {\OE\ è¿žå­—}{}{}
+%\capcs offinterlineskip {inhibit interline glue from now on}{}{}
+\capcs offinterlineskip {从现在开始ç¦æ­¢è¡Œé—´ç²˜è¿ž}{}{}
+%\capcs oint {contour integral operator: $\oint$}{}{}
+\capcs oint {围线积分è¿ç®—符:$\oint$}{}{}
+%\capcs oldstyle {use old style digits: {\oldstyle1234567890}}{}{}
+\capcs oldstyle {使用å¤ä½“数字:{\oldstyle1234567890}}{}{}
+%\capcs omega {math Greek letter $\omega$}{}{}
+\capcs omega {æ•°å­¦å¸Œè…Šå­—æ¯ $\omega$}{}{}
+%\capcs Omega {math Greek letter $\Omega$}{}{}
+\capcs Omega {æ•°å­¦å¸Œè…Šå­—æ¯ $\Omega$}{}{}
+%\capcs ominus {circled minus operator: $\ominus$}{}{}
+\capcs ominus {圈å‡å·è¿ç®—符:$\ominus$}{}{}
+%\capcs omit {skip a column's (or row's) template in an alignment}*{}
+\capcs omit {在对é½ä¸­å¿½ç•¥åˆ—的(或行的)模æ¿}*{}
+%\capcs openin {prepare a specified input stream to read from a file}*{}
+\capcs openin {准备指定的输入æµä»¥ä»Žæ–‡ä»¶ä¸­è¯»å…¥}*{}
+%\capcs openout {prepare a specified output stream to write to a file}*{}
+\capcs openout {准备指定的输出æµä»¥å‘文件中写入}*{}
+%\capcs openup {increase |\\baselineskip|, |\\lineskip|, and
+% |\\lineskiplimit| by a specified amount}{}{}
+\capcs openup {使 |\\baselineskip|ã€|\\lineskip| å’Œ |\\lineskiplimit| 增加指定的é‡}{}{}
+%\capcs oplus {circled plus operator: $\oplus$}{}{}
+\capcs oplus {圈加å·è¿ç®—符:$\oplus$}{}{}
+%\capcs or {separate the cases of an |\\ifcase|}*{\@or}
+\capcs or {用于分隔 |\\ifcase| 的情形}*{\@or}
+%\capcs oslash {circled slash operator: $\oslash$}{}{}
+\capcs oslash {圈斜线è¿ç®—符:$\oslash$}{}{}
+%\capcs otimes {circled times operator: $\otimes$}{}{}
+\capcs otimes {圈乘å·è¿ç®—符:$\otimes$}{}{}
+%\capcs outer {make the following macro definition illegal in contexts in
+% which tokens are absorbed at high speed}*{}
+\capcs outer {使得éšåŽçš„å®å®šä¹‰åœ¨ä»¥é«˜é€Ÿè¯»å…¥çš„è®°å·æƒ…形下无效}*{}
+%\capcs output {token list \TeX\ expands when it finds a page break}*{}
+\capcs output {当é‡åˆ°åˆ†é¡µæ—¶ \TeX\ 展开的记å·åˆ—表}*{}
+%\capcs outputpenalty {if the page break occurred at a penalty, the value
+% of that penalty; otherwise zero}*{}
+\capcs outputpenalty {如果分页å‘生于惩罚处,则为惩罚的值,å¦åˆ™ä¸ºé›¶}*{}
+%\capcs over {produce a fraction with a bar of default thickness}*{}
+\capcs over {输出一个带有默认厚度横线的分å¼}*{}
+%\capcs overbrace {produce a brace covering the top of a formula,
+% as in $\overbrace{h+w}{}$}{}{}
+\capcs overbrace {输出一个覆盖于公å¼é¡¶éƒ¨çš„大括å·ï¼Œæ¯”如 $\overbrace{h+w}{}$ 中那样}{}{}
+%\capcs overfullrule {width of the rule appended to an overfull box}*{}
+\capcs overfullrule {附加于过满盒å­çš„标线的宽度}*{}
+%\capcs overleftarrow {produce a left arrow covering the top of
+% a formula, as in $\overleftarrow{r+a}$}{}{}
+\capcs overleftarrow {输出一个覆盖于公å¼é¡¶éƒ¨çš„å‘左的箭头,比如 $\overleftarrow{r+a}$ 中那样}{}{}
+%\capcs overline {produce a line covering the top of a formula,
+% as in $\overline{2b}$}*{}
+\capcs overline {输出一个覆盖于公å¼é¡¶éƒ¨çš„直线,比如 $\overline{2b}$ 中那样}*{}
+%\capcs overrightarrow {produce a right arrow covering the top of a
+% formula, as in $\overrightarrow{i+t}$}{}{}
+\capcs overrightarrow {输出一个覆盖于公å¼é¡¶éƒ¨çš„å‘å³çš„箭头,比如 $\overrightarrow{i+t}$ 中那样}{}{}
+%\capcs overwithdelims {produce a fraction with a bar of the default thickness
+% and surrounded by specified delimiters}*{}
+\capcs overwithdelims {输出一个带有默认厚度横线,且被指定分界符包围的分å¼}*{}
+%\capcs owns {owns relation: $\owns$}{}{}
+\capcs owns {固有关系:$\owns$}{}{}
+%\capcs P {paragraph character for text: \P}{}{}
+\capcs P {文本中的段è½å­—符:\P}{}{}
+%\capcs pagedepth {\TeX\ sets this to the current depth of the current
+% page}*{}
+\capcs pagedepth {\TeX\ 将其设置为当å‰é¡µçš„å°–å‰æ·±åº¦}*{}
+%\capcs pagefilllstretch {\TeX\ sets this to the amount of |filll| stretch on
+% the current page}*{}
+\capcs pagefilllstretch {\TeX\ 将其设置为在当å‰é¡µçš„ |filll| 扩展é‡}*{}
+%\capcs pagefillstretch {\TeX\ sets this to the amount of |fill| stretch on
+% the current page}*{}
+\capcs pagefillstretch {\TeX\ 将其设置为在当å‰é¡µçš„ |fill| 扩展é‡}*{}
+%\capcs pagefilstretch {\TeX\ sets this to the amount of |fil| stretch on the
+% current page}*{}
+\capcs pagefilstretch {\TeX\ 将其设置为在当å‰é¡µçš„ |fil| 扩展é‡}*{}
+%\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 pagegoal {\TeX\ 将其设置为当å‰é¡µçš„æœŸæœ›é«˜åº¦ï¼ˆå³ |\\vsize|,当第一个盒被放在该页时)}*{}
+%\capcs pageinsert {produce the specified text on the following page, and use up
+% the full page}{}{}
+\capcs pageinsert {在éšåŽçš„页é¢è¾“出指定的文本,并用完整页}{}{}
+%\capcs pageno {the register |\\count0|, which contains the
+% (possibly negative) page number}{}{}
+\capcs pageno {|\\count0| 寄存器,它包括(å¯èƒ½æ˜¯è´Ÿçš„)页ç }{}{}
+%\capcs pageshrink {\TeX\ sets this to the total amount of shrinkability
+% on the current page}*{}
+\capcs pageshrink {\TeX\ 将其设置为在当å‰é¡µé¢æ€»çš„å¯æ”¶ç¼©é‡}*{}
+%\capcs pagestretch {\TeX\ sets this to the total amount of stretchability
+% on the current page}*{}
+\capcs pagestretch {\TeX\ 将其设置为在当å‰é¡µé¢æ€»çš„å¯ä¼¸å±•é‡}*{}
+%\capcs pagetotal {\TeX\ sets this to the natural height of the current
+% page}*{}
+\capcs pagetotal {\TeX\ 将其设置为当å‰é¡µçš„自然高度}*{}
+%\capcs par {finish paragraph and terminate horizontal mode}*{\@par}
+\capcs par {结æŸæ®µè½å¹¶ç»“æŸæ°´å¹³æ¨¡å¼}*{\@par}
+%\capcs parallel {parallel relation: $\parallel$}{}{}
+\capcs parallel {平行关系:$\parallel$}{}{}
+%\capcs parfillskip {horizontal glue \TeX\ inserts at the end of a
+% paragraph}*{}
+\capcs parfillskip {\TeX\ 在段è½ç»“æŸå¤„æ’入的水平粘连}*{}
+%\capcs parindent {horizontal space \TeX\ inserts at the start of a
+% paragraph}*{}
+\capcs parindent {\TeX\ 在段è½å¼€å§‹å¤„æ’入的水平间è·}*{}
+%\capcs parshape {specify the width and length of each line
+% in the next paragraph}*{}
+\capcs parshape {指定下一段è½ä¸­æ¯è¡Œçš„宽度与长度}*{}
+%\capcs parskip {vertical glue \TeX\ inserts before a paragraph}*{}
+\capcs parskip {\TeX\ 在段è½å‰æ’入的竖直粘连}*{}
+%\capcs partial {partial derivative symbol: $\partial$}{}{}
+\capcs partial {å微分符å·ï¼š$\partial$}{}{}
+%\capcs pausing {if positive, stop after reading each line of input for a
+% possible replacement}*{}
+\capcs pausing {如果是正值,在读入æ¯ä¸€è¡ŒåŽåœä¸‹æ¥ä»¥ä¾¿è¿›è¡Œå¯èƒ½çš„替æ¢}*{}
+%\capcstwo penalty {produce penalty (or bonus, if negative) for breaking
+% line or page here}*{hpenalty:vpenalty}
+\capcstwo penalty {输出在此处断行或分页的惩罚(或奖励,如果是负值)}*{hpenalty:vpenalty}
+%\capcs perp {perpendicular relation: $\perp$}{}{}
+\capcs perp {垂直关系:$\perp$}{}{}
+%\capcs phantom {produce an invisible formula with the
+% dimensions of a specified subformula}{}{}
+\capcs phantom {输出指定å­å…¬å¼å¤§å°çš„ä¸å¯è§å…¬å¼}{}{}
+%\capcs phi {math Greek letter $\phi$}{}{}
+\capcs phi {æ•°å­¦å¸Œè…Šå­—æ¯ $\phi$}{}{}
+%\capcs Phi {math Greek letter $\Phi$}{}{}
+\capcs Phi {æ•°å­¦å¸Œè…Šå­—æ¯ $\Phi$}{}{}
+%\capcs pi {math Greek letter $\pi$}{}{}
+\capcs pi {æ•°å­¦å¸Œè…Šå­—æ¯ $\pi$}{}{}
+%\capcs Pi {math Greek letter $\Pi$}{}{}
+\capcs Pi {æ•°å­¦å¸Œè…Šå­—æ¯ $\Pi$}{}{}
+%\capcs plainoutput {\plainTeX's |\\output| routine}{}{}
+\capcs plainoutput {\plainTeX çš„ |\\output| 程åº}{}{}
+%\capcs pm {plus and minus operator: $\pm$}{}{}
+\capcs pm {加å‡è¿ç®—符:$\pm$}{}{}
+%\capcs pmatrix {produce a parenthesized matrix}{}{}
+\capcs pmatrix {输出带圆括å·çš„矩阵}{}{}
+%\capcs pmod {parenthesized modulus notation to put at the end of a formula, as
+% in $x \equiv y+1 \pmod 2$}{}{}
+\capcs pmod {放置于公å¼ç»“尾处的带圆括å·çš„模数标记,比如 $x \equiv y+1 \pmod 2$ 中那样}{}{}
+%\capcs postdisplaypenalty {additional penalty for a line break
+% just after a display, by default~0}*{}
+\capcs postdisplaypenalty {æ°å¥½åœ¨æ˜¾ç¤ºé™ˆåˆ—å…¬å¼ä¹‹åŽçš„断行的é¢å¤–惩罚,其默认值为 0}*{}
+%\capcs Pr {probability function: $\Pr$}{}{}
+\capcs Pr {概率函数:$\Pr$}{}{}
+%\capcs prec {precedes relation: $\prec$}{}{}
+\capcs prec {优先关系:$\prec$}{}{}
+%\capcs preceq {precedes or equals relation: $\preceq$}{}{}
+\capcs preceq {优先或等于关系:$\preceq$}{}{}
+%\capcs predisplaypenalty {additional penalty for a line break just
+% before a display, by default~0}*{}
+\capcs predisplaypenalty {æ°å¥½åœ¨é™ˆåˆ—å…¬å¼ä¹‹å‰æ–­è¡Œçš„é¢å¤–惩罚,其默认值为 0}*{}
+%\capcs predisplaysize {\TeX\ sets this to the width of the
+% line preceding a display}*{}
+\capcs predisplaysize {\TeX\ 将其设置为显示陈列公å¼ä¹‹å‰çš„行的宽度}*{}
+%\capcs pretolerance {badness tolerance for line breaks without
+% hyphenation, by default~100}*{}
+\capcs pretolerance {ä¸æ–­å­—断行时劣度的容许值,默认值为 100}*{}
+%\capcs prevdepth {depth of the last nonrule box on the
+% current vertical list}*{}
+\capcs prevdepth {在当å‰ç«–直列表中最åŽä¸€ä¸ªéžæ ‡çº¿ç›’å­çš„深度}*{}
+%\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 prevgraf {\TeX\ 将其设置为当å‰æ®µè½ï¼ˆæ°´å¹³æ¨¡å¼ä¸‹ï¼‰æˆ–å‰ä¸€æ®µè½ï¼ˆç«–直模å¼ä¸‹ï¼‰çš„行数}*{}
+%\capcs prime {prime math symbol, as in $r^\prime$}{}{}
+\capcs prime {质数数学符å·ï¼Œæ¯”如 $r^\prime$ 中那样}{}{}
+%\capcs proclaim {begin a theorem, lemma, hypothesis, $\ldots$}{}{\@proclaim}
+\capcs proclaim {开始定ç†ã€å¼•ç†ã€å‡è®¾ $\ldots$}{}{\@proclaim}
+%\capcs prod {large product operator: $\prod$}{}{}
+\capcs prod {大的乘积è¿ç®—符:$\prod$}{}{}
+%\capcs propto {proportional to relation: $\propto$}{}{}
+\capcs propto {比例关系:$\propto$}{}{}
+%\capcs psi {math Greek letter $\psi$}{}{}
+\capcs psi {æ•°å­¦å¸Œè…Šå­—æ¯ $\psi$}{}{}
+%\capcs Psi {math Greek letter $\Psi$}{}{}
+\capcs Psi {æ•°å­¦å¸Œè…Šå­—æ¯ $\Psi$}{}{}
+%\capcs qquad {produce horizontal glue with width 2\em}{}{}
+\capcs qquad {输出宽度为 2\em 的水平粘连}{}{}
+%\capcs quad {produce horizontal glue with width 1\em}{}{}
+\capcs quad {输出宽度为 1\em 的水平粘连}{}{}
+%\capcs radical {produce a specified radical symbol}*{}
+\capcs radical {输出指定根å·ç¬¦å·}*{}
+%\capcs raggedbottom {allow the bottom margin to vary from page to page}{}{}
+\capcs raggedbottom {å…许底边è·åœ¨é¡µä¸Žé¡µé—´å˜åŒ–}{}{}
+%\capcs raggedright {allow the right margin to vary from line to line}{}{}
+\capcs raggedright {å…许å³è¾¹è·åœ¨è¡Œä¸Žè¡Œé—´å˜åŒ–}{}{}
+%\capcs raise {raise a specified box by a specified amount}*{}
+\capcs raise {将指定盒å­å‡é«˜æŒ‡å®šçš„é‡}*{}
+%\capcs rangle {right angle delimiter: $\rangle$}{}{}
+\capcs rangle {å³è§’度分界符:$\rangle$}{}{}
+%\capcs rbrace {right brace delimiter: $\rbrace$}{}{}
+\capcs rbrace {å³å¤§æ‹¬å·åˆ†ç•Œç¬¦$\rbrace$}{}{}
+%\capcs rbrack {right bracket delimiter: $\rbrack$}{}{}
+\capcs rbrack {å³æ–¹æ‹¬å·åˆ†ç•Œç¬¦ï¼š$\rbrack$}{}{}
+%\capcs rceil {right ceiling delimiter: $\rceil$}{}{}
+\capcs rceil {å³ä¸Šé™åˆ†ç•Œç¬¦ï¼š$\rceil$}{}{}
+%\capcs Re {complex real part symbol: $\Re$}{}{}
+\capcs Re {å¤æ•°å®žæ•°éƒ¨åˆ†ç¬¦å·ï¼š$\Re$}{}{}
+%\capcs read {read a line from a specified input stream}*{}
+\capcs read {从指定输入æµä¸­è¯»å…¥è¡Œ}*{}
+%\capcs relax {do nothing}*{}
+\capcs relax {什么也ä¸åš}*{}
+%\capcs relpenalty {additional penalty for breaking after a relation,
+% by default~500}*{}
+\capcs relpenalty {在关系åŽçš„断行或分页的é¢å¤–惩罚,默认值为 500}*{}
+%\capcs repeat {end a loop started with |\\loop|}{}{\@repeat}
+\capcs repeat {结æŸä¸€ä¸ªä»¥ |\\loop| 开始的循环}{}{\@repeat}
+%\capcs rfloor {right floor delimiter: $\rfloor$}{}{}
+\capcs rfloor {å³ä¸‹é™åˆ†ç•Œç¬¦ï¼š$\rfloor$}{}{}
+%\capcs rgroup {right group delimiter (the smallest size is shown here):
+% $\Big\rgroup$}{}{}
+\capcs rgroup {å³ç¼–组定界符(这里显示的是最å°å°ºå¯¸çš„):$\Big\rgroup$}{}{}
+%\capcs rho {math Greek letter $\rho$}{}{}
+\capcs rho {æ•°å­¦å¸Œè…Šå­—æ¯ $\rho$}{}{}
+%\capcs right {produce the specified delimiter at the right end of a
+% subformula started with |\\left|}*{}
+\capcs right {在å­å…¬å¼å³ä¾§è¾“出由 |\\left| 开始的指定的分界符}*{}
+%\capcs rightarrow {relation: $\rightarrow$}{}{}
+\capcs rightarrow {关系:$\rightarrow$}{}{}
+%\capcs Rightarrow {relation: $\Rightarrow$}{}{}
+\capcs Rightarrow {关系:$\Rightarrow$}{}{}
+%\capcs rightarrowfill {fill enclosing hbox with a |\\rightarrow|:
+% \hbox to 3.5em{\rightarrowfill}}{}{}
+\capcs rightarrowfill {使用 |\\rightarrow| 填充所在的水平盒å­ï¼š\hbox to 3.5em{\rightarrowfill}}{}{}
+%\capcs rightharpoondown {relation: $\rightharpoondown$}{}{}
+\capcs rightharpoondown {关系:$\rightharpoondown$}{}{}
+%\capcs rightharpoonup {relation: $\rightharpoonup$}{}{}
+\capcs rightharpoonup {关系:$\rightharpoonup$}{}{}
+%\capcs rightleftharpoons {relation: $\rightleftharpoons$}{}{}
+\capcs rightleftharpoons {关系:$\rightleftharpoons$}{}{}
+%\capcs rightline {produce line with its text pushed to right margin}{}{}
+\capcs rightline {输出文字é å³è¾¹ç•Œçš„è¡Œ}{}{}
+%\capcs rightskip {glue \TeX\ inserts at the right of each line}*{}
+\capcs rightskip {\TeX\ 在æ¯è¡Œå³ä¾§æ’入的粘连}*{}
+%\capcs righthyphenmin {size of the smallest word fragment \TeX\ allows
+% after a hyphen at the end of a word, by default~3}*{}
+\capcs righthyphenmin {\TeX\ å…许的å•è¯ç»“尾在连字å·ä¹‹åŽçš„最å°ç‰‡æ–­çš„大å°ï¼Œé»˜è®¤å€¼ä¸º 3}*{}
+%\capcs rlap {produce text (with no width) extending to the right
+% of the current position}{}{}
+\capcs rlap {在当å‰ä½ç½®çš„å³ä¾§è¾“出(没有宽度的)文本}{}{}
+%\capcs rm {use roman type, i.e., do |\\tenrm\\fam=0|}{}{}
+\capcs rm {使用罗马体,å³å¾ˆæ‰§è¡Œ |\\tenrm\\fam=0|}{}{}
+%\capcs rmoustache {bottom half of a large brace: $\big\rmoustache$}{}{}
+\capcs rmoustache {大的大括å·çš„下åŠéƒ¨åˆ†ï¼š$\big\rmoustache$}{}{}
+%\capcs romannumeral {produce the lowercase roman numeral representation of a
+% specified number as characters}{}{}
+\capcs romannumeral {以字符的形å¼è¾“出指定数值的å°å†™ç½—马数值表示}{}{}
+%\capcs root {produce a specified root of a specified subformula, as in
+% $\root 3 \of 2$}{}{}
+\capcs root {输出一指定å­å…¬å¼çš„指定根,比如 $\root 3 \of 2$ 中那样}{}{}
+%\capcs rq {right quote character for text: \rq}{}{}
+\capcs rq {文本中的å³å¼•å·ï¼š\rq}{}{}
+%\capcs S {section character for text: \S}{}{}
+\capcs S {文本中的å°èŠ‚字符:\S}{}{}
+%\capcs sb {implicit subscript character}{}{}
+\capcs sb {éšå¼ä¸‹æ ‡å­—符}{}{}
+%\capcs scriptfont {the script style font in a specified math family}*{}
+\capcs scriptfont {在指定数学字体æ—中的上下标样å¼å­—体}*{}
+%\capcs scriptscriptfont {the scriptscript style font in a specified
+% math family}*{}
+\capcs scriptscriptfont {在指定数学字体æ—中的次上下标样å¼å­—体}*{}
+%\capcs scriptscriptstyle {use scriptscriptstyle size in a formula}*{}
+\capcs scriptscriptstyle {在公å¼ä¸­ä½¿ç”¨æ¬¡ä¸Šä¸‹æ ‡æ ·å¼å°ºå¯¸}*{}
+%\capcs scriptspace {additional space \TeX\ kerns after a subscript or
+% superscript, by default 0.5\pt}*{}
+\capcs scriptspace {\TeX\ 在下标或上标之åŽåŠ å…¥çš„é¢å¤–的紧排,默认值为 0.5\pt}*{}
+%\capcs scriptstyle {use scriptstyle size in a formula}*{}
+\capcs scriptstyle {在公å¼ä¸­ä½¿ç”¨ä¸Šä¸‹æ ‡æ ·å¼å°ºå¯¸}*{}
+%\capcs scrollmode {don't stop at most errors, but do stop at errors
+% about missing files}*{}
+\capcs scrollmode {ä¸åœ¨ä»»ä½•é”™è¯¯å¤„åœä¸‹ï¼Œä½†åœ¨ç¼ºå¤±æ–‡ä»¶é”™è¯¯å¤„åœä¸‹}*{}
+%\capcs searrow {southeast arrow relation: $\searrow$}{}{}
+\capcs searrow {东å—箭头关系:$\searrow$}{}{}
+%\capcs sec {secant function: $\sec$}{}{}
+\capcs sec {正切函数:$\sec$}{}{}
+%\capcs setbox {define a specified box register to be a box}*{}
+\capcs setbox {定义指定的盒å­å¯„存器使之æˆä¸ºç›’å­}*{}
+%\capcs setlanguage {change to a specified set of hyphenation rules, but
+% don't change |\\language|}{*}{}
+\capcs setlanguage {改å˜åˆ°æ–­å­—规则的指定集åˆï¼Œä½†ä¸æ”¹å˜ |\\language|}{*}{}
+%\capcs setminus {set difference operator: $\setminus$}{}{}
+\capcs setminus {差集è¿ç®—符:$\setminus$}{}{}
+%\capcs settabs {define the tabs for a tabbing alignment}{}{}
+\capcs settabs {为制表符对é½å®šä¹‰åˆ¶è¡¨ç¬¦}{}{}
+%\capcs sevenbf {use $7$-point bold font, |cmbx7|}{}{}
+\capcs sevenbf {使用 $7$-pt 粗字体,|cmbx7|}{}{}
+%\capcs seveni {use $7$-point math italic font, |cmmi5|}{}{}
+\capcs seveni {使用 $7$-pt 数学斜体,|cmmi7|}{}{}
+%\capcs sevenrm {use $7$-point roman font, |cmr7|}{}{}
+\capcs sevenrm {使用 $7$-pt 罗马字体,|cmr7|}{}{}
+%\capcs sevensy {use $7$-point symbol font, |cmsy7|}{}{}
+\capcs sevensy {使用 $7$-pt 符å·å­—体,|cmsy7|}{}{}
+%\capcs sfcode {the space factor code of a specified character}*{}
+\capcs sfcode {指定字符的间隔系数}*{}
+%\capcs sharp {sharp symbol for music: $\sharp$}{}{}
+\capcs sharp {音ä¹ä¸­çš„å‡åŠé—´ç¬¦ï¼š$\sharp$}{}{}
+%\capcs shipout {output a box to the |.dvi| file}*{}
+\capcs shipout {å‘ |.dvi| 文件输出盒å­}*{}
+%\capcs show {show, in the log and
+% on the terminal, the meaning of a specified token}*{}
+\capcs show {在日志文件中和终端上显示指定记å·çš„æ„义}*{}
+%\capcs showbox {display the contents of a specified box register}*{}
+\capcs showbox {显示指定盒å­å¯„存器的内容}*{}
+%\capcs showboxbreadth {maximum number of items shown on each nesting
+% level, by default~5}*{}
+\capcs showboxbreadth {在æ¯ä¸ªåµŒå¥—层次上显示的项目的最大数é‡ï¼Œé»˜è®¤å€¼ä¸º 5}*{}
+%\capcs showboxdepth {maximum nesting level shown, by default~3}*{}
+\capcs showboxdepth {显示的最大嵌套层次,默认值为 3}*{}
+%\capcs showhyphens {show, in the log
+% and on the terminal, hyphenations in the specified text}{}{}
+\capcs showhyphens {在日志文件中和终端上显示指定文本的断字}{}{}
+%\capcs showlists {display all lists being worked on}*{}
+\capcs showlists {显示所有正被影å“的列表}*{}
+%\capcs showthe {show, in the log
+% and on the terminal, what |\\the| would produce}*{}
+\capcs showthe {在日志文件中和终端上显示 |\\the| å°†è¦è¾“出的内容}*{}
+%\capcs sigma {math Greek letter $\sigma$}{}{}
+\capcs sigma {æ•°å­¦å¸Œè…Šå­—æ¯ $\sigma$}{}{}
+%\capcs Sigma {math Greek letter $\Sigma$}{}{}
+\capcs Sigma {æ•°å­¦å¸Œè…Šå­—æ¯ $\Sigma$}{}{}
+%\capcs sim {similarity relation: $\sim$}{}{}
+\capcs sim {相似关系:$\sim$}{}{}
+%\capcs simeq {similar or equal relation: $\simeq$}{}{}
+\capcs simeq {相似或等于关系:$\simeq$}{}{}
+%\capcs sin {sine function: $\sin$}{}{}
+\capcs sin {正弦函数:$\sin$}{}{}
+%\capcs sinh {hyperbolic sine function: $\sinh$}{}{}
+\capcs sinh {åŒæ›²æ­£å¼¦å‡½æ•°ï¼š$\sinh$}{}{}
+%\capcs skew {shift a specified accent by a specified amount
+% on a specified accented character}{}{}
+\capcs skew {将指定字符的é‡éŸ³ç¬¦å移指定的é‡}{}{}
+%\capcs skewchar {character in a specified font used for positioning accents}*{}
+\capcs skewchar {指定字体中用于定ä½é‡éŸ³ç¬¦çš„字符}*{}
+%\capcs skip {the specified glue register}*{}
+\capcs skip {指定的粘连寄存器}*{}
+%\capcs skipdef {define a specified control sequence to be a number
+% corresponding to a |\\skip| register}*{}
+\capcs skipdef {定义指定的控制åºåˆ—使之æˆä¸ºä¸Ž |\\skip| 寄存器对应的数值}*{}
+%\capcs sl {use slanted type, i.e., do |\\tensl\\fam=\\slfam|}{}{}
+\capcs sl {使用倾斜的字体,å³æ‰§è¡Œ |\\tensl\\fam=\\slfam|}{}{}
+%\capcs slash {\slash\ character that allows a line break}{}{}
+\capcs slash {å…许断行的 \slash\ 字符}{}{}
+%\capcs slfam {slanted family for math}{}{}
+\capcs slfam {数学中的倾斜字体æ—}{}{}
+%\capcs smallbreak {indicate somewhat desirable page break
+% with |\\penalty-50| and produce |\\smallskipamount| glue}{}{}
+\capcs smallbreak {指示一些期望 |\\penalty-50| 分页,并输出 |\\smallskipamount| 粘连}{}{}
+%\capcs smallint {small integral symbol: $\smallint$}{}{}
+\capcs smallint {å°çš„积分符å·ï¼š$\smallint$}{}{}
+%\capcs smallskip {produce |\\smallskipamount| glue}{}{}
+\capcs smallskip {输出 |\\smallskipamount| 粘连}{}{}
+%\capcs smallskipamount {glue for a small vertical skip, by default 3\pt\
+% plus 1\pt\ minus 1\pt}{}{}
+\capcs smallskipamount {å°çš„ç«–ç›´é—´è·çš„粘连,默认值为 3\pt\ plus 1\pt\ minus 1\pt}{}{}
+%\capcs smash {produce formula with zero height and depth}{}{}
+\capcs smash {输出高度与浓度å‡ä¸ºé›¶çš„å…¬å¼}{}{}
+%\capcs smile {smile relation: $\smile$}{}{}
+\capcs smile {微笑关系:$\smile$}{}{}
+%\capcs sp {implicit superscript character}{}{}
+\capcs sp {éšå¼ä¸Šæ ‡å­—符}{}{}
+%\capcs space {produce normal interword glue}{}{}
+\capcs space {输出正常的字间粘连}{}{}
+%\capcs spacefactor {modifies stretch and shrink of interword glue
+% if not 1000}*{}
+\capcs spacefactor {修改字间粘连的伸展é‡ä¸Žæ”¶ç¼©é‡ï¼Œå¦‚æžœä¸æ˜¯ 1000}*{}
+%\capcs spaceskip {if nonzero and |\\spacefactor|${}<2000$, overrides
+% the normal interword glue}*{}
+\capcs spaceskip {如果éžé›¶ä¸” |\\spacefactor|${}<2000$,抑制正常的字间粘连}*{}
+%\capcs spadesuit {spade suit symbol: $\spadesuit$}{}{}
+\capcs spadesuit {黑桃花色符å·ï¼š$\spadesuit$}{}{}
+%\capcs span {either combine entries in an alignment body or expand tokens in a
+% preamble}*{}
+\capcs span {在对é½ä¸»ä½“中åˆå¹¶æ¡ç›®æˆ–在导言中展开记å·}*{}
+%\capcs special {write tokens to the |.dvi| file to be interpreted by a
+% DVI-reading program}*{}
+\capcs special {将记å·å†™å…¥ |.dvi| 文件,以便 DVI æµè§ˆç¨‹åºè§£é‡Š}*{}
+%\capcs splitbotmark {last mark item in a box resulting from |\\vsplit|}*{}
+\capcs splitbotmark {ç›’å­ä¸­æ¥è‡ªäºŽ |\\vsplit| 的最åŽä¸€ä¸ªæ ‡è®°é¡¹ç›®}*{}
+%\capcs splitfirstmark {first mark item in a box resulting from
+% |\\vsplit|}*{}
+\capcs splitfirstmark {ç›’å­ä¸­æ¥è‡ªäºŽ |\\vsplit| 的第一个标记项目}*{}
+%\capcs splitmaxdepth {maximum depth of a box resulting from |\\vsplit|}*{}
+\capcs splitmaxdepth {æ¥è‡ªäºŽ |\\vsplit| çš„ç›’å­çš„最大深度}*{}
+%\capcs splittopskip {glue \TeX\ inserts at the top of a box resulting from
+% |\\vsplit|}*{}
+\capcs splittopskip {\TeX\ 在æ¥è‡ªäºŽ |\\vsplit| çš„ç›’å­çš„顶部æ’入的粘连}*{}
+%\capcs sqcap {square cap operator: $\sqcap$}{}{}
+\capcs sqcap {方形求交è¿ç®—符:$\sqcap$}{}{}
+%\capcs sqcup {square cup operator: $\sqcup$}{}{}
+\capcs sqcup {方形求并è¿ç®—符:$\sqcup$}{}{}
+%\capcs sqrt {produce square root of a subformula, as in $\sqrt 2$}{}{}
+\capcs sqrt {输出字公å¼çš„平方根,比如 $\sqrt 2$ 中那样}{}{}
+%\capcs sqsubseteq {square subset or equal relation: $\sqsubseteq$}{}{}
+\capcs sqsubseteq {方形å­é›†æˆ–等于关系:$\sqsubseteq$}{}{}
+%\capcs sqsupseteq {square superset or equal relation: $\sqsupseteq$}{}{}
+\capcs sqsupseteq {方形超集或等于关系:$\sqsupseteq$}{}{}
+%\capcs ss {German letter: \ss}{}{}
+\capcs ss {德语字符:\ss}{}{}
+%\capcs star {star operator: $\star$}{}{}
+\capcs star {星形è¿ç®—符:$\star$}{}{}
+%\capcs string {produce a specified token, most commonly a control
+% sequence, as characters}*{}
+\capcs string {以字符输出指定的记å·ï¼Œé€šå¸¸ä¸ºæŽ§åˆ¶åºåˆ—}*{}
+%\capcs strut {box with zero width, but height and depth of a standard
+% line, from baseline to baseline, in the current font}{}{}
+\capcs strut {在当å‰å­—体中,从基线到基线,宽度为零,但高度与深度为标准行的盒å­}{}{}
+%\capcs subset {subset relation: $\subset$}{}{}
+\capcs subset {å­é›†å…³ç³»ï¼š$\subset$}{}{}
+%\capcs subseteq {subset or equal relation: $\subseteq$}{}{}
+\capcs subseteq {å­é›†æˆ–相等关系:$\subseteq$}{}{}
+%\capcs succ {successor relation: $\succ$}{}{}
+\capcs succ {åŽç»§å…³ç³»ï¼š$\succ$}{}{}
+%\capcs succeq {successor or equal relation: $\succeq$}{}{}
+\capcs succeq {åŽç»§æˆ–相等关系:$\succeq$}{}{}
+%\capcs sum {large summation operator: $\sum$}{}{}
+\capcs sum {大的求和è¿ç®—符:$\sum$}{}{}
+%\capcs sup {superior function: $\sup$}{}{}
+\capcs sup {上é™å‡½æ•°ï¼š$\sup$}{}{}
+%\capcs supereject {force a page break, and output all insertions}{}{}
+\capcs supereject {强制分页,并输出所有的æ’å…¥}{}{}
+%\capcs supset {superset relation: $\supset$}{}{}
+\capcs supset {超集关系:$\supset$}{}{}
+%\capcs supseteq {superset or equal relation: $\supseteq$}{}{}
+\capcs supseteq {超集或相等关系:$\supseteq$}{}{}
+%\capcs surd {surd symbol: $\surd$}{}{}
+\capcs surd {æ— ç†æ•°ç¬¦å·ï¼š$\surd$}{}{}
+%\capcs swarrow {southwest arrow relation: $\swarrow$}{}{}
+\capcs swarrow {西å—箭头关系:$\swarrow$}{}{}
+%\capcs t {tie-after accent for text, as in \t uu}{}{}
+\capcs t {文本中的åŽå‘连接线é‡éŸ³ç¬¦ \t uu}{}{}
+%\capcs tabalign {equivalent to |\\+|, except it's not |\\outer|}{}{}
+\capcs tabalign {ç­‰åŒäºŽ |\\+|,除了它ä¸æ˜¯ |\\outer|}{}{}
+%\capcs tabskip {glue between columns (or rows) of an alignment}*{}
+\capcs tabskip {对é½ä¸­åˆ—(或行)之间的粘连}*{}
+%\capcs tan {tangent function: $\tan$}{}{}
+\capcs tan {正切函数:$\tan$}{}{}
+%\capcs tanh {hyperbolic tangent function: $\tanh$}{}{}
+\capcs tanh {åŒæ›²æ­£åˆ‡å‡½æ•°ï¼š$\tanh$}{}{}
+%\capcs tau {math Greek letter $\tau$}{}{}
+\capcs tau {数学希腊字æ¯$\tau$}{}{}
+%\capcs tenbf {use $10$-point bold font, |cmbx10|}{}{}
+\capcs tenbf {使用 $10$-pt 粗字体,|cmbx10|}{}{}
+%\capcs tenex {use $10$-point math extension font, |cmex10|}{}{}
+\capcs tenex {使用 $10$-pt 数学扩展字体,|cmex10|}{}{}
+%\capcs teni {use $10$-point math italic font, |cmmi10|}{}{}
+\capcs teni {使用 $10$-pt 数学斜体,|cmmi10|}{}{}
+%\capcs tenit {use $10$-point text italic font, |cmti10|}{}{}
+\capcs tenit {使用 $10$-pt 文本斜体,|cmti10|}{}{}
+%\capcs tenrm {use $10$-point roman text font, |cmr10|}{}{}
+\capcs tenrm {使用 $10$-pt 罗马字体,|cmr10|}{}{}
+%\capcs tensl {use $10$-point slanted roman font, |cmsl10|}{}{}
+\capcs tensl {使用 $10$-pt 倾斜罗马字体,|cmsl10|}{}{}
+%\capcs tensy {use $10$-point math symbol font, |cmsy10|}{}{}
+\capcs tensy {使用 $10$-pt 数学符å·å­—体,|cmsy10|}{}{}
+%\capcs tentt {use $10$-point typewriter font, |cmtt10|}{}{}
+\capcs tentt {使用 $10$-pt 打字机字体,|cmtt10|}{}{}
+%\capcs TeX {produce the \TeX\ logo}{}{}
+\capcs TeX {输出 \TeX\ 标志}{}{}
+%\capcs textfont {the text style font in a specified math family}*{}
+\capcs textfont {在指定数学字体家æ—中的文本样å¼}*{}
+%\capcs textindent {like |\\item|, but doesn't do hanging indentation}{}{}
+\capcs textindent {与 |\\item| 一样,但ä¸è¿›è¡Œæ‚¬æŒ‚缩进}{}{}
+%\capcs textstyle {use textstyle size in a formula}*{}
+\capcs textstyle {在公å¼ä¸­ä½¿ç”¨æ–‡æœ¬æ ·å¼å°ºå¯¸}*{}
+%\capcs the {give the value of a specified token}*{}
+\capcs the {给出指定记å·çš„值}*{}
+%\capcs theta {math Greek letter $\theta$}{}{}
+\capcs theta {æ•°å­¦å¸Œè…Šå­—æ¯ $\theta$}{}{}
+%\capcs Theta {math Greek letter $\Theta$}{}{}
+\capcs Theta {æ•°å­¦å¸Œè…Šå­—æ¯ $\Theta$}{}{}
+%\capcs thickmuskip {glue for a thick math space, by default 5\mud\ plus 5\mud}*{}
+\capcs thickmuskip {较大数学间隔所有的粘连,默认值为 5\mud\ plus 5\mud}*{}
+%\capcs thinmuskip {glue for a thin math space, by default 3\mud}*{}
+\capcs thinmuskip {较å°æ•°å­¦é—´éš”所有的粘连,默认值为 3\mud}*{}
+%\capcs thinspace {kern \frac1/6\em}{}{}
+\capcs thinspace {\frac1/6\em 紧排}{}{}
+%\capcs tilde {tilde accent for math, as in $\tilde x$}{}{}
+\capcs tilde {数学中的å¦å®šå·é‡éŸ³ç¬¦ï¼Œæ¯”如 $\tilde x$ 中那样}{}{}
+%\capcs time {the time of day, in minutes since midnight}*{}
+\capcs time {当天的时间,从å­å¤œæ¥è‡ªçš„分钟数}*{}
+%\capcs times {times operator: $\times$}{}{}
+\capcs times {乘å·è¿ç®—符:$\times$}{}{}
+%\capcs toks {the specified token register}*{}
+\capcs toks {指定的记å·å¯„存器}*{}
+%\capcs toksdef {define a specified control sequence to be a number
+% corresponding to a |\\toks| register}*{}
+\capcs toksdef {定一指定的控制åºåˆ—使之æˆä¸ºä¸Ž |\\toks| 寄存器相对应的数值}*{}
+%\capcs tolerance {badness tolerance for line breaks with hyphenation}*{}
+\capcs tolerance {带断字断行时劣度的容许值}*{}
+%\margin{{\tt\\topglue} command added; recent addition to \TeX}
+\margin{加入命令 {\tt\\topglue},新近加入 \TeX}
+%\capcs to {mapping relation: $\to$}{}{}
+\capcs to {映射关系:$\to$}{}{}
+%\capcs top {lattice top symbol: $\top$}{}{}
+\capcs top {lattice top symbol: $\top$}{}{}
+%\capcs topglue {produce specified vertical glue at the
+% top of a page}{}{}
+\capcs topglue {在页é¢çš„顶部输出指定的竖直粘连}{}{}
+\capcs topinsert {在页é¢é¡¶éƒ¨è¾“出指定的文本}{}{}
+%\capcs topmark {|\\botmark| before the current page was boxed}*{}
+\capcs topmark {放入盒å­ä¸­çš„在当å‰é¡µä¹‹å‰çš„ |\\botmark|}*{}
+%\capcs topskip {glue between the headline and the first line of text
+% on a page, by default 10\pt}*{}
+\capcs topskip {页眉线与åŒé¡µä¸Šç¬¬ä¸€è¡Œæ–‡æœ¬ä¹‹é—´çš„粘连,默认值为 10\pt}*{}
+%\capcs tracingall {turn on maximal tracing}{}{}
+\capcs tracingall {打开最大跟踪}{}{}
+%\capcs tracingcommands {display execution of commands}*{}
+\capcs tracingcommands {显示命令的执行}*{}
+%\capcs tracinglostchars {display characters that are asked for, but not
+% defined}*{}
+\capcs tracinglostchars {显示被请求的字符,但ä¸æ˜¯è¢«å®šä¹‰çš„}*{}
+%\capcs tracingmacros {display macro expansions}*{}
+\capcs tracingmacros {显示å®å±•å¼€}*{}
+%\capcs tracingonline {show diagnostic output on the terminal as well as in
+% the log file}*{}
+\capcs tracingonline {在终端åŠæ—¥å¿—文件中显示诊断输出}*{}
+%\capcs tracingoutput {display contents of shipped-out boxes}*{}
+\capcs tracingoutput {显示输出的盒å­çš„内容}*{}
+%\capcs tracingpages {display page break calculations}*{}
+\capcs tracingpages {显示分页计算}*{}
+%\capcs tracingparagraphs {display line break calculations}*{}
+\capcs tracingparagraphs {显示断行计算}*{}
+%\capcs tracingrestores {display values restored at the end
+% of a group}*{}
+\capcs tracingrestores {显示在编组结æŸå¤„ä¿å­˜çš„值}*{}
+%\capcs tracingstats {display memory usage statistics}*{}
+\capcs tracingstats {显示内存使用统计}*{}
+%\capcs triangle {triangle symbol: $\triangle$}{}{}
+\capcs triangle {三角符å·ï¼š$\triangle$}{}{}
+%\capcs triangleleft {left triangle operator: $\triangleleft$}{}{}
+\capcs triangleleft {左三角è¿ç®—符:$\triangleleft$}{}{}
+%\capcs triangleright {right triangle operator: $\triangleright$}{}{}
+\capcs triangleright {å³ä¸‰è§’è¿ç®—符:$\triangleright$}{}{}
+%\capcs tt {use typewriter type, i.e., do |\\tentt\\fam=\\ttfam|}{}{}
+\capcs tt {使用打字机字体,å³æ‰§è¡Œ |\\tentt\\fam=\\ttfam|}{}{}
+%\capcs ttfam {typewriter family for math}{}{}
+\capcs ttfam {数学中的打字机字体æ—}{}{}
+%\capcs ttraggedright {use typewriter type and allow right margins of
+% paragraphs to vary from line to line}{}{}
+\capcs ttraggedright {使用打字机字体,并å…许段è½å³è¾¹ç•Œä»Žä¸€è¡Œåˆ°å¦ä¸€è¡Œä¸åŒ}{}{}
+\bookmark{2}{从U到Z}%
+%\capcs u {breve accent for text, as in \u r}{}{}
+\capcs u {文本中的短音é‡éŸ³ç¬¦ï¼Œæ¯”如 \u r 中那样}{}{}
+%\capcs uccode {the character code for the uppercase form of a letter}*{}
+\capcs uccode {一个字æ¯çš„大å°å­—æ¯çš„字符代ç }*{}
+%\capcs uchyph {if positive, consider hyphenating words that start with a
+% capital letter}*{}
+\capcs uchyph {如果是正值,考虑对大写字æ¯å¼€å§‹çš„è¯æ–­è¯}*{}
+%\capcs underbar {underline the specified text without avoiding
+% any descenders, as in \underbar{fog}}{}{}
+\capcs underbar {ä¸ç”¨é¿å…任何下行字æ¯çš„情况下对指定文本划下划线,比如 \underbar{fog} 中那样}{}{}
+%\capcs underbrace {produce a brace covering the bottom of a formula, as in
+% $\underbrace{x+x}{}$}{}{}
+\capcs underbrace {输出一个覆盖公å¼åº•éƒ¨çš„大括å·ï¼Œæ¯”如 $\underbrace{x+x}{}$ 中那样}{}{}
+%\capcs underline {underline a math formula below the descenders, as in
+% $\underline{x+y}$}*{}
+\capcs underline {在下行字æ¯ä¹‹ä¸‹å¯¹æ•°å­¦å…¬å¼åˆ’下划线,比如 $\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 unhbox {将指定盒å­å¯„存器中盒å­çš„内容éšåŠ åˆ°å½“å‰åˆ—表中,并使寄存器失效;åªåœ¨æ°´å¹³æ¨¡å¼ä¸­æœ‰æ•ˆã€‚}*{}
+%\capcs unhcopy {like |\\unhbox|, but doesn't void the register}*{}
+\capcs unhcopy {与 |\\unhbox| 一样,但ä¸ä½¿å¯„存器失效}*{}
+%\capcs unkern {if the last item on the current list is a kern, remove it}*{}
+\capcs unkern {如果当å‰åˆ—表的最åŽä¸€é¡¹æ˜¯ç´§æŽ’,删除它}*{}
+%\capcs unpenalty {if the last item on the current list is a penalty, remove
+% it}*{}
+\capcs unpenalty {如果当å‰åˆ—表的最åŽä¸€é¡¹æ˜¯æƒ©ç½šï¼Œåˆ é™¤å®ƒ}*{}
+%\capcs unskip {if the last item on the current list is glue, remove it}*{}
+\capcs unskip {如果当å‰åˆ—表的最åŽä¸€é¡¹æ˜¯ç²˜è¿žï¼Œåˆ é™¤å®ƒ}*{}
+%\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 unvbox {将指定盒å­å¯„存器中盒å­çš„内容éšåŠ åˆ°å½“å‰åˆ—表中,并使寄存器失效;åªåœ¨ç«–直模å¼ä¸­æœ‰æ•ˆã€‚}*{}
+%\capcs unvcopy {like |\\unvbox|, but doesn't void the register}*{}
+\capcs unvcopy {与 |\\unvbox| 一样,但ä¸ä½¿å¯„存器失效}*{}
+%\capcs uparrow {relation: $\uparrow$}{}{}
+\capcs uparrow {关系:$\uparrow$}{}{}
+%\capcs Uparrow {relation: $\Uparrow$}{}{}
+\capcs Uparrow {关系:$\Uparrow$}{}{}
+%\capcs upbracefill {fill enclosing hbox with an upwards facing brace:
+% \hbox to 3.5em{\upbracefill}}{}{}
+\capcs upbracefill {使用å‘上开å£çš„大括å·å¡«å……é—­åˆçš„ hbox:\hbox to 3.5em{\upbracefill}}{}{}
+%\capcs updownarrow {relation: $\updownarrow$}{}{}
+\capcs updownarrow {关系:$\updownarrow$}{}{}
+%\capcs Updownarrow {relation: $\Updownarrow$}{}{}
+\capcs Updownarrow {关系:$\Updownarrow$}{}{}
+%\capcs uplus {cupped plus operator: $\uplus$}{}{}
+\capcs uplus {并加å·è¿ç®—符:$\uplus$}{}{}
+%\capcs uppercase {convert lowercase letters in the specified text
+% to uppercase}*{}
+\capcs uppercase {将指定文本中的å°å†™å­—æ¯è½¬æ¢ä¸ºå¤§å†™å­—æ¯}*{}
+%\capcs upsilon {math Greek letter $\upsilon$}{}{}
+\capcs upsilon {æ•°å­¦å¸Œè…Šå­—æ¯ $\upsilon$}{}{}
+%\capcs Upsilon {math Greek letter $\Upsilon$}{}{}
+\capcs Upsilon {æ•°å­¦å¸Œè…Šå­—æ¯ $\Upsilon$}{}{}
+%\capcs v {check accent for text, as in \v o}{}{}
+\capcs v {文本中的抑制é‡éŸ³ç¬¦ï¼Œæ¯”如 \v o 中那样}{}{}
+%\capcs vadjust {produce vertical mode material after the current line}*{}
+\capcs vadjust {在当å‰è¡ŒåŽè¾“出竖直模å¼å†…容}*{}
+%\capcs valign {align text in rows}*{}
+\capcs valign {在行中对é½æ–‡æœ¬}*{}
+%\capcs varepsilon {variant math Greek letter $\varepsilon$}{}{}
+\capcs varepsilon {å¼‚ä½“çš„æ•°å­¦å¸Œè…Šå­—æ¯ $\varepsilon$}{}{}
+%\capcs varphi {variant math Greek letter $\varphi$}{}{}
+\capcs varphi {å¼‚ä½“çš„æ•°å­¦å¸Œè…Šå­—æ¯ $\varphi$}{}{}
+%\capcs varpi {variant math Greek letter $\varpi$}{}{}
+\capcs varpi {å¼‚ä½“çš„æ•°å­¦å¸Œè…Šå­—æ¯ $\varpi$}{}{}
+%\capcs varrho {variant math Greek letter $\varrho$}{}{}
+\capcs varrho {å¼‚ä½“çš„æ•°å­¦å¸Œè…Šå­—æ¯ $\varrho$}{}{}
+%\capcs varsigma {variant Greek letter $\varsigma$}{}{}
+\capcs varsigma {å¼‚ä½“çš„æ•°å­¦å¸Œè…Šå­—æ¯ $\varsigma$}{}{}
+%\capcs vartheta {variant math Greek letter $\vartheta$}{}{}
+\capcs vartheta {å¼‚ä½“çš„æ•°å­¦å¸Œè…Šå­—æ¯ $\vartheta$}{}{}
+%\capcs vbadness {badness threshold for reporting underfull or overfull
+% vboxes, by default~1000}*{}
+\capcs vbadness {报告未满或过满竖直盒å­ä½¿ç”¨çš„劣度阈值,默认值为 1000}*{}
+%\capcs vbox {produce a vbox whose baseline is that of the bottom box
+% enclosed}*{}
+\capcs vbox {输出竖直盒å­ï¼Œå…¶åŸºçº¿æ˜¯é—­åˆçš„底下盒å­çš„基线}*{}
+%\capcs vcenter {center the specified text on the math axis}*{}
+\capcs vcenter {在数学轴上居中指定文本}*{}
+%\capcs vdash {left turnstile symbol: $\vdash$}{}{}
+\capcs vdash {å·¦å字转门符å·ï¼š $\vdash$}{}{}
+%\capcs vdots {vertical dots for math: \smash{$\vdots$}}{}{}
+\capcs vdots {数学的竖直多点:\smash{$\vdots$}}{}{}
+%\capcs vec {vector accent for math, as in $\vec x$}{}{}
+\capcs vec {数学中的矢é‡é‡éŸ³ç¬¦ï¼Œæ¯”如 $\vec x$ 中那样}{}{}
+%\capcs vee {logical ``or'' operator: $\vee$}{}{}
+\capcs vee {逻辑“或â€è¿ç®—符:$\vee$}{}{}
+%\capcs vert {bar relation: $\vert$}{}{}
+\capcs vert {横线关关系:$\vert$}{}{}
+%\capcs Vert {double bar relation: $\Vert$}{}{}
+\capcs Vert {åŒæ¨ªçº¿å…³ç³»ï¼š$\Vert$}{}{}
+%\capcs vfil {produce infinitely stretchable vertical glue}*{}
+\capcs vfil {输出无é™å¯æ‰©å±•çš„竖直粘连}*{}
+%\capcs vfill {produce even more infinitely stretchable vertical glue
+%than that produced by |\\vfil|}*{}
+\capcs vfill {输出比 |\\vfil| 更加无é™å¯æ‰©å±•çš„竖直粘连}*{}
+%\capcs vfilneg {produce infinitely negative stretchable vertical glue}*{}
+\capcs vfilneg {输出无é™è´Ÿå‘å¯æ‰©å±•çš„竖直粘连}*{}
+%\capcs vfootnote {produce a specified footnote with a specified
+% reference mark, but don't produce the reference mark in the text}{}{}
+\capcs vfootnote {输出带有指定å‚考标记的指定脚注,但在文本中ä¸è¾“出å‚考标记}{}{}
+%\capcs vfuzz {space threshold for reporting overfull vboxes, by default
+% 0.1\pt}*{}
+\capcs vfuzz {报告过满 vbox 的间隔阈值,默认值为 0.1\pt}*{}
+%\capcs vglue {produce specified vertical glue
+% that doesn't disappear at page breaks}{}{}
+\capcs vglue {输出在分页时ä¸æ¶ˆå¤±çš„指定的竖直粘连}{}{}
+%\capcs voffset {vertical offset relative to one inch from the
+% paper's top edge}*{}
+\capcs voffset {从页é¢é¡¶éƒ¨å¼€å§‹çš„相对于一英寸的竖直å移}*{}
+%\capcs vphantom {produce an invisible formula with zero width but natural
+% height and depth}{}{}
+\capcs vphantom {输出宽度为零,但具有自然高度与深度的ä¸å¯è§å…¬å¼}{}{}
+%\capcs vrule {produce a vertical rule; legal only in horizontal modes}*{}
+\capcs vrule {输出竖直标线;åªåœ¨æ°´å¹³æ¨¡å¼ä¸‹æœ‰æ•ˆ}*{}
+%\capcs vsize {page height, by default 8.9\thinspace in}*{}
+\capcs vsize {页é¢é«˜åº¦ï¼Œé»˜è®¤å€¼ä¸º 8.9\thinspace in}*{}
+%\capcs vskip {produce specified vertical glue}*{}
+\capcs vskip {输出指定的竖直粘连}*{}
+%\capcs vsplit {break the contents of a specified box
+% register to the specified height}*{}
+\capcs vsplit {将指定的盒å­å¯„存器的内容分隔为指定的高度}*{}
+%\capcs vss {produce vertical glue that is infinitely stretchable and
+% infinitely shrinkable}*{}
+\capcs vss {输出å¯æ— é™æ‰©å±•ä¸Žæ”¶ç¼©çš„竖直粘连}*{}
+%\capcs vtop {produce a vbox whose baseline is that of the top box enclosed}*{}
+\capcs vtop {输出竖直盒å­ï¼Œå®ƒçš„基线是闭åˆçš„顶部盒å­çš„基线}*{}
+%\capcs wd {the width of the box in a specified box register}*{}
+\capcs wd {指定盒å­å¯„存器中盒å­çš„宽度}*{}
+%\capcs wedge {logical ``and'' operator: $\wedge$}{}{}
+\capcs wedge {逻辑“和â€è¿ç®—符:$\wedge$}{}{}
+%\capcs widehat {math accent, as in $\widehat {y+z+a}$}{}{}
+\capcs widehat {æ•°å­¦é‡éŸ³ç¬¦ï¼Œæ¯”如 $\widehat {y+z+a}$ 中那样}{}{}
+%\capcs widetilde {math accent $\widetilde {b+c+d}$}{}{}
+\capcs widetilde {æ•°å­¦é‡éŸ³ç¬¦ï¼Œæ¯”如 $\widetilde {b+c+d}$ 中那样}{}{}
+%\capcs widowpenalty {penalty for a single line beginning a page,
+% by default~150}*{}
+\capcs widowpenalty {开始新页的å•è¡Œçš„惩罚,默认为 150}*{}
+%\capcs wlog {|\\write| the specified token list in the log file}{}{}
+\capcs wlog {在日志文件中 |\\write| 指定的记å·åˆ—表}{}{}
+%\capcs wp {Weierstra\ss\ `p' symbol: $\wp$}{}{}
+\capcs wp {Weierstra\ss\ `p' 符å·ï¼š$\wp$}{}{}
+%\capcs wr {wreath product operator: $\wr$}{}{}
+\capcs wr {圈积è¿ç®—符:$\wr$}{}{}
+%\capcs write {write a line to a specified output stream}*{}
+\capcs write {将一行写入指定的输出æµ}*{}
+%\capcs xdef {equivalent to |\\global\\edef|, i.e., globally define a
+% macro, immediately expanding the replacement text}*{}
+\capcs xdef {ç­‰åŒäºŽ |\\global\\edef|,å³ï¼Œå®šä¹‰å…¨å±€å®ï¼Œç«‹å³å±•å¼€æ›¿æ¢æ–‡æœ¬}*{}
+%\capcs xi {math Greek letter $\xi$}{}{}
+\capcs xi {æ•°å­¦å¸Œè…Šå­—æ¯ $\xi$}{}{}
+%\capcs Xi {math Greek letter $\Xi$}{}{}
+\capcs Xi {æ•°å­¦å¸Œè…Šå­—æ¯ $\Xi$}{}{}
+%\capcs xleaders {produce leaders with leftover space distributed equally
+% between the leader boxes}*{}
+\capcs xleaders {输出剩余空白å‡åŒ€åˆ†å¸ƒäºŽæŒ‡å¼•çº¿ç›’å­ä¹‹é—´çš„指引线}*{}
+%\capcs xspaceskip {if nonzero and |\\spacefactor|${}\ge2000$,
+% overrides the normal interword glue}*{}
+\capcs xspaceskip {如果éžé›¶ï¼Œä¸” |\\spacefactor|${}\ge2000$,覆盖正常的字间粘连}*{}
+%\capcs year {the current year, as a number}*{}
+\capcs year {以数值形å¼è¾“出当å‰å¹´ä»½}*{}
+%\capcs zeta {math Greek letter $\zeta$}{}{}
+\capcs zeta {æ•°å­¦å¸Œè…Šå­—æ¯ $\zeta$}{}{}
+
+\endcapsum
+\endchapter
+\byebye
diff --git a/info/impatient/cn/cnbook.pdf b/info/impatient/cn/cnbook.pdf
new file mode 100644
index 0000000000..fe6861f332
--- /dev/null
+++ b/info/impatient/cn/cnbook.pdf
Binary files differ
diff --git a/info/impatient/cn/concepts.tex b/info/impatient/cn/concepts.tex
new file mode 100644
index 0000000000..aafc46e733
--- /dev/null
+++ b/info/impatient/cn/concepts.tex
@@ -0,0 +1,6635 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter{概念}
+
+\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.
+本书的这部分包å«äº†ä½¿ç”¨ \TeX\ 时所需è¦äº†è§£çš„概念。
+它包括我们在解释命令时所使用的技术è¯æ±‡ä»¥åŠé‡ç‚¹å†…容,
+这些内容并ä¸é€‚åˆæ”¾åœ¨æœ¬ä¹¦çš„其它地方。
+
+%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}
+这些概念使用英文字æ¯é¡ºåºè¿›è¡ŒæŽ’列,
+书背内页包å«äº†ä¸€ä»½è¯¦ç»†çš„在此æåŠçš„概念列表,以åŠä»–们被æåŠæ—¶æ‰€åœ¨çš„页数。
+我们建议你把书背内页å¤å°ä¸‹æ¥ï¼Œæ”¾åœ¨æ—边,
+这样你就能在é‡åˆ°ä¸ç†Ÿæ‚‰çš„概念时马上查找到它们。
+我们尽å¯èƒ½åœ°ä½¿ç”¨å’Œ \texbook\ 相一致的术语。\idxref{\texbook}
+
+\beginconcepts
+
+\bookmark{2}{以A开头}
+%\conceptindex{active characters}
+%\concept {active character}
+\conceptindex{活动字符}
+\concept {活动字符}
+
+%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.
+\defterm{活动字符}(active character)是一个有定义的\refterm{字符}。
+比如一个活动字符å¯èƒ½è¡¨ç¤ºç€ä¸€ä¸ªå®å®šä¹‰ã€‚
+^^{å®//由活动字符命å}
+ä½ å¯ä»¥æŠŠæ´»åŠ¨å­—符ç†è§£ä¸ºä¸€ç§æŽ§åˆ¶åºåˆ—。
+当 \TeX\ 碰到了一个活动字符,它就执行这个字符所表示的定义。
+如果 \TeX\ 碰到的活动字符并没有表示一个定义,
+则它会报错说这是一个没有定义的控制åºåˆ—。
+
+%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.
+一个活动字符的\refterm{类别ç }为 $13$ (^|\active|的值)。
+当你定义一个活动字符时,
+你必须先使用 ^|\catcode| 命令 \ctsref{\catcode} æ¥ä½¿è¿™ä¸ªå­—符活动,
+然åŽå†ä½¿ç”¨ç±»ä¼¼ |\def|,|\let| 或者 |\chardef| 之类的命令指定这个字符的定义。
+定义活动字符和定义\refterm{控制åºåˆ—}所使用的方法是相åŒçš„。
+^^{类别ç //活动字符的类别ç }
+如因你å°è¯•å…ˆå¯¹å­—符指定定义åŽæŠŠå®ƒè®¾ç½®æˆæ´»åŠ¨çš„,
+\TeX\ 会报错说这是一个ä¸æ˜Žçš„控制åºåˆ—。
+
+%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:
+比如,在 \PlainTeX\ ä¸­ï¼Œæ³¢æµªå· (|~|) 被定义æˆä¸€ä¸ªæ´»åŠ¨å­—符。
+它å¯ä»¥åœ¨æ‰€è¿žæŽ¥çš„两个å•è¯å½“中产生一个空格,并且ä¸è®© \TeX\ 把这个空格转为 \refterm{æ–­è¡Œ}。
+\refterm{\PlainTeX:\plainTeX} 通过以下方å¼æ¥å®šä¹‰ `|~|':
+
+\csdisplay
+\catcode `~ = \active \def~{\penalty10000\!visiblespace}
+|
+%(The |\penalty| inhibits a line break and the `|\!visiblespace|'
+%inserts a space.)
+(这里的 |\penalty| å¯ä»¥é˜»æ­¢æ–­è¡Œï¼Œ`|\!visiblespace|' å¯ä»¥æ’入一个空格。)
+\endconcept
+
+
+%\conceptindex{alignments}
+%\concept alignment
+\conceptindex{阵列}
+\concept 阵列
+
+%\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.
+\bix^^{表格}
+\defterm{阵列}(alignment)是一个把素æ有åºæŽ’å°çš„结构,
+就如一张有行有列的表格。当你需è¦æž„造一个阵列时,
+ä½ è¦ (a)~æ述行和列的布局,并且 (b)~告诉 \TeX\ å„行或å„列中的内容。
+制表阵列和水平阵列是由一系列的行组æˆï¼›ç«–直阵列则由一系列的列组æˆã€‚
+我们首先讲述制表阵列和水平阵列,然åŽç®€è¦åœ°ä»‹ç»ä¸€ä¸‹ç«–直阵列。
+
+%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.
+制表阵列是在 \PlainTeX\ 中定义的。它很简å•ï¼Œå› æ­¤ä¸å¦‚水平阵列那样çµæ´»ã€‚
+制表阵列和水平阵列的主è¦åŒºåˆ«åœ¨äºŽä½ å¦‚何定义它们的布局。
+
+\bix^^|\settabs|
+\bix\ifoldeplain\ctsidxref{+}\fi
+\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.
+è¦æž„造一个制表阵列,你首先需è¦ç”¨ |\settabs| 命令
+\ctsref{\settabs} 确定 \TeX\ 如何将å¯ç”¨ç©ºç™½æ°´å¹³åœ°åˆ†ä¸ºå¤šåˆ—。
+然åŽä½ å°±å¯ä»¥é€è¡Œåœ°å¡«å……表格的å„行。
+æ¯è¡Œç”±æŽ§åˆ¶åºåˆ—|\+|\ctsref{\@plus}åŠå…¶åŽçš„一排用 |&| 隔开的“æ¡ç›®â€ç»„æˆ%
+^^{æ¡ç›®ï¼ˆåœ¨è¡Œæˆ–列中)}
+\xrdef{@and}
+\ifoldeplain\ttidxref{&}\fi
+(æ¡ç›®æ˜¯è¡Œå’Œåˆ—的交å‰éƒ¨åˆ†ï¼‰ï¼Œå¹¶ä»¥ ^|\cr| 结æŸã€‚
+如果æŸè¡Œçš„æ¡ç›®æ•°ç›®æ¯”该阵列的列数少,\TeX\ 就用空白æ¡ç›®å¡«å……它们。
+
+%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:
+ä½ å¯ä»¥å°†åˆ¶è¡¨é˜µåˆ—的行放在文档的任何地方,åªè¦å‰é¢æœ‰ |\settabs| 命令。
+特别地,你å¯ä»¥åœ¨åˆ¶è¡¨é˜µåˆ—çš„å„行之间添加其他内容,
+或者用åŒä¸€ä¸ª |\settabs| æ述多个制表阵列。
+这里有一个制表阵列的例å­ï¼š
+
+%\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:
+\xrdef{tabbedexample}\csdisplay
+{\hsize = 1.7 in \settabs 2 \columns
+\+cattle&herd\cr
+\+fish&school\cr
+\+lions&pride\cr}
+|
+这个例å­ä¸­çš„ |\settabs 2 \columns| 命令\ctsref{\settabs}%
+让 \TeX\ 生æˆæ€»å®½åº¦ä¸º $1.7$ 英寸的等宽两列。
+所排版出的阵列如下:
+
+%{\def\+{\tabalign}% so it isn't \outer.
+%\vdisplay{%
+%\hsize 1.7 in \settabs 2 \columns
+%\+cattle&herd\cr
+%\+fish&school\cr
+%\+lions&pride\cr}
+%}%
+{\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}
+%}%
+\margin{Missing explanation added here.}
+制表阵列还有å¦ä¸€ç§ç”¨æ¨¡æ¿æŒ‡æ˜Žå„列宽度的用法。
+模æ¿çš„å„列宽度决定了该阵列其åŽçš„å„列宽度:
+\csdisplay
+{\settabs\+cattle\quad&school\cr
+\+cattle&herd\cr
+\+fish&school\cr
+\+lions&pride\cr}
+|
+这是上é¢ä¾‹å­ç”Ÿæˆçš„结果:
+{\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\ifoldeplain\ctsidxref{+}\fi
+\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.
+水平阵列用 |\halign| \ctsref\halign 命令构造。
+\TeX\ 将根æ®å„列内容调整水平阵列的列宽。
+当 \TeX\ 碰到 |\halign| 命令è¦å¼€å§‹ä¸€ä¸ªæ°´å¹³é˜µåˆ—时,
+它首先检查该阵列的å„行,看看å„æ¡ç›®éƒ½æœ‰å¤šå®½ã€‚
+然åŽè®¾å®šå„列宽度以容纳该列中最宽的æ¡ç›®ã€‚
+
+%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}.
+ç”± |\halign| 命令构造的水平阵列包å«ä¸€ä¸ªâ€œ\pix^{导言}â€ï¼Œ
+该导言说明了éšåŽå„行的布局。
+\ulist
+\li 导言由一系列\pix^{模æ¿}组æˆï¼Œä¸€ä¸ªæ¨¡æ¿å¯¹åº”一列,
+指明该列的文本应该如何排版。
+æ¯ä¸ªæ¨¡æ¿ä¸­éƒ½å¿…须包å«ä¸€ä¸ª|#|字符,
+\ifoldeplain\ttidxref{#}\fi\xrdef{@asharp}
+用于给出 \TeX\ å°†æ¡ç›®çš„文本放入模æ¿çš„ä½ç½®ã€‚
+å„个模æ¿ä¹‹é—´ç”¨ |&| 分隔,\ifoldeplain\ttidxref{&}\fi 并以 |\cr| 结æŸè¯¥å¯¼è¨€ã€‚
+利用åˆé€‚的模æ¿ä½ å¯ä»¥è®©æŸåˆ—居中,左对é½æˆ–å³å¯¹é½ï¼Œ
+或者使用æŸä¸ªç‰¹å®šçš„\refterm{字体}。
+
+%\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.
+\li 除了è¦çœç•¥å„行开头的 |\+|,å„行的写法都和制表阵列一样:
+一行的å„æ¡ç›®ä¹‹é—´ç”¨ |&| 分隔,并以 |\cr| 结æŸè¯¥è¡Œã€‚
+\TeX\ å°†å„个æ¡ç›®éƒ½çœ‹ä½œä¸€ä¸ª\refterm{编组},
+因此对æŸåˆ—模æ¿çš„字体设定或其他\refterm{赋值}都åªå¯¹è¯¥åˆ—å„个æ¡ç›®æœ‰æ•ˆã€‚
+\endulist
+\noindent 导言和å„行都必须放在 |\halign| åŽçš„花括å·é‡Œé¢ã€‚
+æ¯ä¸ª |\halign| 阵列都必须包å«å„自的导言。
+
+%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}
+%|
+例如,下é¢è¿™ä¸ªæ°´å¹³é˜µåˆ—:
+\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:
+\noindent 生æˆä¸‹é¢çš„结果:
+
+%\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|
+\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 这个例å­ä¸­çš„ ^|\tabskip| \ctsref{\tabskip}
+命令让 \TeX\ 在å„列间æ’å…¥ |2pc| çš„\refterm{粘连}。
+^|\noalign| \ctsref{\noalign} 命令%
+让 \TeX\ 在两行间æ’å…¥\refterm{竖直模å¼}ç´ æ。
+在此例å­ä¸­æˆ‘们用 |\noalign| 生æˆæ ‡é¢˜è¡Œå’Œæ•°æ®è¡Œä¹‹é—´çš„é¢å¤–é—´è·ï¼Œ
+还让“Tableâ€å’Œâ€œPositionâ€ç´§æŒ¨åœ¨ä¸€èµ·ã€‚%
+(在首行之å‰æˆ–者末行之åŽä½ åŒæ ·å¯ä»¥ä½¿ç”¨ |\noalign| 命令。)
+\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:
+用 ^|\valign| 命令
+\ctsref{\valign}å¯ä»¥æž„造一个竖直阵列。
+竖直阵列按照列而ä¸æŒ‰ç…§è¡Œç»„织。
+它éµå¾ªå’Œæ°´å¹³é˜µåˆ—相åŒçš„法则,
+åªæ˜¯æ­¤æ—¶è¡Œå’Œåˆ—的地ä½äº¤æ¢äº†ã€‚
+例如,下é¢çš„竖直阵列:
+
+%\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}
+\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 得到的结果为:
+\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}}
+}
+模æ¿ä¸­çš„ ^|\strut| 命令 \ctsref{\strut} 是必ä¸å¯å°‘的,
+因为它让一行的å„æ¡ç›®åˆé€‚地排æˆä¸€è¡Œï¼Œ
+å³è®©å®ƒä»¬æœ‰å…±åŒçš„\refterm{基线},并让基线间的è·ç¦»ä¿æŒä¸€è‡´ã€‚
+\eix\ctsidxref{cr}
+\eix^^{表格}
+
+\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.
+\texbook\ å°† {\TeX} 处ç†è¾“入的过程用 \TeX\ 的“消化é“â€æ¥æ述,
+包括“^{眼ç›}â€ï¼Œâ€œ^{嘴巴}â€ï¼Œâ€œ^{食é“}â€ï¼Œâ€œ^{胃}†和“^{è‚ é“}â€ã€‚
+知é“这个处ç†è¿‡ç¨‹å¦‚何è¿è½¬ï¼Œå°†æœ‰åŠ©äºŽä½ ç†è§£\TeX\ 消化文档时的行为细节。
+
+\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 使用“\pix^{眼ç›}â€ï¼Œ\TeX\ 从^{输入文件}中读å–\refterm{字符}并传给它的嘴巴。
+由于输入文件中å¯èƒ½åŒ…å« ^|\input| 命令\ctsref{\input},
+\TeX\ 实际上能够从一个文件“转移视线â€åˆ°å¦ä¸€ä¸ªæ–‡ä»¶ã€‚
+
+%\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 使用“\pix^{嘴巴}â€ï¼Œ{\TeX} 将字符组åˆä¸º\refterm{è®°å·}并传给它的食é“。
+æ¯ä¸ªè®°å·è¦ä¹ˆæ˜¯ä¸€ä¸ª\refterm{控制åºåˆ—}è¦ä¹ˆæ˜¯å•ä¸ªå­—符,
+其中控制åºåˆ—总是以\refterm{转义符}开始。
+注æ„空格符以åŠè¡Œå°¾ç¬¦è‡ªèº«ä¹Ÿæ˜¯å­—符,
+åªæ˜¯ \TeX\ 将输入中的多个空格åˆå¹¶ä¸ºä¸€ä¸ªç©ºæ ¼è®°å·ã€‚
+在\knuth{第~46--47~页}
+中介ç»äº† \TeX\ 将字符组åˆä¸ºè®°å·çš„规则。
+^^{è®°å·//将字符组åˆä¸ºè®°å·}
+
+%\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 使用“\pix^{食é“}â€ï¼Œ{\TeX} 展开任何å®ã€æ¡ä»¶å¥ï¼Œ
+^^{å®//在 \TeX\ 的胃展开}
+^^{è®°å·//ä¼ ç»™ \TeX\ 的胃}
+以åŠå®ƒæ‰¾åˆ°çš„类似结构(è§\knuth{第~212--216~页},
+并将得到的一系列\refterm{è®°å·}ä¼ ç»™ \TeX\ 的胃。
+展开一个记å·ä¹Ÿè®¸ä¼šå¾—到本身也需è¦å±•å¼€çš„其他记å·ã€‚
+{\TeX} 按照从左到å³çš„顺åºæ‰§è¡Œè®°å·å±•å¼€ï¼Œ
+除éžä½ ç”¨ç±»ä¼¼ |\expandafter| \ctsref{\expandafter} 的命令改å˜å…¶é¡ºåºã€‚
+æ¢è¨€ä¹‹ï¼Œ\TeX\ 的食é“总是展开未é€å…¥èƒƒä¸­çš„è®°å·ä¸­æœ€å·¦è¾¹çš„未展开记å·ã€‚
+
+%\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 使用“\pix^{胃}â€ï¼Œ{\TeX} 一组一组地处ç†è®°å·ã€‚
+æ¯ä¸ªåˆ†ç»„里é¢åŒ…å«ä¸€ä¸ªåŽŸå§‹å‘½ä»¤åŠå¯èƒ½è·Ÿéšç€çš„命令å‚é‡ã€‚
+大多数命令属于“排版此字符â€è¿™ç§ï¼Œå› æ­¤å®ƒä»¬çš„分组中仅包å«ä¸€ä¸ªè®°å·ã€‚
+按照命令的指示,
+\TeX\ 的胃从字符到页é¢é€æ­¥ç»„装出越æ¥è¶Šå¤§çš„部件,
+并将生æˆçš„页é¢ä¼ ç»™ \TeX\ çš„è‚ é“。
+^^{页é¢//在 \TeX\ 的胃中组装}
+\TeX\ 的胃执行\refterm{断行}任务%
+^^{断行}
+——å³å°†æ¯ä¸ªæ®µè½åˆ†ä¸ºè‹¥å¹²è¡Œï¼Œ
+以åŠ\refterm{分页}任务%
+——å³å°†è¿žç»­è‹¥å¹²è¡Œå’Œå…¶ä»–竖直模å¼ç´ æ分为多个页é¢ã€‚
+
+%\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}
+\li 使用“\pix^{è‚ é“}â€ï¼Œ\TeX\ 将它的胃生æˆçš„页é¢è½¬æ¢ä¸ºé€‚åˆå…¶ä»–程åºå¤„ç†çš„å½¢å¼ï¼Œ
+并将转æ¢å‡ºçš„结果é€åˆ° \dvifile 。
+^^{\dvifile//ç”± \TeX\ çš„è‚ é“生æˆ}
+
+\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.
+多数时候你都å¯ä»¥è®¤ä¸ºåœ¨ \TeX\ 的眼ç›ï¼Œå˜´å·´ï¼Œé£Ÿé“,
+胃和肠é“中的æ“作是一个接一个进行的。
+但事实真相是,在 \TeX\ 的胃中执行的命令å¯èƒ½ä¼šå½±å“å‰é¢æ­¥éª¤çš„消化过程。
+举例æ¥è¯´ï¼Œå½“ \TeX\ 的胃碰到 |\input| 命令\ctsref{\input}时,
+它的眼ç›å°†å¼€å§‹è¯»å–å¦ä¸€ä¸ªæ–‡ä»¶ï¼›
+当 \TeX\ 的胃碰到指定字符$c$的类别ç çš„ |\catcode| 命令\ctsref{\catcode}时,
+\TeX\ 的嘴巴对 $c$ 的解释就会å—å½±å“ï¼›
+而当 \TeX\ 的胃碰到\refterm{å®}定义时,
+在 \TeX\ 的食é“进行的å®å±•å¼€ä¹Ÿä¼šå—到影å“。
+
+%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
+为更好地ç†è§£å„个器官的相互影å“,你å¯ä»¥æŠŠå„个器官都想象为急性å­ï¼Œ
+å‰ä»»å™¨å®˜ä¸€æœ‰è¾“出,åŽé¢çš„器官就急切地åžé£Ÿè¯¥è¾“出。
+比如,\TeX\ 的胃一看到 |\input| 命令的文件å的最åŽä¸€ä¸ªå­—符,
+它的眼ç›å°±ç«‹å³è½¬ç§»è§†çº¿åˆ°æ‰€æŒ‡å®šè¾“入文件的第一个字符。
+\endconcept
+
+%\pagebreak
+%\conceptindex{arguments}
+%\concept argument
+\conceptindex{å‚é‡}
+\concept å‚é‡
+
+%^^{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}.
+^^{命令//命令的å‚é‡}
+命令的\defterm{å‚é‡}(argument)包å«ä¼ é€’ç»™\refterm{命令}的文本,
+它补全了该命令正常è¿è¡Œæ‰€éœ€çš„ä¿¡æ¯ã€‚
+这里的命令å¯ä»¥æ˜¯\refterm{原始命令}或者\refterm{å®}.
+
+%Each primitive command ^^{primitive//command}
+%has its own convention about the form of its
+%arguments. For instance, the sequence of \refterm{tokens:token}:
+原始命令^^{原始的//原始命令}çš„å‚é‡æœ‰å„自规定的形å¼ã€‚
+例如,下é¢çš„一系列\refterm{è®°å·}:
+
+%\csdisplay
+%\hskip 3pc plus 1em
+%|
+%consists of the command `|\hskip|' and the arguments
+%`|3pc plus 1em|'. But if you were to write:
+\csdisplay
+\hskip 3pc plus 1em
+|
+ç”± `|\hskip|' 命令åŠå…¶å‚é‡ `|3pc plus 1em|' 组æˆã€‚
+但若你这样写:
+
+%\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).
+\csdisplay
+\count11 3pc plus 1em
+|
+你将得到完全ä¸åŒçš„结果。
+\TeX\ 将认为 `|\count11|' 为命令,其å‚é‡ä¸º`|3|',
+而åŽé¢çš„ `|pc plus 1em|' 是普通的文本记å·%
+(因为计数寄存器è¦æ±‚一个整数值作为å‚é‡ï¼‰â€”—这多åŠä¸æ˜¯ä½ æƒ³è¦çš„。
+顺便说一下,该命令将给第$11$å·è®¡æ•°å¯„存器赋值$3$
+ï¼ˆè§ ^|\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.
+å¦ä¸€æ–¹é¢ï¼Œæ‰€æœ‰å®éƒ½éµå¾ªç›¸åŒçš„å‚é‡çº¦å®šã€‚
+^^{å®//å®çš„å‚é‡}
+传递给å®çš„æ¯ä¸ªå‚é‡éƒ½å¯¹åº”å®å®šä¹‰ä¸­çš„一个\refterm{å‚æ•°}。
+^^{å‚æ•°//与å‚é‡å¯¹åº”}^^{å®//å®çš„å‚æ•°}
+å®çš„å‚æ•°å¯ä»¥æ˜¯â€œå®šç•Œçš„â€æˆ–是“éžå®šç•Œçš„â€ã€‚
+在å®çš„定义中确定了å®å‚数的个数和类型,
+从而确定了å®å‚é‡çš„个数和类型。
+
+%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.
+定界å‚é‡å’Œéžå®šç•Œå‚é‡çš„区别在于,
+\TeX\ 用ä¸åŒæ–¹å¼ç¡®å®šè¯¥å‚é‡çš„结æŸä½ç½®ã€‚
+^^{定界å‚é‡}
+^^{éžå®šç•Œå‚é‡}
+\ulist
+\li 定界å‚é‡ç”±è¯¥å‚é‡å¼€å§‹å¤„和作为该å‚é‡å®šç•Œå­çš„特定记å·åºåˆ—之间的所有记å·ç»„æˆï¼Œ
+但ä¸åŒ…å«è¯¥å®šç•Œå­åºåˆ—。其中的定界å­æ˜¯åœ¨å®çš„定义中规定的。
+å› æ­¤è¦ç»™å‡ºå®šç•Œå‚é‡ï¼Œä½ éœ€è¦å†™ä¸Šè¯¥å‚é‡å¹¶åœ¨å…¶åŽåŠ ä¸Šå®šç•Œå­ã€‚
+定界å‚é‡ä¹Ÿå¯ä»¥æ˜¯ç©ºçš„,å³ä¸åŒ…å«ä»»ä½•æ–‡æœ¬ã€‚
+定界å‚é‡é‡Œé¢çš„任何花括å·éƒ½å¿…é¡»é…好对,
+å³æ¯ä¸ªå·¦èŠ±æ‹¬å·å¿…须有对应的å³èŠ±æ‹¬å·ï¼Œå之亦然。
+
+%\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
+\li éžå®šç•Œå‚é‡ç”±å•ä¸ªè®°å·æˆ–者包å«åœ¨èŠ±æ‹¬å·çš„一系列记å·ç»„æˆï¼Œ
+比如`|{Here is {the} text.}|'。
+外é¢çš„一对花括å·ï¼Œè™½ç„¶çœ‹èµ·æ¥åƒï¼Œå®žé™…上并ä¸ç»„æˆä¸€ä¸ª\refterm{编组}%
+——\TeX\ åªæ˜¯ç”¨å®ƒä»¬ç¡®å®šå‚é‡çš„范围。
+而å‚é‡å†…部的花括å·ï¼Œæ¯”如`|the|'两边的,必须正确é…对。
+若你误将太多å³èŠ±æ‹¬å·æ”¾åœ¨é‡Œé¢ï¼Œ
+\TeX\ 将报错说有多余的å³èŠ±æ‹¬å·ã€‚
+若左花括å·å¤ªå¤šï¼Œ\TeX\ åŒæ ·ä¼šæŠ¥é”™ï¼›
+但\emph{这个错误}å¯èƒ½å‡ºçŽ°åœ¨è¯¥å‚é‡æ‰€æœŸæœ›çš„结æŸä½ç½®ä¹‹åŽå¾ˆè¿œçš„地方
+ï¼ˆè§ \xref{mismatched})。
+\endulist
+\noindent
+请å‚阅\conceptcit{å®}这里的更多关于å‚æ•°å’Œå‚é‡çš„内容。
+在\knuth{第~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.
+\defterm{\ascii} 是“美国信æ¯äº¤æ¢æ ‡å‡†ç¼–ç â€ï¼ˆAmerican Standard Code for
+Information Interchange)的缩写。总共有 $256$ 个 \ascii\ ^{字符},
+æ¯ä¸ªéƒ½æœ‰è‡ªå·±çš„ç¼–ç ï¼Œä½†åªæœ‰å‰é¢ $128$ 个是标准编ç ã€‚
+在 \ascii\ “编ç è¡¨â€ï¼Œæ¯”如\knuth{第~367~页}里é¢ï¼Œä½ å¯ä»¥æ‰¾åˆ°è¿™äº›ç¼–ç çš„å«ä¹‰ã€‚
+ç¼–ç åœ¨ $32$--$126$ 之间的字符为“å¯æ‰“å°å­—符^^{å¯æ‰“å°å­—符}â€ï¼Œ
+比如字æ¯ï¼Œæ•°å­—和标点符å·ã€‚
+其余字符为“^{控制字符}â€ï¼Œé€šå¸¸ç”¨äºŽï¼ˆåœ¨è®¡ç®—机工业中,而ä¸æ˜¯ \TeX\ 中)
+控制输入\slash 输出和数æ®äº¤æ¢è®¾å¤‡ã€‚
+比如,\ascii\ ç  $84$ 对应于字符`T',
+而 \ascii\ ç  $12$ 对应于“æ¢é¡µâ€åŠŸèƒ½ï¼ˆå¤§å¤šæ•°æ‰“å°æœºéƒ½å°†å®ƒè§£é‡Šä¸ºâ€œå¼€å§‹æ–°é¡µâ€ï¼‰ã€‚
+虽然 \ascii\ 标准指定了控制字符的å«ä¹‰ï¼Œ
+但很多设备,比如调制解调器和打å°æœºï¼Œéƒ½å°†æŽ§åˆ¶å­—符用于标准规定之外的目的。
+
+%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'.
+\TeX\ 中字符的å«ä¹‰é€šå¸¸å’Œæ ‡å‡† \ascii 中的å«ä¹‰ä¸€è‡´ã€‚
+è€Œä¸”åœ¨åŒ…å« \ascii\ å¯æ‰“å°å­—符的\refterm{字体}中,
+这些字符所在的ä½ç½®ä¹Ÿå’Œ \ascii\ 中的一样。
+但有些字体,特别是数学字体,
+å°† \ascii\ å¯æ‰“å°å­—符替æ¢ä¸ºä¸Ž \ascii\ 无关的字符。
+比如,计算机现代数学字体 ^^{计算机现代字体} |cmsy10|
+在 \ascii\ æ•°å­— `8' çš„ä½ç½®ä¸Šæ˜¯æ•°å­¦ç¬¦å· `{$\forall$}'。
+
+\endconcept
+
+%\conceptindex{assignments}
+%\concept assignment
+\conceptindex{赋值}
+\concept 赋值
+
+%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:
+\defterm{赋值}(assignment)是一ç§ä¸º \TeX\ 的寄存器,
+内部\refterm{å‚æ•°},内部表格项,或者\refterm{控制åºåˆ—}分é…值的结构。
+^^{寄存器//给寄存器赋值}^^{å‚æ•°//ç»™å‚数赋值}
+赋值的一些例å­å¦‚下:
+
+\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:
+第一个赋值è¦æ±‚ \TeX\ 分é…数值 |2000| 给数值å‚æ•° |\tolerance|,
+å³è®© |\tolerance| 的值等于 $2000$。其他赋值类似。
+赋值中的 `|=|' 和空格是å¯çœç•¥çš„,
+因此你也å¯ä»¥æŠŠç¬¬ä¸€ä¸ªèµ‹å€¼æ”¹å†™ä¸ºä¸‹é¢æ›´ç´§å‡‘çš„å½¢å¼ï¼š
+
+\csdisplay
+\tolerance2000
+|
+
+%See \knuth{pages~276--277} for the detailed syntax of assignments.
+%\endconcept
+在 \knuth{第~276--277~页}中对赋值语法有详细介ç»ã€‚
+\endconcept
+
+
+\bookmark{2}{以B开头}
+%\concept badness
+\concept 劣度
+
+%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.)
+文本行的\defterm{劣度}(badness)值测é‡è¯¥è¡Œçš„å­—é—´éš”å离它们的自然值多远,
+^^{å•è¯é—´è·}
+其中自然值就是文本行所用\refterm{字体}中指定的值。
+å离越大,劣度就越大。类似地,页é¢çš„劣度测é‡é¡µé¢ç›’å­çš„é—´éš”å离它们的ç†æƒ³å€¼å¤šè¿œã€‚%
+(一般地,这些盒å­å¤§å¤šæ•°æ˜¯æ®µè½çš„文本行。)
+
+%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$.
+更准确地说,劣度测é‡è¿™äº›é—´éš”对应的\refterm{粘连}è¦ä¼¸ç¼©å¤šå°‘æ‰èƒ½æ­£å¥½å¡«æ»¡æ–‡æœ¬è¡Œæˆ–页é¢ã€‚
+\TeX\ 让劣度近似等于,为组æˆæ‰€éœ€å°ºå¯¸çš„行或页,粘连必须伸缩的比例的立方的 $100$ å€ã€‚
+^^{断行//断行的劣度}^^{分页//分页的劣度}
+例如,粘连伸长了给定伸长é‡çš„两å€å¾—到的比例为 $2$ 而劣度为 $800$ï¼›
+粘连伸长了给定伸长é‡çš„一åŠå¾—到的比例为 $.5$ 而劣度为 $13$。
+\TeX\ 将超过 $10000$ 的劣度视为等于 $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:
+\TeX\ 分段为行时使用行劣度\seeconcept{断行点}。
+它在下é¢ä¸¤ä¸ªæ­¥éª¤ä¸­ä½¿ç”¨è¡ŒåŠ£åº¦ï¼š
+
+%\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
+\olist
+\li 在选择断行点时,\TeX\ è¦æ±‚å„行劣度å°äºŽæˆ–等于 |\tolerance| 值(\xref \tolerance )。
+如果ä¸å¾—ä¸æ”¾ç½®ä¸€ä¸ªåŠ£åº¦è¶…过此值的行,\TeX\ 将把它设定为未满或过满\refterm{水平盒å­}。
+\TeX\ 仅在万ä¸å¾—已时æ‰ä¼šæ”¾ç½®æœªæ»¡æˆ–过满水平盒å­ï¼Œå³ä»…在没有其他方法分段为行时。
+\li å‡è®¾å„行都相当糟糕,\TeX\ 用行劣度评价ä¸åŒçš„分段为行方å¼ã€‚
+在评价过程中它对æ¯ä¸ªå¯èƒ½çš„行结åˆä¸€ä¸ª``缺陷''。劣度会增加\refterm{缺陷}值。
+ç„¶åŽ \TeX\ 选择让段è½æ€»ç¼ºé™·æœ€å°çš„æ–¹å¼æ¥åˆ†æ®µä¸ºè¡Œã€‚
+在多数情况下,\TeX\ 使用让最糟糕行的劣度最å°çš„æ–¹å¼å®‰æŽ’段è½ã€‚
+请å‚阅\knuth{第~97--98~页}中 \TeX\ 如何分段为行的细节。
+\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
+\TeX 将一系列文本行和其他竖直模å¼ç´ æ组装为页é¢çš„过程与断行的过程类似。
+但是组装页é¢æ²¡é‚£ä¹ˆå¤æ‚,这是由于 \TeX\ 寻找分页点时æ¯æ¬¡åªè€ƒè™‘一个页é¢ï¼Œ
+å› æ­¤åªéœ€è¦å†³å®šåœ¨å“ªé‡Œç»“æŸå½“å‰é¡µé¢ã€‚
+与此相å,当选择断行点时 \TeX\ è¦åŒæ—¶è€ƒè™‘多行。%
+(大多数文字处ç†å™¨æ¯æ¬¡åªé€‰æ‹©ä¸€ä¸ªæ–­è¡Œç‚¹ï¼Œå› è€Œæ–­è¡Œåšå¾—ä¸å¦‚ \TeX\ 。)%
+请å‚阅\knuth{第~111--113~页}中 \TeX\ 如何选择分页点的细节。
+\endconcept
+
+
+%\conceptindex{baselines}
+%\concept baseline
+\concept 基线
+
+%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.
+ç›’å­çš„\defterm{基线}(baseline)是一æ¡æƒ³è±¡ä¸­çš„横穿盒å­çš„线。
+^^{ç›’å­//ç›’å­çš„基线}
+在将\refterm{水平列表}çš„ç›’å­ç»„装为更大的盒å­æ—¶ï¼Œ
+\TeX\ 将列表中å„ç›’å­å¯¹é½ï¼Œä»¥è®©å®ƒä»¬çš„基线é‡åˆã€‚
+打个比方,想象你在标线本上写字,你所写的æ¯ä¸ªå­—æ¯éƒ½æœ‰ä¸€æ¡éšå«åŸºçº¿ã€‚
+为让å„å­—æ¯æ°´å¹³å¯¹é½ï¼Œä½ ä¼šè®©å®ƒä»¬çš„基线和本å­ä¸Šå°åˆ·çš„浅色æ示线é‡åˆã€‚
+
+%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
+ç›’å­å¯ä»¥è€Œä¸”也ç»å¸¸ä¼šå»¶ä¼¸åˆ°åŸºçº¿ä¸‹è¾¹ã€‚
+æ¯”å¦‚ï¼Œå­—æ¯ `g' 就延伸到其盒å­çš„基线下边,因为它有一个é™éƒ¨ï¼ˆ`g' 底部弯曲部分)。
+\endconcept
+
+
+%\conceptindex{boxes}
+%\concept box
+\concept ç›’å­
+
+%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.
+\defterm{ç›’å­}(box)是è¦æŽ’版的矩阵素æ。
+å•ä¸ª\refterm{字符}自身就是一个盒å­ï¼Œæ•´ä¸ªé¡µé¢åŒæ ·ä¹Ÿæ˜¯ä¸€ä¸ªç›’å­ã€‚
+\TeX\ 用盒å­å¥—ç›’å­å¥—ç›’å­ä»¥å½¢æˆé¡µé¢ã€‚最外层盒å­å°±æ˜¯é¡µé¢è‡ªèº«ï¼Œ
+最内层盒å­å¤šåŠæ˜¯å•ä¸ªå­—符,而å•ä¸ªæ–‡æœ¬è¡Œçš„ç›’å­åœ¨ä¸­é—´æŸä¸ªåœ°æ–¹ã€‚
+
+%\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}
+\TeX\ 在构造段è½å’Œé¡µé¢æ—¶éšå¼æ‰§è¡Œå¤§å¤šæ•°ç›’å­æž„建活动。
+利用一些 \TeX\ \refterm{命令},比如 ^|\hbox|\ctsref{\hbox}ã€
+^|\vbox|\ctsref{\vbox}å’Œ ^|\vtop|\ctsref{\vtop},你å¯ä»¥æ˜¾å¼æž„造盒å­ã€‚
+^|\hbox| 命令通过从左到å³æ°´å¹³æ·»åŠ è¾ƒå°çš„ç›’å­æž„造一个盒å­ï¼›
+它对一个\refterm{水平列表}进行æ“作以生æˆä¸€ä¸ª\refterm{水平盒å­}^^{水平盒å­}(horizontal box)。
+^^{水平列表}
+^|\vbox| å’Œ |\vtop| 命令通过从上到下竖直添加较å°çš„ç›’å­æž„造一个盒å­ï¼›
+它们对一个\refterm{竖直列表}进行æ“作以生æˆä¸€ä¸ª\refterm{ç«–ç›´ç›’å­}^^{ç«–ç›´ç›’å­}(vertical box)。
+^^{竖直列表}
+这些水平列表和竖直列表ä¸ä»…å¯ä»¥åŒ…å«è¾ƒå°çš„ç›’å­ï¼Œ
+还å¯ä»¥åŒ…å«å…¶ä»–几ç§å®žä½“,比如\refterm{粘连}和紧排。
+^^{紧排//作为列表项目}
+
+%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
+%}}
+ç›’å­æœ‰\refterm{高度}ã€\refterm{深度}å’Œ\refterm{宽度},
+^^{高度} ^^{深度} ^^{宽度}
+如下所示
+\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.
+^^{基线}
+\refterm{基线}(baseline)如åŒæ ‡çº¿æœ¬ä¸Šçš„浅色æ示线。
+åƒ `g' 这样的字æ¯ç›’å­å»¶ä¼¸åˆ°åŸºçº¿ä¸‹è¾¹ï¼›è€Œåƒ `h' 这样的字æ¯ç›’å­å´ä¸ä¼šã€‚
+ç›’å­çš„高度是盒å­åœ¨åŸºçº¿ä¸Šè¾¹çš„延伸è·ç¦»ï¼Œè€Œå®ƒçš„深度是在基线下边的延伸è·ç¦»ã€‚
+\bix^^{基准点}
+ç›’å­çš„\minref{基准点}(reference point)是它的基线与左边缘的交点。
+
+%{\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}
+åœ¨ä»Žæ°´å¹³åˆ—è¡¨æž„å»ºæ°´å¹³ç›’å­ $H$ 时,\TeX\ 先设定 $H$ 的基准点,
+然åŽä»Žå·¦åˆ°å³é€ä¸ªæ·»åŠ åˆ—表中的项目到 $H$ 中。
+列表中的æ¯ä¸ªç›’å­æŒ‰ç…§å…¶åŸºçº¿ä¸Ž $H$ 的基线é‡åˆçš„æ–¹å¼æ”¾ç½®ï¼Œ
+å³è®©ç»„æˆç›’å­æ°´å¹³æŽ’æˆä¸€æŽ’。%
+\footnote{若盒å­è¢« ^|\raise| 或 ^|\lower| å‡é«˜æˆ–é™ä½Žäº†ï¼Œ
+\TeX\ 放置时使用它移动之å‰çš„基准点。}
+$H$ 的高度等于列表中最高盒å­çš„高度,而深度等于列表中最深盒å­çš„深度。
+$H$ 的宽度等于列表中所有项目的宽度之和。
+如果这些项目中有的是\refterm{粘连},\TeX\ 需è¦ä¼¸ç¼©ç²˜è¿žï¼Œ
+从而 $H$ 的宽度将相应地å˜å¤§æˆ–å˜å°ã€‚请å‚阅\knuth{第~77~页}的细节æ述。
+
+%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.
+ç±»ä¼¼åœ°ï¼Œåœ¨ä»Žç«–ç›´åˆ—è¡¨æž„å»ºç«–ç›´ç›’å­ $V$ 时,\TeX\ 先设定 $H$ 的临时基准点,
+然åŽä»Žä¸Šåˆ°ä¸‹é€ä¸ªæ·»åŠ åˆ—表中的项目到 $V$ 中。
+列表中的æ¯ä¸ªç›’å­æŒ‰ç…§å…¶åŸºå‡†ç‚¹ä¸Ž $V$ 的基准点竖直对é½çš„æ–¹å¼æ”¾ç½®ã€‚%
+\footnote{如果盒å­è¢« ^|\moveleft| 或 ^|\moveright| 左移或å³ç§»äº†ï¼Œ
+\TeX\ 放置时使用它移动之å‰çš„基准点。}
+在第一个除外的æ¯ä¸ªç›’å­åŠ åˆ° $V$ 时,\TeX\ 在它之å‰æ”¾ç½®\minref{行间粘连}。%
+(在水平盒å­ä¸­æ²¡æœ‰å’Œ^{行间粘连}对应的东西。)%
+$V$ 的宽度等于列表中最宽盒å­çš„宽度,
+而 $V$ 的竖直长度(高度加深度)等于列表中所有项目的竖直长度之和。
+
+%\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}.}
+\bix^^|\vbox|
+\bix^^|\vtop|
+|\vbox| 和 |\vtop| 的区别在于它们如何将 $V$ 的竖直长度划分为高度和深度。
+选定了 $V$ 的基准点就决定了划分方å¼ã€‚
+\ulist
+\li 对于 |\vbox|,\TeX\ 将基准点放在 $V$ 的最åŽä¸€ä¸ªç»„æˆç›’å­æˆ–标线的基准点所在的水平线上,
+除éžæœ€åŽä¸€ä¸ªç›’å­ï¼ˆæˆ–标线)之åŽè¿˜æœ‰ç²˜è¿žæˆ–紧排,此时 \TeX\ 将基准点放在 $V$ 的最底端。
+\footnote{æ·±åº¦è¿˜å— ^|\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.
+\li 对于 |\vtop|,\TeX\ 将基准点放在 $V$ 的第一个组æˆç›’å­æˆ–标线的基准点所在的水平线上,
+除éžç¬¬ä¸€ä¸ªç›’å­ï¼ˆæˆ–标线)之å‰è¿˜æœ‰ç²˜è¿žæˆ–紧排,此时 \TeX\ 将基准点放在 $V$ 的最顶端。
+
+%\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}
+\endulist
+\noindent
+粗略地说,|\vbox| 将基准点放在é è¿‘ç«–ç›´ç›’å­åº•éƒ¨å¤„,而|\vtop| 将基准点放在é è¿‘顶部处。
+在你想对é½ä¸€è¡Œç«–ç›´ç›’å­ï¼Œè®©å®ƒä»¬çš„顶部水平排æˆä¸€æŽ’时,你通常应该使用 |\vtop| 而ä¸æ˜¯ |\vbox|。
+请å‚阅\knuth{第~78 å’Œ 80--81~页}中 \TeX\ 如何构建竖直盒å­çš„详细信æ¯ã€‚
+\eix^^|\vbox|
+\eix^^|\vtop|
+\eix^^{基准点}
+
+%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
+ä½ å¯ä»¥æŠŠä¸€ä¸ªç›’å­ä¿å­˜åœ¨ç›’å­\refterm{寄存器}中并在ç¨åŽå–回它。
+在使用盒å­å¯„存器之å‰ï¼Œ
+^^{ç›’å­å¯„存器}
+你应当用 ^|\newbox| 命令\ctsref{\@newbox}预留它并给它命å。
+请å‚阅\conceptcit{寄存器}中的关于盒å­å¯„存器的更多信æ¯ã€‚
+\endconcept
+
+\bookmark{2}{以C开头}
+%\conceptindex{category codes}
+%\concept {category code}
+\conceptindex{类别ç }
+\concept {类别ç }
+
+%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.
+字符的\defterm{类别ç }(category code)决定它在 \TeX\ 中扮演的角色。
+^^{字符//字符的类别ç }
+例如,\TeX\ 赋予æŸä¸ªè§’色给字æ¯ï¼Œå¦ä¸€ä¸ªè§’色给空格符,诸如此类。
+\TeX\ 给读到的æ¯ä¸ªå­—符都附加一个代ç ã€‚
+例如,\TeX\ è¯»åˆ°å­—æ¯ `|r|' æ—¶é™„åŠ ç±»åˆ«ç  $11$(字æ¯ç¬¦ï¼‰ç»™å®ƒã€‚
+在简å•åœ°ä½¿ç”¨ \TeX\ 时你无需考虑到类别ç ï¼Œ
+但当你试图达到特别效果时它们就å˜å¾—很é‡è¦ã€‚
+
+%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.
+类别ç åªé™„加到 \TeX\ 从输入文件中读å–的字符中。
+åªè¦å­—符到达 \TeX\ çš„^{食é“}\seeconcept{\anatomy}并被解释完,它的类别ç å°±ä¸å†æ”¹å˜ã€‚
+用 ^|\char| 命令\ctsref{\char}生æˆçš„字符没有类别ç ï¼Œ
+因为 |\char| 命令是一个让 \TeX\ 生æˆç‰¹å®š\refterm{字体}中的æŸä¸ªç‰¹å®šå­—符的指令。
+例如,`|\|'(通常的转义字符)的^{\ascii} ç æ˜¯ $92$。
+如果你键入 `|\char92 grok|',å´\emph{并ä¸}ç­‰åŒäºŽ |\grok|。
+实际上它让 \TeX\ 排版出 `$c$grok',其中 $c$ 是当å‰å­—体的编ç è¡¨ä¸­ä½ç½®ä¸º $92$ 的字符。
+
+%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.
+ä½ å¯ä»¥ç”¨ ^|\catcode| 命令\ctsref{\catcode}é‡æ–°è®¾å®šä»»ä½•å­—符的类别ç ã€‚
+改å˜äº†ç±»åˆ«ç å°±æ”¹å˜äº†å„ç§å­—符所扮演的角色。
+例如,如果你键入 `|\catcode`\@ = 11|',|@| 符å·çš„类别ç å°±è¢«è®¾å®šä¸ºâ€œå­—æ¯ç¬¦â€ã€‚
+这样你就å¯ä»¥åœ¨æŽ§åˆ¶åºåˆ—å称中使用 `|@|' 。
+
+%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:
+这里给出\refterm{\plainTeX} 定义的类别ç åˆ—表,以åŠæ¯ä¸ªç±»åˆ«ä¸­çš„字符(\xref{twocarets}有|^^|记法的解释):
+
+%\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
+\xrdef{catcodes}
+\vskip\abovedisplayskip
+%k \vskip 0pt plus 2pt % to fix bad page break
+{%k \interlinepenalty = 10000
+\halign{\indent\hfil\strut#&\qquad#\hfil&\qquad#\hfil\cr
+\it ç¼–ç &\it æ„义&\it 字符\cr
+\noalign{\vskip\tinyskipamount}
+0&转义符 & |\| ^^{转义符//转义符的类别ç }
+ %{\recat!ttidxref[\//其类别ç ]]
+ \cr
+1&编组开始符& |{| ^^{编组}
+ %{\recat!ttidxref[{//其类别ç ]]
+ \cr
+2&编组结æŸç¬¦& |}|
+ %{\recat!ttidxref[}//其类别ç ]]
+ \cr
+3&数学环境符& |$| ^^{数学开关}
+ %{\recat!ttidxref[$//其类别ç ]]
+ \cr
+4&阵列制表符& |&| ^^{制表} ^^{阵列//阵列的制表符}
+ \ifoldeplain\ttidxref{&//其类别ç }\fi \cr
+5&行结æŸç¬¦ & |^^M| \tequiv \ascii\ \asciichar{return}
+ ^^{行结æŸç¬¦} \ifoldeplain\ttidxref{^^M//其类别ç }\fi\cr
+6&å®å‚数符 & |#|
+ ^^{å®//å®çš„å‚æ•°}
+ ^^{å‚æ•°//用 \b\tt\#\e 指明}
+ \ifoldeplain\ttidxref{#//其类别ç }\fi \cr
+7&上标符 & |^| 和 |^^K| ^^{上标}
+ \ttidxref{^^K}
+ \ifoldeplain\ttidxref{^//其类别ç }\fi \cr
+8&下标符 & |_| 和 |^^A| ^^{下标}
+ \ttidxref{^^A}
+ \ifoldeplain\ttidxref{_//其类别ç }\fi \cr
+9&å¯å¿½ç•¥ç¬¦ & |^^@| \tequiv \ascii\ \asciichar{null}
+ ^^{å¯å¿½ç•¥ç¬¦} \indexchar ^^@ \cr
+10&空格符 & \visiblespace\ 和 |^^I| \tequiv \ascii\
+ \asciichar{horizontal\ tab}
+ ^^{水平制表符}
+ ^^{空格符//其类别ç } \indexchar ^^I
+ %{\recat!ttidxref[ ]]
+ \cr
+11&å­—æ¯ç¬¦ & |A| \dots |Z| å’Œ |a| \dots |z| ^^{å­—æ¯}\cr
+12&其他字符 &(ä¸å±žäºŽå…¶ä»–类别的字符)
+ ^^{其他字符}\cr
+13&活动字符 & |~| 和 |^^L| \tequiv\ascii\ \asciichar{form\ feed}
+ ^^{活动字符} ^^{æ¢é¡µç¬¦} \indexchar ~ \indexchar ^^L \cr
+14&注释符 & |%| ^^{注释}
+ %{\recat!ttidxref[%//其类别ç ]]
+ \cr
+15&无效字符 & |^^?| \tequiv \ascii\ \asciichar{delete}
+ ^^{无效字符} \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]|'}.
+\noindent 除了第 $11$--$13$ 类别,一个类别中的所有字符产生的效果都相åŒã€‚
+\margin{Misleading material removed.}
+例如,å‡è®¾ä½ é”®å…¥ï¼š
+\csdisplay
+\catcode`\[ = 1 \catcode`\] = 2
+|
+则左方括å·å’Œå³æ–¹æ‹¬å·åˆ†åˆ«å°±å˜æˆç¼–组开始符和编组结æŸç¬¦ï¼Œå³å®ƒä»¬åˆ†åˆ«å’Œå·¦èŠ±æ‹¬å·å’Œå³èŠ±æ‹¬å·ç­‰ä»·ã€‚
+在这些定义之下,`|[a b]|' 是一个有效的编组,\hbox{`|[a b}|'} å’Œ \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.
+类别为 $11$(字æ¯ç¬¦ï¼‰æˆ– $12$(其他字符)的字符æˆä¸ºä¸€ä¸ª\refterm{命令},
+它表示“用当å‰å­—体排版这个字符并放在一个\refterm{ç›’å­}中â€ã€‚
+å­—æ¯ç¬¦å’Œâ€œå…¶ä»–字符â€çš„惟一区别是,字æ¯ç¬¦å¯ä»¥å‡ºçŽ°åœ¨\refterm{控制è¯}中而“其他字符â€ä¸èƒ½ã€‚
+
+%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}
+类别为 $13$(活动字符)的字符å•ç‹¬ä½œä¸ºæŽ§åˆ¶åºåˆ—。
+如果 \TeX\ 碰到一个未定义的活动字符,它将会报错。
+^^{活动字符}
+
+%If \TeX\ encounters an ^{invalid character} (category $15$)
+%in your input, it will complain about it.
+如果 \TeX\ 在输入中碰到一个^{无效字符}(类别为$15$),它也会报错。
+
+%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}
+字符 `|^^K|' å’Œ `|^^A|' 被包å«åœ¨ç±»åˆ«$7$(上标符)和 $8$(下标符)中,
+å³ä½¿å®ƒä»¬çš„æ„义并ä¸ç¬¦åˆæ ‡å‡†\refterm{\ascii} 中的解释。
+这是因为æŸäº›é”®ç›˜ï¼Œå°¤å…¶æ˜¯ \TeX\ èµ·æºåœ°å“ˆä½›å¤§å­¦çš„键盘,用上方å‘键和下方å‘键生æˆè¿™ä¸¤ä¸ªå­—符。
+\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:
+在 \TeX\ 分é…类别ç çš„æ–¹å¼ä¸­æœ‰ä¸ªç»†å¾®ä¹‹å¤„,如果没注æ„到它你就会犯错误。
+\TeX\ 在åˆæ­¥æ‰«æ时有时候需è¦æŸ¥çœ‹ä¸€ä¸ªå­—符两次:
+第一次找到å‰é¢çš„控制åºåˆ—等结构的结æŸä½ç½®ï¼Œç¬¬äºŒæ¬¡æ‰å°†è¯¥å­—符转æ¢ä¸ºè®°å·ã€‚
+\TeX\ 在\emph{第二次}查看该字符时æ‰ä¼šç»™å®ƒåˆ†é…类别ç ã€‚例如:
+
+%\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$|.
+\csdisplay
+\def\foo{\catcode`\$ = 11 } % å°† $ å˜æˆå­—æ¯ç¬¦ã€‚
+\foo$ % 生æˆä¸€ä¸ª `$'。
+\foo$ % 未定义的控制åºåˆ— `foo$'。
+|
+\noindent
+这段 \TeX\ 代ç åœ¨è¾“å‡ºä¸­ç”Ÿæˆ `\$'。
+在第二行,当 \TeX\ 首次查看 `|$|' 时,它是在寻找控制åºåˆ—å称的结æŸä½ç½®ã€‚
+由于 `|$|' 还ä¸æ˜¯å­—æ¯ç¬¦ï¼Œå®ƒè¡¨ç¤º `|\foo|' 已结æŸã€‚
+接下æ¥ï¼Œ\TeX\ 展开 `|\foo|' å®å¹¶å°† `|$|' 的类别ç æ”¹ä¸º $11$(字æ¯ç¬¦ï¼‰ã€‚
+ç„¶åŽ \TeX\ æ‰â€œçœŸæ­£åœ°â€è¯»å– `|$|'。
+由于 `|$|' å·²ç»æ˜¯å­—æ¯ç¬¦ï¼Œ\TeX\ 用当å‰å­—体生æˆåŒ…å« `|$|' çš„ç›’å­ã€‚
+当 \TeX\ 看到第三行时,它将 `|$|' 视为字æ¯ç¬¦ï¼Œå› æ­¤è®¤ä¸ºå®ƒæ˜¯æŽ§åˆ¶åºåˆ—å称的一部分。
+结果它抱怨 |\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
+å³ä½¿å½“结æŸç¬¦å·æ˜¯è¡Œå°¾ç¬¦æ—¶ï¼Œ\TeX\ 也是这样处ç†çš„。
+举个例å­ï¼Œå‡è®¾ä½ ç”¨ |\fum| å®æ¿€æ´»è¡Œå°¾ç¬¦ã€‚
+那么,如果 |\fum| å•ç‹¬å‡ºçŽ°åœ¨ç¬¬ $\ell$ 行中,
+\TeX\ 将首先将第$\ell$行的行尾符解释为 |\fum| 控制åºåˆ—的结æŸï¼Œ
+然åŽå°†è¯¥è¡Œå°¾ç¬¦\emph{é‡æ–°è§£é‡Š}为活动字符。
+\endconcept
+
+
+%\conceptindex{characters}
+%\concept character
+\concept 字符
+
+%{\tighten
+%\TeX\ works with \defterm{字符} 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\ 在两个方é¢ç”¨åˆ°\defterm{字符}(character):
+作为读å–的输入字符,以åŠä½œä¸ºæŽ’版的输出字符。
+\TeX\ 将大多数输入字符转å˜æˆè¾“出字符以显示它们。
+ä¾‹å¦‚ï¼Œå®ƒé€šå¸¸å°†è¾“å…¥å­—æ¯ `|h|' 转æ¢ä¸ºç”¨å½“å‰å­—ä½“æŽ’ç‰ˆçš„å­—æ¯ `h'。
+但是,对于类似 `|$|' 这些有特别æ„义的字符,å´ä¸æ˜¯è¿™ä¹ˆå›žäº‹ã€‚
+
+%\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$.
+\TeX\ 通过读å–输入文件(或终端)和展开\refterm{å®}得到输入字符。
+它们是 \TeX\ 获å–输入字符的\emph{仅有的}途径。
+æ¯ä¸ªè¾“入字符有一个编ç ï¼Œå®ƒè¡¨ç¤ºè¯¥å­—符在\refterm{\ascii} ç è¡¨çš„ä½ç½®ã€‚
+^^{\ascii}
+ä¾‹å¦‚ï¼Œå­—æ¯ `|T|' çš„ \ascii\ ç¼–ç ä¸º $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.
+在读å–字符时,\TeX\ 给它附加一个\refterm{类别ç }。
+^^{类别ç //在读å–时附加}
+类别ç å½±å“ \TeX\ 读å–字符时对该字符的解释。
+在读å–å®å®šä¹‰æ—¶ï¼Œ\TeX\ 判定(并记ä½ï¼‰å®é‡Œé¢çš„字符的类别ç ã€‚
+在用它的眼ç›è¯»å–字符时\seeconcept{\anatomy},\TeX\ 执行一些“过滤â€ï¼Œ
+比如将连续多个空格压缩为一个。在\knuth{第~46--48~页}中æ述了过滤的细节。
+
+%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}
+\ascii{}“^{控制字符}â€çš„ç¼–ç ä¸º $0$--$31$ å’Œ $127$--$255$。
+倘若你试图在终端中显示它们,在多数终端中它们将显示ä¸å‡ºæ¥æˆ–导致奇怪行为。
+å³ä¾¿å¦‚此,有时候它们还是需è¦åœ¨ \TeX\ 输入中出现,
+因此对这些字符 \TeX\ 给出了一ç§ç‰¹åˆ«çš„表示法。
+\xrdef{twocarets}
+如果你键入 `|^^|$c$',其中 $c$ 为任何字符,
+你将得到一个比 $c$ çš„\ascii\ ç å¤§ $64$ æˆ–å° $64$ 的字符。
+è¿™ç§è¡¨ç¤ºæ³•å¾—到的编ç ä¸èƒ½è¶…过 $127$,因此它是无歧义的。
+è¿™ç§è¡¨ç¤ºæ³•çš„三个最常è§ä¾‹å­æ˜¯ `|^^M|'(\ascii\ \asciichar{return}字符),
+`|^^J|'(\ascii\ \asciichar{line\ feed}字符)和
+`|^^I|'(\ascii\ \asciichar{horizontal\ tab}字符)。
+\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}
+\TeX\ 还有å¦ä¸€ç§æŒ‡æ˜Ž \ascii\ ç¼–ç çš„表示法,它能够表示从 $0$ 到 $255$ 的所有字符。
+\xrdef{hexchars}
+如果你键入 `|^^|$xy$',其中 $x$ å’Œ $y$ 是任何^{å六进制数字} `|0123456789abcdef|',
+你就得到该编ç å¯¹åº”的字符(这里åªèƒ½ä½¿ç”¨å°å†™å­—符。)
+\TeX\ 优先选择“å六进制数字â€è¿™ç§è§£é‡Šï¼Œ
+因此在类似 `|^^a|' 的字符åŽé¢ä¸è¦è·Ÿç€ä¸€ä¸ªå°å†™å六进制数字——这样将会得到错误的解释。
+在需è¦ä½¿ç”¨è¿™ç§è¡¨ç¤ºæ³•æ—¶ï¼Œä½ ä¼šå‘现有个\ascii\ ç¼–ç è¡¨æ›´æ–¹ä¾¿äº›ã€‚
+
+%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.
+输出字符就是待排版的字符。生æˆè¾“出字符的命令有这样的æ„义:
+“生æˆä¸€ä¸ªåŒ…å«å½“å‰\refterm{字体}第$n$个字符的盒å­â€ï¼Œå…¶ä¸­$n$由该命令给出。
+\TeX\ 将这些盒å­å’Œå…¶ä»–排版\hbox{元素}组åˆèµ·æ¥å¹¶åœ¨é¡µé¢ä¸ŠæŽ’好,以生æˆä½ æŽ’版的文档。
+
+%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'.)
+类别ç ä¸º $11$(^{å­—æ¯})或 $12$(其他)^^{其他字符}的输入字符,
+是一个生æˆå¯¹åº”输出字符的命令。
+å¦å¤–,你也å¯ä»¥ç”¨ `|\char |$n$'\ctsref{\char}^^|\char| 让 \TeX\ 生æˆå­—符 $n$,
+其中$n$是介于$0$和$255$之间的\refterm{数}。
+命令 `|h|',|\char`h| å’Œ |\char104| 的结果相åŒï¼ˆ$104$ 是`h' çš„\ascii\ ç¼–ç ã€‚)
+
+\endconcept
+
+
+%\concept class
+\concept ç±»
+
+%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}$$
+\refterm{字符}所属的\defterm{ç±»}(class)指明该字符在数学公å¼ä¸­çš„角色。
+字符的类记录在它的\refterm{æ•°å­¦ç }中。^^{æ•°å­¦ç //æ•°å­¦ç ä¸­çš„ç±»}
+ä¾‹å¦‚ï¼Œç­‰å· `|=|' 属于第 $3$ 类(关系符å·ï¼‰ã€‚
+\TeX\ 利用字符类的知识确定数学公å¼çš„å„部分的间隔的大å°ã€‚
+\margin{clarifying material added}
+例如,下é¢è¿™ä¸ªå…¬å¼é¦–先用正常方å¼æ˜¾ç¤ºï¼Œç„¶åŽç”¨éšæœºä¿®æ”¹å„字符类的方å¼æ˜¾ç¤ºï¼š
+$$\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.
+å‚è§æœ¬ä¹¦\xrefpg\mathord 中å„ç§ç±»çš„列表,
+以åŠ\knuth{第~154~页}中å„ç§ç±»çš„å«ä¹‰ã€‚
+
+\endconcept
+
+
+%\conceptindex{commands}
+%\concept command
+\concept 命令
+
+%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.
+\defterm{命令}(command)指导 \TeX\ 执行æŸç§åŠ¨ä½œã€‚
+到达\TeX\ 的胃\seeconcept{\anatomy}çš„æ¯ä¸ª\refterm{è®°å·}都作为一个命令,
+那些作为其他命令的å‚é‡ï¼ˆè§ä¸‹é¢ï¼‰çš„è®°å·é™¤å¤–。
+^^{è®°å·//作为命令}
+命令å¯ä»¥ç”±\refterm{控制åºåˆ—},由\refterm{活动字符},或者由普通字符产生。
+\TeX\ 将普通字符视为命令这事看æ¥æœ‰äº›å¥‡æ€ªï¼Œä½†å®žé™…上它是这样åšçš„:
+当 \TeX\ 看到一个普通字符时,它构造一个用当å‰å­—体排版该字符的\refterm{ç›’å­}。
+
+%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.
+命令å¯ä»¥æœ‰å‚é‡ã€‚命令的å‚é‡ä¸ºå•ä¸ªè®°å·æˆ–一组记å·ï¼Œ
+它们完æˆå¯¹å‘½ä»¤è¯¥å¦‚何执行的说明。
+例如,命令 `|\vskip 1in|' 告诉 \TeX\ 竖直跳过 $1$ 英寸。
+它有一个å‚é‡ `|1in|' 包å«ä¸‰ä¸ªè®°å·ã€‚
+如果ä¸æŒ‡æ˜Žè·³è¿‡çš„è·ç¦»ï¼Œå¯¹ |\vskip| 如何执行的说明就是ä¸å®Œæ•´çš„。
+这些出现在命令å‚é‡ä¸­çš„è®°å·ä¸è¢«çœ‹æˆå‘½ä»¤ã€‚
+
+%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
+å„ç§ç±»åž‹çš„ \TeX\ 命令的一些例å­å¦‚下:
+\ulist\compact
+\li 普通字符,比如 `|W|' 指导 \TeX\ 生æˆåŒ…å«æŽ’版好的 `W' çš„ç›’å­
+\li 字体设置命令,比如 |\bf| 开始粗体形å¼
+\li é‡éŸ³ç¬¦ï¼Œæ¯”如 |\`| 生æˆä¸€ä¸ªå¦‚åŒ `\`e' çš„é’音符
+\li 特殊符å·å’Œè¿žå†™ï¼Œæ¯”如 |\P|(\P )和 |\ae|(\ae )
+\li å‚数,比如 |\parskip| 说明 \TeX\ 在段è½é—´æ·»åŠ çš„粘连的大å°
+\li 数学符å·ï¼Œæ¯”如 |\alpha|($\alpha$)和 |\in|($\in$)
+\li æ•°å­¦è¿ç®—符,比如 |\over| 生æˆä¸€ä¸ªåˆ†å¼
+\endulist
+\endconcept
+
+
+%\conceptindex{conditional tests}
+%\concept {conditional test}
+\concept {æ¡ä»¶æµ‹è¯•}
+
+%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
+\defterm{æ¡ä»¶æµ‹è¯•}(conditional test)是一个命令,它测试æŸä¸ªæ¡ä»¶æ˜¯å¦æˆç«‹ï¼Œ
+并ä¾æ­¤è®© \TeX\ 展开或忽略æŸäº›æ–‡æœ¬ã€‚æ¡ä»¶æµ‹è¯•çš„一般形å¼æ˜¯ï¼š
+\display{
+{\tt \\if}$\alpha$\<true text>{\tt \\else}\<false text>{\tt \\fi}}
+^^|\else|^^|\fi|
+\noindent 或者:\hfil\
+\display{
+{\tt \\if}$\alpha$\<true text>{\tt \\fi}}
+\noindent 其中 $\alpha$ 指定æŸä¸ªç‰¹å®šçš„测试。
+例如,|\ifvmode| 测试 \TeX\ 是å¦ä½äºŽ\refterm{竖直模å¼}中。
+如果æ¡ä»¶æˆç«‹ï¼Œ\TeX\ 展开 \<true text>。
+如果æ¡ä»¶ä¸æˆç«‹ï¼Œ\TeX\ 展开 \<false text>(如果它存在)。
+æ¡ä»¶æµ‹è¯•åœ¨ \TeX\ 的食é“\seeconcept{\anatomy}中解释,
+因此在解释出的文本中,任何å¯å±•å¼€\minref{è®°å·}都被展开了。
+在\headcit{æ¡ä»¶æµ‹è¯•}{conds}中解释了å„ç§æ¡ä»¶æµ‹è¯•ã€‚
+\endconcept
+
+
+%\conceptindex{control sequences}
+%\concept{control sequence}
+\concept{控制åºåˆ—}
+
+%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:
+\defterm{控制åºåˆ—}(control sequence)是 \TeX\ \refterm{命令}çš„å称。
+控制åºåˆ—总是以^{转义符}开头,å³ä»¥åæ–œæ ï¼ˆ|\|)开头。
+\indexchar \
+控制åºåˆ—必为如下两ç§å½¢å¼ä¸­çš„一ç§ï¼š
+
+%\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.)
+\ulist
+\li \refterm{控制è¯}是由\refterm{转义符}紧跟一个或多个字æ¯ç»„æˆçš„控制åºåˆ—。
+^^{控制è¯}
+控制è¯åœ¨ \TeX\ 碰到éžå­—æ¯ç¬¦æ—¶ç»“æŸã€‚
+例如,当 \TeX\ è¯»å– `\hbox{|\hfill!visiblespace,!visiblespace!.the|}' 时,
+它看到六个\refterm{è®°å·}:控制åºåˆ— `|\hfill|'ã€é€—å·ã€ç©ºæ ¼ã€`|t|'ã€`|h|'ã€`|e|'。
+在 \TeX\ 扫æ控制åºåˆ—时,`|\hfill|'之åŽçš„空格结æŸè¯¥æŽ§åˆ¶åºåˆ—并被å¸æ”¶æŽ‰ã€‚%
+(å¦ä¸€æ–¹é¢ï¼Œå¯¹äºŽ `|\hfill,!visiblespace!.the|',
+逗å·ä¸ä»…结æŸæŽ§åˆ¶åºåˆ—,而且自身也算作一个字符。)
+%\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.
+\li \refterm{控制符}是由^{转义符}紧跟å•ä¸ªéžå­—æ¯ç¬¦ç»„æˆçš„控制åºåˆ—%
+——éžå­—æ¯ç¬¦ä¹Ÿå¯ä»¥æ˜¯ç©ºæ ¼ç¬¦æˆ–者行尾符。
+^^{控制符}
+æŽ§åˆ¶ç¬¦æ˜¯è‡ªå®šç•Œçš„ï¼Œå³ \TeX\ 无需读å–åŽé¢çš„字符就知é“它在哪里结æŸã€‚
+控制符之åŽçš„字符永远ä¸ä¼šè¢«å¸æ”¶æŽ‰ã€‚
+\endulist
+\noindent ä½ å¯ä»¥å‚考\xrefpg{spaces},其中有对控制åºåˆ—åŽçš„空格的介ç»ã€‚
+
+%\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.
+\TeX\ æ供了许多预定义的控制åºåˆ—。
+\refterm{原始的}控制åºåˆ—内建于 \TeX\ 程åºä¸­ï¼Œå› æ­¤å¯ä»¥åœ¨å„ç§ \TeX\ å½¢å¼ä¸­ä½¿ç”¨ã€‚
+^^{原始的//原始控制åºåˆ—}
+其他预定义的控制åºåˆ—ç”±\refterm{\plainTeX}(å³æœ¬ä¹¦æè¿°çš„ \TeX\ å½¢å¼ï¼‰æ供。
+
+%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
+ä½ å¯ä»¥ç”¨è‡ªå·±çš„控制åºåˆ—扩充预定义的控制åºåˆ—,åªéœ€ç”¨ ^|\def| å’Œ ^|\let| 等命令定义它们。
+本书\chapterref{eplain}包å«äº†ä¸€æ‰¹å®žç”¨çš„控制åºåˆ—定义。
+此外,你的计算设备也å¯èƒ½æ供一批本地开å‘çš„ \TeX\ å®ã€‚
+\endconcept
+
+
+%\conceptindex{control symbols}
+%\concept{control symbol}
+\concept{控制符}
+
+%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
+\defterm{控制符}(control symbol)是由\refterm{转义符}紧跟å•ä¸ªéžå­—æ¯ç¬¦ç»„æˆçš„%
+\refterm{控制åºåˆ—}——éžå­—æ¯ç¬¦ä¹Ÿå¯ä»¥æ˜¯ç©ºæ ¼ç¬¦æˆ–者行尾符。
+^^{转义符}
+\endconcept
+
+
+%\conceptindex{control words}
+%\concept{control word}
+\concept{控制è¯}
+
+%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
+\defterm{控制è¯}(control word)是由\refterm{转义符}紧跟一个或多个字æ¯
+组æˆçš„\refterm{控制åºåˆ—}。\footnote{其中“字æ¯â€çš„确切å«ä¹‰æ˜¯æŒ‡ç±»åˆ«ç ä¸º $11$ 的字符。}
+\TeX\ 忽略控制è¯ä¹‹åŽçš„空格符或行尾符,仅仅用它们表示控制è¯çš„结æŸã€‚
+^^{转义符}
+\endconcept
+
+
+\bookmark{2}{以D开头}
+%\concept {decimal constant}
+\concept {å°æ•°}
+
+è§\conceptcit{æ•°}。
+\endconcept
+
+
+%\conceptindex{delimiters}
+%\concept delimiter
+\concept 定界符
+
+%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.
+\defterm{定界符}(delimiter)是一个作为数学公å¼çš„å¯è§è¾¹ç•Œçš„字符。
+\TeX\ å¯ä»¥æ ¹æ®å­å…¬å¼çš„竖直尺寸(\refterm{高度}加\refterm{深度})调整定界符大å°ï¼Œ
+这就是定界符的本质特性。
+然而,è¦è®© \TeX\ 对定界符作调整,定界符必须出现在“定界环境â€ä¸­ï¼Œ
+å³ä½œä¸º ^|\left|ã€^|\right|ã€|\overwithdelims|ã€|\atopwithdelims|或 |\abovewithdelims|%
+(è§\xrefn{\overwithdelims},\xrefn{\left}页)这些命令之一的å‚é‡ã€‚
+^^|\overwithdelims|
+^^|\atopwithdelims|
+^^|\abovewithdelims|
+\margin{Footnote deleted}
+定界环境也包括在定界环境中使用å‚é‡çš„\refterm{å®}的任何\refterm{å‚é‡}。
+
+%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.
+举例说,左圆括å·å’Œå³åœ†æ‹¬å·æ˜¯å®šç•Œç¬¦ã€‚
+如果你在定界环境中用^{圆括å·}å›´ä½ä¸€ä¸ªå…¬å¼ï¼Œ
+\TeX\ 将增加圆括å·çš„大å°ä»¥è®©å®ƒä»¬æ¡†ä½åŒ…å«è¯¥å…¬å¼çš„\refterm{ç›’å­}%
+(åªè¦ä½ æ‰€ä½¿ç”¨çš„\refterm{字体}有足够大的圆括å·ï¼‰ã€‚
+例如:
+\csdisplay
+$$ \left( a \over b \right) $$
+|
+得到下é¢çš„结果:
+\centereddisplays $$\left (a \over b \right ) $$
+这里 \TeX\ å·²ç»è°ƒæ•´äº†åœ†æ‹¬å·çš„大å°ä»¥æ¡†ä½åˆ†æ•°ã€‚
+但是如果你改为这样写:
+\csdisplay
+$$({a \over b})$$
+|
+将会得到下é¢çš„结果:
+$$({a \over b})$$
+由于圆括å·ä¸åœ¨å®šç•ŒçŽ¯å¢ƒä¸­ï¼Œ\TeX\ \emph{ä¸ä¼š}增加它们的大å°ã€‚
+
+%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)$$
+定界符必须æˆå¯¹å‡ºçŽ°ï¼šä¸€ä¸ªå¼€å®šç•Œç¬¦æ”¾åœ¨å­å…¬å¼å·¦è¾¹ï¼Œ
+å¦ä¸€ä¸ªé—­å®šç•Œç¬¦æ”¾åœ¨å­å…¬å¼å³è¾¹ã€‚
+ä½ å¯ä»¥ç”¨ ^|\bigl|,^|\bigr| åŠå…¶ä»–相关命令\ctsref{\bigl}直接选择较大å·çš„定界符。
+\footnote
+{\PlainTeX\ 定义了å„ç§ |\big| 命令,其中用 |\left| å’Œ |\right| æ供定界环境。
+它通过构造所需尺寸的空公å¼æ¥è®¾å®šå°ºå¯¸ã€‚}
+例如,è¦å¾—到下é¢çš„陈列公å¼ï¼š
+$$\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:
+\noindent 其中外层的圆括å·æ¯”内层的ç¨å¾®å¤§ä¸€ç‚¹ï¼Œä½ åº”该这样写:
+
+%\csdisplay
+%$$\bigl( f(x) - x \bigr) \bigl( f(y) - y \bigr)$$
+%|
+\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}.
+\PlainTeX\ 中有 $22$ 个定界符,用它们的自然尺寸显示如下:
+\display{%
+$( \>) \>[ \>] \>\{ \>\}
+\>\lfloor \>\rfloor \>\lceil \>\rceil
+\>\langle \>\rangle \>/ \>\backslash
+\>\vert \>\Vert
+\>\uparrow \>\downarrow \>\updownarrow
+\>\Uparrow \>\Downarrow \>\Updownarrow$}
+\ifoldeplain ^^|(| ^^|)| ^^|[| ^^|]| ^^|\{| ^^|\}| ^^|/| ^^|\backslash| \fi
+^^|\lbrack| ^^|\rbrack| ^^|\lbrace| ^^|\rbrace|
+^^|\lfloor| ^^|\rfloor| ^^|\lceil| ^^|\rceil|
+^^|\langle| ^^|\rangle| ^^|\vert| ^^|\Vert|
+^^|\uparrow| ^^|\downarrow| ^^|\updownarrow|
+^^|\Uparrow| ^^|\Downarrow| ^^|\Updownarrow|
+\noindent
+而用 \plainTeX\ æ供的最大尺寸(|\Biggl|,|\Biggr| å½¢å¼ï¼‰æ˜¾ç¤ºå¦‚下:
+\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
+这些定界符(`|(|',`|)|' 和 `|/|' 除外)都出现在%
+第~\xrefn{\lbrace}--\xrefn{\Uparrow}页的符å·åˆ—表中。
+它们也都出现在\knuth{第~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|.
+定界符å¯ä»¥å±žäºŽä»»ä½•ç±»ã€‚
+^^{类//定界符的类}
+对于用 |\bigl| å’Œ |\bigr| 等命令增加大å°çš„定界符,它所属的类由该命令决定:
+|l|-命令属于“开符å·â€ï¼Œ|r|-命令属于“闭符å·â€ï¼Œ
+|m|-命令属于“关系符å·â€ï¼Œ|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
+ä½ å¯ä»¥ç”¨ä¸¤ç§ä¸åŒæ–¹æ³•å¾—到一个定界符:
+\olist
+\li 通过用 ^|\delcode| 命令(\xref\delcode )给一个字符赋予éžè´Ÿå®šç•Œç ï¼ˆè§ä¸‹é¢ï¼‰ï¼Œ
+\bix^^{定界ç }
+ä½ å¯ä»¥å°†è¿™ä¸ªå­—符å˜æˆå®šç•Œç¬¦ã€‚
+这样,如果你在定界环境中使用这个字符,它就和定界符一样。\footnote{%
+在éžå®šç•ŒçŽ¯å¢ƒä¸­ä½¿ç”¨å®šç•Œç éžè´Ÿçš„字符也是å¯ä»¥çš„。
+此时 \TeX\ å°†ä¸ä¼šæ‰§è¡Œæœç´¢ï¼Œè€Œä»…仅以普通方å¼ä½¿ç”¨è¯¥å­—符(è§\knuth{第~156~页})。}
+\li ä½ å¯ä»¥ç”¨ ^|\delimiter| 命令(\xref\delimiter )直接生æˆä¸€ä¸ªå®šç•Œç¬¦ï¼Œ
+这与你用 |\char| 命令生æˆä¸€ä¸ªæ™®é€šå­—符或者用 |\mathchar| 命令生æˆä¸€ä¸ªæ•°å­¦å­—符类似。
+|\delimiter| 命令使用的定界ç å’Œ |\delcode| 表格项用到的一样,
+但å‰é¢å¤šäº†ä¸€ä¸ªæ•°å­—用于标示所属的类。
+除了在å®å®šä¹‰ä¸­ï¼Œå…¶ä»–地方很少用到 |\delimiter| 命令。
+\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.
+定界ç ï¼ˆdelimiter code)告诉 \TeX\ 如何æœç´¢åˆé€‚的输出字符æ¥è¡¨ç¤ºä¸€ä¸ªå®šç•Œç¬¦ã€‚
+这些æœç´¢è§„则相当å¤æ‚(è§\knuth{第~156 å’Œ 442~页}。
+è¦å®Œå…¨ç†è§£è¿™äº›è§„则需è¦ç†Ÿæ‚‰å­—体^{度é‡æ–‡ä»¶}的结构,
+而这个主题ä¸ä»…超出本书范围,也超出 \texbook\ 的范围。
+
+%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}
+本质上æœç´¢è¿‡ç¨‹æ˜¯è¿™æ ·è¿è¡Œçš„。定界ç ç»™å‡ºäº†å­—体\refterm{æ—}å’Œ\refterm{字体}ä½ç½®ï¼Œ
+从而指定了一个“å°å·â€è¾“出字符和一个“大å·â€è¾“出字符(è§\xref\delcode )。
+利用这些信æ¯ï¼Œ\TeX\ 能够找到(或者构造)定界符的越æ¥è¶Šå¤§çš„版本。
+\TeX\ 首先å°è¯•â€œå°å·â€å­—体的“å°å·â€å­—符的ä¸åŒå°ºå¯¸ï¼ˆä»Žå°åˆ°å¤§ï¼‰ï¼Œ
+然åŽæ˜¯â€œå¤§å·â€å­—体的“大å·â€å­—符的ä¸åŒå°ºå¯¸ï¼ˆåŒæ ·æ˜¯ä»Žå°åˆ°å¤§ï¼‰ï¼Œ
+寻找一个高度加上深度足够大的字符。
+如果所找到的字符都ä¸å¤Ÿå¤§ï¼Œå®ƒå°±ç”¨æœ€å¤§é‚£ä¸ªã€‚
+也有å¯èƒ½å°å·å­—符或大å·å­—符,或两者都没指定(å³å®šç•Œç çš„对应部分为零)。
+如果åªæŒ‡å®šäº†ä¸€ä¸ªå­—符,\TeX\ 使用那一个。如果两个字符都没指定,
+它就将定界符替æ¢ä¸ºå®½åº¦ä¸º ^|\nulldelimiterspace| 间隔。
+\eix^^{定界ç }
+
+\endconcept
+
+
+%\concept demerits
+\concept 缺陷
+
+%\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
+\TeX\ 用\refterm{缺陷}(demerits)度é‡å®ƒåˆ†æ®µä¸ºè¡Œæ—¶æ–‡æœ¬è¡Œçš„ä¸è‰¯åº¦\seeconcept{断行点}。
+^^{断行//断行的缺陷}
+文本行的缺陷åŒæ—¶å—该行的\refterm{劣度}和它带有的\refterm{惩罚}å½±å“。
+^^{劣度}
+\TeX\ 的目标是åˆç†åœ°åˆ†é…å„行文本,以让段è½çš„总缺陷最å°ï¼Œ
+其中总缺陷由å„行的缺陷加起æ¥ã€‚
+å‚è§ \knuth{第~97--98~页}以了解 \TeX\ 分段为行的细节。
+\TeX\ 选择分页点时ä¸ä½¿ç”¨ç¼ºé™·ï¼›å®ƒä½¿ç”¨çš„是被称为分页“代价â€çš„类似概念。
+\endconcept
+
+
+%\concept depth
+\concept 深度
+
+%^^{boxes//depth of}
+%The \defterm{depth} of a \refterm{box} is the distance that the box extends
+%below its \refterm{baseline}.
+%\endconcept
+^^{ç›’å­//ç›’å­çš„深度}
+ç›’å­çš„\defterm{深度}(depth)是盒å­åœ¨\refterm{基线}之下的è·ç¦»ã€‚
+\endconcept
+
+
+%\conceptindex{dimensions}
+%\concept dimension
+\conceptindex{尺寸}
+\concept 尺寸
+
+%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:
+\defterm{尺寸}(dimension)指定了一个è·ç¦»ï¼Œå³å¯¹ç©ºé—´çš„长度测é‡ã€‚
+你用尺寸指定事物的大å°ï¼Œæ¯”如文本行的长度。
+英语国家的打å°æœºä¹ æƒ¯ç”¨ç‚¹ï¼ˆpoint)和派å¡ï¼ˆpica)æ¥æµ‹é‡è·ç¦»ï¼Œ
+而欧洲大陆的打å°æœºä¹ æƒ¯ç”¨è¿ªå¤šç‚¹ï¼ˆ did\^ot points)和西塞罗(cicero)。
+ä½ å¯ä»¥ä½¿ç”¨è¿™äº›å•ä½ï¼Œæˆ–者其他你更熟悉的å•ä½ï¼Œæ¯”如英寸。
+\TeX\ 能够识别的与字体无关的^{度é‡å•ä½}有如下这些:
+
+%\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
+\xrdef{dimdefs}
+\nobreak\vskip\abovedisplayskip
+\halign{\indent\hfil\tt #\qquad&#\ \hfil&#\qquad\hfil&#\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.
+还有两个与字体相关的度é‡å•ä½ï¼š
+`^|ex|' 是一个纵å‘å°ºå¯¸ï¼Œé€šå¸¸ä¸Žå­—ä½“ä¸­å­—æ¯ `x' 的高度相关;
+`^|em|' 是一个横å‘尺寸,通常等于字体的大å°ï¼Œä¸Žå­—ä½“ä¸­å­—æ¯ `M' 的宽度相关。
+最åŽï¼Œ\TeX\ 还æ供了三个“无é™çš„â€åº¦é‡å•ä½ï¼š`^|fil|',`^|fill|' å’Œ `^|filll|',
+它们的强度的阶ä¾æ¬¡å¢žå¤§ã€‚
+
+%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:
+尺寸å¯ä»¥ç”¨ä¸€ä¸ª^{å› å­},å³ä¹˜æ•°ï¼ŒåŽé¢åŠ ä¸Šåº¦é‡å•ä½æ¥è¡¨ç¤ºã€‚
+^^{度é‡å•ä½}
+å› å­å¯ä»¥æ˜¯ä¸€ä¸ªæ•´\refterm{æ•°},或是一个带有å°æ•°ç‚¹æˆ–å°æ•°é€—å·çš„\refterm{å°æ•°}。
+å› å­ä¹‹å‰å¯ä»¥å¸¦æœ‰åŠ å·æˆ–å‡å·ï¼Œå› æ­¤å°ºå¯¸å¯æ­£å¯è´Ÿã€‚
+^^{尺寸//负尺寸}
+å³ä½¿æ•°å€¼ä¸ºé›¶ï¼Œåº¦é‡å•ä½ä¹Ÿå¿…须写上。数值和度é‡å•ä½ä¹‹é—´å¯ä»¥æœ‰ä¹Ÿå¯ä»¥æ²¡æœ‰ç©ºæ ¼ã€‚
+在\knuth{第~270~页}中有尺寸的精确定义。下é¢è¿™äº›æ˜¯å°ºå¯¸çš„例å­ï¼š
+
+%\csdisplay
+%5.9in 0pt -2,5 pc 2fil
+%|
+%The last of these represents a first-order infinite distance.
+\csdisplay
+5.9in 0pt -2,5 pc 2fil
+|
+其中最åŽä¸€ä¸ªå°ºå¯¸è¡¨ç¤ºä¸€ä¸ªä¸€é˜¶æ— é™è·ç¦»ã€‚
+
+%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}.
+æ— é™è·ç¦»è¿œè¿œå¤§äºŽä»»ä½•æœ‰é™è·ç¦»æˆ–者任何低阶的无é™è·ç¦»ã€‚
+如果你给 |.001fil| 加上 |10in|,你得到 |.001fil|;
+如果你给 |-1fill| 加上 |2fil|,你得到 |-1fill|,ä¾æ­¤ç±»æŽ¨ã€‚
+åªæœ‰åœ¨æŒ‡å®š\refterm{粘连}çš„\refterm{伸长é‡}å’Œ\refterm{收缩é‡}时,
+æ‰å¯ä»¥ä½¿ç”¨æ— é™è·ç¦»ã€‚
+
+%\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
+\TeX\ 对文档中的所有尺寸都乘以一个\refterm{放大率}å› å­$f/1000$,
+其中 $f$ 是 ^|\mag| å‚数的值。
+^^{放大率}
+由于 |\mag| 的默认值为 $1000$,在一般情形下文档是照常排版的。
+ä½ å¯ä»¥æŒ‡å®šä¸€ä¸ªä¸Žæ”¾å¤§çŽ‡æ— å…³çš„最终文档尺寸,
+åªè¦åœ¨åº¦é‡å•ä½å‰åŠ ä¸Š `|true|'。
+例如,`|\kern 8 true pt|' 生æˆäº†ä¸€ä¸ªä¸Žæ”¾å¤§çŽ‡æ— å…³çš„ $8$ 点大å°çš„紧排。
+\endconcept
+
+
+%\concept {display math}
+\concept {陈列公å¼}
+
+%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
+\defterm{陈列公å¼}(display math)表示在å•ç‹¬ä¸€è¡Œæ˜¾ç¤ºçš„å…¬å¼ï¼›
+\TeX 在陈列公å¼ä¸Šè¾¹å’Œä¸‹è¾¹æ·»åŠ é¢å¤–间隔,以隔开周围文本。
+陈列公å¼ä¸¤è¾¹ç”¨ `|$$|' 括起æ¥ã€‚
+\ifoldeplain\ttidxref{$$}\fi
+\TeX\ 在陈列数学\refterm{模å¼}中读å–陈列公å¼ã€‚
+\endconcept
+
+
+\bookmark{2}{以E开头}
+%\concept{escape character}
+\concept{转义符}
+
+%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:
+\defterm{转义符}(escape character)引入一个控制åºåˆ—。
+\refterm{\PlainTeX} 的转义符是åæ–œæ (|\|)。
+\indexchar \
+利用 ^|\catcode| 命令\ctsref{\catcode}é‡æ–°å®šä¹‰ $c_1$ å’Œ $c_2$ 的类别ç ï¼Œ
+ä½ å¯ä»¥å°†è½¬ä¹‰ç¬¦ä»Ž $c_1$ 改为 $c_2$。类似地你å¯ä»¥å®šä¹‰é¢å¤–的转义符。
+如果你想排版包å«å­—é¢è½¬ä¹‰ç¬¦çš„æ料,你必须或者
+(a) 定义一个表示打å°è½¬ä¹‰ç¬¦çš„控制åºåˆ—,或者
+(b) 使用\xrefpg{verbatim}介ç»çš„方法,改å˜è½¬ä¹‰ç¬¦çš„类别ç ä»¥ä¸´æ—¶å–消转义。
+% 译注:这里给出的页ç ä¼¼ä¹Žæœ‰è¯¯ã€‚
+下述定义:
+
+%\csdisplay
+%\def\\{$\backslash$}
+%|
+%is one way of creating a control sequence that stands for `$\backslash$'
+%(a backslash typeset in a math font).
+\csdisplay
+\def\\{$\backslash$}
+|
+是一ç§ç”Ÿæˆè¡¨ç¤º `$\backslash$' 的控制åºåˆ—的方法(用数学字体排版åæ–œæ ï¼‰ã€‚
+
+%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
+对于åˆæˆæŽ§åˆ¶åºåˆ—,比如那些由 |\string| å’Œ |\message| 生æˆçš„控制åºåˆ—,
+ä½ å¯ä»¥ç”¨ ^|\escapechar| å‚æ•°\ctsref{\escapechar}指定其中的转义符用哪个字符表示。
+\endconcept
+
+
+\bookmark{2}{以F开头}
+%\concept family
+\concept æ—
+
+%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.
+\defterm{æ—}(family)是用于\refterm{数学模å¼}的,由三个相关\refterm{字体}组æˆçš„集åˆã€‚
+^^{字体//字体æ—}
+在数学模å¼ä¹‹å¤–,æ—没有任何作用。
+一个æ—的三个字体分别用于正常符å·ï¼ˆ\refterm{文本尺寸}),
+上标和下标(\refterm{æ ‡å·å°ºå¯¸}),以åŠæ¬¡ä¸Šæ ‡å’Œæ¬¡ä¸‹æ ‡ç­‰ï¼ˆ\refterm{å°æ ‡å·å°ºå¯¸})。
+^^{文本尺寸}
+^^{æ ‡å·å°ºå¯¸}
+^^{å°æ ‡å·å°ºå¯¸}
+例如,数字 `|2|' 用这三个字体分别显示为 `$2$'ã€`$\scriptstyle 2$' å’Œ
+`$\scriptscriptstyle 2$'(在 \plainTeX\ 中)。
+通常你会将一个æ—的三个字体设定为相åŒå­—型且ä¸åŒç‚¹æ•°ï¼Œ
+但没人阻止你将这三个字体也设定为ä¸åŒå­—型,或者将其中两个字体设定为完全一样。
+
+%{\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
+\TeX\ æ供多达å六个字体æ—,它们用 $0$--$15$ ç¼–å·ã€‚
+比如在\refterm{\plainTeX} 中,第 $0$ æ—由用于文本尺寸的 $10$ 点罗马字体,
+用于标å·å°ºå¯¸çš„ $7$ 点罗马字体,以åŠç”¨äºŽå°æ ‡å·å°ºå¯¸çš„ $5$ 点罗马字体组æˆã€‚
+^^{\plainTeX//其中的字体æ—}
+\PlainTeX\ 还将第 $1$ æ—定义为由数学æ„大利字体组æˆï¼Œ
+并将第 $2$ æ—和第 $3$ æ—分别ä¿ç•™ç»™^{特殊符å·}å’Œ^{数学扩展符å·}。
+\footnote{第 $2$ æ—和第 $3$ æ—的特殊之处在于,它们的字体度é‡æ–‡ä»¶å¿…须包å«æ•°å­¦é—´éš”å‚数。}
+\footnote{译注:第 $4$--$7$ æ—分别定义为 |\itfam|ã€|\slfam|ã€|\bffam| å’Œ |\ttfam|。}
+如果你需è¦è‡ªå·±å®šä¹‰å­—体æ—,你应该使用 ^|\newfam| 命令\ctsref{\@newfam}获å–未使用的æ—ç¼–å·ï¼Œ
+å†ç”¨ ^|\textfont|ã€^|\scriptfont| å’Œ ^|\scriptscriptfont|
+命令\ctsref{\scriptscriptfont}分别设定该æ—çš„å„个字体。
+\endconcept
+
+
+%\conceptindex{files}
+%\concept file
+\concept 文件
+
+%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.
+\defterm{文件}(file)是 \TeX\ 解释或者创建的信æ¯æµã€‚
+æ–‡ä»¶ç”±ç›‘ç£ \TeX\ è¿è¡Œçš„^{æ“作系统}管ç†ã€‚
+\TeX\ 在四ç§ä¸åŒçš„背景中用到文件:
+\olist
+\li “^{æºç æ–‡ä»¶}â€æ˜¯ \TeX\ “眼ç›â€è¯»å–\seeconcept{\anatomy},并根æ®å®ƒçš„一般法则解释的文件。
+你的主è¦è¾“入文件——å³è°ƒç”¨ \TeX\ 时在 `|**|' 之åŽæˆ–者在命令行中指定的文件%
+——是一个æºç æ–‡ä»¶ï¼Œä½ ç”¨ ^|\input|命令\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 “^{结果文件}â€æ˜¯åŒ…å« \TeX\ è¿è¡Œç»“果的文件。
+\TeX\ è¿è¡ŒåŽäº§ç”Ÿä¸¤ä¸ªç»“果文件:\dvifile 和日志文件。
+^^{\dvifile//作为结果文件}
+^^{日志文件//作为结果文件}
+\dvifile 包å«æ‰“å°æ–‡æ¡£æ‰€éœ€çš„ä¿¡æ¯ï¼Œè€Œæ—¥å¿—文件包å«è¿è¡Œè®°å½•ï¼ŒåŒ…括 \TeX\ 生æˆçš„任何错误信æ¯ã€‚
+若主è¦è¾“入文件的å称是 |screed.tex|,则 \dvifile 和日志文件的å称分别是
+|screed.dvi| 和 |screed.log|。\footnote{这是通常的约定,
+但特定的 \TeX\ 实现å¯ä»¥è‡ªç”±åœ°ä¿®æ”¹å®ƒã€‚}
+
+%\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 è¦ç”¨ ^|\read| 命令\ctsref{\read}读å–一个文件,你需è¦å°†è¿™ä¸ªæ–‡ä»¶å’Œä¸€ä¸ªè¾“å…¥æµå…³è”èµ·æ¥ã€‚
+^^{输入æµ//用 \b\tt\\read\e 读å–}
+你最多å¯ä»¥æœ‰ $16$ 个åŒæ—¶æ´»åŠ¨çš„输入æµï¼Œå®ƒä»¬ä»¥ $0$--$15$ ç¼–å·ã€‚
+|\read| 命令读å–一行并把它作为指定\refterm{控制åºåˆ—}的值,
+因此用 |\read| 读å–和用 ^|\input| 读å–是大ä¸ç›¸åŒçš„(åŽè€…读入整个文件)。
+\TeX\ 将编å·ä¸åœ¨ $0$ å’Œ $15$ 之间的输入æµè§†ä¸ºç»ˆç«¯ï¼Œ
+因此,比如说 `|\read16|',将读å–你在终端中键入的下一行文本。
+
+%\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
+\li è¦ç”¨ |\write| 命令\ctsref \write 写入一个文件,你需è¦å°†è¿™ä¸ªæ–‡ä»¶å’Œä¸€ä¸ªè¾“出æµå…³è”èµ·æ¥ã€‚
+^^|\write//用于输出æµ|
+^^{输出æµ}
+你最多å¯ä»¥æœ‰ $16$ 个åŒæ—¶æ´»åŠ¨çš„输出æµï¼Œå®ƒä»¬ä»¥ $0$--$15$ ç¼–å·ã€‚输入æµå’Œè¾“出æµæ˜¯ç›¸äº’独立的。
+任何é€åˆ°ç¼–å·ä¸ºè´Ÿæ•°çš„输出æµçš„东西,将被写到日志文件中;
+而任何é€åˆ°ç¼–å·å¤§äºŽ $15$ 的输出æµçš„东西,将åŒæ—¶è¢«å†™åˆ°æ—¥å¿—文件和终端中。
+因此,比如说 `|\write16|',将在终端中写上一行文本并将它é€åˆ°æ—¥å¿—文件中。
+\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.
+在使用æµæ–‡ä»¶ä¹‹å‰ï¼Œä½ å¿…须先打开它。输入æµæ–‡ä»¶ç”¨ ^|\openin| 命令\ctsref \openin 打开,
+而输出æµæ–‡ä»¶ç”¨ ^|\openout| 命令\ctsref\openout 打开。
+为ä¿æŒæ•´æ´ï¼Œä½ åº”该在完æˆåŽå…³é—­æµæ–‡ä»¶ï¼›
+然而å³ä½¿ä½ ä¸è¿™ä¹ˆåšï¼Œ\TeX\ 在è¿è¡Œç»“æŸæ—¶ä¹Ÿä¼šå¸®ä½ å…³é—­å®ƒã€‚
+用于关闭æµæ–‡ä»¶çš„两个命令分别是 ^|\closein|\ctsref\closein å’Œ ^|\closeout|\ctsref{\closeout}。
+在完æˆåŽå…³é—­æµæ–‡ä»¶çš„优点是,你å¯ä»¥æŠŠå®ƒé‡æ–°ç”¨åˆ°å¦ä¸€ä¸ªæ–‡ä»¶åŽ»ã€‚
+在读å–一长串文件时,这样åšæ˜¯å¾ˆæœ‰å¿…è¦çš„。
+
+%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.
+虽然你å¯ä»¥è‡ªå·±ç»™è¾“å…¥æµå’Œè¾“出æµç¼–å·ï¼Œ
+但最好还是用 ^|\newread| å’Œ ^|\newwrite|\ctsref{\@newwrite}命令处ç†æµç¼–å·ã€‚
+一个特定文件å¯ä»¥å…³è”到多个æµï¼Œ
+但除éžæ‰€æœ‰æµéƒ½æ˜¯è¾“å…¥æµï¼Œå¦åˆ™ä½ å°†ä¼šå¾—到(也许是原因ä¸æ˜Žçš„)垃圾。
+当你想把åŒä¸ªè¾“入文件用于两个ä¸åŒç›®çš„时,一个输入文件关è”多个æµå°±å¾ˆæœ‰ç”¨ã€‚
+
+%\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
+一般地,\TeX\ 会推迟输出æµçš„打开ã€å†™å…¥å’Œå…³é—­æ“作,
+直到它用 ^|\shipout|é€å‡ºä¸€ä¸ªé¡µé¢ï¼ˆè¯¦æƒ…å¯è§\knuth{第~227~页}。
+甚至用 |\write| 输出消æ¯åˆ°ç»ˆç«¯æ—¶ä¹Ÿæ˜¯è¿™æ ·çš„。
+然而,通过在æ“作命令之å‰åŠ ä¸Š ^|\immediate|\ctsref\immediate ,
+ä½ å¯ä»¥è®© \TeX\ ç«‹å³æ‰§è¡Œè¾“出æµæ“作。比如:
+\csdisplay
+\immediate\write16{Do not pass GO!! Do not collect $200!!}
+|
+\endconcept
+
+
+%\conceptindex{file names}
+%\concept {file name}
+\concept {文件å}
+
+%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}|'.
+\defterm{文件å}(file name)是\refterm{文件}åœ¨ç›‘ç£ \TeX\ è¿è¡Œçš„^{æ“作系统}中的å称。
+文件å的语法\emph{并ä¸}éµå¾ª \TeX\ 语法的一般规则,
+而且实际上在ä¸åŒçš„ \TeX\ 实现中它们å„ä¸ç›¸åŒã€‚
+特别地,大多数 \TeX\ 实现都认为文件å在空格符或行尾符处结æŸã€‚
+å› æ­¤ \TeX\ 有å¯èƒ½æ›²è§£ `|{\input chapter2}|',将å³æ‹¬å·è§†ä¸ºå称的一部分。
+一般æ¥è¯´ï¼Œä½ åº”该在文件ååŽé¢æ·»åŠ ä¸€ä¸ªç©ºæ ¼ç¬¦æˆ–行尾符,
+å°±åƒ `|{\input chapter2!visiblespace}|' 这样。
+
+\endconcept
+
+
+%\eject
+%\conceptindex{fonts}
+%\concept font
+\concept 字体
+
+%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.
+在 \TeX\ 中,\defterm{字体}(font)是由ä¸è¶…过 $256$ 个输出字符组æˆçš„集åˆï¼Œ
+这些字符通常有相åŒçš„设计ã€æ ·å¼ï¼ˆç½—马体ã€æ„大利体ã€ç²—体ã€çª„体等)和点数。
+\footnote{\PlainTeX\ 用于构造^{数学符å·}的特殊字体包å«ç‚¹æ•°ä¸åŒçš„字符。
+在排版^{标识}(logo)等应用中也ç»å¸¸ä½¿ç”¨å…¶ä»–的特殊字体。}
+\TeX\ 自带的^{计算机现代字体}一般åªæœ‰ $128$ 个字符。
+在本书最åŽé¢çš„书尾页中æ述了排版本书所用的字体。
+
+%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}.
+举个例å­ï¼Œè¿™é‡Œæ˜¯ $10$ 点 Palatino 罗马字体的字æ¯è¡¨ï¼š
+^^{Palatino 字体}
+\vskip\abovedisplayskip{\narrower\tenpal
+\noindent ABCDEFGHIJKLMNOPQRSTUVWXYZ\hfil\break
+abcdefghijklmnopqrstuvwxyz\par
+}\vskip\belowdisplayskip
+\noindent
+而这里是 $12$ 点计算机现代粗体扩展字体的字æ¯è¡¨ï¼š
+^^{计算机现代字体}
+\vskip\abovedisplayskip{\narrower\font\twelvebf=cmbx12\twelvebf
+\noindent ABCDEFGHIJKLMNOPQRSTUVWXYZ\hfil\break
+abcdefghijklmnopqrstuvwxyz\par
+}\vskip\belowdisplayskip
+字体中的字符都是编好å·çš„。对于在 \ascii\ 字符表中存在的字符,
+它们的编å·ä¸€èˆ¬ä¸Žå…¶ ^{\ascii} ç¼–ç ä¸€è‡´ã€‚
+æ¯ä¸ªå­—体的编ç è¡¨æŒ‡æ˜Žè¯¥å­—体的第 $n$ 个字符是怎样的。
+有些字体,比如那些用于数学符å·çš„字体,根本ä¸åŒ…å«ä»»ä½•å­—æ¯å­—符。
+ä½ å¯ä»¥ç”¨ `|\char |$n$'\ctsref{\char}生æˆåŒ…å«ç¬¬ $n$ 个字符的盒å­ï¼Œ
+该字符用当å‰å­—体排版。
+
+%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.
+è¦åœ¨æ–‡æ¡£ä¸­ä½¿ç”¨æŸä¸ªå­—体,你必须先用控制åºåˆ—给它命åå†è½½å…¥å®ƒã€‚
+æ­¤åŽï¼Œåœ¨éœ€è¦ç”¨åˆ°å®ƒçš„地方,你就å¯ä»¥é”®å…¥è¯¥æŽ§åˆ¶åºåˆ—æ¥é€‰æ‹©å®ƒã€‚
+\PlainTeX\ æ供了若干已ç»å‘½å和载入的字体。
+
+%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:
+ä½ å¯ä»¥ç”¨åƒ `|\font\twelvebf=cmbx12|' 这样的命令在åŒä¸€ä¸ªæ“作中命å并载入字体。
+这里的 `|\twelvebf|' 是用于命å该字体的控制åºåˆ—,
+而 `|cmbx12|' 表示计算机文件系统中的字体度é‡æ–‡ä»¶ |cmbx12.tfm|。
+现在你å¯ä»¥é€šè¿‡é”®å…¥ `|\twelvebf|' 开始使用这个字体。
+在此之åŽï¼Œè¿™ä¸ªå­—体将一直生效,直到
+(a)~你选择了å¦ä¸€ä¸ªå­—体,或者 (b)~你结æŸäº†\refterm{编组},
+如果在开始字体时就ä½äºŽè¿™ä¸ªç¼–组中。例如下é¢çš„输入:
+
+%\csdisplay
+%{\twelvebf white rabbits like carrots}
+%|
+%will cause the |cmbx12| font to be in effect just for the
+%text `|white rabbits like carrots|'.
+\csdisplay
+{\twelvebf white rabbits like carrots}
+|
+将使得 |cmbx12| 字体åªå¯¹æ–‡æœ¬ `|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).
+在 \TeX\ 中你å¯ä»¥ä½¿ç”¨ä¸Žè®¡ç®—机现代ä¸åŒçš„字体(è§\xrefpg{palatino}的例å­ä»¥åŠé¡µçœ‰ï¼‰ã€‚
+这些字体的文件需è¦å®‰è£…在计算机文件系统的æŸä¸ª \TeX\ 能找到的ä½ç½®ä¸­ã€‚
+对æ¯ä¸ªå­—体,\TeX\ åŠç›¸å…³ç¨‹åºä¸€èˆ¬éœ€è¦ä¸¤ä¸ªæ–‡ä»¶ï¼š
+一个给出å„字符的度é‡ï¼ˆæ¯”如 |cmbx12.tfm|),
+^^{\tfmfile}
+å¦ä¸€ä¸ªç»™å‡ºå„字符的形状(比如 |cmbx12.pk|)。
+\TeX\ 本身仅用到度é‡æ–‡ä»¶ã€‚å¦ä¸€ä¸ªç¨‹åºï¼Œè®¾å¤‡é©±åŠ¨ç¨‹åºï¼Œ
+^^{设备驱动}
+把 \TeX\ 生æˆçš„ \dvifile 转æ¢ä¸ºèƒ½è¢«æ‰“å°æœºæˆ–其他输出设备处ç†çš„æ ¼å¼ã€‚
+^^{\dvifile//由驱动程åºè½¬æ¢}
+设备驱动程åºè¦ç”¨åˆ°å½¢çŠ¶æ–‡ä»¶ï¼ˆå¦‚果该文件存在)。
+
+%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.
+字体度é‡æ–‡ä»¶åŒ…å« \TeX\ 对æ¯ä¸ªæŽ’版字符所分é…空间的信æ¯ã€‚
+å³å®ƒåŒ…å«å„个字符的尺寸,对相邻字符的连字和紧排,等等。
+字体度é‡æ–‡ä»¶\emph{并ä¸}包å«å…³äºŽå…¶å­—符的形状的任何信æ¯ã€‚
+
+%{\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}
+{\tighten
+形状(åƒç´ ï¼‰æ–‡ä»¶\xrdef{shape}å¯ä»¥æœ‰å¤šç§æ ¼å¼ã€‚
+^^{åƒç´ æ–‡ä»¶}^^{轮廓文件}
+文件的扩展å(点å·ä¹‹åŽéƒ¨åˆ†ï¼‰å‘Šè¯‰é©±åŠ¨æ–‡ä»¶è¯¥å½¢çŠ¶æ–‡ä»¶çš„æ ¼å¼ã€‚
+例如,|cmbx12| 字体的形状文件 å¯ä»¥æ˜¯åŽ‹ç¼©æ ¼å¼çš„ |cmbx12.pk| ^^{\pkfile},
+也å¯ä»¥æ˜¯ä¸€èˆ¬æ ¼å¼çš„ |cmbx12.gf| ^^{\gffile}。
+对存在于输出设备中的字体,其形状文件也许ä¸æ˜¯å¿…需的。
+\par}
+
+\endconcept
+
+
+%\conceptindex{footers}
+%\concept footer
+\concept 页脚
+
+%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.
+\defterm{页脚}(footer)是放在æ¯ä¸ªé¡µé¢åº•éƒ¨ï¼Œä½äºŽæ­£æ–‡ä¹‹ä¸‹çš„ç´ æ。
+在 \plainTeX\ 中默认页脚是居中的页ç ã€‚通常页脚åªåŒ…å«ä¸€è¡Œæ–‡æœ¬ï¼Œ
+ä½ å¯ä»¥é€šè¿‡ç»™ ^|\footline|\ctsref\footline 指定一个记å·åˆ—æ¥è®¾å®šé¡µè„šã€‚
+请å‚阅\xrefpg{bighead}中介ç»çš„生æˆå¤šè¡Œé¡µè„šçš„方法。
+
+\endconcept
+
+%k \vskip 0pt plus 2pt % to solve page break problem
+
+%\concept {format file}
+\concept {æ ¼å¼æ–‡ä»¶}
+
+%{\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}
+\defterm{æ ¼å¼æ–‡ä»¶}(format fileï¼‰æ˜¯ä¸€ä¸ªåŒ…å« \TeX\ 的内存映åƒçš„文件,
+该文件以一ç§èƒ½å¤Ÿå¿«é€Ÿé‡æ–°è½½å…¥çš„å½¢å¼å­˜å‚¨ã€‚
+æ ¼å¼æ–‡ä»¶å¯ä»¥ç”¨ ^|\dump| 命令\ctsref\dump 建立。
+映åƒæ–‡ä»¶åŒ…å«è½¬å‚¨å‘生时存在的(\refterm{字体}å’Œ\refterm{å®}等)定义的完整记录。
+然åŽåˆ©ç”¨ ^|virtex|,\TeX\ 的一ç§ç‰¹åˆ«çš„“原生â€å½¢å¼,
+ä½ å¯ä»¥å¿«é€Ÿåœ°é‡æ–°è½½å…¥è¯¥æ ¼å¼æ–‡ä»¶ï¼Œå¹¶ä»Ž \TeX\ 转储时所在的状æ€ä¸­ç»§ç»­ã€‚
+相对于包å«ç›¸åŒä¿¡æ¯çš„普通输入文件,格å¼æ–‡ä»¶çš„优点是 \TeX\ 能够更快地载入它。
+
+%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.
+æ ¼å¼æ–‡ä»¶ä»…å¯ä»¥ç”¨ ^|initex| 建立,|initex| 是专用于此目的的å¦ä¸€ç§ \TeX\ å½¢å¼ã€‚
+除了内建于 \TeX\ 本身的原始命令,|virtex| å’Œ |initex| å‡ä¸åŒ…å«å…¶ä»–任何命令。
+
+%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.
+\TeX\ çš„^{预载入}å½¢å¼æ˜¯ä¸€ç§å·²è½½å…¥æŸä¸ªæ ¼å¼æ–‡ä»¶ ,并准备接收用户输入的形å¼ã€‚
+称为 |tex| çš„ \TeX\ å½¢å¼é€šå¸¸éƒ½é¢„载入了 \plainTeX\ 定义。%
+(\PlainTeX\ 通常还以å¦å¤–两ç§å½¢å¼å‡ºçŽ°ï¼šä½œä¸ºæ ¼å¼æ–‡ä»¶ä¸Žä½œä¸º\TeX\ æºç æ–‡ä»¶ã€‚
+在æŸäº›çŽ¯å¢ƒä¸­ï¼Œ|tex| 等价于调用 |virtex| 然åŽè½½å…¥ |plain|。)%
+仅仅用 \TeX\ 本身无法建立 \TeX\ 的预载入形å¼ï¼Œå®ƒéœ€è¦ä¸€ä¸ªç‰¹åˆ«çš„程åºã€‚
+
+\endconcept
+
+\bookmark{2}{以G开头}
+%\concept global
+\concept 全局的
+
+%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|
+一个\defterm{全局的}(global)定义在文档结æŸå‰å§‹ç»ˆæœ‰æ•ˆï¼Œ
+å³ä½¿å®ƒå‡ºçŽ°åœ¨ä¸€ä¸ª\refterm{编组}里é¢ï¼ˆé™¤éžå®ƒè¢«å…¶ä»–定义覆盖)。
+å³å…¨å±€å®šä¹‰ä¸å—编组范围的影å“。
+è¦è®©ä»»ä½•å®šä¹‰æˆä¸ºå…¨å±€çš„,你å¯ä»¥åœ¨å®ƒå‰é¢åŠ ä¸Š |\global| 命令\ctsref{\global},
+é™¤éž ^|\globaldefs|\ctsref\globaldefs{} 为负值。
+^^|\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
+还有ç§ç‰¹æ®Šæ–¹æ³•å°†ä¸€ä¸ª\refterm{å®}定义为全局的。
+^^{å®//全局å®}
+通常你用 |\def| 命令或者 |\edef| 命令\ctsref{\edef}æ¥å®šä¹‰ä¸€ä¸ªå®ã€‚
+^^|\edef//å˜æˆå…¨å±€çš„|
+^^|\def//å˜æˆå…¨å±€çš„|
+如果你将 |\def| å’Œ |\edef| 分别æ¢ä¸º |\gdef| å’Œ |\xdef|,
+这个å®å®šä¹‰å°±ä¼šæ˜¯å…¨å±€çš„。也就是说,`^|\gdef|'等价于`|\global\def|',
+而`^|\xdef|'等价于`|\global\edef|'。
+\endconcept
+
+
+%\concept glue
+\concept 粘连
+
+%\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.
+\bix^^{伸长é‡}
+\bix^^{收缩é‡}
+\defterm{粘连}(glue)是å¯ä»¥ä¼¸é•¿æˆ–者收缩的空白间è·ã€‚
+粘连给 \TeX\ æ供了生æˆæ¼‚亮文档所需的çµæ´»æ€§ã€‚
+粘连有两ç§ç±»åž‹ï¼šæ°´å¹³ç²˜è¿žå’Œç«–直粘连。
+水平粘连出现在\refterm{水平列表}中,而竖直粘连出现在\refterm{竖直列表}中。
+^^{水平列表}
+^^{竖直列表}
+ä½ å¯ä»¥éšå¼åœ°ç”Ÿæˆä¸€ä¸ªç²˜è¿žé¡¹ï¼Œæ¯”如用å•è¯é—´ç©ºæ ¼ï¼Œ
+或者显å¼åœ°ç”Ÿæˆä¸€ä¸ªç²˜è¿žé¡¹ï¼Œæ¯”如用 ^|\hskip| 命令。
+^^{é—´éš”//å•è¯é—´è·}
+在排版文档时 \TeX\ 本身也生æˆå¾ˆå¤šç²˜è¿žé¡¹ã€‚
+这里我们åªæ述水平粘连——竖直粘连与之类似。
+
+%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).
+在 \TeX\ 将一系列盒å­å’Œç²˜è¿žç»„装æˆä¸€ä¸ªè¾ƒå¤§å•å…ƒæ—¶ï¼Œ
+^^{ç›’å­//ç›’å­ä¸Žç²˜è¿ž}
+它调整å„个粘连的尺寸以适åˆè¾ƒå¤§å•å…ƒçš„空间è¦æ±‚。
+例如,为了让页é¢çš„^{å³è¾¹è·}ä¿æŒä¸€è‡´ï¼Œ\TeX\ 调整了å„行的水平粘连。
+类似地,为了让å„页的^{下边è·}ä¿æŒç›¸åŒï¼Œ
+它调整了å„个文本å—比如段è½å’Œé™ˆåˆ—å…¬å¼ä¹‹é—´çš„粘连%
+(这ç§ä¿®æ”¹æ˜¯æœ€ä¸å¯èƒ½å¼•äººæ³¨æ„的)。
+
+%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}.
+æ¯ä¸ªç²˜è¿žé¡¹æœ‰å®ƒçš„自然间è·â€”—å³å®ƒâ€œæ‰€æœŸæœ›çš„â€å°ºå¯¸ã€‚粘连还有å¦å¤–两个属性:
+它的\refterm{伸长é‡}(stretch)和它的\refterm{收缩é‡}(shrink)。
+ä½ å¯ä»¥ç”¨^|\hskip| \refterm{命令}\ctsref{\hskip}生æˆç‰¹å®šå¤§å°çš„水平粘连。
+命令 |\hskip 6pt plus 2pt minus 3pt| 生æˆä¸€ä¸ªæ°´å¹³ç²˜è¿žï¼Œ
+其自然尺寸为$6$点,伸长é‡ä¸º$2$点,收缩é‡ä¸º$3$点。
+类似地,你å¯ä»¥ç”¨ ^|\vskip| 命令\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.
+è¦ç†è§£ä»€ä¹ˆæ˜¯ä¼¸é•¿é‡å’Œæ”¶ç¼©é‡ï¼Œæœ€å¥½æ–¹æ³•æ˜¯çœ‹ç²˜è¿žçš„一个实际例å­ã€‚
+å‡è®¾ä½ è¦ç”¨ä¸‰ä¸ªç›’å­å’Œä¸¤ä¸ªç²˜è¿žé¡¹æž„造一个\refterm{水平盒å­}项目,
+如下图:
+\gluepicture
+ 29 {\picbox 4 \gluebox 6 4 1 6 \picbox 5 \gluebox 10 8 3 10 \picbox 4 }
+\noindent
+这里的度é‡å•ä½å¯ä»¥æ˜¯ç‚¹ï¼Œæ¯«ç±³ï¼Œæˆ–其他任何å•ä½ã€‚
+如果水平盒å­å¯ä»¥å‘ˆçŽ°å®ƒçš„自然宽度,
+那么盒å­å†…çš„æ¯ä¸ªç²˜è¿žé¡¹ä¹Ÿå‘ˆçŽ°å®ƒçš„自然宽度。
+从而水平盒å­çš„总宽度就是它个å„部分宽度之和,å³$29$点。
+
+%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.
+接下æ¥ï¼Œå‡è®¾è¿™ä¸ªæ°´å¹³ç›’å­éœ€è¦æ¯” $29$ å•ä½è¿˜å®½ï¼Œæ¯”方说 $35$ å•ä½ã€‚
+这是å¯èƒ½å‡ºçŽ°çš„,比如水平盒å­å¯èƒ½éœ€è¦å æ®è¡Œå®½ä¸º $35$ å•ä½çš„整行。
+由于 \TeX\ ä¸å¯èƒ½æ”¹å˜ç›’å­çš„宽度,
+它通过增加粘连项的宽度生æˆæ‰€éœ€çš„é¢å¤–é—´è·ã€‚
+现在的图形看起æ¥æ˜¯è¿™æ ·çš„:
+\gluepicture
+ 35 {\picbox 4 \gluebox 6 4 2 8 \picbox 5 \gluebox 10 8 6 14 \picbox 4 }
+å„粘连项增加的宽度并ä¸ç›¸ç­‰ï¼›å¢žåŠ çš„宽度与它们的伸长é‡æˆæ¯”例。
+由于第二个粘连项的伸长é‡æ˜¯ç¬¬ä¸€ä¸ªçš„两å€ï¼Œ
+它的宽度增加了四个å•ä½ï¼Œè€ŒåŽè€…åªå¢žåŠ äº†ä¸¤ä¸ªå•ä½ã€‚
+粘连å…许任æ„伸长,
+尽管 \TeX\ 有时ä¸æ„¿æ„超出定义中给出的伸长é‡ã€‚
+
+%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.
+最åŽï¼Œå‡è®¾è¿™ä¸ªæ°´å¹³ç›’å­éœ€è¦æ¯” $29$ å•ä½è¿˜çª„,比如说 $25$ å•ä½ã€‚
+此时 \TeX\ å°†å‡å°‘粘连项的宽度。图形看起æ¥æ˜¯è¿™æ ·çš„:
+\gluepicture
+ 25 {\picbox 4 \gluebox 6 4 2 5 \picbox 5 \gluebox 10 8 6 7 \picbox 4 }
+å„粘连项å‡å°‘的宽度于它们的收缩é‡æˆæ¯”例。
+第一个粘连项的宽度å‡å°‘了一个å•ä½ï¼Œè€Œç¬¬äºŒä¸ªç²˜è¿žé¡¹å‡å°‘了三个å•ä½ã€‚
+粘连收缩时ä¸èƒ½è¶…出定义中给出的收缩é‡ï¼Œè€Œä¼¸é•¿æ—¶å´ä¸å—é™åˆ¶ã€‚
+从这个é‡è¦æ„义上说,收缩和伸长有ä¸åŒçš„表现。
+
+%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.
+有一个ä¸é”™çš„ç»éªŒæ³•åˆ™å¯ç”¨äºŽè®¾å®šç²˜è¿žï¼Œ
+å³å–它的自然尺寸为文档最美观时的间è·å¤§å°ï¼Œ
+å–它的伸长é‡ä¸ºæ–‡æ¡£å¼€å§‹å˜éš¾çœ‹ä¹‹å‰ \TeX\ 能添加的最大间è·ï¼Œ
+å–它的收缩é‡ä¸ºæ–‡æ¡£å¼€å§‹å˜éš¾çœ‹ä¹‹å‰ \TeX\ 能去掉的最大间è·ã€‚
+你也许需è¦é€šè¿‡è¯•éªŒç¡®å®šè¿™äº›å€¼ã€‚
+
+%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.
+以 `^|fil|',`^|fill|',或 `^|filll|' 为å•ä½è®¾å®šç²˜è¿žçš„伸长é‡ï¼Œ
+å°±å¯ä»¥ç”Ÿæˆå¯æ— é™ä¼¸é•¿çš„粘连。
+以 `|fill|' 为å•ä½çš„粘连相比以 `|fil|' 为å•ä½çš„粘连有更加无é™çš„伸长能力,
+以 `|filll|' 为å•ä½çš„粘连相比以 `|fill|' 为å•ä½çš„粘连有更加无é™çš„伸长能力。
+你很少需è¦ä½¿ç”¨ `|filll|' 粘连。
+伸长é‡ä¸º |2fil| 的粘连,其伸长能力是伸长é‡ä¸º |1fil| 的粘连的两å€ï¼Œ
+对其他类型的å¯æ— é™ä¼¸é•¿ç²˜è¿žæƒ…形类似。
+
+%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:
+在 \TeX\ ç»™å„个粘连项分é…é¢å¤–é—´è·æ—¶ï¼Œ
+如果存在å¯æ— é™ä¼¸é•¿çš„粘连,它们将分到全部间è·ã€‚
+å¯æ— é™ä¼¸é•¿çš„粘连在设定文本左对é½ï¼Œå³å¯¹é½æˆ–者居中时特别有用:
+
+%\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
+\ulist\compact
+\li è¦è®©æ–‡æœ¬^{左对é½},å¯ä»¥åœ¨å®ƒå³è¾¹æ”¾ä¸Šä¸€ä¸ªå¯æ— é™ä¼¸é•¿çš„水平粘连。
+这个粘连将å ç”¨è¯¥è¡Œæ‰€æœ‰å¯ç”¨çš„多余间è·ã€‚
+ä½ å¯ä»¥ç”¨ ^|\leftline| 命令\ctsref{\leftline}或
+|\raggedright| 命令\ctsref{\raggedright}达到此目的。
+\li è¦è®©æ–‡æœ¬^{å³å¯¹é½},å¯ä»¥åœ¨å®ƒå·¦è¾¹æ”¾ä¸Šä¸€ä¸ªå¯æ— é™ä¼¸é•¿çš„水平粘连。
+如åŒä¸Šé¢ï¼Œè¿™ä¸ªç²˜è¿žå°†å ç”¨è¯¥è¡Œæ‰€æœ‰å¯ç”¨çš„多余间è·ã€‚
+ä½ å¯ä»¥ç”¨ ^|\rightline| 命令\ctsref{\rightline}达到此目的。
+\li è¦è®¾å®š^{居中文本},å¯ä»¥åœ¨å®ƒä¸¤è¾¹å„放上一个åŒæ ·çš„å¯æ— é™ä¼¸é•¿çš„水平粘连。
+这两个粘连项将平分该行的多余间è·ã€‚
+ä½ å¯ä»¥ç”¨ ^|\centerline| 命令\ctsref{\centerline}达到此目的。
+\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
+类似地,你也å¯ä»¥æŒ‡å®šå¯æ— é™æ”¶ç¼©çš„粘连。
+^^{粘连//å¯æ— é™æ”¶ç¼©çš„粘连}
+å¯æ— é™æ”¶ç¼©ç²˜è¿žå¯ä»¥ä½œä¸ºè´Ÿé—´è·ã€‚
+æ³¨æ„ |fil| ç­‰åªå¯ç”¨äºŽæŒ‡å®šç²˜è¿žçš„伸长é‡å’Œæ”¶ç¼©é‡â€”—%
+它们ä¸èƒ½ç”¨äºŽæŒ‡å®šè‡ªç„¶å°ºå¯¸ã€‚
+\eix^^{伸长é‡}
+\eix^^{收缩é‡}
+\endconcept
+
+
+%\conceptindex{groups}
+%\concept group
+\conceptindex{编组}
+\concept 编组
+
+%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|
+\defterm{编组}(group)是文稿中 \TeX\ 视为一个å•å…ƒçš„一部分。
+è¦è¡¨ç¤ºä¸€ä¸ªç¼–组,你å¯ä»¥ç”¨æ‹¬å· `|{|' å’Œ `|}|'%
+(或者\refterm{类别ç }åˆé€‚的其他字符)将它括起æ¥ã€‚
+^^|{//开始编组|
+^^|}//结æŸç¼–组|
+
+%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.
+\csdisplay
+Please don't pour {\it any} more tea into my hat.
+|
+|\it| \refterm{控制åºåˆ—}让 \TeX\ 设定 `|any|' 为æ„大利体,
+但它ä¸ä¼šå½±å“其他文本。
+å†ä¸¾ä¸€ä¸ªä¾‹å­ï¼Œå¦‚果你在编组中用 |\hsize| 命令\ctsref{\hsize}改å˜è¡Œå®½ï¼Œ
+在 \TeX\ 完æˆè¿™ä¸ªç¼–组åŽï¼Œè¡Œå®½å°†æ¢å¤ä¸ºä¹‹å‰çš„å–值。
+
+%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
+\csdisplay
+\TeX for the Impatient and the Outpatient too.
+|
+\noindent
+你将会得到下列结果:
+\display{%
+\TeX for the Impatient and the Outpatient too.
+}
+\noindent
+这是由于控制åºåˆ— |\TeX|ï¼ˆå®ƒç”Ÿæˆ \TeX\ 标识)å¸æ”¶äº†å…¶åŽçš„空格。
+你所需è¦çš„也许是这样:
+\display{%
+{\TeX} for the Impatient and the Outpatient too.
+}
+\noindent
+è¦å¾—到这ç§ç»“果,其中一ç§æ–¹æ³•å°±æ˜¯å°† `|\TeX|' 括到一个编组里é¢ï¼š
+\csdisplay
+{\TeX} for the Impatient and the Outpatient too.
+|
+其中的å³èŠ±æ‹¬å·é˜»æ­¢äº†æŽ§åˆ¶åºåˆ—å¸æ”¶ç©ºæ ¼ã€‚
+\endconcept
+
+
+\bookmark{2}{以H开头}
+%\conceptindex{hboxes}
+%\concept hbox
+\concept 水平盒å­
+
+%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
+\defterm{水平盒å­}(hbox,horizontal box)是 \TeX\
+从左到å³é€ä¸ªæ”¾ç½®\refterm{水平列表}的项目而构造出æ¥çš„\refterm{ç›’å­}。
+^^{水平列表//组æˆæ°´å¹³ç›’å­}
+水平盒å­ï¼Œä½œä¸ºä¸€ä¸ªå•å…ƒï¼Œæ—¢ä¸æ˜¯æœ¬è´¨ä¸Šæ°´å¹³çš„也ä¸æ˜¯æœ¬è´¨ä¸Šç«–直的,
+å³å®ƒå¯ä»¥å‡ºçŽ°åœ¨æ°´å¹³åˆ—表或\refterm{竖直列表}中。
+ä½ å¯ä»¥ç”¨ |\hbox| 命令\ctsref{\hbox}构造水平盒å­ã€‚
+\endconcept
+
+
+%\conceptindex{headers}
+%\concept header
+\concept 页眉
+
+%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
+\defterm{页眉}(header)是放在æ¯ä¸ªé¡µé¢é¡¶éƒ¨ï¼Œä½äºŽæ­£æ–‡ä¹‹ä¸Šçš„ç´ æ。
+一个简å•æŠ¥å‘Šçš„页眉å¯èƒ½ç”±å·¦ä¾§çš„标题和å³ä¾§çš„`第 $n$ 页''组æˆã€‚
+通常页眉åªåŒ…å«ä¸€è¡Œæ–‡æœ¬ï¼Œä½ å¯ä»¥é€šè¿‡ç»™ ^|\headline|\ctsref\headline 指定一个记å·åˆ—æ¥è®¾å®šé¡µçœ‰ã€‚
+在 \plainTeX\ 中默认页眉是空白的。
+你也å¯ä»¥ç”Ÿæˆå¤šè¡Œé¡µçœ‰ï¼›è¯·å‚阅\xrefpg{bighead}中介ç»çš„方法。
+\endconcept
+
+
+%\concept height
+\concept 高度
+
+%The \defterm{height} of a \refterm{box} is the distance that the box
+%extends above its \refterm{baseline}.
+%^^{boxes//height of}
+%\endconcept
+\refterm{ç›’å­}çš„\defterm{高度}(height)是盒å­åœ¨\refterm{基线}之上的è·ç¦»ã€‚
+^^{ç›’å­//ç›’å­çš„高度}
+\endconcept
+
+
+%\conceptindex{horizontal lists}
+%\concept{horizontal list}
+\concept{水平列表}
+
+%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
+\defterm{水平列表}(horizontal list)是 \TeX\ ä½äºŽæŸç§\refterm{水平模å¼}æ—¶
+(å³ç»„装段è½æˆ–水平盒å­æ—¶ï¼‰ç”Ÿæˆçš„一列项目。è§ä¸‹é¢çš„``水平模å¼''。
+\endconcept
+
+
+%\concept {horizontal mode}
+\concept {水平模å¼}
+
+%^^{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.
+^^{水平盒å­//处于水平模å¼ä¸­}
+在组装段è½æˆ–者\refterm{水平盒å­}时,
+\TeX\ ä½äºŽä¸¤ç§\defterm{水平模å¼}(horizontal mode)之一:
+^{普通水平模å¼}用于组装段è½ï¼Œè€Œ^{å—é™æ°´å¹³æ¨¡å¼}用于组装水平盒å­ã€‚
+åªè¦ \TeX\ ä½äºŽæ°´å¹³æ¨¡å¼ä¸­ï¼Œå®ƒçš„胃\seeconcept{\anatomy}就在构造项目%
+(盒å­ã€ç²˜è¿žã€æƒ©ç½šç­‰ï¼‰çš„\refterm{水平列表}。
+\TeX\ é€ä¸ªæŽ’版列表中的项目,从左到å³ã€‚
+
+%A horizontal list can't contain any
+%items produced by inherently vertical commands, e.g., |\vskip|.
+%^^{horizontal lists//can't contain vertical commands}
+水平列表ä¸èƒ½åŒ…å«ä»»ä½•ç”¨æœ¬è´¨ä¸Šçš„竖直命令,比如 |\vskip|,生æˆçš„项目。
+^^{水平列表//ä¸èƒ½åŒ…å«ç«–直命令}
+
+%\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}.
+\ulist
+\li 如果 \TeX\ 正在普通水平模å¼ä¸­ç»„装水平列表,并碰到一个本质上的竖直命令,
+它将结æŸå½“å‰æ®µè½å¹¶è¿›å…¥\refterm{竖直模å¼}。
+
+%\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.
+\li 如果 \TeX\ 正在å—é™æ°´å¹³æ¨¡å¼ä¸­ç»„装水平列表,并碰到一个本质上的竖直命令,
+它将报错。
+\endulist 这两个命令你也许会认为是本质上水平的,实际上å´æ˜¯æœ¬è´¨ä¸Šç«–直的:
+|\halign|\ctsref{\halign}和 |\hrule|\ctsref{\hrule}。
+^^|\hrule//本质上竖直的|
+^^|\halign//本质上竖直的|
+在\knuth{第~286~页}中列出了所有本质上的竖直命令。
+
+%{\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
+对于å—é™æ°´å¹³æ¨¡å¼ï¼Œä½ è¦çŸ¥é“这个微å°ä½†æ˜¯é‡è¦çš„特性:
+\emph{你无法从普通水平模å¼è¿›å…¥å—é™æ°´å¹³æ¨¡å¼}。%
+\footnote{译注:此处似乎有误,应为“你无法从å—é™æ°´å¹³æ¨¡å¼è¿›å…¥æ™®é€šæ°´å¹³æ¨¡å¼â€ã€‚}
+在实践上,这æ„味ç€åœ¨ç»„装水平盒å­æ—¶ \TeX\ 无法处ç†ç±»ä¼¼æ®µè½çš„文本,
+å³éœ€è¦\refterm{æ–­è¡Œ:断行点}的文本。在水平盒å­å†…部,
+通过把类似段è½çš„文本放入一个\refterm{ç«–ç›´ç›’å­}中,你就å¯ä»¥ç»•è¿‡æ­¤é™åˆ¶ã€‚
+其他类似方法也å¯è¡Œï¼Œæ¯”如将一个水平\refterm{阵列}放在水平盒å­å†…部。
+
+\endconcept
+
+
+%\concept{hyphenation}
+\concept{è¿žå­—}
+
+%\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.
+在处ç†æ–‡æ¡£æ—¶ï¼Œ\TeX\ 自动将å•è¯è¿žå­—化(hyphenation)。
+\TeX\ 并ä¸æ€¥äºŽæ’入连字符,它更喜欢通过调整å•è¯é—´éš”找到åˆé€‚断行点,
+从而将å•è¯ç”¨ä¸€è¡Œç§»åŠ¨åˆ°å¦ä¸€è¡Œã€‚
+\TeX\ 足够èªæ˜Žï¼Œå®ƒå¯ä»¥ç†è§£å·²ç»å‡ºçŽ°åœ¨å•è¯ä¸­çš„连字符。
+
+%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
+ä½ å¯ä»¥ç”¨å¦‚下几ç§æ–¹å¼æŽ§åˆ¶ \TeX\ 的连字:
+\ulist
+\li ä½ å¯ä»¥ç”¨ \writeidxfalse^|\-|\writeidxtrue 命令\ctsref{\@minus} æ’入自定连字符,
+以å…许 \TeX\ 在特定ä½ç½®è¿žå­—化。
+^^{自定连字符}
+\li ä½ å¯ä»¥ç”¨ ^|\hyphenation| 命令\ctsref{\hyphenation}%
+告诉 \TeX\ 在整个文档中如何对æŸä¸ªå•è¯è¿žå­—化。
+\li ä½ å¯ä»¥å°†å•è¯æ”¾å…¥ä¸€ä¸ª\refterm{水平盒å­}中,以阻止 \TeX\ 将它连字化。
+\li ä½ å¯ä»¥è®¾å®šä¸€äº›æƒ©ç½šå€¼ï¼Œæ¯”如 |\hyphenpenalty|\ctsref\hyphenpenalty 。
+\endulist
+\noindent 如果å•è¯ä¸­åŒ…å«æ˜¾å¼æˆ–自定连字符,\TeX\ å°†ä¸ä¼šåœ¨å…¶ä»–ä½ç½®æ–­å¼€ã€‚
+\endconcept
+
+
+\bookmark{2}{以I开头}
+%\conceptindex{input streams}
+%\concept {input stream}
+\concept {输入æµ}
+
+%See \conceptcit{file}.
+%\endconcept
+è§\conceptcit{文件}。
+\endconcept
+
+%\conceptindex{insertions}
+%\concept insertion
+\concept æ’入项
+
+%\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
+\defterm{æ’入项}(insertion)是一个竖直列表,
+它包å«å³å°†åœ¨é¡µé¢å»ºé€ å®ŒæˆåŽæ’入到该页é¢çš„ç´ æ。\footnote
+{\TeX\ 本身并ä¸æ’入这些素æ——它仅æ供这些素æ给输出例行程åºï¼Œ
+输出例行程åºè´Ÿè´£å°†å®ƒä»¬ç§»åŠ¨åˆ°æŽ’版出的页é¢ä¸­ã€‚
+^^{输出例行程åº//处ç†æ’入项}
+^|\insert| 命令\ctsref{\insert}仅有的直接效果是,
+改å˜äº† \TeX\ 的分页计算公å¼ä»¥ç»™æ’入素æ留出空间。
+ç¨åŽï¼Œå½“ \TeX\ 实际分出了页é¢æ—¶ï¼Œå®ƒå°†æ’入素æ分为两组:当å‰é¡µèƒ½å¤Ÿæ”¾ä¸‹çš„和无法放下的。
+^^{分页//分页时的æ’入项}
+当å‰é¡µèƒ½å¤Ÿæ”¾ä¸‹çš„ç´ æ被放入盒å­å¯„存器中,æ¯ä¸ªæ’入项放入一个寄存器,
+而无法放下的素æ则ä¿ç•™åˆ°ä¸‹ä¸€é¡µä¸­ã€‚
+此过程å…许 \TeX\ 将长脚注分到连续多个页é¢ä¸­ã€‚}
+脚注和图片就是æ’入项的例å­ã€‚
+在\refterm{\plainTeX} 中,用于创建æ’入项的命令有
+^|\footnote|,^|\topinsert|,|\mid!-insert| 和 ^|\pageinsert|,
+^^|\midinsert|
+以åŠåŽŸå§‹å‘½ä»¤ ^|\insert| 本身(è§~\xrefn\footnote--\xrefn{endofinsert}~页)。
+\TeX\ æ’入项的处ç†æœºåˆ¶æ˜¯ç›¸å½“å¤æ‚çš„ï¼›
+ä½ å¯ä»¥åœ¨\knuth{第~122--125~页}中看到详细介ç»ã€‚
+\endconcept
+
+
+%\concept {interline glue}
+\concept {行间粘连}
+
+%\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
+\defterm{行间粘连}(interline glue)是 \TeX\ 在\refterm{竖直列表}çš„æ¯ä¸ªç›’å­%
+(第一个盒å­é™¤å¤–)之å‰æ’入的粘连。
+通常指定行间粘连以让å„ç›’å­åŸºçº¿é—´ä¿æŒç›¸åŒçš„è·ç¦»ã€‚
+行间粘连的值由 ^|\baselineskip|,^|\lineskip| 和 ^|\lineskiplimit|
+这三个å‚æ•°åˆèµ·æ¥ç¡®å®š\ctsref{\baselineskip}。
+\endconcept
+
+
+%\conceptindex{items}
+%\concept item
+\concept 项目
+
+%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
+\defterm{项目}(item)这个术语常用æ¥è¡¨ç¤ºæ°´å¹³ï¼Œç«–直或数学列表
+ï¼ˆå³ \TeX\ 在水平,竖直或数学模å¼ä¸­å»ºé€ çš„项目列表)的一个组æˆå…ƒç´ ã€‚
+\endconcept
+
+
+\bookmark{2}{以J开头}
+%\conceptindex{justification}
+%\concept {justified text}
+\concept {对é½æ–‡æœ¬}
+
+%\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.
+\defterm{对é½æ–‡æœ¬}(justified text)是两边对é½æŽ’版的文本。
+而éžå¯¹é½æ–‡æœ¬æ˜¯å•è¾¹æˆ–两边“ä¸å¯¹é½â€æŽ’版的文本。
+è€å¼æ‰“å°æœºæŽ’版的文档几乎总是左对é½çš„。
+虽然 \TeX\ 默认生æˆä¸¤è¾¹å¯¹é½çš„文档,
+如果你需è¦ä¹Ÿå¯ä»¥ç”Ÿæˆ^{左对é½}或^{å³å¯¹é½}的文档(或一些文本行)。
+你也å¯ä»¥è®© \TeX\ 将一些文本行居中,从而让两边都ä¸å¯¹é½ã€‚
+^^{居中文本}
+用 ^|\leftskip|,^|\rightskip| 和 ^|\raggedright| 命令%
+(第 \xrefn{\leftskip},\xrefn{\raggedright}页)å¯ä»¥è¾¾åˆ°è¿™äº›ç›®çš„.
+
+%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
+在生æˆå¯¹é½æ–‡æœ¬æ—¶ï¼Œ\TeX\ 通常需è¦ä¼¸ç¼©å„行的粘连以让两边对é½ã€‚
+而在生æˆéžå¯¹é½æ–‡æœ¬æ—¶ï¼Œ\TeX\ 通常让å„行的粘连ä¿æŒè‡ªç„¶å°ºå¯¸ã€‚
+很多排å°å·¥æ›´å–œæ¬¢éžå¯¹é½æ–‡æœ¬ï¼Œå› ä¸ºå®ƒçš„å­—é—´è·æ›´åŠ ä¸€è‡´ã€‚
+\endconcept
+
+
+\bookmark{2}{以K开头}
+%\conceptindex{kerns}
+%\concept kern
+\conceptindex{紧排}
+\concept 紧排
+
+%^^{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.
+^^{间隔//用紧排调整}
+\defterm{紧排}(kern)表示对竖直或水平列中的项目间的è·ç¦»ä½œä¸€å®šè°ƒæ•´ã€‚
+紧排å¯æ­£å¯è´Ÿã€‚将正紧排放入两个项目间,将以该紧排的大å°æ‹‰å¼€ä¸¤ä¸ªé¡¹ç›®ã€‚
+而将负紧排放入两个项目间,将以该紧排的大å°æ‹‰è¿‘两个项目。
+例如,下列文本:
+\csdisplay
+11\quad 1\kern1pt 1\quad 1\kern-.75pt 1
+|
+将生æˆç±»ä¼¼ä¸‹é¢çš„几个字符对:
+\display{11\quad 1\kern1pt 1\quad 1\kern-.75pt 1}
+在竖直模å¼ä¸­å¯ä»¥ç”¨ç´§æŽ’改å˜ç‰¹å®šä¸¤è¡Œçš„é—´è·ã€‚
+
+%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.
+大å°ä¸º$d$的紧排与大å°ä¸º$d$且无伸缩的\refterm{粘连}éžå¸¸ç›¸ä¼¼ã€‚
+紧排和粘连两者都在相邻项目间æ’入或删除一定间è·ã€‚
+本质区别在于,若两盒å­é—´åªæœ‰ç´§æŽ’,\TeX\ 将认为它们是åˆåœ¨ä¸€èµ·çš„。
+\footnote{译注:本书将“kernâ€ç¿»è¯‘为“紧排â€æ­£ç”±äºŽè¿™ä¸ªåŽŸå› ï¼Œâ€œç´§â€åº”该ç†è§£ä¸ºâ€œç´§å›ºâ€ã€‚}
+这就是说,\TeX\ ä¸ä¼šåœ¨ç´§æŽ’处断行或者分页,除éžå…¶åŽè·Ÿç€ä¸€ä¸ªç²˜è¿žã€‚
+当你决定用紧排或粘连实现æŸç§ç›®çš„时,务必记得这两者的区别。
+
+%\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.}
+\TeX\ 在æŸäº›ç›¸é‚»çš„字符对之间自动æ’入紧排,
+从而改å˜è¿™äº›å­—符的间è·ï¼Œä½¿å¾—排版出的文档更加美观。
+例如,在计算机现代字体的$10$点罗马字体中,
+包å«ä¸€ä¸ªå­—符对`To'的紧排,将字æ¯`o'的左边缘拉到字æ¯`T'下边。
+没有这个紧排,你将得到 \hbox{“T{o}pâ€} 而ä¸æ˜¯ “Top†——%
+两者的差别是微å°çš„但å´æ˜¯æ˜Žæ˜¾çš„。
+\TeX\ 用æŸä¸ª\refterm{字体}排版文本时自动æ’入的紧排的ä½ç½®å’Œå¤§å°ï¼Œ
+是在该字体的度é‡æ–‡ä»¶ï¼ˆ^{\tfmfile})中指定的。
+\margin{paragraph deleted to save space; most of the material was
+already in this section.}
+
+\endconcept
+
+
+\bookmark{2}{以L开头}
+%\concept leaders
+\concept 指引线
+
+%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
+利用\defterm{指引线}(leaders),你å¯ä»¥ç”¨æŸä¸ªæ¨¡å¼çš„å¤æœ¬å¡«å……空间,
+比如在目录中的用é‡å¤çš„点填充标题和页ç ä¹‹é—´çš„空间。
+指引体(leader)是模å¼çš„å•ä¸ªå¤æœ¬ã€‚
+è¦æŒ‡å®šä¸€ä¸ªæŒ‡å¼•çº¿ï¼Œä½ éœ€è¦ç»™å‡ºä¸‰æ–¹é¢çš„ä¿¡æ¯ï¼š
+\olist\compact
+\li å•ä¸ªæŒ‡å¼•ä½“是怎样的
+\li è¦å¡«å……的空间有多大
+\li 模å¼çš„å¤æœ¬åœ¨ç©ºé—´å†…应该如何组织
+\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.}
+\bix^^|\leaders|
+\bix^^|\cleaders|
+\bix^^|\xleaders|
+\TeX\ 有三个用于指定指引线的命令:
+|\leaders|,\hbox{|\cleaders|} 和 |\xleaders|(\xref\leaders )。
+å„命令的\refterm{å‚é‡}指定了指引体。
+命令之åŽå¿…须是一个\refterm{粘连};粘连的大å°æŒ‡å®šäº†è¦å¡«å……空间的大å°ã€‚
+命令的选择决定了指引体在空间内如何组织。
+
+%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:
+这里有个例å­å±•ç¤ºäº† |\leaders| 的工作方å¼ï¼š
+\csdisplay
+\def\dotting{\leaders\hbox to 1em{\hfil.\hfil}\hfil}
+\line{The Political Process\dotting 18}
+\line{Bail Bonds\dotting 26}
+|
+其中我们将指引线åŠç›¸å…³ç²˜è¿žæ”¾åœ¨ä¸€ä¸ª\refterm{å®}定义中,
+以方便我们在两个地方使用它。这个例å­çš„输出结果是:
+
+%\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}
+%}
+\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.
+|\leaders| 之åŽçš„\refterm{水平盒å­}指定了指引体,å³åŒ…å«å±…中点的 1\em\ 宽的水平盒å­ã€‚
+空间将用这个盒å­çš„å¤æœ¬å¡«å……,实际上是用中心相隔 1\em{} 的点填充。
+éšåŽçš„ |\hfil|(å®å®šä¹‰æœ«å°¾é‚£ä¸ªï¼‰æ˜¯ä¸€ä¸ªç²˜è¿žï¼Œå®ƒç»™å‡ºæ‰€è¦å¡«å……空间的大å°ã€‚
+在这个例å­ä¸­ï¼Œå®ƒå°±æ˜¯å¡«æ»¡æ–‡æœ¬è¡Œæ‰€éœ€çš„空间。
+我们选择 |\leaders| 而ä¸æ˜¯ |\cleaders| 或 |\xleaders|,是为了让ä¸åŒè¡Œçš„点相互对é½ã€‚
+
+%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:
+一般地,所è¦å¡«å……的空间就作为包å«æŒ‡å¼•ä½“的多个å¤æœ¬çš„窗体。
+\TeX\ æ’入尽å¯èƒ½å¤šçš„å¤æœ¬ï¼Œä½†é€šå¸¸ä¼šæœ‰äº›ç©ºé—´å‰©ä¸‹â€”—%
+或者是由于指引体在窗体内的ä½ç½®é—®é¢˜ï¼Œæˆ–者是由于窗体的宽度ä¸æ˜¯æŒ‡å¼•ä½“宽度的整数å€ã€‚
+这三个命令的差异在于,在窗体内如何安排指引体和分é…剩余空间:
+
+%\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}
+\ulist
+\li 对于 |\leaders|, \TeX\ 首先生æˆä¸€è¡ŒæŒ‡å¼•ä½“å¤æœ¬ã€‚
+然åŽè¯¥è¡Œå¤æœ¬çš„起始ä½ç½®ä¸ŽåŒ…å« |\leaders| å‘½ä»¤çš„æœ€å†…ä¾§ç›’å­ $B$ 的左侧对é½ã€‚
+在上é¢çš„两行例å­ä¸­ï¼Œ$B$ 就是由 |\line| 生æˆçš„ç›’å­ã€‚
+整个è½å…¥çª—体的指引体将被放入 $B$ 中,而左å³ä¸¤è¾¹å‰©ä¸‹çš„空间将空ç€ã€‚图形如下:
+\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
+\noindent
+这个过程确ä¿åœ¨ä¸Šé¢çš„两行例å­ä¸­ï¼Œä¸¤è¡Œä¸­çš„å„个点是竖直对é½çš„%
+(由于用 |\line| 生æˆçš„水平盒å­çš„\refterm{基准点}是竖直对é½çš„)。
+
+%\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 对于 |\cleaders|,\TeX\ 平分窗体两边的剩余空间以让指引线在窗体中居中。
+剩余空间总是å°äºŽå•ä¸ªæŒ‡å¼•ä½“的宽度。
+
+%\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
+\li 对于 |\xleaders|,\TeX\ 将剩余空间在窗体内å‡åŒ€åˆ†å¸ƒã€‚
+也就是说,如果剩余空间是 $w$,指引体被é‡å¤ $n$ 次,
+\TeX\ 将在相邻指引体中间åŠæŒ‡å¼•çº¿ä¸¤ç«¯å¡«å……宽度为 $w/(n+1)$ 的空间。
+其效果通常是将指引体散开一点。和 |\cleaders| 类似,
+|\xleaders| 的剩余空间也总是å°äºŽå•ä¸ªæŒ‡å¼•ä½“的宽度。
+\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
+到目å‰ä¸ºæ­¢ï¼Œæˆ‘们都å‡å®šæŒ‡å¼•çº¿ç”±æ¨ªå‘排列的水平盒å­ç»„æˆçš„。实际上指引线还有两个å¯èƒ½çš„å˜ç§ï¼š
+\olist
+\li ä½ å¯ä»¥ç”¨æ ‡çº¿ä»£æ›¿æ°´å¹³ç›’å­ä½œä¸ºæŒ‡å¼•ä½“。
+\TeX\ 将让标线尽å¯èƒ½å®½ä»¥è®©å®ƒå¡«æ»¡è¯¥ç²˜è¿žï¼ˆä»Žè€Œè¿™ä¸‰ä¸ªå‘½ä»¤æ˜¯ç­‰ä»·çš„)。
+\li ä½ å¯ä»¥ä¸åœ¨\refterm{水平列表}而在\refterm{竖直列表}中使用它,
+以在页é¢ä¸­ç”Ÿæˆå‘下排列的竖直指引线。在这ç§æƒ…形中指引线åŽé¢éœ€è¦ç»™å‡ºç«–直粘连。
+\endolist
+\noindent
+请å‚阅 \knuth{第~223--225~页},
+其中给出了 \TeX\ 用于排版指引线的精确规则。
+\eix^^|\leaders|
+\eix^^|\cleaders|
+\eix^^|\xleaders|
+\endconcept
+
+
+%\conceptindex{ligatures}
+%\concept ligature
+\concept 连写
+
+%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).
+\defterm{连写}(ligature)是排版的文档中替æ¢ç‰¹å®šçš„相邻字符串的å•ä¸ªå­—符。
+例如,在高质é‡çš„排版系统中,
+å•è¯ `|office|'将被排版为 \hbox{``office''},而ä¸æ˜¯ \hbox{``of{f}ice''}。
+连写信æ¯å·²ç»åµŒå…¥åœ¨ä½ ä½¿ç”¨çš„\refterm{字体}中,因此什么也ä¸ç”¨åšä½ å°±å¯ä»¥è®©\TeX\ 生æˆå®ƒä»¬ã€‚%
+ï¼ˆé€šè¿‡å°†è¾“å…¥å†™æˆ `|of{f}ice|' å¯ä»¥å–消 ``office'' 中的连写,正如我们刚æ‰æ‰€åšçš„。)
+利用此连写机制,对å•è¯çš„开头或者末尾字æ¯ï¼Œ\TeX\ 也å¯ä»¥ä½¿ç”¨ä¸Žå®ƒåœ¨å•è¯ä¸­é—´æ—¶ä¸åŒçš„æ–¹å¼æŽ’版。
+用 ^|\noboundary| 命令(\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
+有时候你会需è¦æ¬§æ´²è¯­è¨€çš„连写。
+^^{欧洲语言}
+除éžä½ ä½¿ç”¨ä¸€ä¸ªé’ˆå¯¹è¯¥è¯­è¨€è®¾è®¡çš„字体,å¦åˆ™ \TeX\ ä¸ä¼šè‡ªåŠ¨ç”Ÿæˆè¿™äº›è¿žå†™ã€‚
+有一些连写,比如 `\AE',å¯ä»¥ç”¨å‘½ä»¤å¾—到(è§``欧洲语言字æ¯å’Œè¿žå†™'',\xref{fornlets})。
+\endconcept
+
+
+%\conceptindex{line breaks}
+%\concept{line break}
+\conceptindex{断行}
+\concept{断行点}
+
+%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.
+\defterm{断行点}(line break)是文档中 \TeX\ 结æŸä¸€è¡Œå¹¶å¼€å§‹æ–°è¡Œçš„ä½ç½®ã€‚
+在处ç†ä½ çš„文档时,\TeX\ 将一个段è½çš„内容收集到一个\refterm{水平列表}中。
+收集完整个段è½ä¹‹åŽï¼Œå®ƒåˆ†æžè¯¥åˆ—表以找到它认为最佳的断行点。
+\TeX\ 附加``^{缺陷}''值给å„ç§å½¢æ€çš„丑陋断行点——%
+å•è¯é—´éš”太大或太å°çš„行,连续以连字符结尾的行,诸如此类。
+然åŽå®ƒé€‰æ‹©è®©æ€»ç¼ºé™·å€¼æœ€å°çš„断行点。
+请å‚阅\knuth{第~96--101~页}中的 \TeX\ 的断行规则的完整说明。
+
+%You can control \TeX's choice of line breaks in several ways:
+%\ulist
+ä½ å¯ä»¥ç”¨ä¸‹é¢å‡ ç§æ–¹å¼æŽ§åˆ¶ \TeX\ 对断行点的选择:
+\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 ä½ å¯ä»¥åœ¨ \TeX\ å½¢æˆæ®µè½æ—¶æž„建的水平列表的æŸå¤„æ’å…¥\refterm{惩罚}项(\xref{hpenalty})。
+^^{惩罚//在水平列表中}
+æ­£æƒ©ç½šå€¼é˜»ç¢ \TeX\ 在该处断行,而负惩罚值——å³å¥–励值——鼓励 \TeX\ 在该处断行。
+大于或等于 $10000$ 的惩罚åªé˜»æ­¢æ–­è¡Œï¼Œè€Œå°äºŽæˆ–等于 $-10000$ 强制断行。
+用 ^|\break| å’Œ ^|\nobreak| 命令(第~\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 ä½ å¯ä»¥ç”¨ |\-| 命令\ctsref{\@minus}æ’入自定连字符,以å…许 \TeX\ 在特定ä½ç½®è¿žå­—化。
+^^{自定连字符}
+你也å¯ä»¥æŽ§åˆ¶ \TeX\ 在你的文档中如何连字化\seeconcept{è¿žå­—}。
+\ifoldeplain^^|\-//在断行中|\fi
+
+%\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 ä½ å¯ä»¥åœ¨ä¸¤ä¸ªå•è¯é—´ç”¨ ^|\slash|\ctsref{\slash}æ’å…¥^{斜线符å·} (/),
+并å…许 \TeX\ 在斜线åŽæ–­è¡Œï¼Œæ¯”如 `|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 ä½ å¯ä»¥é€šè¿‡åœ¨ä¸¤ä¸ªç‰¹å®šå•è¯é—´æ’å…¥^{带å­} (|~|),以ç¦æ­¢ \TeX\ 在该处断行。
+^^|~//在断行中|
+
+%\li You can adjust the penalties associated with line breaking by
+%assigning different values to \TeX's line-breaking
+%\refterm{parameters:parameter}.
+\li ä½ å¯ä»¥ç»™ \TeX\ çš„æ–­è¡Œ\refterm{å‚æ•°}赋予ä¸åŒçš„值,以调整断行时附加的惩罚值。
+
+%\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
+\li ä½ å¯ä»¥å°†ä¸€ä¸ªå•è¯æˆ–一列å•è¯æ”¾åœ¨ä¸€ä¸ª\refterm{水平盒å­}中,
+从而阻止 \TeX\ ç›’å­é‡Œé¢çš„任何ä½ç½®æ–­è¡Œã€‚
+^^{水平盒å­//控制断行}
+\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
+知é“在什么地方 \TeX\ å¯ä»¥æ–­è¡Œä¹Ÿæ˜¯æœ‰ç›Šçš„:
+\ulist
+\li 在粘连处,åªè¦ï¼š
+\olist
+\li 粘连之å‰æ˜¯ä¸‹åˆ—项目之一:盒å­ã€è‡ªå®šé¡¹ç›®ï¼ˆæ¯”如自定连字符)ã€å…¬å¼ç»“å°¾ã€
+å°çŽ©æ„或者用|\mark| 或 |\vadjust| 或 |\insert| 生æˆçš„ç«–ç›´ç´ æ
+\li 粘连ä¸æ˜¯æ•°å­¦å…¬å¼çš„一部分
+\endolist
+\noindent
+在粘连处断行时,\TeX\ 让断行点ä½äºŽç²˜è¿žçš„左边缘,并忽略粘连的其他部分。
+\li 在紧排处,åªè¦å…¶åŽç›´æŽ¥è·Ÿç€ç²˜è¿žï¼Œä¸”该紧排ä¸åœ¨æ•°å­¦å…¬å¼ä¸­
+\li 在数学公å¼ç»“尾处,åªè¦å…¶åŽç›´æŽ¥è·Ÿç€ç²˜è¿ž
+\li 在惩罚项处,å³ä½¿è¯¥æƒ©ç½šé¡¹åœ¨æ•°å­¦å…¬å¼ä¸­
+\li 在自定å¯æ–­ç‚¹å¤„
+\endulist
+在断行时,\TeX\ 丢弃断点之åŽçš„ä»»æ„多个粘连ã€ç´§æŽ’和惩罚项。
+如果这些项目之åŽè¿˜æ˜¯ä¸€ä¸ªæ•°å­¦å…¬å¼èµ·ç‚¹ï¼Œå®ƒåŒæ ·ä¸¢å¼ƒå…¬å¼èµ·ç‚¹ç”Ÿæˆçš„任何紧排。
+\endconcept
+
+
+%\conceptindex{lists}
+%\concept list
+\concept 列表
+
+%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}.
+\defterm{列表}(list)是一列用于组æˆæ°´å¹³åˆ—表ã€ç«–直列表或数学公å¼çš„\refterm{项目}%
+(\refterm{ç›’å­}ã€\refterm{粘连}ã€\refterm{紧排}等)。
+请å‚阅\conceptcit{水平列表},\conceptcit{竖直列表}。
+
+\endconcept
+
+
+%\concept {log file}
+\concept {日志文件}
+
+%See \conceptcit{file}.
+%\endconcept
+è§\conceptcit{文件}。
+\endconcept
+
+
+\bookmark{2}{以M开头}
+%\conceptindex{macros}
+%\concept macro
+\conceptindex{å®}
+\concept å®
+
+%{% 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.
+{% Use a brace here so that definitions of explanatory macros remain local.
+% The closing brace is at the end of the concept.
+\defterm{å®}(macro)是一个定义,它给出了 \TeX\ 输入文本的一ç§æ¨¡å¼çš„å称。%
+\footnote{更准确地说,该定义给出了一个记å·åºåˆ—çš„å称。}
+这个å称å¯ä»¥æ˜¯ä¸€ä¸ª\refterm{控制åºåˆ—}或一个\refterm{活动字符}。
+其中的模å¼ç§°ä¸ºâ€œæ›¿æ¢æ–‡æœ¬â€ã€‚
+用于定义å®çš„原始命令是 |\def| 控制åºåˆ—。
+
+%\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}$'.
+\def\arctheta{\cos \theta + i \sin \theta}
+举个简å•ä¾‹å­ï¼Œå‡è®¾ä½ æœ‰ä¸€ä¸ªæ–‡æ¡£ï¼Œ
+其中多次出现‘$\cos \theta + i \sin \theta$’这串字符。
+为é¿å…æ¯æ¬¡éƒ½å†™ä¸€é,你å¯ä»¥ç»™å®ƒå®šä¹‰ä¸€ä¸ªå®ï¼š
+\csdisplay
+\def\arctheta{\cos \theta + i \sin \theta}
+|
+这样æ¯æ¬¡éœ€è¦è¿™ä¸²å­—符时,
+用‘|\arctheta|’命令“调用â€è¿™ä¸ªå®å°±å¯ä»¥å¾—到它。
+比如,‘|$e^{\arctheta}$|’将给出‘$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}
+%|
+\bix^^{å®//å®çš„å‚æ•°}
+但å®çš„真正å¨åŠ›åœ¨äºŽå®ƒå¯ä»¥å¸¦æœ‰å‚数。
+在调用一个带有å‚æ•°çš„å®æ—¶ï¼Œä½ ç»™å‡ºç”¨äºŽæ›¿æ¢è¿™äº›å‚æ•°çš„å‚é‡ã€‚
+例如,å‡è®¾ä½ è¿™æ ·å†™ï¼š
+\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}|'.
+è®°å· |#1| \xrdef{@msharp} 表示å®çš„第一个å‚数,
+在这个例å­ä¸­å®åªæœ‰ä¸€ä¸ªå‚数。
+现在你å¯ä»¥ç”¨â€˜|\arc {2t}|’得到‘$\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.
+更一般地,一个å®æœ€å¤šå¯ä»¥æœ‰ä¹ä¸ªå‚数,
+在å®å®šä¹‰ä¸­å®ƒä»¬åˆ†åˆ«ç”¨`|#1|',`|#2|' 等表示。
+\TeX\ æ供两ç§ç±»åž‹çš„å®å‚数:定界å‚æ•°å’Œéžå®šç•Œå‚数。
+简å•æ¥è¯´ï¼Œ
+定界å‚数对应一个由特定记å·åºåˆ—(å³å®šç•Œå­ï¼‰å®šç•Œï¼ˆå³ç»“æŸï¼‰çš„\refterm{å‚é‡},
+而éžå®šç•Œå‚数对应一个无需定界å­ç»“æŸçš„å‚é‡ã€‚
+我们先解释åªæœ‰éžå®šç•Œå‚æ•°æ—¶å®å¦‚何è¿ä½œï¼Œ
+然åŽè§£é‡ŠåŒ…å«å®šç•Œå‚æ•°æ—¶å®å¦‚何è¿ä½œã€‚
+
+%^^{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:
+^^{å‚æ•°//éžå®šç•Œå‚æ•°}
+当å®åªæœ‰éžå®šç•Œå‚数时,这些å‚æ•°å¿…é¡»ä¾æ¬¡å‡ºçŽ°åœ¨å®å®šä¹‰ä¸­ï¼Œ
+\emph{在å„个å‚数之间,以åŠæœ€åŽä¸€ä¸ªå‚数和替æ¢æ–‡æœ¬å‰çš„左花括å·ä¹‹é—´ï¼Œä¸èƒ½æœ‰ä»»ä½•ä¸œè¥¿}。
+对这ç§å®çš„调用由该å®çš„å称,以åŠåŽé¢è·Ÿéšçš„å„个å‚é‡ç»„æˆã€‚
+æ¯ä¸ªå‚é‡å¯¹åº”一个å‚数,å‚é‡å¯ä»¥æ˜¯
+
+%\ulist \compact
+%\li a single \refterm{token} other than a left or right brace, or
+\ulist \compact
+\li ä¸ä¸ºå·¦æˆ–å³èŠ±æ‹¬å·çš„å•ä¸ª\refterm{è®°å·},或者
+
+%\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
+\li 一个包å«åœ¨é…对的左å³èŠ±æ‹¬å·ä¹‹é—´çš„è®°å·åºåˆ—。%
+\footnote{å‚é‡å†…部也å¯ä»¥æœ‰åµŒå¥—çš„é…对花括å·ï¼Œ
+其中æ¯å¯¹èŠ±æ‹¬å·è¡¨ç¤ºä¸€ä¸ª\refterm{编组},或者表示一个å¦å¤–çš„å®å‚é‡ã€‚}
+\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.
+\TeX\ 在食é“中展开它所é‡åˆ°çš„å®\seeconcept{\anatomy},
+方法是将替æ¢æ–‡æœ¬ä¸­çš„æ¯ä¸ªå‚数替æ¢ä¸ºå®ƒæ‰€å¯¹åº”çš„å‚é‡ã€‚
+å®å±•å¼€åŽæ‰€å¾—到的文本中å¯èƒ½è¿˜åŒ…å«å…¶ä»–å®ã€‚
+当 \TeX\ é‡åˆ°è¿™ç§åµŒå¥—çš„å®è°ƒç”¨æ—¶ï¼Œ
+它将立å³å±•å¼€æ­¤å®è°ƒç”¨ï¼Œå®ŒæˆåŽå†æŸ¥çœ‹åŽç»­å†…容。%
+\footnote{用计算机科学中的术语,
+å®å±•å¼€æ˜¯â€œæ·±åº¦ä¼˜å…ˆçš„â€ï¼Œè€Œä¸æ˜¯â€œå¹¿åº¦ä¼˜å…ˆçš„â€ã€‚
+注æ„用类似 |\expandafter| 的命令你å¯ä»¥ä¿®æ”¹å®å±•å¼€çš„顺åºã€‚}
+当 \TeX\ 的食é“得到无法å†å±•å¼€çš„\refterm{原始命令}时,
+\TeX\ 就将该命令é€å…¥ \TeX\ 的胃。
+å®å±•å¼€çš„å…ˆåŽé¡ºåºæœ‰æ—¶å€™æ˜¯è‡³å…³é‡è¦çš„,
+为帮助你ç†è§£è¿™ä¸ªé—®é¢˜ï¼Œä¸‹é¢æˆ‘们将给出一个例å­ã€‚
+
+%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:
+å‡è®¾ä½ ç»™ \TeX\ æ供如下输入:
+\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.
+|
+则与 |#1| 对应的å‚é‡ä¸º |\c|,与 |#2| 对应的å‚é‡ä¸º |e\d|。
+\TeX\ 按照如下步骤展开å®è°ƒç”¨ï¼š
+
+%{\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}
+{\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|' é€åˆ°èƒƒé‡Œï¼‰
+|dd\c\kern 2pt \c|
+|\c\kern 2pt \c|\quad (`|d|',`|d|' é€åˆ°èƒƒé‡Œï¼‰
+|\char49 cc\kern 2pt \c|
+|\c|\quad (`|\char|',`|4|',`|9|',`|c|',`|c|',%
+`|\kern|',`|2|',`|p|',`|t|' é€åˆ°èƒƒé‡Œï¼‰
+|\char49 cc|
+(`|\char49|',`|c|',`|c|' é€åˆ°èƒƒé‡Œï¼‰
+\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.
+\noindent 注æ„å­—æ¯ `|b|',`|c|',`|d|' å’Œ `|e|',
+以åŠæŽ§åˆ¶åºåˆ— `|\kern|' å’Œ `|\char|' 都是无法å†å±•å¼€çš„原始命令。
+
+%\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.
+\bix^^{å‚æ•°//定界å‚æ•°}
+å®ä¹Ÿå¯ä»¥åŒ…å«â€œå®šç•Œå‚æ•°â€ï¼Œå®ƒä»¬å¯ä»¥å’Œéžå®šç•Œå‚æ•°æ··åˆä½¿ç”¨ã€‚
+定界å‚数的想法是,
+\TeX\ 通过寻找标记å‚é‡ç»“æŸçš„特定记å·åºåˆ—(å³å®šç•Œå­ï¼‰ç¡®å®šå¯¹åº”çš„å‚é‡ã€‚
+也就是说,在查找这ç§å‚é‡æ—¶ï¼Œ
+\TeX\ 选å–从当å‰ä½ç½®åˆ°å®šç•Œå­ä¹‹é—´çš„所有记å·ï¼Œä¸åŒ…å«è¯¥å®šç•Œå­ã€‚
+
+%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.
+è¦æŒ‡å®šä¸€ä¸ªå®šç•Œå‚数,你å¯ä»¥åœ¨ `|#|$n$'($n$ 必须在 $1$ å’Œ $9$ 之间)%
+åŽé¢åŠ ä¸Šä¸€ä¸ªæˆ–多个充当定界å­çš„è®°å·ã€‚
+定界å­ä¸€ç›´å»¶ç»­åˆ°ä¸‹ä¸€ä¸ª `|#|' 或 `|{|' 为止——这是有é“ç†çš„,
+因为 `|#|' 开始å¦ä¸€ä¸ªå‚数,而 `|{|' 开始替æ¢æ–‡æœ¬ã€‚
+
+%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}
+下é¢çš„例å­ç”¨åˆ°äº†ä¸¤ä¸ªå®šç•Œå‚数:
+\def\diet#1 #2.{On #1 we eat #2!}
+\csdisplay
+\def\diet#1 #2.{On #1 we eat #2!!}
+|
+其中第一个å‚数用å•ä¸ªç©ºæ ¼å®šç•Œï¼Œè€Œç¬¬äºŒä¸ªå‚数用英文å¥å·å®šç•Œã€‚
+如果你这样写:
+\csdisplay
+\diet Tuesday turnips.
+|
+你将得到文本“\diet Tuesday turnips.â€ã€‚
+但若将定界记å·æ”¾åœ¨ç¼–组中,\TeX\ å°±ä¸ä¼šå°†å®ƒä»¬è®¤ä½œå®šç•Œè®°å·ã€‚
+因此如果你这样写:
+\csdisplay
+\diet {Sunday mornings} pancakes.
+|
+å³ä½¿åœ¨ ‘|Sunday|’ å’Œ ‘|morning|’ 之间有一个空格,
+你也将得到文本‘\diet {Sunday mornings} pancakes.’。
+当你将空格符作为定界å­æ—¶ï¼Œè¡Œå°¾ç¬¦ä¸€èˆ¬åŒæ ·å®šç•Œäº†å¯¹åº”çš„å‚é‡ï¼›
+这是因为 \TeX\ 在å®æœºåˆ¶è¿ä½œä¹‹å‰å°±å°†è¡Œå°¾ç¬¦éƒ½è½¬æ¢ä¸ºç©ºæ ¼äº†ã€‚
+\eix^^{å‚æ•°//定界å‚æ•°}
+\eix^^{å®//å®çš„å‚æ•°}
+
+%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}'.
+å¶å°”在你所定义的å®é‡Œé¢éœ€è¦å°†`|#|'用åšä¸€ä¸ªæœ‰æ„义的字符。
+当你在å®å®šä¹‰ä¸­å®žé™…上åˆå®šä¹‰äº†ç¬¬äºŒä¸ªå®æ—¶ï¼Œä½ å¤šåŠéœ€è¦è¿™æ ·åšã€‚
+怎样处ç†ç¬¬äºŒä¸ªå®çš„å‚数,以让 \TeX\ ä¸ä¼šæ··æ·†å®ƒä»¬ä¿©å‘¢ï¼Ÿ
+答案是,在第一个å®å±•å¼€åŽéœ€è¦ä¸€ä¸ªâ€˜|#|’的地方写上两个‘|#|’。
+å‡å¦‚你写出下é¢çš„å®å®šä¹‰ï¼š
+\def\first#1{\def\second##1{#1/##1}}
+\csdisplay
+\def\first#1{\def\second##1{#1/##1}}
+|
+则对‘|\first{One}|’的调用将把‘|\second|’定义为:
+\csdisplay
+\def\second#1{One/#1}
+|
+而éšåŽçš„调用‘|\second{Two}|’将得到文本
+\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
+还有一些命令æ供了å®çš„其他定义方å¼ï¼ˆè§ç¬¬~\xrefn{mac1}--\xrefn{mac2}~页)。
+在\knuth{第~20~ç« }中有关于å®çš„完整规则。
+}% close brace at the start of the `macro' concept.
+\endconcept
+
+
+%\concept magnification
+\concept 放大率
+
+%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.
+\TeX\ 排版文档时将把所有尺寸乘以一个放大(magnificationï¼‰å› å­ $f/1000$,
+其中 $f$ 是 ^|\mag| å‚æ•°\ctsref\mag 的值。
+由于 |\mag| 的默认值为 $1000$,在一般情形下文档是照常排版的。
+若以åŽéœ€è¦ç¼©å°æ–‡æ¡£ï¼Œå¢žåŠ æ–‡æ¡£çš„放大率通常就比较有用。
+
+%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:
+你也å¯ä»¥ç¼©æ”¾ä¸€ä¸ª\refterm{字体},
+以得到比它的“^{设计大å°}â€æ›´å°æˆ–更大的字体。
+对æ¯ä¸ªä½¿ç”¨çš„缩放字体,你需è¦æ供它的^{字形文件}给设备驱动程åº%
+\seeconcept{字体}——
+除éžè¯¥å­—体已ç»å†…嵌在打å°æœºä¸­ï¼Œè€Œè®¾å¤‡é©±åŠ¨ç¨‹åºä¹ŸçŸ¥é“它。
+在用 |\font| 命令\ctsref{\font}定义一个字体时,
+ä½ å¯ä»¥ç”¨å•è¯â€˜|scaled|’指定放大率。比如:
+
+%\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$.
+\csdisplay
+\font\largerbold = cmbx10 scaled 2000
+|
+å°† `|\largerbold|' 定义为两å€å¤§å°çš„ |cmbx10| 字体%
+(计算机现代粗体扩展的$10$点字体),
+它的å„个字符形状也统一地放大了两å€ã€‚
+
+%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
+%|
+为方便起è§ï¼Œå¾ˆå¤šè®¡ç®—机中心æ供了按$1.2$比例放大的字体,
+这些字体对应的放大率为 $1200$,$1440$,等等。
+在 \TeX\ 中这些放大率有特别的å称:
+^^|\magstep|
+`|\magstep1|' 表示 $1200$,
+`|\magstep2|' 表示 $1440$,ä¾æ­¤ç±»æŽ¨ç›´åˆ° `|\magstep5|'。
+特殊值 `^|\magstephalf|' 对应$\sqrt{1.2}$å€çš„放大率,
+它看上去ä½äºŽ`|\magstep0|'(ä¸æ”¾å¤§ï¼‰å’Œ
+`|\magstep1|' 的正中间。例如:
+
+\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.
+若想指定一个最终文档中的\refterm{尺寸},让它ä¸å—放大率影å“,
+ä½ å¯ä»¥åœ¨å•ä½å‰é¢åŠ ä¸Š `^|true|'。
+例如,`|\kern 8 true pt|' å°†ç”Ÿæˆ $8$ 点大å°çš„紧排,ä¸ç®¡æ”¾å¤§çŽ‡ä¸ºå¤šå°‘。
+
+\endconcept
+
+%\concept margins
+\concept è¾¹è·
+
+%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.
+页é¢çš„\refterm{è¾¹è·}(margin)确定了一个矩形边框,
+该边框通常包å«é¡µé¢çš„å°åˆ·å†…容。
+你也å¯ä»¥è®© \TeX\ 在这个边框之外å°åˆ·å†…容,
+但你必须用æŸç§æ˜Žç¡®æ–¹æ³•å°†å†…容移动到那里。
+\TeX\ 将页眉和页脚放在边框外é¢ã€‚
+
+%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|.
+这个矩形边框通过它的左上角ä½ç½®ï¼Œå®½åº¦ï¼Œä»¥åŠæ·±åº¦æ¥å®šä¹‰ã€‚
+左上角ä½ç½®ç”¨ ^|\hoffset| å’Œ ^|\voffset| \ctsref\voffset å‚æ•°æ¥å®šä¹‰ã€‚
+默认将这个ä½ç½®æ”¾åœ¨ç¦»é¡µé¢é¡¶ç«¯å’Œå·¦ç«¯å„一英寸的地方,
+这对应于|\hoffset| å’Œ |\voffset| 都å–值为零。%
+\footnote{这个约定看起æ¥æ¯”较奇怪。
+让 |\hoffset| å’Œ |\voffset| çš„ $(0,0)$ 点对应页é¢çš„左上角,
+而将它们的默认值设置为一英寸,将会更自然一些。}
+边框的宽度用 ^|\hsize| 给出,而深度用 ^|\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.
+这些规定给出的结果是:
+\ulist\compact
+\li 左边è·ç­‰äºŽ |\hoffset|\tplus|1in|。
+\li å³è¾¹è·ç­‰äºŽé¡µé¢å®½åº¦å‡åŽ» |\hoffset|\tplus|1in|\tplus|\hsize|。
+\li 上边è·ç­‰äºŽ |\voffset|\tplus|1in|。
+\li 下边è·ç­‰äºŽé¡µé¢é•¿åº¦å‡åŽ» |\voff!-set|\tplus|1in|\tplus|\vsize|。
+\endulist
+从这些信æ¯ä¸­ä½ å¯ä»¥çŸ¥é“,è¦æ”¹å˜é¡µé¢è¾¹è·åº”该修改哪些å‚数。
+
+%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
+对 |\hoffset|,|\voffset| 或者 |\vsize| 的修改在 \TeX\ 开始新页é¢æ—¶æ‰ç”Ÿæ•ˆã€‚
+也就是说,如果你在页é¢ä¸­é—´æ”¹å˜å®ƒä»¬ï¼Œè¿™äº›æ”¹åŠ¨å°†åªå½±å“\emph{åŽé¢çš„}页é¢ã€‚
+然而,对 |\hsize| 的修改å´ä¼šç«‹å³ç”Ÿæ•ˆã€‚
+\endconcept
+
+
+%\conceptindex{marks}
+%\concept mark
+\concept 标记
+
+%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}
+\defterm{标记}(mark)是å¯ä»¥æ’入水平ã€ç«–直或者数学列表中,
+并在输出例行程åºä¸­è¿˜åŽŸçš„项目。
+标记å¯ç”¨äºŽè®°å½•å³å°†å‡ºçŽ°åœ¨é¡µçœ‰ä¸­çš„内容等。
+æ¯ä¸ªæ ‡è®°å¸¦æœ‰ä¸€åˆ—è®°å·â€”—å³â€œ^{标记文本}â€ã€‚
+^|\mark| 命令\ctsref{\mark}以这样的记å·åˆ—作为å‚é‡ï¼Œ
+并将包å«è¿™ä¸ªè®°å·åˆ—(在展开之åŽï¼‰çš„项目添加到 \TeX\ 当å‰æž„造的列表中。
+^|\topmark|,^|\firstmark| 和 ^|\botmark| 命令 \ctsref{\topmark}
+用于å–回页é¢ä¸Šçš„å„ç§æ ‡è®°ã€‚
+这些命令ç»å¸¸åœ¨é¡µçœ‰å’Œé¡µè„šä¸­ç”¨åˆ°ã€‚
+^^{页脚//用于页脚的标记}
+^^{页眉//用于页眉的标记}
+
+%\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.
+\margin{This example of {\tt\\mark} replaces the previous explanatory
+paragraph.}
+这里有个简化的例å­ã€‚å‡è®¾ä½ å®šä¹‰äº†èŠ‚标题å®å¦‚下:
+\csdisplay
+\def\section#1{\medskip{\bf#1}\smallskip\mark{#1}}
+% #1 is the name of the section
+|
+^^|\mark|
+调用这个å®å°†ç”Ÿæˆç²—体的节标题,并将标题å记录为一个标记。
+现在你å¯ä»¥å¯¹æ¯ä¸ªæ‰“å°é¡µå®šä¹‰é¡µçœ‰å¦‚下:
+\csdisplay
+\headline = {\ifodd\pageno \hfil\botmark\quad\folio
+ \else \folio\quad\firstmark\hfil \fi}
+|
+这样,æ¯ä¸ªå¶æ•°é¡µï¼ˆå·¦æ‰‹é¡µï¼‰é¡µçœ‰æ˜¯é¡µç åŠ ä¸Šè¯¥é¡µç¬¬ä¸€ä¸ªæ ‡é¢˜å,
+而æ¯ä¸ªå¥‡æ•°é¡µï¼ˆå³æ‰‹é¡µï¼‰é¡µçœ‰æ˜¯è¯¥é¡µæœ€åŽä¸€ä¸ªæ ‡é¢˜å加上页ç ã€‚
+特殊情形,比如该页没有节标题,
+通常也会按照 ^|\firstmark| 和 ^|\botmark| 的规定正常显示。
+
+%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}.
+在用 |\vsplit| 命令\ctsref{\vsplit}分割页é¢æ—¶ï¼Œ
+用 |\splitfirstmark| 和 ^|\splitbotmark| 命令\ctsref{\splitfirstmark}%
+å°±å¯ä»¥å–得分割的这部分中的第一个和最åŽä¸€ä¸ªæ ‡è®°çš„标记文本。
+
+%See \knuth{pages~258--260} for a more precise explanation of how
+%to create and retrieve marks.
+%\endconcept
+在\knuth{第~258--260~页}中,对如何生æˆå’Œå–回标记作了更准确的解释。
+\endconcept
+
+
+%\concept math mode
+\concept 数学模å¼
+
+%{\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}
+\defterm{数学模å¼}(math mode)是 \TeX\ 构造数学公å¼æ—¶æ‰€åœ¨çš„\refterm{模å¼}。
+\TeX\ 有两ç§æ•°å­¦æ¨¡å¼ï¼š
+^{文内数学模å¼}用于构造放在文本行中的公å¼ï¼Œ
+而^{陈列数学模å¼}用于构造å•ç‹¬ä¸€è¡Œæ˜¾ç¤ºçš„å…¬å¼ã€‚
+括在 |$| 里é¢çš„å…¬å¼è¡¨ç¤ºä¸€ä¸ªæ–‡å†…数学公å¼ï¼Œ
+而括在 |$$| 里é¢çš„å…¬å¼è¡¨ç¤ºä¸€ä¸ªé™ˆåˆ—数学公å¼ã€‚
+%\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.
+这两ç§æ•°å­¦æ¨¡å¼æœ‰ä¸ªé‡è¦ç‰¹æ€§ï¼Œå³\emph{其中的输入空格都被忽略}。
+\knuth{第~290--293~页}详细介ç»äº†åœ¨æ•°å­¦æ¨¡å¼ä¸­ \TeX\ 如何处ç†å„ç§ä¸åŒå‘½ä»¤ã€‚
+
+\endconcept
+
+
+%\conceptindex{mathcodes}
+%\concept mathcode
+\conceptindex{æ•°å­¦ç }
+\concept æ•°å­¦ç 
+
+%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.
+\defterm{æ•°å­¦ç }(mathcode)是一个数,\TeX\ 把这个数用æ¥è¯†åˆ«å’Œæ述一个数学字符,
+^^{数学字符//用数学ç æè¿°}
+å³ä¸€ä¸ªåœ¨æ•°å­¦å…¬å¼ä¸­æœ‰ç‰¹åˆ«ä½œç”¨çš„字符。
+æ•°å­¦ç è¡¨è¾¾äº†ä¸€ä¸ªå­—符三个方é¢çš„ä¿¡æ¯ï¼š
+它的字符ä½ç½®ï¼Œå®ƒæ‰€åœ¨çš„字体\refterm{æ—},以åŠå®ƒæ‰€å±žçš„类。
+$256$ 个å¯èƒ½çš„输入字符中æ¯ä¸ªå­—符都有一个数学ç ï¼Œ
+它们由 \TeX\ 程åºå®šä¹‰ï¼Œä½†ä¹Ÿèƒ½è¢«ä¿®æ”¹ã€‚
+
+%^^{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.
+^^{æ—//作为数学ç çš„一部分}
+\TeX\ 有å六个字体æ—,它们用$0$ 到 $15$ ç¼–å·ã€‚
+æ¯ä¸ªå­—体æ—包å«ä¸‰ä¸ªå­—体:一个用于\refterm{文本尺寸},
+一个用于\refterm{æ ‡å·å°ºå¯¸},å¦ä¸€ä¸ªç”¨äºŽ\refterm{å°æ ‡å·å°ºå¯¸}。
+\TeX\ æ ¹æ®ä¸Šä¸‹æ–‡é€‰æ‹©ç‰¹å®šå­—符的尺寸,从而选择它的字体。
+一个字符的类指定了它在公å¼ä¸­æ‰®æ¼”的角色(è§\knuth{第~154~页}。
+例如,等å·â€˜|=|’属于第$3$类(关系符å·ï¼‰ã€‚
+\TeX\ æ ¹æ®å­—符所属的类确定数学公å¼å„部分的间è·å¤§å°ã€‚
+
+%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:
+è¦å…¨é¢ç†è§£æ•°å­¦ç ï¼Œæœ€å¥½æ˜¯çœ‹ \TeX\ 如何使用它们。
+因此我们将说明,对数学公å¼ä¸­\refterm{类别ç }为 11 或 12 的字符记å·$t$,
+\TeX\ 如何处ç†å®ƒï¼š
+
+%\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
+\olist\compact
+\li 它查找这个字符的数学ç ã€‚
+\li 它从数学ç ç¡®å®šå­—体æ—$f$。
+\li 它从上下文确定字符尺寸$s$。
+\li 它选择第$f$æ—的尺寸为$s$的字体$F$.
+\li 它从数学ç ç¡®å®šå­—符编å·$n$。
+\li 它从字体$F$çš„ä½ç½®$n$选出字符$c$作为è¦æŽ’版的字符。
+\li 它根æ®$t$所属的类和上下文调整$c$周围的间è·ã€‚
+\li 它排版字符$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|.
+在(3)å’Œ(7)中的上下文相关性æ„味ç€ï¼Œ
+\TeX\ 在排版数学字符时,è¦å…ˆçœ‹å®Œè¯¥å­—符所在的整个公å¼ã€‚
+比如对于公å¼â€˜|$a\over b$|’,\TeX\ 无法确定‘|a|’的尺寸,直到它看到|\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
+{\tighten
+字符的数学ç ç”±å…¬å¼$4096c + 256f + n$ æ¥è¡¨ç¤ºï¼Œ
+其中 $c$ 是字符所属的类,$f$ 是它所在的字体\refterm{æ—},
+而 $n$ 是它在该字体æ—中的\refterm{\ascii}ç¼–ç ã€‚
+通过对一个输入字符的 ^|\mathcode| 表格项赋值\ctsref{\mathcode},
+ä½ å¯ä»¥æ”¹å˜æ•°å­¦æ¨¡å¼ä¸­ \TeX\ 对这个字符的解释。
+åªæœ‰\refterm{类别ç }为$11$(字æ¯ï¼‰æˆ–者$12$(其它)的字符,
+\TeX\ æ‰ä¼šæŸ¥çœ‹å®ƒçš„ |\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
+^^{æ—//å¯å˜æ—}
+åªè¦å°†ä¸€ä¸ªæ•°å­¦å­—符分到第$7$类,你å¯ä»¥å°†å®ƒçš„æ—定义为“å¯å˜çš„â€ã€‚
+当 \TeX\ 在数学公å¼ä¸­é‡åˆ°è¿™ç§å­—符时,
+它就将该字符的字体æ—å–为 |\fam| å‚æ•°\ctsref{\fam}的当å‰å€¼ã€‚
+å¯å˜çš„字体æ—使得你å¯ä»¥æŒ‡å®šæ•°å­¦å…¬å¼ä¸­æ™®é€šæ–‡æœ¬çš„字体。
+举个例å­ï¼Œå¦‚果罗马字符是在第$0$æ—,
+赋值 |\fam = 0| 将让数学公å¼çš„普通文本以罗马字体显示,
+而ä¸æ˜¯ç”¨å…¶ä»–类似数学æ„大利体的字体显示。
+如果 |\fam| 的值ä¸åœ¨ $0$ 到 $15$ 的范围中,
+\TeX\ å–它的值为 $0$,从而让第 $0$ 类和第 $7$ 类等价。
+æ¯æ¬¡è¿›å…¥æ•°å­¦æ¨¡å¼æ—¶ \TeX\ 都设定 |\fam| 为 $-1$。
+\endconcept
+
+
+%\conceptindex{mathematical units}
+%\concept{mathematical unit}
+\conceptindex{æ•°å­¦å•ä½}
+\concept{æ•°å­¦å•ä½}
+
+%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
+\defterm{æ•°å­¦å•ä½}(mathematical unit),记为‘|mu|’,
+是一个用于设定数学公å¼ä¸­çš„\refterm{粘连}大å°çš„è·ç¦»å•ä½ã€‚
+è§\conceptcit{数学粘连}。
+\endconcept
+
+
+%\conceptindex{modes}
+%\concept mode
+\conceptindex{模å¼}
+\concept 模å¼
+
+%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.
+\TeX\ 在胃中处ç†ä½ çš„输入时\seeconcept{\anatomy},
+它总是处于六ç§\defterm{模å¼}(mode)的其中一ç§:
+\ulist\compact
+\li ^{普通水平模å¼}(组装段è½ï¼‰
+\li ^{å—é™æ°´å¹³æ¨¡å¼}(组装\refterm{水平盒å­})
+\li ^{普通竖直模å¼}(组装页é¢ï¼‰
+\li ^{内部竖直模å¼}(组装\refterm{ç«–ç›´ç›’å­})
+\li ^{文内数学模å¼}(组装在文本中显示的公å¼ï¼‰
+\li ^{陈列数学模å¼}(组装å•ç‹¬ä¸€è¡Œæ˜¾ç¤ºçš„å…¬å¼ï¼‰
+^^{水平模å¼}^^{竖直模å¼}^^{数学模å¼}
+\endulist
+模å¼æ述了 \TeX\ 正在组装的实体的类型。
+
+%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.
+由于你å¯ä»¥å°†æŸç§å®žä½“嵌入å¦ä¸€ç§å®žä½“中,比如将一个竖直盒å­æ”¾å…¥æ•°å­¦å…¬å¼ä¸­ï¼Œ
+\TeX\ 记录的ä¸åªæ˜¯ä¸€ä¸ªæ¨¡å¼ï¼Œè€Œæ˜¯ä¸€æ•´åˆ—模å¼ï¼ˆå³è®¡ç®—机科学中所说的“栈â€ï¼‰ã€‚
+å‡è®¾ \TeX\ 在模å¼$M$中,然åŽé‡åˆ°æŸäº›ä¸œè¥¿è€Œè¿›å…¥æ–°æ¨¡å¼$M'$。
+当它完æˆåœ¨æ¨¡å¼$M'$的工作时,它将继续在模å¼$M$中的工作。
+
+\endconcept
+
+
+%\concept muglue
+\concept 数学粘连
+
+%\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|.
+\defterm{数学粘连}(muglue)是一ç§ä»…用于数学公å¼ä¸­çš„\refterm{粘连},
+它的度é‡å•ä½æ˜¯ ^|mu|(\refterm{æ•°å­¦å•ä½})。
+^^{æ•°å­¦å•ä½}^^{粘连//数学粘连}
+1 |mu| 的大å°ä¸Ž \frac1/{18} em 相等,
+而 1 em 的大å°å–自第$2$\refterm{æ—}数学字体。
+\TeX\ æ ¹æ®ä¸Šä¸‹æ–‡è‡ªåŠ¨è°ƒæ•´ |mu| 的大å°ã€‚
+比如åŒæ ·æ˜¯ |2mu| 大å°çš„粘连,在下标中一般就比在普通文本中å°ä¸€äº›ã€‚
+è¦ç”Ÿæˆæ•°å­¦ç²˜è¿žï¼Œä½ å¿…须使用 ^|\mskip| 命令。
+例如,‘|\mskip 4mu plus 5mu|’生æˆäº†ä¸€ä¸ªè‡ªç„¶å¤§å°ä¸º |4mu|,
+\refterm{伸长é‡}为|5mu| 的数学粘连。
+\endconcept
+
+
+\bookmark{2}{以N开头}
+%\conceptindex{numbers}
+%\concept number
+\conceptindex{æ•°}
+\concept æ•°
+
+%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 `|-|'.
+在 \TeX\ 中,\defterm{数}(number)是指正整数或负整数。%
+%\footnote{译注:在本书的翻译中,ç»å¸¸ç›´æŽ¥å°†â€œnumberâ€ç§°ä¸ºâ€œæ•´æ•°â€ã€‚}
+\TeX\ 中的数å¯ä»¥ç”¨å¦‚下四ç§ä¸åŒæ–¹å¼è¡¨ç¤ºï¼š
+\olist\compact
+\li 用通常的å进制整数表示,比如 |52|
+\li 用八进制数表示,比如 |'14| ^^{八进制数}
+\li 用å六进制数表示,比如 |"FF0| ^^{å六进制数}
+\li 用字符的\refterm{\ascii}ç¼–ç è¡¨ç¤ºï¼Œæ¯”如 |`)| 或 |`\)|
+\endolist
+\noindent
+上述任何一ç§å½¢å¼éƒ½å¯ä»¥åœ¨å‰é¢åŠ ä¸Š `|+|' 或者 `|-|' 。
+
+%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}.
+八进制数åªèƒ½åŒ…å«æ•°å­— |0|--|7|。
+^^{八进制数}
+而å六进制数å¯ä»¥åŒ…å«æ•°å­— |0|--|9| 以åŠå­—æ¯ |A|--|F|,
+它们分别表示从 $0$ 到 $15$ 的数值。
+^^{å六进制数}
+然而,你ä¸èƒ½ç”¨å°å†™å­—æ¯æ¥è¡¨ç¤ºå六进制数。
+在\knuth{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.}
+å进制ã€å…«è¿›åˆ¶æˆ–å六进制数都在第一个ä¸èƒ½ä½œä¸ºè¯¥æ•°ä¸€éƒ¨åˆ†çš„字符处结æŸã€‚
+因此,任何字æ¯éƒ½ä¼šç»“æŸä¸€ä¸ªå进制数,
+而`|A|'å’Œ`|F|'之间的字æ¯å´ä¸èƒ½ç»“æŸä¸€ä¸ªå六进制数。
+你也å¯ä»¥ç”¨ä¸€ä¸ªæˆ–多个空格结æŸä¸€ä¸ªæ•°ï¼Œ
+\TeX\ 通常将忽略这些空格。\footnote{%
+在定义一个以数结尾的å®æ—¶ï¼Œ
+你应该始终在该数åŽé¢åŠ ä¸Šç©ºæ ¼ï¼›
+å¦åˆ™åˆ°åŽé¢ \TeX\ å¯èƒ½å°†è¯¥æ•°å’Œå…¶ä»–字符结åˆåœ¨ä¸€èµ·ã€‚}
+
+%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.
+上述的第四ç§å½¢å¼ç”¨å­—符的\minref{\ascii}ç¼–ç è¡¨ç¤ºä¸€ä¸ªæ•°ã€‚
+^^{字符//字符的 \ascii\ ç }
+\TeX\ åŒæ ·å¿½ç•¥æ­¤å½¢å¼çš„æ•°åŽé¢çš„空格。
+一个数按这ç§å½¢å¼å¯ä»¥å†™æˆ |`|$c$ 或者 |`\|$c$。
+第二ç§å†™æ³•è™½ç„¶é•¿ä¸€ç‚¹ï¼Œ
+但优点在于å¯ä»¥ç”¨äºŽ\emph{任何}字符,
+甚至是 `|\|',`|%|' 或者 `|^^M|'。
+ä¸è¿‡å®ƒç¡®å®žä¹Ÿæœ‰ä¸€ä¸ªæŠ€æœ¯ä¸Šçš„缺点:
+比如当 \TeX\ 展开 |\edef| 或 |\write| 命令的记å·åºåˆ—时,
+^^|\edef//在其中展开 {\tt\\'\it c}|
+^^|\write//在其中展开 {\tt\\'\it c}|
+出现在数中间的能展开的`|\|$c$'å°†åŒæ ·è¢«å±•å¼€ï¼›
+而这多åŠä¸æ˜¯ä½ æƒ³è¦çš„。
+
+%The following are all valid representations of the decimal number
+%$78$:
+%\csdisplay
+%78 +078 "4E '116 `N `\N
+%|
+下é¢æ˜¯å进制数$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.
+ä½ ä¸èƒ½åœ¨æ–‡æœ¬ä¸­å•ç‹¬ä½¿ç”¨ä¸€ä¸ªæ•°ï¼Œå› ä¸ºå®ƒä¸æ˜¯å‘½ä»¤ã€‚
+但是,将它放在 ^|\number| 命令(\xref\number )之åŽï¼Œ
+ä½ å°±å¯ä»¥åœ¨æ–‡æœ¬ä¸­æ’入这个数的å进制形å¼ï¼›
+或者将它放在 ^|\romannumeral| 命令之åŽï¼Œä»¥å¾—到它的罗马数字形å¼ã€‚
+
+%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.
+你也å¯ä»¥ç”¨^{å°æ•°},å³å¸¦æœ‰å°æ•°éƒ¨åˆ†çš„数,æ¥æŒ‡å®šä¸€ä¸ªå°ºå¯¸\seeconcept{尺寸}。
+å°æ•°åŒ…å«ä¸€ä¸ªå¯ä»¥åœ¨æœ€å‰é¢çš„^{å°æ•°ç‚¹}。
+å°æ•°ç‚¹çš„圆点也å¯ä»¥ç”¨é€—å·ä»£æ›¿ã€‚å°æ•°ä¹‹å‰ä¹Ÿå¯ä»¥åŠ ä¸Šæ­£å·æˆ–è´Ÿå·ã€‚
+因此 `|.5in|',`|-3.22pt|' 和 `|+1,5\baselineskip|' 都是有效的尺寸。
+但是,除了作为尺寸的“因å­â€ï¼Œå³ä¹˜æ•°ï¼Œ
+ä½ ä¸èƒ½åœ¨\emph{其他}地方使用å°æ•°ã€‚
+
+\endconcept
+
+
+\bookmark{2}{以O开头}
+%\concept{ordinary mode}
+\concept{普通模å¼}
+
+%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
+\defterm{普通模å¼}(ordinary mode)是 \TeX\ 分段为行或组行为页时所在的\refterm{模å¼}。
+è§\conceptcit{水平模å¼},\conceptcit{竖直模å¼}。
+\endconcept
+
+
+%\concept outer
+\concept 外部的
+
+%\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.
+\bix^^{å®//外部å®}
+\defterm{外部的}(outer)å®æ˜¯åœ¨æŸäº› \TeX\ 高速处ç†è®°å·çš„环境中无法使用的å®ã€‚
+将一个命令定义为外部的,目的是使 \TeX\ 能够尽早æ•èŽ·åˆ°é”™è¯¯ã€‚
+在定义å®æ—¶ï¼Œä½ å¯ä»¥ç”¨ ^|\outer| 命令\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.
+在下列这些环境中,你ä¸å¯ä»¥ä½¿ç”¨å¤–部å®ï¼š
+\ulist\compact
+\li 在命令的å‚é‡ä¸­
+\li 在å®å®šä¹‰çš„å‚数文本或替æ¢æ–‡æœ¬ä¸­
+\li 在阵列的导言中
+\li 在æ¡ä»¶æµ‹è¯•çš„跳过部分中
+\endulist
+\noindent
+外部环境是你å¯ä»¥ä½¿ç”¨å¤–部å®çš„环境,å³åˆšæ‰åˆ—出的环境除外的环境。
+
+%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}
+例如,下é¢çš„输入就是外部å®çš„ç¦æ­¢ç”¨æ³•ï¼š
+\csdisplay
+\leftline{\proclaim Assertion 2. That which is not inner
+ is outer.}
+|
+|\proclaim| å®ï¼ˆ\xref{\@proclaim})在 \plainTeX\ 中被定义为外部的,
+但这里å´å°†å®ƒæ”¾åœ¨ |\leftline| çš„å®å‚é‡ä¸­ã€‚
+\eix^^{å®//外部å®}
+
+\endconcept
+
+
+%\concept {output routine}
+\concept {输出例行程åº}
+
+%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.
+\TeX\ 收集足够填满页é¢çš„ç´ æåŽï¼Œå®ƒé€‰æ‹©åˆ†é¡µç‚¹å¹¶å°†åˆ†é¡µç‚¹ä¹‹å‰çš„ç´ æ放在 |\box255| 中。
+ç„¶åŽ \TeX\ 调用\defterm{输出例行程åº}(output routine)%
+以加工素æ并最终将它é€åˆ° \dvifile 中。
+^^{\dvifile//æ¥è‡ªè¾“出例行程åºçš„ç´ æ}
+输出例行程åºå¯ä»¥æ‰§è¡Œè¿›ä¸€æ­¥çš„加工,比如æ’入页眉,页脚和脚注。
+\refterm{\PlainTeX:\plainTeX} æ供了一个默认的输出例行程åºï¼Œ
+它在æ¯ä¸ªé¡µé¢åº•éƒ¨æ’入居中的页ç ã€‚
+通过æä¾›ä¸åŒçš„输出例行程åºï¼Œä½ å¯ä»¥è¾¾åˆ°è¯¸å¦‚åŒæ è¾“出的效果。
+ä½ å¯ä»¥è®¤ä¸ºè¾“出例行程åºåªæœ‰ä¸€ä¸ªèŒè´£ï¼š
+以æŸç§æ–¹å¼å¤„ç†æŽ‰æ”¾åœ¨ |\box255| 中的素æ。
+
+%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.
+当å‰çš„输出例行程åºç”± ^|\output|\ctsref{\output}的值定义,它是一个\refterm{è®°å·}列。
+当 \TeX\ 准备好生æˆé¡µé¢æ—¶ï¼Œå®ƒå°±å±•å¼€è¯¥è®°å·åˆ—。
+
+%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.
+实际上ä¸ç”¨ä¿®æ”¹ \plainTeX\ 的输出例行程åºï¼Œä½ å°±èƒ½å¯¹å®ƒçš„行为åšå‡ºä¸€äº›ç®€å•æ”¹åŠ¨ã€‚
+例如,通过赋予一个记å·åˆ—ç»™ |\headline| 或 |\footline|\ctsref{\footline},%
+ä½ å°±å¯ä»¥è®© \TeX\ 生æˆå’Œé€šå¸¸æƒ…å½¢ä¸åŒçš„页眉或页脚。
+
+%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
+输出例行程åºä¹Ÿè´Ÿè´£æ”¶é›†ä»»ä½•\refterm{æ’入项}ï¼›
+它将这些æ’入项和任何“装饰â€ï¼ˆæ¯”如页眉页脚)åˆå¹¶åˆ°é¡µé¢ä¸»è¦å†…容中,
+并将所有这些素æ包装在一个盒å­é‡Œï¼›
+最åŽå®ƒç”¨ ^|\shipout| 命令\ctsref{\shipout}将这个盒å­é€åˆ° \dvifile 中。
+^^{\dvifile//æ¥è‡ªè¾“出例行程åºçš„ç´ æ}
+虽然输出例行程åºå¤§å¤šæ˜¯è¿™æ ·è¿è¡Œçš„,但有特定用途的输出例行程åºä¼šæœ‰ä¸åŒè¡¨çŽ°ã€‚
+\endconcept
+
+
+%\conceptindex{output streams}
+%\concept {output stream}
+\concept {输出æµ}
+
+%\margin{This concept was out of order.}
+%See \conceptcit{file}.
+%\endconcept
+\margin{This concept was out of order.}
+è§\conceptcit{文件}。
+\endconcept
+
+
+\bookmark{2}{以P开头}
+%\conceptindex{pages}
+%\concept page
+\conceptindex{页é¢}
+\concept 页é¢
+
+%\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}''.
+\TeX\ æ¯æ¬¡ä¸€é¡µåœ°å°†ä½ çš„文档组装为\defterm{页é¢}(page),
+并将它们é€å¾€è¾“入例行程åºã€‚
+在处ç†æ–‡æ¡£æ—¶ï¼Œ\TeX\ ç»´æŒç€ä¸€ä¸ªç”±æ–‡æœ¬è¡Œå’Œå…¶ä»–è¦æ”¾å…¥é¡µé¢çš„项目组æˆçš„列表。%
+(这些文本行实际上是水平盒å­ã€‚)
+这个列表称为“^{主竖直列}â€ã€‚
+\TeX\ 周期性地执行称为“è¿è¡Œ^{页é¢æž„建器}â€çš„æ“作。
+在è¿è¡Œé¡µé¢æž„建器时添加到主竖直列的项目称为“^{备选内容}â€ã€‚
+
+%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.
+页é¢æž„建器首先检查主竖直列,看是å¦æœ‰å¿…è¦è¾“出页é¢ï¼Œ
+è¿™å¯èƒ½ç”±äºŽä¸»ç«–直列上的项目ä¸èƒ½å¡«æ»¡é¡µé¢ï¼Œ
+或者有类似 |\eject| \ctsref\eject 的显å¼é¡¹ç›®è®© \TeX\ 结æŸé¡µé¢ã€‚
+如果没必è¦è¾“出页é¢ï¼Œé¡µé¢æž„建器这回的工作就完æˆäº†ã€‚
+
+%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.
+å¦åˆ™ï¼Œé¡µé¢æž„建器分æžä¸»ç«–直列以找到最佳的å¯èƒ½åˆ†é¡µç‚¹ã€‚
+它在å„ç§ä¸ç¾Žè§‚的分页点
+——å³å¯èƒ½å¯¼è‡´å•ç‹¬ä¸€è¡Œå‡ºçŽ°åœ¨é¡µé¢é¡¶éƒ¨æˆ–底部的分页点,
+或者在陈列公å¼å‰çš„分页点,诸如此类
+——添加惩罚项。
+然åŽå®ƒé€‰æ‹©ä»£ä»·æœ€å°çš„分页点,
+其中分页代价由分页点的惩罚值以åŠæ‰€å¾—页é¢çš„劣度加起æ¥å¾—到
+(代价计算公å¼å¯ä»¥è§\knuth{第~111~页}。
+如果找到多个代价相åŒçš„分页点,它选择最åŽä¸€ä¸ªã€‚
+
+%{\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
+一旦页é¢æž„建器选定了分页点,它就将列表中ä½äºŽåˆ†é¡µç‚¹ä¹‹å‰çš„项目放入 ^|\box255|,
+并把剩余项目留给下个页é¢ã€‚接ç€å®ƒè°ƒç”¨è¾“出例行程åºã€‚
+|\box255| 充当了邮箱的角色,页é¢æž„建器为å‘é€è€…,输出例行程åºä¸ºæŽ¥æ”¶è€…。
+输出例行程åºå¦‚å¸¸å¤„ç† |\box255|,添加其他项目比如æ’入项和页眉页脚到该页é¢ï¼Œ
+然åŽç”¨ |\shipout| 命令将页é¢è¾“出到 \dvifile 。%
+(有些输出例行程åºå¯èƒ½æœ‰ä¸åŒçš„行为。)
+^^{\dvifile//æ¥è‡ªè¾“出例行程åºçš„ç´ æ}%
+从 \TeX\ 的角度看,输出例行程åºè¾“出或ä¸è¾“出页é¢éƒ½æ— æ‰€è°“ï¼›
+输出例行程åºçš„惟一èŒè´£æ˜¯ä»¥æŸç§æ–¹å¼å¤„ç†|\box255|。
+\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}
+{\tighten
+认识到最佳分页点未必是最åŽçš„分页点是éžå¸¸é‡è¦çš„。
+惩罚项和其他考虑å¯èƒ½å¯¼è‡´åˆ†é¡µç‚¹å‡ºçŽ°åœ¨å‰é¢ã€‚
+此外,\TeX\ 是批é‡åœ°è€Œä¸æ˜¯é€ä¸ªåœ°æ·»åŠ é¡¹ç›®åˆ°ä¸»ç«–直列的。
+段è½çš„å„行是批é‡çš„例å­ã€‚
+由于这些原因页é¢æž„建器分页时通常会剩余一些项目。
+这些剩余项目组æˆäº†ä¸‹ä¸€é¡µçš„主竖直列的开始部分
+(å¯èƒ½åœ¨æ‰¹é‡çš„中间)。
+由于项目å¯èƒ½è¢«ä»Žä¸€ä¸ªé¡µé¢ç§»åŠ¨åˆ°å¦ä¸€ä¸ªé¡µé¢ï¼Œ
+你无法å‡å®š \TeX\ 处ç†è¾“入时的当å‰é¡µç å‡†ç¡®è¡¨ç¤ºäº†å¯¹åº”输出中显示的页ç ã€‚
+在 \knuth{第~110--114~页}中有 \TeX\ 的分页规则的完整说明。
+\par}
+
+\endconcept
+
+
+%\conceptindex{page breaks}
+%\concept{page break}
+\conceptindex{分页}
+\concept{分页点}
+
+%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.
+\defterm{分页点}(page break)是文档中 \TeX\
+结æŸä¸€ä¸ªé¡µé¢å¹¶ï¼ˆé™¤éžåœ¨æ–‡æ¡£ç»“尾处)开始新页é¢çš„ä½ç½®ã€‚
+在\conceptcit{页é¢}中介ç»äº† \TeX\ 选择分页点的过程。
+
+%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}.
+ä½ å¯ä»¥ç”¨ä»¥ä¸‹å‡ ç§æ–¹å¼æŽ§åˆ¶ \TeX\ 对分页点的选择:
+\ulist
+\li ä½ å¯ä»¥æ’入惩罚项(\xref{vpenalty})
+^^{惩罚//在竖直列表中}
+到主竖直列的两个项目之间。
+æ­£æƒ©ç½šå€¼é˜»ç¢ \TeX\ 在此处分页,
+而负惩罚值——æ¢è¨€ä¹‹ï¼Œå¥–励值——鼓励 \TeX\ 在此处分页。
+大于或等于 $10000$ 的惩罚值阻止分页,
+而å°äºŽæˆ–等于 $-10000$ 的惩罚值强制分页。
+ä½ å¯ä»¥ç”¨ |\break| å’Œ |\nobreak| \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 ä½ å¯ä»¥é€šè¿‡æ”¹å˜ \TeX\ 的分页\refterm{å‚æ•°}的值æ¥è°ƒæ•´åˆ†é¡µæƒ©ç½šå€¼ã€‚
+
+%\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
+\li ä½ å¯ä»¥å°†ä¸»ç«–直列的一系列段è½æˆ–者其他项目放入\refterm{ç«–ç›´ç›’å­},
+从而阻止 \TeX\ 在它们之间的任何ä½ç½®åˆ†é¡µã€‚
+\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.
+一旦 \TeX\ 选定了分页点,
+它就将该主竖直列中ä½äºŽåˆ†é¡µç‚¹ä¹‹å‰çš„内容放入 |\box255|。
+接ç€å®ƒè°ƒç”¨å½“å‰çš„\refterm{输出例行程åº}å¤„ç† |\box255|,
+最终输出页é¢å†…容到 \dvifile 。
+^^{\dvifile//æ¥è‡ªè¾“出例行程åºçš„ç´ æ}
+输出例行程åºè¿˜å¾—å¤„ç† \TeX\ 加工页é¢æ—¶ç§¯ç´¯çš„\refterm{æ’入项},比如脚注。
+
+%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.
+æœ€å¥½èƒ½çŸ¥é“ \TeX\ 在什么地方å¯ä»¥åˆ†é¡µï¼š
+\ulist
+\li 在粘连处,åªè¦åœ¨ç²˜è¿žä¹‹å‰çš„项目是一个盒å­ï¼Œå°çŽ©æ„,标记,或者æ’入项。
+当 \TeX\ 在粘连处分页时,它把分页点放在该粘连间è·çš„顶部,并忽略该粘连的其他值。
+\li 在紧排处,åªè¦è¯¥ç´§æŽ’之åŽæ˜¯ä¸€ä¸ªç²˜è¿žã€‚
+\li 在惩罚处,这å¯èƒ½å‡ºçŽ°åœ¨æ®µè½çš„两行之间。
+\endulist
+\TeX\ 分页时将丢弃分页点之åŽçš„ä»»æ„多个粘连,紧排和惩罚项。
+
+\endconcept
+
+
+%\concept page builder
+\concept 页é¢æž„建器
+
+%See \conceptcit{page}.
+%\endconcept
+è§\conceptcit{页é¢}。
+\endconcept
+
+
+%\concept {page layout}
+\concept {页é¢å¸ƒå±€}
+
+%\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.
+\bix^^{è¾¹è·}
+\bix^^{页眉}
+\bix^^{页脚}
+在设计文档时,你需è¦å†³å®šå…¶\defterm{页é¢å¸ƒå±€}(page layout):
+页é¢å¤§å°ï¼Œå››ä¸ªæ–¹å‘çš„è¾¹è·ï¼Œé¡µçœ‰å’Œé¡µè„šï¼Œ
+若存在的è¯ï¼Œè¿˜æœ‰æ­£æ–‡å’Œé¡µçœ‰é¡µè„šä¹‹é—´çš„间隔大å°ã€‚
+对上述这些 \TeX\ 都有默认值:
+它设定页é¢å¤§å°ä¸º $8 \frac1/2$英寸乘$11$英寸,四个边è·çº¦ä¸ºä¸€è‹±å¯¸ï¼Œ
+没有页眉,页脚是居中的页ç ã€‚
+
+%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.
+è¾¹è·ç”±å››ä¸ªå‚æ•° ^|\hoffset|,^|\voffset|,^|\hsize| å’Œ ^|\vsize| å…±åŒç¡®å®š
+(在\xrefpg{è¾¹è·}的“边è·â€æ¦‚念中有如何调整它们的指å—)。
+\eix^^{è¾¹è·}
+页眉是在æ¯ä¸ªé¡µé¢é¡¶éƒ¨çš„一行内容,ä½äºŽä¸Šè¾¹è·åŒºåŸŸä¸­ã€‚
+通过将一个\refterm{è®°å·}列表赋值给 ^|\headline| å‚数(\xref{\headline}),
+ä½ å°±å¯ä»¥è®¾å®šé¡µçœ‰ã€‚类似地,
+页脚是在æ¯ä¸ªé¡µé¢åº•éƒ¨çš„一行内容,ä½äºŽä¸‹è¾¹è·åŒºåŸŸä¸­ã€‚
+通过将一个\refterm{è®°å·}列表赋值给 ^|\footline| å‚数(\xref{\footline}),
+ä½ å°±å¯ä»¥è®¾å®šé¡µè„šã€‚
+例如,下é¢çš„输入:
+\csdisplay
+\headline = {Baby's First Document\dotfill Page\folio}
+\footline = {\hfil}
+|
+将给æ¯ä¸ªé¡µé¢ç”Ÿæˆç±»ä¼¼ä¸‹é¢çš„页眉行
+\vdisplay{
+\dimen0 = \hsize
+\advance \dimen0 by -\parindent
+\hbox to \dimen0{Baby's First Document\dotfill Page 19}}
+\noindent
+而页脚行是空白的。
+
+%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
+利用标记,你å¯ä»¥å°†å½“å‰ä¸»é¢˜æˆ–节标题放入页眉或页脚中。
+^^{标记//用于页眉和页脚}
+在\conceptcit{标记}这里将详细解释如何åšåˆ°è¿™äº›ã€‚
+\eix^^{页眉}
+\eix^^{页脚}
+\endconcept
+
+%\conceptindex{paragraphs}
+%\concept paragraph
+\conceptindex{段è½}
+\concept 段è½
+
+%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.
+直观地,\defterm{段è½}(paragraph)就是一系列输入行,
+并用空行或者 ^|\par| 命令\ctsref{\@par},
+或者类似 |\vskip| 的本质上的竖直模å¼å‘½ä»¤ç»“æŸã€‚
+^^|\par//用于结æŸæ®µè½|
+更准确地说,段è½å°±æ˜¯ \TeX\ 在普通水平模å¼ä¸­å¤„ç†çš„一系列命令。
+\TeX\ 收集整个段è½çš„内容åŽï¼Œå°±é€šè¿‡é€‰æ‹©æ–­è¡Œç‚¹\seeconcept{断行点}将它分为多行。
+得到的结果是一系列水平盒å­ï¼Œä»¥åŠå®ƒä»¬ä¹‹é—´çš„粘连,行间惩罚和穿æ’çš„ç«–ç›´ç´ æ。
+其中的æ¯ä¸ªæ°´å¹³ç›’å­å°±æ˜¯ä¸€ä¸ªæ–‡æœ¬è¡Œï¼Œè€Œè¿™äº›ç²˜è¿žå°±æ˜¯è¡Œé—´ç²˜è¿žã€‚
+
+%\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.
+当 \TeX\ 在竖直模å¼ä¸­ç¢°åˆ°æœ¬è´¨ä¸Šä¸ºæ°´å¹³æ¨¡å¼çš„命令,它开始一个新段è½ã€‚
+特别地,在刚结æŸä¸€ä¸ªæ®µè½çš„时候,它ä½äºŽç«–直模å¼ï¼Œ
+因此在空白输入行之åŽçš„水平素æ自然就开始下一个段è½ã€‚
+本质上为水平模å¼çš„命令有好多ç§ï¼Œä½†æœ€å¸¸è§çš„就是普通字符,比如一个字æ¯ã€‚
+
+%\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|.
+\looseness = -1
+^|\indent| å’Œ ^|\noindent| 命令(è§\xrefn{\indent},~\xrefn{\noindent}页)
+也属于本质上为水平模å¼çš„命令,
+它们让 \TeX\ 在段è½å¼€å§‹ç¼©è¿›æˆ–ä¸ç¼©è¿›ã€‚
+其他水平模å¼å‘½ä»¤å‡ºçŽ°åœ¨ç«–直模å¼æ—¶éƒ½ä¼šå¯¼è‡´ \TeX\ éšæ€§æ‰§è¡Œ |\indent|。
+一旦 \TeX\ 开始一个新段è½ï¼Œå®ƒå°±å¤„于普通水平模å¼ä¸­ã€‚
+它首先执行 ^|\everypar| 中的命令,
+然åŽç€æ‰‹æ”¶é›†è¯¥æ®µè½çš„项目,直到它得到段è½ç»“æŸçš„ä¿¡å·ã€‚
+在段è½ç»“尾处,它é‡ç½®æ®µè½å½¢çŠ¶å‚æ•° ^|\parshape|,
+|\hangindent| ^^|\hangindent| 和 ^|\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.
+\TeX\ 一般将一个空行转æ¢ä¸ºä¸€ä¸ª |\par| 命令。
+当它在水平模å¼ç¢°åˆ°ä¸€ä¸ªæœ¬è´¨ä¸Šçš„竖直模å¼å‘½ä»¤æ—¶ï¼Œ
+它åŒæ ·æ’å…¥ |\par| 命令到输入中。
+因此结æŸæ®µè½çš„最终都是一个 |\par| 命令。
+
+%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.
+当 \TeX\ 收到一个 |\par| 命令时,它首先填满 \footnote{%
+准确地说,它执行下列这些命令:
+\csdisplay
+\unskip \penalty10000 \hskip\parfillskip
+|
+并将所得项目添加到当å‰ç«–直列的最åŽé¢ã€‚}
+当å‰æ®µè½ã€‚接ç€å°†è¯¥æ®µè½åˆ†ä¸ºå¤šè¡Œï¼Œ
+并将所得结果添加到所在的竖直列中,
+然åŽæ‰§è¡Œé¡µé¢æž„建器(仅当所在的竖直列就是主竖直列时)。
+如果该段è½æ˜¯ç”¨æœ¬è´¨ä¸Šä¸ºç«–直模å¼çš„命令结æŸçš„,
+\TeX\ 接下æ¥å°†æ‰§è¡Œè¯¥å‘½ä»¤ã€‚
+
+\endconcept
+
+%\conceptindex{parameters}
+%\concept parameter
+\conceptindex{å‚æ•°}
+\concept å‚æ•°
+
+%The term \defterm{parameter} has two different meanings---it can refer
+%either to a \TeX\ parameter or to a macro parameter.
+\defterm{å‚æ•°}(parameter)这个术语有两个ä¸åŒçš„å«ä¹‰
+——它å¯ä»¥è¡¨ç¤º \TeX\ å‚数或者表示å®å‚数。
+
+%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.
+\TeX\ å‚数是一个\refterm{控制åºåˆ—},它是æŸä¸ªå€¼çš„å称。
+å‚数的值å¯ä»¥æ˜¯\refterm{数值},\refterm{长度},
+一定大å°çš„\refterm{粘连}或数学粘连,或者是一个\refterm{è®°å·åˆ—表}.
+例如,^|\parindent| å‚数指定了 \TeX\ 在缩进段è½å¼€å¤´æ‰€è·³è¿‡è·ç¦»çš„大å°ã€‚
+
+%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$.
+ä½ å¯ä»¥å¯¹ \TeX\ å‚数的控制åºåˆ—å–值或赋值。
+如果该控制åºåˆ—出现在需è¦å–值的地方,\TeX\ 将它解释为å–值;
+å¦åˆ™ï¼Œè§£é‡Šä¸º\refterm{赋值}。
+^^{赋值}
+例如:
+\csdisplay
+\hskip\parindent
+|
+生æˆä¸€ä¸ªè‡ªç„¶å¤§å°ä¸º |\parindent| çš„æ°´å¹³\refterm{粘连},而
+\csdisplay
+\parindent = 2pc % (or \parindent 2pc)
+|
+设置 |\parindent| 等于两派å¡çš„长度。而下列赋值:
+\csdisplay
+\parindent = 1.5\parindent
+|
+用两ç§æ–¹å¼ä½¿ç”¨ |\parindent|。其结果是将 |\parindent| 的值乘以 $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}.
+ä½ å¯ä»¥å°† \TeX\ å‚数视为内置的\refterm{寄存器}。
+^^{寄存器//作为å‚æ•°}
+在\knuth{第~272--275~页}中你å¯ä»¥æ‰¾åˆ° \TeX\ å‚数的完整列表。
+
+%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.
+\refterm{å®}å‚数是一个å ä½ç¬¦ï¼Œç”¨äºŽæ’入文本到å®å®šä¹‰ä¸­ã€‚
+在\conceptcit{å®}这里有这类å‚数的更多信æ¯ã€‚
+
+\endconcept
+
+
+%\conceptindex{penalties}
+%\concept penalty
+\conceptindex{惩罚}
+\concept 惩罚
+
+%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}.)
+\defterm{惩罚}是一个你å¯ä»¥æ”¾åœ¨æ°´å¹³ã€ç«–直或数学列表中的项目,
+用于阻ç¢æˆ–鼓励 \TeX\ 在此处断开该列表。
+^^{水平列表//水平列表中的惩罚}
+^^{竖直列表//竖直列表中的惩罚}
+正惩罚值表示一个糟糕断开点,而负惩罚值表示一个良好断开点。
+断开普通水平列生æˆä¸€ä¸ª\refterm{断行点},
+而断开普通竖直列生æˆä¸€ä¸ª\refterm{分页点}。%
+(在é™åˆ¶æ°´å¹³\refterm{模å¼}或内部竖直模å¼çš„惩罚项无效。)
+
+%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
+ä½ å¯ä»¥ç”¨ |\penalty| 命令(è§\xrefn{hpenalty},~\xrefn{vpenalty}\pp )
+直接æ’入一个惩罚项。
+大于或等于 $10000$ 的惩罚值阻止断开。
+而å°äºŽæˆ–等于 $-10000$ 的惩罚值强制断开。
+\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.
+\defterm{\PlainTeX} 是本书和 \texbook\ 中所æè¿°çš„ \TeX\ å½¢å¼ã€‚
+\PlainTeX\ 包å«åœ¨æ ‡å‡† \TeX\ 系统中,
+因此仅使用 \plainTeX\ 的文档通常很容易从一个 \TeX\ 系统转移到å¦ä¸€ä¸ªä¸­ã€‚
+
+%\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
+\PlainTeX\ ç”±\refterm{原始命令},加上大é‡çš„å®å’Œå…¶ä»–定义组æˆã€‚
+在\knuth{附录~B}中给出了这些附加定义。
+它们应该åŒæ ·åŒ…å«åœ¨ä½ çš„计算机系统的æŸä¸ª |plain.tex| 文件中。
+\endconcept
+
+
+%\concept{primitive}
+\concept{原始的}
+
+%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
+\defterm{原始的}(primitive)命令是在 \TeX\ 程åºå†…部就定义好的命令。
+作为对比,éžåŽŸå§‹å‘½ä»¤æˆ–者是从\refterm{å®}定义得到的,
+或者是从 \TeX\ 编写的其他形å¼çš„定义得到的。
+\refterm{\PlainTeX} 的命令由原始命令加上用原始命令定义的其他命令组æˆã€‚
+\endconcept
+
+\bookmark{2}{以R开头}
+%\concept {reference point}
+\concept {基准点}
+
+%^^{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
+^^{基线}
+^^{ç›’å­//ç›’å­çš„基准点}
+\refterm{ç›’å­}çš„\defterm{基准点}(reference point)是盒å­å·¦è¾¹ç¼˜ä¸Ž\refterm{基线}的交点。
+在处ç†\refterm{水平列表}或\refterm{竖直列表}时,
+\TeX\ 用列表中å„ç›’å­çš„基准点水平或竖直对é½è¿™äº›ç›’å­\seeconcept{ç›’å­}。
+\endconcept
+
+%\conceptindex{registers}
+%\concept register
+\concept 寄存器
+
+%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:
+\defterm{寄存器}(register)是用于存储数值的命åä½ç½®ã€‚
+它很åƒç¼–程语言中的一个å˜é‡ã€‚\TeX\ 有五ç§å¯„存器,如下表所示:
+
+%\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}}
+\vdisplay{\tabskip 10pt\halign{\tt #\hfil &#\hfil\cr
+{\it 寄存器类型}&{\it 存储内容}\cr
+box&一个\refterm{ç›’å­} \idxref{ç›’å­å¯„存器}\cr
+count&一个\refterm{数} \idxref{计数寄存器}\cr
+dimen&一个\refterm{尺寸} \idxref{尺寸寄存器}\cr
+muskip&\refterm{数学粘连} \idxref{数学粘连寄存器}\cr
+skip&\refterm{粘连} \idxref{粘连寄存器}\cr
+toks&一个\refterm{è®°å·}列 \idxref{è®°å·å¯„存器}\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.
+æ¯ç§ç±»åž‹çš„寄存器都从 $0$ 到 $255$ ç¼–å·ã€‚
+è¦å­˜å–第 $n$ 个类型为 $c$ 的寄存器,你å¯ä»¥ç”¨ `|\|$cn$' è¿™ç§å½¢å¼ï¼Œæ¯”如 |\muskip192|。
+寄存器å¯ä»¥ç”¨åœ¨ä»»ä½•éœ€è¦ç›¸åº”类型信æ¯çš„地方。例如,
+ä½ å¯ä»¥åœ¨éœ€è¦ä¸€ä¸ªæ•°çš„地方使用 |\count12|,或者在需è¦ç²˜è¿žçš„地方使用 |\skip0|。
+
+%You put information into a register by \refterm{assigning:assignment}
+%something to it:
+è¦å°†ä¿¡æ¯æ”¾å…¥å¯„存器中,你å¯ä»¥ç»™å®ƒ\refterm{赋值}:
+
+%\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$.
+\csdisplay
+\setbox3 = \hbox{lagomorphs are not mesomorphs}
+\count255 = -1
+|
+第一个赋值构造一个水平盒å­å¹¶æŠŠå®ƒåˆ†é…ç»™ $3$ å·ç›’å­å¯„存器。
+æ­¤åŽä½ å¯ä»¥åœ¨éœ€è¦ç›’å­çš„地方用 `|\box3|' 得到该盒å­ã€‚
+\footnote{但是è¦æ³¨æ„:使用盒å­å¯„存器的åŒæ—¶ä¹Ÿæ¸…空了该寄存器,
+从而它的内容å˜ä¸ºç©ºç™½ã€‚其他类型的寄存器ä¸ä¼šè¿™æ ·ã€‚
+ä½ å¯ä»¥ç”¨|\copy| 命令\ctsref{\copy}获å–ç›’å­å¯„存器的内容而ä¸æ¸…空它。}
+第二个赋值将 $-1$ 分é…ç»™ $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.
+给定类型的寄存器,比如粘连寄存器,就åƒè¯¥ç±»åž‹çš„å‚数一样。
+^^{å‚æ•°//如åŒå¯„存器}
+ä½ å¯ä»¥å¦‚åŒ\refterm{å‚æ•°}那样获å–或赋予它的值。
+有些 \TeX\ å‚数,比如 |\pageno|,实际上就是作为寄存器实现的。
+
+%\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.
+\PlainTeX\ 用了很多寄存器æ¥å®žçŽ°è‡ªå·±çš„目标,因此在需è¦å¯„存器时你ä¸èƒ½éšæ„选择一个æ¥ç”¨ã€‚
+你应该用下列这些命令之一让 \TeX\ 给你ä¿ç•™ä¸€ä¸ªå¯„存器:^|\newbox|ã€
+^|\newcount|ã€^|\newdimen|ã€^|\newmuskip|ã€^|\newskip| 或 ^|\newtoks|\ctsref{\@newbox}。
+这些命令是外部的,因此你ä¸èƒ½åœ¨å®å®šä¹‰ä¸­ä½¿ç”¨å®ƒä»¬ã€‚
+è¦æ˜¯å¯ä»¥è¿™æ ·åšï¼Œæ¯æ¬¡è°ƒç”¨å®æ—¶å°±ä¼šç”¨æŽ‰ä¸€ä¸ªå¯„存器,å¯èƒ½å¾ˆå¿«å°±ç”¨å®Œæ‰€æœ‰å¯„存器。
+
+%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.
+å³ä¾¿å¦‚此,åªéœ€è°¨æ…Žä¸€ç‚¹ä½ å°±å¯ä»¥åœ¨\refterm{编组}内部临时使用寄存器,
+甚至是 \TeX\ 在其他地方用到的寄存器。
+在执行完编组内的命令åŽï¼Œ\TeX å°†æ¯ä¸ªå¯„存器的内容é‡ç½®ä¸ºå¼€å§‹æ‰§è¡Œç¼–组å‰çš„内容。
+在编组内部使用显å¼ç¼–å·çš„寄存器时,
+你必须确ä¿è¯¥å¯„存器ä¸ä¼šè¢«ä½ åœ¨ç¼–组内调用的\refterm{å®}所修改。
+如果编组内调用了éžä½ æ‰€å†™çš„å®ï¼Œåœ¨å…¶ä¸­ä½¿ç”¨ä»»æ„寄存器时需è¦ç‰¹åˆ«å°å¿ƒã€‚
+
+%{\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}
+\TeX\ å°†æŸäº›å¯„存器ä¿ç•™ä½œç‰¹åˆ«ç”¨é€”:|\count0| 到
+|\count9| 用作页é¢ç¼–å·ä¿¡æ¯ï¼Œè€Œ
+^^{页ç }
+^|\box255| 用作é€åˆ°\refterm{输出例行程åº}之å‰çš„页é¢å†…容。
+寄存器 |\dimen0|--|\dimen9|ã€|\skip0|--|\skip9|ã€|\muskip0|--|\mu!-skip9|ã€
+|\box0|--|\box9| å’Œ |\box255| 除外的 |255| å·å¯„存器一般用作“临时â€å¯„存器。
+也就是说 \plainTeX\ ä»…æ供一个用于计数的临时寄存器 |\count255|。
+请å‚阅 \knuth{第~122 å’Œ 346~页},
+其中有选择寄存器编å·æ—¶è¦éµå®ˆçš„约定。
+
+%You can examine the contents of registers during a \TeX\ run with the
+%^|\showthe| command \ctsref\showthe, e.g., with `|\showthe\dimen0|'.
+%\endconcept
+è¦åœ¨ \TeX\ è¿è¡Œæ—¶æ£€æŸ¥ä¸€ä¸ªå¯„存器的内容,
+ä½ å¯ä»¥ç”¨ ^|\showthe| 命令\ctsref\showthe ,比如 `|\showthe\dimen0|'。
+\endconcept
+
+
+%\concept{restricted mode}
+\concept{å—é™æ¨¡å¼}
+
+%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
+\defterm{å—é™æ¨¡å¼}(restricted mode)是 \TeX\ 组装\refterm{水平盒å­}%
+或\refterm{ç«–ç›´ç›’å­}时所处的\refterm{模å¼}。
+我们使用 \texbook\ 中的术语``内部竖直模å¼''æ¥å‘½å我们所认为的``å—é™ç«–直模å¼''。
+请å‚阅\conceptcit{水平模å¼}å’Œ\conceptcit{竖直模å¼}。\endconcept
+
+
+%\conceptindex{rules}
+%\concept rule
+\concept 标线
+
+%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.
+\defterm{标线}(rule)是一个黑色实心矩形。
+标线和\refterm{ç›’å­}一样也有\refterm{宽度}ã€\refterm{高度}å’Œ\refterm{深度}。
+该矩形的竖直尺寸是它的高度和深度之和。
+普通的水平或竖直直线是标线的特殊情形。
+
+%\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.
+\bix^^{水平标线}
+\bix^^{竖直标线}
+\bix^^|\hrule|
+\bix^^|\vrule|
+标线å¯ä»¥æ˜¯æ°´å¹³çš„或者竖直的。水平标线和竖直标线的区别与你如何生æˆæ ‡çº¿æœ‰å…³ï¼Œ
+因为竖直标线å¯ä»¥çŸ®è€Œèƒ–(从而看似水平标线),
+而水平标线也å¯ä»¥é«˜è€Œç˜¦ï¼ˆä»Žè€Œçœ‹ä¼¼ç«–直标线)。\TeX\ 所说的标线比排å°å·¥çš„更一般,
+它们认为标线就是一æ¡çº¿è€Œé€šå¸¸ä¸æŠŠé»‘色方å—称为标线。
+
+%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:
+ä½ å¯ä»¥ç”¨ |\hrule| 命令生æˆæ°´å¹³æ ‡çº¿ï¼Œç”¨ |\vrule| 命令\ctsref{\vrule}生æˆç«–直标线。
+例如,控制åºåˆ— |\hrule| 本身就生æˆä¸€ä¸ªæ¨ªè·¨é¡µé¢çš„细标线,如下:
+
+%{\offinterlineskip
+%\nobreak\medskip
+%\hrule
+%\medskip}
+{\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
+命令 `|\vrule height .25in|' 生æˆå¾€ä¸‹ $.25$ 英寸的竖直标线如下:
+\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.)
+水平标线和竖直标线有如下两个区别:
+\olist
+\li 对于水平标线,\TeX\ 设定将其默认宽度为包å«å®ƒçš„最å°\refterm{ç›’å­}或\refterm{阵列}的宽度。
+对于竖直标线,\TeX\ 用类似方法设定其默认高度和深度。%
+(如果你没有显å¼è®¾å®šå°ºå¯¸ï¼Œé»˜è®¤ä¸ºå†…容的尺寸。)
+
+%^^{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
+^^{水平列表//水平列表中的标线}
+^^{竖直列表//竖直列表中的标线}
+\li
+水平标线是本质上的竖直项目,ä¸èƒ½æ”¾åœ¨\refterm{水平列表}中;
+而竖直标线是本质上的水平项目,ä¸èƒ½æ”¾åœ¨\refterm{竖直列表}中;
+è¿™ç§è¡Œä¸ºåˆçœ‹ä¹Ÿè®¸æœ‰äº›å¥‡æ€ªï¼Œä½†å´æ˜¯æœ‰åˆç†åŽŸå› çš„:
+水平标线在外观上通常是从左到å³çš„,因而分开了竖直列表中的项目;
+而竖直标线在外观上通常是从上到下的,因而分开了水平列表中的项目;
+%(Look at the rules that are shown above.)
+\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}
+如果你构造一个有三个明确尺寸的标线,无论作为水平标线还是竖直标线它看起æ¥éƒ½æ˜¯ä¸€æ ·çš„。
+例如,命令 `|\vrule height1pt depth2pt width3in|' 生æˆå¦‚下看似水平方å‘的标线:
+
+%{\offinterlineskip
+%\nobreak\medskip\nobreak\vskip3pt
+%\leftline{\vrule height1pt depth2pt width3in}
+%\medskip}
+{\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
+在\knuth{第~221--222~页}中,你å¯ä»¥æ‰¾åˆ°å¯¹ \TeX\ 如何处ç†æ ‡çº¿çš„精确表述。
+\eix^^{水平标线}
+\eix^^{竖直标线}
+\eix^^|\hrule|
+\eix^^|\vrule|
+\endconcept
+
+
+\bookmark{2}{以S开头}
+%\concept {script size}
+\concept {æ ‡å·å°ºå¯¸}
+
+%\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
+\defterm{æ ‡å·å°ºå¯¸}(script size)æ述一æ—字体中三个相关\refterm{字体}的其中一个。
+^^{æ—//æ—çš„æ ‡å·å°ºå¯¸}
+æ ‡å·å°ºå¯¸æ¯”\refterm{文本尺寸}å°ä½†æ¯”\refterm{å°æ ‡å·å°ºå¯¸}大。
+对上标,下标以åŠæ–‡æœ¬ä¸­åˆ†å¼çš„分å­å’Œåˆ†æ¯ï¼Œ\TeX\ 使用标å·å°ºå¯¸ã€‚
+\endconcept
+
+
+%\concept {scriptscript size}
+\concept {å°æ ‡å·å°ºå¯¸}
+
+%\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
+\defterm{å°æ ‡å·å°ºå¯¸}(scriptscript size)æ述一æ—字体中三个相关\refterm{字体}的最å°ä¸€ä¸ªã€‚
+^^{æ—//æ—çš„å°æ ‡å·å°ºå¯¸}
+对第二级的上标ã€ä¸‹æ ‡ã€åˆ†å­å’Œåˆ†æ¯ï¼Œ\TeX\ 使用å°æ ‡å·å°ºå¯¸ã€‚
+比如,对于下标中的下标,或者标å·å°ºå¯¸åˆ†å­ä¸­çš„上标,\TeX\ 将使用å°æ ‡å·å°ºå¯¸ã€‚
+\endconcept
+
+
+%\concept shrink
+\concept 收缩é‡
+
+%See \conceptcit{glue}.
+%\endconcept
+è§ \conceptcit{粘连}。
+\endconcept
+
+
+%\concept space
+\concept é—´éš”
+
+%You can cause \TeX\ to put \defterm{space} between two items in
+%several~ways:
+è¦è®© \TeX\ 在两个项目间留下\defterm{é—´éš”}(space),有如下几ç§æ–¹æ³•ï¼š
+
+%\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.
+\olist
+^^{行尾符}
+\li ä½ å¯ä»¥å†™ä¸ŠæŸäº› \TeX\ 视为空格\refterm{è®°å·}的东西:
+一个或多个空格符,行尾符(行尾符作用和空格相似),
+或任何能展开为空格记å·çš„\refterm{命令}。
+\TeX\ 一般将多个连续空格视为å•ä¸ªç©ºæ ¼ï¼ŒåŒ…括其中有一个行尾符的情形。%
+(一个空行表示段è½çš„结æŸï¼›å®ƒå¯¼è‡´ \TeX\ 生æˆä¸€ä¸ª |\par| è®°å·ã€‚)
+^^|\par//æ¥è‡ªç©ºè¡Œ|
+\TeX\ 调整此ç§é—´éš”的大å°ä»¥é€‚应由上下文所需的长度。
+
+%^^{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.
+^^{粘连//用它生æˆé—´è·}
+\li ä½ å¯ä»¥å†™ä¸Šä¸€ä¸ªç”ŸæˆæŒ‡å®šç²˜è¿žçš„é—´è·å‘½ä»¤ã€‚
+粘连有\refterm{伸长é‡}或\refterm{收缩é‡},从而生æˆæˆ–多或少的间隔。
+ä½ å¯ä»¥æœ‰æ°´å¹³ç²˜è¿žå’Œç«–直粘连。在断行或分页ä½ç½®ä¹‹åŽçš„粘连将会消失。
+
+%^^{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
+^^{紧排//用它生æˆé—´è·}
+\li ä½ å¯ä»¥å†™ä¸Šä¸€ä¸ª\refterm{紧排}。紧排生æˆå›ºå®šå¤§å°çš„间隔,它ä¸å¯ä¼¸é•¿ä¹Ÿä¸å¯æ”¶ç¼©ï¼Œ
+而且在断行或分页时也ä¸ä¼šæ¶ˆå¤±ï¼ˆé™¤éžå…¶åŽç´§è·Ÿç€ä¸€ä¸ªç²˜è¿žï¼‰ã€‚
+紧排常用于给两个相邻\refterm{ç›’å­}建立固定的空间关系。
+\endolist
+
+%Glue and kerns can have negative values. Negative glue or a negative kern
+%between adjacent items brings those items closer together.
+%\endconcept
+粘连和紧排也å¯ä»¥å–负值。两个相邻项目间的负粘连或负紧排将拉近它们俩的è·ç¦»ã€‚
+\endconcept
+
+
+%\concept stretch
+\concept 伸长é‡
+
+%See \conceptcit{glue}.
+%\endconcept
+è§ \conceptcit{粘连}。
+\endconcept
+
+
+%\conceptindex{struts}
+%\concept strut
+\concept 支架
+
+%{\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}
+\defterm{支架}(strut)一个ä¸å¯è§çš„\refterm{ç›’å­},
+^^{ç›’å­//ä¸å¯è§ç›’å­}
+它的宽度为零,而高度和深度比上下文中的“正常â€è¡Œç¨å¾®å¤§ä¸€ç‚¹ã€‚
+支架常用于在通常行间隔å–消时获得一致的竖直间隔,
+比如在数学公å¼ä¸­ï¼Œæˆ–者在设定了 ^|\offinterlineskip| 的水平阵列中。
+因为支架比该行的其他东西都高和深,它确定了该行的高度和深度。
+ä½ å¯ä»¥ç”¨ ^|\strut| 命令\ctsref{\strut}或
+^|\mathstrut| 命令\ctsref\mathstrut 生æˆä¸€ä¸ªæ”¯æž¶ã€‚
+|\strut| å¯ä»¥åœ¨ä»»ä½•åœ°æ–¹ä½¿ç”¨ï¼Œä½† |\mathstrut| åªèƒ½åœ¨æ•°å­¦\refterm{模å¼}中使用。
+在 \plainTeX\ 中,支架的高度为 8.5\pt ,深度为3.5\pt ,
+而数学支架的高度和深度和当å‰\refterm{æ ·å¼}的左圆括å·çš„相等%
+(因此在上下标中会å°ä¸€ç‚¹ï¼‰ã€‚
+
+%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
+这里有个例å­ç»™ä½ å±•ç¤ºäº†æ”¯æž¶çš„用法:
+\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}
+|
+这个输入产生下列输出:
+\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
+è¦æ˜¯æ²¡æœ‰æ”¯æž¶ï¼Œè¿™ä¸¤ä¸ª\refterm{ç›’å­}将太过é è¿‘了。
+类似地,在数学公å¼ä¸­ï¼š
+\csdisplay
+$\overline{x\mathstrut} \otimes \overline{t\mathstrut}$
+|
+数学支架让两个横线ä½äºŽç›¸åŒçš„高度,å³ä½¿ `$x$' å’Œ `$t$' 有ä¸åŒçš„高度:
+\display{
+$\overline{x\mathstrut} \otimes \overline{t\mathstrut}$
+}
+\vskip -\belowdisplayskip
+\endconcept
+%\nobreak
+
+
+%\conceptindex{styles}
+%\concept {style}
+\concept {æ ·å¼}
+
+%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.
+数学公å¼ä¸­çš„ç´ æä¾æ®ä¸Šä¸‹æ–‡è¢«è®¾å®šä¸ºå…«ç§\defterm{æ ·å¼}(style)的其中一ç§ã€‚
+对样å¼çš„了解,将有助于你将æŸéƒ¨åˆ†å…¬å¼è®¾ä¸ºä¸åŒç±»åž‹çš„大å°ï¼Œ
+å³ä¸Ž \TeX\ 按照通用法则选择的大å°ä¸åŒã€‚
+
+%\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
+%}}
+\vdisplay{%
+\halign{\refterm{#æ ·å¼}\hfil&\hskip .25in(用于#)\hfil\cr
+陈列&å•ç‹¬ä¸€è¡Œæ˜¾ç¤ºçš„å…¬å¼\cr
+文本&嵌入普通文本内的公å¼\cr
+æ ‡å·&上标和下标\cr
+å°æ ‡å·&上标中的上标,等等\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.
+å¦å¤–å››ç§æ ·å¼è¢«ç§°ä¸º^{狭窄å˜ä½“}。
+在这些å˜ä½“中,上标å‡é«˜å¾—没那么多,因而公å¼å’ŒåŽŸæ¥ç›¸æ¯”å ç”¨æ›´å°‘的竖直间隔。
+在\knuth{第~140--141~页}中详细介ç»äº† \TeX\ 如何选择样å¼ã€‚
+
+%\TeX\ chooses a size of type according to the style:
+\TeX\ ä¾ç…§æ ·å¼é€‰æ‹©å°ºå¯¸ç±»åž‹ï¼š
+
+%\ulist\compact
+%^^{display style}^^{text style}
+%\li Display style and text style are set in \refterm{text size}, like
+%`$\rm this$'.
+\ulist\compact
+^^{陈列样å¼}^^{文本样å¼}
+\li 陈列样å¼å’Œæ–‡æœ¬æ ·å¼è®¾å®šä¸º\refterm{文本尺寸}ï¼Œå°±åƒ `$\rm this$' 这样。
+
+%^^{script style}
+%\li Script style is set in \refterm{script size}, like `$\scriptstyle
+%\rm this$'.
+^^{æ ‡å·æ ·å¼}
+\li æ ‡å·æ ·å¼è®¾å®šä¸º\refterm{æ ‡å·å°ºå¯¸}ï¼Œå°±åƒ `$\scriptstyle \rm this$' 这样。
+
+%^^{scriptscript style}
+%\li Scriptscript style is set in \refterm{scriptscript size}, like
+%`$\scriptscriptstyle \rm this$'.
+%\endulist
+^^{å°æ ‡å·æ ·å¼}
+\li å°æ ‡å·æ ·å¼è®¾å®šä¸º\refterm{å°æ ‡å·å°ºå¯¸}ï¼Œå°±åƒ `$\scriptscriptstyle \rm this$' 这样。
+\endulist
+
+%See \conceptcit{family} for more information about these three sizes.
+å‚考\conceptcit{æ—}以获得更多关于这三ç§å°ºå¯¸çš„ä¿¡æ¯ã€‚
+
+%\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.
+在 \TeX\ 中没有“å°å°æ ‡å·â€æ ·å¼ï¼Œå› ä¸ºæ­¤æ ·å¼å¯¹åº”的尺寸太å°ä»¥è‡´æ— æ³•é˜…读。
+å› æ­¤ \TeX\ 用å°æ ‡å·æ ·å¼è®¾å®šä¸‰é˜¶ä¸Šä¸‹æ ‡ç­‰ã€‚
+
+%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
+å¶å°”你会å‘现 \TeX\ 给公å¼è®¾å®šçš„æ ·å¼å’Œä½ æƒ³è¦çš„ä¸åŒã€‚
+ä½ å¯ä»¥ç”¨ ^|\textstyle|,^|\displaystyle|,^|\scriptstyle| å’Œ ^|\scriptscriptstyle|
+命令\ctsref{\textstyle}æ”¹å˜ \TeX\ 的选择。
+\endconcept
+
+
+\bookmark{2}{以T开头}
+\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
+(a)~一个在中美洲国家用于数学排版的 \TeX\ å˜ç§ã€‚
+(b)~一ç§æ·±å—^{埃尔帕索}çš„ \TeX\ 用户欢迎的香辣èœã€‚
+\endconcept
+
+
+%\concept {text math}
+\concept {文内公å¼}
+
+%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
+我们用\defterm{文内公å¼}(text math)这个术语表示放在一行文本之中的数学公å¼ï¼Œ
+å³ä¸¤è¾¹ç”¨ |$| 括起æ¥çš„å…¬å¼ã€‚
+\ttidxref{$}
+\TeX\ 在文内数学\refterm{模å¼}中排版文内公å¼ã€‚
+\endconcept
+
+
+%\concept {text size}
+\concept {文本尺寸}
+
+%\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
+\defterm{文本尺寸}(text size)æ述一\refterm{æ—}字体中%
+三个相关\refterm{字体}的最大一个。
+^^{æ—//æ—的文本尺寸}
+对\refterm{数学模å¼}中的普通符å·ï¼Œ\TeX\ 使用文本尺寸。
+\endconcept
+
+
+%\conceptindex{tokens}
+%\concept token
+\concept è®°å·
+
+%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
+一个\defterm{è®°å·}(token)è¦ä¹ˆæ˜¯ä¸€ä¸ªæ ‡æœ‰\refterm{类别ç }的字符,
+è¦ä¹ˆæ˜¯ä¸€ä¸ª\refterm{控制åºåˆ—}。
+\TeX\ 用它的眼ç›ä»Žæ–‡ä»¶ä¸­è¯»å–字符串\seeconcept{\anatomy},
+并用它的嘴将字符串咀嚼æˆä¸€ä¸ªä¸ªè®°å·ã€‚
+当一个记å·åˆ°è¾¾\TeX\ 的胃时,\TeX\ 将它解释为一个\refterm{命令},
+除éžå®ƒæ˜¯ä¹‹å‰å‘½ä»¤çš„å‚é‡ã€‚
+\endconcept
+
+
+\bookmark{2}{以U开头}
+%\conceptindex{units of measure}
+%\concept {unit of measure}
+\concept {度é‡å•ä½}
+
+%See \conceptcit{dimension}.
+%\endconcept
+è§ \conceptcit{尺寸}。
+\endconcept
+
+
+\bookmark{2}{以V开头}
+%\conceptindex{vboxes}
+%\concept vbox
+\concept ç«–ç›´ç›’å­
+
+%^^{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
+^^{竖直列表//组æˆç«–ç›´ç›’å­}
+\defterm{ç«–ç›´ç›’å­}(vbox,vertical box)是 \TeX\
+从上到下é€ä¸ªæ”¾ç½®\refterm{竖直列表}的项目而构造出æ¥çš„\refterm{ç›’å­}。
+ç«–ç›´ç›’å­ï¼Œä½œä¸ºä¸€ä¸ªå•å…ƒï¼Œæ—¢ä¸æ˜¯æœ¬è´¨ä¸Šæ°´å¹³çš„也ä¸æ˜¯æœ¬è´¨ä¸Šç«–直的,
+å³å®ƒå¯ä»¥å‡ºçŽ°åœ¨ç«–直列表或\refterm{水平列表}中。
+ä½ å¯ä»¥ç”¨ ^|\vbox| 或 ^|\vtop| 命令\ctsref{\vtop}构造竖直盒å­ã€‚
+两者的区别在于,
+对于 |\vbox|,所构造的竖直盒å­çš„\refterm{基准点}æ¥æºäºŽ%
+列表的最åŽä¸€ä¸ªï¼ˆé€šå¸¸æ˜¯æœ€ä¸‹é¢é‚£ä¸ªï¼‰ç»„æˆé¡¹ï¼›
+而对于 |\vtop|,所构造的竖直盒å­çš„\refterm{基准点}æ¥æºäºŽ%
+列表的第一个(通常是最上é¢é‚£ä¸ªï¼‰ç»„æˆé¡¹ã€‚
+\endconcept
+
+
+%\conceptindex{vertical lists}
+%\concept{vertical list}
+\concept{竖直列表}
+
+%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.
+\defterm{竖直列表}(vertical list)是 \TeX\ ä½äºŽæŸç§ç«–直模å¼æ—¶
+(å³ç»„装\refterm{ç«–ç›´ç›’å­}或页é¢æ—¶ï¼‰ç”Ÿæˆçš„一列项目。è§ä¸‹é¢çš„``竖直模å¼''。
+
+\endconcept
+
+
+%\concept{vertical mode}
+\concept{竖直模å¼}
+
+%^^{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.
+^^{ç«–ç›´ç›’å­//ä½äºŽç«–直模å¼ä¸­}
+在组装\refterm{ç«–ç›´ç›’å­}或者主竖直列(输出的页é¢æ¥æºäºŽæ­¤ï¼‰æ—¶ï¼Œ
+\TeX\ ä½äºŽä¸¤ç§\defterm{竖直模å¼}(vertical mode)之一:
+^{普通竖直模å¼}用于组装主竖直列,而^{内部竖直模å¼}用于组装竖直盒å­ã€‚
+åªè¦ \TeX\ ä½äºŽç«–直模å¼ä¸­ï¼Œå®ƒçš„胃\seeconcept{\anatomy}就在构造项目%
+(盒å­ã€ç²˜è¿žã€æƒ©ç½šç­‰ï¼‰çš„\refterm{竖直列表}。
+\TeX\ é€ä¸ªæŽ’版列表中的项目,从上到下。
+
+%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.}
+竖直列表ä¸èƒ½åŒ…å«ä»»ä½•ç”¨æœ¬è´¨ä¸Šçš„水平命令,
+^^{竖直列表//ä¸èƒ½åŒ…å«æ°´å¹³å‘½ä»¤}
+比如 |\hskip| 或普通的(éžç©ºæ ¼ï¼‰å­—符,生æˆçš„项目。
+\footnote{在竖直模å¼ä¸­ \TeX\ \emph{忽略}它é‡åˆ°çš„任何空格符。}
+
+%\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
+\ulist
+\li 如果 \TeX\ 正在普通竖直模å¼ä¸­ç»„装竖直列表,并碰到一个本质上的水平命令,
+它将切æ¢åˆ°\refterm{水平模å¼}。
+\li 如果 \TeX\ 正在内部竖直模å¼ä¸­ç»„装竖直列表,并碰到一个本质上的水平命令,
+它将报错。
+\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.
+这两个命令你也许会认为是本质上竖直的,实际上å´æ˜¯æœ¬è´¨ä¸Šæ°´å¹³çš„:
+|\valign|\ctsref{\valign}和 |\vrule|\ctsref{\vrule}。
+^^|\valign//本质上水平的|
+^^|\vrule//本质上水平的|
+在\knuth{第~283~页}中列出了所有本质上的水平命令。
+
+%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
+有个特别é‡è¦çš„事实需è¦çŸ¥é“ï¼Œå³ \TeX\ 将任何普通的éžç©ºæ ¼ç¬¦è§†ä¸ºæœ¬è´¨ä¸Šæ°´å¹³çš„。
+如果 \TeX\ 在你预期之外çªç„¶å¼€å§‹ä¸€ä¸ªæ–°æ®µè½ï¼Œ
+è¿™å¯èƒ½æ˜¯ç”± \TeX\ 在竖直模å¼ä¸­é‡åˆ°çš„字符引起的。
+è¦è®© \TeX\ ä¸æŠŠè¯¥å­—符视为本质上水平的,你å¯ä»¥å°†å®ƒæ”¾å…¥ä¸€ä¸ª\refterm{水平盒å­}中;
+这是因为,尽管看å字容易误解,|\hbox| 命令既ä¸æ˜¯æœ¬è´¨ä¸Šæ°´å¹³çš„也ä¸æ˜¯æœ¬è´¨ä¸Šç«–直的。
+\endconcept
+
+
+\bookmark{2}{以W开头}
+%\concept whatsit
+\concept å°çŽ©æ„
+
+%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.
+\defterm{å°çŽ©æ„}(whatsit)是一个信æ¯é¡¹ç›®ï¼Œ
+它用于让 \TeX\ 执行æŸäº›æ— æ³•å½’入普通事物体系中的æ“作。
+å°çŽ©æ„å¯ä»¥å‡ºçŽ°åœ¨æ°´å¹³åˆ—表或竖直列表中,就åƒä¸€ä¸ªç›’å­æˆ–粘连项那样。
+\TeX\ å°†å°çŽ©æ„排版为一个宽度ã€é«˜åº¦å’Œæ·±åº¦éƒ½ä¸ºé›¶çš„\refterm{ç›’å­}——%
+å³ä¸€ä¸ªä¸åŒ…å«ä»»ä½•ä¸œè¥¿ä¹Ÿä¸å ç”¨ä»»ä½•ç©ºé—´çš„ç›’å­ã€‚
+
+%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
+在 \TeX\ 中内建了三ç§ç±»åž‹çš„å°çŽ©æ„:
+\ulist
+\li |\openout|ã€|\closeout| å’Œ |\write| 命令(第~\xrefn{\openout}~页)%
+% (2nd) removed \xref to \write, since it's on the same page
+生æˆç”¨äºŽæ“作输出文件的å°çŽ©æ„。
+^^|\openout//生æˆå°çŽ©æ„|
+^^|\write//生æˆå°çŽ©æ„|
+^^|\closeout//生æˆå°çŽ©æ„|
+\TeX\ 将此æ“作推迟到下次é€å‡ºé¡µé¢åˆ° \dvifile æ—¶%
+^^{\dvifile//其中的å°çŽ©æ„}
+(除éžåœ¨è¯¥æ“作之å‰åŠ ä¸Š ^|\immediate|)。
+\TeX\ 用å°çŽ©æ„表示这些命令,因为它们与当时正在排版的内容完全无关。
+\li ^|\special| 命令\ctsref{\special}让 \TeX\ 直接æ’å…¥æŸäº›æ–‡æœ¬åˆ° \dvifile 中。
+å¦‚åŒ |\write| 命令,\TeX\ 也将此æ“作推迟到下次é€å‡ºé¡µé¢åˆ° \dvifile 时。
+^^{\dvifile//用 \b\tt\\special\e æ’入的素æ}
+|\special| 的典型用法是命å一个图片文件,以让设备驱动文件将它整åˆåˆ°æœ€ç»ˆè¾“出中。
+\li 当你用 ^|\language| 或 ^|\setlanguage| 命令\ctsref{\language}改å˜è¯­è¨€æ—¶ï¼Œ
+\TeX\ æ’入一个å°çŽ©æ„,以引导它在以åŽåˆ†æ®µä¸ºè¡Œæ—¶ä½¿ç”¨ç‰¹å®šé›†åˆçš„连字规则。
+\endulist
+\noindent
+\TeX\ çš„æŸäº›ç‰¹åˆ«å®žçŽ°å¯èƒ½æä¾›é¢å¤–çš„å°çŽ©æ„。
+\endconcept
+
+
+%\concept width
+\concept 宽度
+
+%^^{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
+^^{ç›’å­//ç›’å­çš„宽度}
+\refterm{ç›’å­}çš„\defterm{宽度}(width)是它总共å ç”¨çš„水平间隔,
+å³ä»Žå®ƒçš„左边缘到å³è¾¹ç¼˜çš„è·ç¦»ã€‚ç›’å­å†…排版的素æå¯ä»¥æ¯”ç›’å­æœ¬èº«è¿˜å®½ã€‚
+\endconcept
+
+\endconcepts
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter
+\byebye
diff --git a/info/impatient/cn/config.tex b/info/impatient/cn/config.tex
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/info/impatient/cn/config.tex
diff --git a/info/impatient/cn/copyrght.tex b/info/impatient/cn/copyrght.tex
new file mode 100644
index 0000000000..2fe8addc6c
--- /dev/null
+++ b/info/impatient/cn/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/info/impatient/cn/eplain.tex b/info/impatient/cn/eplain.tex
new file mode 100644
index 0000000000..5d4f98e3c0
--- /dev/null
+++ b/info/impatient/cn/eplain.tex
@@ -0,0 +1,1198 @@
+%% @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}% fixed %
+ \toks2 = \expandafter{#3}%
+ \edef\cs{\the\toks2}%
+ \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/info/impatient/cn/eplain3.tex b/info/impatient/cn/eplain3.tex
new file mode 100644
index 0000000000..aa446aec77
--- /dev/null
+++ b/info/impatient/cn/eplain3.tex
@@ -0,0 +1,4346 @@
+%% @texfile{
+%% author = "Karl Berry, Steven Smith, Oleg Katsitadze, and others",
+%% version = "3.6",
+%% date = "Mon Sep 30 11:39:28 PDT 2013",
+%% filename = "eplain.tex",
+%% email = "bug-eplain@tug.org",
+%% checksum = "4346 9755 139706",
+%% codetable = "ASCII",
+%% supported = "yes",
+%% docstring = "This file defines macros that extend and expand on
+%% plain TeX. eplain.tex is xeplain.tex and the other
+%% source files with comments stripped; see the original
+%% files for author credits, etc. The original sources
+%% can be found in Eplain source zip archive in your TeX
+%% distribution, on CTAN or on Eplain's home page at
+%% http://tug.org/eplain. And please base diffs or
+%% other contributions on xeplain.tex, not the
+%% stripped-down eplain.tex.",
+%% }
+\ifx\eplain\undefined
+ \let\next\relax
+\else
+ \expandafter\let\expandafter\next\csname endinput\endcsname
+\fi
+\next
+%%
+%% This is file `ifpdf.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ifpdf.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% Project: ifpdf
+%% Version: 2011/01/30 v2.3
+%%
+%% Copyright (C) 2001, 2005-2011 by
+%% Heiko Oberdiek <heiko.oberdiek at googlemail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%% http://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Heiko Oberdiek.
+%%
+%% The Base Interpreter refers to any `TeX-Format',
+%% because some files are installed in TDS:tex/generic//.
+%%
+%% This work consists of the main source file ifpdf.dtx
+%% and the derived files
+%% ifpdf.sty, ifpdf.pdf, ifpdf.ins, ifpdf.drv, ifpdf-test1.tex.
+%%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode35=6 % #
+ \catcode39=12 % '
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \catcode64=11 % @
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \expandafter\let\expandafter\x\csname ver@ifpdf.sty\endcsname
+ \ifx\x\relax % plain-TeX, first loading
+ \else
+ \def\empty{}%
+ \ifx\x\empty % LaTeX, first loading,
+ \else
+ \expandafter\ifx\csname PackageInfo\endcsname\relax
+ \def\x#1#2{%
+ \immediate\write-1{Package #1 Info: #2.}%
+ }%
+ \else
+ \def\x#1#2{\PackageInfo{#1}{#2, stopped}}%
+ \fi
+ \x{ifpdf}{The package is already loaded}%
+ \fi
+ \fi
+\endgroup%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode35=6 % #
+ \catcode39=12 % '
+ \catcode40=12 % (
+ \catcode41=12 % )
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode47=12 % /
+ \catcode58=12 % :
+ \catcode64=11 % @
+ \catcode91=12 % [
+ \catcode93=12 % ]
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+ \def\x#1#2#3[#4]{\endgroup
+ \xdef#1{#4}%
+ }%
+ \else
+ \def\x#1#2[#3]{\endgroup
+ #2[{#3}]%
+ \ifx#1\@undefined
+ \xdef#1{#3}%
+ \fi
+ \ifx#1\relax
+ \xdef#1{#3}%
+ \fi
+ }%
+ \fi
+\expandafter\x\csname ver@ifpdf.sty\endcsname
+\ProvidesPackage{ifpdf}%
+ [2011/01/30 v2.3 Provides the ifpdf switch (HO)]%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \def\x{\endgroup
+ \expandafter\edef\csname ifpdf@AtEnd\endcsname{%
+ \endlinechar=\the\endlinechar\relax
+ \catcode13=\the\catcode13\relax
+ \catcode32=\the\catcode32\relax
+ \catcode35=\the\catcode35\relax
+ \catcode61=\the\catcode61\relax
+ \catcode64=\the\catcode64\relax
+ \catcode123=\the\catcode123\relax
+ \catcode125=\the\catcode125\relax
+ }%
+ }%
+\x\catcode61\catcode48\catcode32=10\relax%
+\catcode13=5 % ^^M
+\endlinechar=13 %
+\catcode35=6 % #
+\catcode64=11 % @
+\catcode123=1 % {
+\catcode125=2 % }
+\def\TMP@EnsureCode#1#2{%
+ \edef\ifpdf@AtEnd{%
+ \ifpdf@AtEnd
+ \catcode#1=\the\catcode#1\relax
+ }%
+ \catcode#1=#2\relax
+}
+\TMP@EnsureCode{10}{12}% ^^J
+\TMP@EnsureCode{39}{12}% '
+\TMP@EnsureCode{40}{12}% (
+\TMP@EnsureCode{41}{12}% )
+\TMP@EnsureCode{44}{12}% ,
+\TMP@EnsureCode{45}{12}% -
+\TMP@EnsureCode{46}{12}% .
+\TMP@EnsureCode{47}{12}% /
+\TMP@EnsureCode{58}{12}% :
+\TMP@EnsureCode{60}{12}% <
+\TMP@EnsureCode{91}{12}% [
+\TMP@EnsureCode{93}{12}% ]
+\TMP@EnsureCode{94}{7}% ^
+\TMP@EnsureCode{96}{12}% `
+\begingroup
+ \expandafter\ifx\csname ifpdf\endcsname\relax
+ \else
+ \edef\i/{\expandafter\string\csname ifpdf\endcsname}%
+ \expandafter\ifx\csname PackageError\endcsname\relax
+ \def\x#1#2{%
+ \edef\z{#2}%
+ \expandafter\errhelp\expandafter{\z}%
+ \errmessage{Package ifpdf Error: #1}%
+ }%
+ \def\y{^^J}%
+ \newlinechar=10 %
+ \else
+ \def\x#1#2{%
+ \PackageError{ifpdf}{#1}{#2}%
+ }%
+ \def\y{\MessageBreak}%
+ \fi
+ \x{Name clash, \i/ is already defined}{%
+ Incompatible versions of \i/ can cause problems,\y
+ therefore package loading is aborted.%
+ }%
+ \endgroup
+ \expandafter\ifpdf@AtEnd
+ \fi%
+\endgroup
+\begingroup
+ \def\skip#1\relax\begingroup{}%
+ \expandafter\ifx\csname pdfoutput\endcsname\relax
+ \else
+ \expandafter\skip
+ \fi
+ \expandafter\ifx\csname directlua\endcsname\relax
+ \expandafter\skip
+ \fi
+\endgroup
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname RequirePackage\endcsname\relax
+ \def\TMP@RequirePackage#1[#2]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname ver@#1.sty\endcsname\relax
+ \input #1.sty\relax
+ \fi
+ }%
+ \TMP@RequirePackage{ifluatex}[2009/04/10]%
+\else
+ \RequirePackage{ifluatex}[2009/04/10]%
+\fi
+\ifluatex
+ \ifnum\luatexversion<36 %
+ \else
+ \begingroup
+ \directlua{tex.enableprimitives('ifpdf', {'pdfoutput'})}%
+ \global\let\pdfoutput\ifpdfpdfoutput
+ \endgroup
+ \fi
+\fi
+\relax\begingroup\endgroup
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname newif\endcsname\relax
+ \edef\pdffalse{%
+ \let
+ \expandafter\noexpand\csname ifpdf\endcsname
+ \expandafter\noexpand\csname iffalse\endcsname
+ }%
+ \edef\pdftrue{%
+ \let
+ \expandafter\noexpand\csname ifpdf\endcsname
+ \expandafter\noexpand\csname iftrue\endcsname
+ }%
+ \pdffalse
+\else
+ \csname newif\expandafter\endcsname\csname ifpdf\endcsname
+\fi
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname pdfoutput\endcsname\relax
+\else
+ \ifnum\pdfoutput<1 %
+ \else
+ \pdftrue
+ \fi
+\fi
+\begingroup
+ \expandafter\ifx\csname pdfoutput\endcsname\relax
+ \else
+ \escapechar=92 %
+ \edef\m{\meaning\pdfoutput}%
+ \edef\p{\string\pdfoutput}%
+ \ifx\m\p
+ \else
+ \expandafter\ifx\csname PackageWarningNoLine\endcsname\relax
+ \def\PackageWarningNoLine#1#2{%
+ \immediate\write16{%
+ Package `#1' Warning: #2.%
+ }%
+ }%
+ \fi
+ \PackageWarningNoLine{ifpdf}{%
+ Someone has redefined \string\pdfoutput%
+ }%
+ \fi
+ \fi
+\endgroup
+\begingroup
+ \expandafter\ifx\csname PackageInfo\endcsname\relax
+ \def\x#1#2{%
+ }%
+ \else
+ \let\x\PackageInfo
+ \expandafter\let\csname on@line\endcsname\empty
+ \fi
+ \x{ifpdf}{pdfTeX in PDF mode is \ifpdf\else not \fi detected}%
+\endgroup
+\ifpdf@AtEnd%
+%%
+%% End of file `ifpdf.sty'.
+\def\makeactive#1{\catcode`#1 = \active \ignorespaces}%
+\chardef\letter = 11
+\chardef\other = 12
+\def\makeatletter{%
+ \edef\resetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}%
+ \catcode`\@11\relax
+}%
+\def\makeatother{%
+ \edef\resetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}%
+ \catcode`\@12\relax
+}%
+\edef\leftdisplays{\the\catcode`@}%
+\catcode`@ = \letter
+\let\@eplainoldatcode = \leftdisplays
+\toksdef\toks@ii = 2
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1 = \other}%
+ \dospecials
+}%
+{%
+ \makeactive\^^M %
+ \long\gdef\letreturn#1{\let^^M = #1}%
+}%
+\let\@eattoken = \relax % Define this, so \eattoken can be used in \edef.
+\def\eattoken{\let\@eattoken = }%
+\def\gobble#1{}%
+\def\gobbletwo#1#2{}%
+\def\gobblethree#1#2#3{}%
+\def\identity#1{#1}%
+\def\@emptymarkA{\@emptymarkB}
+\def\ifempty#1{\@@ifempty #1\@emptymarkA\@emptymarkB}%
+\def\@@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
+\def\@gobbleminus#1{\ifx-#1\else#1\fi}%
+\def\ifinteger#1{\ifcat_\ifnum9<1\@gobbleminus#1 _\else A\fi}%
+\def\isinteger{TT\fi\ifinteger}%
+\def\@gobblemeaning#1:->{}%
+\def\sanitize{\expandafter\@gobblemeaning\meaning}%
+\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}%
+\def\csn#1{\csname#1\endcsname}%
+\def\ece#1#2{\expandafter#1\csname#2\endcsname}%
+\def\expandonce{\expandafter\noexpand}%
+\let\@plainwlog = \wlog
+\let\wlog = \gobble
+\newlinechar = `^^J
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\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}%
+\def\gtracingoff{\begingroup \globaldefs = 1 \tracingoff \endgroup}%
+\def\tracingoff{\tracingonline\z@\tracingcommands\z@\tracingstats\z@
+ \tracingpages\z@\tracingoutput\z@\tracinglostchars\z@
+ \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@
+ \showboxbreadth5 \showboxdepth3
+}%
+\begingroup
+ \catcode`\{ = 12 \catcode`\} = 12
+ \catcode`\[ = 1 \catcode`\] = 2
+ \gdef\lbracechar[{]%
+ \gdef\rbracechar[}]%
+ \catcode`\% = \other
+ \gdef\percentchar[%]\endgroup
+\def\vpenalty{\ifhmode\par\fi \penalty}%
+\def\hpenalty{\ifvmode\leavevmode\fi \penalty}%
+\def\iterate{%
+ \let\loop@next\relax
+ \body
+ \let\loop@next\iterate
+ \fi
+ \loop@next
+}%
+\def\edefappend#1#2{%
+ \toks@ = \expandafter{#1}%
+ \edef#1{\the\toks@ #2}%
+}%
+\def\allowhyphens{\nobreak\hskip\z@skip}%
+\long\def\hookprepend{\@hookassign{\the\toks@ii \the\toks@}}%
+\long\def\hookappend{\@hookassign{\the\toks@ \the\toks@ii}}%
+\let\hookaction = \hookappend % either one should be ok
+\long\def\@hookassign#1#2#3{%
+ \expandafter\ifx\csname @#2hook\endcsname \relax
+ \toks@ = {}%
+ \else
+ \expandafter\let\expandafter\temp \csname @#2hook\endcsname
+ \toks@ = \expandafter{\temp}%
+ \fi
+ \toks2 = {#3}% Don't expand the argument all the way.
+ \ece\edef{@#2hook}{#1}%
+}%
+\long\def\hookactiononce#1#2{%
+ \edefappend#2{\global\let\noexpand#2\relax}
+ \hookaction{#1}#2%
+}%
+\def\hookrun#1{%
+ \expandafter\ifx\csname @#1hook\endcsname \relax \else
+ \def\temp{\csname @#1hook\endcsname}%
+ \expandafter\temp
+ \fi
+}%
+\def\setproperty#1#2#3{\ece\edef{#1@p#2}{#3}}%
+\def\setpropertyglobal#1#2#3{\ece\xdef{#1@p#2}{#3}}%
+\def\getproperty#1#2{%
+ \expandafter\ifx\csname#1@p#2\endcsname\relax
+ \else \csname#1@p#2\endcsname
+ \fi
+}%
+\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.99n",
+%% date = "30 September 2013",
+%% filename = "btxmac.tex",
+%% address = "tex-eplain@tug.org",
+%% 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
+\long\def\@futurenonspacelet#1{\def\cs{#1}%
+ \afterassignment\@stepone\let\@nexttoken=
+}%
+\begingroup % The grouping here avoids stepping on an outside use of `\\'.
+\def\\{\global\let\@stoken= }%
+\\ % now \@stoken is a space token (\\ is a control symbol, so that
+\endgroup
+\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= }%
+\def\@getoptionalarg#1{%
+ \let\@optionalusercs = #1%
+ \let\@optionalnext = \relax
+ \@futurenonspacelet\@optionalnext\@bracketcheck
+}%
+\def\@bracketcheck{%
+ \ifx [\@optionalnext
+ \expandafter\@@getoptionalarg % we have an optional arg
+ \else
+ \let\@optionalarg = \empty % no optional arg
+ \expandafter\@optionalusercs
+ \fi
+}%
+\def\@@getoptionalarg[#1]{%
+ \def\@optionalarg{#1}%
+ \let\@optdummy=\relax % just in case it has become \outer somehow
+ \@futurenonspacelet\@optdummy\@optionalusercs
+}%
+\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
+\let\bblfilebasename = \jobname
+\def\bibliography#1{%
+ \@readauxfile
+ \@writeaux{\string\bibdata{#1}}%
+ \@testfileexistence[\bblfilebasename]{bbl}%
+ \if@fileexists
+ \nobreak
+ \@readbblfile
+ \fi
+}%
+\let\bibdata = \@gobble
+\def\nocite#1{%
+ \@readauxfile
+ \@writeaux{\string\citation{#1}}%
+}%
+\@innernewif\if@notfirstcitation
+\def\cite{\@getoptionalarg\@cite}%
+\def\@cite#1{%
+ \let\@citenotetext = \@optionalarg
+ \printcitestart
+ \nocite{#1}%
+ \@notfirstcitationfalse
+ \@for \@citation :=#1\do
+ {%
+ \expandafter\@onecitation\@citation\@@
+ }%
+ \ifx\empty\@citenotetext\else
+ \printcitenote{\@citenotetext}%
+ \fi
+ \printcitefinish
+}%
+\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
+ \escapechar = -1
+ \nobreak\hskip0pt
+ \expandafter\string\csname#1\endcsname
+ \nobreak\hskip0pt
+ }%
+ }%
+ \fi
+ \printcitepreitem{#1}%
+ \csname\@citelabel{#1}\endcsname
+ \printcitepostitem
+ \@notfirstcitationtrue
+}%
+\def\@citelabel#1{b@#1}%
+\def\@citedef#1#2{{\expandafter\gdef\csname\@citelabel{#1}\endcsname{#2}}}%
+\def\@readbblfile{%
+ \ifx\@itemnum\@undefined
+ \@innernewcount\@itemnum
+ \fi
+ \begingroup
+ \ifx\begin\@undefined
+ \def\begin##1##2{%
+ \setbox0 = \hbox{\biblabelcontents{##2}}%
+ \biblabelwidth = \wd0
+ }%
+ \let\end = \@gobble % The arg is `thebibliography' again.
+ \fi
+ \@itemnum = 0
+ \def\bibitem{\@getoptionalarg\@bibitem}%
+ \def\@bibitem{%
+ \ifx\@optionalarg\empty
+ \expandafter\@numberedbibitem
+ \else
+ \expandafter\@alphabibitem
+ \fi
+ }%
+ \def\@alphabibitem##1{%
+ \expandafter \xdef\csname\@citelabel{##1}\endcsname {\@optionalarg}%
+ \ifx\biblabelprecontents\@undefined
+ \let\biblabelprecontents = \relax
+ \fi
+ \ifx\biblabelpostcontents\@undefined
+ \let\biblabelpostcontents = \hss
+ \fi
+ \@finishbibitem{##1}%
+ }%
+ \def\@numberedbibitem##1{%
+ \advance\@itemnum by 1
+ \expandafter \xdef\csname\@citelabel{##1}\endcsname{\number\@itemnum}%
+ \ifx\biblabelprecontents\@undefined
+ \let\biblabelprecontents = \hss
+ \fi
+ \ifx\biblabelpostcontents\@undefined
+ \let\biblabelpostcontents = \relax
+ \fi
+ \@finishbibitem{##1}%
+ }%
+ \def\@finishbibitem##1{%
+ \bblitemhook{##1}%
+ \biblabelprint{\csname\@citelabel{##1}\endcsname}%
+ \@writeaux{\string\@citedef{##1}{\csname\@citelabel{##1}\endcsname}}%
+ \ignorespaces
+ }%
+ \ifx\undefined\em \let\em=\bblem \fi
+ \ifx\undefined\emph \let\emph=\bblemph \fi
+ \ifx\undefined\mbox \let\mbox=\bblmbox \fi
+ \ifx\undefined\newblock \let\newblock=\bblnewblock \fi
+ \ifx\undefined\sc \let\sc=\bblsc \fi
+ \ifx\undefined\textbf \let\textbf=\bbltextbf \fi
+ \frenchspacing
+ \clubpenalty = 4000 \widowpenalty = 4000
+ \tolerance = 10000 \hfuzz = .5pt
+ \everypar = {\hangindent = \biblabelwidth
+ \advance\hangindent by \biblabelextraspace}%
+ \bblrm
+ \parskip = 1.5ex plus .5ex minus .5ex
+ \biblabelextraspace = .5em
+ \bblhook
+ \input \bblfilebasename.bbl
+ \endgroup
+}%
+\@innernewdimen\biblabelwidth
+\@innernewdimen\biblabelextraspace
+\def\biblabelprint#1{%
+ \noindent
+ \hbox to \biblabelwidth{%
+ \biblabelprecontents
+ \biblabelcontents{#1}%
+ \biblabelpostcontents
+ }%
+ \kern\biblabelextraspace
+}%
+\def\biblabelcontents#1{{\bblrm [#1]}}%
+\def\bblrm{\rm}%
+\def\bblem{\it}%
+\def\bblemph#1{{\bblem #1\/}}
+\def\bbltextbf#1{{\bf #1}}
+\def\bblmbox{\leavevmode\hbox}
+\def\bblsc{\ifx\@scfont\@undefined
+ \font\@scfont = cmcsc10
+ \fi
+ \@scfont
+}%
+\def\bblnewblock{\hskip .11em plus .33em minus .07em }%
+\let\bblhook = \empty
+\let\bblitemhook = \@gobble
+\def\printcitestart{[}% left bracket
+\def\printcitefinish{]}% right bracket
+\def\printbetweencitations{, }% comma, space
+\let\printcitepreitem\@gobble % takes label
+\let\printcitepostitem\empty
+\def\printcitenote#1{, #1}% comma, space, note (if it exists)
+\let\citation = \@gobble
+\@innernewcount\@numparams
+\ifx\newcommand\undefined
+\long\def\newcommand#1{%
+ \def\@commandname{#1}%
+ \@getoptionalarg\@continuenewcommand
+}%
+\fi
+\ifx\renewcommand\undefined
+ \let\renewcommand = \newcommand
+\fi
+\ifx\providecommand\undefined
+\long\def\providecommand#1{%
+ \def\@commandname{#1}%
+ \expandafter\ifx\@commandname \@undefined
+ \let\cs=\@continuenewcommand % undefined, so we'll define it
+ \else
+ \let\cs=\@gobble % already defined, so ignore it
+ \fi
+ \@getoptionalarg\cs
+}%
+\fi
+\def\@continuenewcommand{%
+ \@numparams = \ifx\@optionalarg\empty 0\else\@optionalarg \fi \relax
+ \@newcommand
+}%
+\def\@newcommand#1{%
+ \def\@startdef{\expandafter\def\@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
+ \catcode`@ = 11
+ \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
+\@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\futurenonspacelet = \@futurenonspacelet
+\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\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
+}%
+\def\bblitemhook#1{\gdef\@hlbblitemlabel{#1}}%
+\def\biblabelprint#1{%
+ \noindent
+ \hbox to \biblabelwidth{%
+ \hldest@impl{bib}{\@hlbblitemlabel}%
+ \biblabelprecontents
+ \biblabelcontents{#1}%
+ \biblabelpostcontents
+ }%
+ \kern\biblabelextraspace
+}%
+\def\eplainprintcitepreitem#1{\hlstart@impl{cite}{#1}}%
+\def\eplainprintcitepostitem{\hlend@impl{cite}}%
+\def\printcitepreitem#1{%
+ \testfileexistence[\bblfilebasename]{bbl}%
+ \iffileexists
+ \global\let\printcitepreitem\eplainprintcitepreitem
+ \global\let\printcitepostitem\eplainprintcitepostitem
+ \else
+ \global\let\printcitepreitem\gobble
+ \global\let\printcitepostitem\relax
+ \fi
+ \printcitepreitem{#1}%
+}%
+\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{\@Fordef#1\@@#4\ifx #4\@Nnil \else
+ #5\@Fordef#2\@@#4\ifx #4\@Nnil \else#5\@iForloop #3\@@#4{#5}\fi\fi
+}%
+\def\@iForloop#1,#2\@@#3#4{\@Fordef#1\@@#3\ifx #3\@Nnil
+ \let\@Nextwhile=\@Fornoop \else
+ #4\relax\let\@Nextwhile=\@iForloop\fi\@Nextwhile#2\@@#3{#4}%
+}%
+\def\@Forspc{ }%
+\def\@Fordef{\futurelet\@Fortmp\@@Fordef}% Peep at the next token.
+\def\@@Fordef{%
+ \expandafter\ifx\@Forspc\@Fortmp % Next token is a space.
+ \expandafter\@Fortrim
+ \else
+ \expandafter\@@@Fordef
+ \fi
+}%
+\expandafter\def\expandafter\@Fortrim\@Forspc#1\@@{\@Fordef#1\@@}%
+\def\@@@Fordef#1\@@#2{\def#2{#1}}%
+\def\tmpfileextension{.tmp}%
+\let\tmpfilebasename = \jobname
+\ifx\eTeXversion\undefined
+ \innernewwrite\eplain@tmpfile
+ \def\scantokens#1{%
+ \toks@={#1}%
+ \immediate\openout\eplain@tmpfile=\tmpfilebasename\tmpfileextension
+ \immediate\write\eplain@tmpfile{\the\toks@}%
+ \immediate\closeout\eplain@tmpfile
+ \input \tmpfilebasename\tmpfileextension\relax
+ }%
+\fi
+\begingroup
+ \makeactive\^^M \makeactive\ % No spaces or ^^M's from here on.
+\gdef\obeywhitespace{%
+\makeactive\^^M\def^^M{\par\futurelet\next\@finishobeyedreturn}%
+\makeactive\ \let =\ %
+\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{%
+ \ifhmode
+ \setbox0 = \lastbox
+ \ifdim\wd0=\parindent
+ \setbox2 = \hbox{\unhcopy0}% Preserve \box0 so we can put it back.
+ \ifdim\wd2=0pt
+ \ignorespaces
+ \else
+ \box0 % Put it back: it wasn't empty.
+ \fi
+ \else
+ \box0 % Put it back: it wasn't the right width.
+ \fi
+ \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}%
+}%
+\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}%
+%%% ====================================================================
+%%% @TeX-style-file{
+%%% author = "Nelson H. F. Beebe",
+%%% version = "1.10",
+%%% date = "02 March 1998",
+%%% time = "08:36:13 MST",
+%%% filename = "texnames.sty",
+%%% address = "Center for Scientific Computing
+%%% Department of Mathematics
+%%% South Physics Building
+%%% University of Utah
+%%% Salt Lake City, UT 84112
+%%% USA
+%%% Tel: (801) 581-5254
+%%% FAX: (801) 581-4148",
+%%% checksum = "27723 296 1385 12423",
+%%% email = "beebe@magna.math.utah.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "TeX names",
+%%% supported = "yes",
+%%% docstring = "This style file for AmSTeX, LaTeX, and TeX
+%%% defines macros for the names of TeX
+%%% and METAFONT programs, in several
+%%% letter-case variants:
+%%%
+%%% \AMSTEX, \AMSTeX, \AmSTeX
+%%% \BIBTEX, \BIBTeX, \BibTeX
+%%% \LAMSTeX, \LAmSTeX
+%%% \LaTeX, \LATEX
+%%% \METAFONT, \MF
+%%% \SLITEX, \SLITeX, \SLiTeX, \SliTeX
+%%%
+%%% It will NOT redefine any macro that
+%%% already exists, so it can be included
+%%% harmlessly after other style files.
+%%%
+%%% In AmSTeX or Plain TeX, just do
+%%%
+%%% \input texnames.sty
+%%%
+%%% In LaTeX, do
+%%%
+%%% \documentstyle[...,texnames]{...}
+%%%
+%%% This file grew out of original work by
+%%%
+%%% Richard Furuta
+%%% Department of Computer Science
+%%% University of Maryland
+%%% College Park, MD 20742
+%%%
+%%% furuta@mimsy.umd.edu
+%%% seismo!umcp-cs!furuta
+%%%
+%%% 22 October 1986, first release (1.00)
+%%%
+%%% 1 April 1987 (1.01): Modified by William
+%%% LeFebvre, Rice University to include
+%%% definitions for BibTeX and SLiTeX, as they
+%%% appear in the LaTeX Local User's Guide
+%%% template (the file latex/local.tex in
+%%% standard distributions)
+%%%
+%%% 26 October 1991 (1.02): Modified by
+%%% Nelson H. F. Beebe <beebe@math.utah.edu> to
+%%% add several new macro names, and adapt for
+%%% use with Plain TeX and AmSTeX.
+%%%
+%%% 26 October 1991 (1.03): Add \LaTeX and
+%%% \LATEX
+%%%
+%%% 25 November 1991 (1.04): Add \LamSTeX
+%%% and \LAMSTeX
+%%%
+%%% 27 January 1991 (1.05 and 1.06): Add slanted
+%%% font support for \MF. Make several comment
+%%% changes. Add a couple of missing % at end
+%%% of line, and replace blank lines by empty
+%%% comments.
+%%%
+%%% 30 December 1992 (1.07): Use \TeX in
+%%% definitions of \BibTeX and \LaTeX. Remove
+%%% occurrences of \rm. Change \sc to use
+%%% \scriptfont instead of hardwiring cmcsc10.
+%%% Use \cal for \LAMSTeX.
+%%%
+%%% 1 March 1993 (1.08): Consolidate \ifx's onto
+%%% single lines for brevity. Add
+%%% \spacefactor1000 to definitions for \TeX and \MF.
+%%%
+%%% 16 March 1993 (1.09): Add \AmS, \AMS, \AmSLaTeX,
+%%% and \AMSLaTeX.
+%%%
+%%% 02 March 1998 (1.10): Add \LaTeXe.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%%
+%%% }
+%%% ====================================================================
+\ifx\sc\undefined
+ \def\sc{%
+ \expandafter\ifx\the\scriptfont\fam\nullfont
+ \font\temp = cmr7 \temp
+ \else
+ \the\scriptfont\fam
+ \fi
+ \def\uppercasesc{\char\uccode`}%
+ }%
+\fi
+\ifx\uppercasesc\undefined
+ \let\uppercasesc = \relax
+\fi
+\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\spacefactor1000 }%
+\ifx\AmS\undefined
+ \def\AmS{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
+ {\the\textfont2 M}\kern-.125em{\the\textfont2 S}}
+\fi
+\ifx\AMS\undefined \let\AMS=\AmS \fi
+\ifx\AmSLaTeX\undefined
+ \def\AmSLaTeX{\AmS-\LaTeX}
+\fi
+\ifx\AMSLaTeX\undefined \let\AMSLaTeX=\AmSLaTeX \fi
+\ifx\AmSTeX\undefined
+ \def\AmSTeX{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}%
+ \kern-.125em$\cal S$-\TeX}%
+\fi
+\ifx\AMSTEX\undefined \let\AMSTEX=\AmSTeX \fi
+\ifx\AMSTeX\undefined \let\AMSTeX=\AmSTeX \fi
+\ifx\BibTeX\undefined
+ \def\BibTeX{B{\sc \uppercasesc i\kern-.025em \uppercasesc b}\kern-.08em
+ \TeX}%
+\fi
+\ifx\BIBTeX\undefined \let\BIBTeX=\BibTeX \fi
+\ifx\BIBTEX\undefined \let\BIBTEX=\BibTeX \fi
+\ifx\LAMSTeX\undefined
+ \def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em\the\scriptfont2 A}%
+ \kern-.2em\lower.376ex\hbox{\the\textfont2 M}%
+ \kern-.125em {\the\textfont2 S}-\TeX}%
+\fi
+\ifx\LamSTeX\undefined \let\LamSTeX=\LAMSTeX \fi
+\ifx\LAmSTeX\undefined \let\LAmSTeX=\LAMSTeX \fi
+\ifx\LaTeX\undefined
+ \def\LaTeX{L\kern-.36em\raise.3ex\hbox{\sc \uppercasesc a}\kern-.15em\TeX}%
+\fi
+\ifx\LATEX\undefined \let\LATEX=\LaTeX \fi
+\ifx\LaTeXe\undefined
+ \def\LaTeXe{\LaTeX{}\kern.05em2$_{\textstyle\varepsilon}$}
+\fi
+\ifx\MF\undefined
+ \ifx\manfnt\undefined
+ \font\manfnt=logo10
+ \fi
+ \ifx\manfntsl\undefined
+ \font\manfntsl=logosl10
+ \fi
+ \def\MF{{\ifdim\fontdimen1\font>0pt \let\manfnt = \manfntsl \fi
+ {\manfnt META}\-{\manfnt FONT}}\spacefactor1000 }%
+\fi
+\ifx\METAFONT\undefined \let\METAFONT=\MF \fi
+\ifx\SLITEX\undefined
+ \def\SLITEX{S\kern-.065em L\kern-.18em\raise.32ex\hbox{i}\kern-.03em\TeX}%
+\fi
+\ifx\SLiTeX\undefined \let\SLiTeX=\SLITEX \fi
+\ifx\SliTeX\undefined \let\SliTeX=\SLITEX \fi
+\ifx\SLITeX\undefined \let\SLITeX=\SLITEX \fi
+%%% @TeX-style-file
+%%% {
+%%% author = "Philip Taylor",
+%%% version = "3.05",
+%%% date = "7 April 2011",
+%%% time = "15:59:31 BST",
+%%% filename = "path.sty",
+%%% license = "Unlimited copying and redistribution of this
+%%% file are permitted as long as this file is
+%%% not modified. Modifications are permitted,
+%%% but only if the resulting file is not named
+%%% path.sty regardless of case",
+%%% address = "c/o The Hellenic Institute
+%%% Royal Holloway, University of London
+%%% Egham Hull, Egham
+%%% Surrey TW20 0EX
+%%% United Kingdom",
+%%% telephone = "Tel: +44 1622 820 735",
+%%% email = "P.Taylor@Rhul.Ac.Uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "file name, filename, path name, pathname,
+%%% discretionary, discretionaries",
+%%% supported = "yes",
+%%% docstring = {Computer filenames, host names, and e-mail
+%%% addresses tend to be long strings that
+%%% cause line breaking problems for TeX.
+%%% Sometimes rather long strings are
+%%% encountered, such as:
+%%%
+%%% mighty-mouse-gw.scrc.symbolics.com
+%%%
+%%% This file defines a macro, \path|...|,
+%%% similar to LaTeX's \verb|...| macro, that
+%%% sets the text in the typewriter font,
+%%% allowing hyphen-less line breaks at
+%%% punctuation characters.
+%%%
+%%% The default set of punctuation characters is
+%%% defined as
+%%%
+%%% \discretionaries |~!@$%^&*()_+`-=#{"}[]:;'<>,.?\/|
+%%%
+%%% However, you can change it as needed, for
+%%% example
+%%%
+%%% \discretionaries +@%!.+
+%%%
+%%% would assign to it the set @ % ! . which
+%%% commonly occur in electronic mail addresses.
+%%%
+%%% The delimiter characters surrounding the
+%%% arguments to \discretionaries and \path
+%%% will normally be a punctuation character not
+%%% found in the argument, and not otherwise
+%%% significant to TeX. In particular, backslash
+%%% cannot be used as a delimiter. In the rare
+%%% event that this is required, set
+%%%
+%%% \specialpathdelimiterstrue
+%%%
+%%% This practice is not recommended, because TeX
+%%% then runs about four times slower while it is
+%%% typesetting \path\...\ requests.
+%%% \specialpathdelimitersfalse is the normal
+%%% setting.
+%%%
+%%% This file may be used in Plain TeX or AmSTeX
+%%% by
+%%%
+%%% \input path.sty
+%%%
+%%% and in LaTeX by
+%%%
+%%% \usepackage {path}
+%%%
+%%% The checksum field above, if present, contains
+%%% a CRC-16 checksum as the first value, followed
+%%% by the equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.
+%%% }
+%%% }
+%%% ====================================================================
+%%% The use of `\path' as a temporary control sequence is a kludge, but
+%%% it's a reasonably simple way to accomplish making @ a letter (to
+%%% provide ``concealed'' control sequences) without overwriting something
+%%% (without an `@' in its name) that might already be defined.
+\edef \path {\the \catcode `\@}%
+\catcode `\@ = 11
+\let \oldc@tcode = \path
+%%% Make commercial-at a letter to provide concealed control sequences
+\catcode `\@ = 11
+%%% and then declare two \count variables with concealed names
+\newcount \c@tcode
+\newcount \c@unter
+%%% and a boolean variable with an open name, to specify the nature of
+%%% the delimiters which will be associated with the \path command
+\newif \ifspecialpathdelimiters
+%%% If desired, you can define \pathafterhook to take
+\let \pathafterhook = \relax
+%%% We need to define control sequences which expand to both
+%%% active and passive spaces ...
+\begingroup
+\catcode `\ = 10
+\gdef \passivesp@ce { }
+\catcode `\ = 13\relax%
+\gdef\activesp@ce{ }%
+\endgroup
+%%% \discretionaries will define a macro \discr@ti@n@ri@s which will
+%%% make every character between the first and final <delim> a
+%%% discretionary breakpoint.
+\def \discretionaries %%% <delim> <chars> <delim>
+ {\begingroup
+ \c@tcodes = 13
+ \discr@tionaries
+ }
+%%% \discr@tionaries will receive as parameter the initial <delim>
+%%% which will delimit the set of discretionaries; this <delim>
+%%% will be active.
+\def \discr@tionaries #1%%% <delim>
+ {\def \discr@ti@naries ##1#1%%% <chars> <delim>
+ {\endgroup
+ \def \discr@ti@n@ries ####1%%% <char> or <delim>
+ {\if \noexpand ####1\noexpand #1%
+ \let \n@xt = \relax
+ \else
+ \catcode `####1 = 13
+ \def ####1{\discretionary
+ {\char `####1}{}{\char `####1}}%
+ \let \n@xt = \discr@ti@n@ries
+ \fi
+ \n@xt
+ }%
+ \def \discr@ti@n@ri@s {\discr@ti@n@ries ##1#1}%
+ }%
+ \discr@ti@naries
+ }
+%%% \path, which is the user interface to \p@th, first checks
+%%% to see whether \specialpathdelimiters is <true> or <false>;
+%%% if <true>, it needs to take special action to ensure that
+%%% \stress {all} characters (apart from <space>) are acceptable
+%%% as delimiters; this is very time-consuming, and should be
+%%% avoided if at all possible. It also defines \endp@th, to
+%%% close the appropriate number of groups, and finally transfers
+%%% control to \p@th
+\def \path
+ {\ifspecialpathdelimiters
+ \begingroup
+ \c@tcodes = 12
+ \def \endp@th {\endgroup \endgroup \pathafterhook}%
+ \else
+ \def \endp@th {\endgroup \pathafterhook}%
+ \fi
+ \p@th
+ }
+%%% \p@th, which has essentially the same syntax as \discretionaries,
+%%% expects to be followed by a <delim>, a <path>, and a second instance
+%%% of <delim>; it will typeset <path> in the \tt font with hyphenation
+%%% inhibited --- breaks (but not true hyphenation) are allowed at any
+%%% or all of the special characters which have
+%%% previously been declared as \discretionaries.
+\def \p@th #1%%% <delim>
+ {\begingroup
+ \tt
+ \c@tcode = \catcode `#1
+ \discr@ti@n@ri@s
+ \catcode `\ = \active
+ \expandafter \edef \activesp@ce {\passivesp@ce \hbox {}}%
+ \catcode `#1 = \c@tcode
+ \def \p@@th ##1#1% <chars> <delim>
+ {\leavevmode \hbox {}##1%
+ \endp@th
+ }%
+ \p@@th
+ }
+%%% \c@tcodes expects to be followed by the r-h-s of a numeric
+%%% assignment optionally including the assignment operator; it saves
+%%% the value of the r-h-s in \c@tcode, and invokes \c@tc@des.
+\def \c@tcodes {\afterassignment \c@tc@des \c@tcode}
+%%% \c@tc@des uses the value saved in \c@tcode, and assigns it to the
+%%% \catcode of all characters with the single exception of <space>,
+%%% which retains its normal catcode of 10; on exit, every single
+%%% character apart from <space> will have the catcode which followed
+%%% \c@tcodes. The code is optimised to avoid unnecessary usage of
+%%% save-stack space.
+\def \c@tc@des
+ {\c@unter = 0
+ \loop
+ \ifnum \catcode \c@unter = \c@tcode
+ \else
+ \catcode \c@unter = \c@tcode
+ \fi
+ \ifnum \c@unter < 255
+ \advance \c@unter by 1
+ \repeat
+ \catcode `\ = 10
+ }
+%%% We restore the original catcode of commercial-at
+\catcode `\@ = \oldc@tcode
+%%% Define a default set of discretionary break characters
+%%% to include all punctuation characters except vertical
+%%% bar
+\discretionaries |~!@$%^&*()_+`-=#{}[]:";'<>,.?\/|
+\ifx\eTeX\undefined
+ \def\eTeX{\hbox{\mathsurround=0pt $\varepsilon$-\kern-.125em\TeX}}%
+\fi
+\ifx\ExTeX\undefined
+ \def\ExTeX{\hbox{\mathsurround=0pt
+ $\textstyle\varepsilon_{\kern-0.15em\cal{X}}$\kern-.2em\TeX}}%
+\fi
+\def\eplain@Xe@reflect#1{%
+ \ifx\reflectbox\undefined
+ \errmessage{A graphics package must be loaded for \string\XeTeX}%
+ \else
+ \ifdim \fontdimen1\font>0pt
+ \raise 1.75ex \hbox{\kern.1em\rotatebox{180}{#1}}\kern-.1em
+ \else
+ \reflectbox{#1}%
+ \fi
+ \fi
+}%
+\def\eplain@Xe#1{\leavevmode
+ \smash{\hbox{X%
+ \setbox0=\hbox{\TeX}\setbox2=\hbox{E}%
+ \lower\dp0\hbox{\raise\dp2\hbox{\kern-.125em\eplain@Xe@reflect{E}}}%
+ \kern-.1667em #1}}}%
+\ifx\XeTeX\undefined
+ \def\XeTeX{\eplain@Xe\TeX}%
+\fi
+\ifx\XeLaTeX\undefined
+ \def\XeLaTeX{\eplain@Xe{\thinspace\LaTeX}}%
+\fi
+\def\blackbox{\vrule height .8ex width .6ex depth -.2ex \relax}% square bullet
+\def\makeblankbox#1#2{%
+ \ifvoid0
+ \errhelp = \@makeblankboxhelp
+ \errmessage{Box 0 is void}%
+ \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%
+ \dimen@=#1\advance\dimen@ by #2%
+ \vrule width\dimen@
+ \kern-#2%
+}%
+\newdimen\boxitspace \boxitspace = 3pt
+\long\def\boxit#1{%
+ \vbox{%
+ \ehrule
+ \hbox{%
+ \evrule
+ \kern\boxitspace
+ \vbox{\kern\boxitspace \parindent = 0pt #1\kern\boxitspace}%
+ \kern\boxitspace
+ \evrule
+ }%
+ \ehrule
+ }%
+}%
+\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
+}%
+\let\@plainnewif = \newif
+\let\@plainnewdimen = \newdimen
+\let\newif = \innernewif
+\let\newdimen = \innernewdimen
+\edef\@eplainoldandcode{\the\catcode`& }%
+\catcode`& = 11
+\toks0 = {%
+\edef\thinlines{\the\catcode`@ }%
+\catcode`@ = 11
+\let\@oldatcatcode = \thinlines
+\def\smash@@{\relax % \relax, in case this comes first in \halign
+ \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh
+ \fi\next}
+\def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh}
+\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}
+\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
+\edef\@oldandcatcode{\the\catcode`& }%
+\catcode`& = 11
+\def\&whilenoop#1{}%
+\def\&whiledim#1\do #2{\ifdim #1\relax#2\&iwhiledim{#1\relax#2}\fi}%
+\def\&iwhiledim#1{\ifdim #1\let\&nextwhile=\&iwhiledim
+ \else\let\&nextwhile=\&whilenoop\fi\&nextwhile{#1}}%
+\newif\if&negarg
+\newdimen\&wholewidth
+\newdimen\&halfwidth
+\font\tenln=line10
+\def\thinlines{\let\&linefnt\tenln \let\&circlefnt\tencirc
+ \&wholewidth\fontdimen8\tenln \&halfwidth .5\&wholewidth}%
+\def\thicklines{\let\&linefnt\tenlnw \let\&circlefnt\tencircw
+ \&wholewidth\fontdimen8\tenlnw \&halfwidth .5\&wholewidth}%
+\def\drawline(#1,#2)#3{\&xarg #1\relax \&yarg #2\relax \&linelen=#3\relax
+ \ifnum\&xarg =0 \&vline \else \ifnum\&yarg =0 \&hline \else \&sline\fi\fi}%
+\def\&sline{\leavevmode
+ \ifnum\&xarg< 0 \&negargtrue \&xarg -\&xarg \&yyarg -\&yarg
+ \else \&negargfalse \&yyarg \&yarg \fi
+ \ifnum \&yyarg >0 \&tempcnta\&yyarg \else \&tempcnta -\&yyarg \fi
+ \ifnum\&tempcnta>6 \&badlinearg \&yyarg0 \fi
+ \ifnum\&xarg>6 \&badlinearg \&xarg1 \fi
+ \setbox\&linechar\hbox{\&linefnt\&getlinechar(\&xarg,\&yyarg)}%
+ \ifnum \&yyarg >0 \let\&upordown\raise \&clnht\z@
+ \else\let\&upordown\lower \&clnht \ht\&linechar\fi
+ \&clnwd=\wd\&linechar
+ \&whiledim \&clnwd <\&linelen \do {%
+ \&upordown\&clnht\copy\&linechar
+ \advance\&clnht \ht\&linechar
+ \advance\&clnwd \wd\&linechar
+ }%
+ \advance\&clnht -\ht\&linechar
+ \advance\&clnwd -\wd\&linechar
+ \&tempdima\&linelen\advance\&tempdima -\&clnwd
+ \&tempdimb\&tempdima\advance\&tempdimb -\wd\&linechar
+ \hskip\&tempdimb \multiply\&tempdima \@m
+ \&tempcnta \&tempdima \&tempdima \wd\&linechar \divide\&tempcnta \&tempdima
+ \&tempdima \ht\&linechar \multiply\&tempdima \&tempcnta
+ \divide\&tempdima \@m
+ \advance\&clnht \&tempdima
+ \ifdim \&linelen <\wd\&linechar \hskip \wd\&linechar
+ \else\&upordown\&clnht\copy\&linechar\fi}%
+\def\&hline{\vrule height \&halfwidth depth \&halfwidth width \&linelen}%
+\def\&getlinechar(#1,#2){\&tempcnta#1\relax\multiply\&tempcnta 8
+ \advance\&tempcnta -9 \ifnum #2>0 \advance\&tempcnta #2\relax\else
+ \advance\&tempcnta -#2\relax\advance\&tempcnta 64 \fi
+ \char\&tempcnta}%
+\def\drawvector(#1,#2)#3{\&xarg #1\relax \&yarg #2\relax
+ \&tempcnta \ifnum\&xarg<0 -\&xarg\else\&xarg\fi
+ \ifnum\&tempcnta<5\relax \&linelen=#3\relax
+ \ifnum\&xarg =0 \&vvector \else \ifnum\&yarg =0 \&hvector
+ \else \&svector\fi\fi\else\&badlinearg\fi}%
+\def\&hvector{\ifnum\&xarg<0 \rlap{\&linefnt\&getlarrow(1,0)}\fi \&hline
+ \ifnum\&xarg>0 \llap{\&linefnt\&getrarrow(1,0)}\fi}%
+\def\&vvector{\ifnum \&yarg <0 \&downvector \else \&upvector \fi}%
+\def\&svector{\&sline
+ \&tempcnta\&yarg \ifnum\&tempcnta <0 \&tempcnta=-\&tempcnta\fi
+ \ifnum\&tempcnta <5
+ \if&negarg\ifnum\&yarg>0 % 3d quadrant; dp > 0
+ \llap{\lower\ht\&linechar\hbox to\&linelen{\&linefnt
+ \&getlarrow(\&xarg,\&yyarg)\hss}}\else % 4th quadrant; ht > 0
+ \llap{\hbox to\&linelen{\&linefnt\&getlarrow(\&xarg,\&yyarg)\hss}}\fi
+ \else\ifnum\&yarg>0 % 1st quadrant; ht > 0
+ \&tempdima\&linelen \multiply\&tempdima\&yarg
+ \divide\&tempdima\&xarg \advance\&tempdima-\ht\&linechar
+ \raise\&tempdima\llap{\&linefnt\&getrarrow(\&xarg,\&yyarg)}\else
+ \&tempdima\&linelen \multiply\&tempdima-\&yarg % 2d quadrant; dp > 0
+ \divide\&tempdima\&xarg
+ \lower\&tempdima\llap{\&linefnt\&getrarrow(\&xarg,\&yyarg)}\fi\fi
+ \else\&badlinearg\fi}%
+\def\&getlarrow(#1,#2){\ifnum #2 =\z@ \&tempcnta='33\else
+\&tempcnta=#1\relax\multiply\&tempcnta \sixt@@n \advance\&tempcnta
+-9 \&tempcntb=#2\relax\multiply\&tempcntb \tw@
+\ifnum \&tempcntb >0 \advance\&tempcnta \&tempcntb\relax
+\else\advance\&tempcnta -\&tempcntb\advance\&tempcnta 64
+\fi\fi\char\&tempcnta}%
+\def\&getrarrow(#1,#2){\&tempcntb=#2\relax
+\ifnum\&tempcntb < 0 \&tempcntb=-\&tempcntb\relax\fi
+\ifcase \&tempcntb\relax \&tempcnta='55 \or
+\ifnum #1<3 \&tempcnta=#1\relax\multiply\&tempcnta
+24 \advance\&tempcnta -6 \else \ifnum #1=3 \&tempcnta=49
+\else\&tempcnta=58 \fi\fi\or
+\ifnum #1<3 \&tempcnta=#1\relax\multiply\&tempcnta
+24 \advance\&tempcnta -3 \else \&tempcnta=51\fi\or
+\&tempcnta=#1\relax\multiply\&tempcnta
+\sixt@@n \advance\&tempcnta -\tw@ \else
+\&tempcnta=#1\relax\multiply\&tempcnta
+\sixt@@n \advance\&tempcnta 7 \fi\ifnum #2<0 \advance\&tempcnta 64 \fi
+\char\&tempcnta}%
+\def\&vline{\ifnum \&yarg <0 \&downline \else \&upline\fi}%
+\def\&upline{\hbox to \z@{\hskip -\&halfwidth \vrule width \&wholewidth
+ height \&linelen depth \z@\hss}}%
+\def\&downline{\hbox to \z@{\hskip -\&halfwidth \vrule width \&wholewidth
+ height \z@ depth \&linelen \hss}}%
+\def\&upvector{\&upline\setbox\&tempboxa\hbox{\&linefnt\char'66}\raise
+ \&linelen \hbox to\z@{\lower \ht\&tempboxa\box\&tempboxa\hss}}%
+\def\&downvector{\&downline\lower \&linelen
+ \hbox to \z@{\&linefnt\char'77\hss}}%
+\def\&badlinearg{\errmessage{Bad \string\arrow\space argument.}}%
+\thinlines
+\countdef\&xarg 0
+\countdef\&yarg 2
+\countdef\&yyarg 4
+\countdef\&tempcnta 6
+\countdef\&tempcntb 8
+\dimendef\&linelen 0
+\dimendef\&clnwd 2
+\dimendef\&clnht 4
+\dimendef\&tempdima 6
+\dimendef\&tempdimb 8
+\chardef\@arrbox 0
+\chardef\&linechar 2
+\chardef\&tempboxa 2 % \&linechar and \&tempboxa don't interfere.
+\let\lft^%
+\let\rt_% distinguish between \rt and \lft
+\newif\if@pslope % test for positive slope
+\def\@findslope(#1,#2){\ifnum#1>0
+ \ifnum#2>0 \@pslopetrue \else\@pslopefalse\fi \else
+ \ifnum#2>0 \@pslopefalse \else\@pslopetrue\fi\fi}%
+\def\generalsmap(#1,#2){\getm@rphposn(#1,#2)\plnmorph\futurelet\next\addm@rph}%
+\def\sline(#1,#2){\setbox\@arrbox=\hbox{\drawline(#1,#2){\sarrowlength}}%
+ \@findslope(#1,#2)\d@@blearrfalse\generalsmap(#1,#2)}%
+\def\arrow(#1,#2){\setbox\@arrbox=\hbox{\drawvector(#1,#2){\sarrowlength}}%
+ \@findslope(#1,#2)\d@@blearrfalse\generalsmap(#1,#2)}%
+\newif\ifd@@blearr
+\def\bisline(#1,#2){\@findslope(#1,#2)%
+ \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi
+ \getch@nnel(#1,#2)\setbox\@arrbox=\hbox{\@upordown\@vchannel
+ \rlap{\drawline(#1,#2){\sarrowlength}}%
+ \hskip\@hchannel\hbox{\drawline(#1,#2){\sarrowlength}}}%
+ \d@@blearrtrue\generalsmap(#1,#2)}%
+\def\biarrow(#1,#2){\@findslope(#1,#2)%
+ \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi
+ \getch@nnel(#1,#2)\setbox\@arrbox=\hbox{\@upordown\@vchannel
+ \rlap{\drawvector(#1,#2){\sarrowlength}}%
+ \hskip\@hchannel\hbox{\drawvector(#1,#2){\sarrowlength}}}%
+ \d@@blearrtrue\generalsmap(#1,#2)}%
+\def\adjarrow(#1,#2){\@findslope(#1,#2)%
+ \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi
+ \getch@nnel(#1,#2)\setbox\@arrbox=\hbox{\@upordown\@vchannel
+ \rlap{\drawvector(#1,#2){\sarrowlength}}%
+ \hskip\@hchannel\hbox{\drawvector(-#1,-#2){\sarrowlength}}}%
+ \d@@blearrtrue\generalsmap(#1,#2)}%
+\newif\ifrtm@rph
+\def\@shiftmorph#1{\hbox{\setbox0=\hbox{$\scriptstyle#1$}%
+ \setbox1=\hbox{\hskip\@hm@rphshift\raise\@vm@rphshift\copy0}%
+ \wd1=\wd0 \ht1=\ht0 \dp1=\dp0 \box1}}%
+\def\@hm@rphshift{\ifrtm@rph
+ \ifdim\hmorphposnrt=\z@\hmorphposn\else\hmorphposnrt\fi \else
+ \ifdim\hmorphposnlft=\z@\hmorphposn\else\hmorphposnlft\fi \fi}%
+\def\@vm@rphshift{\ifrtm@rph
+ \ifdim\vmorphposnrt=\z@\vmorphposn\else\vmorphposnrt\fi \else
+ \ifdim\vmorphposnlft=\z@\vmorphposn\else\vmorphposnlft\fi \fi}%
+\def\addm@rph{\ifx\next\lft\let\temp=\lftmorph\else
+ \ifx\next\rt\let\temp=\rtmorph\else\let\temp\relax\fi\fi \temp}%
+\def\plnmorph{\dimen1\wd\@arrbox \ifdim\dimen1<\z@ \dimen1-\dimen1\fi
+ \vcenter{\box\@arrbox}}%
+\def\lftmorph\lft#1{\rtm@rphfalse \setbox0=\@shiftmorph{#1}%
+ \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi
+ \llap{\@upordown\@vmorphdflt\hbox to\dimen1{\hss % \dimen1=\wd\@arrbox
+ \llap{\box0}\hss}\hskip\@hmorphdflt}\futurelet\next\addm@rph}%
+\def\rtmorph\rt#1{\rtm@rphtrue \setbox0=\@shiftmorph{#1}%
+ \if@pslope \let\@upordown\lower \else \let\@upordown\raise\fi
+ \llap{\@upordown\@vmorphdflt\hbox to\dimen1{\hss
+ \rlap{\box0}\hss}\hskip-\@hmorphdflt}\futurelet\next\addm@rph}%
+\def\getm@rphposn(#1,#2){\ifd@@blearr \dimen@\morphdist \advance\dimen@ by
+ .5\channelwidth \@getshift(#1,#2){\@hmorphdflt}{\@vmorphdflt}{\dimen@}\else
+ \@getshift(#1,#2){\@hmorphdflt}{\@vmorphdflt}{\morphdist}\fi}%
+\def\getch@nnel(#1,#2){\ifdim\hchannel=\z@ \ifdim\vchannel=\z@
+ \@getshift(#1,#2){\@hchannel}{\@vchannel}{\channelwidth}%
+ \else \@hchannel\hchannel \@vchannel\vchannel \fi
+ \else \@hchannel\hchannel \@vchannel\vchannel \fi}%
+\def\@getshift(#1,#2)#3#4#5{\dimen@ #5\relax
+ \&xarg #1\relax \&yarg #2\relax
+ \ifnum\&xarg<0 \&xarg -\&xarg \fi
+ \ifnum\&yarg<0 \&yarg -\&yarg \fi
+ \ifnum\&xarg<\&yarg \&negargtrue \&yyarg\&xarg \&xarg\&yarg \&yarg\&yyarg\fi
+ \ifcase\&xarg \or % There is no case 0
+ \ifcase\&yarg % case 1
+ \dimen@i \z@ \dimen@ii \dimen@ \or % case (1,0)
+ \dimen@i .7071\dimen@ \dimen@ii .7071\dimen@ \fi \or
+ \ifcase\&yarg % case 2
+ \or % case 0,2 wrong
+ \dimen@i .4472\dimen@ \dimen@ii .8944\dimen@ \fi \or
+ \ifcase\&yarg % case 3
+ \or % case 0,3 wrong
+ \dimen@i .3162\dimen@ \dimen@ii .9486\dimen@ \or
+ \dimen@i .5547\dimen@ \dimen@ii .8321\dimen@ \fi \or
+ \ifcase\&yarg % case 4
+ \or % case 0,2,4 wrong
+ \dimen@i .2425\dimen@ \dimen@ii .9701\dimen@ \or\or
+ \dimen@i .6\dimen@ \dimen@ii .8\dimen@ \fi \or
+ \ifcase\&yarg % case 5
+ \or % case 0,5 wrong
+ \dimen@i .1961\dimen@ \dimen@ii .9801\dimen@ \or
+ \dimen@i .3714\dimen@ \dimen@ii .9284\dimen@ \or
+ \dimen@i .5144\dimen@ \dimen@ii .8575\dimen@ \or
+ \dimen@i .6247\dimen@ \dimen@ii .7801\dimen@ \fi \or
+ \ifcase\&yarg % case 6
+ \or % case 0,2,3,4,6 wrong
+ \dimen@i .1645\dimen@ \dimen@ii .9864\dimen@ \or\or\or\or
+ \dimen@i .6402\dimen@ \dimen@ii .7682\dimen@ \fi \fi
+ \if&negarg \&tempdima\dimen@i \dimen@i\dimen@ii \dimen@ii\&tempdima\fi
+ #3\dimen@i\relax #4\dimen@ii\relax }%
+\catcode`\&=4 % Back to alignment tab
+}%
+\catcode`& = 4
+\toks2 = {%
+\catcode`\&=4 % Back to alignment tab
+\def\generalhmap{\futurelet\next\@generalhmap}%
+\def\@generalhmap{\ifx\next^ \let\temp\generalhm@rph\else
+ \ifx\next_ \let\temp\generalhm@rph\else \let\temp\m@kehmap\fi\fi \temp}%
+\def\generalhm@rph#1#2{\ifx#1^
+ \toks@=\expandafter{\the\toks@#1{\rtm@rphtrue\@shiftmorph{#2}}}\else
+ \toks@=\expandafter{\the\toks@#1{\rtm@rphfalse\@shiftmorph{#2}}}\fi
+ \generalhmap}%
+\def\m@kehmap{\mathrel{\smash@@{\the\toks@}}}%
+\def\mapright{\toks@={\mathop{\vcenter{\smash@@{\drawrightarrow}}}\limits}%
+ \generalhmap}%
+\def\mapleft{\toks@={\mathop{\vcenter{\smash@@{\drawleftarrow}}}\limits}%
+ \generalhmap}%
+\def\bimapright{\toks@={\mathop{\vcenter{\smash@@{\drawbirightarrow}}}\limits}%
+ \generalhmap}%
+\def\bimapleft{\toks@={\mathop{\vcenter{\smash@@{\drawbileftarrow}}}\limits}%
+ \generalhmap}%
+\def\adjmapright{\toks@={\mathop{\vcenter{\smash@@{\drawadjrightarrow}}}\limits}%
+ \generalhmap}%
+\def\adjmapleft{\toks@={\mathop{\vcenter{\smash@@{\drawadjleftarrow}}}\limits}%
+ \generalhmap}%
+\def\hline{\toks@={\mathop{\vcenter{\smash@@{\drawhline}}}\limits}%
+ \generalhmap}%
+\def\bihline{\toks@={\mathop{\vcenter{\smash@@{\drawbihline}}}\limits}%
+ \generalhmap}%
+\def\drawrightarrow{\hbox{\drawvector(1,0){\harrowlength}}}%
+\def\drawleftarrow{\hbox{\drawvector(-1,0){\harrowlength}}}%
+\def\drawbirightarrow{\hbox{\raise.5\channelwidth
+ \hbox{\drawvector(1,0){\harrowlength}}\lower.5\channelwidth
+ \llap{\drawvector(1,0){\harrowlength}}}}%
+\def\drawbileftarrow{\hbox{\raise.5\channelwidth
+ \hbox{\drawvector(-1,0){\harrowlength}}\lower.5\channelwidth
+ \llap{\drawvector(-1,0){\harrowlength}}}}%
+\def\drawadjrightarrow{\hbox{\raise.5\channelwidth
+ \hbox{\drawvector(-1,0){\harrowlength}}\lower.5\channelwidth
+ \llap{\drawvector(1,0){\harrowlength}}}}%
+\def\drawadjleftarrow{\hbox{\raise.5\channelwidth
+ \hbox{\drawvector(1,0){\harrowlength}}\lower.5\channelwidth
+ \llap{\drawvector(-1,0){\harrowlength}}}}%
+\def\drawhline{\hbox{\drawline(1,0){\harrowlength}}}%
+\def\drawbihline{\hbox{\raise.5\channelwidth
+ \hbox{\drawline(1,0){\harrowlength}}\lower.5\channelwidth
+ \llap{\drawline(1,0){\harrowlength}}}}%
+\def\generalvmap{\futurelet\next\@generalvmap}%
+\def\@generalvmap{\ifx\next\lft \let\temp\generalvm@rph\else
+ \ifx\next\rt \let\temp\generalvm@rph\else \let\temp\m@kevmap\fi\fi \temp}%
+\toksdef\toks@@=1
+\def\generalvm@rph#1#2{\ifx#1\rt % append
+ \toks@=\expandafter{\the\toks@
+ \rlap{$\vcenter{\rtm@rphtrue\@shiftmorph{#2}}$}}\else % prepend
+ \toks@@={\llap{$\vcenter{\rtm@rphfalse\@shiftmorph{#2}}$}}%
+ \toks@=\expandafter\expandafter\expandafter{\expandafter\the\expandafter
+ \toks@@ \the\toks@}\fi \generalvmap}%
+\def\m@kevmap{\the\toks@}%
+\def\mapdown{\toks@={\vcenter{\drawdownarrow}}\generalvmap}%
+\def\mapup{\toks@={\vcenter{\drawuparrow}}\generalvmap}%
+\def\bimapdown{\toks@={\vcenter{\drawbidownarrow}}\generalvmap}%
+\def\bimapup{\toks@={\vcenter{\drawbiuparrow}}\generalvmap}%
+\def\adjmapdown{\toks@={\vcenter{\drawadjdownarrow}}\generalvmap}%
+\def\adjmapup{\toks@={\vcenter{\drawadjuparrow}}\generalvmap}%
+\def\vline{\toks@={\vcenter{\drawvline}}\generalvmap}%
+\def\bivline{\toks@={\vcenter{\drawbivline}}\generalvmap}%
+\def\drawdownarrow{\hbox to5pt{\hss\drawvector(0,-1){\varrowlength}\hss}}%
+\def\drawuparrow{\hbox to5pt{\hss\drawvector(0,1){\varrowlength}\hss}}%
+\def\drawbidownarrow{\hbox to5pt{\hss\hbox{\drawvector(0,-1){\varrowlength}}%
+ \hskip\channelwidth\hbox{\drawvector(0,-1){\varrowlength}}\hss}}%
+\def\drawbiuparrow{\hbox to5pt{\hss\hbox{\drawvector(0,1){\varrowlength}}%
+ \hskip\channelwidth\hbox{\drawvector(0,1){\varrowlength}}\hss}}%
+\def\drawadjdownarrow{\hbox to5pt{\hss\hbox{\drawvector(0,-1){\varrowlength}}%
+ \hskip\channelwidth\lower\varrowlength
+ \hbox{\drawvector(0,1){\varrowlength}}\hss}}%
+\def\drawadjuparrow{\hbox to5pt{\hss\hbox{\drawvector(0,1){\varrowlength}}%
+ \hskip\channelwidth\raise\varrowlength
+ \hbox{\drawvector(0,-1){\varrowlength}}\hss}}%
+\def\drawvline{\hbox to5pt{\hss\drawline(0,1){\varrowlength}\hss}}%
+\def\drawbivline{\hbox to5pt{\hss\hbox{\drawline(0,1){\varrowlength}}%
+ \hskip\channelwidth\hbox{\drawline(0,1){\varrowlength}}\hss}}%
+\def\commdiag#1{\null\,
+ \vcenter{\commdiagbaselines
+ \m@th\ialign{\hfil$##$\hfil&&\hfil$\mkern4mu ##$\hfil\crcr
+ \mathstrut\crcr\noalign{\kern-\baselineskip}
+ #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}%
+\def\commdiagbaselines{\baselineskip15pt \lineskip3pt \lineskiplimit3pt }%
+\def\gridcommdiag#1{\null\,
+ \vcenter{\offinterlineskip
+ \m@th\ialign{&\vbox to\vgrid{\vss
+ \hbox to\hgrid{\hss\smash@@{$##$}\hss}}\crcr
+ \mathstrut\crcr\noalign{\kern-\vgrid}
+ #1\crcr\mathstrut\crcr\noalign{\kern-.5\vgrid}}}\,}%
+\newdimen\harrowlength \harrowlength=60pt
+\newdimen\varrowlength \varrowlength=.618\harrowlength
+\newdimen\sarrowlength \sarrowlength=\harrowlength
+\newdimen\hmorphposn \hmorphposn=\z@
+\newdimen\vmorphposn \vmorphposn=\z@
+\newdimen\morphdist \morphdist=4pt
+\dimendef\@hmorphdflt 0 % These two dimensions are
+\dimendef\@vmorphdflt 2 % defined by \getm@rphposn
+\newdimen\hmorphposnrt \hmorphposnrt=\z@
+\newdimen\hmorphposnlft \hmorphposnlft=\z@
+\newdimen\vmorphposnrt \vmorphposnrt=\z@
+\newdimen\vmorphposnlft \vmorphposnlft=\z@
+\let\hmorphposnup=\hmorphposnrt
+\let\hmorphposndn=\hmorphposnlft
+\let\vmorphposnup=\vmorphposnrt
+\let\vmorphposndn=\vmorphposnlft
+\newdimen\hgrid \hgrid=15pt
+\newdimen\vgrid \vgrid=15pt
+\newdimen\hchannel \hchannel=0pt
+\newdimen\vchannel \vchannel=0pt
+\newdimen\channelwidth \channelwidth=3pt
+\dimendef\@hchannel 0 % Defined via the
+\dimendef\@vchannel 2 % macro \getch@nnel
+\catcode`& = \@oldandcatcode
+\catcode`@ = \@oldatcatcode
+}%
+\let\newif = \@plainnewif
+\let\newdimen = \@plainnewdimen
+\ifx\noarrow\@undefined \the\toks0 \the\toks2 \fi
+\catcode`& = \@eplainoldandcode
+\def\environment#1{%
+ \ifx\@groupname\@undefined\else
+ \errhelp = \@unnamedendgrouphelp
+ \errmessage{`\@groupname' was not closed by \string\endenvironment}%
+ \fi
+ \edef\@groupname{#1}%
+ \begingroup
+ \let\@groupname = \@undefined
+}%
+\def\endenvironment#1{%
+ \endgroup
+ \edef\@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{X} 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 named X, but^^J%
+ you ended one named Y. Maybe you made a typo in one^^J%
+ or the other of the names?}%
+\newif\ifenvironment
+\def\checkenv{\ifenvironment \errhelp = \@interwovenenvhelp
+ \errmessage{Interwoven environments}%
+ \egroup \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.}%
+\newtoks\previouseverydisplay
+\let\@leftleftfill\relax % as it was
+\newdimen\leftdisplayindent \leftdisplayindent=\parindent
+\newif\if@leftdisplays
+\def\leftdisplays{%
+ \if@leftdisplays\else
+ \previouseverydisplay = \everydisplay
+ \everydisplay = {\the\previouseverydisplay \leftdisplaysetup}%
+ \let\@save@maybedisableeqno = \@maybedisableeqno
+ \let\@saveeqno = \eqno
+ \let\@saveleqno = \leqno
+ \let\@saveeqalignno = \eqalignno
+ \let\@saveleqalignno = \leqalignno
+ \let\@maybedisableeqno = \relax
+ \def\eqno{\hfill\textstyle\enspace}%
+ \def\leqno{%
+ \hfill
+ \hbox to0pt\bgroup
+ \kern-\displaywidth
+ \kern-\leftdisplayindent % I'll use just \leftdisplayindent
+ $\aftergroup\@leftleqnoend % inserted after ending $
+ }%
+ \@redefinealignmentdisplays
+ \@leftdisplaystrue
+ \fi
+}%
+\newbox\@lignbox
+\newdimen\disprevdepth
+\def\centereddisplays{%
+ \if@leftdisplays
+ \everydisplay = \previouseverydisplay
+ \let\@maybedisableeqno = \@save@maybedisableeqno
+ \let\eqno = \@saveeqno
+ \let\leqno = \@saveleqno
+ \let\eqalignno = \@saveeqalignno
+ \let\leqalignno = \@saveleqalignno
+ \@leftdisplaysfalse
+ \fi
+}%
+\def\leftdisplaysetup{%
+ \dimen@ = \leftdisplayindent
+ \advance\dimen@ by \leftskip
+ \advance\displayindent by \dimen@
+ \advance\displaywidth by -\dimen@
+ \halign\bgroup##\cr \noalign\bgroup
+ \disprevdepth = \prevdepth
+ \setbox\z@ = \hbox to\displaywidth\bgroup
+ $\displaystyle
+ \aftergroup\@lefteqend % inserted after ending $
+}
+\def\@lefteqend{% gets inserted between the ending $$
+ \hfil\egroup% end box 0
+ \@putdisplay}
+\def\@leftleqnoend{\hss \egroup $}% end the \hbox to 0pt for \leqno, restore $
+\def\@putdisplay{%
+ \ifvoid\@lignbox % Ordinary display; use it.
+ \moveright\displayindent\box\z@
+ \else % alignment display; unwrap alignment
+ \prevdepth = \dp\@lignbox % affects the skip *below*
+ \unvbox\@lignbox
+ \fi
+ \egroup\egroup % end \noalign, end outer \halign
+ $% restore first $ of trailing $$
+}
+\def\@redefinealignmentdisplays{%
+ \def\displaylines##1{
+ \global\setbox\@lignbox\vbox{%
+ \prevdepth = \disprevdepth
+ \displ@y
+ \tabskip\displayindent
+ \halign{\hbox to\displaywidth
+ {$\@lign\displaystyle####\hfil$\hfil}\crcr
+ ##1\crcr}}}%
+ \def\eqalignno##1{%
+ \def\eqno{&}%
+ \def\leqno{&}%
+ \global\setbox\@lignbox\vbox{%
+ \prevdepth = \disprevdepth
+ \displ@y
+ \advance\displaywidth by \displayindent
+ \tabskip\displayindent
+ \halign to\displaywidth{%
+ \hfil $\@lign\displaystyle{####}$\@leftleftfill\tabskip\z@skip
+ &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
+ &\llap{$\@lign####$}\tabskip\z@skip\crcr
+ ##1\crcr}}}%
+ \def\leqalignno##1{%
+ \def\eqno{&}%
+ \def\leqno{&}%
+ \global\setbox\@lignbox\vbox{%
+ \prevdepth = \disprevdepth
+ \displ@y
+ \advance\displaywidth by \displayindent
+ \tabskip\displayindent
+ \halign to\displaywidth{%
+ \hfil $\@lign\displaystyle{####}$\@leftleftfill\tabskip\z@skip
+ &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
+ &\kern-\displaywidth
+ \rlap{\kern\displayindent \kern-\leftdisplayindent$\@lign####$}%
+ \tabskip\displaywidth\crcr
+ ##1\crcr}}}%
+}%
+\let\@primitivenoalign = \noalign
+\newtoks\@everynoalign
+\def\@lefteqalignonoalign#1{%
+ \@primitivenoalign{%
+ \advance\leftskip by -\parindent
+ \advance\leftskip by -\leftdisplayindent
+ \parskip = 0pt
+ \parindent = 0pt
+ \the\@everynoalign
+ #1%
+ }%
+}%
+\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}%
+\def\today{\the\day\ \fullmonthname\ \the\year}%
+\newskip\abovelistskipamount \abovelistskipamount = .5\baselineskip
+ \newcount\abovelistpenalty \abovelistpenalty = 10000
+ \def\abovelistskip{\vpenalty\abovelistpenalty \vskip\abovelistskipamount}%
+\newskip\interitemskipamount \interitemskipamount = 0pt
+ \newcount\belowlistpenalty \belowlistpenalty = -50
+ \def\belowlistskip{\vpenalty\belowlistpenalty \vskip\belowlistskipamount}%
+\newskip\belowlistskipamount \belowlistskipamount = .5\baselineskip
+ \newcount\interitempenalty \interitempenalty = 0
+ \def\interitemskip{\vpenalty\interitempenalty \vskip\interitemskipamount}%
+\newdimen\listleftindent \listleftindent = 0pt
+\newdimen\listrightindent \listrightindent = 0pt
+\let\listmarkerspace = \enspace
+\newtoks\everylist
+\def\listcompact{\interitemskipamount = 0pt \relax}%
+\newdimen\@listindent
+\def\beginlist{%
+ \abovelistskip
+ \@listindent = \parindent
+ \advance\@listindent by \listleftindent
+ \advance\leftskip by \@listindent
+ \advance\rightskip by \listrightindent
+ \itemnumber = 1
+ \the\everylist
+}%
+\def\li{\@getoptionalarg\@finli}%
+\def\@finli{%
+ \let\@lioptarg\@optionalarg
+ \ifx\@lioptarg\empty \else
+ \begingroup
+ \@@hldestoff
+ \expandafter\writeitemxref\expandafter{\@lioptarg}%
+ \endgroup
+ \fi
+ \ifnum\itemnumber=1 \else \interitemskip \fi
+ \begingroup
+ \ifx\@lioptarg\empty \else
+ \toks@ = \expandafter{\@lioptarg}%
+ \let\li@nohldest@marker\marker
+ \edef\marker{\noexpand\hldest@impl{li}{\the\toks@}\noexpand\li@nohldest@marker}%
+ \fi
+ \printitem
+ \endgroup
+ \advance\itemnumber by 1
+ \advance\itemletter by 1
+ \advance\itemromannumeral by 1
+ \ignorespaces
+}%
+\def\writeitemxref#1{\definexref{#1}\marker{item}}%
+\def\printitem{%
+ \par
+ \nobreak
+ \vskip-\parskip
+ \noindent
+ \printmarker\marker
+}%
+\def\printmarker#1{\llap{\marker \enspace}}%
+\def\endlist{\belowlistskip}%
+\newcount\numberedlistdepth
+\newcount\itemnumber
+\newcount\itemletter
+\newcount\itemromannumeral
+\def\numberedmarker{%
+ \ifcase\numberedlistdepth
+ (impossible)%
+ \or \printitemnumber
+ \or \printitemletter
+ \or \printitemromannumeral
+ \else *%
+ \fi
+}%
+\def\printitemnumber{\number\itemnumber}%
+\def\printitemletter{\char\the\itemletter}%
+\def\printitemromannumeral{\romannumeral\itemromannumeral}%
+\def\numberedprintmarker#1{\llap{#1) \listmarkerspace}}%
+\def\numberedlist{\environment{@numbered-list}%
+ \advance\numberedlistdepth by 1
+ \itemletter = `a
+ \itemromannumeral = 1
+ \beginlist
+ \let\marker = \numberedmarker
+ \let\printmarker = \numberedprintmarker
+}%
+\def\endnumberedlist{%
+ \par
+ \endenvironment{@numbered-list}%
+ \endlist
+}%
+\let\orderedlist = \numberedlist
+\let\endorderedlist = \endnumberedlist
+\newcount\unorderedlistdepth
+\def\unorderedmarker{%
+ \ifcase\unorderedlistdepth
+ (impossible)%
+ \or \blackbox
+ \or ---%
+ \else *%
+ \fi
+}%
+\def\unorderedprintmarker#1{\llap{#1\listmarkerspace}}%
+\def\unorderedlist{\environment{@unordered-list}%
+ \advance\unorderedlistdepth by 1
+ \beginlist
+ \let\marker = \unorderedmarker
+ \let\printmarker = \unorderedprintmarker
+}%
+\def\endunorderedlist{%
+ \par
+ \endenvironment{@unordered-list}%
+ \endlist
+}%
+\def\listing#1{%
+ \par \begingroup
+ \@setuplisting
+ \setuplistinghook
+ \input #1
+ \endgroup
+}%
+\let\setuplistinghook = \relax
+\def\linenumberedlisting{%
+ \ifx\lineno\undefined \innernewcount\lineno \fi
+ \lineno = 0
+ \everypar = {\advance\lineno by 1 \printlistinglineno}%
+}%
+\def\printlistinglineno{\llap{[\the\lineno]\quad}}%
+\def\nolastlinelisting{\aftergroup\@removeboxes}%
+\def\@removeboxes{%
+ \setbox0 = \lastbox
+ \ifvoid0
+ \ignorespaces % Ignore spaces after the \obeywhitespace's group.
+ \else
+ \expandafter\@removeboxes
+ \fi
+}%
+{%
+ \makeactive\^^L
+ \let^^L = \relax
+ \gdef\@setuplisting{%
+ \uncatcodespecials
+ \obeywhitespace
+ \makeactive\`
+ \makeactive\^^I
+ \makeactive\^^L
+ \def^^L{\vfill\break}%
+ \parskip = 0pt
+ \listingfont
+ }%
+}%
+\def\listingfont{\tt}%
+{%
+ \makeactive\`
+ \gdef`{\relax\lq}% Defeat ligatures.
+}%
+{%
+ \makeactive\^^I
+ \gdef^^I{\hskip8\fontdimen2\font \relax}%
+}%
+\def\verbatimescapechar#1{%
+ \gdef\@makeverbatimescapechar{%
+ \@makeverbatimdoubleescape #1%
+ \catcode`#1 = 0
+ }%
+}%
+\def\@makeverbatimdoubleescape#1{%
+ \catcode`#1 = \other
+ \begingroup
+ \lccode`\* = `#1%
+ \lowercase{\endgroup \ece\def*{*}}%
+}%
+\verbatimescapechar\| % initially escapechar is |
+\def\verbatim{\begingroup
+ \uncatcodespecials
+ \makeactive\` % make space character a single space, not stretchable
+ \@makeverbatimescapechar
+ \tt\obeywhitespace}
+\let\endverbatim = \endgroup
+\def\definecontentsfile#1{%
+ \ece\innernewwrite{#1file}%
+ \ece\innernewif{if@#1fileopened}%
+ \ece\let{#1filebasename} = \jobname
+ \ece\def{open#1file}{\opencontentsfile{#1}}%
+ \ece\def{write#1entry}{\writecontentsentry{#1}}%
+ \ece\def{writenumbered#1entry}{\writenumberedcontentsentry{#1}}%
+ \ece\def{writenumbered#1line}{\writenumberedcontentsline{#1}}%
+ \ece\innernewif{ifrewrite#1file} \csname rewrite#1filetrue\endcsname
+ \ece\def{read#1file}{\readcontentsfile{#1}}%
+}%
+\definecontentsfile{toc}%
+\def\opencontentsfile#1{%
+ \csname if@#1fileopened\endcsname \else
+ \ece{\immediate\openout}{#1file} = \csname #1filebasename\endcsname.#1
+ \ece\global{@#1fileopenedtrue}%
+ \fi
+}%
+\def\writecontentsentry#1#2#3{\writenumberedcontentsentry{#1}{#2}{#3}{}}%
+\def\writenumberedcontentsentry#1#2#3#4{%
+ \csname ifrewrite#1file\endcsname
+ \writenumberedcontents@cmdname{#1}{#2}%
+ \def\temp{#3}% the text
+ \toks2 = \expandafter{#4}%
+ \edef\cs{\the\toks2}%
+ \edef\@wr{%
+ \write\csname #1file\endcsname{%
+ \the\toks0 % the \toc...entry control sequence
+ {\sanitize\temp}% the text
+ \ifx\empty\cs\else {\sanitize\cs}\fi % a secondary number, or nothing
+ {\noexpand\folio}% the page number
+ }%
+ }%
+ \@wr
+ \fi
+ \ignorespaces
+}%
+\def\writenumberedcontentsline#1#2#3#4{%
+ \csname ifrewrite#1file\endcsname
+ \writenumberedcontents@cmdname{#1}{#2}%
+ \def\temp{#4}% the text
+ \toks2 = \expandafter{#3}%
+ \edef\cs{\the\toks2}%
+ \edef\@wr{%
+ \write\csname #1file\endcsname{%
+ \the\toks0 % the \toc...entry control sequence
+ \ifx\empty\cs\else {\sanitize\cs}\fi % a secondary number, or nothing
+ {\sanitize\temp}% the text
+ {\noexpand\folio}% the page number
+ }%
+ }%
+ \@wr
+ \fi
+ \ignorespaces
+}%
+\def\writenumberedcontents@cmdname#1#2{%
+ \csname open#1file\endcsname
+ \edef\temp{#2}% Expand PART fully and see if this produced an integer.
+ \expandafter\if\expandafter\isinteger\expandafter{\temp}%
+ \toks0 = {\expandafter\noexpand \csname #1entry\endcsname}%
+ \edef\temp{\the\toks0{\temp}}%
+ \toks0 = \expandafter{\temp}%
+ \else
+ \toks0 = {\expandafter\noexpand \csname #1#2entry\endcsname}%
+ \fi
+}%
+\def\readcontentsfile#1{%
+ \edef\temp{%
+ \noexpand\testfileexistence[\csname #1filebasename\endcsname]{#1}%
+ }\temp
+ \if@fileexists
+ \input \csname #1filebasename\endcsname.#1\relax
+ \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\tocentry#1#2#3{\line{\rm\hskip#1em #2 \dotfill\ #3}}%
+\let\ifxrefwarning = \iftrue
+\def\xrefwarningtrue{\@citewarningtrue \let\ifxrefwarning = \iftrue}%
+\def\xrefwarningfalse{\@citewarningfalse \let\ifxrefwarning = \iffalse}%
+\begingroup
+ \catcode`\_ = 8
+ \gdef\xrlabel#1{#1_x}%
+\endgroup
+\def\xrdef#1{%
+ \begingroup
+ \hldest@impl{xrdef}{#1}%
+ \begingroup
+ \@@hldestoff
+ \definexref{#1}{\noexpand\folio}{page}%
+ \endgroup
+ \endgroup
+ \ignorespaces
+}%
+\def\definexref#1#2#3{%
+ \hldest@impl{definexref}{#1}%
+ \edef\temp{#1}%
+ \readauxfile
+ \edef\@wr{\noexpand\writeaux{\string\@definelabel{\temp}{#2}{#3}}}%
+ \@wr
+ \ignorespaces
+}%
+\def\@definelabel#1{% #2 and #3 will be read later.
+ \begingroup % Will be ended in \@definelabel@nocheck.
+ \expandafter\ifx\csname\xrlabel{#1}\endcsname \relax
+ \expandafter\@definelabel@nocheck
+ \else
+ \expandafter\@definelabel@warn
+ \fi
+ {#1}%
+}%
+\def\@definelabel@nocheck#1#2#3{%
+ \expandafter\gdef\csname\xrlabel{#1}\endcsname{#2}%
+ \setpropertyglobal{\xrlabel{#1}}{class}{#3}%
+ \endgroup % From \@definelabel.
+}%
+\def\@definelabel@warn#1#2#3{%
+ \message{^^J\linenumber Label `#1' multiply defined,
+ value `#2' of class `#3' overwriting value
+ `\csname\xrlabel{#1}\endcsname' of class
+ `\getproperty{\xrlabel{#1}}{class}'.}%
+ \@definelabel@nocheck{#1}{#2}{#3}%
+}%
+\def\reftie{\penalty\@M \ }% Do not rely on `~' being defined as a tie.
+\let\refspace\
+\def\xrefn{\@getoptionalarg\@finxrefn}%
+\def\@finxrefn#1{%
+ \hlstart@impl{ref}{#1}%
+ \ifx\@optionalarg\empty \else
+ \let\@xrefnoptarg\@optionalarg
+ \readauxfile
+ {\@@hloff\@xrefnoptarg}\reftie
+ \fi
+ \plain@xrefn{#1}%
+ \hlend@impl{ref}%
+}%
+\def\plain@xrefn#1{%
+ \readauxfile
+ \expandafter \ifx\csname\xrlabel{#1}\endcsname\relax
+ \if@citewarning
+ \message{\linenumber Undefined label `#1'.}%
+ \fi
+ \expandafter\def\csname\xrlabel{#1}\endcsname{%
+ `{\tt
+ \escapechar = -1
+ \expandafter\string\csname#1\endcsname
+ }'%
+ }%
+ \fi
+ \csname\xrlabel{#1}\endcsname % Always produce something.
+}%
+\let\refn = \xrefn
+\def\xrefpageword{p.\thinspace}%
+\def\xref{\@getoptionalarg\@finxref}%
+\def\@finxref#1{%
+ \hlstart@impl{xref}{#1}%
+ \ifx\@optionalarg\empty \else
+ {\@@hloff\@optionalarg}\refspace
+ \fi
+ \xrefpageword\plain@xrefn{#1}%
+ \hlend@impl{xref}%
+}%
+\def\@maybewarnref{%
+ \ifundefined{amsppt.sty}%
+ \else
+ \message{Warning: amsppt.sty and Eplain both define \string\ref. See
+ the Eplain manual.}%
+ \let\amsref = \ref
+ \fi
+ \let\ref = \eplainref
+ \ref
+}
+\let\ref = \@maybewarnref
+\def\eplainref{\@getoptionalarg\@fineplainref}%
+\def\@fineplainref{\@generalref{1}{}}%
+\def\refs{\let\@optionalarg\empty \@generalref{0}s}%
+\def\@generalref#1#2#3{%
+ \let\@generalrefoptarg\@optionalarg
+ \readauxfile
+ \ifcase#1 \else \hlstart@impl{ref}{#3}\fi
+ \edef\@generalref@class{\getproperty{\xrlabel{#3}}{class}}%
+ \expandafter\ifx\csname \@generalref@class word\endcsname\relax
+ \ifx\@generalrefoptarg\empty \else {\@@hloff\@generalrefoptarg\reftie}\fi
+ \else
+ \begingroup
+ \@@hloff
+ \ifx\@generalrefoptarg\empty \else \@generalrefoptarg \refspace \fi
+ \csname \@generalref@class word\endcsname
+ #2\reftie
+ \endgroup
+ \fi
+ \ifcase#1 \hlstart@impl{ref}{#3}\fi
+ \plain@xrefn{#3}%
+ \hlend@impl{ref}%
+}%
+\newcount\eqnumber
+\newcount\subeqnumber
+\def\eqdefn{\@getoptionalarg\@fineqdefn}%
+\def\@fineqdefn#1{%
+ \ifx\@optionalarg\empty
+ \global\advance\eqnumber by 1
+ \def\temp{\eqconstruct{\number\eqnumber}}%
+ \else
+ \def\temp{\@optionalarg}%
+ \fi
+ \global\subeqnumber = 0
+ \gdef\@currenteqlabel{#1}%
+ \toks0 = \expandafter{\@currenteqlabel}%
+ \begingroup
+ \def\eqrefn{\noexpand\plain@xrefn}%
+ \def\xrefn{\noexpand\plain@xrefn}%
+ \edef\temp{\noexpand\@eqdefn{\the\toks0}{\temp}}%
+ \temp
+ \endgroup
+}%
+\def\eqsubdefn#1{%
+ \global\advance\subeqnumber by 1
+ \toks0 = {#1}%
+ \toks2 = \expandafter{\@currenteqlabel}%
+ \begingroup
+ \def\eqrefn{\noexpand\plain@xrefn}%
+ \def\xrefn{\noexpand\plain@xrefn}%
+ \def\eqsubreftext{\noexpand\eqsubreftext}%
+ \edef\temp{%
+ \noexpand\@eqdefn
+ {\the\toks0}%
+ {\eqsubreftext{\eqrefn{\the\toks2}}{\the\subeqnumber}}%
+ }%
+ \temp
+ \endgroup
+}%
+\newcount\phantomeqnumber
+\def\phantomeqlabel{PHEQ\the\phantomeqnumber}%
+\def\@eqdefn#1#2{%
+ \ifempty{#1}%
+ \global\advance\phantomeqnumber by 1
+ \edef\hl@eqlabel{\phantomeqlabel}%
+ \readauxfile
+ \else
+ \def\hl@eqlabel{#1}%
+ {\@@hldestoff \definexref{#1}{#2}{eq}}%
+ \fi
+ \hldest@impl{eq}{\hl@eqlabel}%
+ \begingroup % \@definelabel@nocheck will end this group.
+ \@definelabel@nocheck{#1}{#2}{eq}%
+}%
+\def\eqdef{\@getoptionalarg\@fineqdef}%
+\def\@fineqdef{%
+ \toks0 = \expandafter{\@optionalarg}%
+ \edef\temp{\noexpand\@eqdef{\noexpand\eqdefn[\the\toks0]}}%
+ \temp
+}%
+\def\eqsubdef{\@eqdef\eqsubdefn}%
+\def\@eqdef#1#2{%
+ \@maybedisableeqno
+ \eqnum #1{#2}% Define the label and hyperlink destination.
+ \let\@optionalarg\empty % \@fineqref will examine \@optionalarg.
+ {\@@hloff\@fineqref{#2}}% Print the text without a hyperlink.
+ \@mayberestoreeqno
+ \ignorespaces
+}%
+\let\@mayberestoreeqno = \relax
+\def\@maybedisableeqno{%
+ \ifinner
+ \global\let\eqno = \relax
+ \global\let\leqno = \relax
+ \global\let\@mayberestoreeqno = \@restoreeqno
+ \fi
+}%
+\let\@primitiveeqno = \eqno
+\let\@primitiveleqno = \leqno
+\def\@restoreeqno{%
+ \global\let\eqno = \@primitiveeqno
+ \global\let\leqno = \@primitiveleqno
+ \global\let\@mayberestoreeqno = \empty
+}%
+\def\righteqnumbers{%
+ \def\eqnum{\eqno}%
+ \def\eqalignnum{\eqalignno}%
+}%
+\def\lefteqnumbers{%
+ \def\eqnum{\leqno}%
+ \def\eqalignnum{\leqalignno}%
+}%
+\righteqnumbers
+\def\eqrefn{\@getoptionalarg\@fineqrefn}%
+\def\@fineqrefn#1{%
+ \eqref@start{#1}%
+ \plain@xrefn{#1}%
+ \hlend@impl{eq}%
+}%
+\def\eqref{\@getoptionalarg\@fineqref}%
+\def\@fineqref#1{%
+ \eqref@start{#1}%
+ \eqprint{\plain@xrefn{#1}}%
+ \hlend@impl{eq}%
+}%
+\def\eqref@start#1{%
+ \let\@eqrefoptarg\@optionalarg
+ \ifempty{#1}%
+ \hlstart@impl{eq}{\phantomeqlabel}%
+ \else
+ \hlstart@impl{eq}{#1}%
+ \fi
+ \ifx\@eqrefoptarg\empty \else
+ {\@@hloff\@eqrefoptarg\reftie}%
+ \fi
+}%
+\let\eqconstruct = \identity
+\def\eqprint#1{(#1)}%
+\def\eqsubreftext#1#2{#1.#2}%
+\let\extraidxcmdsuffixes = \empty
+\def\defineindex#1{%
+ \def\@idxprefix{#1}%
+ \expandafter\innernewif\csname if\@idxprefix dx\endcsname
+ \csname \@idxprefix dxtrue\endcsname
+ \for\@idxcmd:=,marked,submarked,name%
+ \extraidxcmdsuffixes\do
+ {%
+ \@defineindexcmd\@idxcmd
+ }%
+ \ece\innernewwrite{@#1indexfile}%
+ \ece\innernewif{if@#1indexfileopened}%
+}%
+\newif\ifsilentindexentry
+\def\@defineindexcmd#1{%
+ \@defineoneindexcmd{s}{#1}\silentindexentrytrue
+ \@defineoneindexcmd{}{#1}\silentindexentryfalse
+}%
+\def\@defineoneindexcmd#1#2#3{%
+ \toks@ = {#3}%
+ \edef\temp{%
+ \def
+ \expandonce\csname#1\@idxprefix dx#2\endcsname % e.g., \idx or \sidxname.
+ {\def\noexpand\@idxprefix{\@idxprefix}% define \@idxprefix
+ \expandonce\csname @@#1idx#2\endcsname
+ }%
+ \def
+ \expandonce\csname @@#1idx#2\endcsname{% e.g., \@@idx
+ \the\toks@
+ \noexpand\@idxgetrange\expandonce\csname @#1idx#2\endcsname
+ }%
+ }%
+ \temp
+}%
+\let\indexfilebasename = \jobname
+\def\@idxwrite#1#2{%
+ \csname if\@idxprefix dx\endcsname
+ \@openidxfile
+ \def\temp{#1}%
+ \edef\@wr{%
+ \expandafter\write\csname @\@idxprefix indexfile\endcsname{%
+ \string\indexentry
+ {\sanitize\temp}%
+ {\noexpand#2}%
+ }%
+ }%
+ \@wr
+ \else
+ \write-1{}%
+ \fi
+ \ifindexproofing
+ \def\temp{#1}%
+ \edef\temp{%
+ \insert\@indexproof{\noexpand\indexproofterm{\sanitize\temp}}%
+ }%
+ \temp
+ \ifhmode\allowhyphens\fi
+ \fi
+ \hookrun{afterindexterm}%
+ \ifsilentindexentry \expandafter\ignorespaces\fi
+}%
+\def\@openidxfile{%
+ \csname if@\@idxprefix indexfileopened\endcsname \else
+ \expandafter\immediate\openout\csname @\@idxprefix indexfile\endcsname =
+ \indexfilebasename.\@idxprefix dx
+ \expandafter\global\csname @\@idxprefix indexfileopenedtrue\endcsname
+ \fi
+}%
+\newif\ifindexproofing
+\newinsert\@indexproof
+\dimen\@indexproof = \maxdimen % No limit on number of terms.
+\count\@indexproof = 0 \skip\@indexproof = 0pt % They take up no space.
+\font\indexprooffont = cmtt8
+\def\indexproofterm#1{\hbox{\strut \indexprooffont #1}}%
+\let\@plainmakeheadline = \makeheadline
+\def\makeheadline{%
+ \expandafter\ifx\csname\idxpageanchor{\folio}\endcsname\relax \else
+ {\@@hldeston \hldest@impl{idx}{\hlidxpagelabel{\folio}}}%
+ \fi
+ \indexproofunbox
+ \@plainmakeheadline
+}%
+\def\indexsetmargins{%
+ \ifx\undefined\outsidemargin
+ \dimen@ = 1truein
+ \advance\dimen@ by \hoffset
+ \edef\outsidemargin{\the\dimen@}%
+ \let\insidemargin = \outsidemargin
+ \fi
+}%
+\def\indexproofunbox{%
+ \ifvoid\@indexproof\else
+ \indexsetmargins
+ \rlap{%
+ \kern\hsize
+ \ifodd\pageno \kern\outsidemargin \else \kern\insidemargin \fi
+ \vbox to 0pt{\unvbox\@indexproof\vss}%
+ }\nointerlineskip
+ \fi
+}%
+\def\idxrangebeginword{begin}%
+\def\idxbeginrangemark{(}% the corresponding magic char to go in the idx file
+\def\idxrangeendword{end}%
+\def\idxendrangemark{)}%
+\def\idxseecmdword{see}%
+\def\idxseealsocmdword{seealso}%
+\newif\if@idxsee
+\newif\if@hlidxencap
+\let\@idxseenterm = \relax
+\def\idxpagemarkupcmdword{pagemarkup}%
+\let\@idxpagemarkup = \relax
+\def\@idxgetrange#1{%
+ \let\@idxrangestr = \empty
+ \let\@afteridxgetrange = #1%
+ \begingroup
+ \catcode\idxargopen=1
+ \@getoptionalarg\@finidxgetopt
+}%
+\def\@finidxgetopt{%
+ \global\let\@idxgetrange@arg\@optionalarg
+ \endgroup
+ \@hlidxencaptrue
+ \for\@idxarg:=\@idxgetrange@arg\do{%
+ \expandafter\@idxcheckpagemarkup\@idxarg=,%
+ \ifx\@idxarg\idxrangebeginword
+ \def\@idxrangestr{\idxencapoperator\idxbeginrangemark}%
+ \else
+ \ifx\@idxarg\idxrangeendword
+ \def\@idxrangestr{\idxencapoperator\idxendrangemark}%
+ \@hlidxencapfalse
+ \else
+ \ifx\@idxarg\idxseecmdword
+ \def\@idxpagemarkup{indexsee}%
+ \@idxseetrue
+ \@hlidxencapfalse
+ \else
+ \ifx\@idxarg\idxseealsocmdword
+ \def\@idxpagemarkup{indexseealso}%
+ \@idxseetrue
+ \@hlidxencapfalse
+ \else
+ \ifx\@idxpagemarkup\relax
+ \errmessage{Unrecognized index option `\@idxarg'}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ }%
+ \ifnum\hldest@place@idx < 0 \else
+ \if@hlidxencap
+ \ifx\@idxpagemarkup\relax
+ \let\@idxpagemarkup\empty
+ \fi
+ \ifcase\hldest@place@idx \relax
+ \edef\@idxpagemarkup{hlidxpage{\@idxpagemarkup}}%
+ \definepageanchor{\noexpand\folio}%
+ \else
+ \global\advance\hlidxlabelnumber by 1
+ \edef\@idxpagemarkup{hlidx{\hlidxlabel}{\@idxpagemarkup}}%
+ \hldest@impl{idx}{\hlidxlabel}%
+ \fi
+ \fi
+ \fi
+ \@afteridxgetrange
+}%
+\def\@idxcheckpagemarkup#1=#2,{%
+ \def\temp{#1}%
+ \ifx\temp\idxpagemarkupcmdword
+ \if ,#2, % If #2 is empty, complain.
+ \errmessage{Missing markup command to `pagemarkup'}%
+ \else
+ \def\temp##1={##1}%
+ \edef\@idxpagemarkup{\temp\string#2}%
+ \fi
+ \fi
+}%
+\def\hldest@place@idx{-1}%
+\begingroup
+ \catcode`\_ = 8
+ \gdef\idxpageanchor#1{#1_p}%
+\endgroup
+\def\definepageanchor#1{%
+ \readauxfile
+ \edef\@wr{\noexpand\writeaux{\string\@definepageanchor{#1}}}%
+ \@wr
+ \ignorespaces
+}%
+\def\@definepageanchor#1{%
+ \expandafter\gdef\csname\idxpageanchor{#1}\endcsname{}%
+}%
+\newcount\hlidxlabelnumber
+\def\hlidxlabel{IDX\the\hlidxlabelnumber}%
+\def\hlidxpagelabel#1{IDXPG#1}%
+\def\hlidx#1#2#3{%
+ \ifempty{#2}%
+ \let\@idxpageencap\relax
+ \else
+ \expandafter\let\expandafter\@idxpageencap\csname #2\endcsname
+ \fi
+ \hlstart@impl{idx}{#1}%
+ \@idxpageencap{#3}%
+ \hlend@impl{idx}%
+}%
+\def\hlidxpage#1#2{%
+ \@hlidxgetpages{#2}%
+ \ifempty{#1}%
+ \let\@idxpageencap\relax
+ \else
+ \expandafter\let\expandafter\@idxpageencap\csname #1\endcsname
+ \fi
+ \hlstart@impl{idx}{\hlidxpagelabel{\@idxpageiref}}%
+ \expandafter\@idxpageencap\expandafter{\@idxpagei}%
+ \hlend@impl{idx}%
+ \ifx\@idxpageii\empty \else
+ \@idxpagesep
+ \hlstart@impl{idx}{\hlidxpagelabel{\@idxpageiiref}}%
+ \expandafter\@idxpageencap\expandafter{\@idxpageii}%
+ \hlend@impl{idx}%
+ \fi
+}%
+\def\@hlidxgetpages#1{%
+ \idxparselist{#1}%
+ \ifx\idxpagei\empty
+ \idxparserange{#1}%
+ \ifx\idxpagei\empty
+ \def\@idxpageiref{#1}% Label for \hlstart.
+ \else
+ \let\@idxpageiref\idxpagei % Label for \hlstart.
+ \fi
+ \def\@idxpagei{#1}%
+ \let\@idxpageii\empty
+ \else
+ \let\@idxpagei\idxpagei
+ \let\@idxpageii\idxpageii
+ \let\@idxpageiref\idxpagei % Label for \hlstart.
+ \let\@idxpageiiref\idxpageii % Label for \hlstart.
+ \let\@idxpagesep\idxpagelistdelimiter
+ \fi
+}%
+\def\setidxpagelistdelimiter#1{%
+ \gdef\idxpagelistdelimiter{#1}%
+ \gdef\@removepagelistdelimiter##1#1{##1}%
+ \gdef\@idxparselist##1#1##2\@@{%
+ \ifempty{##2}%
+ \let\idxpagei\empty
+ \else
+ \def\idxpagei{##1}%
+ \edef\idxpageii{\@removepagelistdelimiter##2}%
+ \fi
+ }%
+ \gdef\idxparselist##1{\@idxparselist##1#1\@@}%
+}%
+\def\setidxpagerangedelimiter#1{%
+ \gdef\idxpagerangedelimiter{#1}%
+ \gdef\@removepagerangedelimiter##1#1{##1}%
+ \gdef\@idxparserange##1#1##2\@@{%
+ \ifempty{##2}%
+ \let\idxpagei\empty
+ \else
+ \def\idxpagei{##1}%
+ \edef\idxpageii{\@removepagerangedelimiter##2}%
+ \fi
+ }%
+ \gdef\idxparserange##1{\@idxparserange##1#1\@@}%
+}%
+\setidxpagelistdelimiter{, }%
+\setidxpagerangedelimiter{--}%
+\def\idxsubentryseparator{!}%
+\def\idxencapoperator{|}%
+\def\idxmaxpagenum{99999}%
+\newtoks\@idxmaintoks
+\newtoks\@idxsubtoks
+\def\@idxtokscollect{%
+ \edef\temp{\the\@idxsubtoks}%
+ \edef\@indexentry{%
+ \the\@idxmaintoks
+ \ifx\temp\empty\else \idxsubentryseparator\the\@idxsubtoks \fi
+ \@idxrangestr
+ }%
+ \if@idxsee
+ \@idxseefalse % Reset so the next term won't be a `see'.
+ \edef\temp{\noexpand\idx@getverbatimarg
+ {\noexpand\@finidxtokscollect{\idxmaxpagenum}}}%
+ \else
+ \def\temp{\@finfinidxtokscollect\folio}%
+ \fi
+ \temp
+}%
+\def\@finidxtokscollect#1#2{%
+ \def\@idxseenterm{#2}%
+ \@finfinidxtokscollect{#1}%
+}%
+\def\@finfinidxtokscollect#1{%
+ \ifx\@idxpagemarkup\relax \else
+ \toks@ = \expandafter{\@indexentry}%
+ \edef\@indexentry{%
+ \the\toks@
+ \ifx\@idxrangestr\empty \idxencapoperator \fi
+ \@idxpagemarkup
+ }%
+ \let\@idxpagemarkup = \relax
+ \fi
+ \ifx\@idxseenterm\relax \else
+ \toks@ = \expandafter{\@indexentry}%
+ \edef\@indexentry{\the\toks@{\sanitize\@idxseenterm}}%
+ \let\@idxseenterm = \relax
+ \fi
+ \expandafter\@idxwrite\expandafter{\@indexentry}{#1}%
+}%
+\def\@idxcollect#1#2{%
+ \@idxmaintoks = {#1}%
+ \@idxsubtoks = {#2}%
+ \@idxtokscollect
+}%
+\def\idxargopen{`\{}%
+\def\idxargclose{`\}}%
+\def\idx@getverbatimarg#1{%
+ \def\idx@getverbatimarg@cmd{#1}% Save the command, allowing it to be
+ \begingroup
+ \uncatcodespecials
+ \catcode\idxargopen=1
+ \catcode\idxargclose=2
+ \catcode`\ =10 % Swallow multiple consequent spaces.
+ \catcode`\^^I=10 % Just in case, to avoid dependence on
+ \catcode`\^^M=5 % current meanings of tabs and newlines.
+ \idx@fingetverbatimarg
+}%
+\def\idx@fingetverbatimarg#1{\endgroup\idx@getverbatimarg@cmd{#1}}%
+\def\idx@getverboptarg#1{%
+ \def\idx@optionaltemp{#1}% Save the command, allowing it to be more
+ \let\idx@optionalnext = \relax
+ \begingroup
+ \if@idxsee \catcode\idxargopen=1 \fi
+ \@futurenonspacelet\idx@optionalnext\idx@bracketcheck
+}%
+\def\idx@bracketcheck{%
+ \ifx [\idx@optionalnext
+ \endgroup % Cancel \catcode\idxargopen=1.
+ \expandafter\idx@finbracketcheck
+ \else
+ \endgroup % Cancel \catcode\idxargopen=1.
+ \let\@optionalarg = \empty
+ \expandafter\idx@optionaltemp
+ \fi
+}%
+\def\idx@finbracketcheck{%
+ \begingroup
+ \uncatcodespecials
+ \catcode`\ =10 % Swallow multiple consequent spaces.
+ \catcode`\^^I=10 % Just in case, to avoid dependence on
+ \catcode`\^^M=5 % current meanings of tabs and newlines.
+ \idx@@getoptionalarg
+}%
+\def\idx@@getoptionalarg[#1]{%
+ \endgroup
+ \def\@optionalarg{#1}%
+ \idx@optionaltemp
+}%
+{\catcode`\&=0
+\gdef\idx@scanterm#1{%
+ \edef\idx@scanterm@nl@catcode{\the\catcode`\^^M\relax}%
+ \catcode`\^^M=5
+ \scantokens{#1&endinput}%
+ \catcode`\^^M=\idx@scanterm@nl@catcode
+}}%
+\def\@idx{\idx@getverbatimarg\@finidx}%
+\def\@finidx#1{%
+ \idx@scanterm{#1}% Produce TERM as output.
+ \@idxcollect{#1}{}%
+}%
+\def\@sidx{\idx@getverbatimarg\@finsidx}%
+\def\@finsidx#1{\@idxmaintoks = {#1}\idx@getverboptarg\@finfinsidx}%
+\def\@finfinsidx{%
+ \@idxsubtoks = \expandafter{\@optionalarg}%
+ \@idxtokscollect
+}%
+\def\idxsortkeysep{@}% This `@' is catcode 11, but it doesn't matter.
+\def\@idxconstructmarked#1#2#3{%
+ \toks@ = {#2}% The control sequence.
+ \toks2 = {#3}% The term.
+ \edef\temp{\the\toks2 \idxsortkeysep \the\toks@{\the\toks2}}%
+ #1 = \expandafter{\temp}%
+}%
+\def\@idxmarked#1{\idx@getverbatimarg{\@finidxmarked{#1}}}%
+\def\@finidxmarked#1#2{%
+ \idx@scanterm{#1{#2}}% Produce \CS{TERM} as output.
+ \@idxconstructmarked\@idxmaintoks{#1}{#2}%
+ \@idxsubtoks = {}%
+ \@idxtokscollect
+}%
+\def\@sidxmarked#1{\idx@getverbatimarg{\@finsidxmarked{#1}}}%
+\def\@finsidxmarked#1#2{%
+ \@idxconstructmarked\toks@{#1}{#2}%
+ \edef\temp{{\the\toks@}}%
+ \expandafter\@finsidx\temp
+}%
+\def\@idxsubmarked{%
+ \let\sidxsubmarked@print\idxsubmarked@print
+ \idx@getverbatimarg\@finsidxsubmarked
+}%
+\def\idxsubmarked@print{\expandafter\idx@scanterm\expandafter}%
+\def\@sidxsubmarked{%
+ \let\sidxsubmarked@print\gobble
+ \idx@getverbatimarg\@finsidxsubmarked
+}%
+\def\@finsidxsubmarked#1{\@idxmaintoks = {#1}\@@finsidxsubmarked}% Reads TERM.
+\def\@@finsidxsubmarked#1{\idx@getverbatimarg{\@@@finsidxsubmarked{#1}}}% Reads \CS.
+\def\@@@finsidxsubmarked#1#2{% Reads {\CS}{SUBTERM}.
+ \sidxsubmarked@print % Prints for \@idxsubmarked, gobbles for \@sidxsubmarked.
+ {\the\@idxmaintoks\space #1{#2}}% Maybe produce `TERM \CS{SUBTERM}' as output.
+ \@idxconstructmarked\@idxsubtoks{#1}{#2}%
+ \@idxtokscollect
+}%
+\def\idxnameseparator{, }% as in `Tachikawa, Elizabeth'
+\def\@idxcollectname#1#2{%
+ \def\temp{#1}%
+ \ifx\temp\empty
+ \toks@ = {}%
+ \else
+ \toks@ = \expandafter{\idxnameseparator #1}%
+ \fi
+ \toks2 = {#2}%
+ \edef\temp{\the\toks2 \the\toks@}%
+}%
+\def\@idxname{\idx@getverbatimarg\@finidxname}%
+\def\@finidxname#1{\idx@getverbatimarg{\@finfinidxname{#1}}}%
+\def\@finfinidxname#1#2{%
+ \idx@scanterm{#1 #2}% Separate the names by a space in the output.
+ \@idxcollectname{#1}{#2}%
+ \expandafter\@idxcollect\expandafter{\temp}{}%
+}%
+\def\@sidxname{\idx@getverbatimarg\@finsidxname}%
+\def\@finsidxname#1{\idx@getverbatimarg{\@finfinsidxname{#1}}}%
+\def\@finfinsidxname#1#2{%
+ \@idxcollectname{#1}{#2}%
+ \expandafter\@finsidx\expandafter{\temp}%
+}%
+\let\indexfonts = \relax
+\def\readindexfile#1{%
+ \edef\@idxprefix{#1}%
+ \testfileexistence[\indexfilebasename]{\@idxprefix nd}%
+ \iffileexists \begingroup
+ \ifx\begin\undefined
+ \def\begin##1{\@beginindex}%
+ \let\end = \@gobble
+ \fi
+ \input \indexfilebasename.\@idxprefix nd
+ \singlecolumn
+ \endgroup
+ \else
+ \message{No index file \indexfilebasename.\@idxprefix nd.}%
+ \fi
+}%
+\def\@beginindex{%
+ \let\item = \@indexitem
+ \let\subitem = \@indexsubitem
+ \let\subsubitem = \@indexsubsubitem
+ \indexfonts
+ \doublecolumns
+ \parindent = 0pt
+ \hookrun{beginindex}%
+}%
+\let\indexspace = \bigbreak
+\let\afterindexterm = \quad
+\newskip\aboveindexitemskipamount \aboveindexitemskipamount = 0pt plus2pt
+\def\aboveindexitemskip{\vskip\aboveindexitemskipamount}%
+\def\@indexitem{\begingroup
+ \@indexitemsetup
+ \leftskip = 0pt
+ \aboveindexitemskip
+ \penalty-100 % Encourage page breaks before items.
+ \def\par{\endgraf\endgroup\nobreak}%
+}%
+\def\@indexsubitem{%
+ \@indexitemsetup
+ \leftskip = 1em
+}%
+\def\@indexsubsubitem{%
+ \@indexitemsetup
+ \leftskip = 2em
+}%
+\def\@indexitemsetup{%
+ \par
+ \hangindent = 1em
+ \raggedright
+ \hyphenpenalty = 10000
+ \hookrun{indexitem}%
+}%
+\def\seevariant{\it}%
+\def\indexseeword{see}%
+\def\indexsee{\idx@getverbatimarg\@finindexsee}%
+\def\@finindexsee#1#2{{\seevariant \indexseeword\/ }\idx@scanterm{#1}}%
+\def\indexseealsowords{see also}%
+\def\indexseealso{\idx@getverbatimarg\@finindexseealso}%
+\def\@finindexseealso#1#2{{\seevariant \indexseealsowords\/ }\idx@scanterm{#1}}%
+\defineindex{i}%
+\begingroup
+ \catcode `\^^M = \active %
+ \gdef\flushleft{%
+ \def\@endjustifycmd{\@endflushleft}%
+ \def\@eoljustifyaction{\null\hfil\break}%
+ \let\@firstlinejustifyaction = \relax
+ \@startjustify %
+ }%
+ \gdef\flushright{%
+ \def\@endjustifycmd{\@endflushright}%
+ \def\@eoljustifyaction{\break\null\hfil}%
+ \def\@firstlinejustifyaction{\hfil\null}%
+ \@startjustify %
+ }%
+ \gdef\center{%
+ \def\@endjustifycmd{\@endcenter}%
+ \def\@eoljustifyaction{\hfil\break\null\hfil}%
+ \def\@firstlinejustifyaction{\hfil\null}%
+ \@startjustify %
+ }%
+ \gdef\@startjustify{%
+ \parskip = 0pt
+ \catcode`\^^M = \active %
+ \def^^M{\futurelet\next\@finjustifyreturn}%
+ \def\@eateol##1^^M{%
+ \def\temp{##1}%
+ \@firstlinejustifyaction %
+ \ifx\temp\empty\else \temp^^M\fi %
+ }%
+ \expandafter\aftergroup\@endjustifycmd %
+ \checkenv \environmenttrue %
+ \par\noindent %
+ \@eateol %
+ }%
+ \gdef\@finjustifyreturn{%
+ \@eoljustifyaction %
+ \ifx\next^^M%
+ \def\par{\endgraf\vskip\blanklineskipamount \global\let\par = \endgraf}%
+ \@endjustifycmd %
+ \noindent %
+ \@firstlinejustifyaction %
+ \fi %
+ }%
+\endgroup
+\def\@endflushleft{\unpenalty{\parfillskip = 0pt plus1fil\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 plus1fil \par}\ignorespaces
+}%
+\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 -1
+ \divide \@columndepth by #2
+ \advance\@columndepth by 1
+ \@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
+\newcount\hlfootlabelnumber
+\newdimen\footnotemarkseparation \footnotemarkseparation = .5em
+\newskip\interfootnoteskip \interfootnoteskip = 0pt
+\newtoks\everyfootnote
+\newdimen\footnoterulewidth \footnoterulewidth = 2in
+\newdimen\footnoteruleheight \footnoteruleheight = 0.4pt
+\newdimen\belowfootnoterulespace \belowfootnoterulespace = 2.6pt
+\let\@plainfootnote = \footnote
+\let\@plainvfootnote = \vfootnote
+\def\hlfootlabel{FOOT\the\hlfootlabelnumber}%
+\def\hlfootbacklabel{FOOTB\the\hlfootlabelnumber}%
+\def\@eplainfootnote#1{\let\@sf\empty % parameter #2 (the text) is read later
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ \global\advance\hlfootlabelnumber by 1
+ \hlstart@impl{foot}{\hlfootlabel}%
+ \hldest@impl{footback}{\hlfootbacklabel}%
+ #1%
+ \hlend@impl{foot}%
+ \@sf\vfootnote{#1}%
+}%
+\let\footnote\@eplainfootnote
+\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 = {}%
+ \parskip = 0pt % because of the vskip
+ \ifnum\@numcolumns > 1 \hsize = \@normalhsize \fi
+ \the\everyfootnote
+ \vskip\interfootnoteskip
+ \indent\llap{%
+ \hlstart@impl{footback}{\hlfootbacklabel}%
+ \hldest@impl{foot}{\hlfootlabel}%
+ #1%
+ \hlend@impl{footback}%
+ \kern\footnotemarkseparation
+ }%
+ \footstrut\futurelet\next\fo@t
+}%
+\def\footnoterule{\dimen@ = \footnoteruleheight
+ \advance\dimen@ by \belowfootnoterulespace
+ \kern-\dimen@
+ \hrule width\footnoterulewidth height\footnoteruleheight depth0pt
+ \kern\belowfootnoterulespace
+ \vskip-\interfootnoteskip
+}%
+\def\numberedfootnote{%
+ \global\advance\footnotenumber by 1
+ \@eplainfootnote{$^{\number\footnotenumber}$}%
+}%
+\newdimen\paperheight
+\ifnum\mag=1000
+ \paperheight = 11in % No magnification (yet).
+\else
+ \paperheight = 11truein % We already have a magnification.
+\fi
+\def\topmargin{\afterassignment\@finishtopmargin \dimen@}%
+\def\@finishtopmargin{%
+ \dimen2 = \voffset % Remember the old \voffset.
+ \voffset = \dimen@ \advance\voffset by -1truein
+ \advance\dimen2 by -\voffset % Compute the change in \voffset.
+ \advance\vsize by \dimen2 % Change type area accordingly.
+}%
+\def\advancetopmargin{%
+ \dimen@ = 0pt \afterassignment\@finishadvancetopmargin \advance\dimen@
+}%
+\def\@finishadvancetopmargin{%
+ \advance\voffset by \dimen@
+ \advance\vsize by -\dimen@
+}%
+\def\bottommargin{\afterassignment\@finishbottommargin \dimen@}%
+\def\@finishbottommargin{%
+ \@computebottommargin % Result in \dimen2.
+ \advance\dimen2 by -\dimen@ % Compute the change in the bottom margin.
+ \advance\vsize by \dimen2 % Change the type area.
+}%
+\def\advancebottommargin{%
+ \dimen@ = 0pt \afterassignment\@finishadvancebottommargin \advance\dimen@
+}%
+\def\@finishadvancebottommargin{%
+ \advance\vsize by -\dimen@
+}%
+\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 -1truein % Less the default offset.
+}%
+\newdimen\paperwidth
+\ifnum\mag=1000
+ \paperwidth = 8.5in % No magnification (yet).
+\else
+ \paperwidth = 8.5truein % We already have a magnification.
+\fi
+\def\leftmargin{\afterassignment\@finishleftmargin \dimen@}%
+\def\@finishleftmargin{%
+ \dimen2 = \hoffset % Remember the old \hoffset.
+ \hoffset = \dimen@ \advance\hoffset by -1truein
+ \advance\dimen2 by -\hoffset % Compute the change in \hoffset.
+ \advance\hsize by \dimen2 % Change type area accordingly.
+}%
+\def\advanceleftmargin{%
+ \dimen@ = 0pt \afterassignment\@finishadvanceleftmargin \advance\dimen@
+}%
+\def\@finishadvanceleftmargin{%
+ \advance\hoffset by \dimen@
+ \advance\hsize by -\dimen@
+}%
+\def\rightmargin{\afterassignment\@finishrightmargin \dimen@}%
+\def\@finishrightmargin{%
+ \@computerightmargin % Result in \dimen2.
+ \advance\dimen2 by -\dimen@ % Compute the change in the right margin.
+ \advance\hsize by \dimen2 % Change the type area.
+}%
+\def\advancerightmargin{%
+ \dimen@ = 0pt \afterassignment\@finishadvancerightmargin \advance\dimen@
+}%
+\def\@finishadvancerightmargin{%
+ \advance\hsize by -\dimen@
+}%
+\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 -1truein % Less the default offset.
+}%
+\let\@plainm@g = \m@g
+\def\m@g{\@plainm@g \paperwidth = 8.5 true in \paperheight = 11 true in}%
+\newskip\abovecolumnskip \abovecolumnskip = \bigskipamount
+\newskip\belowcolumnskip \belowcolumnskip = \bigskipamount
+\newdimen\gutter \gutter = 2pc
+\newbox\@partialpage
+\newdimen\@normalhsize
+\newdimen\@normalvsize % The original (before multi-columns) \vsize.
+\newtoks\previousoutput
+\def\quadcolumns{\@columns4}%
+\def\triplecolumns{\@columns3}%
+\def\doublecolumns{\@columns2}%
+\def\begincolumns#1{\ifcase#1\relax \or \singlecolumn \or \@columns2 \or
+ \@columns3 \or \@columns4 \else \relax \fi}%
+\def\endcolumns{\singlecolumn}%
+\let\@ndcolumns = \relax
+\chardef\@numcolumns = 1
+\mathchardef\@ejectpartialpenalty = 10141
+\chardef\@col@minlines = 3
+\chardef\@col@extralines = 3
+\newdimen\@col@extraheight
+\def\@columns#1{%
+ \@ndcolumns
+ \global\let\@ndcolumns = \@endcolumns
+ \global\chardef\@numcolumns = #1
+ \global\previousoutput = \expandafter{\the\output}%
+ \global\output = {%
+ \ifnum\outputpenalty = -\@ejectpartialpenalty
+ \dimen@ = \vsize
+ \advance\dimen@ by \@col@minlines\baselineskip
+ \global\setbox\@partialpage =
+ \vbox \ifdim \pagetotal > \vsize to \dimen@ \fi {%
+ \unvbox255 \unskip
+ }%
+ \else
+ \the\previousoutput
+ \fi
+ }%
+ \vskip \abovecolumnskip
+ \vskip \@col@minlines\baselineskip
+ \penalty -\@ejectpartialpenalty
+ \global\output = {\@columnoutput}%
+ \global\@normalhsize = \hsize
+ \global\@normalvsize = \vsize
+ \count@ = \@numcolumns
+ \advance\count@ by -1
+ \global\advance\hsize by -\count@\gutter
+ \global\divide\hsize by \@numcolumns
+ \advance\vsize by -\ht\@partialpage
+ \advance\vsize by -\ht\footins
+ \ifvoid\footins\else \advance\vsize by -\skip\footins \fi
+ \multiply\count\footins by \@numcolumns
+ \advance\vsize by -\ht\topins
+ \ifvoid\topins\else \advance\vsize by -\skip\topins \fi
+ \multiply\count\topins by \@numcolumns
+ \global\vsize = \@numcolumns\vsize
+ \@col@extraheight=\@col@extralines\baselineskip
+ \multiply\@col@extraheight by \@numcolumns
+ \global\advance\vsize by \@col@extraheight
+}%
+\def\gutterbox{\vbox to \dimen0{\vfil\hbox{\hfil}\vfil}}%
+\def\@columnsplit{%
+ \splittopskip = \topskip
+ \splitmaxdepth = \baselineskip
+ \begingroup
+ \vbadness = 10000
+ \global\setbox1 = \vsplit255 to \dimen@ \global\wd1 = \hsize
+ \global\setbox3 = \vsplit255 to \dimen@ \global\wd3 = \hsize
+ \ifnum\@numcolumns > 2
+ \global\setbox5 = \vsplit255 to \dimen@ \global\wd5 = \hsize
+ \fi
+ \ifnum\@numcolumns > 3
+ \global\setbox7 = \vsplit255 to \dimen@ \global\wd7 = \hsize
+ \fi
+ \endgroup
+ \setbox0 = \box255
+ \global\setbox255 = \vbox{%
+ \unvbox\@partialpage
+ \ifcase\@numcolumns \relax\or\relax
+ \or \hbox to \@normalhsize{\box1\hfil\gutterbox\hfil\box3}%
+ \or \hbox to \@normalhsize{\box1\hfil\gutterbox\hfil\box3%
+ \hfil\gutterbox\hfil\box5}%
+ \or \hbox to \@normalhsize{\box1\hfil\gutterbox\hfil\box3%
+ \hfil\gutterbox\hfil\box5%
+ \hfil\gutterbox\hfil\box7}%
+ \fi
+ }%
+ \setbox\@partialpage = \box0
+}%
+\def\@columnoutput{%
+ \dimen@ = \ht255
+ \advance\dimen@ by -\@col@extraheight
+ \divide\dimen@ by \@numcolumns
+ \@columnsplit
+ \@recoverclubpenalty
+ \hsize = \@normalhsize % Local to \output's group.
+ \vsize = \@normalvsize
+ \the\previousoutput
+ \unvbox\@partialpage
+ \penalty\outputpenalty
+ \global\vsize = \@numcolumns\@normalvsize
+ \global\advance\vsize by \@col@extraheight
+}%
+\def\singlecolumn{%
+ \@ndcolumns
+ \chardef\@numcolumns = 1
+ \vskip\belowcolumnskip
+ \nointerlineskip
+}%
+\newbox\@singlecolumnbox
+\newdimen\column@pagegoal
+\newdimen\column@vsize
+\def\@endcolumns{%
+ \global\let\@ndcolumns = \relax
+ \par % Shouldn't start in horizontal mode.
+ \column@pagegoal = \pagegoal
+ \advance\column@pagegoal by-\@col@extraheight
+ \ifdim \pagetotal > \column@pagegoal
+ \column@vsize = \column@pagegoal
+ \else
+ \column@vsize = \pagetotal
+ \fi
+ \global\output = {\global\setbox1 = \box255}%
+ \pagegoal = \pagetotal
+ \break % Exercise the page builder, i.e., \output.
+ \setbox2 = \box1 % Save material in box2 in case of overflow.
+ \global\output = \expandafter{\the\previousoutput}%
+ \setbox\@singlecolumnbox = \box\@partialpage
+ \@balancecolumns
+}%
+\def\@balancecolumns{%
+ \global\setbox255 = \copy2 % Retrieve what the fake \output set.
+ \dimen@ = \column@vsize
+ \divide\dimen@ by \@numcolumns
+ \@columnsplit
+ \ifvoid\@partialpage
+ \global\vsize = \@normalvsize
+ \global\hsize = \@normalhsize
+ \dump@balanced@columns
+ \let\next\relax
+ \else
+ \advance \column@vsize by \@numcolumns pt
+ \test@spill@columns
+ \ifspill@columns
+ \begingroup
+ \vsize = \@normalvsize
+ \hsize = \@normalhsize
+ \dump@balanced@columns
+ \break
+ \@recoverclubpenalty
+ \endgroup
+ \unvbox\@partialpage
+ \let\next\@endcolumns
+ \else
+ \setbox0=\box\@partialpage % Merely to void \@partialpage.
+ \let\next\@balancecolumns
+ \fi
+ \fi
+ \next
+}%
+\def\dump@balanced@columns{%
+ \ifvoid\topins\else\topinsert\unvbox\topins\endinsert\fi
+ \unvbox\@singlecolumnbox
+ \nointerlineskip
+ \box255
+}%
+\newif\ifspill@columns
+\def\test@spill@columns{%
+ \spill@columnsfalse
+ \ifdim \column@vsize > \column@pagegoal
+ \ifvoid\footins
+ \ifvoid\topins
+ \spill@columnstrue
+ \fi
+ \fi
+ \fi
+}%
+\def\@saveclubpenalty{% save the current value of \clubpenalty
+ \edef\@recoverclubpenalty{%
+ \global\clubpenalty=\the\clubpenalty\relax%
+ \global\let\noexpand\@recoverclubpenalty\relax
+ }% the \noexpand handles infinite self-reference
+}%
+\let\@recoverclubpenalty\relax
+\newdimen\temp@dimen
+\def\columnfill{%
+ \par
+ \dimen@ = \pagetotal % The height of the text so far.
+ \temp@dimen = \vsize % = \@numcolumns * columnheight
+ \advance\temp@dimen by -\@col@extraheight
+ \divide\temp@dimen by \@numcolumns % Compute column height
+ \loop
+ \ifdim \dimen@ > \temp@dimen % more material than a column?
+ \advance \dimen@ by -\temp@dimen
+ \advance \dimen@ by \topskip % fudge factor
+ \repeat
+ \advance \temp@dimen by -\dimen@
+ \advance \temp@dimen by -\prevdepth
+ \@saveclubpenalty
+ \clubpenalty=10000\relax
+ \hrule height\temp@dimen width0pt depth0pt\relax % fill space with rule
+ \nointerlineskip
+ \par
+ \nointerlineskip
+ \allowbreak \vfil % To allow a page break here.
+ \relax
+}%
+\def\@hldest{%
+ \def\hl@prefix{hldest}%
+ \let\after@hl@getparam\hldest@aftergetparam
+ \begingroup
+ \hl@getparam
+}%
+\def\hldest@aftergetparam{%
+ \ifvmode
+ \hldest@driver
+ \else
+ \allowhyphens
+ \smash{\ifx\hldest@opt@raise\empty \else \raise\hldest@opt@raise\fi
+ \hbox{\hldest@driver}}%
+ \allowhyphens
+ \fi
+ \endgroup
+}%
+\def\@hlstart{%
+ \leavevmode
+ \def\hl@prefix{hl}%
+ \let\after@hl@getparam\hlstart@aftergetparam
+ \begingroup
+ \hl@getparam
+}%
+\def\hlstart@aftergetparam{%
+ \ifx\color\undefined \else
+ \ifx\hl@opt@color\empty \else
+ \ifx\hl@opt@colormodel\empty
+ \edef\temp{\noexpand\color{\hl@opt@color}}%
+ \else
+ \edef\temp{\noexpand\color[\hl@opt@colormodel]{\hl@opt@color}}%
+ \fi
+ \temp
+ \fi
+ \fi
+ \hl@driver
+}%
+\def\hl@getparam#1#2{% We'll read #3 (LABEL) later.
+ \edef\@hltype{#1}%
+ \ifx\@hltype\empty
+ \expandafter\let\expandafter\@hltype
+ \csname \hl@prefix @type\endcsname
+ \fi
+ \expandafter\ifx\csname \hl@prefix @typeh@\@hltype\endcsname \relax
+ \errmessage{Invalid hyperlink type `\@hltype'}%
+ \fi
+ \For\hl@arg:=#2\do{%
+ \ifx\hl@arg\empty \else
+ \expandafter\hl@set@opt\hl@arg=,%
+ \fi
+ }%
+ \bgroup
+ \uncatcodespecials
+ \catcode`\{=1 \catcode`\}=2
+ \@hl@getparam
+}%
+\def\@hl@getparam#1{%
+ \egroup
+ \edef\@hllabel{#1}%
+ \after@hl@getparam
+ \ignorespaces
+}%
+\def\hl@set@opt#1=#2,{%
+ \expandafter\ifx\csname \hl@prefix @opt@#1\endcsname \relax
+ \errmessage{Invalid hyperlink option `#1'}%
+ \fi
+ \if ,#2, % if #2 is empty, complain.
+ \errmessage{Missing value for option `#1'}%
+ \else
+ \def\temp##1={##1}%
+ \expandafter\edef\csname \hl@prefix @opt@#1\endcsname{\temp#2}%
+ \fi
+}%
+\def\hldest@impl#1{%
+ \expandafter\ifcase\csname hldest@on@#1\endcsname
+ \relax\expandafter\gobble
+ \else
+ \toks@=\expandafter{\csname hldest@type@#1\endcsname}%
+ \toks@ii=\expandafter{\csname hldest@opts@#1\endcsname}%
+ \edef\temp{\noexpand\hldest{\the\toks@}{\the\toks@ii}}%
+ \expandafter\temp
+ \fi
+}%
+\def\hlstart@impl#1{%
+ \expandafter\ifcase\csname hl@on@#1\endcsname
+ \leavevmode\expandafter\gobble
+ \else
+ \toks@=\expandafter{\csname hl@type@#1\endcsname}%
+ \toks@ii=\expandafter{\csname hl@opts@#1\endcsname}%
+ \edef\temp{\noexpand\hlstart{\the\toks@}{\the\toks@ii}}%
+ \expandafter\temp
+ \fi
+}%
+\def\hlend@impl#1{%
+ \expandafter\ifcase\csname hl@on@#1\endcsname
+ \else
+ \hlend
+ \fi
+}%
+\def\hl@asterisk@word{*}%
+\def\hl@opts@word{opts}%
+\newif\if@params@override
+\def\hldest@groups{definexref,xrdef,li,eq,bib,foot,footback,idx}%
+\def\hl@groups{ref,xref,eq,cite,foot,footback,idx,url,hrefint,hrefext}%
+\def\hldesttype{%
+ \def\hl@prefix{hldest}%
+ \def\hl@param{type}%
+ \let\hl@all@groups\hldest@groups
+ \futurelet\hl@excl\hl@param@read@excl
+}%
+\def\hldestopts{%
+ \def\hl@prefix{hldest}%
+ \def\hl@param{opts}%
+ \let\hl@all@groups\hldest@groups
+ \futurelet\hl@excl\hl@param@read@excl
+}%
+\def\hltype{%
+ \def\hl@prefix{hl}%
+ \def\hl@param{type}%
+ \let\hl@all@groups\hl@groups
+ \futurelet\hl@excl\hl@param@read@excl
+}%
+\def\hlopts{%
+ \def\hl@prefix{hl}%
+ \def\hl@param{opts}%
+ \let\hl@all@groups\hl@groups
+ \futurelet\hl@excl\hl@param@read@excl
+}%
+\def\hl@param@read@excl{%
+ \ifx!\hl@excl
+ \let\next\hl@param@read@opt@arg
+ \@params@overridetrue
+ \else
+ \def\next{\hl@param@read@opt@arg{!}}%
+ \@params@overridefalse
+ \fi
+ \next
+}%
+\def\hl@param@read@opt@arg#1{% #1 is the `!', ignore it.
+ \@getoptionalarg\hl@setparam
+}%
+\def\@hl@setparam#1{%
+ \ifx\@optionalarg\empty
+ \hl@setparam@default{#1}% Set default.
+ \else
+ \let\hl@do@all@groups\gobble
+ \For\hl@group:=\@optionalarg\do{%
+ \ifx\hl@group\hl@asterisk@word
+ \def\hl@do@all@groups{\let\@optionalarg\hl@all@groups \hl@setparam}%
+ \else
+ \hl@setparam@group{#1}%
+ \fi
+ }%
+ \hl@do@all@groups{#1}%
+ \fi
+}%
+\def\hl@setparam@group#1{%
+ \ifx\hl@group\empty
+ \hl@setparam@default{#1}%
+ \else
+ \expandafter\ifx\csname\hl@prefix @\hl@param @\hl@group\endcsname\relax
+ \errmessage{Hyperlink group `\hl@prefix:\hl@param:\hl@group' is not defined}%
+ \fi
+ \ifx\hl@param\hl@opts@word
+ \if@params@override
+ \expandafter\let\csname\hl@prefix @\hl@param @\hl@group\endcsname\empty
+ \fi
+ \hl@update@opts@with@list{#1}% #1 will be used in the \for
+ \else
+ \ece\def{\hl@prefix @\hl@param @\hl@group}{#1}%
+ \fi
+ \fi
+}%
+\def\hl@setparam@default#1{%
+ \ifx\hl@param\hl@opts@word
+ \For\hl@opt:=#1\do{%
+ \ifx\hl@opt\empty \else
+ \expandafter\hl@set@opt\hl@opt=,%
+ \fi
+ }%
+ \else
+ \expandafter\ifx\csname\hl@prefix @\hl@param\endcsname\relax
+ \message{Default hyperlink parameter `\hl@prefix:\hl@param' is not defined}%
+ \fi
+ \ece\def{\hl@prefix @\hl@param}{#1}%
+ \fi
+}%
+\def\hl@update@opts@with@list#1{%
+ \global\expandafter\let\expandafter\hl@update@new@list
+ \csname \hl@prefix @opts@\hl@group\endcsname
+ \begingroup
+ \For\hl@opt:=#1\do{%
+ \hl@update@opts@with@opt
+ }%
+ \endgroup
+ \ece\let{\hl@prefix @opts@\hl@group}\hl@update@new@list
+}%
+\def\hl@update@opts@with@opt{%
+ \global\let\hl@update@old@list\hl@update@new@list
+ \global\let\hl@update@new@list\empty
+ \global\let\hl@update@new@opt\hl@opt
+ \expandafter\hl@parse@opt@key\hl@opt=,%
+ \let\hl@update@new@key\hl@update@key
+ \global\let\hl@update@comma\empty
+ \begingroup
+ \for\hl@opt:=\hl@update@old@list\do{%
+ \ifx\hl@opt\empty \else % Skip empty `options'.
+ \expandafter\hl@parse@opt@key\hl@opt=,%
+ \toks@=\expandafter{\hl@update@new@list}%
+ \ifx\hl@update@key\hl@update@new@key
+ \ifx\hl@update@new@opt\empty \else % Skip multiple options.
+ \toks@ii=\expandafter{\hl@update@new@opt}%
+ \xdef\hl@update@new@list{\the\toks@\hl@update@comma\the\toks@ii}%
+ \global\let\hl@update@new@opt\empty
+ \global\def\hl@update@comma{,}%
+ \fi
+ \else
+ \toks@ii=\expandafter{\hl@opt}%
+ \xdef\hl@update@new@list{\the\toks@\hl@update@comma\the\toks@ii}%
+ \global\def\hl@update@comma{,}%
+ \fi
+ \fi
+ }%
+ \endgroup
+ \ifx\hl@update@new@opt\empty \else
+ \toks@=\expandafter{\hl@update@new@list}%
+ \toks@ii=\expandafter{\hl@update@new@opt}%
+ \xdef\hl@update@new@list{\the\toks@\hl@update@comma\the\toks@ii}%
+ \fi
+}%
+\def\hl@parse@opt@key#1=#2,{\def\hl@update@key{#1}}%
+\def\hldest@opt@raise{\normalbaselineskip}%
+\def\hl@opt@colormodel{cmyk}%
+\def\hl@opt@color{0.28,1,1,0.35}%
+\def\hldest@on@definexref{0}%
+\def\hldest@on@xrdef{0}%
+\def\hldest@on@li{0}%
+\def\hldest@on@eq{0}% \eqdef and friends
+\def\hldest@on@bib{0}% \biblabelprint (BibTeX)
+\def\hldest@on@foot{0}% \footnote / \numberedfootnote
+\def\hldest@on@footback{0}% back-ref for \footnote / \numberedfootnote
+\def\hldest@on@idx{0}% both `page' dests and `exact' dests
+\let\hldest@type@definexref\empty
+\let\hldest@type@xrdef\empty
+\let\hldest@type@li\empty
+\let\hldest@type@eq\empty % \eqdef and friends
+\let\hldest@type@bib\empty % \biblabelprint (BibTeX)
+\let\hldest@type@foot\empty % \footnote / \numberedfootnote
+\let\hldest@type@footback\empty % back-ref for \footnote / \numberedfootnote
+\let\hldest@type@idx\empty % both `page' dests and `exact' dests
+\let\hldest@opts@definexref\empty
+\let\hldest@opts@xrdef\empty
+\let\hldest@opts@li\empty
+\def\hldest@opts@eq{raise=1.7\normalbaselineskip}% \eqdef and friends
+\let\hldest@opts@bib\empty % \biblabelprint (BibTeX)
+\let\hldest@opts@foot\empty % \footnote / \numberedfootnote
+\let\hldest@opts@footback\empty % back-ref for \footnote / \numberedfootnote
+\let\hldest@opts@idx\empty % both `page' dests and `exact' dests
+\def\hl@on@ref{0}% \refn and \xrefn, \ref, \refs
+\def\hl@on@xref{0}%
+\def\hl@on@eq{0}% \eqref and \eqrefn
+\def\hl@on@cite{0}% \cite (BibTeX)
+\def\hl@on@foot{0}% \footnote / \numberedfootnote
+\def\hl@on@footback{0}% back-reference for \footnote / \numberedfootnote
+\def\hl@on@idx{0}%
+\def\hl@on@url{0}% \url from url.sty
+\def\hl@on@hrefint{0}% \href with internal #labels
+\def\hl@on@hrefext{0}% \href with external labels (URLs)
+\let\hl@type@ref\empty % \refn and \xrefn, \ref, \refs
+\let\hl@type@xref\empty
+\let\hl@type@eq\empty % \eqref and \eqrefn
+\let\hl@type@cite\empty % \cite (BibTeX)
+\let\hl@type@foot\empty % \footnote / \numberedfootnote
+\let\hl@type@footback\empty % back-reference for \footnote / \numberedfootnote
+\let\hl@type@idx\empty
+\let\hl@type@url\empty % \url from url.sty (this will be set to `url' by
+\let\hl@type@hrefint\empty % \href with internal #labels
+\let\hl@type@hrefext\empty % \href with external labels (URLs) (this
+\let\hl@opts@ref\empty % \refn and \xrefn, \ref, \refs
+\let\hl@opts@xref\empty
+\let\hl@opts@eq\empty % \eqref and \eqrefn
+\let\hl@opts@cite\empty % \cite (BibTeX)
+\let\hl@opts@foot\empty % \footnote / \numberedfootnote
+\let\hl@opts@footback\empty % back-reference for \footnote / \numberedfootnote
+\let\hl@opts@idx\empty
+\let\hl@opts@url\empty % \url from url.sty
+\let\hl@opts@hrefint\empty % \href with internal #labels
+\let\hl@opts@hrefext\empty % \href with external labels (URLs)
+\def\@hlon{\@hlonoff@value@stub{hl}\@@hlon1 }%
+\def\@hloff{\@hlonoff@value@stub{hl}\@@hloff0 }%
+\def\@hldeston{\@hlonoff@value@stub{hldest}\@@hldeston1 }%
+\def\@hldestoff{\@hlonoff@value@stub{hldest}\@@hldestoff0 }%
+\def\@hlonoff@value@stub#1#2#3{%
+ \def\hl@prefix{#1}%
+ \let\hl@on@empty#2%
+ \def\hl@value{#3}%
+ \expandafter\let\expandafter\hl@all@groups
+ \csname \hl@prefix @groups\endcsname
+ \@getoptionalarg\@finhlswitch
+}%
+\def\@finhlswitch{%
+ \ifx\@optionalarg\empty
+ \hl@on@empty
+ \fi
+ \let\hl@do@all@groups\relax
+ \For\hl@group:=\@optionalarg\do{%
+ \ifx\hl@group\hl@asterisk@word
+ \let\@optionalarg\hl@all@groups
+ \let\hl@do@all@groups\@finhlswitch
+ \else
+ \ifx\hl@group\empty
+ \hl@on@empty
+ \else
+ \expandafter\ifx\csname\hl@prefix @on@\hl@group\endcsname \relax
+ \errmessage{Hyperlink group `\hl@prefix:on:\hl@group'
+ is not defined}%
+ \fi
+ \ece\edef{\hl@prefix @on@\hl@group}{\hl@value}%
+ \fi
+ \fi
+ }%
+ \hl@do@all@groups
+}%
+\def\@@hlon{%
+ \let\hlstart\@hlstart
+ \let\hlend\@hlend
+}%
+\def\@@hloff{%
+ \def\hlstart##1##2##3{\leavevmode\ignorespaces}%
+ \let\hlend\relax
+}%
+\def\@@hldeston{%
+ \let\hldest\@hldest
+}%
+\def\@@hldestoff{%
+ \def\hldest##1##2##3{\ignorespaces}%
+}%
+\def\hl@idxexact@word{idxexact}%
+\def\hl@idxpage@word{idxpage}%
+\def\hl@idxnone@word{idxnone}%
+\def\hl@raw@word{raw}%
+\def\enablehyperlinks{\@getoptionalarg\@finenablehyperlinks}%
+\def\@finenablehyperlinks{%
+ \let\hl@selecteddriver\empty
+ \def\hldest@place@idx{0}%
+ \for\hl@arg:=\@optionalarg\do{%
+ \ifx\hl@arg\hl@idxexact@word
+ \def\hldest@place@idx{1}%
+ \else
+ \ifx\hl@arg\hl@idxnone@word
+ \def\hldest@place@idx{-1}%
+ \else
+ \ifx\hl@arg\hl@idxpage@word
+ \def\hldest@place@idx{0}%
+ \else
+ \let\hl@selecteddriver\hl@arg
+ \fi
+ \fi
+ \fi
+ }%
+ \ifx\hl@selecteddriver\empty
+ \ifpdf
+ \def\hl@selecteddriver{pdftex}%
+ \message{^^JEplain: using `pdftex' hyperlink driver.}%
+ \else
+ \def\hl@selecteddriver{hypertex}%
+ \message{^^JEplain: using `hypertex' hyperlink driver.}%
+ \fi
+ \else
+ \expandafter\ifx\csname hldriver@\hl@selecteddriver\endcsname \relax
+ \errmessage{No hyperlink driver `\hl@selecteddriver' available}%
+ \fi
+ \fi
+ \let\hl@setparam\@hl@setparam
+ \csname hldriver@\hl@selecteddriver\endcsname
+ \def\@finenablehyperlinks{\errmessage{Hyperlink driver `\hl@selecteddriver'
+ already selected}}%
+ \let\hldriver@nolinks\undefined
+ \let\hldriver@hypertex\undefined
+ \let\hldriver@pdftex \undefined
+ \let\hldriver@dvipdfm\undefined
+ \let\hloff\@hloff
+ \let\hlon\@hlon
+ \let\hldestoff\@hldestoff
+ \let\hldeston\@hldeston
+ \hlon[*,]\hloff[foot,footback]%
+ \hldeston[*,]\hldestoff[foot,footback]%
+}%
+\def\hldriver@nolinks{%
+ \def\@hldest##1##2##3{%
+ \edef\temp{\write-1{hldest: ##3}}%
+ \ifvmode
+ \temp
+ \else
+ \allowhyphens
+ \expandafter\smash\expandafter{\temp}%
+ \allowhyphens
+ \fi
+ \ignorespaces
+ }%
+ \def\@hlstart##1##2##3{%
+ \leavevmode
+ \begingroup % Start the color group.
+ \edef\temp{\write-1{hlstart: ##3}}%
+ \temp
+ \ignorespaces
+ }%
+ \def\@hlend{%
+ \edef\temp{\write-1{hlend}}%
+ \temp
+ \endgroup % End the color group from \@hlstart.
+ }%
+ \let\hl@setparam\gobble
+}%
+{\catcode`\#=\other
+\gdef\hlhash{#}}%
+\def\hldriver@hypertex{%
+ \def\hldest@type{xyz}%
+ \let\hldest@opt@cmd \empty
+ \def\hldest@driver{%
+ \ifx\@hltype\hl@raw@word
+ \csname \hldest@opt@cmd \endcsname
+ \else
+ \special{html:<a name="\@hllabel">}\special{html:</a>}%
+ \fi
+ }%
+ \let\hldest@typeh@raw \empty
+ \let\hldest@typeh@xyz \empty
+ \def\hl@type{name}%
+ \ifx\hl@type@url\empty
+ \def\hl@type@url{url}%
+ \fi
+ \ifx\hl@type@hrefext\empty
+ \def\hl@type@hrefext{url}%
+ \fi
+ \let\hl@opt@cmd \empty
+ \let\hl@opt@ext \empty
+ \let\hl@opt@file \empty
+ \def\hl@driver{%
+ \ifx\@hltype\hl@raw@word
+ \csname \hl@opt@cmd \endcsname
+ \else
+ \def\hlstart@preamble{html:<a href="}%
+ \csname hl@typeh@\@hltype\endcsname
+ \fi
+ }%
+ \let\hl@typeh@raw \empty
+ \def\hl@typeh@name{\special{\hlstart@preamble \hlhash\@hllabel">}}%
+ \def\hl@typeh@filename{%
+ \special{%
+ \hlstart@preamble
+ file:\hl@opt@file\hl@opt@ext
+ \ifempty\@hllabel \else \hlhash\@hllabel\fi
+ ">%
+ }%
+ }%
+ \def\hl@typeh@url{%
+ \special{%
+ \hlstart@preamble
+ \@hllabel
+ ">%
+ }%
+ }%
+ \def\@hlend{\special{html:</a>}\endgroup}% End the group from \@hlstart.
+}%
+\def\hldriver@pdftex{%
+\ifpdf % PDF output is enabled.
+ \def\hldest@type{xyz}%
+ \let\hldest@opt@width \empty
+ \let\hldest@opt@height \empty
+ \let\hldest@opt@depth \empty
+ \let\hldest@opt@zoom \empty
+ \let\hldest@opt@cmd \empty
+ \def\hldest@driver{%
+ \ifx\@hltype\hl@raw@word
+ \csname \hldest@opt@cmd \endcsname
+ \else
+ \pdfdest name{\@hllabel}\@hltype
+ \csname hldest@typeh@\@hltype\endcsname
+ \fi
+ }%
+ \let\hldest@typeh@raw \empty
+ \let\hldest@typeh@fit \empty
+ \let\hldest@typeh@fith \empty
+ \let\hldest@typeh@fitv \empty
+ \let\hldest@typeh@fitb \empty
+ \let\hldest@typeh@fitbh \empty
+ \let\hldest@typeh@fitbv \empty
+ \def\hldest@typeh@fitr{%
+ \ifx\hldest@opt@width \empty \else width \hldest@opt@width \fi
+ \ifx\hldest@opt@height \empty \else height \hldest@opt@height \fi
+ \ifx\hldest@opt@depth \empty \else depth \hldest@opt@depth \fi
+ }%
+ \def\hldest@typeh@xyz{%
+ \ifx\hldest@opt@zoom\empty \else zoom \hldest@opt@zoom \fi
+ }%
+ \def\hl@type{name}%
+ \ifx\hl@type@url\empty
+ \def\hl@type@url{url}%
+ \fi
+ \ifx\hl@type@hrefext\empty
+ \def\hl@type@hrefext{url}%
+ \fi
+ \let\hl@opt@width \empty
+ \let\hl@opt@height \empty
+ \let\hl@opt@depth \empty
+ \def\hl@opt@bstyle {S}%
+ \def\hl@opt@bwidth {1}%
+ \let\hl@opt@bcolor \empty
+ \let\hl@opt@hlight \empty
+ \let\hl@opt@bdash \empty
+ \let\hl@opt@pagefit \empty
+ \let\hl@opt@cmd \empty
+ \let\hl@opt@file \empty
+ \let\hl@opt@newwin \empty
+ \def\hl@driver{%
+ \ifx\@hltype\hl@raw@word
+ \csname \hl@opt@cmd \endcsname
+ \else
+ \let\hl@BSspec\relax % construct
+ \ifx\hl@opt@bstyle \empty
+ \ifx\hl@opt@bwidth \empty
+ \ifx\hl@opt@bdash \empty
+ \let\hl@BSspec\empty % don't construct
+ \fi
+ \fi
+ \fi
+ \def\hlstart@preamble{%
+ \pdfstartlink
+ \ifx\hl@opt@width \empty \else width \hl@opt@width \fi
+ \ifx\hl@opt@height \empty \else height \hl@opt@height \fi
+ \ifx\hl@opt@depth \empty \else depth \hl@opt@depth \fi
+ attr{%
+ \ifx\hl@opt@bcolor\empty\else /C[\hl@opt@bcolor]\fi
+ \ifx\hl@opt@hlight\empty\else /H/\hl@opt@hlight\fi
+ \ifx\hl@BSspec\relax
+ /BS<<%
+ /Type/Border%
+ \ifx\hl@opt@bstyle\empty\else /S/\hl@opt@bstyle\fi
+ \ifx\hl@opt@bwidth\empty\else /W \hl@opt@bwidth\fi
+ \ifx\hl@opt@bdash\empty \else /D[\hl@opt@bdash]\fi
+ >>%
+ \fi
+ }%
+ }%
+ \csname hl@typeh@\@hltype\endcsname
+ \fi
+ }%
+ \let\hl@typeh@raw\empty
+ \def\hl@typeh@name{\hlstart@preamble goto name{\@hllabel}}%
+ \def\hl@typeh@num{\hlstart@preamble goto num \@hllabel}%
+ \def\hl@typeh@page{%
+ \count@=\@hllabel
+ \advance\count@ by-1
+ \hlstart@preamble
+ user{%
+ /Subtype/Link%
+ /Dest%
+ [\the\count@
+ \ifx\hl@opt@pagefit\empty/Fit\else\hl@opt@pagefit\fi]%
+ }%
+ }%
+ \def\hl@typeh@filename{\hl@file{(\@hllabel)}}%
+ \def\hl@typeh@filepage{%
+ \count@=\@hllabel
+ \advance\count@ by-1
+ \hl@file{%
+ [\the\count@ \ifx\hl@opt@pagefit\empty/Fit\else\hl@opt@pagefit\fi]%
+ }%
+ }%
+ \def\hl@file##1{%
+ \hlstart@preamble
+ user{%
+ /Subtype/Link%
+ /A<<%
+ /Type/Action%
+ /S/GoToR%
+ /D##1%
+ /F(\hl@opt@file)%
+ \ifx\hl@opt@newwin\empty \else
+ /NewWindow \ifcase\hl@opt@newwin false\else true\fi
+ \fi
+ >>%
+ }%
+ }%
+ \def\hl@typeh@url{%
+ \hlstart@preamble
+ user{%
+ /Subtype/Link%
+ /A<<%
+ /Type/Action%
+ /S/URI%
+ /URI(\@hllabel)%
+ >>%
+ }%
+ }%
+ \def\@hlend{\pdfendlink\endgroup}% End the group from the \@hlstart.
+\else % PDF output is not enabled.
+ \message{Eplain warning: `pdftex' hyperlink driver: PDF output is^^J
+ \space not enabled, falling back on `nolinks' driver.}%
+ \hldriver@nolinks
+\fi
+}%
+\def\hldriver@dvipdfm{%
+ \def\hldest@type{xyz}%
+ \let\hldest@opt@left \empty
+ \let\hldest@opt@top \empty
+ \let\hldest@opt@right \empty
+ \let\hldest@opt@bottom \empty
+ \let\hldest@opt@zoom \empty
+ \let\hldest@opt@cmd \empty
+ \def\hldest@driver{%
+ \ifx\@hltype\hl@raw@word
+ \csname \hldest@opt@cmd \endcsname
+ \else
+ \def\hldest@preamble{%
+ pdf: dest (\@hllabel) [@thispage
+ }%
+ \csname hldest@typeh@\@hltype\endcsname
+ \fi
+ }%
+ \let\hldest@typeh@raw\empty
+ \def\hldest@typeh@fit{%
+ \special{\hldest@preamble /Fit]}%
+ }%
+ \def\hldest@typeh@fith{%
+ \special{\hldest@preamble /FitH
+ \ifx\hldest@opt@top\empty @ypos \else \hldest@opt@top \fi]}%
+ }%
+ \def\hldest@typeh@fitv{%
+ \special{\hldest@preamble /FitV
+ \ifx\hldest@opt@left\empty @xpos \else \hldest@opt@left \fi]}%
+ }%
+ \def\hldest@typeh@fitb{%
+ \special{\hldest@preamble /FitB]}%
+ }%
+ \def\hldest@typeh@fitbh{%
+ \special{\hldest@preamble /FitBH
+ \ifx\hldest@opt@top\empty @ypos \else \hldest@opt@top \fi]}%
+ }%
+ \def\hldest@typeh@fitbv{%
+ \special{\hldest@preamble /FitBV
+ \ifx\hldest@opt@left\empty @xpos \else \hldest@opt@left \fi]}%
+ }%
+ \def\hldest@typeh@fitr{%
+ \special{\hldest@preamble /FitR
+ \ifx\hldest@opt@left\empty @xpos\else\hldest@opt@left\fi\space
+ \ifx\hldest@opt@bottom\empty @ypos\else\hldest@opt@bottom\fi\space
+ \ifx\hldest@opt@right\empty @xpos\else\hldest@opt@right\fi\space
+ \ifx\hldest@opt@top\empty @ypos\else\hldest@opt@top \fi]}%
+ }%
+ \def\hldest@typeh@xyz{%
+ \begingroup
+ \ifx\hldest@opt@zoom\empty
+ \count1=\z@ \count2=\z@
+ \else
+ \count2=\hldest@opt@zoom
+ \count1=\count2 \divide\count1 by 1000
+ \count3=\count1 \multiply\count3 by 1000
+ \advance\count2 by -\count3
+ \fi
+ \special{\hldest@preamble /XYZ
+ \ifx\hldest@opt@left\empty @xpos\else\hldest@opt@left\fi\space
+ \ifx\hldest@opt@top\empty @ypos\else\hldest@opt@top\fi\space
+ \the\count1.\the\count2]}%
+ \endgroup
+ }%
+ \def\hl@type{name}%
+ \ifx\hl@type@url\empty
+ \def\hl@type@url{url}%
+ \fi
+ \ifx\hl@type@hrefext\empty
+ \def\hl@type@hrefext{url}%
+ \fi
+ \def\hl@opt@bstyle {S}%
+ \def\hl@opt@bwidth {1}%
+ \let\hl@opt@bcolor \empty
+ \let\hl@opt@hlight \empty
+ \let\hl@opt@bdash \empty
+ \let\hl@opt@pagefit \empty
+ \let\hl@opt@cmd \empty
+ \let\hl@opt@file \empty
+ \let\hl@opt@newwin \empty
+ \def\hl@driver{%
+ \ifx\@hltype\hl@raw@word
+ \csname \hl@opt@cmd \endcsname
+ \else
+ \let\hl@BSspec\relax % construct
+ \ifx\hl@opt@bstyle \empty
+ \ifx\hl@opt@bwidth \empty
+ \ifx\hl@opt@bdash \empty
+ \let\hl@BSspec\empty % don't construct
+ \fi
+ \fi
+ \fi
+ \def\hlstart@preamble{%
+ pdf: beginann
+ <<%
+ /Type/Annot%
+ /Subtype/Link%
+ \ifx\hl@opt@bcolor\empty\else /C[\hl@opt@bcolor]\fi
+ \ifx\hl@opt@hlight\empty\else /H/\hl@opt@hlight\fi
+ \ifx\hl@BSspec\relax
+ /BS<<%
+ /Type/Border%
+ \ifx\hl@opt@bstyle\empty\else /S/\hl@opt@bstyle\fi
+ \ifx\hl@opt@bwidth\empty\else /W \hl@opt@bwidth\fi
+ \ifx\hl@opt@bdash\empty \else /D[\hl@opt@bdash]\fi
+ >>%
+ \fi
+ }%
+ \csname hl@typeh@\@hltype\endcsname
+ \fi
+ }%
+ \let\hl@typeh@raw\empty
+ \def\hl@typeh@name{\special{\hlstart@preamble /Dest(\@hllabel)>>}}%
+ \def\hl@typeh@page{%
+ \count@=\@hllabel
+ \advance\count@ by-1
+ \special{%
+ \hlstart@preamble
+ /Dest[\the\count@
+ \ifx\hl@opt@pagefit\empty/Fit\else\hl@opt@pagefit\fi]%
+ >>%
+ }%
+ }%
+ \def\hl@typeh@filename{\hl@file{(\@hllabel)}}%
+ \def\hl@typeh@filepage{%
+ \count@=\@hllabel
+ \advance\count@ by-1
+ \hl@file{%
+ [\the\count@ \ifx\hl@opt@pagefit\empty/Fit\else\hl@opt@pagefit\fi]%
+ }%
+ }%
+ \def\hl@file##1{%
+ \special{%
+ \hlstart@preamble
+ /A<<%
+ /Type/Action%
+ /S/GoToR%
+ /D##1%
+ /F(\hl@opt@file)%
+ \ifx\hl@opt@newwin\empty \else
+ /NewWindow \ifcase\hl@opt@newwin false\else true\fi
+ \fi
+ >>%
+ >>%
+ }%
+ }%
+ \def\hl@typeh@url{%
+ \special{%
+ \hlstart@preamble
+ /A<<%
+ /Type/Action%
+ /S/URI%
+ /URI(\@hllabel)%
+ >>%
+ >>%
+ }%
+ }%
+ \def\@hlend{\special{pdf: endann}\endgroup}% End the group from \@hlstart.
+}%
+\def\href{%
+ \bgroup
+ \uncatcodespecials
+ \catcode`\{=1 \catcode`\}=2
+ \@href
+}%
+\def\@href#1{% We'll read #2 (TEXT) later.
+ \egroup
+ \edef\@hreftmp{\ifempty{#1}{}\fi}% Parameter stuffing for \@@href.
+ \expandafter\@@href\@hreftmp#1\@@
+}%
+\def\href@end@int{\hlend@impl{hrefint}}%
+\def\href@end@ext{\hlend@impl{hrefext}}%
+\def\@@href#1#2\@@{%
+ \def\@hreftmp{#1}%
+ \ifx\@hreftmp\hlhash
+ \let\href@end\href@end@int
+ \hlstart@impl{hrefint}{#2}%
+ \else
+ \let\href@end\href@end@ext
+ \hlstart@impl{hrefext}{#1#2}%
+ \fi
+ \@@@href
+}%
+\def\@@@href{%
+ \futurelet\@hreftmp\href@
+}%
+\def\href@{%
+ \ifcat\bgroup\noexpand\@hreftmp
+ \let\@hreftmp\href@@
+ \else
+ \let\@hreftmp\href@@@
+ \fi
+ \@hreftmp
+}%
+\def\href@@{\bgroup\aftergroup\href@end \let\@hreftmp}%
+\def\href@@@#1{#1\href@end}%
+\def\hldeston{\errmessage{Please enable hyperlinks with
+ \string\enablehyperlinks\space before using hyperlink commands
+ (consider selecting the `nolinks' driver to ignore all hyperlink
+ commands in your document)}}%
+\let\hldestoff\hldeston \let\hlon\hldeston \let\hloff\hldeston
+\let\hlstart\hldeston \let\hlend\hldeston \let\hldest\hldeston
+\let\hl@setparam\hldeston
+\@hloff[*]\@hldestoff[*]%
+\newif\ifusepkg@miniltx@loaded
+\newcount\usepkg@recursion@level
+\def\usepkg@rcrs{\the\usepkg@recursion@level}%
+\let\usepkg@at@begin@document\empty
+\let\usepkg@at@end@of@package\empty
+\def\usepkg@word@autopict{autopict}%
+\def\usepkg@word@psfrag{psfrag}%
+\long\def\beginpackages#1\endpackages{%
+ \let\usepackage\real@usepackage
+ \let\DoNotLoadEpstopdf=t
+ \let\eplaininput=\input
+ #1%
+ \usepkg@at@begin@document
+ \global\let\usepkg@at@begin@document\empty
+ \global\let\usepackage\fake@usepackage
+ \let\packageinput=\input
+ \let\input=\eplaininput
+ \ifx\resetatcatcode\@undefined \else\resetatcatcode \fi
+}%
+\def\fake@usepackage{\errmessage{You should not use \string\usepackage\space outside of^^J
+ \@spaces\string\beginpackages...\string\endpackages\space environment}%
+}%
+\def\eplain@RequirePackage{%
+ \global\ece\let{usepkg@save@pkg\usepkg@rcrs}\usepkg@pkg
+ \global\ece\let{usepkg@save@options\usepkg@rcrs}\usepkg@options
+ \global\ece\let{usepkg@save@date\usepkg@rcrs}\usepkg@date
+ \global\ece\let{usepkg@at@end@of@package\usepkg@rcrs}\usepkg@at@end@of@package
+ \global\advance\usepkg@recursion@level by\@ne
+ \real@usepackage
+}%
+\let\usepackage\fake@usepackage
+\def\real@usepackage{\@getoptionalarg\@finusepackage}%
+\def\@finusepackage#1{%
+ \let\usepkg@options\@optionalarg
+ \ifempty{#1}%
+ \errmessage{No packages specified}%
+ \fi
+ \ifusepkg@miniltx@loaded \else
+ \testfileexistence[miniltx]{tex}%
+ \if@fileexists
+ \input miniltx.tex
+ \global\usepkg@miniltx@loadedtrue
+ \global\let\RequirePackage\eplain@RequirePackage
+ \global\let\DeclareOption\eplain@DeclareOption
+ \global\let\PassOptionsToPackage\eplain@PassOptionsToPackage
+ \global\let\ExecuteOptions\eplain@ExecuteOptions
+ \gdef\ProcessOptions{\@ifstar\eplain@ProcessOptions
+ \eplain@ProcessOptions}%
+ \global\let\AtBeginDocument\eplain@AtBeginDocument
+ \global\let\AtEndOfPackage\eplain@AtEndOfPackage
+ \global\let\ProvidesFile\eplain@ProvidesFile
+ \global\let\ProvidesPackage\eplain@ProvidesPackage
+ \else
+ \errmessage{miniltx.tex not found, cannot load LaTeX packages}%
+ \fi
+ \fi
+ \@ifnextchar[%]
+ {\@finfinusepackage{#1}}%
+ {\@finfinusepackage{#1}[]}%
+}%
+\def\@finfinusepackage#1[#2]{%
+ \edef\usepkg@date{#2}%
+ \let\usepkg@load@list\empty
+ \for\usepkg@pkg:=#1\do{%
+ \toks@=\expandafter{\usepkg@load@list}%
+ \edef\usepkg@load@list{%
+ \the\toks@
+ \noexpand\usepkg@load@pkg{\usepkg@pkg}%
+ }%
+ }%
+ \usepkg@load@list
+ \ifnum\usepkg@recursion@level>0
+ \global\advance\usepkg@recursion@level by\m@ne
+ \expandafter\let\expandafter\usepkg@pkg\csname usepkg@save@pkg\usepkg@rcrs\endcsname
+ \expandafter\let\expandafter\usepkg@options\csname usepkg@save@options\usepkg@rcrs\endcsname
+ \expandafter\let\expandafter\usepkg@date\csname usepkg@save@date\usepkg@rcrs\endcsname
+ \expandafter\let\expandafter\usepkg@at@end@of@package\csname usepkg@at@end@of@package\usepkg@rcrs\endcsname
+ \global\ece\let{usepkg@save@pkg\usepkg@rcrs}\undefined
+ \global\ece\let{usepkg@save@options\usepkg@rcrs}\undefined
+ \global\ece\let{usepkg@save@date\usepkg@rcrs}\undefined
+ \global\ece\let{usepkg@at@end@of@package\usepkg@rcrs}\undefined
+ \fi
+}%
+\def\usepkg@load@pkg#1{%
+ \def\usepkg@pkg{#1}%
+ \ifx\usepkg@pkg\usepkg@word@autopict
+ \testfileexistence[picture]{tex}%
+ \if@fileexists \else
+ \errmessage{Loader `picture.tex' for package `\usepkg@pkg' not found}%
+ \fi
+ \else
+ \ifx\usepkg@pkg\usepkg@word@psfrag
+ \testfileexistence[psfrag]{tex}%
+ \if@fileexists \else
+ \errmessage{Loader `psfrag.tex' for package `\usepkg@pkg' not found}%
+ \fi
+ \fi
+ \fi
+ \ifundefined{ver@\usepkg@pkg.sty}%
+ \expandafter\@finusepkg@load@pkg
+ \else
+ \immediate\write-1{^^J\linenumber Eplain: package `\usepkg@pkg' already
+ loaded, skipping reloading}%
+ \fi
+}%
+\def\@finusepkg@load@pkg{%
+ \testfileexistence[\usepkg@pkg]{sty}%
+ \if@fileexists \else
+ \errmessage{Package `\usepkg@pkg' not found}%
+ \fi
+ \expandafter\let\expandafter\temp\csname usepkg@options@\usepkg@pkg\endcsname
+ \ifx\temp\relax
+ \let\temp\empty
+ \fi
+ \ifx\temp\empty
+ \let\temp\usepkg@options
+ \else
+ \ifx\usepkg@options\empty \else
+ \edef\temp{\temp,\usepkg@options}%
+ \fi
+ \fi
+ \global\ece\let{usepkg@options@\usepkg@pkg}\temp
+ \let\usepackage\eplain@RequirePackage
+ \global\let\usepkg@at@end@of@package\empty
+ \ifx\usepkg@pkg\usepkg@word@autopict
+ \input picture.tex
+ \else
+ \ifx\usepkg@pkg\usepkg@word@psfrag
+ \input \usepkg@pkg.tex
+ \else
+ \input \usepkg@pkg.sty
+ \fi
+ \fi
+ \usepkg@at@end@of@package
+ \global\let\usepkg@at@end@of@package\empty
+ \let\usepackage\real@usepackage
+ \global\ece\let{usepkg@options@\usepkg@pkg}\undefined
+ \def\Url@HyperHook##1{\hlstart@impl{url}{\Url@String}##1\hlend@impl{url}}%
+}%
+\def\eplain@DeclareOption#1#2{%
+ \toks@{#2}%
+ \expandafter\xdef\csname usepkg@option@\usepkg@pkg @#1\endcsname{\the\toks@}%
+}%
+\def\eplain@PassOptionsToPackage#1#2{%
+ \ifempty{#1}\else
+ \for\usepkg@temp:=#2\do{%
+ \expandafter\let\expandafter\temp\csname usepkg@options@\usepkg@temp\endcsname
+ \ifx\temp\relax
+ \let\temp\empty
+ \fi
+ \ifx\temp\empty
+ \edef\temp{#1}%
+ \else
+ \edef\temp{\temp,#1}%
+ \fi
+ \global\ece\let{usepkg@options@\usepkg@temp}\temp
+ }%
+ \fi
+}%
+\def\usepkg@exec@options#1{%
+ \for\CurrentOption:=#1\do{%
+ \expandafter\let\expandafter\usepkg@temp
+ \csname usepkg@option@\usepkg@pkg @\CurrentOption\endcsname
+ \ifx\usepkg@temp\relax
+ \expandafter\let\expandafter\temp\csname usepkg@option@\usepkg@pkg @*\endcsname
+ \ifx\temp\relax
+ \errmessage{Unknown option `\CurrentOption' to package `\usepkg@pkg'}%
+ \else
+ \temp
+ \fi
+ \else
+ \usepkg@temp
+ \fi
+ }%
+}%
+\let\eplain@ExecuteOptions\usepkg@exec@options
+\def\eplain@ProcessOptions{%
+ \expandafter\usepkg@exec@options\csname usepkg@options@\usepkg@pkg\endcsname
+}%
+\def\usepkg@accumulate@cmds#1#2{%
+ \toks@=\expandafter{#1}%
+ \toks@ii={#2}%
+ \xdef#1{\the\toks@\the\toks@ii}%
+}%
+\def\eplain@AtBeginDocument{\usepkg@accumulate@cmds\usepkg@at@begin@document}%
+\def\eplain@AtEndOfPackage{\usepkg@accumulate@cmds\usepkg@at@end@of@package}%
+\def\eplain@ProvidesPackage#1{%
+ \@ifnextchar[%]
+ {\eplain@pr@videpackage{#1.sty}}{\eplain@pr@videpackage#1[]}%
+}%
+\def\eplain@pr@videpackage#1[#2]{%
+ \wlog{#1: #2}%
+ \expandafter\xdef\csname ver@#1\endcsname{#2}%
+ \@ifl@t@r{#2}\usepkg@date{}%
+ {\message{Warning: you have requested package `\usepkg@pkg', version \usepkg@date,^^J
+ \@spaces but only version `\csname ver@#1\endcsname' is available.}}%
+}%
+\def\eplain@ProvidesFile#1{%
+ \@ifnextchar[%]
+ {\eplain@pr@videfile{#1}}{\eplain@pr@videfile#1[]}%
+}%
+\def\eplain@pr@videfile#1[#2]{%
+ \wlog{#1: #2}%
+ \expandafter\xdef\csname ver@#1\endcsname{#2}%
+}%
+\def\@ifl@ter#1#2{%
+ \expandafter\@ifl@t@r
+ \csname ver@#2.#1\endcsname
+}%
+\def\@ifl@t@r#1#2{%
+ \ifnum\expandafter\@parse@version#1//00\@nil<%
+ \expandafter\@parse@version#2//00\@nil
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}%
+\def\@parse@version#1/#2/#3#4#5\@nil{#1#2#3#4 }%
+\let\ttfamily\tt
+\def\strip@prefix#1>{}%
+\def\@ifpackageloaded#1{%
+ \expandafter\ifx\csname ver@#1.sty\endcsname\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}%
+\long\def\g@addto@macro#1#2{%
+ \begingroup
+ \toks@\expandafter{#1#2}%
+ \xdef#1{\the\toks@}%
+ \endgroup
+}%
+\def\PackageWarning#1#2{%
+ \begingroup
+ \newlinechar=10 %
+ \def\MessageBreak{%
+ ^^J(#1)\@spaces\@spaces\@spaces\@spaces
+ }%
+ \immediate\write16{^^JPackage #1 Warning: #2\on@line.^^J}%
+ \endgroup
+}%
+\def\PackageWarningNoLine#1#2{%
+ \PackageWarning{#1}{#2\@gobble}%
+}%
+\def\on@line{ on input line \the\inputlineno}%
+\def\@spaces{\space\space\space\space}%
+\def\@inmatherr#1{%
+ \relax
+ \ifmmode
+ \errmessage{The command is invalid in math mode}%
+ \fi
+}%
+\let\protected@edef\edef
+\let\wlog = \@plainwlog
+\catcode`@ = \@eplainoldatcode
+\def\fmtname{eplain}%
+\def\eplain{t}%
+{\edef\plainversion{\fmtversion}%
+ \xdef\fmtversion{3.6: 30 September 2013 (and plain \plainversion)}%
+}%
diff --git a/info/impatient/cn/errors.tex b/info/impatient/cn/errors.tex
new file mode 100644
index 0000000000..1d2369b60b
--- /dev/null
+++ b/info/impatient/cn/errors.tex
@@ -0,0 +1,575 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter{ç†è§£é”™è¯¯ä¿¡æ¯}
+
+\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.
+\codefuzz = 4pc % for this chapter only (in scope of \chapter)
+\bix^^{错误信æ¯}
+解释 \TeX\ 的错误信æ¯æœ‰æ—¶å€™å°±åƒï¼Œ
+你跟医生抱怨你感觉疲ä¹æ— åŠ›ï¼ŒåŒ»ç”Ÿå´é€’给你一份血生化细目表。
+对你的痛苦的解释也许就在那里,但å´ä¸å®¹æ˜“弄清楚它是什么。
+掌æ¡ä¸€äº›ç®€å•è§„则对你ç†è§£ \TeX\ 错误信æ¯å¹¶ä»Žä¸­å—益将大有帮助。
+
+%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.
+你的第一个目标应当是ç†è§£ä»€ä¹ˆä¸œè¥¿å¯¼è‡´ \TeX\ 报错。
+第二个目标(如果是交互å¼ä½¿ç”¨ \TeX )应当是在一次è¿è¡Œä¸­æ•èŽ·å°½å¯èƒ½å¤šçš„错误。%
+\footnote{译注:本章的å„个节标题为译者所加。}
+
+\section{第一个例å­}
+
+%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}).
+我们æ¥çœ‹ä¸€ä¸ªä¾‹å­ã€‚å‡è®¾ä½ çš„输入中包å«ä¸‹é¢è¿™è¡Œï¼š
+\csdisplay
+We skip \quid a little bit.
+|
+你本想输入 `|\quad|',å´è¾“å…¥æˆ `|\quid|'。
+此时 \TeX\ 将给出下é¢çš„ä¿¡æ¯ï¼š
+\csdisplay
+!! Undefined control sequence.
+l.291 We skip \quid
+ a little bit.
+?
+|
+此信æ¯å°†åŒæ—¶å‡ºçŽ°åœ¨ç»ˆç«¯ä¸Šå’Œæ—¥å¿—文件中。
+^^{日志文件//错误信æ¯}
+第一行始终以感å¹å·(|!!|)开头,告诉你出现了什么问题。
+在 `|?|' æ示符之å‰çš„最åŽä¸¤è¡Œï¼ˆåœ¨æ­¤ä¾‹å­ä¸­åŒæ ·ä¹Ÿæ˜¯æŽ¥ä¸‹æ¥çš„两行)%
+告诉你 \TeX\ 在何处å‘现此错误。
+它在当å‰è¾“入文件的第 $291$ è¡Œå‘现了错误,
+两个信æ¯è¡Œä¹‹é—´çš„断行表示 \TeX\ 在第 $291$ 行的精确ä½ç½®ï¼Œå³åœ¨ |\quid| åŽé¢ã€‚
+当å‰è¾“入文件是指,在è¿è¡Œæ—¶çš„终端输出上,
+最接近的éžé—­åˆå·¦åœ†æ‹¬å·åŽæ˜¾ç¤ºçš„文件(è§\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.
+%|
+%}%
+è¿™ç§é”™è¯¯ï¼Œå³æŽ§åˆ¶åºåˆ—未定义,是你最常出现的错误之一。
+如果你在æ示符åŽé”®å…¥å¦ä¸€ä¸ª `|?|',\TeX\ 将显示下列信æ¯ï¼š
+{\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
+这些选择å„自的å«ä¹‰å¦‚下:
+\ulist
+\li 如果你键入 \asciichar{return},
+\TeX\ 将继续处ç†ä½ çš„文档。在此例å­ä¸­å®ƒå°±å¿½ç•¥äº† |\quid|。
+\li 如果你键入 `|S|'(或者 `|s|'——这时候大å°å†™æ˜¯ç­‰ä»·çš„),
+\TeX\ 将继续处ç†ä½ çš„文档且ä¸å†æš‚åœï¼Œ\emph{除éž}找ä¸åˆ°æŸæ–‡ä»¶ã€‚
+但错误信æ¯è¿˜æ˜¯ä¼šå‡ºçŽ°åœ¨ç»ˆç«¯ä¸Šå’Œæ—¥å¿—文件中。
+\li 如果你键入 `|R|' 或 `|r|',
+你将得到与 `|S|' 相åŒçš„结果,但此时 \TeX\ å³ä½¿æ‰¾ä¸åˆ°æ–‡ä»¶ä¹Ÿä¸ä¼šæš‚åœã€‚
+\li 如果你键入 `|Q|' 或 `|q|',
+\TeX\ 将继续处ç†ä½ çš„文档,且é‡åˆ°é”™è¯¯åŽå°†ä¸ä¼šå†æš‚åœï¼Œä¹Ÿä¸ä¼šåœ¨ç»ˆç«¯ä¸Šæ˜¾ç¤ºã€‚
+错误信æ¯è¿˜æ˜¯ä¼šè®°å½•åˆ°æ—¥å¿—文件中。
+\li 如果你键入 `|X|' 或 `|x|',
+\TeX\ 将尽力清ç†å¹²å‡€ï¼Œä¸¢å¼ƒæ­£åœ¨æž„造的页é¢ï¼Œå¹¶é€€å‡ºã€‚
+ä½ ä»ç„¶å¯ä»¥æ‰“å°æˆ–查看 \TeX\ å·²ç»ç”Ÿæˆçš„页é¢ã€‚
+\li 如果你键入 `|E|' 或 `|e|',
+\TeX\ å°†å¦‚åŒ `|X|' 或 `|x|' 那样清ç†å¹¶ä¸­æ­¢ï¼Œç„¶åŽæ‰“开文本编辑器,跳转到错误所在的行。%
+(并éžæ‰€æœ‰ç³»ç»Ÿéƒ½æ”¯æŒæ­¤é€‰é¡¹ã€‚)
+\li 如果你键入 `|H|' 或 `|h|',
+你将在终端上看到对此错误的进一步解释,å¯èƒ½è¿˜æœ‰å¯¹æ­¤é”™è¯¯çš„一些建议。
+这些信æ¯åŒæ ·ä¼šè®°å½•åˆ°ä½ çš„日志文件中。
+对于上述例å­çš„未定义控制åºåˆ—,你将得到下列信æ¯ï¼š
+{\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 如果你键入 `|?|',你将得到和上é¢ç›¸åŒçš„ä¿¡æ¯ã€‚
+\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
+\noindent
+å¦å¤–两个选择,å³é”®å…¥ `|I|' 或一个å°æ•´æ•°ï¼Œ
+æ供一ç§è®© \TeX\ 回到正常轨é“上的方法,
+使得该错误ä¸ä¼šåœ¨æ–‡æ¡£åŽé¢å¯¼è‡´æ›´å¤šçš„错误:
+\ulist
+\li 如果你键入 `|I|' 或 `|i|' 并加上一些文本,
+\TeX\ 将把文本æ’入错误ä½ç½®ä¹‹åŽï¼Œæ”¾åœ¨ \TeX\ 处ç†çš„最内层级。
+在上é¢è¿™ä¸ªä¾‹å­ä¸­ï¼Œè¿™è¡¨ç¤ºåœ¨ \TeX\ 的原始输入的ä½ç½®ï¼Œå³åœ¨ `|\quid|' 之åŽã€‚
+ç¨åŽæˆ‘们将给出一个例å­ï¼Œè¯´æ˜ŽæŠŠæŸäº›ä¸œè¥¿æ’入到最内层级与æ’入到原始输入的区别。
+在上é¢è¿™ä¸ªæŽ§åˆ¶åºåˆ—未定义的例å­ä¸­ï¼Œå¦‚果你键入:
+\csdisplay
+I\quad
+|
+\TeX\ 将执行 |\quad| 命令并在你需è¦çš„地方生æˆä¸€ä¸ªå…¨æ–¹é—´éš”。
+\li 如果你键入一个å°äºŽ $100$(错误信æ¯è®©äººè¯¯è§£ä¸ºå°äºŽ $10$)的正整数,
+\TeX\ 将从它处ç†çš„最内层级删除该数目的记å·ã€‚%
+(如果你键入大于或等于 $100$ 的整数,\TeX\ å°†åªåˆ é™¤ $10$ 个记å·ï¼ï¼‰
+\endulist
+
+\section{第二个例å­}
+
+%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.
+%|
+这里是å¦ä¸€ç§å¸¸è§é”™è¯¯çš„例å­ï¼š
+\csdisplay
+Skip across \hskip 3cn by 3 centimeters.
+|
+这个例å­çš„错误信æ¯ä¸ºï¼š
+\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>|
+这里 \TeX\ 注æ„到 `|3|' åŽé¢ä¸æ˜¯ä¸€ä¸ªæ­£ç¡®çš„度é‡å•ä½ï¼Œå› æ­¤å®ƒå‡è®¾è¯¥åº¦é‡å•ä½ä¸ºç‚¹ã€‚
+\TeX\ å°†é‡æ–°è¯»å– `|cn|' çš„è®°å·å¹¶å°†å®ƒä»¬æ’入你的输入中,而这并ä¸æ˜¯ä½ æƒ³è¦çš„。
+在这ç§æƒ…形下若想得到更好的结果,你å¯ä»¥å…ˆé”®å…¥ `|2|' 以跳过 `|cn|'。
+这样你将得到如下信æ¯ï¼š
+\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.}
+现在你å¯ä»¥é”®å…¥ `|I\hskip 3cm|' 以得到你所è¦çš„é—´è·ï¼ˆåŠ ä¸Šä½ å·²ç»å¾—到的 |3pt| é—´è·ï¼‰ã€‚%
+\footnote{若改为键入 `|I\unskip\hskip 3cm|',你就å¯ä»¥åŽ»æŽ‰è¿™ä¸ª |3pt| çš„é—´è·ã€‚}
+
+\section{第三个例å­}
+
+%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.)
+如果你输入æŸäº›ä»…å¯ç”¨äºŽæ•°å­¦æ¨¡å¼çš„内容,\TeX\ 将帮你切æ¢åˆ°æ•°å­¦æ¨¡å¼ï¼Œ
+ä¸ç®¡è¿™æ˜¯å¦ä½ çœŸæ­£æƒ³è¦çš„。例如:
+\csdisplay
+So \spadesuit s are trumps.
+|
+下é¢æ˜¯ \TeX\ 的错误信æ¯ï¼š
+\csdisplay
+!! Missing $ inserted.
+<inserted text>
+ $
+<to be read again>
+ \spadesuit
+l.330 So \spadesuit
+ s are trumps.
+|
+由于 |\spadesuit| 符å·ä»…å¯åœ¨æ•°å­¦æ¨¡å¼ä¸­ä½¿ç”¨ï¼Œ
+\TeX\ å·²ç»åœ¨å®ƒå‰é¢æ’入一个 `|$|'。
+在æ’å…¥æŸä¸ªè®°å·ä¹‹åŽï¼Œ\TeX\ ä½äºŽè¯¥è®°å·çš„\emph{å‰é¢},
+在此情形中就是ä½äºŽ `|$|' å‰é¢ï¼Œå¹¶å‡†å¤‡è¯»å–输入。
+键入 `|2|' 将让 \TeX\ 跳过 `|$|' å’Œ `|\spadesuit|' è®°å·ï¼Œ
+è®©å®ƒå‡†å¤‡å¤„ç† `|s are trumps.|' 中的 `|s|'。%
+(若你åªæ˜¯è®© \TeX\ 继续,它将在数学模å¼ä¸­æŽ’版 `|s are trumps|'。)
+
+\section{第四个例å­}
+
+%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|'.
+在下é¢è¿™ä¸ªä¾‹å­ä¸­ï¼Œ\TeX\ 对错误的诊断是完全ä¸æ­£ç¡®çš„:
+\csdisplay
+\hbox{One \vskip 1in two.}
+|
+它给出的错误信æ¯å¦‚下:
+\csdisplay
+!! Missing } inserted.
+<inserted text>
+ }
+<to be read again>
+ \vskip
+l.29 \hbox{One \vskip
+ 1in two.}
+|
+^^|<inserted text>|
+问题在于,当 \TeX\ ä½äºŽå—é™æ°´å¹³æ¨¡å¼ä¸­ï¼Œå³æ­£åœ¨æž„建水平盒å­æ—¶ï¼Œä¸èƒ½ä½¿ç”¨ |\vskip|。
+但 \TeX\ ä¸æ˜¯ä¸¢æŽ‰ |\vskip|,而是在它å‰é¢æ’入一个å³èŠ±æ‹¬å·ï¼Œä»¥ç»“æŸè¯¥æ°´å¹³ç›’å­ã€‚
+å¦‚æžœä½ æŽ¥å— \TeX\ 的修改,\TeX\ é‡åˆ°ç¨åŽçš„正确å³èŠ±æ‹¬å·æ—¶å°†å†æ¬¡æŠ¥é”™ã€‚
+它还将对该å³èŠ±æ‹¬å·ä¹‹å‰çš„任何ä¸èƒ½å‡ºçŽ°åœ¨ç«–直模å¼çš„东西报错。
+这些é¢å¤–的错误将是特别让人迷惑的,因为这些错误所说的都是å‡çš„,
+它们是ä¸æ°å½“æ’å…¥å³èŠ±æ‹¬å·åŽäº§ç”Ÿçš„结果。
+你的最佳åšæ³•æ˜¯é”®å…¥ `|5|' 以跳过在 `|}\vskip 1in|' 中的所有记å·ã€‚
+
+\section{第五个例å­}
+
+%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:
+这里还有个相似的例å­ï¼Œå®ƒçš„错误信æ¯æ¯”你之å‰çœ‹åˆ°çš„都è¦é•¿ï¼š
+\csdisplay
+\leftline{Skip \smallskip a little further.} But no more.
+|
+错误在于 |\smallskip| åªèƒ½åœ¨ç«–直模å¼ä¸­ä½¿ç”¨ã€‚给出的错误信æ¯å¦‚下:
+\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.
+|
+这些错误信æ¯å¸¦ä½ å·¡è§†äº†åœ¨ \plainTeX\ 中用于实现 |\leftline| çš„å„个å®â€”—%
+这些å®ä¹Ÿè®¸æ˜¯ä½ å¹¶ä¸åœ¨ä¹Žçš„。
+第一行告诉你 \TeX\ 试图通过æ’å…¥å³èŠ±æ‹¬å·è§£å†³æ­¤é—®é¢˜ã€‚
+\TeX\ 还未读到å³èŠ±æ‹¬å·ï¼Œå› æ­¤è‹¥ä½ æƒ³çš„è¯ä½ å¯ä»¥åˆ é™¤å®ƒã€‚
+第一行(带 `!' 的那行)之åŽçš„ä¿¡æ¯æ¯éƒ¨åˆ†éƒ½ç”±ä¸¤è¡Œç»„æˆã€‚
+下é¢æ˜¯å„部分的两行信æ¯çš„å«ä¹‰ï¼š
+%\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
+\olist
+\li 第一对åŒè¡Œè¡¨ç¤º \TeX\ å·²ç»æ’入,但尚未读到的å³èŠ±æ‹¬å·ã€‚
+\li 第二对åŒè¡Œè¡¨ç¤ºåœ¨è¯»å–å³èŠ±æ‹¬å·åŽï¼Œ
+\TeX\ å°†é‡æ–°è¯»å– `|\vskip|' 命令(它æ¥è‡ª |\smallskip| å®çš„定义中)。
+\li 第三对åŒè¡Œè¡¨ç¤º \TeX\ 是在展开 |\smallskip| æ—¶å‘现的错误。
+此部分也显示 |\smallskip| 的定义,并表示在展开和执行该定义时已ç»è¯»åˆ°å“ªé‡Œã€‚
+具体地说,它是在执行|\vskip| 命令时失败的。
+一般地,以控制åºåˆ—加 `|->|' 开始的信æ¯è¡Œè¡¨ç¤º \TeX\ 已展开执行的å®çš„å称。
+\li 第四对åŒè¡Œè¡¨ç¤º \TeX\ 在处ç†å®å‚é‡æ—¶å‘现了 |\smallskip|,
+åŒæ—¶ä¹Ÿè¡¨ç¤º \TeX\ 在该å‚é‡ä¸­çš„ä½ç½®ï¼Œå³å®ƒæ­£åœ¨å¤„ç† |\smallskip|(失败了)。
+通过往å‰æŸ¥æ‰¾æŽ¥ä¸‹æ¥ä¸¤è¡Œï¼Œä½ å¯ä»¥çœ‹åˆ°æ­¤å‚é‡æ˜¯ä¼ é€’ç»™ |\leftline| 的。
+\li 第五对åŒè¡Œè¡¨ç¤º \TeX\ 是在展开 |\leftline| å®æ˜¯å‘现的错误。%
+(在这个例å­ä¸­ï¼Œé”™è¯¯å‘生在 \TeX\ 解释多个ä¸åŒå±‚级的å®å®šä¹‰çš„中间。)%
+在 |#1| åŽé¢çš„ä½ç½®è¡¨ç¤ºå®ƒæœ€åŽè¯»å–到的是 |\leftline| 的第一个(在这里也是唯一的)å‚é‡ã€‚
+\li 最åŽå¯¹åŒè¡Œè¡¨ç¤º \TeX\ 在你的输入文件的ä½ç½®ã€‚
+注æ„æ­¤ä½ç½®è¿œè¿œè¶…出它æ’å…¥å³èŠ±æ‹¬å·å¹¶é‡æ–°è¯»å– `|\vskip|' çš„ä½ç½®ã€‚
+这是因为 \TeX\ å·²ç»ä»Žè¾“入文件读å–了 |\leftline| 的完整å‚é‡ï¼Œ
+å³ä½¿å®ƒä»…仅处ç†è¯¥å‚é‡çš„一部分。
+这两行信æ¯å¼€å¤´çš„圆点表示输入行å‰é¢ä¸€éƒ¨åˆ†å†…容没显示出æ¥ã€‚
+å‰é¢é‚£éƒ¨åˆ†å†…容实际上就包括让 |\vskip| å˜å¾—ä¸åˆæ³•çš„ |\leftline| 控制åºåˆ—。
+\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.)
+\noindent
+在类似这样的长篇信æ¯ä¸­ï¼Œä½ é€šå¸¸å‘现åªæœ‰ç¬¬ä¸€è¡Œå’Œæœ€åŽä¸¤è¡Œæ˜¯æœ‰ç”¨çš„ï¼›
+但知é“其他行是怎么回事有时候也有益处。
+任何你æ’入或删除的文本将在最内层级中æ’入或删除。
+在这里例å­ä¸­ï¼Œæ’入或删除将出现在 \TeX\ æ’入的å³èŠ±æ‹¬å·å‰ã€‚
+特别è¦æ³¨æ„,在此情形中 \TeX\ å°†\emph{ä¸ä¼š}把你å¯èƒ½æ’入的文本放在你的输入文本中,
+而是放在多层å®å®šä¹‰çš„最里é¢ã€‚%
+(原始的å®å®šä¹‰å½“然并ä¸ä¼šè¢«æ”¹åŠ¨ã€‚)
+
+%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.
+ä½ å¯ä»¥ç”¨ ^|\errorcontextlines|\ctsref{\errorcontextlines}命令é™åˆ¶
+\TeX\ 生æˆçš„错误信æ¯åŒè¡Œçš„数目。
+如果你并éžå¯¹ \TeX\ 给你的所有信æ¯éƒ½æ„Ÿå…´è¶£ï¼Œ
+ä½ å¯ä»¥è®¾å®š |\error!-contextlines| 为 $0$。
+这样错误信æ¯å°†åªæœ‰æœ€å‰é¢ä¸¤è¡Œå’Œæœ€åŽé¢ä¸¤è¡Œã€‚
+
+%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
+最åŽï¼Œæˆ‘们æåŠå¯èƒ½å‡ºçŽ°åœ¨é”™è¯¯ä¿¡æ¯è¡Œå¯¹å¼€å¤´çš„å¦å¤–两个指示è¯ï¼š
+\ulist
+\li ^|<output>| 表示 \TeX\ 在它的输出例行程åºä¸­é—´é‡åˆ°æ­¤é”™è¯¯ã€‚
+\li ^|<write>| 表示 \TeX\ 在执行 |\write| 命令时é‡åˆ°æ­¤é”™è¯¯ã€‚
+\TeX\ 将在实际执行 |\write| æ—¶æ‰æ£€æµ‹è¿™æ ·çš„错误(在 |\shipout| 时),
+而ä¸æ˜¯åœ¨åˆšé‡åˆ° |\write| 命令时。
+\endulist
+
+%\eix^^{error messages}
+%\endchapter
+%\byebye
+\eix^^{错误信æ¯}
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter
+\byebye
diff --git a/info/impatient/cn/examples.tex b/info/impatient/cn/examples.tex
new file mode 100644
index 0000000000..a4c83e3162
--- /dev/null
+++ b/info/impatient/cn/examples.tex
@@ -0,0 +1,83 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter{例å­}
+
+\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.
+这一章中包括了一组例å­ï¼Œæ¥å¸®åŠ©ä½ ç†Ÿæ‚‰ \TeX ,
+åŒæ—¶è¿™äº›ä¾‹å­è¿˜å±•ç¤ºäº†å¦‚何使用 \TeX\ æ¥å®Œæˆå„ç§æŽ’版工作。
+æ¯ä¸ªä¾‹å­éƒ½æœ‰ä¸€ä¸ªæ”¾åœ¨å·¦é¡µçš„ \TeX\ 排版的结果和放在å³é¡µçš„相对应的 \TeX\ 输入文本。
+ä½ å¯ä»¥æŠŠè¿™äº›ä¾‹å­ä½œä¸ºæ¨¡ä»¿çš„æ ·å¼ï¼Œä¹Ÿå¯ä»¥ç”¨æ¥æ‰¾åˆ°ä½ æƒ³è¦çš„效果的实现命令。
+ä¸è¿‡è¦æ³¨æ„的是,这些例å­ä»…能展示 \TeX\ $900$ æ¡å·¦å³çš„命令的一å°éƒ¨åˆ†ã€‚
+
+%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.
+这里的æŸäº›ä¾‹å­æ˜¯å…¶ä¹‰è‡ªçŽ°çš„——也就是说,它们在介ç»æ¯ä¸ªæ‰€æŽ’å°å‡ºæ¥çš„功能。
+这个介ç»å¾ˆç²—略,因为没有足够的篇幅æ¥è®²æœ¯æ‰€æœ‰ä½ æƒ³å¾—到的信æ¯ã€‚
+命令速查表(\chapterref{capsule})和索引å¯ä»¥å¸®ä½ æ¥æ‰¾åˆ°ä¾‹å­ä¸­çš„æ¯ä¸ª \TeX\ 功能。
+
+%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.
+因为我们在设计这些例å­æ—¶ï¼ŒæŠŠå¾ˆå¤šçš„东西放在一起æ述,
+因此,这些例å­å±•ç¤ºäº†å¾ˆå¤šçš„排版效果。
+这些例å­ä¸€èˆ¬å¹¶\emph{ä¸æ˜¯}好的排版实践模版。
+比如例~8 把有些公å¼ç¼–å·æ”¾åœ¨å·¦è¾¹ï¼ŒåˆæŠŠå¦ä¸€äº›æ”¾åœ¨äº†å³è¾¹ã€‚
+你永远ä¸ä¼šåœ¨ä¸€ä¸ªå®žé™…的科学出版物中使用这样的公å¼ç¼–å·ã€‚
+
+%\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.
+\xrdef{xmphead}
+除了第一个例å­ä»¥å¤–,æ¯ä¸ªä¾‹å­éƒ½ç”±ä¸€ä¸ªå« |\xmpheader| çš„å®å¼€å§‹ï¼ˆè§\xref{å®})。
+我们这样åšæ˜¯ä¸ºäº†èŠ‚çœè¾“入文本的篇幅,
+å¦åˆ™æ¯ä¸ªä¾‹å­å¼€å¤´ä½ éƒ½ä¼šçœ‹åˆ°å‡ è¡Œä½ å…ˆå‰å·²ç»çœ‹åˆ°çš„内容。
+|\xmpheader| 会排å°å‡ºä¾‹å­çš„标题和标题åŽçš„空白。
+ä½ å¯ä»¥å‚è§æ²¡æœ‰ä½¿ç”¨ |\xmpheader| 的第一个例å­æ˜¯å¦‚何实现这一点的,
+然åŽä½ å°±èƒ½æ¨¡ä»¿å®ƒäº†ã€‚
+除了 |\xmpheader|,在这里使用的æ¯ä¸ªå‘½ä»¤éƒ½æ˜¯åœ¨ \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.
+}%
+
+\ifoldeplain\else\ifcompletebook\else
+\vfil\eject{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter
+\byebye
diff --git a/info/impatient/cn/fdl.tex b/info/impatient/cn/fdl.tex
new file mode 100644
index 0000000000..1a9a7e56f3
--- /dev/null
+++ b/info/impatient/cn/fdl.tex
@@ -0,0 +1,464 @@
+% -*- coding: utf-8 -*-
+% This file is a chapter. It must be included in a larger document to work
+% properly.
+
+\chapter{GNU 自由文档许å¯è¯}
+
+\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\interitemskipa \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/info/impatient/cn/fonts.tex b/info/impatient/cn/fonts.tex
new file mode 100644
index 0000000000..9094b3b339
--- /dev/null
+++ b/info/impatient/cn/fonts.tex
@@ -0,0 +1,334 @@
+% 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.
+%
+\chardef\chinesefont = 2
+\ifcase\chinesefont
+ \def\song{Adobe Song Std}
+ \def\hei{Adobe Heiti Std}
+ \def\kai{Adobe Kaiti Std}
+ \def\fang{Adobe Fangsong Std}
+\or
+ \def\song{SimSun}
+ \def\hei{SimHei}
+ \def\kai{KaiTi}
+ \def\fang{FangSong}
+\or
+ \def\song{FandolSong}
+ \def\hei{FandolHei}
+ \def\kai{FandolKai}
+ \def\fang{FandolFang}
+\fi
+%
+\newif\ifxecjk \xecjktrue
+\ifxecjk
+ \font\CJKfont="\song" at 10pt
+ \input xeCJK-base
+ \def\letfont{\let\CJKfont}
+ \normalspacedchars{-}
+\else
+ \font\zhfont="\song" at 10pt
+ \def\zhpunctfont{\zhfont}
+ \input zhspacing.sty
+ \zhspacing
+ \def\letfont{\let\zhfont}
+\fi
+%
+\font\enfiverm = cmr5
+\font\zhfiverm = "\song" at 5pt
+\def\fiverm{\enfiverm\letfont\zhfiverm}
+\font\eneightrm = cmr8
+\font\zheightrm = "\song" at 8pt
+\def\eightrm{\eneightrm\letfont\zheightrm}
+\font\enninerm = cmr9 % Glue pictures, small caps for ASCII.
+\font\zhninerm = "\song" at 9pt
+\def\ninerm{\enninerm\letfont\zhninerm}
+%\font\tenrm = xcmr10 % with our kerning
+\font\entenrm = cmr10 % don't have the xcmr10 source any more
+\font\zhtenrm = "\song" at 10pt
+\def\tenrm{\entenrm\letfont\zhtenrm}
+\font\enoldtenrm = cmr10 % straight CM
+\font\zholdtenrm = "\song" at 10pt
+\def\oldtenrm{\enoldtenrm\letfont\zholdtenrm}
+\font\entwelverm = cmr12
+\font\zhtwelverm = "\song" at 12pt
+\def\twelverm{\entwelverm\letfont\zhtwelverm}
+\font\entwentysixrm = cmr10 at 26pt
+\font\zhtwentysixrm = "\hei" at 26pt
+\def\twentysixrm{\entwentysixrm\letfont\zhtwentysixrm}
+%
+\font\eneightit = cmti8
+\font\zheightit = "\kai" at 8pt
+\def\eightit{\eneightit\letfont\zheightit}
+\font\ennineit = cmti9
+\font\zheightit = "\kai" at 9pt
+\def\nineit{\ennineit\letfont\zhnineit}
+\font\entenit = cmti10
+\font\zhtenit = "\kai" at 10pt
+\def\tenit{\entenit\letfont\zhtenit}
+%
+\font\eneighttt = cmtt8
+\font\zheighttt = "\fang" at 8pt
+\def\eighttt{\eneighttt\letfont\zheighttt}
+\font\ententt = cmtt10
+\font\zhtentt = "\fang" at 10pt
+\def\tentt{\ententt\letfont\zhtentt}
+\font\eneleventt = cmtt10 at 11pt
+\font\zheleventt = "\fang" at 11pt
+\def\elventt{\enelventt\letfont\zhelventt}
+\font\entwelvett = cmtt10 scaled \magstep2
+\font\zhtwelvett = "\fang" at 12pt
+\def\twelvett{\entwelvett\letfont\zhtwelvett}
+%
+\font\entenbt = cmtt10
+\font\zhtenbt = "\fang" at 10pt
+\def\tenbt{\entenbt\letfont\zhtenbt}
+%
+\font\enelevensf = cmss10 scaled\magstephalf
+\font\zhelevensf = "\hei" at 11pt
+\def\elevensf{\enelevensf\letfont\zhelevensf}
+\font\enfourteensf = cmss10 scaled\magstep2
+\font\zhfourteensf = "\hei" at 14pt
+\def\fourteensf{\enfourteensf\letfont\zhfourteensf}
+%
+\font\eneightbf = cmbx8
+\font\zheightbf = "\hei" at 8pt
+\def\eightbf{\eneightbf\letfont\zheightbf}
+\font\entenbf = cmbx10
+\font\zhtenbf = "\hei" at 10pt
+\def\tenbf{\entenbf\letfont\zhtenbf}
+\font\enelevenbf = cmbx10 scaled \magstephalf
+\font\zhelevenbf = "\hei" at 11pt
+\def\elevenbf{\enelevenbf\letfont\zhelevenbf}
+\font\entwelvebf = cmbx12
+\font\zhtwelvebf = "\hei" at 12pt
+\def\twelvebf{\entwelvebf\letfont\zhtwelvebf}
+\font\enthirtysixbf = cmbx10 at 36pt
+\font\zhthirtysixbf = "\hei" at 36pt
+\def\thirtysixbf{\enthirtysixbf\letfont\zhthirtysixbf}
+%
+\font\entenbi = cmbxti10
+\font\zhtenbi = "\hei" at 10pt
+\def\tenbi{\entenbi\letfont\zhtenbi}
+\font\enelevenbi= cmbxti10 scaled \magstephalf
+\font\zhelevenbi = "\hei" at 11pt
+\def\elevenbi{\enelevenbi\letfont\zhelevenbi}
+\font\enfourteenbi= cmbxti10 scaled \magstep2
+\font\zhfourteenbi = "\hei" at 14pt
+\def\fourteenbi{\enfourteenbi\letfont\zhfourteenbi}
+%
+\font\entensc = cmcsc10
+\font\zhtensc = "\fang" at 10pt
+\def\tensc{\entensc\letfont\zhtensc}
+\font\eneightsl = cmsl8
+\font\zheightsl = "\fang" at 8pt
+\def\eightsl{\eneightsl\letfont\zheightsl}
+\font\eneighti = cmmi8
+\font\zheighti = "\kai" at 8pt
+\def\eighti{\eneighti\letfont\zheighti}
+\font\eneightsy = cmsy8
+\font\zheightsy = "\song" at 8pt
+\def\eightsy{\eneightsy\letfont\zheightsy}
+
+% % 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\zhtentt = -1
+\hyphenchar\ententt = -1
+\hyphenchar\zheighttt = -1
+\hyphenchar\eneighttt = -1
+
+
+
+\textfonts
diff --git a/info/impatient/cn/frontm.tex b/info/impatient/cn/frontm.tex
new file mode 100644
index 0000000000..1a69abe85e
--- /dev/null
+++ b/info/impatient/cn/frontm.tex
@@ -0,0 +1,85 @@
+% -*- coding: utf-8 -*-
+% 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
+\indent\vskip8em
+\centerline{\chapterfonts \TeX\ 急就帖}
+\vskip4em
+\centerline{\sectionfonts \number\year 年\number\month 月\number\day 日}
+
+\noheadlinetrue\pagebreak
+
+
+% Title spread.
+%
+%(title page, lhs)
+%\noheadlinetrue\pagebreak
+\blankpage
+
+%(title page, rhs)
+%\noheadlinetrue\pagebreak
+\blankpage
+
+
+{\input copyrght }
+\noheadlinetrue
+
+
+% Dedication.
+%
+\sinkage
+{\it \flushright
+ 致 Jodi.
+ ---{\sc p.w.a.}
+
+ 忆信任我的父亲,
+ ---{\sc k.a.h.}
+
+ 致 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{简è¦}
+
+\shortcontents
+
+
+\ifcompletebook \global\rewritetocfiletrue \fi
+
+\frontchapter{目录}
+
+\contents
+
+\blankpage
+{\input read1st }
+
+\byebye
diff --git a/info/impatient/cn/genops.tex b/info/impatient/cn/genops.tex
new file mode 100644
index 0000000000..ca9e08a1e0
--- /dev/null
+++ b/info/impatient/cn/genops.tex
@@ -0,0 +1,5017 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter {一般æ“作命令}
+
+\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}.
+è¿™ç« ä»‹ç» \TeX\ çš„^{编程功能}å’Œä¸é€‚åˆæ”¾å…¥å‰å‡ ç« çš„所有内容.
+在 \headcit{命令æè¿°}{cmddesc} 一节中, 给出了这章的惯例.
+
+\begindescriptions
+
+%==========================================================================
+%\section {Naming and modifying fonts}
+\section {命ååŠä¿®æ”¹å­—体}
+
+%\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.
+\begindesc
+\bix^^{字体//命ååŠä¿®æ”¹å­—体}
+\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
+å•ç‹¬ä½¿ç”¨æ—¶, |\font| 控制åºåˆ—指代当å‰çš„字体.
+|\font| 在这个时候并ä¸æ˜¯ä¸€ä¸ªçœŸæ­£çš„命令,
+它仅仅作为其它命令的一个å‚æ•°.
+
+%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
+其它的三个 |\font| å½¢å¼, 字体å \<font\-name>
+用æ¥æŒ‡ä»£å®šä¹‰ä¸€ä¸ªå­—体所需è¦çš„一系列文件.
+在这些形å¼ä¸‹, |\font| 是命令.
+æ¯ç§å½¢å¼éƒ½æœ‰ä¸¤ä¸ªæ•ˆæžœ:
+{\tighten
+\olist
+\li 它定义了一个å为 \<control sequence> 的控制åºåˆ—,
+用æ¥é€‰æ‹©å为 \<font\-name> 的字体, 而且该字体å¯èƒ½è¢«ç¼©æ”¾ (è§åŽ).
+\li 它使 \TeX\ 载入 \<font\-name> çš„^{字体信æ¯æ–‡ä»¶} (^{\tfmfile}).
+\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.
+\noindent
+字体的å字往往表示它的设计大å°,
+比如 |cmr10| 表示设计大写为 $10$ 点的计算机现代字体.
+字体的设计大å°ä¿å­˜åœ¨å­—体信æ¯æ–‡ä»¶ä¸­.
+
+%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.
+如果用户既没有指定 |scaled| \<number> 也没有指定 |at| \<dimen>,
+那么这个字体载入时, 使用设计大å°---设计大å°çš„å«æ„是,
+字体在这个大å°æ—¶, 表示最佳.
+å¦åˆ™å°†ä¼šè½½å…¥ä¸€ä¸ªç¼©æ”¾ç‰ˆçš„字体:
+\ulist
+\li 如果指定了 |scaled| \<number>, 则字体将被放大 $\hbox{\<number>}/1000$ å€.
+\li 如果指定了 |at| \<dimen>, 则字体通过缩放大 $\hbox{\<dimen>}/ds$ å€,
+å˜ä¸º \<dimen> 大å°,
+其中, $ds$ 是 \<fontname> 的设计大å°.
+\<dimen> å’Œ $ds$ çš„å•ä½å¾€å¾€ä½¿ç”¨ç‚¹.
+\endulist
+\noindent
+放大率å¯ä»¥å°äºŽ $1$, 这样åšå°±ä¼šä½¿å­—体缩å°å°ºå¯¸.
+
+%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.
+你往往需è¦ä¸ºè½½å…¥çš„字体的æ¯ä¸€ä¸ªä½¿ç”¨çš„放大率æ供一个字体轮廓文件 (\xref{shape}).
+当然, 一些^{设备驱动}å¯ä»¥ä½¿ç”¨æ‰“å°æœºå†…置的字体.
+^^{内置字体}这些字体ä¸éœ€è¦å­—体轮廓文件.
+
+%See \conceptcit{font} and
+%\conceptcit{magnification} for further information.
+更多信æ¯è¯·å‚è§\conceptcit{字体}å’Œ\conceptcit{放大率}.
+
+%\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
+\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.
+\begindesc
+\cts fontdimen {\<number> \<font>\param{dimen}}
+\explain
+^^{字体//字体å‚æ•°}
+这些å‚æ•°å¯ä»¥ç”¨æ¥å®šä¹‰æŽ§åˆ¶åºåˆ— \<font> (注æ„, \<font> å’Œ \<font\-name> ä¸åŒ, \<font-name> 是用æ¥è¡¨ç¤ºå­—体文件的文件åçš„) 所定义的å„ç§å°ºå¯¸å¤§å°.
+这些å‚数的值, 都在 \<font> 所使用的字体信æ¯æ–‡ä»¶ä¸­å®šä¹‰äº†, 但是你å¯ä»¥åœ¨æ‰§è¡Œ \TeX\ 时得到或改å˜è¿™äº›å€¼.
+这些å‚数的数值åŠå…¶æ„义为:
+\display{\halign{\hfil#\hfil\quad&#\hfil\cr
+\it 数值&\it æ„义\cr
+\noalign{\vskip 1\jot}%
+1&字体æ¯ç‚¹çš„倾斜程度\cr
+2&è¯é—´è·\cr
+3&è¯é—´ä¼¸é•¿é•¿åº¦\cr
+4&è¯é—´æ”¶ç¼©é•¿åº¦\cr
+5&x 字符的高度(|1ex| 的长度)\cr
+6&m 字符的宽度 (|1em| 的长度)\cr
+7&é¢å¤–空白长度\cr}}
+\noindent
+\TeX\ 需è¦ä½¿ç”¨å­—体æ¯ç‚¹çš„倾斜程度æ¥è®¡ç®—é‡éŸ³ç¬¦å·çš„ä½ç½®.
+使用è¯é—´è·æ¥æŽ§åˆ¶å•è¯é—´çš„è·ç¦» (è§ |\spaceskip|, \xref\spaceskip).
+使用é¢å¤–空白长度æ¥æŽ§åˆ¶å¥å·ä»¥åŽæ‰€ç•™çš„空白 (è§ |\spaceskip|, \xref\spaceskip).
+在 \knuth{433~页} 中列出了 \plainTeX\ 中字体所使用的这些å‚数的数值.
+数学符å·æœ‰å¦å¤– $15$ 个å‚æ•°, ä¸è¿‡æˆ‘们在此ä¸å±•å¼€è®¨è®º.
+
+%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
+注æ„:
+这些å‚数被设定åŽ, 在当å‰ç»„结æŸæ—¶, 并\emph{ä¸}返回åˆå§‹å€¼.
+如果你åªæ˜¯å¸Œæœ›åœ¨å±€éƒ¨çš„文本中改å˜è¿™äº›å€¼,
+你需è¦å°†å®ƒçš„原值ä¿å­˜, 以便ç¨åŽæ¢å¤.
+\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.
+\begindesc
+\cts magnification {{\bt =} \<number>}
+\cts mag {\param{number}}
+\explain
+\margin{åˆå¹¶äº† {\tt\\mag} å’Œ {\tt\\magnification}.}
+使用 |\magnification| å¯ä»¥å®šä¹‰â€œ^{缩放因å­}â€$f$,
+缩放因å­å†³å®šäº†ä½ çš„文档的\minref{放大率}\seeconcept{放大率}。
+|\magni!-fication|必须在文档的第一页被编译出å‰å®šä¹‰ã€‚
+
+%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.
+这个命令把 $f$ å®šä¹‰æˆ \<number> çš„åŒæ—¶ï¼Œ
+也会定义 |\hsize| 为 |6.5true in|,|\vsize| 为 |8.9true in|,
+^^|\hsize//用 {\tt\\magnification} 设定|
+^^|\vsize//用 {\tt\\magnification} 设定|
+å³é€‚åˆ $8 \frac1/2$ 英尺乘 $11$ 英尺的页é¢çš„大å°ã€‚
+ç¼©æ”¾å› å­ $f$ 的值必需介于 $0$ 到 $32768$ 之间,
+它确定了该文档的\minref{放大率}为 $f/1000$。
+因此缩放因å­ä¸º $1000$ 就给出了å•ä½æ”¾å¤§çŽ‡ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œå®ƒä¸æ”¹å˜æ–‡æ¡£çš„尺寸。
+我们习惯使用 $1.2$ 的幂次值æ¥å®šä¹‰ç¼©æ”¾å› å­ï¼Œ
+因为很多的字体就是基于这ç§å› å­çš„。
+用 ^|\magstep| å’Œ ^|\magstephalf| 命令你å¯ä»¥æ›´æ–¹ä¾¿åœ°å®šä¹‰è¿™ç§å› å­ã€‚
+
+%|\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.
+|\magnification| ä¸æ˜¯ä¸€ä¸ªå‚数,你ä¸èƒ½ä½¿ç”¨å®ƒæ¥å¾—到缩放因å­ã€‚
+如果你使用类似 |\dimen0 = \mag!-nifi!-cation| 之类的语å¥ï¼Œ
+\TeX\ 将会报错。
+
+%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|.
+而 |\mag| å‚数则包å«ç¼©æ”¾å› å­ã€‚
+æ”¹å˜ |\mag| 的值也缩放了页é¢å°ºå¯¸ï¼Œè€Œè¿™ä¸€èˆ¬ä¸æ˜¯ä½ æ‰€æƒ³è¦çš„。
+因此,一般情况下,
+最好是使用 |\magnification| 而ä¸æ˜¯ |\mag| æ¥æ”¹å˜é¡µé¢çš„放大率。%
+\footnote{译注:|\mag| 是 \TeX\ 的原始命令,
+而 |\magnification| 是 \plainTeX\ 中定义的命令。
+|\magnification| ä¾èµ–于 |\mag|,
+它用 |\mag| 设置放大率åŽæ¢å¤äº†é»˜è®¤çš„页é¢å°ºå¯¸ã€‚
+在 LaTeX 中没有 |\magnification| 命令,
+一般也ä¸å»ºè®®ä½¿ç”¨ |\mag| 命令,因为这与 LaTeX 的设计原则相悖。
+}
+
+%\example
+%\magnification = \magstep2
+%% magnify fonts by 1.44 (=1.2x1.2)
+%|
+%\endexample
+%\enddesc
+\example
+\magnification = \magstep2
+% 把字体放大 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 magstep {\<number>}
+\explain
+这个命令展开为一个\minref{放大率}å› å­ï¼Œ
+这个因å­å¯ä»¥æŠŠä½ æ–‡æ¡£ä¸­æ‰€æœ‰ï¼ˆé™¤äº†ç»™å®š |true| 尺寸的)东西放大 $1.2^r$ å€ï¼Œ
+其中 $r$ 是 \<number> 的值。
+\<number> 必须在 $0$ 到 $5$ 之间。%
+\footnote{译注:å³åœ¨ \plainTeX\ 中定义 |\magstep1| 为 1200,|\magstep2| 为 1440,等等。}
+\example
+\magnification = \magstep1 % 放大 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
+\begindesc
+\cts magstephalf {}
+\explain
+这个命令展开为一个\minref{放大率}å› å­ï¼Œ
+这个因å­å¯ä»¥æŠŠä½ æ–‡æ¡£ä¸­æ‰€æœ‰ï¼ˆé™¤äº†ç»™å®š |true| 尺寸的)东西放大 $\sqrt{1.2}$ å€ï¼Œ
+也就是 $1$ 和 $1.2$ 的等比中项。%
+\footnote{译注:å³åœ¨ \plainTeX\ 中定义 |\magstephalf| 为 1095。}
+\example
+\magnification = \magstephalf
+|
+\endexample
+\eix^^{字体//命ååŠä¿®æ”¹å­—体}
+\enddesc
+
+%==========================================================================
+%\section {Converting information to tokens}
+\section {把信æ¯è½¬ä¸ºè®°å·}
+
+%\subsection {Numbers}
+\subsection {数值}
+
+%\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
+\xrdef{convert}
+\bix^^{数值//转æ¢ä¸ºå­—符}
+%
+\cts number {\<number>}
+\explain
+这个命令å¯ä»¥æŠŠä¸€ä¸ª\minref{æ•°}表示æˆå­—符\minref{è®°å·}åºåˆ—。
+这里的数å¯ä»¥æ˜¯ä¸€ä¸ªç¡®å®šçš„整数,或是一个 \<number> å‚数,
+也å¯ä»¥æ˜¯ä¸€ä¸ª \<number> 寄存器。
+\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
+\begindesc
+^^{罗马数字}
+\easy\cts romannumeral {\<number>}
+\explain
+这个命令å¯ä»¥æŠŠä¸€ä¸ª\minref{æ•°}表示æˆç½—马字符\minref{è®°å·}åºåˆ—.
+这里的数å¯ä»¥æ˜¯ä¸€ä¸ªç¡®å®šçš„整数,或是一个 \<number> å‚数,
+也å¯ä»¥æ˜¯ä¸€ä¸ª \<number> 寄存器。
+如果这个数是负的,则 |\romannumeral| ä¸äº§ç”Ÿä»»ä½•è®°å·ã€‚
+\example
+\romannumeral 24 \quad (\romannumeral -16)\quad
+\count13 = 6000 \romannumeral\count13
+|
+\produces
+\romannumeral 24 \quad (\romannumeral -16)\quad
+\count13 = 6000 \romannumeral\count13
+\endexample
+
+\eix^^{数值//转æ¢ä¸ºå­—符}
+\enddesc
+
+%==========================================================================
+%\subsection {Environmental information}
+\subsection {环境信æ¯}
+
+%\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
+\begindesc
+^^{日期时间}
+\cts time {\param{number}}
+\explain
+\TeX\ 把这个å‚数设置为从当日åˆå¤œåˆ°çŽ°åœ¨æ‰€ç»è¿‡çš„分钟数.
+比如在中åˆ, |\time| 就是 $720$.
+这个命令和下é¢çš„三个命令使用的是你计算机中所记录的时间.
+\TeX\ åªåœ¨å¼€å§‹è¿è¡Œçš„时候å‘系统获å–一次时间,
+所以如果你ä¸æ”¹å˜è¿™ä¸ªå€¼çš„è¯,
+å…ˆå‰è¿è¡Œçš„ |\time| 和最åŽè¿è¡Œçš„ |\time| 的值是完全相åŒçš„.
+\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
+\bix^^{日期}
+\begindesc
+\cts day {\param{number}}
+\explain
+\TeX\ 把这个å‚数设置为今天的日期数.
+这是一个介于 $1$ 和 $31$ 之间的数.
+|\day| åªåœ¨ç¨‹åºå¼€å§‹è¿è¡Œçš„时候被设定 (è§ä¸Šé¢ |\time| 的说明).
+\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 month {\param{number}}
+\explain
+\TeX\ 把这个å‚数设置为当å‰çš„月份.
+这是一个介于 $1$ 和 $12$ 之间的数.
+|\time| åªåœ¨ç¨‹åºå¼€å§‹è¿è¡Œçš„时候被设定 (è§ä¸Šé¢ |\time| 的说明).
+\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)
+\begindesc
+\cts year {\param{number}}
+\explain
+\TeX\ 把这个å‚数设置为当å‰çš„ ({\sc 公元}) 年份.
+这是一个类似 $1991$ 之类的数.
+|\year| åªåœ¨ç¨‹åºå¼€å§‹è¿è¡Œçš„时候被设定 (è§ä¸Šé¢ |\time| 的说明).
+
+%\eix^^{date}
+%\enddesc
+\eix^^{日期}
+\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 fmtname {}
+\cts fmtversion {}
+\explain
+这个命令会产生当å‰ä½¿ç”¨çš„ \TeX\ æ ¼å¼ï¼ˆæ¯”如 \minref{\plainTeX} 或 ^{\LaTeX})的å字和版本å·ã€‚
+\example
+本书使用 \fmtname\ æ ¼å¼ï¼Œç‰ˆæœ¬~\fmtversion 。
+|
+\produces
+本书使用 \fmtname\ æ ¼å¼ï¼Œç‰ˆæœ¬~1.9: 26 April 1991 (and plain 3.141592653)。
+\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
+\begindesc
+\cts jobname {}
+\explain
+这个命令产生调用 \TeX\ 的文件的文件本å.
+比如你的输入文件为 |hatter.tex|, |\jobname| ä¼šè¢«å±•å¼€æˆ |hatter|.
+|\jobname| 在你生æˆæ–‡æ¡£çš„辅助文件时会很管用.
+^^{辅助文件}
+\example
+\newwrite\indexfile \openout\indexfile = \jobname.idx
+% 打开 `hatter.tex' 的索引文件 `hatter.idx'.
+|
+\endexample\enddesc
+
+%==========================================================================
+\subsection {å˜é‡çš„值}
+
+\begindesc
+\cts meaning {\<token>}
+\explain
+^^{è®°å·//显示记å·çš„å«ä¹‰}
+这个命令会产生 \<token> 的定义.
+它对于诊断输出很有用.
+ä½ å¯ä»¥ç”¨ç±»ä¼¼çš„方法使用 ^|the| 命令 (\xref\the) æ¥å¾—到 \minref{寄存器}和其它 \TeX\ 中的东西的值信æ¯.
+\example
+[{\tt \meaning\eject}] [\meaning\tenrm] [\meaning Y]
+|
+\produces
+[{\tt \meaning\eject}] [\meaning\entenrm] [\meaning Y]
+\endexample\enddesc
+
+\begindesc
+\cts string {\<control sequence>}
+\explain
+^^{控制åºåˆ—//转æ¢ä¸ºå­—符串}
+这个命令会把 \<control sequence> 表示æˆå…¶å字的字符串,
+包括 \minref{转义符}.
+转义符会被表示æˆå½“å‰ ^|\escapechar| 的值.
+^^{转义符//用 \b\tt\\escapechar\e 表示}
+\TeX\ 把在此中的所有字符的类ç è®¾ä¸º $12$ (其它).
+
+ä½ å¯ä»¥ä½¿ç”¨ ^|\csname| 命令执行这个命令的åæ“作 (\xref\csname).
+它会把一个字符串转为一个控制åºåˆ—.
+\example
+控制åºåˆ— {\tt \string\bigbreak}
+|
+\produces
+控制åºåˆ— {\tt \string\bigbreak}
+\endexample\enddesc
+
+\begindesc
+\cts escapechar {\param{number}}
+\explain
+这个å‚数在把一个控制åºåˆ—å转化为一系列字符标记时, 指定 \TeX\ 用æ¥è¡¨ç¤º\minref{转义符}的字符的 \ascii\ ç \minrefs{ascii}.
+^^{转义符//用 \b\tt\\escapechar\e 表示}
+这个转化å‘生在你使用 |\string|命令时或者 \TeX\ 在产生诊断信æ¯æ—¶.
+转义符的默认值是 $92$, å³ ^{å³æ–œæ } çš„ \ascii\ ç .
+如果 |\escapechar| ä¸åœ¨ $0$--$255$ 之间, \TeX\ 则在转æ¢æ—¶ä¸åŒ…括转义符.
+\example
+\escapechar = `!!
+控制åºåˆ— {\tt \string\bigbreak}
+|
+\produces
+\escapechar = `!
+控制åºåˆ— {\tt \string\bigbreak}
+\endexample
+\enddesc
+
+\begindesc
+\cts fontname {\<font>}
+\explain
+^^{字体å称}
+这个命令产生 \<font> 的字体文件å.
+该字体å就是定义 \<font> 时所的 \<font\-name>.
+\example
+\font\myfive=cmr5 [\fontname\myfive]
+|
+\produces
+\font\myfive=cmr5 [\fontname\myfive]
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\section {Grouping}
+\section {编组}
+
+%\begindesc
+%\bix^^{groups}
+\begindesc
+\bix^^{编组}
+%
+%\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.
+\cts begingroup {}
+\cts endgroup {}
+\explain
+这两个命令开始或结æŸä¸€ä¸ª\minref{编组}。
+|\begingroup| ä¸ä¼šå’Œå³èŠ±æ‹¬å·åŒ¹é…,|\endgroup| 也ä¸ä¼šå’Œå·¦èŠ±æ‹¬å·åŒ¹é…。
+
+%\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
+在扫æ输入时,\TeX\ 如åŒå…¶å®ƒ\minref{控制åºåˆ—}一样对待 |\begingroup| å’Œ |\endgroup|。
+尤其体现在,你å¯ä»¥å®šä¹‰ä¸€ä¸ªåŒ…括 |\begingroup| 但ä¸åŒ…括 |\endgroup| çš„å®ï¼Œ
+或者与之相å。
+^^{å®//使用 \b\tt\\begingroup\e\ å’Œ \b\tt\\endgroup\e}
+这个技巧往往在你定义一对å®æ—¶ä¼šéžå¸¸æœ‰ç”¨ï¼Œä¸€ä¸ªç”¨æ¥å¼€å§‹ä¸€ä¸ªçŽ¯å¢ƒï¼Œ
+å¦ä¸€ä¸ªç”¨æ¥ç»“æŸè¿™ä¸ªçŽ¯å¢ƒã€‚
+但是你ä¸å¯ä»¥ä½¿ç”¨ |\begingroup| å’Œ |\endgroup|
+æ¥æ›¿æ¢é™¤äº†ç”¨æ¥æ‹¬èµ·ä¸€ä¸ªç»„以外功能的花括å·ã€‚
+\example
+\def\a{一 \begingroup \it 二 }
+\def\enda{\endgroup å››}
+\a 三 \enda
+|
+\produces
+\def\a{一 \begingroup \it 二 }
+\def\enda{\endgroup å››}
+\a 三 \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.
+\begindesc
+\makecolumns 4/2:
+\easy%
+\ctsact { \xrdef{@lbrace}
+\cts bgroup {}
+\ctsact } \xrdef{@rbrace}
+\cts egroup {}
+\explain
+左花括å·å’Œå³èŠ±æ‹¬å·å‘½ä»¤çš„作用是用æ¥å¼€å§‹æˆ–结æŸä¸€ä¸ª\minref{编组}。
+除了在扫æ输入时 \TeX\ 会把 |\bgroup| å’Œ |\egroup|
+åƒå…¶å®ƒ\minref{控制åºåˆ—}一样对待以外,
+|\bgroup| å’Œ |\egroup| \minref{控制åºåˆ—}与 `|{|' å’Œ `|}|'是等价的。
+
+%|\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.
+当你定义两个æˆå¯¹çš„å®æ—¶ï¼Œ|\bgroup| å’Œ |\egroup| 会éžå¸¸æœ‰ç”¨ã€‚
+这两个å®ä¸­å…¶ä¸­ä¸€ä¸ªå¼€å§‹ä¸€ä¸ªç”±èŠ±æ‹¬å·å®šç•Œçš„结构(ä¸ä¸€å®šæ˜¯ä¸€ä¸ªç»„),
+而å¦ä¸€ä¸ªç»“æŸè¯¥ç»“构。
+^^{å®//用 \b\tt\\bgroup\e\ å’Œ \b\tt\\egroup\e}
+ä½ ä¸èƒ½ä½¿ç”¨å¸¸è§„的花括å·æ¥å®šä¹‰è¿™æ ·çš„å®ï¼Œå¦åˆ™ä½ çš„å®å®šä¹‰ä¼šåŒ…å«æ²¡æœ‰åŒ¹é…的花括å·ï¼Œ
+而这样的定义是ä¸è¢« \TeX\ 所接å—的。
+一般情况下你需è¦åœ¨ä½ æ²¡æœ‰åŠžæ³•ä½¿ç”¨èŠ±æ‹¬å·æ—¶ä½¿ç”¨è¿™äº›å‘½ä»¤ã€‚
+
+%\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
+\example
+一个编组的 {\it 边界\/} å¯ç”±èŠ±æ‹¬å·å®šä¹‰.
+|
+\produces
+一个编组的~{\it 边界\/}~å¯ç”±èŠ±æ‹¬å·å®šä¹‰.
+\nextexample
+\def\a{一 \vbox\bgroup}
+% 在这里你ä¸èƒ½ä½¿ç”¨ä¸€ä¸ª { æ¥ä»£æ›¿ \bgroup,
+% å¦åˆ™ TeX ä¸ä¼šè¯†åˆ«è¿™ä¸ªå®
+\def\enda#1{{#1\egroup} 二}
+% 这有点技巧性, 因为 \egroup 事实上和左花括å·åŒ¹é…,
+% 而它å³è¾¹çš„å³è¾¹çš„花括å·å’Œ \bgroup 匹é….
+% ä¸è¿‡è¿™ä¸ªæ­ªé—¨é‚ªé“行得通!!
+\a \enda{\hrule width 1in}
+|
+\produces
+\def\a{一 \vbox\bgroup}
+% 在这里你ä¸èƒ½ä½¿ç”¨ä¸€ä¸ª { æ¥ä»£æ›¿ \bgroup,
+% å¦åˆ™ TeX ä¸ä¼šè¯†åˆ«è¿™ä¸ªå®
+\def\enda#1{{#1\egroup} 二}
+% 这有点技巧性, 因为 \egroup 事实上和左花括å·åŒ¹é…,
+% 而它å³è¾¹çš„å³è¾¹çš„花括å·å’Œ \bgroup 匹é….
+% ä¸è¿‡è¿™èŠ±æ‹›èƒ½ç”¨!!
+\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 global {}
+\explain
+这个命令使得它éšåŽçš„定义或\minref{赋值}æˆä¸º\minref{全局}性的%
+\seeconcept{全局的},而ä¸æ˜¯ä»…å±€é™åœ¨æ‰€å¤„çš„\minref{组}之中生效。
+ä½ å¯ä»¥æŠŠ |\global| 放在
+包括å®å®šä¹‰å’Œ\minref{寄存器}赋值在内的任何定义或\minref{赋值}å‰ã€‚
+\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
+\cts globaldefs {\param{number}}
+\explain
+这个å‚数控制 \TeX\ 是å¦æŠŠå®šä¹‰å’Œå…¶å®ƒçš„赋值作为\minref{全局}çš„:
+\ulist
+\li 如 |\globaldefs| 是 (默认值) 零,
+当且仅当一个定义是由直接或者间接的 |\global| 命令指定的.
+(^|\gdef| å’Œ ^|\xdef| 命令 (\xref\gdef) 间接地在定义å‰é¢åŠ äº† |\global| 命令).
+\li 如果 |\globaldefs| 大于零, 所有的定义和赋值都会间接地在å‰é¢åŠ ä¸Š ^|global|.
+\li 如果 |\globaldefs| å°äºŽé›¶, 所有的 ^|\global| 都被忽略.
+\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.
+\begindesc
+\margin{改å˜äº† {\tt\\aftergroup} å’Œ {\tt\\afterassignment} 顺åº.}
+\cts aftergroup {\<token>}
+\explain
+当 \TeX\ 在读å–输入时é‡åˆ°äº†è¿™ä¸ªå‘½ä»¤ï¼Œå®ƒå°±æŠŠ \<token> ä¿å­˜ä¸‹æ¥ã€‚
+并在当å‰\minref{组}åŽæ’入展开åŽçš„ \<token>。
+如果一个编组有好几个 |\aftergroup|,则æ¯ä¸ªæ ‡è®°\emph{å…¨}都会ä¾æ¬¡æ’入这个编组的最åŽã€‚
+
+%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
+下é¢çš„例å­å‘你展示了如何用 |\aftergroup| æ¥å»¶è¿Ÿå¤„ç†ä¸€ä¸ªåœ¨\minref{æ¡ä»¶æµ‹è¯•}中产生的标记.
+\example
+\def\neg{è´Ÿ} \def\pos{æ­£}
+% 因为一个 \aftergroup åªèƒ½ä½œç”¨åˆ°ä¸€ä¸ªæ ‡è®°ä¸Š,
+% 而ä¸æ˜¯åˆ°ä¸€ç³»åˆ—的标记上, 甚至ä¸èƒ½æ˜¯ä¸€ä¸ªç”¨æ‹¬å·å®šç•Œçš„文本,
+% 所以下é¢çš„代ç æ˜¯å¿…需的.
+\def\arith#1{æ˜¯å¦ $#1>0$? \begingroup
+ \ifnum #1>-1 是\aftergroup\pos
+ \else å¦\aftergroup\neg\fi
+ , 它是\endgroup. }
+\arith 2
+\arith {-1}
+|
+\produces
+\def\neg{è´Ÿ} \def\pos{æ­£}
+% 因为一个 \aftergroup åªèƒ½ä½œç”¨åˆ°ä¸€ä¸ªæ ‡è®°ä¸Š,
+% 而ä¸æ˜¯åˆ°ä¸€ç³»åˆ—的标记上, 甚至ä¸èƒ½æ˜¯ä¸€ä¸ªç”¨æ‹¬å·å®šç•Œçš„文本,
+% 所以下é¢çš„代ç æ˜¯å¿…需的.
+\def\arith#1{æ˜¯å¦ $#1>0$? \begingroup
+ \ifnum #1>-1 是\aftergroup\pos
+ \else å¦\aftergroup\neg\fi
+ , 它是\endgroup. }
+\arith 2
+\arith {-1}
+\endexample
+\eix^^{编组}
+\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.
+\begindesc
+\cts afterassignment {\<token>}
+\explain
+当 \TeX\ é‡åˆ°è¿™ä¸ªå‘½ä»¤ï¼Œå®ƒä¼šæŠŠ \<token> ä¿å­˜åœ¨ä¸€ä¸ªç‰¹æ®Šçš„地方。
+在它下次执行赋值时,它会把展开åŽçš„ \<token> 放到其åŽã€‚
+如果你调用了几次 |\afterassignment|,那仅有最åŽä¸€æ¬¡æ˜¯ç”Ÿæ•ˆçš„。
+|\afterassignment| 命令的一个用处是å¯ä»¥å†™å®šä¹‰å½¢å¼çš„\minref{å®}命令,
+例å­å¦‚下。
+
+%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
+精确的 |\afterassignment| 行为定义请å‚è§ \knuth{page~279}.
+\example
+\def\setme{\afterassignment\setmeA\count255}
+\def\setmeA{$\number\count255\advance\count255 by 10
+ +10=\number\count255$}
+算术å¼: \setme = 27
+% 在展开 \setme 以åŽ, TeX 把 \count255
+% 设为 27, 然åŽè°ƒç”¨ \setmeA.
+|
+\produces
+\def\setme{\afterassignment\setmeA\count255}
+\def\setmeA{$\number\count255\advance\count255 by 10
+ +10=\number\count255$}
+算术å¼: \setme = 27
+% 在展开 \setme 以åŽ, TeX 把 \count255
+% 设为 27, 然åŽè°ƒç”¨ \setmeA.
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\section {Macros}
+\section {å®}
+
+%==========================================================================
+%\subsection {Defining macros}
+\subsection {定义å®}
+
+%\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
+\bix^^{å®}
+\bix^^{å®//定义å®}
+\xrdef{mac1}% begin the section on macros
+%
+\cts def {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+\explain
+è¿™ä¸ªå‘½ä»¤æ ¹æ® \<parameter text> å’Œ \<replacement text> 把 \<control sequence> 定义为一个\minref{å®}。
+请å‚阅\xrefpg{å®}获å–关于如何定义å®çš„完整信æ¯ã€‚
+\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}.
+\begindesc
+\cts edef {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+\explain
+这个命令和 |\def| 一样å¯ä»¥å®šä¹‰å®.
+唯一的区别在于, \TeX\ 会把 |\edef| çš„ \<replacement text> ç«‹å³å±•å¼€ (但是ä¸ä¼šæ‰§è¡Œå®ƒ).
+å› æ­¤, 任何在 \<replacement text> 中的内容会被展开, 但那些产生盒å­æˆ–粘连的排列或命令ä¾ç„¶ä¿æŒåŽŸæ¥çš„æ ·å­.
+比如 \TeX\ 在处ç†è¿™ä¸ªå®šä¹‰æ—¶, 在由 |\edef| 的定义中的 \<replacement text> 中的 |\hbox| 命令ä¾ç„¶ä¼šä¿æŒå‘½ä»¤ç«¹çš„æ ¼å¼, 而ä¸ä¼šå˜æˆä¸€ä¸ªç›’å­.
+一般情况下, 并ä¸èƒ½æ˜Žæ˜¾çœ‹å‡ºä»€ä¹ˆä¼šè¢«å±•å¼€, 什么ä¸ä¼š, 但你å¯ä»¥åœ¨ \knuth{页~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).
+ä½ å¯ä»¥ä½¿ç”¨ |\no!-expand| 命令 (\xref\noexpand) æ¥é˜»æ­¢ä¸€ä¸ªæŽ§åˆ¶åºåˆ—的展开.
+^^|\noexpand|
+ä½ å¯ä»¥ä½¿ç”¨ ^|\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
+|\write|, |\message|, |\errmessage|, |\wlog| å’Œ |\csname| 命令会把它们的标记使用和 |\edef| 替æ¢æ–‡æœ¬ç›¸åŒçš„法则进行展开.
+^^|\write//用 {\tt\\edef} 规则展开|
+^^|\message//用 {\tt\\edef} 规则展开|
+^^|\errmessage//用 {\tt\\edef} 规则展开|
+^^|\wlog//用 {\tt\\edef} 规则展开|
+^^|\csname//用 {\tt\\edef} 规则展开|
+\example
+\def\aa{xy} \count255 = 1
+\edef\bb{w\ifnum \count255 > 0\aa\fi z}
+% 和 \def\bb{wxyz} 等价
+\def\aa{} \count255 = 0 % ä¸å½±å“ \bb
+\bb
+|
+\produces
+\def\aa{xy} \count255 = 1
+\edef\bb{w\ifnum \count255 > 0\aa\fi z}
+% 和 \def\bb{wxyz} 等价
+\def\aa{} \count255 = 0 % ä¸å½±å“ \bb
+\bb
+\endexample
+\enddesc
+
+%\begindesc
+%\cts gdef {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+%\explain
+%This command is equivalent to |\global\def|.
+%\enddesc
+\begindesc
+\cts gdef {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+\explain
+这个命令等价于 |\global\def|.
+\enddesc
+
+%\begindesc
+%\cts xdef {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+%\explain
+%This command is equivalent to |\global\edef|.
+%\enddesc
+\begindesc
+\cts xdef {\<control sequence> \<parameter text> \rqbraces{\<replacement text>}}
+\explain
+这个命令等价于 |\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 long {}
+\explain
+这个命令加在\minref{å®}定义å‰é¢.
+它告诉 \TeX\ 该å®çš„å‚æ•°å¯ä»¥åŒ…括 |\par| 标记 (\xref{\@par}),
+该标记一般表示一个段的结æŸ.
+^^|\par//在å®å‚é‡ä¸­|
+如果 \TeX\ å°è¯•æŠŠä¸€ä¸ªæ²¡æœ‰ |\long| çš„å®å®šä¹‰å±•å¼€,
+而该å®çš„ä»»æ„一部分的å‚数包括了一个 |\par| 标记,
+\TeX\ 就会报错错这是一个失控的å‚æ•°.
+这个行为的目的, 是为了确ä¿å®å‚数的完整结æŸ.
+而 |\long| 就给你æ供了一个回é¿è¿™ä¸ªè¡Œä¸ºçš„方法.
+\example
+\long\def\aa#1{\par\hrule\smallskip#1\par\smallskip\hrule}
+\aa{这是第一行.\par
+这是第二行.}
+% 没有 \long, TeX 会报错
+|
+\produces
+\medskip
+\long\def\aa#1{\par\hrule\smallskip#1\par\smallskip\hrule}
+\aa{这是第一行.\par
+这是第二行.}
+% 没有 \long, TeX 会报错
+\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.
+\begindesc
+\cts outer {}
+\explain
+\null ^^{外部的}
+这个命令加在\minref{å®}定义å‰ã€‚
+它告诉 \TeX\ 这个å®æ˜¯å¤–部的(\xref{外部的}),
+所以ä¸èƒ½åœ¨æŸäº›æƒ…况中使用。
+如果这个å®å‡ºçŽ°åœ¨é‚£äº›è¢«ç¦æ­¢çš„情下,\TeX\ 会报错。
+
+%\example
+%\outer\def\chapterhead#1{%
+% \eject\topglue 2in \centerline{\bf #1}\bigskip}
+%% Using \chapterhead in a forbidden context causes an
+%% error message.
+%|
+%\endexample
+%\enddesc
+\example
+\outer\def\chapterhead#1{%
+ \eject\topglue 2in \centerline{\bf #1}\bigskip}
+% 在一个被ç¦æ­¢çš„情况下使用 \chapterhead
+% 会出现错误信æ¯.
+|
+\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
+\cts chardef {\<control sequence>=\<charcode>}
+\explain
+^^{字符//用 \b\tt\\chardef\e 定义}
+上é¢çš„命令把 \<charcode> 定义为 \<control sequence>.
+虽然 |\chardef| 常在定义字符时用到,
+你也å¯ä»¥ä½¿ç”¨å®ƒæ¥ç»™ $0$--$255$ 之间的任何一个数定义一个åå­—,
+å³ä½¿ä½ æ²¡ç”¨ä»¥å­—符ç çš„å½¢å¼ä½¿ç”¨è¯¥æ•°.
+\example
+\chardef\percent = `\% 21\percent, {\it 19\percent}
+% 排å°å‡ºæ­£ä½“å’Œæ„大利体的百分å·
+|
+\produces
+\chardef\percent = `\%
+21\percent, {\it 19\percent}
+% 排å°å‡ºæ­£ä½“å’Œæ„大利体的百分å·
+\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
+\begindesc
+^^{数学字符}
+^^{æ•°å­¦ç }
+\cts mathchardef {\<control sequence>=\<mathcode>}
+\explain
+这个命令把 \<control sequence> 定义为一个给定\minref{数学字符ç }的数学字符.
+这个控制åºåˆ—仅在数学模å¼ä¸‹æœ‰æ•ˆ
+\example
+\mathchardef\alphachar = "010B % 类似 plain TeX 的定义
+$\alphachar$
+|
+\produces
+\mathchardef\alphachar = "010B % 类似 plain TeX 的定义
+$\alphachar$
+\endexample
+\eix^^{å®//定义å®}
+\enddesc
+
+%==========================================================================
+%\subsection {Other definitions}
+\subsection {其它定义方法}
+
+%\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 let {\<control sequence> = \<token>}
+\explain
+^^{控制åºåˆ—//用 \b\tt\\let\e 定义}
+\minrefs{token}
+这个命令会使得 \<control sequence> 去获å–å½“å‰ \<token> çš„å«ä¹‰.
+å³ä½¿ä½ å¯¹ \<token> é‡æ–°å®šä¹‰, \<control sequence> çš„å«ä¹‰ä»ç„¶ä¸å˜.
+虽然 \<token> 一般情况下都是一个控制åºåˆ—,
+它其实也å¯ä»¥æ˜¯ä¸€ä¸ª\minref{字符}标记.
+\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 futurelet {\<control sequence> \<token$_1$> \<token$_2$>}
+\explain
+这个命令告诉 \TeX\ 把 \<token$_2$> 的设为 \<control sequence> 的定义
+(å¯ä»¥ç”± |\let| 完æˆ),
+然åŽæŒ‰æ­£å¸¸çš„æ–¹å¼æ¥å¤„ç† \<token$_1$> å’Œ \<token$_2$>.
+在å®å®šä¹‰çš„æœ€åŽ |\futurelet| 很有用, 因为它å¯ä»¥ç»™ä½ æ供一个
+在 \TeX\ 处ç†æœªå¤„ç†çš„标记å‰, 查看它åŽé¢çš„标记的方法.
+\example
+\def\predict#1{\toks0={#1}\futurelet\next\printer}
+% \next ä¼šèŽ·å– \predict åŽçš„标点符å·.
+\def\printer#1{一个 \punc\ 放在 \the\toks0 å‰. }
+\def\punc{%
+ \ifx\next;分å·\else
+ \ifx\next,逗å·\else
+ ``\next''\fi\fi}
+\predict{三月}; \predict{四月}, \predict{七月}/
+|
+\produces
+\def\predict#1{\toks0={#1}\futurelet\next\printer}
+% \next ä¼šèŽ·å– \predict åŽçš„标点符å·.
+\def\printer#1{一个 \punc\ 放在 \the\toks0 å‰. }
+\def\punc{%
+ \ifx\next;分å·\else
+ \ifx\next,逗å·\else
+ ``\next''\fi\fi
+ }
+\predict{三月}; \predict{四月}, \predict{七月}/
+\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
+\begindesc
+\cts csname {\<token list> {\bt \\endcsname}}
+\xrdef{\endcsname}
+\explain
+这个命令å¯ä»¥ç”± \<token list> 产生一个控制åºåˆ—.
+它æ供了一ç§æŠŠæ ‡è®°åˆå¹¶æˆæŽ§åˆ¶åºåˆ—çš„æ–¹å¼,
+包括一些你一般情况下ä¸èƒ½ç›´æŽ¥å†™çš„å½¢å¼.
+|\csname| 命令会把它们的标记使用和 |\edef| 替æ¢æ–‡æœ¬ç›¸åŒçš„法则进行展开 (\xref\edef).
+如果最åŽçš„展开会产生ä¸æ˜¯å­—符的东西, \TeX\ 会报错.
+|\csname| 把一系列的标记转为一个控制åºåˆ—;
+ä½ å¯ä»¥ç”¨ ^|\string| \ctsref\string 的方法åšç›¸å的事情.
+\example
+\def\capTe{Te}
+本书关于 \csname\capTe X\endcsname.
+|
+\produces
+\def\capTe{Te}
+本书关于 \csname\capTe X\endcsname.
+\endexample
+\enddesc
+
+%==========================================================================
+%\subsection {Controlling expansion}
+\subsection {控制展开}
+
+%\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
+\bix^^{å®//控制å®å±•å¼€}
+\cts expandafter {\<token$_1$> \<token$_2$>}
+\explain
+这个命令会让 \TeX\ 在展开一层 \<token$_2$> åŽæŠŠ \<token$_1$> æ ¹æ®\minref{å®}展开法则进行展开.
+有时你想展开 \<token$_2$>,
+而它å‰é¢æœ‰ç±»ä¼¼ `|{|' 或 ^|\string| 的东西阻止它的展开,
+^^|{//和 {\tt\\expandafter} 一起|
+这时这个命令会éžå¸¸æœ‰ç”¨.
+\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 noexpand {\<token>}
+\explain
+这个命令让 \TeX\ 跳过一个å¯ä»¥å±•å¼€çš„标记 \<token> 的展开.
+如果 \<token> ä¸èƒ½è¢«å±•å¼€, 比如它是一个字符,
+\TeX\ 则ä¸ä¼šç†ä¼š |\noexpand|, 而把 \<token> 按一般的方法处ç†.
+\example
+\def\bunny{å…”å­}
+\edef\magic{把 \noexpand\bunny\ 从帽å­ä¸­å–出!! }
+% 如果没有 \noexpand, \bunny 会永远替æ¢ä¸º `å…”å­'
+\let\oldbunny=\bunny \def\bunny{å…”} \magic
+\let\bunny=\oldbunny \magic
+|
+\produces
+\def\bunny{å…”å­}
+\edef\magic{把 \noexpand\bunny\ 从帽å­ä¸­å–出!! }
+% 如果没有 \noexpand, \bunny 会永远替æ¢ä¸º `å…”å­'
+\let\oldbunny=\bunny \def\bunny{å…”} \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:
+\begindesc
+\cts the {\<token>}
+\explain
+这个命令一般会把 \<token> 展开, 表示æˆä¸€ä¸ª\minref{字符}串.
+其中 \<token> å¯ä»¥æ˜¯ä»¥ä¸‹çš„任何形å¼:
+
+%\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
+\ulist\compact
+\li \TeX\ \minref{å‚æ•°}, 比如, |\parindent| 或者 |\deadcycles|
+^^{å‚æ•°//å’Œ \b\tt\\the\e\ 一起使用}
+\li \minref{寄存器}, 比如, |\count0|
+^^{寄存器//和 \b\tt\\the\e 一起}
+\margin{去除了特殊寄存器的那项}
+\li 输入字符的字符ç , 比如, |\catcode`(|
+\li 字符å‚æ•°, 比如, |\fontdimen3\sevenbf|
+\li 字体的 ^|\hyphenchar| 或 ^|\skewchar|, 比如, |\skewchar\teni|
+\li ^|\lastpenalty|, ^|\lastskip|, 或者 ^|\lastkern|
+(当å‰çš„æ°´å¹³\minrefs{水平列表}或\minref{竖直列表}的最åŽä¸€é¡¹çš„数值).
+\li ^|\chardef| 或 ^|\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
+\noindent
+此外, |\the| å¯ä»¥åœ¨ä¸‹é¢ä¸¤ç§æƒ…况下, 展开æˆéžå­—符标记:
+\ulist\compact
+\li |\the| \<font>, 会展开æˆå½“å‰å®šä¹‰çš„控制åºåˆ—,
+这个控制åºåˆ—和控制åºåˆ— \<font> 所选择的字体相åŒ.
+\li |\the| \<token variable>, 会å¤åˆ¶å˜é‡çš„值, 并且对å¤æœ¬è¿›è¡Œå±•å¼€,
+比如 |\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
+请å‚阅 \knuth{页~214--215} æ¥èŽ·å– |\the| 在å„ç§æƒ…况下行为的更详细æè¿°.
+\example
+ç›®å‰é¡µé¢çš„竪直长度为 \the\vsize.
+`(' 字符的类ç æ˜¯ \the\catcode `(.
+|
+\produces
+ç›®å‰é¡µé¢çš„竪直长度为 \the\vsize.
+`(' 字符的类ç æ˜¯ \the\catcode `(.
+\endexample
+\enddesc
+
+%{\tighten
+%\see \headcit{Converting information to tokens}{convert},
+%|\showthe| (\xref\showthe).
+%\par}
+{\tighten
+\see \headcit{把信æ¯æ”¹ä¸ºæ ‡è®°}{convert},
+|\showthe| (\xref\showthe).
+\par}
+
+\eix^^{å®//控制å®å±•å¼€}
+
+%==========================================================================
+%\subsection {Conditional tests}
+\subsection {æ¡ä»¶æµ‹è¯•}
+
+%\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
+\xrdef{conds}
+\bix^^{æ¡ä»¶æµ‹è¯•}
+%
+\ctspecial if {\<token$_1$> \<token$_2$>}\ctsxrdef{@if}
+\explain
+此命令测试 \<token$_1$> å’Œ \<token$_2$> çš„\minref{字符}ç¼–ç æ˜¯å¦ç›¸åŒï¼Œ
+ä¸åŒºåˆ†å®ƒä»¬çš„\minref{类别ç }。
+在测试之å‰ï¼Œ\TeX\ 展开 |\if| 之åŽçš„è®°å·ï¼Œç›´åˆ°å¾—到两个无法继续展开的记å·ã€‚
+这两个记å·å°±æ˜¯ \<token$_1$> å’Œ \<token$_2$>。
+展开过程也包括将控制åºåˆ—替æ¢ä¸ºç”¨ |\let| 设定的æŸä¸ªå­—符记å·ã€‚
+\TeX\ 将无法继续展开的\minref{控制åºåˆ—}è§†ä¸ºå­—ç¬¦ç¼–ç  $256$ çš„è®°å·ã€‚
+\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 ifcat {\<token$_1$> \<token$_2$>}\ctsxrdef{@ifcat}
+\explain
+^^{类别ç //测试类别ç }
+此命令测试 \<token$_1$> å’Œ \<token$_2$> çš„\minref{类别ç }是å¦ç›¸åŒã€‚
+在测试之å‰ï¼Œ\TeX\ 展开 |\ifcat| 之åŽçš„è®°å·ï¼Œç›´åˆ°å¾—到两个无法继续展开的记å·ã€‚
+这两个记å·å°±æ˜¯ \<token$_1$> å’Œ \<token$_2$>。
+展开过程也包括将控制åºåˆ—替æ¢ä¸ºç”¨ |\let| 设定的æŸä¸ªå­—符记å·ã€‚
+\TeX\ 将无法继续展开的\minref{控制åºåˆ—}è§†ä¸ºç±»åˆ«ç  $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 ifx {\<token$_1$> \<token$_2$>}\ctsxrdef{@ifx}
+\explain
+此命令测试 \<token$_1$> å’Œ \<token$_2$> 是å¦ç›¸åŒã€‚
+与 |\if| å’Œ |\ifcat| ä¸åŒï¼Œ|\ifx| 命令\emph{ä¸ä¼š}展开 |\ifx| 之åŽçš„è®°å·ï¼Œ
+å› æ­¤ \<token$_1$> å’Œ \<token$_2$> å°±æ˜¯ç´§éš |\ifx| 之åŽçš„两个记å·ã€‚
+\TeX\ 按照如下三ç§æƒ…形处ç†ï¼š
+\olist
+\li 如果一个记å·æ˜¯\minref{å®}而å¦ä¸€ä¸ªè®°å·ä¸æ˜¯ï¼Œåˆ™è¿™ä¸¤ä¸ªè®°å·ä¸ç›¸åŒã€‚
+\li 如果两个记å·éƒ½ä¸æ˜¯å®ï¼Œå®ƒä»¬æ»¡è¶³ä¸‹é¢æ¡ä»¶ä¹‹ä¸€æ—¶ç›¸åŒï¼š
+\olist
+\li 两个记å·éƒ½æ˜¯å­—符(或表示字符的控制åºåˆ—),
+且它们的\minref{字符}ç¼–ç å’Œ\minref{类别ç }相åŒï¼›
+\li 两个记å·æŒ‡ä»£ç›¸åŒçš„ \TeX\ 命令或字体等。
+\endolist
+\li 如果两个记å·éƒ½æ˜¯å®ï¼Œå®ƒä»¬æ»¡è¶³ä¸‹é¢ä¸¤ä¸ªæ¡ä»¶æ—¶ç›¸åŒï¼š
+\olist\compact
+\li 它们的``第一层''展开å³å®ƒä»¬çš„替æ¢æ–‡æœ¬ç›¸åŒï¼›
+\li 它们有相åŒçš„ ^|\long|(\xref\long )和 ^|\outer|(\xref\outer )状æ€ã€‚
+\endolist
+注æ„特别地\emph{任何两个未定义的控制åºåˆ—是相åŒçš„}。
+\endolist
+\noindent
+此测试通常比 |\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 ifnum {\<number$_1$> \<relation> \<number$_2$>}\ctsxrdef{@ifnum}
+\explain
+^^{数//比较两个数}
+此命令测试 \<number$_1$> å’Œ \<number$_2$> 是å¦æ»¡è¶³ \<relation>,
+å³ `|<|'ã€`|=|' 或者 `|>|' 关系。
+这两个数å¯ä»¥æ˜¯ç±»ä¼¼ |127| 的常数ã€ç±»ä¼¼ |\pageno| 或 |\count22| 的计数寄存器%
+或者类似 |\hbadness| 的数值å‚数。
+在执行测试之å‰ï¼Œ\TeX\ 展开 |\ifnum| 之åŽçš„è®°å·ï¼Œ
+直到它得到一串形如 \<number$_1$> \<relation> \<number$_2$> çš„è®°å·åºåˆ—,
+而且éšåŽçš„è®°å·ä¸èƒ½æˆä¸º \<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 ifodd {\<number>}\ctsxrdef{@ifodd}
+\explain
+^^{æ•°//测试奇å¶æ€§}
+此命令测试 \<number> 是å¦ä¸ºå¥‡æ•°ã€‚
+在执行测试之å‰ï¼Œ\TeX\ 展开 |\ifodd| 之åŽçš„è®°å·ï¼Œ
+直到它得到一串形如 \<number> çš„è®°å·åºåˆ—,
+而且éšåŽçš„è®°å·ä¸èƒ½æˆä¸º \<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 ifdim {\<dimen$_1$> \<relation> \<dimen$_2$>}\ctsxrdef{@ifdim}
+\explain
+^^{尺寸//比较两个尺寸}
+此命令测试 \<dimen$_1$> å’Œ \<dimen$_2$> 是å¦æ»¡è¶³ \<relation>,
+å³ `|<|'ã€`|=|' 或 `|>|' 关系。这两个尺寸å¯ä»¥æ˜¯ç±»ä¼¼ |1in| 的常数ã€
+类似 |\dimen6| 的尺寸寄存器或者类似 |\parindent| 的尺寸å‚数。
+在执行测试之å‰ï¼Œ\TeX\ 展开 |\ifdim| 之åŽçš„è®°å·ï¼Œ
+直到它得到一串形如 \<dimen$_1$> \<relation> \<dimen$_2$> çš„è®°å·åºåˆ—,
+而且éšåŽçš„è®°å·ä¸èƒ½æˆä¸º \<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 ifhmode {}\ctsxrdef{@ifhmode}
+\ctspecial ifvmode {}\ctsxrdef{@ifvmode}
+\ctspecial ifmmode {}\ctsxrdef{@ifmmode}
+\ctspecial ifinner {}\ctsxrdef{@ifinner}
+\explain
+^^{水平模å¼//测试水平模å¼}
+^^{竖直模å¼//测试竖直模å¼}
+^^{数学模å¼//测试数学模å¼}
+^^{内部模å¼//测试内部模å¼}
+这些命令测试 \TeX\ 处于何ç§æ¨¡å¼ä¸­ï¼š
+\ulist
+\li |\ifhmode| 为真,如果 \TeX\ 处于普通或å—é™æ°´å¹³æ¨¡å¼ä¸­ã€‚
+\li |\ifvmode| 为真,如果 \TeX\ 处于普通或内部竖直模å¼ä¸­ã€‚
+\li |\ifmmode| 为真,如果 \TeX\ 处于文内数学或陈列数学模å¼ä¸­ã€‚
+\li |\ifinner| 为真,如果 \TeX\ 处于``内部''模å¼ä¸­ï¼š
+å³ä½äºŽå—é™æ°´å¹³æ¨¡å¼ã€å†…部竖直模å¼æˆ–者文内数学模å¼ä¸­ã€‚
+\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 ifhbox {\<register>}\ctsxrdef{@ifhbox}
+\ctspecial ifvbox {\<register>}\ctsxrdef{@ifvbox}
+\ctspecial ifvoid {\<register>}\ctsxrdef{@ifvoid}
+\explain
+^^{水平盒å­//测试水平盒å­}
+^^{ç«–ç›´ç›’å­//测试竖直盒å­}
+^^{ç›’å­//测试空盒å­}
+这些命令测试编å·ä¸º \<reg\-ister> çš„ç›’å­å¯„存器的内容。
+è®¾ç¼–å· \<register> 为 $n$。则有:
+\ulist
+\li |\ifhbox| 为真,如果 |\box|$\,n$ 是一个\minref{水平盒å­}。
+\li |\ifvbox| 为真,如果 |\box|$\,n$ 是一个\minref{ç«–ç›´ç›’å­}。
+\li |\ifvoid| 为真,如果 |\box|$\,n$ 是空的,å³å®ƒä¸åŒ…å«ç›’å­ã€‚
+\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 ifeof {\<number>}\ctsxrdef{@ifeof}
+\explain
+^^{文件尾测试}
+\minrefs{file}
+此命令测试输入æµæ–‡ä»¶æ˜¯å¦ç»“æŸã€‚
+它为真当且仅当第 \<number> 个输入æµè¿˜æ²¡æ‰“开,
+或者已ç»æ‰“开但对应的文件已ç»å…¨éƒ¨è¯»å®Œï¼ˆæˆ–文件ä¸å­˜åœ¨ï¼‰ã€‚
+\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 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
+^^{分支测试}
+此命令引入一个带编å·çš„多é‡åˆ†æ”¯æµ‹è¯•ã€‚
+å‡è®¾ \<num\-ber> 的值为 $k$,在 \<case$_k$ text> 存在时 \TeX\ 将展开它,
+å¦åˆ™å°±å±•å¼€ \<other\-wise text>。你å¯ä»¥çœç•¥ |\else| ——%
+此时,在å„个分支都ä¸æ»¡è¶³æ—¶ \TeX\ å°†ä¸å±•å¼€ä»»ä½•ä¸œè¥¿ã€‚
+\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 iftrue {}\ctsxrdef{@iftrue}
+\ctspecial iffalse {}\ctsxrdef{@iffalse}
+\explain
+这两个命令æ供始终为真或始终为å‡çš„测试。它们主è¦ç”¨äºŽåœ¨å®å®šä¹‰ä¸­è®°å½•æµ‹è¯•ç»“果。
+\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 else {} \ctsxrdef{@else}
+\explain
+此命令æä¾›æ¡ä»¶æµ‹è¯•ä¸º``å‡''时的å¦ä¸€é€‰æ‹©ã€‚
+\enddesc
+
+%\begindesc
+%\ctspecial fi {} \ctsxrdef{@fi}
+%\explain
+%This command ends the text of a conditional test.
+%\enddesc
+\begindesc
+\ctspecial fi {} \ctsxrdef{@fi}
+\explain
+此命令结æŸæ¡ä»¶æµ‹è¯•æ–‡æœ¬ã€‚
+\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
+\begindesc
+\ctspecial newif {{\bt \\if}\<test name>}\ctsxrdef{@newif}
+\explain
+å‡è®¾ \<test name> 为 |alpha|,此命令命å了三个控制åºåˆ—
+|\alpha!-true|ã€|\alphafalse| å’Œ |\ifalpha|。
+通过创建记录真\slash å‡ä¿¡æ¯çš„逻辑å˜é‡ï¼Œä½ å¯ä»¥å®šä¹‰è‡ªå·±çš„测试:
+\ulist\compact
+\li |\alphatrue| 设定逻辑å˜é‡ |alpha| 为真;
+\li |\alphafalse| 设定逻辑å˜é‡ |alpha| 为å‡ï¼›
+\li |\ifalpha| 是一个æ¡ä»¶æµ‹è¯•ï¼Œå®ƒä¸ºçœŸå½“且仅当逻辑å˜é‡ |alpha| 为真。
+\endulist
+该逻辑å˜é‡ |alpha| 实际上ä¸å­˜åœ¨ï¼Œä½† \TeX\ å‡è£…它是存在的。
+在执行 |\newif\ifalpha| åŽï¼Œè¯¥é€»è¾‘å˜é‡çš„åˆå§‹å€¼ä¸ºå‡ã€‚
+
+|\newif| 是一个外部命令,因此你ä¸èƒ½åœ¨å®å®šä¹‰ä¸­ä½¿ç”¨å®ƒã€‚
+\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^^{æ¡ä»¶æµ‹è¯•}
+\enddesc
+
+
+%==========================================================================
+%\subsection {Repeated actions}
+\subsection {é‡å¤æ“作}
+
+%{\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
+{\def\test{{\bt \\if}$\Omega$}%
+\begindesc
+\bix^^{é‡å¤æ“作}
+\bix^^{循环}
+\cts loop {$\alpha$ {\test} $\beta$ {\bt \\repeat}}
+\ctspecial repeat {}\ctsxrdef{@repeat}
+\explain
+这些命令æ供了 \TeX\ 的循环结构。
+这里 $\alpha$ å’Œ $\beta$ 是任æ„的命令åºåˆ—,
+而 \test\ 是在\headcit{æ¡ä»¶æµ‹è¯•}{conds}中æ述的任何一ç§æ¡ä»¶æµ‹è¯•ã€‚
+|\repeat| å·²ç»æ›¿ä»£äº†å¯¹åº”于该测试的 |\fi|,
+因此你ä¸å¯ä»¥æ˜¾å¼å†™å‡º |\fi| 以结æŸæµ‹è¯•ã€‚
+这也é—憾地导致你ä¸å¯ä»¥ç»™æµ‹è¯•å¸¦ä¸Š |\else| 部分。
+如果你想在相åæ„义上使用测试,你需è¦é‡æ–°å®‰æŽ’该测试,
+或者用 |\newif|(è§ä¸Šé¢ï¼‰å®šä¹‰ä¸€ä¸ªè¾…助测试%
+并按照你的需è¦ä½¿ç”¨è¿™ä¸ªæµ‹è¯•ï¼ˆè§ä¸‹é¢ç¬¬äºŒä¸ªä¾‹å­ï¼‰ã€‚
+
+\TeX\ 按照下列步骤展开 |\loop| 循环:
+\olist
+\li 展开 $\alpha$。
+\li 执行 {\test}。如果结果为å‡ï¼Œå¾ªçŽ¯å°±æ­¤ä¸­æ­¢ã€‚
+\li 展开 $\beta$。
+\li é‡å¤æ­¤å¾ªçŽ¯ã€‚
+\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^^{é‡å¤æ“作}
+\eix^^{循环}
+%
+\endexample
+\enddesc
+} % end scope of definition of \test
+
+%==========================================================================
+%\subsection {Doing nothing}
+\subsection {什么也ä¸åš}
+
+%\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 relax {}
+\explain
+此命令让 \TeX\ ä¸åšä»»ä½•äº‹æƒ…。
+此命令常用在需è¦æ供一个命令但å´æ— äº‹å¯åšçš„环境中。
+\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
+\begindesc
+\cts empty {}
+\explain
+此命令展开åŽå¾—ä¸åˆ°ä»»ä½•è®°å·ã€‚它与 |\relax| 的区别在于,在å®å±•å¼€åŽå®ƒæ¶ˆå¤±äº†ã€‚
+%
+\xrdef{mac2}% end the section on macros
+\eix^^{å®}
+\enddesc
+
+%==========================================================================
+%\section {Registers}
+\section {寄存器}
+
+%==========================================================================
+%\subsection {Using registers}
+\subsection {使用寄存器}
+
+%\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.
+\begindesc
+\bix^^{寄存器}
+\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
+^^{赋值//给寄存器赋值}
+左边列出的六个命令用于给寄存器赋值,其中的 `|=|' 是å¯é€‰çš„。
+å³è¾¹åˆ—出的五个控制åºåˆ—并ä¸æ˜¯çœŸæ­£çš„命令,因为它们åªèƒ½ä½œä¸ºå‚é‡çš„一部分。
+它们给出了特定寄存器的内容。虽然在文本中你ä¸èƒ½å°†è¿™äº›æŽ§åˆ¶åºåˆ—å•ç‹¬ç”¨ä½œå‘½ä»¤ï¼Œ
+但你å¯ä»¥ç”¨ ^|\the| 命令将它们转æ¢ä¸ºæ–‡æœ¬å†æŽ’版它们的值。
+
+%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.
+ä½ å¯ä»¥ç”¨ ^|\newcount| åŠç›¸å…³å‘½ä»¤å‘½å和预留寄存器(\xref{\@newcount})。
+用这些命令获å–寄存器更加安全,因为它们ä¿è¯ä¸ä¼šé€ æˆå†²çªã€‚
+
+%^^{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
+^^{计数寄存器}
+|\count| 寄存器存储一个整数,å¯æ­£å¯è´Ÿã€‚
+该整数å¯ä»¥å¾ˆå¤§ï¼Œæ¯”ä½ å¯èƒ½éœ€è¦çš„都大。\footnote
+{这里是本书仅有的一个练习:找出 \TeX\ å¯ä»¥æŽ¥å—的最大整数。}
+\TeX\ 将计数寄存器 $0$--$9$ 用于记录页ç ï¼ˆè§\knuth{第~119~页})。
+|\count255| 是无需预留就能使用的唯一计数寄存器。
+\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.
+\medskip\noindent
+^^{尺寸寄存器}
+|\dimen| 寄存器存储一个尺寸。
+寄存器 |\dimen0| 到 |\dimen9| åŠ |\dimen255| 都å¯ç”¨äºŽä¸´æ—¶ç”¨é€”。
+
+%\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
+\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.
+\medskip\noindent
+^^{é—´è·å¯„存器}
+|\skip| 寄存器存储粘连的尺寸。
+与 |\dimen| 寄存器ä¸åŒï¼Œå®ƒé™¤äº†è®°å½•ç²˜è¿žçš„自然尺寸外,还记录其伸长é‡å’Œæ”¶ç¼©é‡ã€‚
+寄存器 |\skip0| 到 |\skip9| åŠ |\skip255| 都å¯ç”¨äºŽä¸´æ—¶ç”¨é€”。
+
+%\example
+%\skip2 = 2in
+%$\Rightarrow$\hskip \skip2 $\Leftarrow$
+%|
+%\produces
+%\skip2 = 2in
+%$\Rightarrow$\hskip \skip2 $\Leftarrow$\par
+%\noindent\hphantom{$\Rightarrow$}\ruler{\8\8}2{in}
+%\endexample
+\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.
+\medskip\noindent
+^^{数学间è·å¯„存器}
+|\muskip| 寄存器与 |\skip| 寄存器相似,
+但其中的粘连始终以 ^|mu| 为å•ä½\seeconcept{æ•°å­¦å•ä½}。
+一个 |mu| 的大å°ä¸Žå½“å‰å­—体有关,比如在下标中通常就比在普通文本中å°ä¸€ç‚¹ã€‚
+寄存器 |\muskip0| 到 |\muskip9| åŠ |\muskip255| 都å¯ç”¨äºŽä¸´æ—¶ç”¨é€”。
+
+%\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
+\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.
+\medskip\noindent
+^^{è®°å·å¯„存器}
+ä½ å¯ä»¥æŒ‡å®šä¸€ä¸ªè®°å·å˜é‡ï¼ˆä¸€ä¸ªå¯„存器或一个å‚数)或一个记å·åˆ—ç»™ |\toks| 寄存器。
+当你指定一个记å·åˆ—给记å·å¯„存器时,记å·åˆ—中的记å·\emph{ä¸ä¼š}被展开。
+
+%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}.
+一旦用 ^|\the| 命令将记å·åˆ—中的记å·æ’入文本中,\TeX\ å°±åƒç›´æŽ¥è¯»å…¥é‚£æ ·å±•å¼€å®ƒä»¬ã€‚
+它们的类别ç æ˜¯ \TeX\ 在\hbox{输入}中首次看到时给出的。
+
+%\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
+\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
+\begindesc
+\cts maxdimen {}
+\explain
+^^{尺寸//最大尺寸}
+这个控制åºåˆ—ç”Ÿæˆ \TeX\ 所能接å—的最大尺寸 \<dimen>(差ä¸å¤šä¸º 18 英尺)。
+它ä¸æ˜¯çœŸæ­£çš„命令,因为它åªèƒ½ä½œä¸ºå…¶ä»–命令的å‚é‡çš„一部分。
+\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.}
+\subsection {命å和预留寄存器等}
+
+%\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.
+\begindesc
+\bix^^{寄存器//预留寄存器}
+\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
+这些命令预留并命å一个指定类型的实体:
+\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| ä»¥åŠ |\new!-box| å„自预留一个指定类型的\minref{寄存器}。
+}
+^^{计数寄存器//用 \b\tt\\newcount\e 预留}
+^^{尺寸寄存器//用 \b\tt\\newdimen\e 预留}
+^^{é—´è·å¯„存器//用 \b\tt\\newskip\e 预留}
+^^{数学间è·å¯„存器//用 \b\tt\\newmuskip\e 预留}
+^^{è®°å·å¯„存器//用 \b\tt\\newtoks\e 预留}
+^^{ç›’å­å¯„存器//用 \b\tt\\newbox\e 预留}
+\li |\newread| å’Œ |\newwrite| 分别预留一个输入æµå’Œè¾“出æµ%
+\minrefs{input stream}\minrefs{output stream}。
+^^{输入æµ//用 \b\tt\\newread\e 预留}
+^^{输出æµ//用 \b\tt\\newwrite\e 预留}
+\li |\newfam| 预留一个数学字体\minref{æ—}。
+^^{æ—//用 \b\tt\\newfam\e 预留}
+\li |\newinsert| 预留一个æ’入项类型。%
+(预留一个æ’入项类型包括预留几个ä¸åŒçš„寄存器。)
+^^{æ’入项//用 \b\tt\\newinsert\e 预留编å·}
+\li |\newlanguage| 预留一套连字模å¼ã€‚
+\endulist
+为é¿å…ç¼–å·å†²çªï¼Œåœ¨éœ€è¦è¿™äº›å®žä½“之一时你应当使用这些命令,除éžåœ¨å¾ˆå±€éƒ¨çš„范围中。
+
+%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
+这些命令之间还有一个很é‡è¦çš„区别:
+\ulist
+\li 用 |\newcount|ã€|\newdimen|ã€|\newskip|ã€|\newmuskip| 以åŠ
+|\newtoks| 定义的控制åºåˆ—å„自指明一个相应类型的实体。
+例如在执行命令
+\csdisplay
+\newdimen\listdimen
+|
+之åŽï¼ŒæŽ§åˆ¶åºåˆ— |\listdimen| å¯ä»¥ç”¨ä½œä¸€ä¸ªå°ºå¯¸ã€‚
+\li 用 |\newbox|ã€|\newread|ã€|\newwrite|ã€|\newfam|ã€|\newinsert| 以åŠ
+|\newlanguage| 定义的控制åºåˆ—å„自表示相应类型的实体的\emph{ç¼–å·}。
+例如在执行命令
+\csdisplay
+\newbox\figbox
+|
+之åŽï¼ŒæŽ§åˆ¶åºåˆ— |\figbox| 必须和 类似 |\box| 的命令一起使用,比如:
+\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
+\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
+这些命令将 \<control sequence> 定义为指定类型的编å·ä¸º \<register> çš„\minref{寄存器}。
+为é¿å…ç¼–å·å†²çªï¼Œé€šå¸¸ä½ åº”当使用å‰é¢é‚£äº›å‘½ä»¤ï¼ˆ|\newcount| 等),而ä¸æ˜¯ä½¿ç”¨è¿™äº›å‘½ä»¤ã€‚
+实际上,å‰é¢é‚£äº›å‘½ä»¤å°±æ˜¯ç”¨è¿™äº›å‘½ä»¤æ¥å®šä¹‰çš„.
+\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}
+\see |\newif| (\xref{\@newif}), |\newhelp| (\xref{\@newhelp}).
+\eix^^{寄存器//预留寄存器}
+
+%==========================================================================
+%\subsection {Doing arithmetic in registers}
+\subsection {寄存器中的算术è¿ç®—}
+
+%\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
+\bix^^{算术}
+\bix^^{寄存器//寄存器中的算术è¿ç®—}
+%
+\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
+此命令给寄存器加上一个兼容的数é‡ã€‚对于 \<glue> 或 \<muglue>,
+三个部分(自然尺寸ã€ä¼¸é•¿é‡å’Œæ”¶ç¼©é‡ï¼‰\minrefs{粘连}都被加上。
+任何数é‡éƒ½å¯ä»¥æ˜¯è´Ÿçš„。为方便这些计算(以åŠå…¶ä»–的赋值),
+\<glue> å¯ä»¥é€šè¿‡ä¸¢æŽ‰ä¼¸é•¿é‡å’Œæ”¶ç¼©é‡è½¬æ¢ä¸º \<dimen>,
+而 \<dimen> å¯ä»¥é€šè¿‡å–以 scaled point 为å•ä½çš„值转æ¢ä¸º \<number>%
+\seeconcept{尺寸}。
+在这些命令中,你å¯ä»¥å¿½ç•¥å•è¯ |by| ——这两ç§å†™æ³• \TeX\ 都能ç†è§£ã€‚
+\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.
+\begindesc
+\cts multiply {\<register> {\bt by} \<number>}
+\cts divide {\<register> {\bt by} \<number>}
+\explain
+这两个命令将 \<register> 中的值乘以或除以 \<number>(它å¯ä»¥ä¸ºè´Ÿæ•°ï¼‰ã€‚
+其中的寄存器å¯ä»¥æ˜¯ ^|\count|ã€^|\dimen|ã€^|\skip| 或 ^|\muskip| 寄存器。
+对于 ^|\skip| 或 ^|\muskip| 寄存器(\xref\skip ),
+在寄存器中\minref{粘连}的三个部分都被修改。
+在这些命令中,你å¯ä»¥å¿½ç•¥å•è¯ |by| ——这两ç§å†™æ³• \TeX\ 都能ç†è§£ã€‚
+
+%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
+在 \<dimen> å‰é¢åŠ ä¸Š \<number>\minrefs{number}或å°æ•°ï¼Œä½ å¯ä»¥å¾—到它的å€æ•°ï¼Œ
+比如 |-2.5\dimen2|。在 \<glue> å‰é¢ä¹Ÿå¯ä»¥ä½¿ç”¨æ­¤å†™æ³•ï¼Œ
+但å°å¿ƒæ³¨æ„——结果是一个 \<dimen> 而ä¸æ˜¯ \<glue>。
+比如用 |2\baselineskip| 将得到一个 \<dimen>,
+它等于 |\baselineskip| 的自然尺寸的两å€ï¼Œä½†æ²¡æœ‰ä¼¸é•¿é‡å’Œæ”¶ç¼©é‡ã€‚
+\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
+\eix^^{算术}
+\eix^^{寄存器//寄存器中的算术è¿ç®—}
+\eix^^{寄存器}
+\enddesc
+
+%==========================================================================
+%\section {Ending the job}
+\section {结æŸä»»åŠ¡}
+
+%\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
+^^{结æŸä»»åŠ¡}
+\easy\ctspecial bye \ctsxrdef{@bye}
+\explain
+此命令让 \TeX\ 填满并生æˆæœ€åŽçš„页é¢ï¼Œæ‰“å°é—留的\minref{æ’入项},并结æŸä»»åŠ¡ã€‚
+这是结æŸè¾“入文件的常用方å¼ã€‚
+\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
+\begindesc
+\cts end {}
+\explain
+此命令让 \TeX\ 生æˆæœ€åŽçš„页é¢å¹¶ç»“æŸä»»åŠ¡ã€‚
+但由于它ä¸ä¼šå¡«æ»¡é¡µé¢ï¼Œä¸€èˆ¬æƒ…形用 |\bye| 比用 |\end| 更好些。
+\enddesc
+
+%==========================================================================
+%\section {Input and output}
+\section {输入和输出}
+
+%==========================================================================
+%\subsection {Operations on input files}
+\subsection {æ“作输入文件}
+
+%\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).
+\begindesc
+\bix^^{文件}
+\bix^^{输入文件}
+\easy\cts input {\<filename>}
+\explain
+\minrefs{file}\minrefs{file name}
+此命令让 \TeX\ 从文件 \<filename> 读å–输入。
+当该文件用完åŽï¼Œ\TeX\ 回到之å‰çš„输入æ¥æºç»§ç»­è¯»å–。
+ä½ å¯ä»¥åµŒå¥—输入文件到任何层级(在åˆç†èŒƒå›´å†…)。
+
+%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.
+在排版一个大文档时,通常在主文件写上一系列 |\input| 命令,以引入文档的å„个å­æ–‡ä»¶ã€‚
+用这ç§æ–¹å¼ï¼Œåœ¨æ‰“è‰ç¨¿é˜¶æ®µä½ å¯ä»¥å¾ˆæ–¹ä¾¿åœ°å¤„ç†æ–‡æ¡£çš„å•ä¸ªéƒ¨åˆ†ã€‚
+还有个好习惯就是,将所有\minref{å®å®šä¹‰}放在一个独立文件中,
+并在主文件一开始用 |\input| 命令引入它。
+
+%\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
+\TeX\ 扫æ文件å的规则一般和扫æ\minref{è®°å·}çš„ä¸åŒï¼ˆè§\xref{文件å})。
+如果 \TeX\ 系统è¦æ±‚文件å包å«æ‰©å±•å(通常在å‰é¢åŠ ä¸Šç‚¹å·è¡¨ç¤ºï¼‰ï¼Œ
+则 \TeX\ 以 |.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 endinput {}
+\explain
+此命令让 \TeX\ 在这一行读完åŽåœæ­¢ä»Žå½“å‰æ–‡ä»¶è¯»å–输入。
+\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 inputlineno {}
+\explain
+此命令生æˆä¸€ä¸ªç»™å‡ºå½“å‰è¡Œç¼–å·çš„数(ä¸æ˜¯å­—符串),
+当此处有错误时,它就是写在错误信æ¯ä¸­çš„行数。
+\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.
+\begindesc
+\cts openin {\<number> {\bt =} \<filename>}
+\explain
+此命令让 \TeX\ 打开å为 \<filename> 的文件,
+让我们å¯ä»¥é€šè¿‡ç¼–å·ä¸º \<number> 的输入æµè¯»å–它。
+^^{输入æµ//打开输入æµ}
+\<number> 必须在 $0$ 和 $15$ 之间。
+一旦打开了一个文件并将它连接到一个输入æµï¼Œ
+ä½ å°±å¯ä»¥ç”¨|\read| 命令以输入æµç¼–å·è¯»å–其内容。
+
+%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
+你应当用 |\new!-read|(\xref{\@newread}ï¼‰å‘½ä»¤åˆ†é… |\openin| çš„æµç¼–å·ã€‚
+\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 closein {\<number>}
+\explain
+此命令让 \TeX\ 关闭编å·ä¸º \<number> çš„\minref{输入æµ},
+结æŸè¾“å…¥æµä¸Žæ–‡ä»¶ä¹‹é—´çš„å…³è”。
+此编å·çš„输入æµä»¥åŽå°±å¯ä»¥ç”¨äºŽå…¶ä»–文件。
+在文件使用完æˆåŽä½ åº”当关闭输入æµã€‚
+\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.
+\begindesc%\secondprinting{\vglue-.5\baselineskip\vskip0pt}
+\cts read {\<number> {\bt to} \<control sequence>}
+\explain
+^^{输入æµ//用 \b\tt\\read\e 读å–}
+^^{读å–文件}
+此命令让 \TeX\ ä»Žç¼–å· \<number> çš„\minref{输入æµ}å…³è”的文件中读å–一行,
+并将该行的记å·èµ‹äºˆ \<control sequence>。
+该\minref{控制åºåˆ—}å°±æˆä¸ºä¸€ä¸ªä¸å¸¦å‚æ•°çš„\minref{å®}。
+在读å–æ“作中 \TeX\ ä¸ä¼šæ‰§è¡Œå®å±•å¼€ã€‚如果该行包å«æœªé…对的左花括å·ï¼Œ
+\TeX\ 将读å–é¢å¤–的行直到花括å·å…¨éƒ¨é…对。
+如果直到文件结æŸè¿˜æ— æ³•é…对所有花括å·ï¼Œ\TeX\ 将报错。
+
+%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
+如果 \<number> 大于 $15$ 或者还未用 ^|\openin| å…³è”文件,
+\TeX\ 将在终端上显示æ示符 `\<control sequence> |=|',
+等待你键入一行输入,然åŽå°†è¯¥è¡Œè¾“入赋予 \<control sequence>。
+如果 \<number> å°äºŽé›¶ï¼Œå®ƒåŒæ ·ä»Žç»ˆç«¯è¯»å–输入,但ä¸æ˜¾ç¤ºæ示符。
+\example
+\read\auxfile to \holder
+% Expanding \holder will produce the line just read.
+|
+\endexample
+\eix^^{输入文件}
+\enddesc
+
+%\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+%\subsection {Operations on output files}
+\subsection {æ“作输出文件}
+
+%\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.
+\bix^^{输出文件}
+\begindesc
+\cts openout {\<number> {\bt =} \<filename>}
+\explain
+^^{输出æµ//打开输出æµ}
+此命令让 \TeX\ 打开å为 \<filename> 的文件,
+让我们å¯ä»¥é€šè¿‡ç¼–å·ä¸º \<number> çš„\minref{输出æµ}写入它。
+\<number> 必须在 $0$ 和 $15$ 之间。
+一旦打开了一个文件并将它连接到一个输出æµï¼Œ
+ä½ å°±å¯ä»¥ç”¨ |\write| 命令以输出æµç¼–å·è¯»å–其内容。
+
+%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|.
+|\openout| 命令生æˆä¸€ä¸ªä½œä¸ºç›’å­ä¸€éƒ¨åˆ†çš„å°çŽ©æ„。
+直到 \TeX\ 将该盒å­é€å‡ºåˆ° \dvifile æ—¶ |\openout| æ‰ä¼šèµ·ä½œç”¨ï¼Œ
+除éžä½ åœ¨ |\openout| 之å‰åŠ ä¸Š ^|\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!
+如果你把åŒä¸€ä¸ªæ–‡ä»¶å’Œå¤šä¸ªè¾“出æµå…³è”,\TeX\ ä¸ä¼šæŠ¥é”™ï¼Œä½†è¿™æ ·åšå°†å¾—到一些垃圾ï¼
+
+%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
+你应当用 |\newwrite|(\xref{\@newwrite})为 |\openout| 分é…ç¼–å·ã€‚
+\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.
+\begindesc
+\cts closeout {\<number>}
+\explain
+^^{输出æµ//关闭输出æµ}
+此命令让 \TeX\ 关闭编å·ä¸º \<number> çš„\minref{输出æµ},
+结æŸè¾“出æµä¸Žæ–‡ä»¶ä¹‹é—´çš„å…³è”。
+此编å·çš„输出æµä»¥åŽå°±å¯ä»¥ç”¨äºŽå…¶ä»–文件。
+在文件使用完æˆåŽä½ åº”当关闭输出æµã€‚
+
+%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
+|\closeout| 命令生æˆä¸€ä¸ªä½œä¸ºç›’å­ä¸€éƒ¨åˆ†çš„å°çŽ©æ„。
+直到 \TeX\ 将该盒å­é€å‡ºåˆ° \dvifile æ—¶ |\closeout| æ‰ä¼šèµ·ä½œç”¨ï¼Œ
+除éžä½ åœ¨ |\closeout| 之å‰åŠ ä¸Š ^|\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|.
+\begindesc
+\cts write {\<number> \rqbraces{\<token list>}}
+\explain
+^^{输出æµ//写入输出æµ}
+^^{写入文件}
+此命令让 \TeX\ å°† \<token list> 写入编å·ä¸º \<number> çš„\minref{输出æµ}çš„å…³è”文件中。
+它生æˆä¸€ä¸ªä½œä¸ºç›’å­ä¸€éƒ¨åˆ†çš„å°çŽ©æ„。
+直到 \TeX\ 将该盒å­é€å‡ºåˆ° \dvifile æ—¶æ‰ä¼šå®žé™…写入文件,
+除éžä½ åœ¨ |\write| 之å‰åŠ ä¸Š ^|\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 `|##|'.
+对于éžç«‹å³ï¼ˆimmediate)的 |\write|,
+\TeX\ 直到实际写入文件时æ‰å±•å¼€ \<token list> 中的å®ã€‚
+å®å±•å¼€éµå¾ªä¸Ž |\edef|(\xref\edef )一样的规则。
+任何ä¸æ˜¯å®å称的控制åºåˆ—è¢«å†™æˆ ^|\escapechar| 加上控制åºåˆ—å,
+åŽé¢å†åŠ ä¸€ä¸ªç©ºæ ¼ã€‚\<token list> 中的任何 `|#|' è®°å·è¢«é‡å¤ä¸¤é,å³å†™æˆ `|##|'。
+
+%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
+如果 \<number> ä¸åœ¨ $0$ 到 $15$ 的范围中,
+\TeX\ 将 \<token list> 写入到日志文件。
+^^{日志文件//用 \b\tt\\write\e 写入}
+如果 \<number> 大于 $15$ 或该输出æµæœªå…³è”文件,
+\TeX\ 还åŒæ—¶å°† \<token list> 写到终端中。
+\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 immediate {}
+\explain
+此命令应当放在 |\openout|ã€|\closeout| 或 |\write| 之å‰ã€‚
+^^|\write//和 {\tt\\immediate} 一起|
+^^|\openout//和 {\tt\\immediate} 一起|
+^^|\closeout//和 {\tt\\immediate} 一起|
+它让 \TeX\ ç«‹å³æ‰§è¡ŒæŒ‡å®šçš„文件æ“作。
+\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 special {\rqbraces{\<token list>}}
+\explain
+此命令让 \TeX\ 下次é€å‡ºé¡µé¢æ—¶å°† \<token list> 直接写入 \dvifile 中。
+|\special| 的一个典型用法是,
+让设备驱动器将指定å称的图片文件整åˆåˆ°è¾“出页é¢ä¸­ã€‚
+^^{设备驱动//用 \b\tt\\special\e 指导它}
+|\special| 命令生æˆä¸€ä¸ªåŒ…å« \<token list> 和一个特定ä½ç½®çš„å°çŽ©æ„,
+该ä½ç½®æ˜¯å°† |\special| 命令æ¢æˆé›¶å°ºå¯¸ç›’å­æ—¶è¯¥ç›’å­åº”该出现的ä½ç½®ã€‚
+ä½ å¯ä»¥æ€Žæ ·ä½¿ç”¨ |\special| 命令,完全å–决于你å¯ç”¨çš„^{设备驱动器}。
+\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
+\begindesc
+\cts newlinechar {\param{number}}
+\explain
+æ­¤å‚数表示输出时所用的æ¢è¡Œç¬¦ã€‚
+åœ¨è¯»å– |\write|ã€|\message| 或 |\errmessage| 命令的å‚é‡æ—¶ï¼Œ
+如果 \TeX\ é‡åˆ°è¿™ä¸ªå­—符,它就新起一行。
+如果 |\newlinechar| ä¸åœ¨ $0$--$255$ 的范围内,
+输出中就ä¸ä¼šä»»ä½•æ¢è¡Œç¬¦ã€‚
+\PlainTeX\ 设定 |\newlinechar| 等于 $-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}
+\see |\newread|, |\newwrite| (\xref{\@newwrite}).
+\eix^^{文件}
+\eix^^{输出文件}
+
+%==========================================================================
+%\subsection {Interpreting input characters}
+\subsection {解释输入字符}
+
+%\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 catcode {\<charcode> \tblentry{number}}
+\explain
+^^{类别ç //在 \b\tt\\catcode\e\ 表格中}
+此表格项表示 \ascii\ ç ä¸º \<charcode> 的字符的\minref{类别ç }。
+\xrefpg{catcodes}列出了所有的类别ç ã€‚
+通过修改一个字符的类别ç ï¼Œä½ å¯ä»¥è®© \TeX\ 用ä¸åŒæ–¹å¼å¤„ç†è¯¥å­—符。
+\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 active {}
+\explain
+此命令表示活动字符的类别ç ï¼Œå³æ•°å­— $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
+\cts mathcode {\<charcode> \tblentry{number}}
+\explain
+此表格项表示 \ascii\ ç ä¸º \<charcode> 的字符的\minref{æ•°å­¦ç }\seeconcept{æ•°å­¦ç }。
+æ•°å­¦ç æŒ‡æ˜Žåœ¨æ•°å­¦æ¨¡å¼ä¸­å¦‚何解释该字符。
+\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.
+\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
+^^{定界ç }
+此表格项表示 \ascii\ ç ä¸º \<charcode> 的输入字符的定界ç ã€‚
+定界ç æŒ‡å¼• \TeX\ 找到最佳输出字符以将该输入字符排版为定界符。
+
+%\<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
+通常以å六进制表示 \<number>。
+å‡è®¾ \<number> 等于å六进制数 $s_1s_2s_3\,l_1l_2l_3$。
+则当该字符用作定界符时,该字符的å°åž‹å˜ä½“为 $s_1s_2s_3$,大型å˜ä½“为 $l_1l_2l_3$。
+这里 $s_1s_2s_3$ 表示在第 $s_1$ æ—çš„ $s_2s_3$ ä½ç½®çš„数学字符,$l_1l_2l_3$ 类似。
+这与 ^|\mathcode|(\xref\mathcode )中的用法一样,
+åªæ˜¯ |\mathcode| 还å¦å¤–指定了字符类。
+\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 endlinechar {\param{number}}
+\explain
+æ­¤å‚数表示 \TeX\ 在æ¯ä¸ªè¾“入行åŽæ·»åŠ çš„行尾符。
+^^{输入行}
+å–ä¸åœ¨ $0$--$255$ 范围内的值则表示ä¸æ·»åŠ è¡Œå°¾ç¬¦ã€‚
+\PlainTeX\ 设定 |\end!-line!-char| 为 |`\^^M|%
+ï¼ˆå³ \asciichar{return} 符的{\ascii}ç ï¼‰ã€‚
+\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
+\begindesc
+\cts ignorespaces {}
+\explain
+此命令让 \TeX\ 读å–和展开记å·ï¼Œ
+直到找到一个éžç©ºæ ¼\minref{è®°å·},并忽略它找到的任何空格记å·ã€‚
+|\ignorespaces| 常用在\minref{å®}结尾处,
+使得调用å®æ—¶ä¸å—åŽé¢çš„空格符或æ¢è¡Œç¬¦çš„å½±å“。%
+(但是 |\ignorespaces| 之åŽçš„空行ä¾ç„¶ç”Ÿæˆ |\par| è®°å·ï¼‰ã€‚
+\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}
+\section {控制与 \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
+\bix^^{控制 \TeX}
+\bix^^{è¿è¡Œ \TeX}
+\cts errorstopmode {}
+\explain
+此命令让 \TeX\ é‡åˆ°é”™è¯¯æ—¶æš‚åœä»¥å’Œç”¨æˆ·äº¤äº’。
+这是 \TeX\ è¿è¡Œçš„正常模å¼ã€‚
+\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 scrollmode {}
+\explain
+此命令让 \TeX\ é‡åˆ°å¤§å¤šæ•°é”™è¯¯æ—¶ä¸æš‚åœï¼Œè€Œä»…在终端上显示错误信æ¯ã€‚
+在回应错误信æ¯æ—¶é”®å…¥ `|S|' 或 `|s|' 就进入å·åŠ¨æ¨¡å¼ã€‚
+\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 nonstopmode {}
+\explain
+此命令让 \TeX\ é‡åˆ°é”™è¯¯æ—¶ä¸æš‚åœï¼Œå³ä½¿æ˜¯é‚£äº›æ— æ³•æ‰¾åˆ°æ–‡ä»¶çš„错误,
+而仅仅在终端上显示错误信æ¯ã€‚
+在回应错误信æ¯æ—¶é”®å…¥ `|R|' 或 `|r|' 就进入直达模å¼ã€‚
+\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 batchmode {}
+\explain
+此命令让 \TeX\ é‡åˆ°é”™è¯¯æ—¶ä¸æš‚åœï¼Œä¸”å–消在终端上显示此åŽçš„输出。
+在回应错误信æ¯æ—¶é”®å…¥ `|Q|' 或 `|q|' 就进入批处ç†æ¨¡å¼ã€‚
+\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.
+\begindesc
+\cts pausing {\param{number}}
+\explain
+如果此å‚数大于零,\TeX\ 将在æ¯ä¸ªè¾“入行åŽæš‚åœï¼Œè®©ä½ æœ‰æœºä¼šå°†è¯¥è¡Œæ›¿æ¢ä¸ºå¦å¤–一行。
+如果你键入替æ¢è¡Œï¼Œ\TeX\ 就将原æ¥çš„行替æ¢ä¸ºæ­¤è¡Œï¼›
+如果你键入\asciichar{return}符,\TeX\ 将使用原æ¥çš„行。
+
+%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
+å°† |\pausing| 设定为 $1$,是在 \TeX\ 处ç†æ–‡æ¡£æ—¶ä¿®è¡¥å®ƒçš„常用方法。
+例如,你å¯ä»¥ç”¨è¿™ç§æ–¹å¼æ’å…¥ ^|\show| 命令(è§ä¸‹é¢ï¼‰ã€‚
+\eix^^{è¿è¡Œ \TeX}
+\eix^^{控制 \TeX}
+\enddesc
+
+%==========================================================================
+%\section {Diagnostic aids}
+\section {帮助调试}
+
+%\subsection{Displaying internal data}
+\subsection{显示内部数æ®}
+
+%\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.
+\begindesc
+\bix^^{追踪}
+\bix^^{调试}
+\bix^^{帮助诊断}
+\cts show {\<token>}
+\cts showthe {\<argument>}
+\cts showbox {\<number>}
+\cts showlists {}
+\explain
+这些命令在 \TeX\ è¿è¡Œæ—¶è®°å½•ä¿¡æ¯åˆ°æ—¥å¿—文件中:
+\ulist
+\li |\show| 记录 \<token> çš„å«ä¹‰ã€‚\minrefs{token}
+^^{è®°å·//用 \b\tt\\show\e 显示}
+\li |\showthe| 记录用 |\the| \<arg\-u\-ment> 生æˆçš„所有记å·ï¼ˆè§ \xref\the )。
+\li |\showbox| 记录编å·ä¸º \<num\-ber> çš„\minref{ç›’å­}\minref{寄存器}的内容。
+日志文件中的å‰å¯¼ç‚¹å·çš„个数表示内部盒å­çš„嵌套层级。
+\li |\showlists| 记录 \TeX\ 正在构造的å„个列表的内容。%
+(这些列表将会互相嵌套。)%
+è§\knuth{第~88--89~页}中对 |\showlists| 的输出的进一步介ç»ã€‚
+\endulist
+对于 |\show| å’Œ |\showthe|,\TeX\ 还在^{终端}中显示这些信æ¯ã€‚
+对于 |\showbox| 和 |\showlists|,
+\TeX\ 仅在 ^|\tracingonline|(\xref \tracingonline )大于零时æ‰åœ¨ç»ˆç«¯æ˜¾ç¤ºä¿¡æ¯ï¼›
+如果 ^|\tracingonline| å°äºŽæˆ–等于零(默认情形),这些信æ¯å°±ä¸åœ¨ç»ˆç«¯æ˜¾ç¤ºã€‚
+
+%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}.
+在é‡åˆ°ç±»ä¼¼ |\show| 的命令时,\TeX\ æš‚åœä»¥å’Œç”¨æˆ·äº¤äº’。
+请求交互\emph{并ä¸}表示有错误å‘生,但这确实给你机会让 \TeX\ 显示其他东西。
+如果你ä¸æƒ³çœ‹åˆ°å…¶ä»–东西,键入\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.)
+è¦æŽ§åˆ¶ |\showbox| 生æˆçš„输出的数é‡ï¼Œ
+ä½ å¯ä»¥è®¾å®š |\show!-box!-breadth| å’Œ |\show!-box!-depth|(\xref\showboxbreadth )。
+^^|\showboxbreadth| ^^|\showboxdepth|
+这两个å‚数的默认值分别为 $5$ å’Œ $3$,
+因而在下é¢çš„日志输出中æ¯ä¸ªç›’å­åªæ˜¾ç¤ºäº”个项目。%
+(`|..etc.|' 表示盒å­å†…的其他未显示的项目。)
+%\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
+\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.
+\see |\showboxbreadth|ã€|\showboxdepth|\ctsref\showboxbreadth 。
+
+%\subsection{Specifying what is traced}
+\subsection{指定追踪的内容}
+
+%\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 tracingonline {\param{number}}
+\explain
+如果此å‚数大于零,除了记录到日志文件外,
+\TeX\ 还在终端上显示追踪的结果(包括 ^|\showbox| 和 ^|\showlists|)。
+\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.
+\begindesc
+\cts tracingcommands {\param{number}}
+\explain
+如果此å‚数大于或等于 $1$,\TeX\ 将在日志文件中记录它执行的大多数命令。
+如果 ^|\tracingonline| 大于或等于零,这些信æ¯è¿˜å°†å‡ºçŽ°åœ¨ç»ˆç«¯ä¸Šã€‚
+排版一个å•è¯çš„首个字符算作一个命令,
+但(仅对追踪的目的而言)排版之åŽçš„字符和标点å´ä¸ç®—作命令。
+如果 |\tracingcommands| 大于或等于 $2$,
+\TeX\ 还将记录展开但ä¸æ‰§è¡Œçš„命令,比如æ¡ä»¶æµ‹è¯•åŠå®ƒä»¬çš„输出。
+%\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
+\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 tracinglostchars {\param{number}}
+\explain
+如果此å‚数大于零,æ¯æ¬¡å› æŸå­—符ä¸åœ¨å½“å‰å­—体中而丢弃它时,
+\TeX\ 将在日志文件中记录一个声明。
+如果 ^|\tracingonline| 大于零,此信æ¯è¿˜å°†æ˜¾ç¤ºåœ¨ç»ˆç«¯ä¸Šã€‚
+\PlainTeX\ 设定该å‚数的默认值为 $1$(与其他å‚æ•°ä¸ä¸€æ ·ï¼‰ã€‚
+\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 tracingmacros {\param{number}}
+\explain
+如果此å‚数大于或等于 $1$,
+\TeX\ 将在日志文件中记录它执行的æ¯ä¸ªå®çš„展开和å‚é‡ã€‚
+^^{å®//追踪å®}
+如果 |\tracingmacros| 大于或等于 $2$,
+\TeX\ 还将记录æ¯ä¸ª\minref{è®°å·}列的展开,比如 |\output| 或 |\everycr|。
+如果 ^|\tracingonline| 大于零,这些信æ¯è¿˜å°†æ˜¾ç¤ºåœ¨ç»ˆç«¯ä¸Šã€‚
+\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).
+\begindesc
+\cts tracingoutput {\param{number}}
+\explain
+如果此å‚数大于零,
+\TeX\ 将在日志文件中记录它é€å‡ºåˆ° \dvifile çš„æ¯ä¸ªç›’å­çš„内容。
+^^{\dvifile//在日志文件中记录盒å­å†…容}
+如果 ^|\tracingonline| 大于零,这些信æ¯è¿˜å°†æ˜¾ç¤ºåœ¨ç»ˆç«¯ä¸Šã€‚
+追踪输出中æ¯è¡Œå¼€å¤´çš„点å·ä¸ªæ•°è¡¨ç¤ºè¯¥è¡Œç›’å­çš„嵌套层级。
+ä½ å¯ä»¥ç”¨ ^|\showboxbreadth| å’Œ ^|\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.
+若你想确定页é¢ä¸ºä½•å‡ºçŽ°^{多余空格},
+设定 |\tracingoutput| 为 $1$ 就特别有用。
+
+%\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
+\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.
+\begindesc
+\cts tracingpages {\param{number}}
+\explain
+如果此å‚数大于零,
+\TeX\ 将在日志文件中记录它å°è¯•å„ç§åˆ†é¡µæ‰€è®¡ç®—的代价。
+^^{分页//追踪分页}
+如果 |\tracing!-online| ^^|\tracingonline| 大于零,
+这些信æ¯è¿˜å°†æ˜¾ç¤ºåœ¨ç»ˆç«¯ä¸Šã€‚
+在放置一个盒å­æˆ–\minref{æ’入项}到当å‰çš„页é¢åˆ—表,
+或者在处ç†é¡µé¢çš„æŸä¸ªå¯èƒ½åˆ†é¡µç‚¹æ—¶ï¼Œ\TeX\ 都在日志输出中写上一行。
+检查此输出将有助于你确定糟糕分页的起因。
+è§\knuth{第~112--114~页}中此类输出的示例和解释。
+
+%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
+æŸäº› \TeX\ 实现形å¼å¿½ç•¥ |\tracingpages| çš„å–值以更快地è¿è¡Œã€‚
+如果你需è¦æ­¤å‚数,确ä¿ä½ ç”¨çš„ \TeX\ å½¢å¼èƒ½ç”¨æ­¤å‚数。
+\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.
+\begindesc
+\cts tracingparagraphs {\param{number}}
+\explain
+如果此å‚数大于零,
+\TeX\ 将在日志文件中记录它å°è¯•å„ç§æ–­è¡Œæ‰€è®¡ç®—的代价。
+^^{断行//追踪断行}
+如果 |\tracingonline| ^^|\tracingonline| 大于零,
+这些信æ¯è¿˜å°†æ˜¾ç¤ºåœ¨ç»ˆç«¯ä¸Šã€‚
+\TeX\ 在段è½çš„结尾处生æˆè¿™äº›è¾“出。
+è§\knuth{第~98--99~页}中此类输出的示例和解释。
+
+%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
+æŸäº› \TeX\ 实现形å¼å¿½ç•¥ |\tracing!-para!-graphs| çš„å–值以更快地è¿è¡Œã€‚
+如果你需è¦æ­¤å‚数,确ä¿ä½ ç”¨çš„ \TeX\ å½¢å¼èƒ½ç”¨æ­¤å‚数。
+\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.
+\begindesc
+\cts tracingrestores {\param{number}}
+\explain
+如果此å‚数大于零,
+\TeX\ 将在日志文件中记录那些在\minref{编组}结尾处被还原的值。
+如果 |\tracingonline| ^^|\tracingonline| 大于零,
+这些信æ¯è¿˜å°†æ˜¾ç¤ºåœ¨ç»ˆç«¯ä¸Šã€‚
+
+%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
+æŸäº› \TeX\ 实现形å¼å¿½ç•¥ |\tracing!-restores| çš„å–值以更快地è¿è¡Œã€‚
+如果你需è¦æ­¤å‚数,确ä¿ä½ ç”¨çš„ \TeX\ å½¢å¼èƒ½ç”¨æ­¤å‚数。
+\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.
+\begindesc
+\cts tracingstats {\param{number}}
+\explain
+如果此å‚数大于或等于 $1$,
+\TeX\ 将报告它è¿è¡Œä»»åŠ¡æ—¶æ‰€ç”¨çš„å„ç§èµ„æº%
+(è§\knuth{第~300~页}中这些资æºçš„列表和解释)。
+å¦å¤–,如果 |\tracingstats| 大于或等于 $2$,
+\TeX\ 将在 ^|\shipout|(\xref \shipout )页é¢æ—¶æŠ¥å‘Šæ‰€ç”¨çš„内存å ç”¨ã€‚
+这些报告写在日志文件的末尾。
+^^{日志文件//在其中追踪统计信æ¯}
+如果 |\tracingonline| ^^|\tracingonline| 大于零,
+这些信æ¯è¿˜å°†æ˜¾ç¤ºåœ¨ç»ˆç«¯ä¸Šã€‚
+如果出现 \TeX\ 超出其中æŸä¸ªå®¹é‡çš„问题,
+|\tracingstats| æ供的这些信æ¯å°†å¸®åŠ©ä½ å‡†ç¡®å®šä½é—®é¢˜çš„起因。
+
+%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.
+æŸäº› \TeX\ 实现形å¼å¿½ç•¥ |\tracingstats| çš„å–值以更快地è¿è¡Œã€‚
+如果你需è¦æ­¤å‚数,确ä¿ä½ ç”¨çš„ \TeX\ å½¢å¼èƒ½ç”¨æ­¤å‚数。
+
+%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
+下é¢çš„例å­æ˜¾ç¤ºäº†åœ¨æŸä¸ª \TeX\ 实现中实际的追踪输出。
+在其他 \TeX\ 实现中也许会有所ä¸åŒã€‚
+{\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 tracingall {}
+\explain
+此命令让 \TeX\ 打开所有å¯ç”¨çš„追踪形å¼ï¼Œ
+并设定 ^|\tracingonline| 为 $1$ 以让追踪输出显示在终端上。
+\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 showboxbreadth {\param{number}}
+\explain
+æ­¤å‚数指定 \TeX\ 为 ^|\showbox| 或 ^|\tracingoutput| 生æˆè¾“出时,%
+对å„级盒å­çš„列表项显示的最大数目。
+\PlainTeX\ 设定 |\showboxbreadth| 等于 $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
+\begindesc
+\cts showboxdepth {\param{number}}
+\explain
+æ­¤å‚数指定 \TeX\ 为 ^|\showbox| 或 ^|\tracingoutput| 生æˆè¾“出时,%
+所显示的列表的最深层级。
+\PlainTeX\ 设定 |\showboxdepth| 等于 $3$。
+\eix^^{追踪}
+\eix^^{调试}
+\eix^^{帮助诊断}
+\enddesc
+
+%==========================================================================
+%\subsection {Sending messages}
+\subsection {ä¼ é€ä¿¡æ¯}
+
+%\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).
+\begindesc
+\bix^^{ä¿¡æ¯å‘é€}
+\bix^^{错误信æ¯}
+\cts message {\rqbraces{\<token list>}}
+\cts errmessage {\rqbraces{\<token list>}}
+\explain
+这两个命令在终端上显示由 \<token list> 给出的信æ¯ï¼Œå¹¶å°†å®ƒä»¬è®°å½•åˆ°æ—¥å¿—中。
+ä¿¡æ¯ä¸­çš„任何\minref{å®}都将被展开 ,但是命令ä¸ä¼šè¢«æ‰§è¡Œã€‚
+这与 \TeX\ 用于 |\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.
+对于 |\errmessage|,\TeX\ 如åŒæ˜¾ç¤ºè‡ªå·±çš„错误信æ¯ä¸€æ ·æš‚åœè¿è¡Œï¼Œ
+并在请求帮助时显示 |\errhelp| è®°å·åˆ—。
+
+%You can generate multiline messages by using the ^|\newlinechar|
+%character (\xref \newlinechar).
+%\example
+%\message{Starting a new section.}
+%|
+%\endexample
+%\enddesc
+è¦ç”Ÿæˆå¤šè¡Œçš„ä¿¡æ¯ï¼Œä½ å¯ä»¥ç”¨ ^|\newlinechar| 字符(\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 wlog {\rqbraces{\<token list>}}
+\explain
+此命令在日志文件写入 \<token list>。
+^^{日志文件//用 \b\tt\\wlog\e 写入}
+\minrefs{log file}
+\TeX\ 按照与 |\edef|(\xref\edef )一样的规则展开 \<token list>。
+\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
+\cts errhelp {\param{token list}}
+\explain
+æ­¤å‚æ•°åŒ…å« \TeX\ 用户在 |\errmessage| 命令中请求帮助时显示的记å·åˆ—表。
+我们建议在用 |\errmessage| 生æˆé”™è¯¯ä¿¡æ¯æ—¶ï¼Œ
+å°†|\errhelp| 设定为æ述错误形å¼çš„字符串,并用 |\newhelp| 生æˆè¯¥å­—符串。
+ä½ å¯ä»¥ç”¨ ^|\newlinechar| 字符生æˆå¤šè¡Œçš„ä¿¡æ¯ã€‚
+\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
+\ctspecial newhelp \ctsxrdef{@newhelp} {\<control sequence>
+ \rqbraces{\<help text>}}
+\explain
+此命令将 \<help text> 给出的^{错误信æ¯}赋予 \<control sequence>。
+它æ供一ç§å®šä¹‰^{帮助文本}çš„å¿«æ·æ–¹å¼ï¼Œå¸®åŠ©æ–‡æœ¬è¿›ä¸€æ­¥è§£é‡Šäº†é”™è¯¯ä¿¡æ¯ã€‚
+在用 |\errmessage| 命令报出错误之å‰ï¼Œ
+你应当将 \<control sequence> 赋予 ^|\errhelp|。
+这样在显示错误信æ¯æ—¶ï¼Œå¦‚果用户键入 `|H|' 或 `|h|',
+\TeX\ 将显示出帮助文本。
+\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
+\begindesc
+\cts errorcontextlines {\param{number}}
+\explain
+此命令确定 \TeX\ é‡åˆ°é”™è¯¯æ—¶æ‰“å°çš„æˆå¯¹ä¿¡æ¯è¡Œçš„数目,ä¸åŒ…括最上é¢å’Œæœ€ä¸‹é¢è¿™ä¸¤è¡Œã€‚
+将它设为 $0$ å°±å¯ä»¥åŽ»æŽ‰å†—长的错误信æ¯ã€‚
+ä½ ä»ç„¶å¯ä»¥å¼ºåˆ¶æ˜¾ç¤ºå®Œæ•´çš„ä¿¡æ¯ï¼Œåªè¦åœ¨å›žåº”错误时这样输入:
+\csdisplay
+I\errorcontextlines=100\oops
+|
+这是因为未定义的控制åºåˆ—将引起å¦ä¸€ä¸ªé”™è¯¯ã€‚
+\PlainTeX\ 设定 |\error!-context!-lines| 等于 $5$。
+\enddesc
+
+%\see |\write| (\xref \write), |\escapechar| (\xref \escapechar).
+%\eix^^{messages, sending}
+%\eix^^{error messages}
+\see |\write|(\xref \write )ã€|\escapechar|(\xref \escapechar )。
+\eix^^{ä¿¡æ¯å‘é€}
+\eix^^{错误信æ¯}
+
+%==========================================================================
+%\section {Initializing \TeX}
+\section {åˆå§‹åŒ– \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 dump {}
+\explain
+这个命令ä¸èƒ½åœ¨ç¼–组中使用,它å¯ä»¥æŠŠ \TeX\ 记录的内容导出æˆä¸€ä¸ª^{æ ¼å¼æ–‡ä»¶}(\xref{æ ¼å¼æ–‡ä»¶})。
+如果使用的是 ^|virtex| è¿™ç§ç‰¹æ®Šçš„ \TeX\ å½¢å¼ï¼Œ
+\footnote{译注:|virtex| å’Œ |initex| 在现代的 \TeX\ 系统中ä¸å†è¢«ä½¿ç”¨ã€‚
+在远å¤æ—¶ä»£ï¼Œäººä»¬å¿…须使用 |initex| 命令æ¥å¯¼å‡ºæ ¼å¼æ–‡ä»¶ï¼Œç”¨ |virtex| 命令载入格å¼æ–‡ä»¶ï¼Œ
+而 |tex| 程åºä¸èƒ½å¯¼å‡ºæˆ–载入格å¼æ–‡ä»¶ã€‚而在现代的å‘行版中,|tex| 命令å¯ä»¥å¤„ç†è¿™ä¸€åˆ‡ã€‚}
+你能够以很快的速度载入这个格å¼æ–‡ä»¶ï¼Œ
+载入åŽçš„ \TeX\ 状æ€å’Œä½ å½“åˆå¯¼å‡ºæ ¼å¼æ–‡ä»¶æ—¶çš„状æ€å¹¶æ— äºŒè‡´ã€‚
+|\dump| 命令会åŒæ—¶ç»“æŸæœ¬æ¬¡è¿è¡Œã€‚
+由于 |\dump| åªèƒ½åœ¨ ^|initex| 中è¿è¡Œï¼Œ
+而ä¸æ˜¯ç”Ÿäº§ç‰ˆæœ¬çš„ \TeX ,所以它仅仅在你安装 \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
+\begindesc
+\cts everyjob {\param{token list}}
+\explain
+æ­¤å‚数包å«ä¸€ä¸ª\minref{è®°å·}列,\TeX\ 在开始æ¯ä¸ªä»»åŠ¡æ—¶å±•å¼€å®ƒä»¬ã€‚
+由于对 |\everyjob| 的赋值无法影å“当å‰ä»»åŠ¡ï¼ˆåœ¨ä½ èµ‹å€¼æ—¶å·²ç»å¤ªè¿Ÿäº†ï¼‰ï¼Œ
+它仅对制作格å¼æ–‡ä»¶çš„人有用。
+\enddesc
+
+\enddescriptions
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter \byebye
diff --git a/info/impatient/cn/index.tex b/info/impatient/cn/index.tex
new file mode 100644
index 0000000000..71718fd544
--- /dev/null
+++ b/info/impatient/cn/index.tex
@@ -0,0 +1,41 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter{索引}
+
+\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...
+
+\ifoldeplain\input book.sdx \else\readindexfile{i}\fi
+
+\endindex
+
+\endchapter
+\byebye
diff --git a/info/impatient/cn/macros.tex b/info/impatient/cn/macros.tex
new file mode 100644
index 0000000000..fb0ca04391
--- /dev/null
+++ b/info/impatient/cn/macros.tex
@@ -0,0 +1,2405 @@
+% -*- coding: utf-8 -*-
+% 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 eplain3
+
+% 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
+\newif\iftrimpage \trimpagetrue
+\newif\ifoldeplain \ifx\undefined\interitemskipamount\oldeplaintrue\fi
+\newif\ifwriteidx \writeidxtrue % disable some index items for new eplain
+
+%\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.
+
+% Dirty hacks for eplain 2.0+
+\ifoldeplain\else
+ \let\oldxrdef = \xrdef
+ \def\xrdef#1{\oldxrdef{\tokstostring{#1}}}%
+ \let\oldxrefn = \xrefn
+ \def\xrefn#1{\oldxrefn{\tokstostring{#1}}}%
+ \let\old@definelabel = \@definelabel
+ \def\@definelabel#1{\old@definelabel{\tokstostring{#1}}}
+ \def\LaTeX{L\kern -.26em \raise .6ex \hbox{\sevenrm A}\kern -.15em \TeX}%
+ % setup hyperlinks
+ \enablehyperlinks[dvipdfm]
+ %% may cause an error with xetex.def before version v4.03
+ %% please see http://tex.stackexchange.com/q/191489/8956
+ \beginpackages\usepackage{color}\endpackages
+ \definecolor{teal}{rgb}{0,0.5,0.5}
+ \hlopts{colormodel=,color=teal}
+ \hlopts{bwidth=0}
+\fi
+
+% 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.
+%
+\baselineskip = 14pt
+\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.
+
+\iftrimpage
+ \pdfpagewidth=7.375in \pdfpageheight=9.25in
+ %\hsize=7.375in \vsize=9.25in
+ %\advance \hsize by -18pc
+ %\advance \vsize by -10pc
+ \outsidemargin = 9pc \insidemargin = 9pc
+ \oddoffset = -1in \advance\oddoffset by \insidemargin
+ \evenoffset = -1in \advance\evenoffset by \outsidemargin
+ \hoffset = \oddoffset
+ \voffset = -1in \advance \voffset by 4pc
+\fi
+
+% 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 = 2em
+\newdimen\normalindent \normalindent = \parindent
+
+\footnotemarkseparation = .16666em
+
+\ifoldeplain % eplain 1.9
+ \let\abovelistskipa = \abovelistskip
+ \let\interitemskipa = \interitemskip
+ \let\belowlistskipa = \belowlistskip
+\else % eplain 2.0+
+ \let\abovelistskipa = \abovelistskipamount
+ \let\interitemskipa = \interitemskipamount
+ \let\belowlistskipa = \belowlistskipamount
+\fi
+\abovelistskipa = \smallskipamount
+\interitemskipa = \tinyskipamount
+\belowlistskipa = \smallskipamount
+\listleftindent = 0pt
+
+% 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\ 急就帖\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}
+
+% add pdf bookmarks for xetex
+%
+\special{pdf: docview << /PageMode /UseOutlines >>}
+\def\bookmark#1#2{%
+ \begingroup%
+ \def\linebreak{}\def\TeX{TeX}\def\vtop##1{##1}\def\noindent{}\def\\{}\def\hfil{}\def\quad{}%
+ \special{pdf:out #1 << /Title (#2) /Dest [ @thispage /FitH @ypos ] >>}%
+ \endgroup%
+}
+
+% for including artwork images
+%
+\newdimen\oldhoffset
+\newdimen\oldvoffset
+\newdimen\oldparindent
+\def\includeartwork#1{%
+ \oldhoffset=\hoffset
+ \oldvoffset=\voffset
+ \oldparindent=\parindent
+ \hoffset=-1in\voffset=-1in\parindent=0pt%
+ \iftrimpage
+ \special{pdf:image width 7.375in depth 9.25in (artwork/#1-l.png)}%
+ \else
+ \special{pdf:image width 210mm depth 297mm (artwork/#1.png)}%
+ \fi\pagebreak
+ \hoffset=\oldhoffset
+ \voffset=\oldvoffset
+ \parindent=\oldparindent
+}
+
+
+% 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
+ %
+ \bookmark{1}{\ifback\else\the\chapterno\ \fi\chaptername}
+ %
+ \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{%
+ \bookmark{2}{#1}%
+ \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{%
+ \bookmark{3}{#1}%
+ \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.
+
+% replace // in index string with ! for new eplain
+%
+\def\replaceit#1{\@replace#1//\@replaceMark}
+\def\@replace#1//#2\@replaceMark{%
+ \ifempty{#2}\noexpand#1\else#1!\@replace#2\@replaceMark\fi
+}
+
+% \idxref generates an index entry for #1. If #1 contains any control
+% sequences, they are treated literally.
+%
+\def\idxref#1{%
+ \ifoldeplain\indexwrite{#1}N\ignorespaces\else
+ \begingroup
+ \let\b\begingroup\let\e\endgroup\let\tt\eighttt
+ \edef\z{\replaceit{#1}}%
+ \expandafter\sidx\expandafter{\z}%
+ \endgroup
+ \fi
+}
+
+
+% 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{%
+ \ifoldeplain\indexwrite{#1}T\ignorespaces\else
+ %\sidx{\tt\tokstostring{#1}\rm}%
+ \fi
+}
+
+% \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{%
+ \ifoldeplain\indexwrite{#1}C\ignorespaces\else\ifwriteidx
+ \edef\z{\noexpand\tt\noexpand\\\replaceit{#1}\noexpand\rm}%
+ \expandafter\sidx\expandafter{\z}%
+ \fi\fi
+}
+
+% \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}%
+ \bookmark{1}{\chaptername}%
+ \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 = \gobbletwo
+ \let\tocsubsectionentry = \gobbletwo
+ \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{%
+ \noalign{\penalty-500 \vskip\medsmallskipamount}%
+ &\it #1\quad \openbox$\,\,$\rm #2\cr
+}
+
+\def\tocsubsectionentry#1#2{%
+ &\qquad #1\quad $\cdot\,$#2\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{\ifoldeplain\noalign{\bigskip\global\backtrue}\fi}
+
+
+
+% 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{%
+ \bookmark{2}{例#1:#2}%
+ {\exampletitlefonts \leftline{例#1:\quad \bi#2}}%
+ \vglue .5\baselineskip
+ \count255 = \pageno
+ \xdef\examplepage{\number\count255}%
+ \markinfo{例#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{è§ \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.
+ \bookmark{1}{概念列表}%
+ {\sectionfonts \leftline{概念列表}}%
+ \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 例å­ï¼š}%
+ \nobreak % At the interline glue.
+ \beginit{EXAMPLE}%
+ \parfillskip = 0pt plus 1fil
+ \hbox\bgroup\hskip.5\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 结果\ifexamplelog (在日志中)\examplelogfalse\fi :}%
+ \vadjust{\nobreak}% At the interline glue.
+ \ifexampledisplay
+ \centereddisplays
+ \else
+ \par\nobreak
+ \advance\hsize by -\parindent
+ \savedepth = \prevdepth
+ \nointerlineskip
+ \hbox\bgroup\hskip.5\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
+ å‚阅:%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\ifoldeplain\ctsidxref{#1}\fi%
+}
+
+% \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\ifoldeplain\ctsidxref{#1}\fi%
+}
+
+% \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}%
+}
+
+\ifoldeplain\else
+ \hookaction{beginindex}{\let \b = \bgroup \let \e = \egroup}
+\fi
+
+% 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}
+\ifoldeplain\leftdisplays\fi % \leftdisplays is buggy in new eplain
+
+\def\setmathchars{%
+ \catcode`\| = \other \catcode`\! = \other
+ \let\{ = \lbrace \let\} = \rbrace
+}
+
+
+
+
+% Some miscellanous macros.
+%
+\def\anatomy{\TeX\ 剖æž}
+\def\ascii{{\ninerm ASCII}}
+\def\asciichar#1{$\langle \rm #1\rangle$}
+\def\bblfile{{\tt .bbl} 文件}
+\def\bibfile{{\tt .bib} 文件}
+\def\bstfile{{\tt .bst} 文件}
+\def\didotpt{did\^ot point}
+\def\dvifile{{\tt .dvi} 文件}
+\def\em{\thinspace {\rm em}}
+\def\emph#1{{\it #1}\itcorr} % Emphasize.
+\def\ftp{{\tt ftp}}
+\def\gffile{{\tt .gf} 文件}
+\def\hand{{\handfont A}}
+\def\ifatest{{\tt \\if} test}
+\chardef\inches = "7D
+\def\knuth#1{\texbook\ #1}
+\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{æ–° \TeX}
+\def\p{页 \thinspace}
+\def\pkfile{{\tt .pk} 文件}
+\def\plainTeX{plain \TeX}
+\def\PlainTeX{Plain \TeX}
+\def\pp{页}
+\def\pt{\thinspace {\rm 点}}
+\def\pxlfile{{\tt .pxl} 文件}
+\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} 文件}
+\def\thisbook{{\sl \TeX\ 急就帖}}
+\let\ths = \thinspace
+\def\tminus{\unskip\allowbreak $\>-\>$\allowbreak} % minus in text
+\def\tplus{\unskip\allowbreak $\>+\>$\allowbreak} % plus in text
+\def\TUG{\TeX{} 用户组织}
+\def\Vcomma,{$V$\kern-2pt,}
+\def\visiblespace{{\tentt \char'040}}
+\def\Vperiod.{$V$\kern-2pt.}
+\let\vs=\visiblespace
+\def\xref#1{第~\xrefn{#1}~页} % 覆盖 eplain 中的定义
+\def\xrefpg#1{第~\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{第~\chapternum{#1}~章}
+
+\def\headcit#1#2{“{\rm #1}â€ï¼ˆ\xref{#2})}
+
+\def\conceptcit#1{\headcit{#1}{#1}}
+
+\def\seeconcept#1{(è§â€œ{\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.
+%
+\catcode `\_ = \letter % for new eplain
+\readauxfile
+\catcode `\_ = 8 % for new eplain
+
+\catcode`\@ = \other % Make @ an `other' character again.
+\catcode`\^ = \active % Make ^'s do indexing outside of math mode.
diff --git a/info/impatient/cn/math.tex b/info/impatient/cn/math.tex
new file mode 100644
index 0000000000..85d52a3e1b
--- /dev/null
+++ b/info/impatient/cn/math.tex
@@ -0,0 +1,3697 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter {数学公å¼å‘½ä»¤}
+
+%\bix^^{math}
+%\chapterdef{math}
+\bix^^{æ•°å­¦}
+\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}.
+这一章包括了排å°æ•°å­¦å…¬å¼æ‰€éœ€è¦çš„命令。
+在\headcit{命令æè¿°}{cmddesc}这一节中给出了这章的惯例。
+
+\begindescriptions
+%==========================================================================
+%\section {Simple parts of formulas}
+\section {简å•å…¬å¼æŽ’版}
+
+%==========================================================================
+%\subsection {Greek letters}
+\subsection {希腊字æ¯}
+
+%\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
+\begindesc
+\bix^^{希腊字æ¯}
+\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}|'.
+\explain
+输入这些命令å¯ä»¥æŽ’å°å‡ºæ•°å­¦å…¬å¼ä¸­çš„相应的希腊字æ¯ç¬¦å·.
+ä½ åªèƒ½åœ¨æ•°å­¦æ¨¡å¼ä¸­ä½¿ç”¨å®ƒä»¬, 所以如在普通的文本中使用它们时,
+ä½ å¿…é¡»æŠŠå®ƒä»¬æ‹¬åœ¨ç¾Žå…ƒç¬¦å· (|$|) 内.
+\TeX\ 并ä¸åŒ…å«è¿™äº›æ•°å­¦ä¸­ä½¿ç”¨çš„希腊字æ¯æ‰€å¯¹åº”的正体字符的命令,
+ä¸è¿‡ä½ å¯ä»¥å¾ˆæ–¹ä¾¿åœ°å¾—到这些字符.
+比如说, ä½ å¯ä»¥åœ¨å…¬å¼ä¸­ä½¿ç”¨ `|{\rm o}|' æ¥å¾—到一个å°å†™çš„ ^{omicron} `o',
+åˆæ¯”如, ä½ å¯ä»¥ä½¿ç”¨ `|{\rm B}|' 得到大写的 ^{beta} (`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
+注æ„ä¸è¦æ··æ·†ä¸‹é¢çš„符å·:
+\ulist \compact
+\li |\upsilon| (`$\upsilon$'), |{\rm v}| (`v'), 和 |\nu| (`$\nu$').
+\li |\varsigma| (`$\varsigma$') 和 |\zeta| (`$\zeta$').
+\endulist
+
+%You can get slanted capital Greek letters by using the math italic
+%(|\mit|) \minref{font}.
+使用数学的æ„大利\minref{字体} (|\mit|) å¯ä»¥å¾—到斜体的大写希腊字æ¯.
+
+%\TeX\ treats Greek letters as ordinary symbols when it's figuring how
+%much space to put around them.
+在计算在希腊字æ¯å‘¨å›´æ’入多少的空白时,\TeX\ 把它们当作正常的符å·ã€‚
+
+%\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
+\example
+如果 $\rho$ 和 $\theta$ 都是正数, 那么 $f(\theta)
+-{\mit \Gamma}_{\theta} < f(\rho)-{\mit \Gamma}_{\rho}$.
+|
+\produces
+如果 $\rho$ 和 $\theta$ 都是正数, 那么
+$f(\theta)-{\mit \Gamma}_{\theta} < f(\rho)-{\mit \Gamma}_{\rho}$.
+\endexample
+\eix^^{希腊字æ¯}
+\enddesc
+
+%==========================================================================
+%\subsection {Miscellaneous ordinary math symbols}
+\subsection {å„ç§æ™®é€šæ•°å­¦ç¬¦å·}
+
+\begindesc
+\xrdef{specsyms}
+\dothreecolumns 34
+\easy\ctsdisplay infty {}
+\ctsdisplay Re {}
+\ctsdisplay Im {}
+\ctsdisplay angle {}
+\ctsdisplay triangle {}
+\ctsdisplay backslash {}
+\ctsdisplay vert {}
+\writeidxfalse\ctsydisplay | @bar {}\writeidxtrue
+\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 \ (上标点)
+\ctsdisplay prime {}
+\ctsdisplay partial {}
+\ctsdisplay surd {}
+\ctsdisplay wp {}
+\ctsdisplay flat {}
+\ctsdisplay sharp {}
+\ctsdisplay natural {}
+\ctsdisplay clubsuit {}
+\ctsdisplay diamondsuit {}
+\ctsdisplay heartsuit {}
+\ctsdisplay spadesuit {}
+\egroup
+\explain
+^^{音符} ^^{花色}
+这些命令å¯ä»¥æŽ’å°å„ç§ç¬¦å·.
+为了把它们和其它的符å·, 比如关系符å·ç­‰, 区分开æ¥, 它们被称为普通数学符å·.
+ä½ åªèƒ½åœ¨æ•°å­¦æ¨¡å¼ä¸­ä½¿ç”¨è¿™äº›ç¬¦å·, 所以如果在普通的文本中使用, ä½ å¿…é¡»ä½¿ç”¨ç¾Žå…ƒç¬¦å· (|$|) 把它们括起æ¥.
+
+当你想在 `$i$' 或 `$j$' 上加上é‡éŸ³ç¬¦å·, 则需è¦ä½¿ç”¨ |\imath| å’Œ |\jmath| 命令æ¥è¡¨ç¤ºå®ƒä»¬æœ¬èº«.
+
+ä¸Šæ ‡ç‚¹ç¬¦å· (|'|) 是一个 |\prime| 的上标的简写.
+(|\prime| 本身å¯ä»¥æŽ’å°ä¸€ä¸ªå¾ˆå¤§çš„丑陋的撇å·.)
+
+|\!|| å’Œ ^|\Vert| 命令是等价的, å°±åƒ ^|\neg| å’Œ ^|\lnot| 命令一样.
+\margin{增加了 {\tt\\vert} 的解释}
+|\vert| 符å·å¯ä»¥æŽ’å°å‡ºå’Œ `|!||' 相åŒçš„效果.
+\indexchar |
+
+ç”± |\backslash|, |\vert|, å’Œ |\Vert| 排å°çš„命令å«åš \minref{分界符}.
+使用 ^|\bigm| ç­‰ (\xref \bigm) 命令å¯ä»¥æŽ’å°å¤§å·çš„这些字符.
+
+\example
+The Knave of $\heartsuit$s, he stole some tarts.
+|
+\produces
+The Knave of $\heartsuit$s, he stole some tarts.
+\nextexample
+如 $\hat\imath < \hat\jmath$ 则 $i' \leq j^\prime$.
+|
+\produces
+如 $\hat\imath < \hat\jmath$ 则 $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 {二元è¿ç®—符}
+
+\begindesc
+\bix^^{è¿ç®—符}
+\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
+这些命令å¯ä»¥æŽ’å°å„ç§äºŒå…ƒè¿ç®—符.
+二元è¿ç®—符是 \TeX\ 的一ç§ç¬¦å·\minref{集}.
+\TeX\ 在ä¸åŒçš„符å·é›†å‘¨å›´ä¼šæ’å…¥ä¸åŒçš„空白.
+当 \TeX\ 需è¦åœ¨ä¸€ä¸ªæ•°å­¦å…¬å¼ä¸­é—´æ–­è¡Œæ—¶,
+它会考虑在二元è¿ç®—符åŽé¢è¿›è¡Œæ–­è¡Œ---ä¸è¿‡ä»…在它出现在公å¼çš„最外层时, 而ä¸æ˜¯åœ¨ä¸€ä¸ªç»„中.
+
+除了这些命令以外, \TeX\ 也把 `|+|' and `|-|' 作为二元è¿ç®—符.
+它把 `|/|' 当作一个普通符å·,
+因为虽然事实上在数学中它是一个二元è¿ç®—,
+但是它在周围加入的空白更少时看上去更漂亮.
+
+\example
+$$z = x \div y \quad \hbox{当且仅当} \quad
+z \times y = x \;\hbox{且}\; y \neq 0$$
+|
+\dproduces
+$$z = x \div y \quad \hbox{当且仅当} \quad
+z \times y = x \;\hbox{且}\; y \neq 0$$
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial * \ctsxrdef{@star}
+\explain
+命令 |\*| è¡¨ç¤ºä¹˜æ³•ç¬¦å· ($\times$), 也是一个二元符å·.
+乘法符å·åœ¨æ–‡æœ¬ä¸­çš„数学公å¼ä¸­å‡ºçŽ°æ—¶è¡¨çŽ°å¾—和一个分è¯ç¬¦ç±»ä¼¼.
+这就是说, \TeX\ \emph{ä»…}会在公å¼è¯¥ç‚¹éœ€è¦æ–­è¡Œæ—¶æŽ’版 |\times| 符å·.
+因为 \TeX\ 永远ä¸ä¼šåœ¨é™ˆåˆ—å…¬å¼ä¸­æ–­è¡Œ, 所以 |\*| åœ¨é™ˆåˆ—å…¬å¼ \minrefs{陈列公å¼} 中是没有任何作用的.
+
+\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^^{è¿ç®—符}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {关系符å·}
+
+\begindesc
+\xrdef {relations}
+\bix^^{关系符}
+\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
+这些命令å¯ä»¥æŽ’å°å„ç§å…³ç³»ç¬¦å·.
+关系符å·æ˜¯ \TeX\ 的数学符å·ä¸­çš„\minref{ç±»}之一.
+\TeX\ 在ä¸åŒçš„\minref{ç±»}之间æ’å…¥ä¸åŒçš„空白长度.
+当 \TeX\ 需è¦åœ¨ä¸€ä¸ªæ•°å­¦å…¬å¼å¤„æ–­è¡Œ, \minrefs{æ–­è¡Œ}
+它会考虑在一个关系符åŽè¿›è¡Œæ–­è¡Œ---ä¸è¿‡ä»…在它出现在公å¼çš„最外层时, 而ä¸æ˜¯åœ¨ä¸€ä¸ªç»„中.
+
+除了这里列出的命令以外, \TeX\ 也把 `^|=|' å’Œ``arrow'' 命令 (\xref{arrows}) 作为关系è¿ç®—符.
+
+一些关系符有多ç§å‘½ä»¤è¡¨è¾¾æ–¹å¼, ä½ å¯ä»¥ä½¿ç”¨ä»»ä½•ä¸€ä¸ªæ¥æŽ’å°å®ƒä»¬:
+\ulist \compact
+\li `$\ge$' (|\ge| 和 |\geq|).
+\li `$\le$' (|\le| 和 |\leq|).
+\li `$\ne$' (|\ne|, |\neq|, 和 |\not=|).
+\li `$\ni$' (|\ni| 和 |\owns|).
+\endulist
+
+\xrdef{\not}
+在这些符å·å‰åŠ ä¸Š |\not|, å¯ä»¥æŽ’å°å®ƒä»¬çš„éžè¿ç®—:
+
+\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
+我们å¯ä»¥å¾—到 $AB \perp AC$,且
+$\triangle ABF \not\sim \triangle ACF$.
+|
+\produces
+我们å¯ä»¥å¾—到 $AB \perp AC$,且
+$\triangle ABF \not\sim \triangle ACF$.
+
+\eix^^{关系符}
+\endexample
+\enddesc
+
+%==========================================================================
+%\subsection {Left and right delimiters}
+\subsection {å·¦å³å®šç•Œç¬¦}
+
+%\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.
+\begindesc
+\bix^^{定界符}
+%
+\dothreecolumns 12
+\easy\ctsdisplay lbrace {}
+\writeidxfalse\ctsydisplay { @lbrace {}\writeidxtrue
+\ctsdisplay rbrace {}
+\writeidxfalse\ctsydisplay } @rbrace {}\writeidxtrue
+\ctsdisplay lbrack {}
+\ctsdisplay rbrack {}
+\ctsdisplay langle {}
+\ctsdisplay rangle {}
+\ctsdisplay lceil {}
+\ctsdisplay rceil {}
+\ctsdisplay lfloor {}
+\ctsdisplay rfloor {}
+\egroup
+\explain
+这些命令排å°å„ç§å·¦å³\minref{定界符}。
+数学家用定界符指明公å¼å„部分的边界。
+左定界符åˆç§°ä¸º``^{开符å·}'',å³å®šç•Œç¬¦åˆç§°ä¸º``^{闭符å·}''。
+开符å·å’Œé—­ç¬¦å·æ˜¯ \TeX\ 数学公å¼ä¸­çš„两ç§å­—符类。
+\TeX\ 在ä¸åŒ\minref{ç±»}的数学符å·ä¹‹é—´ç•™ä¸‹ä¸åŒå¤§å°çš„间隔。
+你也许认为在开符å·å’Œé—­ç¬¦å·æ—边的间隔是对称的,但实际上并éžå¦‚此。
+
+%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.
+\ulist\compact
+\li `$\{$' (|\lbrace| 和 |\{|)
+\li `$\}$' (|\rbrace| 和 |\}|)
+\li `$[$' (|\lbrack| 和 `|[|')
+\li `$]$' (|\rbrack| 和 `|]|')
+\endulist
+\noindent å·¦å³æ–¹æ‹¬å·ï¼ˆä¸¤ç§å½¢å¼çš†å¯ï¼‰åœ¨æ•°å­¦æ¨¡å¼ä¹‹å¤–也å¯ä»¥ä½¿ç”¨ã€‚
+
+%In addition to these commands, \TeX\ treats `|(|' as a left
+%delimiter and `|)|' as a right delimiter.
+除这些命令之外,\TeX\ 还将 `|(|' 视为左定界符,将 `|)|' 视为å³å®šç•Œç¬¦ã€‚
+
+%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}).
+利用 |\left| 和 |\right|(\xref\left )命令,
+ä½ å¯ä»¥è®© \TeX\ 选择定界符的尺寸。
+或者利用æŸä¸ª |\big|$x$ å‘½ä»¤ï¼ˆè§ |\big| 等,\xref{\big}),
+ä½ å¯ä»¥é€‰æ‹©ç‰¹å®šå°ºå¯¸çš„定界符。
+
+%\example
+%The set $\{\,x \mid x>0\,\}$ is empty.
+%|
+%\produces
+%The set $\{\,x \mid x>0\,\}$ is empty.
+\example
+é›†åˆ $\{\,x \mid x>0\,\}$ 是空集.
+|
+\produces
+é›†åˆ $\{\,x \mid x>0\,\}$ 是空集.
+
+%\eix^^{delimiters}
+%\endexample
+%\enddesc
+\eix^^{定界符}
+\endexample
+\enddesc
+
+%==========================================================================
+%\subsection {Arrows}
+\subsection {箭头}
+
+%\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).
+\begindesc
+\bix^^{箭头}
+\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
+这些命令æä¾›å„ç§ç®­å¤´ã€‚它们被划分为关系符å·ï¼ˆ\xref{relations})。
+上é¢çš„竖直箭头åŒæ—¶ä¹Ÿæ˜¯\minref{定界符},
+因此你å¯ä»¥ç”¨ |\big| 等命令让它们å˜å¤§ï¼ˆ\xref \big )。
+
+%The command |\iff| differs from |\Longleftrightarrow| in that
+%it produces extra space to the left and right of the arrow.
+命令 |\iff| 和 |\Longleftrightarrow| 的差别之处在于,
+它在箭头两边生æˆé¢å¤–间隔。
+
+%You can place symbols or other legends on top of a left or right arrow
+%with |\buildrel| (\xref \buildrel).
+ä½ å¯ä»¥ç”¨ |\buildrel|(\xref \buildrel )命令将符å·æˆ–者其他文字放在箭头上边。
+
+%\example
+%$$f(x)\mapsto f(y) \iff x \mapsto y$$
+%|
+%\dproduces
+%$$f(x)\mapsto f(y) \iff x \mapsto y$$
+\example
+$$f(x)\mapsto f(y) \iff x \mapsto y$$
+|
+\dproduces
+$$f(x)\mapsto f(y) \iff x \mapsto y$$
+
+%\eix^^{arrows}
+%\endexample
+%\enddesc
+\eix^^{箭头}
+\endexample
+\enddesc
+
+%==========================================================================
+%\subsection {Named mathematical functions}
+\subsection {已命å的数学函数}
+
+%\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.
+\begindesc
+\xrdef{namedfns}
+\bix^^{函数å称}
+{\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
+这些命令以惯用的罗马字体排å°å„ç§æ•°å­¦å‡½æ•°çš„å称。
+如果你给这些命令中的任何一个加上上标或下标,
+\TeX\ 将在通常的ä½ç½®æŽ’版它。
+在陈列样å¼ä¸­ï¼Œå¯¹äºŽ |\det|ã€|\gcd|ã€|\inf|ã€|\lim|ã€|\liminf|ã€
+|\limsup|ã€|\max|ã€|\min|ã€|\Pr| å’Œ |\sup|,
+\TeX\ 将上标和下标当æˆæžé™é‚£æ ·æŽ’版,
+å³å°†å®ƒä»¬ç›´æŽ¥æ”¾åœ¨å‡½æ•°å的上边或下边。
+
+%\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
+\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 bmod {}
+\explain
+此命令排å°ä¸€ä¸ªæ ‡æ˜Žå…¬å¼å†…çš„^{模è¿ç®—}的二元è¿ç®—符。
+\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$$
+\begindesc
+\cts pmod {}
+\explain
+此命令在公å¼æœ«å°¾æŽ’å°æ”¾åœ¨åœ†æ‹¬å·ä¸­çš„^{模è¿ç®—}。
+\example
+$$x \equiv y+1 \pmod 2$$
+|
+\dproduces
+$$x \equiv y+1 \pmod 2$$
+
+%\eix^^{functions, names of}
+%\endexample
+%\enddesc
+\eix^^{函数å称}
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\subsection {Large operators}
+\subsection {巨算符}
+
+%\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.
+\begindesc
+\bix^^{è¿ç®—符//巨算符}
+\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
+这些命令排å°å„ç§å·¨ç®—符。
+\TeX\ 在^{文内样å¼}中排å°å°å·å­—符,
+\minrefs{math mode}而在^{陈列样å¼}中排å°å¤§å·å­—符.
+巨算符是 \TeX\ 数学符å·çš„其中一\minref{ç±»}。
+\TeX\ 在ä¸åŒç±»æ•°å­¦ç¬¦å·é—´ç•™ä¸‹ä¸åŒå¤§å°çš„间隔。
+
+%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.
+å称中带有 `|big|' 的巨算符和对应的二元è¿ç®—符%
+(比如 |\cap| ($\cap$),è§\xref{binops})ä¸åŒï¼Œ
+因为它们通常出现公å¼çš„开头。
+\TeX\ 给巨算符留下的间隔与二元è¿ç®—符的ä¸åŒã€‚
+
+%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.
+ä¸è¦æ··æ·† `$\sum$' (|\sum|) å’Œ `$\Sigma$'^^|\Sigma| (|\Sigma|),
+或者 `$\prod$' (|\prod|) 和 `$\Pi$' ^^|\Pi| (|\Pi|)。
+|\Sigma| å’Œ |\Pi| 排å°å¤§å†™å¸Œè…Šå­—æ¯ï¼Œå®ƒä»¬å°ºå¯¸æ›´å°ï¼Œå¤–观也ä¸åŒã€‚
+
+%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
+\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.
+\begindesc
+\cts limits {}
+\explain
+在文内样å¼ä¸­ï¼Œ\TeX\ 通常将æžé™æ”¾åœ¨å·¨ç®—符åŽè¾¹ã€‚
+此命令让 \TeX\ å°†æžé™æ”¾åœ¨å·¨ç®—符的上边和下边,而ä¸æ˜¯åœ¨åŽè¾¹ã€‚
+
+%If you specify more than one of |\limits|, |\nolimits|,
+%and |\display!-limits|, the last command rules.
+如果你多次使用 |\limits|ã€|\nolimits| 或 |\display!-limits|,
+仅最åŽä¸€ä¸ªå‘½ä»¤ç”Ÿæ•ˆã€‚
+
+%\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
+\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.
+\begindesc
+\cts nolimits {}
+\explain
+在陈列样å¼ä¸­ï¼Œ\TeX\ 通常将æžé™æ”¾åœ¨å·¨ç®—符的上边和下边。%
+(|\int| 算符是一个例外—— \TeX\ 总是将æžé™æ”¾åœ¨ç®—符的åŽè¾¹ã€‚)%
+^^|\int//æžé™æ”¾åœ¨åŽé¢|
+此命令让 \TeX\ å°†æžé™æ”¾åœ¨å·¨ç®—符åŽè¾¹ï¼Œè€Œä¸æ˜¯ä¸Šè¾¹å’Œä¸‹è¾¹ã€‚
+
+%If you specify more than one of |\limits|, |\nolimits|,
+%and |\display!-limits|, the last command rules.
+如果你多次使用 |\limits|ã€|\nolimits| 或 |\display!-limits|,
+仅最åŽä¸€ä¸ªå‘½ä»¤ç”Ÿæ•ˆã€‚
+
+%\example
+%$$\bigcap\nolimits_{i=1}^Nq_i$$
+%|
+%\dproduces
+%$$\bigcap\nolimits_{i=1}^Nq_i$$
+%\endexample
+%\enddesc
+\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.
+\begindesc
+\cts displaylimits {}
+\explain
+此命令让 \TeX\ 按照通常方å¼æ”¾ç½®æžé™ï¼š
+\olist\compact
+\li ^|\int| 算符的æžé™æ€»æ”¾åœ¨ç®—符åŽè¾¹ã€‚%
+\footnote{译注:此处似乎有误,在 |\displaylimits| 下 ^|\int| 和其他算符应该有相åŒçš„表现。}
+\li 在文内样å¼ä¸­ï¼Œå…¶ä»–巨算符的æžé™æ”¾åœ¨ç®—符的åŽè¾¹ã€‚
+\li 在陈列样å¼ä¸­ï¼Œå…¶ä»–巨算符的æžé™æ”¾åœ¨ç®—符的上边和下边。
+\endolist
+用 |\limits| 或 |\nolimits| æ¥æŽ’å°ç‰¹å®šæ•ˆæžœæ›´ä¸ºç®€å•ï¼Œ
+但 |\display!-limits| 在\minref{å®}定义中有时会用到。
+
+%Note that \plainTeX\ defines ^|\int| as a macro that sets |\nolimits|,
+%so |\int\displaylimits| in text style restores the |\limits|
+%convention.
+æ³¨æ„ \plainTeX\ 在定义 ^|\int| 时就带有 |\nolimits|,
+因此文内样å¼çš„ |\int\displaylimits| å°†æ¢å¤ |\limits| 约定。%
+\footnote{译注:此处似乎有误,在文内样å¼ä¸­ï¼Œ|\int\displaylimits| çš„æžé™åº”该还是在åŽè¾¹ã€‚}
+
+%If you specify more than one of |\limits|, |\nolimits|,
+%and |\display!-limits|, the last command rules.
+如果你多次使用 |\limits|ã€|\nolimits| 或 |\display!-limits|,
+仅最åŽä¸€ä¸ªå‘½ä»¤ç”Ÿæ•ˆã€‚
+
+%\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$$
+\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
+\eix^^{è¿ç®—符//巨算符}
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\subsection {Punctuation}
+\subsection {标点}
+
+%\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
+\bix^^{数学公å¼ä¸­çš„标点}
+\cts cdotp {}
+\cts ldotp {}
+\explain
+这两个命令分别排å°å±…中的圆点和在\minref{基线}上的圆点。
+它们仅å¯ç”¨äºŽæ•°å­¦\minref{模å¼}中。
+\TeX\ 将它们视为标点,在å‰é¢ä¸ç•™é—´éš”而在åŽé¢ç•™ä¸‹ä¸€ç‚¹é—´éš”。
+与此相å,对于用 ^|\cdot| 命令(\xref\cdot )生æˆçš„居中圆点,
+\TeX\ 在其两侧留下相åŒå¤§å°çš„间隔。
+\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$
+\begindesc
+\cts colon {}
+\explain
+此命令排å°ä¸€ä¸ªå†’å·æ ‡ç‚¹ï¼Œå®ƒåªèƒ½ç”¨åœ¨æ•°å­¦æ¨¡å¼ä¸­ã€‚
+冒å·æ ‡ç‚¹ |\colon| 和冒å·å­—符(|:|)的区别在于,
+`|:|' 是一个è¿ç®—符,因此 \TeX\ 在其左侧留下é¢å¤–间隔,
+然而在 |\colon| 左侧å´ä¸ç•™é¢å¤–间隔。
+\example
+$f \colon t \quad f : t$
+|
+\produces
+$f \colon t \quad f : t$
+
+%\eix^^{punctuation in math formulas}
+%\endexample
+%\enddesc
+\eix^^{数学公å¼ä¸­çš„标点}
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\secondprinting{\vfill\eject\null\vglue-30pt\vskip0pt}
+%\section {Superscripts and subscripts}
+\section {上标和下标}
+
+%\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}
+\begindesc
+\margin{Two groups of commands have been combined here.}
+\bix^^{上标}
+\bix^^{下标}
+\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
+å„æ çš„两个命令都是等价的。第一æ çš„命令将 \<argument> 排版为下标,
+而第二æ çš„命令将 \<argument> 排版为上标。
+|\sb| å’Œ |\sp| 命令主è¦ç”¨äºŽæ— æ³•ä½¿ç”¨ä¸‹åˆ’线和æ’入符的终端中,
+或者用在é‡æ–°å®šä¹‰äº† `|_|' or `|^|' 但需è¦å…¶åŽŸå§‹å®šä¹‰çš„情况下。
+这些命令也用于设定求和å·å’Œç§¯åˆ†å·çš„下æžé™å’Œä¸Šæžé™ã€‚
+^^{下æžé™} ^^{上æžé™}
+
+%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|.
+如果下标或上标ä¸æ˜¯å•ä¸ª\minref{è®°å·},你需è¦å°†å®ƒæ”¾åœ¨\minref{编组}中。
+\TeX\ 并ä¸å¤„ç†ä¸‹æ ‡å’Œä¸Šæ ‡çš„优先级,
+因此它将拒ç»ç±»ä¼¼ |a_i_j|ã€|a^i^j| 或 |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).
+下标和上标排版时通常用^{æ ‡å·æ ·å¼},或者^{å°æ ‡å·æ ·å¼},
+如果它们是二阶标å·ï¼Œæ¯”如下标中的下标或下标中的上标。
+利用 ^|\scriptstyle| 和 ^|\scriptscriptstyle| 命令(\xref\scriptscriptstyle ),
+ä½ å¯ä»¥å°†æ•°å­¦å…¬å¼çš„\emph{任何}文本设为标å·æˆ–å°æ ‡å·\minref{æ ·å¼}。
+
+%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.
+对任何以罗马字体排å°å‘½å数学函数(è§\xref{namedfns})的命令,
+你都å¯ä»¥ç»™å®ƒæ·»åŠ ä¸‹æ ‡å’Œä¸Šæ ‡ã€‚
+在æŸäº›æƒ…形中(åŒæ ·è§\xref{namedfns}),
+下标和上标分别出现在函数å的下边和上边,
+如下é¢ä¾‹å­ä¸­çš„ ^|\lim| å’Œ ^|\det| 所示。
+
+%\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$$
+\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
+\eix^^{上标}
+\eix^^{下标}
+\endexample
+\enddesc
+
+%\secondprinting{\vfill\eject}
+
+%==========================================================================
+%\subsection {Selecting and using styles}
+\subsection {选用样å¼}
+
+%\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
+\bix^^{æ ·å¼}
+\cts textstyle {}
+\cts scriptstyle {}
+\cts scriptscriptstyle {}
+\cts displaystyle {}
+\explain
+^^{文本样å¼} ^^{æ ‡å·æ ·å¼} ^^{å°æ ‡å·æ ·å¼} ^^{陈列样å¼}
+这些命令覆盖 \TeX\ 排版公å¼æ—¶é€šå¸¸ä½¿ç”¨çš„\minref{æ ·å¼}åŠå…¶å­—体。
+如åŒç±»ä¼¼ |\it| 的字体设置命令,它们在其所在编组结æŸå‰ä¸€ç›´æœ‰æ•ˆã€‚
+当 \TeX\ 给你è¦æŽ’版的公å¼é€‰ç”¨äº†ä¸åˆé€‚çš„æ ·å¼æ—¶ï¼Œä½ å¯ä»¥ä½¿ç”¨è¿™äº›å‘½ä»¤ã€‚
+\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 mathchoice {%
+ \rqbraces{\<math$_1$>}
+ \rqbraces{\<math$_2$>}
+ \rqbraces{\<math$_3$>}
+ \rqbraces{\<math$_4$>}}
+\explain
+此命令让 \TeX\ æ ¹æ®å½“å‰\minref{æ ·å¼}选择并排版其中一个å­å…¬å¼
+\<math$_1$>ã€\<math$_2$>ã€\<math$_3$> 或 \<math$_4$>。
+也就是说,如果在陈列样å¼ä¸­ï¼Œ\TeX\ å°† |\mathchoice| 排版为 \<math$_1$>ï¼›
+在文本样å¼ä¸­æŽ’版为 \<math$_2$>,在标å·æ ·å¼ä¸­æŽ’版为 \<math$_3$>ï¼›
+而在å°æ ‡å·æ ·å¼ä¸­æŽ’版为 \<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>.
+\begindesc
+\cts mathpalette {\<argument$_1$> \<argument$_2$>}
+\explain
+^^{数学符å·}
+此命令æ供一ç§ç”Ÿæˆé€‚用于四ç§\minref{æ ·å¼}的数学结构的简便方法。%
+\footnote{译注:该å®å®šä¹‰ä¸º
+|\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}|\break
+|{#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}}|。}
+è¦ä½¿ç”¨å®ƒï¼Œé€šå¸¸ä½ éœ€è¦å®šä¹‰ä¸€ä¸ªé¢å¤–çš„å®ï¼Œå‡è®¾æˆ‘们称它为 |\build|。
+调用 |\math!-palette| 就应该用
+|\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.
+|\build| 测试 \TeX\ ä½äºŽä½•ç§æ ·å¼ï¼Œå¹¶ç›¸åº”地排版 \<argu\-ment>。
+它应该定义为有两个å‚数。
+当你调用 |\math!-palette| 时,它以 |#1| 为选择样å¼çš„命令,
+|#2| 为 \<argument> 转而调用 |\build|。
+因此,在 |\build| 的定义中,
+通过将æŸäº›ä¸œè¥¿æ”¾åœ¨ `|#1|' å‰é¢ï¼Œå°±å¯ä»¥ç”¨å½“å‰æ ·å¼æŽ’版它。
+在\knuth{第~360~页}中有如何使用 |\mathpalette| 的例å­ï¼Œ
+而在\knuth{第~151~页}中有它如何è¿ä½œçš„进一步解释。
+
+%\eix^^{styles}
+%\enddesc
+\eix^^{æ ·å¼}
+\enddesc
+
+%==========================================================================
+%\section {Compound symbols}
+\section {å¤åˆç¬¦å·}
+
+%==========================================================================
+%\subsection {Math accents}
+\subsection {æ•°å­¦é‡éŸ³}
+
+%\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.
+\begindesc
+\xrdef{mathaccent}
+^^{é‡éŸ³}
+^^{æ•°å­¦//æ•°å­¦é‡éŸ³}
+%
+\easy\ctsx acute {^{é”音符}ï¼Œå¦‚åŒ $\acute x$}
+\ctsx b {^{下线符}ï¼Œå¦‚åŒ $\b x$}
+\ctsx bar {^{上线符}ï¼Œå¦‚åŒ $\bar x$}
+\ctsx breve {^{短音符}ï¼Œå¦‚åŒ $\breve x$}
+\ctsx check {^{抑扬符}ï¼Œå¦‚åŒ $\check x$}
+\ctsx ddot {^{åŒç‚¹ç¬¦}ï¼Œå¦‚åŒ $\ddot x$}
+\ctsx dot {^{上点符}ï¼Œå¦‚åŒ $\dot x$}
+\ctsx grave {^{é’音符}ï¼Œå¦‚åŒ $\grave x$}
+\ctsx hat {^{尖角符}ï¼Œå¦‚åŒ $\hat x$}
+\ctsx widehat {^{宽尖角符}ï¼Œå¦‚åŒ $\widehat {x+y}$}
+\ctsx tilde {^{波浪符}ï¼Œå¦‚åŒ $\tilde x$}
+\ctsx widetilde {^{宽波浪符}ï¼Œå¦‚åŒ $\widetilde {z+a}$}
+\ctsx vec {^{å‘é‡ç¬¦}ï¼Œå¦‚åŒ $\vec x$}
+\explain
+这些命令在数学公å¼ä¸ŠæŽ’å°é‡éŸ³æ ‡è®°ã€‚你通常需è¦åœ¨å®ƒä»¬åŽé¢ç•™ä¸‹ç©ºæ ¼ã€‚
+宽é‡éŸ³å¯ä»¥åº”用到多字符å­å…¬å¼ä¸­ï¼›\TeX\ 将把é‡éŸ³æ”¾åœ¨å­å…¬å¼çš„中间。
+其他é‡éŸ³ä»…在应用到å•ä¸ªå­—符时æ‰æœ‰ç”¨ã€‚
+
+%\example
+%$\dot t^n \qquad \widetilde{v_1 + v_2}$
+%|
+%\produces
+%$\dot t^n \qquad \widetilde{v_1 + v_2}$
+%\endexample
+\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
+\begindesc
+\cts mathaccent {\<mathcode>}
+\explain
+此命令让 \TeX\ 排版字体æ—和字符编ç ç”± \<mathcode> 给出的数学é‡éŸ³ã€‚%
+(\TeX\ 忽略\minref{æ•°å­¦ç }中的类。)
+请å‚阅\knuth{附录~G}对 \TeX\ 如何放置该é‡éŸ³çš„详细介ç»ã€‚
+ç»å¸¸å°† |\mathaccent| 放在å®å®šä¹‰ä¸­ï¼Œä»¥ç»™æ•°å­¦é‡éŸ³ä¸€ä¸ªå称。
+\example
+\def\acute{\mathaccent "7013}
+|
+\endexample
+\enddesc
+
+%\see ``Accents'' (\xref {accents}).
+%\enddesc
+\see ``Accents''(\xref {accents})。
+\enddesc
+
+%==========================================================================
+%\subsection {Fractions and other stacking operations}
+\subsection {分å¼å’Œå…¶ä»–å †å è¿ç®—}
+
+%\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.
+\begindesc
+\bix^^{分å¼}
+\bix^^{å †å å­å…¬å¼}
+\easy\cts over {}
+\cts atop {}
+\cts above {\<dimen>}
+\cts choose {}
+\cts brace {}
+\cts brack {}
+\explain
+{\def\fri{\<formula$_1$>}%
+\def\frii{\<formula$_2$>}%
+这些命令将一个å­å…¬å¼å †æ”¾åœ¨å¦ä¸€ä¸ªå­å…¬å¼ä¹‹ä¸Šã€‚
+我们将解释 |\over| 如何作用,然åŽè¯´æ˜Žå…¶ä»–命令与它的关系。
+
+%|\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.
+|\over| 命令通常用于排å°åˆ†å¼ã€‚
+^^{分å¼//用 \b\tt\\over\e 生æˆ}
+如果你按下é¢å‡ ç§å½¢å¼ä¹‹ä¸€æ’°å†™ï¼š
+\csdisplay
+$$!fri\over!frii$$
+$!fri\over!frii$
+\left!<delim>!fri\over!frii\right!<delim>
+{!fri\over!frii}
+|
+你将得到分å­ä¸º \fri\ 分æ¯ä¸º \<for\-mu\-la$_2$> 的分å¼ï¼Œ
+å³ \fri\ 除以 \frii 。
+在å‰é¢ä¸‰ç§å½¢å¼ä¸­ï¼Œ|\over| éžæ˜¾å¼åœ°åŒ…å«åœ¨ä¸€ä¸ªç¼–组中;
+它å¸æ”¶å·¦è¾¹å’Œå³è¾¹çš„内容直到é‡åˆ°è¾¹ç•Œï¼Œå³ç¼–组的开头和结尾。
+
+%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.
+ä½ ä¸å¯ä»¥åœ¨ä¸€ä¸ªå…¬å¼ä¸­å¤šæ¬¡ä½¿ç”¨ |\over| 或这批命令的其他命令。
+因此下é¢çš„å…¬å¼ï¼š
+\csdisplay
+$$a \over n \choose k$$
+|
+是ä¸åˆæ³•çš„。这ä¸æ˜¯ä»€ä¹ˆä¸¥é‡çš„é™åˆ¶ï¼Œå› ä¸ºä½ æ€»å¯ä»¥å°†å…¶ä¸­ä¸€ä¸ªå‘½ä»¤æ”¾åœ¨èŠ±æ‹¬å·ä¸­ã€‚
+作此é™åˆ¶çš„原因是,如果你把这些命令的其中两个放在åŒä¸€ä¸ªå…¬å¼ä¸­ï¼Œ
+\TeX\ å°†ä¸çŸ¥é“如何划分它们。
+
+%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
+其他命令与 |\over| 类似,但有所ä¸åŒï¼š
+\ulist\compact
+\li |\atop| 去掉分å¼çš„横线。
+\li |\above| 给出厚度为 \<dimen> 的分å¼æ¨ªçº¿ã€‚
+\li |\choose| 去掉分å¼æ¨ªçº¿ï¼Œå¹¶å°†ç»“构放在圆括å·ä¸­ã€‚%
+(称它为``选择'',
+是因为 $n \choose k$ 表示从 $n$ ä¸ªä¸œè¥¿ä¸­ä»»å– $k$ 个的所有选å–æ–¹å¼çš„数目。)%
+\li |\brace| 去掉分å¼æ¨ªçº¿ï¼Œå¹¶å°†ç»“构放在花括å·ä¸­ã€‚
+\li |\brack| 去掉分å¼æ¨ªçº¿ï¼Œå¹¶å°†ç»“构放在方括å·ä¸­ã€‚
+\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 overwithdelims {\<delim$_1$> \<delim$_2$>}
+\cts atopwithdelims {\<delim$_1$> \<delim$_2$>}
+\cts abovewithdelims {\<delim$_1$> \<delim$_2$> \<dimen>}
+\explain
+这里的æ¯ä¸ªå‘½ä»¤éƒ½å°†ä¸€ä¸ªå­å…¬å¼å †æ”¾åœ¨å¦ä¸€ä¸ªå­å…¬å¼ä¹‹ä¸Šï¼Œ
+并将整个结构的左边用 \<delim$_1$>,å³è¾¹ç”¨ \<delim$_2$> 包围。
+这些命令éµå¾ªä¸Ž |\over|ã€|\atop| å’Œ |\above| 相åŒçš„规则。
+|\abovewithdelims| åŽé¢çš„ \<dimen> 指定分å¼æ¨ªçº¿çš„厚度。
+\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|.
+\begindesc
+\cts cases {}
+\explain
+^^{组åˆæ•°è®°æ³•}
+此命令排å°ä¸€ä¸ªè¡¨ç¤ºä»Žå¤šä¸ªæƒ…形中选择的数学形å¼ã€‚
+æ¯ç§æƒ…形由两部分组æˆï¼Œä¸¤è€…以 `|&|' 分隔。
+\TeX\ 将第一部分视为数学公å¼ï¼Œç¬¬äºŒéƒ¨åˆ†è§†ä¸ºæ™®é€šæ–‡æœ¬ã€‚
+æ¯ä¸ªæƒ…形之åŽå¿…须加上 |\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
+\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
+\cts underbrace {\<argument>}
+\cts overbrace {\<argument>}
+\cts underline {\<argument>}
+\cts overline {\<argument>}
+\cts overleftarrow {\<argument>}
+\cts overrightarrow {\<argument>}
+\explain
+这些命令将å¯ä¼¸é•¿çš„^{花括å·}ã€æ¨ªçº¿æˆ–^{箭头}%
+放在由 \<argument> 给出的å­å…¬å¼çš„上边或下边。
+\TeX\ 将让这些结构足够宽以适应内容。
+当 \TeX\ 排å°å¯ä¼¸é•¿çš„花括å·ã€æ¨ªçº¿æˆ–箭头时,
+它åªè€ƒè™‘åŒ…å« \<argument> çš„ \minref{ç›’å­}的尺寸。
+如果你在一个公å¼ä¸­ä½¿ç”¨è¿™äº›å‘½ä»¤ä¸­çš„两个以上,
+其中排å°çš„花括å·ã€æ¨ªçº¿æˆ–箭头之间å¯èƒ½æ— æ³•æ°å½“地对é½ã€‚
+ä½ å¯ä»¥ä½¿ç”¨ |\mathstrut| 命令(\xref\mathstrut )克æœæ­¤å›°éš¾ã€‚
+\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$
+\begindesc%\secondprinting{\vglue-.5\baselineskip\vskip0pt}
+\cts buildrel {\<formula> {\bt \\over} \<relation>}
+\explain
+^^{关系符//将公å¼æ”¾åœ¨å…¶ä¸Š}
+此命令将 \<formula> 所在的\minref{ç›’å­}放在 \<relation> 上边。
+\TeX\ 处ç†é—´éš”时将结果视为一个关系符\seeconcept{ç±»}。
+\example
+$\buildrel \rm def \over \equiv$
+|
+\produces
+$\buildrel \rm def \over \equiv$
+
+%\eix^^{fractions}
+%\eix^^{stacking subformulas}
+%\endexample
+%\enddesc
+\eix^^{分å¼}
+\eix^^{å †å å­å…¬å¼}
+\endexample
+\enddesc
+
+%\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+%\subsection {Dots}
+\subsection {圆点}
+
+%\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).
+\begindesc
+\bix^^{圆点}
+\easy\cts ldots {}
+\cts cdots {}
+\explain
+这两个命令都排å°ä¸‰ä¸ªä¸€æŽ’çš„^{圆点}。对于 |\ldots|,
+圆点放在基线上;对于 |\cdots|,圆点放在中轴线上%
+ï¼ˆè§ \xref\vcenter 对 |\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
+\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
+\easy\cts vdots {}
+\explain
+此命令排å°ä¸‰ä¸ªç«–直的圆点。
+\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}$$
+\begindesc
+\cts ddots {}
+\explain
+此命令排å°æ–œçº¿ä¸Šçš„三个圆点。它常用于表示沿矩阵对角线的é‡å¤ã€‚
+\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
+\eix^^{圆点}
+\endexample
+\enddesc
+
+%\see |\dots| \ctsref\dots.
+\see |\dots|\ctsref\dots 。
+
+%==========================================================================
+%\subsection {Delimiters}
+\subsection {定界符}
+
+%\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
+\bix^^{定界符}
+%
+\cts lgroup {}
+\cts rgroup {}
+\explain
+这两个命令排å°å¤§å·çš„左和å³^{圆括å·},
+它们分别作为开定界符和闭\minref{定界符}。
+这两个定界符的最å°å¯ç”¨å°ºå¯¸ä¸º |\Big|。
+如果使用更å°çš„尺寸,你将得到奇怪的字符。
+\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|.
+\begindesc
+\margin{{\tt\\vert} and {\tt\\Vert} were explained elsewhere.}
+\easy\cts left {}
+\cts right {}
+\explain
+这两个命令必须按照下é¢æ¨¡å¼ä¸€èµ·ä½¿ç”¨ï¼š
+\display
+{{\bt \\left} \<delim$_1$> \<subformula> {\bt \\right} \<delim$_2$>}
+这个构造将让 \TeX\ æŽ’å° \<subformula>,
+并用\minref{定界符} \<delim$_1$> 和 \<delim$_2$> 包围它。
+\TeX\ 调整定界符的竖直尺寸以适应 \<subformula> 的竖直尺寸(高度加深度)。
+\<delim$_1$> å’Œ \<delim$_2$> ä¸éœ€è¦ç›¸å¯¹åº”。
+举个例å­ï¼Œåœ¨ä½¿ç”¨ |\left| å’Œ |\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|.
+|\left| å’Œ |\right| 有个é‡è¦æ€§è´¨æ˜¯å®ƒä»¬å®šä¹‰äº†ä¸€ä¸ªç¼–组,
+å³å®ƒä»¬èƒ½å¤Ÿå……当左和å³èŠ±æ‹¬å·ã€‚
+当你在|\left| 和 |\right| 之间放上 ^|\over|(\xref{\over})或其他相关命令时,
+此编组性质就很有用,因为你无需在 |\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
+如果你需è¦å·¦å®šç•Œç¬¦ä½†ä¸éœ€è¦å³å®šç•Œç¬¦ï¼Œ
+ä½ å¯ä»¥ç”¨ `|.|' 代替你ä¸éœ€è¦çš„定界符,
+这样它就å˜æˆä¸€ä¸ªç©ºç™½ï¼ˆå®½åº¦ä¸º ^|\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
+\cts delimiter {\<number>}
+\explain
+此命令排å°ç”¨ \<number> 刻画其特性的定界符。\<number> 通常用å六进制表示。
+在 \TeX\ 需è¦å®šç•Œç¬¦çš„任何地方你都å¯ä»¥ç”¨ |\delimiter| 命令代替一个字符%
+(尽管此命令很少在å®å®šä¹‰ä¹‹å¤–的地方使用)。
+å‡è®¾ \<number> 为å六进制数 $cs_1s_2s_3l_1l_2l_3$。
+则 \TeX\ 知é“该定界符属于第$c$\minref{ç±»},
+å°å·å˜ä½“为 $s_1s_2s_3$, 而大å·å˜ä½“为 $l_1l_2l_3$。
+这里 $s_1s_2s_3$ 表示第 $s_1$ æ—ä½ç½® $s_2s_3$ 的数学字符,
+$l_1l_2l_3$ 类似。这里使用与 ^|\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.
+\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
+^^{定界符//定界符高度}
+这两个å‚æ•°å…±åŒç¡®å®šäº†\minref{定界符}高度与其中å­å…¬å¼çš„竖直尺寸的关系。
+|\delimiterfactor| 给出定界符高度相对å­å…¬å¼ç«–直尺寸的最å°æ¯”例,
+而 |\delimitershortfall| 给出定界符高度相对å­å…¬å¼ç«–直尺寸的最大差è·ã€‚
+
+%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
+å‡è®¾åŒ…å«å­å…¬å¼çš„\minref{ç›’å­}的高度为 $h$ 深度为 $d$,
+且令 $y=2\,\max(h,d)$。
+设 |\delimiterfactor| 的值为 $f$,|\delimitershortfall| 的值为 $\delta$。
+则 \TeX\ 选å–的定界符高度至少为 $y \cdot f/1000$,且至少为 $y-\delta$。
+特别地,如果 |\delimiterfactor| æ°å¥½ä¸º $1000$,
+则 \TeX\ 将试ç€ç”Ÿæˆä¸€ä¸ªè‡³å°‘和其中的å­å…¬å¼ä¸€æ ·é«˜çš„定界符。
+è§\knuth{第~152~页和第~446~页(规则19)}中 \TeX\ 如何使用这些å‚数的细节。
+\PlainTeX\ 设定 |\delimiter!-factor| 为 $901$,
+|\delimiter!-shortfall| 为 |5pt|。
+\enddesc
+
+%\see |\delcode| (\xref\delcode), |\vert|, |\Vert|,
+%and |\backslash| (\xref\vert).
+%\eix^^{delimiters}
+\see |\delcode|(\xref\delcode )ã€|\vert|ã€|\Vert| å’Œ |\backslash|(\xref\vert )。
+\eix^^{定界符}
+
+%==========================================================================
+%\subsection {Matrices}
+\subsection {矩阵}
+
+%\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).
+\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
+这三个命令æ¯ä¸ªéƒ½æŽ’å°ä¸€ä¸ª^{矩阵},
+输入矩阵时å„行的元素之间用 `|&|' 分隔,而å„行用 |\cr| 结尾。%
+(这里使用与\minref{阵列}一样的形å¼ã€‚)%
+这些命令之间的区别如下:
+\ulist\compact
+\li |\matrix| 排å°ä¸€ä¸ªå››å‘¨ç©ºç™½ä¸å¸¦\minref{定界符}的矩阵。
+\li |\pmatrix| 排å°ä¸€ä¸ªä¸¤è¾¹å¸¦åœ†æ‹¬å·çš„矩阵。
+\li |\bordermatrix| 排å°ä¸€ä¸ªå°†ç¬¬ä¸€è¡Œå’Œç¬¬ä¸€åˆ—视为标å·çš„矩阵。%
+(第一行的第一个元素通常为空白。)%
+矩阵的其他元素被圆括å·åŒ…å«ã€‚
+\endulist
+通过增加竖直延伸,\TeX\ 能够为 |\pmatrix| å’Œ |\bordermatrix| 制作足够大的圆括å·ã€‚
+如果你需è¦ç”¨ä¸åŒäºŽåœ†æ‹¬å·çš„定界符包围矩阵,你应当将
+|\matrix| 与 |\left| å’Œ |\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
+\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}
+\subsection {æ ¹å·ä¸Žæ ¹æ•°}
+
+%\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 sqrt {\<argument>}
+\explain
+æ­¤å‘½ä»¤æŽ’å° \<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
+\easy\cts root {\<argument$_1$> {\bt \\of} \<argument$_2$>}
+\explain
+æ­¤å‘½ä»¤æŽ’å° \<argument$_2$> çš„ \<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).
+\begindesc
+\cts radical {\<number>}
+\explain
+此命令排å°ç”¨ \<number> 刻画其特性的根数符å·ã€‚
+它使用的定界ç è¡¨ç¤ºæ³•ä¸Ž ^|\delcode| 命令(\xref\delcode )的相åŒã€‚
+^^{定界ç }
+
+%\example
+%\def\sqrt{\radical "270370} % as in plain TeX
+%|
+%\endexample
+%\enddesc
+\example
+\def\sqrt{\radical "270370} % as in plain TeX
+|
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\section {Equation numbers}
+\section {方程编å·}
+
+%\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).
+\begindesc
+\easy\cts eqno {}
+\cts leqno {}
+\explain
+这两个命令给陈列公å¼åŠ ä¸Šæ–¹ç¨‹ç¼–å·ã€‚
+|\eqno| 将编å·æ”¾åœ¨å³ä¾§ï¼Œè€Œ|\leqno| 将编å·æ”¾åœ¨å·¦ä¾§ã€‚
+这两个命令必须放在公å¼æœ«å°¾ã€‚
+如果你有个多行陈列公å¼ï¼Œè€Œä½ å¸Œæœ›ç»™ä¸æ­¢ä¸€è¡Œç¼–å·ï¼Œ
+ä½ å¯ä»¥ç”¨ |\eq!-alignno| 或 |\leq!-alignno| 命令(\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
+\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}
+\section {多行陈列公å¼}
+
+%\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.
+\begindesc
+\bix^^{陈列公å¼//多行陈列公å¼}
+\cts displaylines
+ {{\bt \rqbraces{\<line>\ths\\cr$\ldots$\<line>\ths\\cr}}}
+\explain
+此命令排å°ä¸€ä¸ªå¤šè¡Œé™ˆåˆ—å…¬å¼ï¼Œå…¶ä¸­çš„å„行独立地居中放置。
+ä½ å¯ä»¥ä½¿ç”¨ |\noalign| 命令(\xref\noalign )改å˜å¤šè¡Œé™ˆåˆ—å…¬å¼ä¸­ä¸¤è¡Œçš„间隔。
+
+%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
+如果你希望给多行陈列公å¼çš„æŸä¸ªæˆ–æŸäº›æ–¹ç¨‹æ·»åŠ ç¼–å·ï¼Œ
+你应当使用|\eqalignno| 或 |\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.
+\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
+^^{å…¬å¼ç¼–å·}
+这些命令排å°ä¸€ä¸ªå¤šè¡Œé™ˆåˆ—å…¬å¼ï¼Œå…¶ä¸­æŸäº›è¡Œçš„对应部分竖直对é½ã€‚
+|\eqalignno| å’Œ |\leqalignno| 命令还å…许你给æŸä¸ªæˆ–æŸäº›è¡Œæ·»åŠ æ–¹ç¨‹ç¼–å·ã€‚
+|\eqalignno| 将方程编å·æ”¾åœ¨å³ä¾§ï¼Œ
+而 |\leqalignno| 将编å·æ”¾åœ¨å·¦ä¾§ã€‚
+
+%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|.
+陈列公å¼çš„æ¯è¡Œç”¨ |\cr| 结尾。
+å„行需è¦å¯¹é½çš„å„部分(多åŠæ˜¯ç­‰å·ï¼‰å‰é¢åŠ ä¸Š `|&|'。
+方程编å·æ”¾åœ¨å…¬å¼æœ«å°¾ï¼Œå®ƒçš„å‰é¢ä¹Ÿè¦åŠ ä¸Š `|&|'。
+ä½ å¯ä»¥åœ¨å•ä¸ªé™ˆåˆ—å…¬å¼ä¸­å¤šæ¬¡ä½¿ç”¨è¿™äº›å‘½ä»¤ä»¥æŽ’å°å¤šç»„方程。
+在这ç§æƒ…形中,
+åªæœ‰æœ€å³è¾¹æˆ–最左边的那组方程å¯ä»¥ç”¨ |\eqalignno| 或 |\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
+ä½ å¯ä»¥ä½¿ç”¨ |\noalign| 命令(\xref\noalign )改å˜å¤šè¡Œé™ˆåˆ—å…¬å¼ä¸­ä¸¤è¡Œçš„间隔。
+\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
+\eix^^{陈列公å¼//多行陈列公å¼}
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\section {Fonts in math formulas}
+\section {数学公å¼å­—体}
+
+%\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
+\begindesc
+^^{字体}
+\xrdef{mathfonts}
+%
+\easy\ctsx cal {use calligraphic uppercase font}
+\ctsx mit {use math italic font}
+\ctsx oldstyle {use old style digit font}
+\explain
+这些命令让 \TeX\ 用指定的字体排版之åŽçš„文本。
+ä½ åªèƒ½åœ¨\minref{数学模å¼}中使用它们。
+|\mit| 命令å¯ç”¨äºŽæŽ’å°æ–œä½“大写^{希腊字æ¯}。
+你还å¯ä»¥ç”¨\headcit{选择字体}{selfont}中的那些命令改å˜æ•°å­¦æ¨¡å¼ä¸­çš„字体。
+\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
+\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
+这些命令定义几ç§ç”¨äºŽ\minref{数学模å¼}的字体æ—\minrefs{æ—}。
+它们主è¦ç”¨åœ¨ |\it|ã€|\bf|ã€|\sl| å’Œ |\tt| 命令的定义中,使这些命令能在数学模å¼ä¸­ä½¿ç”¨ã€‚
+\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.
+\begindesc
+\cts fam {\param{number}}
+\explain
+在\minref{数学模å¼}时,\TeX\ 通常用字符的\minref{æ•°å­¦ç }指定的字体æ—排版该字符。
+^^{ç±»}^^{æ—//用 \b\tt\\fam\e 给出}
+但是,如果 \TeX\ 在数学模å¼ä¸­é‡åˆ°ç¬¬ $7$ \minref{ç±»}(å˜é‡ï¼‰å­—符,
+它将用由 |\fam| 的值给出的字体\minref{æ—}排版该字符,
+åªè¦ |\fam| 的值在 $0$ å’Œ $15$ 之间。
+如果 |\fam| 的值ä¸åœ¨è¯¥èŒƒå›´å†…,
+\TeX\ å°±åƒé€šå¸¸æƒ…形那样使用字符的数学ç æŒ‡å®šçš„字体æ—。
+\TeX\ 在进入数学模å¼æ—¶è®¾å®š |\fam| 为 $-1$。
+在数学模å¼ä¹‹å¤–,|\fam| 无任何效果。
+
+%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
+通过赋予 |\fam| ä¸åŒçš„值,你能让 \TeX\ 用ä¸åŒæ–¹å¼æŽ’版普通字符,比如å˜é‡ã€‚
+举个例å­ï¼Œè®¾å®šäº† |\fam| 为 |\ttfam| ,你å¯ä»¥è®© \TeX\ 用打字机字体排版å˜é‡ã€‚
+\PlainTeX\ 在定义 |\tt| \minref{å®}时,除了其他设定之外,
+还设定 |\fam| 等于 |\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
+\begindesc
+\cts textfont {\<family>\param{fontname}}
+\cts scriptfont {\<family>\param{fontname}}
+\cts scriptscriptfont {\<family>\param{fontname}}
+\explain
+^^{文本样å¼}
+^^{æ ‡å·æ ·å¼}
+^^{å°æ ‡å·æ ·å¼}
+这三个å‚数分别选择 \TeX\ 排版指定\minref{æ—}的指定\minref{æ ·å¼}时所用的字体。
+这些选择在\minref{数学模å¼}之外无任何效果。
+\example
+\scriptfont2 = \sevensy % As in plain TeX.
+|
+\endexample
+\enddesc
+
+%\see ``Type styles'' (\xref{seltype}).
+\see ``字体风格''(\xref{seltype})。
+
+
+%==========================================================================
+%\section {Constructing math symbols}
+\section {构造数学符å·}
+
+%==========================================================================
+%\subsection {Making delimiters bigger}
+\subsection {增大定界符}
+
+%\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.
+\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
+^^{定界符//增大定界符}
+这些命令让\minref{定界符}比它们的正常尺寸还大。
+这四æ ä¸­çš„命令生æˆä¾æ¬¡å¢žå¤§çš„尺寸。|\big|ã€|\bigl|ã€|\bigr|
+和 |\bigm| 的区别在于增大的定界符所属的\minref{类}:
+\ulist\compact
+\li |\big| 生æˆä¸€ä¸ªæ™®é€šç¬¦å·ã€‚
+\li |\bigl| 生æˆä¸€ä¸ªå¼€ç¬¦å·ã€‚
+\li |\bigr| 生æˆä¸€ä¸ªé—­ç¬¦å·ã€‚
+\li |\bigm| 生æˆä¸€ä¸ªå…³ç³»ç¬¦å·ã€‚
+\endulist
+\noindent
+\TeX\ 从字符所属的类确定è¦åœ¨è¯¥å­—符两边留下多大的空格。
+
+%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
+\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}
+\subsection {大符å·çš„一部分}
+
+%\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 downbracefill {}
+\cts upbracefill {}
+\explain
+这两个命令分别排å°æœä¸Šå’Œæœä¸‹çš„å¯ä¼¸å±•^{水平花括å·}。^^{花括å·}
+\TeX\ 将让花括å·è¶³å¤Ÿå®½ã€‚
+这两个命令用于定义 ^|\overbrace| 和 ^|\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
+\begindesc
+\cts arrowvert {}
+\cts Arrowvert {}
+\cts lmoustache {}
+\cts rmoustache {}
+\cts bracevert {}
+\explain
+这些命令排å°æŸäº›å¤§å®šç•Œç¬¦çš„一部分,
+^^{定界符//定界符的一部分}
+把它们也用作定界符。
+它们å–自 ^|cmex10| 数学字体中的字符。
+\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}
+\section {对é½éƒ¨åˆ†å…¬å¼}
+
+%==========================================================================
+%\subsection {Aligning accents}
+\subsection {对é½æ•°å­¦é‡éŸ³}
+
+%\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
+\bix^^{é‡éŸ³//对é½é‡éŸ³}
+\cts skew {\<number> \<argument$_1$> \<argument$_2$>}
+\explain
+此命令将é‡éŸ³ \<argument$_1$> 相对 \<argu\-ment$_2$>
+从它的正常ä½ç½®å¾€å³ç§»åŠ¨ \<number> 个\minref{æ•°å­¦å•ä½}。
+此命令常用于调整在其他é‡éŸ³ä¹‹ä¸Šçš„é‡éŸ³çš„ä½ç½®ã€‚
+\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}.
+\begindesc
+\cts skewchar {\<font>\param{number}}
+\explain
+字体的 |\skewchar| 是字体中的æŸä¸ªå­—符,
+它在字体度é‡æ–‡ä»¶ä¸­å®šä¹‰çš„紧排确定了数学é‡éŸ³çš„ä½ç½®ã€‚
+也就是说,å‡è®¾ \TeX\ è¦ç»™å­—符 `|x|' 加上数学é‡éŸ³ï¼Œ
+则 \TeX\ 检查字符对 `|x\skewchar|' 是å¦æœ‰ä¸ªç´§æŽ’ï¼›
+如果有,它就以该紧排的值移动该é‡éŸ³ã€‚
+\TeX\ 放置数学é‡éŸ³çš„完整算法(这涉åŠåˆ°å¾ˆå¤šäº‹æƒ…)在\knuth{附录~G}中æ述。
+
+%If the value of |\skewchar| is not in the range $0$--$255$,
+%\TeX\ takes the kern value to be zero.
+如果 |\skewchar| 的值ä¸åœ¨ $0$--$255$ 的范围内,\TeX\ 将紧排的值当作零。
+
+%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
+æ³¨æ„ \<font> 是一个控制åºåˆ—,它是字体的å称,而ä¸æ˜¯å­—体文件的å称 \<font\-name>。
+å°å¿ƒï¼šå¯¹ |\skewchar| 的赋值在编组结æŸæ—¶\emph{并ä¸ä¼š}还原。
+如果你想局部改å˜|\skewchar|,你需è¦æ˜¾å¼åœ°ä¿å­˜å’Œè¿˜åŽŸå®ƒçš„原始值。
+\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
+\begindesc
+\cts defaultskewchar {\param{number}}
+\explain
+在执行 ^|\font| 命令读å–字体的度é‡æ–‡ä»¶æ—¶ï¼Œ
+^^{度é‡æ–‡ä»¶//其中的默认斜字符}
+\TeX\ 设定该字体的 ^|\skewchar| 等于 |\default!-skewchar|。
+如果 |\default!-skewchar| 的值ä¸åœ¨ $0$--$255$ 的范围内,
+\TeX\ 默认就ä¸è®¾å®š |\skewchar| 的值。
+\PlainTeX\ 设定 |\defaultskewchar| 等于 $-1$,一般ä¸éœ€è¦æ”¹åŠ¨å®ƒã€‚
+\margin{Misleading example deleted.}
+\eix^^{é‡éŸ³//对é½é‡éŸ³}
+\enddesc
+
+%==========================================================================
+%\subsection {Aligning material vertically}
+\subsection {竖直对é½ç´ æ}
+
+%\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.
+\begindesc
+\cts vcenter {\rqbraces{\<vertical mode material>}}
+\ctsbasic {\\vcenter to \<dimen> \rqbraces{\<vertical mode material>}}{}
+\ctsbasic {\\vcenter spread \<dimen> \rqbraces{\<vertical mode material>}}{}
+\explain
+æ¯ä¸ªæ•°å­¦å…¬å¼éƒ½æœ‰ä¸€ä¸ªä¸å¯è§çš„``^{轴线}'',\TeX\ 将它作为该公å¼çš„水平中心线。
+举个例å­ï¼Œç”±åˆ†å¼ç»„æˆçš„å…¬å¼çš„轴线就在分数线的中心。
+|\vcenter| 命令让 \TeX\ å°† \<vertical mode material> 放入\minref{ç«–ç›´ç›’å­}中,
+并将该竖直盒å­ä¸Žå½“å‰å…¬å¼çš„轴线居中对é½ã€‚
+
+%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).
+此命令的第一ç§å½¢å¼å¦‚上所述居中放置素æ。
+åŽä¸¤ç§å½¢å¼ç«–直扩展或收缩素æï¼Œå¦‚åŒ |\vbox| 命令(\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
+\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}
+\section {生æˆé—´éš”}
+
+%==========================================================================
+%\subsection {Fixed-width math spaces}
+\subsection {固定宽度数学间隔}
+
+%\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
+\bix^^{é—´éš”//数学公å¼ä¸­çš„é—´éš”}
+\ctspecial ! \ctsxrdef{@shriek}
+\ctspecial , \ctsxrdef{@comma}
+\ctspecial > \ctsxrdef{@greater}
+\ctspecial ; \ctsxrdef{@semi}
+\explain
+这些命令在公å¼ä¸­ç”Ÿæˆå„ç§å¤§å°çš„^{é¢å¤–é—´éš”}。
+它们使用\minref{æ•°å­¦å•ä½}æ¥å®šä¹‰ï¼Œ
+å› æ­¤ \TeX\ 会根æ®å½“å‰\minref{æ ·å¼}调整间隔的大å°ã€‚
+\ulist
+\li |\!!| 生æˆè´Ÿçš„细å°é—´éš”,å³å®ƒè®©ç›¸é‚»å­å…¬å¼çš„é—´éš”å‡åŽ»è¯¥ç»†å°é—´éš”的大å°ã€‚
+\li |\,| 生æˆç»†å°é—´éš”。
+\li |\>| 生æˆä¸­ç­‰é—´éš”。
+\li |\;| 生æˆè¾ƒå¤§é—´éš”。
+\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 thinmuskip {\param{muglue}}
+\cts medmuskip {\param{muglue}}
+\cts thickmuskip {\param{muglue}}
+\explain
+这些å‚数定义了数学模å¼ä¸­ç»†å°ã€ä¸­ç­‰å’Œè¾ƒå¤§é—´éš”的大å°ã€‚
+\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
+\begindesc
+\cts jot {\param{dimen}}
+\explain
+æ­¤å‚数定义为三个点的è·ç¦»ï¼ˆé™¤éžä½ æ”¹å˜äº†å®ƒï¼‰ã€‚
+在用 |\openup| 命令分开陈列公å¼å„行时,|\jot| 是一个实用的度é‡å•ä½ã€‚
+\footnote{译注:下é¢çš„例å­ä¸ºè¯‘者所加。请å‚阅 |\openup| 命令(\xref\openup )。}
+\example
+$$\vbox{\halign{$\hfil#\hfil$\cr x\cr y\cr}}$$
+$$\openup2\jot\vbox{\halign{$\hfil#\hfil$\cr x\cr y\cr}}$$
+|
+\produces
+$$\vbox{\halign{$\hfil#\hfil$\cr x\cr y\cr}}$$
+$$\openup2\jot\vbox{\halign{$\hfil#\hfil$\cr x\cr y\cr}}$$
+\endexample
+\enddesc
+
+%==========================================================================
+%\subsection {Variable-width math spaces}
+\subsection {å¯å˜å®½åº¦æ•°å­¦é—´éš”}
+
+%\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.
+\begindesc
+\cts mkern {\<mudimen>}
+\explain
+^^{紧排//数学公å¼ä¸­çš„紧排}
+此命令生æˆä¸€ä¸ªå®½åº¦ä¸º \<mudimen> çš„\minref{紧排},å³ç©ºç™½é—´éš”。
+该紧排用\minref{æ•°å­¦å•ä½}表示,因此在ä¸åŒæ ·å¼ä¸­æœ‰ä¸åŒçš„尺寸。
+除了使用数学å•ä½å¤–,此命令与水平模å¼çš„|\kern|(\xref\kern )的表现类似。
+
+%\example
+%$0\mkern13mu 0 \qquad {\scriptscriptstyle 0 \mkern13mu 0}$
+%|
+%\produces
+%$0\mkern13mu 0 \qquad {\scriptscriptstyle 0 \mkern13mu 0}$
+%\endexample
+%\enddesc
+\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).
+\begindesc
+\cts mskip {\<mudimen$_1$> {\bt plus} \<mudimen$_2$> {\bt minus}
+ \<mudimen$_3$>}
+\explain
+^^{粘连}
+此命令生æˆä¸€ä¸ªæ°´å¹³\minref{粘连},它的自然宽度为 \<mu\-dimen$_1$>,
+伸长é‡ä¸º \<mudimen$_2$>,收缩é‡ä¸º \<mudimen$_3$>。
+该粘连用\minref{æ•°å­¦å•ä½}表示,因此将éšç€æ ·å¼çš„å˜åŒ–而å˜åŒ–。
+除了使用数学å•ä½å¤–,此命令与 |\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
+\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.
+\begindesc
+\cts nonscript {}
+\explain
+在排版标å·æˆ–å°æ ‡å·\minref{æ ·å¼}时,如果 \TeX\ 在粘连或紧排跟å‰é‡åˆ°æ­¤å‘½ä»¤ï¼Œ
+它就丢弃该粘连或紧排。|\nonscript| 在其他样å¼ä¸­æ— ä»»ä½•æ•ˆæžœã€‚
+
+%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
+此命令æ供一ç§``收紧''æ ‡å·å’Œå°æ ‡å·æ ·å¼ä¸­çš„间隔的方法;
+通常用å°å·å­—体排版这两个样å¼ã€‚在å®å®šä¹‰ä¹‹å¤–的地方,此命令很少用到。
+\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}
+\see |\kern|(\xref\kern )和 |\hskip|(\xref\hskip )。
+\eix^^{é—´éš”//数学公å¼ä¸­çš„é—´éš”}
+
+%==========================================================================
+%\subsection {Spacing parameters for displays}
+\subsection {陈列公å¼çš„é—´éš”å‚æ•°}
+
+%\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
+\bix^^{陈列公å¼//陈列公å¼çš„é—´éš”å‚æ•°}
+\cts displaywidth {\param{dimen}}
+\explain
+æ­¤å‚数指定 \TeX\ 对陈列公å¼æ‰€å…许的最大宽度。
+如果 \TeX\ 无法将陈列公å¼æ”¾å…¥è¿™æ ·å®½çš„空间中,
+它将生æˆä¸€ä¸ªè¿‡æ»¡çš„\minref{水平盒å­}并给出警告。
+\TeX\ 在é‡åˆ° `|$$|' 开始陈列公å¼æ—¶å°±è®¾å®š |\displaywidth| 的值。
+它的åˆå§‹å€¼ä¸º |\hsize|(\xref\hsize ),除éžæ®µè½å½¢çŠ¶æ”¹å˜äº†ã€‚
+è§\knuth{第~188--189~页}中对此å‚数的更仔细的说明。
+\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 displayindent {\param{dimen}}
+\explain
+æ­¤å‚数指定 \TeX\ 对陈列公å¼çš„缩进é‡ã€‚
+\TeX\ 在é‡åˆ° `|$$|' 开始陈列公å¼æ—¶å°±è®¾å®š |\displayindent| 的值。
+通常它的åˆå§‹å€¼ä¸ºé›¶ï¼Œä½†å¦‚果段è½å½¢çŠ¶è¡¨æ˜Žè¯¥é™ˆåˆ—å…¬å¼éœ€è¦ç§»åŠ¨è·ç¦» $s$,
+\TeX\ 就设定 |\displayindent| 等于 $s$。
+è§\knuth{第~188--189~页}中对此å‚数的更仔细的介ç»ã€‚
+\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 predisplaysize {\param{dimen}}
+\explain
+\TeX\ 设定此å‚数等于陈列公å¼ä¹‹å‰çš„文本行的宽度。
+\TeX\ 利用 |\predisplaysize| 确定是å¦è®©é™ˆåˆ—å…¬å¼çš„起始点ä½äºŽå‰ä¸€è¡Œç»“尾处的左边,
+å³å®ƒåœ¨å¤–观上是å¦å¯èƒ½ä¸Žå‰ä¸€è¡Œé‡å ã€‚如果会有é‡å ï¼Œ
+\TeX\ 在排版陈列公å¼æ—¶ä½¿ç”¨|\abovedisplayskip| å’Œ |\belowdisplayskip| 粘连;
+å¦åˆ™ \TeX\ 使用 |\abovedisplay!-shortskip| å’Œ |\belowdisplay!-shortskip| 粘连。
+è§\knuth{第~188--189~页}中对此å‚数的更仔细的介ç»ã€‚
+\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 abovedisplayskip {\param{glue}}
+\explain
+此命令指定当陈列公å¼çš„起始点ä½äºŽå‰ä¸€è¡Œç»“尾处的左边时,
+å³å®ƒåœ¨å¤–观上å¯èƒ½ä¸Žå‰ä¸€è¡Œæœ‰é‡å æ—¶ï¼Œ
+\TeX\ 在陈列公å¼ä¹‹å‰æ’入的竖直粘连的大å°ã€‚
+\PlainTeX\ 设定 |\abovedisplayskip| 等于 |12pt plus3pt minus9pt|。
+è§\knuth{第~188--189~页}中对此å‚数的更仔细的介ç»ã€‚
+\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 belowdisplayskip {\param{glue}}
+\explain
+此命令指定当陈列公å¼çš„起始点ä½äºŽå‰ä¸€è¡Œç»“尾处的左边时,
+å³å®ƒåœ¨å¤–观上å¯èƒ½ä¸Žå‰ä¸€è¡Œæœ‰é‡å æ—¶ï¼Œ
+\TeX\ 在陈列公å¼ä¹‹åŽæ’入的竖直粘连的大å°ã€‚
+\PlainTeX\ 设定 |\belowdisplay!-skip| 等于 |12pt plus3pt minus9pt|。
+è§\knuth{第~188--189~页}中对此å‚数的更仔细的介ç»ã€‚
+\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 abovedisplayshortskip {\param{glue}}
+\explain
+此命令指定当陈列公å¼çš„起始点ä½äºŽå‰ä¸€è¡Œç»“尾处的å³è¾¹æ—¶ï¼Œ
+å³å®ƒåœ¨å¤–观上ä¸ä¼šä¸Žå‰ä¸€è¡Œæœ‰é‡å æ—¶ï¼Œ
+\TeX\ 在陈列公å¼ä¹‹å‰æ’入的竖直粘连的大å°ã€‚
+\PlainTeX\ 设定 |\abovedisplay!-shortskip| 等于 |0pt plus3pt|。
+è§\knuth{第~188--189~页}中对此å‚数的更仔细的介ç»ã€‚
+\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.
+\begindesc
+\cts belowdisplayshortskip {\param{glue}}
+\explain
+此命令指定当陈列公å¼çš„起始点ä½äºŽå‰ä¸€è¡Œç»“尾处的å³è¾¹æ—¶ï¼Œ
+å³å®ƒåœ¨å¤–观上ä¸ä¼šä¸Žå‰ä¸€è¡Œæœ‰é‡å æ—¶ï¼Œ
+\TeX\ 在陈列公å¼ä¹‹åŽæ’入的竖直粘连的大å°ã€‚
+\PlainTeX\ 设定 |\belowdisplay!-shortskip| 等于 |7pt plus3pt minus4pt|。
+è§\knuth{第~188--189~页}中对此å‚数的更仔细的介ç»ã€‚
+
+%\eix^^{displays//spacing parameters for}
+%\enddesc
+\eix^^{陈列公å¼//陈列公å¼çš„é—´éš”å‚æ•°}
+\enddesc
+
+
+%==========================================================================
+\subsection {其他的数学间隔å‚æ•°}
+
+%\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 mathsurround {\param{dimen}}
+\explain
+æ­¤å‚数指定 \TeX\ 在文内数学公å¼ï¼ˆå³æ”¾åœ¨ä¸¤ä¸ª|$|之间的公å¼ï¼‰ä¸¤è¾¹æ’入的间隔的大å°ã€‚
+è§\knuth{第~162~页}对此行为的进一步解释。
+\PlainTeX\ 设定 |\mathsurround| 为 |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 nulldelimiterspace {\param{dimen}}
+\explain
+^^{定界符//空定界符的间隔}
+æ­¤å‚数指定空\minref{定界符}生æˆçš„间隔的大å°ã€‚
+\PlainTeX\ 设定 |\null!-delimiterspace| 等于 |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
+\begindesc
+\cts scriptspace {\param{dimen}}
+\explain
+æ­¤å‚数指定 \TeX\ 在上标或下标å‰åŽæ’入的间隔的大å°ã€‚
+上标或下标之åŽçš„ |\nonscript| 命令(\xref\nonscript )^^|\nonscript|
+å¯ä»¥å–消此间隔。
+\PlainTeX\ 设定 |\script!-space| 等于 |0.5pt|。
+\enddesc
+
+
+%==========================================================================
+%\section {Categorizing math constructs}
+\section {分类数学结构}
+
+%\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.
+\begindesc
+\makecolumns 7/2:
+\cts mathord {}
+\cts mathop {}
+\cts mathbin {}
+\cts mathrel {}
+\cts mathopen {}
+\cts mathclose {}
+\cts mathpunct {}
+\explain
+这些命令让 \TeX\ 把éšåŽçš„结构归入指定的^{ç±»}(è§\knuth{第~154~页}对类的定义)。
+它们按照类编å·çš„大å°é¡ºåºæŽ’列,从 $0$ 到 $6$。
+它们主è¦ç”¨äºŽæŒ‰ç…§æŒ‡å®šçš„类调整该结构两边的间隔大å°ã€‚
+%\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
+\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
+\begindesc
+\cts mathinner {}
+\explain
+此命令让 \TeX\ å°†éšåŽçš„结构视为``内部公å¼'',比如分å¼ï¼Œå¹¶æ®æ­¤è°ƒæ•´é—´éš”。
+它与上é¢åˆšæ到的类命令类似。
+\enddesc
+
+%==========================================================================
+%\section {Special actions for math formulas}
+\section {特殊处ç†æ•°å­¦å…¬å¼}
+
+%\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
+\begindesc
+\cts everymath {\param{token list}}
+\cts everydisplay {\param{token list}}
+\explain
+^^{陈列公å¼//作用到æ¯ä¸ªé™ˆåˆ—å…¬å¼}
+这两个命令分别指定 \TeX\ 在æ¯ä¸ªæ–‡å†…å…¬å¼æˆ–陈列公å¼å¼€å¤´æ’入的\minref{è®°å·}列。
+ä½ å¯ä»¥åˆ©ç”¨ |\everymath| 或 |\everydisplay| 在æ¯ä¸ªæ•°å­¦å…¬å¼å¼€å¤´ä½œç‰¹æ®Šå¤„ç†ã€‚
+你务必清楚,若你需è¦åŒæ—¶å¤„ç†ä¸¤ç§å…¬å¼ï¼Œä½ å¿…é¡»\emph{åŒæ—¶}设定这两个å‚数。
+\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
+\enddescriptions
+\eix^^{æ•°å­¦}
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter
+\byebye
diff --git a/info/impatient/cn/modes.tex b/info/impatient/cn/modes.tex
new file mode 100644
index 0000000000..98be8c6895
--- /dev/null
+++ b/info/impatient/cn/modes.tex
@@ -0,0 +1,2595 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter {水平和竖直模å¼å‘½ä»¤}
+
+\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}.
+这一章介ç»æ°´å¹³å’Œç«–直模å¼ä¸‹å…·æœ‰å¯¹åº”或一致形å¼çš„命令。这些命令æ供盒å­ã€é—´éš”ã€æ ‡çº¿ã€æŒ‡å¼•çº¿ä»¥åŠé˜µåˆ—。有关本章中使用的惯例的说明,å‚è§\headcit{命令的æè¿°}{cmddesc}。
+
+\begindescriptions
+
+%==========================================================================
+%\section {Producing space}
+\section {产生间隔}
+
+%==========================================================================
+
+%\subsection {Fixed-width horizontal space}
+\subsection {固定宽度水平间隔}
+
+%\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}
+\begindesc
+\bix^^{间隔//产生间隔}
+\bix^^{水平间隔}
+\cts thinspace {}
+\explain
+该命令产生一个正的\minref{紧排},它的宽度是 1/6 em(\xref{dimdefs}),也就是说,它使得 \TeX\ å‘å³ç§»åŠ¨ä¸€ä¸ªç›¸åº”çš„è·ç¦»ã€‚例如,当你需è¦åµŒå¥—引用,并希望将ä¸åŒå±‚次的引å·åˆ†å¼€æ—¶ï¼Œå®ƒä¾¿éžå¸¸æœ‰ç”¨ã€‚\TeX\ ä¸ä¼šåœ¨ |\thinspace| 处断行。\minrefs{line break}
+
+\example
+``\thinspace`一个引用。'\thinspace''\par
+24,\thinspace 29--31,\thinspace 45,\thinspace 102
+|
+\produces
+%``\thinspace`A quote.'\thinspace''\par
+``\thinspace`一个引用。'\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}
+该命令产生一个负的\minref{紧排},它的宽度是 1/6 em(\xref{dimdefs}),也就是说,它使得 \TeX\ å‘左移动一个相应的è·ç¦»ã€‚当需è¦å°†ä¸¤ä¸ªé—´éš”ç¨è¿œçš„字符é è¿‘一些时便éžå¸¸æœ‰ç”¨ã€‚\TeX\ ä¸ä¼šåœ¨ |\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|.
+该命令产生一个宽度为 1 ^{en} çš„\minref{紧排}(1 em 的一åŠï¼Œå‚è§ \xrefpg{dimdefs})。\TeX\ ä¸ä¼šåœ¨ |\enspace| 处断行,除éžç´§æŽ¥å…¶åŽçš„是粘连。在符å·åˆ—表中,符å·ä¸Žå…¶åŽçš„文字通常由 |\enspace| æ¥åˆ†éš”。
+
+\example
+å¼•ç† 1.\enspace 这里有一åªç™½å…”。
+|
+\produces
+%Lemma 1.\enspace There exists a white rabbit.
+å¼•ç† 1.\enspace 这里有一åªç™½å…”。
+\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:
+这里的æ¯ä¸ªå‘½ä»¤éƒ½äº§ç”Ÿä¸€ä¸ªæ—¢ä¸èƒ½ä¼¸å±•ä¹Ÿä¸èƒ½æ”¶ç¼©çš„æ°´å¹³\minref{粘连}。\TeX\ ä¸èƒ½åœ¨è¿™äº›ç²˜è¿žå¤„断行。对于 \plainTeX\ 的默认字体 |cmr10| æ¥è¯´ï¼Œè¿™äº›ç²˜è¿žçš„宽度(与当å‰å­—体有关)如下:
+\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
+{\def\l#1{\hfil$#1$\thinspace em}
+\tabskip 3pc \halign{#&#&\hfil#\hfil\cr
+{\it 命令}&{\it é—´è·}&{\it 图示}\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^^{水平间隔}
+\enddesc
+
+%==========================================================================
+%\subsection {Fixed-length vertical space}
+\subsection {固定长度竖直间隔}
+
+%\begindesc
+%\bix^^{vertical space}
+%\easy\cts smallskip {}
+%\cts medskip {}
+%\cts bigskip {}
+%\explain
+%These commands produce successively larger
+%amounts of vertical space:
+\begindesc
+\bix^^{ç«–ç›´é—´éš”}
+\easy\cts smallskip {}
+\cts medskip {}
+\cts bigskip {}
+\explain
+这些命令å¯ä»¥äº§ç”Ÿè¿žç»­è¾ƒå¤§çš„竖直间隔:
+\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.
+|\smallskip| 产生 $3$ 点的竖直间隔,并å¯ä»¥ä¼¸å±•æˆ–收缩 1 点。
+|\med!-skip| 相当于两个 |\smallskip|,而 |\bigskip| 相当于两个 |\medskip|。
+
+%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}
+这些å‚数用于确定由 |\small!-skip|ã€|\med!-skip| å’Œ |\big!-skip| 命令产生的粘连的é‡ã€‚
+通过更改这些å‚数,你å¯ä»¥æ”¹å˜å‘½ä»¤çš„效果。(对于 \plainTeX )它们相应的默认值是 1/4 ã€1/2 ä»¥åŠ 1 è¡Œè·ã€‚
+我们建议你ä¿æŒè¿™ä¸ªæ¯”例,无论何时,你å¯ä»¥é€šè¿‡ä¿®æ”¹ |\baselineskip|(\xref\baselineskip )æ¥ä¿®æ”¹å‚数值。
+^^|\baselineskip//和 {\tt\\smallskipamount} 等|
+\eix^^{ç«–ç›´é—´éš”}
+
+\enddesc
+
+%==========================================================================
+%\subsection {Variable-size space}
+\subsection {å¯å˜å°ºå¯¸é—´éš”}
+
+%\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.
+\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$>}
+^^{ç«–ç›´é—´è·}^^{竖直粘连}
+^^{水平间è·}^^{水平粘连}
+\bix^^{水平间隔}
+\bix^^{ç«–ç›´é—´éš”}
+\explain
+这些命令å¯ä»¥åˆ†åˆ«äº§ç”Ÿæ°´å¹³çš„和竖直的粘连。
+在最简å•ä»¥åŠæœ€å¸¸è§çš„情况下,å³å½“åªæœ‰ \<dimen$_1$> 存在时,
+|\hskip| å‘å³ç§»åŠ¨ \<dimen$_1$>,而 |\vskip| å‘页é¢ä¸‹æ–¹ç§»åŠ¨ \<dimen$_1$>。
+在一般情况下,这些命令产生一个\minref{粘连},其自然尺寸为 \<dimen$_1$>,
+å¯ä¼¸é•¿é‡ä¸º \<dimen$_2$>,å¯æ”¶ç¼©é‡ä¸º \<dimen$_3$>。
+命令中的 |plus| \<dimen$_2$> 或 |minus |\<dimen$_3$>,或两者都å¯ä»¥çœç•¥ã€‚
+如果两者都需è¦ï¼Œåˆ™ |plus| 必须出现在 |minus| 之å‰ã€‚
+被çœç•¥çš„å˜é‡å–值为零。任何 \<dimen> 都å¯ä»¥å–负值。
+
+%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.
+在数学模å¼ä¸‹ï¼Œä½ å¯ä»¥ä½¿ç”¨ |\hskip|,
+但ä¸èƒ½ä½¿ç”¨ |mu|\seeconcept{æ•°å­¦å•ä½}作为任何尺寸的å•ä½ã€‚
+如果你希望使用 |mu| 作为å•ä½ï¼Œå¯ä»¥ä½¿ç”¨ |\mskip|(\xref\mskip )代替之。
+
+\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% 仅为显示 \vskip 的效果。
+ \hbox{一}\vskip 0pc plus 1pc \hbox{二}
+ \vskip .5pc \hbox{三}}
+|
+\produces
+\smallskip
+\vbox to 4pc{\offinterlineskip% Just show effects of \vskip.
+% \hbox{one}\vskip 0pc plus 1pc \hbox{two}
+% \vskip .5pc \hbox{three}}
+ \hbox{一}\vskip 0pc plus 1pc \hbox{二}
+ \vskip .5pc \hbox{三}}
+\endexample
+\enddesc
+
+\begindesc
+\cts hglue {\<glue>}
+\cts vglue {\<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.
+|\hglue| 命令生æˆæ°´å¹³çš„\minref{粘连},它ä¸ä¼šåœ¨æ–­è¡Œå¤„消失;|\vglue| 命令生æˆç«–ç›´çš„\minref{粘连},它ä¸ä¼šåœ¨åˆ†é¡µå¤„消失。除此以外,这些命令与 |\hskip| å’Œ |\vskip| 相似。你å¯ä»¥ä½¿ç”¨ |\vglue| 在文档第一页的标题上部等页é¢é¡¶éƒ¨äº§ç”Ÿç©ºç™½é—´éš”,但就此目的而言,éšåŽçš„ ^|\topglue| 通常是更好的选择。
+\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|.
+\margin{加入的命令;新近加入到 \TeX}
+该命令
+\footnote{|\topglue| 是在 \TeX\ 3.0 中引入的,
+比其它由^{\newTeX}(\xref{newtex})引入的增强特性ç¨æ™šã€‚
+在 \texbook çš„ \emph{18th\/} 版中第一次得到æ述。}
+å¯ä»¥ç²¾ç¡®åœ°äº§ç”Ÿä»Žé¡µé¢é¡¶éƒ¨è‡³è¯¥é¡µä¸Šç¬¬ä¸€ä¸ªç›’å­é¡¶éƒ¨çš„间隔。
+å¯ä»¥è®¤ä¸ºé¡µé¢é¡¶éƒ¨ä½äºŽé¡µé¢ç¬¬ä¸€è¡Œä¹‹ä¸Šçš„一行无形文字的基线处。
+更加准确地,它在 |\hoffset| å’Œ |\voffset| 确定的原点之上,且间è·ç­‰äºŽ |\topskip|。
+
+%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.
+由于 \TeX\ 通常以éžå¸¸å¤æ‚çš„æ–¹å¼è°ƒæ•´ç”± |\topskip| 产生的粘连,所以这个命令是éžå¸¸æœ‰ç”¨çš„。
+通过使用 |\topglue|,你能够控制页é¢ä¸Šç¬¬ä¸€ä¸ªç›’å­çš„ä½ç½®ï¼Œè€Œä¸å¿…担心那些å¤æ‚的调整。
+
+\enddesc
+
+\begindesc
+\cts kern {\<dimen>}
+\explain
+%The effect of this command depends on the mode that \TeX\ is in when
+%it encounters it:
+该命令产生的效果å–决于 \TeX\ é‡åˆ°å®ƒæ—¶æ‰€å¤„的模å¼ï¼š
+\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 在水平模å¼ä¸‹ï¼Œ\TeX\ å‘å³ï¼ˆæ­£çš„紧排)或å‘左(负的紧排)移动。
+
+%\li In a vertical mode, \TeX\ moves its position down the page (for a positive
+%kern) or up the page (for a negative kern).
+\li 在竖直模å¼ä¸‹ï¼Œ\TeX\ å‘页é¢ä¸‹æ–¹ï¼ˆæ­£çš„紧排)或页é¢ä¸Šæ–¹ï¼ˆè´Ÿçš„紧排)移动。
+
+\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.
+因此,正的紧排产生空白的间隔,而负的紧排使得 \TeX\ 倒退到已ç»å­˜åœ¨çš„东西上。
+在 \TeX 中,正的紧排将两个字æ¯\emph{分开},而ä¸æ˜¯ä½¿å®ƒä»¬æ›´è¿‘一些。
+^{紧排}的这一设计与一些计算化排版系统是ä¸åŒçš„。
+
+%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|.
+紧排与\minref{粘连}相似,ä¸åŒçš„是 (a)~紧排ä¸èƒ½è¢«ä¼¸å±•æˆ–收缩;
+(b)~如果紧排åŽç´§æŽ¥ç²˜è¿žï¼Œå¹¶ä¸”ä¸æ˜¯æ•°å­¦å…¬å¼çš„一部分时,\TeX\ ä¸èƒ½åœ¨ç´§æŽ’处断行或分页。
+如果 \TeX\ å‘现紧排ä½äºŽä¸€è¡Œæˆ–一页的结尾,该紧排将会被忽略。
+如果你希望得到ä¸ä¼šæ¶ˆå¤±çš„紧排的效果,使用 ^|\hglue| 或 ^|\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}
+ä½ å¯ä»¥åœ¨æ•°å­¦æ¨¡å¼ä¸­ä½¿ç”¨ |\kern|,但你ä¸èƒ½ä½¿ç”¨ |mu| 作为 \<dimen> çš„å•ä½\seeconcept{æ•°å­¦å•ä½}。
+如果你希望使用 |mu| 作为å•ä½ï¼Œå¯ä»¥ä½¿ç”¨ |\mkern| (\xref\mkern )代替之。
+^^{断行//断行处的紧排}
+^^{分页//分页处的紧排}
+
+\example
+\centerline{$\Downarrow$}\kern 3pt % 竖直的紧排
+\centerline{$\Longrightarrow$\kern 6pt % 水平的紧排
+ {\bf ç•™æ„我的警示ï¼ï¼}\kern 6pt % å¦ä¸€æ°´å¹³çš„紧排
+ $\Longleftarrow$}
+\kern 3pt % å¦ä¸€ç«–直的紧排
+\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
+ {\bf ç•™æ„我的警示ï¼}\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.
+\begindesc
+\makecolumns 4/2:
+\cts hfil {}
+\cts hfill {}
+\cts vfil {}
+\cts vfill {}
+\explain
+\bix^^{粘连//å¯æ— é™ä¼¸å±•çš„粘连}
+这些命令产生å¯æ— é™ä¼¸å±•çš„水平或竖直的粘连,它们将å–代任何存在的有é™ä¼¸å±•ã€‚|\hfil| å’Œ |\hfill| 产生水平的粘连,而 |\vfil| å’Œ |\vfill| 产生竖直的粘连。
+
+%|\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.
+%|\hfill| æ— é™åœ°å¤§äºŽ |\hfil|。如果 |\hfill| å’Œ |\hfil| 出现在一åŒä¸€ä¸ª\minref{ç›’å­}里,|\hfill| å°†å æ®æ‰€æœ‰å¯ä»¥èŽ·å¾—çš„é¢å¤–间隔,而 |\hfil| 的效应将被忽略。而 |\hfill| å¯ä»¥è¢« |\hskip 0pt plus 1filll| å–代。由 |\hfil| å’Œ |\hfill| 产生的粘连ä¸èƒ½è¢«åŽ‹ç¼©ã€‚
+
+%The behavior of |\vfil| and |\vfill| is analogous.
+|\vfil| å’Œ |\vfill| 有ç€ç±»ä¼¼çš„行为。
+
+\example
+\hbox to 2in{å·¦\hfil 中 \hfil å³}
+|
+\produces
+%\hbox to 2in{Left\hfil Middle \hfil Right}
+\hbox to 2in{å·¦\hfil 中 \hfil å³}
+
+\doruler{\8\8}2{in}
+\nextexample
+\hbox to 2in{å·¦\hfil 中 \hfill å³}
+|
+\produces
+%\hbox to 2in{Left\hfil Middle \hfill Right}
+\hbox to 2in{å·¦\hfil 中 \hfill å³}
+
+\doruler{\8\8}2{in}
+\nextexample
+\leftline{%
+\vbox to 4pc{%
+ \hbox{上}\vfil\hbox{中}\vfil \hbox{下}}\quad
+\vbox to 4pc{%
+ \hbox{上}\vfil\hbox{中}\vfill\hbox{下}}}
+|
+\produces
+\smallskip
+\leftline{%
+\vbox to 4pc{%
+ %\hbox{Top}\vfil\hbox{Middle}\vfil \hbox{Bottom}}\quad
+ \hbox{上}\vfil\hbox{中}\vfil \hbox{下}}\quad
+\vbox to 4pc{%
+ %\hbox{Top}\vfil\hbox{Middle}\vfill\hbox{Bottom}}}
+ \hbox{上}\vfil\hbox{中}\vfill\hbox{下}}}
+\endexample
+
+%\eix^^{glue//infinitely stretchable}
+%\enddesc
+\eix^^{粘连//å¯æ— é™ä¼¸å±•çš„粘连}
+\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|).
+这些命令产生水平和竖直的å¯æ— é™ä¼¸å±•å’Œæ”¶ç¼©çš„粘连。
+粘连å¯ä»¥æ”¶ç¼©è‡³è´Ÿçš„è·ç¦»ï¼Œäº§ç”Ÿçš„效果是%
+(对于 |\hss| 而言)沿一行å‘左移动或(对于 |\vss| 而言)å‘页é¢é¡¶éƒ¨ç§»åŠ¨ã€‚
+
+\example
+\line{正文文本\hfil\hbox to 0pt{页边空白\hss}}
+% `页边空白\hss' 收缩到宽度为零的水平盒å­ä¸­ã€‚
+|
+\produces
+%\line{text\hfil\hbox to 0pt{margin\hss}}
+\line{正文文本\hfil\hbox to 0pt{页边空白\hss}}
+\nextexample
+\vbox to 1pc{\hrule width 6pc % Top of box.
+ \hbox{1} \vskip 1pc\hbox to 2pc{\hfil 2}
+ % \vss 消除了由 \vskip 产生的é¢å¤–é—´è·ã€‚
+ \vss \hbox to 3pc{\hfil 3}
+ \hrule width 6pc}% ç›’å­çš„底部
+|
+\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}.
+\begindesc
+\cts hfilneg {}
+\cts vfilneg {}
+\explain
+^^{粘连//负粘连}
+这些命令å¯ä»¥æ¶ˆé™¤å…¶å‰æŽ¥çš„ |\hfil| 或 |\vfil| 产生的效果。当 |\hfil| å’Œ |\vfil| 产生正的无é™å¯ä¼¸å±•çš„粘连时,|\hfilneg| å’Œ |\vfilneg| 产生负的无é™å¯ä¼¸å±•ç²˜è¿žã€‚(因此,$n$ |\hfilneg| 消除 $n$ ^|\hfil| 产生的效果,对于 |\vfilneg| 也是相似的。)|\hfilneg| å’Œ |\vfilneg| 主è¦çš„用途是抵消由\minref{å®} 引入的 |\hfil| 或 |\vfil| 产生的效果。
+
+%|\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|.
+如果它们是一个盒å­ä¸­ä»…有的å¯æ— é™ä¼¸å±•çš„粘连,|\hfilneg| å’Œ |\vfilneg| 则具有奇异的特性,å³å®ƒä»¬äº§ç”Ÿä¸Ž |\hfil| å’Œ |\vfil| 完全一致的效果。
+
+\example
+\leftline{\hfil ä½äºŽå³ç«¯\hfilneg}
+% 消除了 \leftline 在其å‚æ•°å³ä¾§äº§ç”Ÿçš„ \hfil。
+|
+\produces
+%\leftline{\hfil on the right \hfilneg}
+\leftline{\hfil ä½äºŽå³ç«¯ \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}
+\see |\hbadness| 和 |\vbadness|(\xref \vbadness ),
+|\hfuzz| å’Œ |\vfuzz|(\xref \vfuzz ),åŠ\conceptcit{指引线}。
+\eix^^{间隔//产生间隔}
+\eix^^{水平间隔}
+\eix^^{ç«–ç›´é—´éš”}
+
+%==========================================================================
+%\section {Manipulating boxes}
+\section {æ“作盒å­}
+
+%==========================================================================
+%\subsection {Constructing hboxes and vboxes}
+\subsection {构造 hbox 和 vbox}
+
+%\begindesc
+%\bix^^{box commands}
+%^^{hboxes//constructing with \b\tt\\hbox\e}
+\begindesc
+\bix^^{ç›’å­å‘½ä»¤}
+^^{水平盒å­//用 \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(水平\minref{ç›’å­})以容纳 \<horizontal mode material>。
+\<horizontal mode material> 两侧的大括å·å®šä¹‰ä¸€ä¸ªç¼–组。
+\TeX\ ä¸ä¼šå¯¹ \<horizontal mode material> 断行,
+因为当其组装盒å­æ—¶å®ƒå¤„于å—é™æ°´å¹³æ¨¡å¼ä¸‹ã€‚一旦盒å­ç”ŸæˆåŽï¼Œ\TeX\ ä¸ä¼šæ”¹å˜å…¶å¤§å°ã€‚
+
+%|\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.
+当你希望将一些文字全部放在一行上时,|\hbox| 是有用的。
+如果你所用的 |\hbox| 使得 \TeX\ ä¸èƒ½ä»¥ä¸€ç§å¯ä»¥æŽ¥å—çš„æ–¹å¼æ–­è¡Œæ—¶ï¼Œ
+\TeX\ 会给出 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
+hbox 的宽度å–决于 |\hbox| çš„å‚数:
+\ulist\compact
+\li 如果你åªè®¾å®šäº† \<horizontal mode material>,hbox 将具有å‚数本身的\minref{宽度}。
+\li 如果你设定了 |to| \<dimen>,则 hbox 的宽度将是 \<dimen>。
+\li 如果你设定了 |spread| \<dimen>,则 hbox 的宽度将是å‚数本身的宽度å†åŠ ä¸Š \<dimen>,也就是说,hbox 将伸展 \<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.
+当盒å­ä¸­å†…容的宽度没有盒å­å®½ï¼Œéœ€è¦ä½¿ç”¨ç©ºç™½é—´éš”æ¥å¡«å…… hbox 时,^|\hfil| 命令(\xref\hfil )是éžå¸¸æœ‰ç”¨çš„。
+\example
+\hbox{ugly suburban sprawl}
+\hbox to 2in{ugly \hfil suburban \hfil sprawl}
+\hbox spread 1in {ugly \hfil suburban \hfil sprawl}
+% 在上é¢ä¸¤è¡Œä¸­ï¼Œå¦‚果去掉 \hfil,将会得到 `underfull hbox' 警告。
+|
+\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.
+\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
+^^{水平盒å­//用 \b\tt\\hbox\e 构造}
+这些命令产生一个 \minref{vbox}(竖直\minref{ç›’å­})以容纳 \<vertical mode material>。
+\<vertical mode material> 两侧的大括å·å®šä¹‰ä¸€ä¸ªç¼–组。
+当 \TeX\ 组装盒å­æ—¶å®ƒå¤„于内部竖直模å¼ä¸‹ã€‚一旦盒å­ç”ŸæˆåŽï¼Œ\TeX\ ä¸ä¼šæ”¹å˜å…¶å¤§å°ã€‚
+
+%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| å’Œ |\vbox| 之间的ä¸åŒç‚¹åœ¨äºŽ \TeX\ 放置已构æˆçš„ vbox 的基准点的ä½ç½®ã€‚
+通常情况下,由 |\vtop| 获得的基准点ä½äºŽæˆ–接近于已构æˆçš„ vbox 的顶部;
+而 |\vbox| 获得的基准点ä½äºŽæˆ–接近于已构æˆçš„ vbox 的底部。
+因此,一行全部由 |\vtop| æž„æˆçš„ vbox,其顶部将会近似在一æ¡çº¿ä¸Šï¼›
+相应地,一行全部由 |\vbox| æž„æˆçš„ vbox,其底部将会近似在一æ¡çº¿ä¸Šã€‚
+
+%|\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.
+当你希望将一些文字放在å•ç‹¬çš„一页上时,|\vtop| å’Œ |\vbox| 是有用的。%
+(为了这个目的,它通常ä¸åœ¨ä¹Žä½ ä½¿ç”¨çš„命令。)%
+如果你使用这些命令使得 \TeX\ ä¸èƒ½ä»¥ä¸€ç§å¯ä»¥æŽ¥å—çš„æ–¹å¼åˆ†é¡µæ—¶ï¼Œ
+\TeX\ 会在 |\output| 处于活动的情况下,给出 vbox 过满或ä¸è¶³çš„警告。
+
+%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.
+vbox 的高度å–决于 |\vtop| 或 |\vbox| çš„å‚数。对于 |\vbox|,\TeX\ 采用如下方法确定其高度:
+\ulist\compact
+\li 如果你åªè®¾å®š \<vertical mode material>,vbox 将具有å‚数本身的高度。
+\li 如果你设定 |to| \<dimen>,vbox 的高度将是 \<dimen>。
+\li 如果你设定了 |spread| \<dimen>,则 vbox 的高度将是å‚数本身的高度å†åŠ ä¸Š \<dimen>,
+也就是说,vbox 将在竖直方å‘上伸展 \<dimen>。
+\endulist
+\noindent
+对于 |\vtop|,\TeX\ 采用 |\vbox| 一样的规则æ¥æž„造盒å­ï¼Œ
+然åŽä»¥ä¸‹é¢æ述的方法在高度和深度之间分é…ç«–ç›´æ–¹å‘上的扩展。
+
+%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
+通常,构造的 vbox 的宽度是其内部最宽项目的宽度。
+\footnote{更准确地说,是从基准点至构造的 vbox 最å³ä¾§ä¹‹é—´çš„è·ç¦»ã€‚
+因此,如果你使用 ^|\moveright| 或(负数è·ç¦»çš„)^|\moveleft| å‘å³ç§»åŠ¨ä»»ä½•é¡¹ç›®ï¼Œ
+那么构造的 vbox 则å¯èƒ½æ›´å®½ã€‚}
+在高度与深度间分é…竖直扩展的规则更加å¤æ‚:
+\ulist
+\li 对于 |\vtop|,如果第一个项目是一个盒å­æˆ–标线,则其高度是其第一个项目的高度。
+å¦åˆ™ï¼Œå…¶é«˜åº¦æ˜¯é›¶ã€‚深度是å‡åŽ»é«˜åº¦åŽçš„竖直扩展。
+\li 对于 |\vbox|,如果最åŽä¸€ä¸ªé¡¹ç›®æ˜¯ä¸€ä¸ªç›’å­æˆ–标线,则其深度是其最åŽä¸€ä¸ªé¡¹ç›®çš„深度。
+å¦åˆ™æµ“度是零。高度是å‡åŽ»æ·±åº¦åŽçš„竖直扩展。
+\footnote{实际上,规则å¯ä»¥æ›´åŠ å¤æ‚。å‡å®šåœ¨æ·±åº¦ç¡®å®šåŽï¼Œä½¿ç”¨ç»™å‡ºçš„两æ¡è§„则,
+则深度将会大于 ^|\boxmaxdepth|。 éšåŽï¼Œæ·±åº¦å°†è¢«ç¼©å°è‡³ |\boxmaxdepth|,高度也相应地被调整。}
+\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.
+当盒å­ä¸­å†…容的高度没有盒å­ç«–直伸展高,
+需è¦ä½¿ç”¨ç©ºç™½é—´éš”æ¥å¡«å…… vbox ^^|\vfil//å¡«å……ç«–ç›´ç›’å­|时,
+^|\vfil| 命令(\xref\vfil )是éžå¸¸æœ‰ç”¨çš„。
+\example
+\hbox{\hsize = 10pc \raggedright\parindent = 1em
+\vtop{在这个例å­ä¸­ï¼Œæˆ‘们将看到如何使用 vbox 产生åŒæ çš„效果。
+æ¯ä¸ª vbox 都包å«ä¸¤ä¸ªæ®µè½ï¼Œé™¤äº†è®¾ç½®ä¸ºå·¦å¯¹é½ä»¥å¤–å‡ä¾ç…§ \TeX
+通常的规则进行排版。\par
+这实际上并ä¸æ˜¯èŽ·å¾—真正åŒæ çš„最好的方法,因为两æ }
+\hskip 2pc
+\vtop{\noindent
+并ä¸å¯¹ç§°ï¼Œè€Œä¸”我们无法自动选择第一æ åœ¨ä½•å¤„断开,
+甚至ä¸èƒ½ç¡®å®šç¬¬ä¸€æ çš„最åŽä¸€è¡Œã€‚\par
+然而,将行文放在 vbox 中是一个将文本放在页é¢ä¸Š
+你希望的ä½ç½®ä¸Šçš„有用的技巧。
+}}
+|
+\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.}}
+\vtop{在这个例å­ä¸­ï¼Œæˆ‘们将看到如何使用 vbox 产生åŒæ çš„效果。
+æ¯ä¸ª vbox 都包å«ä¸¤ä¸ªæ®µè½ï¼Œé™¤äº†è®¾ç½®ä¸ºå·¦å¯¹é½ä»¥å¤–å‡ä¾ç…§ \TeX
+通常的规则进行排版。\par
+这实际上并ä¸æ˜¯èŽ·å¾—真正åŒæ çš„最好的方法,因为两æ }
+\hskip 2pc
+\vtop{\noindent
+并ä¸å¯¹ç§°ï¼Œè€Œä¸”我们无法自动选择第一æ åœ¨ä½•å¤„断开,
+甚至ä¸èƒ½ç¡®å®šç¬¬ä¸€æ çš„最åŽä¸€è¡Œã€‚\par
+然而,将行文放在 vbox 中是一个将文本放在页é¢ä¸Š
+你希望的ä½ç½®ä¸Šçš„有用的技巧。
+}}
+\nextexample
+\hbox{\hsize = 1in \raggedright\parindent = 0pt
+\vtop to .75in{\hrule 这个盒å­çš„深度是 .75in。 \vfil\hrule}
+\qquad
+\vtop{\hrule 这个盒å­å…·ä½“其本身的深度。 \vfil\hrule}
+\qquad
+\vtop spread .2in{\hrule 这个盒å­çš„深度比其自身的深度多 .2in。\vfil\hrule}}
+|
+\produces
+\hbox{\hsize = 1in \raggedright\parindent=0pt
+%\vtop to .75in{\hrule This box is .75in deep. \vfil\hrule}
+\vtop to .75in{\hrule 这个盒å­çš„深度是 .75in。 \vfil\hrule}
+\qquad
+%\vtop{\hrule This box is at its natural depth. \vfil\hrule}
+\vtop{\hrule 这个盒å­å…·ä½“其本身的深度。 \vfil\hrule}
+\qquad
+%\vtop spread .2in{\hrule This box is .2in deeper than
+% its natural depth.\vfil\hrule}}
+\vtop spread .2in{\hrule 这个盒å­çš„深度比其自身的深度多 .2in。\vfil\hrule}}
+\nextexample
+% 显示 \vbox 是如何底部对é½ï¼Œè€Œéžé¡¶éƒ¨å¯¹é½çš„。
+\hbox{\hsize = 1in \raggedright
+\vbox to .5in{\hrule 这个盒å­çš„深度是 .5in。\vfil\hrule}
+\qquad
+\vbox to .75in{\hrule 这个盒å­çš„深度是 .75in。\vfil\hrule}}
+|
+\produces
+\hbox{\hsize = 1in \raggedright
+%\vbox to .5in{\hrule This box is .5in deep.\vfil\hrule}
+\vbox to .5in{\hrule 这个盒å­çš„深度是 .5in。\vfil\hrule}
+\qquad
+%\vbox to .75in{\hrule This box is .75in deep.\vfil\hrule}}
+\vbox to .75in{\hrule 这个盒å­çš„深度是 .75in。\vfil\hrule}}
+\vskip 16pt % to avoid running into the next command description
+\endexample
+\enddesc
+
+\begindesc
+%\margin{Two commands interchanged here.}
+\margin{å¯äº¤æ¢çš„两个命令}
+\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.
+这个å‚数包å«çš„是一个尺寸 $D$。如果盒å­çš„深度超过 $D$,\TeX\ å°†ä¸ä¼šæž„造这个盒å­ã€‚
+如果你生æˆä¸€ä¸ªç›’å­ï¼Œå…¶æ·±åº¦ $d$ 大于 $D$,\TeX\ 将超出的深度传递给盒å­çš„高度,
+å³é«˜æ•ˆåœ°å°†ç›’å­çš„\minref{基准点}å‘下移动 $d-D$。如果你将 |\boxmaxdepth| 设为零,
+\TeX\ 会将盒å­å‘上排一列,以便它们的底线都ä½äºŽåŒä¸€ä¸ªæ°´å¹³çº¿ä¸Šã€‚
+\PlainTeX\ 将 |\boxmaxdepth| 设为 |\maxdimen|\ctsref{\maxdimen},
+因此,|\boxmaxdepth| ä¸ä¼šå½±å“ä½ çš„ç›’å­ï¼Œé™¤éžä½ æœ‰æ„改动它。
+\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.
+这个命令将 \<argument> 放入到一个 \minref{hbox},并在其下划线,而ä¸è€ƒè™‘任何çªå‡ºåˆ°ç›’å­çš„\minref{基线}以下的东西。
+\example
+\underbar{为什么ä¸å­¦ä¹  \TeX?}
+|
+\produces
+%\underbar{为什么ä¸å­¦ä¹  \TeX?}
+\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.
+这些å‚数包å«çš„是记å·åˆ—表。\TeX\ 会在开始构造æ¯ä¸ª \minref{hbox} 或 \minref{vbox} 时对其进行扩展。æ¥è‡ªäºŽæ‰©å±•çš„任何项目éšåŽæˆä¸ºç›’å­çš„项目列表的开始。这些记å·åˆ—表默认是空的。
+\enddesc
+
+%==========================================================================
+%\subsection {Setting and retrieving the contents of boxes}
+\subsection {设置和获å–ç›’å­çš„内容}
+
+%\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$~|=|.
+\begindesc
+\bix^^{ç›’å­å¯„存器}
+%
+\cts setbox {\<register>\thinspace{\bt =}\thinspace\<box>}
+\cts box {\<register>}
+\explain
+^^{赋值//给盒å­èµ‹å€¼}
+这些命令分别设置和获å–ç¼–å·ä¸º \<register> çš„ç›’å­å¯„存器的内容。
+需è¦æ³¨æ„,设置盒å­å¯„存器与设置其它寄存器有细微的差别:
+你应该使用 |\setbox|$\,n$~|=|,而ä¸æ˜¯ |\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.
+\emph{使用这些命令获å–ç›’å­å¯„存器中的内容时,有清空其内容的副作用,所以盒å­å¯„存器将失效。}如果你ä¸å¸Œæœ›è¿™äº›å‘生,你å¯ä»¥ä½¿ç”¨ |\copy|(å‚è§åŽé¢çš„内容)æ¥èŽ·å–内容。如果你ä¸åœ¨ä¹Žä½ ä½¿ç”¨ä¹‹åŽçš„ç›’å­å¯„存器中的内容,你应该优先使用 |\box| 而ä¸æ˜¯ |\copy|,这样å¯ä»¥ä¸è‡´äºŽç”¨åºŸå¼ƒçš„ç›’å­æ¥æ¶ˆè€— \TeX\ 的内存。
+
+\example
+\setbox0 = \hbox{蘑è‡}
+\setbox1 = \vbox{\copy0\box0\box0}
+\box1
+|
+\produces
+%\setbox0 = \hbox{mushroom}
+\setbox0 = \hbox{蘑è‡}
+\setbox1 = \vbox{\copy0\box0\box0}
+\box1
+\endexample
+\enddesc
+
+%\begindesc
+%\cts copy {\<register>}
+%\explain
+%^^{boxes//copying}%\minrefs{box}
+%\minrefs{ç›’å­}
+%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.)
+\begindesc
+\cts copy {\<register>}
+\explain
+^^{ç›’å­//å¤åˆ¶ç›’å­}%\minrefs{box}
+\minrefs{ç›’å­}
+这个命令å¯ä»¥äº§ç”Ÿç›’å­å¯„存器 \<register> 的一个拷è´ã€‚当你希望获å–一个盒å­çš„内容,
+但åˆä¸å¸Œæœ›ç ´å其中的内容时是有用的。(使用 ^|\box| 获å–寄å–器内容会使寄存器失效。)
+\example
+\setbox0 = \hbox{美好}
+ç¥ä½ æ‹¥æœ‰ \copy0 \box0 \box0 的一天ï¼
+|
+\produces
+%\setbox0 = \hbox{good }
+%Have a \copy0 \box0 \box0 day!
+\setbox0 = \hbox{美好}
+ç¥ä½ æ‹¥æœ‰ \copy0 \box0 \box0 的一天ï¼
+\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.
+\begindesc
+\cts unhbox {\<register>}
+\cts unvbox {\<register>}
+^^{ç›’å­//æå–ç›’å­çš„内容}
+\explain
+这些命令å¯ä»¥ç»™å‡ºç›’å­å¯„存器 \<register> 容纳的列表,并且使盒å­å¯„存器失效。
+|\unhbox| é€‚ç”¨äºŽåŒ…å« hbox çš„ç›’å­å¯„存器,而 |\unvbox| é€‚ç”¨äºŽåŒ…å« vbox çš„ç›’å­å¯„存器。
+当你ä¸åœ¨ä¹Žä½ ä½¿ç”¨ä¹‹åŽçš„ç›’å­å¯„存器中的内容,你应该优先使用这些命令而ä¸æ˜¯ |\unhcopy| å’Œ |\unvcopy|,
+这样å¯ä»¥ä¸è‡´äºŽç”¨åºŸå¼ƒçš„ç›’å­æ¥æ¶ˆè€— \TeX\ 的内存。
+\example
+\setbox0=\hbox{素甲鱼深深地å¹æ¯ç€ï¼Œç”¨ä¸€åªæ‰‹èƒŒæŠ¹ç€çœ¼æ³ªã€‚}
+\setbox1=\hbox{他想说è¯ï¼Œå¯æ˜¯æœ‰å¥½ä¸€é˜µå­æ³£ä¸æˆå£°ã€‚}
+\unhbox0 \unhbox1
+% \box0 \box1 将并排设置两个 hbox
+% (并且输出难看的过满行)。
+\box1 % 什么也ä¸è¾“出。
+|
+\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. }
+\setbox0=\hbox{素甲鱼深深地å¹æ¯ç€ï¼Œç”¨ä¸€åªæ‰‹èƒŒæŠ¹ç€çœ¼æ³ªã€‚}
+\setbox1=\hbox{他想说è¯ï¼Œå¯æ˜¯æœ‰å¥½ä¸€é˜µå­æ³£ä¸æˆå£°ã€‚}
+\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}
+%\minrefs{ç›’å­}
+%\explain
+\begindesc
+\cts unhcopy {\<register>}
+\cts unvcopy {\<register>}
+^^{ç›’å­//æå–ç›’å­çš„内容}
+^^{ç›’å­//å¤åˆ¶ç›’å­}%\minrefs{box}
+\minrefs{ç›’å­}
+\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.
+这些命令å¯ä»¥ç»™å‡ºç›’å­å¯„存器 \<register> 容纳的列表,并且ä¿æŒå¯„存器的内容ä¸è¢«æ”¹å˜ã€‚
+|\unhcopy| é€‚ç”¨äºŽåŒ…å« hbox çš„ç›’å­å¯„存器,而 |\unvcopy| é€‚ç”¨äºŽåŒ…å« vbox çš„ç›’å­å¯„存器。
+\example
+\setbox0=\hbox{素甲鱼深深地å¹æ¯ç€ï¼Œç”¨ä¸€åªæ‰‹èƒŒæŠ¹ç€çœ¼æ³ªã€‚}
+\setbox1=\hbox{他想说è¯ï¼Œå¯æ˜¯æœ‰å¥½ä¸€é˜µå­æ³£ä¸æˆå£°ã€‚}
+\unhcopy0 \unhcopy1\par\noindent
+% \box0 \box1 将并排设置两个 hbox
+% (并且输出难看的过满行)。
+\box1 % 输出一个(ä¸èƒ½è¢«æ–­è¡Œï¼‰hbox。
+|
+\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. }
+\setbox0=\hbox{素甲鱼深深地å¹æ¯ç€ï¼Œç”¨ä¸€åªæ‰‹èƒŒæŠ¹ç€çœ¼æ³ªã€‚}
+\setbox1=\hbox{他想说è¯ï¼Œå¯æ˜¯æœ‰å¥½ä¸€é˜µå­æ³£ä¸æˆå£°ã€‚}
+\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}
+\see |\wd|, |\dp|, |\ht|(\xref\ht )。
+\eix^^{ç›’å­å¯„存器}
+
+%==========================================================================
+%\subsection {Shifting boxes}
+\subsection {移动盒å­}
+
+%\begindesc
+%\cts moveleft {\<dimen> \<box>}
+%\cts moveright {\<dimen> \<box>}
+%\bix^^{boxes//shifting}
+%%\minrefs{box}
+%\minrefs{ç›’å­}
+%\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}.
+\begindesc
+\cts moveleft {\<dimen> \<box>}
+\cts moveright {\<dimen> \<box>}
+\bix^^{ç›’å­//移动盒å­}
+%\minrefs{box}
+\minrefs{ç›’å­}
+\explain
+这些命令将 \<box> å‘左或å³ç§»åŠ¨ \<dimen>(这个数值å¯ä»¥æ˜¯è´Ÿçš„)。
+ä½ åªèƒ½å¯¹å­˜åœ¨äºŽ\minref{竖直列表} 中的盒å­ä½¿ç”¨ |\moveleft| å’Œ |\moveright|。
+\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}.
+这些命令将 \<box> å‘上或下移动 \<dimen>(这个数值å¯ä»¥æ˜¯è´Ÿçš„)。你åªèƒ½å¯¹å­˜åœ¨äºŽ\minref{水平列表} 中的盒å­ä½¿ç”¨ |\raise| å’Œ |\lower|。
+\example
+关于你鼻å­ä¸Šçš„ \lower 6pt \hbox{è‚¿å—},你觉得
+ \raise 6pt \hbox{沮丧}å—?
+|
+\produces
+%Are you feeling \lower 6pt \hbox{depressed} about the
+% \raise 6pt \hbox{bump} on your nose?
+关于你鼻å­ä¸Šçš„ \lower 6pt \hbox{è‚¿å—},你觉得
+ \raise 6pt \hbox{沮丧}å—?
+\endexample
+
+\eix^^{ç›’å­//移动盒å­}
+\enddesc
+
+%==========================================================================
+%\subsection {Dimensions of box registers}
+\subsection {ç›’å­å¯„存器的尺寸}
+
+%\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}.
+\begindesc
+\bix^^{ç›’å­å¯„存器}
+\bix^^{尺寸//ç›’å­å¯„存器的尺寸}
+\cts ht {\<register>\param{dimen}}
+\cts dp {\<register>\param{dimen}}
+\cts wd {\<register>\param{dimen}}
+\explain
+这些å‚数分别表示\minref{ç›’å­}\minref{寄存器} \<register> çš„^{高度}ã€^{深度}å’Œ^{宽度}。
+ä½ å¯ä»¥ä½¿ç”¨è¿™äº›å‘½ä»¤èŽ·å¾—一个盒å­çš„尺寸。你也å¯ä»¥æ”¹å˜ä¸€ä¸ªç›’å­çš„尺寸,但这是一个需è¦æŠ€å·§çš„事情;
+如果你希望æˆä¸ºå†’险者,你å¯ä»¥ä»Ž \knuth{pages~388--389} 中获得全部的技巧。
+\example
+\setbox0 = \vtop{\hbox{一个}\hbox{米黄色的}\hbox{å…”å­}}%
+那个盒å­çš„宽度是 \the\wd0,高度是 \the\ht0,
+深度是 \the\dp0。
+|
+\produces
+%\setbox0 = \vtop{\hbox{a}\hbox{beige}\hbox{bunny}}%
+%The box has width \the\wd0, height \the\ht0,
+%and depth \the\dp0.
+\setbox0 = \vtop{\hbox{一个}\hbox{米黄色的}\hbox{å…”å­}}%
+那个盒å­çš„宽度是 \the\wd0,高度是 \the\ht0,
+深度是 \the\dp0。
+%\endexample
+%\eix^^{box registers}
+%\eix^^{dimensions//of box registers}
+%\enddesc
+\endexample
+\eix^^{ç›’å­}
+\eix^^{尺寸//ç›’å­å¯„存器的尺寸}
+\enddesc
+
+%==========================================================================
+%\subsection {Struts, phantoms, and empty boxes}
+\subsection {支架ã€å¹»å½±å’Œç©ºç›’å­}
+
+\begindesc
+%\margin{This subsection is a merger of two previous subsections.
+%The commands have also been reordered.}
+\margin{这一å°èŠ‚是å‰ä¸¤ä¸ªå°èŠ‚çš„è”åˆä½“。相应的命令也被é‡æ–°æŽ’åºã€‚}
+%\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.
+\bix^^{支架}
+\cts strut {}
+\explain
+这个命令产生一个宽度为零的盒å­ï¼Œ
+ç›’å­çš„高度 (|8.5pt|) 和深度 (|3.5pt|) 与用 \plainTeX\ 的默认字体 |cmr10| 排出的典型的一行文字是一致的。
+当你使用 |\offinter!-lineskip| ^^|\offinterlineskip| 或类似的命令关闭 \TeX\ 的行间粘连,
+如你正在构建一个阵列时,该命令主è¦ç”¨äºŽå¼ºè¿«ä¸€è¡Œå…·æœ‰ç›¸åŒçš„高度。
+如果一行的自然高度过矮,你å¯ä»¥åœ¨è¡Œä¸­æ’入一个 |\strut| 使它回到标准的高度。
+支架将使得一行的高度和深度更大一些,但它ä¸ä¼šæ‰“å°å‡ºä»»ä½•ä¸œè¥¿ï¼Œæˆ–者消耗任何水平间隔。
+
+%If you're setting type in a font that's bigger or smaller than |cmr10|,
+%you should redefine |\strut| for that context.
+如果你正在使用一个大于或å°äºŽ |cmr10| 的字体排版,你应该根æ®æ‰€å¤„环境é‡æ–°å®šä¹‰ |\strut|。
+\example
+\noindent % 使我们处于水平模å¼ä¸‹ã€‚
+\offinterlineskip % 我们得到固有的间隔。
+% 下é¢è¿™äº› vbox 中的å¥å·åœ¨ç«–ç›´æ–¹å‘ä¸æ˜¯ç­‰é—´è·çš„。
+\vtop{\hbox{.}\hbox{.(}\hbox{.x}
+ \hbox{.\vrule height 4pt depth 0pt}}\qquad
+% 因为支架的缘故,
+%下é¢è¿™äº› vbox 中的å¥å·åœ¨ç«–ç›´æ–¹å‘上则是等间è·çš„。
+\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.
+这个命令产生一个宽度为零的幻影公å¼ï¼Œå®ƒçš„高度与深度与左圆括å·æ˜¯ä¸€è‡´çš„。
+|\mathstrut| 实际上的定义是 `|\vphantom(|'。
+它主è¦ç”¨äºŽä½¿å¾—æ ¹å·ã€ä¸‹æ¨ªçº¿å’Œä¸Šæ¨ªçº¿èƒ½ä¸Žå…¬å¼ä¸­å…¶å®ƒçš„æ ¹å·ã€ä¸‹æ¨ªçº¿å’Œä¸Šæ¨ªçº¿æˆè¡ŒæŽ’列。
+除能根æ®å‡ºçŽ°åœ¨æ•°å­¦å…¬å¼ä¸­çš„ä¸åŒ\minref{æ ·å¼}自动调节以外,它与 ^|\strut| (\xref \strut)éžå¸¸ç›¸ä¼¼ã€‚
+\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^^{支架}
+\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.
+\begindesc
+\cts phantom {\<argument>}
+\explain
+\bix^^{ç›’å­//幻影盒å­}
+\bix^^{幻影}
+此命令产生一个空\minref{ç›’å­},它的大å°å’Œä½ç½®ä¸Žå‡å®š \<argument> 被排版出æ¥æ—¶çš„相åŒã€‚
+å› æŸç§åŽŸå› éœ€è¦æ‰‹å·¥ç»™ä¸€ä¸ªç¬¦å·ç•™å‡ºç©ºé—´æ—¶ï¼Œ|\phantom| å°±å¯æ´¾ä¸Šç”¨åœºã€‚
+\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.
+这些命令产生幻影盒å­\minrefs{box},并ä¸æ‰“å°ä»»ä½•ä¸œè¥¿ï¼š
+\ulist\compact
+\li |\hphantom| 产生一个宽度与 \<argument> 一致的盒å­ï¼Œä½†é«˜åº¦ä¸Žæ·±åº¦å‡ä¸ºé›¶ã€‚
+\li |\vphantom| 产生一个高度与深度与 \<argu\-ment> 一致的盒å­ï¼Œä½†å®½åº¦ä¸ºé›¶ã€‚
+\endulist
+\noindent
+它们的主è¦ç›®çš„是迫使一个å­å…¬å¼å…·æœ‰ç‰¹å®šçš„最å°æ°´å¹³æˆ–竖直尺寸。
+\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.
+该命令排出 \<argument>,但迫使其包å«çš„\minref{ç›’å­}的高度和深度设为零。你å¯ä»¥è”åˆä½¿ç”¨ |\smash| å’Œ |\vphantom| æ¥èŽ·å¾—任何你期望高度与深度的å­å…¬å¼ã€‚
+\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
+\eix^^{ç›’å­//幻影盒å­}
+\eix^^{幻影}
+\enddesc
+
+%\begindesc
+%^^{boxes//empty}
+%\cts null {}
+%\explain
+%This command produces an empty \minref{hbox}.
+\begindesc
+^^{ç›’å­//空盒å­}
+\cts null {}
+\explain
+这个命令产生一个空的 \minref{hbox}。
+\example
+\setbox0 = \null
+ç©ºç›’å­ \null 的宽度是 \the\wd0,高度是 \the\ht0,
+深度是 \the\dp0。
+|
+\produces
+\setbox0 = \null
+%The null box \null has width \the\wd0, height \the\ht0,
+%and depth \the\dp0.
+ç©ºç›’å­ \null 的宽度是 \the\wd0,高度是 \the\ht0,
+深度是 \the\dp0。
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\subsection {Parameters pertaining to malformed boxes}
+\subsection {有关畸形盒å­çš„å‚æ•°}
+
+%\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|.
+\begindesc
+\bix^^{ç›’å­//过满盒å­}
+\bix^^{ç›’å­//未满盒å­}
+\cts overfullrule {\param{dimen}}
+\explain
+这个å‚数设定 \TeX\ 附加在过满\minref{水平盒å­}åŽçš„标线的宽度。\PlainTeX\ 将其设为 |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.
+这些å‚数设定了报告盒å­æœªæ»¡æˆ–过满警告时的水平和竖直的\minref{æ¶åŠ£çŠ¶æ€}的阈值。|\hbadness| 适用于 hbox,而 |\vbadness| 适用于 vbox。如果一个盒å­çš„æ¶åŠ£çŠ¶æ€è¶…过了阈值,\TeX\ 将报告一个错误。如果你æ高阈值(\plainTeX 的默认值是 $1000$),\TeX\ å°†ä¸å†ç»å¸¸ç»™å‡ºè­¦å‘Šã€‚需è¦æ³¨æ„的是,设定 |\hbadness| å’Œ |\vbadness| 对你的文档排版结果没有影å“,它们åªå½±å“你获得的错误信æ¯ã€‚å‚è§ \knuth{page~302},以获得 \TeX\ 如何确定在什么时候对过满或未满盒å­è¿›è¡Œè­¦å‘Šçš„准确æ述。
+
+%\margin{The material on tolerance was inappropriate here and has been
+%removed. A new example replaces it.}
+\margin{在这里讨论容许é‡çš„内容是ä¸åˆé€‚的,被去掉了。因此,采用一个新的例å­å–代了它。}
+\example
+\hbadness = 10000 % å–消任何关于 hbadness 的警告。
+\hbox to 2in{a b}\par
+\hbadness = 500 % 当 hbadness 超过 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$.
+该命令给出 \TeX\ 刚刚产生的(水平的或竖直的)\minref{ç›’å­}çš„æ¶åŠ£çŠ¶æ€çš„数值。
+如果盒å­æ˜¯è¿‡æ»¡çš„,|\badness| 将是 $1000000$;在所有其它情况下,它将在 $0$ 至 $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|.
+这些å‚数设置在 \TeX\ 认为一个盒å­è¿‡æ»¡ä¹‹å‰ï¼Œä¸€ä¸ª\minref{ç›’å­} 能够超出其本身大å°çš„é‡ã€‚
+^^{ç›’å­//过满盒å­}|\hfuzz| 适用于水平盒å­ï¼Œè€Œ |\vfuzz| 适用于竖直盒å­ã€‚\PlainTeX\ 将两个å‚æ•°å‡è®¾ä¸º |0.1pt|。
+\example
+\hfuzz = .5in
+\hbox to 2in{This box is longer than two inches.}
+% 没有错误的结果。
+|
+\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
+\eix^^{ç›’å­//过满盒å­}
+\eix^^{ç›’å­//未满盒å­}
+\eix^^{ç›’å­å‘½ä»¤}
+\enddesc
+
+%\see |\tolerance| \ctsref{\tolerance}.
+\see |\tolerance| \ctsref{\tolerance}。
+
+%==========================================================================
+%\section {Retrieving the last item from a list}
+\section {从列表中获å–最åŽçš„项目}
+
+%\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')}
+\begindesc
+^^{ç›’å­//列表中最åŽä¸€ä¸ªç›’å­}
+^^{紧排//列表中最åŽä¸€ä¸ªç´§æŽ’}
+^^{惩罚//列表中最åŽä¸€ä¸ªæƒ©ç½šé¡¹}
+^^{粘连//列表中最åŽä¸€ä¸ªç²˜è¿ž}
+\margin{这一节整个儿地从(“常规æ“作命令â€ï¼‰ä¸€ç« ä¸­ç§»è¿‡æ¥çš„。}
+\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$.
+这些控制åºåˆ—产生ä½äºŽå½“å‰åˆ—表最åŽçš„项目值。它们ä¸æ˜¯çœŸæ­£çš„命令,因为它们åªèƒ½ä»¥å‚数的一部分出现。如果列表中的最åŽçš„项目ä¸æ˜¯æŒ‡ç¤ºç±»åž‹ï¼Œå®ƒä»¬å°†ç»™å‡ºé›¶å€¼ï¼ˆæˆ–者空盒å­ï¼Œåœ¨ |\lastbox| 的情况下)。例如,如果在当å‰åˆ—表中最åŽä¸€é¡¹æ˜¯ä¸€ä¸ª\minref{紧排},|\lastkern| 给出那个紧排的尺寸;如果它ä¸æ˜¯ç´§æŽ’,它给出一个尺寸 $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.
+使用 |\lastbox| 具有从列表中移除最åŽä¸€ä¸ªç›’å­çš„附加效应。如果你希望原æ¥çš„ |\last!-box| ä»ä¿ç•™åœ¨åˆ—表中,你ä¸å¾—ä¸å‘列表中增加它的一个拷è´ã€‚|\last!-box| ä¸å…许用于数学列表或主竖直列表。
+
+%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
+% 在`三'之å‰äº§ç”Ÿä¸‰å€çš„紧排。
+\def\a{\hbox{二}}
+一 \a
+\setbox0 = \lastbox % 将`二'去掉。
+三 \box0.
+|
+\produces
+\def\a{二\kern 15pt}
+一 \a\a\hskip 2\lastkern 三\par
+% get three times as much space before `three'
+\def\a{\hbox{二}}
+一 \a
+\setbox0 = \lastbox % removes `two'
+三 \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.
+如果当å‰åˆ—表的最åŽä¸€é¡¹åˆ†åˆ«æ˜¯\minref{紧排}ã€\minref{粘连}或\minref{惩罚}的类型,这些命令å¯ä»¥å°†å®ƒä»¬ä»Žåˆ—表中去除。如果项目ä¸æ˜¯æ­£ç¡®çš„类型,这些命令将ä¸èµ·ä½œç”¨ã€‚与 ^|\lastbox| 类似,你ä¸èƒ½å°†å®ƒä»¬åº”用于处于数学模å¼æˆ–主竖直列表中。在已知é“会æ’入你ä¸å¸Œæœ›å­˜åœ¨çš„特定项目的å®è°ƒç”¨åŽï¼Œè¿™äº›å‘½ä»¤æ˜¯éžå¸¸æœ‰ç”¨çš„。\TeX\ ä¸æä¾› ^|\unbox| 命令,因为 |\lastbox| 产生了近乎一致的效果。
+\enddesc
+
+
+%==========================================================================
+%\section {Rules and leaders}
+\section {标线与指引线}
+
+%\begindesc
+%\bix^^{rules}
+%\bix^^{horizontal rules}
+%\bix^^{vertical rules}
+\begindesc
+\bix^^{标线}
+\bix^^{水平标线}
+\bix^^{竖直标线}
+%
+\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.
+|\hrule| 命令用于产生水平的标线;相应的 |\vrule| 命令用于产生竖直的标线。
+ä½ å¯ä»¥æŒ‡å®šæ ‡çº¿çš„宽度ã€é«˜åº¦æˆ–深度的任æ„或全部。
+\TeX\ 会为你çœç•¥çš„那些æ供默认值。你å¯ä»¥ä»¥ä»»ä½•é¡ºåºç»™å®šæ ‡çº¿çš„尺寸;
+上é¢ç»™å‡ºçš„å½¢å¼åªæ˜¯å¯èƒ½çš„组åˆä¸­çš„两个。
+你甚至å¯ä»¥ä¸ºä¸€ä¸ªç»™å®šç±»åž‹çš„尺寸给出多个值---如果你这么åšï¼Œèµ·ä½œç”¨çš„是最åŽä¸€ä¸ªå€¼ã€‚
+
+%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|.
+如果你没有设定水平标线的宽度,
+则标线将水平地扩展到包å«æ ‡çº¿çš„\minref{ç›’å­}或\minref{阵列}的最内侧的边界。
+如果你没有设定水平标线的高度,其默认值是 |0.4pt|;
+如果你没有设定水平标线的深度,其默认值是 |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.
+如果你没有设定竖直标线的宽度,其默认值是 |0.4pt|;
+如果你没有设定竖直标线的高度或深度,
+则标线将地扩展到包å«æ ‡çº¿çš„\minref{ç›’å­}或\minref{阵列}的最内侧的边界。
+
+%\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.
+\TeX\ 以内在的竖直项目处ç†æ°´å¹³æ ‡çº¿ï¼Œè€Œä»¥å†…在的水平项目处ç†ç«–直标线。
+因此,水平标线åªæœ‰\minref{竖直模å¼}下是有效的,而竖直标线åªåœ¨\minref{水平模å¼}下是有效的。
+^^{水平模å¼//水平模å¼ä¸­çš„标线}
+^^{竖直模å¼//竖直模å¼ä¸­çš„标线}
+如果觉得æ„外,å¯ä»¥ç›´è§‚化地观测。水平标线从左å‘å³ç§»åŠ¨ï¼Œå¹¶ä¸”将竖直的项目有åºåœ°åˆ†å¼€ï¼Œ
+而竖直标线从上到下,将水平项目有åºåœ°åˆ†å¼€ã€‚
+
+\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
+% 在这里,你能看到基线与 \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{基线}\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{基线}\kern 3pt \hrule width .6in}
+}
+\nextexample
+\hbox{( {\vrule} {\vrule width 8pt} )}
+\hbox {( {\vrule height 13pt depth 0pt}
+ {\vrule height 13pt depth 7pt} x)}
+% 圆括å·å®šä¹‰äº†ä¸¤ä¸ªè¿žç»­çš„ç›’å­çš„高度与深度;
+% 而 `x' ä½äºŽåŸºçº¿ä¹‹ä¸Šã€‚
+|
+\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
+\eix^^{标线}
+\eix^^{水平标线}
+\eix^^{竖直标线}
+\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.
+\begindesc
+\bix^^{指引线}
+\easy\cts leaders {\<box or rule> \<skip command>}
+\cts cleaders {\<box or rule> \<skip command>}
+\cts xleaders {\<box or rule> \<skip command>}
+\explain
+这些命令用于产生\minref{指引线},
+也就是用æŸä¸€ä¸ªæ¨¡å¼\seeconcept{指引线}çš„å¤æœ¬å¡«å……水平或竖直的间隔。
+\<box> 或 \<rule> 确定一个指引体,å³æ¨¡å¼çš„å•ä¸ªå¤æœ¬ï¼Œ
+而 \<skip command> 确定了用一行或一列的指引体填充的窗体。
+模å¼å°†é‡å¤å¤šæ¬¡ï¼Œç›´åˆ°å¡«å……了整个窗体。如果 \<skip command> 是一个水平的间è·ï¼Œ
+窗体中包括的是行å‘的指引线,\TeX\ 必须处于水平模å¼ä¸‹ï¼›
+如果 \<skip command> 是一个竖直的间è·ï¼Œ
+窗体中包括的是列å‘的指引线,\TeX\ 必须处于竖直模å¼ä¸‹ã€‚
+
+%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
+\ulist\compact
+\li 对于 |\leaders|,\TeX\ å°†ä¸€è¡ŒæŒ‡å¼•çº¿ä¸ŽåŒ…å« |\leaders| 这一命令结果的最内侧的\minref{ç›’å­} $B$ 的左侧对é½ã€‚它将一列指引线与 $B$ 的顶端对é½ã€‚整个è½åœ¨çª—体中的指引线将被ä¿ç•™ã€‚任何在窗体顶部或底部剩余的间隔将空ç€ã€‚
+\li 对于 |\cleaders|,指引线在窗体内是居中的。
+\li 对于 |\xleaders|,模å¼æ˜¯å‡åŒ€åˆ†å¸ƒåœ¨çª—体中的。如果剩余空间是 $l$,指引体被é‡å¤ $n$ 次,\TeX\ 将在相邻的指引线以åŠæŒ‡å¼•çº¿çš„两个端点(左和å³æˆ–者上和下)之间填充宽度或高度为 $l/(n+1)$ 的间隔。
+\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).
+\begindesc
+\cts dotfill {}
+\cts hrulefill {}
+\explain
+^^{å¡«å……}
+这些命令分别采用一行ä½äºŽåŸºçº¿ä¸Šçš„点和水平线填充å°é—­çš„水平空间。
+通常,在 |\dotfill| 或 |\hrulefill| 与任何其之å‰æˆ–之åŽçš„文字之间留一个空格是一个好的主æ„(å‚è§ä¸‹é¢çš„例å­ï¼‰ã€‚
+\example
+\hbox to 3in{开始 {\dotfill} 结æŸ}
+\hbox to 3in{瑞典语 {\hrulefill} 芬兰语}
+|
+\produces
+\par\hbox to 3in{开始 {\dotfill} 结æŸ}
+\hbox to 3in{瑞典语 {\hrulefill} 芬兰语}
+\endexample\enddesc
+
+%\begindesc
+%\cts leftarrowfill {}
+%\cts rightarrowfill {}
+%\explain
+%^^{fill}
+%These commands fill the enclosing horizontal space with
+%left-pointing or right-pointing ^{arrows}.
+\begindesc
+\cts leftarrowfill {}
+\cts rightarrowfill {}
+\explain
+^^{å¡«å……}
+这些命令用å‘左或å‘å³çš„^{箭头}æ¥å¡«å……å°é—­çš„水平空间。
+\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
+\eix^^{指引线}
+\enddesc
+
+%==========================================================================
+%\section {Alignments}
+\section {阵列}
+
+%==========================================================================
+%\subsection {Tabbing alignments}
+\subsection {制表阵列}
+
+%\begindesc
+%\bix^^{tabbing alignments}
+%\bix^^{alignments//commands for}
+%%
+%\ctspecial + {{\bt \<text>\thinspace\&\thinspace\<text>%
+% \thinspace\& $\cdots$ \\cr}}
+%\ctsxrdef{@plus}
+%\cts tabalign {}
+%\explain
+\begindesc
+\bix^^{制表阵列}
+\bix^^{阵列//用于阵列的命令}
+%
+\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}.
+在制表\minref{阵列}中,这些命令开始å•ç‹¬çš„一行。
+|\+| 与 |\tabalign| 之间唯一的ä¸åŒåœ¨äºŽ |\+| 是一个外部å®ï¼Œ
+当 \TeX\ 高速读å–è®°å·æ—¶ï¼Œä½ ä¸èƒ½ä½¿ç”¨å®ƒ\seeconcept{外部的}。
+
+%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|.
+这个命令的第一ç§å½¢å¼ä¸ºåˆ¶è¡¨\minref{阵列}定义一系列制表符^^{制表符}çš„åœæ­¢ä½ç½®ã€‚
+它告诉 \TeX\ 设置制表符åœæ­¢ä½ç½®ä»¥ä¾¿å°†æ¯ä¸€è¡Œåˆ†æˆ \<number> 等份。
+\TeX\ ä»å°†è¡Œçš„长度设为 |\hsize|。你å¯ä»¥é€šè¿‡å‡å° |\hsize| æ¥ä½¿å¾—阵列更加紧密。
+%\margin{paragraph ``The tab settings $\ldots$'' moved to below.}
+\margin{``制表符设定 $\ldots$''一段被移到下é¢äº†ã€‚}
+\example
+{\hsize = 3in \settabs 3 \columns
+\+$1$&一&第一\cr
+\+$2$&二&第二\cr
+\+$3$&三&第三\cr}
+|
+\produces
+{\hsize = 3in \settabs 3 \columns
+\+$1$&一&第一\cr
+\+$2$&二&第二\cr
+\+$3$&三&第三\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.
+这个命令的第二利形å¼æ˜¯åˆ©ç”¨æ ·ä¾‹è¡Œä¸­çš„ `|&|' 指示的ä½ç½®æ¥å®šä¹‰åˆ¶è¡¨ç¬¦åœæ­¢ä½ç½®ã€‚样例行本身ä¸ä¼šå‡ºçŽ°åœ¨æœ€ç»ˆè¾“出中。当你使用这ç§å½¢å¼ï¼Œä½ é€šå¸¸å¸Œæœ›å°†ä¸€äº›å®½åº¦å¤§äºŽéœ€è¦æŽ’列的最宽的内容放在样例行中,以便在列之间产生间隔。正象我们在下é¢çš„例å­ä¸­æ‰€åšçš„那样。最åŽä¸€ä¸ªåˆ¶è¡¨ç¬¦åŽçš„内容是无关紧è¦çš„,因为 \TeX\ 在 |\cr| 出现的地方ä¸éœ€è¦ä»»ä½•ä½ç½®æŒ‡ç¤ºã€‚
+
+%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.
+ç”± |\settabs| 建立起æ¥çš„制表符设置一直有效,直到你使用一个新的 |\settabs| 命令或结æŸåŒ…å« |\settabs| 命令的编组。该命令的两ç§å½¢å¼éƒ½æ˜¯è¿™æ ·çš„。
+
+\example
+% The first line establishes the template.
+\settabs \+$1$\qquad & three\quad & seventh\cr
+\+$1$&一&第一\cr
+\+$2$&二&第二\cr
+\+$3$&三&第三\cr
+|
+\produces
+\settabs \+$1$\qquad & three\quad & seventh\cr % the sample line
+\+$1$&一&第一\cr
+\+$2$&二&第二\cr
+\+$3$&三&第三\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}
+\see |\cr|ã€|\endline|ã€|\crcr|(\xref \endline )。
+\eix^^{制表阵列}
+
+%==========================================================================
+%\subsection {General alignments}
+\subsection {常规阵列}
+
+\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.
+这一命令产生由一系列行组æˆçš„水平的\minref{阵列},æ¯ä¸€è¡ŒåˆåŒ…括了一系列的列。\TeX\ 调节列的宽度以容纳æ¯ä¸€åˆ—中最宽的那一个æ¡ç›®ã€‚
+
+%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.
+åªæœ‰å½“ \TeX\ ä½äºŽç«–ç›´\minref{模å¼}下水平阵列æ‰èƒ½å‡ºçŽ°ã€‚
+我们建议你在使用该命令之å‰é¦–先学习一下常è§çš„阵列(\xref{阵列})。
+
+%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|.
+阵列由^{导言}å’ŒéšåŽçš„需è¦æŽ’列的文字构æˆã€‚导言æè¿°éšåŽè¡Œçš„版å¼ï¼Œ
+由一系列列的模æ¿æž„æˆï¼Œåˆ—之间由 `|&|' 分隔,用 |\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.
+\bix^^{模æ¿}
+\bix^^{æ¡ç›®ï¼ˆåœ¨è¡Œæˆ–列中)}
+æ¯ä¸€è¡Œç”±ä¸€ç³»åˆ—列的æ¡ç›®æž„æˆï¼Œä¹Ÿç”± `|&|' 分隔,用 |\cr| 作为结æŸæ ‡å¿—。
+在模æ¿ä¸­ï¼Œ`|#|' 表示 \TeX\ 应该在一个列æ¡ç›®ä¸­æ’入相应文字的ä½ç½®ã€‚
+与之相å,|\settabs| 使用 `|#|' 的固定éšå¼æ¨¡æ¿ï¼Œå³å®ƒåªæ’入文字本身。
+
+%\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.
+\TeX\ 在å—é™æ°´å¹³æ¨¡å¼ä¸­å¯¹æ¯ä¸€åˆ—æ¡ç›®è¿›è¡ŒæŽ’版,å³åƒ \minref{hbox} 的内容一样,并且éšå¼åœ°å°†å®ƒå°é—­åœ¨ä¸€ä¸ªç¼–组中。
+
+%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.
+这个命令的 |to| å½¢å¼æŒ‡å¯¼ \TeX\ 构造一个宽度为 \<dimen> 的阵列,在需è¦çš„时候调节列的间è·ã€‚
+这个命令的 |spread| å½¢å¼æŒ‡å¯¼ \TeX\ 构造一个比其本身宽度å†å®½ \<dimen> 的阵列。
+这些形å¼ä¸Ž |\hbox|\ctsref\hbox 相应的形å¼æ˜¯ç±»ä¼¼çš„。
+
+%See |\tabskip| \ctsref\tabskip{} for an example using the
+%|to| form.
+å‚è§ |\tabskip| \ctsref\tabskip{}中使用 |to| å½¢å¼çš„例å­ã€‚
+
+\example
+\tabskip = 1em \halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&0.0829\cr}
+|
+\produces
+\tabskip = 1em \halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&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.
+这一命令产生由一系列列组æˆçš„ç«–ç›´çš„\minref{阵列},æ¯ä¸€åˆ—åˆåŒ…括了一系列的行。
+\TeX\ 调节行的高度以容纳æ¯ä¸€åˆ—中最高的那一个æ¡ç›®ã€‚
+
+%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.
+åªæœ‰å½“ \TeX\ ä½äºŽæ°´å¹³\minref{模å¼}下竖直阵列æ‰èƒ½å‡ºçŽ°ã€‚
+因为竖直阵列(a)在概念上有一些困难,并且(b)ä¸ç»å¸¸ä½¿ï¼Œ
+因此,我们建议在你试图使用 |\valign| 命令之å‰é¦–先学习一下常è§çš„阵列(\xref{阵列})%
+ä»¥åŠ |\halign| 命令(å‚è§ä¸Šé¢çš„æ述)。
+
+%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|.
+阵列由^{导言}å’ŒéšåŽçš„需è¦æŽ’列的文字构æˆã€‚导言æè¿°éšåŽåˆ—的版å¼ï¼Œ
+由一系列行的模æ¿æž„æˆï¼Œåˆ—之间由 `|&|' 分隔,用 |\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.
+\bix^^{模æ¿}
+æ¯ä¸€åˆ—由一系列行的æ¡ç›®æž„æˆï¼Œä¹Ÿç”± `|&|' 分隔,用 |\cr| 作为结æŸæ ‡å¿—。
+在模æ¿ä¸­ï¼Œ`|#|' 表示 \TeX\ 应该在一个行æ¡ç›®ä¸­æ’入相应文字的ä½ç½®ã€‚
+
+%\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.
+\TeX\ 在内部竖直模å¼ä¸­å¯¹æ¯ä¸€è¡Œæ¡ç›®è¿›è¡ŒæŽ’版,å³åƒ\minref{ç«–ç›´ç›’å­}的内容一样,
+并且éšå¼åœ°å°†å®ƒå°é—­åœ¨ä¸€ä¸ªç¼–组中。它总是将 vbox 的深度设为零。
+éšåŽï¼Œåˆ—中的任何文字或其它水平模å¼å†…容将 \TeX\ 带回通常的水平模å¼ã€‚%
+(这åªæ˜¯åœ¨å†…部竖直模å¼ä¸‹ \TeX 行为常è§å‡†åˆ™çš„一个应用。)常è§çš„段è½å‚数适用于这ç§æƒ…形:
+è¡Œæ¡ç›®å…·æœ‰ |\parindent|(\xref\parindent )的起始缩进,
+而且它的æ¯ä¸€è¡Œéƒ½é™„加了 |\leftskip| å’Œ |\rightskip|(\xref\leftskip )\minref{粘连}。
+
+%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.
+尤其需è¦æ³¨æ„的是,列æ¡ç›®åŒ…å«çš„文字具有 |\hsize|(\xref\hsize )的宽度。
+除éžä½ é‡æ–°è®¾ç½® |\hsize| 到你希望得到的行宽,å¦åˆ™ä½ æ€»èƒ½é‡åˆ°è¿‡æ»¡\minref{水平盒å­}的情况,
+或者å‘现第一列å æ®äº†æ•´é¡µçš„宽度,或者两ç§æƒ…况都会出现。
+\eix^^{æ¡ç›®ï¼ˆåœ¨è¡Œæˆ–列中)}
+
+%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.
+正常情况下,你需è¦åœ¨æ¯ä¸ªæ¨¡æ¿ä¸­åŒ…括\minref{支架}^^{支架//在竖直阵列中},
+以便行ä¸ä¼šç”±äºŽé˜µåˆ—中æ¡ç›®é«˜åº¦çš„å˜åŒ–而å˜å¾—弯曲。你å¯ä»¥ä½¿ç”¨ |\strut| 获得支架。
+
+%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.
+这个命令的 |to| å½¢å¼æŒ‡å¯¼ \TeX\ 构造一个竖直伸展为 \<dimen> 的阵列,在需è¦çš„时候调节行的间è·ã€‚
+这个命令的 |spread| å½¢å¼æŒ‡å¯¼ \TeX\ 构造一个比其本身高度å†é«˜ \<dimen> 的阵列。
+这些形å¼ä¸Ž |\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
+% 与上例相åŒçš„内容,但没有支架
+%(这个例å­æ˜¾ç¤ºäº†æ”¯æž¶å­˜åœ¨çš„å¿…è¦æ€§ï¼‰ã€‚
+{\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.
+除了首先将 |\tabskip| 粘连设为零,并将 |\everycr| 清空以外,这个命令的行为与 ^|\halign| 相似。
+\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.
+这个命令用于结æŸæ°´å¹³æˆ–竖直阵列的导言ã€æ°´å¹³çš„或制表阵列的行,或竖直阵列的列。你å¯ä»¥é€šè¿‡è®¾ç½® ^|\everycr|\ctsref\everycr å‚数的值,引导 \TeX\ 采å–特定的行动,无论什么时候它é‡åˆ° |\cr|。
+\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.
+这个命令是 ^|\cr| çš„å¦ä¸€ç§å½¢å¼ã€‚在你é‡æ–°å®šä¹‰äº† |\cr|,但还需è¦åˆ©ç”¨å…¶åŽŸå§‹çš„定义是,这个命令是有用的。
+\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|.
+å¦‚æžœè¯¥å‘½ä»¤ç´§éš |\cr| 或 ^|\noalign| 之åŽå‡ºçŽ°ï¼Œ\TeX\ 会忽略它。除此之外,它的行为与 ^|\cr| 类似。它主è¦çš„应用是作为一ç§å®‰å…¨æŽªæ–½ä»¥é¿å…由期望以 |\cr| 作为结æŸç¬¦çš„\minref{å®åŒ…}而引起的错误信æ¯ã€‚如果你将 |\crcr| 放在用以表示å®å®šä¹‰ä¸­æ­¤ç±»å‚æ•°çš„åŽé¢ï¼Œå®å°†æ­£å¸¸å·¥ä½œï¼Œæ— è®ºå…¶å‚数是å¦ä»¥ |\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 `|#|'.
+这个命令告诉 \TeX\ 在处ç†ç‰¹å®šçš„列或行æ¡ç›®æ—¶ï¼Œå¿½ç•¥æ°´å¹³çš„或竖直的\minref{阵列} 中的一个模æ¿ã€‚|\omit| 必须以第一个项目出现在列或行æ¡ç›®ä¸­ï¼Œå®ƒæœ‰æ•ˆåœ°ä½¿ç”¨ç®€å•çš„æ¨¡æ¿ `|#|' 覆盖æ¥è‡ªå¯¼è¨€ä¸­çš„模æ¿ã€‚
+
+\example
+\tabskip = 2em\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ \omit \dotfill 法国\dotfill&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&0.0829\cr}
+
+|
+\produces
+\tabskip = 2em\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ \omit \dotfill 法国\dotfill&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&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|.
+这个命令的æ„义å–决于它出现在导言中,还是在阵列æ¡ç›®ä¸­ã€‚
+\ulist
+\li 通常,\TeX\ 并ä¸æ‰©å±•å®ƒè¯»å…¥çš„导言中的记å·ã€‚å°† |\span| 放在导言中记å·çš„å‰é¢ï¼Œæ ¹æ®\minref{å®}扩展的 \TeX 常用规则,会导致这些记å·ç«‹å³å¾—到扩展。
+\li 用 |\span| å–代 `|&|',放在两列或两行æ¡ç›®ä¹‹å‰ï¼Œä¼šå¯¼è‡´è¿™äº›åˆ—或行åˆå¹¶åˆ°ä¸€èµ·ã€‚对于水平阵列,åˆå¹¶çš„列的宽度是列æˆå‘˜å®½åº¦ä¹‹å’Œã€‚对于竖直阵列,åˆå¹¶çš„行的高度是行æˆå‘˜é«˜åº¦ä¹‹å’Œã€‚åˆå¹¶çš„行或åˆå¹¶çš„列的模æ¿å½¢æˆä¸€ä¸ªç¼–组,因此,在 |\span| å‰çš„字体设置命令影å“下一个 `|&|' å‰çš„一切。
+\endulist
+\noindent
+|\span| 很少å•ç‹¬ç”¨åœ¨æ¨¡æ¿ä¹‹å¤–,但它为定义 ^|\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|).
+该命令告诉 \TeX ,éšåŽæ°´å¹³é˜µåˆ—的行中的 \<number> 列或竖直阵列的列中的 \<number> 行应该åˆå¹¶æˆä¸€ä¸ªå•ç‹¬çš„åˆ—æˆ–è¡Œï¼ˆå°±åƒ |\span| 那样),并且它们的模æ¿åº”è¯¥è¢«å¿½ç•¥ï¼ˆå°±åƒ |\omit| 那样)。
+
+\example
+\tabskip = 13pt\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&
+ \multispan 2 \hfil\it(æ— ä¿¡æ¯)\hfil \cr
+ 日本&东京&日元&0.0829\cr}
+|
+\produces
+\tabskip = 13pt\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&
+ \multispan 2 \hfil\it(æ— ä¿¡æ¯)\hfil \cr
+ 日本&东京&日元&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
+\eix^^{模æ¿}
+\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.
+该命令在水平\minref{阵列}的当å‰è¡Œä¹‹åŽæ’å…¥ \<vertical mode material>,或者在竖直\minref{阵列}的当å‰åˆ—之åŽæ’å…¥ \<horizontal mode material>。æ’入的内容å¯ä»¥æ˜¯æ–‡æœ¬ã€ç²˜è¿žã€æ ‡çº¿ï¼Œæˆ–者其它任何东西。
+
+%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).
+|\noalign| 最常è§çš„用途是在一行或列åŽæ’å…¥é¢å¤–的间隔。如果你希望在水平阵列的\emph{æ¯}è¡ŒåŽéƒ½æ’å…¥é¢å¤–的间隔,å¯ä»¥ä½¿ç”¨ ^|\openup|(\xref\openup)。
+
+\example
+\halign{%
+ \hfil\it#\hfil\tabskip=2em&\hfil#\hfil&#&
+ \hfil\$#\tabskip=0em\cr
+ % æ”¹å˜ \tabskip 将阻止下é¢çš„标线çªå‡ºæ¥ã€‚
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ \noalign{\smallskip\hrule\smallskip}
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&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.
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ \noalign{\smallskip\hrule\smallskip}
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&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.
+该å‚数指定 \TeX 在水平阵列的列之间或竖直阵列的行之间放置水平或竖直粘连的é‡ã€‚\TeX\ 也在水平阵列的第一列的左侧和最åŽä¸€è¡Œçš„å³ä¾§ï¼Œä»¥åŠç«–直阵列的第一行的上端和最åŽä¸€è¡Œçš„下端放置 |\tabskip| 粘连。你å¯ä»¥åœ¨æ¨¡æ¿ä¸­æ”¹å˜ |\tabskip|---这一改å˜å°†å½±å“所有紧接其åŽçš„ |&| 的粘连以åŠæœ€åŽä¸€è¡Œæˆ–列之åŽçš„粘连。
+\example
+\halign to 3.5in{%
+ \hfil\it#\tabskip = 2em plus 8pt
+ \hfil&\hfil#\hfil&#\tabskip = 1em
+ &\hfil\$#\tabskip = 0em\cr
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&0.0829\cr}
+|
+\produces
+\halign to 3.5in{%
+ \hfil\it#\tabskip = 2em plus 8pt
+ \hfil&\hfil#\hfil&#\tabskip = 1em
+ &\hfil\$#\tabskip = 0em\cr
+ 美国&åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&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.
+该命令告诉 \TeX\ 忽略水平阵列中下一个列æ¡ç›®çš„宽度。如果你有一个æ¡ç›®é•¿äºŽåŒä¸€åˆ—中其它大多数,并且 ,你希望æ¡ç›®ä¼¸åˆ°åˆ—外,而ä¸æ˜¯ä½¿å¾—该æ¡ç›®æ‰€åœ¨åˆ—å˜å¾—更宽时,该命令是有用的。如果 |\hidewidth| 在æ¡ç›®çš„左侧,则æ¡ç›®å‘左伸展;如果 |\hidewidth| 在æ¡ç›®çš„å³ä¾§ï¼Œåˆ™æ¡ç›®å‘å³ä¼¸å±•ã€‚
+\example
+\tabskip = 25pt\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ 美国&\hidewidth åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&0.0829\cr}
+|
+\produces
+\tabskip = 25pt\halign{%
+ \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
+ 美国&\hidewidth åŽç››é¡¿&美元&1.00\cr
+ 法国&巴黎&法朗&0.174\cr
+ 以色列&耶路撒冷&新谢克尔&0.507\cr
+ 日本&东京&日元&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|.
+无论什么时候,当 \TeX\ é‡åˆ°å¤„于æ¯ä¸ªå¯¼è¨€ç»“尾处ã€æ°´å¹³é˜µåˆ—çš„æ¯è¡Œç»“尾处以åŠç«–直阵列的æ¯åˆ—结尾处的|\cr| 时,它扩展 \<token list>。|\everycr| åªåœ¨ |\cr| åŽæ‰©å±•ã€‚因此,你å¯ä»¥é€šè¿‡å‘ |\everycr| 赋与导言ã€è¡Œã€åˆ—相关列表,引导 \TeX\ 在导言ã€è¡Œæˆ–列的结尾处执行特定的命令。
+
+%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.
+|\everycr| çš„è®°å·ä¸åº”该包括 |\no!-align| 以外的任何命令。这是因为,|\everycr| è®°å·ä¼šå‡ºçŽ°åœ¨é˜µåˆ—的最åŽä¸€ä¸ª |\cr|ã€‚ä»»ä½•ä¸€ä¸ªéž |\no!-align| 命令会导致 \TeX\ 认为它新开了一行或一列,因此,\TeX\ 会报怨丢失了 |\cr|,æ’å…¥ |\cr|,å†æ¬¡æ’å…¥ |\everycr| è®°å·ï¼Œå¹¶ä¸”æ— é™åœ°é‡å¤è¿™äº›åŠ¨ä½œã€‚
+
+\example
+\everycr={\noalign{\smallskip\hrule\smallskip}}
+\halign{#\tabskip = 11pt&\hfil#\hfil&\hfil#\hfil
+ \tabskip = 0pt\cr
+ $1$&一&第一\cr
+ $2$&二&第二\cr
+ $3$&三&第三\cr}
+|
+\produces
+\medskip
+\everycr={\noalign{\smallskip\hrule\smallskip}}
+\halign{#\tabskip = 11pt&\hfil#\hfil&\hfil#\hfil
+ \tabskip = 0pt\cr
+ $1$&一&第一\cr
+ $2$&二&第二\cr
+ $3$&三&第三\cr}
+\endexample
+
+%\eix^^{alignments//commands for}
+%\enddesc
+\eix^^{阵列//用于阵列的命令}
+\enddesc
+
+\enddescriptions
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter
+\byebye
diff --git a/info/impatient/cn/pages.tex b/info/impatient/cn/pages.tex
new file mode 100644
index 0000000000..108d267168
--- /dev/null
+++ b/info/impatient/cn/pages.tex
@@ -0,0 +1,1646 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter {组页命令}
+
+\chapterdef{pages}
+
+这个章节介ç»äº†ä¸Žé¡µ, 页的组æˆéƒ¨åˆ†ä»¥åŠè¾“出程åºç›¸å…³çš„命令.
+本章写作惯例的说明å¯ä»¥åœ¨\headcit{命令æè¿°}{cmddesc}中找到.
+
+\begindescriptions
+
+%==========================================================================
+%\section {Interline and interparagraph spaces}
+\section {行间è·å’Œæ®µé—´è·}
+
+\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.
+^^{行间è·}
+\bix^^{行间粘连}
+\bix^^|\baselineskip|
+\bix^^|\lineskip|
+\bix^^|\lineskiplimit|
+在一个普通\minref{竖直列}(例如段è½å„行)中,
+这三个å‚æ•°å…±åŒç¡®å®šäº† \TeX\ 在相邻两个\minref{ç›’å­}é—´æ’入的间隔。
+这个间隔称为“\minref{行间粘连}â€ã€‚
+对于内部竖直模å¼ä¸­æž„造的竖直盒å­ï¼Œå…¶ä¸­çš„组æˆç›’å­é—´åŒæ ·ä¼šæœ‰æ­¤é—´éš”。
+^^{ç«–ç›´ç›’å­//ç«–ç›´ç›’å­çš„行间粘连}
+
+在通常情况下,盒å­çš„高度和深度ä¸ä¼šå¤ªå¤§ï¼Œ
+此时 \TeX\ 让相邻盒å­çš„两基线è·ç¦»ç­‰äºŽ |\baselineskip|。
+为此å¯ä»¥è®©è¡Œé—´ç²˜è¿žç­‰äºŽ |\baselineskip| å‡åŽ»ä¸Šç›’å­æ·±åº¦ï¼ˆç”± ^|\prevdepth| 给出)%
+和下盒å­é«˜åº¦ã€‚
+但如果两个盒å­é å¾—太近,å³è¡Œé—´ç²˜è¿žå°äºŽ |\lineskiplimit|,
+\TeX\ 将改为æ’å…¥ |\lineskip| 大å°çš„é—´è·ã€‚\negthinspace\footnote
+{\TeX\ 实际上在竖直列开头设定 |\prevdepth| 为 $-1000$\pt ,
+从而å¯ä»¥æµ‹å®š\emph{æ¯ä¸ª}ç›’å­çš„ |\prevdepth|。
+若 |\prevdepth|$\>\le-1000$\pt ,
+它就ä¸ä¼šæ’入任何行间粘连。}详情å¯è§ \knuth{第~79--80~页}。
+
+æ³¨æ„ |\baselineskip| å’Œ |\lineskip| 测é‡\emph{ä¸åŒçš„东西}:
+å‰è€…为两盒å­åŸºçº¿ä¹‹é—´çš„è·ç¦»ï¼Œ
+而åŽè€…为上盒å­åº•éƒ¨å’Œä¸‹ç›’å­é¡¶éƒ¨çš„è·ç¦»ã€‚
+详情å¯çœ‹ \knuth{第~78~页}。
+下é¢ç¬¬ä¸€ä¸ªä¾‹å­å±•ç¤ºäº†|\lineskiplimit| 的作用。
+
+如下é¢ç¬¬äºŒä¸ªä¾‹å­æ‰€ç¤ºï¼Œå°† |\baselineskip| 加å€ï¼Œ
+就能得到^{åŒå€è¡Œè·}的效果。
+在段è½ç»“æŸå‰ä»»ä½•ä½ç½®æ”¹å˜ |\baselineskip|,都会影å“整个段è½ã€‚
+\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
+\eix^^{行间粘连}
+\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.
+当 \TeX\ 将盒å­æ·»åŠ åˆ°ç«–直列时,它设定 |\prevdepth| 为该盒å­çš„深度。
+在竖直列的开始, \TeX\ 设定 |\prevdepth| 为 $-1000$\pt\ ,这表示ä¸æ·»åŠ è¡Œé—´ç²˜è¿žã€‚
+\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.
+å‰ä¸‰ä¸ªå‚æ•°åˆ†åˆ«åŒ…å« |\base!-line!-skip|,|\line!-skip| å’Œ |\line!-skip!-limit| 的值。
+^^|\baselineskip| ^^|\lineskip| ^^|\lineskiplimit|
+而 |\normalbaselines| 命令将 |\base!-line!-skip|,|\line!-skip| 和 |\line!-skip!-limit|
+分别设定为这三个å‚数的值。
+\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}
+此命令让 \TeX\ 从此之åŽåœæ­¢æ’入行间粘连。除éžä½ å¸Œæœ›å¯¹æ–‡æ¡£çš„剩余部分都生效(你多åŠä¸å¸Œæœ›ï¼‰ï¼Œ
+你应该将此命令和你希望生效的文本放在一个编组中。
+它的主è¦ç”¨å¤„在于å¯ä»¥è®©ä½ è‡ªå·±å¤„ç†è¡Œé—´ç©ºéš™ï¼Œæ¯”如用^{支架}(struts),
+而ä¸å½±å“ \TeX\ 的正常行间粘连。在构造水平\minref{阵列}æ—¶ç»å¸¸ä¼šç”¨åˆ°|\offinterlineskip|。
+^^{阵列//在其中使用 \b\tt\\offinterlineskip\e}
+\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.
+此命令让 \TeX\ åœæ­¢åœ¨ä¸‹ä¸€è¡Œæ’入行间粘连。它ä¸å½±å“åŽç»­å…¶ä»–行。
+\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}
+此命令让 ^|\baselineskip| 增加 \<dimen>。
+在段尾之å‰çš„ |\openup| 命令将影å“整个段è½ï¼Œ
+因此想在段è½ä¸­é—´æ”¹å˜ |\baseline!-skip| æ—¶ä¸è¦ç”¨ |\openup| 命令。
+在排版表格和陈列公å¼æ—¶ |\openup| éžå¸¸æœ‰ç”¨â€”—多点间隔将会增加它们的å¯è¯»æ€§ã€‚
+^^{阵列//å„行之间的间隔}
+\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{分页} %\section {Page breaks}
+
+%==========================================================================
+%\subsection {Encouraging or discouraging page breaks}
+\subsection{鼓励或阻ç¢åˆ†é¡µ}
+
+%\begindesc
+%\bix^^{page breaks}
+%\bix^^{page breaks//encouraging or discouraging}
+%\ctspecial break {} \xrdef{vbreak}
+%\explain
+\begindesc
+\bix^^{分页}
+\bix^^{分页//鼓励或阻ç¢åˆ†é¡µ}
+\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.
+此命令强制在此处分页。除éžç”¨æŸç§æ–¹å¼å¡«æ»¡è¯¥é¡µï¼Œä½ å°†å¾—到一个æ¾æ•£çš„ vbox。
+|\break| 也能用在水平模å¼ä¸­ã€‚
+\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.
+此命令阻止在此处分页。
+|\nobreak| 也能用在水平模å¼ä¸­ã€‚
+\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.
+在通常ä¸åˆ†é¡µçš„地方å…许 \TeX\ 分页。
+|\allowbreak| 也能用在水平模å¼ä¸­ã€‚
+\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.
+此命令生æˆä¸€ä¸ªæƒ©ç½šï¼ˆ\minref{penalty})项。
+惩罚项使得 \TeX\ 或多或少愿æ„在此处分页。
+负惩罚值,实际上是奖励值,鼓励分页;正惩罚值阻ç¢åˆ†é¡µã€‚
+大于或等于 $10000$ 的惩罚值彻底阻止分页,
+而å°äºŽæˆ–等于 $-10000$ 的惩罚值强制分页。
+此命令也能用于水平模å¼ã€‚
+\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.
+此命令结æŸå½“å‰æ®µè½ï¼Œå¹¶å‘Šè¯‰ \TeX\ 这里是一个åˆé€‚的分页ä½ç½®ã€‚
+\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.
+这些命令指明了越æ¥è¶Šåˆé€‚的分页ä½ç½®ã€‚如果实际上没在此处分页,\TeX\ 将分别
+æ’入大å°ä¸º ^|\smallskip|,^|\medskip| 或 ^|\bigskip| çš„é—´è·ï¼ˆ\xref \smallskip )。
+但如果此ä½ç½®ä¹‹å‰å·²ç»æœ‰å¤§äºŽæˆ–等于此值的间è·ï¼Œ\TeX\ å°±ä¸ä¼šå†æ’入间è·ã€‚
+\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.
+这两个命令将结æŸå½“å‰æ®µè½å¹¶å¼ºåˆ¶åœ¨å½“å‰ä½ç½®åˆ†é¡µã€‚如果你ä¸åœ¨å‰é¢åŠ ä¸Š
+|\vfil| (\xref \vfil),^^|\vfil//在 {\tt\\eject} 时需è¦|
+\TeX\ 将试ç€å°†ä¼¸å±•é¡µé¢å†…容(很å¯èƒ½ä¼šè­¦å‘Šæœ‰æ¾æ•£çš„ç«–ç›´ç›’å­ï¼‰ã€‚
+|\supereject| 命令还让 \plainTeX\ 输出例行程åºå¤„ç†å‰©ä¸‹çš„æ’入项,
+^^{æ’入项//用 \b\tt\\supereject\e 强制排版}例如长脚注,
+在处ç†å…¶ä»–输入之å‰ç”Ÿæˆå®ƒä»¬ã€‚因而,
+|\supereject| 更适åˆåœ¨æ–‡æ¡£å„章或主è¦å•å…ƒç»“æŸæ—¶ä½¿ç”¨ã€‚
+\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.
+此命令规定了有æ¡ä»¶çš„分页。它告诉 \TeX\ ,如果åŽé¢çš„ |\filbreak| ä¸èƒ½æ”¾åœ¨åŒä¸€é¡µï¼Œå°±åœ¨æ­¤å¤„分页。
+用一对 |\filbreak| 将一个段è½å›´èµ·æ¥ï¼Œå°±å¯ä»¥ç¡®ä¿ \TeX\ å°½é‡å°†è¯¥æ®µè½æ”¾åœ¨åŒä¸€é¡µã€‚
+ä¸è¦åœ¨æ®µè½ä¸­é—´ä½¿ç”¨ |\filbreak|,因为这将让 \TeX\ 进入竖直模å¼ï¼Œä»Žè€Œç»“æŸè¯¥æ®µè½ã€‚
+在 \xrefpg{filbreak} 中有此主题的更多建议。
+\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}
+通常 \TeX\ 会尽全力让æ¯é¡µéƒ½ä¸€æ ·é«˜ï¼Œå³è®©å®ƒä»¬çš„下边è·ç›¸ç­‰ã€‚
+|\raggedbottom| 命令å…许 \TeX\ ç»™ä¸åŒé¡µé¢çš„下边è·ä¸€äº›å·®åˆ«ã€‚
+如果文档中有些ä¸èƒ½è·¨é¡µçš„大型内容,用 |\raggedbottom| 就比较åˆé€‚。
+用 |\normalbottom| 命令å¯ä»¥å–消 |\raggedbottom| 的效果.
+\eix^^{分页//鼓励或阻ç¢åˆ†é¡µ}
+\enddesc
+
+%==========================================================================
+%\subsection {Page breaking parameters}
+\subsection{分页å‚æ•°}
+
+%\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$.
+\bix^^{分页//分页å‚æ•°}
+\begindesc
+\cts interlinepenalty {\param{number}}
+\explain
+æ­¤å‚数设定在段è½å†…部å„行间分页时的\minref{惩罚}值。
+将它设为 $10000$ 将强制在段è½ä¹‹é—´åˆ†é¡µï¼Œ
+åªè¦é¡µé¢ä¸­æœ‰è¶³å¤Ÿçš„伸展值让 \TeX\ 排版。
+\PlainTeX\ 设定 |\inter!-linepenalty| 为 ~$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$.
+^^{孤行}
+æ­¤å‚数设定在段è½é¦–行之åŽåˆ†é¡µçš„\minref{惩罚}值。
+页é¢åº•éƒ¨çš„å•ç‹¬ä¸€è¡Œç§°ä¸º``孤行''。
+\PlainTeX\ 设定 |\clubpenalty| 为 $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$.
+^^{寡行}
+æ­¤å‚数设定在段è½å°¾è¡Œä¹‹å‰åˆ†é¡µçš„\minref{惩罚}值。
+页é¢é¡¶éƒ¨çš„å•ç‹¬ä¸€è¡Œç§°ä¸º``寡行''。
+\PlainTeX\ 设定 |\widowpenalty| 为 $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$.
+^^{寡行}^^{陈列公å¼}
+æ­¤å‚数设定在陈列公å¼ä¸Šä¸€è¡ŒåŒæ—¶ä¹Ÿæ˜¯æ®µè½å°¾è¡Œä¹‹å‰åˆ†é¡µçš„\minref{惩罚}值。
+\PlainTeX\ 设定 |\displaywidowpenalty| 为 $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$.
+^^{陈列公å¼}
+æ­¤å‚数设定在陈列公å¼ä¹‹å‰åˆ†é¡µçš„\minref{惩罚}值。
+\PlainTeX\ 设定\break |\pre!-display!-penalty| 为 $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$.
+^^{陈列公å¼}
+æ­¤å‚数设定在陈列公å¼ä¹‹åŽåˆ†é¡µçš„\minref{惩罚}值。
+\PlainTeX\ 设定\break |\postdisplaypenalty| 为 $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$.
+æ­¤å‚数设定在以自定连字项(通常是一个连字符)结尾的一行之åŽåˆ†é¡µçš„\minref{惩罚}值。
+^^{è¿žå­—}
+|\brokenpenalty| 用于分页, 而 ^|\hyphenpenalty| \ctsref{\hyphenpenalty} 用于断行。
+\PlainTeX\ 设定 |\brokenpenalty| 为 $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}).
+\bix^^{æ’入项//æ’入项的惩罚}
+\bix^^{浮动体}
+æ­¤å‚æ•°åŒ…å« \TeX\ 放置æ’入项到当å‰é¡µé¢æ—¶æ‰€ç´¯ç§¯çš„æŸäº›\minref{惩罚}值之和。
+在 \TeX\ å¤„ç† |\insert| 命令时,
+如果å‘现å‰é¢æœ‰åŒç±»åž‹æ’入项被分开,留下一部分到之åŽçš„页é¢ï¼Œ
+就会算上这些惩罚值。
+详细的计算过程å¯ä»¥è§ \knuth{第~123--125~页}。
+
+\margin{Material moved from a footnote to the main text.}
+在输出例行程åºä¸­ï¼Œ
+^^{输出例行程åº//\b\tt\\insertpenalties\e\ çš„æ„义}
+|\insertpenalties| 有完全ä¸åŒçš„æ„义——
+它表示已ç»è§åˆ°ä½†æœªèƒ½æ”¾å…¥å½“å‰é¡µçš„æ’å…¥é¡¹çš„æ€»æ•°ï¼ˆè§ \knuth{第~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}
+在 \TeX\ 处ç†æ’入项时,
+如果å‘现å‰é¢æœ‰åŒç±»åž‹æ’入项被分开,留下一部分到之åŽçš„页é¢ï¼Œ
+就会添加 |\floatingpenalty| \minref{惩罚}值到|\insertpenalties|
+^^|\insertpenalties|。
+\PlainTeX\ 设定 |\floatingpenalty| 为 $0$。
+\eix^^{æ’入项//æ’入项的惩罚}
+\eix^^{浮动体}
+\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.
+æ­¤å‚数设定当å‰é¡µé¢æ‰€éœ€çš„高度。
+当放入第一个盒å­æˆ–者æ’入项到当å‰é¡µé¢æ—¶ï¼Œ
+\TeX\ 设定 |\pagegoal| 等于 |\vsize| 的当å‰å€¼ã€‚
+æ”¹å˜ |\pagegoal| 的值å¯ä»¥è®© \TeX\ 排版时缩短该页é¢çš„高度。
+å³ä½¿æ–°çš„值比页é¢å·²æœ‰å†…容的高度还å°ä¹Ÿå¯ä»¥ï¼Œ
+此时 \TeX\ 将把多余的内容放在下一页。
+但记ä½â€”—在下一页 \TeX\ 还是会é‡ç½® |\pagegoal| 为 |\vsize|。
+\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}.
+æ­¤å‚数表示当å‰é¡µé¢ç´¯ç§¯çš„自然高度。
+\TeX\ 添加内容到\minref{竖直列}时会更新 |\pagetotal| 的值。
+\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}.
+æ­¤å‚数表示当å‰é¡µé¢çš„深度。
+\TeX\ 添加内容到\minref{竖直列}时会更新 |\pagedepth| 的值。
+\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}.
+æ­¤å‚数表示当å‰é¡µé¢ç´¯ç§¯çš„粘连的å¯æ”¶ç¼©é‡ã€‚
+\TeX\ 添加内容到\minref{竖直列}时会更新 |\pageshrink| 的值。
+\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}
+这四个å‚æ•°åˆèµ·æ¥è¡¨ç¤ºå½“å‰é¡µé¢ç´¯ç§¯çš„粘连的å¯ä¼¸é•¿é‡ã€‚å¯ä¼¸é•¿é‡æ€»å…±ç­‰äºŽ
+{\def\f#1{\hbox{\tt fi#1}}
+$n_0 + n_1\f{l} + n_2\f{ll} + n_3\f{lll}$},
+其中四个å‚数给出四个$n_i$的值。
+\TeX\ 添加内容到\minref{竖直列}时会更新这些å‚数的值。
+\eix^^{分页//分页å‚æ•°}
+\eix^^{分页}
+\enddesc
+
+%==========================================================================
+%\section{Page layout}
+\section{页é¢å¸ƒå±€}
+
+%\subsection {Page description parameters}
+\subsection {页é¢æè¿°å‚æ•°}
+
+\begindesc
+\bix^^{页é¢å°ºå¯¸}
+\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.
+æ­¤å‚数指定当å‰è¡Œçš„长度。\PlainTeX\ 设定 |\hsize| 为 |6.5in|。
+在\xrefpg{\hsize} 有完整的解释。
+\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}
+æ­¤å‚数指定页é¢çš„竖直长度。
+\TeX\ 仅在页é¢å¼€å§‹æ—¶æ£€æŸ¥æ­¤å€¼ã€‚
+因此,在页é¢ä¸­é—´æ”¹å˜ |\vsize| 到下一页æ‰ä¼šç”Ÿæ•ˆã€‚
+è‹¥è¦åœ¨é¡µé¢ä¸­é—´æ”¹å˜å…¶ç«–直长度,应该修改 ^|\pagegoal|(\xref \pagegoal )的值。%
+(若è¦æ”¹å˜å½“å‰é¡µé¢å¼€å§‹çš„所有页é¢ï¼Œä½ éœ€è¦\emph{åŒæ—¶}修改 |\vsize| å’Œ |\pagegoal|。)
+\PlainTeX\ 设定 |\vsize| 为 |8.9in|。
+\eix^^{页é¢å°ºå¯¸}
+\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.
+\begindesc
+\cts hoffset {\param{dimen}}
+\cts voffset {\param{dimen}}
+\margin{These commands were moved up from later in the subsection.}
+^^{页é¢èµ·ç‚¹}
+\idxsee{origin}{page origin}
+\explain
+\TeX\ 通常设定页é¢çš„“起点â€â€”—å³å®ƒå¼€å§‹æ‰“å°çš„地方——在离上页边和左页边å‡ä¸ºä¸€è‹±å¯¸çš„地方。\footnote{
+\TeX\ 本身并ä¸å…³å¿ƒé¡µé¢èµ·ç‚¹çš„ä½ç½®ï¼Œ
+但设备驱动程åºå°† \dvifile 转æ¢ä¸ºå¯æ‰“å°å½¢å¼æ—¶è¦ç”¨åˆ°ï¼Œ
+æ­¤ä½ç½®ä¿¡æ¯ä½¿å¾—在ä¸åŒçš„设备中能得到相åŒçš„结果。
+^^{设备驱动//它所知的页é¢èµ·ç‚¹}}
+|\hoffset| å’Œ |\voffset| 的值分别给出实际起点相对该点的水平和竖直å移é‡ã€‚
+因此,若 |\hoffset| å’Œ |\voffset| å‡ä¸ºé›¶ï¼Œ\TeX\ 就使用正常起点。
+\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.
+为确ä¿é¡µé¢ç¬¬ä¸€ä¸ªç›’å­çš„基线到上页边的è·ç¦»æ€»æ˜¯ $d$,
+\TeX\ 在æ¯ä¸ªé¡µé¢é¡¶éƒ¨éƒ½æ’入粘连。
+|\topskip| 给出了 $d$ 的值,以此确定该粘连大å°
+(åªè¦é¡µé¢ç¬¬ä¸€ä¸ªç›’å­ä¸ä¼šå¤ªé«˜ï¼‰ã€‚
+$d$ 等于 |\topskip| 粘连的自然大å°ã€‚
+如果页é¢ç¬¬ä¸€ä¸ªç›’å­çš„高度超过 $d$,
+计算出的粘连将为负值,此时在该页顶部 \TeX\ ä¸æ’å…¥|\topskip|粘连。
+
+%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|.
+为更好地ç†è§£è¿™äº›è§„则,我们å‡è®¾ |\topskip| 无伸长é‡ä¹Ÿæ— æ”¶ç¼©é‡ï¼Œä¸”页é¢ç¬¬ä¸€é¡¹å°±æ˜¯ä¸ªç›’å­ã€‚
+如果该盒å­çš„高度ä¸å¤§äºŽ |\topskip|,ä¸ç®¡é«˜åº¦ä¸ºå¤šå°‘,
+它的基线和上页边的è·ç¦»å°±å§‹ç»ˆç­‰äºŽ |\topskip|。
+å过æ¥ï¼Œå¦‚果该盒å­çš„高度比 |\topskip| 大 $e$,
+它的基线和上页边的è·ç¦»å°±æ˜¯ |\topskip|\tplus$e$。
+在 \knuth{第~113--114~页} 中详细解释了 |\topskip| 的作用。
+\PlainTeX\ 设定 |\topskip| 为 |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|.
+æ­¤å‚数设定“^{段è½é—´è·}â€ï¼Œå³ \TeX\ 在段è½å¼€å¤´æ’入的竖直粘连。
+^^{段è½//段è½é—´çš„粘连}
+在 |\par| (\xref{\@par}) 那里介ç»äº† \TeX\ 开始新段è½æ—¶æ‰€ä½œçš„事情。
+\PlainTeX\ 设定 |\parskip| 为 |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|.
+æ­¤å‚数设定页é¢åº•éƒ¨\minref{ç›’å­}的最大深度。
+它和 |\boxmaxdepth| å‚数(\xref \boxmaxdepth )也有关系.
+如果底部盒å­çš„深度超过 |\maxdepth|,
+\TeX\ 下移该盒å­çš„基准点,让深度就等于 |\maxdepth|。
+è‹¥ä¸ä½œæ­¤è°ƒæ•´ï¼Œé¡µé¢åº•éƒ¨ç›’å­å¯èƒ½å¤§å¤§è¶…出下边è·ï¼Œç”šè‡³è¶…出页é¢ï¼Œ
+PlainTeX\ 设定 |\maxdepth| 为 |4pt|。
+\enddesc
+
+%==========================================================================
+%\subsection{Page numbers}
+\subsection{页ç }
+
+%\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.
+\begindesc
+\bix^^{页ç }
+\cts pageno {\param{number}}
+\explain
+æ­¤å‚数以整数值记录当å‰é¡µç ã€‚
+在å‰é¡µï¼ˆfront matter)中页ç é€šå¸¸æ˜¯è´Ÿæ•°ï¼Œæˆ‘们用å°å†™ç½—马数字而ä¸ç”¨é˜¿æ‹‰ä¼¯æ•°å­—ç¼–å·ã€‚
+在页é¢ä¸­é—´å¯¹é¡µç çš„改动,会在该页的页眉和页脚中用到。
+页ç äº‹å®žä¸Šç”± \TeX\ çš„\minref{输出例行程åº}打å°ï¼Œä½ å¯ä»¥ä¿®æ”¹å®ƒä»¬ã€‚
+
+%\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]}.}
+\PlainTeX\ 将页ç è®°å½•åœ¨\minref{寄存器} ^|\count0| 中。%
+(|\pageno| 实际上就是|\count0|的别å。)
+当它输出一个页é¢åˆ° \dvifile 时,
+^^|\shipout//此时显示 {\tt\\count} 寄存器的值|
+\TeX\ 在终端中显示 |\count0| 的值,让你知é“它在排版哪一页。
+也å¯ä»¥æŠŠå¯„存器 |\count1|--|\count9| 用于嵌套的多级页ç 
+(但你必须自己编程)。
+如果这些寄存器的值éžé›¶ï¼Œ\TeX\ 在终端中也显示它们的值。\footnote{
+更准确æ¥è¯´ï¼Œå®ƒä»Ž |\count0| 到 |\count9| ä¾æ¬¡æ˜¾ç¤ºå„寄存器的值,但忽略末尾的零值。
+比如,若 |\count0| 到 |\count3| 为 $(17, 0 , 0, 7)$ 而其他值都为 $0$,
+则 \TeX\ 显示页ç ä¸º {\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$.
+å¦‚æžœé¡µç  $n\ge0$,此命令给 $n$ 加上 $1$ï¼›
+如果 $n<0$ 则给 $n$ å‡åŽ» $1$。
+\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.
+默认情况下,\plainTeX\ 会在页é¢çš„页脚生æˆå±…中的页ç ã€‚
+此命令让 \TeX\ 生æˆç©ºçš„页脚.
+\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.
+此命令生æˆå½“å‰é¡µç ï¼Œå®ƒçš„值等于记录在 ^|\pageno| 中的 $n$。
+è‹¥ $n\ge0$,\TeX\ 用å进制数形å¼ç”Ÿæˆ $n$ï¼›
+è‹¥ $n<0$,\TeX\ 用å°å†™ç½—马数字形å¼ç”Ÿæˆ $-n$。
+\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
+\eix^^{页ç }
+\enddesc
+
+%==========================================================================
+%\subsection{Header and footer lines}
+\subsection{页眉和页脚}
+
+\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.
+这两个å‚数分别指定当å‰çš„页眉和页脚。
+\PlainTeX\ 输出例行程åºå°†æŠŠé¡µçœ‰æ”¾åœ¨å„页顶部,页脚放在å„页底部。
+默认的页眉为空,而默认的页脚为居中的页ç ã€‚
+
+%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.
+页眉和页脚的宽度应该和 |\hsize| 相等(必è¦æ—¶å¯ä»¥ç”¨ |\hfil|,\xref{\hfil})。
+在页眉和页脚中你永远应该加上字体设定命令,
+因为你无法预知 \TeX\ 调用输出例行程åºæ—¶çš„当å‰å­—体。
+如果你ä¸æ˜Žç¡®æŒ‡æ˜Žå­—体,\TeX\ 将使用分页时所用的字体。
+
+%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.
+ä¸è¦è¯•å›¾ç”¨ |\headline| 或 |\footline| 生æˆå¤šè¡Œçš„页眉或页脚。
+å³ä½¿ \TeX\ ä¸ä¼šæŠ¥é”™ï¼Œå®ƒä¹Ÿåªä¼šå‡ºå¾ˆéš¾çœ‹çš„结果。
+在\xrefpg{bighead}中有生æˆå¤šè¡Œé¡µçœ‰æˆ–页脚的方法。
+\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}
+\subsection {标记}
+
+\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.
+\bix^^{标记}
+此命令让 \TeX\ 添加内容为 \<mark text> 的标记到当å‰æ­£æž„造的列表中。
+一般地,此标记命令ä¸åº”该在 “内部â€æž„造中使用,
+例如数学公å¼æˆ–者用 |\hbox|ã€|\vbox| 或 |\vtop| 构造的\minref{ç›’å­}。
+这是因为 \TeX\ 构造页é¢ä¸»ç›’å­æ—¶å°†çœ‹ä¸åˆ°è¿™æ ·çš„标记。
+但是,若你在普通水平\minref{模å¼}中用 |\mark|,
+或者在主竖直列的 hbox 中直接使用 |\mark|,
+该标记将会被转移到主\minref{竖直列}。
+在\knuth{第~259--260~页}中有如何使用 |\mark| 的例å­ã€‚
+\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|.
+这些命令展开为之å‰ç”¨ ^|\mark| 生æˆçš„标记项的标记文本。
+标记文本以记å·åˆ—å½¢å¼è¡¨ç¤ºã€‚
+执行分页工作时,\TeX\ 需è¦å°†é¡µé¢å†…容放入 ^|\box255|,
+然åŽè°ƒç”¨\minref{输出例行程åº}ï¼›
+在这两个步骤之间 \TeX\ 设定这些命令的值如下:
+\ulist\compact
+\li |\firstmark| 包å«é¡µé¢ç¬¬ä¸€ä¸ªæ ‡è®°çš„è®°å·åˆ—。
+\li |\botmark| 包å«é¡µé¢æœ€åŽä¸€ä¸ªæ ‡è®°çš„è®°å·åˆ—。
+\li |\topmark| 包å«ç´§è·Ÿåœ¨é¡µé¢ä¸Šè¾¹çš„那个标记的记å·åˆ—。
+这个标记就是\emph{上一个}页é¢çš„最åŽä¸€ä¸ªæ ‡è®°ï¼Œå³ä¸Šä¸€é¡µçš„ |\botmark|。
+如果上一页没有标记此命令为空。
+\endulist
+\noindent
+如果此页é¢æ²¡æœ‰ä»»ä½•æ ‡è®°ï¼Œ\TeX\ 设定 |\firstmark| å’Œ |\botmark| 都等于 |\topmark|,
+å³å‰é¢æœ€è¿‘的那个标记。
+\knuth{第~258~页}底部的表格说明了 |\firstmark|ã€|\botmark| å’Œ |\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}
+^^{标记//用于分割列表}
+这两个命令展开为之å‰ç”¨ ^|\mark| åœ¨ç«–ç›´ç›’å­ $V$ 中生æˆçš„标记项的标记文本。
+标记文本以记å·åˆ—å½¢å¼è¡¨ç¤ºã€‚
+当你用 ^|\vsplit| 命令(\xref \vsplit )分割 $V$ 时,
+\TeX\ 按如下方å¼è®¾å®šè¿™ä¸¤ä¸ªå‘½ä»¤çš„值:
+\ulist\compact
+\li |\splitfirstmark| åŒ…å« $V$ 中第一个标记的记å·åˆ—。
+\li |\splitbotmark| åŒ…å« $V$ 中最åŽä¸€ä¸ªæ ‡è®°çš„è®°å·åˆ—。
+\endulist
+如果没有 |\vsplit| 命令,或者å‰é¢æœ€è¿‘çš„ |\vsplit| ä¸åŒ…å«ä»»ä½•æ ‡è®°ï¼Œ
+这两个命令ä¸ç”Ÿæˆè®°å·åˆ—。
+\eix^^{标记}
+\enddesc
+
+%==========================================================================
+%\section {Insertions}
+\section {æ’入项}
+
+%\subsection {Footnotes}
+\subsection {脚注}
+
+\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).
+这两个命令用于生æˆè„šæ³¨ã€‚
+其中 \<argument$_1$> 是脚注的“^{å‚考符å·}â€ï¼Œ
+而 \<argument$_2$> 是脚注文本。
+脚注文本必è¦æ—¶å¯ä»¥åŒ…å«å¤šä¸ªæ®µè½ï¼Œä¹Ÿå¯ä»¥åŒ…å«é™ˆåˆ—å…¬å¼ç­‰å…¶ä»–构造,
+但ä¸åº”该包å«ä»»ä½•\minref{æ’入项}(比如其他脚注)。
+
+%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.
+在数学公å¼çš„å­å…¬å¼ä¸­ï¼Œæˆ–者组æˆé¡µé¢çš„ç›’å­çš„å­ç›’å­ä¸­ï¼Œ
+或者任何形å¼çš„æ’入项中,你都ä¸åº”该使用这些命令。
+如果你ä¸ç¡®å®šè¿™äº›é™åˆ¶å‡ºçŽ°åœ¨å“ªé‡Œï¼Œä¸ºå®‰å…¨èµ·è§ï¼Œ
+ä½ å¯ä»¥åªåœ¨æ®µè½å†…或者段è½é—´ç›´æŽ¥ä½¿ç”¨ |\footnote| å’Œ |\vfootnote|。
+
+%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.
+这些é™åˆ¶æ²¡çœ‹èµ·æ¥é‚£ä¹ˆä¸¥é‡ï¼Œå› ä¸ºä½ å¯ä»¥ç”¨ |\vfootnote| 命令添加几乎任何内容的脚注。
+|\foot!-note| å’Œ |\vfoot!-note| 都会在脚注å‰é¢æ’å…¥å‚考符å·ï¼Œ
+区别在于 |\vfoot!-note| ä¸ä¼šåœ¨æ­£æ–‡ä¸­æ’å…¥å‚考符å·ã€‚
+因此,你å¯ä»¥ä¸ç”¨è€ƒè™‘上下文的é™åˆ¶ï¼Œ
+显å¼åœ°å°†å‚考符å·æ”¾åˆ°å®ƒåº”该在的地方,然åŽåœ¨ä¸‹ä¸€ä¸ªæ®µè½ä½¿ç”¨ |\vfootnote| 命令。
+è¿™å¯èƒ½ä¼šå¯¼è‡´è„šæ³¨è·‘到下一页去,此时你å¯ä»¥å°† |\vfootnote| 命令移动到上一个段è½ä¸­ã€‚
+在æžå°‘情况下,你需è¦ä¿®æ”¹æ–‡æ¡£æ­£æ–‡ï¼Œä»¥è®©è„šæ³¨å’Œå‚考符å·å‡ºçŽ°åœ¨åŒä¸€é¡µä¸­ã€‚
+\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}
+\subsection {一般æ’入项}
+
+%\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.
+\begindesc
+\bix^^{æ’入项//用于æ’入项的命令}
+\cts topinsert {\<vertical mode material> {\bt \\endinsert}}
+\cts midinsert {\<vertical mode material> {\bt \\endinsert}}
+\cts pageinsert {\<vertical mode material> {\bt \\endinsert}}
+\explain
+这些命令生æˆä¸åŒå½¢å¼çš„æ’入项,
+它们指示(或者å…许)\TeX\ é‡æ–°æ”¾ç½® \<vertical mode material>:
+\ulist
+\li |\topinsert| 试图将内容放在当å‰é¡µçš„顶部。
+如果那里放ä¸ä¸‹ï¼Œ|\topinsert| 将把该内容移动到顶部å¯æ”¾ä¸‹çš„下一个页é¢ã€‚
+\li |\midinsert| 试图将内容放在当å‰ä½ç½®ï¼Œ
+如果当å‰ä½ç½®æ”¾ä¸ä¸‹ï¼Œ|\midinsert| 将把该内容移动到顶部å¯æ”¾ä¸‹çš„下一个页é¢ã€‚
+\li |\pageinsert| 将把内容å•ç‹¬æ”¾åœ¨ä¸‹ä¸€é¡µã€‚
+为å…得到æ¾æ•£é¡µé¢ï¼Œä¸è¦å¿˜è®°åœ¨å†…容最åŽç”¨ |\vfil| 命令或者其他方å¼å¡«æ»¡é¡µé¢ã€‚
+% 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
+由于 \TeX\ å¯ä»¥ç§»åŠ¨\<vertical mode material>çš„ä½ç½®ï¼Œæˆ‘们称它为“浮动体â€ã€‚^^{浮动体}
+æ’入项对于图形和表格éžå¸¸æœ‰ç”¨ï¼Œ
+因为你å¯ä»¥å°†å®ƒä»¬æ”¾åœ¨æ‰€éœ€çš„地方,而ä¸ç”¨ç®¡å“ªé‡Œä¼šåˆ†é¡µã€‚
+
+%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.
+这些命令æ¯ä¸ªéƒ½ä¼šç»“æŸå½“å‰æ®µè½ï¼Œå› æ­¤ä½ åº”该仅在段è½ä¹‹é—´ä½¿ç”¨å®ƒä»¬ã€‚
+你也ä¸è¦åœ¨ç›’å­å†…部或者å¦ä¸€ä¸ªæ’入项内部使用它们。
+如果有多个æ’入项è¦æ”¾åœ¨åŒä¸€ä¸ªä½ç½®ï¼Œ\TeX\ å°†ä¿æŒå®ƒä»¬çš„å…ˆåŽé¡ºåºã€‚
+\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|.
+此命令结æŸç”± |\topinsert|ã€|\midinsert| 或 |\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|
+\minrefs{insertion}
+这个原始命令æ供了构造æ’入项的内部机制,
+但除了在定义\minref{å®}时会用到,其他时候很少用到它。
+|\foot!-note|ã€|\vfoot!-note|ã€|\top!-insert|ã€|\mid!-insert| å’Œ
+|\page!-insert| 命令的定义都建立在 |\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}
+设计文档的æ’入项时,ä¸åŒçš„æ’入项需è¦åˆ†é…ä¸åŒçš„整数代ç \footnote
+{\texbook{} 用“类â€è¿™ä¸ªæœ¯è¯­è¡¨ç¤ºæ­¤ä»£ç ã€‚
+为é¿å…和“类â€ï¼ˆ\xref{ç±»})的其他æ„æ€æ··æ·†ï¼Œæˆ‘们用ä¸åŒçš„术语。}
+$n$,这个代ç å¯ä»¥ç”¨ ^|\newinsert| 命令(\xref{\@newinsert})得到。
+|\insert|命令本身仅添加 \<vertical mode material> 到当å‰æ°´å¹³åˆ—或\minref{竖直列}。
+而\minref{输出例行程åº}负责移动|\box|$\,n$中的æ’入内容到输出页é¢ã€‚
+^^{输出例行程åº}
+
+%\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}
+\TeX\ 将所有æ’入项按照它们的代ç åˆ†ç»„。æ¯ä¸ªæ’入代ç å…³è”四个\minref{寄存器}:
+\ulist
+\li |\box|$\,n$ ç»™ \TeX\ 用于累积第 $n$ ç§æ’入内容。
+\TeX\ 分页时会尽å¯èƒ½å¤šåœ°å¾€ |\box|$\,n$ 中放入第$n$ ç§æ’入项。
+然åŽè¾“出例行程åºå°†æŠŠè¿™äº›å†…容移动了实际页é¢ä¸Šã€‚
+ä½ å¯ä»¥ç”¨ ^|\ifvoid| 命令\ctsref{\@ifvoid}检查 |\box|$\,n$ 中是å¦æœ‰ä»»ä½•å†…容。
+如果ä¸èƒ½æ”¾ä¸‹å…¨éƒ¨å†…容,\TeX\ 将把剩下内容留到下一页。
+\li |\count|$\,n$ ä¸ºæ”¾å¤§å› å­ $f$。
+\TeX\ 计算第$n$ç§æ’入项所å ç”¨çš„页é¢çºµå‘空间时,将把æ’入内容的纵å‘长度乘以$f/1000$。
+因此对åŒæ æ’入项通常设 $f$ 为 $500$,而对边注项设为 $0$。
+\li |\dimen|$\,n$ 设定æ¯é¡µæ”¾ç½®çš„第$n$ç§æ’入项的最大数目。
+\li |\skip|$\,n$ 设定页é¢åŒ…å«ç¬¬ $n$ ç§æ’入项时 \TeX\ 添加的é¢å¤–间隔。
+这个间隔ä¸åŒ…å«è¯¥æ’入项本身å ç”¨çš„空间。
+例如,当页é¢åŒ…å«è„šæ³¨æ—¶ï¼Œå°±ä¼šç”¨åˆ°æ­¤é—´éš”。
+\endulist
+\noindent
+\TeX\ åªè®¾å®š |\box|$\,n$,你需è¦è®¾å®šå…¶ä»–三个寄存器,
+以让 \TeX\ 正确计算æ’入项所需的竖直空间。
+\knuth{第~122--125~页} 中详细介ç»äº† \TeX\ 如何处ç†æ­¤å‘½ä»¤ï¼Œ
+以åŠæ’入项和分页方å¼ä¹‹é—´çš„关系。
+\xrdef{endofinsert}
+\enddesc
+
+%\see |\floatingpenalty| (\xref \floatingpenalty).
+%\eix^^{insertions//commands for}
+\see |\floatingpenalty| (\xref \floatingpenalty).
+\eix^^{æ’入项//用于æ’入项的命令}
+
+
+%==========================================================================
+%\section{Modifying the output routine}
+\section{修改输出例行程åº}
+
+%\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
+\bix^^{输出例行程åº}
+\begindesc
+\cts output {\param{token list}}
+\explain
+这个å‚数包å«äº†å½“å‰çš„ \minref{输出例行程åº},
+也就是 \TeX\ 当å‘现一个断页点的时候会展开的一个符å·åˆ—表。
+\TeX\ 把当å‰é¡µé¢æ”¾å…¥ ^|\box255|,所以 |\output| 负责对 |\box255| 进行处ç†%
+——ä¸ç®¡æ˜¯æŠŠå®ƒè¾“出到 dvi 还是把它放到别的什么地方去。
+输出例行程åºä¹Ÿè´Ÿè´£æŠŠé¡µçœ‰å’Œé¡µè„šé™„加到页é¢ä¸Šã€‚
+\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 plainoutput {}
+\explain
+这个命令调用 \plainTeX\ 的输出例行程åºã€‚
+^^{输出例行程åº//\plainTeX\ 的默认程åº}
+\PlainTeX\ 把 ^|\output| å®šä¹‰ä¸ºä¸€ä¸ªä»…ä»…åŒ…å« |\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 shipout {\<box>}
+\explain
+这个命令让 \TeX\ 把 \<box> 输出到 \dvifile.
+^^{\dvifile//接收 \b\tt\\shipout\e çš„ç›’å­}
+\TeX\ 在 |\shipout| 时,把 \<box> 中的任何 |\write| 命令进行展开。
+^^|\write// 在 {\tt\\shipout} 时进行展开|
+|\shipout| 的主è¦ç”¨é€”是在输出例行程åºä¸­ï¼Œä¸è¿‡ä½ å¯ä»¥åœ¨ä»»ä½•å…¶ä»–地方使用这个命令。
+\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 deadcycles {\param{number}}
+\explain
+这个å‚数包å«è¿™ \TeX\ 在上次 ^^|\shipout| |\ship!-out|
+åŽå·²ç»åˆå§‹åŒ–çš„\minref{输出例行程åº}的个数。
+\footnote{更加准确地说, \TeX\ 在执行 |\ship!-out| 的时候,
+把 |\dead!-cycles| å½’ $0$,然åŽæ¯æ¬¡æ‰§è¡Œ |\output| 的时候把它增加 $1$。}
+如果 |\deadcycles| å˜å¾—太大,那你很有å¯èƒ½æŠŠ \TeX\ 弄死循环了,
+也就是说,循环往å¤åœ°å¯¹åŒä¸€ä¸ªé¡µé¢è¿›è¡Œåˆ†é¡µæ“作。
+\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 maxdeadcycles {\param{number}}
+\explain
+如果 |\deadcycles| 超过了 |\maxdeadcycles|,那 \TeX\ 就会å‡å®šè¾“出例行程åºè¢«ç”¨æˆ·æ­»å¾ªçŽ¯äº†ï¼Œ
+\TeX\ 这个时候就会报错,并且执行它自己默认的简å•è¾“出例行程åºï¼Œä¹Ÿå°±æ˜¯ |\shipout!allowbreak\box255|,
+以期望从循环中跳出。\PlainTeX\ 把 |\maxdeadcycles| 设置为 \hbox{$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 outputpenalty {\param{number}}
+\explain
+\TeX\ 在断页的时候设置这个å‚数。
+如果断点是在一个 \minref{惩罚} 的项目上,\TeX\ 就会移除这个惩罚,
+然åŽæŠŠ |\outputpenalty| 设置æˆæ–­ç‚¹å¤„的值, å¦åˆ™ |\outputpenalty| å°±è¢«è®¾æˆ \hbox{$0$}。
+
+如果你希望在 \TeX\ 选择的断点之外的的其他地方断页,而ä¸åœ¨è¯¥æ–­ç‚¹å¤„断页,
+那么在é‡æž„这个页é¢æ—¶ï¼Œä½ å°±éœ€è¦åœ¨ \TeX\ 选择的断点处é‡æ–°è®¾ç½®è¿™ä¸ªæƒ©ç½šã€‚
+ä½ å¯ä»¥é€šè¿‡ |\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
+
+\begindesc
+\cts holdinginserts {\param{number}}
+\explain
+
+当 \TeX\ 在处ç†ä¸€ä¸ªæ–­é¡µæ—¶ï¼Œè¿™ä¸ªå‚数如果大于 $0$, 那么 \TeX\ 就会阻止处ç†æ’入。
+当你写一个输出例行程åºçš„时候,如果你希望é‡æ–°å¤„ç†è¯¥é¡µçš„内容,
+(例如输出例行程åºæœ¬èº«ç”¨çš„ |\vsize| (\xref \vsize) 和断页程åºç”¨çš„并éžç›¸åŒå€¼ï¼‰ï¼Œ
+那么把这个å‚数设为 $1$ 就会很有用。
+
+\eix^^{输出例行程åº}
+\enddesc
+
+
+%==========================================================================
+%\section {Splitting vertical lists}
+\section {分割竖直列表}
+
+%\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|.
+
+\begindesc
+\cts vsplit {\<number> {\bt to} \<dimen>}
+\explain
+这个命令使得 \TeX\ 把寄存器中编å·ä¸º \<number> çš„\minref{ç›’å­} $B_2$ 切割æˆä¸¤ä¸ªéƒ¨åˆ†ã€‚
+如果 $B_2$ 是一个页é¢ï¼Œé‚£è¿™ä¸ªå‘½ä»¤ä¼šä½¿ç”¨ç›¸åŒçš„算法æ¥æŠŠè¿™ä¸ªé¡µé¢åˆ†ä¸ºä¸¤éƒ¨åˆ†ï¼›
+è¿™ç§æƒ…况下,分割处就是断页的地方。
+$B_2$这个盒å­å¿…须是个竖直盒å­ï¼Œä¸æ˜¯æ°´å¹³ç›’å­ã€‚
+\TeX\ 把从开头到分割处的部分放到å¦ä¸€ä¸ªç›’å­ $B_1$ 中,而把分割处到结尾的部分放到 $B_2$ 中。
+ç„¶åŽ |\vsplit| 就输出了 $B_1$ 这个盒å­ã€‚
+一般情况下,你会用类似下é¢ä¾‹å­çš„æ–¹å¼ï¼ŒæŠŠ $B_1$ ç›’å­æŒ‡å®šåˆ°å¦ä¸€ä¸ªç›’å­å¯„存器中。
+如果分割处æ°å¥½æ˜¯ $B_2$ ç›’å­çš„结尾部分,那 $B_2$ ç›’å­å°±ä¼šåœ¨ |\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.
+
+\TeX\ 使用它一贯的断页算法æ¥åˆ†å‰²è¿™ä¸ªç«–ç›´ç›’å­ã€‚
+它使用 \<dimem> 的长度æ¥æŒ‡å®š $B_1$ ç›’å­éœ€è¦çš„高度 ^|\pagegoal|。
+而$B_1$ 的竖直长度未必就一定是 \<dimem>,因为 \TeX\ ä¸ä¸€å®šèƒ½å®Œç¾Žåœ°è¾¾åˆ°å…¶åˆ†é¡µçš„目标。
+\TeX\ 在计算这个竖直分割的时候,ä¸è€ƒè™‘æ’入,因此 $B_2$ æ’入的原本的竖直列表ä¾ç„¶ä¼šè¢«ä¿ç•™ï¼Œä½†å¹¶ä¸ä¼šå—到分割的影å“。
+
+
+%\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
+
+\example
+\setbox 20 = \vsplit 30 to 7in
+% 把30å·ç›’å­æˆªåŽ»7英寸,并放到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 splitmaxdepth {\param{dimen}}
+\explain
+æ­¤å‚数指定|\vsplit|产生的盒å­çš„最大å…许深度。
+|\splitmaxdepth| 在盒å­ä¸­å’Œ ^|\maxdepth| (\xref \maxdepth) 在页é¢ä¸­æ‰®æ¼”的角色相åŒã€‚
+\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
+
+\begindesc
+\cts splittopskip {\param{glue}}
+\explain
+这个å‚数指定 \TeX 在 |\vsplit| 产生的盒å­çš„头部æ’入的粘连。
+|\splittopskip| 在盒å­ä¸­å’Œ ^|\topskip| (\xref \topskip) 在页é¢ä¸­æ‰®æ¼”的角色相åŒã€‚
+\enddesc
+
+
+%\see |\splitbotmark|, |\splitfirstmark| (\xref \splitfirstmark).
+
+\see |\splitbotmark|, |\splitfirstmark| (\xref \splitfirstmark).
+
+\enddescriptions
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter \byebye
diff --git a/info/impatient/cn/paras.tex b/info/impatient/cn/paras.tex
new file mode 100644
index 0000000000..9609e9886a
--- /dev/null
+++ b/info/impatient/cn/paras.tex
@@ -0,0 +1,3536 @@
+% -*- coding: utf-8 -*-
+% 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.
+% 中文翻译:Zhaopeng Xing (zpxing@gmail.com)
+% 中文翻译:zohooo (zohooo@yeah.net)
+
+\input macros
+
+% \chapter {Commands \linebreak for composing \linebreak paragraphs}
+\chapter {组段命令}
+
+% \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
+
+\chapterdef{paras}
+
+这一章介ç»äº†ä¸Žå­—符, å•è¯, 行以åŠæ•´æ®µç›¸å…³çš„命令.
+本章写作惯例的说明å¯ä»¥åœ¨\headcit{命令æè¿°}{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
+
+\section {字符和é‡éŸ³ç¬¦}
+
+%==========================================================================
+\subsection {欧洲语言字æ¯å’Œè¿žå†™}
+
+\begindesc
+\xrdef{fornlets}
+\bix^^{连写}
+^^{特殊符å·}
+^^{欧洲语言字æ¯}
+%
+\ctsx AA {æ–¯å ªåœ°çº³ç»´äºšæ–‡å­—æ¯ \AA}
+\ctsx aa {æ–¯å ªåœ°çº³ç»´äºšæ–‡å­—æ¯ \aa}
+\ctsx AE {\AE\ 连写}
+\ctsx ae {\ae\ 连写}
+\ctsx L {æ³¢å…°æ–‡å­—æ¯ \L}
+\ctsx l {æ³¢å…°æ–‡å­—æ¯ \l}
+\ctsx O {丹麦/挪å¨æ–‡å­—æ¯ \O}
+\ctsx o {丹麦/挪å¨æ–‡å­—æ¯ \o}
+\ctsx OE {\OE\ 连写}
+\ctsx oe {\oe\ 写写}
+\ctsx ss {å¾·æ–‡å­—æ¯ \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.}
+这些命令å¯ä»¥äº§ç”Ÿæ¬§æ´²è¯­è¨€çš„å„ç§å­—符和连写。
+在文本中å¶è€Œå‡ºçŽ°è¿™äº›è¯­è¨€çš„å•è¯å’Œè¯ç»„时它们显得很有用。
+但是如果需è¦æŽ’å°å¤§é‡çš„欧洲语言文本时,
+ä½ å¯èƒ½ä¼šåŽ»ä½¿ç”¨ä¸€ä¸ªä¸ºè¿™äº›è¯­è¨€å®šåˆ¶çš„ \TeX\ 版本。
+\footnote{\TeX\ 用户组织 (\xref{resources}) å¯ä¸ºä½ æä¾› \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
+当你在一个å•è¯ä¸­ä½¿ç”¨è¿™äº›å‘½ä»¤æ—¶ï¼Œéœ€è¦åœ¨å®ƒä»¬åŽé¢åŠ ä¸Šä¸€ä¸ªç©ºæ ¼ï¼Œ
+这样,\TeX\ 会把它åŽé¢çš„å­—æ¯å½“作是这个è¯è¯­çš„一部分而ä¸æ˜¯è¿™ä¸ªå‘½ä»¤çš„一部分。
+ä½ ä¸éœ€ä¸ºäº†ä½¿ç”¨è¿™äº›ç¬¦å·è€Œè¿›å…¥\minref{数学模å¼}。
+\example
+{\it les \oe vres de Moli\`ere}
+|
+\produces
+{\it les \oe vres de Moli\`ere}
+\endexample
+\eix^^{连写}
+\enddesc
+
+%==========================================================================
+%\subsection {Special symbols}
+\subsection {专用符å·}
+
+% \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.
+\begindesc
+^^{特殊字符}
+%
+\easy\ctspecialx # \ctsxrdef{@pound} {è‹±é•‘ç¬¦å· \# \footnote{译注:
+ä½äºŽé”®ç›˜çš„æ•°å­— 3 之上,英å¼é”®ç›˜ä¸ºè‹±é•‘符å·ï¼Œç¾Žå¼é”®ç›˜ä¸ºæ•°å­—ç¬¦å· \#。}}
+\ctspecialx $ \ctsxrdef{@bucks} {ç¾Žå…ƒç¬¦å· \$}
+\ctspecialx % \ctsxrdef{@percent} {ç™¾åˆ†å· \%}
+\ctspecialx & \ctsxrdef{@and} {和 \&}
+\ctspecialx _ \ctsxrdef{@underscore} {下划线 \_}
+\ctsx lq {å·¦å¼•å· \lq}
+\ctsx rq {å³å¼•å· \rq}
+\aux\ctsx lbrack å·¦ä¸­æ‹¬å· [
+\aux\ctsx rbrack å³ä¸­æ‹¬å· ]
+\ctsx dag {çŸ­å‰‘ç¬¦å· \dag}
+\ctsx ddag {åŒå‰‘ç¬¦å· \ddag}
+\ctsx copyright {版æƒç¬¦å· \copyright}
+\ctsx P {段è½ç¬¦å· \P}
+\ctsx S {ç« èŠ‚ç¬¦å· \S}
+\explain
+这些命令å¯ä»¥äº§ç”Ÿå„ç§ç‰¹æ®Šå­—符和符å·ã€‚å‰äº”个是必需的,
+因为 \TeX\ é»˜è®¤åœ°æŠŠç¬¦å· (|#|, |$|, |%|, |&|, |_|) 作特殊的用途。
+ä½ ä¸ç”¨ä¸ºäº†ä½¿ç”¨è¿™äº›ç¬¦å·è€Œè¿›å…¥\minref{数学模å¼}。
+
+% 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
+\example
+\dag 在这边它åªè¦èŠ±è´¹ä½  \$9.98ï¼Œä½†åœ¨è‹±æ ¼å…°è¦ {\it \$}24.98。
+|
+\produces
+\dag 在这边它åªè¦èŠ±è´¹ä½  \$9.98ï¼Œä½†åœ¨è‹±æ ¼å…°è¦ {\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.
+
+\begindesc
+\cts TeX {}
+\explain
+这个符å·å¯ä»¥å¾—到 \TeX\ 的标志.
+如果你需è¦åœ¨åŽé¢åŠ ä¸Šç©ºæ ¼,
+请在其åŽåŠ ä¸Š |\!vs| 或者把它放到一个\minref{组}中.
+
+% \example
+% A book about \TeX\ is in your hands.
+% |
+% \produces
+% A book about \TeX\ is in your hands.
+% \endexample
+% \enddesc
+
+\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
+
+\begindesc
+\cts dots {}
+\explain
+^^{点å·}
+这个命令å¯ä»¥äº§ç”Ÿä¸€ä¸ª^{çœç•¥å·}, 也就是在文本中的三个å°ç‚¹.
+它必须使用在数学模å¼ä¸­; 如果你想在å•è¯é—´åŠ å…¥çœç•¥å·,
+你应该使用 |$\ldots$| 命令\ctsref{\ldots}.
+|\dots|å·²ç»æ’入了它所应有的空白, 所以你ä¸å¿…在åŽé¢åŠ ä¸Š|\!vs|.
+\example
+数列 $x_1$, $x_2$, \dots, $x_\infty$
+永远也ä¸ä¼šç»“æŸ
+|
+\produces
+数列 $x_1$, $x_2$, \dots, $x_\infty$
+永远也ä¸ä¼šç»“æŸ
+\endexample
+\enddesc
+
+%\see ``Miscellaneous ordinary math symbols'' (\xref{specsyms}).
+\see ``å„ç§å¸¸ç”¨æ•°å­¦ç¬¦å·'' (\xref{specsyms}).
+%==========================================================================
+%\subsection {Arbitrary characters}
+\subsection {ä»»æ„字符}
+
+% \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
+\bix^^{字符}
+\cts char {\<charcode>}
+\explain
+这个命令å¯ä»¥äº§ç”Ÿå½“å‰å­—体在 \<charcode> ä½ç½®çš„字符.
+\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
+\begindesc
+\cts mathchar {\<mathcode>}
+\explain
+这个命令å¯ä»¥äº§ç”Ÿç”± \<mathcode> 所指定的类,æ—以åŠä½ç½®çš„数学字符。
+这个命令仅能用在数学模å¼ä¸­ã€‚
+\example
+\def\digger{\mathchar "027F} % åƒ plain TeX çš„ \spadesuit.
+% 0ç±», 2æ—, "7F ä½ç½®.
+$\digger$
+|
+\produces
+\def\digger{\mathchar "027F}
+% 0ç±», 2æ—, "7F ä½ç½®.
+$\digger$
+\endexample
+\enddesc
+
+% \see |\delimiter| (\xref\delimiter).
+% \eix^^{characters}
+\see |\delimiter|(\xref\delimiter )。
+\eix^^{字符}
+
+%==========================================================================
+%\subsection {Accents}
+\subsection {é‡éŸ³ç¬¦å·}
+
+% \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}).
+\begindesc
+^^{é‡éŸ³}
+\xrdef{accents}
+%
+\ctspecialx ' \ctsxrdef{@prime} {^{é”音符} 比如 \'e}
+\ctspecialx . \ctsxrdef{@dot} {^{上点符} 比如 \.n}
+\ctspecialx = \ctsxrdef{@equal} {^{长音符} 比如 \=r}
+\ctspecialx ^ \ctsxrdef{@hat} {^{扬抑符} 比如 \^o}
+\ctspecialx ` \ctsxrdef{@lquote} {^{é’音符} 比如 \`e}
+\ctspecialx " \ctsxrdef{@quote} {^{分音符} 比如 \"o}
+\ctspecialx ~ \ctsxrdef{@not} {^{波浪符} 比如 \~a}
+\ctsx c {^{软音符} 比如 \c c}
+\ctsx d {^{下点符} 比如 \d r}
+\ctsx H {^{匈牙利分音符} 比如 \H o}
+\ctsx t {^{连音符} 比如 \t uu}
+\ctsx u {^{短音符} 比如 \u r}
+\ctsx v {^{抑扬符} 比如 \v o}
+\explain
+这些命令为普通文本产生é‡éŸ³è®°å·ã€‚通常,你需è¦ä¸ºå…¶ä¸­ä»¥å•ä¸ªå­—æ¯è¡¨ç¤ºçš„音符åŽé¢ç•™ä¸€
+个空格(å‚è§ ``空格'', \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
+
+\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 i {}
+\cts j {}
+\explain
+è¿™äº›å‘½ä»¤äº§ç”Ÿæ— ç‚¹çš„å­—æ¯ `i' å’Œ `j'。在普通文本中,如果需è¦ä¸º`i' å’Œ `j'
+标记é‡éŸ³ï¼Œå°±ä½¿ç”¨å®ƒä»¬ã€‚
+^^{无点字æ¯}
+在数学公å¼é‡Œï¼Œæ— ç‚¹çš„`i' å’Œ `j' 使用 ^|\imath| å’Œ ^|\jmath| 命令 (\xref\imath)。
+\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
+
+\begindesc
+\cts accent {\<charcode>}
+\explain
+^^{é‡éŸ³}
+这个命令为åŽé¢çš„字符加上é‡éŸ³æ ‡è®°ã€‚é‡éŸ³æ˜¯å½“å‰å­—体里 \<charcode> ä½ç½®çš„
+字符。\TeX\ å‡å®šé‡éŸ³ç¬¦å·è¢«è®¾è®¡çš„比åŒæ ·å­—体里的字符高 $1$\thinspace ex。
+如果需è¦æ ‡è®°é‡éŸ³çš„字符过高或者过低,\TeX\ 自动调整é‡éŸ³ä½ç½®ã€‚ä½ å¯ä»¥åœ¨é‡
+音符å·å’Œå…¶åŽçš„字符之间切æ¢\minref{字体}。如果é‡éŸ³ç¬¦å·è¢«è®¾è®¡çš„很å¦
+类,\TeX\ å°†ä¸ä¼šäº§ç”Ÿè­¦å‘Šï¼›åªæ˜¯æŽ’å°å‡ºä¸€äº›ç¨€å¥‡å¤æ€ªçš„结果。
+\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 æ•°å­¦é‡éŸ³ï¼ˆ\xref{mathaccent})。
+\enddesc
+%==========================================================================
+%\subsection {Defeating boundary ligatures}
+\subsection 处ç†é¡µè¾¹è¿žå†™
+
+% \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
+
+\begindesc
+\bix^^{连写}
+\cts noboundary {}
+\explain
+æŸäº›æ—¶å€™ï¼Œ\TeX{} 对å•è¯çš„开头或者末尾字符连写或者紧排。你å¯ä»¥ç´§æŽ¥ç€å•è¯
+å‰é¢æˆ–者åŽé¢æ”¾ä¸€ä¸ª |\noboundary| æ¥å–消它们。有些éžè‹±æ–‡å­—体包å«ä¸€ä¸ªä¸“
+门的边界字符,被 \TeX{} 放在å•è¯çš„å‰åŽã€‚这个边界字符ä¸å ç©ºé—´ï¼Œæ‰“å°å‡ºæ¥
+也ä¸å¯è§ã€‚它å¯ä»¥æˆä¸ºèƒ½è¢«ç´§æŽ’或连写的一串字符的组æˆéƒ¨åˆ†ï¼Œæ‰€ä»¥æœ‰äº†
+它,\TeX{} å¯ä»¥å¯¹å•è¯çš„头尾åšåˆ«è‡´çš„处ç†ã€‚(标准的\TeX{} 字体ä¸åŒ…å«æ­¤è¾¹
+界字符) |\noboundary| 的效果是删除存在的边界字符,从而防止 \TeX{} 识
+别连写或紧排。
+\eix^^{连写}
+\enddesc
+
+%==========================================================================
+%\section {Selecting fonts}
+\section {选择字体}
+
+%\xrdef{selfont}
+\xrdef{selfont}
+%==========================================================================
+%\subsection {Particular fonts}
+\subsection {特定字体}
+
+% \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
+^^{字体}
+%
+\ctsx fivebf {使用 $5$ 点粗体}
+\ctsx fivei {使用 $5$ 点数学æ„大利体}
+\ctsx fiverm {使用 $5$ 点罗马体}
+\ctsx fivesy {使用 $5$ 点数学符å·å­—体}
+\ctsx sevenbf {使用 $7$ 点粗体}
+\ctsx seveni {使用 $7$ 点数学æ„大利体}
+\ctsx sevenrm {使用 $7$ 点罗马体}
+\ctsx sevensy {使用 $7$ 点数学符å·å­—体}
+\ctsx tenbf {使用 $10$ 点粗体}
+\ctsx tenex {使用 $10$ 点数学扩展字体}
+\ctsx teni {使用 $10$ 点数学æ„大利体}
+\ctsx tenrm {使用 $10$ 点罗马体}
+\ctsx tensl {使用 $10$ 点斜罗马体}
+\ctsx tensy {使用 $10$ 点数学符å·å­—体}
+\ctsx tenit {使用 $10$ 点æ„大利体}
+\ctsx tentt {使用 $10$ 点打字机字体}
+\explain
+这些命令使 \TeX{} 用指定的字体排版åŽé¢çš„文本。一般你å¯ä»¥æŠŠå­—体选择命令
+和相应的文本置于åŒä¸€ä¸ªç¼–组中。编组之外使用一个字体选择命令直到文档最åŽã€‚
+(除éžä¸­é€”用å¦ä¸€ä¸ªç±»ä¼¼çš„命令覆盖掉它)
+\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
+
+\begindesc
+\cts nullfont {}
+\explain
+è¿™ä¸ªå‘½ä»¤é€‰æ‹©ä¸€ç§ \TeX{} 内置的没有任何字符的空字体。在一æ—数学字体
+中,\TeX{} 将用它å–代其中没有定义的字体。
+\enddesc
+
+%==========================================================================
+%\subsection {Type styles}
+\subsection {字体风格}
+
+% \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
+\xrdef{seltype}
+\begindesc
+^^{字体风格}
+\easy\ctsx bf {粗体}
+\ctsx it {æ„大利体}
+\ctsx rm {罗马体}
+\ctsx sl {斜体}
+\ctsx tt {打字机字体}
+\explain
+这些命令选择一ç§å­—体风格,而ä¸æ”¹å˜å­—样或者字å·ã€‚
+\footnote{译注:注æ„区分字样(typeface)和字体(font),字样指一整套统一设计的字体。}
+\footnote{\TeX\ 并ä¸æ供预定义的命令æ¥æ”¹å˜å­—å·ï¼Œæ¯”如,|\eightpoint|。è¦æ”¯æŒè¿™æ ·çš„命令,
+需è¦å¤§é‡çš„字体,å¯èƒ½å¾ˆå¤šä»Žæ¥éƒ½ä¸ä¼šç”¨åˆ°ã€‚这样的命令曾被用æ¥æŽ’版\texbook。}
+一般情况下,这些字体风格命令和相应的文本被一起包å«åœ¨ä¸€ä¸ªç¼–组里。
+如果放在编组之外,效果将会作用于文档剩余部分(除éžç”¨å¦å¤–一个这样的命令覆盖它)。
+\example
+The Dormouse was {\it not} amused.
+|
+\produces
+The Dormouse was {\it not} amused.
+\endexample
+\enddesc
+
+% \see ``Fonts in math formulas'' (\xref{mathfonts}).
+\see ``数学公å¼å­—体''(\xref{mathfonts})。
+
+%==========================================================================
+% \section {Uppercase and lowercase}
+\section {大写和å°å†™}
+
+% \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.
+
+
+\begindesc
+\bix^^{大å°å†™è½¬æ¢}
+\bix^^{大写字æ¯//转æ¢ä¸ºå¤§å†™å­—æ¯}
+\bix^^{å°å†™å­—æ¯//转æ¢ä¸ºå°å†™å­—æ¯}
+\cts lccode {\<charcode> \tblentry{number}}
+\cts uccode {\<charcode> \tblentry{number}}
+\explain
+|\lccode| å’Œ |\uccode| 的值为$256$个输入字符设定大å°å†™çš„对应关系。
+|\lowercase| å’Œ |\uppercase| å‘½ä»¤ä»¥åŠ \TeX\ çš„æ–­è¯ç®—法将会使用这些值。
+
+% \TeX\ initializes the values of |\lccode| and |\uccode| as follows:
+\TeX\ 这样åˆå§‹åŒ– |\lccode|å’Œ|\uccode|的值:
+%\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
+\ulist\compact
+\li å°å†™å­—æ¯çš„|\lccode|是它的{\ascii}代ç ã€‚
+\li 大写字æ¯çš„|\lccode|是它的å°å†™å½¢å¼çš„{\ascii}代ç ã€‚
+\li 大写字æ¯çš„|\uccode|是它的{\ascii}代ç ã€‚
+\li å°å†™å­—æ¯çš„|\lccode|是它的大写形å¼çš„{\ascii}代ç ã€‚
+\li éžå­—æ¯å­—符的|\lccode|å’Œ|\uccode|都是零。
+\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
+大多数时候,没有必è¦æ”¹å˜è¿™äº›å€¼ï¼Œé™¤éžä½ ä½¿ç”¨çš„语文的字æ¯æ¯”英文多。
+\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
+\begindesc
+\cts lowercase {\rqbraces{\<token list>}}
+\cts uppercase {\rqbraces{\<token list>}}
+\explain ^^{大å°å†™è½¬æ¢}
+这些命令按照|\lccode|å’Œ|\uccode|的值转æ¢\<token list>中的字æ¯ï¼ˆç±»åˆ«ç ä¸º$11$的)为它们的大写和å°å†™å½¢å¼ã€‚
+éžå­—æ¯å­—符ä¸å—å½±å“,å³ä½¿å®ƒä»¬æ˜¯\minref{å®}调用或其他展开æˆå­—æ¯çš„命令。
+\example
+\def\x{Cd} \lowercase{Ab\x} \uppercase{Ab\x}
+|
+\produces
+\def\x{Cd} \lowercase{Ab\x} \uppercase{Ab\x}
+
+\eix^^{大å°å†™è½¬æ¢}
+\eix^^{大写字æ¯//转æ¢ä¸ºå¤§å†™å­—æ¯}
+\eix^^{å°å†™å­—æ¯//转æ¢ä¸ºå°å†™å­—æ¯}
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\section {Interword spacing}
+\section {å•è¯é—´è·}
+
+%\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$.
+\begindesc
+\bix^^{é—´éš”//å•è¯é—´è·}
+\writeidxfalse
+\easy\ctsbasic {\\\vs}{}
+\blankidxref\ctsxrdef{@space}
+\writeidxtrue
+\explain
+这个命令明确地产生一个å•è¯é—´ç©ºæ ¼ï¼Œç§°ä¸º``^{控制空格}''。
+当一个字æ¯å‡ºçŽ°åœ¨ä¸€ä¸ªæŽ§åˆ¶åºåˆ—之åŽæˆ–者其他情况下你ä¸æƒ³è®©ä¸¤ä¸ªè®°å·æŽ’在一起时,就è¦ç”¨åˆ°æŽ§åˆ¶ç©ºæ ¼ã€‚
+ç”±|\!vs|产生的空白ä¸å—å‰é¢æ ‡ç‚¹çš„å½±å“,å³å…¶è·ç¦»å› å­
+(\xref\spacefactor)为$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
+
+
+如果你想打å°å‡º`\vs' ^^{å¯è§ç©ºæ ¼}空格,å¯ä»¥è¾“å…¥
+|{\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
+\cts space {}
+\explain
+这个命令等价于一个输入的空格字符。和 \writeidxfalse^|\ |\writeidxtrue ä¸åŒï¼Œ
+它的宽度\emph{会}å—到å‰é¢æ ‡ç‚¹çš„å½±å“。
+\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
+\ctsact ^^M \xrdef{@newline}
+\explain
+这将产生^{行尾}字符。通常有两个效果:
+\olist
+\li 类似一个命令,产生一个输入的空格(如果它出现在一个éžç©ºè¡Œçš„尾部)或者一个
+|\par|è®°å·ï¼ˆå¦‚果出现在空行的尾部)。^^|\par//æ¥è‡ªç©ºè¡Œ|
+\li 结æŸä¸€è¡Œï¼Œä½¿\TeX{}忽略剩余的字符。
+\endolist
+\noindent
+但是,如果以|`\^^M|ï¼ˆå³ control-M çš„ ASCII ä»£ç  13)出现,|^^M|\emph{ä¸ä¼š}结æŸä¸€è¡Œã€‚
+ä½ å¯ä»¥ä¿®æ”¹\minref{类别ç },从而赋予它新的å«ä¹‰ã€‚
+关于|^^|更多的解释请å‚è§\xrefpg{twocarets}。
+\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\ctsact ~ \xrdef{@not}
+\explain
+\minref{活动字符}`|~|'称为``^{带å­}''(tie),它产生一个正常的å•è¯é—´ç©ºç™½ï¼Œ
+åŒæ—¶ä¿è¯å‰åŽä¸¤ä¸ªå•è¯ä¹‹é—´ä¸ä¼šæ–­è¡Œã€‚åªè¦æ–­è¡Œä¼šæœ‰æ­§ä¹‰ï¼Œå°±åº”该使用带å­ã€‚
+比如,在中间å之å‰ï¼Œç¼©å†™è¯``Dr.''之åŽï¼Œæˆ–者``Fig.''之åŽï¼šåƒ``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}
+\begindesc
+\easy\ctspecial / \ctsxrdef{@slash}
+\explain
+\TeX\ \minref{字体}中æ¯ä¸ªå­—符都有``^{倾斜修正}''。直立字体的倾斜修正一般就是零。
+当从倾斜的字体(ä¸ä¸€å®šæ˜¯æ„大利体)切æ¢åˆ°ç›´ç«‹çš„字体时,倾斜修正会增加é¢å¤–的空白。
+这个é¢å¤–的空白之所以必è¦ï¼Œæ˜¯å› ä¸ºå€¾æ–œçš„字符略微挤å äº†åŽé¢çš„空格ä½ç½®ï¼Œ
+当åŽé¢è·Ÿç€ç›´ç«‹å­—体时,会显得中间的空格太å°ã€‚
+所有字符的倾斜修正都包å«åœ¨å­—体的度é‡æ–‡ä»¶é‡Œã€‚
+^^{度é‡æ–‡ä»¶//其中的倾斜修正}
+
+%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
+命令|\/|产生对å‰é¢å­—符的^{倾斜修正}。当从倾斜字体切æ¢åˆ°ç›´ç«‹å­—体的时候,
+å¿…é¡»è¦æ’入倾斜修正,除éžä¸‹ä¸€ä¸ªå­—符是å¥ç‚¹æˆ–逗å·ã€‚
+\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 frenchspacing {}
+\cts nonfrenchspacing {}
+\explain
+^^{å•è¯é—´è·}
+\TeX{}一般会为了标点符å·è€Œè°ƒæ•´å•è¯é—´è·ã€‚例如,一个å¥å­çš„末尾会有é¢å¤–的空白,
+å¥å°¾æ ‡ç‚¹ç¬¦å·ä¹‹åŽçš„\minref{粘连}会被拉长。
+|\frenchspacing|命令让\TeX{}调整å•è¯é—´è·æ—¶å¿½ç•¥æ ‡ç‚¹ç¬¦å·ï¼›
+|\nonfrenchspacing|命令让\TeX{}使用正常间è·ï¼Œå³ä¸ä½¿ç”¨|\frenchspacing|效果。
+
+%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
+
+
+关于\TeX{}如何处ç†å¥å°¾æ ‡ç‚¹ï¼Œè¯·å‚考\xrefpg{periodspacing}。
+\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 obeyspaces {}
+\explain
+\TeX\ 把连续的空格处ç†ä¸ºä¸€ä¸ªç©ºæ ¼ã€‚
+|\obeyspaces|的作用是输入多少空格,就输出多少。
+但是|\obeyspaces|ä¸ä¼šæ˜¾ç¤ºè¡Œé¦–的空格。这时候推è使用|\obey!-white!-space|,其定义在|eplain.tex|中(\xref{ewhitesp})。
+^^|\obeywhitespace|
+|\obeyspaces|主è¦ç”¨äºŽä»¥ç­‰å®½å­—体打å°è®¡ç®—机代ç ï¼Œä»¥åŠæ˜¾ç¤ºæ‰€è§å³æ‰€å¾—的内容。
+
+
+|\obeylines|命令(\xref{\obeylines})的作用是让\TeX{}输出跟你所输入的一模一样的行。|\obeylines|ç»å¸¸å’Œ|\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.
+\begindesc
+\cts spacefactor {\param{number}}
+\cts spaceskip {\param{glue}}
+\cts xspaceskip {\param{glue}}
+\cts sfcode {\<charcode> \tblentry{number}}
+\explain
+这些基本\minref{å‚æ•°}å½±å“相邻å•è¯ä¹‹é—´çš„空白,å³^{å•è¯é—´è·}。
+默认的å•è¯é—´è·ç”±å½“å‰å­—体决定。
+当\TeX\ 处ç†ä¸€ä¸ª\minref{水平列表}时,会监视 |\spacefactor| ^{间隔因å­} $f$。
+æ¯å½“一个输入字符$c$被处ç†æ—¶ï¼Œ$f$就会éš$f_c$($c$的间隔因å­ä»£ç ï¼‰çš„值而更新。
+大多数的字符,$f_c$是$1000$,因此\TeX\ 设定$f$为$1000$。($f$çš„åˆå§‹å€¼ä¹Ÿæ˜¯$1000$。)
+当\TeX\ é‡åˆ°ä¸€ä¸ªå•è¯é—´ç©ºæ ¼çš„时候,就会调整间隔的大å°ï¼Œ
+给该间隔的伸长é‡å’Œæ”¶ç¼©é‡åˆ†åˆ«ä¹˜ä»¥ $f/1000$ å’Œ $1000/f$。
+所以:
+\olist\compact
+\li 当$f=1000$时,å•è¯é—´è·ä¸ºé»˜è®¤å€¼ã€‚
+\li 当$f<1000$时,å•è¯é—´è·æœ‰æ›´å°‘\minref{伸长é‡}更多\minref{收缩é‡}。
+\li 当$f>1000$时,å•è¯é—´è·æœ‰æ›´å¤š\minref{伸长é‡}æ›´å°‘\minref{收缩é‡}。
+\endolist
+% > changed to \ge on the next line after second edition was typeset.
+% Correction made by A-W production.
+å¦å¤–,如果$f\ge2000$,当å‰å­—体的``é¢å¤–空白''å‚数会让å•è¯é—´è·è¿›ä¸€æ­¥å¢žå¤§ã€‚
+
+%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$.
+æ¯ä¸€ä¸ªè¾“入字符$c$对应于|\sfcode|(间隔因å­ä»£ç ï¼‰è¡¨ä¸­çš„一项。
+|\sfcode|表项与字体无关。通常\TeX\ 处ç†å®Œ$c$之åŽå°±è®©$f$等于$f_c$。
+但是:
+\ulist
+\li 如果$f_c$为零,$f$å°†ä¸å˜ã€‚所以\plainTeX\ 中$f_c$为零的字符,
+如`|)|',对于å•è¯é—´è·çš„计算毫无影å“。
+\li 如果$f<1000<f_c$,\TeX\ 会让$f$为$1000$而ä¸æ˜¯$f_c$,也就是,ä¸ä¼šè®©$f$快速地增加。
+\endulist
+å¥å·çš„|\sfcode|值通常是$3000$,所以\TeX\ 会在å¥å·ä¹‹åŽå¢žåŠ é¢å¤–的空白。%
+(å‚è§ä¸Šé¢$f\ge2000$的情形)。水平列表中的éžå­—符,
+比如竖直标线,一般视为间隔因å­ä¸º $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
+通过修改 |\spacefactor| 的值,就å¯ä»¥æ˜¾å¼åœ°è°ƒæ•´é—´éš”å› å­ã€‚
+通过修改 |\xspaceskip| 或者 |\spaceskip| 的值,你还å¯ä»¥è¦†ç›–默认的å•è¯é—´è·ï¼š
+\ulist
+\li |\xspaceskip| 设定 $f\ge2000$ 时的粘连;如果 |\xspaceskip| 是零,就å–默认值。
+\li |\spaceskip| 设定 $f<2000$ 或者 |\xspaceskip| 为零时的粘连;
+如果|\spaceskip|是零,就å–默认值。
+|\spaceskip| 粘连的伸长或收缩ä¾$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
+\knuth{第~76~页} 对 \TeX\ 计算å•è¯é—´\minref{粘连}的规则有一个具体的解释。
+\knuth{第~285--287~页}详细æ述了水平列表的å„ç§é¡¹ç›®ä¹‹åŽ|\spacefactor|的调整。
+\eix^^{é—´éš”//å•è¯é—´è·}
+\enddesc
+
+%==========================================================================
+%\section {Centering and justifying lines}
+\section {行的居中和平å‡åˆ†å¸ƒ}
+
+%\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.
+\begindesc
+\bix^^{居中对é½}
+\bix^^{居左对é½}
+\bix^^{å±…å³å¯¹é½}
+\bix^^{å‡åŒ€å¯¹é½}
+\easy\cts centerline {\<argument>}
+\cts leftline {\<argument>}
+\cts rightline {\<argument>}
+\explain
+命令 |\centerline| 产生产生一个与当å‰è¡ŒåŒå®½çš„\minref{水平盒å­},
+并把 \<argument> 在里é¢å±…中放置。命令 |\leftline| å’Œ|\rightline| 的作用类似:
+把 \<argument> 放在盒å­é‡Œé å·¦æˆ–者é å³çš„ä½ç½®ã€‚如果想让几行内容都有åŒæ ·çš„效果,
+æ¯ä¸€è¡Œéƒ½å¿…须这样æ“作。其他的办法,请看\xrefpg{eplaincenter}。
+
+%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
+这些命令ä¸èƒ½ç”¨åœ¨æ®µè½é‡Œï¼Œå¦åˆ™åˆ†æ®µæˆè¡Œçš„时候,\TeX\ å¯èƒ½ä¼šé‡åˆ°éº»çƒ¦å¹¶è­¦å‘Šç›’å­æº¢å‡ºäº†ã€‚
+\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^^{居中对é½}
+\eix^^{居左对é½}
+\eix^^{å±…å³å¯¹é½}
+\eix^^{å‡åŒ€å¯¹é½}
+\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
+\easy\cts line {\<argument>}
+\explain
+这个命令产生一个\minref{hbox}æ¥åŒ…å«\<argument>。
+hbox的宽度和当å‰è¡Œå®½ç›¸åŒï¼Œå³ä»Žå·¦è¾¹è·å»¶ä¼¸åˆ°å³è¾¹è·ã€‚
+\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.
+
+
+\begindesc
+^^{覆盖文件}
+\cts llap {\<argument>}
+\cts rlap {\<argument>}
+\explain
+这些命令把文本覆盖到当å‰ä½ç½®çš„左边或者å³è¾¹ã€‚|\llap|会å‘左退\<argument>的宽度,然åŽå¼€å§‹æŽ’版\<argument>。|\rlap|类似,但是先排版\<argument>然åŽæŠŠåŽé¢çš„内容å‘左退。|\llap|å’Œ|\rlap|主è¦ç”¨äºŽæŠŠæ–‡æœ¬æ”¾åœ¨çŽ°åœ¨çš„页边è·ä¹‹å¤–。它们的工作原ç†æ˜¯åˆ›å»ºä¸€ä¸ªé›¶å®½åº¦çš„\minref{ç›’å­}。
+%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}).
+%
+
+|\llap|å’Œ|\rlap|å¯ä»¥è¢«ç”¨æ¥ä»¥^{å å°}çš„æ–¹å¼æ–°å»ºç‰¹æ®Šå­—符。但是必须确ä¿ä½œåŽŸæ–™çš„字符一般宽(等宽字体如^|cmtt10|å’ŒComputer Modern $10$-pointçš„^{打字机字体}是这样的)。
+^^{计算机现代字体}
+\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}
+\section {塑段}
+
+%\subsection {Starting, ending, and indenting paragraphs}
+\subsection {段è½çš„开始ã€ç»“æŸå’Œç¼©è¿›}
+
+%\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.
+
+
+\begindesc
+\bix^^{段è½//塑造段è½}
+\ctspecial par \ctsxrdef{@par}
+\explain
+这个命令结æŸä¸€ä¸ªæ®µè½ï¼Œå¹¶ä½¿\TeX{}进入\minref{竖直模å¼}æ¥åœ¨é¡µé¢ä¸Šå¢žåŠ æ›´å¤šå†…容。
+因为\TeX{}把一个空行当作|\par|\minref{è®°å·},所以ä¸éœ€è¦æ˜Žç¡®åœ°é”®å…¥|\par|。
+
+%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}).
+
+
+必须指出|\par|ä¸ä¼šè®©\TeX{}开始新的一段;它仅仅告诉\TeX{}去结æŸä¸€æ®µã€‚
+è¦ä½¿\TeX{}开始新段è½ï¼Œéœ€è¦å¤„于竖直模å¼ä¹‹ä¸‹ï¼ˆåœ¨|\par|之åŽå·²ç»æ˜¯äº†ï¼‰ï¼Œå¹¶é‡åˆ°ä¸€ä¸ªæ°´å¹³é¡¹ç›®æ¯”如一个字æ¯ã€‚为了开始新段è½ï¼Œ\TeX{}
+^^{段è½//开始段è½}
+å°†æ’入一些竖直空白,å–决于|\parskip|
+(\xref{\parskip});新段è½ç¼©è¿›ï¼Œå–决于|\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.
+
+
+è¦æƒ³å‡å°æ®µè½é—´|\par|产生的空白,通常å¯ä»¥ä½¿ç”¨å‘½ä»¤|\vskip -\lastskip|。当你需è¦å†™ä¸€ä¸ª\minref{å®}而让它与å‰é¢æ˜¯ä¸æ˜¯ç©ºè¡Œæ— å…³çš„时候,这个命令就有用。
+%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
+
+
+ä½ å¯ä»¥ä½¿ç”¨^|\everypar| (\xref\everypar)æ¥è®©\TeX{}在æ¯å¼€å§‹ä¸€ä¸ªæ–°æ®µè½çš„时候åšä¸€äº›äº‹.
+
+|\par|的具体效果请å‚阅\knuth{pages~283 and 286}。
+
+\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 endgraf {}
+\explain
+这个命令与^|\par|åŒä¹‰ã€‚有时候你é‡æ–°å®šä¹‰äº†^|\par|,但是åˆæƒ³å–å¾—|\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
+
+
+\begindesc
+\cts parfillskip {\param{glue}}
+\explain
+^^{段è½//段è½æœ«å°¾çš„粘连}
+这个å‚数设定\TeX{}æ’入段è½æœ«å°¾çš„水平粘连。
+默认值是|0pt plus 1fil|,这使得最åŽä¸€è¡Œè¢«ç©ºæ ¼å¡«æ»¡ã€‚如果设æˆ|0pt|,
+\TeX{}就会把段è½çš„最åŽä¸€è¡Œæ‹‰ä¼¸åˆ°å³è¾¹è·ã€‚
+\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}
+
+
+\bix^^{缩进}
+\begindesc
+\easy\cts indent {}
+\explain
+当\TeX{}处于竖直模å¼æ—¶ï¼Œæ¯”如段è½ç»“æŸä»¥åŽï¼Œè¿™ä¸ªå‘½ä»¤æ’入段è½é—´ç²˜è¿ž^|\parskip|,使\TeX{}进入水平模å¼ï¼Œå¼€å§‹æ–°çš„一段,并缩进|\parindent|大å°ã€‚
+如果\TeX{}å·²ç»å¤„于水平模å¼äº†ï¼Œè¿™ä¸ªå‘½ä»¤å°±åªåšç¼©è¿›ã€‚
+一行中两个|\indent|产生两个缩进。
+^^{缩进}
+%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
+
+
+如下é¢çš„例å­æ‰€ç¤ºï¼Œæ–°çš„段è½å¼€å§‹ä¹‹åŽçš„|\indent|是多余的。
+当\TeX{}处在竖直模å¼ä¸‹ï¼Œé‡åˆ°ä¸€ä¸ªå­—æ¯æˆ–其他水平模å¼ä¸­çš„命令时,就会切æ¢åˆ°æ°´å¹³æ¨¡å¼ç¼©è¿›|\indent|,然åŽç»§ç»­ã€‚
+
+\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}
+%
+
+\begindesc
+\easy\cts noindent {}
+\explain
+当\TeX{}结æŸä¸€æ®µåŽå¤„于竖直模å¼æ—¶ï¼Œè¿™ä¸ªå‘½ä»¤æ’入段è½é—´ç²˜è¿ž ^|\parskip|,
+使\TeX{}进入水平模å¼ï¼Œç„¶åŽå¼€å§‹æ–°æ®µï¼Œä¸è¦ç¼©è¿›ã€‚
+在水平模å¼ä¸­ï¼Œæ¯”如段è½ä¸­ï¼Œè¿™ä¸ªå‘½ä»¤æ²¡æœ‰æ•ˆæžœã€‚
+|\noindent|开始的新段会å–消通常的|\parindent|缩进。
+^^{缩进}
+%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
+
+
+当新的段è½æ˜¯åœ¨æŸäº›ç‹¬ç«‹æ˜¾ç¤ºçš„内容之åŽå‡ºçŽ°æ—¶ï¼Œ|\noindent|通常用于å–消段è½ç¬¬ä¸€è¡Œçš„缩进。
+
+\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
+
+
+\margin{{\tt\\textindent} 从此节的åŽé¢ç§»åˆ°è¿™é‡Œ}
+\begindesc
+\cts textindent {\<argument>}
+\explain
+^^{缩进}
+这个命令让\TeX\ 开始新段,正常缩进|\par!-indent|。
+然åŽ\TeX\ 在缩进的地方å‘å³å¯¹é½æŽ’版\<argument>并加入一个en大å°çš„空白(em的一åŠï¼‰ã€‚
+\PlainTeX\ 使用这个命令æ¥æŽ’版脚注(\xref\footnote )
+^^{脚注//在脚注中用 \b\tt\\textindent\e}
+以åŠåˆ—è¡¨é¡¹ï¼ˆè§ |\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 parindent {\param{dimen}}
+\explain
+这个\minref{å‚æ•°}设定段è½ç¬¬ä¸€è¡Œç¼©è¿›çš„大å°ã€‚^^{缩进}
+如下é¢çš„例å­æ‰€ç¤ºï¼Œæœ€å¥½ä¸è¦åŒæ—¶ä½¿|\parindent|å’Œ^|\parskip|为零,å¦åˆ™ä¸¤æ®µçš„区别就ä¸æ˜Žæ˜¾äº†ã€‚
+\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}
+
+
+\begindesc
+\cts everypar {\param{token list}}
+\explain
+\TeX{}处于水平模å¼ä¸‹ï¼Œæ¯”如新段开始的时候,就会在\<è®°å·åˆ—表>中执行这个命令。默认的|\everypar|为空,但是你å¯ä»¥æ·»åŠ ä¸€äº›å‘½ä»¤ï¼Œæ¯ä¸€æ®µå¼€å§‹çš„时候在记å·åˆ—表中执行
+%
+% 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}
+并为|\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}
+\subsection {å½¢æˆæ®µè½}
+
+%\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.
+
+
+\begindesc
+\margin{这个命令在“页é¢â€ä¸€ç« ä¹Ÿæœ‰æ¶‰åŠã€‚此处讲解结åˆäº†å‰é¢ä¸¤ä¸ªåœ°æ–¹çš„内容。}
+\bix^^{æ–­è¡Œ//断行与段è½å½¢çŠ¶}
+\easy\cts hsize {\param{dimen}}
+\explain
+这个\minref{å‚æ•°}设定当å‰çš„^{行宽},å³ä»Žå·¦è¾¹è·å¼€å§‹ç®—起,段è½é‡Œä¸€è¡Œçš„宽度。
+很多\TeX{}命令,比如|\centerline| (\xref{\centerline})å’Œ|\hrule| (\xref{\hrule}),都间接使用了|\hsize|的值。改å˜|\hsize|的值,就相应地改å˜äº†è¿™äº›å‘½ä»¤çš„宽度效果。
+%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}%
+
+
+如果|\hsize|çš„å˜åŒ–å‘生在一个éžç©ºçš„\minref{ç«–ç›´ç›’å­}里,盒å­çš„宽度就是给定的|\hsize|。
+^^{ç«–ç›´ç›’å­//ç”± \b\tt\\hsize\e 确定宽度}
+
+\PlainTeX{}默认|\hsize|为|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
+
+
+\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.
+\begindesc
+\easy\cts narrower {}
+\explain
+^^{段è½//窄段è½}
+这个命令产生较窄的段è½ï¼Œå·¦å³è¾¹è·å°†ä¼šå¢žåŠ  |\parindent|(å³å½“å‰æ®µè½^{缩进}的大å°ï¼‰ï¼Œ
+原因是|\leftskip|和|\rightskip|分别增加了|\parindent|。
+通常|\narrower|被放在一个\minref{编组}的开始,作用于其中的段è½ä¸Šã€‚
+如果你忘记把|\narrower|å°é—­åœ¨ç¼–组里,就会å‘现文档所余部分全都å˜çª„了。
+
+%|\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
+
+
+|\narrower|åªå½±å“å…¶åŽçš„段è½ã€‚如果包å«|\narrower|的编组在段è½æœ«å°¾ä¹‹å‰ç»“æŸï¼Œ\TeX{}å°†ä¸ä¼šäº§ç”Ÿçª„的段è½ã€‚
+
+\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
+\cts leftskip {\param{glue}}
+\cts rightskip {\param{glue}}
+\explain
+这些å‚数告诉\TeX{}在当å‰æ®µè½æ¯ä¸€è¡Œçš„å·¦å³å„放多大的空白。我们将åªè§£é‡Š|\leftskip|,因为|\rightskip|与其类似。
+
+^^{缩进} ä½ å¯ä»¥é€šè¿‡è®¾ç½®|\leftskip|为一个固定的éžé›¶\minref{尺寸}æ¥å¢žåŠ å·¦è¾¹è·ã€‚
+如果|\leftskip|是一个粘连,就会得到^{å³å¯¹é½}的内容,å³å·¦è¾¹è·å‚å·®ä¸é½ã€‚
+
+通常,你应该在一个\minref{编组}里为|\leftskip|\minref{赋值},æ¥é¿å…å½±å“其余的文档部分。å¯æ˜¯åœ¨ä¸€ä¸ªæ®µè½å†…的编组里改å˜|\leftskip|的值是无æ„义的---åªæœ‰æ®µè½\emph{末尾}处|\leftskip|的值æ‰ä¼šè¢«\TeX{}用æ¥æ‹†æ®µæˆè¡Œã€‚\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}
+
+
+\begindesc
+\easy\cts raggedright {}
+\cts ttraggedright {}
+\explain
+这些命令让\TeX{}以“^{左对é½}â€çš„æ–¹å¼æŽ’版文档,其中å•è¯é—´è·ä¿æŒæ­£å¸¸ï¼Œå³é—´è·ä¸€æ ·ï¼Œä¸éœ€ä¼¸ç¼©ã€‚
+å› æ­¤å³è¾¹è·æ˜¯ä¸å‡åŒ€çš„。而 \TeX\ 默认的则是å‡åŒ€å¯¹é½ ^^{å‡åŒ€å¯¹é½},å³å·¦å³è¾¹è·ä¸€æ ·ã€‚
+å‡åŒ€å¯¹é½çš„文本å•è¯é—´è·å°†ä¼šæœ‰ä¼¸ç¼©ä»¥äº§ç”Ÿå‡åŒ€çš„å³è¾¹è·ã€‚有些排版者å好使用左对é½ã€‚
+因为左对é½é¿å…了页é¢ä¸Šçš„空白å‚å·®ä¸é½ã€‚
+\minrefs{å‡åŒ€å¯¹é½çš„文本}
+%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
+%
+
+当使用等宽字体排版的时候,你需è¦ç”¨|\ttraggedright|命令;而使用其他字体时,需è¦ç”¨|\raggedright|命令。
+
+通常你会希望对整篇文档使用这些命令,但是通过\minref{编组}å°±å¯ä»¥æŠŠæ•ˆæžœå±€é™åœ¨éƒ¨åˆ†æ–‡æœ¬ä¸­ã€‚
+\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 hang {}
+\explain
+此命令使段è½ç¬¬äºŒè¡Œå¼€å§‹å„行也缩进 |\parindent| 大å°ï¼ˆ\xref{\parindent})。
+因为第一行已ç»ç¼©è¿›äº† |\parindent|(除éžä½ ä½¿ç”¨ |\noindent| å–消了缩进),
+所以整个段è½å‘ˆçŽ°æ‚¬æŒ‚缩进。
+
+\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:
+
+
+\begindesc
+\cts hangafter {\param{number}}
+\cts hangindent {\param{dimen}}
+
+\explain
+这两个\minref{å‚æ•°}一起决定段è½çš„“^{悬挂缩进}â€ã€‚悬挂缩进使\TeX{}产生æŸäº›è¡Œç¼©è¿›è€Œå…¶ä»–è¡Œä¾ç„¶æ­£å¸¸çš„效果。
+^^{缩进}
+|\hangafter|决定哪些行将被缩进;|\hangindent|决定缩进的大å°ä»¥åŠä½ç½®æ˜¯å·¦è¾¹è¿˜æ˜¯å³è¾¹ï¼š
+%\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
+
+
+\ulist
+\li 设|\hangafter|的值为$n$。如果$n < 0$,
+开始的$-n$行将被缩进。如果$n\ge0$,除开始的$n$行以外的å„行将被缩进。
+
+\li 设|\hangindent|的值为$x$。如果$x\ge0$,左边将缩进$x$;如果$x<0$,å³è¾¹å°†ç¼©è¿›$-x$。
+\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}
+
+当你设置悬挂缩进的时候,仅对下一段(如果处于竖直模å¼ï¼‰æˆ–者当å‰æ®µï¼ˆå¦‚果处于水平模å¼ï¼‰æœ‰æ•ˆã€‚
+\TeX{}拆段æˆè¡Œæ—¶ï¼Œä½¿ç”¨çš„是段è½æœ«å°¾çš„|\hangafter|å’Œ|\hangindent|的值。\minrefs{æ–­è¡Œ}
+% 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
+
+
+与其他塑段å‚æ•°ä¸åŒçš„是,
+|\hangafter|å’Œ|\hangindent|在æ¯ä¸€æ®µçš„开始都被é‡è®¾ä¸ºå…¶é»˜è®¤å€¼ï¼Œå³
+|\hangafter|为$1$,|\hangindent|为$0$。
+想è¦æŽ’版许多悬挂缩进的段è½ï¼Œå¯ä»¥ä½¿ç”¨|\everypar| (\xref{\everypar})。
+^^|\everypar//用于悬挂缩进|
+如果你åŒæ—¶è®¾å®š|\hangafter|,|\hangindent|以åŠ^|\parshape|,\TeX{}将忽略|\hangafter|å’Œ|\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.
+\begindesc
+\cts parshape {$n\; i_1 l_1\; i_2 l_2\; \ldots \;i_n l_n$}
+\explain
+此命令指定一个段è½å‰$n$行的形状。如果处于水平模å¼ï¼Œè¯¥å‘½ä»¤ä½œç”¨äºŽå½“å‰æ®µè½ï¼›
+如果处于竖直模å¼ï¼Œåˆ™ä½œç”¨äºŽä¸‹ä¸€æ®µè½ã€‚其中的å„个 $i$ å’Œ $l$ 都是尺寸。
+第$1$行的缩进为$i_1$,长度为 $l_1$;第$2$行的缩进为$i_2$,长度为$l_2$ï¼›ä¾æ­¤ç±»æŽ¨ã€‚
+若该段è½è¶…过$n$行,åŽé¢å„行都使用 $i_n$ å’Œ $l_n$。为达到这里展示的特殊效果,
+你通常è¦åå¤è°ƒè¯•ï¼Œæ’入多个紧排,并且选择适åˆè¯¥å½¢çŠ¶çš„è¯è¯­ã€‚
+
+与 ^|\hangafter| å’Œ ^|\hangindent| 一样,|\parshape| 也仅对此段è½æœ‰æ•ˆã€‚
+如果你åŒæ—¶æŒ‡å®š |\hangafter| å’Œ |\hangindent| ä»¥åŠ |\par!-shape|,
+\TeX\ 将忽略 ^|\hangafter| 和 ^|\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^^{缩进}
+\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 prevgraf {\param{number}}
+\explain
+在水平模å¼ä¸­ï¼Œæ­¤å‚数表示该段è½çš„当å‰è¡Œæ•°ï¼›åœ¨ç«–直模å¼ä¸­ï¼Œå®ƒè¡¨ç¤ºä¸Šä¸ªæ®µè½çš„行数。
+åªæœ‰åœ¨å®Œæˆä¸€äº›æ–‡æœ¬æ–­è¡ŒåŽï¼Œä¾‹å¦‚在陈列公å¼å‰æˆ–者在段è½ç»“尾处,\TeX\ æ‰ä¼šè®¾ç½®
+|\prevgraf|ã€‚è¯¦è§ \knuth{第103页}。
+\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.
+\begindesc
+\cts vadjust {\rqbraces{\<vertical mode material>}}
+\explain
+此命令在当å‰ä½ç½®æ‰€åœ¨è¡Œä¸‹è¾¹æ’入指定的 \<vertical mode material>。
+^^{竖直列表//æ’入到段è½ä¸­}
+例如,你å¯ä»¥ç”¨å®ƒè¾“出页é¢ï¼Œæˆ–者在特定行添加é¢å¤–空白。
+
+\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}
+\see |\parindent| (\xref\parindent),
+|\parskip| (\xref\parskip), |\everypar| (\xref\everypar).
+\eix^^{æ–­è¡Œ//断行与段è½å½¢çŠ¶}
+\eix^^{段è½//å½¢æˆæ®µè½}
+
+%==========================================================================
+%\section {Line breaks}
+\section {断行}
+
+%==========================================================================
+%\subsection {Encouraging or discouraging line breaks}
+\subsection {鼓励或阻ç¢æ–­è¡Œ}
+
+%\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.
+\begindesc
+\bix^^{断行}
+\bix^^{æ–­è¡Œ//鼓励或阻ç¢æ–­è¡Œ}
+\ctspecial break {} \xrdef{hbreak}
+\explain
+强制在此处断行。除éžç”¨æŸç§æ–¹æ³•å¡«æ»¡è¯¥è¡Œï¼Œ
+å¦åˆ™ä½ å°†å¾—到 ``underfull hbox'' 的警告。
+此命令也能用于竖直模å¼ã€‚
+\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.
+在通常ä¸æ–­è¡Œçš„地方å…许 \TeX\ 断行。它ç»å¸¸ç”¨äºŽæ•°å­¦å…¬å¼ä¸­ï¼Œ
+因为 \TeX\ 通常ä¸æ„¿æ„在其中断行。^^{æ–­è¡Œ//在数学公å¼ä¸­}
+此命令也能用于竖直模å¼ã€‚
+\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.
+此命令生æˆä¸€ä¸ªæƒ©ç½šï¼ˆ\minref{penalty})项。
+惩罚项使得 \TeX\ 或多或少愿æ„在此处断行。
+负惩罚值,实际上是奖励值,鼓励断行;正惩罚值阻ç¢æ–­è¡Œã€‚
+大于或等于 $10000$ 的惩罚值彻底阻止断行,
+而å°äºŽæˆ–等于 $-10000$ 的惩罚值强制断行。
+此命令也能用于竖直模å¼ã€‚
+%\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.
+\TeX\ 通常将行结æŸç¬¦è§†ä¸ºç©ºæ ¼ã€‚
+|\obeylines| 让 \TeX\ å°†æ¯ä¸ªè¡Œç»“æŸç¬¦éƒ½è§†ä¸ºæ®µè½ç»“æŸç¬¦ï¼Œä»Žè€Œå¼ºåˆ¶æ–­è¡Œã€‚
+在排版诗歌或者程åºä»£ç æ—¶ |\obeylines| 大有用处。
+^^{诗歌,排版}^^{程åºä»£ç ï¼ŒæŽ’版}
+然而,如果æŸäº›è¡Œçš„长度超过行的实际长度(|\hsize|\tminus|\parindent|),
+它们将会被自动断行。
+
+\TeX\ 将在设定了 |\obeylines| çš„å„行间æ’å…¥ |\parskip|(\xref\parskip )粘连
+(既然它认为æ¯è¡Œéƒ½æ˜¯ä¸€ä¸ªæ®µè½ï¼‰ã€‚
+因此,在使用 |\obeylines| 时一般应该设定 |\parskip| 为零。
+
+用 ^|\obeyspaces| 命令(\xref{\obeyspaces})å¯ä»¥è®© \TeX\ 按原样处ç†è¡Œä¸­çš„空格。
+我们ç»å¸¸ä¸€èµ·ä½¿ç”¨ |\obeylines| å’Œ |\obeyspaces|。
+\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.
+此命令生æˆä¸€ä¸ª^{斜线符å·}(/),并且告诉 \TeX\ å¿…è¦æ—¶å¯ä»¥åœ¨è¯¥æ–œçº¿åŽæ–­è¡Œã€‚
+\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^^{æ–­è¡Œ//鼓励或阻ç¢æ–­è¡Œ}
+\enddesc
+
+%\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+%\subsection {Line breaking parameters}
+\subsection {æ–­è¡Œå‚æ•°}
+
+\begindesc
+\bix^^{æ–­è¡Œ//å½±å“断行的å‚æ•°}
+%
+\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).
+在 \TeX\ 选择段è½æ–­è¡Œç‚¹æ—¶ï¼Œ
+这两个å‚数确定对å„è¡Œ\minref{劣度}(badness)的容许值(tolerance)。
+劣度衡é‡äº†å•è¯é—´è·å’Œç†æƒ³æƒ…形差别多大
+\footnote{译注:在中文排版中,“å•è¯ç©ºéš™â€å®žé™…上是字间è·ã€‚}。
+其中 |\pretolerance| 指定在ä¸åŠ è¿žå­—符断行时对劣度的容许值,
+而 |\tolerance| 指定加上连字符断行时对劣度的容许值。
+当æŸè¡ŒæŽ’得太紧密(å•è¯é—´è·è¿‡å°ï¼‰ï¼Œ
+或者排得太æ¾æ•£ï¼ˆå•è¯é—´è·è¿‡å¤§ï¼‰æ—¶ï¼ŒåŠ£åº¦å°±ä¼šè¶…过容许值。
+
+%\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
+\ulist
+\li 如果 \TeX\ å°†æŸä¸€è¡ŒæŽ’得太æ¾æ•£ï¼Œ
+它将给出 ``underfull hbox'' 的警告。
+\li 如果 \TeX\ å°†æŸä¸€è¡ŒæŽ’得太紧密,
+它将让该行超出å³è¾¹ç¼˜ï¼Œ
+并给出 ``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
+\noindent \TeX\ 按照如下步骤选择断行点:
+\olist
+\li 它试图选择无需添加连字符的一系列断点。
+如果结果中æ¯è¡Œçš„劣度都ä¸è¶…过 |\pretolerance|,
+这组断点是å¯æŽ¥å—的,该段è½ä¹Ÿå°±å®Œæˆäº†æ–­è¡Œã€‚
+\li å¦åˆ™ï¼Œå®ƒåœ¨å…许添加连字符的情况下å†æ¬¡å¯»æ‰¾æ–­ç‚¹ã€‚
+如果结果中æ¯è¡Œçš„劣度都ä¸è¶…过 |\tolerance|, 这组新
+断点是å¯æŽ¥å—的,该段è½ä¹Ÿå°±å®Œæˆäº†æ–­è¡Œã€‚
+\li å¦åˆ™ï¼Œå®ƒç»™æ¯è¡Œçš„伸长é‡å¢žåŠ  ^|\emergencystretch|(è§ä¸‹é¢ï¼‰ï¼Œ
+然åŽé‡æ–°å°è¯•ã€‚
+\li 如果上述å„ç§å°è¯•éƒ½æ— æ³•å¾—到å¯æŽ¥å—的断点系列,
+它给该段è½è®¾ç½®ä¸€ä¸ªæˆ–多个溢出的水平盒å­ï¼Œå¹¶ç»™å‡ºè­¦å‘Šã€‚
+\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.
+\PlainTeX\ 设置 |\tolerance| 为 $200$,|\pretolerance| 为 $100$。
+若你设置 |\tolerance| 为 $10000$, \TeX\ 将有无穷大的容许值,
+å¯ä»¥æŽ¥å—任何空隙,ä¸ç®¡å®ƒæœ‰å¤šç³Ÿç³•ã€‚%
+(除éžå®ƒé‡åˆ°å³ä½¿æ·»åŠ è¿žå­—符也无法放在一行的å•è¯ï¼‰ã€‚
+å› æ­¤ï¼Œé€šè¿‡æ”¹å˜ |\tolerance| 值,你å¯ä»¥é¿å…溢出的或者æ¾æ•£çš„水平盒å­ï¼Œ
+但会得到更糟糕的空隙。
+通过增大 |\pretolerance| 值你å¯ä»¥è®© \TeX\ ä¸æ·»åŠ è¿žå­—符(并且è¿è¡Œå¾—更快),
+但åŒæ ·å¯èƒ½å¾—到更糟糕的空隙。
+而如果你设置 |\pretolerance| 为 $-1$,
+\TeX\ å°†ä¸å†å°è¯•ä¸æ·»åŠ è¿žå­—符的断行方å¼ã€‚
+
+%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.
+å‚æ•° ^|\hbadness|(\xref \hbadness )确定劣度达到多大时 \TeX\ æ‰ç»™å‡ºè­¦å‘Šï¼Œ
+但它ä¸å½±å“ \TeX\ 对文档的排版。
+å‚æ•° ^|\hfuzz|(\xref \hfuzz )确定水平盒å­å®½åº¦è¶…出多大时,
+\TeX\ æ‰è®¤ä¸ºæ˜¯é”™è¯¯çš„。
+\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.
+设定此å‚数大于零,å¯ä»¥è®© \TeX\ 更容易排版文档,而ä¸æ˜¯ç”Ÿæˆæº¢å‡ºçš„水平盒å­ã€‚
+^^{溢出的水平盒å­}
+这样比设定 |\tolerance=10000| 更好,因为那样往往得到å分难看的行。
+如果 \TeX\ 排版段è½æ—¶æ— æ³•ä¸è¶…过 ^|\tolerance| 值,
+它将给æ¯è¡Œçš„伸长é‡å¢žåŠ  |\emergencystretch| 然åŽé‡æ–°å°è¯•ã€‚
+伸长é‡çš„增加将会缩å‡å„行劣度,å…许 \TeX\ 生æˆæ¯”原æ¥æ›´å®½çš„é—´è·ï¼Œ
+从而选出当å‰æƒ…况下尽å¯èƒ½å¥½çš„断行点。
+\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.
+æ­¤å‚数用于修改段è½çš„行数,相对其最佳行数。
+之所以称为æ¾æ•£åº¦ï¼ˆ|\looseness|),
+是因为它衡é‡è¯¥æ®µè½æœ‰å¤šæ¾æ•£ï¼Œå³åŒ…å«å¤šå°‘é¢å¤–çš„é—´è·ã€‚
+
+%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.
+一般地,若 |\looseness| 等于 $0$,\TeX\ 将按通常方å¼é€‰æ‹©æ–­è¡Œç‚¹ã€‚
+但若 |\looseness| 等于,比如 $3$,\TeX\ ä¾ä¸‹é¢æ­¥éª¤å¤„ç†ï¼š
+\olist
+\li 按通常方å¼é€‰æ‹©æ–­è¡Œç‚¹ï¼Œå¾—到总行数为 $n$ 的段è½ã€‚
+\li 丢弃这些断行点,并试ç€å¯»æ‰¾æ€»è¡Œæ•°ä¸º $n+3$ 的一系列新断点。%
+(缺少上一步,\TeX\ å°±æ— æ³•çŸ¥é“ $n$ 的值。)
+\li 如果上一步å°è¯•æ— æ³•å¾—到行劣度ä¸è¶…过 |\tol!-er!-ance| 的结果,
+^^|\tolerance|
+它将试ç€å°†æ®µè½åˆ†ä¸º $n+2$ 行;如果这也ä¸è¡Œï¼Œè¯•ç€åˆ†ä¸º $n+1$ 行;
+最终åªèƒ½å†æ¬¡åˆ†ä¸º $n$ 行。
+\endolist
+\noindent
+类似地,若æ¾æ•£åº¦ä¸º $-k$,\TeX\ 试ç€è®©æ®µè½çš„行数比正常情形少 $k$ 行。
+让段è½å¤šå‡ºä¸€è¡Œçš„最简å•æ–¹æ³•æ˜¯ï¼Œå°†ä¸€ä¸ªå•è¯æ”¾åˆ°å¤šå‡ºçš„那行。
+在最åŽä¸¤ä¸ªå•è¯ä¹‹é—´åŠ ä¸Šä¸€ä¸ªå¸¦å­ï¼ˆtie,\xref{@not})符å·ï¼Œ
+ä½ å°±å¯ä»¥é˜»æ­¢æ­¤ç§æ–­è¡Œæ–¹æ³•ã€‚
+
+%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.
+设定 |\looseness| 是迫使段è½å ç”¨ç»™å®šè¡Œæ•°çš„最好方法。
+想增加页é¢ä¸­çš„文本时,你å¯ä»¥å°†å®ƒè®¾ä¸ºè´Ÿå€¼ã€‚
+åŒæ ·åœ°ï¼Œæƒ³å‡å°‘页é¢ä¸­çš„文本时,å¯ä»¥å°†å®ƒè®¾ä¸ºæ­£å€¼ã€‚
+
+%\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|
+在结æŸæ®µè½å¹¶åˆ†æ®µä¸ºè¡Œä¹‹åŽï¼Œ\TeX\ å°† |\looseness| é‡ç½®ä¸º $0$。
+è‹¥è¦æ”¹åŠ¨å¤šä¸ªæ®µè½çš„æ¾æ•£åº¦ï¼Œä½ å¿…须对æ¯ä¸ªæ®µè½åˆ†åˆ«è®¾ç½®ï¼Œ
+或者将改动放在 |\everypar|
+\ctsref\everypar 命令中。
+^^|\everypar//用于设定 \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$.
+æ­¤å‚数设定 \TeX\ 分段为行时å„行的\minref{惩罚}值\thinspace%
+\footnote{译注:原文中似乎将 penalty 误认为 demerit 了。}。
+此惩罚值与断行ä½ç½®æ— å…³ã€‚
+增大此å‚数将让 \TeX\ 把段è½åŽ‹ç¼©åˆ°æœ€å°çš„行数,
+但会æŸå®³å…¶å®ƒå®¡ç¾Žä¸Šçš„考虑,比如é¿å…过紧的å•è¯é—´è·ã€‚
+\PlainTeX\ 设定 |\linepenalty| 为 $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$.
+\minrefs{line break}
+^^{连字//连字的惩罚}
+{\tighten
+æ­¤å‚数给行断点设定é¢å¤–çš„\minref{缺陷}(demerit),åªè¦è¯¥æ–­ç‚¹åœ¨â€œè§†è§‰ä¸ç›¸å®¹çš„â€ç›¸é‚»ä¸¤è¡Œé—´å‡ºçŽ°ã€‚
+这些相邻行使得段è½çœ‹èµ·æ¥å‚å·®ä¸é½ã€‚
+ä¸ç›¸å®¹æ€§å–决于å„行的æ¾ç´§åº¦\thinspace%
+\footnote{译注:如果粘连调整比例大于或等于$50\%$,其劣度必定大于或等于$13$。}:
+}
+\olist\compact
+\li 此行是过紧的,如果其\minref{粘连}至少需è¦æ”¶ç¼©$50\%$。
+\li 此行是适中的,如果它的劣度å°äºŽæˆ–等于$12$。
+\li 此行是æ¾æ•£çš„,如果其粘连至少需è¦ä¼¸é•¿$50\%$。
+\li 此行是空è¡çš„,如果其粘连需è¦ä¼¸é•¿å¤ªå¤šä»¥è‡´å®ƒçš„劣度超过$100$。
+\endolist
+如果相邻的两行分类å´ä¸ç›¸è¿‘,比如,
+æ¾æ•£çš„è¡ŒåŽé¢è·Ÿç€ä¸€ä¸ªè¿‡ç´§çš„行,或者空è¡çš„è¡ŒåŽé¢æ˜¯ä¸€ä¸ªé€‚中的行,
+则称它们为视觉ä¸ç›¸å®¹çš„。
+
+缺陷以\minref{劣度}的平方为å•ä½ï¼Œ
+å› æ­¤åªæœ‰åœ¨ç»™å®šä¸€ä¸ªè¾ƒå¤§çš„数值时(比如数åƒï¼‰æ‰ä¼šäº§ç”Ÿä½œç”¨ã€‚
+\PlainTeX\ 设定 |\adjdemerits| 为~$10000$。
+\enddesc
+
+\begindesc
+\bix^^{连字//连字的惩罚}
+\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$.
+\minrefs{line break}
+æ­¤å‚数指定 \TeX\ 在显å¼è¿žå­—符(比如``helter-skelter''的连字符)处断行时
+所附加的\minref{惩罚}值。
+增大此å‚æ•°å°†é˜»ç¢ \TeX\ 在显å¼è¿žå­—符处æ¢è¡Œã€‚
+\PlainTeX\ 设定 |\exhyphenpenalty| 为 $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$.
+\minrefs{line break}
+æ­¤å‚数指定 \TeX\ 在éšå¼è¿žå­—符处断行时所附加的\minref{惩罚}值。
+éšå¼è¿žå­—符æ¥è‡ª \TeX\ çš„è¿žå­—è¯å…¸ï¼Œæˆ–者æ¥è‡ªä½ ç”¨ |\-|~(\xref{\@minus})
+æ’入的^{ä»»æ„连字符}。
+^^|-//导致 {\tt\\hyphenpenalty}|
+增大此å‚æ•°å°†é˜»ç¢ \TeX\ å°†å•è¯è¿žå­—化。
+\PlainTeX\ 设定 |\hyphenpenalty| 为 $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$.
+%}
+\minrefs{line break}
+{\tighten
+æ­¤å‚数指定 \TeX\ 在导致连续两行都以连字符结尾的断点处所附加的é¢å¤–\minref{缺陷}值。
+增大此å‚æ•°å°†é˜»ç¢ \TeX\ 将连续两行连字化。
+缺陷以\minref{劣度}的平方为å•ä½ï¼Œ
+å› æ­¤åªæœ‰åœ¨ç»™å®šä¸€ä¸ªè¾ƒå¤§çš„数值时(比如数åƒï¼‰æ‰ä¼šäº§ç”Ÿä½œç”¨ã€‚
+\PlainTeX\ 设定 |\doublehyphendemerits| 为 $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}
+\minrefs{line break}
+{\tighten
+æ­¤å‚数指定 \TeX\ 在段è½å€’数第二行以连字符结尾时所附加的é¢å¤–\minref{缺陷}值。
+由于该行下é¢å¯èƒ½æœ‰çŸ­è¡Œé€ æˆçš„空白,这样的连字符通常认为是缺ä¹ç¾Žæ„Ÿçš„。
+增大此å‚æ•°å°†é˜»ç¢ \TeX\ 将段è½å€’数第二行连字化。
+缺陷以\minref{劣度}的平方为å•ä½ï¼Œ
+å› æ­¤åªæœ‰åœ¨ç»™å®šä¸€ä¸ªè¾ƒå¤§çš„数值时(比如数åƒï¼‰æ‰ä¼šäº§ç”Ÿä½œç”¨ã€‚
+\PlainTeX\ 设定 |\finalhyphendemerits| 为 $5000$。
+}
+\eix^^{连字//连字的惩罚}
+\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$.
+^^{è¿ç®—符}
+æ­¤å‚数指定 \TeX\ 在段内公å¼çš„二元è¿ç®—符åŽæ–­è¡Œæ‰€é™„加的惩罚值。
+\PlainTeX\ 设定 |\binoppenalty| 为 $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}
+^^{关系符}
+æ­¤å‚数指定 \TeX\ 在段内公å¼çš„二元关系符åŽæ–­è¡Œæ‰€é™„加的惩罚值。
+\PlainTeX\ 设定 |\rel!-penal!-ty| 为~$500$。
+
+\eix^^{æ–­è¡Œ//å½±å“断行的å‚æ•°}
+\enddesc
+
+%==========================================================================
+%\subsection {Hyphenation}
+\subsection {è¿žå­—}
+
+\begindesc
+\bix^^{è¿žå­—}
+%
+\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.
+此命令在å•è¯ä¸­åŠ å…¥â€œè‡ªå®šè¿žå­—符â€ã€‚
+^^{自定连字符}
+自定连字符å…许 \TeX\ 在该处连字化。
+但 \TeX\ 未必éžå¾—如此连字ï¼ï¼å®ƒä»…在必è¦æ—¶è¿™æ ·åšã€‚
+当æŸä¸ªå•è¯åœ¨æ–‡æ¡£ä¸­å‡ºçŽ°ä¸€æ¬¡æˆ–多次,而 \TeX\ åˆæ‰¾ä¸åˆ°åˆé€‚连字点时,
+这个命令就比较有用了。
+\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.
+\minrefs{line break}
+^^{è¿žå­—}
+此命令指定一个“自定断点â€ï¼Œå³ï¼Œ\TeX\ å¯ä»¥æ–­è¡Œçš„ä½ç½®ã€‚
+它还告诉 \TeX\ 在断点å‰åŽæ”¾ç½®çš„文字。
+\ulist
+\li 如果 \TeX\ ä¸åœ¨è¯¥å¤„断行,它使用 \<no-break text>。
+\li 如果 \TeX\ 确实在该处断行,它把 \<pre-break text> 放在断点å‰ï¼Œ
+而把 \<post-break text> 放在断点åŽã€‚
+\endulist
+\noindent
+å¦‚åŒ |\-|,在自定断点处 \TeX\ 未必éžå¾—断行。
+实际上, |\-| 通常等åŒäºŽ |\discretionary!allowbreak{-}{}{}|。
+
+\TeX\ 有时也会加入自己的自定断点。
+例如,它在显å¼è¿žå­—å·æˆ–者破折å·åŽåŠ å…¥|\discretionary!allowbreak{}{}{}|。
+
+{%\hyphenchar\ententt=-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''
+|
+^^{连字//德语连字}
+\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.
+\TeX\ 中有个è¯å…¸è®°å½•äº†å®ƒçš„^{è¿žå­—}规则的例外情形。
+è¯å…¸ä¸­æ¯ä¸ªæ¡ç›®æŒ‡æ˜Žäº†æŸä¸ªå•è¯åº”该如何连字化。
+这个 |\hyphenation| 命令用于添加å•è¯åˆ°è¯¥è¯å…¸ã€‚
+它的å‚数是用空格分开的多个å•è¯ï¼Œä¸åŒºåˆ†å­—æ¯å¤§å°å†™ã€‚
+å•è¯ä¸­çš„连字符指明 \TeX\ å¯ä»¥åœ¨å“ªäº›åœ°æ–¹å°†å®ƒè¿žå­—化。
+一个ä¸å«è¿žå­—符的å•è¯å°†æ°¸è¿œä¸ä¼šè¢«è¿žå­—化。
+然而,在特定å•è¯ä¸­çš„ |\-| 还是优先于连字è¯å…¸ä¸­å¯¹è¯¥å•è¯çš„规定。
+你需è¦æä¾›å•è¯çš„å„ç§è¯­æ³•å½¢å¼ç»™ \TeX\ 处ç†ï¼Œæ¯”如å•æ•°å’Œå¤æ•°å½¢å¼ã€‚
+
+\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.
+å– |\uchyph|(大写å•è¯è¿žå­—化)为正数,
+å°†å…许对专有åè¯ç­‰ä»¥å¤§å†™å­—æ¯å¼€å§‹çš„å•è¯è¿žå­—化。
+å–为零或者负数将ç¦æ­¢æ­¤ç±»è¿žå­—。
+\PlainTeX\ 设定 |\uchyph| 为 $1$,
+å› æ­¤ \TeX\ 一般会试ç€å°†å¤§å†™å­—æ¯å¼€å§‹çš„å•è¯è¿žå­—化。
+\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.
+此命令在文档中一般ä¸ä¼šç”¨åˆ°ï¼Œ
+使用它你å¯ä»¥åœ¨ç»ˆç«¯è¾“出中看到 \TeX\ 对一些å•è¯æ˜¯å¦‚何连字的。
+用连字符表示的å•è¯å°†å‡ºçŽ°åœ¨ç¼–译记录和终端输出中。
+åŒæ—¶ä½ ä¹Ÿä¼šçœ‹åˆ°å…³äºŽâ€œæ¾æ•£çš„ç›’å­â€çš„警告,忽略它å³å¯ã€‚
+\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.
+ä¸åŒçš„语言有ä¸åŒçš„连字规则。此å‚数确定 \TeX\ 使用哪组^{连字规则}。
+é€šè¿‡æ”¹å˜ |\language|,
+ä½ å¯ä»¥è®© \TeX\ 对部分或整个文档用特定语言的连字规则连字。
+^^{欧洲语言}
+你所用的 \TeX\ 会说明
+是å¦è¿˜æœ‰å¦å¤–的连字规则å¯ç”¨ï¼ˆé™¤äº†è‹±è¯­ï¼‰ï¼Œ
+以åŠé€‚当的 |\language| 值是哪些。
+默认的 |\language| 值为 $0$。
+
+在段è½å¼€å§‹å¤„,\TeX\ 设定当å‰è¯­è¨€å€¼ä¸º $0$。
+在添加字符到当å‰æ®µè½æ—¶ï¼Œ\TeX\ 会比较 |\language| 和当å‰è¯­è¨€å€¼ã€‚
+如果两者ä¸åŒï¼Œ\TeX\ 添加一个^{å°çŽ©æ„},表明当å‰è¯­è¨€çš„å˜åŒ–。
+这个å°çŽ©æ„æ示åŽç»­å¤„ç†æ—¶æ‰€ç”¨çš„语言规则应该改å˜ã€‚
+\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|.
+此命令通过添加å°çŽ©æ„设定当å‰è¯­è¨€å€¼ä¸º \<number>。
+该å°çŽ©æ„和修改 ^|\language| 时的一样。
+然而,此命令ä¸ä¼šæ”¹åŠ¨ |\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.
+这两个å‚数指定,对于连字å•è¯ï¼Œ\TeX\ 在连字符左å³è‡³å°‘得有几个字æ¯ã€‚
+\PlainTeX\ 中两者的默认值分别为 $2$ 和 $3$;
+这是英语的建议值。
+\enddesc
+
+%\begindesc
+%\bix^^{fonts//hyphenation characters for}
+%\cts hyphenchar {\<font>\param{number}}
+%\explain
+\begindesc
+\bix^^{字体//字体的连字符}
+\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.
+\TeX\ 未必总是以 `-' 字符为连字符。
+实际上,它使用的是当å‰å­—体的 |\hyphenchar|,
+此字符通常是 `-' 但未必总是。
+è‹¥æŸå­—体的 |\hyphenchar| 值为负数,
+\TeX\ å°†ä¸ä¼šå¯¹è¯¥å­—体下的å•è¯è¿žå­—化。
+
+æ³¨æ„ \<font> 指的是该字体的控制åºåˆ—å称,
+而ä¸æ˜¯å­—体文件å \<font\-name>。
+谨记:在编组结æŸæ—¶æ‰€åˆ†é…çš„ |\hyphenchar| \emph{ä¸ä¼š}撤销。
+è‹¥è¦å±€éƒ¨æ”¹å˜ |\hyphenchar|,你必须显å¼åœ°ä¿å­˜å’Œæ¢å¤åŽŸæœ‰å–值。
+\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 `|-|'.
+当 \TeX\ 碰到 ^|\font| 命令时,它读å–该字体的度é‡æ–‡ä»¶ï¼Œ
+并设置该字体的 ^|\hyphenchar| 为 |\default!-hyphen!-char|。
+^^{度é‡æ–‡ä»¶//其中的默认连字符}
+如果载入字体时 |\default!-hyphen!-char| 的值ä¸åœ¨ $0$--$255$
+范围中,\TeX\ å°†ä¸ä¼šå¯¹è¯¥å­—体下的任何å•è¯è¿žå­—化;
+除éžä½ ä»¥åŽç”¨ |\hyphenchar| 命令设定此字体的连字符。
+\PlainTeX\ 设定 |\default!-hyphen!-char| 为 $45$,
+å³ `|-|' 字符的 \ascii\ ç ã€‚
+\example
+\defaulthyphenchar = `-
+ % Assume `-' is the hyphen, unless overridden.
+\defaulthyphenchar = -1
+ % Don't hyphenate, unless overridden.
+|
+\endexample
+
+%\eix^^{fonts//hyphenation characters for}
+%\enddesc
+\eix^^{字体//字体的连字符}
+\enddesc
+
+%\see |\pretolerance| (\xref \pretolerance).
+%\eix^^{hyphenation}
+%\eix^^{line breaks}
+\see |\pretolerance|(\xref\pretolerance )。
+\eix^^{è¿žå­—}
+\eix^^{断行}
+
+%==========================================================================
+%\section {Section headings, lists, and theorems}
+\section {分节ã€åˆ—表和定ç†}
+
+%\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.
+\begindesc
+^^{节标题}
+\easy\ctspecial beginsection {\<argument>\thinspace{\bt\\par}}
+ \ctsxrdef{@beginsection}
+\explain
+此命令开始文档的一节。
+\<argument> 用于表示节标题。
+标题将用粗体显示,é å·¦å¯¹é½ï¼Œè€Œä¸”上下有é¢å¤–çš„ç«–ç›´é—´è·ã€‚
+你也å¯ä»¥åœ¨ \<argument> åŽç”¨ä¸€ä¸ªç©ºè¡Œå¾—到 |\par|。
+\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.
+^^{é€é¡¹åˆ—表}
+这两个命令用于创建^{é€é¡¹åˆ—表}。
+在 \<argument> åŽé¢çš„整个段è½ä¼šæœ‰ |\parindent|(对于|\item|)或者
+|2\parindent|(对于 |\itemitem|)的缩进。%
+(|\parindent| 的解释è§\xrefpg{\parindent}。)
+^^|\parindent//é€é¡¹åˆ—表的缩进|
+\<argument> 加上 1en çš„é—´è·åŽè¢«æ”¾ç½®åœ¨æ®µè½é¦–行文字的左边。
+也就是说,它总是è½åœ¨ç”± |\parindent| 确定的段è½ç¼©è¿›ç©ºç™½ä¸­ã€‚
+
+è¦è®©ä¸€ä¸ªåˆ—表项包å«å¤šä¸ªæ®µè½ï¼Œå¯ä»¥å°† |\item{}| 放在å¦å¤–的段è½å‰ã€‚
+\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.
+^^{定ç†}
+^^{引ç†}
+^^{å‡è®¾}
+此命令“陈述â€ä¸€ä¸ªå®šç†ã€å¼•ç†ã€å‡è®¾ç­‰ã€‚
+它用粗体显示 \<argument>,并用斜体显示åŽé¢çš„段è½ã€‚
+\<arg\-u\-ment> åŽé¢å¿…须跟ç€å¥å·å’Œç©ºæ ¼ï¼Œ
+以此区分开 \<argument> 和 \<general text>。
+\<general text> 到下一个段è½ä¹‹å‰æˆªæ­¢ï¼›
+è‹¥è¦åŒ…å«å¤šä¸ªæ®µè½ï¼Œä½ å¯ä»¥å°†å®ƒä»¬æ”¾åœ¨èŠ±æ‹¬å·ä¸­ï¼Œ
+并且在å³èŠ±æ‹¬å·åŽç»“æŸæ®µè½\thinspace%
+\footnote{译注:原文关于包å«å¤šä¸ªæ®µè½è¿™å¥ä¼¼æœ‰é”™è¯¯ã€‚
+但改用 |\endgraf| 结æŸæ®µè½å°±å¯ä»¥åŒ…å«å¤šä¸ªæ®µè½ã€‚}。
+\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
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter
+\byebye
diff --git a/info/impatient/cn/preface.tex b/info/impatient/cn/preface.tex
new file mode 100644
index 0000000000..fd2bd2a14b
--- /dev/null
+++ b/info/impatient/cn/preface.tex
@@ -0,0 +1,246 @@
+% -*- coding: utf-8 -*-
+% 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}
+\frontchapter{å‰è¨€}
+
+%{\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}
+Donald Knuth å¼€å‘的计算机排版系统 \TeX ,
+æ供了几乎所有排版高质é‡æ•°å­¦ç¬¦å·å’Œæ™®é€šæ–‡æœ¬çš„功能。
+它因为它独有的易用性,超群的分è¯å¤„ç†å’Œç¾Žè§‚的断行而闻å天下。
+因为这些éžå‡¡çš„功能,\TeX\ å·²ç»æˆä¸ºæ•°å­¦ã€è‡ªç„¶ç§‘学和工程领域领先的排版系统,
+并且被美国数学学会定为标准。
+åŒæ—¶ï¼Œå®ƒçš„æˆå¯¹è½¯ä»¶ï¼Œ^{\Metafont},å¯ä»¥ç”¨æ¥è®¾è®¡ä»»æ„的字体,尤其是数学排版所需è¦çš„符å·ã€‚
+\TeX\ 和 \Metafont\ 在科学和工程领域有很广泛的应用,
+也被移æ¤åˆ°å„ç§ä¸åŒçš„计算机架构上。
+\TeX\ 当然ä¸æ˜¯å…¨èƒ½çš„,它缺少对于图形的完整支æŒï¼Œ
+åŒæ—¶ä¸€äº›åŠŸèƒ½ï¼Œæ¯”如修订线,在 \TeX\ 中实现起æ¥ä¹Ÿæ¯”较麻烦。
+但是,这些缺点和它的优点比较起æ¥ï¼Œæ˜¯å¾®ä¸è¶³é“的。
+
+%\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.
+\thisbook 是为科学工作者ã€æ•°å­¦å·¥ä½œè€…和专业排å°è€…而写的。
+对于这些人而言,\TeX\ ä¸æ˜¯ä¸€ä¸ªå…´è¶£çˆ±å¥½ï¼Œè€Œæ˜¯ä¸€ä¸ªéžå¸¸æœ‰ç”¨çš„工具。
+本书åŒæ—¶ä¹Ÿé¢å‘那些对 \TeX\ 有很强烈兴趣的计算机行业工作者。
+我们希望ä¸ç®¡æ˜¯æ–°æ‰‹ä»¬è¿˜æ˜¯ç†Ÿæ‚‰ \TeX\ 的人,都能从本书获益。
+我们å‡å®šæˆ‘们的读者群体己ç»ç†Ÿæ‚‰äº†åŸºæœ¬çš„计算机æ“作,
+并且他们希望用最快的速度得到他们想è¦çš„ä¿¡æ¯ã€‚
+因此,我们的目标是æ供简明的信æ¯ï¼Œå¹¶ä¸”让读者能够方便地获å–它们。
+
+%{\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}
+因此,本书给读者æ供了探索和使用 \TeX\ 所需è¦çš„明亮的探照ç¯ï¼Œç»“识的手æ–,以åŠè¯¦ç»†çš„地图。
+他能让你通过查询和饰演,æ¥å¿«é€ŸæŽŒæ¡ \TeX ,但它ä¸ä¼šç‰µç€ä½ çš„首带领你走过整个 \TeX\ 系统的è†æ£˜åœ°ã€‚
+我们的方法就是,æ供给你一本 \TeX\ 的手册,æ¥è®©ä½ æ›´æ–¹ä¾¿åœ°å¾—到你所需è¦çš„任何信æ¯ã€‚
+我们会åŒæ—¶è¯¦ç»†ä»‹ç» \TeX\ 的命令,以åŠå‘½ä»¤èƒŒåŽçš„原ç†ã€‚
+因此你ä¸ä¼šè´¹æ—¶è´¹åŠ›åœ°é˜…读你ä¸éœ€è¦çœ‹çš„ä¿¡æ¯ã€‚
+
+%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.)
+如果你从未用过 \TeX ,在开头的章节中,我们给予充分的指导,æ¥è®©ä½ å°½å¿«ä¸Šæ‰‹ã€‚
+我们å‡å®šä½ æ‰‹å¤´ä¸Šæœ‰ä¸€ä¸ªèƒ½ç”¨çš„ \TeX\ 系统,并且知é“如何用一个文本编辑器,对你其它的背景知识ä¸åšè¦æ±‚。
+由于本书是按照å‚考手册编排的,因此å³ä½¿ä½ ç†Ÿæ‚‰äº† \TeX\ 以åŽï¼Œä¾ç„¶ä¼šå‘现本书很有用。
+如果你希望看一个手把手的教程,我们建议你先阅读 ^{\texbook}(è§\xrefpg{resources}部分的引用),
+跳过所有的有“å±é™©ç¬¦å·â€çš„部分,然åŽå†åœ¨å¼€å§‹ä½¿ç”¨ \TeX\ 的时候å‚考本书æ¥èŽ·å¾—更多的信æ¯ã€‚%
+(\texbook\ 中标明å±é™©ç¬¦å·çš„部分讲述了更高阶的内容。)
+
+%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.
+\TeX\ 的结构是éžå¸¸ç®€å•çš„:一个 \TeX\ 输入文档,是一些包括指令的普通文本,
+这些命令æ¥æŒ‡å¯¼ \TeX\ 如何æ¥æŽ’å°ä½ çš„文档。
+许多地方,比如数学公å¼ï¼Œä¼šåŒ…括大é‡çš„这些指令,而一般的解释性文本很少包括这些指令。
+
+%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.
+学习 \TeX\ 最花时间的地方就是学习命令和命令背åŽçš„原ç†ã€‚
+因此我们把本书大部分的篇幅郎在介ç»å‘½ä»¤çš„定义,和解释命令的原ç†ä¸Šã€‚
+我们也æ供了一些例å­ï¼Œæ¥å±•ç¤º \TeX\ 排版的输出,以åŠå…¶ç›¸å…³çš„输入,解决常è§é—®é¢˜çš„å°æ示,以åŠé”™è¯¯ä¿¡æ¯çš„有关信æ¯ç­‰ç­‰ã€‚
+我们æ供了éžå¸¸è¯¦å°½çš„页ç äº¤å‰å¼•ç”¨å’Œå®Œæ•´çš„索引列表。
+
+%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.
+我们必须æ醒读者,我们并没有å°è¯•æ供完整的 \TeX\ 行为的定义。
+如果你需è¦äº†è§£è¿™äº›ä¿¡æ¯ï¼Œ 你应该看 \TeX\ çš„ç»å…¸è‘—作—— ^{\texbook}。
+\texbook\ åŒæ—¶è¿˜æ供了很多如何更好使用 \TeX\ åšå‡ºæ¼‚亮文档的æ示,
+特别是讲精调数学共识的那部分。我们强烈读者阅读它。
+
+%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}).
+在 1989 年,Knuth 对 \TeX\ ç³»ç»Ÿè¿›è¡Œäº†ä¸€æ¬¡å¤§çš„ä¿®è®¢ï¼Œä»¥ä½¿å¾—å®ƒèƒ½å¤Ÿæ”¯æŒ $8$ ä½çš„字符,
+因此使得排版除了英语以外的其他一些语言æˆä¸ºäº†å¯èƒ½ã€‚
+本书对于 \TeX\ 的介ç»ï¼ŒåŒ…括了这次修订的内容(è§\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}
+ä½ å¯èƒ½æ­£åœ¨ä½¿ç”¨ä¸€ä¸ªä¸“门的 \TeX\ å°è£…å½¢å¼ï¼Œ
+比如 ^{\LaTeX} 或者 ^{\AMSTeX} (è§ \xref{resources})。
+虽然这些å°è£…å½¢å¼æ˜¯å®Œæ•´çš„, ä½ ä»å¯èƒ½ä¸ºæ›´å¥½åœ°æŽ§åˆ¶ \TeX\ 而去使用 \TeX\ 本身独有的一些功能,
+ä½ å¯ä»¥ä½¿ç”¨è¿™æœ¬ä¹¦æ¥å­¦ä¹ ä½ æƒ³è¦çŸ¥é“的这些功能,
+而把其它你ä¸æ„Ÿå…´è¶£çš„东西扔在一边。
+
+%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.
+在准备本书写作时,
+æˆ‘ä»¬ä½œè€…ä¸­çš„ä¸¤ä½ (K.A.H. å’Œ K.B.) 获得波士顿麻çœå¤§å­¦çš„鼎力帮助,
+尤其是 Rick Martin 在此期间,ä¿è¯è®¡ç®—机的正常è¿è¡Œï¼Œ
+ä»¥åŠ Robert~A. Morris å’Œ Betty O'Neil 能让我们使用这些计算机设备。
+Paul English of Interleaf 帮助我们åšå‡ºäº†å°é¢è®¾è®¡çš„校样。
+
+%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.
+我们需è¦æ„Ÿè°¢æœ¬ä¹¦çš„这些审稿人:马里兰大学的 Richard Furuta,
+Arbortext å…¬å¸çš„ John Gourlay,
+电å­è®¾å¤‡å…¬å¸çš„ Jill Carter Knuth å’Œ Richard Rubinstein。
+我们把他们对我们原稿的观点和批评铭记在心,本书从他们的洞è§ä¸­èŽ·ç›Šè‰¯å¤šã€‚
+
+%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
+我们感谢我们的编辑,Addison-Wesley 出版公å¸çš„ Peter Gordon。
+出版本书其实是他的注æ„,在本书的写作过程中,他也鼓励我们并且æ供有价值的建议。
+我们感谢他在 Addison-Wesley 的助ç†ï¼Œ Helen Goldstein, 因为她在很多方é¢å¸®åŠ©æˆ‘们。
+我们感谢 Addison-Wesley çš„ Loren Stevens 在指导本书出版过程中的å‘挥的激情和技艺。
+如果没有我们的技术编辑 Janice Byer, 很多å°å´æ¼äººçš„错误å¯èƒ½è¿˜ç•™åœ¨è¿™æœ¬ä¹¦ä¸­ã€‚
+我们感谢她在区分需è¦å’Œä¸éœ€è¦æ”¹åŠ¨çš„地方的æ•æ„Ÿå’Œå“ä½ã€‚
+最åŽï¼Œæˆ‘们需è¦æ„Ÿè°¢ Prometheus 有é™å…¬å¸çš„ Jim Byrnes,他介ç»æˆ‘们互相认识,使我们能够有机会进行åˆä½œã€‚
+\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
+
+\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.
+\noindent {\bf 自由版本å‰è¨€ï¼š} 这本书本æ¥æ˜¯ Addison-Wesley 在 1990 年出版的。
+在 2003 年售空,Addison-Wesley 慷慨地把所有的æƒåŠ›å½’还给我们作者。
+没有社区,也ä¸ä¼šæœ‰æœ¬ä¹¦çš„存在,所以作为我们对社区的贡献,
+我们打算在 GNU 的自由文档许å¯å议下把这本书开æºï¼Œ
+更多的关于许å¯å议的信æ¯ï¼Œè§æœ¬ä¹¦çš„版æƒé¡µã€‚
+
+%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.
+原本本书包括了一些æ’图,ä¸è¿‡åœ¨è‡ªç”±ç‰ˆæœ¬ä¸­ï¼Œæˆ‘们没有把æ’图包括近æ¥ã€‚
+此外我们还改å˜äº†ä¸€äº›å­—体,åªä½¿ç”¨å¯è‡ªç”±èŽ·å–的字体。
+我们把剪è£çº¿å’Œé•¿æ¡æ ¡æ ·ä¿ç•™åœ¨é¡µé¢ä¸Šä»¥æ–¹ä¾¿è¯†åˆ«ã€‚
+本书使用è€ç‰ˆæœ¬çš„ Eplain å®åŒ…编写,更多信æ¯è§ {\tt eplain.tex} 文件。
+
+%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}.
+我们把本书å‘布在 {\tt ftp://tug.org/tex/impatient} 上。
+ä½ å¯ä»¥é€šè¿‡ç”µå­é‚®ä»¶ {\tt impatient@tug.org} æ¥å’Œæˆ‘们å–å¾—è”系。
+
+\pagebreak
+\byebye
diff --git a/info/impatient/cn/read1st.tex b/info/impatient/cn/read1st.tex
new file mode 100644
index 0000000000..03a4526c8b
--- /dev/null
+++ b/info/impatient/cn/read1st.tex
@@ -0,0 +1,69 @@
+% -*- coding: utf-8 -*-
+% 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}
+\frontchapter{阅读指å—}
+
+% 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
+如果你刚学习 \TeX :
+\ulist
+\li 首先阅读第\chapternum{usebook}--\chapternum{usingtex}章。
+\li 查看\chapterref{examples}中与你è¦åšçš„事情相似的例å­ã€‚
+查找\chapterref{capsule},“命令速查表â€ä¸­ç›¸å…³çš„命令。
+利用页ç ç´¢å¼•æ‰¾åˆ°è¿™äº›å‘½ä»¤åŠç±»ä¼¼å‘½ä»¤çš„更完整的æ述。
+\li 查找\chapterref{concepts},“概念â€ä¸­ä¸ç†Ÿæ‚‰çš„è¯è¯­ï¼Œ
+使用书背内页的概念列表快速找到这些è¯è¯­çš„解释。
+\li åå¤å°è¯•å’ŒæŽ¢ç´¢ã€‚
+\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
+\noindent
+如果你已ç»ç†Ÿæ‚‰ \TeX ,或者你正在编辑或修改其他人创建的 \TeX\ 文档:
+\ulist
+\li è¦å¾—到æŸä¸ªå‘½ä»¤ç”¨æ³•çš„快速æ示,看一下\chapterref{capsule},“命令速查表â€ã€‚
+该表按照字æ¯é¡ºåºæŽ’列,并给出了到命令的更完整介ç»çš„页ç ç´¢å¼•ã€‚
+\li 利用命令æ述中的功能组,找到与你知é“çš„æŸä¸ªå‘½ä»¤ç›¸å…³çš„其他命令,
+或者找到æŸä¸ªæœ‰ç‰¹æ®Šç”¨å¤„的命令。
+\li 利用\chapterref{concepts},“概念â€ï¼Œ
+找到任何你ä¸ç†è§£çš„,或想ç†è§£å¾—更准确的,或已ç»é—忘的,概念的解释。
+用书背内页上的概念列表å¯ä»¥å¿«é€Ÿæ‰¾åˆ°ä¸€ä¸ªæ¦‚念。
+\endulist
+}
+\pagebreak
+
+\byebye
diff --git a/info/impatient/cn/tips.tex b/info/impatient/cn/tips.tex
new file mode 100644
index 0000000000..0b9dd4e74d
--- /dev/null
+++ b/info/impatient/cn/tips.tex
@@ -0,0 +1,1685 @@
+% -*- coding: utf-8 -*-
+% 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.
+
+% 中文翻译 by Zhaopeng Xing (zpxing@gmail.com)
+
+\input macros
+%\chapter{Tips and techniques}
+
+\chapter{建议和技巧}
+
+\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.
+
+\TeX{} 是一个å¤æ‚的程åºï¼Œå¶å°”地会以你看ä¸æ‡‚çš„æ–¹å¼å˜å¾—ä¸å¬è¯ã€‚这一章,
+我们æ供一些解决问题的å°è´´å£«å¹¶é˜é‡Šä¸€äº›æœ‰ç”¨çš„技巧。
+
+%\section Correcting bad page breaks
+
+\section 纠正ä¸è‰¯åˆ†é¡µ
+
+% \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
+
+\bix^^{分页//ä¸è‰¯åˆ†é¡µ}
+有时,\TeX{} 在你想è¦æ”¾åœ¨ä¸€èµ·çš„ç´ æ中间分页——例如,章节标题和éšåŽçš„æ–‡
+本,或者一个互有è”系的项目列表。有两ç§æ ¡æ­£æ–¹æ³•ï¼š
+\ulist\compact
+\li 强制素æ被放在一起。
+\li 在别的地方è¦æ±‚分页。
+\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.
+
+è¦å¼ºåˆ¶ \TeX{} 把素æ放在åŒä¸€é¡µä¸Šï¼Œæœ€ç®€å•çš„办法是
+使用 |\vbox| 命令\ctsref{\vbox}æ¥ä½¿ç´ æ被å°è£…在一个竖直盒å­é‡Œã€‚
+^^|\vbox//用它修正分页|
+这里使用竖直盒å­æ¯”水平盒å­è¦å¥½ï¼Œå› ä¸ºå¤§å¤šæ•°æƒ…况下,
+需è¦æ”¾åœ¨ä¸€èµ·çš„是竖直模å¼ç´ æ,比如连续的段è½ã€‚
+ç«–ç›´ç›’å­çš„å‰åŽï¼Œä½ éƒ½è¦æ”¾ä¸€ä¸ªéšå«æˆ–明显的分段命令(或者空行,或者 |\par|);
+å¦åˆ™çš„è¯ï¼Œ\TeX{} 会试图使竖直盒å­æˆä¸ºç›¸é‚»æ®µè½çš„一部分。
+ç«–ç›´ç›’å­çš„方法有一个é‡è¦çš„å±€é™ï¼šä¸èƒ½ç”¨äºŽä¸è¶³ä¸€ä¸ªæ®µè½çš„å°éƒ¨åˆ†æ–‡æœ¬ã€‚
+
+
+% 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.
+
+有时候,è¦æŠŠä¸€ä¸ªè‡ªç„¶æ®µçš„å„行放置在一起,你å¯ä»¥æŠŠå®ƒå°è£…在一个编组中,并
+在编组开始的地方(或者段è½ç»“æŸå‰çš„其它ä½ç½®ï¼‰ä»¤ |\interlinepenalty|%
+\ctsref{\interlinepenalty}的值为 $10000$。这样就告诉了 \TeX{},“ç»å¯¹ä¸
+能â€åœ¨æ®µå†…分页。但是,如果 \TeX{} å‘现所有è¦åˆ†é¡µçš„地方都是“ç»å¯¹ä¸èƒ½â€çš„,
+它å¯èƒ½ä¸ç®¡ä¸‰ä¸ƒäºŒå一,就在自然段里分页。
+
+% 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.
+
+在段è½ä¹‹åŽä½¿ç”¨ ^|\nobreak| 命令 (\xref{vnobreak}) 会阻止 \TeX{} 在下一
+项内容之å‰åˆ†é¡µï¼ˆé™¤éžä¸‹ä¸€é¡¹æ°å¥½æ˜¯ä¸€ä¸ªå°äºŽ $10000$ çš„ 惩罚项)。这也是防
+止在章节标题之åŽåˆ†é¡µçš„最佳方案,因为章节标题通常类似于一个自然段è½ã€‚
+|\nobreak| 需è¦æ”¾åœ¨æ®µè½ç»“æŸçš„空行或者 |\par| 之åŽï¼Œä»Žè€Œé¿å… \TeX{} å°†
+|\nobreak| 作为段è½çš„一部分处ç†ã€‚ |\nobreak| 还需è¦å‡ºçŽ°åœ¨æ®µè½æœ«å°¾æ‰€æœ‰
+适åˆåˆ†é¡µçš„断点之å‰æ‰æœ‰æ•ˆã€‚\TeX{} æ’入在下一个段è½ä¹‹å‰çš„粘连就是这样的
+一个断点,其他的还有你明确æ’入在段è½åŽé¢çš„任何竖直粘连。 å› 
+此,|\nobreak| 通常出现在段è½æˆ–者标题结æŸä¹‹åŽçš„第一个ä½ç½®ã€‚
+
+% 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.
+
+ä½ å¯ä»¥ä½¿ç”¨ ^|\eject| 命令\ctsref{\eject},强制 \TeX{} 在特定的地方分
+页。在段è½å†…部,你å¯ä»¥ä½¿ç”¨ä¸€ä¸ªç»„åˆï¼š`|\vadjust{\vfill\eject}|'
+\ctsref{\vadjust}
+^^|\vadjust|
+在下一行之åŽå¼ºåˆ¶æ–­å¼€ã€‚|\eject| ä¹‹å‰ ^|\vfill|
+\ctsref{\vfill} 的作用是让 \TeX{} 使用空白æ¥å¡«å……页é¢ã€‚但是,使用
+|\eject| æ¥çº æ­£åˆ†é¡µé—®é¢˜çš„主è¦ç¼ºç‚¹åœ¨äºŽï¼šå¦‚果文档的页边è·æ”¹å˜ï¼Œåˆ†é¡µçš„地
+æ–¹å¯èƒ½æœªå¿…就如你所愿那样。
+
+% 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.
+
+如果你没有在 |\eject| 之åŽ\footnote{译注:疑为笔误,应该是“之å‰â€ã€‚}使用 |\vfill| 命令,
+\TeX{} 将尽其所能地é‡æ–°åˆ†é…é¢å¤–的空白间è·ï¼Œç„¶åŽ
+å‘牢骚:“an underfull |\vbox| (badness $10000$) has occurred while |\output| is
+ active.â€ä¸Šé¢è®²çš„å°è£…ç´ æ在一起的任一方法中,类似的问题也会出现。
+
+% 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.
+
+^|\filbreak| 命令 \ctsref\filbreak{}
+\xrdef{filbreak}
+æ供了一ç§æ–¹å¼æ¥æŠŠä¸€ä¸ªè‡ªç„¶æ®µæˆ–几个段è½ï¼ˆæˆ–者其他竖直模å¼ç´ æ)放在åŒä¸€
+页é¢ä¸Šã€‚当你用 |\filbreak| æ¥å°é—­ä¸€ä¸ªè‡ªç„¶æ®µçš„时候,如果段è½å†…容å¯ä»¥æ”¾
+置在一页, \TeX{} 会有效地忽略那些 |\filbreak|;如果ä¸æ˜¯ï¼Œ\TeX{} 将在
+第一个 |\filbreak| 之å‰åˆ†é¡µã€‚如果在连续段è½ä¸­ï¼Œæ¯ä¸ªè‡ªç„¶æ®µå‰åŽéƒ½æœ‰
+|\filbreak|,比如这样:
+{\obeylines\display{
+{\tt \\filbreak}
+\<paragraph>
+{\tt \\filbreak}
+\<paragraph>
+{\tt \\filbreak}
+\leavevmode\indent\vdots
+\<paragraph>
+{\tt \\filbreak}
+}}
+\vfil\eject
+\noindent
+\TeX{} 将使æ¯ä¸€æ®µéƒ½æ˜¯åŒé¡µã€‚如果在 |\filbreak| 处分页, \TeX{} 将用空白
+填充页é¢åº•éƒ¨ã€‚
+
+% 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$.
+
+有时,你å¯ä»¥æ”¹å˜ä¸€ä¸ªæˆ–几个段è½çš„ ^|\looseness| å‚æ•°\ctsref{\looseness}%
+以修改页é¢çš„长度。设置 |\looseness| 为负会让 \TeX{} 试图缩å‡æ®µè½çš„行数;
+ä¸ºæ­£åˆ™å¢žåŠ å…¶è¡Œæ•°ã€‚æ”¹å˜ |\looseness| 的缺点在于:å—å½±å“区域的å•è¯é—´è·ä¸æ˜¯æœ€ä½³çš„。
+è¦äº†è§£æ›´å¤šçš„断行信æ¯ï¼Œå¯ä»¥è®¾ç½® |\tracingpages|(\xref\tracingpages )为 $1$。
+
+% \section Preserving the end of a page
+
+\section ä¿ç•™é¡µå°¾
+
+% 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|
+
+如果原æ¥çš„页尾就是正好是两个段è½ä¸­é—´ï¼Œä½ å¯ä»¥ç”¨å‰é¢æ述的方法在åŒæ ·ä½ç½®
+强制分页。其他情况下,你必须è¦åœ¨æŒ‡å®šä½ç½®\emph{åŒæ—¶}强制断行和分页。如
+果新页é¢æ¯”旧页é¢è¦çŸ­ï¼Œå‘½ä»¤åºåˆ—:
+\csdisplay
+\vadjust{\vfill\eject}\break
+|
+^^|\vadjust|
+是一个æ·å¾„。但是,如果新的页é¢è¦é•¿ä¸€äº›çš„è¯ï¼Œé—®é¢˜å°±éžå¸¸éš¾åŠžï¼Œå› ä¸º
+\TeX{} å¯èƒ½å·²ç»å°½é‡ä½¿é¡µé¢éžå¸¸ç´§å‡‘了。这时唯一的办法就是设定
+^|\looseness|\ctsref\looseness{}为负值,æ¥ç¼©çŸ­é¡µé¢ä¸Šçš„一些竖直间è·ï¼Œ
+如果 ^|\parskip| (\xref\parskip) éžé›¶ï¼ŒåŽ‹ç¼©ä¸€ä¸‹ï¼Œ 或者祭出压箱底的ç»
+招:略微å‡å° |\baselineskip| \ctsref{\baselineskip}。
+^^|\baselineskip//用于ä¿ç•™é¡µå°¾|
+
+% \section Leaving space at the top of a page
+
+\section ä¿ç•™é¡µé¦–空白
+
+% \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}
+
+\null
+^^{ç«–ç›´é—´éš”//ä¿ç•™é¡µé¦–空白}
+通常你å¯ä»¥ä½¿ç”¨ |\vskip| 命令\ctsref\vskip{} 在页é¢ä¸Šæ·»åŠ ç©ºç™½ç«–ç›´é—´è·ï¼Œ
+但这一招对页首无效,因为在紧接ç€åˆ†é¡µåŽçš„所有粘连,紧排和惩罚,
+都会被 \TeX{} 会丢弃。
+^^{分页//分页处的粘连}
+一个替代:^|\topglue| 命令 \ctsref\topglue\ ,能产生永ä¸æ¶ˆå¤±çš„粘连。
+\eix^^{分页//ä¸è‰¯åˆ†é¡µ}
+
+% \section Correcting bad line breaks
+
+\section 纠正ä¸è‰¯æ–­è¡Œ
+
+% \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
+
+\null
+\bix^^{æ–­è¡Œ//ä¸è‰¯æ–­è¡Œ}
+如果 \TeX{} 在需è¦æ”¾åœ¨ä¸€è¡Œçš„内容中间断行了,有好几ç§æ–¹æ³•èƒ½çº æ­£è¿™ç§æƒ…况:
+\ulist\compact
+\li ä½ å¯ä»¥ä½¿ç”¨ |\break| 命令(\xref{hbreak}),在æ—边强制断行。
+ ^^|\break//纠正断行|
+\li ä½ å¯ä»¥åœ¨ä¸¤ä¸ªå•è¯ä¹‹é—´æ’入一个带å­(|~|)(è§\xref{@not}),æ¥é˜²æ­¢åœ¨å®ƒä»¬ä¹‹é—´æ–­å¼€ã€‚\ttidxref{~}
+\li ä½ å¯ä»¥åœ¨ä¸€äº›å•è¯é‡Œæ’入一个或者多个自定连字符,æ¥å‘Šè¯‰ \TeX{} æ–°çš„æ–­è¯è§„则(å‚考 |\-|,\xref{\@minus})。
+\ifoldeplain\ctsidxref{-//在断行中}\fi
+ ^^{自定连字符//纠正ä¸è‰¯æ–­è¡Œ}
+\li ä½ å¯ä»¥ä½¿ç”¨ ^|\hbox| 命令\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}
+
+除了æ’入临时连字符以外, 其他几ç§æ–¹æ³•éƒ½æœ‰è¿™æ ·çš„缺点:\TeX{} ä¸èƒ½äº§ç”Ÿæœ€ä½³çš„断行设置。
+一旦如此,\TeX{} 将产生一个或多个未满或溢出盒å­ï¼Œå¹¶ä¸”对此抱怨。
+^^{未满盒å­} ^^{过满盒å­}
+水平盒å­çš„方法还有å¦å¤–一个缺点:
+因为 \TeX{} 处ç†ä¸€ä¸ªæ°´å¹³ç›’å­çš„æ–¹å¼æ˜¯ä¸è€ƒè™‘其中的内容而置其为一个基本å•ä½ï¼Œ
+结果盒å­å†…部的å•è¯é—´è·å¯èƒ½ä¼šä¸Žä¸€è¡Œå†…其它地方ä¸ä¸€è‡´ã€‚
+\eix^^{æ–­è¡Œ//ä¸è‰¯æ–­è¡Œ}
+
+% \section Correcting overfull or underfull boxes
+\section 纠正溢出或未满盒å­
+
+% \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:
+
+\null
+\bix^^{过满盒å­}
+\bix^^{未满盒å­}
+\bix^^{ç›’å­//过满盒å­}
+\bix^^{ç›’å­//未满盒å­}
+如果 \TeX{} 抱怨一个溢出盒å­ï¼Œé‚£è¡¨ç¤ºä½ åœ¨ä¸€ä¸ªç›’å­é‡Œæ”¾ç½®äº†è¶…出盒å­ç©ºé—´çš„内容。类似的,如果 \TeX{} 抱怨的是一个未满盒å­ï¼Œé‚£æ˜¯è¯´ä½ æ²¡æœ‰å¾€ç›’å­é‡ŒåŠ å…¥è¶³å¤Ÿå¤šçš„内容。这些抱怨å¯ä»¥åœ¨è®¸å¤šæƒ…形下å‘生,所以,让我们先看看一般的情况:
+
+% \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.
+
+\ulist
+\li 一个水平溢出盒å­ï¼Œå¦‚果是段è½ä¸­çš„一行,表示那一行太长而且 \TeX{} ä¸èƒ½é‡æ–°å®‰æŽ’段è½æ¥ç¼©çŸ­å®ƒã€‚
+如果你设置 ^|\emergencystretch|\ctsref{\emergencystretch} 的值éžé›¶ï¼Œ
+\TeX{} 将在å•è¯é—´æ’入更多的空白,å¯èƒ½ä¼šæœ‰åŠ©äºŽè§£å†³è¿™ä¸ªé—®é¢˜ã€‚
+å¦ä¸€ä¸ªåŠžæ³•æ˜¯è®¾ç½® |\tolerance| \ctsref{\tolerance} $10000$,但它往往会导致行内太多的空白。
+还有一个办法是对在 \TeX\ 里未定义断è¯è§„则的关键å•è¯æ’入自定连字符。
+^^{自定连字符//纠正过满盒å­}
+如果这些都ä¸ç®¡ç”¨ï¼Œé‚£ä½ å¯èƒ½åªå¥½åŽ»é‡å†™é‚£ä¸ªæ®µè½äº†ã€‚
+一个ä¸æ˜¯å¾ˆå¥½çš„方法是增加 ^|\hfuzz|\ctsref\hfuzz ,æ¥å…许 \TeX{} 排版超出å³è¾¹ç•Œçš„行。
+
+% \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 一个水平未满盒å­ï¼Œå¦‚果是段è½é‡Œçš„一行,表示那一行太短了,\TeX{} ä¸èƒ½é‡æ–°å®‰æŽ’段è½æ¥ä½¿ä¹‹å˜é•¿ã€‚\TeX{} 将加大å•è¯é—´çš„空白,甚至超过正常é™åº¦ã€‚上é¢æ到的对付溢出行的两ç§çº æ­£åŠžæ³•ï¼šæ’入临时的连字符和é‡å†™æ®µè½ï¼Œéƒ½å¯ä»¥ç”¨äºŽæœªæ»¡çš„行。对于使用 ^|\raggedright| 命令 \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.
+
+\li 抱怨信æ¯ï¼š
+\csdisplay
+Underfull \vbox (badness 10000) has occurred
+ while \output is active
+|
+表明 \TeX{} 因为没有足够的素æ而没有填满一页。å¯èƒ½çš„原因是:
+你使用了竖直盒å­æ¥æŠŠç´ æ放在一起,但是在接近页é¢çš„底部时,
+\TeX{} é‡åˆ°äº†ä¸€ä¸ªä¸é€‚åˆæ”¾åœ¨é‚£é‡Œçš„ç«–ç›´ç›’å­ã€‚
+结果那个盒å­è¢«ç§»è‡³ä¸‹ä¸€é¡µï¼Œè€Œåœ¨å½“å‰é¡µä¸Šç•™ä¸‹äº†å¤ªå¤šç©ºç™½ã€‚
+在这ç§æƒ…况下,或者你è¦åœ¨åˆ«çš„地方æ’入更多的空白,
+或者将那个竖直盒å­æ‰“破,å˜å¾—å°ä¸€ç‚¹ã€‚
+
+% 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.
+
+出现这一抱怨信æ¯çš„å¦ä¸€ä¸ªå¯èƒ½åŽŸå› æ˜¯ï¼šä¸€ä¸ªé•¿æ®µè½è¦†ç›–了整页而没有分段。
+通常 \TeX\ ä¸ä¼šè‡ªåŠ¨è°ƒæ•´åŸºè¡Œè·ç¦»ï¼Œå› æ­¤ï¼Œåœ¨ä¸€é¡µçš„末尾,就没法填满ä¸è¶³ä¸€ä¸ªè¡Œé—´è·çš„空白。
+如果页é¢é•¿åº¦ |\vsize|\ctsref{\vsize}æ°å¥½ä¸æ˜¯åŸºçº¿è·ç¦»
+|\baselineskip|\ctsref{\baselineskip}çš„æ•´æ•°å€ï¼Œè¿™ç§æƒ…况就会出现。
+
+% 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.
+
+关于这一抱怨信æ¯è¿˜æœ‰ä¸€ä¸ªåŽŸå› ï¼šä¸Žä¸Šé¢ç›¸ä»¿ï¼Œ
+段è½é—´çš„粘连 ^|\parskip|\ctsref{\parskip},被固定为ä¸èƒ½æ‹‰ä¼¸æˆ–挤压的值。
+åŽé¢çš„这两ç§æƒ…况,你å¯ä»¥å¢žåŠ  ^|\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 抱怨信æ¯ï¼š
+\csdisplay
+Overfull \vbox (296.30745pt too high) has occurred
+ while \output is active
+|
+说的是你构造了一个长于一页的竖直盒å­ã€‚弄短一点å§ã€‚
+
+% \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
+\bix^^|\hbox//它导致的过满盒å­|
+\bix^^|\vbox//它导致的过满盒å­|
+对于 |\hbox| 或 |\vbox| 命令(第\xrefn\hbox ,\xrefn\vbox 页)所产生的
+溢出盒å­é—®é¢˜ï¼ŒçŸ«æ­£çš„诀çªæ˜¯ï¼šä»Žç›’å­é‡Œæ‹¿ä¸€äº›ä¸œè¥¿å‡ºåŽ»ï¼›ç”¨ ^|\hss| 或 ^|\vss|(\xref\hss )
+æ’入负值的粘连;或者增加盒å­çš„尺寸。
+
+% \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|
+
+\li 对于 |\hbox| 或 |\vbox| 命令(第\xrefn\hbox ,\xrefn\vbox 页)所产生的
+未满盒å­é—®é¢˜ï¼Œåªéœ€ç”¨ ^|\hfil| 或 ^|\vfil|(\xref\hfil )æ¥å¡«æ»¡å³å¯ã€‚
+\eix^^|\hbox//它导致的过满盒å­|
+\eix^^|\vbox//它导致的过满盒å­|
+
+% \endulist
+% \eix^^{boxes//overfull}
+% \eix^^{boxes//underfull}
+% \eix^^{overfull boxes}
+% \eix^^{underfull boxes}
+
+\endulist
+\eix^^{ç›’å­//过满盒å­}
+\eix^^{ç›’å­//未满盒å­}
+\eix^^{过满盒å­}
+\eix^^{未满盒å­}
+
+% \section Recovering lost interword spaces
+
+\section æ¢å¤ä¸¢å¤±çš„å•è¯é—´è·
+
+% \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.
+
+\null
+^^{间隔//丢失的间隔}
+^^{å•è¯è¿žåœ¨ä¸€èµ·}
+如果你å‘现 \TeX{} 把两个å•è¯è¿žåœ¨ä¸€èµ·ï¼Œå¯èƒ½çš„原因是有一个控制åºåˆ—åƒæŽ‰
+了其åŽæ‰€æœ‰çš„空格。在那个控制åºåˆ—åŽé¢æ”¾ä¸€ä¸ª^{控制空格}
+(|\!visiblespace|) å³å¯ã€‚
+
+% \section Avoiding unwanted interword spaces
+
+\section é¿å…多余的å•è¯é—´ç©ºç™½
+
+% \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.
+
+\null
+\bix^^{é—´éš”//ä¸æƒ³è¦çš„é—´éš”}\xrdef{unwantedspace}
+如果在文档中有ä¸æƒ³è¦æˆ–者未预料到的空白,以我们的ç»éªŒï¼Œæœ€å¯èƒ½çš„原因是一
+行的结尾或大括å·åŽçš„空格。%
+^^{花括å·//花括å·åŽçš„空格}%
+(当你用类别ç æ¥åšåŽä¸½çš„效果时,
+^^{类别ç //导致ä¸æƒ³è¦çš„é—´éš”}
+还会有其他许多类似的原因。)
+\TeX{} 通常将行尾处ç†ä¸ºç©ºæ ¼ï¼Œå¹¶ä¸”会排出左å³å¤§æ‹¬å·åŽé¢çš„空格。
+
+% 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.
+
+如果多余的空白是在一行内,由大括å·åŽçš„空格引起的,那就移除它。如果多余的空
+白是在行尾,由大括å·åŽçš„空格引起的,那就紧接ç€åœ¨å¤§æ‹¬å·åŽæ”¾ä¸€ä¸ª`|%|'。
+%{\recat!ttidxref[%//to eliminate unwanted spaces]]
+`|%|' 用于注释开始,但ä¸ä¸€å®šçœŸçš„è¦æœ‰æ³¨é‡Šå†…容。
+
+% 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.}
+
+å®å®šä¹‰å¦‚果写的ä¸ä»”细,也å¯èƒ½å¯¼è‡´å¤šä½™çš„空白。当你应用一个å®ï¼Œä½†æ˜¯æœ‰å¤šä½™
+的空白,那就è¦æ£€æŸ¥å…¶å®šä¹‰ï¼Œç¡®ä¿å¤§æ‹¬å·åŽæ²¡æœ‰é¢å¤–的空格以åŠç´§æŽ¥ç€æ‹¬å·ä¹‹åŽï¼Œ
+å®å®šä¹‰æ²¡æœ‰æ¢è¡Œã€‚人们ç»å¸¸åœ¨å¤§æ‹¬å·åŽå¯¹å®å®šä¹‰æ¢è¡Œï¼Œä»Žè€Œå®¹æ˜“阅读。安全起è§ï¼Œ
+应该在所有大括å·ä¹‹åŽè¦æ¢è¡Œçš„地方放一个`|%|'。å¯èƒ½æœ‰äº›åœ°æ–¹ä¸éœ€è¦ï¼Œä½†æ˜¯è¿™
+么åšèµ·ç æ²¡æœ‰å处。\footnote{当然,æžä¸ºå¶ç„¶çš„情况下,你å¯èƒ½çœŸçš„需è¦åœ¨å¤§æ‹¬
+ å·åŽç›´æŽ¥æ¢è¡Œã€‚}
+
+% 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.
+
+当你ä¸èƒ½å‡†ç¡®åœ¨æºæ–‡æ¡£ä¸­å®šä½å¤šä½™çš„空白的时候,å¯ä»¥å°è¯•è®¾ç½®
+|\tracingcommands|\ctsref{\tracingcommands}为 $2$。在日志文件里,æ¯
+一处空格都会输出一个 |{blank space}| 命令。
+
+% It helps to know \TeX's rules for spaces:
+
+çŸ¥é“ \TeX{} 关于空格的规则会有帮助。
+
+% \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}
+
+\olist
+\li 输入行开始之å‰çš„空格将被忽略。
+\li 输入行结æŸä¹‹åŽçš„空格在任何情况下都被忽略。虽然行尾本身就被当作空格。
+(一个空白行产生的是 |\par| 标记)
+\li 多于一个的空格,如果在一起,将被处ç†ä¸ºä¸€ä¸ªç©ºæ ¼ã€‚因此,引用一个å®ä¹‹
+åŽçš„空格将ä¸ä¼šå’Œå®å®šä¹‰æœ«å°¾çš„空格åˆå¹¶ã€‚你得到的是两个空格。
+\li 控制字符之åŽçš„空格将被忽略。
+\li 数字,尺寸以åŠç²˜è¿žè®¾å®šä¸­çš„ `|plus|' å’Œ `|minus|' 之åŽçš„空格在执行
+中也被忽略。%
+\footnote{实际上,\TeX{} 在这些地方åªä¼šå¿½ç•¥å•ä¸ªçš„空格。因为多个空格会
+ 被处ç†ä¸ºä¸€ä¸ªç©ºæ ¼ï¼Œæ‰€ä»¥ç»“果就是忽略所有空格。}
+\endolist
+
+%\section Avoiding excess space around a display
+\section é¿å…陈列公å¼å‘¨å›´çš„é¢å¤–空白
+
+% \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.
+
+\null
+^^{陈列公å¼}
+如果在陈列公å¼ä¹‹å‰æœ‰å¤ªå¤šç©ºç™½ï¼Œæœ‰å¯èƒ½æ˜¯å› ä¸ºä½ è¾“入的时候在陈列公å¼ä¹‹å‰ç•™
+了一个空行。这个空行将开始一个新的段è½ï¼Œå¹¶ä¸”把 \TeX\ 转入竖直模å¼ã€‚当
+\TeX\ 在竖直模å¼é‡Œé‡åˆ°ä¸€ä¸ª '|$|', 就会切æ¢åˆ°æ°´å¹³æ¨¡å¼å¹¶æ’入段间粘连
+(|\parskip|),接下æ¥åˆæ’入一个行间粘连(|\baselineskip|)。然åŽå½“显
+示开始的时候,它æ’å…¥\emph{更多}粘连(或者是 ^|\abovedisplayskip| 或者
+是 ^|\abovedisplayshortskip|,å–决于å‰ä¸€è¡Œçš„长度)。åªæœ‰æœ€åŽä¸€ä¸ªç²˜è¿žæ˜¯ä½ æƒ³
+è¦çš„。为了é¿å…也得到段间粘连,在陈列公å¼ä¹‹å‰ä¸è¦ç•™ç©ºè¡Œæˆ–者结æŸæ®µè½
+(比如用 |\par|)。
+
+% 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
+\section é¿å…段åŽçš„é¢å¤–空白
+
+% 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 `|%|'.
+
+如果使用å®å¾—到的段è½ä¹‹åŽæœ‰å¤ªå¤šç«–直空白,å¯èƒ½é‡Œå¤´åŒ…å«äº†å®äº§ç”Ÿçš„段间粘
+连,一个空段,以åŠå¦å¤–一个段间粘连。你å¯ä»¥é€šè¿‡åœ¨é‚£ä¸ªå®ä¹‹åŽæ’å…¥
+\csdisplay
+\vskip -\parskip
+\vskip -\baselineskip
+|
+æ¥æ¶ˆé™¤ç¬¬äºŒä¸ªæ®µè½é—´è·ã€‚
+
+%\section Changing the paragraph shape
+\section 改å˜æ®µè½å½¢çŠ¶
+
+% \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}
+
+\null
+\bix^^{段è½//å½¢æˆæ®µè½}
+有几个 \TeX\ çš„å‚数——^|\hangindent|, ^|\leftskip|, 等等——%
+å½±å“ \TeX\ 塑段和折行的方å¼ã€‚
+^^{断行}
+\PlainTeX{} 的命令,如 ^|\narrower| å’Œ ^|\hang|, 会间接的用到这些å‚
+数;你也å¯ä»¥ç›´æŽ¥å¯¹å®ƒä»¬èµ‹å€¼ã€‚ 如果你已ç»ä½¿ç”¨äº†è¿™äº›å‘½ä»¤ä¸­çš„一个(或者改
+å˜äº†è¿™äº›å‚数中的一个),但是看上去对段è½æ²¡æœ‰ä»»ä½•æ•ˆæžœï¼Œé—®é¢˜å¯èƒ½åœ¨äºŽï¼Œæ®µ
+è½ç»“æŸä¹‹å‰ä½ å…ˆç»“æŸäº†ä¸€ä¸ªç»„。例如:
+\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.}
+|
+这个段è½ä¸ä¼šå˜çª„,因为最åŽé‚£ä¸ªå³è¾¹å¤§æ‹¬å·åœ¨ \TeX\ 拆段组行之å‰å°±ç»“æŸäº†
+|\narrower| 的组。作为补救,放一个 |\par| 在å³è¾¹å¤§æ‹¬å·ä¹‹å‰ï¼›è¿™æ ·ä½ æ‰èƒ½
+看到想è¦çš„效果。
+^^|\par//在修改段è½å½¢çŠ¶æ—¶|
+\eix^^{段è½//å½¢æˆæ®µè½}
+
+
+%\section Putting paragraphs into a box
+\section 把段è½æ”¾å…¥ç›’å­
+
+% 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).
+
+å‡è®¾ä½ æœ‰ä¸€äº›æ–‡å­—段è½æƒ³æ”¾åˆ°é¡µé¢çš„一个特定ä½ç½®ã€‚显而易è§çš„æ–¹å¼æ˜¯ç”¨ä¸€ä¸ªåˆ
+适尺寸的水平盒å­æ¥å°è£…段è½ï¼Œç„¶åŽæ”¾åˆ°æƒ³è¦çš„ä½ç½®ã€‚哎呀,这个办法ä¸ç®¡ç”¨ï¼Œ
+因为 \TeX\ ä¸èƒ½åœ¨å—é™æ°´å¹³æ¨¡å¼ä¸‹æ–­è¡Œã€‚
+^^{å—é™æ¨¡å¼//æ°´å¹³å—é™æ¨¡å¼}
+这么åšï¼Œä½ å°†å¾—到一个有些误导的错误消æ¯ï¼Œå£°ç§° you're
+ missing the end of a group。摆脱这个é™åˆ¶çš„方法是使用:
+\csdisplay
+\vbox{\hsize = !<dimen> !dots !<paragraphs> !dots}
+|
+其中,\<dimen> 是你希望的一行的长度。这么åšå°±å¯ä»¥äº†ï¼Œç‰¹åˆ«æ˜¯å½“你想用盒
+å­ï¼ˆå¸¦çº¿æ¡†çš„ç›’å­ï¼Œä¸æ˜¯ \TeX ç›’å­ï¼‰å°è£…一些段è½çš„时候。
+
+%\section Drawing lines
+\section 画线
+
+% \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.
+\null
+\bix^^{标线}
+ä½ å¯ä»¥ä½¿ç”¨ ^|\hrule| å’Œ ^|\vrule| 命令(\xref\hrule )æ¥ç”»çº¿ã€‚
+所需知é“的是 (a)~在什么地方å¯ä»¥ç”¨å“ªä¸ªå‘½ä»¤ï¼Œ
+ä»¥åŠ (b)~\TeX\ 如何在你未明确指出的情况下决定线的长度。
+% \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.
+\ulist
+\li \TeX\ 处于竖直模å¼æ—¶ï¼Œåªèƒ½ç”¨ |\hrule|ï¼›\TeX\ 处于水平模å¼æ—¶ï¼Œåªèƒ½
+用 |\vrule|。所以你ä¸èƒ½åœ¨æ°´å¹³ç›’å­é‡Œä½¿ç”¨æ¨ªçº¿æˆ–者在竖直盒å­é‡Œä½¿ç”¨ç«–线。
+然而,通过设定所有三个尺寸(dimension),你å¯ä»¥æŠŠæ¨ªçº¿ç”»çš„åˆé«˜åˆç»†ï¼Œä½¿
+它看起æ¥åƒç«–线。类似的,你也å¯ä»¥æŠŠç«–线画的åˆçŸ®åˆå®½ï¼Œä½¿å®ƒçœ‹èµ·æ¥åƒæ¨ªçº¿ã€‚
+
+% \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
+\li 如果你没有明确设定宽度,竖直盒å­é‡Œçš„横线就会和盒å­ä¸€æ ·å®½ã€‚水平盒å­
+里的竖线也类似。如果你得到的线太长或太短,请检查外é¢ç›’å­çš„尺寸。
+\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}
+
+一个例å­ï¼Œå‡è®¾ä½ æƒ³è¦
+\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}
+|
+我们需è¦æŠŠæ–‡æœ¬æ”¾åˆ°ç«–ç›´ç›’å­é‡Œæ¥è®© \TeX\ 把它当作段è½å¤„ç†ã€‚四层盒å­æ˜¯å¿…
+è¦çš„---如果你有所怀疑,å¯ä»¥å°è¯•åœ¨æ›´å°‘çš„ç›’å­æƒ…况下è¿è¡Œè¿™ä¸ªä¾‹å­ã€‚
+\eix^^{标线}
+
+%\section Creating multiline headers or footers
+\section 创建多行的页眉页脚
+
+% \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.
+
+\null
+\xrdef{bighead}
+\bix^^{页眉//多行页眉}
+\bix^^{页脚//多行页脚}
+ä½ å¯ä»¥ä½¿ç”¨ ^|\headline| å’Œ ^|\footline| 命令(\xref\footline)æ¥åˆ›å»ºé¡µ
+眉和页脚,但是处ç†å¤šäºŽä¸€è¡Œçš„页眉和页脚,就ä¸å¤§çµå…‰ã€‚然而,通过é‡æ–°å®šä¹‰
+\TeX\ 的输出例行程åºçš„一些å®ï¼Œå°±å¯ä»¥å®žçŽ°ã€‚
+
+% 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).
+
+为了得到多行页眉,你需è¦åšä¸‰ä»¶äº‹ï¼š
+\olist\compact
+\li é‡æ–°å®šä¹‰ ^|\makeheadline| å®ï¼Œ\TeX\ 的输出例行程åºå°†ä¼šç”¨åˆ°å®ƒã€‚
+\li 把é¢å¤–的行所需的竖直è·ç¦»åŠ ç»™ ^|\voffset|。
+\li 对 ^|\vsize| å‡å°‘åŒæ ·çš„大å°ã€‚
+\endolist
+\noindent 下é¢çš„例å­æ¼”示了你å¯ä»¥æ€Žæ ·åšï¼š
+\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}
+|
+一般你照ç€è¿™ä¸ªå®šä¹‰çš„æ ·å­åšå°±å¯ä»¥äº†ï¼Œåªéœ€è¦æ›¿æ¢ä½ è‡ªå·±çš„页眉内容并选一个
+åˆé€‚çš„å€æ•°ç»™ |\baselineskip| (页眉行数å‡ä¸€ï¼‰ã€‚
+
+% 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}
+
+对多行页脚的处ç†ä¹Ÿç±»ä¼¼ï¼š
+\olist
+\li é‡æ–°å®šä¹‰ ^|\makefootline| å®ï¼Œ\TeX\ 的输出例行程åºå°†ä¼šç”¨åˆ°å®ƒã€‚
+\li 把é¢å¤–的行所需的竖直è·ç¦»åŠ ç»™ ^|\voffset|。
+\li 从 ^|\vsize| å‡åŽ»é¢å¤–的行所需的竖直è·ç¦»ã€‚
+\endolist
+\noindent 下é¢çš„例å­æ¼”示了你å¯ä»¥æ€Žæ ·åšï¼š
+\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}}
+|
+åŒæ ·ï¼Œä¸€èˆ¬ä½ ç…§ç€è¿™ä¸ªå®šä¹‰çš„æ ·å­åšå°±å¯ä»¥äº†ã€‚|\lineskip| 的值决定了页é¢ä¸Šæ­£æ–‡æœ€
+åŽä¸€è¡Œä¸Žé¡µè„šç¬¬ä¸€è¡Œçš„基行è·ç¦»ã€‚
+\eix^^{页眉//多行页眉}
+\eix^^{页脚//多行页脚}
+
+%\section Finding mismatched braces
+\section 找出匹é…错误的花括å·
+
+% \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?
+\bix^^{花括å·//ä¸åŒ¹é…的花括å·}
+\xrdef{mismatched}
+大多数情况下,如果有花括å·åŒ¹é…错误,
+\TeX\ 会在你的输入文档里éžå¸¸æŽ¥è¿‘错误å‘生的地方给出诊断信æ¯ã€‚
+但是,\TeX\ åœæ­¢ä¹‹å‰æœ€ä»¤äººæ²®ä¸§çš„错误之一是
+\csdisplay
+(\end occurred inside a group at level 1)
+|
+这表明在你的文档中有一个é¢å¤–的左花括å·æˆ–者缺少一个å³èŠ±æ‹¬å·ï¼Œ
+但是并没有æ示å¯èƒ½å‡ºçŽ°é—®é¢˜çš„地方。那么,怎么找到它呢?
+
+% 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.
+一æ¡æœ‰ç”¨çš„调试技巧是,
+在文档内部等è·ç¦»åœ°æ’入五到六处类似下é¢çš„内容(ä¸è¦æ”¾åœ¨å·²çŸ¥çš„编组里):
+\csdisplay
+}% a fake ending
+|
+å‡è®¾é—®é¢˜æ˜¯å¤šäº†ä¸€ä¸ªå·¦èŠ±æ‹¬å·ã€‚如果它在第三和第四个伪装结尾(fake ending)之间,
+你将从å‰ä¸‰ä¸ªä¼ªè£…结尾的地方得到出错消æ¯ï¼Œç¬¬å››ä¸ªåˆ™ä¸ä¼šã€‚
+原因是 \TeX\ 将抱怨并忽略å‰ä¸‰ä¸ªä¼ªè£…结尾,但是第四个正好匹é…了那个é¢å¤–的左花括å·ã€‚
+这样你就知é“了那个é¢å¤–的左花括å·åœ¨ç¬¬ä¸‰å’Œç¬¬å››ä¸ªä¼ªè£…结尾之间æŸä¸ªåœ°æ–¹ã€‚
+如果嫌疑区域ä»ç„¶å¤ªå¤§ï¼Œå°±åŽ»é™¤å·²æœ‰çš„伪装结尾,并在嫌疑区域内é‡å¤ä¸Šè¿°æ­¥éª¤ã€‚
+如果问题是缺少一个å³èŠ±æ‹¬å·ï¼Œä¸€æ—¦ä½ å‘现左边那个,就能确定å³è¾¹çš„了。
+
+% 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}
+如果其他方法都ä¸ç®¡ç”¨äº†ï¼Œ
+那就试ç€åˆ æŽ‰æ–‡æ¡£åŽåŠéƒ¨åˆ†ï¼ˆæ³¨æ„备份ï¼ï¼‰æˆ–者在中间æ’入一个 |\bye| 命令。
+如果问题ä»ç„¶å­˜åœ¨ï¼Œé‚£ä½ å°±å¯ä»¥ç¡®çŸ¥å®ƒåœ¨å‰ä¸€åŠæ–‡æ¡£ä¸­ï¼›
+如果没有问题了,你也å¯ä»¥ç¡®çŸ¥é—®é¢˜åœ¨åŽä¸€èˆ¬æ–‡æ¡£é‡Œã€‚
+é‡å¤è¿™ä¸ªè¿‡ç¨‹ï¼Œæœ€ç»ˆä½ å°†ä¼šå‘现错误所在。
+\eix^^{花括å·//ä¸åŒ¹é…的花括å·}
+
+% \section Setting dimensions
+\section 设置尺寸
+
+% \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>}
+\null
+\bix^^{\<dimen>}
+设置尺寸的最简å•åŠžæ³•æ˜¯ç›´æŽ¥èµ‹å€¼ï¼Œæ¯”如:
+\csdisplay
+\hsize = 6in
+|
+你也å¯ä»¥ç”¨å…¶ä»–尺寸æ¥è®¾å®šæˆ–者混用多ç§é•¿åº¦å•ä½ï¼Œè¿™è¦å¤šè´¹ä¸€ç‚¹äº‹ã€‚
+有两ç§æ–¹æ³•æ¥åˆ›å»ºè¿™æ ·çš„尺寸组åˆï¼š
+\olist\compact
+\li ä½ å¯ä»¥å¢žåŠ ä¸€ä¸ªå°ºå¯¸åˆ°å¦ä¸€ä¸ªå°ºå¯¸å‚数或寄存器。例如:
+\csdisplay
+\hsize = 6in \advance\hsize by 3pc % 6in + 3pc
+|
+\li ä½ å¯ä»¥å°†ä¸€ä¸ªå°ºå¯¸å–为å¦ä¸€ä¸ªå°ºå¯¸ï¼ˆæˆ–粘连)å‚数或寄存器的å€æ•°ã€‚
+这时候,\TeX\ 将丢掉粘连的伸长é‡å’Œæ”¶ç¼©é‡æŠŠå®ƒè½¬æ¢ä¸ºå°ºå¯¸ã€‚例如:
+\csdisplay
+\parindent = .15\hsize
+\advance\vsize by -2\parskip
+|
+\endolist
+\eix^^{\<dimen>}
+
+
+%\section Creating composite fonts
+\section 创建混åˆå­—体
+
+% \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.
+\null
+\bix^^{字体//æ··åˆå­—体}
+有时候新建一ç§``æ··åˆå­—体''会很有用处。混åˆå­—体命å为一个控制åºåˆ— $\cal
+F$, 它的字符基于一ç§å­—体 $f_1$,但是有一些æ¥è‡ªå¦ä¸€ç§å­—体 $f_2$。然åŽä½ 
+å¯ä»¥åƒè°ƒç”¨å…¶ä»–字体一样使用 $\cal F$ æ¥è®¾å®šæ–‡æœ¬ä½¿ç”¨æ··åˆå­—体。
+
+% 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.
+
+è¦åˆ›å»ºæ··åˆå­—体,你å¯ä»¥å®šä¹‰ $\cal F$ 为一个å®ã€‚å®å®šä¹‰ä¸­ï¼Œé¦–先选择字体
+$f_1$, 然åŽå®šä¹‰æŽ§åˆ¶åºåˆ—æ¥äº§ç”Ÿä»Ž $f_2$ 借æ¥çš„字符。举个例å­ï¼Œå‡å¦‚ä½ è¦åˆ›
+建一ç§æ··åˆå­—体 |\britrm|:基于 |cmr10| 但是其中的美元符å·å€Ÿç”¨ |cmti10|
+的英镑符å·. 英镑符å·åœ¨ |cmti10| çš„ä½ç½®æ°å¥½è·Ÿç¾Žå…ƒç¬¦å·åœ¨ |cmr10| 里的ä½ç½®ä¸€æ ·ã€‚
+ä½ å¯ä»¥è¿™æ ·åšï¼š
+\csdisplay
+\def\britrm{%
+ \tenrm % \tenrm names the cmr10 font
+ \def\${{\tenit\char `\$}}% \tenit names the cmti10 font.
+}
+|
+现在,当你使用 |\britrm| 字体的时候,|\$| 将生æˆè‹±é•‘符å·ã€‚
+
+% 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}
+
+å¦ä¸€ç§æ–¹æ³•ä¼šæœ‰åŒæ ·çš„效果:首先改动类别ç ï¼ˆcategory codes)æ¥æ¿€æ´»æ‰€è€ƒ
+虑的字符,然åŽå®šä¹‰å®ƒä»¬ã€‚例如:
+\csdisplay
+\catcode `* = \active
+\def*{{\tentt \char `\*}}
+|
+这个例å­é‡Œï¼Œæ˜Ÿå·å°†ä»Ž |\tentt| 字体借用。如果接下æ¥è¾“入:
+\csdisplay
+Debbie was the * of the show.
+|
+效果将会是
+{\font\tentt=cmtt10%
+\catcode `* = \active
+\def*{{\tentt \char `\*}}%
+\display{Debbie was the * of the show.}}
+\noindent
+
+\eix^^{字体//æ··åˆå­—体}
+
+%\section Reproducing text verbatim
+\section 原文呈现
+% \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.
+
+\null
+^^{原文文本}\xrdef{verbatim}
+原文是“输入什么样,就是什么样â€çš„文本。比较常è§çš„是排版计算机输入,包
+括计算机程åºå’Œ \TeX{} 输入。
+^^{计算机程åºï¼ŒæŽ’版}
+计算机输入ä¸æ˜“以原文呈现的原因是:
+\olist\compact
+\li 有些字符(控制字符,转义符,花括å·ç­‰ï¼‰åœ¨ \TeX{} 里有特殊的å«ä¹‰ã€‚
+\li 行尾和多个空格会被转æ¢ä¸ºä¸€ä¸ªç©ºæ ¼ã€‚
+\endolist
+\noindent
+为了呈现原文,你必须å–消这些特殊å«ä¹‰å’Œè½¬æ¢ã€‚最好的办法是使用å®ã€‚
+
+% 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.
+
+è¦å–消特殊å«ä¹‰ï¼Œä½ å¯ä»¥æ”¹å˜é‚£äº›å­—符的类别ç ã€‚
+^^{类别ç //用于原文文本}
+接下æ¥çš„å®æ¼”示你如何åšï¼š
+\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
+}
+|
+å°å¿ƒï¼ä¸€æ—¦è¿™æ ·æ”¹å˜äº†ç±»åˆ«ç ï¼Œå°±ä¸èƒ½å†ä½¿ç”¨ä»»ä½•æŽ§åˆ¶åºåˆ—了,因为现在ä¸
+å†æœ‰è½¬ä¹‰ç¬¦äº†ã€‚你需è¦æƒ³æ³•å›žåˆ°æ­£å¸¸çš„æ“作模å¼ã€‚接下æ¥ï¼Œä»‹ç»å®Œå¦ä¸€ä¸ªé—®
+题:å–消多个空格和行尾的转æ¢ä»¥åŽï¼Œæˆ‘们将予以解释。
+
+% \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.
+
+\PlainTeX{} 有两个命令:^|\obeyspaces|\ctsref{\obeyspaces}和
+^|\obeylines|\ctsref{\obeylines}, 几乎已ç»è§£å†³äº†ä¸Šè¿°é—®é¢˜ï¼Œ 除了两件
+事:ä¿ç•™è¡Œé¦–的空格以åŠä¿ç•™å¤šä¸ªç©ºç™½è¡Œã€‚对此,你需è¦æ›´å¼ºå¤§çš„方法——使用
+我们将è¦å®šä¹‰çš„ ^|\obeywhitespace| å®ã€‚
+
+% \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}.
+
+\TeX{} 总是收集多行文本为段è½ã€‚为了原文呈现å„行,一个办法是把æ¯ä¸€è¡Œè½¬æ¢
+为独立的段è½ã€‚\footnote{%
+å¦ä¸€ä¸ªåŠžæ³•æ˜¯æŠŠè¡Œå°¾å­—符å˜ä¸º |\break| 命令,并且在æ¯ä¸€è¡Œå°¾æ–½åŠ æ— ç©·å¤§çš„粘连。
+^^|\break//将行尾字符å˜ä¸ºå®ƒ|
+}
+ä½ å¯ä»¥é‡æ–°å®šä¹‰è¡Œå°¾å­—符æ¥äº§ç”Ÿä¸€ä¸ªæŽ§åˆ¶åºåˆ— |\par|。下é¢ä¸‰ä¸ªå®å®šä¹‰æ¼”示了如
+何åšï¼š
+
+^^{空白,ä¿ç•™}
+\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}
+
+|
+一个è¦ç‚¹æ˜¯ï¼š|^^M| 必须被激活, 无论是\emph{定义} |\obeywhitespace| 还是\emph{使用}它的
+时候。
+
+% 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|.
+为了在原文文本之åŽå›žåˆ°æ­£å¸¸çš„æ“作模å¼ï¼Œä½ éœ€è¦é€‰å®šä¸€ä¸ªåŽŸæ–‡æ–‡æœ¬ä¸­å‡ ä¹Žä¸ç”¨
+的字符æ¥ä½œä¸ºä¸´æ—¶çš„转义符。竖线(|!||)ç»å¸¸æ˜¯ä¸€ä¸ªå¥½çš„选择。为此,需è¦å®å®š
+义:
+\csdisplay
+\def\verbatim{\par\begingroup\deactivate\obeywhitespace
+ \catcode `\!| = 0 % Make !| the new escape character.
+}
+
+\def\endverbatim{\endgroup\endpar}
+
+\def\!|{!|}
+|
+在原文文本中,你å¯ä»¥ç”¨åŒç«–线(|!|!||)表示å•ç«–线,
+并用 |!|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
+这个技巧å¯ä»¥æœ‰å¾ˆå¤šå˜åŒ–:
+\ulist
+\li 如果一ç§ç¼–程语言有关键字,你å¯ä»¥æŠŠå…³é”®å­—å˜ä¸ºä¸€ä¸ªå‘½ä»¤ï¼Œæ¥äº§ç”Ÿç²—体的
+关键字。这时候æ¯ä¸€ä¸ªå…³é”®å­—å‰é¢éƒ½è¦è·Ÿä¸€ä¸ªä¸´æ—¶è½¬ä¹‰ç¬¦ã€‚
+\li 如果有一个字符(å‡è®¾æ˜¯ç«–线)在原文文本中从æ¥æ²¡æœ‰ç”¨åˆ°ï¼Œä½ å¯ä»¥æ¿€æ´»å®ƒ
+并且用它结æŸåŽŸæ–‡éƒ¨åˆ†ã€‚å®å®šä¹‰å°†ç±»ä¼¼äºŽï¼š
+\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}
+
+我们在这里åªæ˜¯æ供了简å•çš„办法æ¥æŽ’版计算机程åºã€‚在å映程åºçš„语法和语义
+环境方é¢ï¼ŒåŽŸæ–‡å‘ˆçŽ°ç»å¸¸ä¸æ˜¯ä¸€ä¸ªæ¸…楚ã€æ˜“读的å°åˆ·ä¹ æƒ¯ã€‚如果你想在这个主题
+上走的更远,我们推è阅读:
+
+\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
+\section 使用外部å®
+
+% \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.
+
+\null
+^^{ç¦æ­¢çš„控制åºåˆ—}^^{ä¸å®Œæ•´çš„æ¡ä»¶å¥}
+如果 \TeX{} 警告 ``forbidden control sequence'',很有å¯èƒ½ä½ åœ¨éžå¤–部环境中
+使用了外部å®\seeconcept{外部的}。
+^^{å®//外部å®}
+一个外部å®çš„定义总是以 ^|\outer| 开始. 外部å®ä¸èƒ½è¢«ç”¨äºŽå®å‚é‡
+(argument)ã€å®å®šä¹‰ã€é˜µåˆ—的导言或者æ¡ä»¶æ–‡æœ¬ï¼šåªæœ‰å½“æŸä¸ªæ¡ä»¶æ£€
+验有特定的结果是æ‰å±•å¼€çš„文本。
+^^{阵列//其中的外部控制åºåˆ—}
+有些å®è¢«ä»¥å¤–部的方å¼å®šä¹‰æ˜¯å› ä¸ºæˆ‘们ä¸æƒ³åœ¨è¿™äº›çŽ¯å¢ƒé‡Œä½¿ç”¨å®ƒä»¬ï¼Œä¸€æ—¦ä½¿ç”¨ï¼Œå¿…
+定出错。解决的办法就是é‡æ–°å®šä¹‰å®æˆ–者移动它们到åˆé€‚的环境里。
+
+% 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.
+
+在ä¸æ°å½“的环境使用外部å®ï¼Œè¿˜ä¼šå¼•èµ· \TeX\ 警告:ä¸å—控制(runaway)的情
+形或者ä¸å®Œå¤‡çš„æ¡ä»¶ã€‚因为错误消æ¯æä¾›ä¸äº†çº¿ç´¢ï¼Œè¿™äº›é—®é¢˜é€šå¸¸éš¾äºŽè¯Šæ–­ã€‚如
+果你得到了这样的错误消æ¯ï¼Œæ‰¾æ‰¾çœ‹å“ªé‡Œç”¨äº†å¤–部å®ã€‚å¯èƒ½ä½ å¹¶ä¸çŸ¥é“那些å®
+属于外部的,`^|\show||\a|'\ctsref{\show} 将显示 |\a| 的定义,并告之 |\a|
+是å¦å¤–部å®ã€‚
+
+
+%\section Changing category codes
+\section 改å˜ç±»åˆ«ç 
+
+% \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.
+
+\null
+\bix^^{类别ç //改å˜ç±»åˆ«ç }
+有时候需è¦åœ¨æ–‡æ¡£çš„部分内容里局部的改å˜ç±»åˆ«ç ã€‚例如,排版一个计算机程
+åº ^^{计算机程åºï¼ŒæŽ’版} 或者将激活的字符用于专门目的。你需
+è¦å激活那些字符æ¥ä½¿ \TeX{} å¯ä»¥åƒå…¶ä»–字符一样使用它们。
+
+% 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:
+如果局部地改å˜äº†ç±»åˆ«ç ï¼Œä½ å¯èƒ½ä¼šæ‚²å“€åœ°å‘现 \TeX{} 没有ç†ä¼šä½ çš„努力。通
+常,原因有两个:
+% \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.
+\olist
+\li \TeX{} 决定输入字符^^{输入字符}的类别ç ï¼Œè¯»åˆ°å­—符的
+时候就贴上相应的类别ç ã€‚å‡è®¾è¯»åˆ°æ³¢æµªç¬¦ï¼ˆ|~|),但是在 \TeX{} 的胃还
+没有实际消化\emph{那个}波浪符之å‰æ”¹å˜äº†å®ƒçš„类别ç \seeconcept{\anatomy}。
+\TeX{} 将会继续认定原æ¥è´´ä¸Šçš„类别ç ã€‚这样的问题通常是因为波浪符是一个
+å®å®šä¹‰çš„一部分,而那个å®é‡Œæ”¹å˜äº†æ³¢æµªç¬¦çš„类别ç ã€‚
+
+
+% \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}
+
+\li 当 \TeX{} 匹é…一个å®å¼•ç”¨å’Œå®ƒçš„定义时,匹é…çš„ä¸ä»…仅是å‚数的字符而且包括他们的类别ç ã€‚
+^^{å®//å®çš„å‚é‡}
+^^{å®//å®çš„å‚æ•°}
+如果定义里字符的类别ç ä¸Žå®å¼•ç”¨é‡Œçš„ä¸åŒï¼Œ\TeX{} ä¸ä¼šè®¤ä¸ºå­—符匹é…正确。
+这样的效果匪夷所æ€ï¼Œå› ä¸º\emph{看起æ¥}是匹é…的。例如,如果你已ç»å®šä¹‰äº†å®ï¼š
+\csdisplay
+\def\eurodate#1/#2/#3{#2.#1.#3}
+|
+然åŽæ–œçº¿å­—符在引用和定义 |\eurodate| 的时候必须有相åŒçš„类别ç ã€‚
+\endolist
+如果问题是因为嫌疑字符作为å®å‚é‡ï¼ˆargument),诊治方法是é‡æ–°å®šä¹‰å®ä¸ºä¸€
+å¯¹å® |\mstart| å’Œ |\mfinish|,分别在å‚é‡æ–‡æœ¬çš„å‰åŽåº”用。
+|\mstart| 设定类别ç è€Œ |\mfinish| 结æŸè¿™ä¸€ç¼–组æ¥å–消å˜åŠ¨ã€‚
+\eix^^{类别ç //改å˜ç±»åˆ«ç }
+
+%\section Making macro files more readable
+\section 使å®æ–‡æ¡£æ˜“读
+% \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.
+
+\null
+\bix^^{å®//使å®æ˜“读}
+为了使得å®æ–‡æ¡£æ˜“读,你å¯ä»¥åœ¨æ–‡æ¡£å¼€å¤´è®¾å®šç©ºæ ¼çš„类别ç ä¸º $9$(忽略字符),^|\endlinechar|
+\ctsref{\endlinechar}为 $-1$。然åŽï¼Œä½ å°±å¯ä»¥è‡ªç”±åœ°ä½¿ç”¨ç©ºæ ¼å’Œæ–­è¡Œè€Œä¸å¿…
+担心产生多余的空白。忽略字符ä¸ä¼šäº§ç”Ÿç©ºç™½ï¼Œä½†ä»ç„¶å†³å®šæŽ§åˆ¶åºåˆ—定义。如果
+你真的需è¦ä¸€ä¸ªç©ºæ ¼ï¼Œå¯ä»¥ç”¨ ^|\space| 命令\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.
+当然在文档最åŽï¼Œä½ éœ€è¦æ¢å¤ç©ºæ ¼å’Œè¡Œå°¾çš„类别ç ï¼ˆåˆ†åˆ«æ˜¯ $10$ å’Œ $5$):å¯
+以把整个文档å°è£…在一个编组里,也å¯ä»¥æ˜Žç¡®åœ°æ¢å¤å…¶æ­£å¸¸å€¼ã€‚如果使用编组å°
+装,你还需è¦è®¾å®š ^|\globaldefs| 为 $1$ 以使得整个å®å®šä¹‰æ˜¯å…¨å±€çš„,在编组之
+外å¯è§ã€‚
+
+% 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}
+
+下é¢æ˜¯è¿™ç§æ ¼å¼å®æ–‡æ¡£çš„一个å°ä¾‹å­ï¼š
+
+\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
+ä¸æ”¹å˜ç±»åˆ«ç çš„è¯ï¼Œè¿™äº›å®éœ€è¦å†™çš„更加紧凑,使用很少的空格和行尾更多的
+`|%|'。
+\eix^^{å®//使å®æ˜“读}
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+%\endchapter\byebye
+\endchapter\byebye
diff --git a/info/impatient/cn/usebook.tex b/info/impatient/cn/usebook.tex
new file mode 100644
index 0000000000..146044c0ff
--- /dev/null
+++ b/info/impatient/cn/usebook.tex
@@ -0,0 +1,413 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter{使用本书}
+
+\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.
+
+æœ¬ä¹¦æ˜¯ä¸€æœ¬ä»‹ç» \TeX{} 的自学手册。
+在本章中, 我们将指导你如何更好地使用本书。
+
+% 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.
+
+我们建议你先阅读或æµè§ˆ \chapternum{usebook} 到 \chapternum{examples}章,
+这些地方会告诉你如何上手 \TeX。
+如果你已ç»ä½¿ç”¨è¿‡ \TeX, 这些地方ä»ä¼šå€¼å¾—一看,
+至少你å¯ä»¥çŸ¥é“这些章节介ç»äº†äº›ä»€ä¹ˆå†…容。
+%本书的é‡å¤´æˆæ˜¯\chapternum{concepts}--\chapternum{tips}ç« ,
+%这些章节å¯ä»¥ä»»æ„选择地进行阅读.
+其余部分,主è¦æ˜¯\chapternum{concepts}--\chapternum{tips}章,
+å¯ä»¥æœ‰é€‰æ‹©åœ°ç¿»é˜…。
+当然, 如果你是一个很喜爱阅读å‚考手册的人,
+你会å‘现从头到尾地把这本书阅读一é\emph{是}完全å¯è¡Œçš„,
+当然你会为此在开头学习时绕些弯路。
+
+% 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{usingtex},``使用 \TeX'',
+我们解释如何把一个 \TeX{} 输入文件转为一个 \TeX{} 文档。
+%我们还讲述了准备这个输入文件的惯例,
+我们还讲述了准备输入文件的一些习惯,
+简è¦åœ°è§£é‡Šäº† \TeX{} 是如何工作的, 告诉你å¯ä»¥èŽ·å–的其它资æºä¿¡æ¯ã€‚
+阅读了这个章节, 会有助于你ç†è§£ä¸‹ä¸€ä¸ªç« èŠ‚的例å­ã€‚
+
+% \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.
+
+\chapterref{examples}, ``例å­'',
+包括了一系列的例å­æ¥æè¿° \TeX{} 的功用.
+æ¯ä¸ªä¾‹å­åŒ…括了一页的输出内容, 也包括了输出该页内容所输入的æºä»£ç .
+这些例å­ä¼šæŒ‡å¯¼ä½ ä¸”帮助你找到你所需è¦çš„更详细的资料.
+通过观察输入使用了什么命令,
+你会知é“在哪里能够找到输出效果所使用方法的更详细的信æ¯.
+这些例å­ä¹Ÿå¯ä»¥ä½œä¸ºç®€å•çš„文档的模版, 当然我们必需æ醒你,
+因为我们å°è¯•æŠŠå¾ˆå¤šçš„ \TeX{} 命令放在这几页纸中,
+这些例å­ä¸å¯èƒ½æ述好的或者完整的文档设计.
+
+% 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.
+
+当你看这些命令的解释时, 你会é‡åˆ°å¾ˆå¤šä¸ç†Ÿæ‚‰çš„技术术语.
+在 \chapterref{concepts}, ``概念''中, 我们定义并解释了这些术语.
+我们åŒæ—¶è¿˜è®¨è®ºäº†æœ¬ä¹¦å…¶å®ƒåœ°æ–¹æ²¡æœ‰æ¶‰åŠåˆ°çš„è¯é¢˜.
+本书书背内页列出了所有的概念å称以åŠå®ƒä»¬æ‰€å‡ºçŽ°çš„ä½ç½®.
+我们建议你把书背内页å¤å°ä¸‹æ¥, 放在æ—è¾¹,
+这样你就能在é‡åˆ°ä¸ç†Ÿæ‚‰çš„概念时马上查找到它们.
+
+% \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).
+
+\TeX{} 的命令是它的主è¦è¯æ±‡, 本书最主è¦çš„部分就是用æ¥è§£é‡Šè¿™äº›å‘½ä»¤.
+从第~\chapternum{paras}~章到第~\chapternum{general}~章, 我们解释了这些命令.
+ä½ å¯ä»¥åœ¨\xrefpg{cmddesc}找到命令æè¿°çš„æ述惯例.
+这些命令根æ®åŠŸèƒ½åˆ†é—¨åˆ«ç±», 而ä¸æ˜¯æŒ‰å­—典顺åº,
+所以如果你知é“你想åšä»€ä¹ˆ, 但ä¸çŸ¥é‚£è¯¥ç”¨ä»€ä¹ˆå‘½ä»¤,
+ä½ å¯ä»¥ä½¿ç”¨ç›®å½•æ¥å¼•å¯¼ä½ æ‰¾åˆ°æ­£ç¡®çš„命令组.
+我们给我们认为常用且容易ç†è§£çš„命令标上了一个手形符å·~(\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.
+\chapterref{capsule}为``命令速查表'',这个专门的索引与%
+第~\chapternum{paras}--\chapternum{general}~章的更完整æ述相辅相æˆã€‚
+在这一章中按字æ¯é¡ºåºåˆ—出了å„个 \TeX\ 命令åŠå…¶ç®€è¦è§£é‡Šï¼Œ
+并给出该命令的详细æ述所在的页ç ã€‚
+此速查表å¯ä»¥è®©ä½ å¿«é€ŸçŸ¥é“æŸä¸ªå‘½ä»¤çš„作用。
+
+%\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''.
+\TeX{} 是个å¤æ‚的程åºï¼Œå¶å°”地会以诡异的方å¼å·¥ä½œã€‚
+在\chapterref{tips},``建议和技巧''中,
+对一系列你时ä¸æ—¶ä¼šé‡åˆ°çš„特定的问题,我们æ供了一些建议。
+而若你被 \TeX\ 的错误信æ¯éš¾ä½äº†ï¼Œ
+\chapterref{errors},``ç†è§£é”™è¯¯ä¿¡æ¯''将给你æ供帮助。
+
+%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
+页边的ç°è‰²æ ‡ç­¾å¯ä»¥å¸®ä½ å¿«é€Ÿå®šä½åˆ°æœ¬ä¹¦å„个部分。
+它们将本书划分为下é¢å‡ ä¸ªä¸»è¦éƒ¨åˆ†ï¼š
+\olist
+\li 总体的说明和例å­
+\li 概念
+\li 命令æ述(五个短标签)
+\li 建议,错误信æ¯å’Œ |eplain.tex| å®é›†
+\li 命令速查表
+\li 索引
+\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.
+在很多地方我们都给出了到^{\texbook} 的页ç ç´¢å¼•
+(è¦å¼•ç”¨è¯¥ä¹¦å¯ä»¥è§\xrefpg{resources})。
+这些索引适用于\texbook\ 第å七次å°åˆ·ç‰ˆã€‚
+对于其它版本,有的索引å¯èƒ½ç›¸å·®ä¸€ä¸¤é¡µã€‚
+
+
+%\section Syntactic conventions
+\section 语法约定
+
+%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).
+在任何涉åŠåˆ°ä¸ºè®¡ç®—机准备输入的书ç±ä¸­ï¼Œ
+都得明确区分哪些字符是需è¦é€å­—输入的,而哪些字符属于解释性文本。
+我们用计算机现代打字机字体显示文字输入,比如{\tt literal input},
+以åŠ\TeX\ 命令å。在å¯èƒ½å¯¼è‡´æ··æ·†çš„地方,
+我们将 \TeX\ 命令用å•å¼•å·å›´èµ·æ¥ï¼Œæ¯”如`{\tt like this}'。
+然而,在表示å•ä¸ªå­—符时,我们å¶å°”也会用括å·å°†å®ƒå›´èµ·æ¥ï¼Œ
+比如(|`|)(其原因你容易明白)。
+
+%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}
+通常我们按照你输入空格的方å¼æ˜¾ç¤ºç©ºæ ¼ï¼Œä»¥å…让你看花眼。
+但为了强调æŸäº›ç©ºæ ¼ï¼Œæˆ‘们用`\visiblespace'字符表示它。
+\ifoldeplain{\catcode `\ =\other\pix^^| |}\fi%
+这个字符很自然地被称为\emph{å¯è§ç©ºæ ¼}.
+\pix^^{空格//å¯è§ç©ºæ ¼}
+
+
+%\section Descriptions of the commands
+\section 命令æè¿°
+
+\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:
+第~\chapternum{paras}--\chapternum{general}~ç« æ述了几乎æ¯ä¸ª\TeX\ 命令,
+^^{命令}包括原始命令^^{原始的//原始命令}和 ^{\plainTeX} 命令。
+原始命令是那些内建于 \TeX\ 程åºä¸­çš„命令,
+而 \plainTeX{} 命令是那些在标准辅助定义文件中定义的命令(è§\xref\plainTeX )。
+我们仅仅忽略那些åªåœ¨\plainTeX\ (\knuth{附录~B})定义中用到的局部命令。
+这些命令分为如下几部分:
+%\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
+\ulist\compact
+\li \chapterref{paras},``组段命令'',介ç»å­—符ã€å•è¯ã€æ–‡æœ¬è¡Œå’Œæ•´ä¸ªæ®µè½ã€‚
+\li \chapterref{pages},``组页命令'',介ç»é¡µé¢åŠå…¶ç»„æˆéƒ¨åˆ†ï¼Œä»¥åŠè¾“出例行程åºã€‚
+\li \chapterref{hvmodes},``水平和竖直模å¼å‘½ä»¤'',
+介ç»æ°´å¹³æ¨¡å¼ï¼ˆæ®µè½å’Œæ°´å¹³ç›’å­ï¼‰å’Œç«–直模å¼ï¼ˆé¡µé¢å’Œç«–ç›´ç›’å­ï¼‰ä¸­å¯¹åº”或等åŒçš„命令。
+这些命令æ供了盒å­ã€é—´éš”ã€æ ‡çº¿ã€æŒ‡å¼•çº¿å’Œå¯¹é½ã€‚
+\li \chapterref{math},``数学公å¼å‘½ä»¤'',介ç»æž„造数学公å¼çš„命令。
+\li \chapterref{general},``一般æ“作命令'',
+ä»‹ç» \TeX\ 的编程功能以åŠä¸é€‚åˆæ”¾åœ¨å…¶ä»–部分的命令。
+\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.
+有些命令与特定的概念密切相关。
+例如,|\halign| å’Œ |\valign| 命令与``对é½''的概念相关,
+|\def| 命令与``å®''相关,
+而 |\hbox| å’Œ |\vbox| 命令与``ç›’å­''相关。
+对此ç§æƒ…形,在命令这里我们通常åªç»™å‡ºç²—略介ç»ï¼Œ
+而将对基本原ç†çš„解释放在相关概念中。
+
+%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.
+命令相关的例å­åœ¨æŽ’版时设定了段è½ç¼©è¿› ^|\parindent| 为零,
+因而其中段è½ä¸€èˆ¬æ˜¯ä¸ç¼©è¿›çš„;这使得例å­æ›´åŠ å®¹æ˜“阅读。
+对有些例å­æ®µè½ç¼©è¿›æ˜¯å¿…ä¸å¯å°‘的,我们显å¼è®¾ç½®ç¼©è¿›ä¸ºéžé›¶å€¼ã€‚
+
+%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:
+æŸäº›å‘½ä»¤éœ€è¦ç‰¹å®šç±»åž‹çš„å‚é‡ï¼ˆ\xref{arg1})。
+命令的å‚é‡æä¾› \TeX{} 执行该命令时所需的é¢å¤–ä¿¡æ¯ã€‚
+æ¯ä¸ªå‚é‡éƒ½æ”¾åœ¨å°–括å·ä¸­ï¼Œå¹¶ç”¨æ„大利体标明它的类型:
+
+%\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>}
+\display{%
+\halign{\<#>\quad&#\hfil\cr
+argument&å•ä¸ªè®°å·æˆ–者放在花括å·ä¸­çš„一些文本\cr
+charcode&字符ç ï¼Œå³åœ¨$0$到$255$之间的整数\cr
+dimen&尺寸,å³é•¿åº¦\cr
+glue&粘连(有å¯é€‰çš„伸展值和收缩值)\cr
+number&å¯å¸¦ç¬¦å·çš„整型值(整数)\cr
+register&寄存器编å·ï¼Œåœ¨$0$到$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.
+
+\noindent
+所有这些术语会在\chapterref{concepts}中进行详述.
+除了这些以外, 我们会使用一些ä¸è¨€è‡ªæ˜Žçš„或者在åŽæ–‡è¿›è¡Œè®²è¿°çš„术语, 比如 \<token list>.
+有些命令有自己独特的格å¼, 比如需è¦æ‹¬å­¤æˆ–者特定的字è¯.
+它们会使用和命令标题相åŒçš„黑体标出.
+
+% 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}
+
+有些命令是å‚æ•° (\xref{introparms}) 或表格项.
+^^{å‚æ•°//作为命令}
+这会在命令的列表中指示出æ¥.
+ä½ å¯ä»¥å°†è¿™ä¸ªå‚数作为一个命令的å‚é‡ï¼Œä¹Ÿå¯ä»¥ç»™å®ƒèµ‹å€¼ã€‚
+表格项也是如此。
+我们使用``å‚æ•°''这个术语æ¥æŒ‡ä»£è¿™äº›æ¡ç›®, 比如本是寄存器但å¯å½“å‚数使用的 |\pageno|.
+^^{寄存器//作为å‚æ•°}
+
+
+\section 翻译说明
+
+本书由 CTeX 论å›ä¸Šå¤šäººç¿»è¯‘而æˆï¼ŒåŒ…括 luoyi,yulewang,zoho å’Œ zpxing。
+中文翻译的最新æºç å¯ä»¥åœ¨è¿™é‡Œçœ‹åˆ°ï¼š
+\csdisplay
+https://bitbucket.org/zohooo/impatient
+|
+考虑到此书需è¦å’Œ \texbook\ 一起阅读,
+书中概念的翻译尽é‡ä¿æŒå’Œ \texbook\ 的翻译一致或接近。
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter
+\byebye
diff --git a/info/impatient/cn/usermacs.tex b/info/impatient/cn/usermacs.tex
new file mode 100644
index 0000000000..1ee4972961
--- /dev/null
+++ b/info/impatient/cn/usermacs.tex
@@ -0,0 +1,1455 @@
+% -*- coding: utf-8 -*-
+% 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}
+\chapter{实用å®é›†æ¦‚è¿°}
+
+\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|.
+这一章æè¿° |eplain.tex|,一组用于扩展 plain \TeX\ çš„å®å’Œå…¶ä»–定义。
+\bix^^|eplain.tex|
+对å„ç§å®çš„æ述解释了它们的目的,但通常ä¸è§£é‡Šå®ƒä»¬çš„工作原ç†æˆ–给出如何使用它们的详情。
+那些信æ¯åŒ…å«åœ¨ |eplain.tex| æºç æ–‡ä»¶ä»¥åŠå®ƒçš„文档中。
+在\headcit{资æº}{resources}中介ç»äº†èŽ·å– |eplain.tex| 的方法。
+
+
+%\section{Preliminaries}
+\section{预备定义}
+
+%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|
+\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).
+为了将 `|^^M|' 定义为活动字符,你需è¦å°†å®šä¹‰æ”¾åœ¨ç¼–组中,并借助æŸäº›é¢å¤–机制。
+\ttidxref{^^M}
+\pix^|\letreturn| å®è®©ä½ æ— éœ€é¢å¤–机制就å¯ä»¥å®šä¹‰ `|^^M|'(它的定义在下é¢å¯ä»¥çœ‹åˆ°ï¼‰ã€‚
+
+\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{}%
+%|
+\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}
+现在我们建立一些惯例,用于读å–这个文件的其他部分。
+在这个文件中我们å…许å称带有 `|@|' çš„``ç§æœ‰''控制åºåˆ—。
+这些控制åºåˆ—在这个文件之外无法使用(除éžä½ å†æ¬¡ä¿®æ”¹ `|@|' 的类别ç ï¼‰ã€‚
+\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.)
+接下æ¥ä¸¤ä¸ªå®æ供了诊断输出的便æ·æ–¹å¼ã€‚
+\pix^|\loggingall| 打开所有追踪,
+但让追踪输出仅写在日志文件中,而ä¸åœ¨ç»ˆç«¯ä¸Šæ˜¾ç¤ºã€‚
+\pix^|\tracingboxes| 使得盒å­è¢«è¿½è¸ªæ—¶å…¶å†…容完全显示。%
+(\TeX\ 通常åªæ˜¾ç¤ºåµŒå¥—到三层的盒å­ï¼Œæ¯ä¸ªç›’å­æ˜¾ç¤ºäº”个项目。)
+
+\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.
+标线的默认厚度为 $0.4$\pt 。
+è¦ç”Ÿæˆé»˜è®¤åŽšåº¦ä¸ºä»»ä½•å€¼çš„标线,
+ä½ å¯ä»¥é‡æ–°å®šä¹‰ |\vruledefaultwidth|ã€|\hruledefaultheight| åŠ |\hrule!-defaultdepth|,
+并将 |\hrule| å’Œ |\vrule| æ¢ä¸º \pix^|\ehrule| å’Œ \pix^|\evrule|。%
+(å称中的 `e' 代表 ``eplain''。)%
+^^{标线//标线的厚度}
+如果你显å¼ç»™å‡ºå°ºå¯¸ï¼ˆæ¯”如 |\ehrule height 16pt|),\TeX\ 将使用它。
+
+\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.
+|\%| 通常用于写出 `|%|' 字符,但它无法包å«åœ¨ |\write| çš„è®°å·åˆ—中。
+^^|\write//用它写出 \b\tt\%\e\|
+%^^|%//写出该字符|
+ä½ å¯ä»¥ç”¨ ^|\percentchar| 达到此目的。
+我们还将 ^|^^L| é‡æ–°å®šä¹‰ä¸ºéžå¤–部å®ï¼Œå› æ­¤ä½ å¯ä»¥åœ¨å®å®šä¹‰æˆ–者å‚é‡ä¸­ä½¿ç”¨å®ƒã€‚
+
+\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}).
+\pix^|\tokstostring| 将它的å‚é‡è½¬æ¢ä¸ºä¸€åˆ—^{字符记å·}。
+它仅用到在 \TeX\ 的食é“中处ç†çš„展开。
+此特性是和 |\edef| 一起使用时所必需的。它用于å®çš„交å‰å¼•ç”¨ï¼ˆ\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|.
+为了将å‚é‡åœ¨ç©ºæ ¼å¤„分开,我们è¦ç”¨åˆ°ä¸¤ä¸ªå­å®ã€‚
+|\@ttsA| 用于寻找空格,而 |\@ttsB| 用于处ç†ä¸å¸¦ç©ºæ ¼çš„控制åºåˆ—。
+æ¯ä¸ªç©ºæ ¼éƒ½è¢«æ›¿æ¢ä¸º \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.
+\noindent
+\pix^|\ifempty| 检测它的å‚é‡æ˜¯å¦ä¸ºç©ºã€‚
+
+\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.
+^|\for| å®å®žçŽ°äº†å…¶ä»–传统编程语言中的^{for循环}çš„ \TeX\ 版本。
+这些å®ç›´æŽ¥å–自 \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|
+\pix^|\obeywhitespace| 用于é‡æ–°ç”Ÿæˆä½ çš„输入中的æ¢è¡Œã€ç©ºè¡Œå’Œç©ºæ ¼ã€‚
+它结åˆäº†|\obey!-lines| å’Œ |\obey!-spaces| 的效果,
+^^|\obeylines| ^^|\obeyspaces|
+并把行首的空格也打å°å‡ºæ¥ã€‚制表符ä¸å—它影å“;它们ä»ç„¶ç”Ÿæˆæ­£å¸¸çš„粘连。
+\xrdef{ewhitesp}
+^^{空格符}
+^^|\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}
+当你ä¸æƒ³ç”¨ |\over|,而 ``1/2'' 看æ¥åˆä¸å¤Ÿå¥½æ—¶ï¼Œ
+你最好用 \pix^|\frac| 在正文中打å°åˆ†å¼ã€‚
+这个å®æ˜¯\knuth{练习~11.6}的答案。^^{分å¼//斜线形å¼}
+
+\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|
+下é¢è¿™äº›å®ç”Ÿæˆ \TeX\ 圈中常用的标识。
+\AMSTeX\ 标识å–自 \knuth{第~420~页}。
+\LaTeX\ 标识å–自 |latex.tex| 并ç¨ä½œä¿®æ”¹ï¼ˆæˆ‘们修改了 `A' 的字体);
+类似地,\BibTeX\ 标识用 |\sevenrm| 字体代替真正的å°åž‹å¤§å†™å­—体。
+\MF\ 标识的 |.mf| æºæ–‡ä»¶å‡ºçŽ°åœ¨ \MF\ 手册中:
+\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.
+接下æ¥çš„两个å®ç”¨äºŽç”Ÿæˆç›’å­ã€‚
+\pix^|\blackbox| 生æˆä¸€ä¸ªæ–¹å—,它用在列表å®ä¸­ï¼ˆ\xref{listmacs})。
+\pix^|\makeblankbox|(å–自\knuth{第~311~页})生æˆä¸€ä¸ªç©ºå¿ƒçŸ©å½¢ï¼Œ
+它的边框厚度由å‚é‡æŒ‡å®šã€‚
+
+\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.)
+\pix^|\numbername| 从数字生æˆå…¶ä¹¦é¢å称%
+(若数字大于å,这个å®ä»…é‡æ–°ç”Ÿæˆå‚é‡çš„数值。)
+
+\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.
+\pix^|\testfileexistence| 判定文件 |\jobname.#1| 是å¦éžç©ºï¼Œ
+并相应地设定 |\if!-fileexists| 的值。
+^^{文件//检测文件是å¦å­˜åœ¨}
+å‚é‡ä¸­çš„文件å无需以空格记å·ç»“尾,因为这个å®å·²ç»æ供了空格记å·ã€‚
+
+\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
+\section 陈列公å¼
+
+%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|.
+\TeX\ 默认将陈列公å¼ï¼ˆæ”¾åœ¨ |$$| 之间的公å¼ï¼‰å±…中显示。
+^^{陈列公å¼//显示形å¼}\pix^|\leftdisplays| 让陈列公å¼é»˜è®¤ä¸ºå·¦å¯¹é½æ˜¾ç¤ºã€‚
+你也å¯ä»¥ç”¨ \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.
+这些å®æ供让陈列公å¼å·¦å¯¹é½æ˜¾ç¤ºä¹‹å¤–的更多功能。
+对æ¯ä¸ªé™ˆåˆ—å…¬å¼ï¼Œè‹¥ |\eqno| 存在则 \pix^|\ifeqno| 为真,
+若 |\leqno| 存在则 \pix^|\ifleqno| 为真。
+如果其中一ç§å…¬å¼ç¼–å·å­˜åœ¨ï¼Œ\pix^|\eqn| 将排å°å…¬å¼ç¼–å·çš„内容。
+而 \pix^|\eq| 始终排å°å…¬å¼æœ¬èº«çš„内容。
+
+%These macros are based on the code on \knuth{page~376}.
+这些å®åŸºäºŽ\knuth{第~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|.
+通过自己定义类似 \pix^|\leftdisplays| çš„å®ï¼Œä½ å¯ä»¥ç»™é™ˆåˆ—å…¬å¼è®¾å®šä¸åŒçš„å½¢å¼ã€‚
+这个å®å®šä¹‰ä¸­å¿…须在 |\every!-display| ^^|\everydisplay|中调用 |\display!-setup|,
+ä»¥ç¡®ä¿ |\dis!-play!-setup| ^^|\displaysetup|在æ¯ä¸ªé™ˆåˆ—å…¬å¼å¼€å§‹éƒ½è¢«è°ƒç”¨ã€‚
+这个å®å®šä¹‰å¿…é¡»ä¹ŸåŒ…å« ^|\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|.
+%\filbreak
+\pix^|\leftdisplays| 必须历ç»è¾›è‹¦åœ°ç¡®ä¿ |\dis!-play!-lines|^^|\displaylines|ã€
+^|\eqalignno| 和 ^|\leqalignno| 还能正常使用。
+|\eq| 在数学模å¼ä¸­æŽ’版,而 |\halign| 在数学模å¼ä¸­æ˜¯ä¸åˆæ³•çš„。
+^^|\halign//在数学模å¼ä¸­ä¸åˆæ³•|
+我们用 ^|\vcenter| 改å˜çŽ¯å¢ƒï¼Œä»¥è®© |\halign| é‡æ–°å˜æˆåˆæ³•çš„。
+我们还去掉模æ¿å·¦è¾¹çš„ |\hfil| 命令以得到左对é½æ ¼å¼ã€‚
+除这些改å˜ä¹‹å¤–,这些å®ä¸Ž |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
+\section 日期时间
+
+%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.''.
+\TeX\ 开始è¿è¡Œæ—¶è®¾å®šäº† ^|\time|ã€^|\day|ã€^|\month| å’Œ ^|\year| å‚数的值。
+^^{日期时间}^^{日期}
+\pix^|\monthname| 排å°æœˆä»½å称的三字æ¯ç¼©å†™ã€‚
+\pix^|\timestring| 排å°ç±»ä¼¼å½“å‰æ—¶é—´ï¼Œç±»ä¼¼äºŽ ``1:14\thinspace p.m.''。
+\pix^|\timestamp| 排å°å®Œæ•´æ—¥æœŸæ–‡æœ¬ï¼Œç±»ä¼¼äºŽ ``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
+\section 列表
+
+%\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.
+\null
+\xrdef{listmacs}
+\bix^^{ç¼–å·åˆ—表}
+\bix^^{列举}
+\pix^|\numberedlist| 排å°ç¼–å·åˆ—表;|\endnumberedlist| 结æŸè¯¥åˆ—表。
+类似地,\pix^|\unorderedlist| 排å°æ— åºåˆ—表。
+这两ç§åˆ—表中的项目以 \pix^|\li|(``list item'')开头。
+如果ä¸éœ€è¦åˆ—表项目间的é¢å¤–间隔,你å¯ä»¥åœ¨åˆ—表开始处加上 \pix^|\listcompact|。
+列表å¯ä»¥ä»»æ„嵌套。
+
+%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|.
+更一般地,你å¯ä»¥é€šè¿‡æ”¹å˜ä¸‹åˆ—寄存器的值控制列表项目间的间隔。
+如果列表项目ç»å¸¸æ¯”较长,你也许希望设定éžé›¶çš„ |\interitemskip|。
+å„列表项目的左缩进é‡ç­‰äºŽ |\par!-indent| 加 |\list!-left!-indent|ï¼›
+å„列表项目的å³ç¼©è¿›é‡ç­‰äºŽ |\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|
+ç¼–å·åˆ—表和无åºåˆ—表都使用下é¢è¿™äº›å®ã€‚
+我们并ä¸æ”¹å˜ |\parindent| 的值,
+因为很多现有的å®æ¯”如 |\footnote| ä¾èµ–于 |\parindent|。
+我们必须考虑到项目包å«ä¸æ­¢ä¸€ä¸ªæ®µè½çš„å¯èƒ½æ€§ã€‚
+在这ç§æƒ…形中,除第一个之外的所有段è½éƒ½å°†è¢«ç¼©è¿›ã€‚
+我们用 |\leftskip| 和 |\rightskip| 缩进列表项目。
+æˆ‘ä»¬é€šè¿‡æ”¹å˜ |\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|
+\noindent
+通常é‡æ–°å®šä¹‰ |\numbered!-marker| å®ï¼Œä½ å¯ä»¥æ”¹å˜é¡¹ç›®æ ‡ç­¾çš„æ ·å¼ã€‚
+\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.
+\noindent 这里是 |\numberedlist| 和 |\unorderedlist| 的定义。
+这两个定义的结构是相åŒçš„。
+
+\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}
+\eix^^{ç¼–å·åˆ—表}
+\eix^^{列举}
+
+
+%\section Verbatim listing
+\section 原文呈现
+
+%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.
+\pix^|\listing| å®ç”¨ |\tt| 字体排å°æŒ‡å®šæ–‡ä»¶çš„原文呈现。
+它基于\knuth{第~380~页}中的代ç ã€‚
+制表符生æˆå›ºå®šå¤§å°çš„间隔,而æ¢é¡µç¬¦ç”Ÿæˆä¸€ä¸ªåˆ†é¡µã€‚
+其他控制字符生æˆè¯¥å­—体所在ä½ç½®çš„字符,这通常ä¸å¤ªæœ‰ç”¨ã€‚
+通过é‡æ–°å®šä¹‰ |\setup!-listing!-hook|\pix^^|\setuplistinghook|,
+ä½ å¯ä»¥åœ¨è¯»å…¥æ–‡ä»¶å‰é’ˆå¯¹ç‰¹åˆ«å­—体和\slash 或使用环境作é¢å¤–定制。
+
+\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
+\section 目录
+
+%\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:
+\null ^^{目录}
+\pix^|\writetocentry| å®åœ¨ |\jobname.toc| 文件中写入一个å®è°ƒç”¨ã€‚
+|\write!-tocentry| 的第一个å‚é‡ï¼Œæ¯”如``chapter'',用于构æˆæ‰€è°ƒç”¨çš„å®çš„å称。
+第二个å‚é‡æ˜¯æ˜¾ç¤ºåœ¨ç›®å½•é¡¹ä¸­çš„文本。
+|\writetocentry| 添加页ç åˆ°å®è°ƒç”¨ä¸­ã€‚例如:
+\csdisplay
+\writetocentry{chapter}{Introduction}
+|
+%\noindent
+%will produce the line:
+\noindent
+将生æˆä¸‹åˆ—这行:
+\csdisplay
+\tocchapterentry{Introduction}{2}
+|
+%\noindent in the |.toc| file, indicating
+%that `Introduction' started on page 2.
+\noindent 到 |.toc| 文件中,表示 `Introduction' 从第2页开始。
+
+%You can use |\writenumberedtocentry| to provide a third parameter, such
+%as a chapter number. For example:
+利用 |\writenumberedtocentry| 你还å¯ä»¥æ供第三个å‚数,比如章编å·ã€‚例如:
+\csdisplay
+\writenumberedtocentry{chapter}{The second chapter}{2}
+|
+%\noindent will write a line:
+\noindent 将写入这一行:
+\csdisplay
+\tocchapterentry{The second chapter}{2}{14}
+|
+%\noindent
+%You can also |\write| to |\tocfile| yourself.
+\noindent
+你也å¯ä»¥è‡ªå·±ç”¨ |\write| 命令写入 |\tocfile|。%
+\footnote{译注:原文的代ç ä¸­é—æ¼ |\writetocentry| 的定义,
+而将 |\writenumberedtocentry| 的定义é‡å¤å†™äº†ä¸¤é,译文已修正此问题。
+实际上,在本书所用的 |eplain.tex| 1.9 中,
+|\writetocentry| 调用 |\writenumberedtocentry|,
+并在åŽè€…中根æ®ç¬¬ä¸‰ä¸ªå‚数是å¦éžç©ºå†™å…¥ä¸åŒçš„目录项。
+但在 |\writenumberedtocentry| 的定义中有问题,
+导致写入 |tocfile| 文件的目录项始终有三个å‚数。
+在翻译时译者也åŒæ—¶ä¿®æ­£ |eplain.tex| 中的这个错误。}
+
+\csdisplay
+\newwrite\tocfile \newif\iftocfileopened
+\def\opentocfile{\iftocfileopened\else
+ \tocfileopenedtrue
+ \immediate\openout\tocfile = \jobname.toc
+\fi}%
+\def\writetocentry#1#2{\ifrewritetocfile
+ \opentocfile
+ \write\tocfile{%
+ \expandafter\noexpand \csname toc#1entry\endcsname
+ {#2}{\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.
+è¦æŽ’å°å‡ºç›®å½•ï¼Œåªéœ€ç”¨ \pix^|\readtocfile| è¯»å– |.toc| 文件。
+你应该在首次使用 |\write!-toc!-entry| 之å‰è°ƒç”¨ |\read!-tocfile|。
+在处ç†ç›®å½•ä¸”ä¸æƒ³é‡æ–°ç”Ÿæˆå®ƒæ—¶ï¼Œ
+务必ä¸è¦æ”¹å†™ |.toc| 文件——如果你这样åšï¼Œæ–‡ä»¶å†…容将会丢失。
+命令 |\rewrite!-tocfile!-false| å°†ç¦æ­¢è¿™ç§æ”¹å†™ã€‚
+
+\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.
+这里给出å¯èƒ½å‡ºçŽ°çš„ |\toc|\dots|entry| å®çš„一些定义。
+这些定义åªæ˜¯ä½œä¸ºä¾‹å­è€Œå·²â€”—在目录中使用指引线通常ä¸æ˜¯æœ€å¥½çš„åšæ³•ã€‚
+
+\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
+\section 交å‰å¼•ç”¨
+
+%\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.
+\null ^^{交å‰å¼•ç”¨}
+\xrdef{xrefs}
+接下æ¥çš„å®æ供了符å·å¼çš„交å‰å¼•ç”¨ï¼Œ
+让你å¯ä»¥åœ¨æ–‡æ¡£ä¸­é€šè¿‡å称而éžå®žé™…页ç æåŠå…¶å®ƒéƒ¨åˆ†çš„东西。
+\pix^|\xrdef||{foo}| 定义标签 |foo| 为当å‰é¡µç ï¼Œ
+而 \pix^|\xrefn||{foo}| 生æˆè¯¥é¡µç ï¼Œæ¯”如 $77$。
+你更常用的是类似 ``see p.\thinspace77'' 的写法,
+å› æ­¤ \pix^|\xref||{foo}| ç”Ÿæˆ ``p.\thinspace 77''。
+如果 |foo| 未定义,就会得到一个警告信æ¯ã€‚
+|\xrefwarningfalse| å–消这ç§è­¦å‘Šã€‚
+
+%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.
+这个å®å°†ä¸€ä¸ªæ ‡ç­¾è½¬æ¢ä¸ºä¸€åˆ—字符记å·ï¼Œå¹¶æ”¾åœ¨å¯„存器 |\labeltoks| 中。
+除了普通字符之外,标签还å¯ä»¥åŒ…å«ç©ºæ ¼å’ŒæŽ§åˆ¶åºåˆ—,但ä¸èƒ½åŒ…å«èŠ±æ‹¬å·ã€‚
+
+\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.
+需è¦è¿è¡Œä¸¤éæ‰èƒ½å¾—到正确的交å‰å¼•ç”¨ï¼Œ
+因为这些定义是写出到辅助文件|\jobname.aux| 里的。
+\pix^|\readreffile| 命令用于将它们读å–回æ¥ã€‚
+如果你ä¸åœ¨ç¬¬ä¸€ä¸ªå®šä¹‰ä¹‹å‰æ‰§è¡Œæ­¤å‘½ä»¤ï¼Œä½ å°†ä¸¢å¤±ä¸Šä¸€éè¿è¡Œå¾—到的定义。
+
+\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.
+^^{å…¬å¼ç¼–å·}
+按åŒæ ·çš„æ–¹å¼ï¼Œä½ å¯ä»¥ç”¨ \pix^|\eqdef| å’Œ \pix^|\eqref| 给出公å¼çš„符å·å¼å称。
+|\eqdef| æ’入自己的 |\eqno| 命令,因此它必须用在能用 |\eqno| 的地方。
+
+\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.
+|\eqref| 生æˆ``(å…¬å¼ç¼–å·)''。
+通过é‡æ–°å®šä¹‰ \pix^|\eqprint|,你å¯ä»¥å®žçŽ°æ›´åŠ å¤æ‚çš„æ ¼å¼ã€‚
+举个例å­ï¼Œä½ å¯ä»¥é‡æ–°å®šä¹‰å®ƒï¼Œä½¿å¾—å…¬å¼ç¼–å·ä¸­åŒ…å«ç« ç¼–å·ã€‚
+
+\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
+\section 环境
+
+%\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.
+\null ^^{环境}这些å®è®©ä½ å¯ä»¥å°†æ‰‹ç¨¿çš„一部分定义为命å编组(环境)。
+类似 \TeX\ 的编组,这些编组也å¯ä»¥åµŒå¥—,
+而且实际上它们的嵌套å¯ä»¥ä¸Ž \TeX\ 编组的嵌套相互交织。
+如果开始的å称和结æŸçš„å称ä¸åŒ¹é…,你将得到一个错误信æ¯ã€‚
+这些å®å¦‚此设计,使得当你得到这ç§é”™è¯¯ä¿¡æ¯æ—¶ï¼Œä½ æœ‰æœºä¼šæ–¹ä¾¿åœ°å®šä½é”™è¯¯çš„æ¥æºã€‚
+
+%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.
+用 \pix^^|\environment||\envi!-ron!-ment| |{foo}| 开始一个环境,
+用 |\endenvironment{foo}| 结æŸè¯¥çŽ¯å¢ƒï¼Œå…¶ä¸­ |foo| 是该环境的å称。
+我们的å®ç¨å¾®æ”¹è¿›äº† \texbook\ 练习~5.7,
+添加对 |\begingroup| å’Œ |\endgroup| 是å¦é…对的检查,
+å¹¶ç¡®ä¿ |\environment| å’Œ |\endenvironment| 能够匹é…。
+
+\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|
+你也å¯ä»¥ç»™ä¸Šè¿°è¿™äº›é”™è¯¯å®šä¹‰å®ƒä»¬å„自的帮助信æ¯ã€‚
+^^|\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.
+æŸäº›çŽ¯å¢ƒåº”当ä¸å…许出现在其他环境内部。我们称这些环境为``外部环境''。
+|\check!-env| 检测是å¦ä¸å­˜åœ¨å½“å‰æœ‰æ•ˆçš„外部环境,若存在的è¯ç»™å‡ºè­¦å‘Šä¿¡æ¯ã€‚
+è¦ä½¿ç”¨ |\checkenv|,你必须在æ¯ä¸ªå¤–部环境开头处执行 |\environment!-true| 命令。
+
+\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
+\section 对é½
+
+%\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.
+\bix^^{居左对é½}
+\bix^^{å±…å³å¯¹é½}
+\bix^^{居中文本}
+è¿™ä¸‰ä¸ªå® \pix^|\flushleft|ã€\pix^|\flushright| å’Œ
+\xrdef{eplaincenter}\pix^|\center| å°†åŽé¢å„行文本以指定方å¼å¯¹é½ã€‚
+è¿™ç§å‘½ä»¤å¿…é¡»å•ç‹¬å†™åœ¨ä¸€è¡Œä¸­ã€‚
+命令和文本应该包å«åœ¨ä¸€ä¸ªç¼–组中——编组的结æŸå°±è¡¨ç¤ºæ–‡æœ¬çš„结æŸã€‚
+整个编组作为一个段è½æŽ’版,å„行视情况在一边或两边用空白填充。
+空行ä¾åŽŸæ ·æ˜¾ç¤ºã€‚
+
+\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.
+在 |\flush!-left|ã€|\flush!-right| å’Œ |\center| 的定义中,
+下述这些命令出现在 ^|\aftergroup| çš„åŽé¢ï¼›
+它们在编组结æŸåŽè¢«è°ƒç”¨ï¼Œä»¥æ‰§è¡Œä¸€äº›å¿…需的清ç†å·¥ä½œã€‚
+
+\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}
+\eix^^{居左对é½}
+\eix^^{å±…å³å¯¹é½}
+\eix^^{居中文本}
+
+
+%\section Tables
+\section 表格
+
+%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.
+\pix^|\makecolumns| å®å…许你给出表格的所有元素,而无需担心如何分æ ã€‚
+例如,在输入一个冗长的按字æ¯æŽ’åºçš„åå•ï¼Œå¹¶åˆ†å¤šæ æ˜¾ç¤ºæ—¶ï¼Œ
+你通常ä¸çŸ¥é“在何处结æŸä¸€æ å¼€å§‹ä¸‹ä¸€æ ã€‚
+å¦å¤–,如果添加了å¦ä¸€é¡¹ï¼Œå„æ çš„划分将会改å˜ã€‚
+
+%|\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|.
+|\makecolumns| 有两个(定界)å‚é‡ï¼šè¡¨æ ¼å…ƒç´ çš„总数以åŠè¡¨æ ¼çš„æ æ•°ã€‚
+例如,`|\makecolumns 37/3:|' 指定一个三æ è¡¨æ ¼ï¼Œå…¶å…ƒç´ ä¸ºæŽ¥ä¸‹æ¥çš„ $37$ 行。
+è¦è°ƒæ•´è¡¨æ ¼åœ¨é¡µé¢ä¸Šçš„ä½ç½®ï¼Œä½ å¯ä»¥ä¿®æ”¹ |\parindent| 以确定表格左侧的空白,
+ä»¥åŠ |\hsize| 以确定从页é¢å·¦è¾¹ç¼˜åˆ°è¡¨æ ¼å³ä¾§çš„è·ç¦»ã€‚
+è¦å…许在 |\valign| ^^|\valign//用于 {\tt\\makecolumns}| 之å‰åˆ†é¡µï¼Œ
+ä½ å¯ä»¥ä¿®æ”¹ \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
+\section 脚注
+
+%\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.
+\null ^^{脚注}
+脚注通常用å‡é«˜çš„数字作为å‚考符å·ã€‚
+我们定义的 \pix^|\numberedfootnote| å®å°±æ˜¯è¿™æ ·çš„。
+它还é‡æ–°å®šä¹‰äº† ^|\vfootnote|,以支æŒæ¯” \plainTeX\ 更一般的脚注格å¼ã€‚
+尺寸寄存器 \pix^^|\footnotemarkseparation| |\foot!-note!-mark!-sepa!-ra!-tion|
+控制脚注符å·ï¼ˆæ¯”如数字)与脚注文本之间的间隔。
+\pix^|\everyfootnote| è®°å·åœ¨æ¯ä¸ªè„šæ³¨ä¹‹å‰æ’入。
+
+%The \plainTeX\ definitions of |\footnote| and |\vfootnote| are
+%preserved in |\@plain!-footnote| and |\@plain!-vfootnote| in case you should
+%need them.
+\PlainTeX\ 中的 |\footnote| å’Œ |\vfootnote| 定义ä¿ç•™åœ¨
+|\@plain!-footnote| å’Œ |\@plain!-vfootnote| 中,以备ä¸æ—¶ä¹‹éœ€ã€‚
+
+\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
+\section åŒæ 
+
+%\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.
+\null ^^{åŒæ } |\doublecolumns| 命令开始åŒæ è¾“出,
+而 |\single!-column| \pix^^|\singlecolumn| 命令æ¢å¤å•æ è¾“出。
+两者å¯ä»¥åœ¨åŒä¸ªé¡µé¢ä¸Šç›¸äº’切æ¢ã€‚
+用 |\above!-double!-column!-skip| 和 |\below!-double!-column!-skip|
+指定的粘连æ’入到åŒæ ç´ æçš„å‰é¢å’ŒåŽé¢ã€‚
+
+%The approach is derived from \knuth{page~417}.
+它们的实现方å¼æ¥æºäºŽ\knuth{第~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.
+|\@double!-column!-split| å®æ‰§è¡Œå®žé™…的分æ ã€‚æ’入项被当作å•æ ç´ æï¼›
+如果这ä¸æ˜¯ä½ æƒ³è¦çš„,你需è¦ä¿®æ”¹è¾“出例行程åºã€‚
+在 |\@double!-column!-split| 完æˆä¹‹åŽï¼Œ|\box255| 将包å«åŒæ ç´ æ。
+åŒæ ç´ æå‰é¢æ˜¯è°ƒç”¨ |\doublecolumns| å‰çš„å•æ ç´ æ。
+|\box4| 将包å«æ— æ³•æ”¾å…¥è¯¥é¡µé¢çš„ç´ æ。
+
+\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.
+\needspace{.5in}
+|\double!-column!-out!-put| 是真正的输出例行程åºã€‚
+我们调用 |\output| 执行实际的盒å­é€å‡ºå·¥ä½œã€‚
+
+\csdisplay
+\def\doublecolumnoutput{\@doublecolumnsplit
+ \hsize = \singlecolumnhsize \vsize = \singlecolumnvsize
+ \previousoutput \unvbox4}%
+|
+
+%|\singlecolumn| resumes typesetting in one column. It assumes that
+%|\doublecolumns| has been called.
+|\singlecolumn| æ¢å¤å•æ æŽ’版。它å‡å®šå·²è°ƒç”¨äº† |\doublecolumns|。
+
+\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}
+\margin{`Sensible paragraph skips' section deleted}
+
+
+%\section Finishing up
+\section 收尾
+
+%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|.
+现在我们必须撤销开始的修改(è§\xref{eplainconv})。
+我们还给出版本标识,它å¯ä»¥åœ¨ |\fmt!-name| å’Œ |\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|
+\eix^^|eplain.tex|
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter
+\byebye
diff --git a/info/impatient/cn/usingtex.tex b/info/impatient/cn/usingtex.tex
new file mode 100644
index 0000000000..8be5d5df47
--- /dev/null
+++ b/info/impatient/cn/usingtex.tex
@@ -0,0 +1,1393 @@
+% -*- coding: utf-8 -*-
+% 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{使用 \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
+\section 从键盘输入å˜åˆ°æ²¹å¢¨
+
+%\subsection Programs and files you need
+\subsection 所需的程åºå’Œæ–‡ä»¶
+
+%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.
+为了制作一个 \TeX\ 文档, 你必需è¿è¡Œ \TeX\ åŠå…¶ç›¸å…³è½¯ä»¶.
+ä½ åŒæ—¶ä¹Ÿéœ€è¦ä¸€äº› \TeX\ åŠå…¶ç›¸å…³è½¯ä»¶æ‰€ç”¨åˆ°çš„辅助文件.
+在这本书中, 我们仅仅谈论 \TeX\ 和一些通用的软件åŠè¾…助文件,
+ä¸è¿‡æˆ‘们ä¸ä¼šä»‹ç»å…¶å®ƒçš„, 因为它们仅仅和你自己的 \TeX\ 环境相关.
+为你æä¾› \TeX\ 的人å¯ä»¥ä¸ºä½ æ供我们所说的\emph{本地信æ¯}.
+\pix^^{本地信æ¯}
+这些本地信æ¯å¯ä»¥å‘Šè¯‰ä½ å¦‚何去å¯åŠ¨ \TeX, 如何去使用相关的程åº,
+以åŠå¦‚何去访问这些所用到的辅助文件.
+
+%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.
+ä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ª ^{文本编辑器} æ¥ç¼–写一个å¯ä»¥è¾“入到 \TeX\ 的普通文本文件.
+一个 \TeX\ 输入文件和一个文字处ç†è½¯ä»¶çš„输入文件ä¸åŒ, 它通常并ä¸å­˜åœ¨ä»»ä½•ä¸å¯è§çš„^{控制字符}.
+任何 \TeX\ 读到的字符对你æ¥è¯´, 都是你å¯ä»¥çœ‹åˆ°çš„.
+
+%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}).
+你的输入文件, å¯ä»¥ä»…仅是一个引用其它输入文件的框架.
+\TeX\ 用户往往把大的文档, 比如说这本书, 组织æˆè¿™ç§å½¢å¼.
+ä½ å¯ä»¥ä½¿ç”¨ ^|\input| 命令 (\xref\input) æ¥æŠŠä¸€ä¸ªè¾“入文件ç¯å…¥åˆ°å¦ä¸€ä¸ªä¸­.
+特别地, ä½ å¯ä»¥ä½¿ç”¨ |\input|æ¥è°ƒå…¥åŒ…å«\emph{å®å®šä¹‰}的文件,
+^^{å®//在辅助文件中}
+å®å®šä¹‰æ˜¯ä¸€äº›è¾…助的定义, 它å¯ä»¥æ¥å¢žå¼º \TeX\ 的功能.
+如果你的 \TeX\ 系统中包å«ä»»ä½•çš„å®æ–‡ä»¶,
+å’Œ \TeX\ 相关的本地信æ¯ä¼šå‘Šè¯‰ä½ å¦‚何得到这些å®æ–‡ä»¶,
+以åŠå®ƒä»¬çš„功能.
+\TeX\ 的标准安装形å¼, 也就是在这本书中所æè¿°çš„,
+包括了一个被称为 ^{\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.
+当 \TeX\ 处ç†ä½ çš„文档时, 它会产生一ç§å«åš ^{\dvifile} 的文件.
+其中, ``|dvi|'' 的全称为 ``device independent (设备无关)''.
+之所以选用这个缩写, 是因为 \dvifile\ 中所包å«çš„ä¿¡æ¯å’Œä½ çš„打å°æˆ–显示设备无关.
+
+%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.
+当你需è¦æ‰“å°æˆ–使用\emph{阅览器}查看你的文档时, ^^{阅览器}
+你需è¦ä½¿ç”¨ç›¸åº”çš„\emph{设备驱动}æ¥å¤„ç†ä¹‹. ^^{设备驱动}
+(阅览器是一个程åº, 它能把和打å°å‡ºæ¥çš„结果差ä¸å¤šçš„排版内容显示在å±å¹•ä¸Š.)
+ä¸åŒçš„输出设备往往需è¦ä¸åŒçš„设备驱动. 在è¿è¡Œè®¾å¤‡é©±åŠ¨ä»¥åŽ,
+你还需è¦æŠŠè®¾å¤‡é©±åŠ¨è¾“出的内容传输到打å°æœºæˆ–者其它输出设备上.
+^^{打å°æœº} ^^{输出设备}
+å’Œ \TeX\ 相关的本地信æ¯ä¼šå‘Šè¯‰ä½ å¦‚何得到正确的设备驱动和如何使用它.
+
+%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\ 内部并没有任何关于一个特定字体的任何信æ¯,
+它使用\emph{字体文件}
+^^{字体文件}
+æ¥å¾—到你文档中所使用的字体的信æ¯.
+字体文件也是你本地 \TeX\ 环境的一个组æˆéƒ¨åˆ†.
+一个字体一般对应两个文件:
+一个文件 (\emph{字体度é‡æ–‡ä»¶}) ^^{度é‡æ–‡ä»¶} 包括了字体中æ¯ä¸ªå­—符的大å°ä¿¡æ¯,
+å¦ä¸€ä¸ªæ–‡ä»¶ (\emph{字体轮廓文件}) ^^{轮廓文件} 则æ述了字体中字符的形状.
+一个字体的缩放版本使用åŒæ ·çš„字体度é‡æ–‡ä»¶, ä¸è¿‡å¹¶ä¸ä½¿ç”¨ç›¸åŒçš„字体轮廓文件.
+^^{放大率}
+字体度é‡æ–‡ä»¶å¾€å¾€ç”¨æ¥æŒ‡ç§° ^{\tfmfile},
+而字体轮廓文件则往往用æ¥æŒ‡ç§° ^{\pkfile}, ^{\pxlfile} å’Œ ^{\gffile} ç­‰ä¸åŒçš„ç§ç±».
+这些å称和 \TeX\ 以åŠç›¸å…³è½¯ä»¶æ‰€ä½¿ç”¨çš„文件的文件å所对应.
+比如, |cmr10.tfm| 为 |cmr10| 字体的字体度é‡æ–‡ä»¶ (10-点的计算机现代字体).
+
+%\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}
+\TeX\ 本身仅使用字体度é‡æ–‡ä»¶, 因为它åªå…³å¿ƒè¿™ä¸ªå­—体的字符å ç”¨äº†å¤šå¤§çš„空间,
+而并ä¸å…³å¿ƒè¿™ä¸ªå­—体的外形是什么样å­çš„.
+设备驱动则往往需è¦ä½¿ç”¨å­—体轮廓文件,
+因为它需è¦è´Ÿè´£æŠŠæ¯ä¸ªæŽ’出的字符å˜æˆå°å‡ºçš„图形.
+æŸäº›è®¾å¤‡é©±åŠ¨ä¹Ÿéœ€è¦ä½¿ç”¨å­—体度é‡æ–‡ä»¶.
+一些设备驱动å¯ä»¥ä½¿ç”¨æ‰“å°æœºä¸­åŒ…å«çš„字体,
+所以å¯ä»¥ä¸éœ€è¦è¿™äº›å­—体的字体轮廓文件.
+%\secondprinting{\vfill\eject}
+
+
+%\subsection Running {\TeX}
+\subsection{è¿è¡Œ \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.
+\bix^^{è¿è¡Œ \TeX}
+ä½ å¯ä»¥é€šè¿‡è¾“入类似 `|run tex|' 或 `|tex|' (查看你的本地信æ¯) æ¥è¿è¡Œ \TeX\ æ¥å¤„ç†ä¸€ä¸ªè¾“入文件 |screed.tex|.
+^^{输入文件}
+\TeX\ 会作出如下显示
+% 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)
+**
+|
+在这里, ``preloaded format'' (已预先载入的格å¼) 指的是 \TeX\ æ供的 ^{\plainTeX} å®é›†çš„一个己预先产生的形å¼.
+现在你å¯ä»¥è¾“å…¥ `|screed|' æ¥è®© \TeX\ æ¥å¤„ç†ä½ çš„文件.
+当处ç†ç»“æŸæ—¶, ä½ å¯ä»¥åœ¨ç»ˆç«¯æˆ–者打å°æœºå°å‡ºçš„记录上 (如果你ä¸ä½¿ç”¨ç»ˆç«¯) 得到类似下é¢çš„输出:
+\csdisplay
+(screed.tex [1] [2] [3] )
+Output written on screed.dvi (3 pages, 400 bytes).
+Transcript written on screed.log.
+|
+这个输出大部分是ä¸è¨€è‡ªæ˜Žçš„.
+在括å·ä¸­çš„数字是 \TeX\ 在把æ¯é¡µå†…容输入 \dvifile\ 时所显示的当å‰é¡µç .
+当你æ供的å件åä¸å«æ‰©å±•åæ—¶, \TeX\ 往往会把你的文件扩展å当作 `|.tex|'.
+在æŸäº› \TeX\ 环境中, ä½ å¯èƒ½å¯ä»¥ç›´æŽ¥æ‰§è¡Œç±»ä¼¼ä¸‹é¢çš„语å¥:
+\csdisplay
+tex screed
+|
+æ¥ç›´æŽ¥å¤„ç†æ–‡æ¡£.
+
+%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.
+\TeX\ ä¸ä»…å¯ä»¥è¯»å–文件输入,也å¯ä»¥ç›´æŽ¥è¯»å–你在终端中的输入:
+åªéœ€å°† `|**|' æ示åŽçš„输入从 `|screed|' 改为 `^|\relax|'。
+\TeX\ 将在你输入的å„è¡Œå‰é¢ç»™å‡º `|*|' æ示,
+并且é€è¡Œè§£é‡Šä½ çš„输入。
+输入类似 `|\bye|' 这样的命令å¯ä»¥ç»“æŸè¾“入。
+在试验 \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.
+当你的输入文件包å«å…¶ä»–嵌入的输入文件时,
+显示的信æ¯ä¸­è¡¨æ˜Žäº† \TeX\ 何时开始和结æŸå¤„ç†æ¯ä¸ªåµŒå…¥æ–‡ä»¶ã€‚
+^^{输入文件//嵌入输入文件}
+\xrdef{infiles}
+当 \TeX\ 开始处ç†ä¸€ä¸ªæ–‡ä»¶æ—¶å®ƒæ˜¾ç¤ºä¸€ä¸ªå·¦åœ†æ‹¬å·å’Œè¯¥æ–‡ä»¶å,
+而结æŸæ—¶æ˜¾ç¤ºä¸€ä¸ªå¯¹åº”çš„å³åœ†æ‹¬å·ã€‚
+如果在所显示的输出中有任何^{错误信æ¯},
+你就能从最接近的未é…对左圆括å·ä¸­ç¡®å®šæ˜¯å“ªä¸ªæ–‡ä»¶å¼•èµ·çš„。
+
+%For a more complete explanation of how to run \TeX,
+%see \knuth{Chapter~6} and your ^{local information}.
+%\eix^^{running \TeX}
+è¦å¾—到如何è¿è¡Œ\TeX\ 的更完整解释,
+å¯ä»¥è§\knuth{第~6~ç« }以åŠä½ çš„^{本地信æ¯}.
+\eix^^{è¿è¡Œ \TeX}
+
+
+%\section Preparing an input file
+\section 准备输入文件
+
+%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}
+在这一节中,我们解释准备 \TeX\ 输入文件时必须éµå¾ªçš„一些约定。
+其中的有些信æ¯åŒæ ·å‡ºçŽ°åœ¨æœ¬ä¹¦\chapterref{examples}的例å­ä¸­ã€‚
+^^{输入文件//准备输入文件}
+
+%\subsection Commands and control sequences
+\subsection 命令和控制åºåˆ—
+
+%\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:
+\bix^^{命令}
+\bix^^{控制åºåˆ—}
+\TeX\ 的输入由一系列指引 \TeX\ 如何排版文档的命令组æˆã€‚
+大部分字符如åŒä¸€ç§ç‰¹åˆ«ç®€å•çš„命令:``排版我''。
+æ¯”å¦‚ï¼Œå­—æ¯ `|a|' 是作为命令将排版出 `a'。
+但有å¦ä¸€ç§å‘½ä»¤â€”—\emph{控制åºåˆ—}(control sequence)——将给 \TeX\ æ供更细致的指令。
+控制åºåˆ—通常以åæ–œæ (|\|)开头,但必è¦æ—¶ä½ ä¹Ÿå¯ä»¥æ›´æ”¹æ­¤çº¦å®šã€‚
+\xrdef{@backslash}
+例如,下列输入:
+
+%\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}.
+\csdisplay
+She plunged a dagger (\dag) into the villain's heart.
+|
+包å«ä¸€ä¸ªæŽ§åˆ¶åºåˆ—|\dag|;它排版出下列的输出:
+\display{%
+She plunged a dagger (\dag) into the villain's heart.
+}
+\noindent 在这个例å­ä¸­ï¼Œ
+除 |\dag| 和空格之外的æ¯ä¸ªå­—符都如åŒä¸€ä¸ª``排版我''命令。
+在\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
+控制åºåˆ—å¯åˆ†ä¸º\emph{控制è¯}(control word)^^{控制è¯}%
+å’Œ\emph{控制符}(control symbol)^^{控制符}这两ç§ç±»åž‹ï¼š
+\ulist\compact
+\li 控制è¯ç”±åæ–œæ åŽè·Ÿä¸€ä¸ªæˆ–多个字æ¯ç»„æˆï¼Œä¾‹å¦‚`|\dag|'。
+å…¶åŽç”¨ä¸€ä¸ªéžå­—æ¯å­—符结æŸè¯¥æŽ§åˆ¶è¯ã€‚
+\li 控制符由åæ–œæ åŽè·Ÿä¸€ä¸ªå•ä¸ªçš„éžå­—æ¯å­—符组æˆï¼Œä¾‹å¦‚`|\$|'。
+该éžå­—æ¯å­—符å¯ä»¥æ˜¯ç©ºæ ¼ç¬¦ï¼Œç”šæˆ–是行结æŸç¬¦ï¼ˆè¿™ä¹Ÿæ˜¯åˆä¹Žè§„则的字符)。
+\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 `|{}|'.
+\noindent
+控制è¯åŽçš„任何空格或行结æŸç¬¦å°†è¢«å¿½ç•¥ï¼ˆä½†æŽ§åˆ¶ç¬¦åŽä¸ä¼šè¿™æ ·ï¼‰ã€‚
+^^{控制åºåˆ—//忽略空格}
+如果你真è¦åœ¨æŽ§åˆ¶è¯åŽå¾—到一个空格,
+å¯ä»¥åœ¨è¯¥æŽ§åˆ¶è¯åŽé”®å…¥ä¸€ä¸ª^{控制空格}(|\!visiblespace|)或者`|{}|'。
+因而这样输入:
+\csdisplay
+The wonders of \TeX\!visiblespace!.shall never cease!!
+|
+或者这样输入:\hfil\
+\csdisplay
+The wonders of \TeX{} shall never cease!!
+|
+将得到åŒæ ·çš„结果:
+\display{%
+The wonders of \TeX{} shall never cease!
+}
+\noindent 作为对比,下é¢çš„结果:
+\display{%
+The wonders of \TeX shall never cease!
+}
+\noindent
+是你去掉上é¢è¾“入中的`|\|\visiblespace'或者`|{}|'åŽå¾—到的。
+
+%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|.
+ä¸è¦å°†æŽ§åˆ¶è¯å’Œå…¶åŽçš„文本连在一起---这样\TeX\ 无法知é“控制è¯åœ¨å“ªé‡Œç»“æŸã€‚
+比如,控制è¯|\c|给其åŽçš„字符加上软音符。
+è¦å¾—到法文å•è¯{\it gar\c con\/},你必须输入`|gar\c!visiblespace!.con|',
+而ä¸æ˜¯`|gar\ccon|';若你输入åŽè€…,\TeX\ 将抱怨有未定义的控制åºåˆ—|\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|'.
+å¦ä¸€æ–¹é¢ï¼ŒæŽ§åˆ¶ç¬¦åŽé¢çš„任何字符都ä¸ä¼šè¢«å¿½ç•¥ã€‚
+因此,è¦å¾—到`\$13.56'你必须键入`|\$13.56|',
+而ä¸æ˜¯`|\$!vs13.56|'ï¼›åŽè€…将生æˆ`\hbox{\$ 13.56}'。
+然而,那些作为控制符的é‡éŸ³å‘½ä»¤ï¼Œæ˜¯ä»¥å¿½ç•¥å…¶åŽç©ºæ ¼çš„æ–¹å¼å®šä¹‰çš„。
+例如,è¦å¾—到法文å•è¯{\it d\'eshabiller\/},键入`|d\'eshabiller|',
+或者`|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.
+æ¯ä¸ªæŽ§åˆ¶åºåˆ—åŒæ—¶ä¹Ÿæ˜¯ä¸€ä¸ªå‘½ä»¤ï¼Œä½†å之未必。
+^^{命令//与控制åºåˆ—对比}
+^^{控制åºåˆ—//与命令对比}
+例如字æ¯`|N|'是一个命令,但它ä¸æ˜¯ä¸€ä¸ªæŽ§åˆ¶åºåˆ—。
+在本书里é¢ï¼Œå½“两者都适用时我们用``命令''而ä¸ç”¨``控制åºåˆ—''。
+在强调 \TeX\ 的语法层é¢æ—¶ï¼Œæˆ‘们用``控制åºåˆ—'',
+因为此时用``命令''一般并ä¸åˆé€‚。
+
+%\eix^^{control sequences}
+%\eix^^{commands}
+\eix^^{控制åºåˆ—}
+\eix^^{命令}
+
+%\subsection Arguments
+\subsection å‚é‡
+
+%\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|.
+\xrdef{arg1}
+有些命令的è¿è¡Œä¾èµ–于其åŽçš„一个或多个\emph{å‚é‡}(argument)^^{å‚é‡}。
+例如,|\vskip|命令告诉 \TeX\ 在页é¢ä¸­å¾€ä¸Šï¼ˆæˆ–往下)跳过一定间è·ï¼Œ
+它需è¦ä¸€ä¸ªå‚é‡æ¥æŒ‡å®šæ‰€è·³è¿‡é—´è·çš„大å°ã€‚
+è¦å¾€ä¸‹è·³è¿‡ä¸¤è‹±å¯¸ï¼Œä½ éœ€è¦é”®å…¥`|\vskip 2in|',
+其中的|2in|就是|\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}).
+ä¸åŒçš„命令è¦æ±‚ä¸åŒç±»åž‹çš„å‚é‡ã€‚
+很多命令的å‚é‡è¦æ±‚是长度值,比如上é¢ä¾‹å­ä¸­çš„|2in|。
+有些命令,特别是用å®å®šä¹‰çš„命令,
+å…¶å‚é‡å¯ä»¥æ˜¯å•ä¸ªå­—符或者放在花括å·ä¸­çš„文本。
+而对其他有些命令,其å‚é‡åªèƒ½æ”¾åœ¨èŠ±æ‹¬å·ä¸­ï¼Œè€Œä¸èƒ½æ˜¯å•ä¸ªå­—符。
+在本书对å„个命令的æ述中,若一个命令需è¦å‚é‡ï¼Œ
+我们都说明了该命令所需å‚é‡çš„类型。
+在有些情形中,命令的å‚é‡æ‰€éœ€çš„花括å·å®šä¹‰äº†ä¸€ä¸ªç¼–组(è§\xref{bracegroup})。
+
+%\secondprinting{\vfill\eject}
+
+
+%\subsection Parameters
+\subsection å‚æ•°
+
+%\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}
+\xrdef{introparms}
+有些命令实际上是å‚数(parameter,è§\xref{å‚æ•°})。
+^^{å‚æ•°//作为命令}
+ä½ å¯ä»¥æŒ‰ä¸‹é¢ä¸¤ç§æ–¹å¼ä½¿ç”¨è¿™ç§å‚数:
+\olist
+\li 将该å‚数的值用作其他命令的å‚é‡ã€‚
+例如 \hbox{|\vskip\parskip|} 这个命令生æˆå¤§å°%
+等于粘连å‚æ•°|\parskip|(段è½é—´è·ï¼‰çš„ç«–ç›´é—´è·ã€‚
+\li 通过赋值修改该å‚数的值。
+例如 \hbox{|\hbadness=200|} 这个赋值使得|\hbadness|å‚数的值å˜ä¸º$200$.
+\endolist
+\noindent
+有些命令,例如|\pageno|,虽然是寄存器但和å‚数的用法一样。
+因此我们åŒæ ·ä½¿ç”¨``å‚æ•°''这个术语æ¥æŒ‡ä»£è¿™äº›å‘½ä»¤ã€‚
+^^{寄存器//作为å‚æ•°}
+
+%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$.
+有些命令是表å。这些命令的用法和å‚数类似,
+åªæ˜¯å®ƒä»¬éœ€è¦é¢å¤–çš„å‚é‡æŒ‡å®šè¡¨æ ¼é¡¹ã€‚
+例如,|\catcode| 是类别ç è¡¨æ ¼çš„å称(\xref{类别ç })。
+因此,\hbox{|\catcode`~=13|} 这个命令设置字符`|~|'的类别ç ä¸º$13$。
+
+
+%\subsection Spaces
+\subsection 空格
+
+%\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.
+\xrdef{spaces}
+\bix^^{空格}
+在输入文件中你å¯ä»¥ä»»æ„加上é¢å¤–的空格。
+在几乎所有情形中 \TeX\ 都将åŒä¸€è¡Œçš„连续多个空格看æˆä¸€ä¸ªç©ºæ ¼ã€‚
+例如,在^{å¥å·}åŽåŠ ä¸Šä¸€ä¸ªæˆ–两个空格是没有差别的。
+ä¸è®ºæŒ‰ç…§å“ªç§å†™æ³•ï¼Œ\TeX\ 都会执行其å¥å­ç»“æŸæ“作,
+并在å¥å·åŽåŠ ä¸Šé€‚当(在多数情形下)大å°çš„间隔。
+\TeX\ åŒæ ·å°†è¾“入中的行结æŸç¬¦è§†ä¸ºä¸€ä¸ªç©ºæ ¼ã€‚
+因此在输入时你å¯ä»¥åœ¨æ–¹ä¾¿çš„地方æ¢è¡Œâ€”—%
+\TeX\ 按照此方å¼å°†å„输入行转æ¢ä¸ºæ®µè½ï¼Œè€Œä¸åœ¨ä¹Žè¾“入中的æ¢è¡Œä½ç½®ã€‚
+
+%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.
+\TeX\ 忽略数学公å¼ä¸­çš„空格(è§åŽé¢ï¼‰ã€‚
+因此,你å¯ä»¥åŠ ä¸Šæˆ–者çœåŽ»å…¬å¼ä¸­çš„空格——\TeX\ ä¸åœ¨ä¹Žè¿™ä¸ªã€‚
+但å³ä½¿åœ¨æ•°å­¦å…¬å¼ä¸­ï¼Œä½ ä¹Ÿä¸è¦å°†æŽ§åˆ¶è¯å’Œå…¶åŽçš„å­—æ¯è¿žåœ¨ä¸€èµ·ã€‚
+
+%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}.
+在定义自己的å®æ—¶ï¼Œä½ å¿…é¡»å°å¿ƒå®šä¹‰ä¸­çš„行结æŸç¬¦ä½ç½®ã€‚
+因为一ä¸å°å¿ƒè¯¥å®å°±åœ¨ä½ å¸Œæœ›çš„空格之外生æˆäº†^{ä¸éœ€è¦çš„空格}。
+因为这是个有些技术性的问题,我们在其他地方也讨论到此问题;è§\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.)
+输入文件中两å•è¯é—´çš„一个空格或其等价字符,
+并ä¸ç®€å•åœ°å˜æˆè¾“出中的一个空格。
+由于输入行和输出行通常ä¸ä¼šæ­£å¥½å¯¹åº”,
+输入中的这些空格有的å˜æˆè¾“出中的行结æŸç¬¦ï¼Œ
+å¦å¤–有些空格则å˜æˆå®½åº¦å¯å˜çš„é—´éš”å³``粘连'' (\xref{粘连})ï¼›
+粘连有其自然宽度(它希望的宽度),但也å¯ä»¥ä¼¸å±•æˆ–者收缩。
+\TeX\ 排版è¦æ±‚å³é¡µè¾¹å¯¹é½ï¼ˆé€šå¸¸å¦‚此)的段è½æ—¶ï¼Œ
+将调整å„行的粘连的宽度以让å„行正好在页边结æŸã€‚%
+(段è½çš„最åŽä¸€è¡Œæ˜¯ä¸ªä¾‹å¤–,因为一般ä¸è¦æ±‚它在å³é¡µè¾¹ç»“æŸã€‚)
+
+%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}
+è¦é˜»æ­¢è¾“入中的空格在输出中å˜æˆè¡Œç»“æŸç¬¦ï¼Œä½ å¯ä»¥ç”¨^{带å­} (^|~|)。
+比如,你ä¸ä¼šå¸Œæœ› \TeX\ 在`Fig.~8'çš„ `Fig.' å’Œ `8' 之间断行。
+输入 `|Fig.~8|' å°±å¯ä»¥ç¦æ­¢è¿™æ ·æ–­è¡Œã€‚
+\eix^^{空格}
+%\needspace{2in}
+
+%\subsection Comments
+\subsection 注释
+
+%\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' =========
+%|
+\xrdef{comments}
+\pix\bix^^{注释}
+在\TeX\ 输入中å¯ä»¥åŒ…å«æ³¨é‡Šã€‚\TeX\ 跳过它所碰到的注释,
+因此注释中的内容ä¸ä¼šä»¥ä»»ä½•æ–¹å¼å½±å“到排版的文档。
+注释用于在输入文件中æ供更多的信æ¯ã€‚
+例如:
+\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}
+{\indexchar % }%
+注释以百分å·ï¼ˆ|%|)开始,一直延续到该输入行结æŸã€‚
+\TeX\ 既忽略注释也忽略该行的结æŸç¬¦ï¼Œ
+因此注释有å¦å¤–çš„é‡è¦ç”¨æ³•ï¼šå°†ä¸¤ä¸ªè¾“入行连接起æ¥ï¼Œ
+^^{断行//删除断行}
+使得 \TeX\ 看ä¸åˆ°ä¸¤è¡Œé—´çš„行结æŸç¬¦ï¼Œ
+从而ä¸ä¼šåœ¨è¾“出中生æˆç©ºæ ¼æˆ–æ¢è¡Œã€‚
+例如,对如下的输入:
+\csdisplay
+A fool with a spread%
+sheet is still a fool.
+|
+你得到的输出为:
+\display{
+A fool with a spread%
+sheet is still a fool.
+}
+\eix^^{注释}
+
+%\subsection Punctuation
+\subsection 标点
+
+%\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?
+%|
+\null
+\xrdef{periodspacing}
+è‹¥ `^|.|',`^|?|' 或 `|!!|' 之åŽæœ‰ä¸ªè¾“入空格,\indexchar !
+^^{å¥å·} ^^{é—®å·} ^^{æ„Ÿå¹å·}
+\TeX\ 认为它是å¥æœ«^{标点}符å·ï¼Œå¹¶åœ¨å…¶åŽæ·»åŠ é¢å¤–间隔。
+但若该标点符å·ä¹‹å‰ä¸ºå¤§å†™å­—æ¯ï¼Œ\TeX\ å°±ä¸ä¼šæ·»åŠ é¢å¤–间隔,
+因为它认为大写字æ¯æ˜¯äººå的首字æ¯ã€‚
+如若ä¸ç„¶ä½ å¯ä»¥å¼ºåˆ¶ç”Ÿæˆé¢å¤–间隔,例如:
+\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}
+命令 |\null| ä¸ç”Ÿæˆä»»ä½•è¾“出,
+但它阻止 \TeX\ 将大写字æ¯`M'和问å·ç»“åˆåœ¨ä¸€èµ·ã€‚
+å过æ¥ï¼Œå¦‚æžœæŸæ ‡ç‚¹ç¬¦å·ä¸ä¸ºå¥æœ«æ ‡ç‚¹ï¼Œ
+你也能够å–消该标点之åŽçš„é¢å¤–间隔;
+è¿™å¯ä»¥é€šè¿‡åœ¨å…¶åŽé”®å…¥æŽ§åˆ¶ç©ºæ ¼è¾¾åˆ°ï¼Œä¾‹å¦‚:
+\csdisplay
+Proc.\!visiblespace!.Royal Acad.\!visiblespace!.of Twits
+|
+得到的正确结果为:
+\display{Proc.\ Royal Acad.\ of Twits}
+\noindent 而去掉控制空格åŽçš„结果是:
+\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}.
+有些人更喜欢ä¸åœ¨å¥æœ«æ ‡ç‚¹åŽç•™ä¸‹æ›´å¤šé—´éš”。
+利用 ^|\frenchspacing| 命令(\xref\frenchspacing )你就å¯è¾¾æˆæ­¤æ•ˆæžœã€‚
+在^{å‚考文献}中通常建议使用这个 |\frenchspacing| 命令。
+
+%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:
+对于å•^{引å·}, 用键盘上的左å³å•å¼•å·ï¼ˆ|`| å’Œ |'|)就å¯ä»¥å¾—到。
+对于左åŒå¼•å·æˆ–å³åŒå¼•å·ï¼Œ
+需è¦ç”¨ä¸¤ä¸ªå·¦å•å¼•å·ï¼ˆ|``|)或å³å•å¼•å·ï¼ˆ|''|)得到,
+ä¸èƒ½ç›´æŽ¥ç”¨é”®ç›˜ä¸Šçš„åŒå¼•å·ï¼ˆ|"|)。
+键盘上的åŒå¼•å·åœ¨å¤šæ•°å­—体中将得到一个å³åŒå¼•å·ï¼Œ
+但两个å³å•å¼•å·æ˜¯ \TeX\ 中首选的写法。例如:
+
+%\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.
+\vbox{%
+\csdisplay
+There is no `q' in this sentence.
+``Talk, child,'' said the Unicorn.
+She said, ``\thinspace`Enough!!', he said.''
+|
+}%
+这三行输入得到的结果为:
+\display{\par\restoreplainTeX
+There is no `q' in this sentence.
+\par ``Talk, child,'' said the Unicorn.
+\par She said, ``\thinspace`Enough!', he said.''
+}
+\noindent
+第三个输入行中的 |\thinspace| é¿å…å•å¼•å·å’ŒåŒå¼•å·å¤ªè¿‡é è¿‘。
+å¦åˆ™ï¼Œä½ å°†çœ‹åˆ°ä¸‰ä¸ªå¹¶æŽ’的间隔相近的引å·ã€‚
+
+%\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.
+在 \TeX\ 中有三ç§^{横线å·}(dash):
+\ulist\compact
+\li 短横线å³è¿žå­—å·ï¼ˆhyphen)如这样( - )。键入~`^|-|'~å¯ä»¥å¾—到。
+\li 中横线å³è¿žæŽ¥å·ï¼ˆen-dash)如这样( -- )。键入~`^|--|'~å¯ä»¥å¾—到。
+\li 长横线å³ç ´æŠ˜å·ï¼ˆem-dash)如这样( --- )。键入~`^|---|'~å¯ä»¥å¾—到。
+\endulist
+\noindent
+一般地,你将用连字å·è¡¨ç¤ºåƒâ€œwill-o'-the-wispâ€ï¼ˆé¬¼ç«ï¼‰è¿™æ ·çš„å¤åˆè¯ï¼Œ
+用连接å·è¡¨ç¤ºåƒâ€œç¬¬~81--87~页â€è¿™æ ·çš„页ç èµ·æ­¢ï¼Œ
+而用破折å·è¡¨ç¤ºè¯­æ°”转折\null{---}åƒè¿™æ ·ã€‚
+% 用 \null 和 {} 绕开 xecjk 的问题
+
+
+%\subsection Special characters
+\subsection 特殊字符
+
+%Certain characters have special meaning to \TeX, so you shouldn't use them
+%in ordinary text. They are:
+在 \TeX\ 中æŸäº›å­—符有特殊的å«ä¹‰ï¼Œ
+因而ä¸èƒ½åœ¨æ™®é€šæ–‡æœ¬ä¸­ä½¿ç”¨ã€‚这些特殊字符为:
+
+%\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
+% \$ \# \& \% \_
+%|
+\csdisplay
+ $ # & % _ ^ ~ { } \
+|
+\ifoldeplain
+^^|$//在普通文本中|
+^^|#//在普通文本中|
+^^|&//在普通文本中|
+^^|_//在普通文本中|
+^^|^//在普通文本中|
+^^|~//在普通文本中|
+^^|%//在普通文本中|
+^^|{//在普通文本中|
+^^|}//在普通文本中|
+{\recat!ttidxref[\//在普通文本中]]
+\fi
+\noindent
+è¦åœ¨æŽ’版的文档中生æˆå®ƒä»¬ï¼Œä½ éœ€è¦ä½¿ç”¨é—´æŽ¥çš„方法。
+对å‰é¢äº”个字符,你需è¦é”®å…¥ï¼š
+\ifoldeplain
+^^|\$|
+^^|\#|
+^^|\&|
+^^|\%|
+^^|\_|
+\fi
+\csdisplay
+ \$ \# \& \% \_
+|
+
+%\noindent
+%For the others, you need something more elaborate:
+\noindent
+而对å¦å¤–五个字符,你需è¦é”®å…¥æ›´å¤šï¼š
+
+\csdisplay
+ \^{!visiblespace} \~{!visiblespace} $\{$ $\}$ $\backslash$
+|
+
+
+%\subsection Groups
+\subsection 编组
+
+%\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.}
+\bix^^{编组}
+包å«åœ¨é…对的左å³èŠ±æ‹¬å·ï¼ˆ|{| å’Œ |}|)中的内容组æˆä¸€ä¸ª\emph{编组}。
+^^|{//开始编组|
+^^|}//结æŸç¼–组|
+编组内部的命令,其作用范围被é™åˆ¶åœ¨è¯¥ç¼–组内部。
+例如,|\bf| 命令让 \TeX\ å°†æŸäº›å†…容用粗体显示。
+如果你将 |\bf| 放在你的输入中,而没有用任何方å¼å–消它,
+|\bf| 之åŽçš„所有内容都将以粗体显示。
+如果将 |\bf| 包å«åœ¨ä¸€ä¸ªç¼–组中,
+å°±å¯ä»¥å°†å®ƒçš„作用é™åˆ¶åœ¨æ­¤ç¼–组中。
+比如,如果你键入:
+\csdisplay
+We have {\bf a few boldface words} in this sentence.
+|
+\noindent 你将会得到如下的结果:
+\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).
+\noindent 利用编组,你å¯ä»¥é™åˆ¶ \TeX\ æŸä¸ªå‚æ•°çš„å–值的作用范围。
+这些å‚æ•°çš„å–å€¼å½±å“ \TeX\ 对文档的排版。
+例如,|\parindent| å‚数的值指定了段首缩进é‡ï¼Œ
+赋值 |\parindent = 15pt| 将设定该缩进é‡ä¸º $15$ 点。
+若将该赋值放在包å«å‡ ä¸ªæ®µè½çš„编组开始处,
+ä½ å°±å¯ä»¥ä»…仅改å˜è¿™å‡ ä¸ªæ®µè½çš„段首缩进。
+è‹¥ä¸å°†è¯¥èµ‹å€¼åŒ…å«åœ¨ç¼–组中,
+对缩进é‡çš„修改将作用到文档的剩余部分%
+(或者作用到下个对|\parindent|的赋值为止,若还有下个赋值的è¯ï¼‰ã€‚
+
+%\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}
+\xrdef{bracegroup}
+并éžæ‰€æœ‰é…对花括å·éƒ½è¡¨ç¤ºä¸€ä¸ªç¼–组。
+特别地,若å‚é‡\emph{ä¸è¦æ±‚}有花括å·ï¼Œ
+则与该å‚é‡ä¸€èµ·çš„花括å·å¹¶ä¸è¡¨ç¤ºä¸€ä¸ªç¼–组%
+——它们仅用于确定该å‚é‡çš„ç•Œé™ã€‚
+对于那些å‚é‡ä¸­ç¡®å®žéœ€è¦èŠ±æ‹¬å·çš„命令,
+有些命令将花括å·ä½œä¸ºç¼–组的定义,
+而其他命令用å„自的特殊方å¼è§£é‡Šè¯¥å‚é‡ã€‚\footnote
+{更准确地说,对于原始命令,
+花括å·è¦ä¹ˆå®šä¹‰äº†ä¸€ä¸ªç¼–组,è¦ä¹ˆä¸ä¼šåœ¨ \TeX\ 的胃中被处ç†ã€‚
+对于 |\halign| å’Œ |\valign| 命令,编组åªæœ‰å¹³å‡¡çš„效果;
+这是由于编组中的一切东西è¦ä¹ˆä¸ä¼šåˆ°è¾¾èƒƒé‡Œï¼ˆå› ä¸ºå®ƒåœ¨æ¨¡æ¿ä¸­ï¼‰ï¼Œ
+è¦ä¹ˆåŒ…å«åœ¨æ›´æ·±ä¸€å±‚的编组中。
+^^|\halign//阵列中的编组|
+^^|\valign//阵列中的编组|
+}
+\eix^^{编组}
+
+
+%\subsection Math formulas
+\subsection 数学公å¼
+
+%\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:
+\bix^^{æ•°å­¦}
+\xrdef{mathform}
+数学公å¼å¯ä»¥å‡ºçŽ°åœ¨æ­£æ–‡ä¸­ï¼ˆ\emph{文内公å¼}),
+^^{文内公å¼}
+或者出现在留出é¢å¤–上下间è·çš„å•ç‹¬ä¸€è¡Œä¸­ï¼ˆ\emph{陈列公å¼})。
+^^{陈列公å¼}
+文内公å¼ä¸¤è¾¹ç”¨å•ä¸ªç¾Žå…ƒç¬¦ï¼ˆ|$|)括起æ¥ï¼Œ
+而陈列公å¼ä¸¤è¾¹ç”¨åŒä¸ªç¾Žå…ƒç¬¦ï¼ˆ|$$|)括起æ¥ã€‚
+\ifoldeplain\ttidxref{$}\ttidxref{$$}\fi
+例如:
+
+%\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}
+\csdisplay
+If $a<b$, then the relation $$e^a < e^b$$ holds.
+|
+\noindent 此输入得到的结果是:
+\display{\centereddisplays
+If $a<b$, then the relation $$e^a < e^b$$ holds.}
+\smallskip
+\noindent \chapterref{math}æ述了数学公å¼ä¸­å¸¸ç”¨çš„命令。
+\eix^^{æ•°å­¦}
+
+
+%\section How \TeX\ works
+\section \TeX\ 如何工作
+
+%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.
+为了更有效地使用 \TeX ,
+对 \TeX\ ç€æ‰‹å°†è¾“入转æ¢ä¸ºè¾“出的活动有所了解是有益的。
+ä½ å¯ä»¥å°† \TeX\ 想象为一ç§æœ‰â€œçœ¼ç›â€ã€â€œå˜´å·´â€ã€â€œé£Ÿé“â€ã€â€œèƒƒâ€ä»¥åŠâ€œè‚ é“â€çš„生物体。
+该生物体的æ¯ä¸ªå™¨å®˜éƒ½ä»¥æŸç§æ–¹å¼è½¬æ¢å®ƒçš„输入,并将转æ¢çš„结果é€åˆ°ä¸‹ä¸ªå™¨å®˜ä¸­ã€‚
+
+%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}
+^{眼ç›}将输入文件转æ¢ä¸ºä¸€ç³»åˆ—字符。
+^{嘴巴}将这串字符转æ¢ä¸ºä¸€ç³»åˆ—\emph{è®°å·},
+^^{è®°å·}
+其中æ¯ä¸ªè®°å·æ˜¯å•ä¸ªå­—符或者一个控制åºåˆ—。
+^^{控制åºåˆ—//作为记å·}
+食é“将该串记å·å±•å¼€ä¸ºä¸€ç³»åˆ—\emph{原始命令}è®°å·ã€‚
+^^{展开记å·}
+^{胃}执行原始命令指定的æ“作,生æˆä¸€äº›é¡µé¢ã€‚
+最åŽï¼Œ^{è‚ é“}å°†æ¯ä¸ªé¡µé¢è½¬æ¢ä¸º \dvifile 所需的形å¼å¹¶å‘é€ç»™å®ƒã€‚
+^^{\dvifile//ç”± \TeX\ çš„è‚ é“生æˆ}
+这些活动在\chapterref{concepts}çš„\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.
+实际的排版活动出现在胃中。
+这些命令指导 \TeX\ 用这样或那样的字体排版这个或那个字符,
+æ’å…¥å•è¯é—´ç©ºéš”,结æŸä¸€ä¸ªæ®µè½ï¼Œç­‰ç­‰ã€‚
+从å•ä¸ªæŽ’版字符åŠå…¶ä»–简å•æŽ’å°å…ƒç´ å¼€å§‹ï¼Œ
+\TeX\ å°†^{ç›’å­}一层层放入其他盒å­ä¸­\seeconcept{ç›’å­},
+这一整套盒å­æž„造了一个页é¢^^{页é¢}。
+æ¯ä¸ªæŽ’版字符å ç”¨ä¸€ä¸ªç›’å­ï¼Œæ•´ä¸ªé¡µé¢ä¹Ÿä¸€æ ·ã€‚
+ç›’å­ä¸­ä¸ä»…包å«æ›´å°çš„ç›’å­ï¼Œä¹ŸåŒ…å«\emph{粘连}^^{粘连}
+(\xref{粘连})和一些其他东西。
+粘连生æˆå°ç›’å­ä¹‹é—´çš„é—´è·ã€‚
+粘连的一个é‡è¦å±žæ€§åœ¨äºŽå®ƒå¯ä»¥ä¼¸å±•å’Œæ”¶ç¼©ï¼›
+因此通过伸缩盒å­ä¸­çš„粘连,\TeX\ å¯ä»¥è®©ç›’å­å˜å¤§æˆ–å˜å°ã€‚
+
+%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.
+粗略说æ¥ï¼Œæ–‡æœ¬è¡Œæ˜¯ä¸€ä¸ªåŒ…å«ä¸€ç³»åˆ—字符盒å­çš„ç›’å­ï¼Œ
+而页é¢æ˜¯ä¸€ä¸ªåŒ…å«ä¸€ç³»åˆ—行盒å­çš„ç›’å­ã€‚
+一行的å„å•è¯ä¹‹é—´ä»¥åŠé¡µé¢çš„å„行之间都有粘连。
+\TeX\ 伸缩å„行中的粘连以让å³é¡µè¾¹å¯¹é½ï¼Œ
+伸缩å„页中的粘连以让å„页的下边è·ç›¸ç­‰ã€‚
+其他类型的排å°å…ƒç´ ä¹Ÿå¯ä»¥å‡ºçŽ°åœ¨è¡Œå†…或页内,但我们ä¸åœ¨è¿™é‡Œè®¨è®ºã€‚
+
+%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}
+作为组装页é¢è¿‡ç¨‹çš„一部分,
+\TeX\ 需è¦å°†æ®µè½åˆ†ä¸ºå¤šè¡Œï¼Œå°†å¤šè¡Œç»„æˆé¡µé¢ã€‚
+事实上,\TeX\ 的胃刚开始将段è½çœ‹æˆä¸€ä¸ªå¾ˆé•¿çš„行。
+它æ’å…¥\emph{断行点}以将段è½åˆ†ä¸ºé•¿åº¦åˆé€‚的一些行,
+^^{断行}
+通过å¤æ‚的分æžä»¥æ‰¾åˆ°æœ€ä½³çš„断行点的集åˆ\seeconcept{断行点}。
+\TeX\ 的胃也执行类似但简å•äº›çš„分æžä»¥å°†ä¸€äº›è¡Œç»„æˆé¡µé¢ã€‚
+基本上,胃累加å„行直到页é¢ä¸Šæ”¾ä¸ä¸‹æ›´å¤šçš„行。
+然åŽå®ƒé€‰æ‹©ä¸€ä¸ªåˆ†é¡µä½ç½®ï¼Œå°†è¯¥åˆ†é¡µä½ç½®ä¹‹å‰çš„å„行放在当å‰é¡µé¢ï¼Œ
+将之åŽçš„å„行留给下个页é¢\seeconcept{分页点}。%
+^^{分页//ç”± \TeX\ 的胃æ’å…¥}
+
+%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}).
+在 \TeX\ 组装一个列表项(盒å­ï¼Œç²˜è¿žç­‰ï¼‰ä¸­çš„æŸä¸ªä¸œè¥¿æ—¶ï¼Œ
+它总处于六ç§\emph{模å¼}^^{模å¼}(\xref{模å¼})的其中一ç§æ¨¡å¼ä¸­ã€‚
+它所组装的东西的类型定义了它所在的模å¼ã€‚
+首先有两ç§æ™®é€šæ¨¡å¼ï¼šæ™®é€šæ°´å¹³æ¨¡å¼ç”¨äºŽç»„装段è½ï¼ˆåœ¨å®ƒä»¬åˆ†ä¸ºå¤šè¡Œä¹‹å‰ï¼‰ï¼Œ
+普通竖直模å¼ç”¨äºŽç»„装页é¢ã€‚
+其次有两ç§é™åˆ¶æ¨¡å¼ï¼šå—é™æ°´å¹³æ¨¡å¼ç”¨äºŽæ°´å¹³åœ°æ·»åŠ å…ƒç´ å½¢æˆæ°´å¹³ç›’å­ï¼Œ
+内部竖直模å¼ç”¨äºŽç«–直地添加元素以形æˆç«–ç›´ç›’å­ï¼ˆéžé¡µé¢ç›’å­ï¼‰ã€‚
+最åŽè¿˜æœ‰ä¸¤ç§æ•°å­¦æ¨¡å¼ï¼šæ–‡å†…数学模å¼ç”¨äºŽç»„装段è½å†…部的数学公å¼ï¼Œ
+陈列数学模å¼ç”¨äºŽç»„装å•ç‹¬ä¸€è¡Œæ˜¾ç¤ºçš„数学公å¼ï¼ˆè§â€œæ•°å­¦å…¬å¼â€ï¼Œ\xref{mathform})。
+
+
+%\section New \TeX\ versus old {\TeX}
+\section{æ–° \TeX\ å’Œè€ \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.
+\xrdef{newtex}
+在 1989 年,Knuth 对 \TeX\ åšäº†ä¸€æ¬¡å¤§å¹…修改,
+使得它能够处ç†éžè‹±è¯­æŽ’版所需的字符集。^^{外语}
+这次修改还包括了一些é¢å¤–çš„ä¸å¹²æ‰°å…¶å®ƒä¸œè¥¿çš„å°åŠŸèƒ½ï¼Œ
+è¿™æœ¬ä¹¦ä»‹ç» ``^{\newTeX}''。
+如果你ä»ä½¿ç”¨æ—§ç‰ˆæœ¬çš„ \TeX ($2.991$ 版或以å‰çš„版本),
+ä½ å¯èƒ½ä¼šæƒ³çŸ¥é“哪些 {\newTeX} 的功能你是没法使用的。
+以下这些功能无法在旧版中使用:
+\ulist\compact
+\li ^|\badness|(\xref\badness )
+\li ^|\emergencystretch|(\xref\emergencystretch )
+\li ^|\errorcontextlines|(\xref\errorcontextlines )
+\li ^|\holdinginserts|(\xref\holdinginserts )
+\li ^|\language|ã€^|\setlanguage| å’Œ |\new!-lan!-guage|%
+(第 \xrefn\language 和 \xrefn{\@newlanguage}页)^^|\newlanguage|
+\li ^|\lefthyphenmin| 和 ^|\righthyphenmin|(\xref\lefthyphenmin )
+\li ^|\noboundary|(\xref\noboundary )
+\li ^|\topglue|( \xref\topglue )
+\li åå…­è¿›åˆ¶çš„æ•°å­—è¡¨è¾¾æ–¹å¼ |^^|$xy$(\xref{hexchars})
+\endulist
+\noindent
+我们建议你尽å¯èƒ½åœ°ä½¿ç”¨æ–°ç‰ˆæœ¬çš„ \TeX 。
+
+%\section Resources
+\section 资æº
+
+%\xrdef{resources}
+%A number of resources are available to help you in using \TeX.
+%\texbook\ is the definitive source of information on \TeX:
+\xrdef{resources}
+有很多资æºå¯ä»¥å¸®åŠ©ä½ ä½¿ç”¨ \TeX ,其中 \texbook\ 是最å¯é çš„ \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.
+\smallskip
+{\narrower\noindent
+^{Knuth, Donald E.}, \texbook. Reading, Mass.: Addison-Wesley, 1984.\par}
+\smallskip
+\noindent
+请务必使用第å七次(1990 å¹´ 1 月)åŠä»¥åŽçš„å°åˆ·ç‰ˆæœ¬ã€‚
+早先的å°åˆ·ç‰ˆæœ¬ä¸åŒ…括新 \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]}}
+^{\LaTeX} 是一套为了简化 \TeX\ 的使用而设计的命令集,
+它在这本书里é¢æœ‰ä»‹ç»\footnote{译注: 这本书中介ç»çš„ \LaTeX\ å·±ç»è¿‡æ—¶ã€‚}:
+\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} 是一套美国数学学会定义的æ交电å­æ•°å­¦æ‰‹ç¨¿çš„命令标准,
+它在这里有介ç»ï¼š
+\smallskip
+{\narrower\noindent
+^{Spivak, Michael D.}, {\sl The Joy of \TeX}. Providence, R.I.:
+American Mathematical Society, 1986.
+\par}
+\smallskip
+\noindent
+ä½ å¯ä»¥åŠ å…¥ ^{\TUG}(TUG),这个组织出版一本å为 {\it ^{TUGBoad}} 的通讯。
+TUG 是一个很好的信æ¯æ¥æºæ¸ é“,它åŒæ—¶ä¹Ÿæ供包括 \AMSTeX\ 在内的很多 \TeX\ å®åŒ…资æºã€‚
+它的地å€æ˜¯ï¼š
+\smallskip
+{\obeylines
+^{\TUG}
+c/o American Mathematical Society
+P.O. Box 9506
+Providence, RI 02940
+U.S.A.
+}
+\smallskip
+\noindent
+最åŽï¼Œä½ å¯ä»¥èŽ·å–在\chapterref{eplain}介ç»çš„用æ¥æŽ’版本书的å®åŒ… ^|eplain.tex|。
+它å¯ä»¥é€šè¿‡ä½¿ç”¨ \ftp 匿å登录获å–:
+{\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}.
+电å­ç‰ˆæœ¬è¿˜åŒ…括了为 ^{\BibTeX} 程åºå¤„ç†è¾“入并排å°å…¶è¾“出的å®â€”—
+\thinspace\BibTeX 程åºæ˜¯æ–¯å¦å¼—大学的 Oren Patashnik ^^{Patashnik, Oren} 编写的。
+如果你在这个å®åŒ…中å‘现了错误,或者想改进它,
+ä½ å¯ä»¥ç»™ Karl å‘电å­é‚®ä»¶ã€‚Karl 的电å­é‚®ç®±åœ°å€æ˜¯ {\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.
+这个å®åŒ…还æ供了 $5\frac1/4$\inches\ 或 $3\frac1/2$\inches\ 软盘,
+ä½ å¯ä»¥å‘以下地å€é‚®å¯„ 10.00 美元购买:
+\smallskip
+{\obeylines
+Paul Abrahams
+214 River Road
+Deerfield, MA 01342
+\vskip\tinyskipamount
+Email: {\tt Abrahams\%Wayne-MTS@um.cc.umich.edu}
+}
+\smallskip
+\noindent
+这个地å€åœ¨ 1990 å¹´ 6 月是正确的;请注æ„在这之åŽå®ƒå¯èƒ½å‘生改å˜ï¼Œå°¤å…¶æ˜¯ç”µå­é‚®ä»¶åœ°å€ã€‚
+
+\ifoldeplain\else\ifcompletebook\else
+\vskip4em{\sectionfonts\leftline{本章索引}}
+\readindexfile{i}
+\fi\fi
+
+\endchapter\byebye
diff --git a/info/impatient/cn/xeCJK-base.tex b/info/impatient/cn/xeCJK-base.tex
new file mode 100644
index 0000000000..8ca04827d1
--- /dev/null
+++ b/info/impatient/cn/xeCJK-base.tex
@@ -0,0 +1,645 @@
+\input miniltx
+\def\settowidth#1#2{%
+ \setbox\@tempboxa\hbox{{#2}}#1\wd\@tempboxa
+ \setbox\@tempboxa\box\voidb@x}
+
+\endlinechar \m@ne
+
+\newif\ifxeCJK@checksingle
+\newif\ifxeCJK@space@
+
+\def\xeCJK@patch#1#2#3{
+ \edef#1{\unexpanded{#2}\unexpanded\expandafter{#1}\unexpanded{#3}}}
+\def\makexeCJKactive{\XeTeXinterchartokenstate=1\relax}
+\def\makexeCJKinactive{\XeTeXinterchartokenstate=0\relax}
+\makexeCJKactive
+\def\xeCJKsetcharclass#1#2#3{
+ \@tempcnta=#1
+ \loop
+ \XeTeXcharclass \@tempcnta #3\relax
+ \advance\@tempcnta 1\relax
+ \unless\ifnum\the\@tempcnta>#2 \repeat
+ \xeCJK@setpunctcharclass}
+\def\xeCJK@prePunct#1#2{\xeCJK@setPunct{2}{#1}{#2}}
+\def\xeCJK@postPunct#1#2{\xeCJK@setPunct{3}{#1}{#2}}
+\def\xeCJK@setPunct#1#2#3{
+ \def\xeCJK@class{#1}
+ \@tempcnta "#2\relax
+ \multiply\@tempcnta 256\relax
+ \xeCJK@setPunct@#3,,}
+\def\xeCJK@setPunct@#1,{
+ \edef\xeCJK@temp{#1}%
+ \unless\ifx\xeCJK@temp\@empty
+ \@tempcntb "#1\relax
+ \advance\@tempcntb\@tempcnta\relax
+ \XeTeXcharclass \@tempcntb=\xeCJK@class\relax
+ \def\xeCJK@temp{\xeCJK@setPunct@}
+ \fi
+ \xeCJK@temp}
+\def\xeCJK@setpunctcharclass{
+ \xeCJK@prePunct{20}{18,1C}
+ \xeCJK@postPunct{20}{19,1D,14,26}
+ \xeCJK@postPunct{25}{00}
+ \xeCJK@prePunct{30}{08,0A,0C,0E,10,12,14,16,18,1A,1D,1F,36}
+ \xeCJK@postPunct{30}{01,02,05,06,09,0B,0D,0F,11,15,17,19,1B,1E,
+ 41,43,45,47,49,63,83,85,87,8E,
+ 9B,9C,9D,9E,A1,A3,A5,A7,A9,C3,E3,E5,E7,EE,F5,F6,FB,FC,FD,FE}
+ \xeCJK@prePunct {FE}{59,5B,5D,5F,60,69,6B}
+ \xeCJK@postPunct{FE}{50,51,52,54,55,56,57,5A,5C,5E,6A}
+ \xeCJK@prePunct {FF}{03,04,08,20,3B,5B,E0,E1,E5,E6}
+ \xeCJK@postPunct{FF}{01,05,09,0C,0E,1A,1B,1F,3D,5D,
+ 61,63,64,65,67,68,69,6A,6B,6C,6D,6E,6F,70,9E,9F}
+ \xeCJK@setPunct{1}{0}{B7}
+ \xeCJK@setPunct{4}{0}{28,2D,5B,60,7B}
+ \xeCJK@setPunct{5}{0}{21,22,25,27,29,2C,2E,3A,3B,3F,5D,7D}}
+\xeCJKsetcharclass{"1100}{"11FF}{1}
+\xeCJKsetcharclass{"2E80}{"2EFF}{1}
+\xeCJKsetcharclass{"2F00}{"2FDF}{1}
+\xeCJKsetcharclass{"2FF0}{"2FFF}{1}
+\xeCJKsetcharclass{"3000}{"303F}{1}
+\xeCJKsetcharclass{"3040}{"309F}{1}
+\xeCJKsetcharclass{"30A0}{"30FF}{1}
+\xeCJKsetcharclass{"3100}{"312F}{1}
+\xeCJKsetcharclass{"3130}{"318F}{1}
+\xeCJKsetcharclass{"3190}{"319F}{1}
+\xeCJKsetcharclass{"31A0}{"31BF}{1}
+\xeCJKsetcharclass{"31C0}{"31EF}{1}
+\xeCJKsetcharclass{"31F0}{"31FF}{1}
+\xeCJKsetcharclass{"3200}{"32FF}{1}
+\xeCJKsetcharclass{"3300}{"33FF}{1}
+\xeCJKsetcharclass{"3400}{"4DBF}{1}
+\xeCJKsetcharclass{"4E00}{"9FFF}{1}
+\xeCJKsetcharclass{"A000}{"A4CF}{1}
+\xeCJKsetcharclass{"AC00}{"D7AF}{1}
+\xeCJKsetcharclass{"F900}{"FAFF}{1}
+\xeCJKsetcharclass{"FE30}{"FE4F}{1}
+\xeCJKsetcharclass{"FF00}{"FFEF}{1}
+\xeCJKsetcharclass{"20000}{"2A6DF}{1}
+\xeCJKsetcharclass{"2A700}{"2B73F}{1}
+\xeCJKsetcharclass{"2B740}{"2B81F}{1}
+\xeCJKsetcharclass{"2F800}{"2FA1F}{1}
+\def\CJK@stop{\CJK@stop}
+\def\normalspacedchars#1{
+ \xeCJK@setnormalspacedchar#1\CJK@stop}
+\def\xeCJK@setnormalspacedchar#1{
+ \unless\ifx#1\CJK@stop
+ \XeTeXcharclass`#1=6
+ \expandafter\xeCJK@setnormalspacedchar
+ \fi}
+\normalspacedchars{/}
+\XeTeXinterchartoks 1 0{\egroup\CJKecglue}
+\XeTeXinterchartoks 1 1{\xeCJK@i@i}
+\XeTeXinterchartoks 1 2{\xeCJK@i@ii}
+\XeTeXinterchartoks 1 3{\xeCJK@i@iii}
+\XeTeXinterchartoks 1 4{\egroup\CJKecglue}
+\XeTeXinterchartoks 1 5{\egroup}
+\XeTeXinterchartoks 1 255{\xeCJK@i@cclv}
+\XeTeXinterchartoks 2 0{\xeCJK@ii@}
+\XeTeXinterchartoks 2 1{\xeCJK@ii@i}
+\XeTeXinterchartoks 2 2{\xeCJK@ii@ii}
+\XeTeXinterchartoks 2 3{\xeCJK@ii@iii}
+\XeTeXinterchartoks 2 4{\xeCJK@ii@iv}
+\XeTeXinterchartoks 2 5{\xeCJK@ii@v}
+\XeTeXinterchartoks 2 255{\xeCJK@ii@cclv}
+\XeTeXinterchartoks 3 0{\xeCJK@iii@}
+\XeTeXinterchartoks 3 1{\xeCJK@iii@i}
+\XeTeXinterchartoks 3 2{\xeCJK@iii@ii}
+\XeTeXinterchartoks 3 3{\xeCJK@iii@iii}
+\XeTeXinterchartoks 3 4{\xeCJK@iii@iv}
+\XeTeXinterchartoks 3 5{\xeCJK@iii@v}
+\XeTeXinterchartoks 3 255{\xeCJK@iii@cclv}
+\XeTeXinterchartoks 0 1{\xeCJK@@i}
+\XeTeXinterchartoks 0 2{\xeCJK@@ii}
+\XeTeXinterchartoks 0 3{\xeCJK@@iii}
+\XeTeXinterchartoks 0 255{\xeCJK@@cclv}
+\XeTeXinterchartoks 4 1{\xeCJK@iv@i}
+\XeTeXinterchartoks 4 2{\xeCJK@iv@ii}
+\XeTeXinterchartoks 4 3{\xeCJK@iv@iii}
+\XeTeXinterchartoks 5 1{\xeCJK@v@i}
+\XeTeXinterchartoks 5 2{\xeCJK@v@ii}
+\XeTeXinterchartoks 5 3{\xeCJK@v@iii}
+\XeTeXinterchartoks 5 255{\xeCJK@v@cclv}
+\XeTeXinterchartoks 255 0{\xeCJK@cclv@}
+\XeTeXinterchartoks 255 1{\xeCJK@cclv@i}
+\XeTeXinterchartoks 255 2{\xeCJK@cclv@ii}
+\XeTeXinterchartoks 255 3{\xeCJK@cclv@iii}
+\XeTeXinterchartoks 255 4{\xeCJK@cclv@iv}
+\XeTeXinterchartoks 255 6{\xeCJK@cclv@vi}
+\XeTeXinterchartoks 1 6{\xeCJK@i@vi}
+\XeTeXinterchartoks 2 6{\xeCJK@ii@vi}
+\XeTeXinterchartoks 3 6{\xeCJK@iii@vi}
+\XeTeXinterchartoks 6 1{\xeCJK@vi@i}
+\XeTeXinterchartoks 6 2{\xeCJK@vi@ii}
+\XeTeXinterchartoks 6 3{\xeCJK@vi@iii}
+\XeTeXinterchartoks 6 255{\xeCJK@vi@cclv}
+\def\xeCJK@vi@i{
+ \bgroup
+ \xeCJK@emptyCJKtoks
+ \xeCJK@setfont
+ \CJKsymbol}
+\def\xeCJK@i@vi{
+ \egroup}
+\let\xeCJK@ii@vi \xeCJK@i@vi
+\let\xeCJK@iii@vi\xeCJK@i@vi
+\let\xeCJK@vi@ii \xeCJK@vi@i
+\let\xeCJK@vi@iii\xeCJK@vi@i
+\def\xeCJK@i@i{
+ \CJKglue
+ \CJKsymbol}
+\let\xeCJK@i@i@save\xeCJK@i@i
+\def\xeCJK@i@ii#1{
+ \xeCJK@punctrule{#1}{l}
+ \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @lglue@#1\endcsname
+ plus 0.1em minus 0.1 em
+ \xeCJK@setprepunct{#1}}
+\def\xeCJK@i@iii#1{
+ \xeCJK@punctrule{#1}{r}
+ \ifcsname xeCJK@specialpunct#1\endcsname
+ \CJKglue % breakable
+ \else
+ \nobreak
+ \fi
+ \xdef\xeCJK@lastpunct{#1}
+ \CJKpunctsymbol{#1}}
+\def\xeCJK@setprepunct#1{
+ \edef\xeCJK@lastpunct{#1}
+ \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname
+ @lrule@#1\endcsname depth \z@ height \z@
+ \CJKpunctsymbol{#1}}
+\def\xeCJK@i@cclv{
+ \egroup
+ {\xeCJK@CJKkern}
+ \xeCJK@ignorespaces}
+\def\xeCJK@ii@i{
+ \nobreak
+ \CJKsymbol}
+\def\xeCJK@ii@ii#1{
+ \nobreak
+ \xeCJK@punctrule{#1}{l}
+ \xeCJK@setkern{\xeCJK@lastpunct}{#1}
+ \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname
+ \xeCJK@setprepunct{#1}}
+\def\xeCJK@ii@iii#1{
+ \nobreak
+ \xeCJK@punctrule{#1}{r}
+ \xeCJK@setkern{\xeCJK@lastpunct}{#1}
+ \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname
+ \nobreak
+ \edef\xeCJK@lastpunct{#1}
+ \CJKpunctsymbol{#1}}
+\def\xeCJK@ii@{
+ \nobreak
+ \egroup}
+\let\xeCJK@ii@iv\xeCJK@ii@
+\let\xeCJK@ii@v\xeCJK@ii@
+\def\xeCJK@ii@cclv{
+ \nobreak
+ \egroup
+ \ignorespaces}
+\def\xeCJK@iii@{
+ \xeCJK@afterpostpunct
+ \egroup}
+\def\xeCJK@iii@i{
+ \xeCJK@afterpostpunct
+ \CJKsymbol}
+\def\xeCJK@iii@ii#1{
+ \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname
+ @rrule@\xeCJK@lastpunct\endcsname depth \z@ height \z@
+ \xeCJK@punctrule{#1}{l}
+ \xeCJK@setkern{\xeCJK@lastpunct}{#1}
+ \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname
+ \xeCJKpunctnobreak
+ \xeCJK@setprepunct{#1}}
+\def\xeCJK@iii@iii#1{
+ \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname
+ @rrule@\xeCJK@lastpunct\endcsname depth \z@ height \z@
+ \xeCJK@punctrule{#1}{r}
+ \xeCJK@setkern{\xeCJK@lastpunct}{#1}
+ \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname
+ \nobreak
+ \edef\xeCJK@lastpunct{#1}
+ \CJKpunctsymbol{#1}}
+\def\xeCJK@iii@iv{
+ \xeCJK@afterpostpunct
+ \egroup}
+\def\xeCJK@afterpostpunct{
+ \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname
+ @rrule@\xeCJK@lastpunct\endcsname depth \z@ height \z@
+ \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@\xeCJK@lastpunct\endcsname
+ plus 0.1em minus 0.1 em}
+\let\xeCJK@iii@v\xeCJK@iii@iv
+\def\xeCJK@iii@cclv{
+ \xeCJK@afterpostpunct
+ \egroup
+ \ignorespaces}
+\def\xeCJK@@i{
+ \CJKecglue
+ \bgroup
+ \xeCJK@setfont
+ \xeCJK@emptyCJKtoks
+ \CJKsymbol}
+\def\xeCJK@@ii{
+ \bgroup
+ \xeCJK@setfont
+ \XeTeXinterchartoks 0 2{\relax}
+ \xeCJK@emptyCJKtoks
+ \xeCJK@i@ii}
+\def\xeCJK@@iii{
+ \bgroup
+ \xeCJK@setfont
+ \XeTeXinterchartoks 0 3{\relax}
+ \xeCJK@emptyCJKtoks
+ \xeCJK@i@iii}
+\def\xeCJK@iv@i{
+ \bgroup
+ \xeCJK@setfont
+ \XeTeXinterchartoks 4 1{\relax}
+ \xeCJK@emptyCJKtoks
+ \CJKsymbol}
+\def\xeCJK@iv@ii{
+ \bgroup
+ \xeCJK@setfont
+ \XeTeXinterchartoks 4 2{\relax}
+ \xeCJK@emptyCJKtoks
+ \xeCJK@i@ii}
+\def\xeCJK@iv@iii{
+ \bgroup
+ \xeCJK@setfont
+ \XeTeXinterchartoks 4 3{\relax}
+ \xeCJK@emptyCJKtoks
+ \xeCJK@i@iii}
+\def\xeCJK@v@i{
+ \CJKecglue
+ \bgroup
+ \xeCJK@setfont
+ \xeCJK@emptyCJKtoks
+ \CJKsymbol}
+\def\xeCJK@v@ii{
+ \bgroup
+ \xeCJK@setfont
+ \XeTeXinterchartoks 5 2{\relax}
+ \xeCJK@emptyCJKtoks
+ \xeCJK@i@ii}
+\def\xeCJK@v@iii{
+ \bgroup
+ \xeCJK@setfont
+ \XeTeXinterchartoks 5 3{\relax}
+ \xeCJK@emptyCJKtoks
+ \xeCJK@i@iii}
+\def\xeCJK@emptyCJKtoks{
+ \XeTeXinterchartoks 255 1{\relax}
+ \XeTeXinterchartoks 255 2{\relax}
+ \XeTeXinterchartoks 255 3{\relax}}
+\def\xeCJK@@cclv{
+ \futurelet\xeCJK@nexttoken\xeCJK@zz@cclv}
+\def\xeCJK@zz@cclv{
+ \ifx\xeCJK@nexttoken\@sptoken
+ {\xeCJK@spkern}
+ \else
+ {\xeCJK@zerokern}
+ \fi}
+\let\xeCJK@v@cclv\xeCJK@@cclv
+\let\xeCJK@vi@cclv\xeCJK@@cclv
+\def\xeCJK@cclv@{
+ \ifnum\lastkern=\@ne
+ \CJKecglue
+ \fi}
+\let\xeCJK@cclv@iv\xeCJK@cclv@
+\let\xeCJK@cclv@vi\xeCJK@cclv@
+\def\xeCJK@cclv@i{{
+ \ifnum\lastkern=\@ne
+ \CJKglue
+ \else
+ \ifnum\lastkern=\xeCJK@four
+ \CJKecglue
+ \else
+ \ifnum\lastnodetype=\xeCJK@ten
+ \CJKecglue
+ \else
+ \ifnum\lastnodetype=\xeCJK@eleven
+ \settowidth\@tempdima\@sptoken
+ \ifdim\lastskip=\@tempdima
+ \@tempskipa=\lastskip
+ \unskip
+ \ifnum\lastkern=\tw@
+ \CJKecglue
+ \else
+ \ifnum\lastnodetype=\xeCJK@ten
+ \CJKecglue
+ \else
+ \ifnum\lastkern=\xeCJK@four
+ \CJKecglue
+ \else
+ \hskip\@tempskipa
+ \fi\fi\fi\fi\fi\fi\fi\fi}
+ \bgroup
+ \xeCJK@emptyCJKtoks
+ \xeCJK@setfont
+ \CJKsymbol}
+\def\xeCJK@cclv@ii{
+ \bgroup
+ \xeCJK@emptyCJKtoks
+ \xeCJK@setfont
+ \xeCJK@i@ii}
+\def\xeCJK@cclv@iii{
+ \bgroup
+ \xeCJK@emptyCJKtoks
+ \xeCJK@setfont
+ \xeCJK@i@iii}
+\def\CJKglue{\hskip \z@ \@plus .08\baselineskip}
+\def\CJK@nobreakglue{\nobreak\CJKglue\nobreak}
+\edef\xeCJK@CJKkern{\kern -1sp\kern 1sp}
+\edef\xeCJK@spkern{\kern -2sp\kern 2sp}
+\edef\xeCJK@zerokern{\kern -4sp\kern 4sp}
+\chardef\xeCJK@four=4
+\chardef\xeCJK@ten=10
+\chardef\xeCJK@eleven=11
+\def\CJKspace{\let\xeCJK@ignorespaces\@empty}
+\def\CJKnospace{\def\xeCJK@ignorespaces{\xeCJK@@ignorespaces}}
+\ifxeCJK@space@
+ \CJKspace
+\else
+ \CJKnospace
+\fi
+\def\xeCJK@@ignorespaces{
+ \futurelet\xeCJK@nexttoken\xeCJK@checknext}
+\def\xeCJK@checknext{
+ \ifx\xeCJK@nexttoken\@sptoken
+ \expandafter\xeCJK@@checknext
+ \else
+ \ifx $\xeCJK@nexttoken
+ \CJKecglue
+ \fi
+ \fi}
+{
+ \def\:{\xeCJK@@checknext}
+ \global\expandafter\def\: {\futurelet\@let@token\xeCJK@@@checknext}
+}
+\def\xeCJK@@@checknext{
+ \ifx $\@let@token
+ \CJKecglue
+ \else
+ \if\relax\noexpand\@let@token
+ \unless\ifx\@let@token\xeCJK@par
+ \CJKecglue
+ \fi
+ \fi
+ \fi
+ \let\xeCJK@nexttoken\relax}
+\def\xeCJKenablechecksingle{\def\xeCJK@i@i{\xeCJK@checksingle}}
+\def\xeCJKdisablechecksingle{\let\xeCJK@i@i\xeCJK@i@i@save}
+\ifxeCJK@checksingle
+ \AtEndOfPackage{\xeCJKenablechecksingle}
+\fi
+\def\xeCJK@checksingle#1{
+ \def\xeCJK@setcurrentchar@i{
+ \CJKglue
+ \CJKsymbol{#1}}
+ \def\xeCJK@setcurrentnobreakchar@i{
+ \CJKsymbol{#1}}
+ \futurelet\@let@token\xeCJK@@checksingle}
+\def\xeCJK@@checksingle{
+ \ifcat 。\noexpand\@let@token
+ \expandafter\xeCJK@@@checksingle
+ \else
+ \expandafter\xeCJK@setcurrentchar@i
+ \fi}
+\def\xeCJK@@@checksingle#1{
+ \def\xeCJK@setcurrentchar@ii{
+ \xeCJK@setcurrentchar@i #1}
+ \def\xeCJK@setcurrentchar@ii@s{
+ \xeCJK@setcurrentchar@i #1 }
+ \def\xeCJK@setcurrentnobreakchar@ii{
+ \xeCJK@setcurrentnobreakchar@i #1}
+ \futurelet\@let@token\xeCJK@@@@checksingle}
+\def\xeCJK@@@@checksingle{
+ \ifx\@let@token\@sptoken
+ \expandafter\xeCJK@checkpar
+ \else
+ \expandafter\xeCJK@setcurrentchar@ii
+ \fi}
+\let\xeCJK@par\par
+\def\xeCJK@checkpar{
+ \@ifnextchar\xeCJK@par{\xeCJK@setcurrentnobreakchar@ii}{\xeCJK@setcurrentchar@ii@s}}
+\def\xeCJKsetecglue#1{
+ \def\CJK@ecglue{#1}
+ \let\CJKecglue\CJK@ecglue}
+\let\CJKsetecglue\xeCJKsetecglue
+\CJKsetecglue{ }
+\def\xeCJKallowbreakbetweenpuncts{
+ \def\xeCJKpunctnobreak{
+ \hskip \z@\relax}}
+\def\xeCJKnobreakbetweenpuncts{
+ \let\xeCJKpunctnobreak\nobreak}
+\xeCJKnobreakbetweenpuncts
+\let\xeCJK@itcorr\/
+\def\/{%
+ \relax
+ \ifnum\lastkern=4 %
+ \unkern\unkern
+ \fi
+ \xeCJK@itcorr}
+\let\@@italiccorr=\/
+\newcount\xeCJK@cnta
+\newcount\xeCJK@cntb
+\newcount\xeCJK@cntc
+\newcount\xeCJK@cntd
+\newcount\xeCJK@cnte
+\newdimen\xeCJK@dima
+\newif\ifxeCJK@dokerning
+\def\xeCJK@punctrule#1#2{
+ \xdef\xeCJK@bboxname{\xeCJK@fontname}
+ \unless\ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2rule@#1\endcsname
+ \unless\ifcsname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname
+ {\xeCJK@setfont\xeCJK@setpunctbounds{#1}}
+ \fi
+ \xeCJK@dokerningtrue
+ \ifnum\xeCJK@punctstyle=\xeCJK@ps@plain\relax
+ \xeCJK@dokerningfalse
+ \else
+ \ifcsname xeCJK@specialpunct#1\endcsname
+ \xeCJK@dokerningfalse
+ \fi
+ \fi
+ \ifxeCJK@dokerning
+ \xeCJK@cnta=\csname xeCJK@\xeCJK@bboxname @#2space@#1\endcsname\relax
+ \xeCJK@cntc=\xeCJK@cnta
+ \ifcase\xeCJK@punctstyle
+ % hangmobanjiao
+ \or % quanjiao
+ \or % banjiao
+ \advance\xeCJK@cntc -50\relax
+ \or % kaiming
+ \ifcsname xeCJK@kaiming#1\endcsname
+ \advance\xeCJK@cntc -20\relax
+ \else
+ \advance\xeCJK@cntc -50\relax
+ \fi
+ \or % CCT
+ \ifcsname xeCJK@kaiming#1\endcsname
+ \advance\xeCJK@cntc -20\relax
+ \else
+ \advance\xeCJK@cntc -30\relax
+ \fi
+ \fi
+ \xeCJK@cntd=\xeCJK@cntc
+ \ifnum\xeCJK@cntc<0\relax
+ \xeCJK@cntc=0\relax
+ \fi
+ \else
+ \xeCJK@cnta=0\relax
+ \xeCJK@cntc=0\relax
+ \xeCJK@cntd=0\relax
+ \fi
+ \xeCJK@numtodim{\xeCJK@cnta}
+ \expandafter\xdef\csname
+ xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2rule@#1\endcsname{
+ -\xeCJK@temp em}
+ \xeCJK@numtodim{\xeCJK@cntc}
+ \expandafter\xdef\csname
+ xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2glue@#1\endcsname{
+ \xeCJK@temp em}
+ \expandafter\xdef\csname
+ xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2oglue@#1\endcsname{
+ \the\xeCJK@cntd}
+ \fi}
+\def\xeCJK@numtodim#1{
+ \xeCJK@cnte=#1\relax
+ \ifnum\the\xeCJK@cnte<100\relax
+ \def\xeCJK@temp{0}
+ \else
+ \advance\xeCJK@cnte -100\relax
+ \def\xeCJK@temp{1}
+ \fi
+ \ifnum\the\xeCJK@cnte<10
+ \edef\xeCJK@temp{\xeCJK@temp.0\the\xeCJK@cnte}
+ \else
+ \edef\xeCJK@temp{\xeCJK@temp.\the\xeCJK@cnte}
+ \fi}
+\expandafter\def\csname xeCJK@kaiming.\endcsname{}
+\expandafter\def\csname xeCJK@kaiming。\endcsname{}
+\expandafter\def\csname xeCJK@kaiming?\endcsname{}
+\expandafter\def\csname xeCJK@kaimingï¼\endcsname{}
+\expandafter\def\csname xeCJK@specialpunct—\endcsname{}% U+2014
+\expandafter\def\csname xeCJK@specialpunct─\endcsname{}% U+2500
+\expandafter\def\csname xeCJK@specialpunct…\endcsname{}
+\def\xeCJK@setkern#1#2{
+ \unless\ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname
+ \xeCJK@cnta=0\relax
+ \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @roglue@#1\endcsname
+ \advance\xeCJK@cnta\csname
+ xeCJK\xeCJK@punctstyle\xeCJK@bboxname @roglue@#1\endcsname
+ \fi
+ \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @loglue@#2\endcsname
+ \advance\xeCJK@cnta\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname
+ @loglue@#2\endcsname
+ \fi
+ \relax
+ \ifcase\xeCJK@punctstyle
+ % hangmobanjiao
+ \or % quanjiao
+ \advance\xeCJK@cnta -50\relax
+ \or % banjiao
+ \advance\xeCJK@cnta -50\relax
+ \or % kaiming
+ \advance\xeCJK@cnta -50\relax
+ \or % CCT
+ \advance\xeCJK@cnta -50\relax
+ \fi
+ \ifnum\xeCJK@cnta<0\relax
+ \xeCJK@cnta=0\relax
+ \fi
+ \xeCJK@numtodim{\xeCJK@cnta}
+ \expandafter\xdef\csname
+ xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname{
+ \xeCJK@temp em}
+ \fi}
+\def\xeCJKsetkern#1#2#3{
+ \xdef\xeCJK@bboxname{\xeCJK@fontname}
+ \expandafter\xdef\csname
+ xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname{#3}}
+\def\punctstyle#1{
+ \ifcsname xeCJK@ps@#1\endcsname
+ \edef\xeCJK@punctstyle{\csname xeCJK@ps@#1\endcsname}
+ \ifnum\xeCJK@punctstyle=\xeCJK@ps@plain\relax
+ \xeCJKallowbreakbetweenpuncts
+ \fi
+ \else
+ \PackageWarning{xeCJK}{Punctstyle #1\space is not defined.}
+ \fi}
+\def\xeCJK@ps@hangmobanjiao{0}
+\def\xeCJK@ps@marginkerning{0}
+\def\xeCJK@ps@quanjiao{1}
+\def\xeCJK@ps@fullwidth{1}
+\def\xeCJK@ps@banjiao{2}
+\def\xeCJK@ps@halfwidth{2}
+\def\xeCJK@ps@kaiming{3}
+\def\xeCJK@ps@mixedwidth{3}
+\def\xeCJK@ps@CCT{4}
+\def\xeCJK@ps@plain{5}
+\punctstyle{quanjiao}
+\def\xeCJKplainchr{\punctstyle{plain}}
+\def\xeCJK@sidespace{10}
+\def\xeCJK@getglyphbounds#1{
+ \xeCJK@cnta=\number\XeTeXglyphbounds #1 \xeCJK@gid
+ \xeCJK@dima 1em\relax
+ \xeCJK@cntb=\number\xeCJK@dima
+ \multiply\xeCJK@cnta 100\relax
+ \divide\xeCJK@cnta\xeCJK@cntb
+ \advance\xeCJK@cnta -15\relax
+ \edef\xeCJK@temp{\the\xeCJK@cnta}
+ \ifnum\xeCJK@temp<0\relax
+ \def\xeCJK@temp{0}
+ \fi}
+\def\xeCJK@setpunctbounds#1{
+ \edef\xeCJK@gid{\the\XeTeXcharglyph`#1}
+ \xeCJK@getglyphbounds{1}
+ \expandafter\xdef\csname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname{
+ \xeCJK@temp}
+ \xeCJK@getglyphbounds{3}
+ \expandafter\xdef\csname xeCJK@\xeCJK@bboxname @rspace@#1\endcsname{
+ \xeCJK@temp}
+ \ifcsname xeCJK@specialpunct#1\endcsname
+ \unless\ifx#1…
+ \xeCJK@cnta=\number\XeTeXglyphbounds 1 \xeCJK@gid
+ \advance\xeCJK@cnta\number\XeTeXglyphbounds 3 \xeCJK@gid
+ \xeCJK@dima 1em\relax
+ \xeCJK@cntb=\number\xeCJK@dima
+ \multiply\xeCJK@cnta 100\relax
+ \divide\xeCJK@cnta\xeCJK@cntb
+ \advance\xeCJK@cnta 1\relax
+ \ifnum\xeCJK@cnta>9
+ \edef\xeCJK@temp{-0.\the\xeCJK@cnta em}
+ \else
+ \ifnum\xeCJK@cnta>1
+ \edef\xeCJK@temp{-0.0\the\xeCJK@cnta em}
+ \else
+ \edef\xeCJK@temp{-0.01 em}
+ \fi
+ \fi
+ \xeCJK@cnta=0
+ \loop
+ \global\expandafter\edef\csname xeCJK\the\xeCJK@cnta\xeCJK@bboxname
+ @kern#1#1\endcsname{\xeCJK@temp}
+ \advance \xeCJK@cnta 1\relax
+ \ifnum\xeCJK@cnta<6\repeat
+ \fi
+ \fi}
+\unless\ifcsname XeTeXglyphbounds\endcsname
+ \PackageError{xeCJK}{\string\XeTeXglyphbounds \space not defined.^^J
+ You have to update XeTeX to the version 0.9995.0 or later}{}
+\fi
+
+\def\CJKsymbol#1{#1}
+\def\CJKpunctsymbol#1{#1}
+
+% For pure plain TeX
+\def\xeCJK@setfont{\CJKfont}
+\def\xeCJK@fontname{\fontname\CJKfont}
+
+\def\CJKfont{\errmessage{xeCJK Error: You must define \noexpand\CJKfont first}}
+
+\endlinechar=`\^^M
+\resetatcatcode
+\endinput
+% vim:ft=plaintex
diff --git a/info/impatient/cn/xmptext.tex b/info/impatient/cn/xmptext.tex
new file mode 100644
index 0000000000..0d97ccd653
--- /dev/null
+++ b/info/impatient/cn/xmptext.tex
@@ -0,0 +1,706 @@
+~% -*- coding: utf-8 -*-
+~% 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
+% TeX 忽略一行中 % 之åŽçš„任何内容
+% 下é¢ä¸¤è¡Œå®šä¹‰æ ‡é¢˜æ‰€ç”¨çš„字体
+\font\xmplbx = cmbx10 scaled \magstephalf
+\font\xmplbxti = cmbxti10 scaled \magstephalf
+~% Now here's the title.
+% 现在是标题行
+~%\leftline{\xmplbx Example !xmpnum:\quad\xmplbxti Entering simple text}
+~\bookmark{2}{例!xmpnum:输入简å•æ–‡æœ¬}%
+\leftline{\xmplbx 例!xmpnum:\quad\xmplbxti 输入简å•æ–‡æœ¬}
+\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{输入简å•æ–‡æœ¬}{\examplepage}}%
+~\fi
+~^^{脚注} ^^{注释} ^^{标点} ^^{引å·}
+~^^{空格符} ^^{横线å·} ^^{段è½//结æŸæ®µè½}
+~\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).
+
+由于 \TeX\ 并ä¸å…³å¿ƒåŽŸå§‹çš„输入文本中的æ¢è¡Œï¼Œå› æ­¤ï¼Œæˆ‘们无须关心
+应该给其æ供何ç§æ ¼å¼åŒ–的文本。在 \TeX\ 看æ¥ï¼Œè¾“入文本中的æ¢è¡Œç¬¦
+和空格等价。%
+\footnote \dag{\TeX\ å°† Tab 也当作空格处ç†, 就如你在这个
+{\it 脚注}所è§åˆ°çš„一样。} 如果你ä¸æƒ³åœ¨è¡Œå°¾å¤„看到空格,
+å¯ä»¥åœ¨è¡Œå°¾å¤„写一个百分å·ï¼ˆæ³¨é‡Šç¬¦å·ï¼‰ã€‚\TeX\ 忽略行首的空格,
+对多于一个的空格当åšä¸€ä¸ªå•ç‹¬çš„空格看待 --- 哪怕这些空格ä½äºŽ
+å¥å·åŽé¢ã€‚ä½ å¯ä»¥ç”¨ä¸€ä¸ªæˆ–者多个空白行表示一个新的段è½çš„开始。
+
+~%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.
+当 \TeX\ 看è§ä¸€ä¸ªå¥å·åŽé¢ç´§æŽ¥ç€ä¸€ä¸ªç©ºæ ¼ï¼ˆæˆ–者是一个行结æŸç¬¦ï¼Œè¿™
+两者等价)时,它通常会认为此å¥å·ä»£è¡¨ä¸€å¥è¯çš„结æŸï¼Œå¹¶åœ¨å¥å·çš„åŽé¢
+加上一点å°å°çš„空格。åŒæ ·çš„处ç†è¿˜é€‚用于问å·å’ŒæƒŠå¹å·ã€‚
+
+~% 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.
+有时需è¦å¾®è°ƒ \TeX\ 处ç†å¥å·çš„æ–¹å¼ã€‚当å¥å·å‰é¢ç´§è·Ÿç€æ ‡é¢˜å­—
+æ¯ï¼ˆå¤§å†™å­—æ¯ï¼‰æ—¶ï¼Œ\TeX\ 会认为这个å¥å·å¹¶ä¸åšä¸ºå¥å­çš„结æŸç¬¦ï¼Œ
+因此在这ç§æƒ…况下,你需è¦ä½œä¸€äº›å°æ”¹åŠ¨ã€‚例如:我们这样写 DNA\null.
+~% The \null prevents TeX from perceiving the capital `A'
+~% as being next to the period.
+% \null å¯ä»¥é˜»æ­¢ \TeX\ 感知å¥å·å‰é¢çš„æ ‡é¢˜å­—æ¯ `A'。
+~%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.)
+~% 这个 references ä¸çŸ¥é“这样翻译对ä¸å¯¹
+如果想将多个å•è¯ç»‘定到一起,中间ä¸åˆ†è¡Œï¼Œåˆ™å¯ä»¥å°†å®ƒä»¬æ”¾å…¥ä¸€ä¸ªå¼•ç”¨ä¸­ï¼Œ
+例如:``è§ Fig.~8'';或者å字中,例如:V.~I\null. Leninï¼›
+或者çœç•¥å· $\ldots$。在这样的情况下,\TeX\ ä¸ä¼šåœ¨å®ƒä»¬ä¹‹é—´æ–­è¡Œ
+(三个点表示çœç•¥å·ï¼‰ã€‚
+
+~%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.
+为得到正确的左å³åŒå¼•å·ï¼Œä½ éœ€è¦ç”¨ä¸¤ä¸ªå·¦å³å•``引å·''。
+``在相邻的å•å¼•å·å’ŒåŒå¼•å·ä¹‹é—´ï¼Œè¦æ’入一个`å°é—´éš”'\thinspace''。
+连接å·--å¯ä»¥è¿™æ ·å†™ï¼Œè€Œç ´æŠ˜å·---å¯ä»¥è¿™æ ·å†™ã€‚
+
+~%\bye % end the document
+\bye % 结æŸæ­¤æ–‡æ¡£
+:::
+~%\xmpheader !xmpnum/{Indentation}% !xmpheaddef
+\xmpheader !xmpnum/{缩进}% !xmpheaddef
+~^^{缩进} ^^{è¾¹è·} ^^{段è½//窄段è½}
+~%\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.
+\noindent 现在让我们æ¥çœ‹çœ‹å¦‚何控制缩进。如果一个普通的文字处ç†
+程åºéƒ½èƒ½å¤„ç†ç¼©è¿›çš„è¯ï¼Œé‚£ \TeX\ 一定也能。请注æ„,本段并未缩进。
+
+~%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.
+让我们对这两个段è½ä½œä¸€äº›ç‰¹æ®Šå¤„ç†ï¼Œè¿™ä¸¤æ®µå°†ä¸ç¼©è¿›ï¼Œå¹¶ä¸”两段
+之间有 6pt 宽的空白。
+
+~%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:
+你也能在段è½çš„两边åŒæ—¶ç¼©è¿›ï¼Œä¸‹é¢çš„ 3 段文字演示了åŒè¾¹ç¼©è¿›çš„效果:
+
+\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}
+``如果你愿æ„çš„è¯ï¼Œå¯ä»¥åŒæ—¶å¯¹å¤šä¸ªæ®µè½ä½œå¦‚此处ç†. 这是
+第二个轻微缩进的段è½.''\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}
+{\narrower \narrower 如果需è¦ï¼Œä½ ä¹Ÿå¯ä»¥è®©æ®µè½ç¼©è¿›åŒå€é•¿åº¦ã€‚
+这就是一个åŒå€ç¼©è¿›æ®µè½çš„例å­.\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}
+{\leftskip .5in 现在这一段,我们将其调整为左边è·ä¸ºåŠè‹±å°ºï¼Œè€Œ
+å³è¾¹è·ä¿æŒåŽŸæ ·ã€‚\par}
+
+~%{\rightskip .5in Finally, we'll indent the right margin by half
+~%an inch and leave the left margin at its usual position.\par}
+{\rightskip .5in 最åŽï¼Œæˆ‘们将本段调整为å³è¾¹è·åŠè‹±å°ºï¼Œè€Œå·¦è¾¹è·ä¿æŒ
+原样。\par}
+~%\bye % end the document
+\bye % 结æŸæ­¤æ–‡æ¡£
+:::
+~%\xmpheader !xmpnum/{Fonts and special characters}% !xmpheaddef
+\xmpheader !xmpnum/{字体和特殊字符}% !xmpheaddef
+\chardef \\ = `\\ % Let \\ denote a backslash.
+~^^{字体} ^^{字符//特殊字符} ^^{é‡éŸ³}
+~^^{音符} ^^{花色}
+~\ifoldeplain
+~^^|$| ^^|&| ^^|#| ^^|_| ^^|%| ^^|^| ^^|~| ^^|{| ^^|}| \indexchar \
+~\fi
+~%{\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.
+{\it 这是一些斜体字è¯}, {\bf 一些粗体字è¯},
+{\it 以åŠä¸€äº› {\bf 二者混åˆçš„效果},
+我们在中间æ’入一些 {\rm 正常的字è¯} }.
+当斜体字åŽé¢ç´§è·Ÿéžæ–œä½“å­—æ—¶, 我们在其间æ’入一个``倾斜校正''
+({\tt \\/}),使得中间的空白看起æ¥è¾ƒèˆ’适。
+~%Here's a {\sevenrm smaller} word---but the standard \TeX\
+~%fonts won't give you anything smaller than {\fiverm this}.
+这是一些{\sevenrm æ›´å°çš„} å­—è¯---å¯æ˜¯æ ‡å‡†çš„ \TeX\
+字体并ä¸ä¼šç»™å‡ºå°äºŽ {\fiverm 如此大å°}的字体。
+
+~%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.
+\noindent 你需è¦é€šè¿‡ç‰¹æ®Šçš„æ–¹å¼æ¥å†™ä»–们。å‚照对开页,
+学习正确的记录这些特殊字符的方法.
+
+~%\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].
+\TeX\ 拥有一些语音和字æ¯ï¼Œå¯ä»¥ç”¨äºŽæŸäº›æ³•è¯­è¯ï¼Œ
+例如:{\it r\^ ole\/} 以åŠ{\it \'el\` eve\/},
+或者德语è¯ï¼Œä¾‹å¦‚ {\it Schu\ss\/},或者æŸäº›åˆ«çš„什么语言。
+ä½ å¯ä»¥åœ¨ !xrefdelim[accents] å’Œ !xrefdelim[fornlets] 处
+找到 \TeX\ çš„ 欧洲语音和字æ¯è¡¨ã€‚
+
+~%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.
+你也å¯ä»¥å†™ä¸€äº›å¸Œè…Šå­—æ¯ï¼Œä¾‹å¦‚数学中的 ``$\alpha$'' 以åŠ
+``$\Omega$'' , 扑克牌中的
+``$\spadesuit$'' ä»¥åŠ ``$\diamondsuit$'', 一些音ä¹ç¬¦å·ï¼Œä¾‹å¦‚:
+``$\sharp$'' å’Œ ``$\flat$'', 以åŠä¸€äº›ä½ å¯ä»¥åœ¨ !xrefdelim[specsyms]
+找到的å„ç§ç¬¦å·ã€‚\TeX\ 仅在 ``数学模å¼'' 下接å—这些符å·, 因此,
+你需è¦å°†å®ƒä»¬æ”¾åœ¨ä¸¤ä¸ª `{\tt \$}' 字符中间。
+~%\bye % end the document
+\bye % 结æŸæ­¤æ–‡æ¡£
+:::
+~%\xmpheader !xmpnum/{Interline spacing}% !xmpheaddef
+\xmpheader !xmpnum/{行间è·}% !xmpheaddef
+~^^{é—´éš”//行间è·} ^^{基线}
+\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.)
+基线是一æ¡æƒ³è±¡å‡ºæ¥çš„线,其作用类似于带横格标记的纸张上
+横格线的作用。你å¯ä»¥é€šè¿‡æŽ§åˆ¶åŸºçº¿é—´çš„è·ç¦»æ¥æŽ§åˆ¶ä¸¤è¡Œæ–‡å­—
+之间的è·ç¦» --- 打å°æœºç®¡è¿™ä¸ªè·ç¦»å«åš ``起始空白''。具体
+çš„åšæ³•å¯ä»¥å‚看这段的æºæ–‡ä»¶ã€‚ä½ å¯ä»¥ç”¨{\tt 1.5}å–代{\tt 2}
+获得 $1\;1/2$空白的效果。(或者å¯ä»¥å†™æˆæ›´å¥½çœ‹çš„ $1\frac 1/2$
+å½¢å¼ã€‚)
+
+% 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
+\bye % 结æŸæ­¤æ–‡æ¡£
+:::
+~%\xmpheader !xmpnum/{Spacing, rules, and boxes}% !xmpheaddef
+\xmpheader !xmpnum/{é—´éš”ã€æ ‡çº¿å’Œç›’å­}% !xmpheaddef
+~^^{æ述列表} ^^{ç›’å­//绘制盒å­} ^^{修订线}
+~%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.
+% 用 \descindent 表示æ述列表的缩进é‡ï¼Œå¹¶è®¾å®šå®ƒçš„值为 8 æ´¾å¡ã€‚
+\newdimen\descindent \descindent = 8pc
+~% Indent paragraphs by \descindent.
+~% Skip an additional half line between paragraphs.
+% 整个段è½ç¼©è¿› \descindent。段è½é—´å¢žåŠ åŠä¸ªè¡Œè·çš„é—´è·ã€‚
+{\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 prin\-cipal 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.
+% 在文本和四周标线之间留有 8pt 宽的间隔。
+\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?}%
+ \hbox{è°ä¸æ˜¯æœ€æƒ³å°ä¸€å°ï¼Œ}%
+ \hbox{两便士一碗的好汤?}%
+ \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
+\bye % 结æŸæ­¤æ–‡æ¡£
+:::
+~%\xmpheader !xmpnum/{Odds and ends}% !xmpheaddef
+\xmpheader !xmpnum/{æ‚项}% !xmpheaddef
+~^^{è¿žå­—} ^^{定ç†} ^^{引ç†} ^^{有åºåˆ—表}
+~^^{居左对é½} ^^{å±…å³å¯¹é½} ^^{居中对é½}
+~%\chardef \\ = `\\ % Let \\ denote a backslash.
+\chardef \\ = `\\ % 用 \\ 表示åæ–œæ ã€‚
+\footline{\hfil{\tenit - \folio -}\hfil}
+~\global\footline{\hfil{\tenit - \folio\ -}\hfil}
+~% \footline provides a footer line.
+~% Here it's a centered, italicized page number.
+% \footline 给出页脚行;此处为居中的æ„大利体页ç ã€‚
+~%\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.
+\TeX\ 懂得如何将å•è¯è¿žå­—化,但它并éžç»å¯¹å¯é çš„。若你在讨论化学
+${\it 5}$-[p-(Flouro\-sul\-fonyl)ben\-zoyl]-l,%
+$N^6$-ethe\-no\-adeno\-sine 时,
+\TeX\ 给出关于``水平盒å­æº¢å‡º''的警告,
+ä½ å¯ä»¥å°è¯•æ’å…¥æŸäº›``自定连字符''。
+`{\tt \\-}'è®°å·å‘Šè¯‰ \TeX\ 一个自定连字符ä½ç½®ï¼›
+在此ä½ç½® \TeX\ 本æ¥æ˜¯ä¸ä¼šæ’入连字符的。
+\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}
+{\raggedright ä½ å¯ä»¥ä¸å¯¹é½åœ°æŽ’版文字,å³è®©å³é¡µè¾¹ä¸å¯¹é½ã€‚
+在过去,文字处ç†è½¯ä»¶è¿˜æœªæ™®åŠï¼Œ
+因为没有其他方便的选择,排版的文档都是ä¸å¯¹é½çš„。
+有些人更喜欢ä¸å¯¹é½åœ°æŽ’版文字,因为此时å•è¯é—´è·æ˜¯ä¸€è‡´çš„。
+大部分书ç±éƒ½è®¾ç½®ä¸ºé¡µè¾¹å¯¹é½ï¼Œä½†å¹¶éžéƒ½æ˜¯ã€‚\par}
+
+~%\proclaim Assertion 27. There is an easy way to typeset
+~%the headings of assertions, lemmas, theorems, etc.
+\proclaim 断言 27. 有很简å•çš„方法排版断言ã€å¼•ç†ã€å®šç†ç­‰çš„标题。
+
+~%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.
+这个例å­æ˜¾ç¤ºå¦‚何排版两层的有åºåˆ—表。
+如果需è¦æ›´å¤šå±‚级,唉,你得自己编程。
+\smallskip
+\item {1.} 这是第一个列表项。
+\item {2.} 这是第二个列表项。它由两个段è½ç»„æˆã€‚
+为让你看清楚第二个段è½ä»Žå“ªé‡Œå¼€å§‹ï¼Œæˆ‘们缩进了该段è½ã€‚
+
+~%\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.
+\item{} \indent 第二个段è½ä¸‹è¾¹æœ‰ä¸‰ä¸ªå­åˆ—表项。
+\itemitem {(a)} 这是第一个å­åˆ—表项。
+\itemitem {(b)} 这是第二个å­åˆ—表项。
+\itemitem {(c)} 这是第三个å­åˆ—表项。
+\item {$\bullet$} 这是一个看起æ¥å¾ˆå¥‡æ€ªçš„列表项,
+因为它和其他列表项ä¸åŒã€‚
+\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$}
+\leftline{这是一个左对é½çš„行。$\Leftarrow$}
+\rightline{$\Rightarrow$这是一个å³å¯¹é½çš„行。}
+\centerline{$\Rightarrow$这是一个居中的行。$\Leftarrow$}
+~% Don't try to use these commands within a paragraph.
+% ä¸è¦åœ¨æ®µè½å†…部使用这些命令。
+~%\bye % end the document
+\bye % 结æŸæ­¤æ–‡æ¡£
+:::
+~%\xmpheader !xmpnum/{Using fonts from other sources}% !xmpheaddef
+\xmpheader !xmpnum/{使用其他æ¥æºçš„字体}% !xmpheaddef
+~\xrdef{palatino}
+~\idxref{Palatino 字体}
+~\idxref{Zapf, Hermann}
+~\idxref{计算机现代字体} ^^{\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.
+你并ä¸å±€é™äºŽåªèƒ½ä½¿ç”¨éš \TeX å‘行的 Computer Modern 系列字体。
+从其他很多渠é“你都å¯ä»¥å¾—到一些你å¯èƒ½ä¼šæ›´å–œæ¬¢çš„字体。例如我们
+当å‰é¡µé¢å°±è¢«è®¾ç½®ä¸º 10p 大å°çš„ Palatino Roman 字体。Palatino
+是一ç§ç”± Hermann Zapf 所设计的字体,它被认为是二å世纪最伟大的
+字体设计之一。从本页的输出å¯ä»¥èŽ·å¾—关于这个字体的一些直观å°
+象(由于译本的缘故,本页的字体并未被设为 Palatino 字体)。
+
+~%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.
+字体既å¯ä»¥æ˜¯è½®å»“字体,也å¯ä»¥æ˜¯ä½å›¾å­—体。轮廓字体的æ„æ€æ˜¯å®ƒ
+æ述的是å„个字符的形状,而ä½å›¾å­—体则是标识了æ¯ä¸ªå­—符形状所
+å æ®çš„åƒç´ ç‚¹ã€‚轮廓字体å¯ç”¨æ¥äº§ç”ŸåŒä¸€ç§å­—体的多ç§ä¸åŒå¤§å°ã€‚
+éš \TeX\ 而å‘行的 metafont 程åºæ˜¯ä¸€ä¸ªäº§ç”Ÿä½å›¾å­—体的强大工具,
+而且它并ä¸æ˜¯å”¯ä¸€çš„工具。
+
+~%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
+由于å•ä¸€çš„轮廓字体文件既å¯ç”Ÿæˆå¤šç§ä¸åŒå¤§å°çš„字体,因此很多
+数字字体æ供商倾å‘于仅æ供字体的å•ä¸€æ–‡ä»¶ ——例如 Palatino
+Roman å³æ˜¯å¦‚此。这也许是个ç»æµŽçš„决定,å¯å®ƒå´åŒæ—¶æ˜¯ä¸ªç¾Žå­¦ä¸Š
+çš„é‡å¤§ç‰ºç‰²ã€‚字体无法åšåˆ°åœ¨ä¸æŸå®³å…¶æ˜¾ç¤ºè´¨é‡çš„å‰æ下,线性地
+放大或者缩å°ã€‚一个字符的大字体版本,通常æ¥è¯´ï¼Œä¸Žå°å­—体的版
+本应该有ä¸åŒçš„比例 —— 而如果我们åšæŒè¿™ä¹ˆåšçš„è¯ï¼Œå…¶ç»“果看
+èµ·æ¥å°†ä¸ä¼šé‚£ä¹ˆå¥½çœ‹ã€‚例如:如果将一个字体线性缩å°çš„è¯ï¼Œå…¶å„
+笔画间的间è·å°†ä¼šæ˜¾å¾—过窄,而它的 x-height 值也会显得过å°ã€‚
+
+~%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.
+字体的设计者å¯ä»¥ä¸ºä¸åŒå¤§å°çš„字体设计ä¸åŒçš„轮廓形状,从而
+对这个问题进行弥补,å¯è¿™åŒæ—¶éœ€è¦ä»˜å‡ºé¢å¤–的代价。使用 Metafont
+程åºçš„一个巨大的好处就是å¯ä»¥å°†å­—符符å·å½¢çŠ¶çš„æè¿°å‚数化。
+这样在改å˜å­—体大å°çš„时候,Metafont å¯ä»¥è§†æƒ…况åšä¸€äº›è‡ªåŠ¨å¤„ç†ï¼Œ
+从而得到较好的效果。
+~%\bye % end the document
+\bye % 结æŸæ­¤æ–‡æ¡£
+:::
+~\idxref{蘑è‡}
+~%\xmpheader !xmpnum/{A ruled table}% !xmpheaddef
+\xmpheader !xmpnum/{标线表格}% !xmpheaddef
+\bigskip
+~%\offinterlineskip % So the vertical rules are connected.
+\offinterlineskip % 让竖直标线连接起æ¥
+~% \tablerule constructs a thin rule across the table.
+% \tablerule 构造横穿表格的细标线
+\def\tablerule{\noalign{\hrule}}
+~% \tableskip creates 9pt of space between entries.
+% \tableskip 在å•å…ƒæ ¼ä¹‹é—´ç”Ÿæˆ 9pt 的空隙
+\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.
+% 用 & 分开模版å„列。TeX 将把 # 替æ¢ä¸ºå•å…ƒæ ¼çš„文本。
+% 在表格æ¯è¡Œéƒ½è¦æœ‰ä¸€ä¸ªæ”¯æž¶ï¼ˆstrut);
+% å¦åˆ™ç›’å­å°†ä¸èƒ½è‰¯å¥½æŽ¥åˆï¼Œæ ‡çº¿ä¹Ÿä¸èƒ½è¿žæŽ¥èµ·æ¥ã€‚
+~%\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
+\halign{\tabskip = .7em plus 1em % å„列之间的粘连
+% 用 \vtop 得到表格第一列中的多行å•å…ƒæ ¼ã€‚
+% 让多行文本å³è¾¹ä¸å¯¹é½ï¼Œä¸”ä¸è¿žå­—化。
+ \vtop{\hsize=6pc\pretolerance = 10000\hbadness = 10000
+ \normalbaselines\noindent\it#\strut}%
+ &\vrule #&#\hfil &\vrule #% 标线和中间å„列
+~%% Use \vtop to get whole paragraphs in the last column.
+~% &\vtop{\hsize=11pc \parindent=0pt \normalbaselineskip=12pt
+~% \normalbaselines \rightskip=3pt plus2em #}\cr
+% 用 \vtop 得到表格最åŽä¸€åˆ—中的段è½ã€‚
+ &\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{\hrule height2pt depth2pt \vskip3pt}
+ % 表头行横跨å„列。
+ \multispan5\bf 一些上等的食用蘑è‡\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
+\noalign{\vskip3pt} \tablerule
+ \omit&height 3pt&\omit&&\omit\cr
+ \bf å­¦å&&\bf 常用å&&\omit \bf è¯†åˆ«ç‰¹å¾ \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 Pleurotus ostreatus&&å¹³è‡&&
+ Grows in shelf\kern 1pt like clusters on stumps or logs,
+ % è‹¥ä¸åŠ ä¸Š \kern ,`f' å’Œ `l' 将挨得太近
+ 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 Lactarius hygrophoroides&&稀褶乳è‡&&
+ 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 Morchella esculenta&&羊肚èŒ&&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 Boletus edulus&&美味牛è‚èŒ&&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
+\xmpheader !xmpnum/{排版数学公å¼}% !xmpheaddef
+~^^{æ•°å­¦}
+~%For a spherical triangle with sides $a$, $b$, and $c$, and
+~%opposite angles $\alpha$, $\beta$, and $\gamma$, we have:
+设çƒé¢ä¸‰è§’形的三æ¡è¾¹é•¿åº¦åˆ†åˆ«ä¸º$a$,$b$ å’Œ $c$,
+它们的对角分别为 $\alpha$,$\beta$ 和 $\gamma$,我们有:
+~%$$\cos \alpha = -\cos \beta \cos \gamma +
+~% \sin \beta \sin \gamma \cos \alpha \quad
+~% \hbox{(Law of Cosines)}$$
+$$\cos \alpha = -\cos \beta \cos \gamma +
+ \sin \beta \sin \gamma \cos \alpha \quad
+ \hbox{(余弦定ç†)}$$
+~%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)$}$$
+$$\tan {\alpha \over 2} = \sqrt{
+ {- \cos \sigma \cdot \cos(\sigma - \alpha)} \over
+ {\cos(\sigma - \beta) \cdot \cos(\sigma - \gamma)}},\quad
+ \hbox{其中 $\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$}$$
+我们还有:$$\sin x = {{e^{ix}-e^{-ix}}\over 2i}$$
+且有:
+$$\int _0 ^\infty {{\sin ax \sin bx}\over{x^2}}\,dx
+% 上é¢çš„ \, 生æˆä¸€ä¸ªå°é—´éš”
+ = {\pi a\over 2}, \quad \hbox{如果 $a < b$}$$
+
+~%\noindent The number of combinations ${}_nC_r$ of $n$
+~%things taken $r$ at a time is:
+\noindent 从 $n$ 个物å“ä¸­ä»»å– $r$ 个的组åˆæ•° ${}_nC_r$ 为:
+$$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$:
+$n$ é˜¶è¡Œåˆ—å¼ $D$ 的值:
+$$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:
+定义为下é¢$n!!$项的和:
+$$\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:
+其中 $i$, $j$, \dots,~$k$\/ å–é $1$ 到 $n$ 的所有å¯èƒ½å€¼ï¼Œ
+且当排列 $i$, $j$, \dots,~$k$\/ 为å¶ç½®æ¢æ—¶ä¹˜ç§¯å– $+$ å·ï¼Œ
+å¦åˆ™å– $-$ å·ã€‚此外:
+$$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
+\xmpheader !xmpnum/{更多数学内容}% !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)$$
+$X$ çš„ç»å¯¹å€¼ $|x|$ 定义为::
+$$|x| = \cases{x, &if $x\ge 0$;\cr
+-x,&otherwise.\cr}$$
+现在写一些标å·äº†çš„å…¬å¼ã€‚
+在 $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)$$
+$$[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 å°‘\/}。
+~%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'.
+有时候, $$\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}$$
+% \vphantom 是一个ä¸å¯è§çš„和“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)$$
+结果为 $O(n \log\log n)$. 因此
+$$\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\, \}$$
+且
+$$dx\,dy = r\,dr\,d\theta!negthin.\eqno(4)$$
+满足 $q\le0$ 的所有的 $q$ å¯ä»¥è¢«å†™ä½œï¼š
+$$\{\,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$} . $$
+å› æ­¤
+$$\forall x\exists y\;P(x,y)\Rightarrow
+\exists x\exists y\;P(x,y)$$
+其中
+$$P(x,y) \buildrel \rm def \over \equiv
+\hbox{\rm 任何一个能够得出 $x$ 和 $y$} . $$
+\bye
+:::
diff --git a/info/impatient/concepts.tex b/info/impatient/concepts.tex
new file mode 100644
index 0000000000..2b38675345
--- /dev/null
+++ b/info/impatient/concepts.tex
@@ -0,0 +1,4097 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003, 2014 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 ordinary horizontal mode
+when you're in restricted 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/info/impatient/config.tex b/info/impatient/config.tex
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/info/impatient/config.tex
diff --git a/info/impatient/configure b/info/impatient/configure
new file mode 100644
index 0000000000..6d33a2f9a0
--- /dev/null
+++ b/info/impatient/configure
@@ -0,0 +1,3172 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for teximpatient 2.4.
+#
+# Report bugs to <impatient@tug.org>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org and impatient@tug.org
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='teximpatient'
+PACKAGE_TARNAME='teximpatient'
+PACKAGE_VERSION='2.4'
+PACKAGE_STRING='teximpatient 2.4'
+PACKAGE_BUGREPORT='impatient@tug.org'
+PACKAGE_URL=''
+
+ac_unique_file="book.tex"
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+HTTEX
+PDFTEX
+TEX
+ICON
+MKDIR_P
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures teximpatient 2.4 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/teximpatient]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of teximpatient 2.4:";;
+ esac
+ cat <<\_ACEOF
+
+Report bugs to <impatient@tug.org>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+teximpatient configure 2.4
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by teximpatient $as_me 2.4, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+# Extract the first word of "icon", so it can be a program name with args.
+set dummy icon; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ICON+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ICON in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ICON="$ICON" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ICON="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ICON=$ac_cv_path_ICON
+if test -n "$ICON"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICON" >&5
+$as_echo "$ICON" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "tex", so it can be a program name with args.
+set dummy tex; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_TEX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $TEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_TEX="$TEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_TEX="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+TEX=$ac_cv_path_TEX
+if test -n "$TEX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEX" >&5
+$as_echo "$TEX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "pdftex", so it can be a program name with args.
+set dummy pdftex; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PDFTEX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PDFTEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PDFTEX="$PDFTEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PDFTEX="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PDFTEX=$ac_cv_path_PDFTEX
+if test -n "$PDFTEX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFTEX" >&5
+$as_echo "$PDFTEX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "httex", so it can be a program name with args.
+set dummy httex; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_HTTEX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $HTTEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_HTTEX="$HTTEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_HTTEX="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+HTTEX=$ac_cv_path_HTTEX
+if test -n "$HTTEX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HTTEX" >&5
+$as_echo "$HTTEX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ac_config_files="$ac_config_files Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by teximpatient $as_me 2.4, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <impatient@tug.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+teximpatient config.status 2.4
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h | --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X " :F $CONFIG_FILES "
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+
+
+ esac
+
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/info/impatient/configure.ac b/info/impatient/configure.ac
new file mode 100644
index 0000000000..b3d1286f7b
--- /dev/null
+++ b/info/impatient/configure.ac
@@ -0,0 +1,16 @@
+dnl $Id: configure.ac,v 1.4 2014/11/13 17:08:00 karl Exp $
+dnl public domain
+dnl configure.ac for TeX for the Impatient.
+
+AC_INIT([teximpatient], [2.4], [impatient@tug.org])
+AC_CONFIG_SRCDIR([book.tex])
+
+AC_PROG_INSTALL
+AC_PROG_MKDIR_P
+AC_PATH_PROG([ICON], [icon])
+AC_PATH_PROG([TEX], [tex])
+AC_PATH_PROG([PDFTEX], [pdftex])
+AC_PATH_PROG([HTTEX], [httex])
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/info/impatient/copyrght.tex b/info/impatient/copyrght.tex
new file mode 100644
index 0000000000..6bf93f76e9
--- /dev/null
+++ b/info/impatient/copyrght.tex
@@ -0,0 +1,48 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003, 2013 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, 2013 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/info/impatient/eplain.tex b/info/impatient/eplain.tex
new file mode 100644
index 0000000000..19ad8cf59f
--- /dev/null
+++ b/info/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/info/impatient/errata.future b/info/impatient/errata.future
new file mode 100644
index 0000000000..78ed14aba3
--- /dev/null
+++ b/info/impatient/errata.future
@@ -0,0 +1,268 @@
+$Id: errata.future,v 1.2 2011/01/27 22:16:24 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. :) See the README.
+
+
+- incorporate the images in the artwork/ subdirectory.
+
+- discuss CTAN, other Internet resources, plain or generic macro
+ packages, and so on.
+
+- extend with descriptions of e-TeX, pdftex, omega.
+
+- html output, perhaps using tex2page.
+ http://www.ccs.neu.edu/home/dorai/tex2page/tex2page-doc.html
+ (tex4ht did nothing useful with it, but maybe with work ...)
+
+
+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/info/impatient/errors.tex b/info/impatient/errors.tex
new file mode 100644
index 0000000000..f2e5977336
--- /dev/null
+++ b/info/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/info/impatient/examples.tex b/info/impatient/examples.tex
new file mode 100644
index 0000000000..1b244362d6
--- /dev/null
+++ b/info/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/info/impatient/fdl.tex b/info/impatient/fdl.tex
new file mode 100644
index 0000000000..a352e69bd3
--- /dev/null
+++ b/info/impatient/fdl.tex
@@ -0,0 +1,518 @@
+% 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.3, 3 November 2008
+
+ Copyright \copyright\ 2000,2001,2002,2007,2008 Free Software
+ Foundation, Inc.
+
+{\tt <http://fsf.org/>}\\
+ 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.
+
+The "publisher" means any person or entity that distributes copies of
+the Document to the public.
+
+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 under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+
+\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. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+"Massive Multiauthor Collaboration" (or "MMC") contained in the site
+means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in
+part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole or
+in part into the MMC, (1) had no cover texts or invariant sections, and
+(2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+
+% 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.3
+ 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/info/impatient/fonts.tex b/info/impatient/fonts.tex
new file mode 100644
index 0000000000..ad10cf4e45
--- /dev/null
+++ b/info/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/info/impatient/fr/README b/info/impatient/fr/README
new file mode 100644
index 0000000000..8622be0fe6
--- /dev/null
+++ b/info/impatient/fr/README
@@ -0,0 +1,8 @@
+Public domain. (Originally written by Karl Berry, 2004.)
+
+This French translation of TeX for the Impatient was made by Marc
+Chaudemanche and colleagues in 2004.
+
+TeX for the Impatient is now a GNU project, and the development sources,
+contact information, and other project details are available at
+http://savannah.gnu.org/projects/teximpatient.
diff --git a/info/impatient/fr/config.tex b/info/impatient/fr/config.tex
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/info/impatient/fr/config.tex
diff --git a/info/impatient/fr/eplain.tex b/info/impatient/fr/eplain.tex
new file mode 100644
index 0000000000..19ad8cf59f
--- /dev/null
+++ b/info/impatient/fr/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/info/impatient/fr/fbackm.tex b/info/impatient/fr/fbackm.tex
new file mode 100644
index 0000000000..58bb6aece6
--- /dev/null
+++ b/info/impatient/fr/fbackm.tex
@@ -0,0 +1,103 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+%
+% Backmatter.
+
+\input fmacros
+
+\ifcompletebook
+ \noheadlinetrue\pagebreak
+ \ifodd\pageno\else \noheadlinetrue\pagebreak \fi
+\fi
+
+\edgetabsfalse
+
+% About the authors.
+%
+\backsinkage
+\leftline{\sectionfonts \`a propos des auteurs}
+\vskip\belowsectionskip
+
+%\noindent
+Paul W. Abrahams, Sc.D., CCP, est consultant informatique et ancien
+pr\'esident de l'Association for Computing Machinery. Ses sp\'ecialit\'es
+sont la programmation de langage informatique, la conception,
+l'impl\'ementation de syst\`emes logiciels et l'\'ecriture technique. Il a
+re\c cu son doctorat de math\'ematiques du Massachusetts Institute of
+Technology en 1963, \'etudiant l'intelligence artificielle sous la tutelle
+de Marvin Minsky et John McCarthy. Il est un des concepteurs du premier
+syst\`eme {\sc LISP} et concepteur du syst\`eme {\sc CIMS PL/I},
+d\'evelopp\'e quand il \'etait professeur \`a l'universit\'e de New York.
+Plus r\'ecemment, il a con\c cu {\sc SPLASH}, un langage de programmation
+syst\`eme pour des hackers de logiciel. Paul r\'eside \`a Deerfield,
+Massachusetts, o\`u il \'ecrit, bidouille, fait de la randonn\'ee, chasse
+les champignons sauvages et \'ecoute de la musique classique.
+
+Kathryn A. Hargreaves a re\c cu son M.S. degree en informatique de
+l'universit\'e du Massachusetts, Boston, en ao\^ut 1989. Ses
+sp\'ecialit\'es sont la typographie num\'erique et la vision humaine. Elle
+a d\'evelopp\'e un ensemble de programmes pour produire une police
+num\'erique de haute qualit\'e et librement distribuable pour la Free
+Software Foundation et a \'egalement travaill\'e avec Robert~A. Morris en
+tant qu'Adjunct Research Associate. En 1986 elle a accompli le programme de
+r\'e-entr\'ee en informatique pour les femmes et les minorit\'es \`a
+l'universit\'e de Californie \`a Berkeley, o\`u elle a \'egalement
+travaill\'e dans le \TeX\ research group sous Michael Harrison. Elle a
+\'etudi\'e la conception de police de caract\`ere avec Don Adleta, Andr\'e
+G\"urtler, et Christian Mengelt \`a la Rhode Island School of Design.
+Typographe, elle a travaill\'e chez Headliners\slash Identicolor, \`a San
+Francisco, et chez Futur Studio, Los Angeles, deux soci\'et\'es
+typographiques majeures. Elle a obtenu \'egalement un M.F.A. en
+Peinture\slash Sculpture\slash Art Graphiques de l'universit\'e de
+Californie \`a Los Angeles. Kathy peint des aquarelles, con\c coit des
+polices, joue du piano et lit la critique de film f\'eministe.
+
+Comme Kathy, Karl Berry a re\c cu son M.S. degree en informatique \`a
+l'universit\'e du Massachusetts, Boston, en ao\^ut 1989. Il a \'egalement
+travaill\'e pour la Free Software Foundation, a fait de la recherche avec
+Morris et a \'etudi\'e avec Adleta, G\"urtler, et Mengelt. Il avait
+commenc\'e \`a travailler avec \TeX\ depuis 1983 et a install\'e et a
+maintenu le syst\`eme \TeX\ dans un certain nombre d'universit\'es. Il
+\'etait le mainteneur du syst\`eme Web2c d\'evelopp\'e par Tim Morgan
+pendant un certain nombre d'ann\'ees, parmi d'autres projets \TeX. Il est
+devenu pr\'esident du \TeX\ Users Group en 2003.
+\vfill\eject
+\noheadlinetrue\pagebreak
+
+
+% Colophon.
+%
+\backsinkage
+\leftline{\sectionfonts Colophon}
+\vskip\belowsectionskip
+
+%\noindent
+Ce livre a \'et\'e compos\'e en utilisant \TeX\ (naturellement),
+d\'evelopp\'e par Donald~E. Knuth. Le texte principal est compos\'e en
+Computer Modern, \'egalement con\c cu par Knuth. Les en-t\^etes du livre
+original ont \'et\'e compos\'ees en Zapf Humanist (la version Bitstream
+d'Optima), con\c cu par Hermann Zapf.
+
+Le papier \'etait du Amherst Ultra Matte 45 livres. L'impression et la
+reliure ont \'et\'e faits par Arcadia Graphics-Halliday. La sortie de
+photocomposeuse a \'et\'e produite \`a type 2000,~Inc., \`a Mill Valley,
+Californie. Les preuves ont \'et\'e faites sur une Apple LaserWriter plus
+et sur une Hewlett Packard LaserJet~II\null.
+
+Les r\'ef\'erences crois\'ees, l'indexage et la table des mati\`eres ont
+\'et\'e faits m\'ecaniquement, en utilisant les macros de la
+\chapterref{eplain} ainsi que des macros additionnelles \'ecrites
+sp\'ecialement pour ce livre. La production de l'index a \'et\'e
+r\'ealis\'ee par un programme additionnel \'ecrit en Icon.
+
+
+\noheadlinetrue
+\iftrue
+ \pagebreak
+ \printconceptpage
+\fi
+
+\byebye
+
diff --git a/info/impatient/fr/fbook.pdf b/info/impatient/fr/fbook.pdf
new file mode 100644
index 0000000000..e9727146f6
--- /dev/null
+++ b/info/impatient/fr/fbook.pdf
Binary files differ
diff --git a/info/impatient/fr/fbook.tex b/info/impatient/fr/fbook.tex
new file mode 100644
index 0000000000..f1dc3ca071
--- /dev/null
+++ b/info/impatient/fr/fbook.tex
@@ -0,0 +1,50 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+% Top-level control.
+%
+% commentez la ligne suivante (\language=1) pour une compilation avec tex ou pdftex
+% elle n'est utilisée qu'avec bplain (ou pdfbplain)
+\language=1
+\input fmacros
+% 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 ffrontm
+% (not for web) \edgetabstrue
+\settabdepth{\bigtab}
+\input fusebook
+\input fusingtex
+\input fexamples
+\nextedgetab
+\input fconcept
+\nextedgetab
+\settabdepth{\smalltab}
+\input fparas
+\nextedgetab
+\input fpages
+\nextedgetab
+\input fmodes
+\nextedgetab
+\input fmath
+\nextedgetab
+\input fgenops
+\nextedgetab
+\settabdepth{\bigtab}
+\input ftips
+\input ferrors
+\input fusermacs
+\nextedgetab
+\input fcapsule
+\nextedgetab
+\backmatter
+\input fdl
+\input findex
+\edgetabsfalse
+\input fbackm
+
+\bye
diff --git a/info/impatient/fr/fcapsule.tex b/info/impatient/fr/fcapsule.tex
new file mode 100644
index 0000000000..0fdceeca20
--- /dev/null
+++ b/info/impatient/fr/fcapsule.tex
@@ -0,0 +1,1123 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter{Sommaire \linebreak des commandes}
+
+\chapterdef{capsule}
+
+Cette section contient des descriptions sur une ligne des commandes primitives de\TeX\
+et des commandes \TeX\ d\'efinies dans \plainTeX. Cela inclut les s\'equences de
+contr\^ole et les caract\`eres
+sp\'eciaux.
+Nous avons omis les commandes qui ne sont qu'\`a l'usage interne de la d\'efinition
+\plainTeX\ (\knuth{annexe~B}{}).
+Notez que les caract\`eres ordinaires
+comme `|a|' ou `|6|' sont aussi des commandes, et m\^eme les plus communes
+\seeconcept{caract\`ere}.
+
+Pour rendre la desciption la plus br\`eve possible, nous avons adopt\'e
+certaines conventions~:
+
+\ulist
+
+\li Un ast\'erisque devant une commande indique que la commande est une primitive,
+^^{primitive//commande} c'est-\`a-dire, construite dans le programme \TeX\
+\seeconcept{primitive}.
+
+\li Les mots ``musique'', ``ponctuation'', ``fonction'',
+``symbole'', ``relation'', ``d\'elimiteur'' ou ``op\'erateur'' dans une description de
+commande impliquent que la commande n'est l\'egale qu'en mode math\'ema\-tique.
+
+\li Le verbe ``afficher'' s'applique \`a l'information que \TeX\ envoit au ^{\logfile},
+sauf indication contraire. Si |\tracingonline| est positif, \TeX\ envoit \'egalement
+cette information sur le terminal. Nous utilisons le mot ``affichage'' pour nous
+r\'ef\'erer aux affichages math\'ema\-tiques (voir \xref{math\'ematique affich\'ee}),
+c'est-\`a-dire, \`a ce qui se trouve entre des |$$|.
+
+\li La phrase ``produit $x$'' indique que la commande composera
+$x$ et mettra le r\'esultat dans une bo\^\i te.
+Nous omettons parfois ``produit'' quand l'omission ne peut pas porter \`a
+confusion. Par exemple, nous d\'ecrivons |\alpha| comme ``lettre Grecque
+math\'ematique $\alpha$'' et non ``produit la lettre grecque math\'ematique $\alpha$''.
+\margin{Remove explanations of ``space'' and ``glue''}
+
+\endulist
+
+\begincapsum
+
+{\catcode `@ = \letter
+\caplineout {\\\visiblespace} {espace inter mot}*{\@space}}%
+ {\catcode `\ =\other\ctsidxref{ }}
+\capcs ! {espace fin n\'egatif en math\'ematique}{}{\@shriek}
+\capcs " {accent tr\'ema en texte, comme dans \"o}{}{\@quote}
+\capactwo # {introduit un param\`etre de macro ou indique o\`u le texte
+source va dans un pr\'eambule d'alignement}{}{@msharp:@asharp}
+\capcs # {produit le caract\`ere \# de la police courante}{}{\@pound}
+\capac $ {commence ou finit une formule math\'ematique}{}{mathform}
+\capcs $ {produit le caract\`ere \$ de la police courante}{}{\@bucks}
+\capac % {commence un commentaire}*{commentaires}
+\capcs % {produit le caract\`ere \% de la police courante}{}{\@percent}
+\capac & {s\'epare les mod\`eles et les entr\'ees dans un alignement}{}{@and}
+\capcs & {produit le caract\`ere \& de la police courante}{}{\@and}
+\capac ' {symbole prime en math\'ematique, comme dans $p'$}{}{@prime}
+\capcs ' {accent aigu en texte, comme dans \'e}{}{\@prime}
+\capcs * {symbole multiplication qui autorise une coupure de ligne}{}{\@star}
+\capcs + {d\'ebut d'une ligne tabul\'ee}{}{\@plus}
+\capcs , {espace fin en math\'ematique}{}{\@comma}
+\capcs - {sp\'ecifie un point de c\'esure l\'egal}*{\@minus}
+\capcs . {accent point en texte, comme dans \.n}{}{\@dot}
+\capcs / {correction italique pour le caract\`ere pr\'ec\'edent}*{\@slash}
+\capcs ; {espace \'epaissi en math\'ematique}{}{\@semi}
+\capcs = {accent macron en texte, comme dans \=r}{}{\@equal}
+\capac \ {d\'ebute une s\'equence de contr\^ole}*{@backslash}
+\capcs > {espace moyen en math\'ematique}{}{\@greater}
+\capac ^ {produit une sous-formule sp\'ecifi\'ee en exposant}{}{@hat}
+\capcs ^ {accent circonflexe en texte, comme dans \^o}{}{\@hat}
+{\catcode `@ = \letter
+\caplineout {\twocarets L}{\'equivalent \`a la primitive |\\par|}
+ {}{\@par}\ttidxref{^^L}
+\caplineout {\twocarets M}{une fin de ligne}*{@newline}\ttidxref{^^M}
+}%
+\capac _ {produit une sous-formule sp\'ecifi\'ee en indice}{}{@underscore}
+\capcs _ {soulignement~: \_}{}{\@underscore}
+%x \capac ` {in a \<number> context, \ascii\ code for character that follows}*{@lquote}
+\capcs ` {accent grave en texte, comme dans \`e}{}{\@lquote}
+\capac { {d\'ebute un groupe}{}{@lbrace}
+\capcs { {d\'elimiteur accolade ouvrante en math\'ematique~ $\{$}{}{\@lbrace}
+\capcs | {lignes parall\`eles en math\'ematique~: $\Vert$}{}{\@bar}
+\capac } {fin d'un groupe}{}{@rbrace}
+\capcs } {d\'elimiteur accolade fermante en math\'ematique~: $\}$}{}{\@rbrace}
+\capac ~ {espace inter-mot sur lequel une ligne ne sera pas coup\'ee}{}{@not}
+\capcs ~ {accent tilde en texte, comme dans \~a}{}{\@not}
+\capcs aa {lettre scandinave~: \aa}{}{}
+\capcs AA {lettre scandinave~: \AA}{}{}
+\capcs above {produit une fraction avec une barre d'\'epaisseur sp\'ecifi\'ee}*{}
+\capcs abovedisplayshortskip {ressort que \TeX\ ins\'ere avant un affichage quand la
+ ligne pr\'ec\'edente d\'epasse l'indentation d'affichage, par
+ d\'efaut 0\pt\ plus 3\pt}*{}
+\capcs abovedisplayskip {ressort que \TeX\ ins\'ere avant un affichage quand la
+ ligne pr\'ec\'edente ne d\'epasse pas l'indentation d'affichage, par default 12\pt\
+ plus 3\pt\ minus 9\pt}*{}
+\capcs abovewithdelims {produit une fraction avec une barre d'\'epaisseur sp\'ecifi\'ee
+ et entour\'ee des d\'elimiteurs sp\'ecifi\'es}*{}
+\capcs accent {met l'accent sp\'ecifi\'e sur le caract\`ere suivant}*{}
+\capcs active {code de cat\'egorie pour des caract\`eres actifs, c'est-\`a-dire, le nombre $13$}{}{}
+\capcs acute {accent aigu en math\'ematique, comme dans $\acute x$}{}{}
+\capcs adjdemerits {d\'em\'erites additionnels pour une coupure de ligne qui seront mises dans
+ des lignes adjacentes avec un espacement de mot incompatible, par d\'efaut~10000}*{}
+\capcs advance {ajoute un nombre \`a un registre |\\count|}*{}
+\capcs advancepageno {si |\\pageno| est positif, ajoute un~;
+ s'il est n\'egatif, soustrait un}{}{}
+\capcs ae {ligature \ae}{}{}
+\capcs AE {ligature \AE}{}{}
+\capcs afterassignment {attend, pour d\'evelopper le token suivant, que
+ l'assignement d'apr\`es soit effectu\'e}*{}
+\capcs aftergroup {attend, pour d\'evelopper le token suivant, la fin
+ du groupe courant}*{}
+\capcs aleph {lettre h\'ebra\^\i que seule en math\'ematique~: $\aleph$}{}{}
+\capcstwo allowbreak {fait |\\penalty0|, c'est-\`a-dire, autorise une coupure de ligne ou
+ de page l\`a o\`u elle ne devrait pas \^etre}{}{hallowbreak:vallowbreak}
+\capcs alpha {lettre math\'ematique grecque $\alpha$}{}{}
+\capcs amalg {op\'erateur d'amalgamation~: $\amalg$}{}{}
+\capcs angle {symbole d'angle~: $\angle$}{}{}
+\capcs approx {relation d'approximation~: $\approx$}{}{}
+\capcs arccos {fonction arc cosinus~: $\arccos$}{}{}
+\capcs arcsin {fonction arc sinus~: $\arcsin$}{}{}
+\capcs arctan {fonction arc tangente~: $\arctan$}{}{}
+\capcs arg {fonction argument (phase)~: $\arg$}{}{}
+\capcs arrowvert {partie verticale d'une double fl\`eche extensible}{}{}
+\capcs Arrowvert {partie verticale d'une fl\`eche simple extensible}{}{}
+\capcs ast {op\'erateur ast\'erisque~: $\ast$}{}{}
+\capcs asymp {relation asymptote~: $\asymp$}{}{}
+\capcs atop {produit une fraction sans barre de fraction}*{}
+\capcs atopwithdelims {produit une fraction sans barre de fraction et
+ entour\'ee des d\'elimiteurs sp\'ecifi\'es}*{}
+\capcs b {accent barre du dessous en math\'ematique, comme dans $\b x$}{}{}
+\capcs backslash {symbole antislash~: $\backslash$}{}{}
+\capcs badness {la m\'ediocrit\'e du ressort mis dans la derni\`ere bo\^\i te
+ fabriqu\'ee}*{}
+\capcs bar {accent barre en math\'ematique, comme dans $\bar x$}{}{}
+\capcs baselineskip {ressort pour la distance verticale normale entre une ligne de base
+ et la suivante, par d\'efaut 12\pt}*{}
+\capcs batchmode {ne s'arr\^ete pas sur les erreurs et n'\'ecrit rien sur le terminal}*{}
+\capcs begingroup {d\'ebute un groupe termin\'e par |\\endgroup|}*{}
+\capcs beginsection {d\'ebute une subdivision majeure d'un document}{}%
+ {\@beginsection}
+\capcs belowdisplayshortskip {ressort que \TeX\ ins\`ere apr\`es un affichage quand la
+ ligne pr\'ec\'edente d\'epasse l'indentation de l'affichage,
+ par d\'efaut 7\pt\ plus 0.3\pt\ minus 4\pt}*{}
+\capcs belowdisplayskip {ressort que \TeX\ ins\`ere apr\`es un affichage quand la
+ ligne pr\'ec\'edente ne d\'epasse pas l'indentation de l'affichage,
+ par d\'efaut 12\pt\ plus 3\pt\ minus 9\pt}*{}
+\capcs beta {lettre grecque math\'ematique $\beta$}{}{}
+\capcs bf {utilise le gras, c'est-\`a-dire, fait |\\tenbf\\fam=\\bffam|}{}{}
+\capcs bffam {famille grasse en math\'ematique}{}{}
+\capcs bgroup {caract\`ere de d\'ebut de groupe implicite}{}{}
+\capcs big {rend le d\'elimiteur sp\'ecifi\'e plus grand qu'\`a l'ordinaire, mais
+ encore assez petit pour du texte}{}{}
+\capcs Big {rend le d\'elimiteur sp\'ecifi\'e haut de 11.5\pt}{}{}
+\capcs bigbreak {indique une coupure de page d\'esirable avec |\\penalty-200|
+ et produit un ressort |\\bigskipamount|}{}{}
+\capcs bigcap {grand op\'erateur cap (non, cela ne produit pas une grande
+ lettre capitale~!)~: $\bigcap$}{}{}
+\capcs bigcirc {grand op\'erateur cercle~: $\bigcirc$}{}{}
+\capcs bigcup {grand op\'erateur coupe~: $\bigcup$}{}{}
+\capcs bigg {rend le d\'elimiteur sp\'ecifi\'e haut de 14.5\pt}{}{}
+\capcs Bigg {rend le d\'elimiteur sp\'ecifi\'e haut de 17.5\pt}{}{}
+\capcs biggl {taille comme |\\bigg|, mais espac\'e comme une ouverture}{}{}
+\capcs Biggl {taille comme |\\Bigg|, mais espac\'e comme une ouverture}{}{}
+\capcs biggm {taille comme |\\bigg|, mais espac\'e comme une relation}{}{}
+\capcs Biggm {taille comme |\\Bigg|, mais espac\'e comme une relation}{}{}
+\capcs biggr {taille comme |\\bigg|, mais espac\'e comme une fermeture}{}{}
+\capcs Biggr {taille comme |\\Bigg|, mais espac\'e comme une fermeture}{}{}
+\capcs bigl {taille comme |\\big|, mais espac\'e comme une ouverture}{}{}
+\capcs Bigl {taille comme |\\Big|, mais espac\'e comme une ouverture}{}{}
+\capcs bigm {taille comme |\\big|, mais espac\'e comme une relation}{}{}
+\capcs Bigm {taille comme |\\Big|, mais espac\'e comme une relation}{}{}
+\capcs bigodot {grand op\'erateur cercle point\'e~: $\bigodot$}{}{}
+\capcs bigoplus {grand op\'erateur cercle plus~: $\bigoplus$}{}{}
+\capcs bigotimes {grand op\'erateur cercle multipli\'e~: $\bigotimes$}{}{}
+\capcs bigr {taille comme |\\big|, mais espac\'e comme une fermeture}{}{}
+\capcs Bigr {taille comme |\\Big|, mais espac\'e comme une fermeture}{}{}
+\capcs bigskip {produit un ressort |\\bigskipamount|}{}{}
+\capcs bigskipamount {ressort pour une grand saut vertical, par d\'efaut 12\pt\
+ plus 4\pt\ minus 4\pt}{}{}
+\capcs bigsqcup {grand op\'erateur en coupe carr\'e~: $\bigsqcup$}{}{}
+\capcs bigtriangledown {op\'erateur en triangle pointant vers le bas~:
+ $\bigtriangledown$}{}{}
+\capcs bigtriangleup {op\'erateur en triangle pointant vers le haut~: $\bigtriangleup$}{}{}
+\capcs biguplus {grand op\'erateur en coupe avec plus~: $\biguplus$}{}{}
+\capcs bigvee {grand op\'erateur logique ``ou''~: $\bigvee$}{}{}
+\capcs bigwedge {grand op\'erateur logique ``et''~: $\bigwedge$}{}{}
+\capcs binoppenalty {p\'enalit\'e suppl\'ementaire pour une coupure apr\`es un op\'erateur
+ math\'ematique binaire, par d\'efaut~700}*{}
+\capcs bmod {op\'erateur modulus, comme dans $n \bmod 2$}{}{}
+\capcs bordermatrix {produit une matrice avec des labels de rang\'ees et de colonnes}{}{}
+\capcs bot {symbole du bas d'un treillis ~: $\bot$}{}{}
+\capcs botmark {le dernier \'el\'ement marqu\'e de la page qui vient d'\^etre mis en bo\^\i te}*{}
+\capcs bowtie {relation en n\oe ud papillon~: $\bowtie$}{}{}
+\capcs box {affiche la bo\^\i te d'un registre de bo\^\i te sp\'ecifi\'e
+ dans la liste courante, et vide le registre}*{}
+\capcs boxmaxdepth {profondeur maximale des vbox, par d\'efaut |\\maxdimen|}*{}
+\capcs brace {|\char36 n\\brace k\char36| produit
+ une notation entre accolade~: $n \brace k$}{}{}
+\capcs bracevert {morceau vertival d'une grande accolade extensible }{}{}
+\capcs brack {|\char36 n\\brack k\char36| produit une notation entre crochets~: $n \brack k$}{}{}
+\capcstwo break {fait |\\penalty-10000|, c'est-\`a-dire., force une coupure de ligne
+ ou de page}{}{hbreak:vbreak}
+\capcs breve {accent bref en math\'ematique, comme dans $\breve x$}{}{}
+\capcs brokenpenalty {p\'enalit\'e pour une coupure de ligne sur un \'el\'ement discr\'etionnaire, par
+ d\'efaut~100}*{}
+\capcs buildrel {produit une formule sp\'ecifi\'ee sur la relation sp\'ecifi\'e}{}{}
+\capcs bullet {operateur bullet ~: $\bullet$}{}{}
+\capcs bye {|\\vfill| la derni\`ere page avec de l'espace blanc, la |\\supereject|,
+ et |\\end| l'ex\'ecution}{}{\@bye}
+\capcs c {accent c\'edille en texte, comme dans \c c}{}{}
+\capcs cal {utilise une police calligraphique pour des lettres capitales en math\'ematique,
+ comme dans $\cal XYZ$}{}{}
+\capcs cap {op\'erateur cap~: $\cap$}{}{}
+\capcs cases {produit des cas en math\'ematique, comme dans $\bigl\{{\cdots\atop\cdots}$}{}{}
+\capcs catcode {le code de cat\'egorie d'un caract\`ere sp\'ecifi\'e}*{}
+\capcs cdot {op\'erateur point centr\'e~: $\cdot$}{}{}
+\capcs cdotp {ponctuation point centr\'e~: $\cdotp$}{}{}
+\capcs cdots {points centr\'es en math\'ematique~: $\cdots$}{}{}
+\capcs centerline {produit une ligne avec son texte centr\'e}{}{}
+\capcs char {produit le caract\`ere de la police courante avec le code
+ sp\'ecifi\'e}*{}
+\capcs chardef {d\'efinit une s\'equence de contr\^ole sp\'ecifi\'ee comme \'etant un code de
+ caract\`ere, un nombre entre 0 et $255$}*{}
+\capcs check {accent tch\`eque en math\'ematique, comme dans $\check x$}{}{}
+\capcs chi {lettre grecque math\'ematique $\chi$}{}{}
+\capcs choose {|\char36 n\\choose k\char36| produit une notation combinatoire~:
+ $n \choose k$}{}{}
+\capcs circ {op\'eration cercle~: $\circ$}{}{}
+\capcs cleaders {produit une r\`eglure avec la moiti\'e de l'espace restant avant
+ la premi\`ere bo\^\i te et l'autre moiti\'e apr\`es la derni\`ere}*{}
+\capcs cleartabs {efface toutes les tabulations pour des alignements tabul\'es}{}{}
+\capcs closein {ferme un flot d'entr\'ee sp\'ecifi\'e}*{}
+\capcs closeout {ferme un flot de sortie sp\'ecifi\'e}*{}
+\capcs clubpenalty {p\'enalit\'e additionnelle pour une ligne seule restante avant
+ une coupure de page, par d\'efaut~150}*{}
+\capcs clubsuit {symbole tr\`efle~: $\clubsuit$}{}{}
+\capcs colon {symbole : en math\'ematique~: $:$}{}{}
+\capcs cong {relation congruence~: $\cong$}{}{}
+\capcs coprod {op\'erateur co-produit~: $\coprod$}{}{}
+\capcs copy {comme |\\box|, mais n'efface pas le registre}*{}
+\capcs copyright {marque de copyright~: \copyright}{}{}
+\capcs cos {fonction cosinus~: $\cos$}{}{}
+\capcs cosh {fonction cosinus hyperbolique~: $\cosh$}{}{}
+\capcs cot {fonction cotangente~: $\cot$}{}{}
+\capcs coth {fonction cotangente hyperbolique~: $\coth$}{}{}
+\capcs count {le registre entier sp\'ecifi\'e}*{}
+\capcs countdef {d\'efinit une s\'equence de contr\^ole sp\'ecifi\'ee comme \'etant un nombre
+ correspondant \`a un registre |\\count|}*{}
+\capcs cr {termine une rang\'ee (ou une colonne) dans un alignement}*{}
+\capcs crcr {ne fait rien si la derni\`ere commande \'etait |\\cr| ou |\\noalign|~;
+ autrement, \'equivalent \`a |\\cr|}*{}
+\capcs csc {fonction co-s\'ecante~: $\csc$}{}{}
+\capcs csname {d\'ebute un nom de s\'equence de contr\^ole devant \^etre termin\'e par |\\endcsname|}*{}
+\capcs cup {op\'erateur cup~: $\cup$}{}{}
+\capcs d {accent point en dessous en texte, comme dans \d r}{}{}
+\capcs dag {symbole dague en texte~: \dag}{}{}
+\capcs dagger {op\'erateur dague en math\'ematique~: $\dagger$}{}{}
+\capcs dashv {relation touren \`a droite~: $\dashv$}{}{}
+\capcs day {jour courant du mois, comme un nombre}*{}
+\capcs ddag {symbole double dague en texte~: \ddag}{}{}
+\capcs ddagger {op\'erateur double dague en math\'ematique~: $\ddagger$}{}{}
+\capcs ddot {accent deux points en math\'ematique~: $\ddot x$}{}{}
+\capcs ddots {points en diagonale en math\'ematique~: \smash{$\ddots$}}{}{}
+\capcs deadcycles {nombre d'initialisations d'|\\output| depuis le dernier
+ |\\shipout|}*{}
+\capcs def {d\'efini une s\'equence de contr\^ole comme \'etant une macro}*{}
+\capcs defaulthyphenchar {code du caract\`ere de c\'esure par d\'efaut}*{}
+\capcs defaultskewchar {code caract\`ere accent par d\'efaut }*{}
+\capcs deg {fonction degr\'e~: $\deg$}{}{}
+\capcs delcode {le code d\'elimiteur d'un caract\`ere sp\'ecifi\'e}*{}
+\capcs delimiter {produit un d\'elimiteur sp\'ecifi\'e}*{}
+\capcs delimiterfactor {1000 fois le ratio de la taille minimum d'un
+ d\'elimiteur par rapport \`a la taille qui recouvrirait compl\`etement la formule, par
+ d\'efaut~901}*{}
+\capcs delimitershortfall {diff\'erence minimum entre une hauteur de formule et
+ une hauteur de d\'elimiteur, par d\'efaut 5\pt}*{}
+\capcs delta {lettre grecque math\'ematique $\delta$}{}{}
+\capcs Delta {lettre grecque math\'ematique $\Delta$}{}{}
+\capcs det {fonction d\'eterminant~: $\det$}{}{}
+\capcs diamond {op\'erateur diamant~: $\diamond$}{}{}
+\capcs diamondsuit {symbole carr\'e~: $\diamondsuit$}{}{}
+\capcs dim {fonction dimension~: $\dim$}{}{}
+\capcs dimen {le registre de dimension sp\'ecifi\'e}*{}
+\capcs dimendef {d\'efinit une s\'equence de contr\^ole sp\'ecifi\'ee comme \'etant un nombre
+ correspondant \`a un registre |\\dimen|}*{}
+\capcs discretionary {sp\'ecifie trois textes, les deux premiers pour avant et
+ apr\`es une coupure de ligne, le troisi\`eme quand il n'y a pas de coupure de ligne}*{}
+\capcs displayindent {\TeX\ met ceci pour l'indentation d'un affichage}*{}
+\capcs displaylimits {place des limites sur et sous des op\'erateurs seulement en style
+ d'affichage}*{}
+\capcs displaylines {produit un affichage multi-lignes sp\'ecifi\'e avec chaque
+ ligne centr\'ee}{}{}
+\capcs displaystyle {utilise la taille displaystyle dans une formule}*{}
+\capcs displaywidowpenalty {p\'enalit\'e pour une ligne seule d\'ebutant une page
+ juste avant un affichage, par d\'efaut~50}*{}
+\capcs displaywidth {\TeX\ met ceci pour la largeur d'un affichage}*{}
+\capcs div {op\'erateur division~: $\div$}{}{}
+\capcs divide {divise un registre |\\count| sp\'ecifi\'e par un entier sp\'ecifi\'e}*{}
+\capcs dot {accent point en math\'ematique, comme dans $\dot x$}{}{}
+\capcs doteq {relation d'\'egalit\'e point\'ee~: $\doteq$}{}{}
+\capcs dotfill {remplit un espace horizontal d\'elimit\'e avec des points}{}{}
+\capcs dots {ellipse pour des suites~: $x_1$, \dots, $x_n$}{}{}
+\capcs doublehyphendemerits {d\'em\'erites pour deux lignes cons\'ecutives se terminant
+ par de c\'esures, par d\'efaut~10000}*{}
+\capcs downarrow {relation~: $\downarrow$}{}{}
+\capcs Downarrow {relation~: $\Downarrow$}{}{}
+\capcs downbracefill {remplit la hbox inclue avec une accolade vers le bas ~:
+ \hbox to 3.5em{\downbracefill}}{}{}
+\capcs dp {profondeur de la bo\^\i te d'un registre de bo\^\i te sp\'ecifi\'e}*{}
+\capcs dump {termine l'ex\'ecution et produit un fichier de format}*{}
+\capcs edef {d\'efinit une s\'equence de contr\^ole comme \'etant une macro,
+ d\'eveloppant imm\'ediatement le texte de remplacement}*{}
+\capcs egroup {caract\`ere de fin de groupe implicite}{}{}
+\capcs eject {termine le paragraphe courant et force une coupure de page,
+ en \'etirant la page courante}{}{}
+\capcs ell {lettre ``l'' manuscrite en math\'ematique~: $\ell$}{}{}
+\capcs else {cas faux ou par d\'efaut pour une condition}*{\@else}
+\capcs emergencystretch {\'etirement suppl\'ementaire ajout\'e \`a toute ligne si
+ |\\tol\-er\-ance| n'est pas satisfait}*{}
+\capcs empty {macro dont le d\'eveloppement ne fait rien}{}{}
+\capcs emptyset {symbole d'ensemble vide~: $\emptyset$}{}{}
+\capcs end {|\\output| la derni\`ere page et termine l'ex\'ecution}*{}
+\capcs endcsname {termine un nom de s\'equence de contr\^ole commenc\'e par
+ |\\csname|}*{}
+\capcs endgraf {\'equivalent \`a la primitive |\\par|}{}{}
+\capcs endgroup {termine un groupe d\'ebut\'e par |\\begingroup|}*{}
+\capcs endinput {termine l'entr\'ee du fichier courant}*{}
+\capcs endinsert {fin d'insertion}{}{}
+\capcs endline {\'equivalent \`a la primitive |\\cr|}{}{}
+\capcs endlinechar {caract\`ere que \TeX\ ins\`ere \`a la fin de chaque ligne
+ entr\'ee, par d\'efaut |\twocarets M|}*{}
+\capcs enskip {ressort horizontal de largeur \frac1/2\em}{}{}
+\capcs enspace {cr\'enage de \frac1/2\em}{}{}
+\capcs epsilon {lettre grecque math\'ematique $\epsilon$}{}{}
+\capcs eqalign {produit un affichage multi-lignes sp\'ecifi\'e dont les parties indiqu\'ees
+ sont align\'ees verticalement}{}{}
+\capcs eqalignno {produit un affichage multi-lignes sp\'ecifi\'e
+ avec des num\'eros d'\'equation dont les parties indiqu\'ees sont align\'ees verticalement}{}{}
+\capcs eqno {met un num\'ero d'\'equation sp\'ecifi\'e \`a droite d'un affichage}*{}
+\capcs equiv {relation d'\'equivalence~: $\equiv$}{}{}
+\capcs errhelp {liste de token dont le d\'eveloppement \TeX\ s'affiche quand l'utilisateur
+ demande de l'aide en r\'eponse \`a un |\\errmessage|}*{}
+\capcs errmessage {donne un message d'erreur sp\'ecifi\'e}*{}
+\capcs errorcontextlines {le nombre de lignes de contexte que \TeX\
+ affiche pour une erreur, par d\'efaut~5}*{}
+\capcs errorstopmode {stoppe pour une interaction sur des messages d'erreur}*{}
+\capcs escapechar {caract\`ere avec lequel \TeX\ pr\'ec\`ede les noms de s\'equence de contr\^ole
+ qui sont affich\'es}*{}
+\capcs eta {lettre grecque math\'ematique $\eta$}{}{}
+\capcs everycr {liste de token que \TeX\ d\'eveloppe apr\`es un |\\cr| ou un |\\crcr|
+ non suivi de |\\cr| ou de |\\noalign|}*{}
+\capcs everydisplay {liste de token que \TeX\ d\'eveloppe quand un affichage math\'ematique d\'ebute}*{}
+\capcs everyhbox {liste de token que \TeX\ d\'eveloppe quand une hbox d\'ebute}*{}
+\capcs everyjob {liste de token que \TeX\ d\'eveloppe quand une ex\'ecution d\'ebute}*{}
+\capcs everymath {liste de token que \TeX\ d\'eveloppe quand un texte en mode math\'ematique
+ d\'ebute}*{}
+\capcs everypar {liste de token que \TeX\ d\'eveloppe quand un paragraphe d\'ebute}*{}
+\capcs everyvbox {liste de token que \TeX\ d\'eveloppe quand une vbox d\'ebute}*{}
+\capcs exhyphenpenalty {p\'enalit\'e suppl\'ementaire pour une coupure de ligne apr\`es
+ une c\'esure explicite, par d\'efaut~50}*{}
+\capcs exists {symbole ``il existe''~: $\exists$}{}{}
+\capcs exp {fonction exponentielle~: $\exp$}{}{}
+\capcs expandafter {ne d\'eveloppe le token suivant qu'apr\`es d\'eveloppement du token
+ le suivant}*{}
+\capcs fam {famille de police que \TeX\ utilise pour des caract\`eres de classe 7
+ (c'est-\`a-dire, des variables) en mathi\'ematiques}*{}
+\capcs fi {termine une condition}*{\@fi}
+\capcs filbreak {force une coupure de page \`a moins que le texte contenant un autre |\\filbreak|
+ convienne aussi sur la page}{}{}
+\capcs finalhyphendemerits {p\'enalit\'e pour l'avant-derni\`ere ligne coup\'ee sur une
+ c\'esure, par d\'efaut~5000}*{}
+\capcs firstmark {premier \'el\'ement marqu\'e sur la page qui vient d'\^etre mise en bo\^\i te}*{}
+\capcs fivebf {utilise une police grasse en $5$ points, |cmbx5|}{}{}
+\capcs fivei {utilise une police math\'ematique italique en $5$ points, |cmmi5|}{}{}
+\capcs fiverm {utilise une police romaine en $5$ points, |cmr5|}{}{}
+\capcs fivesy {utilise une police de symbole en $5$ points, |cmsy5|}{}{}
+\capcs flat {symbole b\'emol en musique~: $\flat$}{}{}
+\capcs floatingpenalty {p\'enalit\'e pour des insertions qui sont s\'epar\'ees sur des
+ pages, par d\'efaut~0}*{}
+\capcs fmtname {nom du format courant}{}{}
+\capcs fmtversion {num\'ero de version du format courant}{}{}
+\capcs folio {produit |\\pageno| comme des caract\`eres~;
+ en chiffres romains s'il est n\'egatif}{}{}
+\capcs font {d\'efinit une s\'equence de contr\^ole sp\'ecifique pour s\'electionner une police}*{}
+\capcs fontdimen {un param\`etre sp\'ecifi\'e d'une police sp\'ecifi\'ee}*{}
+\capcs fontname {produit le nom de fichier d'une police sp\'ecifi\'ee en caract\`eres}*{}
+\capcs footline {liste de token qui produit une ligne en bas de chaque page}{}{}
+\capcs footnote {produit une note de pied de page sp\'ecifi\'ee
+ avec une marque de r\'ef\'erence sp\'ecifi\'ee}{}{}
+\capcs forall {symbole ``pour tout''~: $\forall$}{}{}
+\capcs frenchspacing {rend l'espacement inter-mot ind\'ependant de la ponctuation}{}{}
+\capcs frown {relation frown~: $\frown$}{}{}
+\capcs futurelet {assigne le troisi\`eme token suivant \`a une s\'equence de contr\^ole
+ sp\'ecifi\'ee, puis d\'eveloppe le deuxi\`eme token}*{}
+\capcs gamma {lettre grecque math\'ematique $\gamma$}{}{}
+\capcs Gamma {lettre grecque math\'ematique $\Gamma$}{}{}
+\capcs gcd {fonction plus grand d\'enominateur commun~: $\gcd$}{}{}
+\capcs gdef {\'equivalent \`a |\\global\\def|, c'est-\`a-dire, d\'efinit une macro globale}*{}
+\capcs ge {relation plus grand ou \'egal~: $\ge$}{}{}
+\capcs geq {\'equivalent \`a |\\ge|}{}{}
+\capcs gets {relation ''donne''~: $\gets$}{}{}
+\capcs gg {relation beaucoup plus grand que~: $\gg$}{}{}
+\capcs global {rend la d\'efinition suivante globale}*{}
+\capcs globaldefs {remplace le pr\'efixe|\\global| dans les assignements}*{}
+\capcs goodbreak {indique une coupure de page souhaitable avec |\\penalty-500|}{}{}
+\capcs grave {accent grave en math\'ematique, comme dans $\grave x$}{}{}
+\capcs H {accent tr\'ema hongrois en texte, comme dans \H o}{}{}
+\capcs halign {aligne du texte en colonnes}*{}
+\capcs hang {indente le paragraphe courant de |\\parindent|}{}{}
+\capcs hangafter {num\'ero de ligne d\'ebutant une indentation hanging}*{}
+\capcs hangindent {espace pour indentation hanging}*{}
+\capcs hat {accent circonflexe en math\'ematique, comme dans $\hat x$}{}{}
+\capcs hbadness {seuil de badness pour reporter une erreur "underfull or overfull
+ hboxes", par d\'efaut 1000}*{}
+\capcs hbar {symbole math\'ematique~: $\hbar$}{}{}
+\capcs hbox {produit une hbox sp\'ecifi\'ee}*{}
+\capcs headline {liste de token qui produit la ligne en haut
+ de chaque page}{}{}
+\capcs heartsuit {symbole c\oe ur~: $\heartsuit$}{}{}
+\capcs hfil {produit un ressort horizontal infiniment \'etirable}*{}
+\capcs hfill {produit un ressort horizontal encore plus infiniment \'etirable
+ que celui produit par |\\hfil|}*{}
+\capcs hfilneg {produit un ressort horizontal n\'egatif infiniment \'etirable}*{}
+\capcs hfuzz {seuil pour reporter overfull hboxes, par d\'efaut
+ 0.1\pt}*{}
+\capcs hglue {produit un ressort horizontal qui ne disparait pas sur des
+ coupure de ligne}{}{}
+\capcs hidewidth {ignore la largeur d'une entr\'ee d'un alignement, pour qu'il
+ l'\'etende au dehors de sa boite dans la direction de |\\hidewidth|}{}{}
+\capcs hoffset {offset horizontal relatif d'un pouce par rapport au bord gauche du papier}*{}
+\capcs holdinginserts {si positif, n'enl\`eve pas d'insertion de la
+ page courante}*{}
+\capcs hom {fontion homologie~: $\hom$}{}{}
+\capcs hookleftarrow {relation~: $\hookleftarrow$}{}{}
+\capcs hookrightarrow {relation~: $\hookrightarrow$}{}{}
+\capcs hphantom {produit une formule invisible de hauteur et largeur z\'ero mais
+ de largeur naturelle}{}{}
+\capcs hrule {produit un filet horizontal~; l\'egale seulement en mode vertical}*{}
+\capcs hrulefill {rempli un espace d\'elimit\'e d'un filet horizontal}{}{}
+\capcs hsize {longueur de ligne, par d\'efaut 6.5\thinspace in}*{}
+\capcs hskip {produit un ressort horizontal sp\'ecifi\'e}*{}
+\capcs hss {produit un ressort horizontal qui est infiniment \'etirable et
+ infiniment r\'etr\'ecissable}*{}
+\capcs ht {la hauteur de la bo\^\i te d'un registre de bo\^\i te sp\'ecifi\'e}*{}
+\capcs hyphenation {ajoute des mots sp\'ecifi\'es au dictionnaire
+ d'exception de c\'esure}*{}
+\capcs hyphenchar {le caract\`ere de c\'esure d'une police sp\'ecifi\'ee}*{}
+\capcs hyphenpenalty {p\'enalit\'e suppl\'ementaire pour une coupure de ligne sur une c\'esure, par
+ d\'efaut~50}*{}
+\capcs i {lettre `\i' sans point \`a utiliser avec des accents}{}{}
+\capcs ialign {d\'ebute un |\\halign| avec le ressort |\\tabskip| \`a z\'ero et
+ |\\everycr| vide}{}{}
+\capcs if {teste si deux tokens sp\'ecifi\'es ont le m\^eme code de caract\`ere}*{\@if}
+\capcs ifcase {d\'eveloppe un cas $n$ pour un valeur $n$ sp\'ecifi\'ee}*{\@ifcase}
+\capcs ifcat {teste si deux tokens sp\'ecifi\'es ont le m\^eme code de
+ cat\'egorie}*{\@ifcat}
+\capcs ifdim {teste une relation sp\'ecifi\'ee entre deux dimensions }*{\@ifdim}
+\capcs ifeof {teste la fin d'un fichier sp\'ecifi\'e}*{\@ifeof}
+\capcs iff {relation si et seulement si~: $\iff$}{}{}
+\capcs iffalse {test qui est toujours faux}*{\@iffalse}
+\capcs ifhbox {teste si un registre de bo\^\i te sp\'ecifi\'e contient une hbox}*{\@ifhbox}
+\capcs ifhmode {teste si \TeX\ est dans un mode horizontal}*{\@ifhmode}
+\capcs ifinner {teste si \TeX\ est dans un mode interne}*{\@ifinner}
+\capcs ifmmode {teste si \TeX\ est dans un mode math\'ematique}*{\@ifmmode}
+\capcs ifnum {teste une relation sp\'ecifi\'ee entre deux nombres}*{\@ifnum}
+\capcs ifodd {teste si un nombre sp\'ecifi\'e est impair}*{\@ifodd}
+\capcs iftrue {test qui est toujours vrai}*{\@iftrue}
+\capcs ifvbox {teste si un registre de bo\^\i te sp\'ecifi\'e contient une vbox}*{\@ifvbox}
+\capcs ifvmode {teste si \TeX\ est dans un mode vertical}*{\@ifvmode}
+\capcs ifvoid {teste si un registre de bo\^\i te sp\'ecifi\'e est vide}*{\@ifvoid}
+\capcs ifx {teste si deux tokens sont les m\^emes, ou si
+ deux macros ont les m\^emes d\'efinitions finales}*{\@ifx}
+\capcs ignorespaces {ignore tous les tokens espaces suivants}*{}
+\capcs Im {symbole d'une partie imaginaire d'un complexe~: $\Im$}{}{}
+\capcs imath {lettre `$\imath$' sans point \`a utiliser avec des accents math\'ematiques}{}{}
+\capcs immediate {effectue l'op\'eration de fichier sp\'ecifi\'ee sans d\'elai}*{}
+\capcs in {relation ``appartient \`a''~: $\in$}{}{}
+\capcs indent {produit une bo\^\i te vide de largeur |\\parindent| et entre
+ en mode horizontal}*{}
+\capcs inf {fonction inf\'erieur~: $\inf$}{}{}
+\capcs infty {symbole infini~: $\infty$}{}{}
+\capcs input {commence \`a lire \`a partir d'un fichier sp\'ecifi\'e}*{}
+\capcs inputlineno {le num\'ero de ligne courante du fichier d'entr\'ee courant}*{}
+\capcs insert {produit une insertion d'une classe sp\'ecifi\'ee}*{}
+\capcs insertpenalties {somme des p\'enalit\'es des insertions}*{}
+\capcs int {symbole int\'egrale~: $\int$}{}{}
+\capcs interlinepenalty {p\'enalit\'e suppl\'ementaire pour une coupure de page
+ entre des lignes d'un paragraphe, par d\'efaut~0}*{}
+\capcs iota {lettre grecque math\'ematique $\iota$}{}{}
+\capcs it {utilise des italiques, c'est-\`a-dire, fait |\\tenit\\fam=\\itfam|}{}{}
+\capcs item {d\'ebute un paragraphe avec une indentation accroch\'ee de |\\parindent|
+ et pr\'ec\'ed\'ee d'un label sp\'ecifi\'e}{}{}
+\capcs itemitem {comme |\\item|, mais avec une indentation de |2\\parindent|}{}{}
+\capcs itfam {famille italique en math\'ematique}{}{}
+\capcs j {lettre `\j' sans point, pour utiliser avec des accents}{}{}
+\capcs jmath {lettre `$\jmath$' sans point, pour utiliser avec des accents math\'ematiques}{}{}
+\capcs jobname {nom de base du fichier par lequel \TeX\ a \'et\'e appel\'e}*{}
+\capcs jot {unit\'e de mesure for opening up displays}{}{}
+\capcs kappa {lettre grecque math\'ematique $\kappa$}{}{}
+\capcs ker {fonction kern~: $\ker$}{}{}
+\capcs kern {produit un montant d'espace sp\'ecifi\'e sur lequel
+ une coupure n'est pas autoris\'ee}*{}
+\capcs l {lettre polonaise~: \l}{}{}
+\capcs L {lettre polonaise~: \L}{}{}
+\capcs lambda {lettre grecque math\'ematique $\lambda$}{}{}
+\capcs Lambda {lettre grecque math\'ematique $\Lambda$}{}{}
+\capcs land {op\'erateur logique ``et''~: $\land$}{}{}
+\capcs langle {left angle delimiter~: $\langle$}{}{}
+\capcs language {le jeu de patrons de c\'esure courant}*{}
+\capcs lastbox {retrouve et enl\`eve le dernier \'el\'ement de la liste courante, si c'est une
+ bo\^\i te}*{}
+\capcs lastkern {retrouve le dernier \'el\'ement de la liste courante, si c'est un
+ cr\'enage}*{}
+\capcs lastpenalty {enl`eve le dernier item de la liste courante, si c'est une p/'enalit\'e }*{}
+\capcs lastskip {enl\`eve le dernier item de la liste courante, si c'est une glue}*{}
+\capcs lbrace {d\'elimiteur accolade gauche~: $\lbrace$}{}{}
+\capcs lbrack {d\'elimiteur crochet gauche~: $\lbrack$}{}{}
+\capcs lccode {le code de caract\`ere pour la forme minuscule d'une lettre}*{}
+\capcs lceil {d\'elimiteur plafond gauche~: $\lceil$}{}{}
+\capcs ldotp {point sur la ligne de base comme ponctuation~: $\ldotp$}{}{}
+\capcs ldots {points sur la ligne de base en math\'ematique~: $\ldots$}{}{}
+\capcs le {relation inf\'erieur ou \'egal~: $\le$}{}{}
+\capcs leaders {remplit un espace horizontal ou vertical sp\'ecifi\'e en r\'ep\'etant un
+ filet ou une bo\^\i te sp\'ecifi\'ee}*{}
+\capcs left {produit le d\'elimiteur sp\'ecifi\'e, en l'agrandissant pour couvrir la
+ sous-formule suivante se finissant par |\\right|}*{}
+\capcs leftarrow {relation~: $\leftarrow$}{}{}
+\capcs Leftarrow {relation~: $\Leftarrow$}{}{}
+\capcs leftarrowfill {rempli la hbox contenante avec un |\\leftarrow|~:
+ \hbox to 3.5em{\leftarrowfill}}{}{}
+\capcs leftharpoondown {relation~: $\leftharpoondown$}{}{}
+\capcs leftharpoonup {relation~: $\leftharpoonup$}{}{}
+\capcs lefthyphenmin {taille du plus petit fragment de mot que \TeX\ autorise
+ avant une c\'esure en d\'ebut d'un mot, par d\'efaut~2}*{}
+\capcs leftline {produit une ligne avec son texte pouss\'e vers la marge de gauche}{}{}
+\capcs leftrightarrow {relation~: $\leftrightarrow$}{}{}
+\capcs Leftrightarrow {relation~: $\Leftrightarrow$}{}{}
+\capcs leftskip {ressort que \TeX\ ins\`ere \`a gauche de chaque ligne}*{}
+\capcs leq {\'equivalent \`a |\\le|}{}{}
+\capcs leqalignno {produit un affichage multi-ligne sp\'ecifi\'e avec des num\'eros d'\'equation
+ \`a gauche dont les parties indiqu\'ees sont align\'ees verticalement}{}{}
+\capcs leqno {d\'epose un num\'ero d'\'equation sp\'ecifi\'e \`a gauche d'un affichage}*{}
+\capcs let {d\'efinit une s\'equence de contr\^ole comme \'etant le token suivant}*{}
+\capcs lfloor {d\'elimiteur plancher gauche~: $\lfloor$}{}{}
+\capcs lg {fonction logarithme~: $\lg$}{}{}
+\capcs lgroup {d\'elimiteur groupe gauche (la plus petite taille est montr\'ee ici)~:
+ $\Big\lgroup$}{}{}
+\capcs lim {fonction limite~: $\lim$}{}{}
+\capcs liminf {fonction limite inf\'erieur~: $\liminf$}{}{}
+\capcs limits {place un exposant sur et un indice sous un
+ grand op\'erateur}*{}
+\capcs limsup {fonction limite sup\'erieure~: $\limsup$}{}{}
+\capcs line {produit une ligne de caract\`eres justifi\'ee}{}{}
+\capcs linepenalty {p\'enalit\'e pour coupure de ligne ajout\'ee \`a chaque ligne,
+ par d\'efaut~10}*{}
+\capcs lineskip {ressort vertical d'une ligne de base \`a la suivante si les
+ lignes sont plus proche l'une de l'autre que |\\lineskiplimit|, par d\'efaut 1\pt}*{}
+\capcs lineskiplimit {seuil pour utiliser |\\lineskip| au lieu de |\\base\-line\-skip|, par d\'efaut 0\pt}*{}
+\capcs ll {relation beaucoup moins que~: $\ll$}{}{}
+\capcs llap {produit du texte (sans largeur) \`a partir de la gauche
+ de la position courante}{}{}
+\capcs lmoustache {moiti\'e haute d'une grande accolade~: $\big\lmoustache$}{}{}
+\capcs ln {fonction logarithme naturel~: $\ln$}{}{}
+\capcs lnot {symbole logique ``non''~: $\lnot$}{}{}
+\capcs log {fonction logarithme~: $\log$}{}{}
+\capcs long {autorise des tokens |\\par| dans le(s) argument(s) de
+ la d\'efinition suivante}*{}
+\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 {d\'ebute une boucle devant se finir par |\\repeat|}{}{}
+\capcs looseness {diff\'erence entre le nombre de lignes d'un paragraphe que vous
+ voulez par rapport au nombre optimal}*{}
+\capcs lor {op\'erateur logique ``ou''~: $\lor$}{}{}
+\capcs lower {abaisse une bo\^\i te sp\'ecifi\'e d'un montant sp\'ecifi\'e}*{}
+\capcs lowercase {convertit les lettres capitales du texte sp\'ecifi\'e
+ en minuscules}*{}
+\capcs lq {caract\`ere quote gauche pour du texte~: \lq}{}{}
+\capcs mag {$1000$ fois le ratio pour agrandir toutes les dimensions}*{}
+\capcs magnification {comme |\\mag|, mais n'agrandit pas la taille de la page}{}{}
+\capcs magstep {$1000 \cdot 1.2^n$ pour un $n$ sp\'ecifi\'e}{}{}
+\capcs magstephalf {$1000\cdot\sqrt{1.2}$}{}{}
+\capcs mapsto {relation~: $\mapsto$}{}{}
+\capcs mark {produit un \'el\'ement marqu\'e avec un texte sp\'ecifi\'e}*{}
+\capcs mathaccent {met un accent math\'ematique sp\'ecifi\'e sur le caract\`ere suivant}*{}
+\capcs mathbin {espace une sous-formule sp\'ecifi\'ee comme une op\'eration binaire}*{}
+\capcs mathchar {produit le caract\`ere math\'ematique de mathcode sp\'ecifi\'e}*{}
+\capcs mathchardef {d\'efinit une s\'equence de contr\^ole sp\'ecifi\'ee comme \'etant un mathcode,
+ un nombre entre 0 et $2^{15}-1$}*{}
+\capcs mathchoice {s\'electionne une des quatre sous-formules math\'ematiques sp\'ecifi\'ees
+ selon le style courant}*{}
+\capcs mathclose {espace une sous-formule sp\'ecifi\'ee comme un d\'elimiteur fermant}*{}
+\capcs mathcode {le mathcode d'un caract\`ere sp\'ecifi\'e}*{}
+\capcs mathinner {espace une sous-formule sp\'ecifi\'ee comme une formule interne, c'est-\`a-dire,
+ une fraction}*{}
+\capcs mathop {espace une sous-formule sp\'ecifi\'ee comme un grand op\'erateur math\'ematique}*{}
+\capcs mathopen {espace une sous-formule sp\'ecifi\'ee comme un d\'elimiteur ouvrant}*{}
+\capcs mathord {espace une sous-formule sp\'ecifi\'ee comme un caract\`ere ordinaire}*{}
+\capcs mathpalette {produit un |\\mathchoice| qui d\'eveloppe une s\'equence de contr\^ole sp\'ecifi\'ee d\'ependant du style courant}{}{}
+\capcs mathpunct {espace une sous-formule sp\'ecifi\'ee comme une ponctuation}*{}
+\capcs mathrel {espace une sous-formule sp\'ecifi\'ee comme une relation}*{}
+\capcs mathstrut {produit une bo\^\i te invisible avec la hauteur et la largeur d'une
+ parenth\`ese gauche et sans largeur}{}{}
+\capcs mathsurround {espace que \TeX\ ins\`ere avant et apr\`es les maths dans le texte}*{}
+\capcs matrix {produit une matrice sp\'ecifi\'ee}{}{}
+\capcs max {fonction maximum~: $\max$}{}{}
+\capcs maxdeadcycles {valeur de |\\deadcycles| sur laquelle \TeX\ se plaint,
+ et utilise alors sa propre routine de sortie, par d\'efaut~25}*{}
+\capcs maxdepth {profondeur maximum de la bo\^\i te en bas d'une page,
+ par d\'efaut 4\pt}*{}
+\capcs maxdimen {plus grande dimension acceptable par \TeX}{}{}
+\capcs meaning {produit la signification compr\'ehensible humainement d'un token
+ sp\'ecifi\'e comme des caract\`eres}*{}
+\capcs medbreak {indique une coupure de page
+ souhaitable avec |\\penalty-100| et produit un ressort |\\medskipamount|}{}{}
+\capcs medmuskip {ressort pour un espace math\'ematique moyen, par d\'efaut 4\mud\ plus 2\mud\
+ minus 4\mud}*{}
+\capcs medskip {produit un ressort |\\medskipamount|}{}{}
+\capcs medskipamount {ressort pour un saut vertical moyen, par d\'efaut 6\pt
+ plus 2\pt\ minus 2\pt}{}{}
+\capcs message {affiche le d\'eveloppement du texte sp\'ecifi\'e sur le terminal}*{}
+\capcs mid {middle relation~: $\mid$}{}{}
+\capcs midinsert {produit le texte sp\'ecifi\'e \`a la position courante si
+ possible, sinon en haut de la page suivante}{}{}
+\capcs min {fonction minimum~: $\min$}{}{}
+\capcs mit {utilise des italiques math\'ematiques, c'est-\`a-dire, fait |\\fam=1|}{}{}
+\capcs mkern {produit un cr\'enage sp\'ecifi\'e en unit\'es |mu| en math\'ematique}*{}
+\capcs models {relation mod\`ele ~: $\models$}{}{}
+\capcs month {mois courant, comme un nombre}*{}
+\capcs moveleft {d\'eplace une bo\^\i te sp\'ecifi\'e \`a gauche d'un espace sp\'ecifi\'e~; l\'egal
+ uniquement en mode vertical}*{}
+\capcs moveright {d\'eplace une bo\^\i te sp\'ecifi\'e \`a droite d'un espace sp\'ecifi\'e~; l\'egal
+ uniquement en mode vertical}*{}
+\capcs mp {op\'erateur plus et moins~: $\mp$}{}{}
+\capcs mskip {produit un ressort sp\'ecifi\'e en unit\'es |mu| en math\'ematique}*{}
+\capcs mu {lettre grecque math\'ematique $\mu$}{}{}
+\capcs multiply {multiplie un registre |\\count| sp\'ecifi\'e par un entier
+ sp\'ecifi\'e}*{}
+\capcs multispan {fait traverser l'entr\'ee d'alignement suivante un nombre sp\'ecifi\'e
+ de colonnes (ou de rang\'ees)}{}{}
+\capcs muskip {le registre muglue sp\'ecifi\'e}*{}
+\capcs muskipdef {d\'efinit une s\'equence de contr\^ole sp\'ecifi\'e comme un nombre
+ correspondant \`a un registre |\\muskip|}*{}
+\capcs nabla {symbole diff\'erence \`a l'envers~: $\nabla$}{}{}
+\capcs narrower {diminue les marges droite et gauche d'un |\\parindent|}{}{}
+\capcs natural {symbole naturel en musique~: $\natural$}{}{}
+\capcs nearrow {relation fl\`eche montante vers la droite~: $\nearrow$}{}{}
+\capcs ne {relation non \'egal~: $\ne$}{}{}
+\capcs neg {symbole logique ``non''~: $\neg$}{}{}
+\capcs negthinspace {kern $-\frac1/6$\em}{}{}
+\capcs neq {relation non \'egal~: $\neq$}{}{}
+\capcs newbox {r\'eserve et nomme un registre |\\box|}{}{\@newbox}
+\capcs newcount {r\'eserve et nomme un registre |\\count|}{}{\@newcount}
+\capcs newdimen {r\'eserve et nomme un registre |\\dimen|}{}{\@newdimen}
+\capcs newfam {r\'eserve et nomme une famille math\'ematique}{}{\@newfam}
+\capcs newhelp {nomme un message d'erreur sp\'ecifi\'e}{}{\@newhelp}
+\capcs newif {d\'efinit un nouveau test conditionel avec le nom sp\'ecifi\'e}{}{\@newif}
+\capcs newinsert {nomme une classe d'insertion et r\'eserve des registres
+ |\\box|, |\\count|, |\\dimen| et |\\skip| correspondants}
+ {}{\@newinsert}
+\capcs newlanguage {r\'eserve et nomme un |\\language|}{}{\@newlanguage}
+\capcs newlinechar {caract\`ere fin de ligne pour |\\write|, etc.}*{}
+\capcs newmuskip {r\'eserve et nomme un registre |\\muskip|}{}{\@newmuskip}
+\capcs newread {r\'eserve et nomme un flot d'entr\'ee}{}{\@newread}
+\capcs newskip {r\'eserve et nomme un registre |\\skip|}{}{\@newskip}
+\capcs newtoks {r\'eserve et nomme un registre |\\toks|}{}{\@newtoks}
+\capcs newwrite {r\'eserve et nomme un flot de sortie}{}{\@newwrite}
+\capcs ni {relation ``dans invers\'e''~: $\ni$}{}{}
+\capcs noalign {ins\`ere du mat\'eriel entre des rang\'ees (ou des colonnes) d'un
+ alignement}*{}
+\capcs noboundary {inhibe des ligatures ou cr\'enages dues au |boundarychar| de la police
+ courante}*{}
+\capcstwo nobreak {fait |\\penalty10000|, c'est-\`a-dire,
+ inhibe une coupure de ligne ou de page}{}{hnobreak:vnobreak}
+\capcs noexpand {supprime le d\'eveloppement du token suivant}*{}
+\capcs noindent {entre en mode horizontal sans indenter le paragraphe}*{}
+\capcs nointerlineskip {inhibe le ressort inter-ligne avant la ligne suivante}{}{}
+\capcs nolimits {place un exposant et un indice apr\`es de grands op\'erateurs}*{}
+\capcs nonfrenchspacing {rend l'espacement inter-mot d\'ependant de la ponctuation}{}{}
+\capcs nonscript {inhibe tout ressort ou cr\'enage suivant
+ en styles script et scriptscript}*{}
+\capcs nonstopmode {ne stoppe pas sur des erreurs, m\^eme celles relatives aux fichiers manquants}*{}
+\capcs nopagenumbers {inhibe l'impression des num\'eros de page, c'est-\`a-dire, fait
+ |\\footline = {\\hfil}|}{}{}
+\capcs normalbaselines {met |\\baselineskip|, |\\line\-skip| et
+ |\\line\-skip\-limit| aux valeurs normales pour la taille de la police courante}{}{}
+\capcs normalbaselineskip {valeur de |\\baselineskip| pour la
+ taille de la police courante}{}{}
+\capcs normalbottom {rend la marge du bas identique de page en page}{}{}
+\capcs normallineskip {valeur de |\\lineskip| pour la taille de caract\`ere
+ courante}{}{}
+\capcs normallineskiplimit {valeur de |\\lineskiplimit| pour la taille de caract\`ere
+ courante}{}{}
+\capcs not {un |\\/| sans largeur pour construire des n\'egations de relation
+ mat\'ematiques, comme dans $\not=$}{}{}
+\capcs notin {relation n'appartient pas~: $\notin$}{}{}
+\capcs nu {lettre grecque math\'ematique $\nu$}{}{}
+\capcs null {se d\'eveloppe en une bo\^\i te vide}{}{}
+\capcs nulldelimiterspace {espace produit par un d\'elimiteur nul, par
+ d\'efaut 1.2\pt}*{}
+\capcs nullfont {police primitive sans characters}*{}
+\capcs number {produit un chiffre sp\'ecifi\'e en caract\`eres}*{}
+\capcs nwarrow {relation fl\`eche en haut vers la gauche~: $\nwarrow$}{}{}
+\capcs o {lettre danoise~: \o}{}{}
+\capcs O {lettre danoise~: \O}{}{}
+\capcs obeylines {rend chaque fin de ligne du fichier entr\'ee
+ \'equivalente \`a |\\par|}{}{}
+\capcs obeyspaces {produit un espace dans la sortie pour chaque caract\`ere espace dans
+ l'entr\'ee}{}{}
+\capcs odot {op\'eration point centr\'e~: $\odot$}{}{}
+\capcs oe {ligature \oe}{}{}
+\capcs OE {ligature \OE}{}{}
+\capcs offinterlineskip {inhibe le ressort inter-ligne \`a partir de maintenant}{}{}
+\capcs oint {op\'erateur contour int\'egral~: $\oint$}{}{}
+\capcs oldstyle {utilise des chiffres elz\'eviriens~: {\oldstyle1234567890}}{}{}
+\capcs omega {lettre grecque math\'ematique $\omega$}{}{}
+\capcs Omega {lettre grecque math\'ematique $\Omega$}{}{}
+\capcs ominus {op\'erateur moins dans un cercle~: $\ominus$}{}{}
+\capcs omit {saute un patron de colonne (ou de rang\'ee) dans un alignement}*{}
+\capcs openin {pr\'epare un flot d'entr\'ee sp\'ecifi\'e pour lire un fichier}*{}
+\capcs openout {pr\'epare un flot de sortie sp\'ecifi\'e pour \'ecrire dans un fichier}*{}
+\capcs openup {augmente |\\baselineskip|, |\\lineskip| et
+ |\\lineskiplimit| d'un montant sp\'ecifi\'e}{}{}
+\capcs oplus {op\'erateur plus dans un cercle~: $\oplus$}{}{}
+\capcs or {s\'epare les cas d'un |\\ifcase|}*{\@or}
+\capcs oslash {op\'erateur divise dans un cercle~: $\oslash$}{}{}
+\capcs otimes {op\'erateur multiplie dans un cercle~: $\otimes$}{}{}
+\capcs outer {rend la d\'efinition de macro suivante ill\'egale dans des contextes dans
+ lesquels des tokens sont absorb\'e \`a haute vitesse}*{}
+\capcs output {liste de token que \TeX\ d\'eveloppe quand il trouve une coupure de page}*{}
+\capcs outputpenalty {si la coupure de page arrive sur une p\'enalit\'e, la valeur
+ de cette p\'enalit\'e~; sinon z\'ero}*{}
+\capcs over {produit une fraction avec une barre d'\'epaisseur par d\'efaut}*{}
+\capcs overbrace {produit une accolade recouvrant le haut d'une formule,
+ comme dans $\overbrace{h+w}{}$}{}{}
+\capcs overfullrule {largeur de la r\'eglure d'un ``overfull box''}*{}
+\capcs overleftarrow {produit une fl\`eche vers la gauche recouvrant le haut d'une
+ formule, comme dans $\overleftarrow{r+a}$}{}{}
+\capcs overline {produit une ligne recouvrant le haut d'une formule,
+ comme dans~$\overline{2b}$}*{}
+\capcs overrightarrow {produit une fl\`eche vers la droite recouvrant le haut d'une
+ formule, comme dans $\overrightarrow{i+t}$}{}{}
+\capcs overwithdelims {produit une fraction avec une barre d'\'epaisseur par d\'efaut
+ et surmont\'ee des d\'elimiteurs sp\'ecifi\'es}*{}
+\capcs owns {relation appartient~: $\owns$}{}{}
+\capcs P {caract\`ere paragraphe en texte~: \P}{}{}
+\capcs pagedepth {\TeX\ met ceci \`a la profondeur courante de la page
+ courante}*{}
+\capcs pagefilllstretch {\TeX\ met ceci au montant d'\'etirement |filll| sur
+ la page courante}*{}
+\capcs pagefillstretch {\TeX\ met ceci au montant d'\'etirement |fill| sur
+ la page courante}*{}
+\capcs pagefilstretch {\TeX\ met ceci au montant d'\'etirement |fil| sur
+ la page courante}*{}
+\capcs pagegoal {\TeX\ met ceci \`a la hauteur d\'esir\'ee pour la page courante
+ (c'est-\`a-dire, |\\vsize| quand la premi\`ere bo\^\i te est mise sur la page)}*{}
+\capcs pageinsert {produit le texte sp\'ecifi\'e sur la page suivante et utilise
+ jusqu'a la page enti\`ere}{}{}
+\capcs pageno {le registre |\\count0|, qui contient le num\'ero de page
+ (\'eventuellement n\'egatif)}{}{}
+\capcs pageshrink {\TeX\ met ceci au montant total de r\'etr\'ecissement
+ sur la page courante}*{}
+\capcs pagestretch {\TeX\ met ceci au montant total d'\'etirement
+ sur la page courante}*{}
+\capcs pagetotal {\TeX\ met ceci \`a la hauteur naturelle de la page
+ courante}*{}
+\capcs par {finit un paragraphe et termine le mode horizontal}*{\@par}
+\capcs parallel {relation parall\`ele~: $\parallel$}{}{}
+\capcs parfillskip {ressort horizontal que \TeX\ ins\`ere \`a la fin d'un
+ paragraphe}*{}
+\capcs parindent {espace horizontal que \TeX\ ins\`ere au d\'ebut d'un
+ paragraphe}*{}
+\capcs parshape {sp\'ecifie la largeur et la longueur de chaque ligne
+ dans le prochain paragraphe}*{}
+\capcs parskip {ressort vertical que \TeX\ ins\`ere avant un paragraphe}*{}
+\capcs partial {symbole d\'eriv\'ee partielle~: $\partial$}{}{}
+\capcs pausing {si positif, stoppe apr\`es avoir lu chaque ligne d'entr\'ee pour un
+ remplacement possible}*{}
+\capcstwo penalty {produit une p\'enalit\'e (ou un bonus, si n\'egatif) pour couper
+ une ligne ou une page ici}*{hpenalty:vpenalty}
+\capcs perp {relation perpendiculaire~: $\perp$}{}{}
+\capcs phantom {produit une formule invisible avec les
+ dimensions d'une sous formule sp\'ecifi\'e}{}{}
+\capcs phi {lettre grecque math\'ematique $\phi$}{}{}
+\capcs Phi {lettre grecque math\'ematique $\Phi$}{}{}
+\capcs pi {lettre grecque math\'ematique $\pi$}{}{}
+\capcs Pi {lettre grecque math\'ematique $\Pi$}{}{}
+\capcs plainoutput {routine |\\output| de \plainTeX}{}{}
+\capcs pm {op\'erateur plus et moins~: $\pm$}{}{}
+\capcs pmatrix {produit une matrice entre parenth\`eses}{}{}
+\capcs pmod {notation modulo entre parenth\`eses \'a la fin d'une formule comme dans $x \equiv y+1 \pmod 2$}{}{}
+\capcs postdisplaypenalty {p\'enalit\'e suppl\'ementaire pour une coupure de ligne
+ juste apr\`es un affichage, par d\'efaut~0}*{}
+\capcs Pr {fonction probabilit\'e~: $\Pr$}{}{}
+\capcs prec {relation pr\'ec\`ede~: $\prec$}{}{}
+\capcs preceq {relation pr\'ec\`ede ou \'egale~: $\preceq$}{}{}
+\capcs predisplaypenalty {p\'enalit\'e suppl\'ementaire pour une coupure de ligne juste
+ avant un affichage, par d\'efaut~0}*{}
+\capcs predisplaysize {\TeX\ met ceci \`a la largeur de la
+ ligne pr\'ecedant un affichage}*{}
+\capcs pretolerance {tol\'erance de m\'ediocrit\'e pour une coupure de ligne sans
+ c\'esure, par d\'efaut~100}*{}
+\capcs prevdepth {profondeur de la derni\`ere bo\^\i te dans la liste verticale courante
+ (sauf filet)}*{}
+\capcs prevgraf {\TeX\ met ceci au nombre de lignes dans le paragraphe en plus
+ (en mode horizontal) ou dans le paragraphe pr\'ec\'edent (en mode vertical)}*{}
+\capcs prime {symbole prime math\'ematique, comme dans $r^\prime$}{}{}
+\capcs proclaim {d\'ebute un th\'eor\`eme, un lemme, une hypoth\`ese, $\ldots$}{}{\@proclaim}
+\capcs prod {grand op\'erateur produit~: $\prod$}{}{}
+\capcs propto {relation proportionnel \`a~: $\propto$}{}{}
+\capcs psi {lettre grecque math\'ematique $\psi$}{}{}
+\capcs Psi {lettre grecque math\'ematique $\Psi$}{}{}
+\capcs qquad {produit un ressort horizontal de largeur 2\em}{}{}
+\capcs quad {produit un ressort horizontal de largeur 1\em}{}{}
+\capcs radical {produit un symbole radical sp\'ecifi\'e}*{}
+\capcs raggedbottom {autorise la marge du bas \`a varier d'une page \`a l'autre}{}{}
+\capcs raggedright {autorise la marge droite \`a varier d'une ligne \`a l'autre}{}{}
+\capcs raise {abaisse une bo\^\i te sp\'ecifi\'ee d'un montant sp\'ecifi\'e}*{}
+\capcs rangle {d\'elimiteur angle fermant~: $\rangle$}{}{}
+\capcs rbrace {d\'elimiteur accolade fermante~: $\rbrace$}{}{}
+\capcs rbrack {d\'elimiteur crochet fermant~: $\rbrack$}{}{}
+\capcs rceil {d\'elimiteur plancher fermant~: $\rceil$}{}{}
+\capcs Re {symbole partie r\'eelle de complexe~: $\Re$}{}{}
+\capcs read {lit une ligne d'un flot d'entr\'ee sp\'ecifi\'e}*{}
+\capcs relax {ne fait rien}*{}
+\capcs relpenalty {p\'enalit\'e suppl\'ementaire pour une coupure apr\`es une relation,
+ par d\'efaut~500}*{}
+\capcs repeat {termine une boucle d\'ebut\'ee avec |\\loop|}{}{\@repeat}
+\capcs rfloor {d\'elimiteur plafond fermant~: $\rfloor$}{}{}
+\capcs rgroup {d\'elimiteur de groupe fermant (la plus petite taille est montr\'ee ici)~:
+ $\Big\rgroup$}{}{}
+\capcs rho {lettre grecque math\'ematique $\rho$}{}{}
+\capcs right {produit le d\'elimiteur sp\'ecifi\'e \`a l'extr\'emit\'e d'une
+ sous-formule d\'ebut\'ee par |\\left|}*{}
+\capcs rightarrow {relation~: $\rightarrow$}{}{}
+\capcs Rightarrow {relation~: $\Rightarrow$}{}{}
+\capcs rightarrowfill {remplit une hbox avec un |\\rightarrow|~:
+ \hbox to 3.5em{\rightarrowfill}}{}{}
+\capcs rightharpoondown {relation~: $\rightharpoondown$}{}{}
+\capcs rightharpoonup {relation~: $\rightharpoonup$}{}{}
+\capcs rightleftharpoons {relation~: $\rightleftharpoons$}{}{}
+\capcs rightline {produit une ligne avec son texte pouss\'e vers la marge droite}{}{}
+\capcs rightskip {ressort que \TeX\ ins\`ere \`a droite de chaque ligne}*{}
+\capcs righthyphenmin {taille du plus petit fragment de mot que \TeX\ autorise
+ apr\`es une c\'esure \`a la fin d'un mot, par d\'efaut~3}*{}
+\capcs rlap {produit du texte (sans largeur) \`a partir de la droite
+ de la position courante}{}{}
+\capcs rm {utilise des caract\`eres romains, c'est-\`a-dire, fait |\\tenrm\\fam=0|}{}{}
+\capcs rmoustache {moiti\'e basse d'une grande accolade~: $\big\rmoustache$}{}{}
+\capcs romannumeral {produit la repr\'esentation en chiffre romain minuscule d'un
+ nombre sp\'ecifi\'e, en caract\`eres}{}{}
+\capcs root {produit une racine sp\'ecifi\'ee d'une sous-formule sp\'ecifi\'ee, comme dans
+ $\root 3 \of 2$}{}{}
+\capcs rq {caract\`ere quote fermante en texte~: \rq}{}{}
+\capcs S {caract\`ere section en texte~: \S}{}{}
+\capcs sb {caract\`ere indice implicite}{}{}
+\capcs scriptfont {la police de style script dans une famille math\'ematique sp\'ecifi\'ee}*{}
+\capcs scriptscriptfont {la police de style scriptscript dans une famille math\'ematique
+ sp\'ecifi\'ee}*{}
+\capcs scriptscriptstyle {utilise la taille de style scriptscript dans une formule}*{}
+\capcs scriptspace {espace suppl\'ementaire que \TeX\ cr\`ee apr\`es un exposant ou un
+ indice, par d\'efaut 0.5\pt}*{}
+\capcs scriptstyle {utilise la taille de style script dans une formule}*{}
+\capcs scrollmode {ne stoppe pas sur les erreurs, mais stoppe sur les erreurs
+ de fichiers manquants}*{}
+\capcs searrow {relation fl\`eche en bas \`a gauche~: $\searrow$}{}{}
+\capcs sec {fonction s\'ecante~: $\sec$}{}{}
+\capcs setbox {d\'efinit un registre de bo\^\i te sp\'ecifi\'e comme \'etant une bo\^\i te}*{}
+\capcs setlanguage {change un jeu de r\`egles de c\'esure sp\'ecifi\'e, mais
+ ne change pas |\\language|}{*}{}
+\capcs setminus {operateur difference ~: $\setminus$}{}{}
+\capcs settabs {d\'efinit les tabulations pour un alignement tabul\'e}{}{}
+\capcs sevenbf {utilise une police grasse de $7$ points, |cmbx7|}{}{}
+\capcs seveni {utilise une police math\'ematique italique de $7$ points, |cmmi5|}{}{}
+\capcs sevenrm {utilise une police romaine de $7$ points, |cmr7|}{}{}
+\capcs sevensy {utilise une police symbole de $7$ points, |cmsy7|}{}{}
+\capcs sfcode {le code du facteur d'espace d'un caract\`ere sp\'ecifi\'e}*{}
+\capcs sharp {symbole di\`ese en musique~: $\sharp$}{}{}
+\capcs shipout {envoit une bo\^\i te vers le fichier |.dvi|}*{}
+\capcs show {montre, dans la log et
+ sur le terminal, la signification d'un token sp\'ecifi\'e}*{}
+\capcs showbox {affiche le contenu d'un registre de bo\^\i te sp\'ecifi\'e}*{}
+\capcs showboxbreadth {nombre maximum d'\'el\'ements montr\'e sur chaque niveau imbriqu\'e,
+ par d\'efaut~5}*{}
+\capcs showboxdepth {maximum de niveaux imbriqu\'es montr\'es, par d\'efaut~3}*{}
+\capcs showhyphens {montre, dans la log
+ et sur le terminal, les c\'esures dans un texte sp\'ecifi\'e}{}{}
+\capcs showlists {affiche toutes les listes sur lequel il travaille}*{}
+\capcs showthe {montre, dans la log
+ et sur le terminal, ce que |\\the| produira}*{}
+\capcs sigma {lettre grecque math\'ematique $\sigma$}{}{}
+\capcs Sigma {lettre grecque math\'ematique $\Sigma$}{}{}
+\capcs sim {relation similarit\'e~: $\sim$}{}{}
+\capcs simeq {relation similaire ou \'egal~: $\simeq$}{}{}
+\capcs sin {fonction sinus~: $\sin$}{}{}
+\capcs sinh {fonction sinus hyperbolique~: $\sinh$}{}{}
+\capcs skew {d\'eplace un accent sp\'ecifi\'e d'un montant sp\'ecifi\'e
+ sur un caract\`ere accentu\'e sp\'ecifi\'e}{}{}
+\capcs skewchar {caract\`ere d'une police sp\'ecifi\'ee utilis\'e pour positionner des accents}*{}
+\capcs skip {le registre de ressort sp\'ecifi\'e}*{}
+\capcs skipdef {d\'efinit une s\'equence de contr\^ole sp\'ecifi\'ee comme \'etant un nombre
+ correspondant \`a un registre |\\skip|}*{}
+\capcs sl {utilise des caract\`eres pench\'es, c'est-\`a-dire, fait |\\tensl\\fam=\\slfam|}{}{}
+\capcs slash {caract\`ere \slash\ autorisant une coupure de ligne}{}{}
+\capcs slfam {famille pench\'ee en math\'ematique}{}{}
+\capcs smallbreak {indique une coupure de page assez d\'esirable
+ avec |\\penalty-50| et produit un ressort |\\smallskipamount|}{}{}
+\capcs smallint {petit symbole d'int\'egrale~: $\smallint$}{}{}
+\capcs smallskip {produit un ressort |\\smallskipamount|}{}{}
+\capcs smallskipamount {ressort pour un petit saut vertical, par d\'efaut 3\pt\
+ plus 1\pt\ minus 1\pt}{}{}
+\capcs smash {produit une formule sans hauteur, ni profondeur}{}{}
+\capcs smile {relation smile~: $\smile$}{}{}
+\capcs sp {caract\`ere d'exposant implicite}{}{}
+\capcs space {produit un ressort inter-mot normal}{}{}
+\capcs spacefactor {modifie l'\'etirement et le r\'etr\'ecissement des ressorts inter-mot
+ s'il diff\'erent de 1000}*{}
+\capcs spaceskip {si diff\'erent de z\'ero et |\\spacefactor|${}<2000$, surcharge
+ le ressort inter-mot normal}*{}
+\capcs spadesuit {symbole pique~: $\spadesuit$}{}{}
+\capcs span {soit combine des entr\'ees dans un corps d'alignement body soit
+ d\'eveloppe des tokens dans un pr\'eambule}*{}
+\capcs special {\'ecrit des tokens dans le fichier |.dvi| devant \^etre interpr\'et\'es par un
+ programme de lecture de DVI}*{}
+\capcs splitbotmark {dernier \'el\'ement de marque dans une bo\^\i te r\'esultant de |\\vsplit|}*{}
+\capcs splitfirstmark {premier \'el\'ement de marque dans une bo\^\i te r\'esultant de
+ |\\vsplit|}*{}
+\capcs splitmaxdepth {profondeur maximum d'une bo\^\i te r\'esultant de |\\vsplit|}*{}
+\capcs splittopskip {ressort que \TeX\ ins\`ere en haut d'une bo\^\i te r\'esultant de
+ |\\vsplit|}*{}
+\capcs sqcap {op\'erateur square cap~: $\sqcap$}{}{}
+\capcs sqcup {op\'erateur square cup~: $\sqcup$}{}{}
+\capcs sqrt {produit une racine carr\'ee d'une sous-formule, comme dans $\sqrt 2$}{}{}
+\capcs sqsubseteq {relation square subset ou \'egal~: $\sqsubseteq$}{}{}
+\capcs sqsupseteq {relation square superset ou \'egal~: $\sqsupseteq$}{}{}
+\capcs ss {lettre allemande~: \ss}{}{}
+\capcs star {op\'erateur \'etoile~: $\star$}{}{}
+\capcs string {produit un token sp\'ecifi\'e, le plus souvent une s\'equence de
+ contr\^ole, comme des caract\`eres}*{}
+\capcs strut {bo\^\i te sans largeur, mais de hauteur et profondeur d'une ligne standard,
+ de ligne de base \`a ligne de base, dans la police courante}{}{}
+\capcs subset {relation subset~: $\subset$}{}{}
+\capcs subseteq {relation subset ou \'egal~: $\subseteq$}{}{}
+\capcs succ {relation successeur~: $\succ$}{}{}
+\capcs succeq {relation successeur ou \'egal~: $\succeq$}{}{}
+\capcs sum {grand op\'erateur de somme~: $\sum$}{}{}
+\capcs sup {fonction sup\'erieur~: $\sup$}{}{}
+\capcs supereject {force une coupure de page, et d\'echarge toutes les insertions}{}{}
+\capcs supset {relation superset~: $\supset$}{}{}
+\capcs supseteq {relation superset ou \'egal~: $\supseteq$}{}{}
+\capcs surd {symbole surd~: $\surd$}{}{}
+\capcs swarrow {relation fl\`eche en bas \`a gauche~: $\swarrow$}{}{}
+\capcs t {accent tie-after en texte, comme dans \t uu}{}{}
+\capcs tabalign {\'equivalent \`a |\\+|, sauf s'il n'est pas |\\outer|}{}{}
+\capcs tabskip {ressort entre colonnes (ou rang\'ees) d'un alignement}*{}
+\capcs tan {fonction tangente~: $\tan$}{}{}
+\capcs tanh {fonction tangente hyperbolique~: $\tanh$}{}{}
+\capcs tau {lettre grecque math\'ematique $\tau$}{}{}
+\capcs tenbf {utilise une police grasse de $10$ points, |cmbx10|}{}{}
+\capcs tenex {utilise une police d'extension math\'ematique de $10$ points, |cmex10|}{}{}
+\capcs teni {utilise une police italique math\'ematique de $10$ points, |cmmi10|}{}{}
+\capcs tenit {utilise une police italique de texte de $10$ points, |cmti10|}{}{}
+\capcs tenrm {utilise une police romaine de texte de $10$ points, |cmr10|}{}{}
+\capcs tensl {utilise une police romaine pench\'ee de $10$ points, |cmsl10|}{}{}
+\capcs tensy {utilise une police de symbole math\'ematique de $10$ points, |cmsy10|}{}{}
+\capcs tentt {utilise une police de machine \`a \'ecrire de $10$ points, |cmtt10|}{}{}
+\capcs TeX {produit le logo \TeX}{}{}
+\capcs textfont {la police de style dans une famille math\'ematique sp\'ecifi\'ee}*{}
+\capcs textindent {comme |\\item|, mais ne fait pas d'indentation associ\'ee}{}{}
+\capcs textstyle {utilise une taille textstyle dans une formule}*{}
+\capcs the {donne la valeur d'un token sp\'ecifi\'e}*{}
+\capcs theta {lettre grecque math\'ematique $\theta$}{}{}
+\capcs Theta {lettre grecque math\'ematique $\Theta$}{}{}
+\capcs thickmuskip {ressort pour une espace math\'ematique gras, par d\'efaut 5\mud\ plus 5\mud}*{}
+\capcs thinmuskip {ressort pour un espace math\'ematique fine, par d\'efaut 3\mud}*{}
+\capcs thinspace {cr\'enage de \frac1/6\em}{}{}
+\capcs tilde {accent tilde en math\'ematique, comme dans $\tilde x$}{}{}
+\capcs time {l'heure d'aujourd'hui, en minutes depuis minuit}*{}
+\capcs times {op\'erateur multipli\'e~: $\times$}{}{}
+\capcs toks {le registre de token sp\'ecifi\'e}*{}
+\capcs toksdef {d\'efinit une s\'equence de contr\^ole sp\'ecifi\'e comme \'etant un nombre
+ correspondant \`a un registre |\\toks|}*{}
+\capcs tolerance {tol\'erance de m\'ediocrit\'e pour des coupures de ligne avec c\'esure}*{}
+\margin{{\tt\\topglue} command added~; recent addition to \TeX}
+\capcs to {relation mapping~: $\to$}{}{}
+\capcs top {symbole lattice top~: $\top$}{}{}
+\capcs topglue {produit un ressort vertical sp\'ecifi\'e en haut
+ d'une page}{}{}
+\capcs topinsert {produit le texte sp\'ecifi\'e en haut d'une page}{}{}
+\capcs topmark {|\\botmark| avant que la page courante soit en bo\^\i te}*{}
+\capcs topskip {ressort entre la ligne de t\^ete et la premi\`ere ligne de texte
+ sur une page, par d\'efaut 10\pt}*{}
+\capcs tracingall {d\'eclanche des traces maximal}{}{}
+\capcs tracingcommands {affiche l'ex\'ecution des commandes}*{}
+\capcs tracinglostchars {affiche les caract\`eres demand\'es, mais non
+ d\'efinis}*{}
+\capcs tracingmacros {affiche les d\'eveloppements de macros}*{}
+\capcs tracingonline {montre les sorties de diagnostic sur le terminal aussi bien que
+ dans le fichier log}*{}
+\capcs tracingoutput {affiche les contenus des bo\^\i tes sorties}*{}
+\capcs tracingpages {affiche les calculs de coupure de page}*{}
+\capcs tracingparagraphs {affiche les calculs de coupure de ligne}*{}
+\capcs tracingrestores {affiche les valeurs restaur\'ees \`a la fin
+ d'un groupe}*{}
+\capcs tracingstats {affiche les statistiques d'utilisation de la m\'emoire}*{}
+\capcs triangle {symbole triangle~: $\triangle$}{}{}
+\capcs triangleleft {op\'erateur triangle gauche~: $\triangleleft$}{}{}
+\capcs triangleright {op\'erateur triangle droite~: $\triangleright$}{}{}
+\capcs tt {utilise des caract\`eres de machine \`a \'ecrire, c'est-\`a-dire, fait |\\tentt\\fam=\\ttfam|}{}{}
+\capcs ttfam {famille machine \`a \'ecrire en math\'ematique}{}{}
+\capcs ttraggedright {utilise des caract\`eres de machine \`a \'ecrire et autorise la marge
+ droite des paragraphes \`a varier d'une ligne \`a l'autre}{}{}
+\capcs u {accent bref en texte, comme dans \u r}{}{}
+\capcs uccode {le code de caract\`ere de la forme capitale d'une lettre}*{}
+\capcs uchyph {si positif, laisse c\'esurer des mots qui commencent avec une
+ lettre capitale}*{}
+\capcs underbar {souligne le texte sp\'ecifi\'e sans toucher les descendantes , comme dans \underbar{fog}}{}{}
+\capcs underbrace {produit une accolade couvrant le bas d'une formule, comme dans
+ $\underbrace{x+x}{}$}{}{}
+\capcs underline {souligne une formule math\'ematique sous les descendantes, comme dans
+ $\underline{x+y}$}*{}
+\capcs unhbox {d\'echarge le contenu de la bo\^\i te
+ d'un registre de bo\^\i te sp\'ecifi\'e
+ de la liste courante et vide le registre~; l\'egal en
+ mode horizontal seulement}*{}
+\capcs unhcopy {comme |\\unhbox|, mais ne vide pas le registre}*{}
+\capcs unkern {si le dernier \'el\'ement de la liste courante est un cr\'enage, l'enl\`eve}*{}
+\capcs unpenalty {si le dernier \'el\'ement de la liste courante est une p\'enalit\'e, l'enl\`eve}*{}
+\capcs unskip {si le dernier \'el\'ement de la liste courante est un ressort, l'enl\`eve}*{}
+\capcs unvbox {d\'echarge le contenu de la bo\^\i te
+ d'un registre de bo\^\i te sp\'ecifi\'e
+ de la liste courante et vide le registre~; l\'egal en
+ modes verticaux seulement}*{}
+\capcs unvcopy {comme |\\unvbox|, mais ne vide pas le registre}*{}
+\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 {op\'erateur plus cupped~: $\uplus$}{}{}
+\capcs uppercase {convertit les lettres minuscules d'un texte sp\'ecifi\'e
+ en capitales}*{}
+\capcs upsilon {lettre grecque math\'ematique $\upsilon$}{}{}
+\capcs Upsilon {lettre grecque math\'ematique $\Upsilon$}{}{}
+\capcs v {accent tch\`eque en texte, comme dans \v o}{}{}
+\capcs vadjust {produit du mat\'eriel en mode vertical apr\`es la ligne courante}*{}
+\capcs valign {aligne du texte dans des rang\'ees}*{}
+\capcs varepsilon {variante de la lettre grecque math\'ematique $\varepsilon$}{}{}
+\capcs varphi {variante de la lettre grecque math\'ematique $\varphi$}{}{}
+\capcs varpi {variante de la lettre grecque math\'ematique $\varpi$}{}{}
+\capcs varrho {variante de la lettre grecque math\'ematique $\varrho$}{}{}
+\capcs varsigma {variante de la lettre grecque $\varsigma$}{}{}
+\capcs vartheta {variante de la lettre grecque math\'ematique $\vartheta$}{}{}
+\capcs vbadness {badness threshold for reporting underfull or overfull
+ vboxes, par d\'efaut~1000}*{}
+\capcs vbox {produit une vbox dont la ligne de base est celle de la bo\^\i te du haut
+ incluse}*{}
+\capcs vcenter {centre le texte sp\'ecifi\'e sur l'axe math\'ematique}*{}
+\capcs vdash {symbole left turnstile~: $\vdash$}{}{}
+\capcs vdots {points verticaux en math\'ematique~: \smash{$\vdots$}}{}{}
+\capcs vec {accent vecteur en math\'ematique, comme dans $\vec x$}{}{}
+\capcs vee {op\'erateur ``ou'' logique~: $\vee$}{}{}
+\capcs vert {relation barre~: $\vert$}{}{}
+\capcs Vert {relation double barre~: $\Vert$}{}{}
+\capcs vfil {produit un ressort vertical infiniment \'etirable}*{}
+\capcs vfill {produit un ressort vertical encore plus infiniment \'etirable
+ que celui produit par |\\vfil|}*{}
+\capcs vfilneg {produit un ressort vertical n\'egatif infiniment \'etirable}*{}
+\capcs vfootnote {produit une note de bas de page sp\'ecifi\'ee avec une marque
+ de r\'ef\'erence sp\'ecifi\'ee, mais ne produit la marque de r\'ef\'erence dans le texte}{}{}
+\capcs vfuzz {seuil de d\'epassement pour dire overfull vboxes, par d\'efaut
+ 0.1\pt}*{}
+\capcs vglue {produit un ressort vertical sp\'ecifi\'e
+ qui ne disparait pas sur des coupures de page}{}{}
+\capcs voffset {offset vertical relatif d'un pouce par rapport au coin
+ haut du papier}*{}
+\capcs vphantom {produit un formule invisible sans largeur mais de hauteur
+ et profondeur naturelle}{}{}
+\capcs vrule {produit un filet vertical~; l\'egal seulement en modes horizontaux}*{}
+\capcs vsize {hauteur de page, par d\'efaut 8.9\thinspace in}*{}
+\capcs vskip {produit un ressort vertical sp\'ecifi\'e}*{}
+\capcs vsplit {coupe le contenu d'un registre de bo\^\i te sp\'ecifi\'ee
+ de la hauteur sp\'ecifi\'e}*{}
+\capcs vss {produit un ressort vertical qui est infiniment \'etirable et
+ infiniment r\'etr\'ecissable}*{}
+\capcs vtop {produit une vbox dont la ligne de base est celle de la bo\^\i te du haut englob\'ee}*{}
+\capcs wd {la largeur d'une bo\^\i te dans un registre de bo\^\i te sp\'ecifi\'e}*{}
+\capcs wedge {op\'erateur logique ``et''~: $\wedge$}{}{}
+\capcs widehat {accent math\'ematique, comme dans $\widehat {y+z+a}$}{}{}
+\capcs widetilde {accent math\'ematique $\widetilde {b+c+d}$}{}{}
+\capcs widowpenalty {p\'enalit\'e pour une ligne seule d\'ebutant une page,
+ par d\'efaut~150}*{}
+\capcs wlog {|\\write| la liste de token sp\'ecifi\'ee dans le fichier log}{}{}
+\capcs wp {symbole Weierstra\ss\ `p'~: $\wp$}{}{}
+\capcs wr {op\'erateur produisant un ruban~: $\wr$}{}{}
+\capcs write {\'ecrit une ligne vers un flot de sortie sp\'ecifi\'e}*{}
+\capcs xdef {\'equivalent \`a |\\global\\edef|, c'est-\`a-dire, d\'efini globalement une
+ macro, d\'eveloppant imm\'ediatement le texte de remplacement}*{}
+\capcs xi {lettre grecque math\'ematique $\xi$}{}{}
+\capcs Xi {lettre grecque math\'ematique $\Xi$}{}{}
+\capcs xleaders {produit des r\'eglures avec l'espace en trop \`a gauche redistribu\'e egalement}*{}
+\capcs xspaceskip {si diff\'erent de z\'ero et |\\spacefactor|${}\ge2000$,
+ surcharge le ressort inter-mot normal}*{}
+\capcs year {l'ann\'ee courante, comme un nombre}*{}
+\capcs zeta {lettre grecque math\'ematique $\zeta$}{}{}
+
+\endcapsum
+\endchapter
+\byebye
+
diff --git a/info/impatient/fr/fconcept.tex b/info/impatient/fr/fconcept.tex
new file mode 100644
index 0000000000..a1f8001ef3
--- /dev/null
+++ b/info/impatient/fr/fconcept.tex
@@ -0,0 +1,4069 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter{Concepts}
+
+\chapterdef{concepts}
+
+Cette partie du livre contient les d\'efinitions et explications des
+concepts que nous utilisons pour d\'ecrire \TeX. Les concepts comprennent
+les termes techniques que nous utilisons pour expliquer les commandes et
+des points importants qui ne sont vus nulle part ailleurs dans le livre
+
+Les concepts sont class\'es dans l'ordre alphab\'etique. La page de garde int\'erieure
+contient une liste compl\`ete des concepts et les pages o\`u ils sont expliqu\'es.
+Nous vous sugg\'erons de faire une copie de cette page int\'erieure et de la
+garder de cot\'e pour que vous puissiez identifier et regarder un concept non
+familier imm\'ediatement. Autant que possible, nous gardons notre
+terminologie coh\'erente avec celle de \texbook.\idxref{\texbook}
+
+\beginconcepts
+
+\conceptindex{alignements}
+\concept alignement
+
+\bix^^{tables}
+Un \defterm{alignement} est une construction pour aligner du mat\'e\-riel tel
+qu'un tableau, en colonne ou en rang\'ee. Pour former un alignement vous devez
+(a)~d\'ecrire le format des colonnes ou des rang\'ees et (b)~ dire \`a \TeX\ quel
+mat\'eriel va dans les colonnes ou les rang\'ees. Un alignement tabul\'e ou un
+alignement horizontal est organis\'e comme une suite de rang\'ees~; un alignement
+vertical est organis\'e comme une suite de colonnes. Nous d\'ecrirons d'abord
+les alignements tabul\'es et horizontaux et ensuite, plus bri\`evement, les
+alignements verticaux.
+
+Les alignements tabul\'es sont d\'efinis par \plainTeX. Ils sont plus simples
+mais moins flexibles que les alignements horizontaux. Ils diff\`erent
+principalement sur la fa\c con de d\'ecrire leurs formats.
+
+\bix^^|\settabs|
+\bix\ctsidxref{+}
+\bix\ctsidxref{cr}
+
+Pour construire un alignement tabul\'e vous devez tout d'abord former une
+commande |\settabs| \ctsref{\settabs} qui sp\'ecifie comment \TeX\ doit
+diviser l'es\-pace horizontal disponible en colonne, ensuite vous procurer
+une suite de rang\'ees \`a tabuler. Chaque rang\'ee consiste en une s\'equence de
+contr\^ole |\+| \ctsref{\@plus} suivi par une liste d'``entr\'ees'', c'est-\`a-dire
+des intersections rang\'ees\slash colonnes.
+^^{entr\'ee (colonne ou rang\'ee)}
+Des entr\'ees qui se suivent sur une rang\'ee sont s\'epar\'ees par une esperluette
+(|&|).
+\xrdef{@and}
+\ttidxref{&}
+La fin d'une rang\'ee est indiqu\'ee par ^|\cr| apr\`es sa derni\`ere entr\'ee.
+Si une rang\'ee a moins d'entr\'ees qu'il y a de colonnes dans l'alignement,
+\TeX\ rempli jusqu'\`a la fin la rang\'ee de blanc.
+
+Tant qu'il est pr\'ec\'ed\'e d'une commande |\settabs|, vous pouvez mettre une
+rang\'ee d'un alignement tabul\'e n'importe o\`u dans votre document. En particulier,
+vous pouvez mettre autres choses entre les rang\'ees d'aligne\-ments tabul\'es ou
+d\'ecrire plusieurs alignements tabul\'es avec un seul |\set!-tabs|. Voici un exemple
+d'alignement tabul\'e~:
+
+\xrdef{tabbedexample}\csdisplay
+{\hsize = 1.7 in \settabs 2 \columns
+\+cattle&herd\cr
+\+fish&school\cr
+\+lions&pride\cr}
+|
+La commande |\settabs 2 \columns| de cet exemple \ctsref{\settabs}
+demande \`a \TeX\ de produire deux colonnes de largeurs \'egales.
+La longueur de la ligne est de $1.7$ pouces.
+L'alignement compos\'e ressemble \`a ceci~:
+
+{\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.}
+Il y a une autre forme d'alignement tabul\'e dans lequel vous sp\'ecifiez les
+largeurs de colonne avec un exemple. La largeur de colonne de l'exemple
+d\'etermine les largeurs de colonne du reste de l'alignement~:
+\csdisplay
+{\settabs\+cattle\quad&school\cr
+\+cattle&herd\cr
+\+fish&school\cr
+\+lions&pride\cr}
+|
+Voici le r\'esultat~:
+{\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|
+Les alignements horizontaux sont construits avec |\halign| \ctsref\halign.
+\TeX\ ajuste la largeur des colonnes d'un alignement horizontal en fonction
+du contenu des colonnes. Quand \TeX\ rencontre la commande |\halign| qui
+d\'ebute un alignement horizontal, il examine d'abord toutes les rang\'ees de
+l'alignement pour voir quelle est la largeur des entr\'ees. Il fixe alors
+la largeur des colonnes pour accommoder les entr\'ees les plus larges dans ces
+colonnes.
+
+Un alignement horizontal g\'er\'e par |\halign| est constitu\'e d'un
+``\pix^{pr\'eam\-bule}'' qui indique le sch\'ema des rang\'ees suivi par les
+rang\'ees elles-m\^emes.
+\ulist
+\li Le pr\'eambule est constitu\'e d'une suite de \pix^{patron}s, un pour
+chaque colonne. Le patron d'une colonne sp\'ecifie comment le texte de cette
+colonne doit \^etre compos\'e. Chaque patron doit inclure un seul carac\-t\`ere |#|
+\ttidxref{#}\xrdef{@asharp}
+pour indiquer o\`u \TeX\ doit substituer le texte d'une entr\'ee dans le patron.
+Les patrons sont s\'epar\'es par une esperluette (|&|) \ttidxref{&} et la fin
+du pr\'eambule est indiqu\'ee par |\cr|. En procurant un patron appro\-pri\'e, vous
+pouvez obtenir des effets comme centrer une colonne, justifier une colonne
+\`a gauche ou \`a droite ou composer une colonne dans une \refterm{police}
+particuli\`ere.
+
+\li Les rang\'ees ont la m\^eme forme que dans l'alignement tabul\'e, sauf que
+vous ne mettez pas de |\+| au d\'ebut de chaque rang\'ee.
+Comme avant, des entr\'ees sont s\'epar\'ees par |&| et la fin d'une rang\'ee est
+indiqu\'ee par |\cr|.
+\TeX\ traite chaque entr\'ee comme un \refterm{groupe}, donc, chaque commande
+de changement de police ou autre \refterm{assignement} dans le patron de
+colonne ne prend effet que pour les entr\'ees de cette colonne.
+\endulist
+\noindent Le pr\'eambule et les rang\'ees doivent \^etre inclus entre les
+accolades qui suivent |\halign|. Chaque alignement |\halign| doit inclure
+son propre pr\'eambule.
+
+Par exemple, l'alignement horizontal~:
+\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 produit le r\'esultat~:
+
+\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 Le ^|\tabskip| \ctsref{\tabskip} de cet exemple
+demande \`a \TeX\ d'ins\'erer |2pc| de
+\refterm{ressort} entre les colonnes.
+La commande ^|\noalign| \ctsref{\noalign} d'ins\'erer
+du mat\'eriel de \refterm{mode vertical} entre deux rang\'ees.
+Dans cet exemple nous avons
+utilis\'e |\noalign| pour produire de l'espace suppl\'ementaire entre les
+rang\'ees de titre et les rang\'ees de donn\'ees, et aussi rapprocher ``Table''
+et ``Position''.
+(Vous pouvez aussi utiliser |\noalign| avant la premi\`ere rang\'ee ou apr\`es la
+derni\`ere.)
+\eix^^|\halign|
+
+Vous pouvez aussi construire un alignement vertical avec la commande ^|\valign|
+\ctsref{\valign}. Un alignement vertical est organis\'e comme une s\'erie de
+colonnes plut\^ot que comme une s\'erie de rang\'ees. Un alignement vertical suit
+les m\^eme r\`egles qu'un alignement horizontal sauf que le r\^ole des rang\'ees et
+des colonnes est invers\'e. Par exemple, l'alignement vertical~:
+
+\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 produit~:
+\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}}
+}
+La commande ^|\strut| \ctsref{\strut} dans le patron est n\'ecessaire pour
+que les entr\'ees de chaque rang\'ee s'alignent proprement, c'est-\`a-dire,
+pour avoir une \refterm{ligne de base} commune et garder une distance
+uniforme entre les lignes de base.
+\eix\ctsidxref{cr}
+\eix^^{tables}
+
+\endconcept
+
+
+\concept {\anatomy}
+
+\texbook\ d\'ecrit la fa\c con dont {\TeX} compile ses sources en termes de
+``t\^aches digestives'' de \TeX---ses ``^{yeux}'', ``^{bouche}'',
+``^{\oesophage}'', ``^{estomac}'' et ``^{intestin}''. Savoir comment ces
+organes travaillent peut \^etre utile quand vous essayer de comprendre de subtils
+aspects du raisonnement de \TeX\ quand il dig\`ere un document.
+
+\ulist
+
+\li En utilisant ses ``\pix^{yeux}'', \TeX\ lit les \refterm{caract\`eres:caract\`ere} du
+^{fichier source} et les passe \`a sa bouche. Puisqu'un fichier source
+peut contenir des commandes ^|\input| \ctsref{\input},
+\TeX\ peut en effet d\'etourner son regard d'un fichier \`a l'autre.
+
+\li En utilisant sa ``\pix^{bouche}'', {\TeX} assemble les caract\`eres en
+\refterm{tokens:token} et les passe \`a son \oesophage.
+Chaque token est soit une \refterm{s\'equence de contr\^ole} ou un simple
+caract\`ere. Une s\'equence de contr\^ole commence toujours par un \refterm{caract\`ere
+d'\'echappement}. Notez que les espaces et les fins de ligne sont des caract\`eres
+de plein droit, de plus \TeX\ compresse une suite d'espaces en un seul token
+d'espace. Voir \knuth{pages~46--47}{56--58} pour les r\`egles avec lesquelles \TeX\
+assemble les caract\`eres en tokens.
+^^{tokens//assembl\'ee \`a partir de caract\`eres}
+
+\li En utilisant son ``\pix^{\oesophage}'', {\TeX} d\'eveloppe chaque macro, conditions, et
+^^{macros//d\'evelopp\'ees dans l'estomac de \TeX}
+^^{tokens//pass\'ee \`a l'estomac de \TeX}
+constructions similaires qu'il trouve (voir \knuth{pages~212--216}{249--253}) et passe
+la suite de \refterm{tokens:token} r\'esultante
+\`a l'estomac de \TeX. D\'evelopper un token
+peu faire appara\^\i tre d'autres tokens qui \`a leur tour ont besoin d'\^etre
+d\'evelopp\'es. {\TeX} parcourt ce d\'eveloppement de gauche \`a droite \`a moins
+que l'ordre soit modi\-fi\'e par
+une commande telle que |\expandafter| \ctsref{\expandafter}.
+En d'autres mots, l'\oe sophage de \TeX\ d\'eveloppe toujours le token le plus \`a
+gauche non-d\'evelopp\'e qu'il n'a pas encore envoy\'e vers l'estomac de \TeX.
+
+\li En utilisant son ``\pix^{estomac}'', {\TeX} ex\'ecute tous les groupes de token.
+Chaque groupe contient une commande primitive suivie par ses
+arguments, s'il y en a.
+La plupart des commandes sont de type ``compose ce caract\`ere'',
+dont leur groupe n'est constitu\'e que d'un token.
+Suivant les instructions donn\'ees par les commandes, l'estomac de
+\TeX\ assemble de plus en plus grandes unit\'es, d\'ebutant par des
+caract\`eres et finissant par des pages,
+et passe les pages \`a l'intestin de \TeX.
+^^{pages//assembl\'ees dans l'estomac de \TeX}
+L'estomac de \TeX\ ex\'ecute les taches de \refterm{coupure de ligne}---%
+^^{coupures de ligne}
+c'est-\`a-dire, couper chaque paragraphe en suite de lignes---%
+et de \refterm{coupure de page}---c'est-\`a-dire,
+couper une suite continue de lignes
+et autres mat\'eriels de mode vertical en pages.
+
+\li En utilisant ses ``\pix^{intestin}'', \TeX\ transforme les pages produites par son
+estomac en une forme destin\'ee \`a \^etre lue
+par d'autres program\-mes. Il envoit alors la sortie transform\'ee dans le
+\dvifile.
+^^{\dvifile//cr\'e\'e par l'intestin de \TeX}
+
+\endulist
+
+La plupart du temps, vous pouvez penser que les processus qui prennent place dans
+les yeux, bouches, \oesophage, estomac et intestin de \TeX\ ont lieu les uns apr\`es
+les autres. La v\'erit\'e en la mati\`ere est que des commandes ex\'ecut\'ees dans l'estomac
+de \TeX\ peuvent influencer les \'etapes suivantes de la digestion. Par exemple,
+quand l'estomac de \TeX\ rencontre la commande |\input| \ctsref{\input}, ses
+yeux commencent \`a lire un fichier diff\'erent~; quand l'estomac de \TeX\
+rencontre une commande |\catcode| \ctsref{\catcode} sp\'ecifiant un code de
+cat\'egorie pour le caract\`ere $c$, l'interpr\'etation de $c$ par la bouche de
+\TeX\ s'en trouve affect\'e. Et quand l'estomac de \TeX\ rencontre une d\'efinition
+de \refterm{macro}, les d\'eveloppements charg\'es dans l'\oe sophage de \TeX\
+sont eux aussi affect\'es.
+
+Vous pouvez comprendre comment les processus agissent les uns sur les autres
+en imaginant que chaque processus avale goul\^ument le
+rendu de son pr\'ed\'ecesseur d\`es qu'il devient disponible. Par
+exemple, une fois que l'estomac de \TeX\ a vu le dernier caract\`ere du
+nom de fichier dans une commande |\input|, \TeX\ fixe son regard
+imm\'ediatement sur le premier caract\`ere du fichier d'entr\'ee indiqu\'e.
+
+\endconcept
+
+%\pagebreak
+\conceptindex{arguments}
+\concept argument
+
+^^{commandes//arguments de}
+Un \defterm{argument} contient le texte pass\'e \`a une
+\refterm{commande}.
+Les arguments d'une commande compl\`etent la description de ce que
+la commande est suppos\'ee faire.
+La commande peut \^etre soit une commande \refterm{primitive}, soit une
+\refterm{macro}.
+
+Chaque commande primitive ^^{primitive//commande}
+a sa propre convention sur la forme de ses
+arguments. Par exemple, la suite de \refterm{tokens:token}~:
+
+\csdisplay
+\hskip 3pc plus 1em
+|
+consiste en la commande `|\hskip|' et les arguments
+`|3pc plus 1em|'. Mais si vous \'ecrivez~:
+
+\csdisplay
+\count11 3pc plus 1em
+|
+vous obtiendrez un effet enti\`erement diff\'erent.
+\TeX\ traitera `|\count11|' comme une commande avec un argument `|3|',
+suivi par les tokens de texte ordinaire `|pc plus 1em|'
+(parce que les registres de compteur attendent l'affectation d'un nombre)%
+---probablement pas ce dont vous aviez
+intention. L'effet de la commande, donc, sera d'assigner
+$3$ au registre du compteur $11$ (voir la discussion sur ^|\count|,
+\xref\count).
+
+Les macros, d'un autre cot\'e, suivent toutes la m\^eme convention
+pour leurs arguments.
+^^{macros//arguments de}
+Chaque argument pass\'e \`a une macro
+correspond \`a un \refterm{param\`etre}
+^^{param\`etres//et arguments}
+dans la d\'efinition de cette
+macro. ^^{macros//param\`etres de}
+Un param\`etre de macro est soit ``d\'elimit\'e'', soit ``non d\'elimite''.
+La d\'efinition de la macro d\'etermine le nombre et la nature des param\`etres de la macro
+et donc le nombre et la nature des arguments de la macro.
+
+La diff\'erence entre un argument d\'elimit\'e et un argument non d\'elimit\'e tient
+\`a la fa\c con qu'a \TeX\ de d\'ecider o\`u se termine l'argument.
+^^{arguments d\'elimit\'es}
+^^{arguments non d\'elimit\'es}
+\ulist
+\li Un argument d\'elimit\'e est constitu\'e des tokens \`a partir du d\'ebut de
+l'argument jusqu'\`a, mais sans l'inclure, la suite de tokens particuliers
+qui servent comme d\'elimiteur pour cet argument. Le d\'elimiteur est sp\'ecifi\'e
+dans la d\'efinition de la macro. Ainsi, vous ajoutez un argument d\'elimit\'e \`a
+une macro en \'ecrivant l'argument lui-m\^eme, suivi par le d\'elimiteur. Un
+argument d\'elimit\'e peut \^etre vide, c'est-\`a-dire, ne pas avoir de texte du
+tout. Chaque accolade d'un argument d\'elimit\'e doit \^etre appair\'e
+correctement, c'est-\`a-dire, chaque accolade gauche doit avoir une accolade
+droite correspondante et vice versa.
+
+\li Un argument non d\'elimit\'e consiste en un token simple ou une suite de
+tokens entour\'e d'accolades, comme ceci~:
+`|{Here is {the} text.}|'. Malgr\'e les apparences, les accolades ext\'erieures
+ne forment pas un \refterm{groupe}---\TeX\ ne les utilise que pour
+d\'eterminer quel est l'argument. Chaque accolade interne, comme celles autour
+de `|the|', doivent \^etre appair\'ees correctement. Si vous faites une erreur
+et mettez trop d'accolades fermantes, \TeX\ se plaindra d'un `unexpected right brace'
+\TeX\ se plaindra aussi si vous mettez trop d'accolades ouvrantes, mais vous
+obtiendrez \emph{cette} plainte longtemps apr\`es l'endroit o\`u vous pensiez
+finir l'argument (voir \xref{mismatched}).
+\endulist
+\noindent
+Voir \conceptcit{macro} pour plus d'information sur les param\`etres et les
+arguments. Vous trouverez les r\`egles pr\'ecises concernant les arguments
+d\'elimit\'es et non d\'elimit\'es dans \knuth{pages~203--204}{237--239}.
+\endconcept
+
+
+\concept {ASCII}
+
+\defterm{\ascii} est l'abr\'eviation de ``American Standard Code for
+Information Interchange''. Il y a $256$ ^{caract\`eres} \ascii, chacun avec
+son propre num\'ero de code, mais seuls les~$128$ premiers
+ont \'et\'e standardis\'es. Vous pouvez trouver leur signification dans une ``table
+de codes'' \ascii\ comme celle de la \knuth{page~367}{425}.
+Les caract\`eres $32$--$126$ sont des ``caract\`eres imprimables'',
+^^{caract\`eres imprimables} comme les lettres, les chiffres et les signes de
+ponctuation. Les caract\`eres restants sont des ``^{caract\`eres de contr\^ole}''
+qui sont utilis\'es sp\'ecialement (dans l'industrie informatique, pas dans \TeX)
+pour contr\^oler les entr\'ees\slash sorties et les instruments de communication
+de donn\'ees.
+Par exemple, le code \ascii\ $84$ correspond \`a la lettre `T', tandis que
+le code \ascii\ $12$ correspond \`a la fonction ``form feed''
+(interpr\'et\'e par la plupart des imprimantes par ``commence une nouvelle page'').
+Bien que le standard \ascii\ sp\'ecifie des significations pour les caract\`eres de
+contr\^ole, beaucoup de fabricants d'\'equipements tels que modems et imprimantes
+ont utilis\'e les caract\`eres de contr\^ole pour des usages autres que le standard.
+
+La signification d'un caract\`ere dans \TeX\ est normalement li\'ee \`a sa signification
+dans le standard \ascii, et les \refterm{polices:police} qui contiennent
+des caract\`eres imprimables \ascii\ ont normalement ces caract\`eres aux m\^emes
+positions que leurs contreparties \ascii.
+Mais certaines polices, notamment celles utilis\'ees en math\'ematique, remplacent
+les caract\`eres imprimables \ascii\ par d'autres caract\`eres sans aucune relation
+avec les caract\`eres \ascii.
+Par exemple, La police Computer Modern math\'ematique
+^^{police Computer Modern}
+|cmsy10| a le symbole math\'ematique
+`{$\forall$}' \`a la place du chiffre \ascii\ `8'.
+
+
+\endconcept
+
+\conceptindex{assignements}
+\concept assignement
+
+Un \defterm{assignement} est une construction qui dit \`a \TeX\ d'assigner une
+valeur \`a un registre,
+^^{registres//assignement \`a des}
+\`a un de ces
+\refterm{param\`etres:param\`etre} internes,
+^^{param\`etres//assignements \`a des}
+\`a une entr\'ee dans une de ces tables internes
+ou \`a une \refterm{s\'equence de contr\^ole}. Quelques exemples d'assignements sont~:
+
+\csdisplay
+\tolerance = 2000
+\advance\count12 by 17
+\lineskip = 4pt plus 2pt
+\everycr = {\hskip 3pt \relax}
+\catcode\`@ = 11
+\let\graf = \par
+\font\myfont = cmbx12
+|
+
+Le premier assignement indique que \TeX\ doit assigner la valeur num\'e\-rique
+|2000| au param\`etre num\'erique |\tolerance|, c'est-\`a-dire, met la valeur de
+|\tolerance| \`a $2000$. Les autres assignements sont similaires. Le `|=|'
+et les espaces sont optionnels, donc vous pouvez aussi \'ecrire le premier
+assignement plus bri\`evement~:
+
+\csdisplay
+\tolerance2000
+|
+
+Voir \knuth{pages~276--277}{321--322} pour la syntaxe d\'etaill\'ee des assignements.
+\endconcept
+
+
+\conceptindex{\boites}
+\concept {\boites}
+
+Une \defterm{bo\^\i te} est un rectangle de mati\`ere \`a composer. Un simple
+\refterm{caract\`ere} est une bo\^\i te par lui-m\^eme, et une page enti\`ere est
+aussi une bo\^\i te. \TeX\ forme une page comme une suite de bo\^\i tes contenant
+des bo\^\i tes contenant des bo\^\i tes. La bo\^\i te sup\'erieure est la page elle-m\^eme,
+les bo\^\i tes inf\'erieures sont souvent de simples caract\`eres et de simples
+lignes sont des bo\^\i tes qui sont quelque part au milieu.
+
+\TeX\ effectue la plupart de ses activit\'es de construction de bo\^\i te implicitement quand il
+construit des paragraphes et des pages.
+Vous pouvez construire des bo\^\i tes explicitement
+en utilisant nombre de \refterm{commandes} de \TeX, notamment
+^|\hbox| \ctsref{\hbox},
+^|\vbox| \ctsref{\vbox} et
+^|\vtop| \ctsref{\vtop}.
+La commande ^|\hbox|
+construit une bo\^\i te en assemblant des plus petites bo\^\i tes horizontalement de gauche \`a droite~;
+il op\`ere sur une \refterm{liste horizontale} et donne
+une \refterm{hbox} ^^{hbox} (bo\^\i te horizontale).
+^^{listes horizontales}
+Les commandes ^|\vbox| et |\vtop|
+construisent une bo\^\i te en assemblant de plus petites bo\^\i tes verticalement de haut en bas~;
+^^{vbox}
+elles op\`erent sur une \refterm{liste verticale}
+et donnent une \refterm{vbox} ^^{vbox} (bo\^\i te verticale).
+^^{listes verticales}
+Ces listes horizontales et verticales peuvent ne pas inclure que des bo\^\i tes plus petites mais
+plusieurs autres sortes d'entit\'es, par exemple, un \refterm{ressort} et
+des cr\'enages.
+^^{cr\'enages//comme \'el\'ements de liste}
+
+Une bo\^\i te a une \refterm{hauteur}, une \refterm{profondeur} et une \refterm{largeur},
+^^{hauteur} ^^{profondeur} ^^{largeur}
+comme ceci~:
+\vdisplay{\offinterlineskip\sevenrm
+ \halign{#&#&\kern3pt \hfil#\hfil\cr
+ &\hrulefill\cr
+ &\vrule
+ \vtop to .7in{\vss \hbox to .9in{\hss ligne de base\hss}\vskip4pt}%
+ \vrule
+ &\labelledheight{.7in}{hauteur}\cr
+ %
+ \vbox to 0pt{
+ \vss
+ \hbox{point de r\'ef\'erence\hbox to 15pt{\rightarrowfill}%
+ \hskip3pt}%
+ \kern-4.5pt}&{\box\refpoint}\hrulefill\cr
+ %
+ \omit
+ &\vrule\hfil\vrule
+ &\labelledheight{.4in}{profondeur}\cr
+ %
+ &\hrulefill\cr
+ %
+ \noalign{\vskip3pt}%
+ &\leftarrowfill { largeur }\rightarrowfill\cr
+}}
+
+^^{lignes de base}
+La \refterm{ligne de base} est comme une des
+lignes-guide claire d'un bloc de papier lign\'e.
+Les bo\^\i tes de lettres telles qu'un `g'
+s'\'etendent sous la ligne de base~; Les bo\^\i tes de lettres telles qu'un `h' ne le font pas.
+La hauteur d'une bo\^\i te est la distance par laquelle une bo\^\i te s'\'etend au-dessus de sa
+ligne de base, tandis que sa profondeur est la distance par laquelle elle s'\'etend sous sa
+ligne de base. \bix^^{point de r\'ef\'erence}
+Le \minref{point de r\'ef\'erence}
+d'une bo\^\i te est l'endroit o\`u sa ligne de base rejoint son cot\'e gauche.
+
+{\tighten
+\TeX\ construit une hbox $H$ d'une liste horizontale en d\'esignant un point
+de r\'ef\'erence pour $H$ et en enfilant les items dans la liste $H$ un par un
+de gauche \`a droite. chaque bo\^\i te de la liste est plac\'ee de telle fa\c con que
+sa ligne de base co\"\i ncide avec la ligne de base de $H$\kern-2pt, c'est-\`a-%
+dire que les bo\^\i tes la composant sont align\'ees horizontalement%
+\footnote{Si une bo\^\i te est hauss\'ee ou baiss\'ee avec ^|\raise| ou ^|\lower|,
+\TeX\ utilise son point de r\'ef\'erence avant le d\'eplacement quand il la
+place.}. La hauteur de $H$ est la hauteur de la bo\^\i te la plus grande de la
+liste, et la profondeur de $H$ est la profondeur de la bo\^\i te la plus
+profonde de la liste. La largeur de $H$ est la somme des largeurs de tous
+les items dans la liste. Si quelques-uns de ces items sont des
+\refterm{ressort}s et que \TeX\ a besoin de r\'etr\'ecir ou d'\'etirer le ressort, la
+largeur de $H$ sera plus large ou plus \'etroite en cons\'equence. Voir la
+\knuth{page~77}{90} pour les~d\'etails.
+\par}
+
+De m\^eme, \TeX\ construit une vbox $V$ d'une liste verticale en d\'esignant un
+point de r\'ef\'erence temporaire pour $V$ et ensuite en enfilant les items dans la
+liste $V$ un par un de haut en bas. Chaque bo\^\i te dans la liste est
+plac\'ee de telle fa\c con que leur point de r\'ef\'erence est align\'e verticalement avec le
+point de r\'ef\'erence de $V$\footnote{Si une bo\^\i te est d\'eplac\'ee \`a gauche
+ou \`a droite avec
+^|\moveleft| ou ^|\moveright|, \TeX\ utilise son point de r\'ef\'erence avant
+le d\'eplacement quand il la place.}. Quand chaque bo\^\i te autre que la premi\`ere est ajout\'ee \`a
+\Vcomma, \TeX\ met un \minref{ressort interligne} juste au-dessus d'elle. (Ce
+^{ressort interligne} n'a pas d'\'equivalent pour les hbox.) La largeur de $V$ est la
+largeur de la bo\^\i te la plus large de la liste, et les extensions verticales (hauteur
+plus profondeur) de $V$ est la somme des \'el\'ements verticaux \'etendus de tous les
+items de la liste.
+
+\bix^^|\vbox|
+\bix^^|\vtop|
+La diff\'erence entre |\vbox| et |\vtop| est sur leur fa\c con de partitionner
+l'extension verticale de $V$ en hauteur et en largeur.
+Le choix du point de r\'ef\'erence de $V$ d\'etermine cette partition.
+\ulist
+\li Pour |\vbox|, \TeX\ place le point de r\'ef\'erence sur une ligne
+horizontale avec le point de r\'ef\'erence du dernier composant bo\^\i te ou trait
+de \Vcomma, sauf que si la derni\`ere bo\^\i te (ou le dernier trait) est
+suivie d'un ressort ou d'un cr\'enage, \TeX\ place le point de r\'ef\'erence tout en
+bas de $V$%
+\footnote{La profondeur est limit\'ee par le param\`etre
+^|\boxmaxdepth| \ctsref{\boxmaxdepth}.}.
+
+\li Pour |\vtop|, \TeX\ place le point de r\'ef\'erence sur une ligne horizontale
+avec le point de r\'ef\'erence du premier composant bo\^\i te ou trait de \Vcomma,
+sauf que si la premi\`ere bo\^\i te (ou le premier trait)
+est pr\'ec\'ed\'ee par un ressort ou un cr\'enage, \TeX\ place
+le point de r\'ef\'erence tout en haut de \Vperiod.
+
+\endulist
+\noindent
+A proprement parler, alors, |\vbox| met le point de r\'ef\'erence pr\`es du haut
+du vbox et |\vtop| le met pr\`es du haut.
+Quand vous voulez aligner une rang\'ee de vbox pour que leur sommet
+s'aligne horizontalement,
+vous utiliserez normalement |\vtop| plut\^ot que |\vbox|.
+Voir les \knuth{pages~78 et 80--81}{91 et 94--95} pour les
+d\'etails sur comment \TeX\ construit des vbox.
+\eix^^|\vbox|
+\eix^^|\vtop|
+\eix^^{point de r\'ef\'erence}
+
+Vous avez une certaine libert\'e dans la construction de bo\^\i tes. Le mat\'eriel
+\`a composer
+dans une bo\^\i te peut s'\'etendre au-del\`a des bords de la bo\^\i te comme il le fait
+pour certaines lettres (pour la plupart italiques ou pench\'ees). Les composants
+bo\^\i tes des grandes bo\^\i tes peuvent se chevaucher.
+Une bo\^\i te peut avoir une largeur, une profondeur ou une hauteur n\'egative,
+des bo\^\i tes comme celles-ci ne sont pas souvent utiles.
+
+Vous pouvez sauvegarder une bo\^\i te dans un \refterm{registre} de bo\^\i te et la rappeler plus tard.
+Avant d'utiliser un registre de bo\^\i te,
+^^{registres de \boite}
+Vous devez la r\'eserver et lui donner un nom
+avec la commande ^|\newbox| \ctsref{\@newbox}. Voir
+\conceptcit{registre} pour plus d'information sur les registres de bo\^\i tes.
+\endconcept
+
+
+\conceptindex{caract\`eres}
+\concept caract\`ere
+
+{\tighten
+\TeX\ travaille avec des \defterm{caract\`eres} provenant de deux contex\-tes~:
+des caract\`eres du source, quand il lit et des caract\`eres de sortie,
+quand il compose. \TeX\ transforme la plupart des caract\`eres saisis dans
+le caract\`ere de sortie qui lui correspond. Par exemple, il transforme
+normalement la lettre saisie `|h|' en `h' compos\'e dans la police courante.
+Ce n'est pas le cas, n\'eanmoins, pour un caract\`ere saisi tel que `|$|' qui
+a une signification sp\'eciale.
+\par}
+
+\TeX\ obtient ses caract\`eres saisis en les lisant \`a partir du fichier source
+(ou de votre terminal) et en d\'eveloppant les \refterm{macros:macro}. Ce
+sont les seuls moyens par lesquels \TeX\ puisse acqu\'erir un caract\`ere saisi.
+Chaque caract\`ere d'entr\'ee a un num\'ero de code correspondant \`a sa position
+dans la table de code \refterm{\ascii}. ^^{\ascii}
+Par exemple, la lettre `|T|' a le code \ascii~$84$.
+
+Quand \TeX\ lit un caract\`ere, il lui attache un \refterm{code de cat\'egorie}.
+^^{codes de cat\'egorie//attach\'e pendant l'entr\'ee}
+Le code de cat\'egorie affecte la fa\c con dont \TeX\ interpr\`ete le caract\`ere
+une fois qu'il a \'et\'e lu. \TeX\ d\'etermine (et se souvient) des codes de
+cat\'egorie des caract\`eres d'une macro quand il lit sa d\'efinition. Comme \TeX\
+lit les caract\`eres avec ses yeux \seeconcept{\anatomy} il fait quelques
+``filtrages'' comme condenser des suites de caract\`eres espace en un espace
+seul. Voir les \knuth{pages~46--48}{56--59} pour les d\'etails de ce filtrage.
+
+Les ``^{caract\`eres de contr\^ole}'' \ascii\ ont les codes $0$--$31$ et $127$--$255$.
+Ils ne sont pas visualisables ou provoquent des choses \'etranges si vous essayez
+de les afficher.
+N\'eanmoins, on en a parfois besoin dans les sources \TeX, donc \TeX\ a une
+fa\c con sp\'eciale de les noter.
+\xrdef{twocarets}
+Si vous saisissez `|^^|$c$', o\`u $c$ est n'importe quel caract\`ere, vous obtenez
+le caract\`ere dont le code \ascii\ est soit plus grand soit plus petit de $64$
+que le code \ascii\ de $c$.
+La plus grande valeur de code acceptable en utilisant cette notation est $127$
+donc la notation n'est pas ambigu\"e.
+Trois instances particu\-li\`erement communes de cette notation sont
+`|^^M|' (le caract\`ere \ascii\ \asciichar{retour}),
+`|^^J|' (le caract\`ere \ascii\ \asciichar{saut\ de\ page}) et
+`|^^I|' (le caract\`ere \ascii\ \asciichar{tabulation\ horizontale}).
+\ttidxref{^^M}\ttidxref{^^J}\ttidxref{^^I}
+
+{\tighten
+\TeX\ a aussi une autre notation pour indiquer la valeur des codes \ascii\
+qui fonctionne pour tous les codes de caract\`ere de $0$ \`a $255$.
+\xrdef{hexchars}
+Si vous saisissez `|^^|$xy$', o\`u $x$ et $y$ sont des ^{chiffres
+hexad\'ecimaux} `|0123456789abcdef|', vous obtenez le caract\`ere dont le
+code est sp\'ecifi\'e. Des lettres minuscules sont n\'ecessaires ici.
+\TeX\ opte pour l'interpr\'etation des ``chiffres hexad\'ecimaux'' quand il
+a le choix, donc vous ne devez pas faire suivre un caract\`ere comme `|^^a|'
+par un chiffre hexad\'ecimal minuscule---si vous le faites, vous aurez la
+mauvaise interpr\'etation.
+Si vous avez besoin d'utiliser cette notation, vous trouverez pratique
+d'avoir une table des codes \ascii.
+\par}
+
+Un caract\`ere de sortie est un caract\`ere de composition.
+Une commande qui produit un caract\`ere de sortie signifie
+``produit une \refterm{bo\^\i te} contenant un caract\`ere num\'ero $n$ dans
+la \refterm{police} courante'', o\`u $n$ est d\'etermin\'e par la commande.
+\TeX\ produit votre document compos\'e en combinant de telles bo\^\i tes avec
+d'autres \'el\'ements typographiques et les arrange sur la page.
+
+Un caract\`ere d'entr\'ee dont le code de cat\'egorie est $11$ (^{lettre}) ou
+$12$ (autre)
+^^{autres caract\`eres}
+agit comme une commande pour produire le caract\`ere de sortie correspondant.
+En plus, vous pouvez demander \`a \TeX\ de produire un carac\-t\`ere $n$ en
+entrant la commande `|\char |$n$' \ctsref{\char}, ^^|\char| o\`u $n$ est un
+\refterm{nombre} entre $0$ et $255$. Les commandes `|h|',
+|\char`h| et |\char104| ont toutes le m\^eme effet. ($104$ est le
+code \ascii\ de `h'.)
+
+\endconcept
+
+
+\conceptindex{caract\`eres actifs}
+\concept {caract\`ere actif}
+
+Un \defterm{caract\`ere actif} est un \refterm{caract\`ere} poss\'edant une
+d\'efinition, c'est-\`a-dire, une d\'efinition de macro, qui lui est associ\'ee.
+^^{macros//nomm\'ees par des caract\`eres actifs}
+Vous pouvez penser \`a un caract\`ere actif comme \`a une s\'equence de contr\^ole
+d'un type sp\'ecial. Quand \TeX\ rencontre un caract\`ere actif, il ex\'ecute la
+d\'efinition associ\'ee avec le caract\`ere. Si \TeX\ rencontre un caract\`ere actif
+qui n'a pas de d\'efinition associ\'ee, il se plaindra d'un ``undefined control
+sequence''.
+
+Un caract\`ere actif a un \refterm{code de cat\'egorie} \`a $13$ (la valeur
+d'^|\active|).
+Pour d\'efinir un caract\`ere actif, vous devez d'abord
+utiliser la commande ^|\catcode|
+\ctsref{\catcode} pour le rendre actif
+et ensuite donner la d\'efini\-tion du caract\`ere, en utilisant
+une commande comme |\def|, |\let| ou |\chardef|.
+La d\'efinition d'un caract\`ere actif a la m\^eme forme que
+la d\'efinition d'une \refterm{s\'equence de contr\^ole}.
+^^{codes de cat\'egorie//de caract\`eres actifs}
+Si vous essayez de d\'efinir la macro pour un caract\`ere actif
+avant d'avoir rendu le caract\`ere actif, \TeX\ se plaindra d'un
+"missing control sequence".
+
+Par exemple, le caract\`ere tilde (|~|) est d\'efini comme un caract\`ere
+actif dans \plainTeX. Il
+produit un espace entre deux mots mais relie ces mots pour que
+\TeX\ ne transforme pas cet espace en \refterm{coupure de ligne}.
+\refterm{\PlainTeX:\plainTeX} d\'efinit `|~|' par les commandes~:
+
+\csdisplay
+\catcode `~ = \active \def~{\penalty10000\!visiblespace}
+|
+(|\penalty| inhibe une coupure de ligne et `|\!visiblespace|'
+ins\`ere un espace.)
+\endconcept
+
+
+\concept {caract\`ere d'\'echappement}
+
+Un \defterm{caract\`ere d'\'echappement} introduit une s\'equence de contr\^ole.
+Le caract\`ere d'\'echappement dans \refterm{\plainTeX} est l'antislash (|\|).
+\indexchar \
+Vous pouvez changer le caract\`ere d'\'echappement de $c_1$ vers $c_2$
+en r\'eassignant les codes de cat\'egorie de $c_1$ et $c_2$
+avec la commande ^|\catcode| \ctsref{\catcode}.
+Vous pouvez aussi d\'efinir des caract\`eres d'\'echap\-pement additionnels de la m\^eme fa\c con.
+Si vous voulez composer du mat\'e\-riel contenant des caract\`eres d'\'echappement litt\'eraux,
+vous devez
+soit
+(a) d\'efinir une s\'equence de contr\^ole qui transforme le caract\`ere d'\'echap\-pe\-ment imprim\'e soit
+(b) changer temporairement son code de cat\'egorie, en utilisant la
+m\'ethode montr\'ee en \xrefpg{verbatim}. La d\'efinition~:
+
+\csdisplay
+\def\\{$\backslash$}
+|
+est un moyen de cr\'eer une s\'equence de contr\^ole qui le transforme en `$\backslash$'
+(un antislash compos\'e dans une police math\'ematique).
+
+Vous pouvez utiliser le param\`etre ^|\escapechar| \ctsref{\escapechar} pour sp\'ecifier
+comment le caract\`ere de contr\^ole est repr\'esent\'e dans des s\'equences de contr\^ole
+synth\'etis\'ees,
+c'est-\`a-dire, celles cr\'e\'ees par |\string| et |\message|.
+
+
+\endconcept
+
+
+\concept {c\'esure}
+
+\TeX\ c\'esure les mots automatiquement en compilant votre document.
+\TeX\ n'est pas un acharn\'e de l'insertion de c\'esure, pr\'ef\'erant trouver \`a la
+place une bonne coupure de ligne en ajustant l'espace entre les mots et en
+d\'epla\c cant les mots d'une ligne \`a l'autre.
+\TeX\ est assez intelligent pour comprendre les c\'esures qui sont d\'ej\`a dans
+les mots
+
+Vous pouvez contr\^oler les c\'esures de \TeX\ de plusieurs fa\c cons~:
+\ulist
+\li Vous pouvez dire \`a \TeX\ d'autoriser une c\'esure \`a un endroit particulier
+en ins\'erant une c\'esure optionnelle
+^^{c\'esures optionnelles}
+avec la commande ^|\-| \ctsref{\@minus}.
+\li Vous pouvez dire \`a \TeX\ comment couper des mots particuliers dans votre
+document avec la commande ^|\hyphenation| \ctsref{\hyphenation}.
+\li Vous pouvez englober un mot dans une \refterm{hbox} pour emp\^echer \TeX\
+de le couper.
+\li Vous pouvez fixer la valeur des p\'enalit\'es comme avec |\hyphen!-pe!-nalty|
+\ctsref\hyphenpenalty.
+\endulist
+\noindent Si un mot contient une c\'esure explicite ou optionnelle,
+\TeX\ ne le coupera jamais ailleurs.
+\endconcept
+
+
+\concept classe
+
+La \defterm{classe} d'un \refterm{caract\`ere} sp\'ecifie le r\^ole de ce caract\`ere
+dans les formules math\'ematiques. La classe d'un caract\`ere est encod\'ee dans son
+\refterm{mathcode}. ^^{mathcodes//classe encod\'ee en} Par exemple, le
+signe \'egal `|=|' est dans la classe $3$ (Relation). \TeX\ utilise sa
+connaissance de classe de caract\`ere pour d\'ecider combien d'espace mettre
+entre diff\'erents composants d'une formule math\'ematique. \margin{clarifying
+material added} Par exemple, voici une formule math\'ematique affich\'ee comme
+\TeX\ l'im\-prime normalement et avec la classe de chaque caract\`ere modifi\'e
+al\'eatoi\-rement~:
+$$\strut a+(b-a)=a \qquad
+ \mathopen{a}\mathord{+}\mathrel{(}\mathclose{b}\mathclose{-}
+ \mathop{a}\mathopen{)}\mathord{=}\mathopen{a}$$
+
+Voir \xrefpg\mathord\ de ce livre pour une liste des classes et la
+\knuth{page~154}{180} pour leurs significations.
+
+\endconcept
+
+
+\conceptindex{codes de cat\'egorie}
+\concept {codes de cat\'egorie}
+
+Le \defterm{code de cat\'egorie} d'un \refterm{caract\`ere} d\'etermine le r\^ole
+de ce caract\`ere dans \TeX.
+^^{caract\`eres//code de cat\'egorie}
+Par exemple, \TeX\ assigne un certain r\^ole aux
+lettres, un autre au caract\`ere espace, et ainsi de suite. \TeX\ attache un
+code \`a chaque caract\`ere qu'il lit. Quand \TeX\ lit la
+lettre `|r|', par exemple, il lui attache normalement
+le code de cat\'egorie $11$ (lettre).
+Pour de simples applications \TeX\ vous n'avez pas \`a vous pr\'eoccuper des
+codes de cat\'egorie, mais ils deviennent importants quand vous essayez
+des effets sp\'eciaux.
+
+Les codes de cat\'egorie ne s'appliquent qu'aux caract\`eres que \TeX\ lit dans les
+fichiers source. Une fois qu'un caract\`ere a pass\'e l'^{\oesophage} de \TeX\
+\seeconcept{\anatomy} et a \'et\'e interpr\'et\'e, son code de cat\'egorie ne
+sert plus. Un caract\`ere que vous produisez avec la commande ^|\char|
+\ctsref{\char} n'a pas de code de cat\'egorie parce que |\char|
+est une instruction pour que \TeX\ produise un certain caract\`ere d'une
+certaine \refterm{police}. Par exemple, le code ^{\ascii} pour `|\|'
+(le caract\`ere d'\'echappement usuel) est $92$. Si
+vous saisissez `|\char92 grok|', Ce n'est \emph{pas} \'equivalent \`a |\grok|.
+\`a la place il demande \`a \TeX\ de
+composer `$c$grok', o\`u $c$ est le caract\`ere en position $92$
+de la table de code de la police courante.
+
+Vous pouvez utiliser la commande ^|\catcode| \ctsref{\catcode} pour r\'eassigner le
+code de cat\'egorie de tout caract\`ere. En changeant les code de cat\'egorie vous
+pouvez changer les r\^oles de caract\`eres vari\'es. Par exemple, si vous saisissez
+`|\catcode`\@ = 11|', le code de cat\'egorie du signe arrose (|@|) sera celui
+d'une ``lettre''. Vous pourrez alors avoir `|@|' dans le nom d'une s\'equence de
+contr\^ole.
+
+Voici une liste des codes de cat\'egorie tels qu'ils sont d\'efinis dans
+\refterm{\plainTeX} (voir \xref{twocarets} pour une explication de la
+notation |^^|),
+ainsi que les caract\`eres de chaque cat\'egorie~:
+
+\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 Signification\cr
+\noalign{\vskip\tinyskipamount}
+0&Caract\`ere d'\'echappement \quad |\| ^^{caract\`ere d'\'echappement//code de cat\'egorie}
+ {\recat!ttidxref[\//code de cat\'egorie]]
+ \cr
+1&D\'ebut d'un groupe \quad |{| ^^{groupes}
+ {\recat!ttidxref[{//code de cat\'egorie]]
+ \cr
+2&Fin d'un groupe \quad |}|
+ {\recat!ttidxref[}//code de cat\'egorie]]
+ \cr
+3&basculement en math\'ematique \quad |$| ^^{basculement en math\'ematique}
+ {\recat!ttidxref[$//code de cat\'egorie]]
+ \cr
+4&Alignement tab \quad |&| ^^{tabulations} ^^{alignements//caract\`ere tabulation pour}
+ \ttidxref{&//code de cat\'egorie} \cr
+5&Fin d'une ligne \quad |^^M| \tequiv \ascii\ \asciichar{retour chariot}
+ ^^{fin de ligne} \ttidxref{^^M//code de cat\'egorie}\cr
+6&Param\`etre de macro \quad |#|
+ ^^{macros//param\`etres de}
+ ^^{param\`etres//indiqu\'es par \b\tt\#\e}
+ \ttidxref{#//code de cat\'egorie} \cr
+7&Exposant \quad |^| et |^^K| ^^{exposants}
+ \ttidxref{^^K}
+ \ttidxref{^//code de cat\'egorie} \cr
+8&Indice \quad |_| et |^^A| ^^{indices}
+ \ttidxref{^^A}
+ \ttidxref{_//code de cat\'egorie} \cr
+9&caract\`ere ignor\'e \quad |^^@| \tequiv \ascii\ \asciichar{nul}
+ ^^{caract\`eres ignor\'es} \indexchar ^^@ \cr
+10&Espace \quad \visiblespace\ et |^^I| \tequiv \ascii\
+ \asciichar{tabulation}
+ ^^{tabulation horizontale}
+ ^^{caract\`eres espaces//code de cat\'egorie} \indexchar ^^I
+ {\recat!ttidxref[ ]]
+ \cr
+11&Lettre \quad |A| \dots |Z| et |a| \dots |z| ^^{lettre}\cr
+12&Autres caract\`eres \quad (tout ce qui n'est pas ci-dessus ou ci-dessous)
+ ^^{autres caract\`eres}\cr
+13&Caract\`ere actif \quad |~| et |^^L| \tequiv\ascii\ \asciichar{saut\ de\ page}
+ ^^{caract\`eres actifs} ^^{retour chariot} \indexchar ~ \indexchar ^^L \cr
+14&Caract\`ere de commentaire \quad |%| ^^{commentaires}
+ {\recat!ttidxref[%//code de cat\'egorie]]
+ \cr
+15&Caract\`ere invalide \quad |^^?| \tequiv \ascii\ \asciichar{suppression}
+ ^^{caract\`eres invalides} \indexchar ^^? \cr
+}}
+\vskip\belowdisplayskip
+%k \vskip 0pt plus 2pt % to fix bad page break
+
+\noindent Mise \`a part ceux des cat\'egories $11$--$13$,
+tous les caract\`eres d'une cat\'egorie particuli\`ere produisent le m\^eme effet.
+\margin{Misleading material removed.}
+Par exemple, supposez
+que vous saisissiez~:
+\csdisplay
+\catcode`\[ = 1 \catcode`\] = 2
+|
+Alors les caract\`eres crochets droits et gauches deviennent \'equivalents aux caract\`eres de
+d\'ebut et de fin d'un groupe, les caract\`eres accolades droites et gauches.
+Avec ces d\'efinitions `|[a b]|'
+est un groupe valide, ainsi que \hbox{`|[a b}|'} et~\hbox{`|{a b]|'}.
+
+Les caract\`eres des cat\'egories $11$ (lettre) et $12$
+(autres caract\`eres) agis\-sent comme des \refterm{commandes:commande}
+qui signifient
+``produit une \refterm{bo\^\i te} contenant ce caract\`ere
+compos\'e dans la police courante''.
+La seule distinction entre les lettres et les ``autres'' caract\`eres est
+que les lettres peuvent appara\^\i tre dans des \refterm{mots de contr\^ole} mais
+pas les ``autres'' caract\`eres.
+
+Un caract\`ere de cat\'egorie $13$ (actif) agit comme une s\'equence de contr\^o\-le
+\`a lui tout seul. \TeX\ se plaint s'il rencontre un caract\`ere actif qui n'est
+pas associ\'e avec une d\'efinition.
+^^{caract\`eres actifs}
+
+Si \TeX\ rencontre un caract\`ere invalide ^^{caract\`eres invalides} (cat\'egorie $15$)
+dans votre source, il s'en plaindra.
+
+Les caract\`eres `|^^K|' et `|^^A|' ont \'et\'e inclus dans les cat\'egories
+$8$ (indice) et $9$ (exposant), m\^eme si ces significations
+ne suivent pas l'interpr\'etation du standard \refterm{\ascii}.
+C'est parce que certains claviers, tout du moins certains \`a
+l'universit\'e de Stanford d'o\`u \TeX\ est originaire, n'ont pas
+de touche fl\`eche vers le bas et fl\`eche vers le haut qui g\'en\`erent ces caract\`eres.
+\ttidxref{^^A}
+\ttidxref{^^K}
+
+Il y a une subtilit\'e sur la fa\c con dont \TeX\ assigne les codes de cat\'egories
+qui peut vous d\'eboussoler si vous ne la connaissez pas. \TeX\ a parfois
+besoin de rechercher un caract\`ere deux fois quand il fait un survol initial~:
+la premi\`ere fois pour la fin d'une pr\'ec\'edente construction, c'est-\`a-dire,
+une s\'equence de contr\^ole et ensuite pour transformer ce caract\`ere en token.
+\TeX\ n'a pas besoin d'assigner le code de cat\'egorie avant d'avoir vu le
+\emph{second} caract\`ere. Par exemple~:
+
+\csdisplay
+\def\foo{\catcode`\$ = 11 }% Make $ be a letter.
+\foo$ % Produces a `$'.
+\foo$ % Undefined control sequence `foo$'.
+|
+\noindent
+Ce bout de code \TeX\ produit `\$' dans la sortie. Quand \TeX\ voit le
+`|$|' sur la seconde ligne, il recherche la fin du nom d'une s\'equence de
+contr\^ole. Puisque le `|$|' n'est pas encore une lettre, il marque la fin de
+`|\foo|'. Ensuite, \TeX\ d\'eveloppe la macro `|\foo|' et change le code de
+cat\'egorie de `|$|' en $11$ (lettre). Alors, \TeX\ lit le `|$|' ``pour de
+vrai''. Puisque `|$|' est maintenant une lettre, \TeX\ produit une bo\^\i te
+contenant le caract\`ere `|$|' de la police courante. Quand \TeX\ voit la
+troisi\`eme ligne, il traite `|$|' comme une lettre et donc consid\`ere qu'elle
+fait partie du nom de la s\'equence de contr\^ole. Avec comme r\'esultat qu'il se
+plaint d'un ``undefined control sequence |\foo$|''.
+
+\TeX\ se comporte de cette fa\c con m\^eme lorsque le caract\`ere de
+terminaison est une fin de ligne. Par exemple, supposez que la macro
+|\fum| active le caract\`ere de fin de ligne. Alors si |\fum|
+appara\^\i t sur une ligne $\ell$ elle-m\^eme, \TeX\ interpr\'etera
+d'abord la fin de la ligne $\ell$ comme la fin de la s\'equence de
+contr\^ole |\fum| et ensuite \emph{r\'einterpr\'etera} la fin de la
+ligne de $\ell$ comme un caract\`ere actif.
+
+\endconcept
+
+
+\conceptindex{commandes}
+\concept commande
+
+Une \defterm{commande} demande \`a \TeX\ de faire une certaine action.
+Chaque \refterm{token} qui atteint l'estomac de \TeX\seeconcept{\anatomy}
+agit comme une commande, sauf celui qui fait partie des arguments d'une
+autre commande (voir dessous).
+^^{tokens//comme commandes}
+Une commande peut \^etre appel\'ee par une
+\refterm{s\'equence de contr\^ole}, par un \refterm{caract\`ere actif} ou par un
+caract\`ere ordinaire. Il peut sembler bizarre que \TeX\ traite un carac\-t\`ere
+ordinaire comme une commande, mais en fait c'est ce qu'il fait~:
+Quand \TeX\ voit
+un caract\`ere ordinaire
+il construit une \refterm{bo\^\i te} contenant ce caract\`ere compos\'e dans
+la police courante.
+
+Une commande peut avoir des arguments.
+Les arguments d'une commande sont de simples tokens ou
+groupes de tokens qui compl\`etent la description de ce que
+la commande est suppos\'ee faire.
+Par exemple, la commande `|\vskip 1in|' demande \`a \TeX\ de sauter
+$1$ pouce verticalement. Elle a un argument `|1in|',
+qui est constitu\'e de trois tokens.
+La description de ce que |\vskip| est suppos\'ee faire serait incompl\`ete
+sans sp\'ecifier de combien elle est suppos\'ee sauter.
+Les tokens dans les arguments d'une commande ne sont pas consid\'er\'es
+eux-m\^emes comme des commandes.
+
+Quelques exemples de diff\'erentes sortes de commandes de \TeX\ sont~:
+\ulist\compact
+\li Des caract\`eres ordinaires, comme `|W|', qui demande \`a \TeX\
+de produire une bo\^\i te contenant un `W' compos\'e.
+\li Des commandes de modification de police,
+telles que |\bf|, qui commence une composition en gras
+\li Des accents, tels que |\`|, qui produit un accent grave comme dans `\`e'
+\li Des symboles sp\'eciaux et des ligatures, comme |\P| (\P) et |\ae| (\ae)
+\li Des param\`etres, tels que |\parskip|, le montant du ressort que
+\TeX\ met entre les paragraphes
+\li des symboles math\'ematiques, tels que |\alpha| ($\alpha$) et |\in| ($\in$)
+\li Des op\'erateurs math\'ematiques, tels que |\over|, qui produit une fraction
+\endulist
+\endconcept
+
+
+\concept {constantes d\'ecimales}
+
+See \conceptcit{nombre}.
+\endconcept
+
+\concept {construction de page}
+
+Voir \conceptcit{page}.
+\endconcept
+
+
+\conceptindex{coupures de ligne}
+\concept {coupure de ligne}
+
+Une \defterm{coupure de ligne} est un endroit dans votre document o\`u \TeX\
+termine une ligne quand il compose un paragraphe. Quand \TeX\ compile votre
+document, il collecte le contenu de chaque paragraphe dans une \refterm{liste
+horizontale}. Quand il a collect\'e un paragraphe entier, il analyse la liste
+pour trouver ce qu'il consid\`ere comme \'etant les meilleures coupures de ligne
+possibles. \TeX\ associe des ``^{d\'em\'erites}'' avec diff\'erents sympt\^omes de
+coupure de ligne non attractive---des lignes ayant trop ou trop peu d'espace
+entre les mots, des lignes cons\'ecutives se terminant par des c\'esures, et
+ainsi de suite. Il choisit alors les coupures de lignes de mani\`ere \`a minimiser
+le nombre total de d\'em\'erites. Voir les \knuth{pages~96--101}{112--118} pour une
+description compl\`ete des r\`egles de coupure de ligne de \TeX.
+
+Vous pouvez contr\^oler le choix des coupures de ligne de \TeX\ de plusieurs mani\`eres~:
+\ulist
+
+\li vous pouvez ins\'erer une \refterm{p\'enalit\'e} (\xref{hpenalty}) quelque part
+dans la liste horizontale que \TeX\ construit quand il forme un paragraphe.
+^^{p\'enalit\'es//en listes horizontales}
+Une p\'enalit\'e
+positive d\'ecourage \TeX\ de couper la ligne \`a cet endroit, tandis qu'une
+p\'enalit\'e n\'egative---un bonus, en quelque sorte---encourage \TeX\ \`a couper
+la ligne \`a cet endroit. Une p\'enalit\'e de $10000$ ou plus emp\^eche une coupure de
+ligne, tandis qu'une p\'enalit\'e de $-10000$ ou moins force une coupure de ligne.
+Vous pouvez obtenir les m\^emes effets avec les commandes ^|\break| et
+^|\nobreak| (voir \pp\xrefn{hbreak} et~\xrefn{hnobreak}).
+
+\li Vous pouvez dire \`a \TeX\ d'autoriser une c\'esure \`a un endroit particulier
+en ins\'erant une c\'esure optionnelle
+^^{c\'esures optionnelles}
+avec la commande |\-| \ctsref{\@minus}, ou
+sinon en contr\^olant comment \TeX\ met des c\'esures dans votre document \seeconcept
+{c\'esure}.
+^^|\-//sur une coupure de ligne|
+
+\li Vous pouvez dire \`a \TeX\ d'autoriser une coupure de ligne apr\`es un
+(/) ^{slash} entre
+deux mots en ins\'erant un ^|\slash| \ctsref{\slash}
+entre eux, par exemple, `|fur!-longs\slash fortnight|'.
+
+\li Vous pouvez dire \`a \TeX\ de ne pas couper une ligne entre deux mots particuliers en
+ins\'erant une ^{punaise} (|~|) entre ces mots.
+^^|~//sur une coupure de ligne|
+
+\li Vous pouvez ajuster les p\'enalit\'es associ\'ees avec les coupures de ligne en
+assignant des valeurs diff\'erentes aux \refterm{param\`etres:param\`etre} de coupures de ligne de \TeX.
+
+\li Vous pouvez englober un mot ou une s\'equence de mots dans une \refterm{hbox},
+emp\^echant ainsi \TeX\ de couper la ligne o\`u que cela soit dans l'hbox.
+^^{hbox//contr\^oler des coupures de lignes}
+\endulist
+
+Il est pratique de savoir o\`u \TeX\ peut couper une ligne~:
+\ulist
+\li sur un ressort, sous r\'eserve que~:
+\olist
+\li l'objet pr\'ec\'edant le ressort est un des suivants~:
+une bo\^\i te, un objet optionnel (par exemple, une c\'esure optionnelle),
+la fin d'une formule math\'ematique,
+un \'el\'ement extraordinaire,
+ou du mat\'eriel vertical produit par |\mark|, |\vadjust|
+ou |\insert|
+\li Le ressort ne fait pas partie d'une formule math\'ematique
+\endolist
+\noindent
+Quand \TeX\ coupe une ligne sur un ressort, il fait la coupure du cot\'e gauche
+de l'espace du ressort et oublie le reste du ressort.
+\li sur un cr\'enage qui est imm\'ediatement suivi par un ressort,
+\`a condition que ce cr\'enage ne soit pas dans une formule math\'ematique
+\li \`a la fin d'une formule math\'ematique qui est imm\'ediatement suivie par un ressort
+\li sur une p\'enalit\'e, m\^eme dans une formule math\'ematique
+\li sur une c\'esure optionnelle
+\endulist
+Quand \TeX\ coupe une ligne, il efface toute s\'equence de ressort, cr\'enage et
+p\'enalit\'e qui suivent le point de coupure.
+Si une telle s\'equence est suivie par le d\'ebut d'une formule math\'ematique, il
+efface aussi tout cr\'enage produit au d\'ebut de la formule.
+\endconcept
+
+
+\conceptindex{coupures de page}
+\concept {coupure de page}
+
+Une \defterm{coupure de page} est un endroit dans votre document o\`u \TeX\
+termine une page et (sauf \`a la fin du document) en commence une nouvelle.
+Voir \conceptcit{page} pour le processus que \TeX\ traverse pour choisir
+une coupure de page.
+
+Vous pouvez contr\^oler le choix de coupure de page de \TeX\ de plusieurs fa\c cons~:
+\ulist
+\li Vous pouvez ins\'erer une p\'enalit\'e (\xref{vpenalty})
+^^{p\'enalit\'es//en listes verticales}
+entre deux \'el\'ements de la liste verticale principale. Une p\'enalit\'e positive
+d\'ecourage \TeX\ de couper la page \`a cet endroit, tandis qu'une p\'enalit\'e
+n\'egative---un bonus, autrement dit---%
+encourage \TeX\ de couper la page \`a cet endroit. Une p\'enalit\'e de $10000$
+ou plus pr\'evient une coupure de page, tandis qu'une p\'enalit\'e de $-10000$ ou
+moins force une coupure de page. Vous pouvez obtenir le m\^eme effet avec les
+commandes |\break| et |\nobreak| \ctsref{vbreak}.
+
+\li Vous pouvez ajuster les p\'enalit\'es associ\'ees aux coupures de page
+en assignant diff\'erentes valeurs aux \refterm{param\`etres:param\`etre} de
+coupure de page de \TeX.
+
+\li Vous pouvez englober une suite de paragraphes ou autres \'el\'ements dans
+la liste verticale principale avec une \refterm{vbox}, ceci emp\^eche \TeX\ de
+couper la page n'importe o\`u dans la suite.
+\endulist
+
+Une fois que \TeX\ a choisi une coupure de page, il place la portion
+de la liste verticale principale qui pr\'ec\`ede la coupure en |\box255|.
+Il appelle alors la \refterm{routine de sortie} courante pour ex\'ecuter |\box255|
+et \'eventuellement envoyer son contenu dans le \dvifile.
+^^{\dvifile//mat\'eriel de la routine de sortie}
+La routine de sortie doit aussi inclure des \refterm{insertions}, telles
+que des notes de pied de page, que \TeX\ a accumul\'e en ex\'ecutant la page.
+
+Il est utile de conna\^\i tre les endroits o\`u \TeX\ peut couper une page~:
+\ulist
+\li Sur le ressort, \`a condition que l'\'el\'ement pr\'ec\'edent le ressort soit
+une bo\^\i te, un \'el\'ement extraordinaire, une marque ou une insertion.
+Quand \TeX\ coupe une page sur un ressort, il fait la coupure devant
+l'espace du ressort et oublie le reste du ressort.
+\li Sur un cr\'enage qui est imm\'ediatement suivi par un ressort.
+\li Sur une p\'enalit\'e, vraisemblablement entre les lignes d'un paragraphe.
+\endulist
+Quand \TeX\ coupe une page, il efface toute s\'equence de ressort, cr\'enages et \'el\'ements
+de p\'enalit\'e qui suivent le point de coupure.
+
+
+\endconcept
+
+
+\conceptindex{cr\'enages}
+\concept cr\'enage
+
+^^{espacement//ajuster avec des cr\'enages}
+Un \defterm{cr\'enage} indique un changement de l'espacement normal entre
+les \'el\'ements d'une liste horizontale ou verticale.
+Un cr\'enage peut \^etre soit positif, soit n\'egatif. En
+mettant un cr\'enage positif entre deux \'el\'ements, vous les \'eloignez du
+montant du cr\'enage. en mettant un cr\'enage positif entre deux \'el\'ements,
+vous les rapprochez du montant du cr\'enage. Par exemple, ce texte~:
+\csdisplay
+11\quad 1\kern1pt 1\quad 1\kern-.75pt 1
+|
+produit des paires de lettres qui ressemblent \`a ceci~:
+\display{11\quad 1\kern1pt 1\quad 1\kern-.75pt 1}
+Vous pouvez utiliser des cr\'enages en mode vertical pour ajuster l'espace
+entre des paires de lignes particuli\`eres.
+
+Un cr\'enage de taille $d$ est tr\`es similaire \`a un \'el\'ement \refterm{ressort}
+qui a une taille $d$ sans \'etirement ni r\'etr\'ecissement. Le cr\'enage et le ressort
+ins\`erent ou enl\`event de l'espace entre deux \'el\'ements voisins. La diff\'erence
+essentielle est que \TeX\ consid\`ere deux bo\^\i tes n'ayant qu'un cr\'enage entre
+elles comme \'etant li\'ees. Cela fait que, \TeX\ ne coupe pas une ligne ou une
+page sur un cr\'enage sauf si le cr\'enage est imm\'ediatement suivi d'un ressort.
+Garder cette diff\'erence \`a l'esprit quand vous choisissez d'utiliser un
+cr\'enage ou un \'el\'ement ressort pour un usage particulier.
+
+\TeX\ ins\`ere automatiquement des cr\'enages entre des paires particuli\`eres de
+lettres adjacentes, ajustant ainsi l'espace entre ces lettres et mettant en
+valeur l'apparence de votre document compos\'e.
+Par exemple, la police Computer Modern romaine de $10$ points contient un
+cr\'enage pour la paire `To' qui remet le cot\'e gauche du `o' sous le `T'.
+Sans le cr\'enage, vous obtiendriez \hbox{``T{o}p''} au lieu de ``Top''---
+la diff\'erence est l\'eg\`ere mais visible.
+Le fichier de m\'etrique
+(^{\tfmfile})
+de chaque \refterm{police} sp\'ecifie le placement et la taille des cr\'enages
+que \TeX\ ins\`ere automatiquement quand il met du texte dans cette~police.
+\margin{paragraph deleted to save space; most of the material was
+already in this section.}
+
+\endconcept
+
+
+\conceptindex{dimensions}
+\concept dimension
+
+Une \defterm{dimension} sp\'ecifie une distance, c'est, une mesure lin\'eaire
+d'espace. Vous utilisez des dimensions pour sp\'ecifier des tailles de choses, comme les grandeurs
+d'une ligne. Les imprimeurs dans les pays de langue Anglaise mesurent traditionnellement
+les distances en points et en picas, tandis que les imprimeurs d'Europe continentale
+mesurent traditionnellement les distances en points Didot et en ciceros.
+Vous pouvez utiliser ces mesures ou d'autres, comme les pouces, qui peuvent
+vous \^etre plus familier. Les ^{unit\'es de mesure} ind\'ependantes des polices
+que \TeX\ comprend sont~:
+
+\xrdef{dimdefs}
+\nobreak\vskip\abovedisplayskip
+\halign{\indent\hfil\tt #\qquad&#\hfil\cr
+pt&^{point} (72.27 points = 1 pouce)\cr
+pc&^{pica} (1 pica = 12 points)\cr
+bp&big point (72 gros points = 1 pouce)\cr
+in&^{pouce}\cr
+cm&^{centim\`etre} (2.54 centim\`etres = 1 pouce)\cr
+mm&^{millim\`etre} (10 millim\`etres = 1 centim\`etre)\cr
+dd&^{\didotpt} (1157 {\didotpt}s = 1238 points)\cr
+cc&^{cic\'ero} (1 cicero = 12 points Didot)\cr
+sp&^{point d'\'echelle} (65536 points d'\'echelle = 1 point)\cr
+}
+\vskip\belowdisplayskip
+
+Deux unit\'es de mesure suppl\'ementaires sont associ\'ees avec chaque police~: `^|ex|',
+une mesure verticale correspondant habituellement \`a la hauteur de la lettre `x'
+de la police et `^|em|', une mesure
+horizontale habituellement \'egale \`a la taille du point de la police et
+environ la largeur de la lettre `M' de la police. Finalement,
+\TeX\ procure trois unit\'e de mesure ``infinies''~: `^|fil|', `^|fill|' et
+`^|filll|', dans l'ordre de force croissant.
+
+Une dimension est \'ecrite comme un ^{facteur}, c'est-\`a-dire, un multiplieur,
+suivi par une unit\'e de mesure.
+^^{unit\'es de mesure}
+Le facteur peut \^etre soit un \refterm{nombre} entier, soit
+une \refterm{constante d\'ecimale} contenant un point d\'ecimal
+ou une virgule d\'ecimale.
+Le facteur peut \^etre pr\'ec\'ed\'e par un signe plus ou moins, donc une dimension
+peut \^etre positive ou n\'egative.
+^^{dimensions//n\'egatives}
+L'unit\'e de mesure doit \^etre l\`a, m\^eme si le nombre est
+z\'ero. Des espaces entre le nombre et l'unit\'e de mesure sont permis
+mais facultatifs. Vous trouverez une d\'efinition pr\'ecise d'une
+dimension sur la \knuth{page~270}{315}. Voici quelques exemples de dimensions~:
+
+\csdisplay
+5.9in 0pt -2,5 pc 2fil
+|
+La derni\`ere repr\'esente un ordre de distance infinie.
+
+Une distance infinie \'ecrase toute distance finie ou toute distance infinie
+plus l\'eg\`ere. Si vous additionnez |10in| \`a |.001fil|, vous obtiendrez |.001fil|~; si vous additionnez
+|2fil| \`a |-1fill| vous aurez |-1fill|~; et ainsi de suite.
+\TeX\ n'accepte des distances infinies que quand
+vous avez sp\'ecifi\'e l'\refterm{\'etirement} et le \refterm{r\'etr\'ecissement}
+du \refterm{ressort}.
+
+\TeX\ multiplie toutes les dimensions de votre document par un
+facteur de \refterm{magnification} $f/1000$,
+o\`u $f$ est la valeur du param\`etre ^|\mag|.
+^^{magnification}
+Puisque la valeur par d\'efaut de
+|\mag| est $1000$, le cas normal est que votre document est
+compos\'e comme sp\'ecifi\'e. Vous pouvez sp\'ecifier une dimension comme elle sera
+mesur\'ee dans le document final ind\'ependamment d'une magnification en mettant
+`|true|' devant l'unit\'e. Par exemple, `|\kern 8 true pt|'
+produit un cr\'enage de $8$ points quelle que soit la magnification.
+\endconcept
+
+
+\concept {disposition de page}
+
+\bix^^{marges}
+\bix^^{ent\^etes}
+\bix^^{pieds de page}
+Quand vous concevez un document, vous devez d\'ecider de son
+\defterm{ajustement de page}~: la taille de la page, les marges des
+quatre cot\'es, les ent\^etes et pieds de page, s'il y en a, qui
+apparaissent en haut et en bas de la page et la taille de l'espace
+entre le corps du texte et l'ent\^ete ou le pied de page. \TeX\ en
+d\'efinit par d\'efaut. Il d\'efinit une page de $8 \frac1/2$
+par $11$ pouces avec des marges d'approximativement un pouce de
+chaque cot\'e, sans ent\^ete et avec un pied de page constitu\'e d'un
+num\'ero de page centr\'e.
+
+Les marges sont d\'etermin\'ees conjointement par les quatre param\`etres
+^|\hoffset|, ^|\voffset|, ^|\hsize| et ^|\vsize| (voir
+``marges'', \xrefpg{marges},
+pour des conseils sur la fa\c con de les ajuster).
+\eix^^{marges}
+L'ent\^ete consiste normalement en une simple ligne qui appara\^\i t en haut de chaque
+page, dans l'aire de la marge du haut. Vous pouvez la d\'efinir en assignant
+une liste de \refterm{token} dans le param\`etre ^|\headline| (\xref{\headline}).
+Similairement,
+le pied de page consiste normalement en une simple ligne qui appara\^\i t en bas de chaque
+page, dans l'aire de la marge du bas. Vous pouvez la d\'efinir en assignant
+une liste de \refterm{token} dans le param\`etre ^|\footline| (\xref{\footline}).
+Par exemple, l'entr\'ee~:
+\csdisplay
+\headline = {Baby's First Document\dotfill Page\folio}
+\footline = {\hfil}
+|
+produit une ligne d'ent\^ete comme celle-ci sur chaque page~:
+\vdisplay{
+\dimen0 = \hsize
+\advance \dimen0 by -\parindent
+\hbox to \dimen0{Baby's First Document\dotfill Page 19}}
+\noindent
+et aucune ligne de pied de page.
+
+Vous pouvez utiliser des marques pour placer le sujet d'une section de texte
+courante dans l'ent\^ete ou le pied de page.
+^^{marques//avec ent\^etes ou pieds de page}
+Voir \conceptcit{marque} pour une explication sur comment faire cela.
+\eix^^{ent\^etes}
+\eix^^{pieds de page}
+\endconcept
+
+\conceptindex{d\'elimiteurs}
+\concept d\'elimiteur
+
+Un \defterm{d\'elimiteur} est un caract\`ere mis comme fronti\`ere visible d'une
+formule math\'ematique. La propri\'et\'e essentielle d'un d\'elimiteur est que \TeX\
+peut ajuster sa taille par rapport \`a la taille verticale (\refterm{hauteur}
+plus \refterm{profondeur}) de la sous-formule.
+De plus, \TeX\ n'ex\'ecute d'ajustement que si le d\'elimiteur
+appara\^\i t dans un ``contexte de d\'elimiteur'', plus pr\'ecis\'ement, comme argument
+d'une des commandes ^|\left|,
+^|\right|,
+|\overwith!-delims|,
+|\atop!-with!-delims|,
+ou |\above!-with!-delims|
+^^|\overwithdelims|
+^^|\atopwithdelims|
+^^|abovewithdelims|
+\margin{Footnote deleted}
+(voir les \pp\xrefn{\overwithdelims},~\xrefn{\left}).
+Les contextes de d\'elimiteur incluent aussi tout \refterm{argument}
+\`a une \refterm{macro} qui utilise l'argument dans un contexte de d\'elimiteur.
+
+Par exemple, les parenth\`eses gauches et droites sont des d\'elimiteurs.
+Si vous utilisez des ^{parenth\`eses} dans un contexte de d\'elimiteur autour
+d'une formule, \TeX\ rend les parenth\`eses assez grandes pour entourer la
+\refterm{bo\^\i te} qui contient la formule (\`a condition que les
+\refterm{polices:police} que vous utilisez aient des parenth\`eses assez grandes).
+Par exemple~:
+\csdisplay
+$$ \left( a \over b \right) $$
+|
+donne~:
+\centereddisplays $$\left (a \over b \right ) $$
+Ici \TeX\ a rendu les parenth\`eses assez grandes pour s'accorder \`a la fraction.
+Mais si vous \'ecrivez, \`a la place~:
+\csdisplay
+$$({a \over b})$$
+|
+vous aurez~:
+$$({a \over b})$$
+Puisque les parenth\`eses ne sont pas dans un contexte de d\'elimiteur, elles ne
+sont \emph{pas} \'elargies.
+
+Les d\'elimiteurs vont par paires~:
+un d\'elimiteur ouvrant \`a la gauche de la sous-formule
+et un d\'elimiteur fermant \`a sa droite.
+Vous pouvez choisir explicitement une hauteur plus grande pour un
+d\'elimiteur avec les commandes |\bigl|, ^|\bigr|, et leurs
+pendantes \ctsref{\bigl}\footnote
+{\PlainTeX\ d\'efini les diff\'erentes commandes |\big| en utilisant |\left|
+et |\right| pour obtenir un contexte de d\'elimiteur. Il r\`egle la taille en
+construisant une formule vide de la hauteur d\'esir\'ee.}.
+Par exemple, pour avoir la
+formule affich\'ee~:
+$$\bigl(f(x) - x \bigr) \bigl(f(y) - y \bigr)$$
+
+\noindent dans laquelle les parenth\`eses externes sont un peu plus grandes
+que leurs internes, vous devez \'ecrire~:
+
+\csdisplay
+$$\bigl( f(x) - x \bigr) \bigl( f(y) - y \bigr)$$
+|
+
+Les $22$ d\'elimiteurs \plainTeX, montr\'es \`a leur taille normale, sont~:
+\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
+Voici les plus grandes tailles fournies explicitement par \plainTeX\
+ (les versions |\Biggl|, |\Biggr|, etc.)~:
+\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
+Les d\'elimiteurs (sauf pour `|(|', `|)|', et
+`|/|')
+sont les symboles list\'es sur les
+pages~\xrefn{\lbrace}--\xrefn{\Uparrow}.
+Ils sont list\'es \`a un seul endroit sur la \knuth{page~146}{170--171}.
+
+Un d\'elimiteur peut appartenir \`a n'importe quelle classe.
+^^{classe//d'un d\'elimiteur}
+Pour un d\'elimiteur que vous agrandissez avec
+|\bigl|, |\bigr|, etc., la classe est d\'etermin\'ee par la commande~:
+``opener'' pour les commandes-|l|, ``closer'' pour les commandes-|r|,
+``relation'' pour les commandes-|m|, et ``ordinary symbol'' pour les
+commandes-|g|,
+c'est-\`a-dire, |\Big|.
+
+Vous pouvez obtenir un d\'elimiteur de deux diff\'erentes mani\`eres~:
+\olist
+\li Vous pouvez rendre un caract\`ere d\'elimiteur en lui assignant un
+codes de d\'elimiteur non n\'egatif
+\bix^^{codes d\'elimiteurs}
+(voir plus bas) avec la commande ^|\delcode| (\xref\delcode).
+N\'eanmoins le caract\`ere n'agit comme d\'elimiteur que si vous l'utilisez dans un
+contexte de d\'elimiteur\footnote{%
+Il est possible d'utiliser un caract\`ere avec un code de d\'elimiteur non n\'egatif
+dans un contexte o\`u il n'est pas un d\'elimiteur. Dans ce cas \TeX\ ne fait pas
+la recherche~; \`a la place, il utilise simplement le caract\`ere de fa\c con ordinaire
+(voir la \knuth{page~156}{181--282}).}.
+\li Vous pouvez produire un d\'elimiteur explicitement avec la commande
+^|\delimiter|
+(\xref\delimiter), en analogie avec la mani\`ere par laquelle vous pouvez produire un
+caract\`ere ordinaire avec la commande |\char| ou un caract\`ere math\'ematique
+avec la commande |\mathchar|.
+La commande |\delimiter| utilise les m\^emes code de d\'elimiteur que ceux utilis\'es
+dans une entr\'ee de table
+|\delcode|, mais avec un chiffre suppl\'ementaire devant pour indiquer une
+classe.
+Il est rare d'utiliser |\delimiter| en dehors d'une d\'efinition de macro.
+\endolist
+
+Un code de d\'elimiteur dit \`a
+\TeX\ comment chercher un caract\`ere de sortie appropri\'e pour repr\'esenter
+un d\'elimiteur.
+Les r\`egles de cette recherche sont assez compliqu\'ees
+(voir les \knuth{pages~156 et 442}{181--282 et 506--507}).
+Une compr\'ehension compl\`ete de ces r\`egles requiert des connaissances
+sur l'organisation des ^{fichiers de m\'etriques} des polices, un sujet qui n'est pas seulement en dehors
+de l'objectif de ce livre mais \'egalement en dehors de l'objectif de \texbook.
+
+En r\'esum\'e la recherche travaille comme cela. Le code de d\'elimiteur sp\'ecifie un
+``petit'' caract\`ere de sortie et un ``grand'' caract\`ere de sortie en
+fournissant une position dans la \refterm{police} et une \refterm{famille} de
+police pour chacun
+(see \xref\delcode).
+En utilisant cette information, \TeX\ peut trouver (ou construire)
+de plus en plus grandes versions du d\'elimiteur. \TeX\ essaye d'abord
+diff\'erentes tailles (de la petite \`a la grande)
+du ``petit'' caract\`ere dans la ``petite'' police
+et ensuite
+diff\'erentes tailles (l\`a aussi de la petite \`a la grande)
+du ``grand'' caract\`ere dans la ``grande'' police,
+en cherchant un dont la hauteur plus la profondeur soit suffisamment grande.
+Si aucun de ces caract\`eres trouv\'e n'est assez
+grand, il utilise le plus grand.
+Il est possible que
+le petit caract\`ere, le grand caract\`ere, ou les deux ait \'et\'e laiss\'e non
+sp\'ecifi\'e
+(indiqu\'e par un z\'ero dans la partie appropri\'ee du code de d\'elimiteur).
+Si seulement un caract\`ere
+a \'et\'e sp\'ecifi\'e, \TeX\ l'utilise. Si aucun ne l'a \'et\'e,
+il remplace le d\'elimiteur par un espace de largeur ^|\nulldelimiterspace|.
+\eix^^{codes d\'elimiteurs}
+
+\endconcept
+
+
+\concept d\'em\'erites
+
+\TeX\ utilise des \refterm{d\'em\'erites} comme une mesure de combien une ligne n'est pas d\'esirable
+quand il coupe un paragraphe en lignes \seeconcept{coupure de ligne}.
+^^{coupures de ligne//d\'em\'erites pour}
+Les d\'em\'erites d'une ligne sont affect\'es par la \refterm{m\'ediocrit\'e} de la ligne
+et par les \refterm{p\'enalit\'es:p\'enalit\'e} associ\'ees avec la ligne.
+^^{m\'ediocrit\'e}
+Le but de \TeX\ dans le choix d'un arrangement particulier de lignes est de
+minimiser le total des
+d\'em\'erites pour le paragraphe, qu'il calcule en additionnant les d\'em\'erites
+des lignes individuelles.
+voir les \knuth{pages~97--98}{114--115} pour les d\'etails sur comment \TeX\
+coupe un paragraphe en lignes.
+\TeX\ n'utilise pas de d\'em\'erites quand il choisit des coupures de page~;
+\`a la place, il utilise
+une mesure similaire appel\'ee le ``co\^ut'' d'une coupure de page particuli\`ere.
+\endconcept
+
+\conceptindex{\elements}
+\concept \'el\'ement
+
+Le terme \defterm{\'el\'ement} est souvent utilis\'e pour faire r\'ef\'erence \`a un composant
+d'une liste horizontale, verticale ou math\'ematique, c'est-\`a-dire, une liste d'\'el\'ements que
+\TeX\ construit quand il est dans un mode horizontal, vertical ou math\'ematique.
+\endconcept
+
+
+\concept {\elementextra}
+
+Un \defterm{\'el\'ement extraordinaire} est un \'el\'ement d'information qui
+dit \`a \TeX\ d'effectuer une action
+qui n'entre pas dans le sch\'ema ordinaire des choses.
+un \'el\'ement extraordinaire peut appara\^\i tre dans une liste horizontale ou
+verticale, comme une bo\^\i te ou un \'el\'ement ressort.
+\TeX\ compose un \'el\'ement extraordinaire
+comme une \refterm{bo\^\i te} de largeur, hauteur et profondeur \`a z\'ero---en d'autres
+termes, une bo\^\i te qui ne contient rien et n'occupe pas d'espace.
+
+Trois sortes d'\'el\'ements extraordinaires sont construits dans \TeX~:
+\ulist
+\li Les commandes |\openout|, |\closeout| et |\write|
+(\p\xrefn{\openout})
+% (2nd) removed \xref to \write, since it's on the same page
+produisent un \'el\'ement extraordinaire pour agir sur un fichier de sortie.
+^^|\openout//\elementextra\ produit par|
+^^|\write//\elementextra\ produit par|
+^^|\closeout//\elementextra\ produit par|
+\TeX\ diff\`ere l'op\'eration jusqu'a ce qu'il envoit la prochaine page
+dans le {\dvifile}
+^^{\dvifile//\elementextra\ en}
+(\`a moins que l'op\'eration soit pr\'ec\'ed\'ee par ^|\immediate|).
+\TeX\ utilise un \'el\'ement extraordinaire pour ces commandes parce qu'elles
+ n'ont rien \`a faire avec ce qu'il compose quand il les rencontre.
+\li La commande ^|\special| \ctsref{\special} demande \`a \TeX\
+d'ins\'erer un certain texte directement dans le \dvifile.
+comme avec la commande |\write|, \TeX\ diff\`ere l'op\'eration jusqu'a ce
+qu'il envoit la prochaine page dans le {\dvifile}
+^^{\dvifile//mat\'eriel ins\'er\'e par \b\tt\\special\e}
+Une utilisation typique de |\special| serait de
+nommer un fichier graphique que le driver d'affichage pourrait incorporer dans
+votre sortie finale.
+\li Quand vous changez de langage avec les commandes ^|\language| ou ^|\setlanguage|
+\ctsref{\language},
+\TeX\ ins\`ere un \'el\'ement extraordinaire qui l'instruit de l'usage d'un
+certain jeu de r\`egle de c\'esure \`a suivre quand il coupe un paragraphe
+en lignes.
+\endulist
+\noindent
+Une impl\'ementation particuli\`ere de \TeX\ peut procurer des \'el\'ements extraordinaires additionnels.
+\endconcept
+
+
+\conceptindex{ent\^etes}
+\concept ent\^ete
+
+Un \defterm{ent\^ete} est un mat\'eriel que \TeX\ met en haut de chaque page,
+au-dessus du texte de cette page. L'ent\^ete pour un simple rapport
+peut \^etre constitu\'e du titre du cot\'e gauche de la page et du
+texte ``Page $n$'' du cot\'e droite de la page.
+D'habitude, un ent\^ete est constitu\'e d'une seule ligne, que vous pouvez mettre en
+assignant une liste de tokens \`a ^|\headline| \ctsref\headline.
+L'ent\^ete par d\'efaut de \plainTeX\ est \`a blanc.
+Il est aussi possible de produire des ent\^ete multiligne~ (voir \xrefpg{bighead})
+\endconcept
+
+
+\concept espace
+
+Vous pouvez demander \`a \TeX\ de mettre un \defterm{espace} entre deux \'el\'ements de
+plusieurs fa\c cons~:
+
+\olist
+^^{fin de ligne}
+\li Vous pouvez \'ecrire quelque chose que \TeX\ traite comme un \refterm{token}
+espace~: un ou plusieurs caract\`eres blancs, La fin d'une ligne (le
+caract\`ere fin de ligne agit comme un espace) ou toute \refterm{commande} qui
+se d\'eveloppe en token espace. \TeX\ g\'en\'eralement traite plusieurs
+espaces cons\'ecutifs comme \'equivalent \`a un seul, en incluant le cas o\`u
+les espaces comprennent une seule fin de ligne. (Une ligne vide
+indique la fin d'un paragraphe~; il fait que \TeX\ g\'en\`ere un token |\par|.)
+^^|\par//d'une ligne vide|
+\TeX\ ajuste la taille de cette sorte d'espace en fonction de la longueur
+requise par le contexte.
+
+^^{ressort//cr\'eer de l'espace avec}
+\li Vous pouvez \'ecrire une commande de saut qui produit le ressort
+que vous sp\'ecifiez dans la commande. Le ressort peut
+s'\refterm{\'etirer} ou se \refterm{r\'etr\'ecir},
+produisant plus ou moins d'espace. Vous pouvez avoir un ressort vertical
+comme un ressort horizontal. Le ressort dispara\^\i t \`a chaque fois qu'il
+est apr\`es une coupure de ligne ou de page.
+
+^^{cr\'enages//cr\'eer de l'espace avec}
+\li Vous pouvez \'ecrire un \refterm{cr\'enage}. Un cr\'enage produit un montant
+ d'espace fixe qui ne s'\'etire ni se r\'etr\'ecit et ne dispara\^\i t pas sur un
+une coupure de ligne ou de page (\`a moins d'\^etre suivie imm\'ediatement par
+ressort). L'usage le plus courant du cr\'enage est d'\'etablir une relation
+spatiale fixe entre deux \refterm{bo\^\i te}s adjacentes.
+\endolist
+
+Le ressort et les cr\'enages peuvent avoir des valeurs n\'egatives.
+Un ressort n\'egatif ou un cr\'enage n\'egatif
+entre des \'el\'ements adjacents rapproche ces \'el\'ements l'un de l'autre.
+\endconcept
+
+
+\concept {\etirement}
+
+Voir \conceptcit{ressort}.
+\endconcept
+
+
+\concept famille
+
+Une \defterm{famille} est un groupe de trois \refterm{polices:police} reli\'ees utilis\'ees
+quand \TeX\ est en \refterm{mode math\'ematique}.
+^^{polices//familles de}
+En dehors du mode math\'ematique, les familles
+n'ont aucun effet. Les trois polices d'une famille sont utilis\'ees pour les symboles normaux
+(\refterm{taille de texte}), indices et exposants (\refterm{taille script})
+et sous-indices, sur-exposants, etc.\
+(\refterm{taille scriptscript}).
+^^{taille texte}
+^^{taille script}
+^^{taille scriptscript}
+Par exemple, le nombre `|2|' compos\'e dans ces trois polices vous donnera
+`$2$', `$\scriptstyle 2$' et `$\scriptscriptstyle 2$' (en \plainTeX).
+Normalement vous fixerez les trois polices d'une famille \`a diff\'erentes
+tailles du m\^eme type de police, mais rien ne vous emp\^eche d'utiliser des
+types diff\'erents pour les trois polices ni d'utiliser la m\^eme police
+deux fois dans une famille.
+
+{\tighten
+TeX\ procure jusqu'a seize familles, num\'erot\'ees de $0$ \`a $15$. Par
+exemple, la famille $0$ en \refterm{\plainTeX} consiste en roman $10$ points
+pour le texte, roman $7$ points pour le script et roman $5$ points pour le
+scriptscript.
+^^{\plainTeX//familles de police en}
+\PlainTeX\ d\'efini aussi la famille $1$ qui est constitu\'ee des polices
+math\'ematiques italiques et r\'eserve les familles $2$ et $3$ pour respectivement
+les ^{symboles sp\'eciaux} et les ^{extensions math\'ematiques}\footnote{Les
+familles $2$ et $3$ sont sp\'eciales en ce que leurs fichiers de m\'etriques de
+police doivent inclure des param\`etres pour l'espacement math\'ematique.}. Si
+vous devez d\'efinir une famille vous m\^eme, vous devrez utiliser la commande
+^|\newfam| \ctsref{\@newfam} pour avoir le num\'ero d'une famille qui n'est
+pas utilis\'ee et les commandes ^|\textfont|, ^|\scriptfont| and
+^|\scriptscriptfont| commands \ctsref{\scriptscriptfont} pour assigner des
+polices \`a cette famille.
+\par}
+
+\endconcept
+
+
+\conceptindex{fichiers}
+\concept fichier
+
+Un \defterm{fichier} est un flot d'information que \TeX\ interpr\`ete ou
+cr\'ee. Des fichiers sont g\'er\'es par le ^{syst\`eme d'exploitation} qui supervise votre
+ex\'ecution de \TeX. \TeX\ manipule des fichiers dans quatre contextes diff\'erents~:
+\olist
+\li Un ``^{fichier source}'' est celui que \TeX\ lit avec ses ``yeux''
+\seeconcept{\anatomy} et interpr\`ete en accord avec ses r\`egles ordinaires.
+Votre fichier d'entr\'ee primaire---celui que vous sp\'ecifiez apr\`es `|**|' ou
+sur la ligne de commande quand vous
+invoquez \TeX---est un fichier source, et ainsi pour tout fichier que vous
+appelez avec une commande ^|\input| \ctsref \input.
+
+\li Un ``^{fichier r\'esultat}'' est celui qui contient les r\'esultats de
+l'ex\'ecution de \TeX. \TeX\ cr\'ee deux fichiers r\'esultat~: Le
+\dvifile\ et le fichier .log.
+^^{\dvifile//comme un fichier r\'esultat}
+^^{\logfile//comme un fichier r\'esultat}
+Le \dvifile\ contient l'information n\'ecessaire pour imprimer votre document.
+Le fichier
+.log contient un enregistrement de ce qui s'est pass\'e pendant l'ex\'ecution,
+incluant tout message d'erreur que \TeX\ a g\'en\'er\'e.
+Si votre fichier source primaire s'appelle
+|screed.tex|, vos \dvifiles\ et log se nommeront |screed.dvi|
+et |screed.log|\footnote{C'est la convention usuelle, mais
+des impl\'ementations particuli\`eres de \TeX\ sont libres de changer cela.}.
+
+\li Pour lire un fichier avec la commande ^|\read|
+\ctsref{\read} vous devez associer le fichier avec un flot d'entr\'ee.
+^^{flots d'entr\'ee//lire avec \b\tt\\read\e}
+Vous pouvez avoir jusqu'a $16$ flots d'entr\'ee actifs
+\`a la fois, num\'erot\'es de $0$ \`a $15$.
+La commande |\read| lit un seul fichier et le fait avec la valeur d'une
+\refterm{s\'equence de contr\^ole} d\'esign\'ee, donc lire avec
+|\read| est tr\`es diff\'erent de lire avec ^|\input| (qui apporte un
+fichier entier).
+\TeX\ prend tout flot d'entre qui n'est pas num\'erot\'e entre
+$0$ et $15$ comme r\'ef\'erence au terminal,
+donc `|\read16|', disons, lit la prochaine ligne que vous saisissez sur le
+terminal.
+
+\li Pour \'ecrire dans un fichier avec la commande |\write|
+\ctsref \write\ vous devez associer le fichier
+avec un flot de sortie.
+^^|\write//flot d'entr\'ee pour|
+^^{flots de sortie}
+Vous pouvez avoir jusqu'a $16$ flots de sortie actifs
+\`a la fois, num\'erot\'es de $0$ \`a $15$.
+Les flots d'entr\'ee et de sortie sont ind\'ependants.
+Tout ce qui est envoy\'e vers un flot de sortie avec un num\'ero n\'egatif va vers le
+fichier log~; tout ce qui est envoy\'e vers un flot de sortie avec un num\'ero
+sup\'erieur \`a $15$
+va \`a la fois vers le fichier log et le terminal.
+Ainsi `|\write16|', disons, \'ecrit une ligne sur le terminal et aussi envoit
+cette ligne vers le fichier~log.
+
+\endolist
+
+Vous devez ouvrir un fichier de flot avant de pouvoir l'utiliser.
+Un fichier de flot d'entr\'ee est ouvert avec une commande ^|\openin|
+\ctsref \openin\ et un fichier de flot de sortie est ouvert avec une
+commande ^|\openout| \ctsref\openout.
+Par propret\'e,
+vous devez fermer un fichier de flot quand vous en avez fini avec lui, n\'eanmoins
+\TeX\ le fera \`a la fin du traitement si vous ne l'avez pas fait.
+Les deux commandes pour fermer un fichier de flot sont ^|\closein| \ctsref\closein\
+et ^|\closeout| \ctsref\closeout.
+Un avantage de fermer un flot quand vous en avez fini avec lui
+est que vous pouvez r\'eutiliser le flot pour un autre fichier.
+Ceci peut \^etre essentiel quand vous lisez un longue suite de fichiers.
+
+De plus vous pouvez assigner des num\'eros vous-m\^eme aux flots d'entr\'ee et de sortie,
+Il est pr\'ef\'erable de le faire avec les commandes ^|\newread| et
+^|\newwrite| \ctsref{\@newwrite}.
+Vous pouvez avoir plus d'un flot associ\'e avec un seul fichier,
+mais vous aurez des salet\'es (probablement non diagnostiqu\'e) \`a moins que tous les flots
+soit des flots d'entr\'ee. Associer plus d'un flot avec un fichier d'entr\'ee
+peut-\^etre utile quand vous voulez utiliser le m\^eme fichier d'entr\'ee pour deux
+usages diff\'erents.
+
+D'habitude, \TeX\ diff\`ere les actions d'ouverture, d'\'ecriture et de fermeture
+d'un flot de sortie jusqu'a ce qu'il enregistre une page avec ^|\shipout|
+(voir la \knuth{page~227}{266}
+pour les d\'etails). Cette propri\'et\'e s'applique m\^eme aux messages \'ecrits sur le
+terminal avec |\write|. Mais vous pouvez demander \`a \TeX\ de faire une action
+sur un flot de sortie imm\'ediatement en faisant pr\'ec\'eder la commande d'action de
+^|\immediate| \ctsref\immediate. Par exemple~:
+\csdisplay
+\immediate\write16{Do not pass GO!! Do not collect $200!!}
+|
+\endconcept
+
+
+\concept {fichier format}
+
+{\tighten
+Un \defterm{fichier format} est un fichier qui contient une image de
+la m\'emoire de \TeX\ sous la forme dans laquelle il peut \^etre recharg\'e rapidement.
+Un fichier format peut \^etre cr\'e\'e avec la commande ^|\dump| \ctsref\dump.
+L'image contient un enregistrement complet
+des d\'efinitions (de \refterm{polices:police}, \refterm{macros:macro}, etc.)
+qui \'etaient pr\'esentes quand le dump a \'et\'e effectu\'e.
+En utilisant ^|virtex|, un forme sp\'eciale ``vierge'' de \TeX,
+vous pouvez recharger le fichier format \`a haute vitesse et
+continuer avec le m\^eme \'etat dans lequel \'etait \TeX\ au moment du dump.
+L'avantage du fichier format sur un fichier d' entr\'ee ordinaire
+contenant la m\^eme information est que \TeX\ peut la charger beaucoup plus
+vite.
+\par}
+
+Des fichiers de format doivent \^etre cr\'e\'es par ^|initex|, une
+forme sp\'eciale de \TeX\ \'ecrite \`a cette intention.
+Ni |virtex|, ni |initex| n'ont d'outils autres que les primitives
+construites dans le programme \TeX\ lui-m\^eme.
+
+Une forme ^{pr\'echarg\'ee} de \TeX\ est celle qui a un fichier format conforme
+charg\'e et est pr\^et \`a accepter l'entr\'ee de l'utilisateur.
+La forme de \TeX\ qui se nomme |tex|
+a souvent les d\'efinitions \plainTeX\ pr\'echarg\'ees.
+(\PlainTeX\ est normalement fourni sous deux autres formes~:
+comme une fichier de format et comme une fichier source de \TeX.
+Dans certains environnements, |tex| est \'equivalent \`a appeler |virtex|
+et charge alors |plain|.)
+Cr\'eer des formes pr\'echarg\'ees de \TeX\ n\'ecessite un programme sp\'ecial~;
+il ne peut pas \^etre fait en n'utilisant que les outils de \TeX\ lui-m\^eme.
+
+\endconcept
+
+
+\concept {fichier log}
+
+Voir \conceptcit{fichier}.
+\endconcept
+
+
+\conceptindex{filets}
+\concept filets
+
+Un \defterm{filet} est un rectangle plein noir.
+Un filet, comme une \refterm{bo\^\i te},
+a une \refterm{largeur}, une \refterm{hauteur} et une \refterm{profondeur}.
+La dimension verticale du rectangle
+est la somme de sa hauteur et de sa profondeur.
+Une ligne droite horizontale ou verticale est un cas sp\'ecial de filet.
+
+\bix^^{filets horizontaux}
+\bix^^{filets verticaux}
+\bix^^|\hrule|
+\bix^^|\vrule|
+Un filet peut \^etre soit horizontal, soit vertical. La distinction entre un
+filet horizontal et un vertical diff\`ere selon la fa\c con de produire le
+filet, un filet vertical peut \^etre court et \'epais (et donc ressembler
+\`a une ligne horizontale), tandis qu'un filet horizontal peut \^etre grand et maigre
+(et donc ressembler \`a une ligne verticale). La notion de filet de \TeX\ est
+plus g\'en\'erale que celle des typographes, qui pensent \`a un filet comme \`a une ligne
+et ne veulent habituellement pas appeler filet une bo\^\i te noire carr\'ee.
+
+Vous pouvez produire un filet horizontal en utilisant la commande
+|\hrule| et un filet vertical en utilisant
+la commande |\vrule| \ctsref{\vrule}.
+Par exemple, la s\'equence de contr\^ole |\hrule| par elle-m\^eme
+produit un filet fin qui traverse la page, comme ceci~:
+
+{\offinterlineskip
+\nobreak\medskip
+\hrule
+\medskip}
+
+La commande `|\vrule height .25in|' produit un filet vertical
+qui s'allonge de $.25$~pouces sur la page comme ceci~:
+\nobreak\vskip \abovedisplayskip
+\leftline{\vrule height .25in}
+\vskip \belowdisplayskip
+
+Il y a deux diff\'erences entre les filets horizontaux et verticaux~:
+\olist
+\li Pour un filet horizontal, \TeX\ prend comme largeur par d\'efaut la largeur
+de la plus petite \refterm{bo\^\i te} ou \refterm{alignement} qui l'englobe.
+Pour un filet vertical, \TeX\ prend comme hauteur et profondeur par d\'efaut
+de la m\^eme fa\c con. (Le
+d\'efaut est la taille que vous obtenez si vous ne donnez pas de taille explicitement
+pour cette dimension.)
+
+^^{listes horizontales//filet en}
+^^{listes verticales//filet en}
+\li
+{\tighten
+Un filet horizontal est un \'el\'ement fondamentalement vertical qui ne peut participer
+\`a une \refterm{liste horizontale}, tandis qu'un filet vertical est un \'el\'ement
+horizontal qui ne peut participer \`a une \refterm{liste verticale}.
+Cette propri\'et\'e peut sembler \'etrange d'un premier abord, mais il y a une
+bonne raison \`a cela~:
+Un filet horizontal s'\'etend visuellement de gauche \`a droite et donc s\'epare des
+\'el\'ements d'une liste verticale, tandis qu'un filet vertical s'\'etend visuellement
+de haut en bas et ainsi s\'epare des \'el\'ements d'une liste horizontale.
+%(Look at the rules that are shown above.)
+\par}
+\endolist
+
+{\tighten
+Si vous construisez un filet avec trois dimensions explicites,
+cela donnera la m\^eme chose que vous fassiez un filet horizontal ou vertical.
+Par exemple, la commande `|\vrule height1pt depth2pt width3in|' produit ce
+filet au look horizontal~:
+\par}
+
+{\offinterlineskip
+\nobreak\medskip\nobreak\vskip3pt
+\leftline{\vrule height1pt depth2pt width3in}
+\medskip}
+
+Vous trouverez un \'etat pr\'ecis du traitement des filets de \TeX\ dans les
+\knuth{pages~221--222}{259--260}.
+\eix^^{filets horizontaux}
+\eix^^{filets verticaux}
+\eix^^|\hrule|
+\eix^^|\vrule|
+\endconcept
+
+
+\conceptindex{flots d'entr\'ee}
+\concept {flots d'entr\'ee}
+
+Voir \conceptcit{fichier}.
+\endconcept
+
+
+\conceptindex{flots de sortie}
+\concept {flots de sortie}
+
+\margin{This concept was out of order.}
+Voir \conceptcit{fichier}.
+\endconcept
+
+
+\concept global
+
+Une d\'efinition \defterm{globale} est effective
+jusqu'a la fin du
+document ou jusqu'a ce qu'elle soit \'ecras\'ee par une autre d\'efinition,
+m\^eme quand elle appara\^\i t dans un \refterm{groupe}.
+Ainsi une d\'efinition globale n'est pas affect\'ee par les fronti\`eres de groupe.
+Vous pouvez rendre n'importe quelle d\'efinition globale en la pr\'efixant avec la
+commande |\global| \ctsref{\global} a moins que ^|\globaldefs| \ctsref\globaldefs{}
+soit n\'egatif.
+^^|\global|
+
+Il y a un moyen sp\'ecial de rendre une d\'efinition de \refterm{macro} globale.
+^^{macros//globale}
+Normalement vous d\'efinissez une macro en utilisant soit la commande |\def|
+soit la commande |\edef| \ctsref{\edef}.
+^^|\edef//rendre global|
+^^|\def//rendre global|
+Si vous utilisez |\gdef| ou |\xdef|
+au lieu de |\def| et |\edef| respectivement, la d\'efinition de macro sera
+globale. Parce que, `^|\gdef|' est \'equivalent \`a `|\global\def|' et
+`^|\xdef|' est \'equivalent \`a `|\global\edef|'.
+\endconcept
+
+
+\conceptindex{groupes}
+\concept groupe
+
+Un \defterm{groupe} est une partie de votre manuscrit que \TeX\ traite comme
+une unit\'e.
+Vous indiquez un groupe en l'entourant avec les accolades
+`|{|' et `|}|' (ou tout autre caract\`ere avec le
+\refterm{code de cat\'egorie} appropri\'e).
+^^|{//d\'ebuter un groupe|
+^^|}//terminer un groupe|
+
+La plus importante propri\'et\'e d'un groupe est que toute d\'efinition
+ou assignation non globale que vous faites dans un groupe dispara\^\i t quand
+le groupe se termine. Par exemple, si vous \'ecrivez~:
+
+\csdisplay
+Please don't pour {\it any} more tea into my hat.
+|
+La \refterm{s\'equence de contr\^ole} |\it| demande \`a \TeX\ de mettre le mot
+`|any|' en police italique mais n'affecte pas le reste du texte.
+Comme autre exemple, si vous utilisez le param\`etre |\hsize|
+\ctsref{\hsize} pour changer la longueur de la ligne dans un groupe, la longueur de ligne
+retourne \`a sa valeur pr\'ec\'edente un fois que \TeX\ est sorti du groupe.
+
+Les groupes sont aussi pratiques comme moyen de contr\^oler l'espace\-ment.
+Par exemple, si vous saisissez~:
+
+\csdisplay
+\TeX for the Impatient and the Outpatient too.
+|
+\noindent
+vous aurez~:
+\display{%
+\TeX for the Impatient and the Outpatient too.
+}
+\noindent
+puisque la s\'equence de contr\^ole |\TeX| (qui produit le logo \TeX)
+absorbe l'espace qui le suit.
+vous voulez probablement ceci~:
+\display{%
+{\TeX} for the Impatient and the Outpatient too.
+}
+\noindent
+Une mani\`ere d'obtenir ceci est d'englober `|\TeX|' dans un groupe~:
+\csdisplay
+{\TeX} for the Impatient and the Outpatient too.
+|
+L'accolade droite emp\^eche la s\'equence de contr\^ole d'absorber l'espace.
+\endconcept
+
+
+\concept hauteur
+
+La \defterm{hauteur} d'une \refterm{bo\^\i te} est la distance \`a laquelle la bo\^\i te
+s'\'etend au dessus de sa \refterm{ligne de base}.
+^^{\boites//hauteur de}
+\endconcept
+
+
+\conceptindex{hbox}
+\concept hbox
+
+Une \defterm{hbox} (bo\^\i te horizontale) est une \refterm{bo\^\i te} que \TeX\
+construit en plaquant les articles d'une \refterm{liste horizontale} l'un
+apr\`es l'autre, de la gauche vers la droite.
+^^{listes horizontales//hbox form\'es \`a partir de}
+Une hbox, prise comme unit\'e, n'est ni
+fondamentalement horizontale ni fondamentalement verticale, c'est-\`a-dire,
+qu'elle peut appara\^\i tre comme un
+article soit d'une liste horizontale soit d'une \refterm{liste verticale}.
+Vous pouvez construire une hbox avec la commande |\hbox| \ctsref{\hbox}.
+\endconcept
+
+
+\conceptindex{insertions}
+\concept insertion
+
+\looseness = -1
+Une \defterm{insertion} est une liste verticale contenant du mat\'eriel devant
+\^etre ins\'er\'e sur une page quand \TeX\ a fini de construire cette page\footnote
+{\tighten
+\TeX\ lui-m\^eme n'ins\`ere pas le mat\'eriel---il rend juste le mat\'eriel accessible
+\`a la routine de sortie, qui est alors responsable de la transf\'erer sur la
+page compos\'ee.
+^^{routine de sortie//insertions, traitement de}
+Le seul effet imm\'ediat de la commande ^|\insert|
+\ctsref{\insert} est de changer les calculs de coupure de page de \TeX\ pour
+qu'il laisse de la place sur la page pour le mat\'eriel \`a ins\'erer. Plus tard,
+quand \TeX\ coupera r\'eellement la page, il divisera le mat\'eriel \`a ins\'erer en
+deux groupes~: le mat\'eriel qui passe sur la page courante et le mat\'eriel qui
+ne passe pas.
+^^{coupures de page//insertions sur des}
+Le mat\'eriel qui passe sur la page est plac\'e dans des registres de bo\^\i te, un
+par insertion et le mat\'eriel qui ne passe pas est transf\'er\'e sur la page
+suivante.
+Cette proc\'edure autorise \TeX\ \`a faire des choses comme distribuer des parties
+d'une longue note de pied de page sur plusieurs pages cons\'ecutives.}. Des
+exemples de telles insertions sont les notes de pied de page et les figures.
+Les commandes \refterm{\plainTeX} pour cr\'eer des insertions sont
+^|\footnote|, ^|\topinsert|, |\mid!-insert|,
+^^|\midinsert|
+et ^|\pageinsert|, aussi bien que la commande primitive ^|\insert|
+elle-m\^eme (\pp\xrefn\footnote--\xrefn{endofinsert}).
+Le m\'ecanisme de \TeX\ pour manipuler des insertions est plus compliqu\'e~;
+voir les \knuth{pages~122--125}{142--146} pour les d\'etails.
+\endconcept
+
+
+\concept largeur
+
+^^{\boites//largeur de}
+La \defterm{largeur} d'une \refterm{bo\^\i te} est le montant d'espace horizontal
+qu'il occupe, c'est-\`a-dire, la distance de son cot\'e gauche \`a son cot\'e droit.
+Le mat\'eriel compos\'e dans une bo\^\i te peut \^etre plus large que la bo\^\i te elle-m\^eme.
+\endconcept
+
+
+
+\conceptindex{ligatures}
+\concept ligature
+
+Une \defterm{ligature} est un simple caract\`ere qui remplace une
+s\'e\-quence particuli\`ere de caract\`eres adjacents dans un document compos\'e.
+Par exemple, le mot `|office|' est compos\'e \hbox{``office''} et non
+\hbox{``of{f}ice''}, par les syst\`emes de composition de haute qualit\'e.
+La connaissance des ligatures est construite dans les \refterm{polices:police}
+que vous utilisez, donc vous n'avez rien \`a faire pour que \TeX\
+les produise. (Vous pouvez emp\^echer la ligature d'``office'', comme nous
+l'avons dit plus t\^ot, en saisissant `|of{f}ice|' dans votre entr\'ee.)
+\TeX\ est aussi capable d'utiliser son m\'ecanisme de ligature pour composer
+la premi\`ere ou la derni\`ere lettre d'un mot diff\'eremment de la m\^eme lettre
+qui appara\^\i t au milieu d'un mot
+Vous pouvez emp\^echer cet effet (si vous le rencontrez) en utilisant la
+commande ^|\noboundary| (\xref\noboundary).
+
+Parfois, vous aurez besoin d'une ligature d'une langue europ\'eenne.
+^^{langues europ\'eennes}
+\TeX\ ne les produit pas automatiquement sauf si vous utilisez une police
+dessin\'ee pour cette langue. Un certain nombre de ces ligatures, par exemple,
+\AE, sont accessible par une commande
+(voir ``Lettres et ligatures pour alphabets europ\'eens'',
+\xref{fornlets}).
+\endconcept
+
+
+\conceptindex{lignes de base}
+\concept ligne de base
+
+La \defterm{ligne de base} d'une \refterm{bo\^\i te} est une ligne imaginaire qui traverse
+la bo\^\i te.
+^^{\boites//lignes de base de}
+Quand \TeX\
+assemble les bo\^\i tes d'une \refterm{liste horizontale} en une bo\^\i te plus grande,
+il aligne les bo\^\i tes de la liste pour que leurs lignes de base co\"\i ncident.
+Par analogie, pensez que vous \'ecrivez sur un bloc de papier lign\'e. Chaque lettre
+que vous \'ecrivez a
+une ligne de base implicite.
+Pour aligner les lettres horizontalement,
+vous les placez sur le bloc pour que leurs lignes de base
+s'ajustent avec les lignes-guides claires imprim\'ees sur le bloc.
+
+Une bo\^\i te peut et souvent doit s'\'etendre sous sa ligne de base.
+Par exemple, la lettre `g' s'\'etend sous la ligne de base de sa bo\^\i te parce
+qu'elle a une descendante (la boucle du dessous du `g').
+\endconcept
+
+
+\conceptindex{listes}
+\concept liste
+
+Une \defterm{liste} est une s\'equence d'\refterm{\'el\'ements:\'el\'ement}
+(\refterm{bo\^\i tes:bo\^\i te}, \refterm{ressorts:ressort}, \refterm{cr\'enages:cr\'enage}, etc.)
+cela comprend tout le contenu d'une hbox, d'une vbox
+ou d'une formule math\'ematique.
+Voir \conceptcit{liste horizontale}, \conceptcit{liste verticale}.
+
+\endconcept
+
+
+\conceptindex{listes horizontales}
+\concept {liste horizontale}
+
+Une \defterm{liste horizontale} est une liste d'articles
+que \TeX\ a produit quand il \'etait dans un de ses
+\refterm{modes horizontaux:mode horizontal}, c'est-\`a-dire, en assemblant
+soit un paragraphe soit une hbox. Voir ``mode horizontal'' ci-dessous.
+\endconcept
+
+
+\conceptindex{listes verticales}
+\concept {liste verticale}
+
+Une \defterm{liste verticale} est une liste d'\'el\'ements que \TeX\ a produit quand il
+\'etait dans une de ses modes vertical, c'est-\`a-dire, en assemblant soit une
+\refterm{vbox} soit une page. Vois ``mode vertical'' ci-dessous.
+
+\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.
+Une \defterm{macro} est une d\'efinition qui donne un nom \`a un mod\`ele de texte
+d'entr\'ee de \TeX\footnote{Plus pr\'ecis\'ement, la d\'efinition donne un nom
+\`a une s\'equence de tokens.}. Le nom peut \^etre soit une \refterm{s\'equence de
+contr\^ole} soit un \refterm{caract\`ere actif}. Le mod\`ele est appel\'e le
+``texte de remplacement''. La commande primaire pour d\'efinir des macros est
+la s\'equence de contr\^ole |\def|.
+
+\def\arctheta{\cos \theta + i \sin \theta}
+Comme exemple simple, supposez que vous ayez un document dans lequel
+la s\'equence `$\cos \theta + i \sin \theta$' appara\^\i t plusieurs fois.
+Au lieu de l'\'ecrire \`a chaque fois, vous pouvez d\'efinir une macro pour cela~:
+\csdisplay
+\def\arctheta{\cos \theta + i \sin \theta}
+|
+Maintenant \`a chaque fois que vous avez besoin de cette s\'equence, vous pouvez
+simplement ``appeler'' la macro en \'ecrivant `|\arctheta|' et vous l'aurez.
+Par exemple, `|$e^{\arctheta}$|' vous donnera `$e^{\arctheta}$'.
+
+\bix^^{macros//param\`etres de}
+Mais la r\'eelle puissance des macros tient au fait qu'une macro peut avoir des
+param\`etres. Quand vous appelez une macro qui a des param\`etres, vous fournissez
+des arguments qui se substituent \`a ces param\`etres. Par exemple, supposez
+que vous \'ecrivez~:
+\pix\indexchar #
+\def\arc#1{\cos #1 + i \sin #1}
+\csdisplay
+\def\arc#1{\cos #1 + i \sin #1}
+|
+
+La notation |#1| \xrdef{@msharp} d\'esigne le premier param\`etre
+de la macro, qui dans ce cas n'a qu'un param\`etre. Vous pouvez maintenant
+produire une forme similaire, telle que `$\arc{2t}$', avec l'appel de macro
+`|\arc{2t}|'.
+
+Plus g\'en\'eralement, une macro peut avoir jusqu'a neuf param\`etres, que vous
+d\'esignez par `|#1|', `|#2|', etc\null. dans la d\'efinition de la macro. \TeX\
+fourni deux types de param\`etres~: les param\`etres d\'elimit\'es et les param\`etres
+non d\'elimit\'es. Bri\`evement, un param\`etre d\'elimit\'e a un \refterm{argument} qui
+est d\'elimit\'e ou termin\'e par une s\'equence sp\'ecifique de tokens (le d\'elimiteur),
+tandis qu'un param\`etre non d\'elimit\'e a un argument qui n'a pas besoin de
+d\'elimiteur pour le terminer.
+Premi\`erement, nous expliquerons comment fonctionnent les macros quand elles
+n'ont que des param\`etres non d\'elimit\'es, et ensuite, nous expliquerons comment
+elles fonctionnent quand elles ont des param\`etres d\'elimit\'es.
+
+^^{param\`etres//non d\'elimit\'es}
+Si une macro n'a que des param\`etres non d\'elimit\'es, ces param\`etres doivent appara\^\i tre
+l'un apr\`es l'autre dans la d\'efinition de macro \emph{sans rien entre
+eux ou entre le dernier param\`etre et l'accolade gauche au d\'ebut du
+texte de remplacement}.
+Un appel d'une telle macro consiste en le nom de la macro suivi par
+les arguments de l'appel, un pour chaque param\`etre. Chaque argument est
+soit~:
+
+\ulist \compact
+\li un \refterm{token} simple autre qu'un accolade gauche ou droite ou
+
+\li une s\'equence de tokens englob\'e entre une accolade gauche et
+une accolade droite correspondante\footnote{L'argument peut avoir des paires
+d'accolades englobantes et chacune de ces paires peut d\'esigner soit
+un \refterm{groupe} soit un autre argument de macro.}.
+\endulist
+
+Quand \TeX\ rencontre une macro, il d\'eveloppe la macro dans son \oe so\-phage
+\seeconcept{\anatomy}
+en substituant chaque argument par le param\`etre correspondant
+dans le texte de remplacement. Le texte r\'esultant peut contenir d'autres
+appels de macro. Quand \TeX\ rencontre un tel appel de macro imbriqu\'e, il
+d\'eveloppe cet appel imm\'ediatement sans regarder ce qui suit l'appel
+\footnote{En terminologie informatique, le d\'eveloppement est ``profondeur
+d'abord'' plut\^ot que ``largeur d'abord''. Notez que vous pouvez modifier l'ordre
+du d\'eveloppement avec des commandes telles que |\expandafter|.}. Quand
+l'\oesophage de \TeX\ tombe sur une \refterm{commande} \refterm{primitive}
+qui ne peut \^etre d\'evelopp\'ee plus loin, \TeX\ passe cette commande \`a l'estomac
+de \TeX. L'ordre de d\'eveloppement est parfois critique, donc de fa\c con \`a vous
+aider \`a le comprendre, nous vous donnons un exemple de \TeX\ au travail.
+
+Supposez que vous procurez \`a \TeX\ l'entr\'ee suivante~:
+\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.
+|
+Alors l'argument correspondant \`a |#1| est |\c|,
+et l'argument correspondant \`a |#2| est |e\d|.
+\TeX\ d\'eveloppe l'appel de macro d'apr\`es les \'etapes suivantes~:
+
+{\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|' envoy\'es vers l'estomac)
+|dd\c\kern 2pt \c|
+|\c\kern 2pt \c|\quad(`|d|', `|d|' envoy\'es vers l'estomac)
+|\char49 cc\kern 2pt \c|
+|\c|\quad(`|\char|', `|4|', `|9|', `|c|', `|c|', %
+`|\kern|', `|2|', `|p|', `|t|' envoy\'es vers l'estomac)
+|\char49 cc|
+(`|\char49|', `|c|', `|c|' envoy\'es vers l'estomac)
+\vskip\belowdisplayskip}
+
+\noindent Notez que les lettres `|b|', `|c|', `|d|' et `|e|' et les
+s\'equences de contr\^ole `|\kern|' et `|\char|' sont toutes des commandes
+primitives qui ne peuvent \^etre d\'evelopp\'ees.
+
+\bix^^{param\`etres//d\'elimit\'es}
+Une macro peut aussi avoir des ``param\`etres d\'elimit\'es'', qui peuvent \^etre m\'elang\'es avec
+des non d\'elimit\'es dans toutes les combinaisons. L'id\'ee d'un param\`etre
+d\'elimit\'e est que \TeX\ trouve l'argument correspondant en recherchant
+une certaine s\'equence de tokens qui marquent la fin de l'argument---le
+d\'elimiteur. Cela fait, quand \TeX\ recherche un tel argument, il
+prend comme argument tout les tokens \`a partir de la position courante de \TeX\
+mais sans inclure le d\'elimiteur.
+
+Vous indiquez un param\`etre d\'elimit\'e en \'ecrivant `|#|$n$' ($n$
+doit \^etre entre $0$
+et $9$) suivi par un ou plusieurs tokens qui agissent comme le d\'elimiteur.
+Le d\'elimiteur s'\'etend jusqu'au prochain `|#|' ou `|{|'---qui ont un sens
+car `|#|' d\'ebute un autre param\`etre et `|{|' le texte de remplacement.
+
+Le d\'elimiteur ne peut \^etre `|#|' ou `|{|', donc vous pouvez appeler un param\`etre
+d\'elimit\'e \`a partir d'un non d\'elimit\'e en recherchant ce qui le suit.
+
+Si le caract\`ere apr\`es le param\`etre est `|#|' ou `|{|', vous avez un
+param\`etre non d\'elimit\'e~; autrement il sera d\'elimit\'e. Notez
+la diff\'erence dans les arguments pour les deux sortes de param\`etres---un
+param\`etre non d\'elimit\'e est d\'esign\'e soit par un simple token, soit par une
+s\'equence de tokens englob\'es entre des accolades, tandis qu'un param\`etre
+d\'elimit\'e est d\'esign\'e par n'importe quel nombre de tokens, m\^eme aucun.
+
+Un exemple de macro utilisant deux param\`etres d\'elimit\'es est~:
+\def\diet#1 #2.{On #1 we eat #2!}
+\csdisplay
+\def\diet#1 #2.{On #1 we eat #2!!}
+|
+Ici le premier param\`etre est d\'elimit\'e par un simple espace et le
+second param\`etre est d\'elimit\'e par un point. Si vous saisissez~:
+\csdisplay
+\diet Tuesday turnips.
+|
+vous obtiendrez le texte ``\diet Tuesday turnips.''.
+Mais si les tokens d\'elimitants sont englob\'es dans un groupe, \TeX\
+ne les consid\`ere pas d\'elimit\'es. Donc si vous \'ecrivez~:
+\csdisplay
+\diet {Sunday mornings} pancakes.
+|
+vous obtiendrez le texte `\diet {Sunday mornings} pancakes.'
+m\^eme s'il y a un espace entre `|Sunday|' et `|morning|'.
+Quand vous utilisez un espace comme d\'elimiteur,
+un caract\`ere fin de ligne d\'elimite aussi normalement l'argument
+car \TeX\ convertit la fin de ligne en espace avant que le m\'ecanisme de
+macro ne le voit.
+\eix^^{param\`etres//d\'elimit\'es}
+\eix^^{macros//param\`etres de}
+
+Il arrivera que vous ayez \`a d\'efinir une macro qui ait `|#|' comme caract\`ere
+significatif. Vous aurez plus de chance d'avoir besoin de faire cela quand
+vous d\'efinirez une macro qui \`a son tour d\'efinit une seconde macro. Comment
+faire \`a propos des param\`etres de la seconde macro sans mettre \TeX\
+dans la confusion~? La r\'eponse est que vous saisissez deux `|#|' pour chacun
+de ceux que vous voulez quand la premi\`ere macro est d\'evelopp\'ee. Par exemple,
+supposons que vous \'ecriviez la d\'efinition de macro~:
+\def\first#1{\def\second##1{#1/##1}}
+\csdisplay
+\def\first#1{\def\second##1{#1/##1}}
+|
+Alors l'appel `|\first{One}|' d\'efini `|\second|' comme~:
+\csdisplay
+\def\second#1{One/#1}
+|
+et l'appel cons\'ecutif `|\second{Two}|' produit le texte
+\def\second#1{One/#1}%
+`\second {Two}'.
+
+Un certain nombre de commandes fournissent des moyens suppl\'emen\-taires pour d\'efinir des macros
+(voir pp.~\xrefn{mac1}--\xrefn{mac2}).
+Pour les r\`egles com\-pl\`etes concernant les macros, voir le \knuth{chapitre~20}{}
+}% close brace at the start of the `macro' concept.
+\endconcept
+
+
+\concept magnification
+
+Quand \TeX\ compose un document, il multiplie toutes les dimensions
+par un facteur de
+\refterm{magnification} $f/1000$,
+o\`u $f$ est la valeur du param\`etre ^|\mag| \ctsref\mag.
+Puisque la valeur par d\'efaut de |\mag| est $1000$, le cas normal est que
+votre document est compos\'e comme il est sp\'ecifi\'e.
+Augmenter la magnification est souvent utile quand vous composez un document
+qui sera r\'eduit photographiquement.
+
+Vous pouvez aussi appliquer de la magnification sur une seule \refterm{police}
+pour avoir une version plus petite ou plus grande de cette police que sa
+``^{taille d'origine}''. Vous
+devez procurer au driver d'impression un ^{fichier de forme}
+\seeconcept{police} pour
+chaque magnification de police que vous utilisez---%
+a moins que la police ne soit construite dans votre imprimante et que votre driver
+d'impression la connaisse.
+Quand vous d\'efinissez une police avec la commande
+|\font| \ctsref{\font}, vous pouvez sp\'ecifier une magnification avec
+le mot `|scaled|'. Par exemple~:
+
+\csdisplay
+\font\largerbold = cmbx10 scaled 2000
+|
+d\'efinit `|\largerbold|' comme une police qui est
+deux fois plus grande que |cmbx10| (Computer Modern
+Grasse Etendue en $10$ points) et a les formes de caract\`ere
+uniform\'ement agrandies d'un facteur de~$2$.
+
+De nombreux centres informatiques trouvent pratique de fournir des polices
+agrandies par un ratio
+de $1.2$, correspondant \`a des valeurs de magnification de $1200$, $1440$, etc.
+\TeX\ a des noms sp\'eciaux pour ces valeurs~:
+^^|\magstep|
+`|\magstep1|' pour $1200$,
+`|\magstep2|' pour $1440$, et ainsi de suite jusqu'a `|\magstep5|'.
+La valeur sp\'eciale `^|\magstephalf|' correspond \`a une magnification de $\sqrt{1.2}$, qui
+est visuellement \`a mi-chemin entre `|\magstep0|' (pas de magnification) et
+`|\magstep1|'. Par exemple~:
+
+\csdisplay
+\font\bigbold = cmbx10 scaled \magstephalf
+|
+
+Vous pouvez sp\'ecifier une \refterm{dimension} comme elle sera
+mesur\'ee dans le document final ind\'ependamment des magnifications en mettant
+`^|true|' devant l'unit\'e. Par exemple, `|\kern 8 true pt|'
+produit un cr\'enage de $8$ points quelque soit la magnification.
+
+\endconcept
+
+\concept marges
+
+Les \refterm{marges}
+d'une page d\'efinissent un rectangle qui normalement
+contient la mati\`ere imprim\'ee sur la page.
+Vous pouvez demander \`a \TeX\ d'imprimer du mat\'eriel en dehors de ce rectangle,
+mais uniquement en demandant des actions explicites qui d\'eplacent le mat\'eriel
+\`a cet endroit. \TeX\ consid\`ere les ent\^etes et les pieds de page comme \'etant
+en dehors des marges.
+
+Le rectangle est d\'efini en fonction de son coin en haut \`a gauche, de sa largeur, et
+de sa profondeur. L'emplacement du coin en haut \`a gauche est d\'efini par
+les param\`etres ^|\hoffset|
+et ^|\voffset|
+\ctsref\voffset. L'usage est de placer ce coin \`a un pouce du haut
+et \`a un pouce du bord gauche de la page, correspondant \`a une valeur de
+z\'ero pour |\hoffset| et |\voffset|%
+\footnote{Il nous semble qu'il s'agisse d'une convention bizarre.
+Il aurait \'et\'e plus naturel d'avoir le point $(0,0)$
+pour |\hoffset| et |\voffset| dans le coin en haut \`a gauche du
+papier et d'avoir leur valeur par d\'efaut \`a un pouce.}.
+La largeur du rectangle est donn\'e par ^|\hsize| et la profondeur par ^|\vsize|.
+
+Les implications de ces conventions sont~:
+\ulist\compact
+\li La marge gauche est donn\'ee par |\hoffset|\tplus|1in|.
+\li La marge droite est donn\'ee par la largeur du papier moins
+ |\hoffset|\tplus|1in|\tplus|\hsize|.
+\li La marge du haut est donn\'ee par |\voffset|\tplus|1in|.
+\li La marge du bas est donn\'ee par la longueur du papier moins
+ |\voff!-set|\tplus|1in|\tplus|\vsize|.
+\endulist
+A partir de ces informations vous pouvez voir quels param\`etres vous devez
+changer pour modifier les marges.
+
+Chaque changement que vous faites \`a |\hoffset|, |\voffset| ou |\vsize| prendra
+effet la prochaine fois que \TeX\ d\'ebutera une page. En d'autres termes, si vous
+les changez dans une page, le changement n'affectera que la page \emph{suivante}.
+Si vous changez |\hsize|, le changement deviendra effectif imm\'ediatement.
+\endconcept
+
+
+\conceptindex{marques}
+\concept marque
+
+Une \defterm{marque} est un \'el\'ement que vous pouvez ins\'erer dans une
+liste horizontale, verticale ou math\'ematique et plus tard la retrouver dans
+votre routine de sortie. Les marques sont utiles pour des usages tels que
+garder une trace des sujets apparents dans des ent\^etes de page.
+Chaque marque a une liste de tokens---le ``^{texte de marque}''---associ\'e avec elle.
+La commande ^|\mark| \ctsref{\mark} attend une telle liste de token
+comme son argument, et attend un \'el\'ement contenant cette liste de token (apr\`es
+expansion) pour toute liste que \TeX\ est en train de construire.
+Les commandes ^|\topmark|, ^|\firstmark| et ^|\botmark|
+\ctsref{\topmark} peuvent \^etre utilis\'ees pour retrouver diverses marques sur une page.
+Ces commandes sont le plus souvent utilis\'ees dans les ent\^etes et les pieds de page.
+^^{pieds de page//marques utilis\'es en}
+^^{ent\^etes//marques utilis\'es en}
+
+\margin{This example of {\tt\\mark} replaces the previous explanatory
+paragraph.}
+Voici un exemple simplifi\'e.
+Supposez que vous d\'efinissiez une macro d'ent\^ete de section comme suit~:
+\csdisplay
+\def\section#1{\medskip{\bf#1}\smallskip\mark{#1}}
+% #1 is the name of the section
+|
+^^|\mark|
+Cette macro, quand elle est appel\'ee, produira un ent\^ete de section en caract\`eres gras et
+enregistrera aussi le nom de la section comme marque.
+Vous pouvez maintenant d\'efinir l'ent\^ete de chaque page imprim\'ee
+comme suit~:
+\csdisplay
+\headline = {\ifodd\pageno \hfil\botmark\quad\folio
+ \else \folio\quad\firstmark\hfil \fi}
+|
+Chaque page paire (celle de gauche) aura maintenant le num\'ero de page suivi par
+le nom de la premi\`ere section de cette page, tandis que chaque page impaire (celle de droite)
+aura le num\'ero de page suivi du nom de la derni\`ere section de cette page.
+Les cas sp\'eciaux, par exemple, pas de section commen\c cant sur une page,
+s'afficheront g\'en\'eralement correctement gr\^ace \`a la mani\`ere dont travaillent
+^|\firstmark| et ^|\botmark|.
+
+Quand vous partagez une page en utilisant la commande |\vsplit| \ctsref{\vsplit} vous
+pouvez retrouver les textes de la premi\`ere et de la derni\`ere marque de la
+portion non partag\'ee avec les commandes ^|\splitfirstmark| et ^|\splitbotmark|
+\ctsref{\splitfirstmark}.
+
+Voir les \knuth{pages~258--260}{302--305} pour une explication plus pr\'ecise sur la
+fa\c con de cr\'eer et retrouver des marques.
+\endconcept
+
+
+\conceptindex{mathcodes}
+\concept mathcode
+
+Un \defterm{mathcode} est un nombre que \TeX\ utilise pour identifier et
+d\'ecrire un caract\`ere math\'ematique,
+^^{caract\`eres math\'ematiques//d\'ecrits par mathcodes}
+c'est-\`a-dire, un caract\`ere qui a un
+r\^ole particulier dans une formule math\'ematique. Un mathcode
+transmet trois sortes
+d'informations sur un caract\`ere~: sa position dans la \refterm{police}, sa
+\refterm{famille} et sa \refterm{classe}.
+Chacun des $256$ caract\`eres entr\'es possibles
+a un mathcode, qui est d\'efini par le programme \TeX\
+mais peut \^etre chang\'e.
+
+^^{famille//comme partie de mathcode}
+\TeX\ a seize familles de police, num\'erot\'ees $0$--$15$. Chaque
+famille con\-tient trois polices~: une pour la \refterm{taille texte}, une pour
+la \refterm{taille script} et une pour la \refterm{taille scriptscript}. \TeX\
+choisi la taille d'un caract\`ere particulier et donc sa police,
+en fonction du contexte. La classe d'un caract\`ere sp\'ecifie son r\^ole
+dans une formule (voir la \knuth{page~154}{180}). Par exemple, le signe \'egal `|=|'
+est dans la classe $3$ (relation). \TeX\ utilise sa connaissance des classes
+de caract\`eres quand il d\'ecide combien d'espace mettre entre diff\'erents
+composants d'une formule math\'ematique.
+
+La meilleure fa\c con de comprendre ce que sont les mathcodes est de voir comment
+\TeX\ les utilise. Nous montrons ce que \TeX\ fait avec un
+token de caract\`ere $t$ de \refterm{code de cat\'egorie}~11 ou~12 dans une
+formule math\'ematique~:
+
+\olist\compact
+\li Il recherche le mathcode du caract\`ere.
+\li Il d\'etermine une famille $f$ \`a partir du mathcode.
+\li Il d\'etermine la taille $s$ \`a partir du contexte.
+\li Il s\'electionne une police $F$ en prenant la police de taille $s$ dans la famille $f$.
+\li Il d\'etermine un num\'ero de caract\`ere $n$ \`a partir du mathcode.
+\li Il s\'electionne comme caract\`ere $c$ devant \^etre compos\'e le caract\`ere
+\`a la position $n$ de la police $F$.
+\li Il ajuste l'espacement autour de $c$ en fonction de la classe de $t$ et
+du contexte ambiant.
+\li Il compose le caract\`ere $c$.
+\endolist
+
+La d\'ependance du contexte dans les \'etapes
+(3) et (7) implique que \TeX\ ne peut pas composer un caract\`ere math\'ematique
+tant qu'il n'a pas vu toute la formule contenant le
+caract\`ere math\'ematique. Par exemple, dans la formule
+`|$a\over b$|', \TeX\ ne sait pas quelle taille aura le `|a|' tant qu'il
+n'aura pas vu le |\over|.
+
+{\tighten
+Le mathcode d'un caract\`ere est encod\'e en fonction de la formule $4096c
++ 256f + n$, o\`u $c$ est la classe du caract\`ere, $f$ sa
+\refterm{famille} et $n$ son code de \refterm{caract\`ere \ascii} dans
+la famille. Vous pouvez changer l'interpr\'etation de \TeX\ pour un caract\`ere entr\'e
+dans un mode math\'ematique en assignant une valeur \`a la table d'entr\'ee des ^|\mathcode|
+\ctsref{\mathcode} pour ce
+caract\`ere. Le caract\`ere doit avoir un
+\refterm{code de cat\'egorie} \`a $11$ (lettre) ou $12$ (autre) pour que \TeX\
+recherche son |\mathcode|.
+}\par
+
+^^{famille//variable}
+Vous pouvez d\'efinir un caract\`ere math\'ematique pour avoir une famille ``variable'' en
+lui donnant une classe de $7$. A chaque fois que \TeX\ rencontre ce caract\`ere dans une
+formule math\'ematique, il prend la famille du caract\`ere comme \'etant la valeur
+courante du param\`etre |\fam| \ctsref{\fam}. Une famille variable vous autorise
+\`a sp\'ecifier la police de texte ordinaire dans une formule math\'ematique. Par
+exemple, si le caract\`ere romain est dans la famille $0$, l'assignement
+|\fam = 0|
+fera que le texte ordinaire d'une formule math\'ematique sera mis en type romain
+au lieu d'autre chose comme du type math\'ematique italique. Si la valeur de
+|\fam| n'est pas dans la fourchette de $0$ \`a $15$, \TeX\ prend la valeur \`a
+$0$, ainsi le rendu des classes $0$ et $7$ est \'equivalent.
+\TeX\ fixe |\fam| \`a $-1$ a chaque fois qu'il entre en mode math\'ematique.
+\endconcept
+
+
+\conceptindex {math\'ematiques affich\'ees}
+\concept {math\'ematique affich\'ee}
+
+Le terme \defterm{math\'ematique affich\'ee} fait r\'ef\'e\-rence aux formules math\'ematiques que \TeX\
+place sur une ligne seule avec de l'espace suppl\'ementaire dessus et dessous
+pour le s\'eparer du texte l'environnant.
+Une formule math\'ematique affich\'ee est entour\'ee de `|$$|'.
+\ttidxref{$$}
+\TeX\ lit les math\'ematiques affich\'ees dans le \refterm{mode} math\'ematiques affich\'ees.
+\endconcept
+
+
+\concept m\'ediocrit\'e
+
+La \defterm{m\'ediocrit\'e} d'une ligne mesure combien les tailles des espaces
+inter-mot ^^{espacement inter-mots} de la ligne d\'evient de leurs valeurs
+naturelles, c'est-\`a-dire, des valeurs sp\'ecifi\'ees dans les
+\refterm{polices:police} utilis\'ees dans la ligne. Plus grande est la
+d\'eviation, plus grande est la m\'ediocrit\'e. Similairement, la m\'ediocrit\'e d'une
+page est une mesure de combien les espaces entre les bo\^\i tes qui dessinent
+la page d\'evient de leurs valeurs id\'eales. (Ordinairement, la plupart de ces
+bo\^\i tes sont des lignes simples de paragraphes.)
+
+Plus pr\'ecis\'ement, la m\'ediocrit\'e mesure de combien le \refterm{ressort}
+associ\'e avec ces espaces doit s'\'etirer ou se r\'etr\'ecir pour remplir la
+ligne ou la page exactement. \TeX\ calcule la m\'ediocrit\'e comme
+approximativement $100$ fois le cube du ratio par lequel il doit \'etirer ou
+r\'etr\'ecir le ressort pour composer une ligne ou une page de la taille d\'esir\'ee.
+^^{coupures de ligne//m\'ediocrit\'e pour}^^{coupures de page//m\'ediocrit\'e pour} Par exemple,
+\'etirer le ressort par deux fois son \'etat d'\'etirement signifie un ratio de
+$2$ et une m\'ediocrit\'e de $800$~; la r\'etr\'ecir de moiti\'e son \'etat de r\'etr\'ecissement
+signifie un ratio de $.5$ et une m\'ediocrit\'e de $13$. \TeX\ traite une m\'ediocrit\'e
+sup\'erieure \`a $10000$ comme \'etant \'egale \`a $10000$.
+
+\TeX\ utilise la m\'ediocrit\'e d'une ligne quand il coupe un paragraphe en lignes
+\seeconcept{coupure de ligne}. Il utilise cette information en deux \'etapes~:
+
+\olist
+\li Quand \TeX\ choisi des coupures de ligne,
+il acceptera \'eventuellement des lignes dont la m\'ediocrit\'e est inf\'erieure ou \'egale \`a
+la valeur de |\tole!-rance| (\xref \tolerance). Si \TeX\ ne peut pas diminuer la conception
+d'une ligne dont la m\'ediocrit\'e d\'epasse cette valeur,
+il lui mettra un ``underfull ou overfull \refterm{hbox}''.
+\TeX\ ne mettra
+un ``overfull ou underfull hbox'' qu'en dernier ressort, c'est-\`a-dire, seulement s'il n'y a
+pas d'autre moyen de d\'ecouper le paragraphe en lignes.
+\li En assumant que toutes les lignes sont tol\'erablement mauvaises, \TeX\ utilise la m\'ediocrit\'e des lignes
+pour \'evaluer les diff\'erents moyens de couper le paragraphe en lignes.
+Durant cette \'evaluation il associe des ``d\'em\'erites'' avec chaque ligne potentielle.
+La m\'ediocrit\'e augmente le nombre de \refterm{d\'em\'erites}.
+\TeX\ alors
+coupe le paragraphe en lignes d'une fa\c con qui minimise
+le total des d\'em\'erites pour le paragraphe.
+Plus
+souvent \TeX\ arrange le paragraphe pour minimiser la m\'ediocrit\'e de la
+ligne la pire. Voir \knuth{pages~97--98}{114--115} pour les d\'etails comment \TeX\
+coupe un paragraphe en lignes.
+\endolist
+
+La proc\'edure de \TeX\ pour assembler une s\'equence de lignes et autres mati\`eres en modes verticaux
+en pages est similaire \`a sa proc\'edure de coupure de ligne.
+De toutes fa\c cons, assembler des pages n'est pas aussi compliqu\'e parce que
+\TeX\ ne consid\`ere qu'une page \`a la fois
+quand il cherche des coupures de page.
+Donc la seule d\'ecision qu'il doit prendre est o\`u finir la page courante.
+De plus, quand \TeX\ choisit des coupures de ligne il en
+consid\`ere plusieurs simultan\'ement.
+(La plupart des traitements de texte choisissent des coupures de ligne une \`a la fois,
+et donc ne font pas un aussi bon boulot que celui que fait \TeX\.)
+Voir \knuth{pages~111--113}{129--131} pour les d\'etails sur comment \TeX\ choisit ses
+coupures de page.
+\endconcept
+
+
+\conceptindex{modes}
+\concept mode
+
+Quand \TeX\ dig\`ere votre entr\'ee dans son estomac \seeconcept{\anatomy},
+il est dans un des six \defterm{modes}~:
+\ulist\compact
+\li ^{mode horizontal ordinaire} (assemblage d'un paragraphe)
+\li ^{mode horizontal restreint} (assemblage d'une \refterm{hbox})
+\li ^{mode vertical ordinaire} (assemblage d'une page)
+\li ^{mode vertical restreint} (assemblage d'une \refterm{vbox})
+\li ^{mode math\'ematique de texte} (assemblage d'une formule apparaissant dans du texte)
+\li ^{mode math\'ematique hors-texte}
+(assemblage d'une formule apparaissant sur une ligne seule)
+^^{mode horizontal}^^{mode vertical}^^{mode math\'ematique}
+\endulist
+Le mode d\'ecrit une sorte d'entit\'e que \TeX\ rassemble.
+
+Parce que vous pouvez encastrer une sorte d'entit\'e avec une autre, c'est-\`a-dire, une vbox
+dans une formule, \TeX\ garde trace non seulement d'un mode mais d'une
+liste enti\`ere de modes (ce qu'un informaticien appelle une ``pile'').
+Supposez que \TeX\ soit en mode $M$ et rencontre quelque chose qui le
+met dans une nouveau mode \Mprimeperiod. Quand il termine son travail dans
+le mode \Mprimecomma, il reprend ce qu'il faisait dans le mode \Mperiod.
+
+\endconcept
+
+
+\concept {mode horizontal}
+
+^^{hbox//mode horizontal pour}
+Quand \TeX\ assemble un paragraphe ou une \refterm{hbox}, il est dans un
+des deux \defterm{modes horizontaux}~: le ^{mode horizontal ordinaire}
+pour assembler des paragraphes et le ^{mode horizontal restreint} pour
+assembler des bo\^\i tes horizontales. A chaque fois que \TeX\ est dans un mode horizontal
+son estomac \seeconcept{\anatomy} construit une \refterm{liste horizontale}
+d'articles (bo\^\i tes, ressort, p\'enalit\'es, etc.).
+\TeX\ compose les articles dans la liste
+l'un apr\`es l'autre, de gauche \`a droite.
+
+Une liste horizontale ne peut contenir aucun
+article produit par des commandes verticales internes, par exemple, |\vskip|.
+^^{listes horizontales//ne peuvent contenir de commandes verticales}
+
+\ulist
+\li Si \TeX\ assemble une liste horizontale dans le mode horizontal ordinaire et
+rencontre une commande verticale interne, \TeX\ termine le paragraphe et
+entre dans le \refterm{mode vertical}.
+
+\li Si \TeX\ assemble une liste horizontale dans le mode horizontal
+interne et rencontre une commande verticale interne, il rousp\`ete.
+\endulist
+
+Deux commandes que vous pensez d'abord horizontales internes
+sont en fait verticales internes~: |\halign| \ctsref{\halign}
+et |\hrule| \ctsref{\hrule}.
+^^|\hrule//vertical par nature|
+^^|\halign//vertical par nature|
+voir la \knuth{page~286}{332} pour une liste
+des commandes verticales internes.
+
+{\tighten
+Vous devez faire attention \`a une subtile mais importante propri\'et\'e du mode
+horizontal interne~: \emph{vous ne pouvez pas entrer en mode horizontal interne
+quand vous \^etes en mode horizontal normal}. Ce que cela signifie en pratique
+est que quand \TeX\ assemble une hbox il n'appr\'ehendera pas un texte en
+paragraphe, c'est-\`a-dire, du texte pour lequel il ferait une \refterm{coupure
+de ligne}. Vous pouvez contourner cette restriction en englobant le texte en
+paragraphe dans une \refterm{vbox} \`a l'int\'erieur de l'hbox. la m\^eme m\'ethode
+marche si vous voulez mettre, disons un \refterm{alignement} horizontal dans
+un~hbox.
+}% end scope of tighten
+
+\endconcept
+
+
+\concept {mode math\'ematique}
+
+{\tighten
+Un \defterm{mode math\'ematique} est un \refterm{mode} dans lequel \TeX\
+construit une formule math\'ematique. \TeX\ a deux modes math\'ematiques diff\'erents~: Le
+^{mode math\'ematique de texte} construit une formule devant \^etre englob\'ee dans une ligne de texte,
+tanfis que le ^{mode math\'ematique d'affichage} construit une formule devant
+appara\^\i tre seul sur une ligne. Vous indiquez le mode math\'ematique de texte
+en englobant la formule entre |$| et dans le mode math\'ematique d'affichage en
+englobant la formule entre |$$|.
+%\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.
+Une propri\'et\'e importante des deux modes math\'ematiques est que les
+\emph{espace saisis ne comptent pas}. Voir les
+\knuth{pages~290--293}{338--342} pour des d\'etails sur la fa\c con dont \TeX\ r\'epond aux
+diff\'erentes commandes en mode math\'ematique.
+\par}
+
+\endconcept
+
+
+\concept {mode ordinaire}
+
+Le \defterm{mode ordinaire} est le \refterm{mode} dans lequel est \TeX\ quand
+il assemble un paragraphe en lignes ou assemble des lignes
+en une page. Voir \conceptcit{mode horizontal}, \conceptcit{mode vertical}.
+\endconcept
+
+
+\concept {mode restreint}
+
+Le \defterm{mode restreint} est le \refterm{mode} dans lequel est \TeX\ quand
+il assemble une \refterm{hbox} ou une \refterm{vbox}.
+Nous suivons \texbook\ dans l'utilisation du terme ``mode vertical interne''
+pour ce que vous vous attendez \^etre un ``mode vertical restreint''.
+Voir \conceptcit{mode horizontal} et \conceptcit{mode vertical}.
+\endconcept
+
+
+\concept {mode vertical}
+
+^^{vbox//mode vertical pour} Quand \TeX\ assemble soit une
+\refterm{vbox} soit la liste verticale principale dont les pages sont d\'eriv\'ees,
+il est dans un des deux \defterm{modes verticaux}~: le ^{mode vertical ordinaire}
+pour assembler la liste verticale principale et le ^{mode vertical restreint}
+pour assembler les vbox. A chaque fois que \TeX\ est en mode vertical
+son estomac \seeconcept{\anatomy} construit une \refterm{liste verticale}
+d'\'el\'ements (bo\^\i tes, ressort, p\'enalit\'es, etc.).
+\TeX\ compose les \'el\'ements de la liste
+l'un apr\`es l'autre, de haut en bas.
+
+Une liste verticale ne peut pas contenir tous les \'el\'ements produits par
+des commandes fondamentalement horizontales, c'est-\`a-dire,
+^^{listes verticales//ne peuvent contenir de commandes horizontales}
+|\hskip| ou un caract\`ere ordinaire (pas un espace)
+\footnote{\TeX\ \emph{ignore} tout caract\`ere espace
+qu'il rencontre quand il est dans un mode vertical.}.
+
+\ulist
+\li Si \TeX\ assemble une liste verticale dans le mode vertical ordinaire et
+rencontre une commande fondamentalement horizontale, il bascule vers le
+\refterm{mode horizontal} ordinaire.
+\li Si \TeX\ assemble une liste verticale dans le mode vertical interne et
+rencontre une commande fondamentalement horizontale, il rousp\`ete.
+\endulist
+
+Deux commandes auxquelles vous devez penser en premier qu'elles sont fondamentalement verticales sont
+en fait fondamentalement horizontales~: |\valign| \ctsref{\valign} et |\vrule|
+\ctsref{\vrule}.
+^^|\valign//horizontal par nature|
+^^|\vrule//horizontal par nature|
+Voir la \knuth{page~283}{329} pour une liste des commandes
+fondamentalement horizontales.
+
+Il est particuli\`erement important d'avoir conscience que \TeX\ consid\`ere un
+caract\`ere ordinaire autre qu'un espace comme \'etant fondamentalement horizontal.
+Si \TeX\ d\'ebute soudainement un nouveau paragraphe quand vous ne vous y
+attendez pas une cause vraisemblable est un caract\`ere que \TeX\ a rencontr\'e
+en \'etant en mode vertical. Vous pouvez convaincre \TeX\ de ne pas traiter ce
+caract\`ere comme fondamentalement horizontal en l'englobant dans une
+\refterm{hbox} puisque la commande |\hbox|, malgr\'e son nom, n'est ni
+fondamentalement horizontale ni fondamentalement verticale.
+\endconcept
+
+
+\conceptindex{mots de contr\^ole}
+\concept {mot de contr\^ole}
+
+Un \defterm{mot de contr\^ole} est une \refterm{s\'equence de contr\^ole} qui
+est constitu\'e d'un \refterm{caract\`ere d'\'echappement} suivi d'une ou plusieurs
+lettres\footnote{Une ``lettre'' ici a la strict signification d'un
+caract\`ere de code de cat\'egorie $11$.}.
+\TeX\
+ignore tout espace ou fin de ligne qui suit un mot de contr\^ole, sauf pour
+noter qu'ils terminent le mot de contr\^ole.
+^^{caract\`ere d'\'echappement}
+\endconcept
+
+
+\concept muglue
+
+Une \defterm{muglue} est une sorte de \refterm{ressort}
+que vous ne pouvez utiliser que dans les formules math\'ematiques.
+Elle est mesur\'ee en ^|mu| (\refterm{unit\'es math\'ematiques:unit\'e
+math\'ematique}).
+^^{unit\'es math\'ematiques}^^{ressort//math\'ematique}
+Une |mu| est \'egale \`a \frac1/{18} em, o\`u
+la taille d'un em est prise de la \refterm{famille} 2 des polices math\'ematiques.
+\TeX\ ajuste automatiquement la taille de la muglue en fonction du contexte.
+Par exemple, une taille de ressort de |2mu| est normalement plus petite dans un
+sous-script que dans un texte ordinaire.
+Vous devez utiliser la commande ^|\mskip| pour produire une muglue.
+Par exemple, `|\mskip 4mu plus 5mu|' produit un ressort math\'ematique avec un
+espace naturel de quatre |mu| et un \refterm{\'etirement} de cinq |mu|.
+
+\endconcept
+
+
+\conceptindex{noms de fichier}
+\concept {nom de fichier}
+
+Un \defterm{nom de fichier} nomme un
+\refterm{fichier} qui est connu du ^{syst\`eme d'exploitation}
+qui
+supervise votre ex\'ecution de \TeX. La syntaxe d'un nom de fichier ne doit \emph{pas}
+suivre les r\`egles usuelles de la syntaxe de \TeX\ et en fait est diff\'erente
+selon les diff\'erentes impl\'emen\-ta\-tions de \TeX.
+En particulier, la plupart des impl\'ementations de \TeX\ consid\`erent un nom de fichier
+comme \'etant
+termin\'e par un blanc ou une fin de ligne. Ainsi \TeX\ est susceptible de
+mal interpr\'eter `|{\input chapter2}|'
+en prenant l'accolade droite comme partie du nom de fichier.
+Comme r\`egle g\'en\'erale, vous devez faire suivre un nom de fichier d'un blanc ou
+d'une fin de ligne comme dans `|{\input chapter2!visiblespace}|'.
+
+\endconcept
+
+
+\conceptindex{nombres}
+\concept nombre
+
+En \TeX, un \defterm{nombre} est un entier positif ou n\'egatif.
+Vous pouvez \'ecrire un nombre en \TeX\ de quatre fa\c cons diff\'erentes~:
+\olist\compact
+\li comme un entier d\'ecimal ordinaire, par exemple, |52|
+\li comme un nombre octal, par exemple, |'14| ^^{nombres octaux}
+\li comme un nombre hexad\'ecimal, par exemple, |"FF0| ^^{nombres hexad\'ecimaux}
+\li comme le code d'un \refterm{caract\`ere \ascii}, par exemple, |`)|
+ou |`\)|
+\endolist
+\noindent
+Chacune de ces formes peut \^etre pr\'ec\'ed\'ee par `|+|' ou `|-|'.
+
+Un nombre octal ne peut avoir que les chiffres |0|--|7|.
+^^{nombres octaux}
+Un nombre hexa\-d\'ecimal peut avoir les chiffres |0|--|9| et
+|A|--|F|, repr\'esentant
+les valeurs de $0$ \`a $15$.
+^^{nombres hexad\'ecimaux}
+Vous ne pouvez, h\'elas, utiliser de lettres minuscules quand vous \'ecrivez un nombre hexad\'ecimal.
+Si vous voulez des explications sur les nombres octaux et hexad\'ecimaux,
+vous en trouverez dans les \knuth{pages~43--44}{53--54}.
+
+Un nombre d\'ecimal, octal ou hexad\'ecimal
+se termine au premier caract\`ere qui ne peut faire partie du nombre.
+Ainsi un nombre d\'ecimal se termine quand \TeX\ voit, disons, une lettre,
+tandis qu'une lettre entre `|A|' et `|F|' ne terminera pas un nombre hexad\'ecimal.
+Vous pouvez terminer un nombre avec un ou plusieurs espaces et normalement,
+\TeX\ les ignorera\footnote{
+Quand vous d\'efinissez une macro qui se termine par un nombre, vous devez
+toujours mettre un espace apr\`es ce nombre~; autrement, \TeX\ pourrait combiner
+ce nombre avec autre chose.}.
+
+La quatri\`eme forme ci-dessus sp\'ecifie un nombre comme le code
+\minref{\ascii} d'un caract\`ere.
+^^{caract\`eres//codes \ascii\ pour}
+\TeX\ ignore les espaces apr\`es cette forme de nombre aussi.
+Vous pouvez \'ecrire un nombre de cette forme soit comme |`|$c$ soit comme |`\|$c$.
+La seconde forme, bien que plus longue, a l'avantage que vous pouvez l'utiliser
+avec \emph{tout} caract\`ere, m\^eme `|\|', `|%|', ou `|^^M|'.
+En revanche, il y a un inconv\'enient plut\^ot technique~: quand \TeX\ d\'eveloppe
+une s\'equence de tokens pour une commande telle que |\edef| ou |\write|,
+^^|\edef//expansion de {\tt\\'\it c} en|
+^^|\write//expansion de {\tt\\'\it c} en|
+des occurrences de `|\|$c$' repr\'esentant un nombre sera aussi d\'evelopp\'ee
+ si elle peut l'\^etre.
+C'est rarement l'effet que vous d\'esirez.
+
+Ce qui suit sont des repr\'esentations valides du nombre d\'ecimal
+$78$~:
+\csdisplay
+78 +078 "4E '116 `N `\N
+|
+
+
+Vous ne pouvez utiliser un nombre dans du texte par lui-m\^eme car un nombre n'est pas
+une commande.
+N\'eanmoins, vous pouvez ins\'erer la forme d\'ecimale d'un nombre dans du texte
+en mettant une commande ^|\number| (\xref\number) devant lui
+ou la forme num\'erique romaine en mettant une commande ^|\romannumeral|
+devant lui.
+
+Vous pouvez aussi utiliser des ^{constantes d\'ecimales},
+par exemple, des nombres avec une partie fractionnaire,
+pour sp\'ecifier des dimensions \seeconcept{dimension}.
+Une constante d\'ecimale a un ^{point d\'ecimal}, qui peut \^etre
+le premier caract\`ere de la constante. Vous pouvez utiliser une
+virgule au lieu d'un point pour repr\'esenter le point d\'ecimal.
+Une constante d\'ecimale peut \^etre pr\'ec\'ed\'ee par un signe plus ou moins.
+Ainsi `|.5in|',
+`|-3.22pt|' et `|+1,5\baselineskip|' sont des dimensions valides.
+Vous ne pouvez, par contre, utiliser de constantes d\'ecimales
+dans tous les contextes \emph{autres} comme la partie ``facteur'' d'une dimension,
+c'est-\`a-dire, son multiplicateur.
+
+
+\endconcept
+
+
+\concept outer
+
+\bix^^{macros//outer}
+Une macro \defterm{outer} est une macro que vous ne pouvez utiliser dans
+certains contextes o\`u \TeX\ assemble des tokens \`a grande vitesse.
+Le but de rendre une commande outer est d'obliger \TeX\ \`a g\'en\'erer
+des erreurs avant d'aller trop loin.
+Quand vous d\'efinissez une macro, vous pouvez la rendre outer avec la commande
+^|\outer| \ctsref\outer.
+
+Vous ne pouvez utiliser de macro outer dans aucun des contextes suivants~:
+\ulist\compact
+\li comme argument d'une macro
+\li dans le texte param\`etre ou le texte de remplacement d'une d\'efinition
+\li dans le pr\'eambule d'un alignement
+\li dans la partie non ex\'ecut\'ee d'un test conditionnel
+\endulist
+\noindent
+Un contexte outer est un contexte dans lequel vous pouvez utiliser une
+macro outer, c'est-\`a-dire c'est tout contexte autre que ceux list\'es ci-dessus.
+
+Par exemple, l'entr\'ee suivante sera une utilisation interdite d'une macro outer
+\csdisplay
+\leftline{\proclaim Assertion 2. That which is not inner
+ is outer.}
+|
+La macro |\proclaim| (\xref{\@proclaim}) est d\'efinie en \plainTeX\
+comme \'etant outer, mais elle est utilis\'ee ici comme un macro argument \`a
+ |\leftline|.
+\eix^^{macros//outer}
+
+\endconcept
+
+
+\conceptindex{pages}
+\concept page
+
+\TeX\ compile un document en assemblant des \defterm{pages} une par une
+et en les passant \`a la routine de sortie.
+Quand il lit votre document, \TeX\ maintient une liste des lignes
+et d'autres \'el\'ements \`a placer sur la page. (Les lignes sont normalement des
+hbox.) Cette liste est appel\'ee la ``^{liste verticale principale}''.
+P\'eriodiquement \TeX\ rentre dans un processus appel\'e ``devoir du
+^{constructeur de page}''.
+Les \'el\'ements ajout\'es \`a la liste verticale principale entre les devoirs
+du constructeur de page sont appel\'e ``^{contributions r\'ecentes}''.
+
+Le constructeur de page examine d'abord la liste verticale principale pour voir si elle
+a besoin de d\'eposer une page maintenant, soit parce que les \'el\'ements sur la liste
+verticale principale ne tiennent pas sur la page, soit parce que un \'el\'ement
+sp\'ecifique, tel que |\eject| \ctsref\eject, demande \`a \TeX\ de finir la page.
+S'il n'est pas n\'ecessaire de d\'eposer une page, alors le constructeur de page
+est fait pour la prochaine fois.
+
+Autrement, le constructeur de page analyse la liste verticale principale pour
+trouver ce qu'il consid\`ere comme \'etant la meilleure coupure de page possible.
+Il associe des p\'enalit\'es avec plusieurs types de coupure de page peu attirantes---une
+coupure qui laisse une ligne isol\'ee en haut ou en bas de la page, une coupure
+juste avant un affichage math\'ematique, et ainsi de suite. Il choisit alors
+la coupure de page la moins ch\`ere
+o\`u le co\^ut d'une coupure est augment\'e de toute p\'enalit\'e associ\'ee avec cette
+coupure et par la m\'ediocrit\'e de la page qui en r\'esulte
+(voir la \knuth{page~111}{130} pour la formule du co\^ut). S'il trouve plusieurs
+coupures de page de co\^ut identique, il choisit la derni\`ere.
+
+{\tighten
+Une fois que le constructeur de page a choisi une coupure de page,
+il place les \'el\'ements de la liste qui sont avant cette coupure
+dans la ^|\box255| et garde le reste pour la page suivante.
+Il appelle alors la routine de sortie. |\box255| agit comme une bo\^\i te
+aux lettres, avec le constructeur de page comme exp\'editeur et la routine de
+sortie comme destinataire.
+Ordinairement la routine de sortie traite la |\box255|, ajoute
+d'autres \'el\'ements, comme des insertions, ent\^ete et pieds de page \`a la page et
+envoit la page vers le \dvifile\
+^^{\dvifile//mat\'eriel de la routine de sortie}
+avec une commande |\shipout|.
+(Des routines de sortie sp\'ecialis\'ees peuvent agir diff\'eremment.)
+Du point de vue de \TeX, il importe peu que la routine de sortie envoie
+la page ou non~;
+La seule
+responsabilit\'e de la routine de sortie est de traiter la |\box255| d'une fa\c con
+ou d'une autre.
+\par}
+
+{\tighten
+Il est important de r\'ealiser que le meilleur endroit pour couper une page
+n'est pas n\'ecessairement le dernier endroit possible pour couper la page.
+Des p\'enalit\'es et autres consid\'erations peuvent faire que la coupure de page
+ait lieu plus t\^ot. De plus, \TeX\ appr\'ehende les \'el\'ements de la liste verticale
+principale en batch, pas seulement un par un. Les lignes d'un paragraphe sont
+un exemple d'un tel batch. Pour ces raisons, le constructeur de page garde
+des \'el\'ements sous le coude quand il coupe une page. Ces \'el\'ements mis en r\'eserve
+forment alors le d\'ebut de la liste verticale principale de la page suivante
+(vraisemblablement au milieu d'un batch). Parce que des \'el\'ements sont d\'eplac\'es
+d'une page \`a une autre, vous pouvez \^etre s\^ur que quand \TeX\ ex\'ecute l'entr\'ee,
+le num\'ero de la page courante refl\`ete la page sur laquelle la sortie correspondante
+appara\^\i tra. Voir les \knuth{pages~110--114}{128--133} pour une description compl\`ete
+des r\`egles de coupure de page de \TeX.
+\par}
+
+\endconcept
+
+
+\conceptindex{paragraphes}
+\concept paragraphe
+
+Intuitivement, un \defterm{paragraphe} est une suite de lignes de saisie
+se terminant par une ligne blanche, une commande |\par| \ctsref{\@par}
+^^|\par//terminer un paragraphe avec|
+ou par une commande intrins\`equement verticale, telle que |\vskip|.
+Plus pr\'ecis\'ement, un paragraphe est une s\'equence de commandes que \TeX\ ex\'ecute
+en mode horizontal restreint.
+Quand \TeX\ a collect\'e un paragraphe entier, il le transforme en une s\'equence de
+lignes en choisissant les coupures de ligne \seeconcept{coupure de ligne}.
+Le r\'esultat est une liste de hbox avec ressort, p\'enalit\'e interligne
+et mat\'eriel vertical imbriqu\'e entre.
+Chaque hbox est une simple ligne et le ressort est le ressort inter-ligne.
+
+%\eject
+\TeX\ d\'ebute un paragraphe quand il est dans un mode vertical et
+rencontre une commande fondamentalement horizontale.
+En particulier, il est en mode vertical juste apr\`es avoir termin\'e un
+paragraphe, donc le mat\'eriel horizontal sur la ligne suivant une ligne
+blanche d\'ebute le paragraphe suivant de mani\`ere naturelle.
+Il y a plusieurs types de commandes fondamentalement horizontales, mais le
+type le plus commun est un caract\`ere ordinaire, c'est-\`a-dire, une lettre.
+
+\looseness = -1
+Les commandes ^|\indent| et ^|\noindent|
+(\pp\xrefn{\indent},~\xrefn{\noindent})
+sont aussi des commandes fondamentalement horizontales qui demandent \`a
+\TeX\ d'in\-denter ou non le d\'ebut d'un paragraphe.
+Toute autre commande horizontale en mode vertical
+fait que \TeX\ fait un |\indent| implicite.
+Une fois que \TeX\ a commenc\'e un paragraphe, il est en mode horizontal ordinaire.
+Il commence par suivre toutes commandes situ\'ees dans ^|\everypar|.
+Il commence alors \`a collecter des \'el\'ements pour le paragraphe jusqu'a
+ce qu'il re\c coive un signal de la fin du paragraphe.
+A la fin du paragraphe il r\'einitialise les param\`etres de formation de
+paragraphe ^|\parshape|, |\hang!-indent|,
+^^|\hangindent|
+et ^|\looseness|.
+
+\TeX\ traduit normalement une ligne blanche par |\par|.
+Il ins\`ere aussi
+un |\par| dans l'entr\'ee chaque fois, en mode horizontal, qu'il
+rencontre une commande intrins\`equement verticale.
+Donc finalement la chose qui termine un paragraphe est toujours une commande |\par|.
+
+Quand \TeX\ re\c coit une commande |\par|, il compl\`ete d'abord\footnote{%
+Plus pr\'ecis\'ement, il ex\'ecute les commandes~:
+\csdisplay
+\unskip \penalty10000 \hskip\parfillskip
+|
+apportant ainsi les \'el\'ements de ces commandes
+\`a la fin de la liste horizontale courante.}
+le paragraphe sur lequel il travaille.
+Il coupe alors le paragraphe en lignes,
+ajoute la liste r\'esultante d'\'el\'ements dans la liste verticale englobante
+et ex\'ecute le constructeur de page
+(dans le cas o\`u la liste verticale englobante est la liste verticale principale).
+Si le paragraphe se termine par une commande intrins\`equement verticale,
+\TeX\ ex\'ecute alors cette commande.
+
+\endconcept
+
+\conceptindex{param\`etres}
+\concept param\`etre
+
+Le terme \defterm{param\`etre} a deux significations diff\'erentes---il peut faire
+r\'ef\'erence soit \`a un param\`etre de \TeX, soit \`a un param\`etre de macro.
+
+Un param\`etre de \TeX\ est une \refterm{s\'equence de contr\^ole} qui nomme
+une valeur.
+La valeur d'un param\`etre peut \^etre un \refterm{nombre}, une \refterm{dimension},
+un montant de \refterm{ressort}, de muglue ou une \refterm{liste de tokens}.
+Par exemple, le param\`etre ^|\parindent|
+sp\'ecifie la distance que \TeX\ saute au d\'ebut d'un paragraphe indent\'e.
+
+Vous pouvez utiliser la s\'equence de contr\^ole d'un param\`etre soit pour r\'etablir la valeur
+du param\`etre soit pour fixer cette valeur. \TeX\ interpr\`ete la s\'equence de contr\^ole
+comme une requ\^ete pour une valeur si elle appara\^\i t dans un contexte o\`u une valeur est attendue,
+et comme un \refterm{assignement} autrement.
+^^{assignements}
+Par exemple~:
+\csdisplay
+\hskip\parindent
+|
+produit un \refterm{ressort} horizontal dont la taille naturelle est donn\'ee
+par |\par!-indent|,
+tandis que~:
+\csdisplay
+\parindent = 2pc % (ou \parindent 2pc)
+|
+fixe |\parindent| \`a une longueur de deux picas. L'assignement~:
+\csdisplay
+\parindent = 1.5\parindent
+|
+utilise |\parindent| des deux fa\c cons. Son effet est de multiplier la valeur de
+|\parindent| par $1.5$.
+
+Vous pouvez penser \`a un param\`etre comme \`a un \refterm{registre} construit.
+^^{registres//param\`etres comme}
+Vous trouverez la liste de tous les param\`etres de \TeX\ dans les \knuth{pages~272--275}{317--318}.
+
+Un param\`etre de \refterm{macro} est un endroit qui garde la place du texte
+qui est branch\'e dans la d\'efinition d'une macro. Voir \conceptcit{macro}
+pour plus d'informations sur ce type de param\`etre.
+
+\endconcept
+
+
+\conceptindex{penalties}
+\concept p\'enalit\'e
+
+Une \defterm{p\'enalit\'e} est un \'el\'ement que vous pouvez inclure dans une
+liste horizontale, verticale ou math\'ematique
+pour d\'ecourager \TeX\ de couper la liste
+\`a cet endroit ou encourager \TeX\ de couper la liste ici.
+^^{listes horizontales//p\'enalit\'es dans}
+^^{listes verticales//p\'enalit\'es dans}
+Une p\'enalit\'e positive indique un mauvais point de coupure, tandis qu'une
+p\'enalit\'e n\'egative indique un bon point de coupure.
+Couper une liste horizontale ordinaire
+produit une \refterm{coupure de ligne}, tandis que couper une liste
+verticale ordinaire produit
+une \refterm{coupure de page}.
+(Une p\'enalit\'e n'a aucun effet en \refterm{mode} horizontal restreint ou
+vertical interne.)
+
+Vous pouvez utiliser la commande
+|\penalty| (\pp\xrefn{hpenalty},~\xrefn{vpenalty})
+pour ins\'erer une p\'enalit\'e explicitement.
+Une p\'enalit\'e de $10000$ ou plus emp\^eche une coupure, tandis qu'une p\'enalit\'e de
+$-10000$ ou moins force une coupure.
+\endconcept
+
+
+\conceptindex{pieds de page}
+\concept {pied de page}
+
+Un \defterm{pied de page} est du mat\'eriel que \TeX\ met en bas de chaque page,
+sous le texte de cette page.
+Le pied de page par d\'efaut en \plainTeX\ est un num\'ero de page centr\'e.
+D'habitude un pied de page consiste en une ligne simple, que vous pouvez
+d\'efinir en assignant une liste de tokens \`a ^|\footline| \ctsref\footline.
+Voir \xrefpg{bighead} pour une m\'ethode de production de pied de page multi-ligne.
+
+\endconcept
+
+%k \vskip 0pt plus 2pt % to solve page break problem
+
+%\eject
+\concept {\plainTeX}
+
+\defterm{\PlainTeX} est le format de \TeX\ d\'ecrit dans ce
+livre et dans \texbook. \PlainTeX\ est une partie du syst\`eme \TeX\ standard,
+donc des documents qui n'utilisent que les am\'enagements de \plainTeX\ peuvent
+facilement \^etre transf\'er\'es d'une installation vers une autre sans
+difficult\'e.
+
+\PlainTeX\ est constitu\'e de commandes \refterm{primitive}s auxquelles se joignent
+une large collection de macros et
+autres d\'efinitions. Ces d\'efinitions additionnelles sont d\'ecrites dans
+l'\knuth{annexe~B}{}. Vous pourrez aussi les trouver dans le fichier |plain.tex|
+quelque part sur votre syst\`eme informatique.
+\endconcept
+
+
+\concept {point de r\'ef\'erence}
+
+^^{lignes de base}
+^^{\boites//point de r\'ef\'erence de}
+Le \defterm{point de r\'ef\'erence} d'une \refterm{bo\^\i te} est le point o\`u le
+cot\'e gauche de la bo\^\i te est en intersection avec sa \refterm{ligne de base}.
+Quand \TeX\ ex\'ecute une \refterm{liste horizontale} ou
+\refterm{verticale:liste verticale}, il utilise les points de r\'ef\'erence
+des bo\^\i tes dans la liste pour aligner ces bo\^\i tes horizontalement ou
+verticalement \seeconcept{\boites}.
+\endconcept
+
+\conceptindex{polices}
+\concept police
+
+Une \defterm{police} en \TeX\ est une collection de jusqu'a $256$ caract\`eres
+de sortie, ayant normalement les m\^emes design, style (romain,
+italique, gras, condens\'e, etc.),
+et taille\footnote{\PlainTeX\ utilise une police sp\'eciale
+pour construire les ^{symboles math\'ematiques} pour lesquelles les caract\`eres
+ont diff\'erentes tailles. D'autres polices sp\'eciales sont souvent utiles pour
+des applications comme le composition de ^{logos}.}.
+La ^{police Computer Modern} qui est fournie
+g\'en\'eralement avec \TeX\ n'a que $128$ caract\`eres. Le colophon sur la
+derni\`ere page de ce livre d\'ecrit les polices que nous avons utilis\'ees pour composer
+ce livre.
+
+Par exemple, voici l'alphabet en police romaine Palatino de $10$ points~:
+^^{police Palatino}
+\vskip\abovedisplayskip{\narrower\tenpal
+\noindent ABCDEFGHIJKLMNOPQRSTUVWXYZ\hfil\break
+abcdefghijklmnopqrstuvwxyz\par
+}\vskip\belowdisplayskip
+\noindent
+et le voici dans la police Computer Modern Grasse \'etendue de $12$
+point~:
+^^{police Computer Modern}
+\vskip\abovedisplayskip{\narrower\font\twelvebf=cmbx12\twelvebf
+\noindent ABCDEFGHIJKLMNOPQRSTUVWXYZ\hfil\break
+abcdefghijklmnopqrstuvwxyz\par
+}\vskip\belowdisplayskip
+Les caract\`eres d'une police sont num\'erot\'es.
+La num\'erotation s'accorde normalement avec la num\'erotation ^{\ascii}
+pour les caract\`eres existants dans le jeu de caract\`eres \ascii.
+La table de code de chaque police indique \`a quoi ressemble le caract\`ere
+avec le code $n$ dans cette police.
+Certaines polices, comme celles utilis\'ees pour les symboles math\'ematiques, n'ont pas
+de lettres. Vous pouvez produire une \refterm{bo\^\i te} contenant le
+caract\`ere num\'erot\'e $n$, compos\'e dans la police courante, en \'ecrivant `|\char |$n$'
+ \ctsref{\char}.
+
+Pour utiliser une police dans votre document,
+vous devez d'abord la nommer avec une s\'equence de contr\^ole et la charger. Alors vous
+pourrez la s\'electionner en saisissant
+cette s\'equence de contr\^ole quand vous voulez l'utiliser.
+\PlainTeX\ procure un certain nombre de polices d\'ej\`a nomm\'ees et~charg\'ees.
+
+Vous nommez et chargez une police comme une simple op\'eration, avec une
+commande comme `|\font\twelvebf=cmbx12|'. Ici, `|\twelvebf|' est la s\'equence
+de contr\^ole que vous utilisez pour nommer la police et `|cmbx12|' identifie
+le fichier de m\'etrique de la police |cmbx12.tfm| sur votre syst\`eme de
+fichier. Vous pouvez alors commencer \`a utiliser la police en saisissant
+`|\twelvebf|'. Apr\`es cela, la police sera effective jusqu'a ce que soit
+(a)~vous s\'electionnez une autre police, (b)~vous terminez le \refterm{groupe}
+ dans lequel vous avez commenc\'e avec la police. Par exemple,
+la saisie~:
+
+\csdisplay
+{\twelvebf white rabbits like carrots}
+|
+fera que la police |cmbx12| ne sera effective que pour le texte
+`|white rabbits like carrots|'.
+
+Vous pouvez utiliser \TeX\ avec d'autres polices que Computer Modern
+(regardez l'exemple sur \xrefpg{palatino} et les ent\^etes de page).
+Les fichiers de telles polices doivent \^etre install\'es sur votre syst\`eme
+de fichier \`a une place o\`u \TeX\ puisse les trouver. \TeX\ et ses programmes
+compagnons ont g\'en\'eralement besoin de deux fichiers pour chaque police~:
+un pour les m\'etriques (|cmbx12.tfm|,
+^^{\tfmfile}
+par exemple) et un autre pour la forme
+des caract\`eres (|cmbx12.pk|, par exemple).
+\TeX\ lui-m\^eme n'utilise que les fichiers de m\'etriques.
+Un autre programme, le pilote de p\'eriph\'erique,
+^^{drivers de p\'eriph\'erique}
+convertit le \dvifile\
+^^{\dvifile//convertit par driver}
+produit par \TeX\ en une forme que votre imprimante
+ou autre p\'eriph\'erique de sortie puisse interpr\'eter. Le pilote
+utilise le fichier de forme (s'il existe).
+
+Le fichier de m\'etrique de la police contient l'information dont \TeX\ \`a
+besoin pour allouer de l'espace pour chaque caract\`ere compos\'e.
+Ainsi il inclut la taille de chaque caract\`ere, les ligatures et cr\'enages
+qui modifient les suites de caract\`eres adjacents, et ainsi de suite.
+Ce que le fichier de m\'etrique n'inclut \emph{pas} sont les informations
+sur les formes des caract\`eres de la police.
+
+{\tighten
+Le fichier de forme (pixel) \xrdef{shape}
+^^{fichier de pixel}^^{fichier de forme}
+peut \^etre de diff\'erents
+formats. La partie d'extension du nom (la partie apr\`es le point)
+informe le pilote sur le format dans lequel est le fichier de forme.
+Par exemple,
+|cmbx12.pk| ^^{\pkfile} est le fichier de forme de la police |cmbx12| en
+format compress\'e, tandis que |cmbx12.gf| ^^{\gffile} est le fichier de forme
+pour la police |cmbx12| en format de police g\'en\'erique.
+Un fichier de forme peut ne pas \^etre n\'ecessaire pour une police r\'esidente dans votre
+p\'eriph\'erique de sortie.
+\par}
+
+\endconcept
+
+
+\concept {primitive}
+
+Une \refterm{commande} \defterm{primitive} est une commande dont la d\'efini\-tion
+est construite dans le programme informatique \TeX.
+Au contraire, une commande qui n'est pas une
+primitive est d\'efinie par une \refterm{macro} ou un autre format de
+d\'efinition \'ecrit en \TeX. Les commandes dans \refterm{\plainTeX}
+sont constitu\'ees de commandes primitives auxquelles se joignent
+d'autres commandes d\'efinies en termes de
+primitives.
+\endconcept
+
+
+\concept profondeur
+
+^^{\boites//profondeur de}
+La \defterm{profondeur} d'une \refterm{bo\^\i te} est la distance par laquelle
+la bo\^\i te s'\'etend sous sa \refterm{ligne de base}.
+\endconcept
+
+
+\conceptindex{registres}
+\concept registre
+
+Un \defterm{registre} est une place nomm\'ee pour stocker une valeur.
+C'est plus comme une variable dans un langage de programmation.
+\TeX\ a cinq sortes de registres, comme montr\'e dans le tableau suivant~:
+
+\vdisplay{\tabskip 10pt\halign{\tt #\hfil &#\hfil\cr
+{\it Type de registre}&{\it Contenus}\cr
+box&une \refterm{bo\^\i te} \idxref{registres de \boite}\cr
+count&une \refterm{nombre} \idxref{registres de compteur}\cr
+dimen&une \refterm{dimension} \idxref{registres de dimension}\cr
+muskip&\refterm{muglue} \idxref{registres de muglue}\cr
+skip&\refterm{ressort} \idxref{registres de ressort}\cr
+toks&un \refterm{token} list\idxref{registres de token}\cr}}
+
+Les registres de chaque type sont num\'erot\'es de $0$ \`a $255$.
+Vous pouvez acc\'eder au registre $n$ de cat\'egorie $c$ en utilisant la forme `|\|$cn$',
+c'est-\`a-dire, |\muskip192|.
+Vous pouvez utiliser un registre
+n'importe o\`u cette information de type appropri\'e est appel\'ee. Par
+exemple, vous pouvez utiliser |\count12|
+dans tout contexte appelant un nombre ou |\skip0|
+dans tout contexte appelant un ressort.
+
+Vous mettez de l'information dans un registre en y \refterm{assignant:assignment}
+quelque chose~:
+
+\csdisplay
+\setbox3 = \hbox{lagomorphs are not mesomorphs}
+\count255 = -1
+|
+Le premier assignement construit une hbox et l'assigne au
+registre de bo\^\i te~$3$.
+Vous pouvez
+ensuite utiliser `|\box3|' partout o\`u une bo\^\i te est appel\'ee et vous obtiendrez
+cette hbox\footnote{Mais faites attention~: utiliser un registre de bo\^\i te
+la vide aussi donc son contenu devient vide. Les autres sortes de
+registres n'ont pas cet mani\`ere de r\'eagir. Vous pouvez utiliser la commande |\copy|
+\ctsref{\copy} pour conserver le contenu d'un registre de bo\^\i te sans
+le vider.}.
+Le second assignement assigne $-1$ au registre de compteur~$255$.
+
+Un registre d'un type donn\'e, par exemple, un registre de ressort, r\'eagit comme
+un param\`etre de ce type.
+^^{param\`etres//comme registres}
+Vous retrouvez sa valeur ou la lui assignez
+comme vous le feriez avec un \refterm{param\`etre}.
+Quelques param\`etres de \TeX, par exemple, |\pageno|,
+sont impl\'ement\'es comme des registres.
+
+\PlainTeX\
+utilise plein de registres pour son propre usage, donc vous ne devez pas
+simplement prendre un num\'ero de registre arbitraire
+quand vous avez besoin d'un registre. \`A la place, vous devez demander
+\`a \TeX\ de r\'eserver un registre en utilisant une des commandes
+^|\newbox|, ^|\newcount|, ^|\newdimen|, ^|\newmuskip|, ^|\newskip|
+ou ^|\newtoks|
+\ctsref{\@newbox}. Ces com\-man\-des sont outer, donc vous ne pouvez
+pas les utiliser dans une d\'efinition de macro.
+Si vous le pouviez,
+vous utiliseriez un registre \`a chaque fois que la macro serait appel\'ee et
+probablement d\'epasseriez le nombre de
+registres rapidement.
+
+Quoiqu'il en soit, vous pouvez, avec pr\'ecaution utiliser tout registre temporairement
+dans un \refterm{groupe}, m\^eme un que \TeX\ utilise pour autre chose.
+Quand \TeX\ a fini d'ex\'ecuter les commandes dans un groupe,
+il retrouve le contenu de tous les registres
+dans l'\'etat o\`u ils \'etaient avant de commencer \`a ex\'ecuter le groupe.
+Quand vous utilisez un registre num\'erot\'e explicitement dans un groupe,
+vous devez \^etre sur que le registre n'est modifi\'e par aucune
+\refterm{macro}
+que vous pourriez appeler dans le groupe.
+Soyez sp\'ecialement attentif
+quand vous utilisez des registres arbitraires dans un groupe qui appelle des macros
+que vous n'avez pas \'ecrit vous-m\^eme.
+
+{\tighten
+\TeX\ r\'eserve certains registres \`a des t\^aches sp\'eciales~: de |\count0| \`a
+|\count9| pour des informations de num\'erotation de page et
+^^{num\'erotation de page}
+^|\box255| pour le contenu
+d'une page juste avant qu'elle soit offerte \`a la \refterm{routine de sortie}.
+Les registres |\dimen0|--|\dimen9|, |\skip0|--|\skip9|,
+|\muskip0|--|\mu!-skip9| et |\box0|--|\box9| ainsi que
+les |255| registres de bo\^\i te autres que |\box255|
+sont g\'en\'eralement utilisables comme registre ``brouillon''.
+Aussi \plainTeX\ ne procure qu'un registre brouillon, |\count255|, pour
+des compteurs.
+Voir les \knuth{pages~122 et 346}{141--142 et 402} pour des conventions \`a suivre
+pour choisir des num\'eros de registre.
+\par}
+
+Vous pouvez examiner le contenu des registres lors d'une ex\'ecution
+avec la commande ^|\showthe| \ctsref\showthe, par exemple, `|\showthe\dimen0|'.
+\endconcept
+
+
+\concept r\'eglures
+
+Vous pouvez utiliser des \refterm{r\'eglures} pour remplir un espace avec des
+copies d'un mod\`ele, c'est-\`a-dire, mettre des points r\'ep\'et\'es entre un titre et
+un num\'ero de page dans une table des mati\`eres.
+Une r\'eglure est une copie simple d'un mod\`ele.
+La sp\'ecification des r\'eglures contient trois parties d'information.
+\olist\compact
+\li ce qu'est une r\'eglure seule
+\li combien d'espace doit \^etre rempli
+\li comment les copies du mod\`ele doivent \^etre arrang\'ees dans l'espace
+\endolist
+
+\bix^^|\leaders|
+\bix^^|\cleaders|
+\bix^^|\xleaders|
+{\tighten
+\TeX\ poss\`ede trois commandes pour sp\'ecifier des r\'eglures~:
+|\leaders|, |\cleaders| et |\xleaders| (\xref\leaders).
+L'\refterm{argument} de chaque commande sp\'e\-ci\-fie la r\'eglure.
+La commande doit \^etre suivie d'un \refterm{ressort}. La taille du ressort
+sp\'ecifie combien d'espace doit \^etre rempli. Le choix de la commande d\'etermine
+comment les r\'eglures sont arrang\'ees dans l'espace.}
+
+Voici un exemple montrant comment les |\leaders| travaillent~:
+\csdisplay
+\def\dotting{\leaders\hbox to 1em{\hfil.\hfil}\hfil}
+\line{The Political Process\dotting 18}
+\line{Bail Bonds\dotting 26}
+|
+Ici, nous avons plac\'e les r\'eglures et leur ressort associ\'e dans une d\'efinition
+de \refterm{macro} pour pouvoir les utiliser facilement \`a deux endroits.
+Cette entr\'ee produit~:
+
+\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}
+}
+
+La \refterm{hbox} suivant |\leaders| sp\'ecifie
+la r\'eglure, soit, une hbox d'1\em\ de large contenant un point en son
+centre.
+L'espace est rempli avec des copies de cette bo\^\i te,
+effectivement remplies
+de points dont les centres sont s\'epar\'es de 1\em.
+Le |\hfil| suivant (celui \`a la fin de la d\'efinition de macro) est
+un ressort qui sp\'ecifie l'espace \`a remplir.
+Dans ce cas, c'est l'espace n\'ecessaire pour remplir la ligne.
+en choisissant |\leaders| plut\^ot que |\cleaders| ou |\xleaders|, nous nous
+assurons que les points des diff\'erentes lignes soient align\'es entre eux.
+
+En g\'en\'eral, l'espace \`a remplir agit comme une fen\^etre pour les copies
+r\'ep\'et\'ees de r\'eglures. \TeX\ ins\`ere autant de copies que possible, mais de
+l'espace est habituellement laiss\'e---soit parce que les r\'eglures s'arr\^etent
+dans la fen\^etre, soit parce que la largeur de la fen\^etre n'est pas un multiple
+exact de la largeur de la r\'eglure.
+La diff\'erence entre les trois commandes est dans leur fa\c con d'arranger les
+r\'eglures dans la fen\^etre et comment elles distribuent l'espace perdu.
+
+\ulist
+\li Pour |\leaders|, \TeX\ produit d'abord une rang\'ee de copies de la r\'eglure.
+Il aligne alors le d\'ebut de cette rang\'ee avec l'extr\'emit\'e gauche de la bo\^\i te
+la plus interne $B$ qui contient le r\'esultat de la commande |\leaders|.
+Dans les deux lignes d'exemple ci-dessous, $B$ est une bo\^\i te produite par |\line|.
+Ces r\'eglures qui rentrent enti\`erement dans la fen\^etre sont plac\'ees dans $B$,
+et l'espace restant aux extr\`e\-mit\'ees gauche et droite est laiss\'e vide.
+L'image est comme ceci~:
+\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
+Cette proc\'edure assure que dans les deux lignes d'exemple de la page pr\'ec\'edente,
+les points des deux lignes soient align\'es verticalement (puisque les
+\refterm{points de r\'ef\'erence:point de r\'ef\'erence} des hbox produites par
+|\line| sont align\'es verticalement).
+\par}
+
+\li Pour |\cleaders|, \TeX\ centre les r\'eglures dans la fen\^etre
+en divisant l'espace perdu entre les deux extr\'emit\'es de la fen\^etre.
+L'espace perdu est toujours inf\'erieur \`a la largeur d'une seule r\'eglure.
+
+\li Pour |\xleaders|, \TeX\ distribue l'espace perdu de chaque cot\'e dans la
+fen\^etre. En d'autres mots, si l'espace perdu est $w$ et que la r\'eglure se
+r\'ep\`ete $n$ fois, \TeX\ met un espace de largeur $w/(n+1)$ entre les r\'eglures
+adjacente et \`a deux extr\'emit\'es des r\'eglures.
+L'effet est habituellement d'\'etaler les r\'eglures un petit peu. L'espace
+perdu pour |\xleaders|, comme celui de |\cleaders|, est toujours inf\'erieur
+\`a la largeur d'une r\'eglure seule.
+\endulist
+
+Jusqu'ici, nous supposions que les r\'eglures consistaient en hbox arrang\'ees
+horizontalement. Deux variations sont possibles~:
+\olist
+\li Vous pouvez utiliser une r\`egle \`a la place d'une hbox pour la r\'eglure.
+\TeX\ rend la r\`egle aussi large que possible pour s'\'etendre au del\`a du
+ressort (et les trois commandes sont \'equivalentes).
+\li Vous pouvez produire des r\'eglures verticales qui traversent la page en
+les incluant dans une \refterm{liste verticale} au lieu d'une \refterm{liste
+horizontale}. Dans ce cas vous avez besoin de ressort vertical apr\`es les
+r\'eglures.
+\endolist
+\noindent
+Voir les \knuth{pages~223--225}{261--263} pour les r\`egles pr\'ecises que \TeX\ utilise
+en composant des r\'eglures.
+\eix^^|\leaders|
+\eix^^|\cleaders|
+\eix^^|\xleaders|
+\endconcept
+
+
+\concept ressort
+
+\bix^^{\etirement}
+\bix^^{r\'etr\'ecissement}
+Le \defterm{ressort} est de l'espace blanc qui peut se r\'etr\'ecir ou s'\'etirer.
+Le ressort donne \`a \TeX\ la flexibilit\'e dont il a besoin pour produire
+des documents impeccables.
+Le ressort existe en deux types~: le ressort horizontal et le ressort vertical.
+Le ressort horizontal appara\^\i t dans des \refterm{listes horizontales: liste horizontale},
+tandis que le ressort vertical appara\^\i t dans des \refterm{listes verticales:liste verticale}.
+^^{listes horizontales}
+^^{listes verticales}
+Vous
+pouvez produire un ressort soit implicitement, c'est-\`a-dire, avec un espace inter-mot, soit
+explicitement, c'est-\`a-dire, avec la commande ^|\hskip|.
+^^{espace//inter-mots}
+\TeX\ lui-m\^eme produit beaucoup de ressorts
+en composant votre document.
+Nous ne d\'ecrirons que le ressort horizontal---le ressort vertical \'etant analogue.
+
+Quand \TeX\ assemble une liste de bo\^\i tes et de ressorts en grande
+quantit\'e,
+^^{\boites//ressort avec}
+il ajuste la taille des ressorts pour garder les espaces demand\'ees d'unit\'e
+de largeur. Par exemple, \TeX\ s'assure que la ^{marge de droite} d'une page
+est uniforme en ajustant les ressorts horizontaux des lignes.
+Similairement, il s'assure que les diff\'erentes pages ont la
+m\^eme ^{marge du bas}
+en ajustant les ressorts entre les blocs de texte comme des paragraphes et
+des affichages math\'ematiques
+(o\`u le changement est probablement moins remarquable).
+
+Un ressort a un espacement naturel---la taille qu'il ``veut avoir''.
+Le ressort a aussi deux autres attributs~: son \refterm{\'etirement} et son
+\refterm{r\'etr\'ecissement}. Vous pouvez produire un montant sp\'ecifique de ressort
+horizontal avec la \refterm{commande} ^|\hskip| \ctsref{\hskip}. La commande
+|\hskip 6pt plus 2pt minus 3pt|
+produit un ressort horizontal dont la taille naturelle
+est de $6$ points, l'\'etirement de $2$ points et le r\'etr\'ecissement
+$3$ points. Similairement, vous pouvez produire un montant sp\'ecifique de ressort vertical
+avec la commande ^|\vskip| commande \ctsref{\vskip}.
+
+Le meilleur moyen de comprendre ce qui s'\'etire et ce qui se r\'etr\'ecit
+et de voir un exemple de ressort au travail.
+Supposez que vous construisez un \refterm{hbox} de trois bo\^\i tes et deux ressorts,
+comme dans l'image~:
+\gluepicture
+ 29 {\picbox 4 \gluebox 6 4 1 6 \picbox 5 \gluebox 10 8 3 10 \picbox 4 }
+\noindent
+L'unit\'e de mesure ici peut \^etre en points, en millim\`etres, etc.
+Si le hbox est autoris\'e \`a assumer sa largeur naturelle, alors chaque ressort
+de la bo\^\i te assume aussi sa largeur naturelle. La largeur totale du hbox est
+alors la somme des largeurs de ses parties, soit, $29$ unit\'es.
+
+Ensuite, supposez que le hbox doit \^etre plus large que $29$ unit\'es, disons
+$35$ unit\'es. Cela
+peut arriver, par exemple, si le hbox doit occuper une ligne enti\`ere
+et que la largeur de la ligne soit de $35$ unit\'es.
+Puisque les bo\^\i tes ne peuvent changer leurs largeurs,
+\TeX\ produit l'espace suppl\'ementaire n\'ecessaire en rendant les ressorts plus larges.
+L'image maintenant ressemble \`a ceci~:
+\gluepicture
+ 35 {\picbox 4 \gluebox 6 4 2 8 \picbox 5 \gluebox 10 8 6 14 \picbox 4 }
+Les ressorts ne deviennent pas plus larges de mani\`ere \'egale~;
+ils deviennent plus large en proportion de leur \'etirement.
+Puisque le second ressort
+a deux fois plus d'\'etirement que le premier,
+il devient plus large de quatre unit\'es tandis que le premier devient plus large de
+seulement deux unit\'es.
+Le ressort peut s'\'etirer autant que n\'ecessaire, n\'eanmoins, \TeX\ rechigne
+\`a l'\'etirer au del\`a du montant d'\'etirement donn\'e dans sa d\'efinition.
+
+Finalement, supposez que le hbox doive se rapprocher de $29$ unit\'es \`a, disons
+$25$ unit\'es. Dans ce cas \TeX\ r\'etr\'ecit les ressorts.
+L'image ressemble \`a ceci~:
+\gluepicture
+ 25 {\picbox 4 \gluebox 6 4 2 5 \picbox 5 \gluebox 10 8 6 7 \picbox 4 }
+Les ressorts deviennent plus proches en proportion de leur r\'etr\'e\-cis\-sement.
+Le premier ressort devient plus \'etroit d'une unit\'e, tandis que le second
+r\'etr\'ecit de trois unit\'es. Le ressort ne peut pas se r\'etr\'ecir
+d'une distance inf\'erieure au montant de r\'etr\'ecissement donn\'e dans sa d\'efinition
+m\^eme si la distance \`a laquelle il peut se r\'etr\'ecir est sans
+limite. Sur ce point important l'\'etirement et le r\'etr\'ecissement r\'eagissent
+diff\'eremment.
+
+Une bonne r\`egle \`a suivre pour le ressort est de fixer sa taille normale au
+montant d'espace qui va le mieux, l'\'etirement au montant d'espace le plus grand
+que \TeX\ puisse ajouter avant que le document devienne mauvais et le
+r\'etr\'ecissement au montant d'espace le plus grand que \TeX\ puisse enlever
+avant que le document commence \`a devenir mauvais. Vous pouvez devoir fixer
+les valeurs par exp\'erimentation.
+
+Vous pouvez produire un ressort \'etirable \`a l'infini en sp\'ecifiant son
+\'etirement en unit\'es de `^|fil|', `^|fill|' ou `^|filll|'. Le ressort mesur\'e en
+`|fill|' est infiniment plus \'etirable que le ressort mesur\'e en `|fil|' et
+le ressort mesur\'e en `|filll|' est infiniment plus \'etirable que le ressort mesur\'e
+en `|fill|'. Vous n'aurez que tr\`es rarement besoin de ressort `|filll|'. Un ressort
+s'\'etirant de |2fil| s'\'etire deux fois plus qu'un ressort s'\'etirant de |1fil|,
+et de m\^eme pour les autres sortes de ressorts \'etirables infiniment.
+
+Quand \TeX\ apporte un espace suppl\'ementaire en plus d'un ressort,
+celui infiniment \'etirable, s'il y en a, en prend la totalit\'e.
+Le ressort infiniment \'etirable est particuli\`erement pratique pour
+cadrer du texte \`a gauche, \`a droite ou centr\'e.
+
+\ulist\compact
+\li Pour faire un texte ^{cadr\'e \`a gauche}, mettez un ressort horizontal
+infiniment \'etirable \`a sa droite.
+Ce ressort consommera tout l'espace suppl\'ementaire possible sur la ligne.
+Vous pouvez utiliser la commande ^|\leftline| \ctsref{\leftline}
+ou la commande |\raggedright| \ctsref{\raggedright} pour faire cela.
+\li Pour faire un texte ^{cadr\'e \`a droite}, mettez un ressort horizontal
+infiniment \'etirable \`a sa gauche. Comme ci-dessus
+ce ressort consommera tout l'espace suppl\'ementaire possible sur la ligne.
+Vous pouvez utiliser la commande ^|\rightline| \ctsref{\rightline}
+pour faire cela.
+\li Pour faire du ^{texte centr\'e}, mettez un ressort horizontal
+infiniment \'etirable de chaque cot\'e.
+Ces deux ressorts diviseront tout l'espace suppl\'ementaire de la ligne
+\'egalement entre eux.
+Vous pouvez utiliser la commande ^|\centerline| \ctsref{\centerline} pour faire cela.
+\endulist
+
+Vous pouvez aussi sp\'ecifier un ressort r\'etr\'ecissable infiniment
+^^{ressort//infiniment \'etirable}
+de la m\^eme mani\`ere. Un ressort r\'etr\'ecissable infiniment peut agir comme espace n\'egatif.
+Notez que |fil|, etc., ne peuvent \^etre utilis\'es que pour sp\'ecifier l'\'etirement
+et le r\'etr\'ecissement du ressort---Ils ne peuvent \^etre utilis\'es pour sp\'ecifier
+sa taille normale.
+\eix^^{\etirement}
+\eix^^{r\'etr\'ecissement}
+\endconcept
+
+
+\concept {ressort inter-ligne}
+
+Le \defterm{ressort inter-ligne} est le ressort que \TeX\ ins\`ere au d\'ebut de chaque
+\refterm{bo\^\i te} dans une \refterm{liste verticale} sauf pour la premi\`ere.
+Le ressort inter-ligne est normalement sp\'ecifi\'ee de fa\c con \`a maintenir une
+distance constante entre les lignes de base des bo\^\i tes.
+Sa valeur est d\'etermin\'ee conjointement par les param\`etres ^|\baselineskip|,
+^|\lineskip| et ^|\lineskiplimit| \ctsref{\baselineskip}.
+\endconcept
+
+
+\conceptindex {r\'etr\'ecissements}
+\concept {r\'etr\'ecissement}
+
+Voir \conceptcit{ressort}.
+\endconcept
+
+
+\concept {routine de sortie}
+
+Quand \TeX\ a accumul\'e
+au moins assez de mat\'e\-riel pour remplir une page, il choisi un point d'arr\^et
+et place le mat\'eriel situ\'e avant le point d'arr\^et en |\box255|. Il appelle
+alors la \defterm{routine de sortie} courante, qui compile le mat\'eriel et
+l'envoie \'eventuellement dans le \dvifile.
+^^{\dvifile//mat\'eriel de la routine de sortie}
+La routine de sortie peut faire d'autres actions, comme ins\'erer des ent\^etes,
+des pieds de page et des notes de pieds de page.
+\refterm{\PlainTeX:\plainTeX} procure
+une routine de sortie par d\'efaut qui ins\`ere un num\'ero de page centr\'e
+en bas de chaque page.
+En procurant une routine de sortie diff\'erente vous pouvez cr\'eer des
+effets tels que des sortie en double colonnes.
+Vous pouvez imaginer les routines de sortie comme ayant une seule responsabilit\'e~:
+disposer le mat\'eriel en |\box255| d'une fa\c con ou d'une autre.
+
+La routine de sortie courante est d\'efinie par la valeur de ^|\output|
+\ctsref{\output}, qui est une liste de \refterm{tokens:token}. Quand \TeX\
+est pr\^et \`a produire une page, il d\'eveloppe simplement la liste de tokens.
+
+Vous pouvez faire quelque simples changements aux actions de la routine de
+sortie de \plainTeX\ sans la modifier r\'eellement. Par exemple, en assignant
+une liste de \refterm{tokens:token} \`a |\headline| ou
+|\footline| \ctsref{\footline} vous pouvez faire que \TeX\ produise un ent\^ete
+ou un pied de page diff\'erent de l'ordinaire.
+
+La routine de sortie est aussi responsable pour collecter
+toutes \refterm{insertions:insertion}~; en combinant ces insertions et
+toutes ``d\'ecorations'' telles que ent\^etes et pieds de page avec
+les contenus principaux de la page et empaqu\`ete tout ce mat\'eriel
+dans une bo\^\i te~; et \'eventuellement envoyer cette bo\^\i te dans
+le \dvifile\
+^^{\dvifile//mat\'eriel de la routine de sortie}
+avec la commande ^|\shipout|\ctsref{\shipout}.
+Bien que cela soit ce que fait une routine de sortie le plus souvent,
+une routine de sortie d'usage sp\'ecial peut agir diff\'eremment.
+\endconcept
+
+
+\conceptindex{s\'equences de contr\^ole}
+\concept {s\'equence de contr\^ole}
+
+Une \defterm{S\'equence de contr\^ole} est un nom pour une \refterm{command}e \TeX.
+Une s\'equence de contr\^ole commence par un ^{caract\`ere d'\'echappement},
+habituellement un antislash (|\|).
+\indexchar \
+Une s\'equence de contr\^ole prend une des deux formes~:
+
+\ulist
+
+\li Un \refterm{mot de contr\^ole} est une S\'equence de contr\^ole constitu\'ee
+d'un \refterm{caract\`ere d'\'echappement} suivi par une ou plusieurs lettres.
+^^{mots de contr\^ole}
+Le mot de contr\^ole se termine quand \TeX\ voit une non-lettre. Par exemple,
+quand \TeX\ lit
+`\hbox{|\hfill!visiblespace,!visiblespace!.the|}', il voit six
+\refterm{tokens:token}~:
+Les s\'equences de contr\^ole `|\hfill|', virgule, espace, `|t|', `|h|', `|e|'.
+L'espace apr\`es `|\hfill|' termine la s\'equence de contr\^ole et
+est absorb\'ee par \TeX\ quand il lit la s\'equence de contr\^ole.
+(Pour le texte `|\hfill,!visiblespace!.the|', d'un autre cot\'e,
+La virgule termine aussi la s\'equence de contr\^ole et compte comme un caract\`ere
+de bon aloi.)
+
+\li Un \refterm{symbole de contr\^ole}
+^^{symboles de contr\^ole}
+est une s\'equence de contr\^ole constitu\'ee d'un
+^{caract\`ere d'\'echappement} suivi par n'importe caract\`ere autre qu'une lettre---%
+m\^eme un espace ou une fin de ligne.
+Un symbole de contr\^ole est auto-d\'elimit\'e, c'est-\`a-dire, \TeX\ sait o\`u il termine sans
+devoir regarder le caract\`ere qui le suit.
+Le caract\`ere apr\`es un symbole de contr\^ole n'est jamais absorb\'e par le
+symbole de contr\^ole.
+\endulist
+\noindent Voir \xrefpg{espace} pour plus d'information sur les espaces apr\`es
+des s\'equences de contr\^ole.
+
+\TeX\ procure une grand nombre de s\'equences de contr\^ole pr\'ed\'efinies. Les
+s\'equences de contr\^ole \refterm{primitives} sont construites dans le programme
+informatique \TeX\ et donc, sont accessibles sous toutes les formes de \TeX.
+^^{primitive//s\'equence de contr\^ole}
+D'autres s\'equences de contr\^ole sont fournies par \refterm{\plainTeX}, la
+forme de \TeX\ d\'ecrite dans ce livre
+
+Vous pouvez augmenter des s\'equences de contr\^ole pr\'ed\'efinies avec celles de
+votre cru, en utilisant des commandes telles que ^|\def| et ^|\let| pour les
+d\'efinir. La \chapterref{eplain} de ce livre contient une collection de
+d\'efinitions de s\'equence de contr\^ole que vous pouvez trouver utile. De plus,
+votre syst\`eme informatique peut vous rendre capable de cr\'eer une collection
+de macros \TeX\ d\'evelopp\'ees localement.
+\endconcept
+
+
+\conceptindex{struts}
+\concept strut
+
+{\tighten
+Un \defterm{strut} est une \refterm{bo\^\i te} invisible
+^^{\boites//invisible}
+dont la largeur est \`a z\'ero et dont la hauteur et la profondeur sont l\'eg\`erement
+sup\'erieure \`a celle d'une ligne de texte ``normale'' dans le contexte.
+Les struts sont pratiques pour obtenir un espacement vertical uniforme quand
+l'espacement de ligne usuel de \TeX, par exemple, dans une formule math\'ematique
+ou dans un alignement horizontal o\`u vous sp\'ecifiez ^|\offinterlineskip|.
+Parce qu'un strut est plus haut et plus profond que tout autre chose sur sa ligne,
+il d\'etermine la hauteur et la profondeur de la ligne.
+Vous pouvez produire un strut avec la commande ^|\strut| \ctsref{\strut} ou
+la commande ^|\mathstrut| \ctsref\mathstrut.
+Vous pouvez utiliser |\strut| n'importe o\`u, mais vous ne pouvez utiliser
+|\mathstrut| que quand \TeX\ est en \refterm{mode} math\'ematique.
+Un strut dans \plainTeX\ a une hauteur de 8.5\pt\ et une profondeur de 3.5\pt,
+tandis qu'un strut math\'ematique \`a la hauteur et la profondeur d'une
+parenth\`ese ouvrante du \refterm{style} courant (donc il est plus petit pour
+des indices ou des exposants).
+\par}
+
+Voici un exemple montrant comment vous devriez utiliser un 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}
+|
+Cette entr\'ee donne~:
+\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
+Sans les struts la \refterm{vbox} serait trop rapproch\'ee.
+Similairement, dans la formule~:
+\csdisplay
+$\overline{x\mathstrut} \otimes \overline{t\mathstrut}$
+|
+Les struts math\'ematiques font que les deux barres sont mises \`a la m\^eme hauteur m\^eme
+si le `$x$' et le `$t$' ont des hauteurs diff\'erentes~:
+\display{
+$\overline{x\mathstrut} \otimes \overline{t\mathstrut}$
+}
+\vskip -\belowdisplayskip
+\endconcept
+%\nobreak
+
+\conceptindex{styles}
+\concept {style}
+
+Le mat\'eriel d'une formule math\'ematique est mis dans un des huit \defterm{styles},
+d\'ependant du contexte. Conna\^\i tre les styles peut \^etre utile si vous voulez
+mettre une partie d'une formule dans une taille de caract\`ere diff\'erente de
+celle que \TeX\ a choisi en fonction de ses r\`egles usuelles.
+
+%\eject
+Les quatre styles primaires sont~:
+
+\vdisplay{%
+\halign{\refterm{# style}\hfil&\hskip .25in(#)\hfil\cr
+display&formules affich\'ees sur une ligne seule\cr
+text&formules englob\'ees dans du texte ordinaire\cr
+script&exposants et indices\cr
+scriptscript&indices d'indices, etc.\cr
+}}
+
+Les quatre autres styles sont dits ^{variantes \'etroites}. Dans ces variantes
+les exposants ne sont pas mont\'es aussi haut que normalement et donc la formule
+n\'ecessite moins d'espace vertical qu'ils le devraient. Voir les \knuth{pages~140--141}{164--165}
+pour les d\'etails sur la fa\c con de \TeX\ de s\'electionner le style.
+
+\TeX\ choisit une taille de caract\`ere en fonction du style~:
+
+\ulist\compact
+^^{style d'affichage}^^{style texte}
+\li Le style d'affichage et le style texte sont mis en \refterm{taille texte}, comme
+`$\rm ceci$'.
+
+^^{style script}
+\li le style script est mis en \refterm{taille script}, comme `$\scriptstyle
+\rm ceci$'.
+
+^^{style scriptscript}
+\li le style scriptscript est mis en \refterm{taille scriptscript}, comme
+`$\scriptscriptstyle \rm ceci$'.
+\endulist
+
+Voir \conceptcit{famille} pour plus d'informations \`a propos de ces trois tailles.
+
+\TeX\ n'a pas de style ``scriptscriptscript'' parce qu'un tel style
+serait souvent mis dans une taille de caract\`ere trop petite \`a lire. \TeX\
+par cons\'equent met les indices, exposants, etc. de troisi\`eme ordre en utilisant le
+style scriptscript.
+
+Parfois vous pourrez trouver que \TeX\ a mis une formule dans un style diff\'erent
+de celui que vous pr\'ef\'erez. Vous pouvez passer outre le choix de \TeX\ avec les
+commandes ^|\textstyle|, ^|\displaystyle|, ^|\scriptstyle| et ^|\scriptscriptstyle|
+\ctsref{\textstyle}.
+\endconcept
+
+
+\conceptindex{symboles de contr\^ole}
+\concept {symbole de contr\^ole}
+
+Un \defterm{symbole de contr\^ole} est une \refterm{s\'equence de contr\^ole} qui
+est constitu\'ee d'un \refterm{caract\`ere d'\'echappement} suivi d'un caract\`ere
+autre qu'une lettre---m\^eme un espace et une fin de ligne.
+^^{caract\`ere d'\'echappement}
+\endconcept
+
+
+\concept {taille script}
+
+Une \defterm{taille script} d\'ecrit une des trois
+\refterm{polices:police} reli\'ees dans une famille.
+^^{famille//taille script en}
+Une taille script est plus petite que la \refterm{taille texte} mais plus
+grande que la
+\refterm{taille scriptscript}. \TeX\ utilise la taille script pour les
+indices et les exposants, aussi bien que pour les num\'erateurs et les
+d\'enominateurs de fractions dans du texte.
+\endconcept
+
+
+\concept {taille scriptscript}
+
+Une \defterm{taille scriptscript} d\'ecrit la plus petite taille des trois
+\refterm{polices:police} reli\'ees dans une famille.
+^^{famille//taille scriptscript en}
+\TeX\ utilise la \refterm{taille scriptscript} pour des indices, exposants,
+num\'erateurs et d\'enominateurs de second rang. Par exemple, \TeX\ utilisera
+la taille scriptscript pour un indice d'indice ou pour un exposant d'exposant.
+\endconcept
+
+
+\concept {taille texte}
+
+La \defterm{taille texte} d\'ecrit la plus grande des trois
+\refterm{polices:police} li\'ees dans une \refterm{famille}.
+^^{famille//taille texte en}
+\TeX\ utilise la taille texte pour des symboles ordinaires apparaissant en
+\refterm{mode math\'ematique}.
+\endconcept
+
+
+\conceptindex{tests conditionnels}
+\concept {test conditionnel}
+
+Un \defterm{test conditionnel} est une commande qui teste si une condition est
+vraie ou non et
+demande \`a \TeX\ soit de d\'evelopper soit de sauter du texte, selon le cas.
+La forme g\'en\'erale d'une test conditionnel est soit~:
+\display{
+{\tt \\if}$\alpha$\<true text>{\tt \\else}\<false text>{\tt \\fi}}
+^^|\else|^^|\fi|
+\noindent soit~:\hfil\
+\display{
+{\tt \\if}$\alpha$\<true text>{\tt \\fi}}
+\noindent o\`u $\alpha$ sp\'ecifie le test particulier.
+Par exemple, |\ifvmode| teste la condition que \TeX\
+soit actuellement dans un \refterm{mode vertical}.
+Si la condition est vraie, \TeX\ d\'eveloppe \<true text>.
+Si la condition est fausse, \TeX\ d\'eveloppe \<false text> (s'il est pr\'esent).
+Les tests conditionnels sont interpr\'et\'es dans l'\oesophage\ de \TeX
+\seeconcept{\anatomy}, donc tous les \minref{token}s d\'eveloppables dans
+le texte interpr\'et\'e ne sont d\'evelopp\'es qu'apr\`es que le test n'ait \'et\'e r\'esolu.
+Les diff\'erents tests conditionnels sont expliqu\'es dans
+\headcit{Tests conditionnels}{conds}.
+
+\endconcept
+
+
+\concept {\TeXMeX}
+
+(a)~Une vari\'et\'e de \TeX\ utilis\'ee pour composer des math\'e\-matiques dans les
+pays d'Am\'erique Centrale.
+(b)~Une cuisine tr\`es \'epic\'ee appr\'e\-ci\'ee par les \TeX\-ni\-ciens d'^{El Paso}.
+\endconcept
+
+
+\conceptindex{justification}
+\concept {texte justifi\'e}
+
+Du \defterm{texte justifi\'e} est du texte qui a \'et\'e compos\'e pour que les
+deux marges soit align\'ees. Du texte non justifi\'e, d'un autre cot\'e, a \'et\'e compos\'e
+avec des marges ``d\'echir\'ees'' d'un ou des deux cot\'es.
+Les documents saisis sur les vieilles machines \`a \'ecrire ont la plupart du temps
+des marges droites d\'echir\'ees.
+Bien que les documents produits par \TeX\ soient justifi\'es par d\'efaut, vous
+pouvez si vous voulez produire des documents (ou des suites de lignes) qui
+ont la marge ^{droite}---ou ^{gauche d\'echir\'ee}.
+Vous pouvez aussi demander \`a \TeX\ de centrer un suite de lignes, ce qui rend
+les deux marges d\'echir\'ees.
+^^{texte centr\'e}
+Vous pouvez utiliser les commandes
+^|\leftskip|, ^|\rightskip| et ^|\raggedright|
+(\pp \xrefn{\leftskip},~\xrefn{\raggedright}) pour cela.
+
+Quand \TeX\ produit du texte justifi\'e, il a normalement besoin de r\'e\-tr\'ecir ou
+d'\'etirer les ressorts de chaque ligne pour que les marges soient align\'ees.
+Quand \TeX\ produit du texte non justifi\'e, d'un autre cot\'e, il laisse les ressorts
+de chaque ligne \`a leur taille naturelle.
+Beaucoup de typographes pr\'ef\`erent le texte non justifi\'e parce que son espacement
+inter-mot est plus uniforme.
+\endconcept
+
+
+\concept {texte math\'ematique}
+
+Nous utilisons le terme \defterm{texte math\'ematique} pour faire r\'ef\'erence
+\`a une formule math\'ematique mise dans une ligne de texte, c'est-\`a-dire,
+entour\'ee de |$|.
+\ttidxref{$}
+\TeX\ met du texte math\'ematique dans le \refterm{mode} texte math\'ematique .
+\endconcept
+
+
+\conceptindex{tokens}
+\concept token
+
+Un \defterm{token} est soit un simple caract\`ere attach\'e \`a un
+\refterm{code de cat\'egorie} ou une \refterm{s\'equence de contr\^ole}.
+\TeX\ lit les caract\`eres d'un fichier en utilisant ses yeux \seeconcept{\anatomy}
+et groupe les caract\`eres en tokens en utilisant sa bouche. Quand un token
+atteint l'estomac de \TeX, \TeX\ l'interpr\`ete comme une \refterm{commande}
+\`a moins qu'il fasse partie d'un argument d'une commande pr\'ec\'edente.
+\endconcept
+
+
+\conceptindex{unit\'es de mesure}
+\concept {unit\'e de mesure}
+
+Voir \conceptcit{dimension}.
+\endconcept
+
+
+\conceptindex{unit\'es math\'ematiques}
+\concept {unit\'e math\'ematique}
+
+Une \defterm{unit\'e math\'ematique}, cod\'ee `|mu|', est une unit\'e de distance
+utilis\'ee pour sp\'ecifier un \refterm{ressort} dans les formules math\'e\-matiques. Voir
+le \conceptcit{muglue}.
+\endconcept
+
+
+\conceptindex{vbox}
+\concept vbox
+
+^^{listes verticales//vbox form\'ees \`a partir de}
+Une \defterm{vbox} (bo\^\i te verticale) est une \refterm{bo\^\i te} que \TeX\ construit
+en pla\c cant les \'el\'ements d'une \refterm{liste verticale} l'une apr\`es l'autre, de haut
+en bas. Une vbox, prise en tant qu'unit\'e, n'est ni fondamentalement horizontale
+ni fondamentalement verticale, c'est-\`a-dire, elle peut appara\^\i tre comme un \'el\'ement
+soit d'une liste verticale soit d'une \refterm{liste horizontale}. Vous
+pouvez construire une vbox avec les commandes ^|\vbox| ou ^|\vtop| \ctsref{\vtop}.
+La diff\'erence est que pour |\vbox|, le \refterm{point de r\'ef\'erence} de la
+vbox construite est d\'eriv\'e de celui du dernier (et souvent plus bas)
+\'el\'ement constituant la liste, mais pour |\vtop|, c'est celui du premier
+(et normalement plus haut) \'el\'ement constituant la liste.
+\endconcept
+
+
+\endconcepts
+
+\endchapter
+\byebye
+
diff --git a/info/impatient/fr/fcopyrgh.tex b/info/impatient/fr/fcopyrgh.tex
new file mode 100644
index 0000000000..4ec44d918a
--- /dev/null
+++ b/info/impatient/fr/fcopyrgh.tex
@@ -0,0 +1,58 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+
+
+% Copyright page.
+%
+\noheadlinetrue
+\sinkage
+
+\noindent `\TeX' est une marque d\'epos\'ee de the American Mathematical Society.
+
+\noindent `\Metafont' est une marque d\'epos\'ee d'Addison-Wesley Publishing Company.
+
+\bigskip
+\noindent Ce livre, \thisbook, contient le tutorial et l'information
+de r\'ef\'erence sur tous les dispositifs de plain \TeX\ et des
+primitives de \TeX.
+
+\bigskip
+
+\noindent Copyright \copyright{} 2003 Paul~W. Abrahams,
+Kathryn~A. Hargreaves, and Karl Berry.
+
+\bigskip
+
+\noindent Copyright \copyright{} 2004 Marc Chaudemanche pour la
+traduction.
+[Note du traducteur : Je tiens \`a remercier chaleureusement Claude Hiebel
+pour la relecture et les nombreuses corrections apport\'ees]
+
+\bigskip
+\noindent Permission vous est donn\'ee de copier, distribuer et/ou
+modifier ce docu\-ment selon les termes de la Licence GNU Free
+Documentation License, Version 1.1 ou ult\'erieure publi\'ee par la
+Free Software Foundation~; avec les sections inalt\'erables
+suivantes~:
+
+
+\medskip\noindent
+Selon les termes de la GFDL, n'importe qui est autoris\'e \`a modifier
+et redistribuer ce document, et nous esp\'erons que d'autres le
+trouveront assez utile pour le faire. Cela inclut les traductions,
+vers d'autres langues \'etrang\`eres ou d'autres formats informatiques.
+
+\medskip\noindent
+Dans notre interpr\'etation de la GFDL, vous pouvez aussi extraire du
+texte de ce livre pour l'utiliser dans un nouveau document, \`a
+condition que ce nouveau document soit \'egalement sous la GFDL et que
+les bonnes accr\'editations soit donn\'ees (conform\'ement \`a la
+licence).
+
+
+\pagebreak
+\byebye
diff --git a/info/impatient/fr/fdl.tex b/info/impatient/fr/fdl.tex
new file mode 100644
index 0000000000..4ae17d2d75
--- /dev/null
+++ b/info/impatient/fr/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/info/impatient/fr/ferrors.tex b/info/impatient/fr/ferrors.tex
new file mode 100644
index 0000000000..6131acf0e0
--- /dev/null
+++ b/info/impatient/fr/ferrors.tex
@@ -0,0 +1,309 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter{Comprendre les \linebreak messages d'erreur}
+
+\chapterdef{errors}
+
+%\codefuzz = 4pc % for this chapter only (in scope of \chapter)
+\bix^^{messages d'erreur}
+L'interpr\'etation des messages d'erreur de \TeX\ peut parfois \^etre
+compar\'ee \`a aller chez votre m\'edecin avec la sensation d'\^etre
+fatigu\'e et obtenir, en r\'eponse, une analyse de votre chimie sanguine.
+C'est probablement l'explication de votre d\'etresse, mais il n'est pas
+facile de la d\'ecrire. Quelques r\`egles simples vous feront aller plus
+loin en vous aidant \`a comprendre les messages d'erreur de \TeX\ et \`a en
+obtenir d'avantage.
+
+Votre premier objectif sera de comprendre ce que vous avez fait pour que
+\TeX\ se plaigne. Le second (si vous travaillez interactivement) sera de
+d\'eceler le plus d'erreurs que vous pouvez en une seule fois.
+
+Regardons un exemple. Supposez que votre source contienne la ligne~:
+\csdisplay
+We skip \quid a little bit.
+|
+Vous pensiez saisir `|\quad|', mais vous avez tap\'e `|\quid|' \`a la
+place. Voici la r\'eponse que vous obtiendrez de \TeX\~:
+\csdisplay !!
+Undefined control sequence.
+l.291 We skip \quid
+ a little bit.
+?
+|
+Ce message appara\^\i tra sur votre terminal et dans votre \logfile.
+^^{fichier log//message d'erreur} La premi\`ere ligne, qui commence
+toujours par un point d'exclamation (|!!|), vous indique ce qu'est le
+probl\`eme. Les deux derni\`eres lignes avant le prompt `|?|'(qui sont,
+dans ce cas-ci, \'egalement, les deux lignes suivantes) vous indiquent o\`u
+\'etait \TeX\ quand il a trouv\'e l'erreur. Il a trouv\'e l'erreur sur la
+ligne $291$ du fichier source courant, et la coupure entre les deux lignes
+de message indiquent la position pr\'ecise de \TeX\ dans la ligne $291$, \`a
+savoir, juste apr\`es |\quid|. Le fichier source courant est celui juste
+apr\`es la parenth\`ese gauche la plus r\'ecemment ouverte dans le r\'esultat
+de votre ex\'ecution sur votre terminal (voir les \xref{infiles}).
+
+Cette erreur particuli\`ere, un ``undefined control sequence'', est l'une
+des plus communes que vous puissiez obtenir. Si vous r\'epondez au prompt
+par un autre~`|?| ', \TeX\ affichera le message suivant~:
+
+{\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.
+|
+}%
+Voici ce que signifient ces propositions~:
+\ulist
+\li Si vous saisissez \asciichar{return}, \TeX\ continuera \`a traiter
+votre document. Dans ce cas, il ignorera juste le |\quid|.
+\li Si vous saisissez `|S|' (ou `|s|'---majuscule et minuscule sont
+\'equivalentes ici), \TeX\ traitera votre document sans s'arr\^eter,
+\emph{sauf} s'il rencontre un fichier absent. Les messages d'erreur
+continueront \`a appara\^\i tre sur votre terminal et dans le \logfile.
+\li Si vous saisissez `|R|' ou `|r|', vous obtiendrez le m\^eme effet que
+pour `|S|', sauf que \TeX\ ne s'arr\^etera pas pour les fichiers manquants.
+\li Si vous saisissez `|Q|' ou `|q|', \TeX\ continuera \`a traiter votre
+document mais ne s'arr\^etera pas pour des erreurs ni ne les montrera sur
+votre terminal. Les erreurs appara\^\i tront toujours dans le \logfile.
+\li Si vous saisissez `|X|' ou `|x|', \TeX\ nettoiera ce qu'il peut au
+mieux, jettera la page sur laquelle il travaillait et stoppera. Vous pourrez
+imprimer ou regarder les pages que \TeX\ a d\'ej\`a trait\'ees.
+\li Si vous saisissez `|E|' ou `|e|', \TeX\ nettoiera et se terminera comme
+il le fait pour `|X|' ou `|x|' et entrera alors dans votre \'editeur de
+texte, vous pla\c cant sur la ligne incorrecte. (tous les syst\`emes ne
+supportent pas cette option.)
+\li Si vous saisissez `|H|' ou `|h|', vous obtiendrez une autre explication
+de l'erreur montr\'ee sur votre terminal et probablement du conseil sur
+quoi faire \`a son sujet. Cette explication appara\^\i tra \'egalement dans
+votre \logfile. Pour le ``undefined control sequence'' ci-dessus, vous
+obtiendrez~:
+
+{\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 Si vous saisissez `|?|', vous recevrez encore ce m\^eme message.
+\endulist
+\noindent
+Les deux autres solutions de rechange, saisir `|I|' ou un petit nombre
+entier, fournissent des moyen de demander \`a \TeX de revenir en \ arri\`ere
+pour que votre erreur ne cause pas d'autres erreurs plus tard dans
+votre document~:
+
+\ulist
+\li Si vous saisissez `|I|' ou `|i|' suivi de texte, alors \TeX\ ins\'erera
+ce texte comme s'il s'\'etait produit juste apr\`es le point d'erreur, au
+niveau les plus secrets o\`u \TeX \ travaille. Dans le cas de l'exemple
+ci-dessus, cela signifie \`a la position de \TeX\ dans votre source
+original, c'est-\`a-dire, juste apr\`es `|\quid|'. Plus tard vous verrez un
+exemple qui montre la diff\'erence entre ins\'erer quelque chose au niveau
+les plus secrets et l'ins\'erer dans votre source original. Dans l'exemple
+ci-dessus d'``undefined control sequence'', si vous saisissez~:
+\csdisplay
+I\quad
+|
+\TeX\ effectuera la commande |\quad| et produira un espace cadratin
+l\`a o\`u vous avez eu l'intention d'avoir un.
+\li Si vous saisissez un nombre entier positif inf\'erieur \`a $100$ (pas
+inf\'erieur \`a $10$ comme le message le sugg\`ere maladroitement), \TeX\
+supprimera ce nombre de tokens du niveau les plus secrets o\`u il
+travaille. (si vous saisissez un nombre entier sup\'erieur ou \'egal \`a
+$100$, \TeX\ supprimera $10$ tokens~!)
+\endulist
+
+Voici un autre exemple d'erreur commune~:
+\csdisplay
+Skip across \hskip 3cn by 3 centimeters.
+|
+Le message d'erreur pour ceci est~:
+\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>|
+Dans ce cas, \TeX\ a vu que `|3|' est suivi par quelque chose qui n'est pas
+une unit\'e de mesure reconnue, et ainsi suppose que l'unit\'e de mesure est
+le point. \TeX\ relira le token `|cn|' et l'ins\'erera dans votre saisie,
+ce qui n'est pas ce que vous voulez. Dans ce cas, vous pouvez obtenir un
+meilleur r\'esultat en saisissant d'abord `|2|' pour reculer avant `|cn|'.
+Vous recevrez le message~:
+\csdisplay
+<recently read> n
+
+l.340 Skip across \hskip 3cn
+ by 3 centimeters.
+|
+
+Maintenant vous pouvez saisir `|I\hskip 3cm|' pour obtenir le saut que vous
+vouliez (en plus du saut de |3pt| que vous avez d\'ej\`a obtenu).\footnote{en
+saisissant `|I\unskip\hskip 3cm|' vous pouvez vous d\'ebarrasser du saut de
+|3pt|.}
+
+Si vous saisissez quelque chose qui n'est valide qu'en mode math\'ema\-tique,
+\TeX\ s'orientera vers le mode math\'ematique pour vous que ce soit ce que
+vous avez vraiment voulu ou non. Par exemple~:
+\csdisplay
+So \spadesuit s are trumps.
+|
+Voici le message d'erreur de \TeX\~:
+\csdisplay
+!! Missing $ inserted.
+<inserted text>
+ $
+<to be read again>
+ \spadesuit
+l.330 So \spadesuit
+ s are trumps.
+|
+Puisque le symbole |\spadesuit| n'est permis qu'en mode math\'ematique,
+\TeX\ a ins\'er\'e un `|$|' devant lui. Apr\`es que \TeX\ ait ins\'er\'e un
+token, il se place \emph{devant} ce token, dans ce cas, le `|$|', pr\^et
+\`a le lire. saisir `|2|' fera que \TeX\ sautera le `|$|' et le token
+`|\spadesuit|', le laissant pr\^et \`a traiter le `|s|' de
+`|s are trumps|'. Si vous laissez juste \TeX\ continuer, il
+composera `|s are trumps|' en mode math\'ematique.
+
+Voici un exemple o\`u le diagnostic d'erreur de \TeX\ est compl\`etement
+erron\'e~:
+\csdisplay
+\hbox{One \vskip 1in two.}
+|
+Le message d'erreur est~:
+\csdisplay
+!! Missing } inserted.
+<inserted text>
+ }
+<to be read again>
+ \vskip
+l.29 \hbox{One \vskip
+ 1in two.}
+|
+^^|<inserted text>|
+Le probl\`eme est que vous ne pouvez pas utiliser |\vskip| quand \TeX\ est
+en mode horizontal restreint, c'est-\`a-dire, en construisant un hbox. Mais
+au lieu de rejeter le |\vskip|, \TeX\ a ins\'er\'e une accolade droite devant
+lui afin d'essayer de fermer le hbox. Si vous acceptez la correction de \TeX,
+\TeX\ se plaindra encore quand il arrivera plus tard \`a l'accolade droite
+correcte. Il se plaindra \'egalement \`a propos de tout ce qui pr\'ec\`ede cette
+accolade droite et qui n'est pas permis en mode vertical. Ces plaintes
+r\'ep\'etitives seront particuli\`erement embrouillantes parce que les
+erreurs qu'elles indiquent sont fausses, elles sont le r\'esultat des effets
+propag\'es de l'insertion inad\'equate de l'accolade droite. Votre meilleur
+pari est de saisir `|5|', et de sauter apr\`es tous les tokens de `|}\vskip 1in|'.
+
+Voici un exemple similaire dans lequel le message d'erreur est plus long
+que ce que nous avons vus jusqu'ici~:
+\csdisplay
+\leftline{Skip \smallskip a little further.} But no more.
+|
+L'erreur ici est que |\smallskip| ne fonctionne qu'en mode vertical.
+Le message d'erreur est quelque chose comme~:
+\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.
+|
+Les messages d'erreur ici vous donnent un tour d'horizon des macros qui sont
+utilis\'ees dans l'impl\'ementation de |\leftline| dans \plainTeX---des
+macros sur lesquelles vous ne vous inqui\'etez probablement pas. La premi\`ere
+ligne vous indique que \TeX\ pr\'evoit de traiter le probl\`eme en
+ins\'erant une accolade droite. \TeX\ n'a pas encore r\'eellement lu
+l'accolade droite, ainsi vous pouvez la supprimer si vous le choisissez.
+Chaque composant du message apr\`es la premi\`ere ligne (celle avec le `!')
+occupe une paire de lignes. Voici ce que signifient les paires de lignes
+successives~:
+\olist
+\li La premi\`ere paire indique que \TeX\ a ins\'er\'e, mais pas encore lu, une
+accolade droite~:
+\li La paire suivante indique qu'apr\`es avoir lu l'accolade droite, \TeX\
+relira un `|\vskip|' (obtenue de la macro d\'efinition du |\smallskip|).
+\li La troisi\`eme paire indique que \TeX\ d\'eveloppait la macro
+|\smallskip| quand il a trouv\'e l'erreur. Ces deux lignes montrent
+\'egalement la d\'efinition de |\smallskip| et indiquent o\`u \TeX\ est
+parvenu en d\'evelop\-pant et en ex\'ecutant cette d\'efinition.
+Sp\'ecifiquement, il a juste essay\'e sans succ\`es d'ex\'ecuter la
+commande |\vskip|. En g\'en\'eral, une ligne diagnostic qui commence par
+une commande suivie de `|->|' indique que \TeX\ a d\'evelopp\'e et
+ex\'ecut\'e une macro de ce nom.
+\li La quatri\`eme paire indique que \TeX\ traitait un argument de macro
+quand il a trouv\'e le |\smallskip| et indique \'egalement la position de
+\TeX\ du fait de l'argument, c'est-\`a-dire, qu'il a juste trait\'e le
+|\smallskip| (sans succ\`es). En regardant vers la prochaine paire de
+lignes nous pouvons voir que l'argument a \'et\'e pass\'e \`a |\leftline|.
+\li La cinqui\`eme paire indique que \TeX\ d\'eveloppait la macro
+|\leftline| quand il a trouv\'e l'erreur. Dans cet exemple l'erreur s'est
+produite pendant que \TeX\ \'etait en train d'interpr\'eter plusieurs
+d\'efinitions de macro \`a diff\'erents degr\'es de d\'eveloppement. Sa
+position apr\`es |#1| indique que la derni\`ere chose qu'il ait vu \'etait le
+premier (et dans ce cas-ci le seul) argument de |\leftline|.
+\li La derni\`ere paire indique o\`u \TeX\ est plac\'e dans votre fichier
+source. Notez que cette position est bien au del\`a de la position o\`u il
+a ins\`er\'e l'accolade droite et relu le `|\vskip|'. C'est parce que \TeX\
+a d\'ej\`a lu tout l'argument du |\leftline| de votre fichier source,
+m\^eme s'il n'a trait\'e qu'une partie de cet argument. Les points au
+d\'ebut de la paire indiquent qu'une partie pr\'ec\'edente de la ligne
+source n'est pas montr\'ee. Cette partie pr\'ec\'edente, en fait, inclut la
+commande |\leftline| qui a rendu le |\vskip| ill\'egal.
+\endolist
+\noindent
+Dans un long message comme ceci, vous ne trouverez g\'en\'eralement utiles
+que la premi\`ere ligne et la derni\`ere paire de lignes~; mais cela aide
+parfois de savoir ce que sont les autres lignes. N'importe quel texte que
+vous ins\'ererez ou effacerez sera ins\'er\'e ou supprim\'e au niveau les
+plus secrets. Dans cet exemple l'insertion ou la suppression se produira
+juste avant l'accolade droite ins\'er\'ee. Notez en particulier que dans ce
+cas-ci, \TeX \ met tout texte que vous pourriez ins\'erer, \emph{non} dans
+votre texte source mais dans une d\'efinition de macro plusieurs niveaux
+plus bas. (naturellement, la d\'efinition de macro originale n'est pas
+modifi\'ee.)
+
+Vous pouvez employer la commande ^|\errorcontextlines|
+\ctsref{\errorcontextlines} pour limiter le nombre de paires de lignes de
+contexte d'erreur que \TeX\ produit. Si vous n'\^etes pas int\'eress\'e par
+toute l'information que \TeX\ vous fournit, vous pouvez placer |\error!-
+contextlines| \`a $0$. Cela vous ne donnera que les premi\`eres et
+derni\`eres paires de lignes.
+
+En conclusion, nous mentionnerons deux autres indicateurs qui peuvent
+appara\^\i tre au d\'ebut d'une paire de lignes de message d'erreur~:
+\ulist
+\li ^|<output>| indique que \TeX\ \'etait au milieu de sa routine de sortie
+quand cette erreur s'est produite.
+\li ^|<write>| indique que \TeX\ \'etait en train d'ex\'ecuter une commande
+|\write| quand cette erreur s'est produite. \TeX\ d\'etectera une telle
+erreur quand il fera r\'eellement le |\write| (pendant un |\shipout|), et
+non quand il rencontre le |\write|.
+\endulist
+
+
+\eix^^{messages d'erreur}
+\endchapter
+\byebye
+
diff --git a/info/impatient/fr/fexamples.tex b/info/impatient/fr/fexamples.tex
new file mode 100644
index 0000000000..790d908aba
--- /dev/null
+++ b/info/impatient/fr/fexamples.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.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter{Exemples}
+
+\chapterdef{examples}
+
+Cette section du livre contient un ensemble d'exemples pour vous aider \`a
+commencer et pour vous montrer comment faire diverses choses avec \TeX.
+Chaque exemple a le r\'esultat de \TeX\ sur la page de gauche et la source
+\TeX\ ayant men\'e \`a ce r\'esultat sur la page de droite. Vous pouvez utiliser
+ces exemples comme mod\`ele pour les imiter et comme une mani\`ere de trouver
+les commandes \TeX\ dont vous avez besoin afin de r\'ealiser un effet
+particulier. Cependant, ces exemples ne peuvent illustrer que quelques-unes
+des $900$ commandes environ de \TeX.
+
+Certains de ces exemples sont auto-descriptifs---ainsi, ils d\'ecrivent eux-%
+m\^emes les dispositifs de \TeX\ qu'ils illustrent. Ces discussions sont
+n\'eces\-sairement peu pr\'ecises parce qu'il n'y a pas la place dans les
+exemples pour toute l'information dont vous auriez besoin. Le sommaire des
+commandes (\chapterref{capsule}) et l'index vous aideront \`a localiser
+l'explication compl\`ete de chaque dispositif \TeX\ montr\'e dans les
+exemples.
+
+Puisque nous avons con\c cu les exemples pour illustrer beaucoup de choses \`a
+la fois, quelques exemples contiennent une grande vari\'et\'e d'effets
+typographiques. Ces exemples ne sont g\'en\'eralement pas de bons mod\`eles de
+pratique typographique. Par exemple, l'exemple~8 a certains de ses num\'eros
+d'\'equation du c\^ot\'e gauche et d'autres du c\^ot\'e droit. Vous ne ferez jamais
+cela dans une v\'eritable publication.
+
+\xrdef{xmphead}
+
+Chaque exemple, sauf le premier, commence par une macro (voir la
+\xref{macro}) appel\'e |\xmpheader|. Nous avons utilis\'e |\xmpheader|
+afin de garder de la place dans le source. Sans cela, chaque exemple
+ferait plusieurs lignes de plus que vous auriez d\'ej\`a vu.
+|\xmpheader| produit le titre de l'exemple et l'espace
+suppl\'ementaire qui va avec. Vous pouvez voir dans le premier exemple
+ce que fait |\xmpheader|, ainsi vous pouvez l'imiter si vous le
+souhaitez. A part le |\xmpheader|, chaque commande que nous utilisons
+dans ces exemples est d\'efinie dans \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 {fxmptext}% Typeset the actual examples.
+}%
+
+
+\endchapter
+\byebye
diff --git a/info/impatient/fr/ffrontm.tex b/info/impatient/fr/ffrontm.tex
new file mode 100644
index 0000000000..4ec5dbd10f
--- /dev/null
+++ b/info/impatient/fr/ffrontm.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.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+%
+% Front matter.
+
+\input fmacros
+
+
+% Frontmatter is numbered i, ii, ...
+\pageno = -1
+
+% Bastard title.
+%
+% \sinkage
+\leftline{\chapterfonts \TeX\ pour l'Impatient}
+
+\noheadlinetrue\pagebreak
+
+
+% Title spread.
+%
+%(title page, lhs)
+%\noheadlinetrue\pagebreak
+\blankpage
+
+%(title page, rhs)
+%\noheadlinetrue\pagebreak
+\blankpage
+
+
+\input fcopyrgh
+\noheadlinetrue
+
+
+% Dedication.
+%
+\sinkage
+{\it \flushright
+ Pour Jodi.
+ ---{\sc p.w.a.}
+
+ \`a la m\'emoire de mon p\`ere,
+ qui a eu foi en moi.
+ ---{\sc k.a.h.}
+
+ Pour 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 fpreface
+
+% Contents.
+%
+% We never want to empty the file after doing the brief contents.
+%
+\rewritetocfilefalse
+%
+\blankpage
+\frontchapter{Table des mati\`eres\linebreak abr\'eg\'ee}
+
+\shortcontents
+
+
+\ifcompletebook \global\rewritetocfiletrue \fi
+
+\frontchapter{Table des mati\`eres}
+
+\contents
+
+\blankpage
+\input fread1st
+
+\byebye
diff --git a/info/impatient/fr/fgenops.tex b/info/impatient/fr/fgenops.tex
new file mode 100644
index 0000000000..179e17a50f
--- /dev/null
+++ b/info/impatient/fr/fgenops.tex
@@ -0,0 +1,2834 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter {Commandes pour \linebreak des op\'erations g\'en\'erales}
+
+\chapterdef{general}
+
+Cette section couvre
+des ^{caract\'eristiques de programmation} de \TeX\ et
+toutes autres choses qui ne rentrent pas dans les cat\'egories
+de commandes des chapitres pr\'ec\'edents.
+Pour une explication des conventions utilis\'ees dans cette section,
+voir \headcit{Descriptions des commandes}{cmddesc}.
+
+\begindescriptions
+
+%==========================================================================
+\section {Nommer et modifier des polices}
+
+\begindesc
+\bix^^{polices//nommer et modifier}
+\cts font {}
+\aux\cts font {\<s\'equence de contr\^ole> = \<nom de police>}
+\aux\cts font {\<s\'equence de contr\^ole> = \<nom de police> {\bt scaled} \<nombre>}
+\aux\cts font {\<s\'equence de contr\^ole> = \<nom de police> {\bt at} \<dimension>}
+\explain
+Utilis\'ee seule, la s\'equence de contr\^ole |\font| d\'esigne la police courante.
+|\font| n'est pas une vraie commande quand elle est utilis\'ee seule,
+puis\-qu'elle ne peut alors appara\^\i tre que comme argument d'une autre commande.
+
+Pour les trois autres formes de |\font|,
+\<nom de police> nomme un jeu de fichier qui d\'efinit une police.
+Ces formes de |\font| sont des commandes. Chacune de ces formes a deux
+effets~:
+{\tighten
+\olist
+\li Elle d\'efinit \<s\'equence de contr\^ole> comme un nom qui s\'electionne
+la police \<nom de police>, \'eventuellement magnifi\'ee (voir plus bas).
+\li Elle demande \`a \TeX\ de charger le fichier de m\'etriques
+^^{fichiers de m\'etriques} de la police (^{\tfmfile}) pour \<nom de
+police>.
+\endolist
+}% end tighten
+
+\noindent
+Le nom d'un fichier de police indique normalement sa taille de dessin.
+Par exemple, |cmr10| indique Computer Modern romain avec une
+taille de dessin de $10$ points.
+La taille des dessins d'une police est enregistr\'ee dans ses fichiers de m\'etriques.
+
+Si ni |scaled| \<nombre> ni |at| \<dimension>
+n'est pr\'esent, la police est utilis\'ee
+\`a sa taille de dessin---la taille pour laquelle elle est normalement faite.
+Autrement, une version magnifi\'ee de la police est charg\'ee~:
+\ulist
+\li Si |scaled| \<nombre>
+est pr\'esent, la police est magnifi\'ee d'un facteur de $\hbox{\<nombre>}/1000$.
+\li Si |at| \<dimension> est pr\'esent, la police est
+agrandie de \<dimension> en la magnifiant
+par $\hbox{\<dimension>}/ds$, o\`u $ds$ est la taille de dessin de
+\<nom de police>.
+\<dimension> et $ds$ sont toujours donn\'es en points.
+\endulist
+\noindent
+Des magnifications de moins que $1$ sont possibles~; Elles r\'eduisent la taille.
+
+Vous devez habituellement fournir un fichier de formes (\xref{shape}) pour chaque
+magnification de police que vous chargez.
+N\'eanmoins, certains ^{pilotes de p\'eriph\'eriques} peuvent utiliser des polices
+qui sont r\'esidentes dans une imprimante. ^^{polices r\'esidentes}
+De telles polices n'ont pas besoin de fichiers de formes.
+
+Voir \conceptcit{police} et
+\conceptcit{magnification} pour plus d'informa\-tion.
+
+\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 {\<nombre> \<police>\param{dimension}}
+\explain
+^^{polices//param\`etres de}
+Ce param\`etre sp\'ecifie des dimensions vari\'ees associ\'ees avec
+la police nomm\'ee par la s\'equence de contr\^ole \<police>
+(\`a distinguer de \<font\-name> qui nomme les fichiers de police).
+Des valeurs de ces param\`etres sont sp\'ecifi\'es dans les fichiers de m\'etriques
+pour \<police>, mais vous pouvez
+r\'eparer ou changer leurs valeurs pendant une ex\'ecution de \TeX.
+Les nombres et significations de ces param\`etres sont~:
+\display{\halign{\hfil#\hfil\quad&#\hfil\cr
+\it Nombre&\it Signification\cr
+\noalign{\vskip 1\jot}%
+1&inclinaison par point\cr
+2&espace inter-mot\cr
+3&\'etirement inter-mot\cr
+4&r\'etr\'ecissement inter-mot\cr
+5&hauteur de x (taille d'un |1ex|)\cr
+6&largeur de cadratin (taille d'un |1em|)\cr
+7&espace suppl\'ementaire\cr}}
+\noindent
+\TeX\ utilise l'inclinaison par point pour positionner des accents.
+Il utilise aussi les param\`etres inter-mot pour produire des espaces inter-mots
+(voir |\spaceskip|, \xref\spaceskip) et le param\`etre d'espace suppl\'ementaire
+pour l'espa\-ce additionel apr\`es une virgule (voir |\xspaceskip|,
+\xref\xspaceskip).
+Les valeurs de ces param\`etres pour les
+polices \plainTeX\ sont \'enum\'er\'ees dans la \knuth{page~433}{497}.
+Les polices de symboles math\'ematiques ont $15$ param\`etres additionnels,
+dont nous ne parlerons pas ici.
+
+Attention~:
+les assignements de ces param\`etres \emph{ne} sont \emph{pas} d\'efaits \`a la fin
+d'un groupe.
+Si vous voulez changer ces param\`etres localement, vous devrez
+sauvegarder et restaurer leurs valeurs originales explicitement.
+\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 =} \<nombre>}
+\cts mag {\param{nombre}}
+\explain
+\margin{{\tt\\mag} and {\tt\\magnification} combined.}
+Un assignement de |\magnification| \'etablit
+le ``^{facteur d'\'echelle}'' $f$ qui d\'etermine
+le ratio de \minref{magnification} de votre document \seeconcept{magnification}.
+L'assignation de |\magni!-fication| doit appara\^\i tre avant que la premi\`ere page
+de votre document ait \'et\'e envoy\'ee.
+
+L'assignement met $f$ \`a \<nombre> et met
+aussi |\hsize| et |\vsize|
+^^|\hsize//d\'etermin\'e par {\tt\\magnification}|
+^^|\vsize//d\'etermin\'e par {\tt\\magnification}|
+respectivement \`a |6.5true in| et |8.9true in|,
+Les valeurs appropri\'ees pour une page $8 \frac1/2$-%
+par-$11$-pouce.
+$f$ doit \^etre entre $0$ et $32768$.
+Le ratio \minref{magnification} du
+document est $f/1000$.
+Un facteur d'\'echelle
+de $1000$ procure une unit\'e de magnification, c'est-\`a-dire, il laisse
+la taille de votre document inchang\'ee.
+Il est d'usage d'utiliser des puissances de $1.2$ comme facteur d'\'echelle et
+la plupart des librairies de polices sont bas\'ees sur de tels facteurs. Vous
+pouvez utiliser les commandes ^|\magstep| et ^|\magstephalf| pour sp\'ecifier
+des magnifications par ces facteurs.
+
+|\magnification| n'est pas un param\`etre. Vous ne pouvez pas l'utiliser
+pour \emph{r\'ecuperer} le facteur d'\'echelle. Si vous \'ecrivez quelque chose comme
+|\dimen0 = \mag!-nifi!-cation|, \TeX\ s'en plaindra.
+
+Le param\`etre |\mag| contient le facteur d'\'echelle.
+Changer la valeur de |\mag| retaille les dimensions de la page, ce qui n'est pas
+ce que vous voulez habituellement.
+Aussi, il est pr\'ef\'erable de changer la magnification en
+l'assignant \`a |\magnification| plut\^ot qu'\`a |\mag|.
+
+\example
+\magnification = \magstep2
+% magnify fonts by 1.44 (=1.2x1.2)
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts magstep {\<nombre>}
+\explain
+Cette commande d\'eveloppe le ratio de \minref{magnification} demand\'e pour
+magnifier tout dans votre document
+(autre que des dimensions |true|)
+par $1.2^r$, o\`u $r$ est
+la valeur de \<nombre>. \<nombre> doit \^etre entre $0$ et $5$.
+\example
+\magnification = \magstep1 % Magnify by ratio of 1.2.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts magstephalf {}
+\explain
+Cette commande d\'eveloppe le ratio de \minref{magnification} demand\'e pour
+magnifier tout dans votre document
+(autre que des dimensions |true|)
+par $\sqrt{1.2}$,
+c'est-\`a-dire, \`a mi chemin entre $1$ et $1.2$.
+\example
+\magnification = \magstephalf
+|
+\endexample
+\eix^^{polices//nommer et modifier}
+\enddesc
+
+%==========================================================================
+\section {Convertir l'information en tokens}
+
+\subsection {Nombres}
+
+\begindesc
+\xrdef{convert}
+\bix^^{nombres//convertir en caract\`eres}
+%
+\cts number {\<nombre>}
+\explain
+Cette commande produit la repr\'esentation d'un \minref{nombre}
+comme une s\'e\-quence de
+\minref{token}s de caract\`ere. Le nombre peut \^etre un entier explicite,
+un param\`etre \<nombre> ou un registre \<nombre>.
+\example
+\number 24 \quad \count13 = -10000 \number\count13
+|
+\produces
+\number 24 \quad \count13 = -10000 \number\count13
+\endexample
+\enddesc
+
+\begindesc
+^^{chiffres romain}
+\easy\cts romannumeral {\<nombre>}
+\explain
+Cette commande produit la repr\'esentation num\'erique romaine d'un \minref{nom\-bre}
+comme une s\'equence de
+\minref{token}s de caract\`ere. Le nombre peut \^etre un entier explicite,
+un param\`etre \<nombre> ou un registre \<nombre>.
+Si le nombre est z\'ero ou n\'egatif, |\romannumeral| ne produit
+pas de 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^^{nombres//convertir en caract\`eres}
+\enddesc
+
+%==========================================================================
+\subsection {Information environmentale}
+
+\begindesc
+^^{heure du jour}
+\cts time {\param{nombre}}
+\explain
+\TeX\ met ce param\`etre au
+nombre de minutes qui se sont d\'eroul\'ees depuis minuit (du jour courant).
+A neuf heures, par exemple, |\time| est \`a $720$.
+Cette commande et les trois suivantes utilisent l'heure et la date
+enregistr\'ee dans votre ordinateur.
+\TeX\ les r\'ecup\`ere juste une fois, au d\'ebut de votre ex\'ecution, donc |\time|
+\`a la fin de l'ex\'ecution \`a toujours la m\^eme valeur que |\time| au
+d\'ebut de l'ex\'ecution (\`a moins que vous l'ayez chang\'ee explicitement).
+\enddesc
+
+\bix^^{date}
+\begindesc
+\cts day {\param{nombre}}
+\explain
+\TeX\ met ce param\`etre au jour courant du mois. c'est
+un nombre entre $1$ et $31$.
+|\day| est mis au d\'ebut de votre ex\'ecution (voir les commentaires sur
+|\time| ci-dessus).
+\enddesc
+
+\begindesc
+\cts month {\param{nombre}}
+\explain
+\TeX\ met ce param\`etre au mois courant. C'est
+un nombre entre $1$ et $12$.
+|\month| est mis au d\'ebut de votre ex\'ecution (voir les commentaires sur
+|\time| ci-dessus).
+\enddesc
+
+\begindesc
+\cts year {\param{nombre}}
+\explain
+\TeX\ met ce param\`etre \`a l'ann\'ee courante ({apr\`es \sc J.-C.}).
+C'est un nombre tel que $2004$.
+|\year| est mis au d\'ebut de votre ex\'ecution (voir les commentaires sur
+|\time| ci-dessus).
+
+\eix^^{date}
+\enddesc
+
+\begindesc
+^^{num\'ero de version}
+\cts fmtname {}
+\cts fmtversion {}
+\explain
+Ces commandes produisent le nom et le num\'ero de version
+du format \TeX,
+c'est-\`a-dire \minref{\plainTeX} ou ^{\LaTeX}, que vous utilisez.
+\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
+Cette commande produit le nom de base
+du fichier avec lequel \TeX\ \`a \'et\'e invoqu\'e.
+Par exemple, si votre fichier d'entr\'ee principal est |hatter.tex|,
+|\jobname| se d\'eveloppera en |hatter|.
+|\jobname| est plus pratique quand vous
+cr\'eez un fichier auxiliaire devant \^etre associ\'e avec un document.
+^^{fichiers auxiliaires}
+\example
+\newwrite\indexfile \openout\indexfile = \jobname.idx
+% For input file `hatter.tex', open index file `hatter.idx'.
+|
+\endexample\enddesc
+
+%==========================================================================
+\subsection {Valeurs des variables}
+
+\begindesc
+\cts meaning {\<token>}
+\explain
+^^{tokens//montrer la signification de}
+Cette commande produit
+la signification de \<token>. Elle est pratique pour diagnostiquer en sortie.
+Vous pouvez utiliser la commande ^|\the| (\xref\the) d'une mani\`ere similaire
+pour obtenir l'information sur les valeurs des \minref{registre}s et autres
+entit\'es de \TeX.
+\example
+[{\tt \meaning\eject}] [\meaning\tenrm] [\meaning Y]
+|
+\produces
+[{\tt \meaning\eject}] [\meaning\tenrm] [\meaning Y]
+\endexample\enddesc
+
+\begindesc
+\cts string {\<s\'equence de contr\^ole>}
+\explain
+^^{s\'equences de contr\^ole//convertir en chaines}
+Cette commande produit
+les caract\`eres qui forment le nom \<s\'equence de contr\^ole>,
+en incluant le \minref{caract\`ere d'\'echappement}.
+Le caract\`ere d'\'echap\-pement est repr\'esent\'e par la valeur courante de
+^|\escapechar|.
+^^{caract\`ere d'\'echappement//repr\'esent\'e par \b\tt\\escapechar\e}
+\TeX\ donne les caract\`eres dans la liste d'un code de cat\'egorie de $12$ (outre).
+
+Vous pouvez proc\'eder \`a l'op\'eration inverse avec
+la commande ^|\csname| (\xref \csname),
+qui transforme une chaine en une s\'equence de contr\^ole.
+\example
+the control sequence {\tt \string\bigbreak}
+|
+\produces
+the control sequence {\tt \string\bigbreak}
+\endexample\enddesc
+
+\begindesc
+\cts escapechar {\param{nombre}}
+\explain
+Ce param\`etre sp\'ecifie le code \ascii\ \minrefs{\ascii} du
+caract\`ere que \TeX\ utilise pour repr\'esenter le \minref{caract\`ere d'\'echappement}
+^^{caract\`ere d'\'echappement//repr\'esent\'e par \b\tt\\escapechar\e}
+quand il
+convertit un nom de s\'equence de contr\^ole en une s\'equence de tokens de caract\`ere.
+Cette conversion \`a lieu quand vous utilisez la commande |\string| et aussi quand
+\TeX\ produit des messages de diagnostic. La valeur par d\'efaut du caract\`ere
+d'\'echappement est $92$, la code de caract\`ere {\ascii} pour un ^{backslash}.
+Si |\escapechar| n'est pas dans la fourchette $0$--$255$,
+\TeX\ n'inclut pas de caract\`ere d'\'echappement dans le r\'esultat de la conversion.
+\example
+\escapechar = `!!
+the control sequence {\tt \string\bigbreak}
+|
+\produces
+\escapechar = `!
+the control sequence {\tt \string\bigbreak}
+\endexample
+\enddesc
+
+\begindesc
+\cts fontname {\<police>}
+\explain
+^^{polices//noms de}
+Cette commande produit le nom de fichier
+pour la \<police>. Le nom de fichier est le \<font\-name> qui a \'et\'e utilis\'e
+pour d\'efinir \<police>.
+\example
+\font\myfive=cmr5 [\fontname\myfive]
+|
+\produces
+\font\myfive=cmr5 [\fontname\myfive]
+\endexample
+\enddesc
+
+
+%==========================================================================
+\section {Groupement}
+
+\begindesc
+\bix^^{groupes}
+%
+\cts begingroup {}
+\cts endgroup {}
+\explain
+Ces deux commandes d\'ebutent et terminent un \minref{groupe}.
+Un |\begingroup| ne s'accorde pas avec une accolade droite,
+ni un |\endgroup| avec une accolade gauche.
+
+\TeX\ traite |\begingroup| et |\endgroup| comme tout autre
+\minref{s\'equence de contr\^ole} quand il scanne son entr\'ee. En particulier,
+vous pouvez d\'efinir une \minref{macro} qui contient un |\begingroup|
+mais pas de |\endgroup|, et inversement.
+^^{macros//utiliser \b\tt\\begingroup\e\ et \b\tt\\endgroup\e\ dans des}
+Cette technique est souvent pratique
+quand vous d\'efinissez des paires de macros, une qui \'etablit
+un environnement et l'autre qui termine cet environnement.
+Vous ne pouvez, de plus, pas utiliser |\begingroup| et |\endgroup| comme
+substituts pour des
+accolades autres que celles qui entourent un groupe.
+\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
+Les accolades gauches et droites sont des commandes qui d\'ebutent et terminent un
+\minref{groupe}.
+Les \minref{s\'equences de contr\^ole} |\bgroup| et |\egroup| sont \'equivalentes
+\`a `|{|' et `|}|', sauf que
+\TeX\ traite |\bgroup| et |\egroup| comme tout autre
+\minref{s\'equence de contr\^ole} quand il scanne son entr\'ee.
+
+|\bgroup| et |\egroup| peuvent \^etre pratiques quand vous
+d\'efinissez des paires de macros, une dans laquelle
+d\'ebute une construction d\'elimit\'ee par accolade (pas n\'ecessairement un groupe)
+et l'autre dans laquelle ce termine cette construction.
+^^{macros//utiliser \b\tt\\bgroup\e\ et \b\tt\\egroup\e\ dans des}
+Vous ne pouvez pas d\'efinir de telles macros en utilisant des accolades ordinaires---si vous essayez,
+vos d\'efinitions de macro contiendront des accolades non appair\'ees
+et seront de ce fait inacceptables par \TeX.
+Normalement vous ne devez utilisez ces commandes que quand vous ne pouvez utiliser
+d'accolades ordinaires.
+
+\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
+Cette commande rend la d\'efinition
+ou l'\minref{assignement} suivant \minref{global} \seeconcept{global}
+pour qu'il devienne effectif ind\'ependamment des fronti\`eres du \minref{groupe}.
+Vous pouvez appliquer un pr\'efix |\global| \`a toute sorte de d\'efinition
+ou \minref{assignement},
+en incluant une d\'efinition de \minref{macro} ou un assignement de \minref{registre}.
+\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{nombre}}
+\explain
+Ce param\`etre contr\^ole si \TeX\ prend ou non des d\'efinitions
+et autres assignements comme \'etant
+\minref{globaux}~:
+\ulist
+\li Si |\globaldefs| est \`a z\'ero (comme il l'est par d\'efaut), une d\'efinition est globale
+si et seulement si il est pr\'ec\'ed\'e par |\global| soit explicitement soit implicitement.
+(Les commandes ^|\gdef| et ^|\xdef| (\xref\gdef) ont un pr\'efixe
+|\global| implicite).
+\li Si |\globaldefs| est sup\'erieur \`a z\'ero, tout assignement et
+d\'efinition est implicitement pr\'efix\'e par ^|\global|.
+\li Si |\globaldefs| est inf\'erieur \`a z\'ero, tout pr\'efixe ^|\global| est ignor\'e.
+\endulist
+\enddesc
+
+\begindesc
+\margin{Order of {\tt\\aftergroup} and {\tt\\afterassignment} changed.}
+\cts aftergroup {\<token>}
+\explain
+Quand \TeX\ rencontre cette commande dans une entr\'ee,
+il sauve \<token>.
+Apr\`es la fin du \minref{groupe} courant,
+il r\'eins\`ere \<token> dans l'entr\'ee et le d\'eveloppe.
+Si un groupe contient plusieurs |\aftergroup|s, les tokens correspondants
+sont \emph{tous} ins\'er\'es suivant la fin du groupe, dans l'ordre
+dans lequel ils apparaissent \`a l'origine.
+
+L'exemple qui suit vous montre comment vous pouvez utiliser |\after!-group|
+pour diff\'erer le traitement d'un token que vous avez g\'en\'er\'e dans un
+\minref{test conditionnel}.
+\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^^{groupes}
+\enddesc
+
+\begindesc
+\cts afterassignment {\<token>}
+\explain
+Quand \TeX\ rencontre cette commande il sauve \<token> dans un endroit sp\'ecial.
+Apr\`es qu'il ait ex\'ecut\'e l'\minref{assignment} suivant, il ins\`ere
+\<token> dans l'entr\'ee et le d\'eveloppe. Si vous appelez |\afterassignment|
+plus d'une fois avant un assignement, seul le dernier appel a un effet.
+Une utilisation de |\afterassignment|
+est dans l'\'ecriture de \minref{macro}s pour des commandes devant \^etre \'ecrites
+sous la forme d'assignements, comme dans l'exemple suivant.
+
+Voir la \knuth{page~279}{325} pour un description pr\'ecise
+du fonctionnement d'|\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 {D\'efinir des macros}
+
+\begindesc
+\bix^^{macros}
+\bix^^{macros//d\'efinir des}
+\xrdef{mac1}% begin the section on macros
+%
+\cts def {\<s\'equence de contr\^ole> \<texte de param\`etre> \rqbraces{\<texte de remplacement>}}
+\explain
+Cette commande d\'efinit \<s\'equence de contr\^ole> comme une \minref{macro} avec les
+\<texte de param\`etre> et \<texte de remplacement> sp\'ecifi\'es.
+Voir \xrefpg{macro} pour une explication compl\`ete sur la fa\c con d'\'ecrire une
+d\'efinition de macro.
+\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 {\<s\'equence de contr\^ole> \<texte de param\`etre> \rqbraces{\<texte de remplacement>}}
+\explain
+Cette commande d\'efinit une macro de la m\^eme mani\`ere g\'en\'erale que |\def|.
+La diff\'erence est que \TeX\ d\'eveloppe le \<texte de remplacement>
+d'un |\edef| imm\'ediatement (mais sans rien ex\'ecuter).
+Ainsi toutes d\'efini\-tions du \<texte de remplacement> sont d\'evelopp\'ees, mais
+des assignements et commandes qui produisent des choses telles que bo\^\i tes et
+des ressorts sont laiss\'es tels quels. Par exemple, une commande |\hbox| dans
+le \<texte de remplacement> d'un |\edef| reste comme une commande et n'est pas
+transform\'ee en une bo\^\i te quand \TeX\ ex\'ecute la d\'efinition.
+Il n'est pas toujours \'evident de savoir ce qui est d\'evelopp\'e et ce qui ne l'est pas, mais vous
+trouverez une liste compl\`ete des s\'equences de contr\^ole d\'eveloppables sur les
+\knuth{pages~212--215}{249--252}.
+
+Vous pouvez inhiber le d\'eveloppement d'une s\'equence de contr\^ole qui devrait
+\^etre d\'evelopp\'ee en utilisant |\no!-expand| (\xref\noexpand). ^^|\noexpand|
+Vous pouvez diff\'erer le d\'eveloppement d'une s\'equence de contr\^ole en utilisant la commande
+^|\expandafter| (\xref\expandafter).
+
+Les commandes |\write|, |\message|, |\errmessage|, |\wlog| et |\csname|
+d\'eveloppent leurs
+listes de token en utilisant les m\^eme r\`egles que |\edef| utilise pour d\'evelopper son
+texte de remplacement.
+^^|\write//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+^^|\message//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+^^|\errmessage//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+^^|\wlog//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+^^|\csname//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+\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 {\<s\'equence de contr\^ole> \<texte de param\`etre> \rqbraces{\<texte de remplacement>}}
+\explain
+Cette commande est \'equivalente \`a |\global\def|.
+\enddesc
+
+\begindesc
+\cts xdef {\<s\'equence de contr\^ole> \<texte de param\`etre> \rqbraces{\<texte de remplacement>}}
+\explain
+Cette commande est \'equivalente \`a |\global\edef|.
+\enddesc
+
+\begindesc
+\cts long {}
+\explain
+Cette commande est utilis\'ee comme pr\'efixe d'une d\'efinition de \minref{macro}.
+Elle dit \`a \TeX\ que les arguments de la macro peuvent inclure
+des tokens |\par| (\xref{\@par}), qui indiquent normalement la fin d'un paragraphe.
+^^|\par//dans des arguments de macro|
+Si \TeX\
+essaye de d\'evelopper une macro d\'efinie sans |\long| et qu'un des arguments
+de la macro comprend un token |\par|,
+\TeX\ se plaindra par un ``runaway argument''. Le but
+de ce comportement est de vous fournir des protections contre des arguments de
+macro non termin\'es.
+|\long| vous donne un moyen d'outrepasser la 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}
+Cette commande est utilis\'ee comme pr\'efixe d'une d\'efinition de \minref{macro}.
+Elle dit \`a \TeX\ que la macro est externe (\xref{outer})
+et ne peut pas \^etre utilis\'ee dans certains contextes.
+Si la macro est utilis\'ee dans un contexte interdit, \TeX\ se plaindra.
+
+\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 {\<s\'equence de contr\^ole>=\<charcode>}
+\explain
+^^{caract\`eres//d\'efinis par \b\tt\\chardef\e}
+Cette commande d\'efinit \<s\'equence de contr\^ole>
+comme \'etant \<charcode>.
+Bien que |\chardef| soit plus souvent utilis\'ee pour d\'efinir des caract\`eres, vous pouvez aussi
+l'utiliser pour donner un nom \`a un nombre dans la fourchette $0$--$255$ m\^eme
+quand vous n'utilisez pas ce nombre comme un code de caract\`ere.
+\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
+^^{caract\`eres math\'ematiques}
+^^{mathcodes}
+\cts mathchardef {\<s\'equence de contr\^ole>=\<mathcode>}
+\explain
+Cette commande d\'efinit la \<s\'equence de contr\^ole> comme un caract\`ere math\'ematique
+avec le \minrefs{mathcode}\<mathcode> donn\'e.
+La s\'equence de contr\^ole ne sera l\'egale qu'en mode math\'ematique.
+\example
+\mathchardef\alphachar = "010B % As in plain TeX.
+$\alphachar$
+|
+\produces
+\mathchardef\alphachar = "010B % As in plain TeX.
+$\alphachar$
+\endexample
+\eix^^{macros//d\'efinir des}
+\enddesc
+
+%==========================================================================
+\subsection {Autre d\'efinitions}
+
+\begindesc
+\cts let {\<s\'equence de contr\^ole> = \<token>}
+\explain
+^^{s\'equences de contr\^ole//d\'efinies avec \b\tt\\let\e}
+\minrefs{token}
+Cette commande fait que
+\<s\'equence de contr\^ole> prend la signification actuelle de \<token>.
+M\^eme si vous red\'efinissez \<token> plus tard, la signification de \<s\'equence de contr\^ole>
+ne changera pas. Bien que \<token> soit le plus souvent une s\'equence de contr\^ole,
+il peut aussi \^etre un token de \minref{caract\`ere}.
+\enddesc
+
+\begindesc
+\cts futurelet {\<s\'equence de contr\^ole> \<token$_1$> \<token$_2$>}
+\explain
+Cette commande dit \`a \TeX\ de donner \`a \<token$_2$> la signification de
+\<s\'equence de contr\^ole> (comme elle le serait avec |\let|) et ensuite
+d'ex\'ecu\-ter \<token$_1$> et \<token$_2$> normalement.
+|\futurelet| est pratique \`a la fin d'une d\'efinition de macro
+parce qu'elle vous donne un moyen de regarder au-del\`a du token que \TeX\
+est en train d'ex\'ecuter avant de continuer.
+\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 {\<liste de token> {\bt \\endcsname}}
+\xrdef{\endcsname}
+\explain
+Cette commande produit une s\'equence de contr\^ole \`a partir de \<liste de token>.
+Elle procure un moyen de synth\'etiser des s\'equences de contr\^ole,
+en incluant celles que vous ne pouvez normalement pas \'ecrire.
+\<liste de token> peut elle-m\^eme inclure des s\'equences de contr\^ole~:
+elle est d\'eveloppable de la m\^eme mani\`ere que le texte de remplacement d'une
+d\'efinition |\edef| (\xref\edef).
+Si le d\'eveloppement final
+produit quelque chose qui n'est pas un caract\`ere, \TeX\ se plaindra.
+|\csname| transforme une liste de tokens en s\'equence de contr\^ole~;
+vous pouvez faire l'inverse avec ^|\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 {Contr\^oler le d\'eveloppement}
+
+\begindesc
+\bix^^{macros//contr\^oler leur d\'eveloppement}
+\cts expandafter {\<token$_1$> \<token$_2$>}
+\explain
+Cette commande dit \`a \TeX\ de d\'evelopper \<token$_1$> en accord avec ses r\`egles
+de d\'eveloppement de \minref{macro} \emph{apr\`es} avoir d\'evelopp\'e \<token$_2$>
+d'un niveau. C'est pratique quand \<token$_1$> est quelque chose comme `|{|'
+^^|{//avec {\tt\\expandafter}|
+ou ^|\string| qui inhibe les expansions de \<token$_2$>,
+mais que vous voulez d\'evelopper \<token$_2$> quand m\^eme.
+\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
+Cette commande demande \`a \TeX\ de
+supprimer le d\'eveloppement de \<token> si \<token> est une
+\minref{s\'equence de contr\^ole} qui peut \^etre d\'evelopp\'ee.
+Si \<token> ne peut pas \^etre d\'evelopp\'ee, c'est-\`a-dire, si c'est une lettre,
+\TeX\ agit comme si le |\noexpand| n'\'etait pas l\`a
+et ex\'ecute \<token> normalement.
+En d'autres mots le d\'eveloppement de `|\noexpand|\<token>'
+est simplement \<token> quoi que \<token> devienne.
+\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
+Cette commande se d\'eveloppe g\'en\'eralement en une liste de tokens de \minref{caract\`ere}s
+que repr\'esente \<token>. \<token> peut \^etre parmi ce qui suit~:
+
+\ulist\compact
+\li un \minref{param\`etre} \TeX, par exemple, |\parindent| ou |\deadcycles|
+^^{param\`etres//utiliser \b\tt\\the\e\ avec}
+\li un \minref{registre}, par exemple, |\count0|
+^^{registres//avec \b\tt\\the\e}
+\margin{Item for special registers removed}
+\li un code associ\'e avec un caract\`ere entr\'e, par exemple, |\catcode`(|
+\li un param\`etre de police, par exemple, |\fontdimen3\sevenbf|
+\li le ^|\hyphenchar| ou le ^|\skewchar| d'une police,
+|\skewchar\teni|, par exemple
+\li ^|\lastpenalty|, ^|\lastskip| ou ^|\lastkern| (valeurs d\'eriv\'ees du
+der\-nier \'el\'ement d'une liste horizontale \minrefs{horizontal list}
+ou \minref{liste verticale} courante)
+\li une s\'equence de contr\^ole d\'efinie par ^|\chardef| ou
+^|\mathchardef|
+\endulist
+
+\noindent
+De plus, |\the| peut d\'evelopper des tokens non-caract\`ere dans les deux cas
+suivants~:
+\ulist\compact
+\li |\the| \<police>, qui d\'eveloppe la s\'equence de contr\^ole la plus r\'ecem\-ment
+d\'efinie qui s\'electionne la m\^eme police que la s\'equence de contr\^o\-le \<police>
+\li |\the| \<variable de token>, qui d\'eveloppe une copie de la valeur de la
+variable, par exemple, |\the\everypar|
+\endulist
+
+Voir les \knuth{pages~214--215}{251} pour une description plus d\'etaill\'ee de ce que
+|\the| fait selon les cas.
+\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{Convertir l'information en tokens}{convert} ainsi que la commande
+|\showthe| (\xref\showthe).
+\par}
+
+\eix^^{macros//contr\^oler leur d\'eveloppement}
+
+%==========================================================================
+\subsection {Tests conditionnels}
+
+\begindesc
+\xrdef{conds}
+\bix^^{tests conditionnels}
+%
+\ctspecial if {\<token$_1$> \<token$_2$>}\ctsxrdef{@if}
+\explain
+{\emergencystretch=1em
+Cette commande teste si \<token$_1$> et \<token$_2$>
+ont le m\^eme code de \minref{caract\`ere}, ind\'ependamment de leurs
+\minref{codes de cat\'egorie}.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\if|
+jusqu'\`a ce qu'il obtienne deux tokens qui ne peuvent se d\'evelopper plus.
+Ces deux tokens deviennent \<token$_1$> et \<token$_2$>.
+Le d\'eveloppement
+inclut le remplacement d'une s\'equence de contr\^ole |\let| \'egale \`a un token de caract\`ere
+par ce token de caract\`ere.
+Une \minref{s\'equence de contr\^ole} qui ne peut plus se d\'evelopper est
+consid\'er\'ee comme ayant un code de caract\`ere $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
+^^{codes de cat\'egorie//tester}
+Cette commande teste si \<token$_1$> et \<token$_2$>
+ont le m\^eme \minref{code de cat\'ego\-rie}.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\if|
+jusqu'a ce qu'il obtienne deux tokens qui ne puissent plus se d\'evelopper.
+Ces deux tokens deviennent \<token$_1$> et \<token$_2$>.
+Le d\'eveloppement
+inclut le remplacement d'une s\'equence de contr\^ole |\let| \'egale \`a un token de caract\`ere
+par ce token de caract\`ere.
+Une \minref{s\'equence de contr\^ole} qui ne peut plus se d\'evelopper est
+consid\'er\'ee comme ayant un code de caract\`ere $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
+Cette commande teste si \<token$_1$> et \<token$_2$> s'accordent.
+Contrairement \`a |\if| et |\ifcat|, |\ifx| \emph{ne} d\'eveloppe \emph{pas} les tokens
+suivant |\ifx|, donc \<token$_1$> et \<token$_2$> sont les deux
+tokens imm\'ediatement apr\`es |\ifx|.
+Il y a trois cas~:
+\olist
+\li Si un token est une \minref{macro} et pas l'autre,
+les tokens ne s'accordent pas.
+\li Si aucun token n'est une macro, Les tokens s'accordent si~:
+\olist
+\li les deux tokens sont des caract\`eres (ou des s\'equences de contr\^ole d\'ecrivant des caract\`eres) et
+que leurs codes de \minref{caract\`ere} et de \minref{cat\'egorie} s'accordent, ou
+\li Les deux tokens font r\'ef\'erence \`a la m\^eme commande \TeX, police, etc.
+\endolist
+\li Si les deux tokens sont des macros, les tokens s'accordent si~:
+\olist\compact
+\li leurs d\'eveloppements de ``premier niveau'', c'est-\`a-dire,
+leurs textes de remplacement, sont identiques, et
+\li Ils ont le m\^eme statut concernant ^|\long| (\xref\long)
+et ^|\outer| (\xref\outer).
+\endolist
+Notez en particulier que \emph{deux s\'equences de contr\^ole non d\'efinies
+s'accordent}.
+\endolist
+\noindent
+Ce teste est g\'en\'eralement plus utile que |\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
+^^{nombres//comparer}
+Cette commande teste si \<number$_1$> et \<number$_2$>
+satisfont \<relation>, qui peut \^etre soit `|<|', `|=|' ou `|>|'.
+Les nombres peuvent \^etre des constantes telles que |127|, des registres de compteur tels que
+|\pageno| ou |\count22| ou des param\`etres num\'eriques tels que |\hbadness|.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\ifnum|
+jusqu'a ce qu'il obtienne une s\'equence de tokens ayant la forme \<number$_1$>
+\<relation> \<number$_2$> suivi par un token
+qui ne peut \^etre une partie de \<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 {\<nombre>}\ctsxrdef{@ifodd}
+\explain
+^^{nombres//tester la parit\'e}
+Cette commande teste si \<nombre> est impair.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\ifodd|
+jusqu'a ce qu'il obtienne une s\'equence de tokens ayant la forme \<nombre>,
+suivi par un token qui ne peut \^etre une partie de \<nombre>.
+\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//comparer}
+Cette commande teste si \<dimen$_1$> et \<dimen$_2$>
+satisfont \<relation>, qui doit \^etre soit `|<|', `|=|' ou `|>|'.
+Les dimensions peuvent \^etre des constantes telles que |1in|, des registres de dimension
+tels que |\dimen6| ou des para\-m\`etres de dimension tels que |\parindent|.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\ifdim|
+jusqu'a ce qu'il obtienne une s\'equence de tokens ayant la forme
+\<dimen$_1$> \<relation> \<dimen$_2$>
+suivi par un token qui ne peut \^etre une partie de \<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
+^^{mode horizontal//tester}
+^^{mode vertical//tester}
+^^{mode math\'ematique//tester}
+^^{mode restreint//tester}
+Ces commandes testent dans quel \minref{mode} est \TeX~:
+\ulist
+\li |\ifhmode| est vrai si \TeX\ est en mode horizontal ordinaire ou r\'eduit.
+\li |\ifvmode| est vrai si \TeX\ est en mode vertical ordinaire ou interne.
+\li |\ifmmode| est vrai si \TeX\ est en mode math\'ematique de texte ou d'affichage.
+\li |\ifinner| est vrai si \TeX\ est dans un mode ``interne''~:
+horizontal r\'eduit, vertical interne ou math\'ematique de texte.
+\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 {\<registre>}\ctsxrdef{@ifhbox}
+\ctspecial ifvbox {\<registre>}\ctsxrdef{@ifvbox}
+\ctspecial ifvoid {\<registre>}\ctsxrdef{@ifvoid}
+\explain
+^^{hbox//tester}
+^^{vbox//tester}
+^^{\boites//tester si elle est vide}
+Ces commandes testent le contenu du
+registre de bo\^\i te num\'ero \<reg\-ister>.
+Soit \<registre> \`a $n$. Alors~:
+\ulist
+\li |\ifhbox| est vrai si |\box|$\,n$ est une \minref{hbox}.
+\li |\ifvbox| est vrai si |\box|$\,n$ est une \minref{vbox}.
+\li |\ifvoid| est vrai si |\box|$\,n$ est vide, c'est-\`a-dire, ne contient pas
+de bo\^\i te.
+\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 {\<nombre>}\ctsxrdef{@ifeof}
+\explain
+^^{fin de fichier, tester}
+\minrefs{file}
+Cette commande teste un flux d'entr\'ee de fin de fichier.
+Elle est vraie si le flux d'entr\'ee \<nombre> n'a pas \'et\'e ouvert,
+ou a \'et\'e ouvert et que le fichier associ\'e a \'et\'e enti\`erement lu
+(ou n'existe pas).
+\enddesc
+
+\begindesc
+\ctspecial ifcase
+{\<nombre>\<texte du cas$_0$> {\bt \\or }\<texte du cas$_1$> {\bt \\or}
+ $\ldots$ {\bt \\or} \<texte du cas$_n$>\hfil\break
+\hglue 3pc{\bt \\else} \<texte alternatif> {\bt \\fi}}
+\ctsxrdef{@ifcase}
+\ctsxrdef{@or}
+\explain
+^^{test de cas}
+Cette commande introduit un test avec des cas multiples num\'erot\'es.
+Si \<nom\-bre> a la valeur $k$, \TeX\ d\'eveloppera \<texte de cas$_k$> s'il
+existe et \<texte alternatif> autrement. Vous pouvez omettre le |\else|---%
+dans ce cas, \TeX\ ne d\'eveloppera rien si aucun des cas n'est satisfait.
+\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
+Ces commandes sont \'equivalentes \`a des tests qui sont toujours vrai ou toujours
+faux. Le principal usage de ces commandes est de d\'efinir des macros qui gardent
+trace du r\'esultat d'un 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
+Cette commande introduit l'alternative ``faux'' d'un test conditionel.
+\enddesc
+
+\begindesc
+\ctspecial fi {} \ctsxrdef{@fi}
+\explain
+Cette commande termine le texte d'un test conditionel.
+\enddesc
+
+\begindesc
+\ctspecial newif {{\bt \\if}\<nom de test>}\ctsxrdef{@newif}
+\explain
+Cette commande nomme un trio de s\'equence de contr\^ole avec comme noms |\alpha!-true|,
+|\alphafalse|,
+et |\ifalpha|, o\`u |alpha| est \<test name>.
+Vous pouvez les utiliser pour d\'efinir vos propres tests en
+cr\'eant une variable logique qui enregistre des informations
+true\slash false:
+\ulist\compact
+\li |\alphatrue| met la variable logique |alpha| \`a vrai.
+\li |\alphafalse| met la variable logique |alpha| \`a faux
+\li |\ifalpha| est un test conditionnel qui est vrai si la variable logique
+|alpha| est vraie et faux autrement.
+\endulist
+La variable logique |alpha| n'existe pas r\'eellement, mais \TeX\ agit comme
+si elle l'\'etait. Apr\`es |\newif\ifalpha|, la variable logique est initialis\'ee
+\`a faux.
+
+|\newif| est un commande externe, donc vous ne pouvez l'utiliser dans une d\'efinition
+de macro.
+\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^^{tests conditionnels}
+\enddesc
+
+
+%==========================================================================
+\subsection {Actions r\'ep\'et\'ees}
+
+{\def\test{{\bt \\if}$\Omega$}%
+\begindesc
+\bix^^{actions r\'ep\'et\'ees}
+\bix^^{boucles}
+\cts loop {$\alpha$ {\test} $\beta$ {\bt \\repeat}}
+\ctspecial repeat {}\ctsxrdef{@repeat}
+\explain
+Ces commandes procurent une construction de boucle pour \TeX.
+Ici, $\alpha$ et $\beta$ sont des s\'equences de commandes arbitraires
+et \test\ est un des tests conditionnels d\'ecrites dans
+\headcit{Tests conditionnels}{conds}.
+Le |\repeat| r\'ep\`ete le |\fi| correspondant au test,
+donc vous n'aurez pas besoin d'\'ecrire un |\fi| explicite pour terminer le test.
+Ni, malheureusement, associer un |\else| au test.
+Si vous voulez utiliser le test dans le sens oppos\'e, vous devez
+r\'earranger le test ou
+d\'efinir un test auxiliaire avec |\newif| (voir au-dessus) et utiliser ce
+test dans le sens que vous voulez (voir le second exemple ci-dessous).
+
+\TeX\ d\'eveloppe |\loop| comme suit~:
+\olist
+\li $\alpha$ est d\'evelopp\'e.
+\li {\test} est ex\'ecut\'e. Si le r\'esultat est faux, la boucle est termin\'ee.
+\li $\beta$ est d\'evelopp\'e.
+\li Le cycle est r\'ep\'et\'e.
+\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^^{actions r\'ep\'et\'ees}
+\eix^^{boucles}
+%
+\endexample
+\enddesc
+} % end scope of definition of \test
+
+%==========================================================================
+\subsection {Ne rien faire}
+
+\begindesc
+\cts relax {}
+\explain
+Cette commande demande \`a \TeX\ de ne rien faire. C'est utile dans un contexte o\`u
+vous devez procurer une commande mais il n'y a rien que vous voulez que \TeX\ fasse.
+\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
+Cette commande se d\'eveloppe en aucun tokens du tout.
+Elle diff\`ere de |\relax| car elle dispara\^\i t apr\`es un d\'eveloppement de macro.
+%
+\xrdef{mac2}% end the section on macros
+\eix^^{macros}
+\enddesc
+
+%==========================================================================
+\section {Registres}
+
+%==========================================================================
+\subsection {Utiliser des registres}
+
+\begindesc
+\bix^^{registres}
+\makecolumns 11/2:
+\cts count {\<registre> {\bt =} \<nombre>}
+\cts dimen {\<registre> {\bt =} \<dimen>}
+\cts skip {\<registre> {\bt =} \<glue>}
+\cts muskip {\<registre> {\bt =} \<muglue>}
+\cts toks {\<registre> {\bt =} \<token variable>}
+\aux\cts toks {\<registre> {\bt =} \rqbraces{\<list. de tok.>}}
+\aux\cts count {\<registre>}
+\aux\cts dimen {\<registre>}
+\aux\cts skip {\<registre>}
+\aux\cts muskip {\<registre>}
+\aux\cts toks {\<registre>}
+\explain
+^^{assignements//de registres}
+Les six premi\`eres commandes list\'ees ici assignent quelque chose \`a un registre.
+Les |=| dans les assignations sont optionnels.
+Les cinq s\'equences de contr\^ole restantes ne sont pas de vraies commandes
+car elles n'apparais\-sent que comme partie d'un argument.
+Elles pr\'ecisent le contenu des registres sp\'ecifi\'es.
+Bien que vous ne puissiez utiliser ces s\'equences de contr\^ole elles-m\^eme comme commandes
+dans un texte, vous pouvez utili\-ser ^|\the| pour les convertir en texte
+et ainsi pouvoir composer leurs valeurs.
+
+Vous pouvez nommer et r\'eserver de nouveaux registres
+avec la commande ^|\newcount| et ses relatifs
+(\xref{\@newcount}).
+Utiliser ces commandes est un moyen s\^ur d'obtenir des registres qui
+ne sont pas cens\'es avoir d'usages conflictuels.
+
+^^{registres count}
+Un registre |\count| contient un entier, qui peut \^etre soit positif soit
+n\'egatif.
+Des entiers peuvent \^etre aussi grands que vous n'aurez probablement jamais besoin qu'ils soient.\footnote
+{Voici le seul exercice du livre~: trouvez le plus grand entier
+que \TeX\ acceptera.}
+\TeX\ utilise les registres compteur $0$--$9$ pour garder trace des
+num\'eros de page (voir la \knuth{page~119}{139}).
+|\count255| est le seul registre compteur possible pour une utilisation
+sans r\'eservation.
+\example
+\count255 = 17 \number\count255
+|
+\produces
+\count255 = 17 \number\count255
+\endexample
+
+\medskip\noindent
+^^{registre dimension}
+Un registre |\dimen| contient une dimension.
+Les registres de |\dimen0| \`a |\dimen255| sont possibles
+pour un brouillon.
+
+\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
+^^{registres skip}
+Un registre |\skip| contient les dimensions de ressort.
+Diff\'erent d'un registre |\dimen|, il
+enregistre un montant d'\'etirement et de r\'etr\'ecissement autant qu'une taille naturelle.
+Les registres de |\skip0| \`a |\skip9| et |\skip255| peuvent \^etre
+utilis\'es sans r\'eservation.
+
+\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
+^^{registres muskip}
+Un registre |\muskip| est comme un registre |\skip|,
+mais le ressort qu'il contient est toujours mesur\'ee en ^|mu|
+\seeconcept{unit\'e math\'ematique}.
+La taille d'un |mu| d\'epend de la police courante.
+Par exemple, elle est normalement un peu
+plus petite dans un exposant que dans un texte ordinaire.
+Les registres de |\muskip0| \`a |\muskip9| et |\muskip255| peuvent \^etre
+utilis\'es sans r\'eservation.
+
+\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
+^^{registres token}
+Vous pouvez assigner soit un token variable
+(un registre ou un param\`etre) ou une liste de token
+\`a un registre |\toks|.
+Quand vous assignez une liste de token \`a un registre de token,
+les tokens de la liste de token \emph{ne} sont \emph{pas} d\'evelopp\'es.
+
+Une fois que les tokens d'une liste de token ont \'et\'e ins\'er\'es dans un texte
+en utilisant ^|\the|, ils sont
+d\'evelopp\'es comme des tokens qui seraient lus directement.
+Ils ont les codes de cat\'egorie qu'ils ont re\c cus quand \TeX\ les \`a vu
+une premi\`ere fois dans la~\hbox{source}.
+
+\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}
+Cette s\'equence de contr\^ole d\'esigne une \<dimen> qui est la
+plus grande dimension acceptable par \TeX\ (environ 4,50 m\`etres).
+Ce n'est pas une vraie commande parce qu'elle ne peut appara\^\i tre
+que comme partie d'un argument d'une autre commande.
+\example
+\maxdepth = \maxdimen % Remove restrictions on \maxdepth.
+|
+\endexample
+\enddesc
+
+\see |\advance| (\xref\advance), |\multiply|,
+|\divide| (\xref\divide), |\set!-box|, |\box| (\xref\box).
+
+%==========================================================================
+\subsection {Nommer et r\'eserver des registres, etc.}
+
+\begindesc
+\bix^^{registres//r\'eserver}
+\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
+Ces commandes
+r\'eservent et nomment une entit\'e du type indiqu\'e~:
+\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|,
+et |\new!-box| r\'eservent chacun un \minref{registre} du type indiqu\'e.
+}
+^^{registres count//r\'eserv\'es par \b\tt\\newcount\e}
+^^{registres de dimension//r\'eserv\'es par \b\tt\\newdimen\e}
+^^{registres skip//r\'eserv\'es par \b\tt\\newskip\e}
+^^{registres muskip//r\'eserv\'es par \b\tt\\newmuskip\e}
+^^{registres token//r\'eserv\'es par \b\tt\\newtoks\e}
+^^{registres de \boite//r\'eserv\'es par \b\tt\\newbox\e}
+\li |\newread| et |\newwrite| r\'eservent un flot d'entr\'ee et
+de sortie \minrefs{input stream}\minrefs{output stream}
+respectivement.
+^^{flots d'entr\'ee//r\'eserv\'es par \b\tt\\newread\e}
+^^{flots de sortie//r\'eserv\'es par \b\tt\\newwrite\e}
+\li |\newfam| r\'eserve une \minref{famille} de police math\'ematique.
+^^{famille//r\'eserv\'ee par \b\tt\\newfam\e}
+\li |\newinsert| r\'eserve un caract\`ere d'insertion.
+(R\'eserver un caract\`ere d'insertion entra\^\i ne r\'eserver plusieurs registres diff\'erents.)
+^^{insertions//num\'eros r\'eserv\'es par \b\tt\\newinsert\e}
+\li |\newlanguage| r\'eserve un jeu de motifs de c\'esure.
+\endulist
+Vous devez utiliser ces commandes \`a chaque fois que vous avez besoin d'une
+de ces entit\'es, dans une r\'egion tr\`es locale,
+pour \'eviter des conflits de num\'erotation.
+
+Il y a une diff\'erence importante entre ces commandes~:
+\ulist
+\li Les s\'equences de contr\^ole d\'efinies par
+|\newcount|, |\newdimen|, |\newskip|, |\newmuskip| et |\newtoks|
+d\'esignent chacune une entit\'e du type appropri\'e.
+Par exemple, apr\`es la commande~:
+\csdisplay
+\newdimen\listdimen
+|
+la s\'equence de contr\^ole |\listdimen| peut \^etre utilis\'ee comme une dimension.
+\li Les s\'equences de contr\^ole d\'efinies par
+|\newbox|, |\newread|, |\new!-write|, |\newfam|, |\newinsert|
+et |\newlanguage| \'evaluent chacune
+le \emph{num\'ero} d'une entit\'e du type appropri\'e.
+Par exemple, apr\`es la commande~:
+\csdisplay
+\newbox\figbox
+|
+La s\'equence de contr\^ole |\figbox| doit \^etre utilis\'ee en conjonction avec
+une commande de type |\box|, par exemple~:
+\csdisplay
+\setbox\figbox = \vbox{!dots}
+|
+\endulist
+\enddesc
+
+\begindesc
+\cts countdef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\cts dimendef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\cts skipdef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\cts muskipdef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\cts toksdef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\explain
+Ces commandes d\'efinissent \<s\'equence de contr\^ole> pour faire r\'ef\'erence au
+\minref{registre} de la cat\'egorie indiqu\'ee dont le num\'ero est \<registre>.
+Normalement vous devez utiliser les commandes du groupe pr\'ec\'edent
+(|\newcount|, etc.) en pr\'ef\'erence \`a ces commandes pour \'eviter
+des conflits de num\'ero. Les commandes du groupe pr\'ec\'edent sont
+d\'efinies en termes de commandes \hbox{de ce groupe}.
+\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^^{registres//r\'eserver}
+
+%==========================================================================
+\subsection {Faire de l'arithm\'etique dans des registres}
+
+\begindesc
+\bix^^{arithm\'etique}
+\bix^^{registres//arithm\'etique dans des}
+%
+\cts advance {\<registre compteur> {\bt by} \<nombre>}
+\aux\cts advance {\<registre dimension> {\bt by} \<dimension>}
+\aux\cts advance {\<registre saut> {\bt by} \<ressort>}
+\aux\cts advance {\<registre muskip> {\bt by} \<muglue>}
+\explain
+Ces commandes ajoutent une quantit\'e compatible a un registre. Pour \<ressort>
+ou \<muglue> les trois composants (valeur naturelle, \'etirement et r\'etr\'ecissement)
+\minrefs{glue} sont ajout\'es.
+Toutes les quantit\'es peuvent \^etre n\'egatives.
+Pour ces calculs
+(et autres assignements en fait), \<ressort> peut \^etre converti en une
+\<dimension> en enlevant l'\'etirement et le r\'etr\'ecissement et une \<dimension>
+peut \^etre convertie en \<nombre> en prenant sa valeur en points d'\'echelle
+\seeconcept{dimension}.
+Vous pouvez omettre le mot |by| dans ces commandes---\TeX\ les comprendra quand
+m\^eme.
+\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 {\<registre> {\bt by} \<nombre>}
+\cts divide {\<registre> {\bt by} \<nombre>}
+\explain
+Ces commandes multiplient et divisent la valeur de \<registre>
+par \<nombre> (qui peut \^etre n\'egatif).
+Le registre peut \^etre un registre ^|\count|, ^|\dimen|, ^|\skip|
+ou ^|\muskip|.
+Pour un registre ^|\skip| ou ^|\muskip| (\xref\skip),
+les trois composantes du \minref{ressort} du registre sont modifi\'es.
+Vous pouvez omettre le mot |by| dans ces commandes---\TeX\ les comprendra quand
+m\^eme.
+
+Vous pouvez aussi obtenir un multiple d'une \<dimension> en la pr\'ec\'edant par un \<nombre>
+\minrefs{number}
+ou une constante d\'ecimale, par exemple,
+|-2.5\dimen2|.
+Vous pouvez aussi utiliser cette notation pour des \<ressort>, mais attention---le r\'esultat
+est une \<dimension>, pas un \<ressort>.
+Ainsi |2\baselineskip| donne une \<dimension> qui est deux fois la taille naturelle
+de |\baselineskip|, sans \'etirement ni r\'etr\'ecissement.
+\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^^{arithm\'etique}
+\eix^^{registres//arithm\'etique dans des}
+\eix^^{registres}
+\enddesc
+
+%==========================================================================
+\section {Terminer l'ex\'ecution}
+
+\begindesc
+^^{fin d'ex\'ecution}
+\easy\ctspecial bye \ctsxrdef{@bye}
+\explain
+Cette commande dit \`a \TeX\ de remplir et produire la derni\`ere page, d'imprimer
+toutes les \minref{insertion}s en suspens et de terminer l'ex\'ecution.
+C'est le moyen usuel de terminer votre fichier source.
+\enddesc
+
+\begindesc
+\cts end {}
+\explain
+Cette commande dit \`a \TeX\ de produire la derni\`ere page et de terminer l'ex\'ecution.
+Elle ne remplit pas la page,
+donc il est pr\'ef\'erable d'utiliser |\bye| plut\^ot que |\end|.
+\enddesc
+
+%==========================================================================
+\section {Entr\'ee et sortie}
+
+%==========================================================================
+\subsection {Op\'erations sur des fichiers d'entr\'ee}
+
+\begindesc
+\bix^^{fichiers}
+\bix^^{fichiers d'entr\'ee}
+\easy\cts input {\<nom de fichier>}
+\explain
+\minrefs{file}\minrefs{file name}
+Cette commande demande \`a \TeX\ de lire son entr\'ee \`a partir du fichier \<nom de fichier>.
+Quand ce fichier est \'epuis\'e, \TeX\ retourne lire \`a partir du source d'entr\'ee
+pr\'ec\'edent. Vous pouvez inclure des fichiers d'entr\'ee sur autant de niveaux que vous voulez
+(dans les limites du raisonnable).
+
+Quand vous saisissez un grand document, c'est souvent une bonne id\'ee de
+structurer votre fichier principal comme une suite de commandes |\input| faisant r\'ef\'erence
+aux parties subsidiaires du document. De cette fa\c con, vous pouvez ex\'ecuter les
+parties individuelles facilement quand vous travaillez sur des \'epreuves. C'est aussi une bonne
+pratique de mettre toutes vos d\'efinitions de \minref{macro} dans un fichier s\'epar\'e et
+appeler ce fichier avec une commande |\input| comme premi\`ere action de votre
+fichier principal.
+
+\TeX\ utilise des r\`egles diff\'erentes pour balayer les noms de fichier que
+pour lire les \minref{token}s en g\'en\'eral (voir \xref{nom de fichier}).
+Si votre impl\'ementation attend des noms de fichier avec extensions (habituellement
+pr\'ec\'ed\'ees par un point), alors \TeX\ procure l'extension par d\'efaut |.tex|.
+\example
+\input macros.tex
+\input chap1 % equivalent to chap1.tex
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts endinput {}
+\explain
+Cette commande dit \`a \TeX\ d'arr\^eter de lire l'entr\'ee du fichier courant
+quand il rencontrera la prochaine fin de ligne.
+\enddesc
+
+\begindesc
+\cts inputlineno {}
+\explain
+Cette commande donne un nombre (pas une cha\^\i ne) donnant le num\'ero de ligne
+de la ligne courante, devant \^etre le num\'ero qui appara\^\i trait dans un message d'erreur
+si une erreur arrive \`a cette endroit.
+\enddesc
+
+\begindesc
+\cts openin {\<nombre> {\bt =} \<nom de fichier>}
+\explain
+Cette commande demande \`a \TeX\ d'ouvrir le fichier nomm\'e \<nom de fichier>
+et de le rendre lisible via le flot d'entr\'ee d\'esign\'e par \<nombre>.
+^^{flots d'entr\'ee//ouverture}
+\<nombre> doit \^etre entre $0$ et $15$.
+Une fois que vous avez ouvert un fichier et l'avez connect\'e \`a un flot d'entr\'ee,
+vous pouvez lire le fichier en utilisant la commande |\read|
+avec le num\'ero du flot d'entr\'ee.
+
+vous pouvez associer plus d'un flot d'entr\'ee avec le m\^eme
+fichier. vous pouvez alors lire \`a plusieurs positions diff\'erentes dans
+le fichier, une pour chaque flot d'entr\'ee.
+
+Vous devez allouer les num\'eros de flots pour |\openin| en utilisant
+|\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 {\<nombre>}
+\explain
+Cette commande demande \`a \TeX\ de fermer le \minref{flot d'entr\'ee} num\'erot\'e
+\<nombre>, c'est-\`a-dire,
+clore l'association entre le flot d'entr\'ee et son fichier.
+Le flot d'entr\'ee avec ce num\'ero devient alors disponible pour \^etre utilis\'e avec un
+fichier diff\'erent.
+Vous devez fermer un flot d'entr\'ee une fois que vous avez fini d'utiliser son fichier.
+\example
+\closein\auxfile
+|
+\endexample
+\enddesc
+
+\begindesc%\secondprinting{\vglue-.5\baselineskip\vskip0pt}
+\cts read {\<nombre> {\bt to} \<s\'equence de contr\^ole>}
+\explain
+^^{flots d'entr\'ee//lecture avec \b\tt\\read\e}
+^^{lire un fichier}
+Cette commande demande \`a \TeX\ de lire une ligne du fichier
+associ\'e avec le \minref{flot d'entr\'ee}
+d\'esign\'e par \<nombre> et assigne les tokens de cette ligne \`a
+\<s\'equence de contr\^ole>. La \minref{s\'equence de contr\^ole} devient alors une
+\minref{macro} sans param\`etre. Aucun d\'eveloppement de macro ne prend place
+durant l'op\'eration de lecture. Si la ligne contient des accolades ouvrantes
+non appair\'ees, \TeX\ lira des lignes suppl\'ementaires jusqu'a ce que les accolades
+soient toutes referm\'ees. Si \TeX\ atteint la fin du fichier sans fermer toutes les
+accolades, il se plaindra.
+
+Si \<nombre> est plus grand que $15$ ou n'a pas \'et\'e associ\'e avec un fichier
+en utilisant ^|\openin|, \TeX\ affichera l'incitation `\<s\'equence de contr\^ole> |=|'
+sur votre terminal et attendra que vous saisissiez une ligne d'entr\'ee.
+Il assignera alors la ligne d'entr\'ee \`a \<s\'equence de contr\^ole>.
+Si \<nombre> est inf\'erieur \`a z\'ero, il lira une ligne d'entr\'ee de votre
+terminal mais omettra l'incitation.
+\example
+\read\auxfile to \holder
+% Expanding \holder will produce the line just read.
+|
+\endexample
+\eix^^{fichiers d'entr\'ee}
+\enddesc
+
+%\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+\subsection {Op\'erations sur des fichiers de sortie}
+
+\bix^^{fichiers de sortie}
+\begindesc
+\cts openout {\<nombre> {\bt =} \<nom de fichier>}
+\explain
+^^{flots de sortie//ouverture}
+Cette commande demande \`a \TeX\ d'ouvrir le fichier nomm\'e \<nom de fichier>
+et de le rendre disponible pour l'\'ecriture via le \minref{flux de sortie}
+d\'esign\'e par \<nombre>.
+\<nombre> doit \^etre entre $0$ et $15$.
+Une fois que vous avez ouvert un fichier et l'avez connect\'e \`a un flot de sortie,
+vous pouvez \'ecrire dans le fichier en utilisant la commande |\write|
+avec le num\'ero du flot de sortie.
+
+Un |\openout| g\'en\`ere un \'el\'ement extraordinaire qui devient une partie d'une bo\^\i te.
+Le |\openout| ne prend pas effet avant que \TeX\ n'envoit cette bo\^\i te
+dans le \dvifile,
+\`a moins que vous ayez fait pr\'ec\'eder |\openout| de ^|\immediate|.
+
+\TeX\ ne se plaindra pas si vous associez plus d'un flux de sortie avec le
+m\^eme fichier, mais vous aurez un sacr\'e bazar dans le fichier si vous essayez~!
+
+Vous devez allouer des num\'eros de flux pour |\openout| en utilisant
+|\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 {\<nombre>}
+\explain
+^^{flots de sortie//fermeture}
+Cette commande demande \`a \TeX\ de fermer le \minref{flot de sortie} num\'erot\'e
+\<nombre>. c'est-\`a-dire,
+cesser l'association entre le flot de sortie et son fichier.
+Le flot de sortie avec ce num\'ero devient alors disponible pour \^etre utilis\'e avec
+un fichier diff\'erent.
+Vous devez fermer un flot de sortie une fois que vous avez fini d'utiliser son fichier.
+
+Un |\closeout| g\'en\`ere un \'el\'ement extraordinaire qui devient une partie d'une bo\^\i te.
+Le |\closeout| ne prend pas effet avant que \TeX\ n'envoit pas cette bo\^\i te
+dans le \dvifile,
+\`a moins que vous ayez fait pr\'ec\'eder |\closeout| de ^|\immediate|.
+\example
+\closeout\auxfile
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts write {\<nombre> \rqbraces{\<liste de token>}}
+\explain
+^^{flots de sortie//\'ecriture}
+^^{\ecrire\ un fichier}
+Cette commande demande \`a \TeX\ d'\'ecrire \<liste de token> dans le fichier
+associ\'e avec le \minref{flot de sortie}
+d\'esign\'e par \<nombre>.
+Il g\'en\`ere un \'el\'ement extraordinaire qui devient une partie d'une bo\^\i te.
+L'\'ecriture actuelle ne prend pas de place tant que \TeX\ n'envoie cette bo\^\i te
+dans le \dvifile,
+\`a moins que vous pr\'ec\'ediez le |\write| par ^|\immediate|.
+
+Pour un |\write| qui n'est pas imm\'ediat, \TeX\ ne d\'eveloppe pas de macros de
+\<liste de token> tant que la liste de token n'est pas \'ecrite dans le fichier.
+Les d\'eveloppements de macro suivent les m\^emes r\`egles que |\edef| (\xref\edef).
+En particulier, toute s\'equence de contr\^ole qui n'est pas le
+nom d'une macro est \'ecrite comme un
+^|\escapechar| suivi par le nom de la s\'equence de contr\^ole
+et un espace. tous les tokens `|#|'
+de \<liste de token> sont doubl\'es, c'est-\`a-dire, \'ecrits comme `|##|'.
+
+Si \<nombre> n'est pas dans la fourchette de $0$ \`a $15$, \TeX\ \'ecrit
+\<liste de token> dans le fichier log.
+^^{fichier log//\'ecrit par \b\tt\\write\e}
+Si \<nombre> est sup\'erieur \`a $15$ ou n'est pas associ\'e avec un flot de
+sortie, \TeX\ \'ecrit aussi \<liste de token> sur le 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
+Cette commande doit pr\'ec\'eder un |\openout|, un |\closeout| ou un |\write|.
+^^|\write//avec {\tt\\immediate}|
+^^|\openout//avec {\tt\\immediate}|
+^^|\closeout//avec {\tt\\immediate}|
+Elle demande \`a \TeX\ d'ex\'ecuter l'op\'eration de fichier sp\'ecifi\'ee sans d\'elai.
+\example
+\immediate\write 16{I'm stuck!!}
+% has the same effect as \message
+|
+\endexample\enddesc
+
+\begindesc
+\cts special {\rqbraces{\<liste de token>}}
+\explain
+Cette commande demande \`a \TeX\
+d'\'ecrire \<liste de token> directement dans le \dvifile\ quand il enverra
+une page.
+Une utilisation typique de |\special| sera de dire au driver d'impression d'incorporer
+le contenu d'un fichier graphique nomm\'e dans la page de sortie.
+^^{drivers de p\'eriph\'erique//instructions par \b\tt\\special\e}
+La commande |\special| produit un \'el\'ement extraordinaire qui associe
+\<liste de token> avec une position particuli\`ere sur la page, plus pr\'ecis\'ement,
+la position qu'une bo\^\i te de taille nulle aurait eu si un telle bo\^\i te
+serait apparue \`a la place de la commande |\special|.
+Toute utilisation que vous devez faire de |\special| d\'epend strictement des
+^{drivers d'impression} que vous avez \`a votre disposition.
+\example
+\special{graphic expic}
+% Display the graphics file `expic' here.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts newlinechar {\param{nombre}}
+\explain
+Ce param\`etre contient un caract\`ere qui indique une nouvelle ligne sur la
+sortie. Quand \TeX\ rencontre ce caract\`ere
+en lisant l'argument d'une commande
+|\write|, |\message| ou
+|\errmessage|, il d\'ebute une nouvelle ligne.
+Si |\newlinechar| n'est pas dans la fourchette $0$--$255$,
+Il n'y a aucun caract\`ere indiquant
+une nouvelle ligne en sortie.
+\PlainTeX\ met |\newlinechar| \`a $-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^^{fichiers}
+\eix^^{fichiers de sortie}
+
+%==========================================================================
+\subsection {Interpr\'eter des caract\`eres entr\'es}
+
+\begindesc
+\cts catcode {\<charcode> \tblentry{nombre}}
+\explain
+^^{codes de cat\'egorie//en table de \b\tt\\catcode\e}
+Cette entr\'ee de table contient le \minref{code de cat\'egorie} du caract\`ere
+dont le code \ascii\ est \<charcode>.
+Les codes de cat\'egorie sont list\'es dans la \xrefpg{catcodes}.
+En changeant le code de cat\'egorie d'un caract\`ere vous pouvez demande \`a \TeX\ de traiter
+ce caract\`ere diff\'eremment.
+\example
+\catcode `\[ = 1 \catcode `\] = 2
+% Make [ and ] act like left and right braces.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts active {}
+\explain
+Cette commande contient le
+code de cat\'egorie pour un caract\`ere actif, soit, le nombre $13$.
+\example
+\catcode `\@ = \active % Make @ an active character.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts mathcode {\<charcode> \tblentry{nombre}}
+\explain
+Cette entr\'ee de table contient le \minref{mathcode} du caract\`ere
+dont le code \ascii\ est \<charcode> \seeconcept{mathcode}.
+Le mathcode sp\'ecifie l'interpr\'etation du caract\`ere en mode math\'ematique.
+\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
+^^{codes d\'elimiteurs}
+Cette entr\'ee de table sp\'ecifie le code \minref{delimiter} pour le caract\`ere entr\'ee
+dont le code \ascii\ est \<charcode>.
+Le code d\'elimiteur dit \`a \TeX\ comment trouver le meilleur caract\`ere de sortie utiliser
+pour composer le caract\`ere d'entr\'ee indiqu\'e comme d\'elimiteur.
+
+\<nombre> est normalement \'ecrit en notation hexad\'ecimale.
+Supposez que \<nombre> soit le nombre hexad\'ecimal $s_1s_2s_3\,
+l_1l_2l_3$. Alors, quand le caract\`ere est utilis\'e comme un d\'elimiteur,
+\TeX\ prend le caract\`ere ayant une petite variante
+$s_1s_2s_3$ et une grande variante $l_1l_2l_3$. Ici $s_1s_2s_3$ indique
+le caract\`ere math\'ematique trouv\'e en position $s_2s_3$ de la famille $s_1$ et
+de m\^eme pour $l_1l_2l_3$. C'est la m\^eme convention que celle
+utilis\'ee pour ^|\mathcode| (\xref \mathcode),
+sauf que |\mathcode| sp\'ecifie aussi une classe.
+\example
+\delcode `( = "028300 % As in plain TeX.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts endlinechar {\param{nombre}}
+\explain
+Ce param\`etre
+contient le code de caract\`ere pour le caract\`ere que
+\TeX\ attend \`a la fin de chaque ligne d'entr\'ee.
+^^{ligne d'entr\'ee}
+Une valeur qui ne serait pas dans le fourchette $0$--$255$
+indique qu'aucun caract\`ere ne doit \^etre attendu.
+\PlainTeX\ laisse |\end!-line!-char| \`a
+|`\^^M| (le code {\ascii} pour \asciichar{return}).
+\enddesc
+
+\begindesc
+\cts ignorespaces {}
+\explain
+Cette commande demande \`a \TeX\ de lire et de d\'evelopper des tokens jusqu'\`a ce qu'il en trouve
+un qui ne soit pas un \minref{token} espace, ignorant tous les tokens espace
+qu'il trouve autrement.
+|\ignorespaces| est souvent pratique \`a la fin d'une \minref{macro} comme un moyen
+de rendre la macro insensible \`a tout espace ou fin de ligne
+qui peut suivre son propre appel.
+(Une ligne vide apr\`es |\ignorespaces| continue \`a produire un token |\par|,
+de tout fa\c con.)
+\example
+\def\aa#1{yes #1\ignorespaces}
+\aa{may}
+be
+|
+\produces
+\def\aa#1{yes #1\ignorespaces}
+\aa{may}
+be
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Contr\^oler l'interaction avec \TeX}
+
+\begindesc
+\bix^^{contr\^oler \TeX}
+\bix^^{ex\'ecuter \TeX}
+\cts errorstopmode {}
+\explain
+Cette commande demande \`a \TeX\
+de stopper pour une interaction \`a chaque fois qu'il trouve une erreur.
+C'est le mode op\'eratoire normal.
+\enddesc
+
+\begindesc
+\cts scrollmode {}
+\explain
+Cette commande demande \`a \TeX\
+de ne pas stopper pour le plupart des erreurs,
+mais de continuer \`a afficher les messages d'erreur sur votre terminal.
+Saisir `|S|' ou `|s|' en r\'eponse \`a un message d'erreur vous met
+en mode scroll.
+\enddesc
+
+\begindesc
+\cts nonstopmode {}
+\explain
+Cette commande demande \`a \TeX\
+de ne pas stopper pour des erreurs, m\^eme celles r\'eclamant des fichiers qu'il
+ne peut trouver, mais de continuer \`a afficher les messages d'erreur sur votre terminal.
+Saisir `|R|' ou `|r|' en r\'eponse \`a un message d'erreur vous met
+en mode nonstop.
+\enddesc
+
+\begindesc
+\cts batchmode {}
+\explain
+Cette commande demande \`a \TeX\
+de ne pas stopper pour des erreurs et de supprimer toute sortie sur votre terminal.
+Saisir `|Q|' ou `|q|' en r\'eponse \`a un message d'erreur vous met
+en mode batch.
+\enddesc
+
+\begindesc
+\cts pausing {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero, \TeX\ s'arr\^etera
+\`a chaque ligne d'entr\'ee pour vous donner une opportunit\'e de
+la remplacer par une ligne diff\'erente. Si vous saisissez une modification,
+\TeX\ utilisera cette ligne au lieu de l'originale~; si vous r\'epondez
+par \asciichar{return}, \TeX\ utilisera l'originale.
+
+Mettre |\pausing| \`a $1$ peut \^etre pratique comme moyen de patcher un document quand
+\TeX\ l'ex\'ecute. Par exemple,
+vous pouvez utiliser cette facilit\'e pour ins\'erer des commandes ^|\show| (voir plus loin).
+\eix^^{ex\'ecuter \TeX}
+\eix^^{contr\^oler \TeX}
+\enddesc
+
+%==========================================================================
+\section {Aide au diagnostic}
+
+\subsection{Afficher des donn\'ees internes}
+
+\begindesc
+\bix^^{tracer}
+\bix^^{debugger}
+\bix^^{aides au diagnostique}
+\cts show {\<token>}
+\cts showthe {\<argument>}
+\cts showbox {\<nombre>}
+\cts showlists {}
+\explain
+Ces commandes enregistrent de l'information dans le fichier log de votre ex\'ecution \TeX~:
+\ulist
+\li |\show| enregistre la signification de \<token>.\minrefs{token}
+^^{tokens//affich\'es par \b\tt\\show\e}
+\li |\showthe| enregistre
+ quels tokens seront produit par
+|\the| \<arg\-u\-ment> (voir \xref \the).
+\li |\showbox| enregistre le contenu du \minref{registre} de la \minref{bo\^\i te}
+num\'erot\'e \<nom\-bre>.
+Le nombre de
+points affich\'es dans la log indique le nombre de
+niveaux d'inclusion de bo\^\i tes internes.
+\li |\showlists| enregistre
+le contenu de chaque liste que \TeX\ est en train de construire.
+(les listes sont empil\'ees les unes sur les autres.)
+Voir les \knuth{pages~88--89}{103} pour plus d'information sur l'interpr\'etation
+de la sortie de |\showlists|.
+\endulist
+Pour |\show| et |\showthe|, \TeX\ affiche aussi l'information sur votre
+^{terminal}.
+Pour |\showbox| et |\showlists|, \TeX\ n'affiche l'information sur votre
+terminal que
+si ^|\tracingonline| (\xref \tracingonline) est sup\'erieur \`a z\'ero~;
+si ^|\tracingonline| est \`a z\'ero ou moins (le cas par d\'efaut),
+l'information n'est pas affich\'ee.
+
+\`A chaque fois que \TeX\ rencontre une commande de type |\show| il
+stoppe pour un interaction. La requ\^ete d'interaction ne doit \emph{pas}
+indiquer une erreur, mais doit vous donner l'opportunit\'e de demander \`a \TeX\ de
+vous montrer autre chose. Si vous ne voulez pas voir autre chose, pressez juste
+\asciichar{return}.
+
+Vous pouvez contr\^oler la quantit\'e de sortie produite par |\showbox| en mettant
+|\show!-box!-breadth| et |\show!-box!-depth| (\xref\showboxbreadth).
+^^|\showboxbreadth| ^^|\showboxdepth|
+Ces param\`etres ont des valeurs par d\'efaut \`a $5$ et $3$ respectivement,
+C'est pourquoi
+juste cinq \'el\'ements apparaissent pour chaque bo\^\i te d\'ecrite
+dans la sortie de log ci-dessous. (Le `|..etc.|' indique des \'el\'ements additionnels
+des bo\^\i tes qui ne sont pas affich\'es.)
+\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{Sp\'ecifier ce qui est trac\'e}
+
+\begindesc
+\cts tracingonline {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ affichera les r\'esultats de la trace
+(en incluant ^|\showbox| et ^|\showlists|)
+sur votre terminal en plus de les enregistrer dans le fichier log.
+\enddesc
+
+\begindesc
+\cts tracingcommands {\param{nombre}}
+\explain
+Si ce param\`etre est \'egal \`a $1$ ou plus,
+\TeX\ enregistrera dans le fichier log plus de commandes qu'il ex\'ecute.
+Si ^|\tracingonline| est plus grand que z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+composer le premier caract\`ere d'un mot compte comme une commande,
+mais (dans le but de la trace seulement)
+les actions de composition des caract\`eres suivants
+et de toute ponctuation les suivant
+ne compte pas comme des commandes.
+Si |\tracingcommands| est \`a $2$ ou plus,
+\TeX\ enregistrera aussi des commandes qui sont d\'evelopp\'ees
+plut\^ot qu'ex\'ecut\'ees, par exemple, des tests conditionnels et leurs r\'esultats.
+\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{nombre}}
+\explain
+Si ce param\`etre est plus grand que z\'ero,
+\TeX\ enregistrera une indication dans le fichier log \`a chaque fois
+qu'il d\'elaissera un caract\`ere de sortie parce que ce caract\`ere n'existe pas
+dans la police courante.
+Si ^|\tracingonline| est plus grand que z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+\PlainTeX\ le met par d\'efaut \`a $1$ (contrairement aux autres).
+\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{nombre}}
+\explain
+Si ce param\`etre est \`a $1$ ou plus,
+\TeX\ enregistrera dans le fichier log le d\'eveloppement et les arguments
+de toutes les macros qu'il ex\'ecute.
+^^{macros//tracer des}
+Si |\tracingmacros| est \`a $2$ ou plus,
+\TeX\ enregistrera, en plus,
+tout d\'eveloppement de listes de \minref{token} telles que
+|\output| or |\everycr|.
+Si ^|\tracingonline| est plus grand que z\'ero, cette information appara\^\i tra aussi
+sur votre 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{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ enregistrera dans le fichier log le contenu de toutes les bo\^\i tes qu'il
+envoit dans le \dvifile.
+^^{\dvifile//\boite\ enregistr\'e dans le fichier}
+Si ^|\tracingonline| est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+Le nombre de
+points affich\'e dans la log indique le nombre de
+niveaux d'inclusion de bo\^\i tes sur cette ligne.
+Vous pouvez contr\^oler la quantit\'e de trace en fixant
+^|\showboxbreadth| et ^|\showboxdepth| (\xref\showboxbreadth).
+
+mettre |\tracingoutput| \`a $1$ peut \^etre tr\`es pratique quand vous essayez
+de d\'eterminer pourquoi vous obtenez un ^{espace suppl\'ementaire} sur une 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{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ enregistrera dans le fichier log ses calculs sur le co\^ut des
+diff\'erentes coupures de page qu'il essaie.
+^^{coupures de page//tracer}
+Si |\tracing!-online| ^^|\tracingonline|
+est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+\TeX\ produit une ligne de cette sortie
+\`a chaque fois qu'il commence \`a placer une bo\^\i te ou une \minref{insertion}
+sur la liste de page courante, et aussi \`a chaque fois qu'il ex\'ecute une
+point de coupure potentiel pour la page.
+Examiner cette sortie peut \^etre utile quand vous essayez de d\'eterminer
+la cause d'une mauvaise coupure de page.
+Voir les \knuth{pages~112--114}{130--133} pour une illustration et une explication de
+cette sortie.
+
+Certaines distributions de \TeX\ ignorent la valeur de |\tracingpages|
+ainsi elles peuvent s'ex\'ecuter plus rapidement.
+Si vous devez utiliser ce param\`etre, soyez certain d'utiliser une distribution qui
+lui r\'epond.
+\enddesc
+
+\begindesc
+\cts tracingparagraphs {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ enregistrera dans le fichier log ses calculs sur le co\^ut des
+diff\'erentes coupures de ligne qu'il essaie.
+^^{coupures de ligne//tracer}
+Si ^|\tracingonline|
+est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+\TeX\ produit cette sortie quand il atteint la fin de chaque paragraphe.
+Voir les \knuth{pages~98--99}{115--116} pour une illustration et une explication de
+cette sortie.
+
+Certaines distributions de \TeX\ ignorent la valeur de |\tracing!-para!-graphs|
+ainsi elles peuvent s'ex\'ecuter plus rapidement.
+Si vous devez utiliser ce param\`etre, soyez certain d'utiliser une distribution qui
+lui r\'epond.
+\enddesc
+
+\begindesc
+\cts tracingrestores {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ enregistrera dans le fichier log les valeurs qu'il restitue quand il
+rencontre la fin d'un \minref{groupe}.
+Si ^|\tracingonline|
+est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+
+Certaines distributions de \TeX\ ignorent la valeur de |\tracing!-restores|
+ainsi elles peuvent s'ex\'ecuter plus rapidement.
+Si vous devez utiliser ce param\`etre, soyez certain d'utiliser une distribution qui
+lui r\'epond.
+\enddesc
+
+\begindesc
+\cts tracingstats {\param{nombre}}
+\explain
+Si ce param\`etre est \`a $1$ ou plus, \TeX\ incluera
+un rapport sur les ressources qu'il utilise pour ex\'ecuter votre travail
+(voir la \knuth{page~300}{350--351} pour une liste et l'explication de ces ressources).
+Du reste, si |\tracingstats| est \`a $2$ ou plus,
+\TeX\ fera un rapport sur ses utilisations de m\'emoire \`a chaque fois qu'il fera un
+^|\shipout| (\xref \shipout) pour une page.
+Le rapport appara\^\i t \`a la fin du fichier log.
+^^{fichier log//tracer des statistiques dans le}
+Si ^|\tracingonline| est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+Si vous avez des probl\`emes avec \TeX\ d\'epassant une de ses
+capacit\'es, l'information procur\'ee par |\tracingstats| peut vous aider \`a
+mettre le doigt sur la cause de vos difficult\'es.
+
+Certaines distributions de \TeX\ ignorent la valeur de |\tracingstats|
+ainsi elles peuvent s'ex\'ecuter plus rapidement.
+Si vous devez utiliser ce param\`etre, soyez certain d'utiliser une distribution qui
+lui r\'epond.
+
+L'exemple suivant montre un extrait de
+la sortie de trace que vous obtenez sur une distribution
+de \TeX. Elle peut \^etre diff\'erente sur d'autres distributions.
+{\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
+Cette commande demande \`a \TeX\ de
+brancher toutes les formes de trace disponibles.
+Elle met aussi ^|\tracingonline| \`a $1$ pour que la sortie de trace apparaisse
+sur votre terminal.
+\enddesc
+
+\begindesc
+\cts showboxbreadth {\param{nombre}}
+\explain
+Ce param\`etre sp\'ecifie le nombre maximum d'\'el\'ements de liste
+que \TeX\ affiche pour un niveau d'une bo\^\i te quand il produit
+la sortie pour ^|\showbox| ou ^|\tracingoutput|.
+\PlainTeX\ met |\showboxbreadth| \`a $5$.
+\enddesc
+
+\begindesc
+\cts showboxdepth {\param{nombre}}
+\explain
+Ce param\`etre sp\'ecifie le
+niveau de la plus profonde liste que \TeX\ affiche quand
+il produit la sortie pour ^|\showbox| ou ^|\showlists|.
+\PlainTeX\ met |\showboxdepth| \`a $3$.
+\eix^^{tracer}
+\eix^^{debugger}
+\eix^^{aides au diagnostique}
+\enddesc
+
+%==========================================================================
+\subsection {Envoyer des messages}
+
+\begindesc
+\bix^^{messages, envoyer}
+\bix^^{messages d'erreur}
+\cts message {\rqbraces{\<liste de token>}}
+\cts errmessage {\rqbraces{\<liste de token>}}
+\explain
+Cette commande affiche le message donn\'e par \<liste de token> sur votre
+terminal et l'entre aussi dans la log. Toutes les \minref{macro}s du
+message sont d\'evelopp\'ees, mais aucune commande n'est ex\'ecut\'ee. C'est la m\^eme r\`egle
+que \TeX\ utilise pour |\edef| (\xref \edef).
+
+Pour |\errmessage|, \TeX\ fait une pause
+de la m\^eme fa\c con qu'il le ferait pour un de ses propres messages d'erreur
+et affiche les tokens |\errhelp| si vous demandez de l'aide.
+
+Vous pouvez g\'en\'erer des messages multi-ligne en utilisant le caract\`ere ^|\newlinechar|
+(\xref \newlinechar).
+\example
+\message{Starting a new section.}
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts wlog {\rqbraces{\<liste de token>}}
+\explain
+Cette commande \'ecrit \<liste de token> dans le fichier log.
+^^{fichier log//\'ecrire par \b\tt\\wlog\e}
+\minrefs{log file}
+\TeX\ d\'eveloppe \<liste de token> en accord avec les m\^emes r\`egles qu'il utilise
+pour |\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{liste de token}}
+\explain
+Ce param\`etre contient la liste de token que \TeX\ affiche
+quand vous demandez de l'aide en r\'eponse \`a une commande |\errmessage|.
+Nous vous recommandons quand
+vous g\'en\'erez un message d'erreur avec |\errmessage|, de
+mettre |\errhelp| \`a une cha\^\i ne qui d\'ecrit la nature de
+l'erreur et utiliser |\newhelp| pour produire cette cha\^\i ne.
+Vous pouvez utiliser le caract\`ere ^|\newlinechar| pour produire des messages multi-ligne.
+\enddesc
+
+\begindesc
+\ctspecial newhelp \ctsxrdef{@newhelp} {\<s\'equence de contr\^ole>
+ \rqbraces{\<texte d'aide>}}
+\explain
+Cette commande assigne le ^{message d'aide} donn\'e par \<texte d'aide> \`a
+\<s\'equence de contr\^ole>. Il procure un moyen efficace de d\'efinir
+le ^{texte d'aide} qui compl\`ete un message d'erreur.
+Avant d'\'emettre le message d'erreur avec la commande |\errmessage|,
+vous devez assigner \<s\'equence de contr\^ole> \`a ^|\errhelp|. Le texte d'aide
+appara\^\i tra alors si l'utilisateur saisi `|H|'
+ou `|h|' en r\'eponse au message d'erreur.
+\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{nombre}}
+\explain
+Ce param\`etre d\'etermine le nombre de paires de lignes de contexte,
+sans compter la premi\`ere et la derni\`ere, que \TeX\ imprime quand il
+rencontre une erreur. En le mettant \`a $0$ vous pouvez vous d\'ebarrasser de longs
+messages d'erreur.
+Vous pouvez forcer le contexte entier en saisissant quelque chose comme~:
+\csdisplay
+I\errorcontextlines=100\oops
+|
+en r\'eponse \`a une erreur,
+puisque la s\'equence de contr\^ole non d\'efinie |\oops| causera une autre erreur.
+\PlainTeX\ met |\error!-context!-lines| \`a $5$.
+\enddesc
+
+\see |\write| (\xref \write), |\escapechar| (\xref \escapechar).
+\eix^^{messages, envoyer}
+\eix^^{messages d'erreur}
+
+%==========================================================================
+\section {Initialiser \TeX}
+
+\begindesc
+\cts dump {}
+\explain
+Cette commande, qui ne doit pas appara\^\i tre \`a l'int\'erieur d'un groupe, met en
+r\'eserve le contenu de la m\'emoire de \TeX\ dans un ^{fichier format} (\xref{fichier format}).
+En utilisant ^|virtex|, une forme sp\'eciale ``vierge'' de \TeX,
+vous pouvez alors recharger le fichier format \`a grande vitesse et
+continuer dans le m\^eme \'etat que \TeX\ \'etait au moment du dump.
+|\dump| termine aussi une ex\'ecution. Puisque |\dump| ne peut \^etre utilis\'e
+qu'avec ^|initex|, pas en format de production de \TeX, elle n'est utile qu'aux
+gens qui installent \TeX.
+\enddesc
+
+\begindesc
+\cts everyjob {\param{liste de token}}
+\explain
+Ce param\`etre contient une liste de \minref{token} que \TeX\ d\'eveloppe au
+d\'ebut de chaque ex\'ecution. Parce qu'un assignement \`a |\everyjob| ne peut affecter
+l'ex\'ecution courante (au moment o\`u vous avez fait l'assignement, c'est d\'ej\`a trop
+tard), elle n'est utile qu'ux gens qui pr\'eparent des fichiers de format.
+\enddesc
+
+
+\enddescriptions \endchapter \byebye
+
diff --git a/info/impatient/fr/findex.tex b/info/impatient/fr/findex.tex
new file mode 100644
index 0000000000..af5c31d469
--- /dev/null
+++ b/info/impatient/fr/findex.tex
@@ -0,0 +1,37 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter{Index}
+
+\par
+\kern-\baselineskip
+
+\noindent Dans les entr\'ees de cet index, un num\'ero de page en italique indique une entr\'ee principale ou une d\'efinition.
+
+\par
+% Let's try to collect indexing cross-references here.
+%
+\idxsee{marques diacritiques}{accents}
+\idxsee{tracer des lignes}{filets}
+\idxsee{drivers}{drivers de p\'eriph\'erique}
+\idxsee{yeux}{\anatomy}
+\idxsee{langues \'etrang\`eres}{langues europ\'eennes}
+\idxsee{intestin}{\anatomy}
+\idxsee{bouche}{\anatomy}
+\idxsee{paragraphes//indenter}{indentation}
+%\idxsee{macros r\'ecursives}{macros, r\'ecursive}
+\idxsee{estomac}{\anatomy}
+\idxsee{tables}{alignements}
+\beginindex
+
+\let\+ = 0 % This can't occur in a macro...
+
+\input fbook.sdx
+
+\endindex
+
+\endchapter
+\byebye
diff --git a/info/impatient/fr/fmacros.tex b/info/impatient/fr/fmacros.tex
new file mode 100644
index 0000000000..04740d0e3d
--- /dev/null
+++ b/info/impatient/fr/fmacros.tex
@@ -0,0 +1,2345 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% 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.
+%\language2
+% An embedded file should end with \byebye.
+%
+%%%%%%%%%%%%%%% COULEUR %%%%%%%%%%%%%%%%%%%%%%
+\input ifpdf.sty
+\ifpdf
+\def\Red{\pdfliteral{0 1 1 0 k}}
+\def\Blue{\pdfliteral{1 1 0 0 k}}
+\def\Green{\pdfliteral{1 0 1 0 k}}
+\def\RawSienna{\pdfliteral{0 0.72 1 0.45 k}}
+\def\Black{\pdfliteral{0 0 0 1 k}}
+\else
+\def\Red{\special{color rgb 1. 0 0}}
+\def\Blue{\special{color rgb 0 0 1.}}
+\def\Green{\special{color rgb 0 1. 0}}
+\def\RawSienna{\special{color rgb 0.63 0.32 0.18}}
+\def\Black{\special{color rgb 0 0 0}}
+\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\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".
+\totalwidth = 18.7325cm % 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
+ \dimen0 = 21cm
+ \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 21cm
+ \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
+\totalheight = 24.39cm % 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
+ \dimen0 = 29cm
+ \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\ pour l'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 = 1.2pt % line thickness
+\newdimen\edgespacing \edgespacing = .0pt % 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\Black}%
+ \advance\chapterno by 1
+ %
+ \setbox0 = \hbox{\Blue\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{Le chapitre se termine sur une page paire.}%
+ \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\Red #1\Black}}%
+ %
+ \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 \RawSienna #1\Black}}%
+ \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
+ \ifbix B\fi\ifeix E\fi\ifpix P\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 \Blue\chaptername\Black}%
+ }%
+ \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{Exemple #1~:\quad \bi#2}}%
+ \vglue .5\baselineskip
+ \count255 = \pageno
+ \xdef\examplepage{\number\count255}%
+ \markinfo{Exemple #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{voir \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%\vfill\eject
+ %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 \RawSienna\bf #1.\Black\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{Liste des 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 Exemple~:}%
+ \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 produit\ifexamplelog\ dans la 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
+ Voir aussi~: %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}{param\`etre}}
+\def\tblentry#1{\printparam{#1}{\'el\'ement de table}}
+\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\ic{\quad}
+ \def\see##1{.\quad{\it Voir} ##1 }
+ \def\seealso##1{\hfil\break{\it Voir aussi} ##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{Anato\-mie de \TeX}
+\def\ascii{{\ninerm ASCII}}
+\def\asciichar#1{$\langle \rm #1\rangle$}
+\def\bblfile{fichier~{\tt .bbl}}
+\def\bblfiles{fichiers~{\tt .bbl}}
+\def\bibfile{fichier~{\tt .bib}}
+\def\bibfiles{fichiers~{\tt .bib}}
+\def\boite{bo\^\i te}
+\def\boites{bo\^\i tes}
+\def\bstfile{fichier~{\tt .bst}}
+\def\bstfiles{fichiers~{\tt .bst}}
+\def\didotpt{point did\^ot}
+\def\dvifile{fi\-chier~{\tt .dvi}}
+\def\dvifiles{fi\-chiers~{\tt .dvi}}
+\def\ecrire{\'ecrire} % pour le tri de l'index
+\def\editeur{\'editeur de texte} % pour le tri de l'index
+\def\elements{\'el\'ements} % pour le tri de l'index
+\def\elementextra{\'el\'ement extraordinaire} % pour le tri de l'index
+\def\enumerations{\'enum\'erations} % pour le tri de l'index
+\def\equations{\'equations} % pour le tri de l'index
+\def\etirement{\'etirement} % pour le tri de l'index
+\def\em{\thinspace {\rm em}}
+\def\emph#1{{\it #1}\itcorr} % Emphasize.
+\def\ftp{{\tt ftp}}
+\def\gffile{fichier~{\tt .gf}}
+\def\gffiles{fichiers~{\tt .gf}}
+\def\hand{{\handfont +}}
+\def\ifatest{{\tt \\if} test}
+\chardef\inches = "7D
+\def\knuth#1#2{#1 de \texbook\ et
+\def\tempa{#2}% Merci Joss !
+\ifx\tempa\empty\else
+#2
+\fi
+de la tra\-duc\-tion fran\-\c caise}
+\def\logfile{fichier~{\tt .log}}
+\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{nou\-veau \TeX}
+\def\oesophage{\oe sophage}
+\def\p{p.\thinspace}
+\def\pkfile{fichier~{\tt .pk}}
+\def\pkfiles{fichiers~{\tt .pk}}
+\def\plainTeX{plain \TeX}
+\def\PlainTeX{Plain \TeX}
+\def\pp{p\p}
+\def\pt{\thinspace {\rm pt}}
+\def\pxlfile{fichier~{\tt .pxl}}
+\def\pxlfiles{fichiers~{\tt .pxl}}
+\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{fichier~{\tt .tfm}}
+\def\tfmfiles{fichiers~{\tt .tfm}}
+\def\thisbook{{\sl\TeX\ pour l'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{Chapitre `#1' indéfini.}%
+ \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{(voir ``{\rm #1}'', \xref{#1})}
+
+%\def\seeheadcon#1#2{(voir ``{\rm #1}'', \xref{#2})}
+
+
+
+
+% 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.
+\def\np{\vfill\eject} \ No newline at end of file
diff --git a/info/impatient/fr/fmath.tex b/info/impatient/fr/fmath.tex
new file mode 100644
index 0000000000..59089d532d
--- /dev/null
+++ b/info/impatient/fr/fmath.tex
@@ -0,0 +1,2176 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter {Commandes pour \linebreak composer des \linebreak formules math\'ematiques}
+
+\bix^^{math\'ematiques}
+\chapterdef{math}
+
+Cette section couvre les commandes pour construire des formules math\'e\-matiques.
+Pour une explication des conventions utilis\'ees dans cette section,
+voir \headcit{Description des commandes}{cmddesc}.
+
+\begindescriptions
+%==========================================================================
+\section {Parties simples de formules}
+
+%==========================================================================
+\subsection {Lettres grecques}
+
+\begindesc
+\bix^^{lettres grecques}
+\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
+Ces commandes produisent les lettres grecques appropri\'ees aux math\'e\-matiques.
+Vous ne pouvez les utiliser que dans une formule math\'ema\-tique, ainsi si vous
+avez besoin d'une lettre grecque dans du texte ordinaire, vous devez l'englober
+entre des signes dollar (|$|). \TeX\ n'a pas de commandes pour des lettres
+grecques qui ressemblent \`a leurs contre-parties romaines, puisque vous pouvez
+les obtenir en employant ces contre-parties romaines. Par exemple, vous pouvez
+obtenir un ^{omicron} minuscule dans une formule en \'ecrivant la lettre `o',
+c'est-\`a-dire, `|{\rm o}|' ou un ^{beta} majuscule (`B') en \'ecrivant `|{\rm B}|'.
+
+Ne confondez pas les lettres suivantes~:
+\ulist \compact
+\li |\upsilon| (`$\upsilon$'), |{\rm v}| (`v'), et |\nu| (`$\nu$').
+\li |\varsigma| (`$\varsigma$') and |\zeta| (`$\zeta$').
+\endulist
+
+Vous pouvez obtenir des lettres grecques capitales inclin\'ees en utilisant
+la \minref{police} math\'ematique italique (|\mit|).
+
+\TeX \ traite les lettres grecques comme des symboles ordinaires quand
+il calcule combien d'espace mettre autour d'eux.
+
+\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^^{lettres grecques}
+\enddesc
+
+%==========================================================================
+\subsection {Divers Symboles math\'ematiques ordinaires}
+
+\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
+^^{symboles musicaux} ^^{couleurs de carte \`a jouer}
+Ces commandes produisent des symboles vari\'es. On les appelle
+``^{symboles ordinaires}'' pour les distinguer des autres classes de
+symboles comme les relations. Vous ne pouvez utiliser un
+symbole ordinaire que dans une formule math\'ematique,
+donc si vous avez besoin d'un symbole ordinaire dans du texte ordinaire
+vous devez l'englober entre des signes dollar (|$|).
+
+Les commandes |\imath| et |\jmath| sont utiles quand vous devez mettre un
+accent sur un `$i$' ou un `$j$'.
+
+Une apostrophe (|'|) est un raccourci pour \'ecrire un |\prime| en exposant. (La
+commande |\prime| de son c\^ot\'e, g\'en\`ere un gros prime laid.)
+
+Les commandes |\!|| et ^|\Vert| sont synonymes, comme
+le sont les commandes ^|\neg| et ^|\lnot|.
+\margin{explanation of {\tt\\vert} added}
+La commande |\vert| produit le m\^eme r\'esultat que `|!||'.
+\indexchar |
+
+Les symboles produits par |\backslash|, |\vert| et |\Vert|
+sont des \minref{d\'eli\-mi\-teur}s. ces symboles peuvent \^etre produit en grandes taille
+en utilisant ^|\bigm| etc.\ (\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 {Op\'erations binaires}
+
+\begindesc
+\bix^^{op\'erations}
+\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
+Ces commandes produisent les symboles pour diff\'erentes op\'erations binaires.
+Les op\'erations binaires sont une des \minref{classe}s des symboles math\'e\-matiques de \TeX.
+\TeX\ met diff\'erents montants d'espace autour de dif\-f\'e\-rentes classes de symboles
+math\'ematiques. Quand \TeX\ a besoin de couper une ligne de texte dans une formule math\'ematique,
+\minrefs{line break} il devra placer la coupure apr\`es une op\'eration binaire---mais seulement si
+l'op\'eration est \`a un niveau sup\'erieur \`a la formule, c'est-\`a-dire, non incluse dans un groupe.
+
+En plus de ces commandes, \TeX\ traite \'egalement `|+|' et `|-|'
+en tant qu'op\'erations binaires. Il consid\`ere `|/|' comme un symbole ordinaire,
+en d\'epit du fait que, math\'ematiquement, ce soit une op\'eration binaire,
+parce qu'il semble mieux avec moins d'espace autour de lui.
+
+\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
+La commande |\*| indique un symbole de multiplication optionnel
+($\times$), qui est une op\'eration binaire. Ce symbole de multiplication
+agit comme une c\'esure optionnelle quand il appara\^\i t dans une formule dans un
+texte\minrefs{texte math\'ematique}. Cela \'etant, \TeX\ ne composera le symbole |\times|
+\emph{que} si la formule doit \^etre coup\'ee en ce point.
+Il n'y a aucun point en utilisant |\*| dans des formules affich\'ees \minrefs{math\'ematique
+affich\'ee} car \TeX\ ne coupe jamais de formules affich\'ees de lui-m\^eme.
+
+\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^^{op\'erations}
+\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
+Ces commandes produisent des symboles pour diff\'erentes relations.
+Les relations sont une des \minref{classe}s des symboles math\'ematiques.
+\TeX\ met diff\'erents montants d'espace autour de diff\'erentes classes de symboles
+math\'ematiques.
+Quand \TeX\ a besoin de couper une ligne de texte dans une formule math\'ematique,
+\minrefs{line break} il devra placer la coupure apr\`es une relation---mais seulement si
+l'op\'eration est \`a un niveau sup\'erieur \`a la formule, c'est-\`a-dire, non incluse dans un groupe.
+
+En plus des commandes list\'ees ici, \TeX\ traite `^|=|' et les
+commandes ``fl\`eche'' (\xref{arrows}) comme des relations.
+
+Certaines relations ont plus d'une commande que vous pouvez utiliser
+pour les produire~:
+\ulist \compact
+\li `$\ge$' (|\ge| et |\geq|).
+\li `$\le$' (|\le| et |\leq|).
+\li `$\ne$' (|\ne|, |\neq| et |\not=|).
+\li `$\ni$' (|\ni| et |\owns|).
+\endulist
+
+\xrdef{\not}
+Vous pouvez produire des relations n\'egatives en les pr\'efixant avec |\not|, comme cela~:
+
+\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 {D\'elimiteurs gauches et droits}
+
+\begindesc
+\bix^^{d\'elimiteurs}
+%
+\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
+Ces commandes produisent des \minref{d\'elimiteur}s gauches et droits.
+Les math\'e\-maticiens utilisent les d\'elimiteurs pour indiquer les fronti\`eres entre les parties
+d'une formule. Les d\'elimiteurs gauches sont aussi appel\'es ``^{ouvrant}s'' et
+les d\'elimiteurs droits sont aussi appel\'es ``^{fermant}s''. Ouvrants et Fermants
+sont deux des \minref{classe}s de symboles math\'ematiques de \TeX. \TeX\ met
+diff\'erents montants d'espace autour des diff\'erentes \minref{classe}s de symboles math\'ematiques.
+Vous devriez vous attendre \`a ce que l'espacement que \TeX\ met autour des ouvrants et
+des fermants soit sym\'etrique, mais en fait, il ne l'est pas.
+
+Certains d\'elimiteurs gauches et droits ont plus d'une commande utilisable pour les produire~:
+
+\ulist\compact
+\li `$\{$' (|\lbrace| and |\{|)
+\li `$\}$' (|\rbrace| and |\}|)
+\li `$[$' (|\lbrack| and `|[|')
+\li `$]$' (|\rbrack| and `|]|')
+\endulist
+\noindent vous pouvez aussi utiliser les caract\`eres crochets gauches et droits
+(sous toutes ses formes) en dehors du mode math\'ematique.
+
+En plus de ces commandes, \TeX\ traite `|(|' comme un d\'elimiteur gauche
+et `|)|' comme un d\'elimiteur droit.
+
+Vous pouvez laisser \TeX\
+choisir la taille d'un d\'elimiteur en utilisant |\left| et |\right| (\xref\left).
+Alternativement,
+vous pouvez obtenir un d\'eli\-miteur d'une taille sp\'ecifique en utilisant une des commandes |\big|$x$
+(voir |\big| et al., \xref{\big}).
+
+\example
+The set $\{\,x \mid x>0\,\}$ is empty.
+|
+\produces
+The set $\{\,x \mid x>0\,\}$ is empty.
+
+\eix^^{d\'elimiteurs}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Fl\`eches}
+
+\begindesc
+\bix^^{fl\`eches}
+\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
+Ces commandes procurent des fl\`eches de diff\'erentes sortes. Elles
+sont class\'ees parmi les relations (\xref{relations}).
+Les fl\`eches verticales de la liste sont aussi des \minref{d\'elimiteur}s, donc vous pouvez les rendre
+plus grandes en utilisant |\big| et al.\ (\xref \big).
+
+La commande |\iff| diff\`ere de |\Longleftrightarrow| parce qu'elle
+produit un espace suppl\'ementaire \`a gauche et \`a droite de la fl\`eche.
+
+Vous pouvez placer des symboles ou d'autres l\'egendes au dessus des fl\`eche gauches et droite
+avec |\buildrel| (\xref \buildrel).
+
+\example
+$$f(x)\mapsto f(y) \iff x \mapsto y$$
+|
+\dproduces
+$$f(x)\mapsto f(y) \iff x \mapsto y$$
+
+\eix^^{fl\`eches}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Fonctions math\'ematiques nomm\'ees}
+
+\begindesc
+\xrdef{namedfns}
+\bix^^{fonctions, noms de}
+{\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
+Ces commandes mettent les noms de diff\'erentes fonctions math\'ematiques
+en type romain, comme \`a l'accoutum\'ee.
+Si vous appliquez un exposant ou un indice sur une de ces commandes,
+\TeX\ le composera dans la plupart des cas \`a l'endroit usuel.
+En style d'affichage, \TeX\ compose les exposants et les indices
+de |\det|, |\gcd|, |\inf|, |\lim|, |\liminf|,
+|\limsup|, |\max|, |\min|, |\Pr| et |\sup|
+comme s'ils \'etaient des limites,
+c'est-\`a-dire, directement au-dessus ou directement au-dessous du nom de la fonction.
+
+\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
+Cette commande produit une op\'eration binaire pour indiquer un ^{modulo}
+dans une formule.
+\example
+$$x = (y+1) \bmod 2$$
+|
+\dproduces
+$$x = (y+1) \bmod 2$$
+\endexample
+\enddesc
+
+\begindesc
+\cts pmod {}
+\explain
+Cette commande procure une notation pour indiquer un ^{modulo} entre parenth\`eses
+\`a la fin d'une formule.
+\example
+$$x \equiv y+1 \pmod 2$$
+|
+\dproduces
+$$x \equiv y+1 \pmod 2$$
+
+\eix^^{fonctions, noms de}
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Grands op\'erateurs}
+
+\begindesc
+\bix^^{op\'erateurs//grands}
+\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
+Ces commandes produisent diff\'erents grands symboles d'op\'erateur.
+\TeX\ produit la plus petite taille quand il est en \minrefs{mode math\'ematique}
+^{style texte} et les plus grandes tailles quand il est en ^{style d'affichage}.
+Les Op\'erateurs sont une des \minref{classe}s de symboles math\'ematiques de \TeX.
+\TeX\ met diff\'erents montants d'espace
+autour des diff\'erentes classes de symboles math\'ematiques.
+
+Les grands symboles d'op\'erateur avec `|big|' dans leurs noms sont diff\'e\-rents
+des op\'erations binaires correspondantes (voir \xref{binops}) comme
+|\cap| ($\cap$) puisqu'ils apparaissent habituellement au d\'ebut
+d'une formule. \TeX\ utilise des espacements diff\'erents pour un grand op\'erateur
+et pour une op\'eration binaire.
+
+Ne confondez pas `$\sum$' (|\sum|) avec `$\Sigma$'^^|\Sigma| (|\Sigma|)
+ou `$\prod$' (|\prod|) avec `$\Pi$' ^^|\Pi| (|\Pi|).
+|\Sigma| et |\Pi| produisent les lettres grecques capitales, qui sont plus petites et
+ont une apparence diff\'erente.
+
+Un grand op\'erateur peut avoir des ^{limites}. La limite la plus basse est sp\'ecifi\'ee comme un indice
+et la plus haute comme un exposant.
+
+\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
+Quand il est en style texte, \TeX\ place normalement les limites apr\`es un grand op\'erateur.
+Cette commande demande \`a \TeX\ de placer
+les limites sur et sous un grand op\'erateur plut\^ot qu'apr\`es lui.
+
+Si vous sp\'ecifiez plusieurs commandes |\limits|, |\nolimits|,
+et |\dis!-play!-limits|, seule la derni\`ere sera prise en compte.
+
+\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
+Quand il est en style d'affichage, \TeX\ place normalement les limites sur et sous un grand op\'erateur.
+(L'op\'erateur |\int| est une exception---\TeX\
+place les limites pour |\int| apr\`es l'op\'erateur dans tous les cas.)
+^^|\int//limites apr\`es|
+Cette commande demande \`a \TeX\ de placer
+les limites apr\`es un grand op\'erateur plut\^ot que sur et sous lui.
+
+Si vous sp\'ecifiez plusieurs commandes |\limits|, |\nolimits|,
+et |\dis!-play!-limits|, seule la derni\`ere sera prise en compte.
+
+\example
+$$\bigcap\nolimits_{i=1}^Nq_i$$
+|
+\dproduces
+$$\bigcap\nolimits_{i=1}^Nq_i$$
+\endexample
+\enddesc
+
+\begindesc
+\cts displaylimits {}
+\explain
+Cette commande demande \`a \TeX\ de
+suivre ses r\`egles normales pour le placement des limites~:
+\olist\compact
+\li Les limites de ^|\int| sont plac\'ees apr\`es l'op\'erateur.
+\li Les limites des autres grands op\'erateurs sont plac\'ees apr\`es
+l'op\'era\-teur en style texte.
+\li Les limites des autres grands op\'erateurs sont plac\'ees sur et sous
+l'op\'erateur en style d'affichage.
+\endolist
+Il est habituellement plus simple d'utiliser |\limits| ou |\nolimits|
+pour produire un effet sp\'ecifique, mais |\display!-limits| est parfois
+utile dans les d\'efinitions de \minref{macro}.
+
+Notez que \plainTeX\ d\'efinit ^|\int| comme une macro qui comprend |\no!-limits|,
+donc |\int\displaylimits| en style de texte restaure la convention de |\limits|.
+
+Si vous sp\'ecifiez plusieurs commandes |\limits|, |\nolimits|,
+et |\dis!-play!-limits|, seule la derni\`ere sera prise en compte.
+
+\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^^{op\'erateurs//grands}
+\endexample
+\enddesc
+
+
+%==========================================================================
+\subsection {Ponctuation}
+
+\begindesc
+\bix^^{ponctuation et formules de math.}
+\cts cdotp {}
+\cts ldotp {}
+\explain
+Ces deux commandes produisent respectivement un point centr\'e et un point
+positionn\'e sur la \minref{ligne de base}. Elles ne sont valides qu'en
+\minref{mode} math\'ematique. \TeX\ les traite comme de la ponctuation, ne mettant aucun espace suppl\'ementaire devant
+elles mais en ajoutant un petit en plus apr\`es elles.
+En contrepartie, \TeX\ met un montant d'espace \'egal des deux cot\'es
+d'un point centr\'e g\'en\'er\'e par la commande ^|\cdot| (\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
+Cette commande produit une symbole de ponctuation deux-points.
+Elle n'est valide qu'en mode math\'ematique.
+La diff\'erence entre |\colon| et le caract\`ere deux-points (|:|) est que
+`|:|' est un op\'erateur, donc \TeX\ met une espace suppl\'ementaire \`a sa gauche tandis qu'il
+ne met pas d'espace suppl\'ementaire \`a la gauche de |\colon|.
+\example
+$f \colon t \quad f : t$
+|
+\produces
+$f \colon t \quad f : t$
+
+\eix^^{ponctuation et formules de math.}
+\endexample
+\enddesc
+
+
+%==========================================================================
+%\secondprinting{\vfill\eject\null\vglue-30pt\vskip0pt}
+\section {Puissances et indices}
+
+\begindesc
+\margin{Two groups of commands have been combined here.}
+\bix^^{exposants}
+\bix^^{indices}
+%\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
+Les commandes de chaque colonne sont \'equivalentes. Les commandes de la premi\`ere
+colonne composent \<argument> comme un indice et celle de la seconde
+colonne composent \<argument> comme une puissance. Les commandes |\sb| et |\sp|
+sont principalement utiles si vous travaillez sur un terminal sur lequel manque un
+signe soulign\'e ou de puissance ou si vous avez red\'efini `|_|' or `|^|' et avez besoin
+d'acc\'eder \`a sa d\'efinition originale. Ces commandes sont aussi utilis\'ees pour
+mettre des limites inf\'erieures ou sup\'erieures sur des sommes ou des int\'egrales. ^^{limites
+inf\'erieures} ^^{limites sup\'erieures}
+
+Si une puissance ou un indice n'est pas un \minref{token} seul, vous devez
+l'englober dans un \minref{groupe}. \TeX\ ne met pas de priorit\'e aux puissances
+ou aux indices, donc il rejettera des formules telles que |a_i_j|, |a^i^j| ou
+|a^i_j|.
+
+Les puissances et les indices sont normalement compos\'es en ^{style script} ou
+en ^{style scriptscript} s'il sont de second ordre, c'est-\`a-dire, un indice d'un
+indice ou une puissance d'une puissance. Vous pouvez mettre \emph{tout}
+texte d'une formule math\'ematique en \minref{style}script ou scriptscript avec
+les commandes ^|\scriptstyle| et ^|\scriptscriptstyle| (\xref
+\scriptscriptstyle).
+
+Vous pouvez appliquer une puissance ou un indice \`a toutes les commandes qui
+produisent des fonctions math\'ematiques nomm\'ees en caract\`ere romain (voir
+\xref{namedfns}). Dans certain cas (voyez encore \xref{namedfns}) la
+puissance ou l'indice appara\^\i t directement sur ou sous la fonction
+nomm\'ee comme montr\'e dans les exemples de ^|\lim| et de ^|\det| ci-dessous.
+
+\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^^{exposants}
+\eix^^{indices}
+\endexample
+\enddesc
+
+%\secondprinting{\vfill\eject}
+
+%==========================================================================
+\subsection {Choisir et utiliser des mod\`eles}
+
+\begindesc
+\bix^^{styles}
+\cts textstyle {}
+\cts scriptstyle {}
+\cts scriptscriptstyle {}
+\cts displaystyle {}
+\explain
+^^{style texte} ^^{style script} ^^{style scriptscript} ^^{style d'affichage}
+Ces commandes forcent le \minref{style} normal et par cons\'equent la
+police que \TeX\ utilise pour composer une formule. Comme les
+commandes de choix de police telles que |\it|, elles sont effectives
+jusqu'\`a la fin du groupe les contenant.
+Elles sont utiles quand le choix de style de \TeX\ est inappropri\'e pour la formule
+que vous essayez de composer.
+\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
+Cette commande demande \`a \TeX\ de composer une des sous-formules
+\<math$_1$>, \<math$_2$>, \<math$_3$> ou \<math$_4$>, en faisant son choix
+selon le \minref{style} courant.
+Ainsi, si \TeX\ est en
+style d'affichage il compose |\math!-choice| comme \<math$_1$>~; en style texte il la compose
+comme \<math$_2$>~; en style script il la compose comme \<math$_3$>~;
+et en style scriptscript il la compose comme \<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
+^^{symboles math\'ematiques}
+Cette commande procure un moyen simple de
+produire une construction math\'ematique qui marche dans les quatre \minref{style}s.
+Pour l'utiliser, vous devrez normalement d\'efinir une macro suppl\'ementaire,
+que nous appellerons |\build|.
+L'appel de |\math!-palette| pourra alors avoir la forme
+|\mathpalette|\allowbreak|\build|\<argument>.
+
+|\build| teste dans quel style est \TeX\ et compose \<argu\-ment> en cons\'e\-quence.
+Il peut \^etre d\'efini pour avoir deux param\`etres.
+Quand vous appelez |\math!-palette|, il appellera \`a son tout |\build|,
+avec |#1| une
+commande qui s\'electionne le style courant et |#2| un \<argument>.
+Ainsi, dans la d\'efinition de |\build| vous pouvez composer quelque chose
+dans le style courant en le faisant pr\'ec\'eder de `|#1|'.
+Voir la \knuth{page~360}{417--418} pour des exemples d'utilisation de |\mathpalette|
+et la \knuth{page~151}{177} pour plus d'explication sur son fonctionnement.
+
+\eix^^{styles}
+\enddesc
+
+%==========================================================================
+\section {Symboles compos\'es}
+
+%==========================================================================
+\subsection {Accents math\'ematiques}
+
+\begindesc
+\xrdef{mathaccent}
+^^{accents}
+^^{math\'ematiques//accents}
+%
+\easy\ctsx acute {^{accent aigu} comme dans $\acute x$}
+\ctsx b {^{accent barre dessous} comme dans $\b x$}
+\ctsx bar {^{accent barre} comme dans $\bar x$}
+\ctsx breve {^{accent bref} comme dans $\breve x$}
+\ctsx check {^{accent tch\`eque} comme dans $\check x$}
+\ctsx ddot {^{accent double point} comme dans $\ddot x$}
+\ctsx dot {^{accent point} comme dans $\dot x$}
+\ctsx grave {^{accent grave} comme dans $\grave x$}
+\ctsx hat {^{accent circonflexe} comme dans $\hat x$}
+\ctsx widehat {^{accent circonflexe large} comme dans $\widehat {x+y}$}
+\ctsx tilde {^{accent tilde} comme dans $\tilde x$}
+\ctsx widetilde {^{accent tilde large} comme dans $\widetilde {z+a}$}
+\ctsx vec {^{accent vecteur} comme dans $\vec x$}
+\explain
+Ces commandes produisent des accents dans les formules math\'e\-matiques.
+Vous devrez normalement laisser un espace apr\`es chacune d'entre elles.
+Un accent large peut s'appliquer \`a une sous-formule comportant plusieurs caract\`eres~;
+\TeX\ centrera l'accent sur la sous-formule.
+Les autres accents ne sont applicables qu'a des caract\`eres simples.
+
+\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
+Cette commande demande \`a \TeX\ de composer un accent math\'ematique
+dont la famille et le code de caract\`ere sont donn\'es par \<mathcode>. (\TeX\ ignore
+la classe du \minref{mathcode}.)
+Voir l'\knuth{annexe~G}{} pour les d\'etails sur la mani\`ere dont \TeX\ positionne de tels accents.
+La fa\c con usuelle d'utiliser |\mathaccent| est de le mettre dans une d\'efinition de macro
+que donne un nom \`a l'accent math\'ematique.
+\example
+\def\acute{\mathaccent "7013}
+|
+\endexample
+\enddesc
+
+\see ``Accents'' (\xref {accents}).
+\enddesc
+
+%==========================================================================
+\subsection {Fractions et autres op\'erations empil\'ees}
+
+\begindesc
+\bix^^{fractions}
+\bix^^{sous-formules empil\'ees}
+\easy\cts over {}
+\cts atop {}
+\cts above {\<dimension>}
+\cts choose {}
+\cts brace {}
+\cts brack {}
+\explain
+{\def\fri{\<formula$_1$>}%
+\def\frii{\<formula$_2$>}%
+Ces commandes empilent une sous-formule sur une autre. Nous expliquerons comment
+marche |\over| et lui relierons ensuite les autres commandes.
+
+|\over| est la commande que vous utilisez normalement pour produire une fraction.
+^^{fractions//produites par \b\tt\\over\e}
+Si vous \'ecrivez quelque chose sous une des formes suivantes~:
+\csdisplay
+$$!fri\over!frii$$
+$!fri\over!frii$
+\left!<delim>!fri\over!frii\right!<delim>
+{!fri\over!frii}
+|
+vous obtiendrez une fraction avec un num\'erateur \fri\ et un d\'eno\-minateur \<for\-mu\-la$_2$>,
+c'est-\`a-dire, \fri\ sur \frii.
+Dans la premi\`ere de ces trois
+formes, le |\over| n'est pas implicitement contenu dans un groupe~;
+il absorbe
+tout ce qui est \`a sa gauche et \`a sa droite jusqu'a ce qu'il trouve une fronti\`ere,
+\`a savoir, le d\'ebut ou la fin d'un groupe.
+
+Vous ne pouvez pas utiliser |\over| ou une autre de ces commandes de ce groupe
+plus d'une fois dans une formule.
+Ainsi une formule telle que~:
+\csdisplay
+$$a \over n \choose k$$
+|
+n'est pas l\'egale.
+Ce n'est pas une s\'ev\`ere restriction parce que
+vous pouvez toujours englober une de ces commandes entre accolades.
+La raison de cette restriction est que si vous avez deux de ces commandes
+dans une seule formule, \TeX\ ne saura pas comment les grouper.
+
+Les autres commandes sont similaires \`a |\over|, avec les exceptions suivantes~:
+\ulist\compact
+\li |\atop| omet la barre de fraction.
+\li |\above| procure une barre de fraction d'\'epaisseur \<dimension>.
+\li |\choose|
+omet la barre de fraction et englobe la construction entre parenth\`eses.
+(Elle est appel\'ee ``choose'' parce que $n \choose k$ est la notation pour le
+nombre de fa\c cons de choisir $k$ choses parmi $n$.)
+\li |\brace| omet la barre de fraction et englobe la construction entre accolades.
+\li |\brack|
+omet la barre de fraction et englobe la construction entre crochets.
+\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$> \<dimension>}
+\explain
+Chacune de ces commandes superpose une sous-formule sur une autre et
+entoure le r\'esultat avec \<delim$_1$> \`a gauche et
+\<delim$_2$> \`a droite. Ces commandes suivent les m\^eme r\`egles que
+|\over|, |\atop| et |\above|. Le \<dimension> dans |\abovewithdelims|
+sp\'ecifie l'\'epaisseur de la barre de fraction.
+\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
+^^{combinaisons, notation pour des}
+Cette commande produit la forme math\'ematique qui d\'ecrit un choix entre
+plusieurs cas.
+Chaque cas a deux parties, s\'epar\'ees par `|&|'.
+\TeX\ traite la premi\`ere partie comme une formule math\'ematique
+et la seconde partie comme du texte ordinaire. Chaque
+cas doit \^etre suivi par |\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
+Ces commandes placent des ^{accolades}, des lignes ou des ^{fl\`eches} extensibles
+sur ou sous la sous-formule donn\'ee par \<argument>.
+\TeX\ fera cette construction aussi large que n\'ecessaire pour
+le contexte.
+Quand \TeX\ produit les accolades, lignes ou fl\`eches \'etendues, il ne consid\`ere
+que les dimensions de la \minref{bo\^\i te} contenant \<argument>.
+Si vous utilisez plus d'une de ces commandes dans une seule formule, les
+accolades, lignes ou fl\`eches qu'elle produira
+pourront ne pas s'aligner proprement les unes avec les autres.
+Vous pouvez utiliser la commande |\mathstrut| (\xref \mathstrut)
+pour contourner cette difficult\'e.
+\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 {\<formule> {\bt \\over} \<relation>}
+\explain
+^^{relations//mettre des formules sur des}
+Cette commande produit une \minref{bo\^\i te} dans laquelle \<formula>
+est plac\'e sur \<relation>. \TeX\ traite le r\'esultat comme une relation
+en ce qui concerne l'espacement \seeconcept{classe}.
+\example
+$\buildrel \rm def \over \equiv$
+|
+\produces
+$\buildrel \rm def \over \equiv$
+
+\eix^^{fractions}
+\eix^^{sous-formules empil\'ees}
+\endexample
+\enddesc
+
+%\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+\subsection {Points}
+
+\begindesc
+\bix^^{points}
+\easy\cts ldots {}
+\cts cdots {}
+\explain
+Ces commandes produisent trois ^{points} align\'es. Pour |\ldots|, les points
+sont sur la ligne de base~; pour |\cdots|, les points sont centr\'es en respectant
+les axes (voir l'explication de |\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
+Cette commande produit trois points verticaux.
+\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
+Cette commande produit trois points sur une diagonale.
+Son usage le plus commun est d'indiquer une r\'ep\'etition le long de la diagonale d'une matrice.
+\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^^{points}
+\endexample
+\enddesc
+
+\see |\dots| \ctsref\dots.
+
+%==========================================================================
+\subsection {D\'elimiteurs}
+
+\begindesc
+\bix^^{d\'elimiteurs}
+%
+\cts lgroup {}
+\cts rgroup {}
+\explain
+Ces commandes produisent de grandes ^{parenth\`eses} gauches et droites
+qui sont d\'efinies comme des \minref{d\'elimiteur}s ouvrants et fermants.
+La plus grande taille disponible pour ces d\'elimiteurs est |\Big|.
+Si vous utilisez des tailles plus petites, vous obtiendrez des caract\`eres \'etranges.
+\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
+Ces commandes doivent \^etre employ\'ees ensemble selon le mod\`ele~:
+\display
+{{\bt \\left} \<delim$_1$> \<subformula> {\bt \\right} \<delim$_2$>}
+Cette construction demande \`a \TeX\ de produire \<subformula>,
+entour\'ee des \minref{d\'elimiteur}s \<delim$_1$> et \<delim$_2$>.
+La taille verticale des d\'elimiteurs est ajust\'ee pour correspondre \`a la
+taille verticale (hauteur plus profondeur) de \<subformula>. \<delim$_1$> et
+\<delim$_2$> n'ont pas besoin de correspondre.
+Par exemple, vous pouvez utiliser `|]|' comme d\'elimiteur gauche
+et `|(|' comme d\'elimiteur droite dans une utilisation simple de |\left|
+et |\right|.
+
+|\left| et |\right| ont la propri\'et\'e importante de d\'efinir un
+groupe, c'est-\`a-dire, qu'ils agissent comme des accolades gauches et droite. cette propri\'et\'e de
+groupement est particuli\`erement utile quand vous mettez ^|\over| (\xref{\over}) ou
+une commande similaire entre |\left| et |\right|, car vous n'avez pas besoin
+de mettre d'accolades autour de la fraction construite par |\over|.
+
+Si vous voulez un d\'elimiteur gauche mais pas le droit, vous pouvez utiliser `|.|' \`a
+la place du d\'elimiteur que vous ne voulez pas et il se transformera en espace blanc
+(de largeur ^|\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 {\<nombre>}
+\explain
+Cette commande produit un d\'elimiteur dont les caract\'eristiques sont donn\'ees par
+\<number>. \<number> est normalement \'ecrit en notation hexa\-d\'ecimale.
+Vous pouvez utiliser la commande |\delimiter| \`a la place d'un caract\`ere dans tout contexte
+o\`u \TeX\ attend un d\'elimiteur (bien que la commande soit rarement
+employ\'ee en dehors d'une d\'efinition de macro).
+Supposez que \<number> soit le nombre hexad\'ecimal $cs_1s_2s_3
+l_1l_2l_3$. Alors \TeX\ prendra le d\'elimiteur ayant
+la \minref{classs} $c$, la petite variante
+$s_1s_2s_3$ et la grande variante $l_1l_2l_3$. Ici $s_1s_2s_3$ indique
+le caract\`ere math\'ematique trouv\'e en position $s_2s_3$ de la famille $s_1$ et
+de m\^eme pour $l_1l_2l_3$. C'est la m\^eme convention que celle
+utilis\'ee pour ^|\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{nombre}}
+\cts delimitershortfall {\param{nombre}}
+\explain
+^^{d\'elimiteurs//hauteur des}
+Ces deux param\`etres signalent \`a \TeX\ comment la hauteur d'un \minref{d\'elimiteur}
+doit \^etre reli\'ee \`a la taille verticale de la sous-formule
+\`a laquelle le d\'elimi\-teur est associ\'e.
+|\delimiterfactor| donne le ratio minimum
+de la taille du d\'elimiteur par rapport \`a la taille verticale de la sous-formule et
+|\deli!-mitershortfall| donne le maximum par lequel la hauteur du
+d\'elimiteur sera r\'eduite pour correspondre \`a la taille verticale de la sous-formule.
+
+Supposez que la \minref{bo\^\i te} contenant la sous-formule
+ait une hauteur $h$ et une profondeur $d$ et $y=2\,\max(h,d)$.
+soit la valeur de |\delimiterfactor| $f$ et la valeur de
+|\delimitershortfall| $\delta$.
+Alors \TeX\ prend la taille de d\'elimiteur minimum \'etant au moins $y \cdot
+f/1000$ et au moins $y-\delta$. En particulier, si |\delimiterfactor|
+est exactement \`a $1000$ alors \TeX\ essayera de faire un d\'elimiteur au moins aussi grand
+que la formule \`a laquelle il est attach\'e.
+Voir les \knuth{pages~152 et~446 (R\`egle 19)}{pages~178 et~511 (R\`egle 19)}
+pour les d\'etail exacts sur la fa\c con dont \TeX\ utilise ces param\`etres.
+\PlainTeX\ met |\delimiter!-factor| \`a $901$ et
+|\delimiter!-shortfall| \`a |5pt|.
+\enddesc
+
+\see |\delcode| (\xref\delcode), |\vert|, |\Vert|
+et |\backslash| (\xref\vert).
+\eix^^{d\'elimiteurs}
+
+%==========================================================================
+\subsection {Matrices}
+
+\begindesc
+\cts matrix
+ {{\bt \rqbraces{\<ligne> \\cr $\ldots$ \<ligne> \\cr}}}
+\cts pmatrix
+ {{\bt \rqbraces{\<ligne> \\cr $\ldots$ \<ligne> \\cr}}}
+\cts bordermatrix
+ {{\bt \rqbraces{\<ligne> \\cr $\ldots$ \<ligne> \\cr}}}
+\explain
+Chacune de ces trois commandes produit une ^{matrice}.
+Les \'el\'ements de chaque rang\'e de la matrice entr\'ee
+sont s\'epar\'es par `|&|' et chaque rang\'e est \`a son tour termin\'ee
+par |\cr|.
+(C'est la m\^eme forme que celle utilis\'ee pour un
+\minref{alignement}.)
+Les commandes diff\`erent de la mani\`ere suivante~:
+\ulist\compact
+\li |\matrix| produit une matrice sans aucun entourage ou \minref{d\'elimiteur}s ins\'er\'es.
+\li |\pmatrix| produit une matrice entour\'ee par des parenth\`eses.
+\li |\bordermatrix| produit une matrice dans laquelle la premi\`ere rang\'ee et la premi\`ere
+colonne sont trait\'ees comme des labels. (Le premier \'el\'ement de la premi\`ere rang\'ee est
+habituellement laiss\'e \`a blanc.) Le reste de la matrice est englob\'ee dans
+des parenth\`eses.
+\endulist
+\TeX\ peut rendre les parenth\`eses de |\pmatrix| et de |\bordermatrix| aussi larges que
+n\'ecessaire en ins\'erant des extensions verticales. Si vous voulez une matrice
+entour\'ee par des d\'elimiteurs autres que des paren\-th\`eses, vous devez utiliser
+|\matrix| en conjugaison avec |\left| et |\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 {Racines et radicaux}
+
+\begindesc
+\easy\cts sqrt {\<argument>}
+\explain
+Cette commande produit la notation pour la racine carr\'ee de \<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
+Cette commande produit la notation pour une racine de \<argument$_2$> o\`u l'ordre
+est donn\'e par \<argument$_1$>.
+\example
+$\root \alpha \of {r \cos \theta}$
+|
+\produces
+$\root \alpha \of {r \cos \theta}$
+\endexample
+\enddesc
+
+\begindesc
+\cts radical {\<nombre>}
+\explain
+Cette commande produit un signe radical
+dont les caract\'eristiques sont donn\'ees par
+\<nombre>. Elle utilise la m\^eme repr\'esentation que le code d\'elimiteur
+^^{codes d\'elimiteurs}
+dans la commande ^|\delcode| (\xref \delcode).
+
+\example
+\def\sqrt{\radical "270370} % as in plain TeX
+|
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Num\'eros d'\'equation}
+
+\begindesc
+\easy\cts eqno {}
+\cts leqno {}
+\explain
+Ces commandes attachent un num\'ero d'\'equation \`a une formule affich\'ee.
+|\eqno| met le num\'ero d'\'equation \`a droite et |\leqno| le met \`a gauche.
+Les commandes doivent \^etre mises \`a la fin de la formule.
+Si vous avez un affichage multi-ligne et voulez num\'eroter plus d'une ligne,
+utilisez les commandes |\eq!-alignno| ou |\leq!-alignno|
+(\xref \eqalignno).
+
+Ces commandes ne sont valides qu'en mode math\'ematique affich\'e.
+
+\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 {Affichages multi-ligne}
+
+\begindesc
+\bix^^{affichages//multi-ligne}
+\cts displaylines
+ {{\bt \rqbraces{\<ligne>\ths\\cr$\ldots$\<ligne>\ths\\cr}}}
+\explain
+Cette commande produit un affichage math\'ematique multi-ligne dans lequel chaque ligne est
+centr\'ee ind\'ependamment des autres lignes.
+Vous pouvez utiliser la commande |\noalign| (\xref \noalign) pour changer le montant
+d'espace entre deux lignes d'un affichage multi-ligne.
+
+Si vous voulez attacher des num\'eros d'\'equation \`a certaines ou toutes les \'equations
+dans un affichage math\'ematique multi-ligne, vous devez utiliser |\eqalignno| ou
+|\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{\<ligne> \\cr $\ldots$ \<ligne> \\cr}}}
+\cts eqalignno {}
+ {{\bt \rqbraces{\<ligne> \\cr $\ldots$ \<ligne> \\cr}}}
+\cts leqalignno {}
+ {{\bt \rqbraces{\<ligne> \\cr $\ldots$ \<ligne> \\cr}}}
+\explain
+^^{num\'eros d'\'equation}
+Ces commandes produisent un affichage math\'ematique multi-ligne
+dans lequel certaines parties correspondantes des lignes sont align\'ees verticalement.
+Les commandes |\eqalignno| et |\leqalignno| vous laissent aussi
+apporter des num\'eros d'\'equation pour certaines ou toutes les lignes.
+|\eqalignno| met les num\'eros d'\'equation \`a droite et
+|\leqalignno| les met \`a gauche.
+
+Chaque ligne dans l'affichage est termin\'ee par |\cr|. Chacune des parties devant \^etre align\'ee
+(le plus souvent un signe \'egal) est pr\'ec\'ed\'ee par
+`|&|'. Un `|&|' pr\'ec\`ede aussi chaque num\'ero d'\'equation, qui est donn\'e \`a la fin d'une ligne.
+Vous pouvez mettre plus d'une de ces commandes dans un seul affichage pour
+produire plusieurs groupes d'\'equation. Dans ce cas, seuls les groupes les plus \`a droite
+ou les plus \`a gauche peuvent \^etre produits avec |\eqalignno| ou |\leqalignno|.
+
+Vous pouvez utiliser la commande |\noalign| (\xref \noalign) pour changer le montant
+d'espace entre deux lignes d'un affichage multi-ligne.
+\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^^{affichages//multi-ligne}
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Polices dans des formules math\'ematiques}
+
+\begindesc
+^^{polices}
+\xrdef{mathfonts}
+%
+\easy\ctsx cal {utilise une police calligraphique majuscule}
+\ctsx mit {utilise une police math\'ematique italique}
+\ctsx oldstyle {utilise une police de chiffres elz\'eviriens}
+\explain
+Ces commandes demandent \`a \TeX\ de composer le texte suivant dans la police
+sp\'ecifi\'ee. Vous ne pouvez les utiliser qu'en \minref{mode math\'ematique}.
+La commande |\mit| est utile pour produire des ^{lettres grecques} capitales pench\'ees.
+Vous pouvez aussi utiliser les commandes donn\'ees dans
+\headcit{S\'electionner des polices}{selfont} pour changer des polices en mode math\'ematique.
+\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
+
+^^{styles de caract\`ere}
+\begindesc
+\ctsx itfam {famille de type italique}
+\ctsx bffam {famille de type grasse}
+\ctsx slfam {famille de type pench\'ee}
+\ctsx ttfam {famille de type machine \`a \'ecrire}
+\explain
+Ces commandes d\'efinissent des familles de type \minrefs{family} devant \^etre utilis\'ees en
+\minref{mode math\'ematique}. Leur principale utilisation est dans la d\'efinition des commandes
+|\it|, |\bf|, |\sl| et |\tt| pour qu'elles puissent fonctionner en mode math\'ematique.
+\enddesc
+
+\begindesc
+\cts fam {\param{nombre}}
+\explain
+Quand \TeX\ est en \minref{mode math\'ematique}, il compose normalement un caract\`ere
+en utilisant la ^^{classe} de famille de police donn\'ee dans son \minref{mathcode}.
+^^{famille//donn\'ee par \b\tt\\fam\e}
+Cependant, quand \TeX\ est en mode math\'ematique et rencontre un caract\`ere dont
+la \minref{classe} est $7$ (Variable), il compose ce caract\`ere en utilisant
+la \minref{famille} de police donn\'ee par la valeur de |\fam|, \`a condition que la
+valeur de |\fam| soit entre $0$ et $15$.
+Si la valeur de |\fam| n'est pas dans cette intervalle, \TeX\ utilise la famille du
+mathcode du caract\`ere comme dans le cas ordinaire.
+\TeX\ met |\fam| \`a $-1$ \`a chaque fois qu'il entre en mode math\'ematique.
+En dehors du mode math\'ematique, |\fam| n'a pas d'effet.
+
+En assignant une valeur \`a
+|\fam| vous pouvez changer la fa\c con dont \TeX\ compose des caract\`eres ordinaires
+tels que des variables.
+Par exemple, en mettant |\fam| \`a |\ttfam|, vous demandez \`a \TeX\ de composer
+des variables en utilisant une police de machine \`a \'ecrire.
+\PlainTeX\ d\'efinit |\tt| comme une \minref{macro} qui, entre autres choses,
+met |\fam| \`a |\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
+^^{style texte}
+^^{style script}
+^^{style scriptscript}
+Chacun de ces param\`etres sp\'ecifie la police que \TeX\ utilise pour
+composer le \minref{style} indiqu\'e dans la \minref{famille} indiqu\'ee.
+Ces choix n'ont aucun effet en dehors du \minref{mode math\'ematique}.
+\example
+\scriptfont2 = \sevensy % As in plain TeX.
+|
+\endexample
+\enddesc
+
+\see ``Type styles'' (\xref{seltype}).
+%==========================================================================
+\section {Construire des symboles math\'ematiques}
+
+%==========================================================================
+\subsection {Rendre des d\'elimiteurs plus grands}
+
+\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
+^^{d\'elimiteurs//\'elargis}
+Ces commandes rendent des \minref{d\'elimiteur}s plus grands que leur taille normale.
+Les commandes dans les quatre colonnes
+produisent successivement de plus grandes tailles. La diff\'erence entre |\big|,
+|\bigl|, |\bigr| et |\bigm| est en relation avec la \minref{classe} du
+d\'elimiteur agrandi~:
+\ulist\compact
+\li |\big| produit un symbole ordinaire.
+\li |\bigl| produit un symbole ouvrant.
+\li |\bigr| produit un symbole fermant.
+\li |\bigm| produit un symbole de relation.
+\endulist
+\noindent
+\TeX\ utilise la classe d'un symbole pour d\'ecider combien d'espace mettre
+autour de ce symbole.
+
+Ces commandes, contrairement \`a |\left| et |\right|,
+ne d\'efinissent \emph{pas} un groupe.
+
+\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 {Parties de grands symboles}
+
+\begindesc
+\cts downbracefill {}
+\cts upbracefill {}
+\explain
+Ces commandes produisent respectivement des ^{accolades horizontales}
+et extensibles dirig\'ees vers le haut et vers le bas. ^^{accolades}
+\TeX \ rendra les accolades aussi larges que n\'ecessaire.
+Ces commandes
+sont utilis\'ees dans les d\'efinitions de ^|\overbrace| et de ^|\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
+Ces commandes produisent des portions de certains grands
+d\'elimiteurs
+^^{d\'elimiteurs//parties de}
+qui peuvent eux-m\^eme \^etre utilis\'es comme d\'elimiteurs.
+Elles font r\'ef\'e\-rence aux caract\`eres de la police math\'ematique ^|cmex10|.
+\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 {Aligner des parties d'une formule}
+
+%==========================================================================
+\subsection {Aligner des accents}
+
+\begindesc
+\bix^^{accents//aligner des}
+\cts skew {\<nombre> \<argument$_1$> \<argument$_2$>}
+\explain
+Cette commande d\'eplace l'accent \<argument$_1$> de
+\<number> \minref{unit\'es math\'e\-matiques} vers la droite de sa position normale
+en respectant \<argu\-ment$_2$>.
+L'utilisation la plus commune de cette commande est pour
+modifier la position d'un accent qui se trouve plac\'e sur
+un autre 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
+Le |\skewchar| d'une police
+est le caract\`ere dans la police dont les cr\'enages,
+d\'efinis dans le fichier de m\'etrique de la police, d\'eterminent les positions
+des accents math\'ematiques. Cela dit, supposez que \TeX\ applique un accent math\'ematique
+au caract\`ere `|x|'. \TeX\ regarde si la paire de caract\`eres
+`|x\skewchar|' a un cr\'enage~; si oui, il d\'eplace l'accent d'un montant de
+ce cr\'enage. L'algorithme complet que \TeX\ utilise pour positionner les accents
+math\'ematiques (qui d\'eterminent beaucoup d'autres choses) se trouve dans l'\knuth{annexe~G}{}.
+
+Si la valeur de |\skewchar| n'est pas dans l'intervalle $0$--$255$,
+\TeX\ prend une valeur de cr\'enage \`a z\'ero.
+
+Notez que \<font> est une s\'equence de contr\^ole
+qui nomme une police, pas un \<nom de police> qui nomme des fichiers de police.
+Attention~:
+un assignement de |\skewchar| n'est \emph{pas} enlev\'e \`a la fin d'un groupe.
+Si vous voulez changer |\skewchar| localement, vous devrez sauvegarder et
+restaurer sa valeur originale explicitement.
+\enddesc
+
+\begindesc
+\cts defaultskewchar {\param{number}}
+\explain
+Quand \TeX\ lit le fichier de m\'etriques
+^^{fichier de m\'etriques//caract\`ere oblique par d\'efaut dans le}
+pour une police en r\'eponse \`a une
+commande ^|\font|, il met le ^|\skewchar| de la police
+dans |\default!-skewchar|.
+Si la valeur de |\default!-skewchar| n'est
+pas dans l'intervalle $0$--$255$, \TeX\ n'assigne aucun caract\`ere oblique
+par d\'efaut.
+\PlainTeX\ met |\defaultskewchar| \`a $-1$, et il est normalement pr\'ef\'erable
+de le laisser ainsi.
+\margin{Misleading example deleted.}
+\eix^^{accents//aligner des}
+\enddesc
+
+%==========================================================================
+\subsection {Aligner du mat\'eriel verticalement}
+
+\begindesc
+\cts vcenter {\rqbraces{\<mat\'eriel en mode vertical>}}
+\ctsbasic {\\vcenter to \<dimension> \rqbraces{\<mat\'eriel en mode vertical>}}{}
+\ctsbasic {\\vcenter spread \<dimension> \rqbraces{\<mat\'eriel en mode vertical>}}{}
+\explain
+Toutes les formules math\'ematiques ont un
+``^{axe}'' invisible que \TeX\ traite comme une sorte de
+ligne de centrage horizontale pour cette formule.
+Par exemple, l'axe d'une formule constitu\'ee d'une
+fraction est au centre de la barre de fraction.
+La commande |\vcenter| demande \`a \TeX\ de placer le \<mat\'eriel en mode vertical>
+dans une \minref{vbox} et de centrer la vbox
+en respectant l'axe de la formule qu'il est en train de construire.
+
+La premi\`ere forme de la commande
+centre le mat\'eriel comme donn\'e. Les deuxi\`emes et troisi\`emes
+formes \'elargissent ou r\'etr\'ecissent le mat\'eriel verticalement comme dans la
+commande |\vbox| (\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 {Produire des espaces}
+
+%==========================================================================
+\subsection {Espaces math\'ematiques de largeur fixe}
+
+\begindesc
+\bix^^{espace//dans des formules math\'ematiques}
+\ctspecial ! \ctsxrdef{@shriek}
+\ctspecial , \ctsxrdef{@comma}
+\ctspecial > \ctsxrdef{@greater}
+\ctspecial ; \ctsxrdef{@semi}
+\explain
+Ces commandes produisent des montants vari\'es d'^{espace suppl\'ementaire} dans des formules. Elles
+sont d\'efinies en termes d'\minref{unit\'es math\'ematiques}, donc \TeX\ ajuste
+le montant d'espace en accord avec le \minref{style} courant.
+\ulist
+\li |\!!| produit un espace fin n\'egatif, c'est-\`a-dire, qu'il r\'eduit l'espace
+entre ses sous-formules voisines du montant d'un espace fin.
+\li |\,| produit un espace fin.
+\li |\>| produit un espace moyen.
+\li |\;| produit un espace large.
+\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
+Ces param\`etres d\'efinissent des espaces fins, moyens et larges en
+mode math\'ematique.
+\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{dimension}}
+\explain
+Ce param\`etre d\'efinit une distance \'egale \`a trois points (\`a moins que
+vous le changiez).
+Le |\jot| est une unit\'e de mesure pratique pour ouvrir des affichages math\'ematiques.
+\enddesc
+
+%==========================================================================
+\subsection {Espaces math\'ematiques de largeur variable}
+
+\begindesc
+\cts mkern {\<mudimen>}
+\explain
+^^{cr\'enages//dans des formules math\'ematiques}
+Cette commande
+produit un \minref{cr\'enage}, c'est-\`a-dire, un espace blanc, de largeur \<mudimen>.
+Le cr\'enage est mesur\'e
+en \minref{unit\'es math\'ematiques}, qui varie en fonction du style.
+Hormis son unit\'e de la mesure, cette commande se comporte comme
+|\kern| (\xref \kern) le fait en mode horizontal.
+
+\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
+^^{ressort}
+Cette commande produit un \minref{ressort} horizontal
+qui a une largeur naturelle \<mu\-dimen$_1$>, s'\'etire de \<mudimen$_2$>
+et se r\'etr\'ecit de \<mudimen$_3$>.
+Le ressort est mesur\'e en \minref{unit\'es math\'ematiques}, qui varie en fonction
+du style. Hormis son unit\'e de mesure, cette commande se comporte
+comme |\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
+Quand \TeX\ est en train de composer en \minref{style} script ou
+scriptscript et rencontre cette commande
+imm\'ediatement devant d'un ressort ou d'un cr\'enage,
+il supprime le ressort ou le cr\'enage.
+|\nonscript| n'a pas d'effet dans les autres styles.
+
+Cette commande fournit une mani\`ere de ``resserrer'' l'espacement dans
+les styles script et scriptscript, qui sont g\'en\'eralement faits dans une
+police plus petite. Elle est peu utile en dehors des d\'efinitions de macro.
+\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^^{espace//dans des formules math\'ematiques}
+
+
+%==========================================================================
+\subsection {param\`etres d'espacement pour les affichages}
+
+\begindesc
+\bix^^{affichages//param\`etres d'espacement pour}
+\cts displaywidth {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie la largeur maximum que
+\TeX\ alloue pour un affichage math\'ematique. Si \TeX\ ne peut pas mettre l'affichage
+dans un espace de cette largeur, il fait un ``overfull \minref{hbox}''
+et se plaint.
+\TeX\ met la valeur de |\displaywidth| quand il rencontre le `|$$|'
+qui d\'ebute l'affichage. Cette valeur initiale est
+|\hsize| (\xref \hsize) \`a moins qu'elle soit modifi\'ee par des
+changements de la forme du paragraphe.
+Voir les \knuth{pages~188--189}{220--222} pour une explication plus d\'etaill\'ee de ce param\`etre.
+\enddesc
+
+\begindesc
+\cts displayindent {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie l'espace par lequel \TeX\ indente un
+affichage math\'e\-matique.
+\TeX\ met la valeur de |\displayindent| quand il rencontre le `|$$|'
+qui d\'ebute l'affichage. Normalement la valeur initiale est z\'ero,
+mais si la forme du paragraphe indique que l'affichage doit \^etre
+d\'ecal\'e d'un montant $s$,
+\TeX\ mettra |\displayindent| \`a $s$.
+Voir les \knuth{pages~188--189}{220--222} pour une explication plus d\'etaill\'ee de ce param\`etre.
+\enddesc
+
+\begindesc
+\cts predisplaysize {\param{dimension}}
+\explain
+\TeX\ met ce param\`etre \`a la largeur de la ligne pr\'ec\'edant
+un affichage math\'ematique.
+\TeX\ utilise |\predisplaysize| pour d\'eterminer si l'affi\-chage
+d\'ebute ou non \`a
+gauche d'o\`u la ligne pr\'ec\'edente se termine, c'est-\`a-dire, s'il
+recouvre visuellement ou non la ligne pr\'ec\'edente.
+S'il la recouvre, il utilise les ressorts |\abovedisplayskip| et
+|\belowdisplayskip| en mettant l'affichage~;
+autrement il utilise les ressorts |\abovedisplay!-shortskip| et
+|\belowdisplay!-shortskip|.
+Voir les \knuth{pages~188--189}{220--222} pour une explication plus d\'etaill\'ee de ce param\`etre.
+\enddesc
+
+\begindesc
+\cts abovedisplayskip {\param{ressort}}
+\explain
+Ce param\`etre sp\'ecifie le montant de ressort vertical que
+\TeX\ ins\`ere avant un affichage quand l'affichage d\'ebute
+\`a gauche d'o\`u la ligne pr\'ec\'edente se termine, c'est-\`a-dire, quand il recouvre
+visuellement la ligne pr\'ec\'edente.
+\PlainTeX\ met |\abovedisplayskip| \`a |12pt plus3pt minus9pt|.
+Voir les \knuth{pages~188--189}{220--222} pour une explication plus d\'etaill\'ee de ce param\`etre.
+\enddesc
+
+\begindesc
+\cts belowdisplayskip {\param{ressort}}
+\explain
+Ce param\`etre sp\'ecifie le montant de ressort vertical que
+\TeX\ ins\`ere apr\`es un affichage quand l'affichage d\'ebute
+\`a gauche d'o\`u la ligne pr\'ec\'edente se termine, c'est-\`a-dire, quand il recouvre
+visuellement la ligne pr\'ec\'edente.
+\PlainTeX\ met |\belowdisplay!-skip| \`a |12pt plus3pt minus9pt|.
+Voir les \knuth{pages~188--189}{220--222} pour une explication plus d\'etaill\'ee de ce param\`etre.
+\enddesc
+
+\begindesc
+\cts abovedisplayshortskip {\param{ressort}}
+\explain
+Ce param\`etre sp\'ecifie le montant de ressort vertical que
+\TeX\ ins\`ere avant un affichage quand l'affichage d\'ebute
+\`a droite d'o\`u la ligne pr\'ec\'edente se termine, c'est-\`a-dire, quand il ne recouvre
+pas visuellement la ligne pr\'ec\'edente.
+\PlainTeX\ met |\abovedisplay!-shortskip| \`a |0pt plus3pt|.
+Voir les \knuth{pages~188--189}{220--222} pour une explication plus d\'etail\-l\'ee de ce param\`etre.
+\enddesc
+
+\begindesc
+\cts belowdisplayshortskip {\param{ressort}}
+\explain
+Ce param\`etre sp\'ecifie le montant de ressort vertical que
+\TeX\ ins\`ere apr\`es un affichage quand l'affichage d\'ebute
+\`a droite d'o\`u la ligne pr\'ec\'edente se termine, c'est-\`a-dire, quand il ne recouvre
+pas visuellement la ligne pr\'ec\'edente.
+\PlainTeX\ met |\belowdisplay!-shortskip| \`a |7pt plus3pt minus4pt|.
+Voir les \knuth{pages~188--189}{220--222} pour une explication plus d\'etaill\'ee de ce param\`etre.
+\eix^^{affichages//param\`etres d'espacement pour}
+\enddesc
+
+
+%==========================================================================
+\subsection {autres param\`etres d'espacement pour les math\'ematiques}
+
+\begindesc
+\cts mathsurround {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie le montant d'espace que \TeX\
+ins\`ere avant et apr\`es une formule math\'ematique en mode texte (c'est-\`a-dire, une formule
+entour\'ee de |$| simples). Voir la \knuth{page~162}{190} pour plus de d\'etails sur
+son comportement.
+\PlainTeX\ laisse |\mathsurround| \`a |0pt|.
+\enddesc
+
+\begindesc
+\cts nulldelimiterspace {\param{dimension}}
+\explain
+^^{d\'elimiteurs//nuls, espace pour}
+Ce param\`etre sp\'ecifie la largeur de
+l'espace produit par un \minref{d\'elimiteur} nul.
+\PlainTeX\ met |\nulldelimiterspace| \`a |1.2pt|.
+\enddesc
+
+\begindesc
+\cts scriptspace {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie le montant d'espace que \TeX\
+ins\`ere avant et apr\`es un exposant ou un indice.
+La commande |\nonscript| (\xref\nonscript) ^^|\nonscript|
+apr\`es un exposant ou un indice annule cet espace.
+\PlainTeX\ met |\script!-space| \`a |0.5pt|.
+\enddesc
+
+%==========================================================================
+\section {Cat\'egoriser des constructions math\'ematiques}
+
+\begindesc
+\makecolumns 7/2:
+\cts mathord {}
+\cts mathop {}
+\cts mathbin {}
+\cts mathrel {}
+\cts mathopen {}
+\cts mathclose {}
+\cts mathpunct {}
+\explain
+Ces commandes demandent \`a \TeX\ de traiter la construction qui suit comme appartenant
+\`a une ^{classe} particuli\`ere (voir la \knuth{page~154}{179--180} pour la d\'efinition
+des classes). Elles sont list\'ees ici dans l'ordre des num\'eros de classe,
+de $0$ \`a $6$.
+Leur effet primaire est d'ajuster l'espace\-ment autour de la construction
+comme \'etant celui de la classe indiqu\'ee.
+
+\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
+Cette command demande \`a \TeX\ de traiter la construction qui suit
+comme un ``formule interne'', c'est-\`a-dire, une fraction, pour l'espacement.
+Elle ressemble aux commandes de classe donn\'ees ci-dessus.
+\enddesc
+
+%==========================================================================
+\section {Actions sp\'eciales pour des formules math\'ematiques}
+
+\begindesc
+\cts everymath {\param{liste de token}}
+\cts everydisplay {\param{liste de token}}
+\explain
+^^{affichages//actions pour chaque affichage}
+Ces param\`etres sp\'ecifient des listes de \minref{token} que \TeX\ ins\`ere
+au d\'ebut de toute formule math\'ematique d'affichage ou de texte, respectivement.
+Vous pouvez prendre des mesures sp\'eciales au d\'ebut de chaque formule math\'ematique
+en assignant ces actions \`a |\everymath| ou \`a |\everydis!-play|. N'oubliez pas que
+si vous voulez que les deux genres de formules soient affect\'es, vous devez mettre
+les \emph{deux} param\`etres.
+\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\'ematiques}
+\endchapter
+\byebye
+
diff --git a/info/impatient/fr/fmodes.tex b/info/impatient/fr/fmodes.tex
new file mode 100644
index 0000000000..e380efc993
--- /dev/null
+++ b/info/impatient/fr/fmodes.tex
@@ -0,0 +1,2077 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter {Commandes pour \linebreak les modes horizontaux \linebreak et verticaux}
+
+\chapterdef{hvmodes}
+
+Cette section couvre les commandes qui ont des formes correspondantes ou
+identiques dans les modes horizontaux et verticaux.
+Ces commandes fournissent des bo\^\i tes, des espaces, des filets, des r\'eglures
+et des alignements.
+Pour une explication des conventions utilis\'ees dans cette section,
+voir \headcit{Descriptions des commandes}{cmddesc}.
+
+\begindescriptions
+
+%==========================================================================
+\section {Produire des espaces}
+
+%==========================================================================
+
+\subsection {Espaces horizontaux de largeur fixe}
+
+\begindesc
+\bix^^{espace//production d'}
+\bix^^{espace horizontal}
+\cts thinspace {}
+\explain
+Cette commande produit un \minref{cr\'enage} positif
+dont la largeur \'equivaut \`a un sixi\`eme d'em
+(\xref{dimdefs})
+c'est-\`a-dire qu'il demande \`a \TeX\ de d\'eplacer sa position \`a droite de ce montant.
+C'est pratique
+quand vous avez par exemple des quotes imbriqu\'ees
+et que vous voulez les s\'eparer.
+\TeX\ ne coupe pas de ligne sur un
+|\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
+Cette commande produit un \minref{cr\'enage} n\'egatif
+dont la largeur \'equivaut \`a un sixi\`eme d'em
+(\xref{dimdefs})
+c'est-\`a-dire qu'il demande \`a \TeX\ de d\'eplacer sa position \`a gauche de ce montant.
+C'est pratique pour rapprocher deux caract\`eres qui sont un peu trop
+\'eloign\'es l'un de l'autre.
+\TeX\ ne coupe pas de ligne sur un |\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
+Cette commande produit un \minref{cr\'enage} dont la largeur \'equivaut \`a un ^{en}
+(la moiti\'e d'un em, voir \xrefpg{dimdefs}).
+\TeX\ ne coupe pas de ligne sur un |\enspace| \`a moins qu'il soit suivi d'un ressort.
+Dans une liste \`a puce, les puces sont g\'en\'eralement s\'epar\'ees du texte qui les suit
+par un |\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}
+Chacune de ces commandes
+produit un bout de \minref{ressort} horizontal
+qui ne peut ni s'\'etirer ni se r\'etr\'ecir.
+\TeX\ peut couper une ligne \minrefs{line break} sur un tel ressort.
+Les largeurs de ces ressort/dimension
+(qui sont relatifs \`a la police courante)
+sont les suivantes pour |cmr10|, la police par d\'efaut de \plainTeX~:
+\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 Commande}&{\it Espace}&{\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^^{espace horizontal}
+\enddesc
+
+%==========================================================================
+\subsection {Espaces verticaux de largeur fixe}
+
+\begindesc
+\bix^^{espace vertical}
+\easy\cts smallskip {}
+\cts medskip {}
+\cts bigskip {}
+\explain
+Ces commandes produisent des montants d'espacement vertical
+successivement plus larges~:
+\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| saute de $3$ points et peut s'\'etirer ou
+s'\'elargir de $1$ point. |\med!-skip| est \'equivalent \`a deux |\smallskip|s
+et |\bigskip| est \'equivalent \`a deux |\medskip|s.
+
+Ces commandes terminent un paragraphe car elles sont fondamentalement verticales.
+Les sauts qu'elles produisent
+sont ajout\'es au saut inter-para\-graphe normal.
+\example
+Hop \smallskip skip \medskip and \bigskip jump.
+|
+\produces
+Hop \smallskip skip \medskip and \bigskip jump.
+\endexample
+\enddesc
+
+\begindesc
+\cts smallskipamount {\param{ressort}}
+\cts medskipamount {\param{ressort}}
+\cts bigskipamount {\param{ressort}}
+\explain
+Ces param\`etres sp\'ecifient les montants de ressort produit par
+les commandes |\small!-skip|, |\med!-skip| et |\big!-skip|.
+En changeant ces param\`e\-tres vous changez l'effet des commandes.
+Les valeurs par d\'efaut (pour \plainTeX)
+correspondent \`a un quart d'une ligne d'espace, \`a la moiti\'e d'une ligne d'espace,
+et \`a une ligne d'espace enti\`ere.
+Nous vous recommandons de maintenir ce ratio en changeant
+ces valeurs \`a chaque fois que
+vous changez |\baselineskip| (\xref\baselineskip).
+^^|\baselineskip//et {\tt\\smallskipamount}, etc.|
+\eix^^{espace vertical}
+
+\enddesc
+
+%==========================================================================
+\subsection {Espace de taille variable}
+
+\begindesc
+\easy\cts hskip {\<dimension$_1$> {\bt plus} \<dimension$_2$> {\bt minus} \<dimension$_3$>}
+\cts vskip {\<dimension$_1$> {\bt plus} \<dimension$_2$> {\bt minus} \<dimension$_3$>}
+^^{saut vertical}^^{ressort vertical}
+^^{saut horizontal}^^{ressort horizontal}
+\bix^^{espace horizontal}
+\bix^^{espace vertical}
+\explain
+Ces commandes produisent des ressorts respectivement horizontaux et verticaux.
+Dans le cas le plus simple et le plus courant, quand il n'y a seulement que \<dimension$_1$>,
+|\hskip| saute vers la droite de \<dimension$_1$>
+et |\vskip| saute vers le bas de la page de \<dimension$_1$>.
+Plus g\'en\'erale\-ment, ces commandes
+produisent des \minref{ressort}s dont la taille naturelle est
+\<dimension$_1$>, l'\'etirement \<dimension$_2$> et le r\'etr\'ecissement \<dimension$_3$>.
+Le |plus| \<dimension$_2$>, le |minus |\<dimension$_3$>,
+ou les deux peuvent \^etre omis.
+Si les deux sont pr\'esent, le |plus| doit \^etre avant le |minus|.
+Une valeur omise
+est consid\'er\'ee \`a z\'ero. Toutes les \<dimension>s peuvent \^etre n\'egatives.
+
+Vous pouvez utiliser |\hskip| en mode math\'ematique, mais vous ne pouvez utiliser d'unit\'es |mu|
+\seeconcept{unit\'e math\'ematique}
+pour aucune des dimensions. Si vous voulez des unit\'es |mu|, utilisez |\mskip|
+(\xref\mskip) \`a la place.
+
+\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 {\<ressort>}
+\cts vglue {\<ressort>}
+^^{ressort vertical}
+^^{ressort horizontal}
+\explain
+La commande |\hglue| produit un \minref{ressort} horizontal qui ne dispara\^\i t pas sur
+une coupure de ligne. La commande |\vglue|
+produit un \minref{ressort} vertical qui ne dispara\^\i t pas sur une coupure de page.
+Pour le reste ces commandes sont comme |\hskip| et |\vskip|.
+Vous pouvez utiliser |\vglue| pour produire de l'espace blanc en haut d'une page,
+par exemple, au dessus d'un titre sur la premi\`ere page d'un document, mais
+^|\topglue| (suivant) est normalement plus appropri\'e pour cet usage.
+\enddesc
+
+\begindesc
+\cts topglue {\<ressort>}
+\explain
+\margin{Command added; recent addition to \TeX}
+Cette commande\footnote{|\topglue| a \'et\'e ajout\'e \`a \TeX\ dans la version 3.0,
+apr\`es les autres am\'enagements introduitis par le ^{\newTeX}
+(\xref{newtex}). C'est la premi\`ere d\'ecrite dans la \emph{dix-huiti\`eme\/}
+\'edition de \texbook.} fait que l'espace entre le haut de la page et le
+haut de la premi\`ere bo\^\i te de la page soit pr\'ecis\'ement \'egal \`a \<glue>.
+Le haut de la page est consid\'er\'e \^etre sur la ligne de base d'une
+ligne imaginaire de texte juste au-dessus de la ligne du haut de la page.
+Plus pr\'ecis\'ement, c'est une distance |\topskip| au dessus de l'origine donn\'ee par
+|\hoffset| et |\voffset|.
+
+Cette commande est pratique parce que \TeX\ ajuste le ressort normalement
+produit par |\topskip| d'une mani\`ere complexe. En utilisant |\top!-glue| vous pouvez
+contr\^oler la position de la premi\`ere bo\^\i te de la page sans vous inqui\'eter de
+ces ajustements.
+
+\enddesc
+
+\begindesc
+\cts kern {\<dimension>}
+\explain
+L'effet de cette commande d\'epend du mode dans lequel est \TeX\ quand
+il la rencontre~:
+\ulist
+
+\li En mode horizontal, \TeX\ d\'eplace sa position vers la droite (pour un cr\'enage positif)
+ou vers la gauche (pour un cr\'enage n\'egatif).
+
+\li En mode vertical, \TeX\ d\'eplace sa position vers le bas de la page (pour un cr\'enage positif)
+ou vers le haut de la page (pour un cr\'enage n\'egatif).
+
+\endulist
+\noindent
+Ainsi un cr\'enage positif produit un espace vide tandis qu'un cr\'enage n\'egatif
+fait que \TeX\ recule sur quelque chose qu'il a d\'ej\`a produit.
+Cette notion de cr\'enage ^^{cr\'enages}
+est diff\'erente de la notion de cr\'enage dans certains syst\`emes de composition
+typographique informatis\'es---dans \TeX, des cr\'e\-nages positifs \emph{\'ecartent}
+deux lettres au lieu de les rapprocher.
+
+Un cr\'enage est similaire \`a un
+\minref{ressort}, sauf que (a)~un cr\'enage ne peut ni s'\'etirer ni se r\'etr\'ecir,
+et (b)~\TeX\ ne coupera une ligne ou une page sur un cr\'enage que si le cr\'enage
+est suivi par un ressort et ne fait pas partie d'une formule math\'ematique.
+Si \TeX\ trouve un cr\'enage \`a la fin
+d'une ligne ou d'une page, il \'elimine le cr\'enage.
+Si vous voulez obtenir l'effet d'un cr\'enage qui ne dispara\^\i t jamais,
+utilisez ^|\hglue| ou ^|\vglue|.
+
+Vous pouvez utiliser |\kern| en mode math\'ematique, mais vous ne pouvez pas utiliser d'unit\'es |mu|
+\seeconcept{unit\'e math\'ematique}
+pour \<dimension>. Si vous voulez des unit\'es |mu|, utilisez |\mkern|
+(\xref\mkern) \`a la place.
+^^{coupures de ligne//cr\'enages sur des}
+^^{coupures de page//cr\'enages sur des}
+
+\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^^{ressort//\'etirable infiniment}
+Ces commandes produisent des ressorts horizontaux et verticaux \'etirables
+infiniment qui
+\'ecrasent tout \'etirement fini qui peut \^etre pr\'esent.
+|\hfil| et |\hfill| produisent des ressorts horizontaux, tandis que
+|\vfil| et |\vfill| produisent des ressorts verticaux.
+
+|\hfill| est infiniment plus grand que |\hfil|.
+Si |\hfill| et |\hfil| apparaissent dans la m\^eme \minref{bo\^\i te},
+le |\hfill| consumera toute la place suppl\'ementaire possible
+et le |\hfil| sera effectivement ignor\'e.
+|\hfill| peut \`a son tour est \'ecras\'e par |\hskip 0pt plus 1filll|.
+Les ressorts produits par
+|\hfil| et |\hfill| ne r\'etr\'ecissent jamais.
+
+Le comportement de |\vfil| et |\vfill| est analogue.
+
+\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^^{ressort//\'etirable infiniment}
+\enddesc
+
+\begindesc
+\cts hss {}
+\cts vss {}
+\explain
+Ces commandes produisent des ressorts horizontaux et
+verticaux qui sont infiniment \'etirables et
+r\'etr\'ecissables. Le ressort peut se r\'etr\'ecir
+sur une distance n\'egative, produisant l'effet de reculer sur une ligne
+(pour |\hss|) ou remonter sur une page (pour |\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
+^^{ressort//n\'egatif}
+Ces commandes effacent l'effet d'un |\hfil| ou d'un |\vfil|
+pr\'ec\'edent. Tandis que |\hfil| et |\vfil| produisent un
+\minref{ressort} positif infiniment \'etirable, |\hfilneg| et |\vfilneg|
+produisent un ressort n\'egatif infiniment \'etirable.
+(ainsi, $n$ |\hfilneg| effacent $n$ ^|\hfil| et pareillement
+pour le |\vfilneg|.)
+L'utilisation principale de |\hfilneg| et de |\vfilneg| est de contrecarrer
+l'effet d'un |\hfil| ou d'un |\vfil| ins\'er\'e par une \minref{macro}.
+
+|\hfilneg| et |\vfilneg| ont
+la propri\'et\'e curieuse, s'ils sont les seuls ressorts infiniment \'etirables
+d'une bo\^\i te, de produire exactement le m\^eme effet que |\hfil|
+et |\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| et |\vbadness| (\xref \vbadness),
+|\hfuzz| et |\vfuzz| (\xref \vfuzz),
+\conceptcit{filets}.\par}
+\eix^^{espace//production d'}
+\eix^^{espace horizontal}
+\eix^^{espace vertical}
+
+%==========================================================================
+\section {Manipuler des bo\^\i tes}
+
+%==========================================================================
+\subsection {Construire des hbox et des vbox}
+
+\begindesc
+\bix^^{commandes de \boites}
+^^{hbox//construction avec \b\tt\\hbox\e}
+%
+\cts hbox {\rqbraces{\<mat\'eriel en mode horizontal>}}
+\aux\cts hbox {{\bt to} \<dimension> \rqbraces{\<mat\'eriel en mode horizontal>}}
+\aux\cts hbox {{\bt spread} \<dimension> \rqbraces{\<mat\'eriel en mode horizontal>}}
+\explain
+Ces commandes produisent une hbox
+(\minref{bo\^\i te} horizontale) contenant du \<mat\'eriel en mode horizontal>.
+Les accolades autour du \<mat\'eriel en mode horizontal> d\'efinissent un groupe.
+\TeX\ ne coupe pas le \<mat\'eriel en mode horizontal> en plusieurs lignes,
+puisqu'il est en mode horizontal restreint quand il assemble la bo\^\i te.
+\TeX\ ne change pas la taille de la bo\^\i te une fois qu'elle est produite.
+
+|\hbox| est souvent utile quand vous voulez conserver du texte sur une seule ligne.
+Si votre utilisation de |\hbox| emp\^eche \TeX\ de couper des lignes de mani\`ere acceptable,
+\TeX\ se plaindra d'un ``overfull hbox''.
+
+La largeur du hbox d\'epend des arguments de |\hbox|~:
+\ulist\compact
+\li Si vous ne sp\'ecifiez que du \<mat\'eriel en mode horizontal>,
+le hbox aura sa \minref{largeur} naturelle.
+\li Si vous sp\'ecifiez |to| \<dimension>, la largeur du hbox sera \<dimension>.
+\li Si vous sp\'ecifiez |spread| \<dimension>, la largeur du hbox sera
+sa largeur naturelle plus \<dimension>, c'est-\`a-dire, le hbox s'allongera de
+\<dimension>.
+\endulist
+
+La commande ^|\hfil| (\xref\hfil) est utile pour remplir un
+hbox d'espace vide quand le mat\'eriel dans la bo\^\i te n'est pas aussi large que la
+largeur de la bo\^\i te.
+\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 {\<mat\'eriel en mode vertical>}
+\aux\cts vtop {{\bt to} \<dimension> \rqbraces{\<mat\'eriel en mode vertical>}}
+\aux\cts vtop {{\bt spread} \<dimension> \rqbraces{\<mat\'eriel en mode vertical>}}
+\cts vbox {\rqbraces{\<mat\'eriel en mode vertical>}}
+\aux\cts vbox {{\bt to} \<dimension> \rqbraces{\<mat\'eriel en mode vertical>}}
+\aux\cts vbox {{\bt spread} \<dimension> \rqbraces{\<mat\'eriel en mode vertical>}}
+\explain
+^^{hbox//construction avec \b\tt\\hbox\e}
+Ces commandes
+produisent une \minref{vbox} (\minref{bo\^\i te} verticale)
+contenant du \<ma\-t\'eriel en mode vertical>.
+Les accolades autour du \<mat\'eriel en mode vertical> d\'efinissent un groupe.
+\TeX\ est en mode vertical interne quand il assemble la bo\^\i te.
+\TeX\ ne change pas la taille de la bo\^\i te une fois qu'elle est produite.
+
+La diff\'erence entre |\vtop| et |\vbox| est o\`u \TeX\ met
+le point de r\'ef\'erence de la vbox construite.
+Normalement, le point de r\'ef\'erence obtenu de |\vtop| tend \`a \^etre sur ou pr\`es
+du haut de la vbox construite,
+tandis que
+le point de r\'ef\'erence obtenu de |\vbox| tend \`a \^etre sur ou pr\`es
+du bas de la vbox construite.
+Ainsi une rang\'ee de vbox toutes construites avec |\vtop|
+tendra \`a avoir leurs hauts \`a peu pr\`es align\'es,
+tandis qu'une rang\'e de vbox toutes construites avec |\vbox|
+tendra \`a avoir leurs bas \`a peu pr\`es align\'es.
+
+|\vtop| et |\vbox| sont souvent pratiques
+quand vous voulez garder du texte ensemble sur une seule page.
+(Pour cela, peu importe normalement quelle commande vous utilisez.)
+Si votre usage de ces commandes
+emp\^eche \TeX\ de couper des pages d'une mani\`ere acceptable,
+\TeX\ se plaindra qu'il a trouv\'e un ``overfull'' ou un ``underfull vbox while
+|\output| is active''.
+
+La hauteur d'une vbox d\'epend des
+arguments de |\vtop| ou |\vbox|.
+Pour |\vbox|, \TeX\ d\'etermine la hauteur de la mani\`ere suivante~:
+\ulist\compact
+\li Si vous ne sp\'ecifiez que du \<mat\'eriel en mode vertical>,
+la vbox aura sa hauteur naturelle.
+\li Si vous sp\'ecifiez |to| \<dimension>,
+la hauteur de la vbox sera fix\'ee \`a \<dimension>.
+\li Si vous sp\'ecifiez |spread| \<dimension>, la hauteur de la vbox sera
+sa hauteur naturelle plus \<dimension>, c'est-\`a-dire,
+que la hauteur de la vbox sera \'etir\'ee verticalement de \<dimension>.
+\endulist
+\noindent
+Pour |\vtop|,
+\TeX\ construit la bo\^\i te en utilisant ses r\`egles pour |\vbox| et ensuite
+r\'epartit l'extension verticale entre la hauteur et la profondeur comme
+d\'ecrit ci-dessous.
+
+Normalement, la largeur d'une vbox construite est la largeur de l'\'el\'e\-ment le plus
+large contenu\footnote
+{Plus pr\'ecis\'ement, c'est la distance du point de r\'ef\'erence au cot\'e le plus \`a
+droite de la vbox construite. Par cons\'equent,
+si vous d\'eplacez un des \'el\'ements vers la droite en utilisant ^|\moveright| ou
+^|\moveleft| (avec une distance n\'egative),
+la vbox construite pourra \^etre plus large.}.
+Les r\`egles de r\'epartitions de l'extension verticale entre la
+hauteur et la profondeur sont plus compliqu\'ees~:
+\ulist
+\li Pour |\vtop|,
+la hauteur est la hauteur de son premier \'el\'ement, si cet \'el\'ement est une bo\^\i te ou un filet.
+Autrement la hauteur est \`a z\'ero. La profondeur est toute extension verticale
+restante quand la hauteur a \'et\'e enlev\'ee.
+\li Pour |\vbox|,
+la profondeur est la profondeur de son dernier \'el\'ement, si cet \'el\'ement est une bo\^\i te ou un filet.
+Autrement la profondeur est \`a z\'ero. La hauteur est toute extension verticale
+restante quand la profondeur a \'et\'e enlev\'ee%
+\footnote{En fait, il y a une complication suppl\'ementaire.
+Supposez qu'apr\`es que la profondeur ait \'et\'e d\'etermin\'ee
+en utilisant les deux r\`egles pr\'ec\'edentes, la profondeur devienne plus grande que
+^|\boxmaxdepth|.
+Alors la profondeur est r\'eduite \`a |\boxmaxdepth| et la hauteur est ajust\'ee
+en cons\'equence.}.
+\endulist
+
+La commande |\vfil| (\xref\vfil) est pratique pour remplir une vbox
+^^|\vfil//remplir une vbox|
+avec de l'espace vide quand le mat\'eriel dans la bo\^\i te n'est pas aussi grand que
+l'extention verticale de la bo\^\i te.
+\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{dimension}}
+\explain
+Ce param\`etre contient une dimension $D$.
+\TeX\ ne construira pas une bo\^\i te dont la profondeur d\'epassera $D$.
+Si vous produisez une bo\^\i te dont la profondeur $d$ doit d\'epasser $D$,
+\TeX\ transf\`erera la
+profondeur exc\'edentaire dans la hauteur de la bo\^\i te, en abaissant en r\'ealit\'e le
+\minref{point de r\'ef\'erence} de la bo\^\i te de $d-D$.
+Si vous mettez |\boxmaxdepth| \`a z\'ero, \TeX\ alignera une rang\'ee de vbox
+de telle mani\`ere que leurs fronti\`eres du bas seront toutes sur la m\^eme ligne horizontale.
+\PlainTeX\ met |\boxmaxdepth| \`a |\maxdimen| \ctsref{\maxdimen},
+donc |\boxmaxdepth| n'affectera pas vos bo\^\i tes \`a moins que vous le changiez.
+\enddesc
+
+\begindesc
+\cts underbar {\<argument>}
+\explain
+Cette commande met \<argument> dans une \minref{hbox}
+et la souligne sans faire attention \`a tout ce que d\'epasse sous la
+\minref{ligne de base} de la bo\^\i te.
+\example
+\underbar{Why not learn \TeX?}
+|
+\produces
+\underbar{Why not learn \TeX?}
+\endexample
+\enddesc
+
+\begindesc
+\cts everyhbox {\param{liste de token}}
+\cts everyvbox {\param{liste de token}}
+\explain
+Ces param\`etres contiennent des liste de token que \TeX\ d\'eveloppe au d\'ebut de
+toutes \minref{hbox} ou \minref{vbox} qu'il construit.
+Tout \'el\'ement r\'esultant de l'expansion devient alors
+le d\'ebut de la liste d'\'el\'ements pour la bo\^\i te.
+Par d\'efaut, ces listes de token sont vides.
+\enddesc
+
+%==========================================================================
+\subsection {Remplir et r\'ecuperer le contenu de bo\^\i tes}
+
+\begindesc
+\bix^^{registres de \boite}
+%
+\cts setbox {\<registre>\thinspace{\bt =}\thinspace\<bo\^\i te>}
+\cts box {\<registre>}
+\explain
+^^{assignements//de \boites}
+Ces commandes remplissent et r\'ecup\`erent respectivement le contenu
+du registre de bo\^\i te
+dont le num\'ero est \<registre>.
+Notez que vous remplissez un registre de bo\^\i te d'une mani\`ere un peu diff\'erente de celle
+utilis\'ee pour les autres types de registres~: vous utilisez
+|\setbox|$\,n$~|=| plut\^ot que |\box|$\,n$~|=|.
+
+\emph{R\'ecup\'erer le contenu d'un registre de bo\^\i te
+avec ces commandes a l'effet secondaire d'enlever ce qu'il contient,
+donc le registre de bo\^\i te devient vide.} Si vous ne voulez pas que cela arrive,
+vous pouvez utiliser |\copy| (voir ci-dessous) pour r\'ecup\'erer le contenu.
+Vous devez utiliser |\box| de pr\'ef\'erence \`a |\copy|
+quand vous n'avez plus besoin du contenu d'un registre de bo\^\i te apr\`es l'avoir utilis\'e,
+de mani\`ere \`a ne pas augmenter la m\'emoire de \TeX\ en la remplissant avec des bo\^\i tes obsol\`etes.
+\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 {\<registre>}
+\explain
+^^{\boites//copie}\minrefs{box}
+Cette commande
+produit une copie d'un registre de bo\^\i te \<registre>.
+Cette commande est utile quand vous voulez r\'ecup\'erer le contenu d'un registre
+de bo\^\i te mais ne voulez pas en d\'etruire le contenu.
+(R\'ecup\'erer le contenu d'un registre avec ^|\box| rend le registre vide.)
+\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 {\<registre>}
+\cts unvbox {\<registre>}
+^^{\boites//extraction de contenu de}
+\explain
+Ces commandes produisent la liste contenue dans un registre de bo\^\i te \<registre> et rend
+ce registre de bo\^\i te vide.
+|\unhbox| s'applique aux registres de bo\^\i te contenant
+des hbox et |\unvbox| s'applique aux registres de bo\^\i te contenant des vbox.
+Vous devez utiliser ces commandes en pr\'ef\'erence \`a |\unhcopy| et |\unvcopy|
+(voir ci-dessous)
+quand vous n'avez pas besoin de ce qu'il y a dans le registre de bo\^\i te apr\`es l'avoir utilis\'e,
+de mani\`ere \`a ne pas augmenter la m\'emoire de \TeX\ en la remplissant avec des bo\^\i tes obsol\`etes.
+\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 {\<registre>}
+\cts unvcopy {\<registre>}
+^^{\boites//extraction du contenu de}
+^^{\boites//copie}\minrefs{box}
+\explain
+Ces commandes produisent la liste contenue dans un registre de bo\^\i te \<registre> et
+sans d\'eranger le contenu des registres.
+|\unhbox| s'applique aux registres de bo\^\i te contenant
+des hbox et |\unvbox| s'applique aux registres de bo\^\i te contenant des vbox.
+\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^^{registres de \boite}
+
+%==========================================================================
+\subsection {D\'eplacer des bo\^\i tes}
+
+\begindesc
+\cts moveleft {\<dimension> \<bo\^\i te>}
+\cts moveright {\<dimension> \<bo\^\i te>}
+\bix^^{\boites//d\'eplacement}
+\minrefs{box}
+\explain
+Ces commandes d\'eplacent \<bo\^\i te> \`a gauche ou \`a droite de \<dimension> (qui peut \^etre
+n\'egatif). Vous ne pouvez appliquer |\moveleft| et |\moveright| qu'\`a des bo\^\i tes
+qui sont dans une \minref{liste verticale}.
+\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 {\<dimension> \<bo\^\i te>}
+\cts raise {\<dimension> \<bo\^\i te>}
+\explain
+Ces commandes d\'eplacent \<bo\^\i te> en haut ou en bas de \<dimension>
+(qui peut \^etre n\'egatif).
+Vous ne pouvez appliquer |\moveleft| et |\moveright| qu'\`a des bo\^\i tes
+qui sont dans une \minref{liste horizontale}.
+\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^^{\boites//d\'eplacement}
+\enddesc
+
+%==========================================================================
+\subsection {Dimensions des registres de bo\^\i tes}
+
+\begindesc
+\bix^^{registres de \boite}
+\bix^^{dimensions//de registres de \boite}
+\cts ht {\<registre>\param{dimension}}
+\cts dp {\<registre>\param{dimension}}
+\cts wd {\<registre>\param{dimension}}
+\explain
+Ces param\`etres font r\'ef\'erence \`a la ^{hauteur}, la ^{profondeur} et la ^{largeur}
+respectivement du \minref{registre} de \minref{bo\^\i te} \<registre>.
+Vous pouvez les utiliser pour conna\^\i tre les dimensions d'une bo\^\i te.
+Vous pouvez aussi changer les dimensions d'une bo\^\i te, mais ce n'est pas une mince affaire~;
+si vous voulez \^etre aventureux vous pouvez
+apprendre tout sur cela dans les \
+{pages~388--389}{448--449}.
+\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^^{registres de \boite}
+\eix^^{dimensions//de registres de \boite}
+\enddesc
+
+%==========================================================================
+\subsection {Struts, fantomes et bo\^\i tes vides}
+
+\begindesc
+\margin{This subsection is a merger of two previous subsections.
+The commands have also been reordered.}
+\bix^^{struts}
+\cts strut {}
+\explain
+Cette commande produit une bo\^\i te dont la largeur est \`a z\'ero
+et dont la hauteur (|8.5pt|) et la profondeur (|3.5pt|)
+sont celles d'une ligne de caract\`ere plus ou moins en |cmr10|,
+la police par d\'efaut de \plainTeX.
+Son utilisation principale est de forcer des lignes \`a avoir la m\^eme hauteur
+quand vous avez d\'ebranch\'e le ressort inter-ligne de \TeX\ avec
+|\offinter!-lineskip| ^^|\offinterlineskip| ou une commande similaire,
+par exemple, quand vous construisez un alignement.
+Si la hauteur naturelle d'une ligne est
+trop petite, vous pouvez la ramener au standard en incluant un |\strut|
+dans la ligne. Le strut forcera la hauteur et la profondeur de la ligne
+\`a \^etre plus grande, mais il n'imprime rien ni ne consomme aucun espace
+horizontal.
+
+Si vous mettez des caract\`eres d'une police qui est plus grande ou plus petite que |cmr10|,
+vous devez red\'efinir |\strut| pour ce contexte.
+\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
+Cette commande produit une formule fant\^ome dont la largeur est \`a z\'ero
+et dont la largeur et la hauteur sont les m\^emes que celle d'une parenth\`ese gauche.
+|\mathstrut| est en fait d\'efini comme `|\vphantom(|'.
+Son utilisation principale est d'obtenir des radicaux, soulign\'es et surlign\'es align\'es
+avec d'autres radicaux, soulign\'es et surlign\'es d'une formule.
+C'est un peu comme ^|\strut| (\xref \strut),
+sauf qu'il s'ajuste lui-m\^eme aux diff\'erents \minref{style}s
+qui peuvent appara\^\i tre dans une formule math\'ematique.
+\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^^{\boites//fant\^ome}
+\bix^^{fant\^omes}
+Cette commande produit une \minref{bo\^\i te} vide
+ayant la m\^eme taille et placement
+que \<argument> aurait s'il \'etait compos\'e.
+Une utilisation de |\phantom| est de r\'eserver de l'espace pour un symbole qui pour certaines
+raisons demande \`a \^etre dessin\'e \`a la main.
+\example
+$1\phantom{9}2$
+|
+\produces
+$1\phantom{9}2$
+\endexample
+\enddesc
+
+\begindesc
+\cts hphantom {\<argument>}
+\cts vphantom {\<argument>}
+\explain
+Ces commandes produisent des bo\^\i tes\minrefs{bo\^\i te}\ fant\^ome qui
+n'impriment rien~:
+\ulist\compact
+\li |\hphantom| produit une bo\^\i te avec la m\^eme largeur que \<argument>
+mais de hauteur et profondeur z\'ero.
+\li |\vphantom| produit une bo\^\i te avec les m\^emes hauteur et profondeur que \<argu\-ment>
+mais de largeur z\'ero.
+\endulist
+\noindent
+Leur usage principal est de forcer une sous-formule \`a avoir un dimension
+horizontale ou verticale minimum.
+\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
+Cette commande compose \<argument>,
+mais force la hauteur et la profondeur de sa \minref{bo\^\i te} contenante \`a z\'ero.
+Vous pouvez utiliser |\smash| et |\vphantom| en combinaison pour donner \`a une sous-formule
+toutes hauteurs et profondeurs que vous d\'esirez.
+\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^^{\boites//fant\^ome}
+\eix^^{fant\^omes}
+\enddesc
+
+\begindesc
+^^{\boites//vides}
+\cts null {}
+\explain
+Cette commande produit une \minref{hbox} vide.
+\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 {Param\`etres faisant partie des bo\^\i tes mal form\'ees}
+
+\begindesc
+\bix^^{\boites//overfull}
+\bix^^{\boites//underfull}
+\cts overfullrule {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie la largeur du filet
+que \TeX\ positionne pour un ``overfull \minref{hbox}''.
+\PlainTeX\ le met \`a |5pt|.
+\enddesc
+
+\begindesc
+\cts hbadness {\param{nombre}}
+\cts vbadness {\param{nombre}}
+\explain
+Ces param\`etres sp\'ecifient les seuils de \minref{badness} horizontal
+et vertical pour rapporter des ``underfull'' ou ``overfull boxes''
+|\hbadness| s'applique aux hbox et |\vbadness| s'applique aux vbox.
+Si la m\'ediocrit\'e d'une bo\^\i te construite d\'epasse le seuil,
+\TeX\ reportera une erreur. Si vous augmentez les seuils
+(les valeurs par d\'efaut de \plainTeX\ sont de $1000$),
+\TeX\ sera moins amen\'e \`a se plaindre.
+Notez que les valeurs de |\hbadness| et |\vbadness| n'ont pas d'effet sur
+l'apparence de votre document compos\'e~; ils n'affectent que le message d'erreur
+que vous obtenez.
+Voir la \knuth{page~302}{353} pour une description pr\'ecise
+sur comment \TeX\ d\'ecide quand se plaindre d'``overfull'' ou d'``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
+Cette commande donne la valeur num\'erique de la m\'ediocrit\'e de la \minref{bo\^\i te}
+(aussi bien horizontale que verticale) que \TeX\ a le plus r\'ecemment produit.
+Si la bo\^\i te \'etait ``overfull'', |\badness| sera de $1000000$~; dans tous les autres cas
+il sera entre $0$ et $10000$.
+\enddesc
+
+\begindesc
+\cts hfuzz {\param{dimension}}
+\cts vfuzz {\param{dimension}}
+\explain
+Ces param\`etres sp\'ecifient les valeurs dont une
+\minref{bo\^\i te} peut d\'epasser sa taille naturelle avant que \TeX\ la consid\`ere comme
+\'etant overfull. ^^{\boites//overfull}
+|\hfuzz| s'applique aux hbox et |\vfuzz| s'applique aux vbox.
+\PlainTeX\ met ces deux param\`etres \`a |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^^{\boites//overfull}
+\eix^^{\boites//underfull}
+\eix^^{commandes de \boites}
+\enddesc
+
+\see |\tolerance| \ctsref{\tolerance}.
+%==========================================================================
+\section {Retrouver le dernier \'el\'ement d'une liste}
+
+\begindesc
+^^{\boites//derni\`ere \boite\ dans une liste}
+^^{cr\'enages//dernier cr\'enage dans une liste}
+^^{p\'enalit\'es//derni\`ere p\'enalit\'e dans une liste}
+^^{ressort//dernier \'el\'ement de ressort dans une liste}
+\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
+Ces s\'equences de contr\^ole donnent la valeur du dernier \'el\'ement de la liste
+courante. Ce ne sont pas de vraies commandes parce qu'elles ne peuvent appara\^\i tre que
+comme partie d'un argument.
+Si le dernier \'el\'ement de la liste n'est pas du type indiqu\'e,
+elles donnent une valeur z\'ero (ou une bo\^\i te vide, dans le cas de |\lastbox|).
+Par exemple,
+si le dernier \'el\'ement de la liste courante est un \minref{cr\'enage},
+|\lastkern| donne la dimension de ce cr\'enage~; si ce
+n'est pas un cr\'enage, il donne une dimension de $0$.
+
+Utiliser |\lastbox| a l'effet suppl\'ementaire d'enlever la derni\`ere bo\^\i te de
+la liste.
+Si vous voulez que le |\last!-box| original reste dans la liste, vous
+devez en ajouter une copie dans la liste.
+|\last!-box| n'est pas permise dans une liste math\'ematique ou dans la liste
+verticale~principale.
+
+Ces s\'equences de contr\^ole sont
+plus utiles apr\`es des appels de macro qui peuvent avoir ins\'er\'e des entit\'es
+du genre indiqu\'e.
+
+\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
+Si le dernier \'el\'ement de la liste courante est de type \minref{cr\'enage},
+\minref{ressort} ou \minref{p\'enalit\'e} respectivement, ces commandes l'enl\`event
+de cette liste. Si l'\'el\'ement n'est pas du bon type, ces commandes n'ont
+pas d'effet. Comme ^|\lastbox|, vous ne pouvez pas les appliquer \`a des listes en
+mode math\'ema\-tique ou \`a la liste verticale principale.
+Ces commandes
+sont plus pratiques apr\`es un appel de macro connu pour avoir ins\'er\'e
+un \'el\'ement sp\'ecifique que vous ne voulez pas ici.
+\TeX\ ne procure pas de commande ^|\unbox| parce que |\lastbox| produit
+\`a peu pr\`es le m\^eme effet.
+\enddesc
+
+
+%==========================================================================
+\section {filets et r\`eglures}
+
+\begindesc
+\bix^^{filets}
+\bix^^{filets horizontaux}
+\bix^^{filets verticaux}
+%
+\cts hrule {}
+\aux\cts hrule {\bt height \<dimension> width \<dimension> depth \<dimension>}
+\cts vrule {}
+\aux\cts vrule {{\bt width \<dimension> height \<dimension> depth \<dimension>}}
+\explain
+La commande |\hrule| produit un filet horizontal. La commande |\vrule|
+produit un filet vertical. Vous pouvez sp\'ecifier tout ou une partie des largeur,
+hauteur et profondeur du filet---\TeX\ apporte des valeurs par d\'efaut pour celles
+que vous omettez. Vous pouvez donner les dimensions du filet dans n'importe quel ordre~;
+les formes list\'ees ci-dessus vous montrent simplement deux combinaisons possibles. Vous
+pouvez m\^eme donner une dimension d'un type donn\'e plus d'une fois---si vous le faites,
+la derni\`ere sera celle qui sera prise en compte.
+
+Si vous ne sp\'ecifiez pas la largeur d'un filet horizontal, le filet est
+\'etendu horizontalement jusqu'aux limites de la \minref{bo\^\i te} ou de
+l'\minref{alignement} le plus interne qui contient le filet. Si vous ne sp\'ecifiez pas
+la hauteur d'un filet horizontal, elle sera par d\'efaut de |0.4pt|~; si vous ne
+sp\'ecifiez pas la profondeur d'un filet horizontal, elle sera par d\'efaut de |0pt|.
+
+Si vous ne sp\'ecifiez pas la largeur d'un filet vertical, elle sera par d\'efaut de
+|0.4pt|. Si vous ne sp\'ecifiez pas la hauteur d'un filet vertical,
+le filet est \'etendu jusqu'aux limites de la \minref{bo\^\i te} ou de
+l'\minref{alignement} le plus interne qui contient le filet.
+
+\TeX\ traite un filet horizontal comme un \'el\'ement naturellement vertical
+et un filet vertical comme un \'el\'ement naturellement horizontal.
+Donc un filet horizontal n'est l\'egal qu'en \minref{mode vertical},
+Tandis qu'un filet vertical n'est l\'egal qu'en \minref{mode horizontal}.
+^^{mode horizontal//filets en}
+^^{mode vertical//filets en}
+Si cela semble surprenant, visualisez le---un filet horizontal va
+de gauche \`a droite et s\'epare des \'el\'ements verticaux dans une s\'equence, tandis
+qu'un filet vertical va de haut en bas et
+s\'epare des \'el\'ements horizontaux dans une s\'equence.
+
+\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^^{filets}
+\eix^^{filets horizontaux}
+\eix^^{filets verticaux}
+\enddesc
+
+\begindesc
+\bix^^{r\`eglures}
+\easy\cts leaders {\<bo\^\i te ou filet> \<commande de saut>}
+\cts cleaders {\<bo\^\i te ou filet> \<commande de saut>}
+\cts xleaders {\<bo\^\i te ou filet> \<commande de saut>}
+\explain
+Ces commandes produisent des \minref{r\'eglures}, c'est-\`a-dire, qu'elles remplissent un
+espace horizontal ou vertical avec des
+copies d'un motif \seeconcept{filets}.
+La \<bo\^\i te> ou le \<filet> sp\'ecifie une r\'eglure,
+c'est-\`a-dire, une seule copie du motif,
+tandis que la \<commande de saut> sp\'ecifie une
+fen\^etre devant \^etre remplie avec une
+rang\'ee ou une colonne de r\'eglures.
+Le motif est r\'ep\'et\'e autant de fois qu'il peut rentrer dans la fen\^etre.
+Si \<commande de saut> est un saut horizontal, la fen\^etre
+contient une rang\'ee de r\'eglures et \TeX\ doit \^etre en mode horizontal~;
+si \<commande de saut> est un saut vertical, la fen\^etre
+contient une colonne de r\'eglures et \TeX\ doit \^etre en mode vertical.
+
+Les commandes diff\`erent dans leur fa\c con d'arranger le motif r\'ep\'et\'e
+et o\`u elles mettent l'espace restant~:
+
+\ulist\compact
+\li Pour |\leaders|, \TeX\ aligne une rang\'ee de r\'eglures avec la limite gauche de
+la \minref{bo\^\i te} $B$ la plus interne qui contient le r\'esultat de la
+commande |\leaders|.
+Elle aligne une colonne de r\'eglures avec le haut de $B$.
+Ces r\'eglures qui tombent enti\`erement dans la fen\^etre sont gard\'ees.
+Tout espace en plus en haut et en bas de la fen\^etre est laiss\'e vide.
+\li Pour |\cleaders|, les r\'eglures sont centr\'ees dans la fen\^etre.
+\li Pour |\xleaders| le motif est uniform\'ement distribu\'e \`a travers la fen\^etre.
+Si l'espace en plus est $l$ et que la r\'eglure est r\'ep\'et\'ee $n$ fois,
+\TeX\ met de l'espace de largeur ou hauteur $l/(n+1)$ entre des r\'eglures adjacentes et
+aux deux bouts (gauche et droite ou haut et bas) des r\'eglures.
+\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
+^^{remplissage}
+Ces commandes remplissent respectivement l'espace horizontal englob\'e avec
+une rang\'ee de points sur la ligne de base et avec
+une ligne horizontale sur la ligne de base.
+C'est habituellement une bonne id\'ee de laisser un espace entre
+|\dotfill| ou |\hrulefill|
+et le texte qui la pr\'ec\`ede ou la suit (voir l'exemple ci-dessous).
+\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
+^^{remplissage}
+Ces commandes remplissent l'espace horizontal englob\'e avec
+des ^{fl\`eches} point\'ees vers la gauche ou vers la droite.
+\example
+\hbox to 3in{\vrule \rightarrowfill \ 3 in
+ \leftarrowfill\vrule}
+|
+\produces
+\medskip
+\hbox to 3in{\vrule \rightarrowfill \ 3 in
+ \leftarrowfill\vrule}
+\endexample
+
+\eix^^{r\`eglures}
+\enddesc
+
+%==========================================================================
+\section {Alignements}
+
+%==========================================================================
+\subsection {Alignements tabul\'es}
+
+\begindesc
+\bix^^{alignements tabul\'es}
+\bix^^{alignements//commandes pour}
+%
+\ctspecial + {{\bt \<texte>\thinspace\&\thinspace\<texte>%
+ \thinspace\& $\cdots$ \\cr}}
+\ctsxrdef{@plus}
+\cts tabalign {}
+\explain
+Ces commandes d\'ebutent une simple ligne dans un \minref{alignement} tabul\'e .
+La seule diff\'erence entre |\+| et |\tabalign| est que
+|\+| est une macro outer ---vous ne pouvez pas l'utiliser quand \TeX\ lit des tokens \`a
+haute vitesse \seeconcept{outer}.
+
+Si vous placez un `|&|' \`a une position
+\`a droite de toute tabulation existante dans un alignement tabul\'e,
+le `|&|' \'etablit une nouvelle tabulation \`a cette 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 {\<nombre> {\bt \\columns}}
+\aux\cts settabs {{\bt \\+} \<ligne d'exemple> {\bt \\cr}}
+\explain
+La premi\`ere forme de
+cette commande d\'efinit un jeu de tabulations d'arr\^et ^^{tabulations}
+pour un \minref{alignement} tabul\'e.
+Elle demande \`a \TeX\ de mettre les tabulations d'arr\^et de mani\`ere \`a diviser chaque ligne en
+\<nombre> parties \'egales. \TeX\ prend la longueur d'une ligne comme \'etant
+|\hsize|, normalement. Vous pouvez rendre l'alignement plus \'etroit en diminuant
+|\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
+
+La seconde forme de cette commande d\'efinit des tabulations d'arr\^et en mettant les tabulations d'arr\^et
+aux positions indiqu\'ees par les `|&| dans la ligne d'exemple.
+La ligne d'exemple elle-m\^eme ne doit pas appara\^\i tre dans la sortie. Quand vous
+utilisez cette forme vous devrez normalement mettre du mat\'eriel dans la ligne d'exemple qui sera
+un peu plus large que le plus large mat\'eriel correspondant dans l'alignement,
+de mani\`ere \`a produire de l'espace entre les colonnes.
+C'est ce que nous avons fait dans
+l'exemple ci-dessous. Le mat\'eriel suivant la derni\`ere tabulation
+d'arr\^et est inutile, puisqu'il n'a pas besoin de positionner
+quoi que ce soit \`a l'endroit o\`u le |\cr|~appara\^\i t.
+
+Les r\'eglages de tabulation \'etablies par |\settabs| restent actifs jusqu'\'a
+une nouvelle commande |\settabs| ou la fin du groupe contenant |\set!-tabs|. Ceci est vrai pour
+les deux formes de la commande.
+
+\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
+Cette commande efface toutes les tabulations \`a droite de la colonne courante.
+Son utilisation principale est dans des applications telles que la composition de programme informatique
+dans lesquels les positions de tabulation changent \`a chaque ligne.
+\enddesc
+
+\see |\cr|, |\endline|, |\crcr| (\xref \endline).
+\eix^^{alignements tabul\'es}
+
+%==========================================================================
+\subsection {Alignement g\'en\'eraux}
+
+\begindesc
+{\tighten
+\cts halign {{\bt \rqbraces{\<pr\'eambule> \\cr \<rang> \\cr $\ldots$ \<rang> \\cr}}}
+ \xrdef{@and}\xrdef{@pound}
+\aux\cts halign {{\bt to \<dimension>%
+ \rqbraces{\<pr\'eambule> \\cr \<rang> \\cr $\ldots$ \<rang> \\cr}}}
+\aux\cts halign {{\bt spread \<dimension>%
+ \rqbraces{\<pr\'eambule> \\cr \<rang> \\cr $\ldots$ \<rang> \\cr}}}
+\par}
+\explain
+Cette commande produit un \minref{alignement} horizontal constitu\'e d'une
+suite de rang\'ees, o\`u chaque rang\'ee \`a son tour contient une suite
+d'entr\'ee de colonne. \TeX\ ajuste les largeurs des entr\'ees de colonne
+pour accommoder la plus large dans chaque colonne.
+
+Un alignement horizontal n'appara\^\i t que quand \TeX\ est dans un \minref{mode}
+vertical. Nous vous recommandons d'apprendre les alignements en g\'en\'e\-ral
+(\xref{alignement}) avant d'essayer d'utiliser la commande |\valign|.
+
+Un alignement consiste en un ^{pr\'eambule}
+suivi par le texte \`a aligner. Le pr\'eambule,
+qui d\'ecrit la forme des rang\'ees qui le suivent, consiste en une
+suite de patrons de colonne, s\'epar\'es par `|&|' et termin\'e
+par |\cr|.
+\bix^^{patron}
+\bix^^{entr\'ee (colonne ou rang\'ee)}
+Chaque rang\'ee consiste en une suite d'entr\'ees
+de ^{colonne}, s\'epar\'ees aussi par `|&|' et termin\'ees par |\cr|. Dans
+un patron, `|#|' indique o\`u \TeX\ doit ins\'erer le
+texte correspondant \`a l'entr\'ee de colonne.
+Par contre, |\settabs| utilise un patron fixe implicite \`a `|#|',
+c'est-\`a-dire, qu'il ins\`ere simplement le texte tel quel.
+
+\TeX\ compose chaque entr\'ee de colonne en mode horizontal restreint,
+c'est-\`a-dire, comme le contenu d'une \minref{hbox},
+et englobe implicitement l'en\-tr\'ee dans un groupe.
+
+La forme |to| de cette commande demande \`a \TeX\
+d'\'etendre la largeur de l'alignement \`a \<dimension>,
+en ajustant l'espace entre les colonnes.
+La forme |spread| de cette commande demande \`a \TeX\
+d'agrandir l'alignement de \<dimension> par rapport \`a sa largeur naturelle.
+Ces formes sont comme les formes correspondantes de |\hbox| \ctsref\hbox.
+
+Voir |\tabskip| \ctsref\tabskip{} pour un exemple d'utilisation de la
+forme |to|.
+
+\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{\<pr\'eambule>\\cr \<colonne>\\cr $\ldots$
+ \<colonne>\\cr}}}
+\aux\cts valign {{\bt to \<dimension>%
+ \rqbraces{\<pr\'eambule>\\cr \<colonne>\\cr $\ldots$ \<colonne>\\cr}}}
+\aux\cts valign {{\bt spread \<dimension>%
+ \rqbraces{\<pr\'eambule>\\cr \<col.>\\cr $\ldots$ \<col.>\\cr}}}
+\par}
+\explain
+Cette commande produit un \minref{alignement} vertical
+constitu\'e d'une
+suite de colonnes, o\`u chaque colonne \`a son tour contient une suite
+d'entr\'ees de rang\'ee.
+\TeX\ ajuste les hauteurs des entr\'ees de rang\'ee pour accommoder la plus longue
+dans chaque rang\'ee.
+
+Un alignement vertical
+n'appara\^\i t que quand \TeX\ est dans un \minref{mode} horizontal.
+Puisque les alignements verticaux sont (a)~conceptuellement assez difficiles et
+(b)~peu souvent utilis\'es, nous vous recommandons d'ap\-prendre les
+alignements en g\'en\'eral
+(\xref{alignement}) et la commande |\halign| (voir ci-dessus) avant
+d'essayer d'utiliser la commande |\valign|.
+
+Un alignement consiste en un ^{pr\'eambule}
+suivi par le texte \`a aligner. Le pr\'eambule,
+qui d\'ecrit la forme des colonnes qui le suivent,
+consiste en une
+suite de patrons de rang\'ee, s\'epar\'es par `|&|' et termin\'e
+par |\cr|.
+\bix^^{patron}
+Chaque colonne consiste en une suite d'entr\'ee
+de ^{rang\'ee}, s\'epar\'ees aussi par `|&|' et termin\'ees par |\cr|. Dans
+un patron, `|#|' indique o\`u \TeX\ doit ins\'erer le
+texte correspondant \`a l'entr\'ee de rang\'ee.
+
+\TeX\ compose chaque entr\'ee de rang\'ee en mode vertical
+interne, c'est-\`a-dire, comme le contenu d'une \minref{vbox},
+et englobe implicitement l'entr\'ee dans un groupe.
+Il donne toujours \`a la vbox une profondeur \`a z\'ero.
+Tout texte ou autre mat\'eriel en mode horizontal dans une entr\'ee de rang\'ee met alors \TeX\
+en mode horizontal ordinaire.
+C'est juste une application des r\`egles g\'en\'erales du fonctionnement de \TeX\
+en mode vertical interne.
+Les param\`etres de paragraphage habituels s'appliquent dans ce cas~:
+l'entr\'ee de rang\'ee a une indentation
+initiale de |\parindent| (\xref\parindent) et
+les \minref{ressorts}
+|\leftskip| et |\rightskip| (\xref\leftskip)
+s'appliquent \`a ses lignes.
+
+Notez en particulier qu'une entr\'ee de rang\'ee contenant du texte a
+une largeur de |\hsize| (\xref\hsize). A moins que vous mettiez
+|\hsize| \`a la largeur de rang\'ee que vous voulez, vous rencontrerez
+vraisemblablement des ``overfull \minref{hbox}'' ou trouverez que
+la premi\`ere colonne occupe la largeur de la page enti\`ere, ou les deux.
+\eix^^{entr\'ee (colonne ou rang\'ee)}
+
+Normalement, vous devrez inclure un \minref{strut}
+^^{struts//dans des alignements verticaux}
+dans chaque
+patron pour que les rang\'ees n'apparaissent pas comme un r\'esultat
+des hauteurs variables des entr\'ees de l'alignement. Vous
+pouvez produire un strut avec la commande |\strut|.
+
+La forme |to| de cette commande demande \`a \TeX\
+d'\'etendre l'extension verticale de l'alignement \`a \<dimension>,
+en ajustant l'espace entre les rang\'ees.
+La forme |spread| de cette commande demande \`a \TeX\
+d'agrandir l'alignement de \<dimension> par rapport \`a sa hauteur naturelle.
+Ces formes sont comme les formes correspondantes de |\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
+Cette commande r\'eagit comme ^|\halign|,
+sauf qu'elle met d'abord le ressort |\tabskip| \`a z\'ero et
+met |\everycr| \`a vide.
+\enddesc
+
+\begindesc
+\cts cr {}
+\explain
+Cette commande termine le pr\'eambule d'un alignement horizontal ou
+vertical, une rang\'ee d'un alignement horizontal ou tabul\'e,
+ou une colonne d'un alignement vertical.
+Vous pouvez demander \`a \TeX\ de faire certaines actions \`a chaque fois qu'il rencontre un |\cr|
+en chargeant la valeur du param\`etre ^|\everycr| \ctsref\everycr.
+\enddesc
+
+\begindesc
+\cts endline {}
+\explain
+Cette commande est un synonyme de la commande ^|\cr|. Elle est utile quand
+vous avez red\'efini |\cr| mais devez encore acc\'eder \`a sa d\'efinition originale.
+\enddesc
+
+\begindesc
+\cts crcr {}
+\explain
+Cette commande r\'eagit comme ^|\cr|, sauf que \TeX\ l'ignore si
+elle arrive imm\'ediatement apr\`es un |\cr| ou un ^|\noalign|.
+Sa principale application est comme mesure de s\'ecurit\'e pour \'eviter un message d'erreur ``misleading''
+caus\'e par une \minref{macro} qui attend un argument se terminant par |\cr|.
+Si vous mettez |\crcr| apr\`es le `|#|$n$' qui d\'enote un tel argument
+dans la d\'efinition de macro, la
+macro marchera proprement, que l'argument se termine par |\cr| ou non.
+\enddesc
+
+\begindesc
+\cts omit {}
+\explain
+Cette commande demande \`a \TeX\ d'ignorer un patron dans un \minref{alignement}
+horizontal ou vertical pendant le traitement d'une entr\'ee de colonne ou de rang\'ee particuli\`ere
+respectivement.
+|\omit| doit appara\^\i tre comme le premier \'el\'ement dans une entr\'ee de colonne ou de rang\'ee~; en effet,
+il remplace le patron du pr\'eambule avec le simple
+patron `|#|'.
+
+
+\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
+La signification de cette commande d\'epend suivant qu'elle appara\^\i t soit dans un pr\'eambule
+soit dans une entr\'ee d'alignement.
+\ulist
+\li Normalement, \TeX\ ne d\'eveloppe pas de tokens dans le pr\'eambule
+quand il le lit.
+Mettre |\span| au d\'ebut d'un token dans le pr\'eambule rend
+ce token d\'eveloppable imm\'ediatement selon les r\`egles usuelles de d\'eveloppement
+de \minref{macro} de \TeX.
+\li Mettre |\span| \`a la place de `|&|' entre deux entr\'ees de colonne ou de rang\'ee
+rend ces colonnes ou rang\'ees combin\'ees.
+Pour un alignement horizontal,
+la largeur de la colonne combin\'ee est la somme des
+largeurs des colonnes incluses.
+Pour un alignement vertical,
+la hauteur de la rang\'ee combin\'ee est la somme des
+hauteurs des rang\'ees incluses.
+Le patron des colonnes ou rang\'ees combin\'ees forme un seul groupe,
+donc des commandes de chargement de police pr\'ec\'edant un |\span| affectent tout jusqu'au
+prochain `|&|'.
+\endulist
+\noindent
+|\span| est rarement utile d'elle-m\^eme en dehors d'un patron,
+mais procure le m\'ecanisme de base
+pour d\'efinir ^|\multispan|.
+\enddesc
+
+\begindesc
+\cts multispan {\<nombre>}
+\explain
+Cette commande demande \`a \TeX\ que les \<nombre>
+colonnes suivantes d'une rang\'ee d'un alignement horizontal,
+ou
+que les \<nombre> rang\'ees dans une colonne d'un alignement vertical,
+doivent \^etre combin\'ees en une seule colonne ou rang\'ee (comme avec
+|\span|) et que leur patron doit \^etre omis (comme avec |\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^^{patron}
+\enddesc
+
+\begindesc
+\cts noalign {\rqbraces{\<mat\'eriel en mode vertical>}}
+\aux\cts noalign {\rqbraces{\<mat\'eriel en mode horizontal>}}
+\explain
+Cette commande ins\`ere
+\<mat\'eriel en mode vertical>
+apr\`es la rang\'ee cou\-rante d'un \minref{alignement} horizontal ou
+\<mat\'eriel en mode horizontal> apr\`es la colonne courante d'un \minref{alignement}
+vertical.
+Le mat\'eriel peut \^etre du texte, un ressort, un filet ou tout autre chose.
+
+L'utilisation la plus commune de |\noalign|
+est de mettre de l'espace suppl\'ementaire apr\`es une rang\'ee ou une colonne.
+Si vous voulez mettre de l'espace suppl\'ementaire apr\`es \emph{toutes\/} les rang\'ees d'un alignement
+horizontal, utilisez ^|\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{ressort}}
+\explain
+Ce param\`etre sp\'ecifie le montant de ressort horizontal ou vertical
+que \TeX\ met entre les
+colonnes d'un alignement horizontal ou entre les
+rang\'ees d'un alignement vertical.
+\TeX\ met aussi le ressort |\tabskip|
+\`a gauche de la premi\`ere colonne et \`a droite de la derni\`ere colonne
+d'un alignement horizontal,
+avant la premi\`ere rang\'ee
+et apr\`es la derni\`ere rang\'ee d'un alignement vertical.
+Vous pouvez changer |\tabskip| dans un patron---%
+le changement affectera le ressort associ\'e avec tous les
+|&| suivant aussi bien que le ressort apr\`es la derni\`ere rang\'ee ou colonne.
+\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
+Cette commande demande \`a \TeX\ d'ignorer la largeur de l'entr\'ee de la colonne suivante dans un
+alignement horizontal. C'est pratique quand vous avez une entr\'ee qui est plus longue
+que la plupart des autres dans la m\^eme colonne
+et que vous pr\'ef\'erez avoir cette entr\'ee sortant de la colonne plut\^ot
+que rendre toutes les entr\'ees
+de la colonne plus larges. Si le |\hidewidth| est \`a gauche de
+l'entr\'ee, l'entr\'ee d\'ebordera \`a gauche~; si le |\hidewidth| est \`a
+droite de l'entr\'ee, l'entr\'ee d\'ebordera \`a droite.
+\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{liste de token}}
+\explain
+\TeX\ d\'eveloppe \<token list> \`a chaque fois qu'il ex\'ecute
+un |\cr|---\`a la fin de chaque pr\'eambule,
+\`a la fin de chaque rang\'ee d'un alignement horizontal
+et \`a la fin de chaque colonne d'un alignement vertical.
+La commande |\everycr| est d\'evelopp\'ee juste apr\`es le |\cr|.
+Ainsi vous pouvez demander \`a \TeX\
+d'ex\'ecuter certaines commandes \`a la fin d'un pr\'eambule, d'une rang\'ee ou d'une colonne en
+assignant une liste de commandes \`a |\everycr|.
+
+Les tokens |\everycr| ne doivent pas inclure d'autres commandes que |\no!-align|.
+Ceci parce que
+les tokens |\everycr| r\'eappara\^\i tront apr\`es le dernier
+|\cr| de l'alignement. Une commande autre qu'un
+|\noalign| fera penser \`a \TeX\ qu'il commence une nouvelle
+rang\'ee ou colonne.
+\TeX\ se plaindra d'un |\cr| manquant, ins\`erera
+un |\cr|, ins\`erera les tokens |\everycr| \`a nouveau et r\'ep\`etera ces actions
+ind\'efiniment.
+\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^^{alignements//commandes pour}
+\enddesc
+
+\enddescriptions
+
+
+\endchapter
+\byebye
diff --git a/info/impatient/fr/fonts.tex b/info/impatient/fr/fonts.tex
new file mode 100644
index 0000000000..640278d454
--- /dev/null
+++ b/info/impatient/fr/fonts.tex
@@ -0,0 +1,242 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% 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 = \eightrm
+ \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/info/impatient/fr/fpages.tex b/info/impatient/fr/fpages.tex
new file mode 100644
index 0000000000..dd5c3f3186
--- /dev/null
+++ b/info/impatient/fr/fpages.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.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter {Commandes pour \linebreak composer des pages}
+
+\chapterdef{pages}
+
+Cette section couvre des commandes qui concernent les
+pages, leurs composants et la routine de sortie.
+Pour une explication des conventions utilis\'ees dans cette section,
+voir \headcit{Descriptions des commandes}{cmddesc}.
+
+\begindescriptions
+
+%==========================================================================
+\section {Espaces inter-ligne et inter-paragraphe}
+
+\begindesc
+\cts baselineskip {\param{ressort}}
+\cts lineskiplimit {\param{dimension}}
+\cts lineskip {\param{ressort}}
+\explain
+^^{espacement de ligne}
+\bix^^{ressort inter-ligne}
+\bix^^|\baselineskip|
+\bix^^|\lineskip|
+\bix^^|\lineskiplimit|
+Ces trois param\`etres d\'eterminent ensemble combien d'espace \TeX\ laisse entre
+des \minref{bo\^\i te}s cons\'ecutives d'une \minref{liste verticale} ordinaire,
+c'est-\`a-dire, les lignes d'un paragraphe.
+Cet espace est appel\'e ``\minref{ressort inter-ligne}''.
+Il est aussi ins\'er\'e entre les bo\^\i tes composant une vbox construite en
+mode vertical interne.
+^^{vbox//ressort inter-ligne pour}
+
+Dans le cas courant, quand les bo\^\i tes ne sont pas anormalement hautes ou profondes, \TeX\
+rend la distance de la ligne de base d'une bo\^\i te \`a la ligne de base de la
+suivante \'egale \`a |\baselineskip|. Il fait cela en ins\'erant un ressort inter-ligne
+\'egal \`a |\baselineskip| moins la profondeur de la bo\^\i te sup\'erieure (ainsi donn\'e
+par ^|\prevdepth|) et la hauteur de la bo\^\i te du dessous. Mais si ce ressort
+inter-ligne doit \^etre inf\'erieur \`a |\lineskiplimit|, indiquant que les deux
+bo\^\i tes sont trop rapproch\'ees, \TeX\ ins\`ere le ressort |\lineskip| \`a la
+place.\footnote
+{\TeX\ d\'ebute normalement le d\'ebut d'une liste verticale en mettant
+|\prevdepth| \`a $-1000$\pt\ et en testant
+|\prevdepth| avant \emph{toutes} les bo\^\i tes. Si |\prevdepth|$\>\le-1000$\pt\
+il ne doit ins\'erer aucun ressort inter-ligne.} Voir les \knuth{pages~79--80}{93} pour une
+description pr\'ecise.
+
+Notez que |\baselineskip| et |\lineskip| mesurent des \emph{choses diff\'e\-rentes}~:
+La distance entre des lignes de base d'un cot\'e et la distance
+entre le bas d'une bo\^\i te et le haut de la bo\^\i te suivante d'un autre
+cot\'e. Voir la \knuth{page~78}{91--92} pour d'autres d\'etails. Le premier exemple ci-dessous
+montre les effets de |\lineskiplimit|.
+
+Vous pouvez obtenir l'effet d'un ^{double espacement} en doublant la valeur
+de |\baselineskip| comme illustr\'e dans le second exemple ci-des\-sous.
+Une modification de |\baselineskip| \`a n'importe quel endroit pr\'ec\'e\-dent la fin
+d'un paragraphe affecte le paragraphe entier.
+
+\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^^{ressort inter-ligne}
+\eix^^|\baselineskip|
+\eix^^|\lineskip|
+\eix^^|\lineskiplimit|
+\enddesc
+
+\begindesc
+\cts prevdepth {\param{dimension}}
+\explain
+Quand \TeX\ ajoute une bo\^\i te \`a une liste verticale, il r\`egle |\prevdepth| \`a la
+hauteur de cette bo\^\i te. \TeX\ met |\prevdepth| \`a $-10000$\pt\ au d\'ebut d'une
+liste verticale, indiquant que le ressort inter-ligne normal doit \^etre supprim\'e.
+\enddesc
+
+\begindesc
+\cts normalbaselineskip {\param{ressort}}
+\cts normallineskiplimit {\param{dimension}}
+\cts normallineskip {\param{ressort}}
+\cts normalbaselines {}
+\explain
+Ces trois param\`etres contiennent des valeurs pour |\base!-line!-skip|,
+|\li!-neskip| et |\line!-skip!-limit| respectivement.
+^^|\baselineskip| ^^|\lineskip| ^^|\lineskiplimit|
+La commande |\normal!-base!-lines| met |\base!-line!-skip|,
+|\line!-skip| et |\line!-skip!-limit| aux va\-leurs contenues dans les
+trois param\`etres.
+\enddesc
+
+\begindesc
+\cts offinterlineskip {}
+\explain
+Cette commande demande \`a \TeX\ d'arr\^eter d'ins\'erer des ressorts inter-ligne \`a partir
+de maintenant. \`A moins que vous vouliez qu'il soit effectif pour le reste du document
+(ce que vous ne voulez probablement pas), vous devez l'englober dans un groupe
+avec le texte que vous voulez qu'il affecte.
+Son principal usage est de vous laisser faire l'espacement inter-ligne vous-m\^eme,
+c'est-\`a-dire, en utilisant ^{struts},
+sans interf\'erence du ressort inter-ligne normal de \TeX.
+|\offinterlineskip| est souvent utile quand
+vous construisez un \minref{alignement} horizontal.
+^^{alignements//utiliser \b\tt\\offinterlineskip\e\ dans des}
+\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
+Cette commande demande \`a \TeX\ de ne pas ins\'erer de ressort inter-ligne devant la
+prochaine ligne.
+Elle n'a aucun effet sur les lignes suivantes.
+\enddesc
+
+\begindesc
+\cts openup {\<dimension>}
+\explain
+Cette commande augmente ^|\baselineskip| de \<dimension>.
+Une commande |\openup| avant la fin d'un paragraphe affecte
+tout le paragraphe, donc vous ne devez pas utiliser |\openup| pour
+changer |\baseline!-skip| dans un paragraphe. |\openup| est
+plus utile pour composer des tables et des affichages math\'ematiques---un
+petit espace suppl\'ementaire entre des rang\'ees les rend souvent plus lisibles.
+^^{alignements//espace entre rang\'ees d'}
+\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 {Coupures de page}
+
+%==========================================================================
+\subsection {Encourager ou d\'ecourager des coupures de page}
+
+\begindesc
+\bix^^{coupures de page}
+\bix^^{coupures de page//encourager ou d\'ecourager}
+\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.}
+%
+Cette commande force une coupure de page.
+\`a moins que vous ne fassiez quelque chose pour compl\'eter la page,
+Vous obtiendrez s\^urement un ``underfull vbox''.
+|\break| peut aussi \^etre utilis\'e en mode horizontal.
+\enddesc
+
+\begindesc
+\ctspecial nobreak {} \xrdef{vnobreak}
+\explain
+Cette commande emp\^eche une coupure de page l\`a o\`u elle
+aurait du arriver autrement.
+|\nobreak| peut aussi \^etre utilis\'e en mode horizontal.
+\enddesc
+
+\begindesc
+\ctspecial allowbreak {} \xrdef{vallowbreak}
+\explain
+Cette commande demande \`a \TeX\ d'autoriser
+une coupure de page l\`a o\`u elle ne pourrait normalement pas arriver.
+|\allowbreak| peut aussi \^etre utilis\'e en mode horizontal.
+\enddesc
+
+\begindesc
+\ctspecial penalty {\<nombre>} \xrdef{vpenalty}
+\explain
+Cette commande produit un \'el\'ement de \minref{p\'enalit\'e}.
+L'\'el\'ement de p\'enalit\'e rend \TeX\ plus ou moins d\'esireux de couper une page
+\`a l'endroit o\`u cet \'el\'ement arrive.
+Une p\'enalit\'e n\'egative, c'est-\`a-dire, un bonus, encourage une coupure de page~;
+Une p\'enalit\'e positive d\'ecourage une coupure de page.
+Une p\'enalit\'e de $10000$ ou plus emp\^eche toute coupure,
+tandis qu'une p\'enalit\'e de $-10000$ ou moins force une coupure.
+|\penalty| peut aussi \^etre utilis\'e en mode horizontal.
+\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
+Cette commande termine un paragraphe et indique aussi \`a \TeX\ que
+c'est un bon endroit pour couper la page.
+\enddesc
+
+\begindesc
+\cts smallbreak {}
+\cts medbreak {}
+\cts bigbreak {}
+\explain
+Ces commandes indiquent des endroits de plus en plus d\'esirables pour \TeX\ de
+couper une page. Elles demande aussi \`a \TeX\
+d'ins\'erer respectivement un ^|\smallskip|, ^|\medskip| ou
+^|\bigskip| (\xref \smallskip) si la coupure de page ne se produit pas l\`a.
+\TeX\ supprime ce saut s'il se produit juste apr\`es un saut \'egal ou plus grand.
+\enddesc
+
+\begindesc
+\easy\cts eject {}
+\cts supereject {}
+\explain
+Ces commandes forcent une coupure de page \`a la position courante
+et terminent le paragraphe courant.
+Si vous ne les pr\'ec\'edez pas de |\vfil| (\xref \vfil),
+^^|\vfil//n\'ecessaire avec {\tt\\eject}|
+\TeX\ essayera d'\'etirer le contenu de la page
+(et se plaindra probablement d'un ``underfull vbox'').
+La commande |\supereject|, en plus,
+enclenche la routine de sortie de \plainTeX\ pour
+faire sortir toutes insertions en surplus,
+^^{insertions//forc\'es par \b\tt\\supereject\e}
+telles que de longues notes de pied de page,
+ainsi elle sont produites avant que toute autre entr\'ee soit ex\'ecut\'ee.
+Donc |\supereject| est un bonne commande \`a utiliser \`a la fin de chaque
+chapitre ou autre division majeure de votre document.
+\enddesc
+
+\begindesc
+\cts filbreak {}
+\explain
+Cette commande procure une sorte de coupure de page conditionnelle.
+Elle demande \`a \TeX\ de
+couper la page---sauf si le texte d'une autre |\filbreak| se trouve
+aussi sur la m\^eme page.
+En englobant un paragraphe dans une paire de |\filbreak|,
+vous pouvez vous assurer que \TeX\ gardera un paragraphe sur une seule page s'il le peut.
+Vous ne devez pas utiliser |\filbreak| dans un paragraphe, car il
+force \TeX\ en mode vertical et ainsi termine la paragraphe.
+Voir \xrefpg{filbreak} pour plus de conseil sur ce sujet.
+\enddesc
+
+\begindesc
+\cts raggedbottom {}
+\cts normalbottom {}
+\explain
+Normalement \TeX\ essaye fortement de s'assurer que toutes les pages
+aient la m\^eme profondeur, c'est-\`a-dire, que leurs marges du bas soient \'egales.
+La commande |\raggedbottom| demande \`a \TeX\ d'autoriser
+quelques variations parmi les marges du bas sur diff\'erentes pages.
+Il est souvent appropri\'e d'utiliser |\raggedbottom| quand vous avez du mat\'eriel
+qui contient de larges blocs de mat\'eriel qui ne doivent pas \^etre s\'epar\'es sur deux pages.
+La commande |\normalbottom| efface l'effet de |\raggedbottom|.
+
+\eix^^{coupures de page//encourager ou d\'ecourager}
+\enddesc
+
+%==========================================================================
+\subsection {Param\`etres de coupure de page}
+
+\bix^^{coupures de page//param\`etres de}
+\begindesc
+\cts interlinepenalty {\param{nombre}}
+\explain
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une
+coupure de page entre les lignes d'un paragraphe.
+En le mettant \`a $10000$ vous pouvez forcer toutes les coupures de page \`a se faire
+entre les paragraphes, en esp\'erant que les pages aient assez d'\'etirement pour
+que \TeX\ puisse les composer d\'ecemment.
+\PlainTeX\ laisse |\inter!-linepenalty| \`a~$0$.
+\enddesc
+
+\begindesc
+\cts clubpenalty {\param{nombre}}
+\explain
+^^{ligne orpheline}
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une
+coupure de page juste apr\`es la premi\`ere ligne d'un paragraphe.
+Une ligne seule en bas d'une page est appel\'ee une ``ligne orpheline''.
+\PlainTeX\ met |\clubpenalty| \`a $150$.
+\enddesc
+
+\begindesc
+\cts widowpenalty {\param{nombre}}
+\explain
+^^{ligne veuve}
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une
+coupure de page juste avant la derni\`ere ligne d'un paragraphe.
+Une ligne seule en haut d'une page est appel\'ee une ``ligne veuve''.
+\PlainTeX\ met |\widowpenalty| \`a $150$.
+\enddesc
+
+\begindesc
+\cts displaywidowpenalty {\param{nombre}}
+\explain
+^^{ligne veuve}^^{math\'ematiques affich\'ees}
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une
+coupure de page juste avant la derni\`ere ligne d'un paragraphe partiel
+qui pr\'ec\`ede imm\'ediatement un affichage math\'ematique.
+\PlainTeX\ met |\displaywidowpenalty| \`a $50$.
+
+\enddesc
+
+\begindesc
+\cts predisplaypenalty {\param{nombre}}
+\explain
+^^{math\'ematiques affich\'ees}
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une
+coupure de page juste avant un affichage math\'ematique.
+\PlainTeX\ met |\predisplaypenalty| \`a $10000$.
+\enddesc
+
+\begindesc
+\cts postdisplaypenalty {\param{nombre}}
+\explain
+^^{math\'ematiques affich\'ees}
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une
+coupure de page juste apr\`es un affichage math\'ematique.
+\PlainTeX\ laisse |\postdisplaypenalty| \`a $0$.
+\enddesc
+
+\begindesc
+\cts brokenpenalty {\param{nombre}}
+\explain
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une
+coupure de page juste apr\`es une ligne se terminant par
+une \'el\'ement optionnel (habituellement une c\'esure).
+^^{c\'esure}
+|\brokenpenalty| s'applique aux coupure de page, tandis que
+^|\hyphenpenalty| \ctsref{\hyphenpenalty} s'applique aux coupure de ligne.
+\PlainTeX\ met |\brokenpenalty| \`a $100$.
+\enddesc
+
+\begindesc
+\cts insertpenalties {\param{nombre}}
+\explain
+\bix^^{insertions//p\'enalit\'es pour}
+\bix^^{mat\'eriel flottant}
+Ce param\`etre contient la somme de certaines p\'enalit\'es \minrefs{p\'enalit\'e}
+que \TeX\ accumule quand il place des insertions sur la page courante.
+Ces p\'enalit\'es encourent une plainte quand \TeX\ ex\'ecute une commande
+|\insert|
+et d\'ecouvre qu'une insertion pr\'ec\'edente du m\^eme type sur cette page a
+\'et\'e s\'epar\'ee, laissant une partie pour les page suivantes.
+Voir les \knuth{pages~123--125}{143--146} pour les d\'etails de ce
+calcul.
+
+\margin{Material moved from a footnote to the main text.}
+|\insertpenalties| a une signification enti\`erement diff\'erente pendant une
+^^{routine de sortie//signification de \b\tt\\insertpenalties\e\ dans la}
+routine de sortie---c'est le nombre d'insertions qui ont \'et\'e vues
+mais qui ne tiennent pas sur la page courante (voir la \knuth{page~125}{146}).
+\enddesc
+
+\begindesc
+\cts floatingpenalty {\param{nombre}}
+\explain
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} que
+\TeX\ ajoute \`a |\insertpenalties|
+^^|\insertpenalties|
+quand le constructeur de page ajoute une insertion \`a la page courante
+et d\'ecouvre qu'une insertion pr\'ec\'edente du m\^eme type sur cette page a
+\'et\'e coup\'ee, en laissant une partie d'elle pour des pages suivantes.
+\PlainTeX\ laisse |\floatingpenalty| \`a~$0$.
+\eix^^{insertions//p\'enalit\'es pour}
+\eix^^{mat\'eriel flottant}
+
+\enddesc
+
+\begindesc
+\cts pagegoal {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie la hauteur d\'esir\'ee pour la page courante.
+\TeX\ met
+|\pagegoal| \`a la valeur courante de |\vsize|
+quand il met en premier une bo\^\i te ou une insertion sur la page courante.
+Vous pouvez raccourcir une page tant que \TeX\ travaille sur elle en
+changeant la valeur de |\pagegoal|---m\^eme si la nouvelle valeur est
+inf\'erieure \`a la hauteur du mat\'eriel d\'ej\`a sur cette page.
+\TeX\ mettra juste le mat\'eriel en plus sur la page suivante.
+Mais souvenez-vous---|\pagegoal| est remis \`a |\vsize| quand \TeX\
+commence la page suivante.
+\enddesc
+
+\begindesc
+\cts pagetotal {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie la hauteur naturelle accumul\'ee sur la page courante.
+\TeX\ met \`a jour |\pagetotal| quand il ajoute des \'el\'ements \`a la
+\minref{liste verticale} principale.
+
+
+\enddesc
+
+\begindesc
+\cts pagedepth {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie la profondeur de la page courante.
+\TeX\ met \`a jour |\pagedepth| quand il ajoute des
+\'el\'ements \`a la \minref{liste verticale} principale.
+\enddesc
+
+\begindesc
+\cts pageshrink {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie le montant de \minref{r\'etr\'ecissement}
+dans les \minref{ressort} accumul\'es sur la page courante.
+\TeX\ met \`a jour |\pageshrink| quand il ajoute des \'el\'ements
+\`a la \minref{liste verticale} principale.
+\enddesc
+
+\begindesc
+\cts pagestretch {\param{dimension}}
+\cts pagefilstretch {\param{dimension}}
+\cts pagefillstretch {\param{dimension}}
+\cts pagefilllstretch {\param{dimension}}
+\explain
+Ces quatre param\`etres sp\'ecifient ensemble le montant d'\minref{\'etirement}
+dans les \minref{ressort}s de la page courante. Le montant d'\'etirement a
+la forme
+{\def\f#1{\hbox{\tt fi#1}}%
+$n_0 + n_1\f{l} + n_2\f{ll} + n_3\f{lll}$}, avec les quatre param\`etres
+donnant les valeurs des quatre $n_i$.
+\TeX\ met \`a jour ces param\`etres quand il ajoute des
+\'el\'ements \`a la \minref{liste verticale} principale.
+
+\eix^^{coupures de page//param\`etres de}
+\eix^^{coupures de page}
+\enddesc
+
+%==========================================================================
+\section{Gabarit de page}
+
+\subsection {Param\`etres de description de page}
+
+\begindesc
+\bix^^{dimensions de page}
+\margin{This command was also described in the `Paragraphs' section.
+The combined description now appears there.}
+\aux\cts hsize {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie la longueur de la ligne courante.
+Voir \xrefpg{\hsize} pour une plus compl\`ete explication.
+\enddesc
+
+\begindesc
+\cts vsize {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie l'extension verticale courante d'une page.
+\TeX\ ne l'examine qu'en commen\c cant une page. Donc si vous changez
+|\vsize| dans le
+milieu d'une page, votre changement n'affectera rien avant la page suivante.
+Si vous voulez changer l'extension verticale d'une page quand
+vous en \^etes au milieu, vous pouvez assigner la nouvelle hauteur
+\`a ^|\pagegoal| (\xref \pagegoal) \`a la place. (Si vous
+voulez que le changement affecte aussi les pages suivantes, vous devez
+changer \emph{ensemble} |\vsize| et |\pagegoal|.)
+\PlainTeX\ met |\vsize| \`a |8.9in|.
+\eix^^{dimensions de page}
+\enddesc
+
+\begindesc
+\cts hoffset {\param{dimension}}
+\cts voffset {\param{dimension}}
+\margin{These commands were moved up from later in the subsection.}
+^^{origine de la page}
+\idxsee{origine}{origine de la page}
+\explain
+\TeX\ prend normalement l'``origine'' d'une page, qui est le point o\`u
+il d\'ebute l'impression, comme \'etant \`a un pouce sous le haut de la page et \`a un
+pouce \`a droite du bord gauche de la page.\footnote{
+\TeX\ lui-m\^eme est indiff\'erent d'o\`u est l'origine de la page,
+mais cette information doit \^etre inscrite pour les drivers du syst\`eme
+^^{drivers de p\'eriph\'erique//origine de la page connu des}
+qui convertissent les \dvifile\ en forme imprimable, ainsi ces diff\'erents syst\`emes
+donneront les m\^eme r\'esultats.}
+Les valeurs de |\hoffset| et
+|\voffset| donnent l'offset horizontal et vertical de l'origine actuelle
+\`a partir de ce point. Ainsi si |\hoffset| et |\voffset| sont tous les deux
+\`a z\'ero, \TeX\ utilise son origine normale.
+\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{ressort}}
+\explain
+\TeX\ ins\`ere un ressort en haut de chaque
+page pour s'assurer que la ligne de base de la premi\`ere bo\^\i te de la page
+soit toujours \`a la m\^eme distance $d$ du haut de la page.
+|\topskip| d\'etermine le montant de ce ressort,
+appel\'e le ``ressort |\topskip|'', en sp\'ecifiant
+ce que $d$ doit \^etre (pr\'evoyez que la premi\`ere bo\^\i te
+de la page ne soit pas trop haute).
+$d$ est donn\'e par la taille naturelle du ressort |\topskip|.
+Si la hauteur de la premi\`ere bo\^\i te sur la page d\'epasse $d$,
+et que le ressort devrait \^etre n\'egatif, \TeX\ n'ins\`ere simplement pas
+de ressort |\topskip| du tout sur cette page.
+
+Pour mieux comprendre l'effet de ces r\`egles, supposez que |\topskip|
+n'a ni \'etirement ni r\'etr\'ecissement et que le premier \'el\'ement sur la page
+soit vraiment une bo\^\i te. Alors si la hauteur de cette bo\^\i te n'est pas plus
+grande que |\topskip|, sa ligne de base sera \`a |\topskip| du haut de la page
+ind\'ependamment de sa hauteur. D'un autre cot\'e,
+si la hauteur de la bo\^\i te est $e$, plus grande que |\topskip|, sa ligne de base
+sera \`a |\topskip|\tplus$e$ du haut de la page.
+Voir les \knuth{pages~113--114}{132} pour les autres d\'etails sur le
+fonctionnement de |\topskip|.
+\PlainTeX\ met |\topskip| \`a |10pt|.
+\enddesc
+
+
+\begindesc
+\cts parskip {\param{ressort}}
+\explain
+Ce param\`etre sp\'ecifie le ``^{saut de paragraphe}'', c'est-\`a-dire, le
+ressort vertical que \TeX\ ins\`ere au d\'ebut d'un paragraphe.
+^^{paragraphes//ressort entre}
+Voir |\par| (\xref{\@par}) pour plus d'information sur ce qui se passe
+quand \TeX\ d\'ebute un paragraphe.
+\PlainTeX\ met |\parskip| \`a |0pt plus 0.1pt|.
+\enddesc
+
+\begindesc
+\cts maxdepth {\param{dimension}}
+\explain
+Ce param\`etre sp\'ecifie la profondeur maximum de la \minref{bo\^\i te} du bas
+d'une page. Il est reli\'e \`a |\boxmaxdepth| (\xref \boxmaxdepth). Si la
+profondeur de la bo\^\i te du bas d'une page d\'epasse |\maxdepth|, \TeX\
+descend le point de r\'ef\'erence de la bo\^\i te pour qu'il soit \`a
+|\maxdepth| du bas de cette bo\^\i te.
+Sans cet ajustement, la bo\^\i te du bas d'une
+page pourrait bien s'\'etendre dans la marge du bas ou m\^eme recouvrir
+la page enti\`erement. \PlainTeX\ met |\maxdepth| \`a |4pt|.
+\enddesc
+
+%==========================================================================
+\subsection{Num\'eros de page}
+
+\begindesc
+\bix^^{num\'erotation de page}
+\cts pageno {\param{nombre}}
+\explain
+Ce param\`etre contient le num\'ero de page courant sous la forme d'un entier.
+Le num\'ero de page est normalement n\'egatif pour les pages d'intro\-duction
+qui sont num\'erot\'ees avec des petits chiffres romains au lieu des nombres
+arabes. Si vous changez le num\'ero de page dans une page, le num\'ero modifi\'e
+sera utilis\'e dans tous les ent\^etes ou pieds de page qui apparaissent sur
+cette page. L'impression actuelle des num\'eros de page est prise en main par
+la \minref{routine de sortie} de \TeX, que vous pouvez modifier.
+
+\PlainTeX\ garde le num\'ero de page dans le \minref{registre} ^|\count0|.
+(|\pageno| est, en fait, un synonyme de |\count0|.)
+\`a chaque fois qu'il envoie une page vers le \dvifile,
+^^|\shipout//registres {\tt\\count} affich\'es avec|
+\TeX\ affiche la valeur courante de |\count0| sur votre
+terminal pour que vous puissiez dire sur quelle page il est en train de
+travailler. Il est possible d'utiliser des registres |\count1|--|\count9|
+pour embo\^\i ter des niveaux de num\'eros de page (vous devez programmer cela vous-m\^eme).
+Si un de ces registres est diff\'erent de z\'ero, \TeX\ l'affiche aussi sur votre
+terminal.\footnote{
+Plus pr\'ecis\'ement, il affiche tous les registres en s\'equence de
+|\count0| \`a |\count9|, mais omet les registres restants \`a z\'ero.
+Par exemple, si les valeurs de |\count0|--|\count3|
+sont $(17, 0 , 0, 7)$ et que les autres sont \`a $0$,
+\TeX\ affiche le num\'ero de page ainsi {\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
+Cette commande ajoute $1$ au num\'ero de page
+$n$ dans |\pageno| si $n\ge0$
+et lui soustrait $1$ si $n<0$.
+\enddesc
+
+\begindesc
+\easy\cts nopagenumbers {}
+\explain
+Par d\'efaut, \plainTeX\ produit un pied de page contenant un num\'ero de page
+centr\'e.
+Cette commande demande \`a \TeX\ de produire un pied de page blanc \`a la place.
+\enddesc
+
+\begindesc
+\cts folio {}
+\explain
+Cette commande produit le num\'ero de page courant, dont la valeur est le num\'ero
+$n$ contenu dans ^|\pageno|.
+Si $n\ge0$,
+\TeX\ produit $n$ comme un nombre d\'ecimal,
+tandis que si $n<0$,
+\TeX\ produit $-n$ en chiffre romain minuscule.
+\example
+This explanation appears on page \folio\ of the book.
+|
+\produces
+This explanation appears on page \folio\ of the book.
+\endexample
+
+\eix^^{num\'erotation de page}
+\enddesc
+
+
+%==========================================================================
+\subsection{Lignes d'ent\^ete et de pied de page}
+
+\begindesc%\secondprinting{\vglue-.75\baselineskip\vskip0pt}
+\cts headline {\param{liste de token}}
+\cts footline {\param{liste de token}}
+\explain
+Ces param\`etres
+contiennent, respectivement, la ligne de t\^ete courante (ent\^ete) et la ligne de
+pied de page courante (pied de page).
+La routine de sortie de \plainTeX\
+place la ligne de t\^ete en haut de chaque page et ligne de pied de page
+en bas de chaque page.
+La ligne de t\^ete par d\'efaut est vide et la ligne de pied de page par d\'efaut
+est un num\'ero de page centr\'e.
+
+Les lignes de t\^ete et de pied de page doivent \^etre toutes les deux
+aussi large que |\hsize| (utilisez |\hfil|, \xref{\hfil}, pour cela
+si n\'ecessaire).
+Vous devez toujours inclure une commande de s\'election de police dans ces lignes,
+sinon la police courante est impr\'evisible quand \TeX\ appelle la routine de
+sortie. Si vous ne s\'electionnez la police explicitement,
+vous obtiendrez n'importe quelle police que \TeX\ utilisait quand il a coup\'e
+la page.
+
+N'essayez pas d'utiliser |\headline| ou |\footline|
+pour produire des ent\^etes ou des pieds de page multi-lignes.
+Bien que \TeX\ ne se plaindra pas, cela vous donnera quelque chose de tr\`es laid.
+Voir \xrefpg{bighead} pour une m\'ethode de cr\'eation d'ent\^ete ou de pied de
+page multi-ligne.
+\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 {Marques}
+
+\begindesc
+\cts mark {\rqbraces{\<texte>}}
+\explain
+\bix^^{marques}
+Cette commande fait que \TeX\ attache une marque
+contenant \<mark text>
+\`a toute liste qu'il est en train de construire.
+G\'en\'eralement vous ne devez pas utiliser |\mark| dans une
+construction ``interne'' comme une formule math\'ematique ou une \minref{bo\^\i te}
+que vous avez construit avec une commande |\hbox|, |\vbox| ou |\vtop|, parce
+que \TeX\ ne verra pas la marque quand il construira la bo\^\i te principale
+de la page. Mais si vous utilisez |\mark| en \minref{mode} horizontal ordinaire
+ou directement dans une hbox qui fait partie de la liste verticale principale,
+la marque migrera vers la \minref{liste verticale} principale.
+Voir les \knuth{pages~259--260}{304--305} pour des exemples montrant comment |\mark|
+peut \^etre utilis\'e.
+\enddesc
+
+\begindesc
+\cts firstmark {}
+\cts botmark {}
+\cts topmark {}
+\explain
+Ces commandes d\'eveloppent le texte de la marque dans un \'el\'ement g\'en\'er\'e par une
+pr\'ec\'edente commande ^|\mark|.
+Le texte de la marque a la forme d'une liste de token.
+\TeX\ met la valeur de ces commandes quand il
+termine le placement du contenu d'une page dans ^|\box255|,
+juste avant d'appeler la \minref{routine de sortie}
+comme une partie de son action de \minref{coupure de page}. \TeX\ d\'etermine
+ces valeurs comme suit~:
+\ulist\compact
+\li |\firstmark| contient les tokens de la premi\`ere marque de la page.
+\li |\botmark| contient les tokens de la derni\`ere marque de la page.
+\li |\topmark| contient les tokens de la marque qui est effective tout
+en haut de la page.
+Cette marque est la derni\`ere marque
+qui \emph{pr\'ec\`ede} la page,
+c'est-\`a-dire, le |\botmark| de la page pr\'ec\'edente.
+Il est vide si aucune page ne pr\'ec\`ede la page.
+\endulist
+\noindent
+Si une page n'a aucune marque sur elle, \TeX\ mettra |\firstmark| et |\botmark|
+avec la m\^eme marque que |\topmark|, c'est-\`a-dire, la plus r\'ecente marque pr\'ec\'edente.
+La table en bas de la \knuth{page~258}{303} illustre la relation entre
+|\firstmark|, |\botmark| et |\topmark|.
+\enddesc
+
+\begindesc
+\cts splitfirstmark {}
+\cts splitbotmark {}
+\explain
+^^{marques//pour listes d\'edoubl\'ees}
+Ces commandes d\'eveloppent le ^{texte de marque} g\'en\'er\'e par une commande
+^|\mark| pr\'ec\'edente qui produisent un \'el\'ement dans la liste d'\'el\'ement d'une vbox $V$.
+Le texte de marque a la forme d'une liste de token.
+Quand \TeX\
+s\'epare $V$ en r\'eponse \`a une commande ^|\vsplit| (\xref \vsplit),
+il met les valeurs de ces commandes comme suit~:
+\ulist\compact
+\li |\splitfirstmark| contient les tokens de la premi\`ere marque dans
+la liste d'\'el\'ement de $V$.
+\li |\splitbotmark| contient les tokens de la derni\`ere marque dans
+la liste d'\'el\'ement de $V$.
+\endulist
+Ces commandes ne produisent aucun token s'il n'y a pas de |\vsplit| pr\'ec\'edent
+ou si le plus r\'ecent |\vsplit| pr\'ec\'edent ne contient aucune marque.
+\eix^^{marques}
+\enddesc
+
+%==========================================================================
+\section {Insertions}
+
+\subsection {Pieds de page}
+
+\begindesc
+\easy\cts footnote {\<argument$_1$> \<argument$_2$>}
+\cts vfootnote {\<argument$_1$> \<argument$_2$>}
+\explain
+Ces commandes produisent des notes de pied de page.
+\<argument$_1$> est la ``^{marque de r\'ef\'erence}''
+pour la note de pied de page et \<argument$_2$> est son texte.
+Le texte peut faire plusieurs paragraphes de long si n\'ecessaire et peut contenir
+des constructions comme des affichages math\'ematiques, mais ne peut contenir
+aucune
+\minref{insertion} (comme d'autres notes de pied de page).
+
+Vous ne pouvez pas utiliser ces commandes \`a l'int\'erieur d'une sous-formule d'une
+formule math\'ematique,
+dans une bo\^\i te \`a l'int\'erieur d'une bo\^\i te contribuant \`a une page
+ou dans une insertion de toute sorte.
+Si vous n'\^etes pas s\^ur de la mani\`ere dont ces restrictions s'appliquent, il
+peut \^etre sage de n'utiliser
+|\footnote| et |\vfootnote| que directement dans un paragraphe ou
+entre des paragraphes.
+
+Ces restrictions ne sont pas aussi s\'ev\`eres qu'elles ne le semblent parce que
+vous pouvez utiliser
+|\vfootnote| pour mettre en note de pied de page la plupart des choses.
+|\foot!-note| et |\vfoot!-note| ins\`erent tous les deux des marques de r\'ef\'erence
+en t\^ete de la note de pied de page elle-m\^eme, mais |\vfoot!-note| n'ins\`ere
+pas la marque de r\'ef\'erence dans le texte.
+Ainsi, quand vous utilisez |\vfoot!-note| vous pouvez
+ins\'erer explicitement la marque de r\'ef\'erence
+n'importe o\`u, sans que cela concerne le contexte
+et placer le |\vfootnote| dans le paragraphe suivant.
+Si vous trouvez que la note de bas de page atterrit sur
+la page suivant celle o\`u elle devrait, d\'eplacez le |\vfootnote|
+vers le paragraphe pr\'ec\'edent.
+Il y a de rares circonstances o\`u vous devez alt\'erer
+le texte de votre document pour qu'une note de bas de page apparaisse sur
+la m\^eme page que sa marque de r\'ef\'erence.
+\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 {Insertions g\'en\'erales}
+
+\begindesc
+\bix^^{insertions//commandes pour}
+\cts topinsert {\<mat\'eriel en mode vertical> {\bt \\endinsert}}
+\cts midinsert {\<mat\'eriel en mode vertical> {\bt \\endinsert}}
+\cts pageinsert {\<mat\'eriel en mode vertical> {\bt \\endinsert}}
+\explain
+Ces commandes produisent diff\'erentes formes d'insertions qui
+informent
+(ou autorisent) \TeX\ \`a d\'elocaliser le \<mat\'eriel en mode vertical>~:
+\ulist
+\li |\topinsert| essaye de mettre le mat\'eriel en haut de la page courante.
+S'il ne peut pas s'y ajuster, |\topinsert|
+d\'eplacera le mat\'eriel vers le prochain haut de page possible.
+\li |\midinsert| essaye de mettre le mat\'eriel \`a la position courante.
+S'il ne peut pas s'y ajuster, |\midinsert|
+d\'eplacera le mat\'eriel vers le prochain haut de page possible.
+\li |\pageinsert| met le mat\'eriel lui-m\^eme sur la page suivante.
+Pour \'eviter une page pas assez pleine, assurez vous de terminer le mat\'eriel ins\'er\'e avec
+|\vfil| ou remplissez l'espace excessif d'une autre mani\`ere.
+% 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
+Le \<mat\'eriel en mode vertical>
+est dit \^etre ``flottant'' ^^{mat\'eriel flottant} parce que \TeX\
+peut le d\'eplacer d'une place \`a une autre.
+Des insertions sont tr\`es pratiques pour du mat\'eriel tel que des figures et des
+tables parce que vous pouvez positionner ce mat\'eriel o\`u vous voulez sans
+savoir o\`u les coupures de page tomberont.
+
+Chacune de ces commandes termine implicitement le paragraphe cou\-rant, donc
+vous ne devez les utiliser qu'entre des paragraphes.
+Vous ne devez pas les utiliser dans une bo\^\i te ou dans d'autres insertions.
+Si vous avez plusieurs insertions en comp\'etition pour
+le m\^eme espace, \TeX\ conservera leur ordre relatif.
+\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
+Cette commande termine une insertion d\'ebut\'ee par
+|\topinsert|, |\mid!-insert| ou |\pageinsert|.
+\enddesc
+
+\begindesc
+\cts insert {\<nombre> \rqbraces{\<mat\'eriel en mode vertical>}}
+\explain
+\minrefs{insertion}
+Cette commande primitive fournit le m\'ecanisme sous-jacent la construction
+des insertions, mais
+elle n'est presque jamais utilis\'ee en dehors d'un d\'efinition de \minref{macro}.
+Les d\'efinitions des commandes
+|\foot!-note|, |\vfoot!-note|,
+|\top!-insert|, |\mid!-insert| et |\page!-insert| sont
+toutes construites autour d'|\insert|.
+^^|\topinsert|
+^^|\midinsert| ^^|\pageinsert| ^^|\footnote| ^^|\vfootnote|
+
+Quand vous concevez des insertions pour un document, vous devez assigner un
+code entier diff\'erent\footnote
+{\texbook{} utilise le terme ``classe'' pour un code.
+Nous pr\'ef\'erons un terme diff\'erent pour \'eviter toute confusion avec l'autre signification
+de ``classe'' (\xref{classe}).}
+$n$ pour chaque type d'insertion,
+utilisez la commande ^|\newinsert| (\xref{\@newinsert}) pour obtenir les
+codes entiers.
+La commande |\insert| elle-m\^eme annexe le \<mat\'eriel en mode vertical>
+\`a la \minref{liste verticale} ou horizontale courante.
+Notre \minref{routine de sortie} est responsable de
+d\'eplacer le mat\'eriel ins\'er\'e d'o\`u il r\'eside dans la |\box|$\,n$
+vers la page de sortie.
+^^{routine de sortie}
+
+\TeX\ regroupe ensemble toutes les insertions ayant le m\^eme num\'ero de code.
+Chaque code d'insertion $n$ a quatre \minref{registre}s qui lui sont associ\'es~:
+\ulist
+\li |\box|$\,n$ est l'endroit o\`u \TeX\ accumule le mat\'eriel pour des insertions
+avec le code $n$. Quand \TeX\ coupe une page, il met dans |\box|$\,n$
+autant de mat\'eriel d'insertion $n$ qu'il pourra sur la page.
+Notre routine de sortie devra alors d\'eplacer ce mat\'eriel vers la page actuelle.
+Vous pouvez utiliser ^|\ifvoid| \ctsref{\@ifvoid}
+pour tester s'il y a du mat\'eriel dans |\box|$\,n$.
+Si tout le mat\'eriel ne rentre pas, \TeX\ sauve le surplus pour la page suivante.
+\li |\count|$\,n$ est un facteur de magnification $f$. Quand \TeX\ doit traiter
+l'espace vertical occup\'e sur la page
+dans le mat\'eriel d'insertion $n$, il multiplie l'extension
+verticale de ce mat\'eriel par $f/1000$.
+Ainsi vous mettrez normalement $f$ \`a $500$ pour une insertion en double-colonne
+et \`a $0$ pour une note~marginale.
+\li |\dimen|$\,n$ sp\'ecifie le montant maximum
+de mat\'eriel d'insertion $n$ que \TeX\ mettra sur une seule page.
+\li |\skip|$\,n$ sp\'ecifie un espace suppl\'ementaire que \TeX\ alloue sur la page
+si la page contient du mat\'eriel d'insertion $n$.
+Cet espace est en plus de l'espace occup\'e par l'insertion elle-m\^eme.
+Par exemple, il justifiera l'espace sur la page au-dessus des notes de pied de page
+(s'il y en a).
+\endulist
+\noindent
+\TeX\ d\'eclare |\box|$\,n$ et vous devez d\'eclarer les trois autres registres
+pour que \TeX\ puisse calculer correctement l'espace vertical requis par
+l'inser\-tion.
+Voir les \knuth{pages~122--125}{142--146} Pour d'autres d\'etails sur la fa\c con dont \TeX\
+ex\'ecute ces commandes et comment des insertions interagissent avec les coupures de page.
+\xrdef{endofinsert}
+\enddesc
+
+\see |\floatingpenalty| (\xref \floatingpenalty).
+\eix^^{insertions//commandes pour}
+
+
+%==========================================================================
+\section{Modifier la routine de sortie}
+
+\bix^^{routine de sortie}
+\begindesc
+\cts output {\param{liste de token}}
+\explain
+Ce param\`etre contient la \minref{routine de sortie} courante, c'est-\`a-dire,
+La liste de token que \TeX\ d\'eveloppe quand il trouve une coupure de page.
+\TeX\ met la page dans la ^|\box255|, ainsi |\output| est responsable
+de faire quelque chose avec la |\box255|---soit la sortir, soit
+la mettre ailleurs.
+La routine de sortie est aussi responsable d'attacher des choses comme des
+ent\^etes ou des pieds de page.
+\enddesc
+
+\begindesc
+\cts plainoutput {}
+\explain
+Cette commande invoque la routine de sortie de \plainTeX.
+^^{routine de sortie//par d\'efaut dans \plainTeX}
+\PlainTeX\ d\'efinit ^|\output| comme
+une liste de token contenant le seul et unique token |\plainoutput|.
+\enddesc
+
+\begindesc
+\cts shipout {\<bo\^\i te>}
+\explain
+Cette commande charge \TeX\ d'envoyer \<bo\^\i te> vers le \dvifile.
+^^{\dvifile//r\'eception de \boites\ de \b\tt\\shipout\e}
+\TeX\ d\'eveloppe toute commande |\write| dans \<bo\^\i te> comme une partie de |\shipout|.
+^^|\write//d\'evelopp\'e durant {\tt\\shipout}|
+Le principal usage de |\shipout| est dans la routine de sortie, mais vous pouvez
+l'utiliser n'importe o\`u.
+\enddesc
+
+\begindesc
+\cts deadcycles {\param{nombre}}
+\explain
+Ce param\`etre contient le nombre de fois que \TeX\ a lanc\'e
+la \minref{routine de sortie} depuis la derni\`ere fois qu'il a fait un
+^^|\shipout| |\ship!-out|.\footnote{
+Plus pr\'ecis\'ement, \TeX\ met |\dead!-cyles| \`a $0$ \`a chaque fois qu'il ex\'ecute
+|\ship!-out|
+et l'incr\'emente de $1$ \`a chaque fois qu'il ex\'ecute |\output|.}
+Si |\deadcycles| devient trop grand, \TeX\ est probablement entr\'e dans une
+boucle, par exemple, une o\`u le constructeur de page essaye la m\^eme coupure de
+page \`a n'en plus finir.
+\enddesc
+
+\begindesc
+\cts maxdeadcycles {\param{nombre}}
+\explain
+Si la valeur de |\deadcycles| d\'epasse la valeur de |\maxdeadcycles|,
+\TeX\ pr\'esume que la routine de sortie est entr\'ee dans une boucle.
+\TeX\ se plaint alors et effectue sa propre et simple routine de sortie,
+\'equivalente \`a |\shipout!allowbreak\box255|,
+Ce qui brisera vraisemblablement la boucle.
+\PlainTeX\ met |\maxdeadcycles| \hbox{\`a $25$}.
+\enddesc
+
+\begindesc
+\cts outputpenalty {\param{nombre}}
+\explain
+\TeX\ met ce param\`etre quand il coupe une page. Si le point de coupure \'etait sur un
+\'el\'ement de \minref{p\'enalit\'e}, \TeX\ enl\`eve l'\'el\'ement de p\'enalit\'e et
+met |\outputpenalty| \`a la valeur de la p\'enalit\'e au point de coupure~;
+autrement, il met |\outputpenalty| \hbox{\`a $0$}.
+
+Supposez que vous d\'efaites une coupure de page
+pour couper la page \`a un endroit diff\'erent que celui que \TeX\
+a choisi. Pour reconstruire la page, vous devez recr\'eer
+la p\'enalit\'e au point de coupure choisi par \TeX.
+Vous pouvez accomplir ceci avec la commande
+|\penalty!allowbreak\outputpenalty|.
+\enddesc
+
+\begindesc
+\cts holdinginserts {\param{nombre}}
+\explain
+Si ce param\`etre est plus grand que $0$ quand \TeX\
+ex\'ecute une coupure de page, \TeX\ s'abstiendra \`a ex\'ecuter des insertions.
+Mettre ce param\`etre \`a $1$
+peut \^etre utile quand vous \'ecrivez une routine de sortie
+qui \`a besoin de refaire le contenu de la page, par exemple,
+une routine de sortie qui utilise une valeur de |\vsize| (\xref \vsize) diff\'erente de
+celle utilis\'ee par le constructeur de page.
+
+\eix^^{routine de sortie}
+\enddesc
+
+%==========================================================================
+\section {S\'eparer des listes verticales}
+
+\begindesc
+\cts vsplit {\<nombre> {\bt to} \<dimension>}
+\explain
+Cette commande fait que \TeX\ s\'epare la \minref{bo\^\i te} num\'ero
+\<number>, que nous appellerons $B_2$, en deux parties.
+Il utilise le m\^eme algorithme que celui qu'il utiliserait si $B_2$ \'etait une page
+et qu'il coupait cette page.
+Le point de division correspond alors \`a la coupure de page qu'il trouverait.
+La bo\^\i te $B_2$ doit \^etre une vbox, pas une hbox.
+% we avoid starting the previous sentence with a symbol, a copyediting no-no.
+\TeX\ met le mat\'eriel pr\'ec\'edant le point de division dans
+un autre bo\^\i te $B_1$ et laisse le mat\'eriel apr\`es le point de division dans $B_2$.
+La commande |\vsplit| alors produit $B_1$.
+Normalement vous assignerez $B_1$ \`a un registre de bo\^\i te diff\'erent,
+comme dans l'exemple ci-dessous.
+Si le point de division est \`a la fin de $B_2$,
+$B_2$ sera vide apr\`es le |\vsplit|.
+
+\TeX\ emploie son algorithme de coupure de page habituel
+^^{coupures de page//en liste d\'edoubl\'ees}
+pour la division.
+Il utilise \<dimension> pour ^|\pagegoal|, la hauteur d\'esir\'ee de $B_1$.
+L'extension verticale de $B_1$ peut ne pas \^etre exactement \'egale \`a
+\<dimension> parce que \TeX\ peut ne pas \^etre capable d\'~ achever son but de page parfaitement.
+\TeX\ ne prend pas en compte les insertions dans le calcul de la division,
+donc des insertions dans la liste verticale originale de $B_2$
+seront maintenues mais n'affecteront pas le point de division.
+
+\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{dimension}}
+\explain
+Ce param\`etre sp\'ecifie la profondeur
+maximum autoris\'ee pour une bo\^\i te r\'esultant d'un |\vsplit|.
+|\splitmaxdepth| joue le
+m\^eme r\^ole que celui de ^|\maxdepth| (\xref \maxdepth) pour une page.
+\enddesc
+
+\begindesc
+\cts splittopskip {\param{ressort}}
+\explain
+Ce param\`etre sp\'ecifie le ressort que \TeX\ ins\`ere en haut d'une
+bo\^\i te r\'esultant d'un |\vsplit|.
+|\splittopskip| joue le
+m\^eme r\^ole que ^|\topskip| (\xref \topskip) joue pour une page.
+\enddesc
+
+\see |\splitbotmark|, |\splitfirstmark| (\xref \splitfirstmark).
+
+\enddescriptions \endchapter \byebye
+
diff --git a/info/impatient/fr/fparas.tex b/info/impatient/fr/fparas.tex
new file mode 100644
index 0000000000..45557c56ae
--- /dev/null
+++ b/info/impatient/fr/fparas.tex
@@ -0,0 +1,2152 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter {Commandes \linebreak pour composer \linebreak des paragraphes}
+
+\chapterdef{paras}
+
+Cette section couvre les commandes qui traitent des caract\`eres, des mots, des
+lignes et des paragraphes entiers. Pour une explication des conventions
+utilis\'ees dans cette section, voir les \headcit{Descriptions de
+commandes}{cmddesc}.
+
+\begindescriptions
+
+\section {Caract\`eres et accents}
+
+%==========================================================================
+\subsection {Lettres et ligatures pour alphabets Europ\'eens}
+
+\begindesc
+\xrdef{fornlets}
+\bix^^{ligatures}
+^^{symboles sp\'eciaux}
+^^{alphabets europ\'eens}
+%
+\ctsx AA {Lettre scandinave \AA}
+\ctsx aa {Lettre scandinave \aa}
+\ctsx AE {Ligature \AE}
+\ctsx ae {Ligature \ae}
+\ctsx L {Lettre Polonaise \L}
+\ctsx l {Lettre Polonaise \l}
+\ctsx O {Lettre Danoise/Norv\'egienne \O}
+\ctsx o {Lettre Danoise/Norv\'egienne \o}
+\ctsx OE {Ligature \OE}
+\ctsx oe {Ligature \oe}
+\ctsx ss {Lettre Allemande \ss}
+\explain
+Ces commandes produisent diverses lettres et ligatures des alphabets
+europ\'eens. Elles sont utiles pour des mots et expressions occasionnels
+dans ces langues---mais si vous devez composer une grande quantit\'e de
+texte dans une langue europ\'eenne, vous feriez probablement mieux
+d'utiliser une version de \TeX\ adapt\'ee \`a cette langue.\footnote{Le \TeX\
+Users Group (\xref{ressources}) peut vous fournir des informations sur les
+versions europ\'eennes de \TeX.}
+
+Vous aurez besoin d'un espace apr\`es ces commandes quand vous les
+utiliserez dans un mot pour que \TeX\ traite les lettres suivantes comme
+\'el\'ement du mot et non en tant qu'\'el\'ement de la commande. Vous
+n'avez pas besoin d'\^etre en \minref{mode math\'ematique} pour utiliser
+ces commandes.
+
+\example
+{\it les \oe uvres de Moli\`ere}
+|
+\produces
+{\it les \oe uvres de Moli\`ere}
+\endexample
+\eix^^{ligatures}
+\enddesc
+
+%==========================================================================
+\subsection {Symboles sp\'eciaux}
+
+\begindesc
+^^{caract\`eres sp\'eciaux}
+%
+\easy\ctspecialx # \ctsxrdef{@pound} {signe di\`ese \#}
+\ctspecialx $ \ctsxrdef{@bucks} {signe dollar \$}
+\ctspecialx % \ctsxrdef{@percent} {signe pourcentage \%}
+\ctspecialx & \ctsxrdef{@and} {esperluette \&}
+\ctspecialx _ \ctsxrdef{@underscore} {soulign\'e \_}
+\ctsx lq {quote gauche \lq}
+\ctsx rq {quote droite \rq}
+\aux\ctsx lbrack crochet gauche [
+\aux\ctsx rbrack crochet droit ]
+\ctsx dag {symbole dague \dag}
+\ctsx ddag {symbole double dague \ddag}
+\ctsx copyright {symbole copyright \copyright}
+\ctsx P {symbole paragraphe \P}
+\ctsx S {symbole section \S}
+\explain
+
+Ces commandes produisent diverses marques et caract\`eres sp\'eciaux. Les
+cinq premi\`eres commandes sont n\'ecessaires parce que \TeX\ attache par
+d\'efaut des significations sp\'eciales aux caract\`eres (|#|, |$|, |%|,
+|&|, |_|). vous n'avez pas besoin d'\^etre en \minref{mode math\'ematique}
+pour employer ces commandes.
+
+Vous pouvez utiliser le signe dollar de la police Computer Modern italique
+pour obtenir le symbole ^{livre sterling}, comme montr\'e dans l'exem\-ple
+ci-dessous.
+
+\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
+Cette commande produit le logo \TeX. souvenez vous de la faire suivre par
+|\!vs| ou de l'inclure dans un \minref{groupe} quand vous voulez un espace
+apr\`es lui.
+
+\example
+A book about \TeX\ is in your hands.
+|
+\produces
+A book about \TeX\ is in your hands.
+\endexample
+\enddesc
+
+\begindesc
+\cts dots {}
+\explain
+^^{points}
+Cette commande produit des ^{points de suspension}, c'est-\`a-dire, trois
+points, dans du texte ordinaire. Elle est pr\'evue pour \^etre utilis\'ee
+en \'ecriture math\'ematique, pour des points de suspension entre des mots
+ordinaires, vous devez utiliser |$\ldot$| \ctsref{\ldots} \`a la place.
+Puisque |\dots| inclut son propre espace, vous ne devez pas le faire suivre
+de |\!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 ``Divers symboles math\'ematiques ordinaires'' (\xref{specsyms}).
+%==========================================================================
+\subsection {Caract\`eres Arbitraires}
+
+\begindesc
+\bix^^{caract\`eres}
+\cts char {\<charcode>}
+\explain
+Cette commande produit le caract\`ere situ\'e \`a la position \<charcode>
+de la police courante.
+\example
+{\char65} {\char `A} {\char `\A}
+|
+\produces
+{\char65} {\char `A} {\char `\A}
+\endexample
+\enddesc
+
+\begindesc
+\cts mathchar {\<mathcode>}
+\explain
+Cette commande produit le caract\`ere math\'ematique dont la classe, la
+famille et la position dans la police sont donn\'ees par \<mathcode>. Elle
+n'est l\'egale qu'en mode math\'ematique.
+\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^^{caract\`eres}
+
+%==========================================================================
+\subsection {Accents}
+
+\begindesc
+^^{accents}
+\xrdef{accents}
+%
+\ctspecialx ' \ctsxrdef{@prime} {^{accent aigu} comme dans \'e}
+\ctspecialx . \ctsxrdef{@dot} {^{accent point} comme dans \.n}
+\ctspecialx = \ctsxrdef{@equal} {^{accent macron} comme dans \=r}
+\ctspecialx ^ \ctsxrdef{@hat} {^{accent circonflexe} comme dans \^a}
+\ctspecialx ` \ctsxrdef{@lquote} {^{accent grave} comme dans \`e}
+\ctspecialx " \ctsxrdef{@quote} {^{accent tr\'ema} comme dans \"o}
+\ctspecialx ~ \ctsxrdef{@not} {^{accent tilde} comme dans \~a}
+\ctsx c {^{accent c\'edille} comme dans \c c}
+\ctsx d {^{accent point en dessous} comme dans \d r}
+\ctsx H {^{accent tr\'ema Hongrois} comme dans \H o}
+\ctsx t {^{accent tie-after} comme dans \t uu}
+\ctsx u {^{accent bref} comme dans \u r}
+\ctsx v {^{accent circonflexe invers\'e} comme dans \v o}
+\explain
+Ces commandes produisent des accents en texte ordinaire. Vous devez
+normalement laisser un espace apr\`es ceux not\'es par une simple lettre.
+(see ``Espaces'', \xref{espaces}).
+
+\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
+Ces commandes produisent des versions sans point des lettres `i' et `j'.
+Vous devez les utiliser au lieu des `i' et `j' ordinaires quand vous mettez
+un accent sur ces lettres dans du texte ordinaire.
+^^{lettres sans points}
+Utilisez les commandes ^|\imath| et ^|\jmath| (\xref\imath) pour des `i' et
+`j' sans point dans des formules math\'ematiques.
+\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}
+Cette commande met un accent au-dessus du caract\`ere suivant cette
+commande. L'accent est le caract\`ere de position \<charcode> dans la
+police courante. \TeX\ suppose que l'accent a \'et\'e con\c cu pour
+s'adapter sur un caract\`ere d'une hauteur de $1$\thinspace ex dans la
+m\^eme police que l'accent. Si le caract\`ere \`a accentuer est plus haut
+ou plus petit, \TeX\ ajuste la position en cons\'equence. Vous pouvez
+changer de \minref{police} entre l'accent et le caract\`ere suivant, cela
+dessine le caract\`ere accent et le caract\`ere \`a accentuer venant de
+diff\'erentes polices. Si le caract\`ere accent n'est pas vraiment pr\'evu
+pour \^etre un accent, \TeX\ ne se plaindra pas~; il composera juste quelque
+chose de ridicule.
+\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 Accents math\'ematiques (\xref{mathaccent}).
+\enddesc
+%==========================================================================
+\subsection {Ligatures aux limites}
+
+\begindesc
+\bix^^{ligatures}
+\cts noboundary {}
+\explain
+Vous pouvez d\'efaire une ligature ou un cr\'enage que \TeX\ applique au
+premier ou au dernier caract\`ere d'un mot en mettant |\noboundary| juste
+avant ou apr\`es ce mot. Certaines polices pr\'evues pour des langues
+autres que l'anglais contiennent un caract\`ere sp\'ecial de fronti\`ere
+que \TeX\ met au commencement et \`a la fin de chaque mot. Le caract\`ere
+de fronti\`ere n'occupe aucun espace et est invisible une fois imprim\'e.
+Il permet \`a \TeX\ de fournir un traitement typographique diff\'erent aux
+caract\`eres de d\'ebut ou de fin de mot, puisque le caract\`ere de
+fronti\`ere peut faire partie d'une s\'equence de caract\`eres devant
+\^etre cr\'enel\'ee ou remplac\'ee par une ligature (aucune police
+standard de \TeX\ ne contient ce caract\`ere de fronti\`ere). L'effet de
+|\noboundary| est de supprimer le caract\`ere de fronti\`ere s'il est l\`a,
+et de ce fait d'emp\^echer \TeX\ d'identifier la ligature ou le cr\'enage.
+\eix^^{ligatures}
+\enddesc
+
+%==========================================================================
+\section {S\'electionner des polices}
+
+\xrdef{selfont}
+
+%==========================================================================
+\subsection {Polices particuli\`eres}
+
+\begindesc
+^^{polices}
+%
+\ctsx fivebf {utilise une police grasse de $5$ points}
+\ctsx fivei {utilise une police math\'ematique italique de $5$ points}
+\ctsx fiverm {utilise une police romaine de $5$ points}
+\ctsx fivesy {utilise une police de symbole math\'ematique de $5$ points}
+\ctsx sevenbf {utilise une police grasse de $7$ points}
+\ctsx seveni {utilise une police math\'ematique italique de $7$ points}
+\ctsx sevenrm {utilise une police romaine de $7$ points}
+\ctsx sevensy {utilise une police de symbole math\'ematique de $7$ points}
+\ctsx tenbf {utilise une police grasse de texte de $10$ points}
+\ctsx tenex {utilise une police d'extension math\'ematique de $10$ points}
+\ctsx teni {utilise une police math\'ematique italique de $10$ points}
+\ctsx tenrm {utilise une police romaine de texte de $10$ points}
+\ctsx tensl {utilise une police romaine pench\'ee de $10$ points}
+\ctsx tensy {utilise une police de symbole math\'ematique de $10$ points}
+\ctsx tenit {utilise une police italique de $10$ points}
+\ctsx tentt {utilise une police de type machine \`a \'ecrire de $10$ points}
+\explain
+Le texte suivant ces commandes est compos\'e par \TeX\ dans la police
+indiqu\'ee. Normalement vous devriez enfermer une de ces commandes de choix
+de police dans un groupe avec le texte devant \^etre compos\'e dans la
+police choisie. En dehors d'un groupe une commande de choix de police est
+efficace jusqu'\`a la fin du document (\`a moins que vous ne l'annuliez
+avec une autre commande de ce genre).
+\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
+Cette commande s\'electionne une police, construite dans \TeX, qui ne
+comporte aucun caract\`ere. \TeX\ l'utilise en remplacement d'une police
+non d\'efinie dans une famille des polices math\'ematiques.
+\enddesc
+
+%==========================================================================
+\subsection {Styles de caract\`ere}
+
+\xrdef{seltype}
+\begindesc
+^^{styles de caract\`ere}
+\easy\ctsx bf {utilise un style gras}
+\ctsx it {utilise un style italique}
+\ctsx rm {utilise un style romain}
+\ctsx sl {utilise un style pench\'e}
+\ctsx tt {utilise un style machine \`a \'ecrire}
+\explain
+Ces commandes choisissent un style de caract\`ere sans changer l'oeil ou
+la taille du caract\`ere.\footnote{\TeX\ ne fournit pas de commandes
+pr\'ed\'efinies pour ne changer que la taille, par exemple, |\eightpoint|.
+La fourniture de telles commandes exigerait un grand nombre de
+polices, lesquelles ne seraient jamais utilis\'ees. De telles commandes
+ont \'et\'e cependant employ\'ees dans la composition de \texbook.}
+Normalement vous enfermeriez une de ces commandes de s\'election de
+style de caract\`ere dans un groupe, avec le texte devant \^etre compos\'e
+dans la police choisie. En dehors d'un groupe une commande de
+s\'election de style est efficace jusqu'\`a la fin du document (\`a moins
+que vous l'effaciez avec une autre commande de ce genre).
+\example
+The Dormouse was {\it not} amused.
+|
+\produces
+The Dormouse was {\it not} amused.
+\endexample
+\enddesc
+
+\see ``Polices dans des formules math\'ematiques'' (\xref{mathfonts}).
+%==========================================================================
+\section {Majuscule et minuscule}
+
+\begindesc
+\bix^^{conversion de casse}
+\bix^^{majuscules//conversion en}
+\bix^^{minuscules//conversion en}
+\cts lccode {\<charcode> \tblentry{nombre}}
+\cts uccode {\<charcode> \tblentry{nombre}}
+\explain
+Les valeurs |\lccode| et |\uccode| pour les $256$ caract\`eres possibles
+indiquent la correspondance entre les formes minuscules et majuscules
+des lettres. Ces valeurs sont utilis\'ees par les commandes |\lowercase|
+et |\uppercase| respectivement et par l'algorithme de c\'esure de \TeX.
+
+\TeX\ initialise les valeurs de |\lccode| et |\uccode| comme suit~:
+
+\ulist\compact
+\li Le |\lccode| d'une lettre minuscule est le code {\ascii} de cette lettre.
+\li Le |\lccode| d'une lettre majuscule est le code {\ascii} de la lettre minuscule
+correspondante.
+\li Le |\uccode| d'une lettre majuscule est le code {\ascii} de cette lettre.
+\li Le |\uccode| d'une lettre minuscule est le code {\ascii} de la lettre majuscule
+correspondante.
+\li Les |\lccode| et |\uccode| d'un caract\`ere qui n'est pas une lettre sont \`a z\'ero.
+\endulist
+
+La majeure partie du temps, il n'y a aucune raison de changer ces valeurs,
+mais vous pourriez devoir les changer si vous vous servez d'une langue qui
+a plus de lettres que l'anglais.
+\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{\<liste de token>}}
+\cts uppercase {\rqbraces{\<liste de token>}}
+\explain ^^{conversion de casse}
+Ces commandes convertissent les lettres de la \<token list>, c'est-\`a-dire,
+les tokens avec le code de cat\'egorie $11$, dans leurs formes minuscules
+et majuscules. La conversion d'une lettre est d\'efinie par sa valeur de
+table |\lccode| (pour une minuscule) ou |\uccode| (pour une majuscule). Les
+tokens de la liste qui ne sont pas des lettres ne sont pas affect\'ees---m\^eme
+si les tokens sont des appels de \minref{macro} ou d'autres commandes qui
+se d\'eveloppent en lettres.
+\example
+\def\x{Cd} \lowercase{Ab\x} \uppercase{Ab\x}
+|
+\produces
+\def\x{Cd} \lowercase{Ab\x} \uppercase{Ab\x}
+
+\eix^^{conversion de casse}
+\eix^^{majuscules//conversion en}
+\eix^^{minuscules//conversion en}
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Espace inter-mot}
+
+\begindesc
+\bix^^{espace//inter-mots}
+\easy\ctsbasic {\\\vs}{}
+\blankidxref\ctsxrdef{@space}
+\explain
+Cette commande produit explicitement un espace entre les mots appel\'e
+``^{espace contr\^ol\'e}''. un espace contr\^ol\'e est utile quand une lettre
+appara\^\i t juste apr\`es une commande, ou dans n'importe quelle autre
+circonstance o\`u vous ne voulez pas que deux tokens soient reli\'es dans
+la sortie. La place produite par |\!vs| est ind\'ependante de la
+ponctuation pr\'ec\'edente, c'est-\`a-dire, que son facteur d'espace
+(\xref\spacefactor) est $1000$.
+
+Par ailleurs, si vous voulez imprimer le caract\`ere `\vs' ^^{espace
+visible} que nous avons utilis\'e ici pour noter un espace, vous pouvez
+l'obtenir en saisissant |{\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
+Cette commande est \'equivalente \`a la saisie d'un caract\`ere espace. Elle
+diff\`ere de ^|\ | du fait que sa largeur \emph{peut} \^etre affect\'e par
+la ponctuation pr\'ec\'edente.
+\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
+Cette construction produit le caract\`ere ^{fin de ligne}. Elle a
+normalement deux effets quand \TeX\ la rencontre dans votre source~:
+\olist
+\li Elle agit en tant que commande, en introduisant un espace (si elle
+appara\^\i t \`a l'extr\'emit\'e d'une ligne non vide) ou un
+token |\par| (si elle appara\^\i t \`a l'extr\'emit\'e d'une ligne vide).
+^^|\par//d'une ligne vide|
+\li Elle termine la ligne du source, faisant que \TeX\ ignore les
+caract\`eres restants sur la ligne.
+\endolist
+\noindent
+Cependant, |^^M| \emph{ne} fait \emph{pas} terminer la ligne quand il
+appara\^\i t dans le contexte |`\^^M|, d\'enotant le code ASCII du control-M
+(le nombre $13$). Vous pouvez changer la signification du |^^M| en lui
+donnant un \minref{code de cat\'egorie} diff\'erent. Voir
+\xrefpg{twocarets} pour une explication plus g\'en\'erale de la 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
+Le caract\`ere \minref{actif} `|~|' appel\'e un ``^{tilde}'', produit
+une espace normale entre deux mots et lie ces mots pour
+qu'une coupure de ligne ne se produise pas entre eux. Vous devez
+employer un tilde dans n'importe quel contexte o\`u une coupure de
+ligne serait embrouillante, par exemple, avant une initiale moyenne,
+apr\`es une abr\'eviation telle que ``Dr'' ou apr\`es ``Fig.'' dans ``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
+Chaque caract\`ere d'une \minref{fonte} \TeX\ a une correction d'``^{italique}''
+li\'ee \`a lui, bien que la correction d'italique soit
+normalement \`a z\'ero pour un caract\`ere d'une police non pench\'ee (montante).
+La correction d'italique indique l'espace suppl\'ementaire qui
+est n\'ecessaire quand vous passez d'une police inclin\'ee (pas
+n\'ecessairement une police italique) \`a une police non pench\'ee.
+L'espace suppl\'ementaire est n\'ecessaire parce qu'un caract\`ere inclin\'e
+d\'epasse dans l'espace qui le suit, r\'eduisant l'espace quand le caract\`ere
+suivant est non pench\'e. Le dossier de
+m\'etriques d'une police inclut la correction d'italique de chaque
+caract\`ere dans la police.
+^^{fichiers de m\'etriques//correction italique dans}
+
+La commande |\/|
+produit une correction d'^{italique} pour le caract\`ere pr\'ec\'edent. Vous
+devez ins\'erer une correction d'italique quand vous passez d'une
+police inclin\'ee vers une police droite, sauf quand le caract\`ere suivant
+est un point ou une virgule.
+\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
+^^{espacement inter-mots}
+\TeX\ ajuste normalement l'espacement entre les mots en
+accord avec les signes de ponctuation. Par exemple, il ins\`ere de l'espace
+suppl\'ementaire \`a la fin d'une phrase et ajoute un certain \'etirement
+au \minref{ressort} apr\`es n'importe quel signe de ponctuation. La
+commande |\frenchspacing| indique \`a \TeX\ de rendre l'espacement
+entre les mots ind\'ependant de la ponctuation, alors que la commande
+|\nonfrenchspacing| indique \`a \TeX\ d'utiliser les r\`egles normales
+d'espacement. Si vous n'indiquez pas |\frenchspacing|, vous
+obtiendrez l'espacement normal de \TeX.
+
+Voyez \xrefpg{periodspacing} pour des conseils sur la fa\c con de
+contr\^oler le traitement de la ponctuation de \TeX\ \`a la fin des
+phrases.
+
+\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\ condense normalement une suite de plusieurs espaces en un
+espace simple. |\obeyspaces| demande \`a \TeX\ de produire un
+espace dans le r\'esultat pour chaque espace dans le source.
+Cependant,|\obeyspaces| ne met pas d'espace au d\'ebut d'une ligne~;
+pour cela nous vous recommandons la commande de
+|\obey!-white!-space| d\'efinie dans |eplain.tex|
+(\xref{ewhitesp}).
+^^|\obeywhitespace|
+|\obeyspaces| est souvent utile quand vous composez quelque chose,
+un source informatique par exemple, dans une police \`a espacement fixe (une police dans
+laquelle chaque caract\`ere a le m\^eme espacement) et que vous voulez montrer
+exactement \`a quoi ressemble chaque ligne du source.
+
+Vous pouvez utiliser la commande |\obeylines| (\xref{\obeylines})
+pour obtenir que \TeX\ suive les bords de ligne de votre source.
+|\obeylines| est souvent utilis\'e en combinaison avec |\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{nombre}}
+\cts spaceskip {\param{ressort}}
+\cts xspaceskip {\param{ressort}}
+\cts sfcode {\<charcode> \tblentry{nombre}}
+\explain
+Ces \minref{param\`etres} primitifs affectent combien d'espace \TeX\ met
+entre deux mots adjacents, c'est-\`a-dire, l'^{espacement inter-mots}.
+L'espacement normal entre les mots est assur\'e par la police courante.
+Pendant que \TeX\ traite une \minref{liste horizontale}, il garde trace
+du facteur d'^{espacement} $f$ dans |\spacefactor|. pendant qu'il
+traite chaque caract\`ere du source $c$, il met \`a jour $f$ selon la
+valeur de $f_c$, le code de facteur d'espacement de $c$ (voir ci-
+dessous). Pour la plupart des caract\`eres, $f_c$ est \`a $1000$ et \TeX\
+met $f$ \`a $1000$. (la valeur initiale de $f$ est \'egalement $1000$.)
+Quand \TeX\ voit un espace entre les mots, il ajuste la taille de cet
+espace en multipliant l'\'etirement et le r\'etr\'ecissement de cet espace
+par $f/1000$ et $1000/f$ respectivement. d'o\`u~:
+\olist\compact
+\li Si $f=1000$, l'espace inter-mots garde sa valeur normale.
+\li If $f<1000$, l'espace inter-mots prend moins d'\minref{\'etirement}
+et plus de \minref{r\'etr\'ecissement}.
+\li If $f>1000$, l'espace inter-mots prend plus d'\minref{\'etirement}
+et moins de \minref{r\'etr\'ecissement}.
+\endolist
+En outre, si $f\ge2000$ l'espace inter-mots est encore augment\'e par le
+param\`etre ``d'espace suppl\'ementaire'' li\'e \`a la police courante.
+
+Chaque caract\`ere saisi $c$ a une adresse dans la table de |\sfcode|
+(code de facteur d'espacement). L'adresse de la table |\sfcode| est
+ind\'ependante de la police. Normalement \TeX\ met simplement $f$ \`a
+$f_c$ apr\`es avoir trait\'e $c$. De toute mani\`ere~:
+\ulist
+\li Si $f_c$ est \`a z\'ero, \TeX\ laisse $f$ sans changement. Ainsi, un
+caract\`ere tel que `|)|' dans \plainTeX, pour lequel $f_c$ est \`a z\'ero,
+est essentiellement transparent pour le calcul de l'espacement entre
+les mots.
+\li Si $f<1000<f_c$, \TeX\ met $f$ \`a $1000$ plut\^ot que $f_c$, c'est-\`a-
+dire, qu'il refuse d'augmenter $f$ tr\`es rapidement.
+\endulist
+La valeur de |\sfcode| pour un point est normalement de $3000$, c'est
+pourquoi \TeX\ met habituellement un espace suppl\'ementaire apr\`es un
+point
+% > to \ge here, too, as above.
+(voir la r\`egle ci-dessus pour le cas $f\ge2000$). Les caract\`eres non
+lettre d'une liste horizontale, par exemple, les traits verticaux,
+agissent g\'en\'eralement comme des caract\`eres avec un facteur d'espace de
+$1000$.
+
+Vous pouvez changer le facteur d'espace explicitement en donnant une
+valeur num\'erique diff\'erente \`a |\spacefactor|. Vous pouvez \'egalement
+augmenter l'espacement normal entre les mots en donnant une valeur
+num\'erique diff\'erente \`a |\xspaceskip| ou \`a |\spaceskip|~:
+\ulist
+\li |\xspaceskip| sp\'ecifie le ressort utilis\'e quand $f\ge2000$~;
+dans le cas o\`u
+|\xspaceskip| est \`a z\'ero, les r\`egles normales s'appliquent.
+\li |\spaceskip| sp\'ecifie le ressort utilis\'e quand $f<2000$ ou bien
+quand \hbox{|\xspaceskip|} est \`a z\'ero~; si |\spaceskip| est \`a z\'ero, les
+r\`egles normales s'appliquent. L'\'etirement et le r\'etr\'ecissement du
+ressort |\spaceskip|, comme le ressort ordinaire entre les mots, est
+modifi\'e selon la valeur de $f$.
+\endulist
+Voir \knuth{page~76}{88--89} pour les r\`egles pr\'ecises que \TeX\ utilise pour
+calculer le \minref{ressort} entre les mots et \knuth{pages~285--287}{331--334}
+pour les ajustements faits \`a |\spacefactor| apr\`es diff\'erents items dans
+une liste horizontale.
+\eix^^{espace//inter-mots}
+\enddesc
+
+%==========================================================================
+\section {Centrer et justifier les lignes}
+
+\begindesc
+\bix^^{centrage}
+\bix^^{cadr\'e \`a gauche}
+\bix^^{cadr\'e \`a droite}
+\bix^^{justification}
+\easy\cts centerline {\<argument>}
+\cts leftline {\<argument>}
+\cts rightline {\<argument>}
+\explain
+La commande |\centerline| produit un \minref{hbox} aussi large que
+la ligne courante et place \<argument> au centre de la bo\^\i te. Les
+commandes |\leftline| et |\rightline| sont analogues~; elles placent
+\<argument> au bord gauche ou droite de la bo\^\i te. Si vous voulez
+appliquer une de ces commandes \`a plusieurs lignes cons\'ecutives, vous
+devez l'appliquer \`a chacune individuellement. Voir
+\xrefpg{eplaincenter} pour une autre approche.
+
+N'utilisez pas ces commandes dans un paragraphe---si vous le faites,
+\TeX\ ne pourra probablement pas couper le paragraphe en lignes et se
+plaindra au sujet d'un 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^^{centrage}
+\eix^^{cadr\'e \`a gauche}
+\eix^^{cadr\'e \`a droite}
+\eix^^{justification}
+
+\endexample
+\enddesc
+
+\begindesc
+\easy\cts line {\<argument>}
+\explain
+Cette commande produit une \minref{hbox} contenant l'\<argument>. Cette
+hbox est exactement aussi large que la ligne courante, c'est-\`a-dire,
+qu'elle s'\'e\-tend de la marge droite \`a la gauche.
+\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
+^^{texte recouvrant}
+\cts llap {\<argument>}
+\cts rlap {\<argument>}
+\explain
+Ces commandes vous permettent de produire un texte qui recouvre celui
+qui est \`a gauche ou \`a droite de la position actuelle. |\llap| recule
+par la largeur de l'\<argument> et puis compose l'\<argument>. Le
+|\rlap| est semblable, sauf qu'il compose l'\<argument> d'abord et
+recule. |\llap| et |\rlap| sont utiles pour placer du texte en dehors
+des marges courantes. |\llap| et |\rlap| effectuent leur travail en
+cr\'eant une \minref{box} de largeur z\'ero.
+
+Vous pouvez \'egalement utiliser |\llap| ou |\rlap| pour construire des
+caract\`eres sp\'eciaux par ^{surimpression}, mais ne l'essayez pas \`a
+moins d'\^etre s\^ur que les caract\`eres que vous utilisez aient la m\^eme
+largeur (ce qui est le cas pour une police \`a espacement fixe telle que
+^|cmtt10|, la Computer Modern $10$-points ^{police de type machine \`a
+\'ecrire})..
+^^{police Computer Modern}
+\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 {Formation des paragraphes}
+
+\subsection {d\'ebuter, finir et indenter des paragraphes}
+
+\begindesc
+\bix^^{paragraphes//formation}
+\ctspecial par \ctsxrdef{@par}
+\explain
+Cette commande termine un paragraphe et met \TeX\ dans le mode
+\minref{vertical}, pr\^et \`a ajouter plus d'articles sur la page.
+Puisque \TeX\ convertit une ligne blanche dans votre fichier source
+en un \minref{token} |\par|, vous n'avez normalement pas besoin de
+saisir |\par| explicitement pour finir un paragraphe.
+
+Un point important est que |\par| n'indique pas \`a \TeX\ de commencer
+un paragraphe~; il ne lui dit que de le finir. \TeX\ d\'ebute un
+paragraphe quand il est en mode vertical ordinaire (tel qu'il est
+apr\`es un |\par|) et rencontre un article en soi horizontal tel qu'une
+lettre. En tant qu'\'el\'ement du c\'er\'emonial de d\'ebut de paragraphe, \TeX\
+^^{paragraphes//d\'ebuter des}
+ins\`ere une quantit\'e d'espace vertical donn\'ee par le param\`etre
+|\parskip| (\xref{\parskip }) et indente le paragraphe par un espace
+horizontal donn\'e par |\parindent| (\xref{\parindent }).
+
+Vous pouvez normalement effacer tout l'espace inter-paragraphe
+produit avec |\par| en mettant la commande |\vskip -\lastskip|. Ceci
+peut \^etre utile quand vous \'ecrivez une \minref{macro} cens\'e travailler
+de la m\^eme mani\`ere si elle est pr\'ec\'ed\'ee ou non par une ligne blanche.
+
+Vous pouvez obtenir que \TeX\ prenne certaines mesures sp\'eciales au
+d\'ebut de chaque paragraphe en pla\c cant des instructions dans
+^|\everypar| (\xref\everypar).
+
+Voir \knuth{pages~283 et 286}{328 et 332} pour les effets pr\'ecis de |\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
+Cette commande est un synonyme de la commande primitive
+^|\par|. Elle est utile quand vous avez red\'efini ^|\par| mais voulez
+toujours avoir acc\`es \`a la d\'efinition originale de |\par|.
+\enddesc
+
+\begindesc
+\cts parfillskip {\param{ressort}}
+\explain
+^^{paragraphes//ressort \`a la fin des}
+Ce param\`etre d\'esigne le ressort horizontal que \TeX\ insert \`a la fin
+d'un paragraphe. La valeur par d\'efaut de |\parfillskip| est |0pt plus
+1fil|, qui fait que la derni\`ere ligne d'un paragraphe soit compl\'et\'ee
+de l'espace vide. Une valeur de |0pt| force \TeX\ \`a finir la derni\`ere
+ligne d'un paragraphe sur la marge gauche.
+\enddesc
+
+\bix^^{indentation}
+\begindesc
+\easy\cts indent {}
+\explain
+Si \TeX\ est en mode vertical, comme il l'est apr\`es avoir fini un
+paragraphe, cette commande ins\`ert le ressort inter-paragraphe
+^|\parskip|, met \TeX\ en mode horizontal, d\'ebute un paragraphe et
+indente ce paragraphe de |\parindent|. Si \TeX\ est d\'ej\`a en mode
+horizontal, cette commande produit simplement un espace blanc de
+largeur |\parindent|. Deux |\indent| \`a la suite produisent deux
+indentations.
+^^{indentation}
+
+Comme dans l'exemple ci-dessous, un |\indent| \`a un endroit o\`u \TeX\
+commencerait de toute fa\c con un paragraphe est superflu. Quand \TeX\
+est en mode vertical et voit une lettre ou une autre commande en soi
+horizontale, il commence un paragraphe en commutant vers le mode
+horizontal, fait un |\indent| et traite la commande horizontale.
+
+\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
+Si le \TeX\ est en mode vertical, comme il l'est apr\`es la fin d'un
+paragraphe, cette commande ins\`ert le ressort inter-paragraphe
+^|\parskip|, met \TeX\ dans le mode horizontal, et commence
+un paragraphe non indent\'e. Elle n'a aucun effet dans le mode horizontal,
+c'est-\`a-dire, dans un paragraphe. Commencer un paragraphe avec
+|\noindent| d\'ecommande ainsi l'indentation de |\parindent| qui se
+produirait normalement.
+
+^^{indentation}
+
+Une utilisation commune de |\noindent| est d'interdire l'indentation
+de la premi\`ere ligne d'un paragraphe quand le paragraphe suit un
+certain mat\'eriel affich\'e.
+
+\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}
+Cette commande indique \`a \TeX\ de commencer un paragraphe et de l'indenter
+de |\par!-indent|, comme d'habitude. \TeX\ alors justifie \`a droite
+l'\<argument> de l'indentation et le fait suivre d'un espace demi-cadratin
+(moiti\'e d'un cadratin). \PlainTeX\ utilise cette commande pour composer les
+notes de pied de page. (\xref\footnote) ^^{notes de pied de page//utiliser
+\b\tt\\textindent\e\ avec} et les articles dans les listes (voir |\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{dimension}}
+
+\explain
+Ce \minref{param\`etre} indique la quantit\'e par laquelle la premi\`ere
+ligne de chaque paragraphe doit \^etre indent\'ee. ^^{indentation} Comme
+montr\'e dans l'exemple ci-dessous, placer |\parindent| et ^|\parskip| \`a
+z\'ero est une mauvaise id\'ee puisque alors les coupures de paragraphe ne
+sont plus \'evidentes.
+\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{liste de token}}
+
+\explain
+\TeX\ ex\'ecute les commandes des \<token list> toutes les fois qu'il entre dans le mode
+horizontal, par exemple, quand il commence un paragraphe. Par d\'efaut
+|\everypar| est vide, mais vous pouvez prendre des mesures
+suppl\'ementaires au d\'ebut de chaque paragraphe en mettant des commandes
+pour ces actions dans un 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}
+et assigner ce token list \`a |\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 {Formation de paragraphes entiers}
+
+\begindesc
+\margin{Cette commande \'etait aussi d\'ecrite dans le chapitre `Pages'. La
+description actuelle combine les deux anciennes descriptions.}
+\bix^^{coupures de ligne//et formation de paragraphe}
+\easy\cts hsize {\param{dimension}}
+
+\explain
+Ce \minref{param\`etre} indique la longueur courante de la ^{ligne}, c'est-\`a-dire,
+la largeur habituelle des lignes dans un paragraphe commen\c cant \`a la
+marge gauche. Beaucoup de commandes \TeX emploient
+implicitement la valeur de |\hsize|, comme par exemple,
+|\center!-line| (\xref{\centerline}) et |\hrule| (\xref{\hrule}). En changeant le |\hsize| dans un
+groupe vous pouvez changer la largeur des constructions produites par de
+telles commandes.
+
+Si vous placez |\hsize| dans un \minref{vbox} qui contient du texte, le
+vbox aura la largeur que vous aurez donn\'ee au |\hsize|.
+^^{vbox//largeur d\'etermin\'ee par \b\tt\\hsize\e}
+
+\PlainTeX\ fixe |\hsize| \`a |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
+^^{paragraphes//\'etroit}
+Cette commande donne des paragraphes plus \'etroits, en augmentant les marges
+gauches et droites de |\parindent|, l'^{indentation} de paragraphe
+courante. Elle r\'ealise ceci en augmentant |\leftskip| et |\rightskip| de
+|\parindent|. Normalement vous placez |\narrower| au d\'ebut d'un
+\minref{groupe} contenant les paragraphes que vous voulez rendre plus
+\'etroits. Si vous oubliez d'enfermer |\narrower| dans un groupe, vous
+constaterez que tout le reste de votre document aura des paragraphes
+\'etroits.
+
+|\narrower| n'affecte que les paragraphes qui terminent apr\`es que vous
+l'ayez appel\'e. Si vous terminez un groupe |\narrower| avant d'avoir fini un
+paragraphe, \TeX\ ne rendra pas ce paragraphe plus \'etroit.
+
+\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{ressort}}
+\cts rightskip {\param{ressort}}
+
+\explain
+Ces param\`etres indiquent \`a \TeX\ combien de ressort placer aux extr\'emit\'es
+gauches et droites de chaque ligne du paragraphe courant. Nous n'expli\-%
+querons que le fonctionnement de |\leftskip| puisque |\rightskip| est
+similaire.
+
+^^{indentation} Vous pouvez augmenter la marge gauche en pla\c cant
+|\leftskip| \`a une \minref{dimension} diff\'erente de z\'ero. Si vous donnez \`a
+|\leftskip| un certain \'etirement, vous pouvez produire du texte ^{cadr\'e \`a
+droite}, c'est-\`a-dire, du texte qui a une marge gauche in\'egale.
+
+Normalement, vous devriez enfermer tout \minref{assignement} \`a |\leftskip|
+dans un \minref{groupe} avec le texte affect\'e afin d'emp\^echer son effet de
+continuer jusqu'\`a la fin de votre document. Cependant, il est injustifi\'e de
+changer la valeur de |\leftskip| \`a l'int\'erieur d'un groupe qui est, lui
+aussi, contenu dans un paragraphe---la valeur de |\leftskip| \`a la
+\emph{fin} d'un paragraphe est celle qui d\'etermine comment \TeX\ coupera le
+paragraphe en lignes. \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
+Ces commandes font que \TeX\ compose votre document
+``^{cadr\'e \`a gauche}''. Les espaces inter-mots ont tous
+leur taille naturelle, c'est-\`a-dire, ils ont tous la m\^eme largeur et
+ne s'\'etirent ni se r\'etr\'ecissent.
+En cons\'equence, leur marge droite n'est g\'en\'eralement pas la m\^eme.
+L'alternative, qui est le comportement par d\'efaut de \TeX, est de composer
+votre document justifi\'e,
+^^{justification}
+c'est-\`a-dire, avec des marges gauches et droites uniformes.
+Dans du texte justifi\'e, les espaces inter-mots sont \'etir\'es pour
+aligner des marges de droite.
+Certains typographes pr\'ef\`erent cadrer \`a gauche parce que
+cela \'evite des ``rivi\`eres'' distractives d'espace sur la page imprim\'ee.
+\minrefs{justified text}
+
+Vous devez utiliser la commande |\ttraggedright| pour composer du texte dans
+une police non proportionnelle et la commande |\raggedright| command pour
+composer de texte dans toutes les autres polices.
+
+La plupart du temps vous voudrez appliquer ces commandes \`a un document entier,
+mais vous pouvez limiter leurs effets en les englobant
+dans un \minref{groupe}.
+\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
+Cette commande indente la seconde ligne et les suivantes d'un paragraphe
+de |\parindent|, l'^{indentation} du paragraphe.
+(\xref{\parindent}).
+Puisque la premi\`ere ligne est d\'ej\`a indent\'ee par |\parindent|
+(\`a moins que vous ayez supprim\'e l'indentation avec |\noindent|), le
+paragraphe entier appara\^\i t \^etre indent\'e de |\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{nombre}}
+\cts hangindent {\param{dimension}}
+
+\explain
+Ces deux \minref{param\`etre}s associ\'es
+sp\'ecifient l'``^{indentation r\'emanente}'' pour un paragraphe.
+L'indentation r\'emanente indique \`a \TeX\ que certaines lignes
+du paragraphe doivent
+\^etre indent\'ees et que les lignes restantes doivent avoir leur largeur normale
+^^{indentation}
+|\hangafter| d\'etermine quelles lignes
+sont indent\'ees, tandis que |\hangindent| d\'etermine le montant d'inden\-tation
+et si elle appara\^\i t sur la gauche ou sur la droite~:
+
+\ulist
+\li Soit $n$ la valeur de |\hangafter|. Si $n < 0$,
+Les $-n$ premi\`eres lignes du paragraphe seront indent\'ees.
+Si $n\ge0$, toutes sauf les $n$ premi\`eres lignes du paragraphe seront
+indent\'ees.
+
+\li Soit $x$ la valeur de |\hangindent|.
+Si $x\ge0$, les lignes seront indent\'ees
+de $x$ \`a gauche. Si $x<0$, les lignes seront indent\'ees de $-x$ sur
+la droite.
+\endulist
+
+Quand vous sp\'ecifiez de l'indentation r\'emanente, elle ne s'applique
+qu'au paragraphe suivant (si vous \^etes en mode vertical) ou au
+paragraphe courant (si vous \^etes en mode horizontal).
+\TeX\ utilise les valeurs de |\hangafter| et |\hangindent| \`a la fin d'un
+paragraphe, quand il coupe ce paragraphe en lignes.\minrefs{line
+break}
+
+\`A la diff\'erence de la plupart des autres param\`etres de mise en forme de paragraphe,
+|\hangafter| et |\hangindent| sont r\'einitialis\'es
+au d\'ebut de chaque paragraphe, soit,
+$1$ pour |\hangafter| et $0$ pour |\hangindent|.
+Si vous voulez composer une suite de paragraphes avec de l'indentation r\'emanente,
+utilisez |\everypar| (\xref{\everypar}).
+^^|\everypar//pour indentation r\'emanente|
+Si vous sp\'ecifiez |\hangafter| et |\hangindent| de m\^eme que ^|\parshape|,
+\TeX\ ignorera |\hangafter| et |\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
+Cette commande sp\'ecifie le gabarit des $n$ premi\`eres lignes d'un para\-graphe.
+Le prochain si vous \^etes en mode vertical et le paragraphe courant si vous
+\^etes en mode horizontal.
+Les $i$ et les $l$ sont toutes des dimensions. La premi\`ere ligne est indent\'ee de
+$i_1$ et a une longueur de $l_1$, la seconde ligne est indent\'ee de $i_2$ et a
+une longueur de $l_2$, et ainsi de suite.
+si le paragraphe a plus de $n$ lignes, la derni\`ere paire indentation\slash
+longueur est utilis\'ee pour les autres lignes.
+Pour parachever des effets sp\'eciaux comme celui montr\'e ici, vous devrez
+normalement faire beaucoup d'essais, ins\'erer des cr\'enages ici et l\`a et
+choisir votre mot pour remplir le gabarit.
+
+|\parshape|, comme ^|\hangafter| et ^|\hangindent|, n'est effectif que pour
+un paragraphe.
+Si vous sp\'ecifiez |\hangafter| et |\hangindent| de m\^eme que |\par!-shape|,
+\TeX\ ignorera ^|\hangafter| et ^|\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
+Les vins de France et de Californie semblent \^etre
+les plus connus, mais ne sont pas les seuls bons vins.
+Les vins espagnols sont souvent sous-estim\'es,
+et des assez vieux peu\-vent \^etre disponibles \`a des
+prix raisonnables. Pour les vins espagnols, le mill\'esime
+n'est pas important, mais le climat de la r\'egion de
+Bordeaux varie selon les ann\'ees. Seuls certains sont
+bons. Ceux que
+vo\kern -.1pt us de\kern -.1pt v\kern -.1pt ez
+noter tr\`es tr\`es bons~:
+1962, 1964, 1966. 1958, 1959, 1960, 1961, 1964, 1966 sont de bons crus
+californiens. \`A boire avec mod\'eration~!
+|
+%\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
+Les vins de France et de Californie semblent \^etre
+les plus connus, mais ne sont pas les seuls bons vins.
+Les vins espagnols sont souvent sous-estim\'es,
+et des assez vieux peu\-vent \^etre disponibles \`a des
+prix raisonnables. Pour les vins espagnols, le mill\'esime
+n'est pas important, mais le climat de la r\'egion de
+Bordeaux varie selon les ann\'ees. Seuls certains sont
+bons. Ceux que
+vo\kern -.1pt us de\kern -.1pt v\kern -.1pt ez
+noter tr\`es tr\`es bons~:
+1962, 1964, 1966. 1958, 1959, 1960, 1961, 1964, 1966 sont de bons crus
+californiens. \`A boire avec mod\'eration~! \endexample
+\eix^^{indentation}
+\enddesc
+
+\begindesc
+\cts prevgraf {\param{nombre}}
+\explain
+En mode horizontal, ce param\`etre sp\'ecifie le
+nombre de lignes dans le paragraphe en cours~; en mode vertical,
+il sp\'ecifie le nombre de lignes dans le paragraphe pr\'ec\'edent.
+\TeX\ ne prend en compte |\prevgraf| qu'apr\`es avoir fini de couper du texte
+en ligne, c'est-\`a-dire, sur un affichage math\'ematique ou \`a la fin d'un
+paragraphe.
+Voir la \knuth{page~103}{121} pour plus de d\'etails \`a son propos.
+\enddesc
+
+\begindesc
+\cts vadjust {\rqbraces{\<mat\'eriel en mode vertical>}}
+\explain
+Cette commande ins\`ere le \<mat\'eriel en mode vertical> sp\'ecifi\'e juste apr\`es
+la ligne de sortie contenant la position o\`u la commande se trouve.
+^^{listes verticales//ins\'erer dans des paragraphes}
+Vous pouvez l'utiliser, par exemple, pour provoquer un saut de page ou
+ins\'erer de l'espace suppl\'ementaire apr\`es une certaine ligne.
+
+\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) ainsi que |\every!-par| (\xref\everypar).
+\eix^^{coupures de ligne//et formation de paragraphe}
+\eix^^{paragraphes//formation}
+
+%==========================================================================
+\section {coupures de lignes}
+
+%==========================================================================
+\subsection {Encourager ou d\'ecourager les coupures de ligne}
+
+\begindesc
+\bix^^{coupures de ligne}
+\bix^^{coupures de ligne//encouragement ou d\'ecouragement}
+\ctspecial break {} \xrdef{hbreak}
+\explain
+Cette commande force une coupure de ligne,
+\`a moins que vous fassiez quelque chose pour remplir la ligne,
+Vous recevrez vraisemblablement une plainte ``underfull hbox''.
+|\break| peut aussi \^etre utilis\'e en mode vertical.
+\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
+Cette commande emp\^eche une coupure de ligne l\`a o\`u elle
+devrait se faire normalement.
+|\nobreak| peut aussi \^etre utilis\'ee en mode vertical.
+\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
+Cette commande demande \`a \TeX\ d'autoriser une coupure de ligne l\`a o\`u elle
+n'arriverait pas normalement.
+Elle est plus souvent utile dans une formule math\'ematique, car \TeX\ est
+r\'eticent \`a couper de telles lignes. ^^{coupures de ligne//dans des formules math\'ematiques}
+|\allowbreak| peut aussi \^etre utilis\'ee en mode vertical.
+\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 {\<nombre>} \xrdef{hpenalty}
+\explain
+Cette commande produit un \'el\'ement de \minref{p\'enalit\'e}.
+L'\'el\'ement de p\'enalit\'e rend \TeX\ plus ou moins d\'esireux de couper une ligne
+\`a l'endroit o\`u cet \'el\'ement est plac\'e.
+Une p\'enalit\'e n\'egative, c'est-\`a-dire, un bonus, encourage une coupure de ligne~;
+une p\'enalit\'e positive d\'ecourage une coupure de ligne.
+Une p\'enalit\'e de $10000$ ou plus emp\^eche une coupure quelle qu'elle soit,
+tandis qu'une p\'enalit\'e de $-10000$ ou moins force une coupure.
+|\penalty| peut aussi \^etre utilis\'ee en mode vertical.
+%\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
+
+{\vglue-\baselineskip\vskip0pt}
+\begindesc
+\cts obeylines {}
+\explain
+\TeX\ normalement traite une fin de ligne comme un espace.
+|\obeylines| demande \`a \TeX\ de traiter chaque fin de ligne comme
+une fin de paragraphe, for\c cant ainsi une coupure de ligne.
+|\obeylines| est souvent utile quand vous composez un po\`eme ou
+un programme informatique.
+^^{vers, composer des}^^{po\'esie, composer de la}^^{programmes informatiques, composer des}
+Si quelques lignes sont plus longues que la longueur de ligne r\'eelle
+(|\hsize|\tminus|\parindent|),
+sinon,
+vous aurez une coupure de ligne suppl\'ementaire dans ces lignes.
+
+Parce que \TeX\ ins\`ere le ressort |\parskip| (\xref\parskip)
+entre des lignes contr\^ol\'ees par |\obeylines| (puisqu'il pense que chaque
+ligne est un paragraphe), vous devrez normalement mettre |\parskip| \`a z\'ero
+quand vous utiliserez |\obeylines|.
+
+Vous pouvez utiliser la commande ^|\obeyspaces| (\xref{\obeyspaces}) pour que
+\TeX\ prenne en compte tous les espaces d'une ligne. |\obeylines| et |\obey!-spaces|
+sont souvent utilis\'ees ensemble.
+\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
+Cette commande produit un ^{slash} (/) et pr\'evient aussi \TeX\ qu'il peut
+couper la ligne apr\`es le slash, si n\'ecessaire.
+\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^^{coupures de ligne//encouragement ou d\'ecouragement}
+\enddesc
+
+%\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+\subsection {param\`etres de coupure de lignes}
+
+\begindesc
+\bix^^{coupures de ligne//param\`etres affectant les}
+%
+\cts pretolerance {\param{nombre}}
+\cts tolerance {\param{nombre}}
+\explain
+Ces param\`etres d\'eterminent la \minref{m\'ediocrit\'e} que \TeX\ tol\`erera
+sur chaque ligne quand il choisit des coupures de ligne
+pour un paragraphe.
+La m\'ediocrit\'e est une mesure de combien l'espacement inter-mot d\'evie de
+l'id\'eal.
+|\pretolerance| sp\'ecifie la m\'ediocrit\'e tol\'erable pour
+des coupures de ligne sans c\'esure~;
+|\tolerance| sp\'ecifie la m\'ediocrit\'e tol\'erable pour des coupures de ligne
+avec c\'esure.
+La m\'ediocrit\'e tol\'erable peut \^etre d\'epass\'ee de deux fa\c cons~:
+un ligne est trop serr\'ee (les espaces inter-mots sont trop
+petits) ou trop l\^ache (les espaces inter-mots sont trop grands).
+
+\ulist
+\li Si \TeX\ doit faire une ligne trop rel\^ach\'ee, il
+se plaint d'un ``underfull hbox''.
+\li Si \TeX\ doit faire une ligne trop resserr\'ee,
+il laisse la ligne d\'epasser dans la marge droite et
+se plaint d'un ``overfull \minref{hbox}''.
+\endulist
+
+\noindent \TeX\ choisit des coupures de ligne selon les \'etapes suivantes~:
+\olist
+\li Il essaye de choisir des coupures de ligne sans c\'esures.
+Si aucune des lignes r\'esultantes n'a de m\'edio\-crit\'e d\'epassant |\pretolerance|,
+les coupures de ligne sont accept\'ees et le paragraphe peut \^etre fait.
+\li Sinon, il essaye un autre jeu de coupures de ligne, cette fois
+en autorisant les c\'esures. Si aucune des lignes r\'esultantes n'a une m\'edio\-crit\'e
+d\'epassant |\tolerance|, le nouveau jeu de coupures de ligne est
+acceptable et le paragraphe peut maintenant \^etre fait.
+\li Autrement, il ajoute ^|\emergencystretch| (voir plus bas) \`a l'\'etire\-ment
+de chaque ligne et essaye encore.
+\li Si aucun de ces essais n'a produit de jeu de coupures de ligne acceptable,
+il fait le paragraphe avec un ou plusieurs ``overfull hbox''
+et s'en plaint.
+\endolist
+
+\PlainTeX\ initialise |\tolerance| \`a $200$ et |\pretolerance| \`a $100$.
+Si vous mettez |\tolerance| \`a $10000$, \TeX\
+devient infiniment tol\'erant et accepte tout espacement, quelque soit sa laideur
+(\`a moins qu'il rencontre un mot qui ne tienne pas sur une ligne, m\^eme avec
+c\'esure). Ainsi en changeant |\tolerance| vous pouvez \'eviter des
+``overfull hbox'' et ``underfull hbox'', mais au prix de mauvais espacements.
+En rendant |\pretolerance| plus grand vous pouvez faire que \TeX\ \'evite les
+c\'esure et s'ex\'ecute aussi plus rapidement,
+mais, encore, au prix d'\'eventuels mauvais espacements.
+Si vous mettez |\pretolerance| \`a $-1$,
+\TeX\ n'essayera m\^eme pas de faire le paragraphe sans c\'esure.
+
+Le param\`etre ^|\hbadness| (\xref \hbadness) d\'etermine le niveau de m\'ediocrit\'e
+que \TeX\ tol\`erera avant de se plaindre, mais |\hbadness| n'affecte pas
+la mani\`ere dont \TeX\ compose votre document.
+Le param\`etre ^|\hfuzz| (\xref \hfuzz) d\'etermine le montant dont
+une hbox peut d\'epasser sa largeur sp\'ecifi\'ee avant que \TeX\ la consid\`ere
+erron\'ee.
+\enddesc
+
+\begindesc
+\cts emergencystretch {\param{dimension}}
+\explain
+En mettant ce param\`etre sup\'erieur \`a z\'ero,
+vous pouvez rendre plus facile \`a \TeX\ la
+composition de votre document sans g\'en\'erer d'``overfull hbox''.
+^^{overfull boxes}
+C'est une meilleur alternative \`a |\tolerance=10000|,
+car cela tend \`a produire des lignes r\'eellement laides.
+Si \TeX\ ne peut pas composer un paragraphe sans d\'epasser ^|\tolerance|,
+il tentera encore, en ajoutant |\emergencystretch| \`a l'\'etirement de chaque
+ligne.
+L'effet du changement est de r\'eduire la m\'ediocrit\'e de chaque ligne,
+autorisant \TeX\ \`a faire des espaces plus larges qu'ils auraient \'et\'e autrement
+et ainsi de choisir des coupures de ligne qui seront aussi
+bons que possible selon les circonstances.
+\enddesc
+
+\begindesc
+\cts looseness {\param{nombre}}
+\explain
+\minrefs{line break}
+Ce param\`etre vous donne un moyen
+de changer le nombre total de lignes dans un paragraphe par rapport \`a celui
+qu'il aurait \'et\'e de mani\`ere optimale.
+|\looseness| est ainsi nomm\'e parce que c'est une mesure de combien perd le
+paragraphe, c'est-\`a-dire, combien d'espace suppl\'ementaire il contient.
+
+Normalement, |\looseness| est \`a $0$ et
+\TeX\ choisit des coupures de ligne selon sa mani\`ere habituelle. Mais si
+|\looseness| est \`a, disons, $3$, \TeX\ fait ainsi~:
+\olist
+\li Il choisit des coupures de ligne normalement, obtenant un paragraphe de $n$ lignes.
+\li Il \'ecarte ces coupures de ligne et
+tente de trouver un nouveau jeu de coupure de ligne
+qui donne le paragraphe en $n+3$ lignes.
+(Sans l'\'etape pr\'ec\'edente, \TeX\ ne saurait pas la valeur de $n$.)
+\li Si l'essai pr\'ec\'edent donne des lignes dont la m\'ediocrit\'e d\'epasse
+|\tol!-er!-ance|,
+^^|\tolerance|
+il tente d'obtenir $n+2$ lignes---et si cela \'echoue aussi,
+$n+1$ lignes, et finalement $n$ lignes encore.
+\endolist
+\noindent
+De m\^eme, si |\looseness| est \`a $-n$,
+\TeX\ tente de faire le paragraphe avec $n$ lignes de moins que la normale.
+Le moyen le plus simple pour \TeX\ de faire un paragraphe plus long d'une ligne est de mettre
+un seul mot sur la ligne en plus. vous pouvez emp\^echer cela en
+mettant un tilde (\xref{@not}) entre les deux derniers mots du paragraphe.
+
+Mettre |\looseness| est le meilleur moyen de forcer un paragraphe
+\`a occuper un nombre de lignes donn\'e.
+Le mettre \`a une valeur n\'egative est pratique quand vous essayez
+d'augmenter la quantit\'e de texte que vous pouvez placer sur une page.
+Similairement, le mettre \`a une valeur positive
+est pratique quand vous essayez de diminuer la quantit\'e de texte sur
+une page.
+
+\TeX\ remet |\looseness| \`a $0$ quand il termine un paragraphe, apr\`es avoir
+coup\'e le paragraphe en lignes.
+Si vous voulez changer le rel\^achement de plusieurs paragraphes, vous devez
+le faire individuellement pour chacun ou mettre le changement dans |\everypar|
+\ctsref\everypar.
+^^|\everypar//pour fixer \b\tt\\looseness\e|
+\enddesc
+
+\begindesc
+\cts linepenalty {\param{nombre}}
+\explain
+\minrefs{line break}
+Ce param\`etre sp\'ecifie les \minref{d\'em\'erites} que \TeX\ r\'epartit pour chaque coupure de ligne
+quand il coupe un paragraphe en lignes.
+La p\'enalit\'e est ind\'epen\-dante d'o\`u la coupure de ligne a lieu.
+Augmenter la valeur
+de ce param\`etre demande \`a \TeX\ d'essayer plus fortement de mettre un paragraphe avec
+un nombre minimum de lignes, m\^eme au co\^ut d'autres consid\'erations esth\'etiques
+comme \'eviter des espacements inter-mots excessivement res\-serr\'es.
+Les d\'em\'erites sont en unit\'es de \minref{m\'ediocrit\'e} au carr\'e, donc
+vous devez assigner une valeur plut\^ot large \`a ce param\`etre (dans les
+milliers) pour qu'elle ait un quelconque effet.
+\PlainTeX\ met |\linepenalty| \`a $10$.
+\enddesc
+
+\begindesc
+\cts adjdemerits {\param{nombre}}
+\explain
+\minrefs{line break}
+^^{c\'esure//p\'enalit\'es pour}
+{\tighten
+Ce param\`etre sp\'ecifie des \minref{d\'em\'erites} additionnels que \TeX\ attache au
+point de coupure entre deux lignes adjacentes qui sont
+``incompatibles visuellement''.
+De telles paires de lignes font qu'un paragraphe appara\^\i t in\'egal.
+Les incompatibilit\'es sont \'evalu\'ees en termes d'\'etroitesse ou de rel\^achement
+de lignes~:
+}
+\olist\compact
+\li Une ligne est resserr\'ee si son \minref{ressort} doit se r\'etr\'ecir d'au moins $50\%$.
+\li Une ligne est d\'ecente si sa m\'ediocrit\'e est de $12$ ou moins.
+\li Une ligne est rel\^ach\'ee si son \minref{ressort} doit s'\'etirer d'au moins $50\%$.
+\li Une ligne est tr\`es rel\^ach\'ee si son ressort doit tellement s'\'etirer
+que sa m\'ediocrit\'e d\'epasse $100$.
+\endolist
+Deux lignes adjacentes sont visuellement incompatibles
+si leurs cat\'ego\-ries ne sont pas adjacentes, c'est-\`a-dire, une ligne resserr\'ee
+est apr\`es une rel\^ach\'ee ou une ligne d\'ecente apr\`es une tr\`es rel\^ach\'ee.
+
+Les d\'em\'erites sont en unit\'es de \minref{m\'ediocrit\'e} au carr\'ee, donc
+vous devez assigner une valeur plut\^ot large \`a ce param\`etre (dans les
+milliers) pour qu'elle ait un quelconque effet.
+\PlainTeX\ met |\adjdemerits| \`a~$10000$.
+\enddesc
+
+\begindesc
+\bix^^{c\'esure//p\'enalit\'es pour}
+\cts exhyphenpenalty {\param{nombre}}
+\explain
+\minrefs{line break}
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} que \TeX\ attache \`a un
+point de coupure sur une c\'esure explicite comme celle de
+``helter-skelter''. Augmenter ce param\`etre a l'effet de d\'ecourager
+\TeX\ de finir une ligne sur une c\'esure explicite.
+\PlainTeX\ met |\exhyphenpenalty| \`a $50$.
+\enddesc
+
+\begindesc
+\cts hyphenpenalty {\param{nombre}}
+\explain
+\minrefs{line break}
+Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} que \TeX\ attache \`a un
+point de coupure sur une c\'esure implicite.
+Des c\'esures implicites peuvent survenir du dictionnaire de c\'esure de \TeX\ ou
+de ^{c\'esures optionnelles} que vous avez ins\'er\'e avec |\-|~(\xref{\@minus}).
+^^|-//m\`ene \`a {\tt\\hyphenpenalty}|
+Augmenter ce param\`etre a l'effet de d\'ecourager
+\TeX\ de couper des mots.
+\PlainTeX\ met |\hyphenpenalty| \`a $50$.
+\enddesc
+
+\begindesc
+\cts doublehyphendemerits {\param{nombre}}
+\explain
+\minrefs{line break}
+{\tighten
+Ce param\`etre sp\'ecifie les \minref{d\'em\'erites} additionnels que \TeX\
+attache \`a un point de coupure quand ce point de coupure arrive \`a
+deux lignes cons\'ecu\-tives qui se terminent sur une c\'esure.
+Augmenter la valeur de ce param\`etre d\'ecourage
+\TeX\ de c\'esurer deux lignes \`a suivre.
+Les d\'em\'erites sont en unit\'es de \minref{m\'ediocrit\'e} au carr\'e, donc
+vous devez assigner une valeur plut\^ot large \`a ce param\`etre (dans les
+milliers) pour qu'elle ait un quelconque effet.
+\PlainTeX\ met |\doublehyphendemerits| \`a $10000$.
+}
+\enddesc
+
+\begindesc
+\cts finalhyphendemerits {\param{nombre}}
+\explain
+\minrefs{line break}
+{\tighten
+Ce param\`etre sp\'ecifie les \minref{d\'em\'erites} additionnels que \TeX\
+attache \`a un point de coupure qui fait que l'avant derni\`ere ligne d'un
+paragraphe se termine avec une c\'esure.
+Une telle c\'esure est g\'en\'eralement consid\'er\'ee inesth\'etique
+parce que l'espace blanc \'eventuel provoqu\'e par une derni\`ere ligne courte
+la rend m\'eprisable.
+Augmenter la valeur de ce param\`etre d\'ecourage
+\TeX\ de finir l'avant derni\`ere ligne avec une c\'esure.
+Les d\'em\'erites sont en unit\'es de \minref{m\'ediocrit\'e} au carr\'e, donc
+vous devez assigner une valeur plut\^ot large \`a ce param\`etre (dans les
+milliers) pour qu'elle ait un quelconque effet.
+\PlainTeX\ met |\finalhyphendemerits| \`a $5000$.
+}
+\eix^^{c\'esure//p\'enalit\'es pour}
+\enddesc
+
+\begindesc
+\cts binoppenalty {\param{nombre}}
+\explain
+^^{op\'erateurs}
+Ce param\`etre sp\'ecifie la p\'enalit\'e d'une coupure d'une formule math\'e\-ma\-tique
+apr\`es un op\'erateur binaire quand la formule appara\^\i t dans un paragraphe.
+\PlainTeX\ met |\binoppenalty| \`a $700$.
+\enddesc
+
+\begindesc
+\cts relpenalty {\param{nombre}}
+\explain
+^^{relations}
+Ce param\`etre sp\'ecifie la p\'enalit\'e pour une coupure d'une formule math\'e\-ma\-tique
+apr\`es une relation quand la formule appara\^\i t dans un paragraphe.
+\PlainTeX\ met |\rel!-penal!-ty| \`a~$500$.
+
+\eix^^{coupures de ligne//param\`etres affectant les}
+\enddesc
+
+%==========================================================================
+\subsection {C\'esure}
+
+\begindesc
+\bix^^{c\'esure}
+%
+\easy\ctspecial - \ctsxrdef{@minus}
+\explain
+La commande |\-| ins\`ere une ``c\'esure optionnelle''
+^^{c\'esures optionnelles}
+dans un mot.
+La c\'esure optionnelle autorise \TeX\ de couper le mot \`a cet
+endroit. \TeX\ n'est pas oblig\'e de couper l\`a---il ne le fera
+que s'il le faut. Cette commande est utile quand un mot
+qui appara\^\i t une ou deux fois dans votre document
+doit \^etre coup\'e,
+mais que \TeX\ ne peut pas trouver de point de coupure appropri\'ee de lui-m\^eme.
+\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}
+^^{c\'esure}
+Cette commande sp\'ecifie une ``coupure optionnelle'', autrement dit,
+un endroit o\`u \TeX\ peut couper une ligne.
+Elle dit aussi \`a \TeX\ quel texte mettre de chaque cot\'e de la coupure.
+\ulist
+\li Si \TeX\ ne doit pas couper l\`a, il utilise le \<no-break text>.
+\li Si \TeX\ doit couper l\`a, il met le \<pre-break text> juste avant
+la coupure et le \<post-break text> juste apr\`es la coupure.
+\endulist
+\noindent
+Comme avec |\-|,
+\TeX\ n'est pas oblig\'e de couper une ligne sur une coupure optionnelle.
+En fait, |\-| est normalement \'equivalent \`a |\discretionary!allowbreak{-}{}{}|.
+
+Parfois, \TeX\ ins\`ere des coupures optionnelles de lui-m\^eme.
+Par ex\-emple, il ins\`ere |\discretionary!allowbreak{}{}{}| apr\`es
+une c\'esure explicite ou un tiret.
+
+{\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''
+|
+^^{c\'esure//allemande}
+\endexample}
+
+\enddesc
+
+\begindesc
+\cts hyphenation {\rqbraces{\<mot>\thinspace\vs\ $\ldots$\ \vs
+ \thinspace\<mot>}}
+\explain
+\TeX\ garde un dictionnaire des exceptions de ses r\`egles de ^{c\'esure}.
+Chaque entr\'ee du dictionnaire indique comment un mot particulier doit
+\^etre coup\'e.
+La commande |\hyphenation| ajoute des mots au dictionnaire.
+Son argument est une suite de mots s\'epar\'ee par des blancs.
+Les lettres majuscules et minuscules sont \'equivalentes.
+Les c\'esures dans chaque mot indiquent les endroits
+o\`u \TeX\ peut couper ce mot.
+Un mot sans c\'esure ne sera jamais coup\'e.
+Dans tous les cas, vous pouvez outrepasser le dictionnaire de c\'esure en
+utilisant |\-| pour une occurrence particuli\`ere d'un mot.
+Vous devez produire toutes les formes grammaticales d'un mot
+que vous voulez que \TeX\ coupe, c'est-\`a-dire, le singulier et le pluriel.
+
+\example
+\hyphenation{Gry-phon my-co-phagy}
+\hyphenation{man-u-script man-u-scripts piz-za}
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts uchyph {\param{nombre}}
+\explain
+Une valeur positive de |\uchyph| (c\'esure majuscule)
+permet d\'ecouper des mots, comme des noms propres,
+qui commencent par une lettre capitale.
+Une valeur \`a z\'ero ou n\'egative
+inhibe de telle coupure. \PlainTeX\ met |\uchyph| \`a $1$,
+donc \TeX\ essaye normalement de couper les mots qui commencent par une lettre capital.
+\enddesc
+
+\begindesc
+\cts showhyphens {\rqbraces{\<mot>\thinspace\vs\ $\ldots$\ \vs
+ \thinspace\<mot>}}
+\explain
+Cette commande n'est habituellement pas utilis\'ee dans des documents,
+mais vous pouvez l'utiliser sur votre terminal pour voir comment \TeX\
+couperait certains jeux de mots al\'eatoires.
+Les mots, avec les coupures visibles, apparaissent dans le log et sur
+votre terminal. Vous obtiendrez une plainte \`a propos d'une ``underfull
+hbox''---ignorez la.
+\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
+Des langages diff\'erents ont diff\'erents jeux de r\`egles de c\'esure.
+Ce para\-m\`etre d\'etermine le jeu de ^{r\`egles de c\'esure} que \TeX\ utilise.
+En changeant |\language| vous pouvez obtenir que \TeX\
+coupe des portions de texte ou des documents entiers en accord avec les
+r\`egles de c\'esure appropri\'ees \`a un langage particulier.
+^^{langues europ\'eennes}
+Votre ^{support local} sur \TeX\ vous dira si des
+jeux additionnels de r\`egles de c\'esure sont accessibles (derri\`ere celui
+pour l'anglais)
+et quelles sont les valeurs appropri\'ees de |\language|.
+La valeur par d\'efaut de |\language| est $0$.
+
+\TeX\ met le langage courant \`a $0$ au d\'ebut de tous les paragraphes,
+et compare |\language| au langage courant \`a chaque fois qu'il ajoute
+un caract\`ere au paragraphe courant.
+Si ce n'est pas le m\^eme, \TeX\ ajoute un ^{\elementextra} indiquant
+que le langage change.
+Cet \'el\'ement extraordinaire est la preuve pour les prochaines ex\'ecutions que les r\`egles de langage
+peuvent changer.
+\enddesc
+
+\begindesc
+\cts setlanguage {\<nombre>}
+\explain
+Cette commande met le langage courant \`a \<nombre>
+en ins\'erant le m\^eme \'el\'ement extraordinaire que vous obtiendrez en changeant
+^|\language|.
+En outre, elle ne change pas la valeur de |\language|.
+\enddesc
+
+\begindesc
+\cts lefthyphenmin {\param{nombre}}
+\cts righthyphenmin {\param{nombre}}
+\explain
+Ces param\`etres sp\'ecifient les plus petits fragments de mots que \TeX\ autorise
+\`a gauche et \`a droite d'un mot coup\'e.
+\PlainTeX\ les initialise par d\'efaut \`a $2$ et $3$ respectivement~;
+ce sont les valeurs recommand\'ees pour l'anglais.
+\enddesc
+
+\begindesc
+\bix^^{polices//caract\`eres de c\'esure pour}
+\cts hyphenchar {\<police>\param{nombre}}
+\explain
+\TeX\ n'utilise pas n\'ecessairement le caract\`ere `-' aux points de c\'esure.
+A la place, il utilise le |\hyphenchar| de la police courante, qui est
+habituellement `-' mais pas n\'ecessairement. Si une police a une valeur
+ |\hyphenchar| n\'egative,
+\TeX\ ne coupe pas de mots dans cette police.
+
+Notez que \<police> est une s\'equence de contr\^ole
+qui nomme une police, pas un \<nom de police> qui nomme des fichiers de
+police.
+Attention~:
+un assignement \`a |\hyphenchar| n'est \emph{pas} r\'einitialis\'e \`a la fin
+d'un groupe.
+Si vous voulez changer |\hyphenchar| localement, vous devrez
+sauvegarder et restaurer sa valeur originale explicitement.
+
+\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{nombre}}
+\explain
+Quand \TeX\ lit le fichier de m\'etriques
+^^{fichiers de m\'etriques//tiret de c\'esure par d\'efaut dans}
+pour une police en r\'eponse \`a une commande
+^|\font|, il met le ^|\hyphenchar| de la police dans
+|\default!-hyphen!-char|.
+Si la valeur de |\default!-hyphen!-char| n'est
+pas dans la fourchette $0$--$255$ quand vous chargez une police,
+\TeX\ ne coupera aucun mot dans cette police \`a moins que vous
+outrepassiez la d\'ecision en mettant le |\hyphenchar| de la police apr\`es.
+\PlainTeX\ met |\default!-hyphen!-char| \`a $45$, le code \ascii\
+pour `|-|'.
+\example
+\defaulthyphenchar = `-
+ % Assume `-' is the hyphen, unless overridden.
+\defaulthyphenchar = -1
+ % Don't hyphenate, unless overridden.
+|
+\endexample
+
+\eix^^{polices//caract\`eres de c\'esure pour}
+\enddesc
+
+\see |\pretolerance| (\xref \pretolerance).
+\eix^^{c\'esure}
+\eix^^{coupures de ligne}
+
+%==========================================================================
+\section {Ent\^etes de section, listes et th\'eor\`emes}
+
+\begindesc
+^^{ent\^etes de section}
+\easy\ctspecial beginsection {\<argument>\thinspace{\bt\\par}}
+ \ctsxrdef{@beginsection}
+\explain
+Vous pouvez utiliser cette commande pour d\'ebuter une subdivision majeure de votre document.
+\<argument> est pr\'evu pour servir de titre de section.
+|\beginsection| amplifie \<argument>
+par de l'espace vertical suppl\'ementaire et le met en
+police grasse, justifi\'e \`a gauche.
+Vous pouvez produire le |\par| qui termine \<argument> avec une ligne blanche.
+\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
+^^{listes d'\'el\'ements}
+Cette commande est utile pour cr\'eer des ^{listes d'\'el\'ements}. Tout le paragraphe
+suivant \<argument> est indent\'e de |\parindent|
+^^|\parindent//indentation pour listes d'\'el\'ements|
+(pour |\item|) ou par |2\parindent| (pour |\itemitem|).
+(Voir \xrefpg{\parindent} pour une explication de |\parindent|.)
+Ensuite \<argument>,
+suivi par un espace demi-cadratin, est plac\'e juste \`a
+la gauche du texte de la
+premi\`ere ligne du paragraphe pour qu'il tombe avec l'indentation du paragraphe
+comme sp\'ecifi\'e par |\parindent|.
+
+Si vous voulez inclure plus d'un
+paragraphe dans un \'el\'ement, mettez |\item{}| devant les paragraphes additionnels.
+\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
+ \<texte g\'en\'eral>\thinspace{\bt\\par}}
+ \ctsxrdef{@proclaim}
+\explain
+^^{th\'eor\`emes}
+^^{lemmes}
+^^{hypoth\`eses}
+Cette commande ``proclame'' un th\'eor\`eme, un lemme, une hypoth\`ese, etc.
+Elle met \<argument> en police grasse et le paragraphe suivant en
+italique. \<arg\-u\-ment> doit \^etre suivi par un point et un token espace,
+qui servent \`a s\'eparer \<argument> du \<texte g\'en\'eral>.
+\<texte g\'en\'eral> est constitu\'e du texte jusqu'\`a la fronti\`ere du paragraphe suivant,
+sauf que vous pouvez inclure des paragraphes multiples en les mettant
+entre accolades et terminer un paragraphe apr\`es l'accolade droite fermante.
+\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/info/impatient/fr/fpreface.tex b/info/impatient/fr/fpreface.tex
new file mode 100644
index 0000000000..07888fd01a
--- /dev/null
+++ b/info/impatient/fr/fpreface.tex
@@ -0,0 +1,158 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\frontchapter{Pr\'eface}
+
+\TeX\ de Donald Knuth, un syst\`eme de composition automatis\'e,
+fournit presque tout ce qui est requis pour la composition de haute qualit\'e,
+aussi bien des math\'ematiques que du texte ordinaire. Il est particu\-li\`erement
+reconnu pour sa flexibilit\'e, ses c\'esures superbes et sa capacit\'e de choisir
+des coupures de ligne esth\'etiquement satisfaisantes. En raison de ses
+possibilit\'es extraordinaires, \TeX\ est devenu le syst\`eme de composition
+principal pour les math\'ematiques, les sciences et techniques et a \'et\'e
+adopt\'e comme norme par la soci\'et\'e math\'ematique am\'ericaine. Un
+programme compagnon, ^{\Metafont}, peut construire les lettres arbitraires
+comprenant, en particulier, tous les symboles qui pourraient \^etre
+n\'ecessaires dans les math\'ematiques. \TeX\ et \Metafont\ sont largement
+disponibles au sein de la communaut\'e scientifique et technologique et ont
+\'et\'e mis en application sur une vari\'et\'e d'ordinateurs. \TeX\ n'est pas
+parfait---il lui manque un support int\'egr\'e des graphiques et certains effets
+tels que les barres de ^{r\'evision} sont tr\`es difficiles \`a produire---%
+mais ces inconv\'enients sont loin d'\^etre sup\'erieurs \`a ses avantages.
+
+\thisbook\/ est pr\'evu pour servir aux scientifiques, math\'e\-ma\-ticiens,
+et typographes pour lesquels \TeX\ est un outil utile plut\^ot que d'un
+int\'er\^et primaire, aussi bien que pour les informaticiens qui ont un vif
+int\'er\^et pour \TeX\ dans son propre int\'er\^et. Nous avons l'intention
+\'egalement de servir aussi bien les nouveaux venus que ceux qui sont d\'ej\`a
+familiaris\'eavec \TeX. Nous supposons que nos lecteurs sont habitu\'es au
+fonctionnement des ordinateurs et qu'ils veulent obtenir l'information dont ils
+ont besoin aussi rapidement que possible. Notre but est de fournir ces
+informations clairement, avec concision, et de mani\`ere accessible.
+
+Ce livre fournit donc un \'eclairage lumineux, un guide vaillant et
+donne des cartes d\'etaill\'ees pour explorer et utiliser \TeX. Il vous
+permettra de ma\^\i triser \TeX\ rapidement par l'enqu\^ete et l'exp\'erience,
+mais il ne vous m\`enera pas par la main dans le syst\`eme \TeX\ en entier.
+Notre approche est de vous fournir un manuel de \TeX\ qui vous facilite la
+recherche des quelques informations dont vous avez besoin. Nous expliquons tout
+le r\'epertoire des commandes de \TeX\ et des concepts dont elles d\'ependent.
+Vous ne perdrez pas de temps \`a explorer des sujets que vous ne voulez pas voir
+ni avoir besoin.
+
+Dans les premi\`eres sections, nous vous fournissons \'egalement assez
+d'in\-dications pour que vous puissiez commencer si vous n'avez jamais utilis\'e
+\TeX\ avant. Nous supposons que vous avez acc\`es \`a un ex\'ecutable \TeX\ et
+que vous savez utiliser un \'editeur de texte, mais nous ne supposons pas
+beaucoup plus au sujet de vos connaissances. Puisque ce livre est organis\'e
+pour la r\'ef\'erence, vous continuerez toujours \`a le trouver utile quand vous
+vous familiariserez avec \TeX. Si vous pr\'ef\'erez commencer par une excursion
+soigneusement guid\'ee, nous vous recommandons d'avoir lu une premi\`ere fois
+^{\texbook} de Knuth (voir la \xrefpg{ressources} pour une citation), en
+passant au-dessus des ``sections dangereuses'', puis de revenir \`a ce livre
+pour de l'information additionnelle et des r\'ef\'erences pendant que vous
+commencez \`a utiliser \TeX (les sections dangereuses recouvrent des sujets
+avanc\'es de \texbook).
+
+La structure de \TeX\ est vraiment tr\`es simple~: un document \TeX\ se compose
+du texte ordinaire entrem\^el\'e avec des commandes qui donnent \`a \TeX\ des
+instructions compl\'ementaires sur la fa\c con de composer votre document. Les
+choses comme des formules de math\'ematique contiennent beaucoup de commandes, alors que
+le texte d'explication en contient rela\-tivement peu.
+
+La partie fastidieuse de l'\'etude de \TeX\ est d'apprendre les commandes et les
+concepts sous-entendus dans leurs descriptions. Ainsi nous avons consacr\'e la
+majeure partie du livre \`a d\'efinir et \`a expliquer les commandes et les
+concepts. Nous avons \'egalement fourni des exemples en montrant le r\'esultat
+compos\'e avec \TeX\ et la source correspondante, des conseils pour r\'esoudre
+des probl\`emes communs, des informations sur les messages d'erreur et ainsi de
+suite. Nous avons fourni des r\'ef\'erences crois\'ees par num\'ero de page et
+un index complet.
+
+Nous avons class\'e les descriptions de commandes pour que vous puissiez les
+rechercher par fonction ou alphab\'etiquement. Le classement fonctionnel est ce
+dont vous avez besoin quand vous savez ce que vous voulez faire mais que vous ne
+savez pas quelle commande peut le faire pour vous. Le classement alphab\'etique
+est ce dont vous avez besoin quand vous connaissez le nom d'une commande mais
+pas exactement ce qu'elle fait.
+
+Nous devons vous avertir que nous n'avons pas essay\'e de fournir une
+d\'efinition compl\`ete de \TeX. Pour cela vous aurez besoin de ^{\texbook}, qui
+est la source originale d'information sur \TeX. \texbook\ contient \'egalement
+beaucoup d'informations sur les d\'etails d'utilisation de \TeX, en particulier
+sur la composition des formules math\'ematiques. Nous vous le recommandons
+fortement.
+
+En 1989, Knuth a fait une r\'evision importante de \TeX\ afin de l'adapter aux
+jeux de caract\`eres $8$ bits requis pour effectuer des compositions dans des
+langues autres que l'anglais. La description de \TeX\ dans ce livre tient compte
+de cette r\'evision (voir \xref{newtex}).
+
+{\tighten Vous pouvez utiliser une forme sp\'ecialis\'ee de \TeX\ comme
+^{\LaTeX} ou ^{\AMSTeX} (voir \xref{ressources}). Bien que ces formes
+sp\'ecialis\'ees soient d'un seul bloc, vous pouvez vouloir juste utiliser
+certaines des facilit\'es de \TeX\ lui-m\^eme, afin d'employer la commande la
+plus fine que seul \TeX\ peut fournir. Ce livre peut vous aider \`a apprendre ce
+que vous devez conna\^\i tre \`a propos de ces facilit\'es sans devoir vous
+renseigner sur beaucoup d'autres choses qui ne vous int\'eressent pas. \par}
+
+Deux d'entre nous (K.A.H. et K.B.) ont \'et\'e g\'en\'ereusement soutenus par
+l'universit\'e du Massachusetts \`a Boston pendant la pr\'eparation de ce livre.
+En particulier, Rick Martin a permis aux machines de fonctionner et Robert~A.
+Morris et Betty O'Neil les ont rendus disponibles. Paul English d'Interleaf nous
+a aid\'es \`a produire les \'epreuves d'un dessin de couverture.
+
+Nous souhaitons remercier les relecteurs de notre livre~: Richard Furuta de
+l'universit\'e du Maryland, John Gourlay d'Arbortext, Inc., Jill Carter Knuth et
+Richard Rubinstein de la Digital Equipment Corporation. Nous avons pris \`a
+c\oe ur leurs critiques constructives et sans compter du manuscrit original, et le
+livre a consid\'erablement b\'en\'efici\'e de leurs perspicacit\'es.
+
+Nous sommes particuli\`erement reconnaissant \`a notre r\'edacteur, Peter
+Gordon d'Addison-Wesley. Ce livre \'etait vraiment son id\'ee et dans tout son
+d\'eveloppement il a \'et\'e une source d'encouragement et de conseil valable. Nous
+remercions son aide chez Addison-Wesley, Helen Goldstein, qui nous a aid\'es de
+tant de mani\`eres, et de Loren Stevens d'Addison-Wesley de sa comp\'etence et
+de son \'energie dans le cheminement de ce livre dans le processus de
+production. Sans oublier notre r\'edactrice de copie, Janice Byer, sans qui un
+certain nombre de petites mais irritantes erreurs seraient demeur\'ees dans ce
+livre. Nous appr\'ecions sa sensibilit\'e et go\^utions en corrigeant ce qui
+nous \'etait n\'ecessaire de corriger tout en lui laissant ce que nous n'avions
+pas eu besoin de corriger. En conclusion, nous souhaitons remercier Jim Byrnes
+de Prometheus Inc. d'avoir rendu cette collaboration possible en nous
+pr\'esentant.
+\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 Pr\'eface \`a l'\'edition libre~:} Ce livre a \'et\'e \`a
+l'origine \'edit\'e en 1990 par Addison-Wesley. En 2003, il a d\'eclar\'e
+\'epuis\'e et Addison-Wesley a g\'en\'ereusement rendu tous les droits \`a nous,
+les auteurs. Nous avons d\'ecid\'e de rendre le livre disponible sous forme de
+source, sous la licence de documentation libre de GNU, ceci \'etant notre
+mani\`ere de soutenir la communaut\'e qui a soutenu le livre en premier lieu.
+Voyez la page de copyright pour plus d'information sur l'autorisation.
+
+Les illustrations qui faisaient partie du livre original ne sont pas incluses
+ici. Certaines des polices ont \'egalement \'et\'e chang\'ees~; maintenant, seules
+des polices librement disponibles sont utilis\'ees. Nous avons laiss\'e les
+hirondelles et l'information de gal\'ee sur les pages, pour identification. Une
+vieille version d'Eplain a \'et\'e employ\'ee pour la produire~; voyez le dossier
+{\tt eplain.tex} pour des d\'etails.
+
+Nous ne projetons pas de faire de changements ou additions au livre
+nous-m\^emes, except\'e la correction d'erreurs qui nous seront rappor\-t\'ees et
+peut-\^etre, l'inclusion des illustrations.
+
+Notre distribution du livre est \`a {\tt ftp://tug.org/tex/impatient}. Vous
+pouvez nous atteindre par courriel \`a {\tt impatient@tug.org}.
+
+\pagebreak
+\byebye
diff --git a/info/impatient/fr/fread1st.tex b/info/impatient/fr/fread1st.tex
new file mode 100644
index 0000000000..8134d722a2
--- /dev/null
+++ b/info/impatient/fr/fread1st.tex
@@ -0,0 +1,46 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\frontchapter{lisez ceci d'abord}
+
+% We don't need anything but \rm here.
+{\font\rm = cmr10 scaled \magstephalf \baselineskip = 1.1\baselineskip
+Si vous d\'ebutez en \TeX:
+\ulist
+\li Lisez en premier les sections \chapternum{usebook}--%
+\chapternum{usingtex}.
+\li Recherchez dans les exemples de la \chapterref{examples} les
+choses qui ressemblent \`a ce que vous voulez faire. Recherchez toutes
+les commandes en relation dans le ``sommaire des commandes'',
+\chapterref{capsule}. Utilisez les r\'ef\'erences de page pour trouver
+les descriptions les plus compl\`etes sur ces commandes et d'autres
+qui leur sont similaires.
+\li Recherchez les mots inconnus dans ``Concepts'',
+\chapterref{concepts}, en utilisant la liste \`a la fin
+du livre pour trouver l'explication rapidement.
+\li Exp\'erimentez et explorez.
+\endulist
+\bigskip
+\noindent
+
+Si vous connaissez d\'ej\`a \TeX\ ou si vous \'editez ou modifiez un
+document \TeX\ que quelqu'un d'autre a cr\'e\'e:
+\ulist
+\li Pour un rappel rapide de ce que fait telle ou telle commande,
+regardez dans la \chapterref{capsule}, ``r\'esum\'e des commandes''.
+Il est alphab\'etique et comprend des r\'ef\'erences de page pour de
+plus compl\`etes descriptions des commandes.
+\li Utilisez les groupements fonctionnels de descriptions de commande
+pour trouver celles li\'ees \`a une commande particuli\`ere que vous
+con\-naissez d\'ej\`a, ou pour trouver une commande qui atteint un
+objectif particulier.
+\li Utilisez la \chapterref{concepts}, ``concepts'', pour avoir
+l'explication de n'importe quel concept que vous ne comprenez pas,
+voulez comprendre avec plus de pr\'ecision ou avez oubli\'e. Utilisez
+la liste \`a la fin du livre pour trouver un
+concept rapidement. \endulist } \pagebreak
+
+\byebye
diff --git a/info/impatient/fr/ftips.tex b/info/impatient/fr/ftips.tex
new file mode 100644
index 0000000000..2684592ff2
--- /dev/null
+++ b/info/impatient/fr/ftips.tex
@@ -0,0 +1,1004 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter{Trucs et astuces}
+
+\chapterdef{tips}
+
+\TeX\ est un programme complexe qui travaille parfois de fa\c con
+myst\'e\-rieuse. Dans cette section nous vous offrons quelques trucs
+pour r\'esoudre les probl\`emes que vous pourrez rencontrer et expliquer
+quelques techniques pratiques.
+
+
+\section Corriger de mauvaises coupures de page
+
+\bix^^{coupures de page//mauvaises}
+Parfois \TeX\ coupe une page juste au milieu du mat\'eriel que vous voulez
+garder ensemble.---par exemple, une ent\^ete de section et le texte qui la
+suit ou une courte suite d'items li\'es. Il y a deux moyens de corriger la
+situation~:
+\ulist\compact
+\li Vous pouvez forcer le mat\'eriel \`a rester ensemble.
+\li Vous pouvez forcer une coupure de page \`a un endroit diff\'erent.
+\endulist
+
+La plus simple fa\c con de forcer \TeX\ a garder le mat\'eriel ensemble sur une
+page est de l'englober dans un vbox en utilisant la commande |\vbox|
+\ctsref{\vbox}.
+^^|\vbox//emp\^echer des coupures de page avec|
+Une vbox est normalement meilleure qu'une hbox pour faire cela parce que le
+plus souvent, le mat\'eriel \`a garder ensemble, par exemple, une suite de
+paragraphes, sera du mat\'eriel en mode vertical. Vous pouvez faire pr\'ec\'eder et
+suivre la vbox par une commande de paragraphe implicite ou explicite (soit
+une ligne blanche, soit un |\par|)~; autrement \TeX\ pourrait essayer de
+faire la partie vbox sur un paragraphe adjacent. La m\'ethode vbox a une
+limitation importante~: vous ne pouvez pas l'appliquer \`a une portion de
+texte inf\'erieure a un paragraphe.
+
+Vous pouvez parfois garder les lignes d'un paragraphe ensemble en
+l'englobant dans un groupe et en donnant \`a |\interlinepenalty|
+\ctsref{\interlinepenalty}
+la valeur $10000$ au d\'ebut du groupe (ou n'importe o\`u avant la fin du
+paragraphe).
+Cette m\'ethode demandera \`a \TeX\ de consid\'erer les coupures de page dans ce
+paragraphe comme \'etant infiniment ind\'esirables.
+N\'eanmoins~; si toutes les coupures de page que \TeX\ peut trouver sont
+infiniment ind\'esirables, il coupera la page dans le paragraphe quand m\^eme.
+
+Une commande ^|\nobreak| (\xref{vnobreak})
+apr\`es la fin d'un paragraphe emp\`eche \TeX\
+de couper la page sur l'item suivant
+(a moins que cet item provoque un penalty inf\'erieur \`a $10000$).
+C' est aussi la meilleure fa\c con d'emp\^echer une coupure de page apr\`es une ent\^ete,
+puisque une ent\^ete r\'eagit normalement comme un paragraphe.
+Le |\nobreak| doit suivre la ligne blanche ou le |\par| qui termine
+la paragraphe pour que \TeX\ ne traite pas le |\nobreak| comme faisant partie
+du paragraphe.
+Pour que le |\nobreak| soit effectif, il doit aussi \^etre plac\'e avant
+tout point de coupure l\'egal \`a la fin du paragraphe.
+Le ressort que \TeX\ ins\`ere avant le paragraphe suivant est comme un point
+de coupure,
+et ainsi pour tout ressort vertical que vous ins\'erez explicitement apr\`es un
+paragraphe.
+Ainsi, le |\nobreak| doit normalement \^etre la toute premi\`ere chose apr\`es
+la fin du paragraphe ou de l'ent\^ete.
+
+Vous pouvez utiliser la commande ^|\eject| \ctsref{\eject}
+pour forcer \TeX\ \`a couper une page \`a un endroit
+particulier. Dans un paragraphe, vous pouvez utiliser la combinaison
+`|\vadjust{\vfill\eject}|'
+\ctsref{\vadjust}
+^^|\vadjust|
+pour forcer une coupure apr\`es la prochaine ligne de sortie compl\`ete.
+La raison de faire pr\'ec\'eder |\eject| par ^|\vfill|
+\ctsref{\vfill} est d'obliger
+\TeX\ \`a remplir la page avec un espace blanc.
+De toute fa\c con, utiliser |\eject| pour r\'esoudre des probl\`emes de coupure de page
+a un d\'esavantage majeur~:
+si les fronti\`eres de page de votre document changent,
+les coupures de page que vous avez ins\'er\'ees peuvent ne plus \^etre l\`a o\`u vous
+les voulez.
+
+Si vous ne procurez pas \`a \TeX\ une commande |\vfill| pour remplir la page
+apr\`es un |\eject|,
+\TeX\ redistribue l'espace blanc exc\'edentaire le mieux qu'il peut et alors
+se plaint g\'en\'eralement d'un
+``underfull |\vbox| (badness $10000$) has occurred while |\output| is active.''
+Vous pouvez rencontrer un probl\`eme similaire avec
+toutes les m\'ethodes mentionn\'ees ci-dessus pour englober du
+mat\'eriel que vous voulez garder li\'e.
+
+La commande ^|\filbreak| \ctsref\filbreak{}
+\xrdef{filbreak}
+procure un moyen de garder les lignes d'un ou plusieurs paragraphes
+(ou autre mat\'eriel de mode vertical) li\'e sur une page.
+Si vous englobez un paragraphe entre |\filbreak|, \TeX\ ignorera effectivement
+les |\filbreak| si le paragraphe d\'ebute sur la page courante et
+coupe la page avant le premier |\filbreak| si le paragraphe ne d\'ebute pas.
+Si vous mettez des |\filbreak| autour de chaque paragraphe dans une s\'equence de paragraphes,
+comme ceci~:
+{\obeylines\display{
+{\tt \\filbreak}
+\<paragraph>
+{\tt \\filbreak}
+\<paragraph>
+{\tt \\filbreak}
+\leavevmode\indent\vdots
+\<paragraph>
+{\tt \\filbreak}
+}}
+%\vfil\eject
+\noindent
+\TeX\ gardera les lignes de chaque paragraphe li\'es sur une page.
+Si \TeX{} coupe une page sur un |\filbreak|, il remplira le bas de la
+page avec un espace blanc.
+
+Parfois vous pourrez demander \`a \TeX\ de modifier la longueur d'une page
+en changeant le param\`etre ^|\looseness| \ctsref\looseness{} pour un ou plusieurs paragraphes.
+Rendre un |\looseness| n\'egatif dans un paragraphe fait que \TeX\ essaye de
+s\'eparer le paragraphe en moins de lignes~; le rendre positif fait que \TeX\ essaye
+d'\'etendre le paragraphe en plus de lignes. Le d\'esavantage de changer |\looseness|
+est que l'espacement inter-mot de la r\'egion affect\'e ne sera pas optimal.
+Vous pouvez obtenir plus d'information sur le fa\c con dont \TeX\ appr\'ehende
+les coupures de ligne en mettant |\tracingpages| (\xref\tracingpages) \`a $1$.
+
+
+\section Pr\'eserver la fin d'une page
+
+Parfois vous avez besoin de modifier quelque chose sur une seule page et vous
+voulez \'eviter de r\'eimprimer tout le document. Si vos modifications ne changent
+pas trop la page, il y a de l'espoir. Vous devez modifier la fin de la page
+pour qu'elle tienne au m\^eme endroit~;
+les m\'ethodes sont similaires \`a celles pour modifier une mauvaise coupure de page.
+
+Si la fin de la page originale se trouve entre des paragraphes, vous pouvez
+forcer une coupure de page au m\^eme endroit en utilisant toutes les m\'ethodes
+que nous avons d\'ecrites plus haut. Autrement, vous devez forcer une coupure de
+ligne \emph{et} une coupure de page \`a un endroit particulier. Si la nouvelle
+page est plus courte que l'ancienne, la s\'equence~:
+\csdisplay
+\vadjust{\vfill\eject}\break
+|
+^^|\vadjust|
+devrait faire l'affaire.
+Mais si la nouvelle page est plus longue,
+le probl\`eme est plus difficile parce que \TeX\ a probablement d\'ej\`a compress\'e
+la page aussi fermement qu'il le peut. Vos seuls espoirs dans ce cas sont
+de mettre ^|\looseness| \ctsref\looseness{} \`a une valeur n\'egative, pour
+raccourcir certains sauts verticaux sur la page, pour ajouter un peu de
+r\'etr\'ecissement ^|\parskip| (\xref\parskip) s'il \'etait diff\'erent de z\'ero, ou,
+en dernier recours, diminuer |\baselineskip| \ctsref{\baselineskip}
+encore plus fermement.
+^^|\baselineskip//et pr\'eservation de fin de page|
+
+\section Garder de l'espace en haut d'une page
+
+\null
+^^{espace vertical//r\'eserver en haut d'une page}
+Vous pouvez utiliser habituellement la commande |\vskip| \ctsref\vskip{}
+pour garder de l'espace vertical sur une page.
+Cela ne marche pas en haut d'une page, toutefois, car
+\TeX\ abandonne le ressort, les cr\'enages et les p\'enalit\'es qui arrivent juste
+apr\`es une coupure de page.
+^^{coupures de page//ressort sur}
+Utilisez la commande ^|\topglue| \ctsref\topglue\ \`a la place~; il produit
+un ressort qui ne dispara\^\i t jamais.
+\eix^^{coupures de page//mauvaises}
+
+
+
+\section Corriger de mauvaise coupure de ligne
+
+\null
+\bix^^{coupures de ligne//mauvaises}
+Si \TeX\ coupe une ligne au milieu du mat\'eriel que vous voulez garder
+sur une seule ligne, il y a plusieurs moyens de corriger la situation~:
+\ulist\compact
+\li Vous pouvez forcer une coupure \`a un endroit proche avec la commande
+|\break| (\xref{hbreak}).
+^^|\break//corriger des coupures de ligne avec|
+\li Vous pouvez ins\'erer un tilde (|~|) entre deux mots
+(see \xref{@not}) pour emp\^echer une coupure entre eux \ttidxref{~}
+\li Vous pouvez signaler \`a \TeX\ des c\'esures qu'il ne consid\`ererait pas
+autrement en ins\'erant une ou plusieurs c\'esures optionnelles dans plusieurs
+mots (voir |\-|, \xref{\@minus}).
+\ctsidxref{-//sur une coupure de ligne}
+^^{c\'esures optionnelles//mauvaises coupures de ligne, corriger avec}
+\li Vous pouvez englober plusieurs mots dans une hbox en utilisant la
+commande ^|\hbox| \ctsref{\hbox}.
+\endulist
+
+Le d\'esavantage de toutes ces m\'ethodes, \`a part l'insertion de c\'esures
+optionnelles, est qu'elles rendent impossible pour \TeX\ de trouver un jeu
+de coupures de ligne satisfaisant. Si cela arrive n\'eanmoins, \TeX\ trouvera
+une ou plusieurs bo\^\i tes trop ou pas assez pleines et s'en plaindra.
+^^{underfull boxes} ^^{overfull boxes}
+La m\'ethode hbox a un d\'esavantage de plus~: parce que \TeX\ voit une hbox
+comme une entit\'e simple sans consid\'erer son contexte, l'espace entre les mots
+dans la hbox peut ne pas \^etre coh\'erent avec celui du reste de la ligne.
+\eix^^{coupures de ligne//mauvaises}
+
+
+\section Corriger des bo\^\i tes trop ou pas assez pleines
+
+\null
+\bix^^{overfull boxes}
+\bix^^{underfull boxes}
+\bix^^{\boites//overfull}
+\bix^^{\boites//underfull}
+Si \TeX\ se plaint d'une bo\^\i te trop pleine, cela signifie que vous avez mis
+plus de mat\'eriel dans une bo\^\i te qu'elle ne peut en contenir.
+Similairement, si \TeX\ se plaint d'une bo\^\i te pas assez pleine, cela signifie
+que vous n'avez pas mis assez de mat\'eriel dans la bo\^\i te. Vous pouvez rencontrer
+ces plaintes dans de nombreuses circonstances diff\'erentes, donc, regardons
+les plus communes~:
+
+\ulist
+\li Une bo\^\i te trop pleine d'une ligne d'un paragraphe indique que la ligne
+\'etait trop longue et que \TeX\ ne peut pas r\'earranger le paragraphe pour
+rendre la ligne plus courte. Si vous mettez ^|\emergencystretch|
+\ctsref{\emergencystretch} \`a une valeur diff\'erente de z\'ero, cela peut
+r\'esoudre le probl\`eme en autorisant \TeX\ \`a mettre plus d'espace entre les
+mots. Une autre solution est de mettre |\tolerance| \ctsref{\tolerance}
+\`a $10000$, mais c'est un peu comme \'emettre des lignes avec beaucoup trop
+d'espace. Sinon, une autre solution est d'ins\'erer une c\'esure optionnelle
+^^{c\'esures optionnelles//overfull boxes, corriger avec}
+dans un mot critique que \TeX\ ne sait pas couper.
+Si tout cela ne suffit pas, vous pourriez essayer de r\'e\'ecrire le paragraphe.
+Une solution qui est rarement satisfaisante est d'augmenter ^|\hfuzz| \ctsref\hfuzz,
+autorisant ainsi \TeX\ de construire des lignes qui d\'epassent dans la marge droite.
+
+\li Une bo\^\i te pas assez pleine d'une ligne d'un paragraphe indique que la ligne
+\'etait trop courte et que \TeX\ ne peut pas r\'earranger le paragraphe pour
+rendre la ligne plus longue.
+\TeX\ formera de telles lignes en \'etirant ses espaces inter-mots au del\`a de leurs
+limites normales. Deux des solutions pour des lignes trop pleines mentionn\'ees ci-dessus
+s'appliquent aussi aux lignes pas assez pleines~:
+ins\'erer des c\'esures optionnelles et r\'e\'ecrire le paragraphe.
+Des lignes pas assez pleines ne vous g\^eneront pas si vous utilisez un
+format justifi\'e \`a gauche, que vous pourrez obtenir avec la commande
+^|\raggedright| \ctsref\raggedright.
+
+\li La plainte~:
+\csdisplay
+Underfull \vbox (badness 10000) has occurred
+ while \output is active
+|
+indique que \TeX\ n'a pas assez de mat\'eriel pour remplir une page. La cause
+probable est que vous avez utilis\'e des vbox pour garder du mat\'eriel ensemble
+et \TeX\ a rencontr\'e une vbox pr\`es du bas d'une page qui ne peut pas rentrer
+sur cette page.
+Il a mis la vbox sur la page suivante, mais en ce faisant a laiss\'e trop
+d'espace vide dans la page courante.
+Dans ce cas vous pouvez soit ins\'erer plus d'espace quelque part sur la page
+courante, soit couper la vbox en plus petites parties.
+
+Une autre cause possible de cette plainte est d'avoir un long paragraphe
+qui occupe une page enti\`ere sans coupure.
+Puisque \TeX\ ne fait pas varier l'espacement entre les lignes,
+il peut \^etre incapable de remplir un trou au bas de la page
+d'un montant d'une fraction de l'espacement de la ligne.
+Cela peut arriver si |\vsize| \ctsref{\vsize}, la longueur de la page,
+n'est pas un multiple de |\baselineskip| \ctsref{\baselineskip}, l'espace
+entre des lignes de bases cons\'ecutive.
+
+Sinon, une autre cause de cette plainte,
+similaire \`a la pr\'ec\'edente, est d'avoir mis ^|\parskip| \ctsref{\parskip},
+le ressort inter-paragraphes \`a une valeur qui n'a pas assez d'\'etirement ou de
+r\'etr\'ecissement. Vous pouvez r\'esoudre ces deux derniers probl\`emes en augmentant
+^|\vfuzz| \ctsref\vfuzz.
+
+\li La plainte
+\csdisplay
+Overfull \vbox (296.30745pt too high) has occurred
+ while \output is active
+|
+indique que vous avez construit une vbox qui est plus longue que la page.
+vous devriez juste la faire plus courte.
+
+\li
+\bix^^|\hbox//overfull box provenant de|
+\bix^^|\vbox//overfull box provenant de|
+Les seules solutions pour une hbox ou une vbox trop pleine que vous avez
+construit avec les commandes |\hbox| or |\vbox|
+(\pp\xrefn\hbox, \xrefn\vbox)
+sont de sortir quelque chose de la bo\^\i te, ins\'erer un ressort n\'egatif avec
+^|\hss| ou ^|\vss| (\xref\hss) ou d'augmenter la taille de la bo\^\i te.
+
+\li Si vous rencontrez une hbox ou une vbox pas assez pleine que vous avez
+construit avec |\hbox| ou |\vbox|, vous feriez mieux normalement de remplir
+la bo\^\i te avec ^|\hfil| ou ^|\vfil| (\xref\hfil).
+\eix^^|\hbox//overfull box provenant de|
+\eix^^|\vbox//overfull box provenant de|
+
+\endulist
+\eix^^{\boites//overfull}
+\eix^^{\boites//underfull}
+\eix^^{overfull boxes}
+\eix^^{underfull boxes}
+
+
+\section Retrouver des espaces entre-mots perdus
+
+\null
+^^{espace//perdu}
+^^{mots trop rapproch\'es}
+Si vous trouvez que \TeX\ a trop rapproch\'e deux mots, la cause courante
+est une s\'equence de contr\^ole qui a absorb\'e l'espace qui la suit. Mettre
+un ^{espace contr\^ol\'e} (|\!visiblespace|) apr\`es la s\'equence de contr\^ole.
+
+
+\section \'Eviter des espaces entre-mots non d\'esir\'es
+
+\null
+\bix^^{espace//non d\'esir\'e}\xrdef{unwantedspace}
+Si vous obtenez un espace dans votre document o\`u vous ne vouliez et ne
+pensiez pas en avoir, la cause la plus courante, d'apr\`es notre exp\'erience,
+est une fin de ligne ou un espace apr\`es une accolade.
+^^{accolades//espace apr\`es}
+(Si vous faites de jolies choses avec les codes de cat\'egories,
+^^{codes de cat\'egorie//cause d'espaces non d\'esir\'es}
+vous avez introduit beaucoup d'autres causes toutes aussi sympathiques.)
+Normalement, \TeX\ traduit une fin de ligne par un espace, et consid\`ere
+un espace apr\`es une accolade ouvrante ou fermante comme significatif.
+
+Si l'espace non d\'esir\'e est caus\'e par un espace apr\`es une accolade dans
+une ligne d'entr\'ee, retirez-le.
+Si l'espace non d\'esir\'e est caus\'e par une accolade \`a la fin d'une ligne
+d'entr\'ee, mettez une `|%|' imm\'ediatement apr\`es l'accolade.
+{\recat!ttidxref[%//pour \'eliminer des espaces non d\'esi\-r\'es]]
+Le `|%|' d\'ebute un commentaire, mais ce commentaire ne n\'ecessite aucun
+texte.
+
+Une d\'efinition de macro peut aussi
+introduire des espaces non d\'esir\'es si vous ne les avez pas \'ecrites
+soigneusement. Si vous obtenez des espaces non d\'esir\'es quand vous appelez
+une macro, v\'erifiez sa d\'efinition pour \^etre s\^ur que vous n'avez pas un
+espace non d\'esir\'e apr\`es une accolade ou que vous n'avez pas termin\'e une ligne
+de la d\'efinition imm\'ediatement apr\`es une accolade.
+On termine souvent une ligne de d\'efinition de macro apr\`es une accolade pour
+rendre la d\'efinition plus lisible.
+Par s\'ecurit\'e, mettez un `|%|' apr\`es toute accolade qui termine une ligne de
+d\'efinition de macro.
+Il n'est peut-\^etre pas n\'ecessaire, mais il ne fera pas de mal.\footnote{
+Il faut reconna\^\i tre qu'il n'y a que de rares cas o\`u vous avez r\'eellement
+besoin d'une fin de ligne apr\`es une accolade.}
+
+Si vous avez du mal \`a localiser la source d'un espace non d\'esir\'e, essayez
+de mettre |\tracingcommands| \ctsref{\tracingcommands} \`a $2$.
+Vous obtiendrez une commande |{blank space}| dans le fichier log pour chaque
+espace que voit \TeX.
+
+Cela aide de conna\^\i tre les r\`egles d'espace de \TeX~:
+
+\olist
+\li Des espaces sont ignor\'es au d\'ebut des lignes d'entr\'ee.
+\li Des espaces en fin de ligne d'entr\'ee sont ignor\'es en \emph{toute}
+circonstance, bien que la fin de ligne elle-m\^eme soit trait\'ee comme un espace.
+(une ligne compl\`etement blanche, n\'eanmoins, g\'en\`ere un token |\par|.)
+\li De multiples espaces sont trait\'es comme un espace simple, mais
+seulement si ils apparaissent ensemble dans votre entr\'ee.
+Ainsi un espace suivant les arguments d'un appel de macro n'est pas combin\'e
+avec l'espace final produit par l'appel de macro. \`A la place, vous
+obtenez deux espaces.
+\li Des espaces sont ignor\'es apr\`es des mots de contr\^ole.
+\li Des espaces sont de fait ignor\'es apr\`es des nombres, des dimensions
+et le `|plus|' et le `|minus|' des sp\'ecifications de ressort.%
+\footnote{En r\'ealit\'e, \TeX\ n'ignore qu'un seul espace \`a cet endroit.
+Puisque des espaces multiples sont habituellement r\'eduits \`a un seul espace,
+pourtant, l'effet est d'ignorer tout nombre d'espaces.}
+\endolist
+\noindent Si vous avez chang\'e le code de cat\'egorie de l'espace ou du caract\`ere
+fin de ligne, oubliez tout cela.
+\eix^^{espace//non d\'esir\'e}
+
+
+\section \'Eviter un exc\`es d'espace autour d'un affichage
+
+\null
+^^{math\'ematiques affich\'ees}
+Si vous obtenez trop d'espace au dessus d'un affichage math\'ematique, c'est peut \^etre
+parce que vous avez laiss\'e une ligne blanche dans votre entr\'ee avant l'affichage.
+La ligne blanche d\'ebute un nouveau paragraphe et met \TeX\ en mode
+vertical. Quand \TeX\ voit un `|$|' en mode vertical, il rebascule vers
+le mode horizontal et ins\`ere le ressort inter-paragraphes (|\parskip|) suivie par
+le ressort inter-lignes (|\baselineskip|).
+Ensuite, quand il d\'ebute l'affichage lui-m\^eme,
+il ins\`ere \emph{plus} de ressort (soit ^|\abovedisplayskip|,
+soit ^|\abovedisplayshortskip|, selon la longueur de la ligne pr\'ec\'edente).
+Ce dernier ressort est le seul que vous d\'esirez.
+Pour \'eviter d'obtenir un ressort inter-paragraphe ainsi, ne laissez pas de
+ligne blanche au dessus des affichages math\'ematiques ou autrement
+terminez un paragraphe (avec |\par|, disons) juste avant un affichage math\'ematique.
+
+Similairement,
+si vous obtenez trop d'espace apr\`es un affichage math\'ematique, c'est peut-\^etre
+parce que vous avez laiss\'e une ligne blanche dans votre entr\'ee apr\`es l'affichage,
+retirez le simplement.
+
+
+\section \'Eviter un exc\`es d'espace apr\`es un paragraphe
+
+Si vous obtenez trop d'espace vertical apr\`es un paragraphe qui a \'et\'e produit
+par une macro, vous devez avoir eu un ressort inter-paragraphe produit par la
+macro, un paragraphe vide, et ensuite encore un ressort inter-paragraphe.
+Vous pouvez d\'ebarrasser du saut du second paragraphe en ins\'erant~:
+\csdisplay
+\vskip -\parskip
+\vskip -\baselineskip
+|
+juste apr\`es l'appel de la macro.
+Si vous avez toujours ce probl\`eme avec une certaine macro, vous pouvez mettre
+ces lignes \`a la fin de la d\'efinition de macro \`a la place.
+Vous pourriez aussi r\'esoudre le probl\`eme en ne laissant jamais de ligne
+blanche apr\`es l'appel de macro---si vous voulez une ligne blanche simplement
+pour rendre votre saisie plus lisible, commencez la par un `|%|'.
+
+
+\section Changer la forme du paragraphe
+
+\null
+\bix^^{paragraphes//forme}
+Plusieurs param\`etres de \TeX---^|\hangindent|, ^|\leftskip|, etc.---%
+affectent la fa\c con dont \TeX\ forme des paragraphes et les coupe en lignes.
+^^{coupures de ligne}
+Ces param\`etres sont utilis\'es indirectement dans des commandes \plainTeX{}
+telles que ^|\narrower| et ^|\hang|~; vous pouvez aussi les assigner directement.
+Si vous avez utilis\'e une de ces commandes (ou chang\'e un de ses param\`etres),
+mais que le changement de commande ou de param\`etre ne semble pas avoir le
+moindre effet sur un paragraphe, le probl\`eme peut \^etre que vous avez termin\'e
+un groupe avant d'avoir termin\'e le paragraphe. Par exemple~:
+\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.}
+|
+Ce paragraphe ne sera par compos\'e en resserr\'e parce que l'accolade fermante
+termine le groupe |\narrower| avant que \TeX\ ait eu une chance de
+couper le paragraphe en lignes. \`a la place, mettez un |\par| avant
+l'accolade fermante~; ensuite vous obtiendrez l'effet que vous voulez.
+^^|\par//en changeant la forme du paragraphe|
+\eix^^{paragraphes//forme}
+
+
+\section Mettre des paragraphes dans une bo\^\i te
+
+Supposez que vous ayez quelques paragraphes de texte que vous voulez mettre
+\`a un endroit particulier sur la page. La mani\`ere \'evidente de faire cela est
+d'englober les paragraphes dans une hbox d'une taille appropri\'ee et ensuite de
+placer la hbox o\`u vous voulez qu'elle soit. H\'elas, la mani\`ere \'evidente
+ne marche pas parce que \TeX\ ne fait pas de coupure de ligne dans
+le mode horizontal restreint.
+^^{mode restreint//horizontal}
+Si vous l'essayez,
+vous obtiendrez un message d'erreur trompeur vous sugg\'erant que vous
+avez oubli\'e la fin d'un groupe.
+Le moyen de contourner cette restriction est d'\'ecrire~:
+\csdisplay
+\vbox{\hsize = !<dimen> !dots !<paragraphs> !dots}
+|
+o\`u \<dimen> est la longueur de ligne que vous voulez pour les paragraphes.
+C'est ce dont vous avez besoin, en particulier, quand vous voulez englober
+des paragraphes dans une bo\^\i te (une bo\^\i te entour\'ee de traits droits, pas une
+bo\^\i te \TeX).
+
+\section Dessiner des lignes
+
+\null
+\bix^^{filets}
+Vous pouvez utiliser les commandes ^|\hrule| et ^|\vrule| (\xref\hrule)
+pour tracer des lignes, c'est-\`a-dire, des filets. Vous devez
+savoir (a)~o\`u vous pouvez utiliser chaque commandes et
+(b)~comment \TeX\ d\'etermine les longueurs des filets quand
+vous n'avez pas donn\'e les longueurs explicitement.
+\ulist
+\li Vous pouvez utiliser |\hrule| quand \TeX\ est dans un mode vertical et |\vrule|
+quand \TeX\ est dans un mode horizontal.
+Ces r\`egles signifient que
+vous ne pouvez mettre un filet horizontal dans une hbox ou un filet vertical
+dans une vbox.
+Vous pouvez, n\'eanmoins, construire un filet horizontal qui semble vertical en
+sp\'ecifiant les trois dimensions et en le rendant grand et fin.
+De m\^eme, vous pouvez construire un filet vertical qui semble horizontal
+en le rendant court, plat et allong\'e.
+
+\li Un filet horizontal \`a l'int\'erieur d'une vbox
+a la m\^eme largeur que la vbox si vous n'avez pas
+donn\'e la largeur du filet explicitement.
+Des filets verticaux
+\`a l'int\'erieur de hbox r\'eagissent de mani\`ere analogue.
+Si vos filets ressortent trop longs ou trop courts,
+r\'eglez les dimensions de la bo\^\i te englobante.
+\endulist
+
+Comme exemple, supposon que vous voulez produire~:
+\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}}
+L'entr\'ee suivante le fera~:
+\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}
+|
+Nous devons mettre le texte dans un vbox de fa\c con \`a ce que \TeX\
+l'ex\'ecute comme un paragraphe.
+Les quatre niveaux d'embo\^\i tement sont r\'eellement
+n\'ecessaires---si vous en doutez, essayez d'ex\'ecuter cet exemple avec moins de
+niveaux.
+\eix^^{filets}
+
+
+\section Cr\'eer des ent\^etes ou des pieds de page multi-lignes
+
+\null
+\xrdef{bighead}
+\bix^^{ent\^etes//multi-lignes}
+\bix^^{pieds de page//multi-lignes}
+Vous pouvez utiliser les commandes ^|\headline| et ^|\footline|
+(\xref\footline) pour produire des ent\^etes et des pieds de page, mais
+elles ne marchent pas proprement pour des ent\^etes et des pieds de page
+de plus d'une ligne. N\'eanmoins, vous pouvez obtenir des ent\^etes et des pieds
+de page multi-lignes en red\'efinissant certaines des macros subsidiaires dans
+la routine de sortie de \TeX.
+
+Pour un ent\^ete multi-lignes, vous devez faire trois choses~:
+\olist\compact
+\li Red\'efinir la macro ^|\makeheadline| qui est appel\'ee de la routine de
+sortie de \TeX.
+\li Augmenter ^|\voffset| du montant d'espace vertical consomm\'e par les
+lignes en plus.
+\li Diminuer ^|\vsize| du m\^eme montant.
+\endolist
+\noindent L'exemple suivant montre comment vous pourriez faire cela~:
+\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}
+|
+Vous pouvez normalement suivre le mod\`ele de cette d\'efinition, substituez
+simplement vos propres lignes d'ent\^ete et choisissez un multiple de
+|\baselineskip| appropri\'e (un de moins que le nombre de lignes dans l'ent\^ete).
+
+Pour un pied de page multi-lignes, la m\'ethode est similaire~:
+\olist
+\li Red\'efinissez la macro ^|\makefootline| qui est appel\'ee
+de la routine de sortie de \TeX.
+\li Diminuez ^|\vsize| du montant d'espace vertical consomm\'e par les
+lignes en plus.
+\endolist
+\noindent L'exemple suivant montre comment vous pouvez faire cela~:
+\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}}
+|
+Encore une fois, vous pouvez normalement suivre le mod\`ele de cette d\'efinition.
+La valeur de |\lineskip| d\'etermine le montant d'espace entre la ligne de
+base de la derni\`ere ligne du texte principal sur la page et la ligne de
+base de la premi\`ere ligne du pied de page.
+\eix^^{ent\^etes//multi-lignes}
+\eix^^{pieds de page//multi-lignes}
+
+
+\section Trouver des accolades orphelines
+
+\bix^^{accolades//orphelines}
+\xrdef{mismatched}
+La plupart de temps, quand votre entr\'ee \TeX\ souffre d'accolades non concordantes,
+vous obtenez un diagnostic de \TeX\ assez proche de l'endroit o\`u vous avez
+r\'eellement fait l'erreur.
+Mais une des erreurs les plus frustrantes que vous puissiez subir d'une
+ex\'ecution de \TeX,
+juste avant que \TeX\ s'arr\^ete, est
+la suivante~:
+\csdisplay
+(\end occurred inside a group at level 1)
+|
+Cela indique qu'il y a une accolade ouvrante en trop
+ou une accolade fermante manquante quelque part
+dans votre document, mais il ne vous donne aucune indication du tout
+sur l'endroit o\`u le probl\`eme arrive. Donc comment pouvez vous trouver~?
+
+Un truc de d\'ebuggage que nous trouvons pratique est
+d'ins\'erer la ligne suivante ou son \'equivalente
+\`a cinq ou six endroits \'egalement espac\'es dans le document (et pas dans
+un groupe connu)~:
+\csdisplay
+}% une fausse fermante
+|
+supposons que le probl\`eme soit une accolade ouvrante en trop.
+Si elle est, disons entre la troisi\`eme et la quatri\`eme fausse fermante,
+vous obtiendrez des messages d'erreur des trois premi\`eres fausses fermantes
+mais pas de la quatri\`eme. La raison est que \TeX\ ignorera les trois premi\`ere
+fausses fermantes apr\`es s'en \^etre plaint, mais la quatri\`eme fausse fermante
+appariera l'accolade ouvrante en trop. Ainsi vous savez que l'accolade ouvrante
+en trop est quelque part entre la troisi\`eme et la quatri\`eme fausse fermante.
+Si la r\'egion de l'erreur est encore trop large pour que vous la trouviez,
+enlevez simplement le jeu original de fausse fermantes et r\'ep\'etez le
+processus dans cette r\'egion.
+Si le probl\`eme est une accolade fermante manquante plut\^ot qu'une ouvrante en trop,
+vous serez capable de la d\'ecouvrir quand vous aurez trouv\'e sa compagne.
+
+Cette m\'ethode ne marche pas dans toutes les circonstances. En particulier,
+elle ne marche pas si votre document consiste en plusieurs groupes r\'eellement grands.
+Mais souvent vous pourrez trouver des variations de cette m\'ethode qui vous
+m\`eneront vers cette accolade insaisissable.
+
+Si tout le reste \'echoue, essayez de raccourcir votre entr\'ee en retirant
+la derni\`ere moiti\'e du fichier
+(apr\`es sauvegarde de la version originale d'abord~!) ou en ins\'erant une
+commande |\bye| au milieu.
+Si l'erreur persiste, vous saurez qu'elle est dans la premi\`ere moiti\'e~;
+Si \c ca tourne, vous saurez qu'elle est dans la seconde.
+En r\'ep\'etant ce processus vous trouverez \'eventuellement l'erreur.
+\eix^^{accolades//orphelines}
+
+
+\section Fixer des dimensions
+
+\null
+\bix^^{\<dimension>}
+La mani\`ere la plus simple de d\'efinir une dimension est de la sp\'ecifier directement, c'est-\`a-dire~:
+\csdisplay
+\hsize = 6in
+|
+Vous pouvez aussi sp\'ecifier une dimension en terme d'autres dimensions ou comme un m\'elange
+de diff\'erentes unit\'es, mais c'est du boulot. Il y a deux fa\c cons
+de construire une dimension comme une combinaison~:
+\olist\compact
+\li Vous pouvez ajouter une dimension \`a un param\`etre de dimension ou \`a un registre de
+dimension.
+Par exemple~:
+\csdisplay
+\hsize = 6in \advance\hsize by 3pc % 6in + 3pc
+|
+\li Vous pouvez indiquer une dimension comme un multiple d'un param\`etre
+ou un registre de dimension ou de ressort.
+Dans ce cas, \TeX\ convertit le ressort en une dimension en sacrifiant
+l'\'etirement et le r\'etr\'ecissement. Par exemple~:
+\csdisplay
+\parindent = .15\hsize
+\advance\vsize by -2\parskip
+|
+\endolist
+\eix^^{\<dimension>}
+
+
+\section Cr\'eer des polices composites
+
+\null
+\bix^^{polices//composites}
+Il est parfois utile de cr\'eer une ``police composite'',
+nomm\'ee par une s\'equence de contr\^ole $\cal F$, dans laquelle tous les caract\`eres
+sont pris d'une police $f_1$ sauf pour certains qui sont emprunt\'es d'une autre
+police $f_2$.
+Vous pourrez alors mettre du texte dans la police composite en utilisant $\cal F$ juste
+comme vous utilisez toute autre identifiant de police.
+
+Vous pouvez cr\'eer une telle police composite en d\'efinissant $\cal F$ comme une macro.
+Dans la d\'efinition de $\cal F$, vous s\'electionnez d'abord la police $f_1$ et ensuite
+d\'efinissez des s\'equences de contr\^ole qui produisent les caract\`eres emprunt\'es,
+mis dans $f_2$.
+Par exemple, supposons que vous voulez cr\'eer une police composite |\britrm|
+qui a tous les caract\`eres de |cmr10|
+sauf pour le signe dollar, pour lequel vous voulez emprunter
+le symbole de la livre sterling de la police |cmti10|.
+Le symbole de la livre sterling de |cmti10|
+apparait \`a la m\^eme position de police que le signe dollar dans |cmr10|.
+Voici comment faire~:
+\csdisplay
+\def\britrm{%
+ \tenrm % \tenrm names the cmr10 font
+ \def\${{\tenit\char `\$}}% \tenit names the cmti10 font.
+}
+|
+Maintenant \`a chaque fois que vous lancerez la police appel\'ee |\britrm|,
+|\$| produira un symbole de livre sterling.
+
+Vous pouvez aussi avoir le m\^eme effet en changeant les codes de cat\'egorie
+des caract\`eres en question pour rendre ces caract\`eres actifs et ensuite
+procurer une d\'efinition pour le caract\`ere. Par exemple~:
+\csdisplay
+\catcode `* = \active
+\def*{{\tentt \char `\*}}
+|
+Dans ce cas l'ast\'erisque sera pris de la police |\tentt|.
+Si cous saisissez alors la ligne d'entr\'ee~:
+\csdisplay
+Debbie was the * of the show.
+|
+elle sera compos\'ee ainsi~:
+{\font\tentt=cmtt10%
+\catcode `* = \active
+\def*{{\tentt \char `\*}}%
+\display{Debbie was the * of the show.}}
+\noindent
+
+\eix^^{polices//composites}
+
+
+\section Reproduire du texte verbatim
+
+\null
+^^{texte verbatim}\xrdef{verbatim}
+Du texte verbatim est du texte qui est reproduit dans un document
+compos\'e exactement comme il appara\^\i t dans son entr\'ee.
+L'usage le plus commun du texte verbatim est dans la composition
+d'entr\'ee informatique,
+incluant les programmes pour ordinateurs et les entr\'ees de \TeX\ lui-m\^eme.
+^^{programmes informatiques, composer des}
+l'entr\'ee informatique n'est pas simple \`a reproduire pour deux raisons~:
+\olist\compact
+\li Certains caract\`eres (symboles de contr\^ole, caract\`eres d'\'echappement, accolades,
+etc.) ont
+une signification sp\'eciale en \TeX.
+\li Les fins de ligne et les espaces multiples sont traduits en espaces simples.
+\endolist
+\noindent
+Dans le but de produire du texte verbatim, vous devez effacer les significations sp\'eciales
+et d\'ebrancher la traduction. C'est beaucoup mieux fait par des macros.
+
+Pour effacer les signification sp\'eciales, vous devez changer les codes de cat\'egorie
+des caract\`eres qui ont des significations sp\'eciales.
+^^{codes de cat\'egorie//pour texte verbatim}
+La macro suivante illustre comment vous devez le faire~:
+\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
+}
+|
+Mais attention~! Une fois que vous avez chang\'e les codes de cat\'egorie de ce fa\c con, vous perdez
+la facult\'e d'utiliser des s\'equences de contr\^ole puisqu'il n'y a plus de caract\`ere
+d'\'echappement. Vous avez besoin d'un moyen de revenir dans le mode normal
+d'op\'eration. Nous expliquerons comment faire cela dans un moment, apr\`es avoir consid\'er\'e
+l'autre probl\`eme~: d\'ebrancher la traduction des espaces et des fins de ligne.
+
+\PlainTeX\ a deux commandes qui ensemble r\'esolvent en partie le probl\`eme~:
+^|\obeyspaces| \ctsref{\obeyspaces} et ^|\obeylines| \ctsref{\obeylines}.
+Les deux choses qu'elles ne font pas sont de pr\'eserver les espaces au d\'ebut
+d'une ligne
+et de pr\'eserver les lignes blanches.
+Pour cela vous avez besoin de mesures plus fortes---qui sont apport\'ees par
+la macro ^|\obeywhitespace| que nous sommes sur le point de d\'efinir.
+
+\TeX\ normalement insiste pour collecter des lignes par paragraphes.
+Un moyen de le convaincre de prendre litt\'eralement les bords des lignes
+est de transformer les lignes individuelles en paragraphes.\footnote{%
+Un autre moyen est de transformer le caract\`ere de fin de ligne en une commande
+|\break| et d'ajouter un ressort infini \`a la fin de chaque ligne.
+^^|\break//fin de ligne sur|
+}
+Vous pouvez faire cela en red\'efinissant le caract\`ere de fin de ligne pour produire
+la s\'equence de contr\^ole |\par|. Les trois d\'efinitions de macro suivantes
+montrent comment~:
+
+^^{espace blanc, pr\'eserver de l'}
+\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}
+
+|
+Un point subtil de la d\'efinition de |\obeywhitespace| est que
+|^^M| doit \^etre rendu actif \`a la fois
+quand |\obeywhitespace| est \emph{d\'efinie} et quand
+elle est \emph{utilis\'ee}.
+
+Pour \^etre capable de revenir \`a des op\'erations normales apr\`es du texte verbatim,
+vous devez choisir un caract\`ere qui
+appara\^\i t rarement voire pas du tout dans le texte verbatim. Ce caract\`ere
+sert comme caract\`ere d'\'echappement temporaire.
+La barre verticale (|!||) est parfois un bon choix.
+Avec ce choix, les macros~:
+\csdisplay
+\def\verbatim{\par\begingroup\deactivate\obeywhitespace
+ \catcode `\!| = 0 % Make !| the new escape character.
+}
+
+\def\endverbatim{\endgroup\endpar}
+
+\def\!|{!|}
+|
+fera l'affaire. Dans le texte verbatim, vous pouvez utiliser une double
+barre verticale (|!|!||) pour en faire une, et vous terminez le texte verbatim
+avec |!|endverbatim|.
+
+Il y a plusieurs variations de cette technique~:
+\ulist
+\li Si un langage informatique a des mots-cl\'es, vous pouvez convertir
+chaque mot-cl\'e en une commande qui compose
+ce mot-cl\'e en caract\`ere gras. Chaque mot-cl\'e de l'entr\'ee doit \^etre alors
+pr\'ec\'ed\'e par le caract\`ere d'\'echappement.
+\li Si vous avez un caract\`ere (encore, supposons qu'il s'agisse de la barre verticale)
+qui n'appara\^\i t
+\emph{jamais} dans le texte verbatim, vous pouvez le rendre actif et
+lui faire finir le texte verbatim. Les d\'efinitions de macro ressemblent alors
+\`a cela~:
+\csdisplay
+{\catcode `\!| = \active
+\gdef\verbatim{%
+ \par\begingroup\deactivate\obeywhitespace
+ \catcode `!| = \active
+ \def !|{\endgroup\par}%
+}}
+|
+\endulist
+
+Les id\'ees pr\'esent\'ees ici ne procurent qu'une simple approche de la composition
+de programmes informatiques.
+Le reproduction verbatim n'est souvent pas aussi r\'ev\'elatrice ou lisible
+qu'une version qui utilise des conventions typographiques qui refl\`etent la
+syntaxe et m\^eme les s\'emantiques du programme.
+Si vous d\'esirez poursuivre ce sujet plus loin, nous vous recommandons le livre suivant~:
+
+\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 Utiliser des macros externes
+
+\null
+^^{s\'equence de contr\^ole interdite}^^{condition incompl\`ete}
+Si \TeX\ se plaint d'une ``s\'equence de contr\^ole interdite [forbidden control
+sequence]'', vous avez probablement utilis\'e une macro externe dans un contexte
+non-externe \seeconcept{outer}.
+^^{macros//outer}
+Une macro externe est une macro dont la d\'efinition est
+pr\'ec\'ed\'ee par ^|\outer|.
+Une macro externe ne peut pas \^etre utilis\'ee dans un argument de macro, dans une
+d\'efinition de macro,
+dans le pr\'eambule d'un alignement ou dans un texte conditionnel,
+c'est-\`a-dire, un texte qui ne sera d\'evelopp\'e que quand un test conditionnel
+aura un r\'esultat particulier.
+^^{alignements//s\'equence de contr\^ole outer dans des}
+Certaines macros ont \'et\'e d\'efinies comme externes parce qu'elles n'ont pas de
+raison d'\^etre utilis\'ees dans ces contextes et qu'un tel usage est probablement une erreur.
+Le seul moyen de contourner ce probl\`eme est de red\'efinir la
+macro ou de d\'eplacer son utilisation dans un contexte acceptable.
+
+Utiliser une macro externe dans un contexte impropre peut aussi provoquer
+que \TeX\ se plaigne d'un ``runaway situation'' ou d'un ``incomplete conditional''.
+Le probl\`eme peut \^etre difficile \`a diagnostiquer parce que le message d'erreur
+ne donne aucun indice ni ce qui se passe. Si vous obtenez un tel message
+d'erreur, recherchez autour un appel \`a une macro externe.
+Vous ne pouvez pas toujours savoir si une macro particuli\`ere est externe, mais
+la commande `^|\show||\a|' \ctsref{\show}
+vous montrera la d\'efinition de |\a| et vous dira aussi
+si |\a| est externe.
+
+
+\section Changer des codes de cat\'egorie
+
+\null
+\bix^^{codes de cat\'egorie//changement}
+Il est parfois pratique de faire des changements locaux au code de cat\'egorie
+d'un caract\`ere \`a une certaine partie de votre document. Par exemple, vous devez
+composer un programme informatique
+^^{programmes informatiques, composer des}
+ou quelque chose d'autre qui utilise normalement des caract\`eres actifs
+pour un usage sp\'ecial. Vous voudrez alors d\'esactiver ces caract\`eres pour que
+\TeX\ les traite comme tout autre caract\`ere.
+
+Si vous faites un tel changement local au code de cat\'egorie d'un caract\`ere,
+vous serez parfois constern\'e de trouver que \TeX\ semble ne pr\^eter aucune
+attention quelconque a votre changement.
+Deux aspects du comportement de \TeX\ sont vraisemblablement en cause~:
+\olist
+\li \TeX\ d\'etermine le code de cat\'egorie d'un caract\`ere entr\'ee
+^^{caract\`eres entr\'ees}
+et l'attache au caract\`ere quand il le lit.
+Supposons que vous lisiez un tilde (|~|) et qu'ensuite vous
+changiez le code de cat\'egorie des tildes,
+mais fassiez le changement
+avant que l'estomac de \TeX\ ait r\'eellement ex\'ecut\'e de tilde \emph{particulier\/}
+\seeconcept{\anatomy}.
+\TeX\ r\'epondra encore que ce
+tilde utilise le code de cat\'egorie comme il \'etait avant le changement.
+Cette difficult\'e survient typiquement
+quand le tilde fait partie d'un argument d'une macro
+et que la macro elle-m\^eme change le code de cat\'egorie du tilde.
+
+\li Quand \TeX\ assortit un appel d'une macro \`a la d\'efinition de cette macro,
+il n'assortit pas seulement les caract\`eres du mod\`ele de param\`etre mais aussi
+leurs codes de cat\'egorie.
+^^{macros//arguments de}
+^^{macros//param\`etres de}
+Si le code de cat\'egorie d'un mod\`ele caract\`ere n'est pas \'egal au
+code de cat\'egorie du m\^eme caract\`ere dans l'appel, \TeX\ ne consid\`erera pas
+les caract\`eres comme concordants.
+Cet effet peut produire de myst\'erieux r\'esultats parce que il
+\emph{fait} comme si le mod\`ele concorde.
+Par exemple, si vous avez d\'efini une macro~:
+\csdisplay
+\def\eurodate#1/#2/#3{#2.#1.#3}
+|
+alors le caract\`ere slash devra avoir le m\^eme code de cat\'egorie quand vous
+appelez |\eurodate| que quand vous avez d\'efini |\eurodate|.
+\endolist
+Si le probl\`eme surgit parce que le caract\`ere g\^enant est un argument d'une
+macro, alors
+le rem\`ede usuel est de red\'efinir la macro comme une paire
+de macros |\mstart| et |\mfinish|, o\`u
+|\mstart| doit \^etre appel\'ee avant le texte d'argument
+et |\mfinish| doit \^etre appel\'e apr\`es.
+|\mstart| alors initialise les codes de cat\'egorie et |\mfinish|
+d\'efait le changement, peut-\^etre simplement en finissant un groupe.
+\eix^^{codes de cat\'egorie//changement}
+
+
+\section Faire des fichiers de macro plus lisibles
+
+\null
+\bix^^{macros//rendre lisible des}
+Vous pouvez faire un fichier de macros plus lisible en
+mettant les codes de cat\'egories de l'espace \`a $9$ (caract\`ere ignor\'e)
+et ^|\endlinechar| \ctsref{\endlinechar} \`a $-1$ au d\'ebut du fichier.
+Vous pourrez alors utiliser des espaces et des fins de lignes librement dans les
+d\'efinitions de macro sans obtenir d'espaces ind\'esirables quand vous appelez
+les macros.
+Les caract\`eres ignor\'es ne g\'en\`ereront pas d'espaces, mais agiront encore
+comme terminateurs pour des s\'equences de contr\^ole.
+Si vous voulez r\'eellement un espace, vous pouvez encore l'obtenir avec la
+commande ^|\space| \ctsref\space.
+
+Bien s\^ur vous devrez restaurer les codes de cat\'egories de l'espace et de la fin de ligne
+\`a leur valeur normale ($10$ et $5$, respectivement) \`a la fin du fichier.
+Vous pouvez faire cela soit en englobant tout le fichier dans un groupe soit
+en restaurant les valeurs explicitement. Si vous choisissez d'englober le
+fichier dans un groupe, vous devrez alors aussi mettre ^|\globaldefs| \`a $1$
+pour que toutes les d\'efinitions de macro soient globales et donc visibles
+en dehors du groupe.
+
+Un exemple miniature d'un fichier de macro de cette forme est~:
+
+\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
+Sans les changement de code de cat\'egorie,
+ces macros auraient \'et\'e \'ecrites de mani\`ere beaucoup plus compacte, utilisant moins
+d'espaces et plus de `|%|' \`a la fin des lignes.
+\eix^^{macros//rendre lisible des}
+
+\endchapter\byebye
+
diff --git a/info/impatient/fr/fusebook.tex b/info/impatient/fr/fusebook.tex
new file mode 100644
index 0000000000..2e933cf225
--- /dev/null
+++ b/info/impatient/fr/fusebook.tex
@@ -0,0 +1,227 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter{Utiliser ce livre}
+
+\chapterdef{usebook}
+
+Ce livre est un guide et un manuel de bricolage pour \TeX. Dans cette
+section nous vous pr\'esentons comment utiliser ce livre avec le maximum de
+b\'en\'efice.
+
+Nous vous recommandons de lire ou survoler les sections
+\chapternum{usebook} \`a \chapternum{examples}, qui vous indiquent ce que
+vous devez savoir afin de pouvoir commencer \`a utiliser \TeX. Si vous avez
+d\'ej\`a de l'exp\'erience dans l'utilisation de \TeX, il vous sera
+toujours utile de conna\^\i tre quels types d'information sont dans ces
+sections du livre. Les sections~\chapternum{concepts} -- \chapternum{tips},
+qui occupent la majeure partie du reste du livre, sont con\c cues pour
+\^etre atteintes directement. N\'eanmoins, si vous \^etes le genre de
+personne qui aime lire les manuels de r\'ef\'erence, vous constaterez qu'il
+\emph{est} possible de proc\'eder s\'equentiellement si vous \^etes pr\^et
+\`a prendre beaucoup de d\'etours au d\'ebut.
+
+Dans la \chapterref{usingtex}, ``Utiliser \TeX'', nous expliquons comment
+produire un document \TeX\ \`a partir d'un fichier source \TeX{}. Nous
+d\'ecrivons \'egalement les conventions pour pr\'eparer ce fichier source,
+expliquons un peu la fa\c con dont \TeX{} fonctionne et vous pr\'esentons
+des ressources suppl\'ementaires disponibles. La lecture de cette section
+vous aidera \`a comprendre les exemples dans la section suivante.
+
+La \chapterref{examples}, ``exemples'', contient une suite d'exemples qui
+illustrent l'utilisation de \TeX. Chaque exemple se compose d'une page de
+sortie ainsi que de la source que nous avons utilis\'ee pour la cr\'eer. Ces
+exemples vous orienteront et vous aideront \`a localiser le mat\'eriel le
+plus d\'etaill\'e dont vous aurez besoin pour faire ce que vous voulez. En
+voyant quelles commandes sont utilis\'ees dans la source, vous saurez o\`u
+rechercher des informations plus d\'etaill\'ees sur la fa\c con de
+r\'ealiser les effets montr\'es dans la sortie. Les exemples peuvent
+\'egalement servir de mod\`eles \`a des docu\-ments simples, bien que nous
+devions vous avertir que parce que nous avons essay\'e de compiler une
+vari\'et\'e de commandes \TeX\ dans un nombre de pages restreint, les
+exemples ne sont pas n\'ecessairement de bonnes ou compl\`etes
+illustrations de la cr\'eation d'imprim\'es.
+
+Quand vous lisez l'explication d'une commande, vous pouvez rencontrer
+quelques termes techniques peu familiers. Dans la \chapterref{concepts},
+``concepts'', nous d\'efinissons et expliquons ces termes. Nous discutons
+\'egalement d'autres mati\`eres dont il n'est pas fait mention ailleurs
+dans le livre. L'int\'erieur de la couverture du livre contient une
+liste de tous les concepts et les pages o\`u elles sont d\'ecrites. Nous
+vous proposons de tirer une copie de cette liste et de la maintenir pr\`es
+de vous pour que vous puissiez identifier et rechercher imm\'ediatement un
+concept peu familier.
+
+Les commandes de \TeX\ sont son vocabulaire primaire et la plus grande
+partie de ce livre est consacr\'ee \`a les expliquer. Dans les
+sections~\chapternum{paras} \`a~\chapternum{general} nous d\'ecrivons les
+commandes. Vous trouverez des informations g\'en\'erales au sujet des
+descriptions de commandes sur la \xrefpg{cmddesc}. Les descriptions de
+commande sont arrang\'ees fonctionnellement, plut\^ot comme un thesaurus,
+ainsi si vous savez ce que vous voulez faire mais ne savez pas quelle
+commande le fait pour vous, vous pouvez utiliser la table des mati\`eres
+pour vous guider vers le bon groupe de commandes. Les commandes que nous
+pensons \`a la fois particuli\`erement utiles et faciles \`a comprendre
+sont indiqu\'ees avec un doigt point\'e~(\hand).
+
+la \chapterref{capsule}, ``sommaire des commandes'', est un index
+sp\'ecialis\'e qui compl\`ete les descriptions plus compl\`etes des
+sections~\chapternum{paras} -- \chapternum{general}. Il \'enum\`ere les
+commandes de \TeX\ alphab\'etiquement, avec une br\`eve explication de
+chaque commande et une r\'ef\'erence de la page o\`u il est d\'ecrit plus
+compl\`etement. Le sommaire vous aidera quand vous ne voulez qu'un rappel
+rapide de la fonction d'une commande.
+
+\TeX\ est un programme complexe qui fonctionne parfois selon sa propre
+volont\'e de mani\`ere myst\'erieuse. Dans la \chapterref{tips}, `` trucs
+et astuces'', nous fournissons des conseils pour r\'esoudre une vari\'et\'e
+de probl\`emes sp\'ecifiques que vous pouvez rencontrer de temps en temps.
+Et si vous \^etes d\'erout\'es par les messages d'erreur de \TeX, vous
+trouverez de l'aide dans la \chapterref{errors}, ``comprendre les messages
+d'erreur''.
+
+Les \'etiquettes grises sur le c\^ot\'e du livre vous aideront \`a
+rep\'erer les parties du livre rapidement. Elles divisent le livre dans les
+parties principales suivantes~:
+\olist
+\li explications g\'en\'erales et exemples
+\li concepts
+\li descriptions de commandes (cinq \'etiquettes plus courtes)
+\li conseils, messages d'erreur et macros d'|eplain.tex|
+\li sommaire des commandes
+\li index
+\endolist
+
+Dans beaucoup d'endroits nous avons fourni des r\'ef\'erences de page de
+^{\texbook} (voir la \xrefpg{ressources} pour une citation). Ces
+r\'ef\'erences s'appliquent \`a la dix-septi\`eme \'edition de \texbook.
+Pour d'autres \'editions, quelques r\'ef\'erences peuvent \^etre
+d\'epass\'ees par une ou deux pages.
+
+\section Conventions syntaxiques
+
+Dans n'importe quel livre concernant la pr\'eparation de fichier source pour un
+ordinateur, il est n\'ecessaire d'indiquer clairement les caract\`eres litt\'eraux qui
+doivent \^etre saisis et distinguer ces caract\`eres du texte explicatif. Nous
+employons la police Computer Moderne de machine \`a \'ecrire pour les {\tt sources
+litt\'erales comme ceci} ainsi que pour les noms des commandes \TeX{}. Quand il y a
+possibilit\'e de confusion, nous enfermons le source \TeX\ entre des guillemets
+simples, `{\tt comme ceci}'. Cependant, nous utilisons de temps en temps des
+parenth\`eses quand nous indiquons des caract\`eres simples tels que (|`|) (vous
+pouvez voir pourquoi).
+
+Pour pr\'eserver vos yeux nous ne mettons normalement les espaces que l\`a o\`u vous
+devez mettre les espaces. Cependant, \`a quelques endroits o\`u nous devons
+souligner un espace, nous employons le caract\`ere `\visiblespace'
+{\catcode `\ =\other\pix^^| |}%
+pour l'indiquer. Assez naturellement, ce caract\`ere s'appelle un \emph{espace
+visible}.
+\pix^^{espace//visible}
+
+\section Descriptions des commandes
+
+\xrdef{cmddesc}
+Les sections~\chapternum{paras} -- \chapternum{general} contiennent une
+description de ce que fait presque chaque commande \TeX. ^^{commandes} Les
+commandes primitives ^^{primitive//commande} et celles de ^{\plainTeX} sont
+couvertes. Les commandes primitives sont celles construites dans le
+programme \TeX, alors que les commandes de \plainTeX{} sont d\'efinies dans
+un fichier standard de d\'efinitions auxiliaires (voir \xref\plainTeX). Les
+seules commandes que nous avons omises sont celles qui ne sont employ\'ees
+que localement dans la d\'efinition de \plainTeX\ (\knuth{annexe~B}{}). Les
+commandes sont organis\'ees comme suit~:
+\ulist\compact
+\li ``Commandes pour composer des paragraphes'', \chapterref{paras},
+traite des caract\`eres, des mots, des lignes et des paragraphes entiers.
+\li ``Commandes pour composer des pages'', \chapterref{pages},
+traite des pages, de leurs composants et de la routine de rendu.
+\li ``Commandes pour les modes horizontaux et verticaux'',
+\chapterref{hvmodes}, comprend les formes correspondantes ou identiques des
+modes hori\-zontaux (les paragraphes et les hbox) et des modes verticaux
+(les pages et les vbox). Ces commandes fournissent les bo\^\i tes, les
+espaces, les r\`egles, les leaders et les alignements.
+\li ``Commandes pour composer les formules de math\'ematiques'',
+\chapterref{math}, donne les possibilit\'es de construction de formules
+math\'ema\-tique.
+\li ``Commande pour les op\'erations g\'en\'erales'',
+\chapterref{general}, fournit les dispositifs de programmation de \TeX\ et
+tout ce qui n'entre dans aucune des autres sections.
+\endulist
+Vous devez voir ces cat\'egories comme \'etant suggestives plut\^ot que
+rigoureuses, parce que les commandes n'entrent pas vraiment de mani\`ere
+ordonn\'ee dans ces (ou tout autre) cat\'egories.
+
+Dans chaque section, les descriptions des commandes sont organis\'ees par
+fonction. Quand plusieurs commandes sont \'etroitement li\'ees, elles sont
+d\'ecrites en tant que groupe~; autrement chaque commande a sa propre
+explication. La description de chaque commande inclut un ou plusieurs
+exemples et le rendu produit par chaque exemple quand ils sont appropri\'es
+(pour quelques commandes ils ne sont pas). Quand vous regardez une sous-section
+ contenant des commandes fonctionnellement li\'ees, regardez en fin
+de sous-section l'article ``voir aussi'' pour vous assurer qu'il ne renvoit
+pas \`a des commandes li\'ees qui seraient d\'ecrites ailleurs.
+
+Quelques commandes sont \'etroitement li\'ees \`a certains concepts. Par
+exemple, les commandes |\halign| et |\valign| sont li\'ees \`a
+``alignement'', la commande |\def| est li\'ee \`a ``macro'' et les commandes
+|\hbox| et |\vbox| sont li\'ees \`a ``bo\^\i te''. Dans ce cas nous avons
+habituellement donn\'e un squelette de description des commandes elles-%
+m\^emes et avons expliqu\'e les id\'ees fondamentales dans le concept.
+
+Les exemples associ\'es aux commandes ont \'et\'e compos\'es avec une
+indentation de paragraphe ^|\parindent|, fix\'e \`a z\'ero pour que les
+paragraphes soient normalement non indent\'es. Cette convention facilite la
+lecture des exemples. Dans les exemples o\`u l'indentation de paragraphe
+est essentielle, nous l'avons explicitement plac\'ee \`a une valeur
+diff\'erente de z\'ero.
+
+Le doigt point\'e devant une commande ou un groupe de commandes indique que
+nous jugeons cette commande ou groupe de commandes particuli\`erement
+utiles et faciles \`a comprendre.
+
+Beaucoup de commandes attendent des ^{arguments} d'un type ou d'un autre
+(voir \xref{arg1}). Les arguments d'une commande fournissent \`a \TeX\ une
+information compl\'ementaire dont il a besoin afin d'ex\'ecuter la
+commande. Chaque argument est indiqu\'e par un terme entre chevrons
+imprim\'e en italique qui indique de quel genre d'argument il s'agit~:
+
+\display{%
+\halign{\<#>\quad&#\hfil\cr
+argument&un seul token ou du texte entre accolades\cr
+code de caract\`ere&un entier entre $0$ et $255$\cr
+dimension&une dimension, c'est-\`a-dire, une longueur\cr
+ressort&un ressort (avec \'etirement et r\'etr\'ecissement)\cr
+nombre&un entier \'eventuellement sign\'e (nombre entier)\cr
+registre&un num\'ero de registre entre $0$ et $255$\cr
+}}
+^^{\<dimension>}
+^^{\<argument>}
+^^{\<code de caract\`ere>}
+^^{\<ressort>}
+^^{\<nombre>}
+^^{\<registre>}
+
+\noindent
+Tous ces termes sont expliqu\'es plus en d\'etail dans la
+\chapterref{concepts}. De plus, nous utilisons parfois les termes comme
+\<liste de token> qui sont explicites ou expliqu\'es dans la description de
+la commande. Quelques commandes ont des formats sp\'eciaux qui exigent des
+accolades ou des mots particuliers. Celles-ci sont plac\'ees dans la m\^eme
+police "grasse" que celle utilis\'ee pour les titres de commande.
+
+Quelques commandes sont des param\`etres (\xref{introparms}) ou des
+entr\'ees de table.
+^^{param\`etres//comme commandes}
+Ceci est indiqu\'e dans le listing de la commande. Vous pouvez employer un
+param\`etre comme argument ou lui assigner une valeur. De m\^eme pour des
+entr\'ees de table. Nous utilisons le terme ``param\`etre'' pour faire
+r\'ef\'erence aux entit\'es telles que |\pageno| qui sont en fait des
+registres mais qui se comportent comme des param\`etres.
+^^{registres//param\`etres comme}
+
+
+\endchapter
+\byebye
diff --git a/info/impatient/fr/fusermacs.tex b/info/impatient/fr/fusermacs.tex
new file mode 100644
index 0000000000..fecc074ac7
--- /dev/null
+++ b/info/impatient/fr/fusermacs.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.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter{Un abr\'eg\'e de \linebreak macros utiles}
+
+\chapterdef{eplain}
+
+Cette section d\'ecrit |eplain.tex|, une collection de macros et autres
+d\'efi\-nitions qui prolongent le plain \TeX. \bix^^|eplain.tex| Les
+noms des diverses macros expliquent leurs buts, mais habituellement
+n'expliquent pas comment elles fonctionnent, ou ne fournissent pas de
+d\'etails explicites sur la fa\c con dont les employer. Cette information
+est contenue dans les fichiers source de |eplain.tex| et dans la
+documentation qui l'accompagne. Voir \headcit{Ressources}{ressources}
+pour la fa\c con d'obtenir |eplain.tex|.
+
+\section{Pr\'eliminaires}
+
+Nous commen\c cons par quelques macros pour des codes de cat\'egorie qui
+changent et des d\'efinitions pratiques pour deux macros utilis\'ees
+fr\'equem\-ment.
+^^{codes de cat\'egorie//d\'efinitions pratiques pour}
+
+\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.
+|
+
+Pour d\'efinir `|^^M|' comme caract\`ere actif, vous devez englober la
+d\'efini\-tion dans un groupe et appeler quelques moyens
+suppl\'ementaires.
+\ttidxref{^^M}
+La macro \pix^|\letreturn| vous permet de d\'efinir `|^^M|' sans ce code
+suppl\'emen\-taire que vous pouvez voir dans la d\'efinition ci-dessous.
+
+\csdisplay
+{\makeactive\^^M \long\gdef\letreturn#1{\let^^M = #1}}%
+|
+
+Ces macros consomment un, deux, ou trois arguments.
+
+\pix^^|\gobble|
+\pix^^|\gobbletwo|
+\pix^^|\gobblethree|
+\csdisplay
+\def\gobble#1{}\def\gobbletwo#1#2{}%
+\def\gobblethree#1#2#3{}%
+|
+
+Maintenant nous \'etablissons quelques conventions pour lire le reste du
+fichier. Dans le fichier nous autorisons des s\'equences de contr\^ole
+``priv\'es'' qui contiennent `|@|' dans leurs noms. Ces s\'equences de
+contr\^ole ne sont pas accessibles de l'ext\'erieur de ce fichier (\`a moins
+que vous rechangez le code de cat\'egorie du `|@|').
+\xrdef{eplainconv}
+
+\csdisplay
+\catcode`@ = \letter % Allow control sequences with @.
+\let\@plainwlog = \wlog % Don't log register allocations.
+\let\wlog = \gobble
+\newlinechar = `^^J
+|
+
+Les deux macros suivantes fournissent une formulation pratique de
+r\'esultat de diagnostic. \pix^|\loggingall| d\'eclenche tout le
+tra\c cage, mais ne provoque le r\'esultat de la trace que dans le \logfile
+et pas sur votre terminal. \pix^|\tracingboxes| montre compl\`etement
+les bo\^\i tes quand elles sont trac\'ees. (\TeX\ ne montre normalement que
+trois niveaux de bo\^\i te et cinq items dans chaque bo\^\i te.)
+
+
+\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}%
+|
+
+
+L'\'epaisseur par d\'efaut des traits est de $0.4$\pt. Vous pouvez produire des traits de n'importe quelle \'epaisseur par
+d\'efaut que vous voulez en red\'efinissant |\vruledefaultwidth|, |\hruledefaultheight| et |\hruledefaultdepth| et
+en employant
+\pix^^|\ehrule|
+|\eh!-rule| et
+\pix^|\evrule| au lieu de |\hrule| et |\vrule|. (le `e' repr\'esente
+``eplain''.)
+^^{filets//\'epaisseur de}
+Si vous donnez une dimension explicite (par exemple, |\ehrule height 16pt|), \TeX \ l'utilisera.
+
+\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}%
+|
+
+La convention |\%| pour \'ecrire un caract\`ere `|%|' ne marche pas quand vous
+voulez inclure ce caract\`ere dans la token liste de |\write|.
+^^|\write//\'ecrire \b\tt\%\e\ avec|
+^^|%//en sortie|
+Vous pouvez utiliser ^|\percentchar| pour r\'ealiser cela.
+Nous red\'efinissons \'egalement ^|^^L| comme \'etant sans effet pour que vous puissiez l'utiliser
+dans une d\'efinition de macro ou un argument.
+
+\csdisplay
+{\catcode`\% = \other \gdef\percentchar{%}}%
+ \def^^L{\par
+}%
+|
+
+\pix^|\tokstostring| convertit son argument en liste de
+^{tokens de caract\`ere}. Il n'emploie que des d\'eveloppements qui sont manipul\'ees
+dans l'\oe sophage de \TeX. Cette propri\'et\'e est lui n\'ecessaire
+pour travailler avec |\edef|. Elle est utilis\'ee par les macros
+de r\'ef\'erences crois\'ees (\xref{xrefs}).
+
+Pour fractionner l'argument sur l'espace, nous devons
+utiliser deux macros subsidiaires. |\@ttsA| trouve les espaces et
+|\@ttsB| manipule une s\'equence de token sans aucun espace. Chaque
+espace est remplac\'e par le d\'eveloppement de \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| teste si son argument est vide.
+
+\csdisplay
+\def\ifempty#1{\@ifempty #1\@emptymarkA\@emptymarkB}%
+\def\@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
+\def\@emptymarkA{\@emptymarkA}%
+|
+
+La macro ^|\for| impl\'emente une version \TeX\ du ``^{for loop}'' des
+langages de programmation traditionnels. Ces macros viennent directement de
+\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| est utile pour reproduire des coupures de
+ligne, des interlignes et des espaces dans votre source. Il combine
+les effets de |\obey!-lines| et |\obey!-spaces|, ^^|\obeyspaces|
+^^|\obeylines| et met \'egalement des espaces au d\'ebut d'une ligne
+devant \^etre imprim\'ee. Les caract\`eres ``tabulation'' ne sont pas affect\'es~; ils
+produisent toujours un ressort normal.
+
+\xrdef{ewhitesp}
+^^{caract\`eres espace}
+^^|\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| est une bonne fa\c con d'afficher des fractions dans du
+texte quand vous ne voulez pas utiliser |\over| et que mettre simplement ``1/2''
+ne semble pas beau. Cette macro est la r\'eponse \`a
+l'exercise~11.6 de \texbook.^^{fractions//en forme de slash}
+
+\csdisplay
+\def\frac#1/#2{\leavevmode
+ \kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}%
+ \kern-.1em $/$%
+ \kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}}%
+|
+
+Les macros suivantes produisent des logos qui sont utiles dans le monde \TeX.
+Le logo \AMSTeX\ vient de la \knuth{page~420}{483}. Le logo \LaTeX\
+est l\'eg\`erement modifi\'e par rapport \`a celui de |latex.tex| (nous utilisons une
+police diff\'erente pour le `A')~; de m\^eme, le logo \BibTeX\
+emploit |\sevenrm| au lieu d'une v\'eritable police de capitale-et-
+petite-capitale. Le fichier source |.mf| pour le logo \MF\ est
+donn\'e dans le manuel \MF\~:
+
+\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}}%
+|
+
+Les deux macros suivantes produisent des bo\^\i tes. \pix^|\blackbox|
+produit une ``bulle carr\'ee'', utilis\'e dans les macros de liste
+(\xref{listmacs}). \pix^|\makeblankbox| (de \knuth{page~311}{363--364})
+produit un rectangle non rempli, avec l'\'epaisseur des traits de
+bordure donn\'ee par les 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| produit la forme en toute lettres d'un nombre. Si
+le nombre est plus grands que dix, la macro ne reproduit que les
+chiffres de son 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| d\'etermine si un fichier |\jobname.#1| est
+non\-vide et place |\if!-fileexists| convenablement.
+^^{fichiers//tester l'existence de}
+Le nom de fichier dans l'argument
+n'a pas besoin de finir dans un token d'espace puisque la macro
+fournit la marque d'espace.
+
+\csdisplay
+\newif\iffileexists
+\def\testfileexistence#1{\begingroup
+ \immediate\openin0 = \jobname.#1\space
+ \ifeof 0\global\fileexistsfalse
+ \else \global\fileexiststrue\fi
+ \immediate\closein0
+ \endgroup}%
+|
+
+
+\section Affichages
+
+Par d\'efaut, \TeX\ centre le mat\'eriel affich\'e (le mat\'eriel
+entre |$$|). ^^{affichages, formatage} \pix^|\leftdisplays| provoque
+des affichages justifi\'es \`a gauche par d\'efaut. Vous pouvez
+retourner aux affichages centr\'es avec \pix^|\centereddisplays|.
+
+Les macros ici sont plus g\'en\'eralistes qu'elles doivent l'\^etre pour ne faire
+que des affichages justifi\'es \`a gauche. Pour chaque affichage,
+\pix^|\ifeqno| sera vrai si un |\eqno| appara\^\i t dans l'affichage.
+\pix^|\ifleqno| sera vrai si un |\leqno| appara\^\i t. Si l'une ou l'autre
+sorte d'\'equation num\'erot\'ee appara\^\i t, \pix^|\eqn| produit le texte
+du num\'ero de l'\'equation. \pix^|\eq| produit toujours le texte de
+l'\'equation lui-m\^eme.
+
+Ces macros sont bas\'ees sur le code de la \knuth{page~376}{434}.
+
+\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}%
+|
+
+Vous pouvez composer des affichages diff\'eremment en d\'efinissant votre
+propre macro analogue \`a \pix^|\leftdisplays|. La d\'efinition de macro doit
+placer l'appel \`a |\display!-setup| dans |\every!-display| ^^|\everydisplay|
+afin de s'assurer que ^^|\displaysetup| |\dis!-play!-setup| soit appel\'e au
+d\'ebut de chaque affichage. La d\'efinition de macro doit \'egalement inclure
+une d\'efinition de ^|\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| doit travailler dans la douleur pour s'assurer que
+|\dis!-play!-lines|, ^|\eqalignno| ^^|\displaylines| et ^|\leqalignno|
+fonctionnent toujours correctement. |\eq| est compos\'e en mode math\'ematique
+et |\halign| est ill\'egal dans ce mode. ^^|\halign//ill\'egal dans le mode
+math\'ematique| Nous utilisons ^|\vcenter| pour changer le contexte pour que
+|\halign| redevienne l\'egal. Nous enlevons \'egalement les commandes |\hfil| \`a
+gauche du patron pour obtenir la justification \`a droite. \`a part ces
+changements, les macros sont les m\^emes que dans |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 heure du jour
+
+Quand \TeX\ d\'emarre, il d\'etermine les valeurs des param\`etres ^|\time|,
+^|\day|, ^|\month| et ^|\year|.
+^^{heure du jour}^^{date}
+\pix^|\monthname|
+produit le nom du mois, abr\'eg\'e en trois lettres.
+\pix^|\timestring| produit l'heure courante, comme dans ``1:14\thinspace
+p.m.''. \pix^|\timestamp| produit le texte de la date compl\`ete, comme dans
+``23 avr 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 Listes
+
+\null
+\xrdef{listmacs}
+\bix^^{listes d'\'el\'ements}
+\bix^^{\enumerations}
+\pix^|\numberedlist| produit des listes num\'erot\'ees~; |\endnumberedlist| les
+termine.
+\pix^|\unorderedlist| est analogue.
+Pour l'une ou l'autre de ces derni\`eres, les items \`a l'int\'erieur des listes
+commencent par \pix^|\li| (``list item''). Vous pouvez mettre
+\pix^|\listcompact| au d\'ebut d'une liste si vous ne voulez aucun espace
+additionnel entre les \'el\'ements de cette liste. Des listes peuvent \^etre
+imbriqu\'ees arbitrairement.
+
+Vous pouvez contr\^oler plus g\'en\'eralement l'espacement entre les
+\'el\'e\-ments en assignant des valeurs aux registres \'enum\'er\'es
+ci-dessous. Si les \'el\'ements de vos listes tendent \`a \^etre
+longs, vous pourriez vouloir rendre |\interitemskip| diff\'erent de
+z\'ero. L'indentation gauche de chaque \'el\'ement de liste est
+donn\'ee par |\par!-indent| plus |\list!-left!-indent|~; l'indentation
+droite de chaque \'el\'ement de liste est donn\'ee par |\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}%
+|
+
+Les listes num\'erot\'ees et non num\'erot\'ees utilisent les macros qui suivent.
+Nous ne changeons pas |\parindent|, puisque beaucoup de macros existantes,
+comme par exemple, |\footnote|, en d\'ependent. Nous devons expliquer la
+possibilit\'e que les \'el\'ements fassent plus d'un paragraphe de long. Dans ce
+cas-ci, tous les paragraphes apr\`es le premier sont indent\'es. Nous
+utilisons |\leftskip| et |\rightskip| pour indenter les \'el\'ements d'une liste.
+L'indentation des affichages est expliqu\'ee par des changements de |\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
+Vous pouvez changer la mani\`ere dont les labels d'\'el\'ements sont compos\'ees en
+red\'efinissant la macro |\numbered!-marker|. \pix^^|\numberedmarker|
+
+\csdisplay
+\newcount\numberedlistdepth \newcount\itemnumber
+\newcount\itemletter
+\def\numberedmarker{%
+ \ifcase\numberedlistdepth
+ (impossible)%
+ \or \itemnumberout)%
+ \or \itemletterout)%
+ \else *%
+ \fi}%
+|
+
+\noindent Voici les d\'efinitions de |\numberedlist| et de
+|\unorderedlist|.
+ces d\'efini\-tions ont la m\^eme 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^^{listes d'\'el\'ements}
+\eix^^{\enumerations}
+
+
+\section Listing verbatim
+
+La macro \pix^|\listing| produit le listing verbatim d'un fichier sp\'ecifi\'e
+en police |\tt|.
+Elle est bas\'ee sur le code de la \knuth{page~380}{439}.
+Les tabulations produisent un montant d'espace fixe et les sauts de page
+produisent une coupure de page. D'autres caract\`eres de contr\^ole produisent
+ce qui s'av\`ere \^etre \`a cette position dans la police, qui n'est g\'en\'eralement
+pas tr\`es utile. En red\'efinissant |\setup!-listing!-hook|,
+\pix^^|\setuplistinghook| vous pouvez prendre les mesures compl\'ementaires
+qui sont appropri\'ees pour vos polices et\slash ou environnements particuliers
+avant que le fichier ne soit lu.
+
+\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 Table des mati\`eres
+
+\null ^^{table des mati\`eres}
+La macro \pix^|\writetocentry| \'ecrit une macro dans le fichier
+|\jobname.toc|. Le premier argument de |\writetocentry|, par exemple,
+``chapitre'', est utilis\'e pour composer le nom de la macro appel\'ee. Le
+deuxi\`eme argument est le texte qui doit appara\^\i tre dans la table des
+mati\`eres. |\writetocentry| appose le num\'ero de la page \`a l'appel de la macro.
+Par exemple~:
+\csdisplay
+\writetocentry{chapter}{Introduction}
+|
+\noindent
+produira la ligne~:
+\csdisplay
+\tocchapterentry{Introduction}{2}
+|
+\noindent dans le fichier |.toc|, ce qui indique que `Introduction' d\'ebute
+en page 2.
+
+Vous pouvez utiliser |\writenumberedtocentry| pour apporter un troisi\`eme
+param\`etre, tel qu'un num\'ero de chapitre. Par exemple~:
+\csdisplay
+\writenumberedtocentry{chapter}{The second chapter}{2}
+|
+\noindent \'ecrira une ligne~:
+\csdisplay
+\tocchapterentry{The second chapter}{2}{14}
+|
+\noindent
+Vous pouvez aussi faire un |\write| vers le |\tocfile| vous-m\^eme.
+
+\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}%
+|
+
+Pour produire une table des mati\`eres, lisez le fichier |.toc| avec
+\pix^|\readtocfile|. Vous devez appeler |\read!-tocfile| avant le premier
+|\write!-toc!-entry|. Quand vous traitez la table des mati\`eres sans la
+r\'eg\'en\'erer, vous ne devriez pas r\'ecrire le fichier |.toc|---si vous le
+faites, son contenu sera perdu. La commande |\rewrite!-tocfile!-false|
+emp\^echera la r\'e\'ecriture.
+
+\csdisplay
+\newif\ifrewritetocfile \rewritetocfiletrue
+\def\readtocfile{\testfileexistence{toc}%
+ \iffileexists
+ \input \jobname.toc
+ \ifrewritetocfile \opentocfile \fi
+ \fi}%
+|
+
+Voici quelques d\'efinitions de macros |\toc|\dots|entry| possibles. Ces
+d\'efinitions ne sont indiqu\'ees que comme exemple---aligner des traits \`a
+travers la ligne n'est normalement pas la meilleure mani\`ere de composer une
+table des mati\`eres.
+
+\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 R\'ef\'erences crois\'ees
+
+\null ^^{r\'ef\'erences crois\'ees}
+\xrdef{xrefs}
+Les macros qui suivent fournissent des r\'ef\'erences crois\'ees symboliques, pour
+que vous puissiez vous r\'ef\'erer \`a quelque chose dans une autre partie d'un
+document par son nom et non son num\'ero de page r\'eel. \pix^|\xrdef||{foo}|
+d\'efinit une \'etiquette |foo| comme \'etant le num\'ero de page courant et
+\pix^|\xrefn||{foo}| produit ce num\'ero de page, par exemple, $77$. Plus
+fr\'equement, vous voudrez dire quelque chose comme ``voir p.\thinspace77'',
+ainsi \pix^|\xref||{foo}| produit ` p.\thinspace 77''. Si |foo| n'est pas
+d\'efini, un message d'avertissement sera donn\'e. |\xrefwarningfalse| supprime
+l'avertissement.
+
+Ces macros n'assurent aucune protection contre des d\'efinitions dupliqu\'ees.
+Vous pouvez v\'erifier ces d\'efinitions dupliqu\'ees en triant le fichier de
+r\'ef\'erences crois\'ees et en v\'erifiant, m\'ecaniquement ou \emph{de visu}, les
+d\'efinitions adjacentes du m\^eme symbole.
+
+\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}}%
+|
+
+Cette macro transforme une \'etiquette en liste de tokens de caract\`ere dans le
+registre de tokens |\labeltoks|. Une \'etiquette peut inclure des blancs et
+des s\'equences de contr\^ole aussi bien que les caract\`eres normaux, mais elle
+ne peut pas inclure d'accolades.
+
+\csdisplay
+\newtoks\@xrlabeltoks
+\def\xrlabel#1{\begingroup
+ \escapechar = `\_ \edef\tts{\tokstostring{#1_}}%
+ \global\@xrlabeltoks = \expandafter{\tts}%
+ \endgroup}%
+|
+
+Il faut deux passages pour obtenir des r\'ef\'erences crois\'ees correctes,
+puisque les d\'efinitions sont \'ecrites dans le fichier auxiliaire
+|\jobname.aux|. \pix^|\readreffile| les relit. Si vous ne saisissez pas
+cette commande avant la premi\`ere d\'efinition, vous perdrez toutes les
+d\'efinitions de l'ex\'ecution pr\'ec\'edente.
+
+\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, labelisation}
+Vous pouvez donnez des noms symboliques aux \'equations de la m\^eme mani\`ere,
+en utilisant \pix^|\eqdef| et \pix^|\eqref|. |\eqdef| ins\`ere sa propre
+commande |\eqno|, donc il doit \^etre appel\'e \`a un endroit o\`u |\eqno| est
+l\'egal.
+
+\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| produit le ``(num\'ero de l'\'equation)''. Vous pouvez obtenir un
+formatage plus fantaisiste en red\'efinissant \pix^|\eqprint|. Par exemple,
+vous pourriez la red\'efinir pour que les num\'eros d'\'equation incluent le
+num\'ero du chapitre.
+
+\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 Environnements
+
+\null ^^{environnements} Ces macros vous permettent de d\'efinir vos propres
+groupes appel\'es environnements pour des parties de votre manuscrit. Comme
+les groupes de \TeX, ces groupes peuvent \^etre embo\^\i t\'es, et en fait leur
+embo\^\i tement peut \^etre entrelac\'e avec l'embo\^\i tement des groupes de \TeX. Si
+les noms au d\'ebut et \`a la fin d'un environnement ne s'assortissent pas,
+vous recevrez un message d'erreur. Les macros sont con\c cues pour que le
+message que vous recevez quand une telle erreur se produit vous donne une
+bonne chance de localiser la cause de l'erreur facilement.
+
+Vous d\'ebutez un environnement avec
+\pix^^|\environment|
+|\envi!-ron!-ment| |{foo}| et le finissez avec |\endenvironment{foo}|, o\`u
+|foo| est le nom de l'environnement. Nos macros am\'eliorent l\'eg\`erement la
+r\'eponse \`a l'exercice~5.7 du \texbook, en faisant quelques contr\^oles sur les
+paires |\begingroup| et |\endgroup|, et s'assurant aussi que les paires
+|\environment| et |\endenvironment| s'assortissent.
+
+\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}%
+|
+
+Nous d\'efinissons \'egalement des messages d'aide pour chacune des erreurs
+ci-dessus. ^^|\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.}%
+|
+
+Certains environnements ne doivent pas se produire dans d'autres
+environnements. Appelons ces derniers ``environnements externes''
+(outer). |\check!-env| v\'erifie qu'aucun environnement externe n'est
+actuellement effectif, sinon il se plaint. Pour utiliser |\check!-env|,
+vous devez mettre la commande |\environment!-true| au d\'ebut de chaque
+environnement externe.
+
+\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^^{cadr\'e \`a gauche}
+\bix^^{cadr\'e \`a droite}
+\bix^^{texte centr\'e}
+Les trois macros \pix^|\flushleft|, \pix^|\flushright| et
+\xrdef{eplaincenter}
+\pix^|\center| justifient le texte des
+lignes suivantes de la mani\`ere indiqu\'ee. La commande doit
+appara\^\i tre seule sur une ligne. La commande et le texte
+doivent \^etre enferm\'es dans un groupe---%
+la fin du groupe
+indique la fin du texte. Le groupe entier est plac\'e comme un paragraphe
+simple, avec des lignes compl\'et\'ees d'un c\^ot\'e ou de l'autre comme
+indiqu\'e. Les lignes blanches sont reproduites.
+
+\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
+|
+
+Les commandes suivantes sont appel\'ees en raison du |\after!-group|
+^^|\aftergroup|
+dans les d\'efinitions de |\flush!-left|, |\flush!- right| et |\center|.
+Elles effectuent les op\'erations de nettoyage n\'ecessaires .
+
+
+\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^^{cadr\'e \`a gauche}
+\eix^^{cadr\'e \`a droite}
+\eix^^{texte centr\'e}
+
+
+\section Tables
+
+La macro \pix^|\makecolumns| vous permet de donner toutes les entr\'ees d'une
+table sans vous inqui\'eter de l'endroit o\`u les colonnes se coupent. Par
+exemple, si vous saisissez une longue liste alphab\'etique qui sera compos\'ee
+en plusieurs colonnes, vous ne saurez habituellement pas \`a l'avance o\`u une
+colonne finit et o\`u la suivante commence. Par ailleurs, si un autre \'el\'ement
+est ajout\'e, les coupures de colonne changeront.
+
+|\makecolumns| prend deux arguments (d\'elimit\'es)~: le nombre total de
+rang\'ees et le nombre de colonnes de la table. Par exemple, `|\makecolumns
+37/3:|' d\'esigne une table de trois colonnes dont les rang\'ees sont les $37$
+prochaines lignes. Vous pouvez ajuster le positionnement de la table sur la
+page en changeant |\parindent|, qui d\'etermine l'espace \`a gauche et
+|\hsize|, qui d\'etermine l'espace entre la marge gauche de la page et la
+droite du bloc. Vous pouvez permettre une coupure de page au-dessus du
+|\valign|
+^^|\valign//utilis\'e dans {\tt\\makecolumns}|
+en changeant \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 Notes de pied de page
+
+\null ^^{notes de pied de page}
+Des notes de bas de page sont compos\'ees le plus g\'en\'eralement en utilisant un
+num\'ero incr\'ement\'e comme marque de r\'ef\'erence. Nous d\'efinissons la macro
+\pix^|\numberedfootnote| pour faire cela. Il red\'efinit \'egalement
+^|\vfootnote| pour permettre un formatage l\'eg\`erement plus g\'en\'erique des
+notes de bas de page que ne le fait \plainTeX. Le registre de dimension
+|\foot!-note!-mark!-sepa!-ra!-tion|
+\pix^^|\footnotemarkseparation| contr\^ole
+l'espace entre la marque de la note de bas de page (par exemple, le num\'ero) et le
+d\'ebut du texte. Les tokens \pix^|\everyfootnote| sont
+ins\'er\'es avant de produire la notes de bas de page.
+
+Les d\'efinitions \plainTeX \ de |\footnote| et |\vfootnote| sont pr\'eserv\'es en
+|\@plain!-footnote| et |\@plain!-vfootnote| au cas o\`u vous auriez besoin d'elles.
+\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 colonne
+
+\null ^^{double colonnes} La commande |\doublecolumns| commence la
+composition en double colonne, alors que la commande
+\pix^^|\singlecolumn| |\single!-column| remet la composition en
+colonne simple. Vous pouvez commuter dans les deux sens entre elles
+sur la m\^eme page. Le ressort sp\'ecifi\'e par |\above!-double!-column!-%
+skip| et |\below!-double!-column!-skip| est ins\'er\'ee avant et apr\`es la
+composition en double colonne.
+
+L'approche est d\'eriv\'ee de la \knuth{page~417}{480}.
+
+\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}%
+|
+
+Le macro |\@double!-column!-split| fait le d\'edoublement r\'eel. On
+suppose que le source est ins\'er\'ee en colonne simple. Si vous ne
+voulez pas que cela soit le cas, vous devrez modifier la routine de
+r\'esultat. Apr\`es que |\@double!-column!-split| ait effectu\'e son
+travail, |\box255| aura le mat\'eriel en double colonne. Le mat\'eriel en
+double colonne sera pr\'ec\'ed\'e par n'importe quel mat\'eriel en colonne simple
+qui aura \'et\'e compos\'e avant que |\doublecolumns| ait \'et\'e appel\'e.
+|\box4| aura le mat\'eriel qui ne s'est pas adapt\'e \`a la 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| est la routine de sortie r\'eelle. Nous appelons
+l'ancienne |\output| pour faire le travail de sortie de la bo\^\i te.
+
+\csdisplay
+\def\doublecolumnoutput{\@doublecolumnsplit
+ \hsize = \singlecolumnhsize \vsize = \singlecolumnvsize
+ \previousoutput \unvbox4}%
+|
+
+|\singlecolumn| reprend la composition en une colonne. Il suppose que
+|\doublecolumns| a \'et\'e appel\'e.
+
+\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 Terminer
+
+Nous devons maintenant d\'efaire les changements que nous avons faits
+quand nous avons commenc\'e (voir la \xref{eplainconv}). Nous donnons
+\'egalement un num\'ero de version, qui sera plus tard
+disponible dans |\fmt!-name| et |\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/info/impatient/fr/fusingtex.tex b/info/impatient/fr/fusingtex.tex
new file mode 100644
index 0000000000..007f3cbbbc
--- /dev/null
+++ b/info/impatient/fr/fusingtex.tex
@@ -0,0 +1,860 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+% See file fdl.tex for copying conditions.
+
+\input fmacros
+\chapter{Utiliser \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 Transformer la source en encre
+
+\subsection les programmes et fichiers dont vous avez besoin
+
+Afin de produire un document \TeX, vous devrez ex\'ecuter le programme \TeX\
+et ainsi que plusieurs programmes li\'es. Vous aurez \'egalement besoin de
+fichiers d'aide pour \TeX\ et probablement pour ces autres programmes. Dans
+ce livre nous ne pouvons vous renseigner qu'au sujet de \TeX, mais nous ne
+pouvons pas vous guider \`a propos des autres programmes et des fichiers
+d'aide except\'e en des termes tr\`es g\'en\'eraux parce qu'ils d\'ependent de votre
+environnement \TeX\ local. Les personnes qui vous fournissent \TeX\
+devraient pouvoir vous fournir ce que nous appelons de l'\emph{information
+locale}. \pix^^{information locale} L'information locale vous indique
+comment d\'ebuter avec \TeX, comment employer les programmes li\'es et comment
+acc\'eder aux fichiers d'aide.
+
+Le fichier source \TeX\ se compose d'un fichier texte ordinaire que
+vous pouvez pr\'eparer avec un ^{\editeur}. Un fichier source \TeX,
+\`a la diff\'erence d'un dossier source d'un traitement de texte
+ordinaire, ne contient normalement aucun caract\`ere de contr\^ole
+^^{caract\`eres de contr\^ole} invisible. Vous voyez tout ce que \TeX\
+voit si vous regardez le listing du fichier.
+
+Votre fichier source peut s'av\'erer \^etre un peu plus qu'un squelette qui
+appelle d'autres fichiers source. Les utilisateurs de \TeX\ organisent
+souvent de grands documents tels que des livres de cette fa\c con. Vous pouvez
+utiliser la commande ^|\input| (voir \xref\input) pour inclure un fichier source
+dans des autres. En particulier, vous pouvez utiliser |\input| pour inclure
+des fichiers contenant
+des \emph{d\'efinitions de macro}---%
+^^{macros//dans des fichiers auxiliaires }
+d\'efinitions auxiliaires qui augmentent les possibilit\'es de \TeX. Si des
+fichiers de macro sont disponibles sur votre installation \TeX, les
+informations locales sur \TeX\ devraient vous indiquer comment atteindre
+les fichiers de macro et ce qu'elles peuvent faire pour vous. Le format
+standard de \TeX, celui d\'ecrit dans ce livre, inclut une collection de
+macros et d'autres d\'efinitions connus sous le nom de ^{\plainTeX}
+(voir \xref{\plainTeX}).
+
+Quand \TeX\ ex\'ecute votre document, il produit un fichier appel\'e
+^{\dvifile}. L'abr\'evia\-tion ``|dvi|'' repr\'esente ``device independent''.
+L'abr\'e\-viation a \'et\'e choisie parce que l'information dans le \dvifile\ est
+ind\'ependante du dispositif que vous utilisez pour imprimer ou afficher
+votre document.
+
+Pour imprimer votre document ou le regarder avec un \emph{pr\'eviewer},
+^^{pr\'eviewer} vous devrez traiter le ^{\dvifile} avec un programme de
+\emph{driver de p\'eriph\'erique}. ^^{drivers de p\'eriph\'erique} (Un pr\'eviewer
+est un programme qui vous permet de voir sur un \'ecran une approximation de
+ce \`a quoi le r\'esultat compos\'e ressemblera.) Les diff\'erents appareils de
+sortie exigent normalement diff\'erents drivers de p\'eriph\'erique. Apr\`es avoir
+ex\'ecut\'e le driver de p\'eriph\'erique, vous devrez \'egalement transf\'erer le
+r\'esultat du driver de p\'eriph\'erique vers l'impri\-mante ou tout autre
+appareil de sortie. ^^{dispositifs de sortie} ^^{imprimantes} Les
+informations locales sur \TeX\ devraient vous indiquer comment obtenir le
+driver de p\'eriph\'erique correct et l'utiliser.
+
+Puisque \TeX\ n'a aucune connaissance interne des polices particuli\`eres, il
+emploie des \emph{fichiers de polices} ^^{fichiers de polices} pour obtenir
+les informations sur les polices utilis\'ees dans votre document. Les
+fichiers de polices doivent \'egalement faire partie de votre environnement
+\TeX\ local. Chaque police exige normalement deux fichiers~: un premier
+contenant les dimensions des caract\`eres dans la police (le \emph{fichier
+de m\'etriques}) ^^{fichiers de m\'etriques} et un contenant les formes des
+caract\`eres (le \emph{fichier de formes}). ^^{fichier de formes} Les
+versions magni\-fi\'ees d'une police partagent les m\'etriques mais ont
+diff\'erents dossiers de forme. ^^{magnification} Les fichiers de m\'etriques
+sont d\'esign\'es parfois sous le nom de \tfmfiles ^^{\tfmfile}, et les diff\'erentes
+vari\'et\'es de fichiers de forme sous le nom de \pkfiles ^^{\pkfile}, \pxlfiles\ ^^{\pxlfile} et
+\gffiles ^^{\gffile}. Ces noms correspondent aux noms des dossiers que \TeX\ et ses
+programmes compagnons utilisent. Par exemple, |cmr10.tfm| est le dossier de
+m\'etrique pour la police |cmr10| (Computer Modern Romain 10 point).
+
+\TeX\ lui-m\^eme n'utilise que le fichier des m\'etriques, puisqu'il ne g\`ere
+pas le dessin des caract\`eres mais seulement l'espace qu'ils occupent. Le
+driver de p\'eriph\'erique utilise d'habitude le fichier de forme, puisqu'il
+est responsable de la cr\'eation de l'image imprim\'ee de chaque caract\`ere
+compo\-s\'e. Quelques drivers de p\'eriph\'erique doivent aussi utiliser le fichier
+de m\'etrique. Quelques drivers de p\'eriph\'erique peuvent utiliser les polices
+r\'esidentes d'une imprimante et n'ont pas besoin des fichiers de forme pour
+ces polices.
+%\secondprinting{\vfill\eject}
+
+
+\subsection ex\'ecuter {\TeX}
+
+\bix^^{ex\'ecuter \TeX}
+Vous pouvez lancer \TeX\ sur un fichier source |screed.tex| en saisissant
+^^{fichier source} quelque chose comme `|run tex|' ou juste
+`|tex|'(v\'erifiez votre information locale). \TeX \ r\'epondra par quelque
+chose comme~:
+% 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)
+**
+|
+Le ``format pr\'echarg\'e'' ici correspond \`a une forme pr\'edig\'er\'ee de macros
+^{\plainTeX} livr\'ee avec \TeX. Vous pouvez maintenant saisir `|screed|' pour
+que \TeX\ traite votre dossier. Quand cela est fait, vous verrez quelque
+chose comme~:
+\csdisplay
+(screed.tex [1] [2] [3] )
+Output written on screed.dvi (3 pages, 400 bytes).
+Transcript written on screed.log.
+|
+affich\'e sur votre terminal, ou imprim\'e dans votre \logfile\ si vous ne
+travaillez pas sur un terminal. La majeure partie de ce r\'esultat est
+explicite. Les nombres entre crochets sont des num\'eros de page que \TeX
+\ affiche quand il charge chaque page de votre document dans le \dvifile.
+\TeX\ mettra normalement une extention `|.tex|' \`a un nom de fichier source
+si celui que vous avez donn\'e n'en a pas. Pour quelques formes de \TeX\ vous
+devez pouvoir appeler \TeX\ directement pour un fichier source en
+saisissant~:
+\csdisplay
+tex screed
+|
+ou quelque chose comme \c ca.
+
+Au lieu de fournir votre source \TeX\ \`a partir d'un fichier, vous pouvez le
+saisir directement sur votre terminal. Pour faire ainsi, saisissez
+`^|\relax|' au lieu de `|screed|' au prompt `|**|'. \TeX\ vous incitera
+dor\'enavant avec un `|*|' pour chaque ligne saisie et interpr\'etera chaque
+ligne saisie comme il la verra. Pour terminer la saisie, tapez une commande
+telle que `|\bye|' qui indique \`a \TeX\ que vous avez fini. La saisie
+directe est parfois une mani\`ere pratique d'exp\'erimenter avec \TeX.
+
+Quand votre fichier de saisie contient d'autres fichiers de saisie
+imbri\-qu\'es, les informations affich\'ees indiquent quand \TeX\ commence et finit
+de traiter chaque fichier imbriqu\'e.
+^^{fichiers d'entr\'ee//imbriqu\'e}
+\xrdef{infiles}
+\TeX\ affiche une parenth\`ese gauche et le nom du fichier quand il commence
+\`a travailler sur un fichier et affiche la parenth\`ese droite correspondante
+quand il en a fini avec le fichier. Si vous recevez n'importe quel
+^{message d'erreur} dans la sortie affich\'ee, vous pouvez les associer avec
+un fichier en recherchant la parenth\`ese gauche la plus r\'ecemment ouverte.
+
+Pour une explication plus compl\`ete de la fa\c con de faire marcher \TeX, voir
+le \knuth{chapitre~6}{} et votre ^{assistance informatique locale}.
+\eix^^{ex\'ecuter \TeX}
+
+
+\section Pr\'eparer un fichier source
+
+Dans cette section nous expliquons certaines des conventions que vous devez
+suivre en pr\'eparant le source pour \TeX\null. Une partie de l'information
+fournie ici appara\^\i t \'egalement dans les exemples dans la
+\chapterref{examples} de ce livre.
+^^{source, pr\'eparer}
+
+\subsection Commandes et s\'equences de contr\^ole
+
+\bix^^{commandes}
+\bix^^{s\'equences de contr\^ole}
+Une source \TeX\ se compose d'une s\'equence de commandes qui indique \`a
+\TeX\ comment composer votre document. La plupart des caract\`eres agissent
+en tant que commandes d'un genre particuli\`erement simple~: \break``compose-moi''.
+La lettre `|a|', par exemple, est une commande pour composer un `a'. Mais
+il y a un autre genre de commande---une \emph{s\'equence de contr\^ole}---
+qui donne \`a \TeX\ des instructions plus raffin\'ees. Une s\'equence de
+contr\^ole commence d'habitude par un antislash (|\|), bien que vous
+puissiez changer cette convention si vous en avez besoin.
+\xrdef{@backslash}
+Par exemple, le source~:
+\csdisplay
+She plunged a dagger (\dag) into the villain's heart.
+|
+contient la s\'equence de contr\^ole |\dag|; elle produit la composition~:
+\display{%
+She plunged a dagger (\dag) into the villain's heart.
+}
+\noindent Tout dans cet exemple except\'e le |\dag| et les espaces agissent
+comme une commande ``compose-moi''. Nous en expliquerons plus au sujet des
+espaces \xrefpg{espaces}.
+
+Il y a deux sortes de s\'equences de contr\^ole~: les \emph{mots de contr\^ole}
+^^{mots de contr\^ole}
+et les \emph{symboles de contr\^ole}
+^^{symboles de contr\^ole}
+\ulist\compact
+\li Un mot de contr\^ole se compose d'un antislash suivi d'une ou plusieurs
+lettres, par exemple, `|\dag|'. Le premier caract\`ere qui n'est pas une
+lettre marque la fin du mot de contr\^ole.
+\li Un symbole de contr\^ole se compose d'un antislash suivi d'un caract\`ere
+simple qui n'est pas une lettre, par exemple, `|\$|'. le caract\`ere peut
+\^etre un espace ou m\^eme l'extr\'emit\'e d'une ligne (qui est un caract\`ere
+parfaitement l\'egitime).
+\endulist
+\noindent
+Un mot de contr\^ole (mais pas un symbole de contr\^ole) absorbe tous les
+espaces ou fins de ligne qui le suivent.
+^^{s\'equences de contr\^ole//absorbent les espaces}
+Si vous ne voulez pas perdre d'espace
+apr\`es un mot de contr\^ole, faites suivre la commande par un ^{espace
+contr\^ol\'e} (|\!visiblespace|) ou par `|{}|'. ainsi~:
+\csdisplay
+The wonders of \TeX\!visiblespace!.shall never cease!!
+|
+ou~:\hfil\
+\csdisplay
+The wonders of \TeX{} shall never cease!!
+|
+produisent~:
+\display{%
+The wonders of \TeX{} shall never cease!
+}
+\noindent plut\^ot que~:
+\display{%
+The wonders of \TeX shall never cease!
+}
+\noindent
+qui est ce que vous obtenez si vous enlevez `|\|\visiblespace' ou `|{}|'.
+
+Ne faites pas suivre un mot de contr\^ole par le texte qui le suit---\TeX\ ne
+saura pas o\`u le mot de commande finit. Par exemple, la s\'equence de
+contr\^ole |\c| place une c\'edille sur le caract\`ere qui le suit. Le mot
+fran\c cais {\it gar\c con\/} doit \^etre saisi ainsi
+`|gar\c!visiblespace!.con|', et non `|gar\ccon| '; si vous \'ecrivez cela,
+\TeX\ se plaindra au sujet d'une s\'equence de contr\^ole |\ccon| non d\'efinie.
+
+Un symbole de contr\^ole, par contre, n'absorbe rien de ce qui le suit. Ainsi
+vous devez saisir `\$13.56' ainsi `|\$13.56|', et non `|\$!vs13.56|'; la
+derni\`ere forme produirait `\hbox{\$ 13.56}'. Cependant, ces commandes
+d'accent appel\'ees par des symboles de contr\^ole sont d\'efinies de telle
+fa\c con qu'elles absorbent l'espace suivant. Ainsi, par exemple, vous
+pouvez saisir le mot {\it d\'eshabiller\/} comme `|d\'eshabiller|' ou comme
+`|d\'!visiblespace!.eshabiller|'.
+
+Chaque s\'equence de contr\^ole est \'egalement une commande, mais la proposition inverse
+n'est pas vraie.
+^^{commandes//versus s\'equences de contr\^ole}
+^^{s\'equences de contr\^ole//versus commandes}
+Par exemple, la lettre `|N|' est une commande, mais pas une s\'equence de
+contr\^ole. Dans ce livre nous utilisons normalement ``commande'' plut\^ot que
+``s\'equence de contr\^ole'' quand l'un ou l'autre convient. Nous employons
+``s\'equence de contr\^ole'' quand nous voulons souligner les aspects de la
+syntaxe de \TeX\ qui ne s'appliquent pas aux commandes en g\'en\'eral.
+\eix^^{s\'equences de contr\^ole}
+\eix^^{commandes}
+
+
+\subsection Arguments
+
+\xrdef{arg1}
+Quelques commandes doivent \^etre suivies d'un ou plusieurs
+\emph{arguments} ^^{arguments}
+qui aident \`a d\'eterminer ce que fait la commande. Par exemple, la commande
+|\vskip|, qui indique \`a \TeX\ de sauter vers le bas (ou le haut) de la
+page, s'attend \`a un argument indiquant de combien d'espace sauter. Pour
+sauter en bas de deux pouces, vous saisirez `|\vskip 2in|', o\`u |2in| est
+l'argument de |\vskip|.
+
+Diff\'erentes commandes s'attendent \`a des genres d'arguments diff\'erents.
+Beaucoup de commandes attendent des dimensions, telles que le |2in| dans
+l'exemple ci-dessus. Quelques commandes, en particulier celles d\'efinies par des
+macros, s'attendent \`a des arguments qui sont soit un caract\`ere simple ou un
+texte inclus entre accolades. Pourtant d'autres exigent que leurs arguments
+soient enferm\'es entre accolades, c'est-\`a-dire, qu'elles n'acceptent pas d'arguments
+sous forme de caract\`ere simple. La description de chaque commande de ce livre vous indique
+quels genres d'ar\-guments, le cas \'ech\'eant, la commande attend. Dans certains
+cas, les accolades exig\'ees d\'efinissent un groupe (voir \xref{bracegroup}).
+
+%\secondprinting{\vfill\eject}
+
+
+\subsection Param\`etres
+
+\xrdef{introparms}
+Certaines commandes sont des param\`etres (voir \xref{param\`etre}).
+^^{param\`etres//comme commandes}
+Vous pouvez utiliser un param\`etre de deux fa\c cons~:
+\olist
+\li Vous pouvez utiliser la valeur d'un param\`etre
+comme argument d'une autre commande. Par exemple, la commande
+\hbox{|\vskip\parskip|}
+pro\-voque un saut vertical de la valeur du param\`etre de ressort |\parskip|. (saut de paragraphe)
+\li Vous pouvez changer la valeur du param\`etre en lui assignant
+quelque chose. Par exemple, l'assignation \hbox{|\hbadness=200|}
+met la valeur du nombre du param\`etre |\hbadness| \`a $200$.
+\endolist
+\noindent
+Nous utilisons aussi le terme ``param\`etre'' pour faire r\'ef\'erence aux entit\'es telle que |\pageno|
+qui sont normalement des registres mais se comportent comme des param\`etres.
+^^{registres//param\`etres comme}
+
+Certaines commandes sont des noms des tables. Ces commandes sont employ\'ees comme
+des param\`etres, sauf qu'elles exigent un argument additionnel qui indique une
+entr\'ee particuli\`ere dans la table. Par exemple, |\catcode| appelle une table
+de codes de cat\'egorie (voir \xref{codes de cat\'egorie}). Ainsi la commande
+\hbox{|\catcode`~=13|} place le code de cat\'egorie du caract\`ere `|~|' \`a $13$.
+
+
+\subsection Espaces
+
+\xrdef{espaces}
+\bix^^{espace}
+Vous pouvez librement employer les espaces suppl\'ementaires dans votre
+source. Dans presque toutes les circonstances \TeX\ traite plusieurs
+espaces d'une rang\'ee comme \'etant \'equivalents \`a un espace simple.
+Par exemple, il n'importe pas que vous mettiez un ou deux espaces apr\`es
+un ^{point} dans votre saisie. Quoique vous fassiez, \TeX\ ex\'ecute ses
+man\oe uvres de fin de phrase et laisse (dans la plupart des cas) la place
+appropri\'ee apr\`es le point. \TeX\ traite \'egalement la fin d'une ligne
+de source comme \'equivalente \`a un espace. Ainsi vous pouvez finir vos
+lignes de source partout o\`u cela vous arrange --- %
+\TeX\ transforme des lignes de source en paragraphes de la m\^eme fa\c con
+quelles que soient les coupures de ligne dans votre source.
+
+Une ligne blanche dans votre source marque la fin d'un paragraphe.
+^^{paragraphes//terminer un}
+Plusieurs lignes blanches sont \'equivalentes \`a une seule ligne.
+
+\TeX\ ignore les espaces du source dans les formules math\'ematiques (voir
+ci-dessous). Ainsi vous pouvez inclure ou omettre des espaces n'importe
+o\`u dans une formule math\'ematique --- \TeX\ ne s'en inqui\`ete pas. M\^eme
+dans une formule math\'ematique, cependant, vous ne devez pas relier un mot
+de contr\^ole avec la lettre qui le suit.
+
+Si vous d\'efinissez vos propres macros, vous devez faire
+particuli\`erement attention o\`u vous mettez les fins de ligne dans les
+d\'efinitions. Il est tr\`es facile de d\'efinir une macro qui produit un
+^{espace non d\'esir\'e} en plus de ce qu'elle est cens\'ee produire. Nous
+discuterons de ce probl\`eme ailleurs parce qu'il est quelque peu technique
+(voir \xrefpg{unwantedspace}.
+
+Un espace ou son \'equivalent entre deux mots dans votre source ne se
+transforme pas simplement en caract\`ere d'espace dans votre r\'esultat.
+Quelques-uns de ces espaces du source se transforment en fins des lignes
+dans le r\'esultat, puisque, g\'en\'eralement, les lignes du source ne
+correspondent pas aux lignes du r\'esultat. Les autres se transforment en
+espaces de largeur variable appel\'es ``ressort'' (\xref{ressort}), qui ont une
+taille normale (la taille qu'il ``veut avoir'') mais qui peut s'\'etendre
+ou se r\'etr\'ecir. Quand \TeX\ compose un paragraphe qui est cens\'e avoir
+une marge \`a droite (le cas habituel), il ajuste les largeurs des ressorts de
+chaque ligne pour obtenir que les lignes de terminent sur la marge. (la
+derni\`ere ligne d'un paragraphe est une exception, puisqu'on n'exige pas
+d'habitude qu'elle finisse sur la marge droite.)
+
+Vous pouvez emp\^echer un espace du source de se transformer en fin de
+ligne en employant un ^{tilde} (^|~|). par exemple, vous ne voulez pas que
+\TeX\ mette une coupure de ligne entre le `Fig.' et le `8' du `Fig.~8'. En
+saisissant `|Fig.~8|' vous pouvez emp\^echer une telle coupure de ligne.
+\eix^^{espace}
+\needspace{2in}
+
+\subsection Commentaires
+
+\xrdef{commentaires}
+\pix\bix^^{commentaires}
+Vous pouvez ins\'erer des commentaires dans votre source \TeX. Quand \TeX\
+voit un commentaire il passe simplement au-dessus de lui, ainsi ce qui est dans un
+commentaire n'affecte pas votre document final de quelque fa\c con. Les
+commentaires sont utiles pour fournir des informations suppl\'emen\-taires
+sur le contenu de votre fichier source. Par exemple~:
+\csdisplay
+% ========= Start of Section `Hedgehog' =========
+|
+
+{\indexchar % }%
+Un commentaire commence par un signe de pourcentage (|%|) et se prolonge
+jusqu'\`a la fin de la ligne du source. \TeX\ n'ignore pas simplement le
+commentaire mais aussi la fin de la ligne, ainsi des commentaires ont une
+autre utilisation tr\`es importante~: relier deux lignes de sorte que la
+fin de ligne
+^^{coupures de ligne//effacer une}
+entre elles soit invisible \`a \TeX\ et ne produise pas d'espace dans le
+rendu ou de fin de ligne. Par exemple, si vous saisissez~:
+\csdisplay
+A fool with a spread%
+sheet is still a fool.
+|
+vous obtiendrez~:
+\display{
+A fool with a spread%
+sheet is still a fool.
+}
+\eix^^{commentaires}
+
+
+\subsection Ponctuation
+
+\null
+\xrdef{periodspacing}
+\TeX\ ajoute normalement un espace suppl\'ementaire apr\`es ce qu'il pense
+\^etre une marque de ^{ponctuation} \`a la fin d'une phrase, \`a savoir,
+`^|.|', `^|?|' ou `|!!|' \indexchar !
+^^{point} ^^{point d'interrogation} ^^{point d'exclamation}
+suivi d'un espace saisi. \TeX\ n'ajoute pas d'espace suppl\'ementaire si le
+signe de ponctuation suit une lettre majuscule, parce qu'il pense que la
+majuscule est l'initiale d'un nom quelconque. Vous pouvez forcer un espace
+suppl\'ementaire l\`a o\`u il ne se produirait pas autrement en saisissant
+quelque chose comme~:
+\csdisplay
+A computer from IBM\null?
+|
+|\null| ne produit aucun r\'esultat, mais il emp\^eche \TeX\ d'associer la
+capitale `M' avec le point d'interrogation. D'autre part, vous pouvez effacer
+l'espace suppl\'ementaire l\`a o\`u il ne doit pas appara\^\i tre en saisissant
+un espace command\'e apr\`es le signe de ponctuation, par exemple~:
+\csdisplay
+Proc.\!visiblespace!.Royal Acad.\!visiblespace!.of Twits
+|
+permet d'obtenir~:
+\display{Proc.\ Royal Acad.\ of Twits}
+\noindent plut\^ot que~:
+\display{Proc. Royal Acad. of Twits}
+
+Certains pr\'ef\`erent ne pas laisser plus d'espace apr\`es une ponctuation
+\`a la fin d'une phrase. Vous pouvez obtenir cet effet avec la commande
+^|\frenchspacing| (voir \xref\frenchspacing). |\frenchspacing| est souvent
+recomman\-d\'ee pour les ^{bibliographies}.
+
+Pour les ^{marques de citation} simples, vous devez employer les quotes
+simples gauches et droites (|`| et |'|) sur votre clavier. Pour les
+guillemets doubles gauches et droits, utilisez deux quotes simples gauches
+ou droites (|``| ou |''|) plut\^ot que la double quote (|"|)
+sur votre clavier. La double quote du clavier vous donnera en fait une
+double marque de citation droite dans beaucoup de polices, mais les deux
+simples quotes droites sont le style pr\'ef\'er\'e de \TeX. Par exemple~:
+
+\vbox{%
+\csdisplay
+There is no `q' in this sentence.
+``Talk, child,'' said the Unicorn.
+She said, ``\thinspace`Enough!!', he said.''
+|
+}%
+Ces trois lignes donnent~:
+\display{\par\restoreplainTeX
+There is no `q' in this sentence.
+\par ``Talk, child,'' said the Unicorn.
+\par She said, ``\thinspace`Enough!', he said.''
+}
+\noindent
+|\thinspace| dans la troisi\`eme ligne du source emp\^eche la quote
+simple de venir trop pr\`es du guillemet double. Sans lui, vous verriez juste
+trois guillemets presque \'equidistants \`a suivre.
+
+\TeX\ a trois sortes de ^{tirets}~:
+\ulist\compact
+\li un court (trait d'union) comme ceci ( - ). vous l'obtenez en saisissant~`^|-|'.
+\li un moyen (demi-cadratin) comme ceci ( -- ). vous l'obtenez en saisissant~`^|--|'.
+\li un long (cadratin) comme ceci ( --- ). vous l'obtenez en saisissant~`^|---|'.
+\endulist
+\noindent Typiquement, vous utiliserez les traits d'union pour indiquer les
+mots compos\'es comme ``will-o'-the-wisp'', les demi-cadratins d\'esigneront
+les suites de page telles que ``pages~81--87'', et les cadratins
+d\'esigneront une coupure dans la continuit\'e---comme ceci.
+
+
+\subsection Caract\`eres sp\'eciaux
+
+Certains caract\`eres ont une signification sp\'eciale en
+\TeX, donc vous ne devez pas les utiliser dans du texte ordinaire. Ce sont~:
+
+\csdisplay
+ $ # & % _ ^ ~ { } \
+|
+^^|$//en texte ordinaire|
+^^|#//en texte ordinaire|
+^^|&//en texte ordinaire|
+^^|_//en texte ordinaire|
+^^|^//en texte ordinaire|
+^^|~//en texte ordinaire|
+^^|%//en texte ordinaire|
+^^|{//en texte ordinaire|
+^^|}//en texte ordinaire|
+{\recat!ttidxref[\//en texte ordinaire]]
+\noindent Afin de les produire dans votre document de sortie, vous devez
+utiliser des circumlocutions. Pour les cinq premiers, vous devez saisir \`a
+la place~:
+^^|\$|
+^^|\#|
+^^|\&|
+^^|\%|
+^^|\_|
+\csdisplay
+ \$ \# \& \% \_
+|
+
+\noindent
+Pour les autres, vous avez besoin de quelque chose de plus raffin\'e~:
+
+\csdisplay
+ \^{!visiblespace} \~{!visiblespace} $\{$ $\}$ $\backslash$
+|
+
+
+\subsection Groupes
+
+\bix^^{groupes}
+Un \emph{groupe} se compose de code source inclus entre des accolades
+gauches et droites (|{| et |}|).
+^^|{//d\'ebuter un groupe|
+^^|}//terminer un groupe|
+En pla\c cant une commande dans un groupe, vous pouvez limiter ses effets au
+code source compris dans ce groupe. Par exemple, la commande |\bf| indique \`a \TeX\
+de placer quelque chose en {\bf caract\`eres gras}. Si vous deviez
+mettre |\bf| dans votre source et ne rien faire autrement pour le contrecarrer,
+tout dans votre document suivant le |\bf| serait plac\'e en caract\`eres gras. En
+enfermant le |\bf| dans un groupe, vous limitez son effet au groupe. Par
+exemple, si vous saisissez~:
+\csdisplay
+We have {\bf a few boldface words} in this sentence.
+|
+\noindent vous obtiendrez~:
+\display{We have {\bf a few boldface words} in this sentence.}
+
+\noindent Vous pouvez \'egalement utiliser un groupe pour limiter l'effet
+d'une t\^ache \`a un des param\`etres de \TeX. Ces param\`etres contiennent des
+valeurs qui affectent la fa\c con dont \TeX\ compose votre document. Par
+exemple, la valeur du param\`etre |\parindent| indique l'indentation au d\'ebut
+d'un paragraphe. L'assignation |\parindent = 15pt| place l'indentation \`a
+$15$ points d'imprimeur. En pla\c cant cette assignation au d\'ebut d'un groupe
+contenant plusieurs paragraphes, vous pouvez changer l'impression de ces
+seuls paragraphes. Si vous n'enfermez pas l'assignation dans un groupe, le
+changement d'indentation s'appliquera au reste du document (ou jusqu'\`a la
+prochaine assignation de |\parindent|, s'il y en a une apr\`es).
+
+\xrdef{bracegroup}
+Toutes les paires d'accolades n'indiquent pas un groupe. En particulier,
+les accolades associ\'ees \`a un argument pour lequel elles ne sont
+\emph{pas} exig\'ees n'indiquent pas un groupe---elles ne servent qu'\`a
+d\'elimiter l'argument. De ces commandes qui exigent des accolades pour leurs
+arguments, certaines traitent les accolades pour d\'efinir un groupe et
+d'autres interpr\`etent l'argument d'une mani\`ere sp\'eciale qui d\'epend de la
+commande\footnote{plus pr\'ecis\'ement, pour les commandes primitives, soit
+les accolades d\'efinissent un groupe, soit elles enferment les tokens qui ne
+sont pas trait\'ees dans l'estomac de \TeX. Pour |\halign| et |\valign| le
+groupe a un effet trivial parce que rien de ce qui est entre accolades
+n'atteint l'estomac (parce que c'est dans le mod\`ele) ou est inclus dans un
+nouveau groupe plus profond.
+^^|\halign//grouper pour|
+^^|\valign//grouper pour|
+}.
+\eix^^{groupes}
+
+
+\subsection formules math\'ematiques
+
+\bix^^{math\'ematiques}
+\xrdef{mathform}
+Une formule math\'ematique peut appara\^\i tre dans du \emph{texte math\'ematique}
+^^{texte math\'ematique}
+ou se placer sur une ligne s\'epar\'ee par de l'espace
+vertical suppl\'e\-mentaire autour d'elle (\emph{math\'ematiques affich\'ees}).
+^^{math\'ematiques affich\'ees}
+Vous enfermez le texte d\' une formule entre des signes dollar simples
+(|$|) et une formule affich\'ee entre des signes dollars doubles (|$$|).
+\ttidxref{$}\ttidxref{$$}
+Par exemple~:
+
+\csdisplay
+If $a<b$, then the relation $$e^a < e^b$$ holds.
+|
+\noindent Ce source produit~:
+\display{\centereddisplays
+If $a<b$, then the relation $$e^a < e^b$$ holds.}
+\smallskip
+\noindent la \chapterref{math} d\'ecrit les commandes utiles dans les
+formules math\'ematiques.
+\eix^^{math\'ematiques}
+
+
+\section Comment marche {\TeX}
+
+Afin d'utiliser \TeX\ efficacement, il est utile d'avoir une id\'ee de la
+fa\c con dont \TeX\ organise son activit\'e de transmutation d'entr\'ee en
+r\'esultat. Vous pouvez imaginer \TeX\ comme une sorte d'organisation avec
+des ``yeux'', une ``bouche'', un ``\oe sophage'', un ``estomac'' et un
+``intestin''. Chaque partie de l'organisation transforme son entr\'ee d'une
+certaine fa\c con et passe l'entr\'ee transform\'ee \`a la prochaine \'etape.
+
+Les ^{yeux} transforment un fichier d'entr\'ee en s\'equence de caract\`eres. La
+^{bouche} transforme la s\'equence de caract\`eres en s\'equence de \emph{tokens},
+^^{tokens}
+o\`u chaque token est un caract\`ere simple ou une s\'equence de contr\^ole.
+^^{s\'equences de contr\^ole//comme tokens}
+L'\oe sophage d\'eveloppe les tokens
+s\'equence de \emph{commandes primitives}, qui sont \'egalement des tokens.
+^^{d\'evelopper des tokens}
+L'^{estomac} effectue les op\'erations indiqu\'ees par les
+commandes primitives, produisant une s\'equence de pages.
+Finalement, l'^{intestin} transforme chaque page dans la forme requise
+pour le \dvifile\ et l'y envoit.
+^^{\dvifile//cr\'e\'e par l'intestin de \TeX}
+Ces actions sont d\'ecrites en plus d\'etail dans la \chapterref{concepts} sous
+\conceptcit{\anatomy}.
+^^{\anatomy}
+
+La vraie composition est r\'ealis\'ee dans l'estomac. Les commandes
+demandent \`a \TeX\ de composer tel caract\`ere dans telle
+police, d'ins\'erer de l'espace entre les mots, de finir un paragraphe et
+ainsi de suite. En commen\c cant par des caract\`eres compos\'es individuellement
+et d'autres \'el\'ements typographiques simples, \TeX\ construit une page
+^^{pages} comme un ensemble de ^{\boites} de bo\^\i tes de bo\^\i tes.
+\seeconcept{\boites}. Chaque caract\`ere compos\'e occupe une bo\^\i te, et l'ensemble
+fait une page enti\`ere. Une bo\^\i te peut contenir des bo\^\i tes plus petites
+mais aussi des ^^{ressort} \emph{ressorts} (\xref{ressort}) et autres
+diverses choses. Les ressorts produisent de l'espace entre les cases les plus
+petites. Une propri\'et\'e importante des ressorts est qu'ils peuvent s'\'etendre et
+se r\'etr\'ecir~; ainsi \TeX\ peut rendre une bo\^\i te plus grande ou plus petite
+en \'etirant ou en r\'etr\'ecissant les ressorts.
+
+En g\'en\'eral, une ligne est une bo\^\i te contenant une suite de bo\^\i
+tes de caract\`eres, et une page est une bo\^\i te contenant une suite de
+bo\^\i tes de lignes. Il y a des ressorts entre les mots d'une ligne et
+entre les lignes d'une page. \TeX\ \'etire ou r\'etr\'ecit les ressorts sur
+chaque ligne afin de justifier une marge droite sur la page et les ressorts de
+chaque page afin de faire des marges inf\'erieures des diff\'erentes pages
+\'egales. D'autres genres d'\'el\'ements typographiques peuvent \'egalement
+appara\^\i tre dans une ligne ou sur une page, mais nous ne les traiterons
+pas ici.
+
+En tant que processus d'assemblage de pages, \TeX\ \`a besoin de couper des
+paragraphes en lignes et des lignes en pages. En effet, l'estomac voit
+d'abord un paragraphe comme une longue ligne. Il ins\`ere des
+\emph{coupures de ligne}
+^^{coupures de ligne}
+afin de transformer le paragraphe en s\'equence de lignes de la bonne
+longueur, ex\'ecutant une analyse plut\^ot raffin\'ee afin de choisir
+l'ensemble de coupures qui semble la meilleure pour le paragraphe
+\seeconcept{coupure de ligne}. L'estomac suit un processus semblable mais plus simple
+afin de transformer une s\'equence de lignes en page. Essentiellement
+l'estomac accumule des lignes jusqu'\`a ce que plus aucune ligne ne
+puisse rentrer dans la page. Il choisit alors un endroit simple pour
+couper la page, en mettant les lignes avant la coupure sur la page courante
+et en sauvant les lignes apr\`es la coupure pour la page suivante
+\seeconcept{coupure de page}.
+^^{coupures de page//ins\'er\'ees par l'estomac de \TeX}
+
+Quand \TeX\ assemble un \'el\'ement d'une liste d'articles (bo\^\i tes, ressorts,
+etc.), il est dans un des six \emph{modes} ^^{modes} (\xref{mode}). Le genre
+d'entit\'e qu'il assemble d\'efinit le mode dans lequel il est. Il y a deux modes
+ordinaires~: le mode horizontal ordinaire pour l'assemblage des paragraphes
+(avant qu'ils ne soient coup\'es en lignes) et le mode vertical ordinaire pour
+l'assemblage des pages. Il y a deux modes internes~: le mode horizontal interne
+pour assembler des articles horizontalement pour former une bo\^\i te horizontale et
+un mode vertical interne pour assembler des articles verticalement pour former une
+bo\^\i te verticale (autre qu'une page). Finalement, il y a deux modes math\'ematiques~:
+le mode math\'ematique de texte pour des formules de maths s'assemblant dans un
+paragraphe et le mode math\'ematique d'affichage pour les formules math\'ematiques qui
+sont affich\'ees sur des lignes seules (voir ``formules math\'ematiques'',
+\xref{mathform}).
+
+
+\section Nouveau \TeX\ contre ancien {\TeX}
+
+\xrdef{newtex}
+
+En 1989, Knuth a fait une r\'evision importante de \TeX\ afin de
+l'adapter aux jeux de caract\`eres n\'ecessaires \`a la composition des
+langues autres que l'anglais.\space ^^{langues \'etrang\`eres}
+
+Cette r\'evision inclut quelques fonctions suppl\'ementaires mineures
+qui peuvent \^etre ajout\'ees sans d\'eranger autre chose. Ce livre
+d\'ecrit le ``^{\newTeX}''. Si vous utilisez toujours une version plus
+ancienne de \TeX\ (version $2.991$ ou ant\'erieure), vous devez savoir
+quels dispositifs du {\newTeX} vous ne pouvez utiliser. Les fonctions
+suivantes ne sont pas disponibles dans les versions ant\'erieures~:
+
+\ulist\compact
+\li ^|\badness| (\xref\badness)
+\li ^|\emergencystretch| (\xref\emergencystretch)
+\li ^|\errorcontextlines| (\xref\errorcontextlines)
+\li ^|\holdinginserts| (\xref\holdinginserts)
+\li ^|\language|, ^|\setlanguage| et |\new!-lan!-guage|
+(\pp\xrefn\language, \xrefn{\@newlanguage}) ^^|\newlanguage|
+\li ^|\lefthyphenmin| et ^|\righthyphenmin| (\xref\lefthyphenmin)
+\li ^|\noboundary| (\xref\noboundary)
+\li ^|\topglue| (\xref\topglue)
+\li la notation |^^|$xy$ pour les chiffres hexad\'ecimaux (\xref{hexchars})
+\endulist
+\noindent
+Nous vous recommandons de vous procurer le nouveau \TeX\ si vous le pouvez.
+
+\section Ressources
+
+\xrdef{ressources}
+Un certain nombre de ressources sont disponibles pour vous aider \`a utiliser \TeX.
+\texbook\ est la source d\'efinitive d'information sur \TeX~:
+
+\smallskip
+{\narrower\noindent
+^{Knuth, Donald E.}, \texbook. Reading, Mass.: Addison-Wesley, 1984.\par}
+\smallskip
+\noindent
+Assurez-vous de bien obtenir la dix-septi\`eme \'edition (janvier 1990) ou plus;
+les \'editions pr\'ec\'edentes ne couvrent pas les dispositifs du nouveau \TeX.
+
+^{\LaTeX} est une collection de commandes tr\`es populaire con\c cues pour
+simplifier l'utilisation de \TeX. Il est d\'ecrit dans~:
+\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} est la collection de commandes adopt\'ees par l'American Mathematical
+Society comme norme pour soumettre de mani\`ere \'electronique des manuscrits math\'ematiques.
+Il est d\'ecrit dans~:
+\smallskip
+{\narrower\noindent
+^{Spivak, Michael~D.}, {\sl The Joy of \TeX}. Providence, R.I.:
+American Mathematical Society, 1986.
+\par}
+\smallskip
+\noindent
+Vous pouvez joindre le ^{\TUG} (TUG), qui \'edite un bulletin appel\'e
+{\it ^{TUGBoat}}. Le TUG est une excellente source d'informations non
+seulement sur \TeX\ mais \'egalement pour des collections de macros,
+y compris \AMSTeX. Son adresse est~:
+\smallskip
+{\obeylines
+^{\TUG}
+c/o American Mathematical Society
+P.O. Box 9506
+Providence, RI 02940
+U.S.A.
+}
+\smallskip
+\noindent
+En conclusion, vous pouvez obtenir des copies des macros ^|eplain.tex|
+d\'ecrites dans la \chapterref{eplain} aussi bien que les macros utilis\'ees en
+composant ce livre. Elles sont disponibles par le r\'eseau Internet par
+\ftp\ anonyme \`a partir des centres serveurs suivants~:
+{\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]}}
+
+La version \'electronique inclut des macros additionnelles qui composent
+le source pour le programme machine ^{\BibTeX}, \'ecrit par Oren
+Patashnik \`a l'universit\'e de Stanford, ^^{Patashnik, Oren} et
+impriment la sortie de ce programme. Si vous trouvez des bogues dans les
+macros ou pensez \`a des am\'eliorations, vous pouvez envoyer un courriel
+\`a Karl \`a {\tt karl@cs.umb.edu}.
+
+Les macros sont \'egalement disponibles pour \$10.00 US sur des disquettes
+$5\frac1/4$\inches\ ou $3\frac1/2$\inches\ format\'ee PC~:
+\smallskip
+{\obeylines
+Paul Abrahams
+214 River Road
+Deerfield, MA 01342
+\vskip\tinyskipamount
+Email: {\tt Abrahams\%Wayne-MTS@um.cc.umich.edu}
+}
+\smallskip
+ \noindent
+Ces adresses sont correctes pour juin 1990; veuillez prendre en compte
+qu'elles peuvent changer apr\`es cela, en particulier les adresses
+\'electro\-niques.
+
+\section Ressources en fran\c cais
+
+[partie sp\'ecifique \`a la version fran\c caise rajout\'ee par le traducteur]
+
+\smallskip
+Toute la documentation de \TeX\ et consort n'a pas \'et\'e traduite en fran\c cais.
+N\'eanmoins, de nombreux ouvrages existent dans la langue de Moli\`ere. Aussi bien sur \TeX\ et
+\LaTeX\ que sur \MF.
+
+\subsection {\TeX}
+
+\smallskip
+{\narrower\noindent
+^{Knuth, Donald E.}, {\sl Le \TeX book}\itcorr. Paris, France : Vuibert, 12/2003.\par}
+\smallskip
+\noindent
+Un grand merci \`a ^{Jean-C\^ome Charpentier} pour cette traduction tant attendue par la
+communau\TeX\ francophone.
+
+\smallskip
+{\narrower\noindent
+^{Seroul, Raymond}, {\sl Le petit livre de \TeX}. Paris, France : Masson, 1996.\par}
+\smallskip
+\noindent
+Pour comprendre \TeX\ et comment le franciser.
+
+\subsection {\LaTeX}
+
+\smallskip
+{\narrower\noindent%\frenchspacing\spaceskip = 3.33pt plus 2pt minus 1.2pt
+^{Bayart, Benjamin}, {\sl Le Joli Manuel Pour \LaTeX}. En t\'el\'echargement libre sur le CTAN.\par}
+\smallskip
+\noindent
+Mon premier livre de chevet sur \LaTeX. Une nouvelle version est en cours d'\'ecriture.
+
+\smallskip
+{\narrower\noindent%\frenchspacing\spaceskip = 3.33pt plus 2pt minus 1.2pt
+^{Desgraupes, Bernard}, {\sl\LaTeX, apprentissage, guide et r\'ef\'erence}. Paris, France : Vuibert, 2000.\par}
+\smallskip
+\noindent
+tr\`es bien fait, un must pour comprendre la gestion des polices sous \LaTeX.
+
+\smallskip
+{\narrower\noindent
+^{Goossens, Michel}, {\sl\LaTeX\ Companion}. Paris, France : CampusPress, 2000.\par}
+\smallskip
+\noindent
+``La'' Bible de \LaTeX, que dire d'autre~? traduction de l'original en anglais, pas tr\`es \`a jour en fran\c cais
+mais une nouvelle version anglaise est sortie.
+
+\smallskip
+{\narrower\noindent
+^{Kluth, Marie-Paule}, {\sl FAQ \LaTeX\ Fran\c caise}. Paris, France : Vui\-bert, 2000.\par}
+\smallskip
+\noindent
+Tr\`es bien fait.
+
+\smallskip
+{\narrower\noindent
+^{Rolland, Christian}, {\sl\LaTeX. Guide pratique}. Paris, France : O'Reilly, 1999.\par}
+\smallskip
+\noindent
+tr\`es bien aussi, avec le CD-ROM \TeX live en prime (peut-\^etre pas la derni\`ere version mais pratique quand m\^eme)
+
+\subsection {\MF}
+
+Pour en apprendre un peu plus sur l'univers de \TeX.
+\smallskip
+{\narrower\noindent
+^{Desgraupes, Bernard}, {\sl\MF\~: guide pratique}. Paris, France : Vuibert, 1999.\par}
+\smallskip
+\noindent
+pas d'\'equivalent, \`a part le \MF book de Knuth (en anglais) .
+
+\subsection {Association}
+
+Vous pouvez joindre l'association ^{GUTenberg} (GUTenberg), qui \'edite un bulletin appel\'e
+{\it ^{La lettre de GUTenberg}}. GUTenberg est une excellente source d'informations sur
+\TeX\ en fran\c cais. Son adresse est~:
+\smallskip
+{\obeylines
+GUTenberg
+c/o Irisa, Campus universitaire de Beaulieu
+F-35042 Rennes cedex
+France
+}
+\smallskip
+
+\endchapter\byebye
diff --git a/info/impatient/fr/fxmptext.tex b/info/impatient/fr/fxmptext.tex
new file mode 100644
index 0000000000..8b69846428
--- /dev/null
+++ b/info/impatient/fr/fxmptext.tex
@@ -0,0 +1,452 @@
+~% This is part of the book TeX for the Impatient.
+~% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
+~% Copyright (C) 2004 Marc Chaudemanche pour la traduction française.
+~% 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 Exemple !xmpnum:\quad\xmplbxti Saisir du texte simple}
+\vglue .5\baselineskip % skip an extra half line
+~\count255 = \pageno
+~\xdef\examplepage{\number\count255}
+~\markinfo{Exemple 1~: Saisir du texte simple}
+~\ifrewritetocfile
+~\write\tocfile{\string\tocsectionentry{Saisir du texte simple}{}{\examplepage}}%
+~\fi
+~^^{notes de pied de page} ^^{commentaires} ^^{ponctuation} ^^{marques de citation}
+~^^{caract\`eres espace} ^^{tirets} ^^{paragraphes//terminer un}
+~\edef\examplepageno{\number\count255}%
+Il est simple de pr\'eparer un texte ordinaire pour \TeX\ puisque
+\TeX\ n'a pas besoin de savoir comment couper les lignes dans
+votre source. Il traite la fin d'une ligne comme un espace%
+\footnote \dag{\TeX\ traite aussi une tabulation comme un espace, comme
+vous le voyez dans ce {\it pied de page}.}. Si vous ne voulez pas
+d'espace ici, mettez un signe de pour%
+centage (le caract\`ere de commentaire) \`a la fin de la ligne.
+ \TeX\ ignore les espaces en d\'ebut de ligne, et traite
+plusieurs espaces comme un seul,
+m\^eme apr\`es un point. Vous indiquez un nouveau paragraphe en
+sautant une ligne (ou plus d'une ligne).
+
+Quand \TeX\ voit un point suivi d'un espace (ou de la fin de la
+ligne, ce qui est \'equivalent), il pense normalement que vous avez
+fini une phrase et ins\`ere un petit espace suppl\'ementaire apr\`es le
+point. Il traite les points d'interrogation et d'exclamation de la
+m\^eme mani\`ere.
+
+ Mais les r\`egles de \TeX\ pour rep\'erer un point ont parfois besoin
+de r\'eglage. \TeX\ pense qu'une lettre capitale avant un point
+ne termine pas une phrase, donc vous devez faire quelque chose de
+l\'eg\`erement diff\'erent si, disons, vous \'ecrivez en parlant d'ADN\null.
+% Le \null emp\`eche TeX de percevoir la capitale `N'
+% comme \'etant suivie du point.
+C'est une bonne id\'ee de relier des mots ensemble dans des r\'ef\'erences
+comme ``voir fig.~8'' et dans des noms comme V.~I\null. L\'enine et dans
+$\ldots$ pour que \TeX\ ne puise jamais les couper \`a un mauvais endroit
+entre deux lignes. (Les trois points indiquent une ellipse.)
+
+Vous pouvez mettre des citations entre des paires de simples
+``quotes'' gauches et droites pour avoir les bonnes marques de
+citation doubles gauches et droites. ``pour des marques de citation
+simple et double adjacentes, ins\'erez un `espace fin'\thinspace''. Vous
+pouvez avoir des tirets demi-cadratins--comme ceci, et des tirets
+cadratins---comme cela.
+
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Indentation}% !xmpheaddef
+~^^{indentation} ^^{marges} ^^{paragraphes//\'etroit}
+\noindent Maintenant, regardons comment contr\^oler l'indentation.
+Si un traitement de texte sait le faire, \TeX\ le sait s\^urement.
+Notez que ce paragraphe n'est pas indent\'e.
+
+Habituellement, on veut soit indenter les paragraphes, soit
+laisser de l'espace suppl\'ementaire entre eux. Comme nous n'avons
+rien chang\'e maintenant, ce paragraphe est indent\'e.
+
+{\parindent = 0pt \parskip = 6pt
+% l'accolade gauche d\'ebute un groupe contenant le texte non indent\'e
+Faisons ces deux paragraphes d'une mani\`ere diff\'erente,
+sans indentation et avec six points suppl\'ementaires
+entre eux.
+
+Voici un autre paragraphe, compos\'e sans indentation. Si nous
+ne mettons pas d'espace entre ces paragraphes, Nous aurons du mal
+\`a savoir o\`u finit l'un et o\`u commence l'autre.
+\par % Le paragraphe *doit* \^etre termin\'e dans le groupe.
+}% L'accolade droite termine le groupe contenant du texte nin indent\'e.
+
+Il est aussi possible d'indenter les deux cot\'es de paragraphes entiers
+Les trois paragraphes suivants illustrent cela~:
+\smallskip % Procure un peu d'espace suppl\'ementaire ici.
+% Skips like this and \vskip below end a paragraph.
+{\narrower
+``Nous avons indent\'e ce paragraphe des deux cot\'es d'une indentation de
+paragraphe. C'est souvent un bon moyen de pr\'esenter de longues citations
+
+``Vous pouvez faire plusieurs paragraphes de cette fa\c con si vous
+le voulez. C'est le second paragraphe indent\'e simplement.''\par}
+
+{\narrower \narrower Vous pouvez m\^eme faire des paragraphes
+doublement indent\'es si vous en avez besoin. Ceci en est un
+exemple.\par}
+\vskip 1pc % Saut vers le bas d'un pica pour s\'eparation visuelle.
+Dans ce paragraphe, nous revenons aux marges normales, comme vous
+pouvez le voir. Rallongeons la sauce pour que les marges soient
+clairement visibles.
+
+{\leftskip .5in Maintenant, nous indentons la marge de gauche d'un
+demi pouce et laissons la marge droite \`a sa position usuelle\par}
+{\rightskip .5in Finalement, nous indentons la marge droite d'un
+demi pouce et laissons la marge gauche \`a sa position usuelle.\par}
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Polices et caract\`eres sp\'eciaux}% !xmpheaddef
+\chardef \\ = `\\ % Let \\ denote a backslash.
+~^^{polices} ^^{caract\`eres//sp\'eciaux} ^^{accents}
+~^^{symboles musicaux} ^^{couleurs de carte \`a jouer}
+~^^|$| ^^|&| ^^|#| ^^|_| ^^|%| ^^|^| ^^|~| ^^|{| ^^|}| \indexchar \
+{\it Voici quelques mots en police italique}, {\bf quelques
+autres en police grasse}, {\it et un\/ {\bf m\'elange}
+des deux, avec trois\/ {\rm mots en romain} ins\'er\'es}.
+Quand une police italique est suivie par une non italique, on
+ins\`ere une ``correction d'italique'' ({\tt \\/}) pour que
+l'espacement rende bien.
+Voici un mot plus {\sevenrm petit}---mais les polices standard
+de \TeX\ ne vous en donneront pas de plus petit que {\fiverm celui-l\`a}.
+
+Si vous voulez un de ces dix caract\`eres~:
+\medskip
+\centerline{\$ \quad \& \quad \# \quad \_ \quad \% \quad
+ \char `\^ \quad \char `\~ \quad $\{$ \quad
+ $\}$ \quad $\backslash$}
+% Le \quad ins\`ere un espace cadratin entre les caract\`eres.
+\medskip
+\noindent vous devez les \'ecrire d'une mani\`ere sp\'eciale. Regardez
+la page d'en face pour savoir comment.
+\TeX\ a les accents et les lettres dont vous avez besoin
+pour des mots fran\c cais comme {\it r\^ ole\/} et {\it \'
+el\` eve\/}, pour des mots allemands comme {\it Schu\ss\/}
+aussi bien que pour des mots de plein d'autres langues.
+Vous trouverez une liste compl\`ete des accents de \TeX\ et des lettres
+de langues Europ\'eennes \`a la !xrefdelim[fornlets] et \`a la !xrefdelim[accents].
+
+Vous trouverez aussi des lettres Grecques comme ``$\alpha$'' et
+``$\Omega$'' pour les utiliser en math\'ematique, des couleurs de carte
+comme ``$\spadesuit$'' et ``$\diamondsuit$'', des symboles de musique
+comme ``$\sharp$'' et ``$\flat$'', et plein d'autres symboles
+sp\'eciaux dont vous trouverez la liste \`a la !xrefdelim[specsyms].
+\TeX\ n'acceptera ces sortes de symboles sp\'eciaux que dans son
+``mode math\'ematique'', donc vous devez les entourer
+entre caract\`eres `{\tt \$}'.
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Espacement interligne}% !xmpheaddef
+~^^{espacement//inter-ligne} ^^{lignes de base}
+\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}%
+}%
+
+Un jour, vous voudrez imprimer un document avec de l'espace
+suppl\'ementaire entre les lignes. Par exemple, les actes du congr\`es
+sont imprim\'es ainsi pour que les l\'egislateurs puissent les annoter.
+Pour la m\^eme raison, les \'editeurs insistent habituellement pour que
+les manuscrits aient un espacement double. L'espacement double est n\'eammoins
+rarement appropri\'e pour les documents finis.
+
+Une ligne de base est une ligne imaginaire qui agit comme les
+lignes horizontales d'un papier quadrill\'e. Vous pouvez contr\^oler
+l'espacement interligne---ce que les imprimeurs appellent
+``interlignage''---en fixant la taille de l'espace entre les lignes de
+base. Regardez la source pour voir comment faire. Vous pouvez
+utiliser la m\^eme m\'ethode pour un espacement de $1\;1/2$, en mettant
+{\tt 1.5} au lieu de {\tt 2}. (Vous pouvez aussi \'ecrire $1\frac 1/2$
+d'une meilleure fa\c con.)
+% Here we've used the macro definition given above.
+
+Pour cet exemple, nous avons aussi augment\'e l'indentation de
+paragraphe et saut\'e une ligne de plus entre les paragraphes.
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Espacement, traits et bo\^\i tes}% !xmpheaddef
+~^^{listes de description} ^^{\boites//dessiner des} ^^{barre de r\'evision}
+Voici un exemple de ``liste descriptive''. En pratique vous
+feriez mieux de creer une macro pour avoir des constructions r\'ep\'etitives
+et \^etre s\^ur que la largeur des sous-titres soit suffisament grande~:
+\bigskip
+% Call the indentation for descriptions \descindent
+% and set it to 8 picas.
+\newdimen\descindent \descindent = 9pc
+% 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 La reine de C\oe ur\hfil}}%
+Une femme \`a moiti\'e folle, prompte a d\'eclarer ``coupez-lui
+la t\^ete~!!''\ \`a la moindre provocation.\par
+\noindent\llap{\hbox to \descindent{\bf Le chat de Cheshire\hfil}}%
+Un chat avec un \'enorme sourire qu'Alice trouve
+dans un arbre.\par
+\noindent\llap{\hbox to \descindent{\bf La tortue Mock\hfil}}%
+une cr\'eature larmoyante, un peu menteuse, qui \'etait un
+compagnon du Gryphon. R\'eput\'e \^etre l'ingr\'edient principal
+de la soupe de tortue Mock.
+\par}
+\bigskip\hrule\bigskip % A line with vertical space around it.
+Voici un exemple de mots dans une bo\^\i te trac\'ee, comme
+Lewis Carroll l'a \'ecrite~:
+\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{
+Ici, nous obtenons l'effet d'une barre de r\'evision sur le texte
+de ce paragraphe. La barre de r\'evision indique un changement.}}
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Odds and ends}% !xmpheaddef
+~^^{c\'esure} ^^{th\'eor\`emes} ^^{lemmes} ^^{listes d'\'el\'ements}
+~^^{justification \`a gauche} ^^{justification \`a droite} ^^{centrage}
+\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\ sait couper les mots, mais n'est pas infaillible.
+Si vous discutez de l'ingr\'edient chimique
+${\it 5}$-[p-(Flouro\-sul\-fonyl)ben\-zoyl]-l,%
+$N^6$-ethe\-no\-adeno\-sine
+et que \TeX\ se plaint aupr\`es de vous d'un ``overfull hbox'', essayez
+d'ins\'erer des ``c\'esures discr\'etionnaires''. La notation
+`{\tt \\-}' indique \`a \TeX\ les c\'esures dis\-cr\'e\-tionnaire,
+qui sont celles qui n'auraient pas \'et\'e ins\'er\'es autrement.
+\medskip
+{\raggedright Vous pouvez composer un texte non justifi\'e, c'est-\`a-dire,
+avec une marge droite non align\'ee. Comme utrefois, avant que les traitements
+de texte soient communs, les document tap\'es \`a la machine parce qu'il n'y
+avait pas de solution pratique.
+Certaines personnes pr\'ef\`erent que le texte ne soit pas justifi\'e
+parce que l'espacement entre les mots est uniforme. La plupart des
+livres sont fait avec des marges justifi\'ees, mais pas tous. \par}
+
+\proclaim Assertion 27. Il y a un moyen simple de composer
+les en-t\^etes d'asser\-tions, lemmes, th\'eor\`emes, etc.
+
+Voici un exemple de comment composer une liste d'items \`a deux
+niveaux de profondeur. Si vous avez besoin de niveaux suppl\'ementaires,
+vous devrez les programmer vous-m\^eme, h\'elas.
+\smallskip
+\item {1.} Voici le premier item.
+\item {2.} Voici le second item. Il est constitu\'e de deux
+paragraphes. Nous avons indent\'e le second paragraphe pour que
+vous puissiez voir facilement o\`u il commence.
+
+\item{} \indent Le second paragraphe a trois sous-items
+sous lui.
+\itemitem {(a)} Voici le premier sous-item.
+\itemitem {(b)} Voici le second sous-item.
+\itemitem {(c)} Voici le troisi\`eme sous-item.
+\item {$\bullet$} Ceci est un \'etrange item parce qu'il est
+compl\`etement diff\'erent des autres.
+\smallskip
+\leftline{Voici une ligne justifi\'ee \`a gauche.$\Leftarrow$}
+\rightline{$\Rightarrow$Voici une ligne justifi\'ee \`a droite.}
+\centerline{$\Rightarrow$Voici une ligne centr\'ee.$\Leftarrow$}
+% Don't try to use these commands within a paragraph.
+\bye % end the document
+:::
+\xmpheader !xmpnum/{Utiliser des polices venant d'ailleurs}% !xmpheaddef
+~\xrdef{palatino}
+~\idxref{police Palatino}
+~\idxref{Zapf, Hermann}
+~\idxref{police Computer Modern} ^^{\Metafont}
+\font\tenrm = pplr % Palatino
+%\font\tenrm = pnss10 % lucida
+% Define a macro for invoking Palatino.
+\def\pal{\let\rm = \tenrm \baselineskip=12.5pt \rm}
+\pal % Use Palatino from now on.
+
+Vous n'\^etes pas restreint \`a la police Computer Modern qui est
+fournie avec \TeX. D'autres polices sont possibles provenant d'autres
+sources et vous pouvez les pr\'ef\'erer. Par exemple, nous avons
+compos\'e cette page en Palatino Romain 10 points. Palatino a \'et\'e
+dessin\'ee par Hermann Zapf, consid\'er\'e comme un des plus grand
+typographe du vingti\`eme si\`ecle. Cette page vous donnera une id\'ee
+de ce \`a quoi elle ressemble.
+
+Les polices peuvent provenir soit sous forme vectorielles soit de
+bitmaps. Une police vectorielle d\'ecrit le dessin des caract\`eres,
+tandis qu'une bitmap sp\'ecifie chaque pixel (point) qui forme chaque
+caract\`ere. Une police vectorielle peut \^etre utilis\'ee pour
+g\'en\'erer diff\'e\-rentes tailles de la m\^eme police. Le programme
+Metafont qui est associ\'e \`a \TeX\ procure un moyen
+particuli\`erement puissant de g\'en\'erer des polices bitmap, mais ce
+n'est pas le seul moyen.
+
+Le fait qu'une seule routine puisse g\'en\'erer un grand \'eventail de
+tailles de point pour une police tente beaucoup de vendeurs de polices
+digitales de ne produire qu'une taille de vectorielles pour une police
+comme Palatino Romain. Cela semble une d\'ecision \'economiquement
+sensible, mais c'est un sacrifice esth\'etique. Une police ne peut pas
+\^etre agrandie et r\'etr\'ecie lin\'eairement sans perdre en
+qualit\'e. Les grandes lettres ne doivent pas, en g\'en\'eral, avoir
+les m\^emes proportions que les plus petites. Cela ne rend simplement
+pas beau. Par exemple, une police qui est diminu\'ee lin\'eairement
+aura trop peu d'espace entre ses lettres et la hauteur des minuscules
+sera trop petite.
+%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
+
+Un typographe peut compenser ces changements en procurant
+diff\'e\-rentes vectorielles pour diff\'erentes tailles de point, mais
+il est n\'ecessaire de d\'epenser du temps \`a dessiner ces
+diff\'erentes vectorielles. Un des grands avantages de Metafont est
+qu'il est possible de param\'etrer les descriptions des caract\`eres
+dans une police. Metafont peut alors maintenir la qualit\'e
+typographique des caract\`eres \`a travers une \'echelle de taille de
+point en ajustant le dessin des caract\`eres en cons\'equence.
+\bye % end the document
+:::
+~\idxref{champignons}
+\xmpheader !xmpnum/{Un tableau trac\'e}% !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 Quelques Champignons Remarquables\hfil\strut\cr
+\noalign{\vskip3pt} \tablerule
+ \omit&height 3pt&\omit&&\omit\cr
+ \bf Nom&&\bf Nom &&\omit \bf Caract\`eristiques \hfil\cr
+\noalign{\vskip -2pt}% close up lines of heading
+ \bf Botanique&&\bf Commun&&\omit \bf d'Identification \hfil\cr
+\tableskip Pleurotus ostreatus&&Pleurote en forme d'huitre&&
+ Poussent \'etag\'es les uns sur les autres sur le bois mort ou affaibli,
+ % without the kern, the `f' and `l' would be too close
+ chapeau en forme de coquille d'huitre gris-rose, pied court ou absent.\cr
+\tableskip Lactarius hygrophoroides&&Lactaire hygrophore&&
+ Chapeau et pied de couleur orange rouille, abondance de lait,
+ souvent sur la terre des bois pr\`es des ruisseaux.\cr
+\tableskip Morchella esculenta&&Morille commune&&Chapeau conique
+ avec des trous noirs et les ar\^etes blanches; sans lamelles. Souvent
+ pr\`es de vieux pommiers et des ormes morts au printemps.\cr
+\tableskip Boletus edulus&&C\`epe de Bordeaux&&Chapeau rouge-brun \`a
+ caf\'e au lait avec des pores jaunes (blanc quand il est jeune),
+ pied bulbeux, souvent pr\`es des conif\`eres, bouleaux ou~trembles.\cr
+\tableskip \tablerule \noalign{\vskip 2pt} \tablerule
+}\bye
+:::
+\xmpheader !xmpnum/{Composer des math\'ematiques}% !xmpheaddef
+~^^{math\'ematiques}
+Pour un triangle sph\'erique de cot\'es $a$, $b$ et $c$ et
+d'angles oppos\'es $\alpha$, $\beta$ et $\gamma$, nous avons~:
+$$\cos \alpha = -\cos \beta \cos \gamma +
+ \sin \beta \sin \gamma \cos \alpha \quad
+ \hbox{(Loi de Cosinus)}$$
+et~:
+$$\tan {\alpha \over 2} = \sqrt{
+ {- \cos \sigma \cdot \cos(\sigma - \alpha)} \over
+ {\cos (\sigma - \beta) \cdot \cos (\sigma - \gamma)}},\quad
+ \hbox{o\`u $\sigma = {1 \over 2}(a+b+c)$}$$
+Nous avons aussi~:$$\sin x = {{e^{ix}-e^{-ix}}\over 2i}$$
+et~:
+$$\int _0 ^\infty {{\sin ax \sin bx}\over{x^2}}\,dx
+% The \, above produces a thin space
+ = {\pi a\over 2}, \quad \hbox{si $a < b$}$$
+
+\noindent Le nombre de combinaisons ${}_nC_r$ de $n$
+choses prises parmi $r$ est~:
+$$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
+La valeur du d\'eterminant $D$ d'ordre $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| $$
+est d\'efinie comme la somme de $n!!$ termes~:
+$$\sum\>(\pm)\>a_{1i}a_{2j} \ldots a_{nk}$$
+% The \> above produces a medium space.
+o\`u $i$, $j$, \dots,~$k$\/ prennent toutes les valeurs possibles
+entre $1$ et $n$ et pour lequel, le signe du produit est
+$+$ si la s\'equence $i$, $j$, \dots,~$k$\/ est une
+permutation paire et $-$ autrement. De plus~:
+$$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/{Plus de math\'ematiques}% !xmpheaddef
+~^^{math\'ematiques}
+La valeur absolue de $X$, $|x|$, est d\'efinie par~:
+$$|x| = \cases{x, &si $x\ge 0$;\cr
+-x,&autrement.\cr}$$
+Maintenant quelques \'equations num\'erot\'ees.
+Il arrive que pour $k \ge 0$~:
+$$x^{k^2}=\overbrace{x\>x\>\cdots\> x}^{2k\ \rm fois}
+ \eqno (1)$$
+
+Voici un exemple qui montre certains contr\^oles d'espacement, avec
+un num\'ero \`a gauche~:
+$$[u]!negthin[v][w]\,[x]\>[y]\;[z]\leqno(2a)$$
+Le montant d'espace pour les items entre crochets
+augmente graduellement de gauche \`a droite. Nous avons fait
+l'espace entre les deux premiers items plus {\it petit\/}
+que l'espace naturel.
+Il arrive parfois que $$\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'.
+Le r\'esultat est d'ordre $O(n \log\log n)$. D'o\`u
+$$\sum_{i=1}^n x_i = x_1+x_2+\cdots+x_n
+= {\rm Sum}(x_1,x_2,\ldots,x_n). \eqno(3)$$
+et
+$$dx\,dy = r\,dr\,d\theta!negthin.\eqno(4)$$
+Le jeu de tous les $q$ tels que $q\le0$ s'\'ecrit~:
+$$\{\,q\mid q\le0\, \}$$
+Donc
+$$\forall x\exists y\;P(x,y)\Rightarrow
+\exists x\exists y\;P(x,y)$$
+o\`u
+$$P(x,y) \buildrel \rm def \over \equiv
+\hbox{\rm tout pr\'edicat en $x$ et $y$} . $$
+\bye
+:::
diff --git a/info/impatient/frontm.tex b/info/impatient/frontm.tex
new file mode 100644
index 0000000000..40a0189f5b
--- /dev/null
+++ b/info/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/info/impatient/genops.tex b/info/impatient/genops.tex
new file mode 100644
index 0000000000..46bc83a1a8
--- /dev/null
+++ b/info/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/info/impatient/index.tex b/info/impatient/index.tex
new file mode 100644
index 0000000000..54e2e04b38
--- /dev/null
+++ b/info/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/info/impatient/index1.icn b/info/impatient/index1.icn
new file mode 100644
index 0000000000..29cc4a6ed6
--- /dev/null
+++ b/info/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/info/impatient/index2.icn b/info/impatient/index2.icn
new file mode 100644
index 0000000000..19913c4288
--- /dev/null
+++ b/info/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/info/impatient/macros.tex b/info/impatient/macros.tex
new file mode 100644
index 0000000000..e3a84adac7
--- /dev/null
+++ b/info/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/info/impatient/math.tex b/info/impatient/math.tex
new file mode 100644
index 0000000000..975c806398
--- /dev/null
+++ b/info/impatient/math.tex
@@ -0,0 +1,2180 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003, 2014 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
+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
+In display style, \TeX\ normally places limits above and below a large
+operator. This command tells \TeX\ to place limits after a large
+operator rather than above and below it.
+
+The integral operators |\int| and |\oint| are exceptions---\TeX\ places
+limits after them in all cases, unless overridden, as in |\int\limits|.
+(\plainTeX\ defines ^|\int| and ^|\oint| as macros that specify the
+operator symbol followed by |\nolimits|---this is what causes them to
+behave differently by default.)
+^^|\int//limits after|
+
+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 place limits above and below all operators
+(including the integrals) if in display style, and after all operators
+if in text style.
+
+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/info/impatient/modes.tex b/info/impatient/modes.tex
new file mode 100644
index 0000000000..1adce6a950
--- /dev/null
+++ b/info/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/info/impatient/pages.tex b/info/impatient/pages.tex
new file mode 100644
index 0000000000..230802e9b5
--- /dev/null
+++ b/info/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/info/impatient/paras.tex b/info/impatient/paras.tex
new file mode 100644
index 0000000000..91aad27c98
--- /dev/null
+++ b/info/impatient/paras.tex
@@ -0,0 +1,2166 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003, 2014 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 the \minref{penalty} 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. You can include multiple paragraphs by using |\endgraf|
+instead of a blank line or |\par|.
+\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/info/impatient/preface.tex b/info/impatient/preface.tex
new file mode 100644
index 0000000000..b48193d749
--- /dev/null
+++ b/info/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/info/impatient/read1st.tex b/info/impatient/read1st.tex
new file mode 100644
index 0000000000..fddaed637e
--- /dev/null
+++ b/info/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/info/impatient/tips.tex b/info/impatient/tips.tex
new file mode 100644
index 0000000000..3d0f1b8b97
--- /dev/null
+++ b/info/impatient/tips.tex
@@ -0,0 +1,1011 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003, 2014 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
+before 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/info/impatient/usebook.tex b/info/impatient/usebook.tex
new file mode 100644
index 0000000000..e9d01c6841
--- /dev/null
+++ b/info/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/info/impatient/usermacs.tex b/info/impatient/usermacs.tex
new file mode 100644
index 0000000000..dbf78ddb83
--- /dev/null
+++ b/info/impatient/usermacs.tex
@@ -0,0 +1,1169 @@
+% This is part of the book TeX for the Impatient.
+% Copyright (C) 2003, 2014 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\writetocentry#1#2{\ifrewritetocfile
+ \opentocfile
+ \write\tocfile{%
+ \expandafter\noexpand \csname toc#1entry\endcsname
+ {#2}{\folio}}%
+\fi\ignorespaces}%
+%
+\def\writenumberedtocentry#1#2#3{\ifrewritetocfile
+ \opentocfile
+ \write\tocfile{%
+ \expandafter\noexpand \csname toc#1entry\endcsname
+ {#2}{#3}{\folio}}%
+\fi\ignorespaces}%
+|
+
+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/info/impatient/usingtex.tex b/info/impatient/usingtex.tex
new file mode 100644
index 0000000000..35ec5310d2
--- /dev/null
+++ b/info/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/info/impatient/xmptext.tex b/info/impatient/xmptext.tex
new file mode 100644
index 0000000000..47599421fd
--- /dev/null
+++ b/info/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
+:::