From 7ff51640e2fd3e968488d312879dee70458f2926 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 8 Dec 2006 00:25:19 +0000 Subject: eplain 3.1 (5dec06) git-svn-id: svn://tug.org/texlive/trunk@2630 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/eplain/AUTHORS | 12 + Master/texmf-dist/doc/eplain/COPYING | 340 + Master/texmf-dist/doc/eplain/ChangeLog | 2268 ++++++ Master/texmf-dist/doc/eplain/INSTALL | 46 + Master/texmf-dist/doc/eplain/NEWS | 141 + Master/texmf-dist/doc/eplain/PROJECTS | 18 + Master/texmf-dist/doc/eplain/README | 50 + Master/texmf-dist/doc/eplain/base/AUTHORS | 12 - Master/texmf-dist/doc/eplain/base/COPYING | 340 - Master/texmf-dist/doc/eplain/base/ChangeLog | 1750 ----- Master/texmf-dist/doc/eplain/base/INSTALL | 51 - Master/texmf-dist/doc/eplain/base/Makefile | 97 - Master/texmf-dist/doc/eplain/base/NEWS | 87 - Master/texmf-dist/doc/eplain/base/PROJECTS | 18 - Master/texmf-dist/doc/eplain/base/README | 50 - Master/texmf-dist/doc/eplain/base/arrow.texi | 781 -- Master/texmf-dist/doc/eplain/base/btxdoc.bib | 90 - Master/texmf-dist/doc/eplain/base/btxdoc.tex | 1117 --- Master/texmf-dist/doc/eplain/base/csindex.texi | 6 - Master/texmf-dist/doc/eplain/base/eplain.html | 6644 ---------------- Master/texmf-dist/doc/eplain/base/eplain.pdf | Bin 670226 -> 0 bytes Master/texmf-dist/doc/eplain/base/eplain.texi | 228 - Master/texmf-dist/doc/eplain/base/hlink.texi | 1860 ----- Master/texmf-dist/doc/eplain/base/index.texi | 7 - Master/texmf-dist/doc/eplain/base/install.texi | 65 - Master/texmf-dist/doc/eplain/base/intro.texi | 71 - Master/texmf-dist/doc/eplain/base/invoke.texi | 144 - Master/texmf-dist/doc/eplain/base/progdef.texi | 768 -- Master/texmf-dist/doc/eplain/base/userdef.texi | 2538 ------ Master/texmf-dist/doc/eplain/demo/Makefile | 41 + Master/texmf-dist/doc/eplain/demo/lscommnt.tex | 47 + Master/texmf-dist/doc/eplain/demo/xhyper.tex | 190 + Master/texmf-dist/doc/eplain/doc/eplain.html | 8078 ++++++++++++++++++++ Master/texmf-dist/doc/eplain/doc/eplain.info | 7863 +++++++++++++++++++ Master/texmf-dist/doc/eplain/doc/eplain.pdf | Bin 0 -> 895977 bytes Master/texmf-dist/doc/eplain/doc/lscommnt.jpg | Bin 0 -> 68549 bytes Master/texmf-dist/doc/eplain/doc/xhyper.jpg | Bin 0 -> 14118 bytes Master/texmf-dist/doc/eplain/util/idxuniq | 37 + Master/texmf-dist/doc/eplain/util/trimsee | 106 + Master/texmf-dist/source/eplain/base/add-date | 28 - Master/texmf-dist/source/eplain/base/add-version | 24 - Master/texmf-dist/source/eplain/base/etex.tex | 5 - Master/texmf-dist/source/eplain/base/fix-checksum | 20 - Master/texmf-dist/source/eplain/base/merge | 84 - Master/texmf-dist/source/eplain/base/packages.zip | Bin 11374 -> 0 bytes .../texmf-dist/source/eplain/base/test/allref.tex | 15 - .../texmf-dist/source/eplain/base/test/boxes.tex | 11 - .../texmf-dist/source/eplain/base/test/boxit.tex | 24 - .../texmf-dist/source/eplain/base/test/catcode.tex | 8 - .../texmf-dist/source/eplain/base/test/center.tex | 12 - Master/texmf-dist/source/eplain/base/test/cite.bib | 25 - Master/texmf-dist/source/eplain/base/test/cite.tex | 35 - .../texmf-dist/source/eplain/base/test/citeall.tex | 12 - .../source/eplain/base/test/citealph.tex | 26 - .../texmf-dist/source/eplain/base/test/citeapa.tex | 26 - .../source/eplain/base/test/citebegin.tex | 20 - .../source/eplain/base/test/citecust.tex | 38 - .../source/eplain/base/test/citenote.tex | 13 - .../texmf-dist/source/eplain/base/test/citex.tex | 8 - .../source/eplain/base/test/colfootn.tex | 18 - .../texmf-dist/source/eplain/base/test/colrule.tex | 33 - .../texmf-dist/source/eplain/base/test/column.tex | 228 - .../texmf-dist/source/eplain/base/test/column2.tex | 51 - .../texmf-dist/source/eplain/base/test/column3.tex | 23 - .../source/eplain/base/test/commdiags.tex | 111 - .../source/eplain/base/test/contents.tex | 30 - .../source/eplain/base/test/displine.tex | 36 - .../texmf-dist/source/eplain/base/test/double.tex | 24 - .../texmf-dist/source/eplain/base/test/double2.tex | 163 - .../texmf-dist/source/eplain/base/test/dvipdfm.tex | 111 - .../source/eplain/base/test/ecommdiag.tex | 15 - .../source/eplain/base/test/emergncy.tex | 19 - Master/texmf-dist/source/eplain/base/test/env.tex | 42 - .../texmf-dist/source/eplain/base/test/eqdef.tex | 15 - .../texmf-dist/source/eplain/base/test/eqref.tex | 141 - .../texmf-dist/source/eplain/base/test/example.eps | 389 - .../source/eplain/base/test/filexist.tex | 22 - .../texmf-dist/source/eplain/base/test/flynn.tex | 7 - .../source/eplain/base/test/footnote.tex | 88 - Master/texmf-dist/source/eplain/base/test/frac.tex | 24 - Master/texmf-dist/source/eplain/base/test/gcol.tex | 218 - .../texmf-dist/source/eplain/base/test/hlcite.tex | 55 - .../texmf-dist/source/eplain/base/test/hlfoot.tex | 47 - .../texmf-dist/source/eplain/base/test/hlidx.mst | 2 - .../texmf-dist/source/eplain/base/test/hlidx.tex | 138 - .../texmf-dist/source/eplain/base/test/hlink.tex | 144 - Master/texmf-dist/source/eplain/base/test/ian.tex | 28 - .../texmf-dist/source/eplain/base/test/index.tex | 36 - Master/texmf-dist/source/eplain/base/test/jan.tex | 15 - .../texmf-dist/source/eplain/base/test/justify.tex | 106 - .../texmf-dist/source/eplain/base/test/knuth.bib | 17 - .../texmf-dist/source/eplain/base/test/label.tex | 8 - .../source/eplain/base/test/latexcite.tex | 9 - .../texmf-dist/source/eplain/base/test/liang.tex | 300 - Master/texmf-dist/source/eplain/base/test/list.tex | 90 - .../texmf-dist/source/eplain/base/test/listing.tex | 10 - Master/texmf-dist/source/eplain/base/test/logo.tex | 20 - Master/texmf-dist/source/eplain/base/test/loop.tex | 20 - .../source/eplain/base/test/loopnext.tex | 21 - Master/texmf-dist/source/eplain/base/test/mag.tex | 14 - .../texmf-dist/source/eplain/base/test/makecol.tex | 17 - .../texmf-dist/source/eplain/base/test/margin.tex | 68 - .../texmf-dist/source/eplain/base/test/matrix.tex | 18 - .../source/eplain/base/test/mdisplay.tex | 215 - .../texmf-dist/source/eplain/base/test/names.tex | 21 - .../texmf-dist/source/eplain/base/test/noarrow.tex | 8 - .../texmf-dist/source/eplain/base/test/nobib.tex | 10 - .../source/eplain/base/test/nonouter.tex | 11 - .../source/eplain/base/test/optional.tex | 30 - .../texmf-dist/source/eplain/base/test/outer.tex | 26 - Master/texmf-dist/source/eplain/base/test/page.tex | 8 - Master/texmf-dist/source/eplain/base/test/path.tex | 25 - Master/texmf-dist/source/eplain/base/test/pcol.tex | 183 - .../texmf-dist/source/eplain/base/test/pdftex.tex | 112 - .../texmf-dist/source/eplain/base/test/psfont.map | 78 - Master/texmf-dist/source/eplain/base/test/rex.tex | 277 - Master/texmf-dist/source/eplain/base/test/rule.tex | 23 - Master/texmf-dist/source/eplain/base/test/sidx.tex | 5 - .../texmf-dist/source/eplain/base/test/subdef.tex | 24 - .../texmf-dist/source/eplain/base/test/tenenb.tex | 48 - .../texmf-dist/source/eplain/base/test/tenenb2.tex | 23 - Master/texmf-dist/source/eplain/base/test/test.tex | 14 - Master/texmf-dist/source/eplain/base/test/time.tex | 10 - .../source/eplain/base/test/truemarg.tex | 36 - .../texmf-dist/source/eplain/base/test/uscore.bib | 5 - .../texmf-dist/source/eplain/base/test/uscore.tex | 14 - .../source/eplain/base/test/usepackage.tex | 146 - .../texmf-dist/source/eplain/base/test/verb2.tex | 61 - .../source/eplain/base/test/verbatim.tex | 65 - .../texmf-dist/source/eplain/base/test/vlach.tex | 258 - .../source/eplain/base/test/whitespc.tex | 51 - .../texmf-dist/source/eplain/base/test/xampl.tex | 13 - Master/texmf-dist/source/eplain/base/test/xref.tex | 39 - Master/texmf-dist/source/eplain/base/util/idxuniq | 37 - Master/texmf-dist/source/eplain/base/util/trimsee | 106 - Master/texmf-dist/source/eplain/base/xeplain.tex | 4783 ------------ .../texmf-dist/source/eplain/eplain-source-3.1.zip | Bin 0 -> 375590 bytes Master/texmf-dist/tex/eplain/arrow.tex | 597 ++ Master/texmf-dist/tex/eplain/base/arrow.tex | 597 -- Master/texmf-dist/tex/eplain/base/btxmac.tex | 906 --- Master/texmf-dist/tex/eplain/base/eplain.tex | 3670 --------- Master/texmf-dist/tex/eplain/btxmac.tex | 906 +++ Master/texmf-dist/tex/eplain/config/eplain.ini | 6 - Master/texmf-dist/tex/eplain/config/xeplain.ini | 39 - Master/texmf-dist/tex/eplain/eplain.aux | 0 Master/texmf-dist/tex/eplain/eplain.ini | 6 + Master/texmf-dist/tex/eplain/eplain.tex | 4001 ++++++++++ Master/texmf-dist/tpm/eplain.tpm | 134 +- 148 files changed, 24749 insertions(+), 32264 deletions(-) create mode 100644 Master/texmf-dist/doc/eplain/AUTHORS create mode 100644 Master/texmf-dist/doc/eplain/COPYING create mode 100644 Master/texmf-dist/doc/eplain/ChangeLog create mode 100644 Master/texmf-dist/doc/eplain/INSTALL create mode 100644 Master/texmf-dist/doc/eplain/NEWS create mode 100644 Master/texmf-dist/doc/eplain/PROJECTS create mode 100644 Master/texmf-dist/doc/eplain/README delete mode 100644 Master/texmf-dist/doc/eplain/base/AUTHORS delete mode 100644 Master/texmf-dist/doc/eplain/base/COPYING delete mode 100644 Master/texmf-dist/doc/eplain/base/ChangeLog delete mode 100644 Master/texmf-dist/doc/eplain/base/INSTALL delete mode 100644 Master/texmf-dist/doc/eplain/base/Makefile delete mode 100644 Master/texmf-dist/doc/eplain/base/NEWS delete mode 100644 Master/texmf-dist/doc/eplain/base/PROJECTS delete mode 100644 Master/texmf-dist/doc/eplain/base/README delete mode 100644 Master/texmf-dist/doc/eplain/base/arrow.texi delete mode 100644 Master/texmf-dist/doc/eplain/base/btxdoc.bib delete mode 100644 Master/texmf-dist/doc/eplain/base/btxdoc.tex delete mode 100644 Master/texmf-dist/doc/eplain/base/csindex.texi delete mode 100644 Master/texmf-dist/doc/eplain/base/eplain.html delete mode 100644 Master/texmf-dist/doc/eplain/base/eplain.pdf delete mode 100644 Master/texmf-dist/doc/eplain/base/eplain.texi delete mode 100644 Master/texmf-dist/doc/eplain/base/hlink.texi delete mode 100644 Master/texmf-dist/doc/eplain/base/index.texi delete mode 100644 Master/texmf-dist/doc/eplain/base/install.texi delete mode 100644 Master/texmf-dist/doc/eplain/base/intro.texi delete mode 100644 Master/texmf-dist/doc/eplain/base/invoke.texi delete mode 100644 Master/texmf-dist/doc/eplain/base/progdef.texi delete mode 100644 Master/texmf-dist/doc/eplain/base/userdef.texi create mode 100644 Master/texmf-dist/doc/eplain/demo/Makefile create mode 100644 Master/texmf-dist/doc/eplain/demo/lscommnt.tex create mode 100644 Master/texmf-dist/doc/eplain/demo/xhyper.tex create mode 100644 Master/texmf-dist/doc/eplain/doc/eplain.html create mode 100644 Master/texmf-dist/doc/eplain/doc/eplain.info create mode 100644 Master/texmf-dist/doc/eplain/doc/eplain.pdf create mode 100644 Master/texmf-dist/doc/eplain/doc/lscommnt.jpg create mode 100644 Master/texmf-dist/doc/eplain/doc/xhyper.jpg create mode 100644 Master/texmf-dist/doc/eplain/util/idxuniq create mode 100644 Master/texmf-dist/doc/eplain/util/trimsee delete mode 100644 Master/texmf-dist/source/eplain/base/add-date delete mode 100644 Master/texmf-dist/source/eplain/base/add-version delete mode 100644 Master/texmf-dist/source/eplain/base/etex.tex delete mode 100644 Master/texmf-dist/source/eplain/base/fix-checksum delete mode 100644 Master/texmf-dist/source/eplain/base/merge delete mode 100644 Master/texmf-dist/source/eplain/base/packages.zip delete mode 100644 Master/texmf-dist/source/eplain/base/test/allref.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/boxes.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/boxit.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/catcode.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/center.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/cite.bib delete mode 100644 Master/texmf-dist/source/eplain/base/test/cite.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/citeall.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/citealph.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/citeapa.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/citebegin.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/citecust.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/citenote.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/citex.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/colfootn.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/colrule.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/column.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/column2.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/column3.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/commdiags.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/contents.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/displine.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/double.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/double2.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/dvipdfm.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/ecommdiag.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/emergncy.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/env.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/eqdef.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/eqref.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/example.eps delete mode 100644 Master/texmf-dist/source/eplain/base/test/filexist.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/flynn.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/footnote.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/frac.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/gcol.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/hlcite.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/hlfoot.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/hlidx.mst delete mode 100644 Master/texmf-dist/source/eplain/base/test/hlidx.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/hlink.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/ian.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/index.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/jan.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/justify.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/knuth.bib delete mode 100644 Master/texmf-dist/source/eplain/base/test/label.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/latexcite.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/liang.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/list.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/listing.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/logo.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/loop.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/loopnext.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/mag.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/makecol.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/margin.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/matrix.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/mdisplay.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/names.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/noarrow.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/nobib.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/nonouter.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/optional.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/outer.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/page.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/path.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/pcol.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/pdftex.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/psfont.map delete mode 100644 Master/texmf-dist/source/eplain/base/test/rex.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/rule.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/sidx.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/subdef.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/tenenb.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/tenenb2.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/test.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/time.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/truemarg.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/uscore.bib delete mode 100644 Master/texmf-dist/source/eplain/base/test/uscore.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/usepackage.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/verb2.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/verbatim.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/vlach.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/whitespc.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/xampl.tex delete mode 100644 Master/texmf-dist/source/eplain/base/test/xref.tex delete mode 100644 Master/texmf-dist/source/eplain/base/util/idxuniq delete mode 100644 Master/texmf-dist/source/eplain/base/util/trimsee delete mode 100644 Master/texmf-dist/source/eplain/base/xeplain.tex create mode 100644 Master/texmf-dist/source/eplain/eplain-source-3.1.zip create mode 100644 Master/texmf-dist/tex/eplain/arrow.tex delete mode 100644 Master/texmf-dist/tex/eplain/base/arrow.tex delete mode 100644 Master/texmf-dist/tex/eplain/base/btxmac.tex delete mode 100644 Master/texmf-dist/tex/eplain/base/eplain.tex create mode 100644 Master/texmf-dist/tex/eplain/btxmac.tex delete mode 100644 Master/texmf-dist/tex/eplain/config/eplain.ini delete mode 100644 Master/texmf-dist/tex/eplain/config/xeplain.ini create mode 100644 Master/texmf-dist/tex/eplain/eplain.aux create mode 100644 Master/texmf-dist/tex/eplain/eplain.ini create mode 100644 Master/texmf-dist/tex/eplain/eplain.tex (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/eplain/AUTHORS b/Master/texmf-dist/doc/eplain/AUTHORS new file mode 100644 index 00000000000..391c66f94a3 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/AUTHORS @@ -0,0 +1,12 @@ +Eplain was originally written mostly by Karl Berry. Some ideas were +suggested by Paul Abrahams, who also wrote a few of the macros. Other +macros are based on ones in The TeXbook. + +David Guichard and Adam Lewenberg improved the multicolumn macros. +Stepan Kasal has contributed several patches. +Oleg Katsitadze added the hyperlink capabilities to Eplain. +Oren Patashnik has worked tirelessly on improving the BibTeX macros. +Heiko Oberdiek wrote ifpdf.sty and pdfcrop.pl. +Steven Smith wrote the commutative diagram macros. +Philip Taylor wrote path.sty starting from an initial macro by Nelson Beebe. +Nelson also collected the texnames.sty which Eplain incorporates. diff --git a/Master/texmf-dist/doc/eplain/COPYING b/Master/texmf-dist/doc/eplain/COPYING new file mode 100644 index 00000000000..3912109b5cd --- /dev/null +++ b/Master/texmf-dist/doc/eplain/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program 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. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public 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. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Master/texmf-dist/doc/eplain/ChangeLog b/Master/texmf-dist/doc/eplain/ChangeLog new file mode 100644 index 00000000000..d11f45da276 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/ChangeLog @@ -0,0 +1,2268 @@ +2006-12-03 Oleg Katsitadze + + * Makefile, doc/eplain.info, doc/eplain.pdf, doc/eplain.texi, eplain.tex: + Version 3.1. + + * doc/intro.texi: Added link to the TUGboat article. + + * NEWS: Reduced news for 3.1 a bit (it was way too long). + + * doc/hlink.texi, doc/invoke.texi, doc/progdef.texi, doc/userdef.texi: + Formatting (mostly empty lines around @example's, @noindent's + afterwards). + +2006-12-01 Oleg Katsitadze + + * Makefile, README.TDS: + Removed texmf/ prefix from the TDS dirs in the distro. + + * doc/eplain.texi, doc/progdef.texi (Iteration): Updated node comment. + + * Makefile: Put scripts in the doc/ within the distro. + + * doc/userdef.texi (Customizing indexing): + trimsee is in util/, not test/. + + * NEWS: News for the upcoming Eplain 3.1. + +2006-11-29 Oleg Katsitadze + + * xeplain.tex (idxargopen, idxargclose): Removed obsolete comment. + + * doc/userdef.texi: Added index terms for verbatim text in TOC + and index. (Writing the .toc file): Better rationale for + \writenumberedtocline. + + * doc/progdef.texi (Iteration): + Documented \loop (with the \else extension). + + * doc/userdef.texi (Packages known to work): Added soul.sty. + +2006-11-28 Oleg Katsitadze + + * doc/userdef.texi (Packages known not to work): Added hyperref.sty. + + * doc/demo.texi, doc/hlink.texi, doc/install.texi, doc/intro.texi, doc/userdef.texi, doc/invoke.texi: + Added breaks (@/) to @url's. + + * doc/eplain.texi, doc/userdef.texi (Index entries with special characters): + New node. + + * test/for.tex: New file. + + * doc/progdef.texi (Iteration): Documented \For. Correction + about expanding the first token of item list, not the entire + list. + + * xeplain.tex (For): Modified to ignore _all_ leading spaces of + the items, not just the first space. + + * test/href.tex: Added a "weird chars" test. + + * doc/hlink.texi, doc/invoke.texi, doc/userdef.texi: + Added a bunch of @acronym's. + + * doc/hlink.texi (Explicit hyperlinks): Note on special chars in + the label argument. + + * doc/eplain.texi, doc/hlink.texi (General hyperlinks): New node. + + * doc/progdef.texi (\ifinteger and \isinteger): Minor correction. + +2006-11-09 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-10-05 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-10-04 Oleg Katsitadze + + * doc/hlink.texi (Link types for hypertex, Link types for pdftex + and dvipdfm): Moved url link types toward beginnings of the + subsections. + + * doc/progdef.texi: Minor correction. + + * test/usepackage.tex: Test for LaTeX package reloading. + + * eplain.tex, xeplain.tex (\usepkg@load@pkg): When reloading + LaTeX packages, warn and skip reloading, instead of giving an + error. + + * test/href.tex: New file. + + * doc/invoke.texi: Removed the note on touch'ing the .aux file + before running texi2dvi, texi2dvi can deal with this since + revision 1.90. (BTW, the problem was not with cross-references + but with citations.) + +2006-09-30 Oleg Katsitadze + + * doc/eplain.texi: Updated the master menu. + + * doc/invoke.texi: Note on touch'ing the .aux file before running + texi2dvi. + + * doc/userdef.texi (Contents): Split into subsections. Documented + \writenumberedtocline. Documented integer @var{part} arguments. + + * doc/progdef.texi (\ifinteger and \isinteger): New subsection. + +2006-09-27 Oleg Katsitadze + + * doc/eplain.texi: Added nodes for "Loading LaTeX packages" to + the master menu. + + * doc/userdef.texi (Verbatim listing): Documented + \nolastlinelisting and C-l (form feed). + +2006-09-25 Oleg Katsitadze + + * eplain.tex, xeplain.tex (xrdef): Bug fix--\ignorespaces from + \definexref was masked off by \endgroup's. + + * test/xkvtest.tex: New file. + +2006-08-27 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-08-08 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-07-15 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-06-19 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-06-02 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-05-29 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-05-07 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-05-07 Oleg Katsitadze + + * eplain.tex, test/contents.tex, xeplain.tex (writenumberedcontentsline): + New macro. + +2006-05-05 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-05-02 Oleg Katsitadze + + * eplain.tex, test/indexvrb.tex, xeplain.tex: Simplified + embedding `{' and `}' into index terms by managing catcodes of + \idxargopen and \idxargclose internally. Allow \verbatim inside + arguments of \indexsee and \indexseealso by reading their + arguments verbatim and then \scantokens'ing. + + * doc/demo.texi, doc/eplain.info, doc/eplain.pdf, doc/eplain.texi, doc/hlink.texi, doc/userdef.texi: + Added the lscommnt.tex demo, tweaked some index terms. + + * doc/progdef.texi (Category codes): \makeactive`\\ -> \makeactive\\. + + * doc/userdef.texi (Packages known to work): Added warnings about + supp-mis.tex and \pagecolor (pdftex.def). + +2006-05-01 Oleg Katsitadze + + * eplain.ini: New file (used by TeX Live to generate .fmt file). + + * Makefile: Generate TDS-compliant distro. Added PDF and HTML to + the distro. + (eplain.tex): Updated location of mkdist-merge. + + * doc/Makefile: Updated location of pdfcrop.pl. Use `-quality + 75' option to convert to reduce image sizes. Added lscommnt demo. + (eplain/index.html): Copy images to eplain/ instead of symlinking. + (clean, mostlyclean): Don't delete JPEG images, they are in the + distro. + (distclean): Don't delete PDF and HTML, they are in the distro. + + * README.TDS: New file (README at the top of the distro tarball). + + * add-date, add-version, fix-checksum, merge, pdfcrop.pl, util/mkdist-add-date, util/mkdist-add-version, util/mkdist-fix-checksum, util/mkdist-merge, util/pdfcrop.pl: + Moved the support scripts to util/. + + * demo/Makefile, demo/lscommnt.pdf, demo/lscommnt.tex: + New demo (listings with highlighted comments). + + * test/dvipdfm.tex, test/epstopdf.tex, test/hlcite.tex, test/hlfoot.tex, test/hlidx.mst, test/hlidx.tex, test/hlink.tex, test/hypertex.tex, test/indexvrb.tex, test/pdftex.tex, test/soultest.tex, test/xrefwarn.tex: + Added `public domain' header. + +2006-04-30 Oleg Katsitadze + + * test/listing.tex: Added test for the \nolastlinelisting hook. + * xeplain.tex (nolastlinelisting): New listing hook to omit the + last (empty) line of the file. + + * xeplain.tex (@removebox): Preserve \box0 and use it instead of + the constructed \box2, since the latter does not preserve the + effect of a possible \hbox to 0pt (produced by, e.g., \llap). + + * test/contents.tex: Test for integer PARTs (\tocentry). + * xeplain.tex (ifinteger,isinteger): New macros. + (writenumberedcontentsentry): When PART argument is an integer, + write \tocentry{PART}... to the .toc file. + + * test/indexvrb.tex: New file. + * xeplain.tex: Indexing macros now read TERM and SUBTERM + arguments verbatim, to allow catcode changes within the + arguments. + +2006-04-23 Oleg Katsitadze + + * xeplain.tex (hlidx, hlidxpage): Do not rely on a CS with the + empty name to be undefined, instead check PAGEENCAP parameter + explicitly. + +2006-04-19 Oleg Katsitadze + + * xeplain.tex (@@href): Got rid of \@hrefhash, made \hlhash + equivalent to \@hrefhash. + +2006-04-17 Oleg Katsitadze + + * xeplain.tex (hldriver@pdftex, hldriver@dvipdfm): + Removed spurious spaces in \special's. + +2006-04-13 Oleg Katsitadze + + * eplain.tex, xeplain.tex (href): New macro. + +2006-04-12 Oleg Katsitadze + + * xeplain.tex (hl@getparam): Allow special chars (like # and ~) + in the LABEL argument (for URLs). + + * doc/hlink.texi: Wrapped some long option lists. + + * xeplain.tex: New \For loop, use it in hyperlink macros instead + of \for. + +2006-04-09 Oleg Katsitadze + + * doc/hlink.texi: Index terms. + +2006-04-09 Karl Berry + + * doc/hlink.texi: xref for \hldest. + +2006-03-30 Oleg Katsitadze + + * doc/hlink.texi (URL hyperlinks: url): Note on automatic link + coloring. + +2006-03-26 Oleg Katsitadze + + * test/hlidx.tex: Minor formatting. + + * xeplain.tex: Don't use xrefs for defining index page anchors, + to avoid messages about redefined xref labels. + + * test/hlfoot.tex: Select `pdftex' driver by default. + * test/dvipdfm.tex: Update: `dvipdfm' now is not the default driver. + + * xeplain.tex: Made all user-visible \hl* macros report errors + until hyperlinks are enabled. + + * eplain.tex, xeplain.tex (@fineqrefn): + Bugfix: \hlend -> \hlend@impl{eq}. + + * test/xrefwarn.tex: New file. + * xeplain.tex: Added warnings about multiply defined xref labels + (from Tomas Penicka ). + +2006-03-25 Oleg Katsitadze + + * doc/userdef.texi (Environment for loading packages): + More details on \eplaininput. + * doc/userdef.texi (Packages known to work): \ttfamily. + * xeplain.tex: Correct definition of \ttfamily. + + * doc/userdef.texi (Packages known to work): epstopdf.sty. + * test/epstopdf.tex: New file. + + * demo/Makefile (xhyper.pdf): Added prerequisites. + (maintainer-clean): New rule. + * demo/xhyper.tex: graphics.sty -> graphicx.sty. + + * doc/hlink.texi, doc/userdef.texi: + References to the `Demo files' section. + + * doc/hlink.texi, test/hlfoot.tex, xeplain.tex: + Footnote hyperlinks are now off by default. + + * doc/hlink.texi (URL hyperlinks: url): Older url.sty's do not work. + + * doc/userdef.texi (Environment for loading packages): + \eplaininput, \packageinput + * xeplain.tex (\beginpackages): \eplain@input -> \eplaininput. + + * doc/userdef.texi (Packages known to work): + Older versions of url.sty not working in plain TeX. + +2006-03-22 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-03-15 Oleg Katsitadze + + * doc/userdef.texi: Parenthesized the @pxref refs. + + * doc/userdef.texi: Punctuation. + + * doc/eplain.texi, doc/hlink.texi: Added doc on the hypertex driver. + + * test/hypertex.tex: New file. + + * xeplain.tex: + More defs for LaTeX: the `draft' option to graphic{s,x}.sty; and + warnings from epstopdf.sty when graphics.sty is not loaded. + + * xeplain.tex: + Bugfix: the `nolinks' driver now redefines \hl@setparam so that + the macros \hldesttype, \hldestopts, \hltype and \hlopts avoid + error messages about "unknown" options and types. + + * xeplain.tex: Added hypertex driver. + +2006-03-14 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-02-24 Oleg Katsitadze + + * test/soultest.tex: New file. + +2006-02-14 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-01-27 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2006-01-13 Karl Berry + + * doc/.cvsignore: . + + * doc/eplain.texi, ChangeLog, doc/Makefile, doc/eplain.info, doc/eplain.pdf: + move contents + +2006-01-12 Karl Berry + + * doc/eplain.texi: move @contents to front; also include + @shortcontents. + * doc/Makefile (eplain/index.html): don't try to create links if + they already exist. + * doc/.cvsignore: ignore links, etc. + And upload to lulu ... + +2006-01-06 Oleg Katsitadze + + * doc/progdef.texi (\ifempty): New subsection. + +2006-01-05 Oleg Katsitadze + + * doc/intro.texi: Reference to David Walden's article. + + * INSTALL, doc/install.texi: Removed info on etex.fmt and emtex. + Updated recommended installation locations. + + * doc/eplain.texi: Added variable index (for environment vars in + install.texi) and redirected program and variable indices into + concept index. + + * Makefile: Removed etex.tex. + * etex.tex: Removed. + + * xeplain.tex: Improved hyperlink messages. + + * doc/Makefile: Use texi2dvi --pdf instead of texi2pdf. + + * xeplain.tex (beginpackages): Save and restore \input to avoid + redefinition by miniltx.tex and packages (\packageinput stores the + redefinition). + + * test/usepackage.tex: Added \enablehyperlinks (this test depends + on hyperlinks being enabled). Added test for \urldef from + url.sty. + + * xeplain.tex: Added \protected@edef for \urldef from url.sty. + (hldriver@nolinks): The label argument to \hlstart and \hldest + must be passed to \write-1 _fully expanded_, otherwise macros that + the label uses may become redefined/undefined by the time the page + is shipped out and the \write is executed (this resulted in URLs + defined with \urldef to fail under the nolinks driver). + (@generalref): Use \@generalref@class instead of \temp, since + \@generalrefoptarg can possibly trash \temp. + +2005-12-26 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2005-12-23 Oleg Katsitadze + + * doc/userdef.texi: Changed location of ltpictur.pdf. + +2005-12-21 Oleg Katsitadze + + * demo/.cvsignore, demo/ctan_lion_350x350.png, demo/xhyper.pdf: + Image for the xhyper.tex demo and the output. + + * doc/Makefile: + Added rules for creating JPG images from the demos (for the html + docs). + +2005-12-20 Oleg Katsitadze + + * doc/userdef.texi (Contents): Tell that \writetocentry reads + \tocfilebasename only once. + (Tables): Corrected stale link to lifshitz.ph.utexas.edu. + (Packages known to work): Added link to Klaus Hoeppner's article + on LaTeX graphics. + + * demo/xhyper.tex: + Input ../eplain instead of eplain, in case Eplain is not (yet) + properly installed. + + * doc/Makefile: + Added _FLAG variables for each program used. Split targets like + `pdf eplain.pdf' and made pdf depend on eplain.pdf, etc. (otherwise + `make pdf' always rebuilds eplain.pdf). Added rules and dependencies + for the demo file images. + (ps): New target. + + * Makefile: + Added demo subdir. Changed all calls to Make to use $(MAKE). + (ps): New target. + + * pdfcrop.pl, demo/Makefile, doc/demo.texi: New files. + + * AUTHORS: Added pdfcrop.pl. + + * demo/xhyper.tex (Top comment): + \, only works in math mode in plain TeX (unlike in tugboat + format). + + * doc/hlink.texi (URL hyperlinks): + Showed how to have colored links instead of boxed links. + (Footnote hyperlinks): Showed how to turn off footnote hyperlinks. + (Hyperlink driver nolinks): Showed the proper way to + \enablehyperlinks for the dual links/nolinks output. + (Setting default types and options): Example of how to turn off + boxes for the links. + + * doc/eplain.texi: Changed the title. Included demo.texi. + +2005-12-14 Oleg Katsitadze + + * demo/xhyper.tex: New file. + +2005-10-11 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2005-10-09 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2005-09-25 Oleg Katsitadze + + * Makefile, doc/Makefile: Remove intermediate files from the + tarball. NOTE: It was agreed not to include aux, toc, and index + files into the tarball, because if the user compiles the manual + with the command `tex eplain.texi' for a different paper size + (specified, e.g., in texinfo.cnf), then the references, TOC and + indexes will be off without the user knowing about it. + +2005-09-23 Oleg Katsitadze + + * Makefile: + Added intermediate files (aux, toc, ??, ??s) to MANUALS so that + they are included in the tarball (later reverted, see above). + + * doc/Makefile: + (clean): Leave intermediate files (aux, toc, ??, ??s) in tarballs + so users can easily compile docs (later reverted, see above). + (distclean): Remove eplain.html. + (maintainer-clean): Remove the intermediate files. + (html): Build also --no-split doc. + + * Version 3.0 (released 2005-09-20) + + * Makefile: Added test/*.eps to the list of test files. + +2005-09-20 Oleg Katsitadze + + * eplain.tex, Makefile, NEWS, doc/eplain.info, doc/eplain.pdf, doc/eplain.texi: + Version number update. + + * doc/Makefile (info): Added --no-split option. + + * doc/eplain.texi, doc/hlink.texi: New documentation for hyperlinks. + + * doc/userdef.texi: + Added references to implicit hyperlink subsections. Punctuation + corrections by Karl Berry. + + * doc/progdef.texi (Page list and page range parsers): New section. + + * test/example.eps: New file (from PSfrag). + + * test/dvipdfm.tex, test/hlcite.tex, test/hlfoot.tex, test/hlidx.tex, test/hlink.tex, test/pdftex.tex, test/usepackage.tex: + Updated to the changes. + + * NEWS: Updated for the upcoming release 3.0. + + * eplain.tex, xeplain.tex: + Added color support for hyperlinks. Completely reworked hyperlink + option setting (added \hl[dest]{type,opts}). Renamed `uri' link + types to `url'. + +2005-09-19 Karl Berry + + * AUTHORS: alphabetize + +2005-09-15 Oleg Katsitadze + + * doc/userdef.texi (Environment for loading packages): + Changed @emph{preamble} to @dfn{preamble}. + + * doc/intro.texi, doc/userdef.texi: + Replaced a bunch of @w{foo bar} with foo@tie{}bar. + +2005-09-11 Oleg Katsitadze + + * test/cite.tex, test/xampl.tex: Removed \mbox definitions. + +2005-09-07 Karl Berry + + * doc/invoke.texi: pxref in parens + +2005-09-07 Oleg Katsitadze + + * doc/invoke.texi: + Added ifpdf.sty and path.sty to the list of incorporated files. + Added reference to texi2dvi. + + * doc/userdef.texi (Citations): (Indexing): Added references to texi2dvi. + +2005-09-03 Karl Berry + + * doc/invoke.texi: missing punct + +2005-08-30 Oleg Katsitadze + + * doc/userdef.texi: + Changed paths on CTAN hosts to actual links on www.ctan.org + (Packages known to work): Added reference to \begin{picture} and + \end{picture} + + * doc/intro.texi: + Changed La@TeX{} to @LaTeX{}. Updated mailing list addresses. + + * doc/arrow.texi: Changed La@TeX{} to @LaTeX{}. + + * doc/eplain.texi, doc/userdef.texi (Equation references): + Added doc on referring to empty labels. + (Loading LaTeX packages): New section. + + * test/usepackage.tex: New file. + + * eplain.tex, xeplain.tex: Added \@inmatherr needed by autopict.sty + +2005-08-29 Oleg Katsitadze + + * eplain.tex, xeplain.tex: Added support for LaTeX packages. + +2005-08-25 Oleg Katsitadze + + * doc/progdef.texi (Category codes): Corrections to the new doc + on \makeat{letter,other} (thanks to Karl Berry, as always). + + * doc/progdef.texi, doc/eplain.info, doc/eplain.pdf (Category codes): + Added doc on \makeatletter and \makeatother. + + * xeplain.tex: Added \makeatletter and \makeatother. + +2005-08-23 Oleg Katsitadze + + * doc/eplain.info, doc/eplain.pdf, doc/progdef.texi (Auxiliary files): + Added doc on optional arg to \testfileexistence. + (User-defined environments): Removed spurious indentation. + +2005-08-21 Oleg Katsitadze + + * README: Added description of util dir. + + * doc/eplain.info, doc/eplain.pdf, doc/userdef.texi (Page + references): Updated. + (Modifying index entries): Updated. + (Customizing indexing): Added docs on customizing see entries and + on trimsee. + + * util/trimsee: Added --help and -v|--version options. + + * xeplain.tex, eplain.tex: Added italics correction to + \indexsee[also] (thanks to Dan Luecking ), + downcased See. + +2005-08-20 Oleg Katsitadze + + * Makefile: Added util and scripts. + + * util/idxuniq, util/trimsee: New file. + +2005-08-19 Karl Berry + + * btxmac.tex: simplify license to be like plain.tex + +2005-08-18 Oleg Katsitadze + + * doc/eplain.pdf, doc/eplain.info, doc/eplain.texi, doc/userdef.texi (Equation references): + Made into section. + (Checking for pdfTeX...): New section (documents ifpdf.sty). + +2005-08-17 Oleg Katsitadze + + * Makefile, doc/Makefile: Rearranged. + + * manifest, tarchive: Removed (Makefile now does the packaging). + + * MANIFESTO: Removed. + +2005-08-15 Oleg Katsitadze + + * eplain.tex, xeplain.tex: Got rid of the homegrown \ifpdf. + + * xeplain.tex, AUTHORS, eplain.tex, manifest, merge: + Added ifpdf.sty to Eplain. + + * ifpdf.sty: New file. + + * manifest: Removed intermediate doc/eplain.??s and multiple info + files. + +2005-08-15 Oleg Katsitadze , Karl Berry + + * README: Updated; authorship info moved to AUTHORS. + +2005-08-15 Oleg Katsitadze + + * doc/Makefile (distclean): Do not delete eplain.pdf (it is now + part of distro). + (maintainer-clean): Delete eplain.pdf. + + * doc/eplain.kys, doc/eplain.pgs, doc/eplain.tps, doc/eplain.vrs: + Removed. + + * AUTHORS: New file. + +2005-08-15 Karl Berry + + * doc/texinfo.tex: update from texinfo + +2005-08-15 Oleg Katsitadze + + * manifest: Removed doc/*.t2p files (we don't use tex2page anymore). + + * doc/eplain.t2p, doc/btxdoc.t2p, doc/texinfo.t2p: Removed (we + don't use tex2page anymore). + + * manifest: Include .mst file(s) from test/ in tarball. + + * test/dvipdfm.tex, test/hlcite.tex, test/hlfoot.tex, test/hlidx.mst, test/hlidx.tex, test/hlink.tex, test/pdftex.tex: + New test files for hyperlinks. + + * btxmac.tex: Changes required to support hyperlinks in bibliography. + + * xeplain.tex: Added hyperlink support. + +2005-08-14 Karl Berry + + * doc/.cvsignore, doc/eplain.info: clean + + * doc/Makefile: eplain only + + * doc/arrow.texi, doc/eplain.pdf, doc/eplain.texi, doc/gpl.texi, doc/index.texi, doc/install.texi, doc/intro.texi, doc/invoke.texi, doc/progdef.texi, doc/userdef.texi: + make most of the manual public domain + +2005-08-14 Oleg Katsitadze + + * doc/userdef.texi (Indexing): dropped reference to ftp.math.utah.edu + +2005-08-13 Oleg Katsitadze + + * doc/eplain.texi Removed pagesize specifications. + (@menu): Corrected nodes, added detailed node listing for Indexing. + + * doc/userdef.texi (Indexing): Updated stale link to MakeIndex on + ftp.math.utah.edu + (@menu): Changed tabs to spaces in Indexing node. + (Indexing): changed references to MakeIndex from @xref to @url + + * doc/Makefile (../INSTALL): Adjusted sed command to the new + output from makeinfo (old one resulted in empty ../INSTALL). + + * ChangeLog: Merged with doc/ChangeLog (old doc entries at the bottom). + + * doc/ChangeLog: Removed (merged with ChangeLog). + +2005-08-13 Karl Berry + + * doc/texinfo.tex: update from texinfo + + * doc/progdef.texi: typo + + * doc/.cvsignore, doc/eplain.cps, doc/eplain.fns, doc/eplain.info-1, doc/eplain.info-2, doc/eplain.info-3, doc/eplain.info-4, doc/texinfo.tex: + omit intermediate files and delete old info files from repository + +2005-08-13 Oleg Katsitadze + + * arrow.tex, xeplain.tex: Header update. + + * COPYING: Added GPL v.2 for arrow.tex + + * ChangeLog, MANIFESTO, Makefile, NEWS, PROJECTS, README, add-date, add-version, fix-checksum, merge, tarchive, test/allref.tex, test/boxes.tex, test/boxit.tex, test/catcode.tex, test/center.tex, test/cite.bib, test/cite.tex, test/citeall.tex, test/citealph.tex, test/citeapa.tex, test/citebegin.tex, test/citecust.tex, test/citenote.tex, test/citex.tex, test/colfootn.tex, test/colrule.tex, test/column.tex, test/column2.tex, test/column3.tex, test/commdiags.tex, test/contents.tex, test/displine.tex, test/double.tex, test/double2.tex, test/ecommdiag.tex, test/emergncy.tex, test/env.tex, test/eqdef.tex, test/eqref.tex, test/filexist.tex, test/flynn.tex, test/footnote.tex, test/frac.tex, test/gcol.tex, test/ian.tex, test/index.tex, test/jan.tex, test/justify.tex, test/knuth.bib, test/label.tex, test/latexcite.tex, test/liang.tex, test/list.tex, test/listing.tex, test/logo.tex, test/loop.tex, test/loopnext.tex, test/mag.tex, test/makecol.tex, test/margin.tex, test/matrix.tex, test/mdisplay.tex, test/names.tex, test/noarrow.tex, test/nobib.tex, test/nonouter.tex, test/optional.tex, test/outer.tex, test/page.tex, test/path.tex, test/pcol.tex, test/psfont.map, test/rex.tex, test/rule.tex, test/sidx.tex, test/subdef.tex, test/tenenb.tex, test/tenenb2.tex, test/test.tex, test/time.tex, test/truemarg.tex, test/uscore.bib, test/uscore.tex, test/verb2.tex, test/verbatim.tex, test/vlach.tex, test/whitespc.tex, test/xampl.tex, test/xref.tex: + Added "public domain" note. + + * test/nagflm.tex, test/nhm.style, test/nhm.tex, test/tables.tex: + Removed (non-public domain/outdated). + +2005-08-12 Karl Berry + + * xeplain.tex: header updates + +2005-08-12 Oleg Katsitadze + + * Makefile (pdf): New target. + (html): No need for eplain.html, use html instead. + (info): Bug correction, there is no info dir. + (btxdoc): New target. + + * 00Description: Removed. + +2005-08-12 Karl Berry + + * CVSROOT/checkoutlist, CVSROOT/commitinfo, CVSROOT/config, CVSROOT/cvswrappers, CVSROOT/editinfo, CVSROOT/loginfo, CVSROOT/modules, CVSROOT/notify, CVSROOT/rcsinfo, CVSROOT/taginfo, CVSROOT/verifymsg: + remove dup CVSROOT + +2005-08-12 Stepan Kasal + + * xeplain.tex (^^L): Remove the redefinition. + (\@setuplisting): Fix the def in the case that ^^L is not + active. + + * xeplain.tex (\readcontentsfile): Do not open toc file for + writing, to allow multiple contents + +2005-08-06 Oleg Katsitadze + + * Imported sources into CVS on sarovar.org + (http://sarovar.org/projects/eplain) + +2004-09-05 + + * Version 2.8.4 + +2004-08-31 Oleg Katsitadze + + * xeplain.tex: \indexproofunbox: add \nointerlineskip + + * xeplain.tex: \@idxwrite: Add \allowhyphens when under + \indexproofing, otherwise `infinitesimal' in + \sidx{Infinitesimal}infinitesimal won't be hyphenated. + +2004-08-31 Stepan Kasal + + * xeplain.tex: \def\endcolumns{\singlecolumn} instead of \let... + + * xeplain.tex: \makecolumns. Correct calculation of + items-per-column + +2004-07-26 Stepan Kasal , Karl Berry + + * Version 2.8.3 + * README: Fix URL + +2004-07-26 Stepan Kasal + + * xeplain.tex (\printitem): Add \nobreak before \vskip-\parskip and + (implicit) \vskip\parskip, so that a page break cannot appear + here, between the indexing \write at the start of the item. + +2004-02-28 + + * Version 2.8.2 + * Updated texnames.sty, version 1.10 + +2003-12-27 Stepan Kasal + + * xeplain.tex (\@column): Make sure there is enough space before + we start columned output. + (\@col@minlines, \@ejectpartialpenalty): New constants. + (\@columnhsize): Removed. + (\@setuplisting, \@endcolumns): Use \break instead of \eject, + when we are sure TeX is in vertical mode. + +Tue Jul 15 xx:xx:xx 2003 Dorai Sitaram + + * \setpropertyglobal, from + Oleg Katsitadze + +Mon Jan 30 xx:xx:xx 2001 Dorai Sitaram + + * packaged for CTAN + +Sat Nov 11 20:00:00 2000 Dorai Sitaram + + * Version 2.8.1 + + * \leftdisplays was not allowing pagebreaks + inside \eqalignno. Bug reported by Ludger Hentschel + . Fixed by + Donald Arsenau . + + * doc/btxdoc.bib included alongside doc/btxdoc.tex + +Sat Sep 2 13:20:00 2000 Dorai Sitaram + + * Version 2.8 + +Sun May 7 09:40:00 2000 Dorai Sitaram + + * Fixed problem where Eplain's redefinition of \iterate + was causing nameclash of \next in a TeXdraw macro. + Suggested by TeXdraw author Peter Kabal + . + +Sat Apr 9 00:17:00 2000 Adam Lewenberg + + * xeplain.tex: Fixed problem introduced when double column uneven + bug was `fixed'. + +Sun Apr 25 22:30:00 1999 Adam Lewenberg + + * doc/progdef.texi: Added a section on user-defined environments + to progdef.texi and fixed a few typos in documentation. Suggested + by Paul Abrahams. + +Thu May 14 11:30:00 1998 Adam Lewenberg + + * xeplain.tex: Changed \columnfill after suggestion of + Helmut Jarausch . + +Wed Dec 5 09:10:00 1997 Adam Lewenberg + + * Version 2.7. + + * xeplain.tex: Added the control sequence \gutterbox as a hook + to add arbitrary vertical material between columns in + multi-column mode. + +Wed Mar 26 07:17:00 1997 Adam Lewenberg + + * xeplain.tex: Moved an \obeywhitespace to the end of the + definition of \verbatim to remove spurious space. + Suggested by Dorai Sitaram. + +Wed Jan 28 08:00:00 1997 Adam Lewenberg + + * xeplain.tex: Added \def\@emptymarkA{\@emptymarkB} so that + \ifempty\undefined is false. Suggested by Stanislav Brabec. + +Sat Oct 5 18:11:00 1996 Adam Lewenberg + + * xeplain.tex: Changed a line in the definition of \@fineqdefn + to remove a \noexpand which seemed to be causing a problem + with \eqdef. + +Tue Sep 24 10:25:00 1996 Adam Lewenberg + + * xeplain.tex: Added some code to multiple columns so that + when switching from multi- to single-columns the last line or + so does not get lost. Let's hope it works; added a \newif. + +Wed Apr 1 10:11:00 1996 Adam Lewenberg + + * arrow.tex: changed \smash to \smash@@ (a synonym for plain's + smash) so that arrow.tex works with amstex. + + * xeplain.tex: Put a test at the start so that eplain.tex is loaded + only once. + + * xeplain.tex: changed -1in to -1truein in margin macros; + Macros affected: + \@finishtopmargin + \@finishleftmargin + \@computebottommargin + \@computerightmargin + \indexsetmargins. + Also, initialize \paperheight to 11truein and \paperwidth to + 8.5truein when \mag is not 1000. + + These changes forced a redefinition of \magnification in the event + that \magnification is called AFTER eplain.tex is \input (in + particular, when \magnification is used with an eplain .fmt). + + * xeplain.tex: changed {toc} to {#1} in the definition of + \readcontentsfile to allow more general use. + + * merge: the merge script improperly replaced "xeplain" by "eplain" + in too many places. + +Mon Nov 13 14:14:28 1995 Karl Berry + + * btxmac.tex: Update for Oren's new 0.99k. + +Tue Mar 14 11:36:55 1995 Karl Berry + + * xeplain.tex: Doc fix. + +Sat Apr 30 05:58:31 1994 Karl Berry (karl@cs.umb.edu) + + * Version 2.6. + + * xeplain.tex (toc commands): Rewrite to allow general toc's. + + * xeplain.tex: Include indexing commands. + +Sun Apr 24 14:59:59 1994 Kathy Hargreaves (karl@cs.umb.edu) + + * xeplain.tex (\eqalignno): put \hfil back in (from plain) front of + first \@align, so lhs will be right justified. + +Fri Apr 15 17:46:39 1994 Karl Berry (karl@ra.cs.umb.edu) + + * merge: Split arrow into pre- and post-catcode changes. + * xeplain.tex: Read both parts. + +Wed Mar 30 14:34:52 1994 Karl Berry (karl@ra.cs.umb.edu) + + * xeplain.tex: Globally replace \dimen0 with \dimen@, why not. + +Wed Mar 30 13:19:59 1994 Karl Berry (karl@cs.umb.edu) + + * Version 2.5. + + * xeplain.tex (\@makeverbatimdoubleescape): New macro from + dorai@cs.rice.edu. + (\verbatimescapechar): Call it. + +Mon Mar 28 11:09:03 1994 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\@maybewarnref): Call \ref at the end. + +Tue Mar 22 10:48:01 1994 Karl Berry (karl@cs.umb.edu) + + * Version 2.4. + +Tue Mar 15 12:01:57 1994 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\@maybewarnref): New macro. + (\ref): Define to that initially. + (\eplainref): Name the real definition this. + +Sat Mar 12 15:32:32 1994 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\@columnsplit): Omit doing the looping; it causes + strange column splits on my index tests. + +Tue Mar 8 10:59:31 1994 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\@columns): Correct for one too many gutters. + +Sat Mar 5 15:16:47 1994 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\@numcolumns): Remove \newcount in favor of a \chardef. + (\columnfill): New macro. + +Thu Mar 3 14:31:16 1994 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\@oldandcode, \@plainnew{if,dimen}): New control + sequences, so we can read arrow.tex conditionally a la bibtex. + + * xeplain.tex (\@oldatcatcode): Rename to \@eplainoldatcode, so + btxmac and arrow's redefinitions don't affect us. + +Sat May 22 11:24:31 1993 Karl Berry (karl@cs.umb.edu) + + * Makefile.in (dist): Run gzip -9. + +Sun Apr 11 15:19:18 1993 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\@eqdefn): \@definelabel after the \definexref. + + * xeplain.tex (\xrlabel): Append an `x' after the _. + +Mon Mar 15 08:42:49 1993 Karl Berry (karl@cs.umb.edu) + + * btxmac.tex (\@readbblfile): Let our default \end be \@gobble. + + * btxmac.tex (\@readbblfile): Don't define \begin and \end if + \begin is already defined. + + * btxmac.tex (\@onecitation): Call \@printcitelabel. + (\@printcitelabel): New macro. + +Mon Mar 1 06:26:46 1993 Karl Berry (karl@cs.umb.edu) + + * Version 2.3. + +Tue Feb 23 16:52:49 1993 Karl Berry (karl@cs.umb.edu) + + * Makefile.in (dist): Copy info files to my local info directory. + +Sun Feb 21 11:07:38 1993 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\definexref, \ref, etc.): New macros. + (\@eqdefn, \writeitemxref, \xrdef): Use \definexref. + + * xeplain.tex (\{set,get}property): New macros from generic. + + * xeplain.tex (\tokstostring): This is no longer defined. + +Sat Feb 20 08:07:12 1993 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\hook{append,prepend,action,actiononce,run}): New + macros. + + * xeplain.tex (\expandifdefined): Remove. + + * Makefile (default): Change default to `eplain.tex'. + + * xeplain.tex (\toks@ii): New definition. + +Fri Feb 5 08:07:21 1993 Karl Berry (karl@cs.umb.edu) + + * Makefile (dist, eplain.tex): Pass version explicitly. + +Sun Jan 17 14:08:14 1993 Karl Berry (karl@cs.umb.edu) + + * Makefile (dist): Copy add-version. + +Sun Dec 27 17:00:59 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\csn, \ece): New macros. + +Fri Dec 18 10:11:33 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\expandifdefined): New macro. + +Sun Nov 22 12:03:13 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\ifempty, \@@ifempty): Restore from an old btxmac, + as some people were using them. + +Wed Nov 18 11:15:16 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex: Doc fix. + +Thu Nov 12 17:52:24 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\if@leftdisplays): New conditional. + (\{left,centered}displays): Set it and test it appropriately. + + * xeplain.tex (\displaysetup): Rename to \leftdisplaysetup. + + * xeplain.tex (\centereddisplays): Don't set \displaysetup to + \relax, just go back to the \previouseverydisplay. + +Wed Nov 11 07:08:18 1992 Karl Berry (karl@cs.umb.edu) + + * Version 2.2. + +Mon Nov 9 09:50:43 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\{,end}orderedlist): Synonyms for \{,end}numberedlist. + +Fri Nov 6 15:19:03 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\@removebox): Don't use \lastbox unless we're in + horizontal mode. + ( ): \let to `\ ', instead of \def. + +Mon Oct 19 09:10:56 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\boxit): Define to be \long. + +Fri Oct 9 10:19:05 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex (\everylist): New toks register. + (\beginlist): Expand it. + +Thu Oct 8 17:42:33 1992 Karl Berry (karl@cs.umb.edu) + + * Makefile (topfiles): Add `NEWS'. + + * xeplain.tex (\footnoterulewidth): Define as 2in, not 2true in. + Why did Knuth do this? + +Fri Oct 2 11:48:26 1992 Karl Berry (karl@cs.umb.edu) + + * xeplain.tex: doc fix. + +Sat Sep 19 17:32:44 1992 Karl Berry (karl@hayley) + + * xeplain.tex (\xrlabel): set the catcode of _ to 8 before the + definition, to protect ourselves. (From adam@symcom.math.uiuc.edu) + +Tue Aug 25 12:06:50 1992 Karl Berry (karl@hayley) + + * xeplain.tex: save and restore the catcode of @ as we do with + btxmac.tex. + +Tue Aug 11 07:54:52 1992 Karl Berry (karl@hayley) + + * xeplain.tex (\fmtversion): use `23 April 1964' style instead of + Unix-y timestamp style. + +Sat Aug 8 12:04:29 1992 Karl Berry (karl@hayley) + + * Makefile (eplain.tex): depend on Makefile. + +Fri Aug 7 14:43:22 1992 Karl Berry (karl@Prometheus) + + * xeplain.tex (\displayhook): remove this \newtoks. + (\leftdisplays): don't insert it into \everydisplay. + +Fri Jul 31 17:00:23 1992 Karl Berry (karl@hayley) + + * Makefile (topfiles): use *.sty, not just texnames.sty. + +Sat Jul 25 17:23:10 1992 Karl Berry (karl@hayley) + + * path.sty: new version (with Phil's blessing). Changes recorded + in the file itself. + +Fri Jun 19 09:17:04 1992 Karl Berry (karl@hayley) + + * xeplain.tex (\@lefteqalignnonoalign): use \parindent=0pt instead + of \noindent to lose the indentation. + +Thu Jun 11 09:13:14 1992 Karl Berry (karl@hayley) + + * arrow.tex: new version from Steven, changes only the license. + +Fri May 29 08:46:35 1992 Karl Berry (karl@hayley) + + * Makefile (dist): include add-date. + + * merge: include path.sty. + * xeplain.tex: leave marker. + * Makefile (eplain.tex): depend on path.sty. + +Mon May 25 11:16:15 1992 Karl Berry (karl@hayley) + + * xeplain.tex (\writenumberedtocentry): only expand the ``number'' + once, via \expandafter and \the\toks. + +Thu May 21 09:11:05 1992 Karl Berry (karl@hayley) + + * xeplain.tex (\verbatim, \endverbatim): do not begin and end with + \par. + +Sat May 16 11:26:19 1992 Karl Berry (karl@hayley) + + * xeplain.tex (\makeblankbox): assign to \errhelp before the + \errmessage. + +Sat May 9 06:42:57 1992 Karl Berry (karl@hayley) + + * xeplain.tex (\writenumberedtocentry): \edef the extra number, so + \the gets expanded. + +Wed May 6 15:46:52 1992 Karl Berry (karl@hayley) + + * Makefile (realclean): separate from distclean, and remove INSTALL. + +Tue May 5 11:25:44 1992 Karl Berry (karl@hayley) + + * Makefile (install): install eplain.tex. + +Tue Apr 28 08:28:29 1992 Karl Berry (karl@hayley) + + * Makefile (distclean): new target. + +Sun Apr 19 08:18:22 1992 Karl Berry (karl@hayley) + + * xeplain.tex (\expandonce): new macro from generic. + + * xeplain.tex (\@setuplisting): set \parskip = 0pt. + + * xeplain.tex (\@setuplisting): use `\listingfont' instead of \tt. + (\listingfont): new macro. + +Thu Apr 9 09:27:25 1992 Karl Berry (karl@hayley) + + * Makefile: use $(MAKE) to do submakes. + +Tue Mar 31 14:10:45 1992 Karl Berry (karl at hayley) + + * xeplain.tex (\boxit): use \ehrule and \evrule. + +Wed Mar 25 09:27:51 1992 Karl Berry (karl at hayley) + + * Version 2.1. + + * xeplain.tex (^^I): don't do \tt while defining this, as we might + not have any fonts yet. + +Sun Mar 15 06:58:33 1992 Karl Berry (karl at hayley) + + * Makefile: general cleanup. + + * btxmac.tex: version 0.99j, from Oren. + +Thu Mar 5 13:53:06 1992 Karl Berry (karl at claude.cs.umb.edu) + + * Version 2.0. + + * New btxmac.tex from Oren. + + * doc/eplain.texinfo: replace GPL. + +Mon Feb 17 14:19:27 1992 Karl Berry (karl at hayley) + + * btxmac.tex (\newcommand): use \@getoptionalarg. + (\@continuenewcommand): rewrite accordingly. + (\@newcommandwithargs): delete. + (\bibitem, \@bibitem): likewise. + + * btxmac.tex (\biblabelprint): use \p{re,ost}biblabelcontents + instead of hardwiring the \hss. + (\@readbblfile): in \@alphabibitem and \@numberedbibitem, define + the appropriate one to \hss to do the justification. + + * btxmac.tex (\@readauxfile): improve comments. + + * btxmac.tex (\biblabelprint): \kern\biblabelextrahang, instead of + \enspace. + (\@readbblfile): change comment at \biblabelextrahang. + +Fri Feb 7 08:11:07 1992 Karl Berry (karl at hayley) + + * eplain.texinfo (Cross-references): bring the list of valid chars + in references up-to-date. + +Wed Feb 5 12:05:09 1992 Karl Berry (karl at hayley) + + * xeplain.tex: remove spurious spaces from ends of definitions. + + * xeplain.tex: marker for arrow.tex. + * merge: include arrow.tex in eplain.tex. + * arrow.tex: new file. + +Mon Jan 27 06:22:43 1992 Karl Berry (karl at hayley) + + * xeplain.tex (*printmarker): use \listmarkerspace instead of + \enspace. + * eplain.texinfo (List formatting): document this. + + * xeplain.tex (\linenumberedlisting, \printlistinglineno): new + macros, from FABROADI@CUGSBVM.BITNET. + * eplain.texinfo (Verbatim listing): document them. + + * eplain.texinfo (Verbatim listing): document it. + * xeplain.tex (\verbatim): new macro, mostly from + beebe@math.utah.edu, to do inline verbatim mode. + + * eplain.texinfo (Footnotes): say that the space above the rule + and below the text is \skip\footins. + + * xeplain.tex (\center, \flush{left,right}): define with \gdef; + remove the \globaldefs = 1. + + * eplain.texinfo (Logos): add some more. + * xeplain.tex: include texnames.sty. + +Thu Jan 23 08:35:43 1992 Karl Berry (karl at hayley) + + * xeplain.tex (\writenumberedtocentry): \sanitize the section + number (arg#3), in case it happens to have weird control + sequences in it (e.g., if it's an author's name instead of a + number). + +Wed Jan 15 10:52:32 1992 Karl Berry (karl at hayley) + + * eplain.texinfo (Citations): document \bblfilebasename. + + * eplain.texinfo (Contents): document this. + * xeplain.tex (\readtocfile, \opentocfile): use \tocfilebasename. + (\tocfilebasename): defaults to \jobname. + +Fri Dec 27 11:07:41 1991 Karl Berry (karl at Prometheus) + + * btxmac.tex (\@getoptionalarg): set \@optionalnext to \relax + before using it as the arg to \@futurenonspacelet. + +Sat Dec 7 07:23:14 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\eqnofontfam): remove this. What was I thinking of? + +Fri Dec 6 12:57:16 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\eqnofontfam): change from \mit to \rm. + (\eqprint): enclose the font change in a group. + + * xeplain.tex (\displaysetup): subtract \leftskip from + \displaywidth (on the umpteenth alternation here); also, don't + \hskip by \displaywidth after advancing by the extra parameters. + Instead, use a temporary. (Otherwise, we would \hskip by too much.) + +Mon Nov 18 06:57:33 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\eqprint): call \eqnofontfam first. + (\eqnofontfam): define to be \mit. + + * xeplain.tex (\leftdisplays): decrease \hsize, so \noalign in + \eqalignno doesn't produce an overfull box. + (\eqalignno in \redefinealignmentdisplays): set \noalign to a new + definition. + (\@primitivenoalign): new synonym. + (\@lefteqalignnonoalign): new macro. + + * btxmac.tex (\bibliography): do \nobreak before reading the bbl file. + +Mon Oct 28 10:01:39 1991 Karl Berry (karl at hayley) + + * btxmac.tex (\@readbblfile): correct test for \@itemnum being + defined. + + * xeplain.tex (\@eateol): if there's text on the line with the + justify command, do the right thing. + * eplain.texinfo (Justification): document these changes. + + * xeplain.tex (\@finjustifyreturn): new macro to test for two + ^^M's in justified environments. If we find this, insert + \blanklineskipamount glue. + (\beforejustify): set up ^^M to call this; set up \@eateol. + (\flushleft, \flushright, \center): define \@eolaction instead of + defining ^^M directly; ditto for \@eateol. + +Sun Oct 6 12:02:46 1991 Karl Berry (karl at hayley) + + * btxmac.tex (\@readbblfile): don't define \@itemnum if it's + already defined. + +Fri Oct 4 14:34:58 1991 Karl Berry (karl at hayley) + + * btxmac.tex (\bblfilebasename): new macro, defaults to \jobname. + (\bibliography, \@readbblfile): use it. + +Sat Sep 28 11:46:10 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\unorderedprintmarker): new macro. + (\unorderedlist): set \printmarker to it. + (\writeitemxref): new macro, the xref-defining part from \@finli. + + * xeplain.tex (\leftdisplays): don't save and restore \eqalign, + since we don't change it in \@redefinealignmentdisplays. + +Fri Sep 27 09:45:17 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\displaysetup): no, take \leftskip into account + after all. What's going on? + +Tue Sep 24 07:10:23 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\displaysetup): don't advance \displayindent by + \leftskip, since TeX already does. + + * btxmac.tex (\nexttoken): rename to \@nexttoken. + +Fri Sep 20 10:45:23 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\displaysetup): don't subtract \leftskip when computing + \displaywidth; TeX already does that. + + * xeplain.tex (\@finli): don't call \xrlabel on the arg to + \definexref; advance \itemromannumeral. + +Thu Sep 19 16:12:14 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\xrefn): remove spurious braces from warning. + + * eplain.texinfo (Lists): document this. + * xeplain.tex (\{print,}itemromannumeral): new macros. + (\numberedmarker): use roman numerals for depth 3. + +Tue Sep 17 06:30:25 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\xrefn): remove calls to \tokstostring; \csname + works just as well. + * btxmac.tex (\@readauxfile): don't call \@setletters; only reset @. + (\@tokstostring): remove. + (\@cite...): remove calls to \@tokstostring + + * xeplain.tex (\@finli): define the item cross-reference label, as + well as write it out; no, don't, the value might be a page number. + + * xeplain.tex (\xrlabel): remove assignments, so it becomes + expandable. (This means control sequences are no longer allowed + in labels.) Change callers. + +Mon Sep 16 15:17:09 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\eqdefn): don't call \eqconstruct if we're given an + optional argument. + +Sun Sep 15 17:19:33 1991 Karl Berry (karl at hayley) + + * eplain.texinfo (Lists): document this. + * xeplain.tex (\beginlist): set \itemnumber=1; remove from \...list. + (\li): remove from the \...list macros and only + define once; allow an optional arg as a cross-reference label. + (\item{number,letter}out): rename to \print...; change caller. + (\printmarker): new macro to output the actual item marker. + +Sat Sep 14 15:55:39 1991 Karl Berry (karl at hayley) + + * btxmac.tex (\@getoptionalarg): use \@futurenonspacelet. + (\@futurenonspacelet): move from xeplain.tex. + * eplain.texinfo (Macro arguments): document this. + +Mon Sep 9 10:25:51 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\@redefinealignmentdisplays): add another \hfil + outside math mode to the template for \displaylines. + +Sun Sep 8 06:31:50 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\eqdef): call \eqconstruct here. + (\eq@eqdefn): not here. + + * eplain.texinfo: document all this. + + * xeplain.tex (\beginlist): do the \abovelistskip first. + + * xeplain.tex (\{v,h}penalty): new macros. + + * xeplain.tex (\{above,below}listskipamount, + \interitemskipamount): rename from ...skip. + (\{above,below}listpenalty, \interitempenalty): new count + registers. + (\{above,below}listskip, \interitemskip): macros which skip by the + register and include the \...penalty. + +Sat Sep 7 07:29:12 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\gtracingoff, \gloggingall): new macros. + * eplain.texinfo (Diagnostics): document them. + +Fri Sep 6 13:40:11 1991 Karl Berry (karl at hayley) + + * eplain.texinfo (Diagnostics): new command \tracingoff. + * xeplain.tex (\tracingoff): define it. + +Thu Sep 5 10:19:49 1991 Karl Berry (karl at hayley) + + * eplain.texinfo (Tables): replace reference to INRSTeX, which + seems not to exist, with one to ruled.tex, available on ymir. + +Sun Sep 1 14:53:38 1991 Karl Berry (karl at hayley) + + * xeplain.tex: change header comment. + +Thu Aug 29 16:01:43 1991 Karl Berry (karl at hayley) + + * eplain.texinfo (Formatting equation references): document + \eqconstruct. + * eplain.texinfo (Macro arguments): document \identity. + + * xeplain.tex (\identity): new definition. + (\eqconstruct): new macro \let = \identity. + (\@eqdefn): call \eqconstruct to produce the final cross-reference + text. + + * eplain.texinfo (Index): rename to `Concept index'. + + * eplain.texinfo (Top): include version number. + +Sat Aug 24 07:09:23 1991 Karl Berry (karl at hayley) + + * Makefile (dist): make a doc subdirectory in the distribution. + (dos): don't distribute all the test files. + + * Makefile (install): install the info files. + (infodir): new variable. + +Fri Aug 23 11:48:40 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\eqsubdefn): expand \@currenteqlabel before + defining it. + + * xeplain.tex (\xrlabel): use 95 instead of `\_, so \edef doesn't + break quite so badly. + +Thu Aug 22 14:42:45 1991 Karl Berry (karl at ra.cs.umb.edu) + + * xeplain.tex (\@eqdef): new command for both \eqdef and \eqsubdef + to call. + (\eqrefn): new command to do what \eqref does, except omits the + call to \eqprint. + (\eqref): call \eqrefn. + (\eqdefn): allow an optional argument to specify the text of the + label, instead of always using numbers. + (\@currenteqlabel): defined by \eqdefn to be the last defined + label. + (\eqsubdefn): use \eqrefn of \@currenteqlabel to define the text + for the subequation label. + (\@eqdef): use \eqref to generate the printed material, instead of + writing the numbers. + + * xeplain.tex (\xrlabel): remove grouping; use \count@ to save + \escapechar instead. Also, use \temp instead of \tts. + (\xrdef, \@eqdefn): remove grouping. + + * btxmac.tex (\cite): do \printcitestart before \@nocite. + + * merge: don't use /bin/date. + +Fri Aug 16 08:06:26 1991 Karl Berry (karl at hayley) + + * eplain.texinfo: fix node pointers. + +Wed Aug 14 14:53:10 1991 Karl Berry (karl at hayley) + + * Makefile (etex.fmt): rm -f etex.aux before creating it. + (merge): assume fix-checksum is in PATH. + +Mon Aug 12 19:42:07 1991 Karl Berry (karl at hayley) + + * eplain.texinfo (Formatting displays): remove the stuff about + \generaldisplay, since that's gone. + + * xeplain.tex (\eqsubdefn): new macro to define subequations. + (\eqsubdef): its companion. + (\eqsubreftext): macro to produce the text of such a reference. + (\@eqdefn): new subroutine for \eqsubdefn and \eqdefn. + (\subeqnumber): new count register. + * eplain.texinfo (Subequation references): new subsection to + describe all this. + +Mon Aug 5 07:08:55 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\eattoken): use a private control sequence for + eating, to avoid conflicts. + (\@eattoken): \let = \relax. + +Sat Jul 20 06:39:48 1991 Karl Berry (karl at hayley) + + * eplain.texinfo (Copying): replace with version 2 of the GPL. + + * eplain.texinfo (Local variables): remove this, since it's + standard now. + +Mon Jul 8 05:46:57 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\leftdisplays): new implementation. + + * xeplain.tex (\eattoken): new macro. + * eplain.texinfo (Macro arguments): document it. + +Sun Jun 23 11:13:42 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\ifundefined): new macro. + + * xeplain.tex (\blackbox): add \relax at the end. + + * xeplain.tex (\BibTeX): use \TeX. + (\MF): use \rm instead of \tenrm. + + * merge: automatically figure out the date, and version, and loop + on the checksum. + * xeplain.tex (\fmtversion): don't include real version numbers, + dates, or the checksum. + + * xeplain.tex (\environment): define \@groupname with \edef + instead of \def. + +Sat Jun 22 08:23:05 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\@isolatedendenvironmenthelp): improve this message. + +Fri May 31 06:19:40 1991 Karl Berry (karl at hayley) + + * eplain.texinfo: do @finalout, to prevent overfull boxes. + +Sun May 19 07:01:12 1991 Karl Berry (karl at hayley) + + * citecust.tex: define the \scriptfont for \ttfam, so that + undefined references work properly (found by + jxp@ccadfa.cc.adfa.oz.au). + +Wed May 15 06:52:20 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\writetocentry): pass in an empty arg to + \writenumberedtocentry, not \empty, so the \ifx works right + (found by Paul). + +Wed May 8 17:04:32 1991 Karl Berry (karl at hayley) + + * Makefile (dos): put texinfo.tex in the DOS distribution. + +Tue May 7 12:19:24 1991 Karl Berry (karl at ra.cs.umb.edu) + + * xeplain.tex (\xrefwarningfalse): forgot a \ in front of the \let + (found by Paul). + +Mon May 6 11:01:07 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\AMS): new macro from \AMSTeX. + (\AMSTeX): use it. + (\AMSLaTeX): new macro. + * eplain.texinfo (logos): document \AMSLaTeX. + + * xeplain.tex (\today): new macro. + * eplain.texinfo (Time of day): document it. + +Fri Apr 26 08:29:08 1991 Karl Berry (karl at hayley) + + * Makefile (dos): rename INSTALL, remove ORIG. + + * Version 1.9. + + * Makefile (clean): remove the .??O files that texi2dvi creates. + (eplain.dvi): use texi2dvi. + + * Makefile (dist): create the file `INSTALL' after making the info + files. + + * eplain.texinfo (Installation): bring up to date. + * README: likewise. + + * btxmac.tex: final (for now) version. + +Mon Apr 22 09:53:53 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\@writeeqdef, \@writexrdef): we don't need a + \percentchar at the end of the lines we write anymore, since + btxmac.tex does \endlinechar = -1 before reading the aux file. + + * allref.tex: new test file to test all kinds of reference + simultaneously. + +Mon Apr 15 09:15:51 1991 Karl Berry (karl at hayley) + + * eplain.texinfo (Installation): describe \noauxfile. + + * xeplain.tex (\singlecolumn): document (somewhat) better. + + * btxmac.tex: new version from Oren. + +Sun Apr 7 14:54:05 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\boxit, \boxitspace): new macros from the TeXbook. + * eplain.texinfo (Boxes): document it. + + * xeplain.tex (\hidevrule): remove a spurious space. + + * xeplain.tex (\lbracechar, \rbracechar): new definitions. + * eplain.texinfo (Category codes): document them. + +Fri Mar 29 17:13:46 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\makecolumns): set the \hsize inside each entry. + (\currentcolumn): new register. + + * xeplain.tex (\hidehrule, \hidevrule): comment these; remove a + group from \hidevrule. + +Tue Mar 26 12:20:35 1991 Karl Berry (karl at ra.cs.umb.edu) + + * xeplain.tex (\linenumber): \let = \@linenumber. + +Mon Mar 25 05:52:27 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\writenumberedtocentry): don't test #3 with an + \ifx; define it in a control sequence first. + +Mon Mar 11 08:56:43 1991 Karl Berry (karl at hayley) + + * Version 1.8. + + * xeplain.tex (\environment, \endenvironment): don't ignore spaces + at the end. + + * xeplain.tex (\@undefinedmessage): don't define it if it's + already defined. + + * xeplain.tex (\everyjob): expand the old \everyjob. + +Fri Mar 8 08:03:50 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\writenumberedtocentry): \ignorespaces after the + \fi, not before (found by abrahams@mts.cc.wayne.edu). + +Tue Mar 5 08:33:16 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\makeblankbox): give an error message if \box0 is + void. + (\@makeblankboxhelp): new control sequence with help for the error + message. + +Mon Mar 4 07:10:10 1991 Karl Berry (karl at hayley) + + * btxmac.tex (\linenumber): define this, and use it in the + undefined citation message. + * xeplain.tex: use \linenumber in the undefined messages. + + * xeplain.tex: change all \undefined's to \@undefined's. + +Sun Mar 3 07:43:11 1991 Karl Berry (karl at hayley) + + * xeplain.tex: put the BibTeX definitions in a token register; + expand it if \nobibtex is undefined. + +Fri Mar 1 16:00:38 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\@redefinealignmentdisplays): Make \displaylines + redefine \eqprint, so the equation number still comes out on the + right. + + * Makefile (etex.fmt): cp /dev/null onto etex.aux, don't just + touch it. + + * xeplain.tex (\if@nobibtex): remove this; just test + \ifx\nobibtex\@undefined instead. + + * btxmac.tex (\@innernewdimen): define this. + (\if@notfirstcitation, \biblabelwidth, \biblabelextrahang, + \@numparams): define using \@inner..., since we include all of + btxmac.tex in an \if ... \fi construction in eplain.tex now. + +Wed Feb 27 08:02:24 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\@ddisplaytest): this time really remove the + trailing spaces; I didn't test it properly before. + + * eplain.texinfo (Justification): remark that setting the + linespacing values inside \center et al. is useless. + +Sat Feb 23 08:42:12 1991 Karl Berry (karl at hayley) + + * xeplain.toc (\opentocfile): make the \@tocfileopenedtrue be + \global (from Paul). + + * xeplain.tex (\fullmonthname): new macro. + * eplain.texinfo (Time of day): document it. + +Fri Feb 22 15:11:14 1991 Karl Berry (karl at hayley) + + * eqref.tex: say that the output of the \displaylines test should + look bad. + + * xeplain.tex (\@displaytest, \@ldisplaytest): use \noexpand on + the argument, to prevent obscure errors (that might never + actually occur, I'm not sure). + + * xeplain.tex (\@ddisplaytest): remove trailing spaces and/or + surrounding braces from the argument to \eqdef (from + jxp@ccadfa.cc.adfa.oz.au). + (\@removetrailingspaces): new macro. + +Sat Feb 2 09:25:30 1991 Karl Berry (karl at hayley) + + * fileexist.tex: new file to test the various possibilities. + + * btxmac.tex (\@testfileexistence): allow an optional argument + specifying the root name of the file. + (\@finishtestfileexistence): new macro. + + * merge: merge all of btxmac into eplain.tex. + * xeplain.tex: rearrange slightly to accommodate this. + +Fri Jan 25 11:34:09 1991 Karl Berry (karl at hayley) + + * Version 1.7 (released for ASI only). + + * Makefile (dist): automatically include btxdoc.tex and + texinfo.tex in the distribution. + + * Makefile (etex.fmt): don't print all the stupid \font... lines. + + * contents.tex: make a subsection include \cos, to test the + non-expansion. + * xeplain.tex (\sanitize, \gobblemeaning): new macros from a + TUGboat article by Ron Whitney. + (\writenumberedtocentry, \writetocentry): do not expand the text + of the heading. + * eplain.texinfo (Contents): say that the title text is not + expanded. + +Thu Jan 3 09:07:05 1991 Karl Berry (karl at hayley) + + * xeplain.tex (\beginlist): don't set \parskip = 0pt, in case + \parindent is zero. + (\printitem): do \vskip-\parskip, so we don't get extra space if + \parskip is nonzero. + + * list.tex: test a multiple-paragraph list item with \parindent=0 + and \parskip nonzero. + +Mon Dec 17 12:57:41 1990 Karl Berry (karl at hayley) + + * xeplain.tex (` ' in \obeywhitespace): define to be `\ ' using + \def instead of \let, to allow redefinition. + +Wed Dec 12 14:34:28 1990 Karl Berry (karl at aten) + + * Version 1.6. + + * eplain.texinfo (Formatting bibliographies): \biblabelextrahang + and \parskip must be set inside \bblhook. + + * Makefile (etex.fmt): make sure etex.aux exists. + +Mon Dec 10 16:09:30 1990 Karl Berry (karl at aten) + + * eplain.texinfo (Formatting bibliographies): describe + \biblabelextrahang and \bblsc. + + * xref.tex: don't unconditionally input eplain.tex. + + * xeplain.tex: don't set \@citewarningtrue after all; that makes + it so we always warn about labels. + * btxmac.tex (\@readauxfile): set \@citewarningtrue if there was + an aux file, so that we get warned about undefined references + when we make a format file. + + * xeplain.tex: remove misplaced comment. + +Sun Dec 9 07:52:52 1990 Karl Berry (karl at hayley) + + * xeplain.tex (\blanklineskipamount, \@finishobeyedreturn): new + definitions to generalize the handling of blank lines in + \obeywhitespace. + * eplain.texinfo (Obeying spaces): document this. + + * xeplain.tex (\obeywhitespace): use `\ ' instead of + `\alwaysspace', and remove the latter. + * eplain.texinfo (Obeying spaces): remove reference to \alwaysspace. + + * xeplain.tex: set \@citewarningtrue after reading the stuff from + btxmac, so that we get undefined label messages when we use a + format file. + +Sat Dec 1 07:44:52 1990 Karl Berry (karl at hayley) + + * eplain.texinfo (Installation): refer to `\fmtversion', not + `\eplainversion'. + + * btxmac.tex (\@getoptionalarg): new macro. + * xeplain.tex (\getoptionalarg): \let = to above. + * eplain.texinfo (Macro arguments): document it. + + * xeplain.tex (\futurenonspacelet): new macro from the TeXbook. + * eplain.texinfo: document it. + + * btxmac.tex (\@setletters): only check characters with codes + below 128 if we are the old TeX. + + * xeplain.tex (\@ddisplaytest): omit extra braces around the call + to \eqdef. + (\eqdef, \eqdefn): ignore following spaces. + + * xeplain.tex (\@undefinedmessage): change wording slightly. + +Fri Nov 30 10:51:02 1990 Karl Berry (karl at hayley) + + * eplain.texinfo (Installation): describe \eplain. + + * eplain.texinfo (Citations): use @file instead of @t, and make + editorial changes. + +Wed Nov 28 06:57:24 1990 Karl Berry (karl at hayley) + + * eplain.texinfo (Cross-references): escapes are catcode 0, not 1. + Also, don't put a \ in the invalid example. + + * eplain.texinfo (Allocation macros): use `proclaim' in the + example, not `innerproclaim'. + + * xeplain.tex (\alwaysspace): use \font instead of \the\font. + + * xeplain.tex (^^I): use \fontdimen2\font, instead of \tt, since + \tt might not be a font selector. + + * Makefile (etex.fmt): remove etex.aux. + + * xeplain.tex (\displayhook): new token register expanded at + \everydisplay time. + * eplain.texinfo (displays): document this. + +Tue Nov 27 08:24:41 1990 Karl Berry (karl at hayley) + + * xeplain.tex (\eqdef): make \eqno = \relax if we are inner. + * eplain.texinfo (Equation references): \eqdefn doesn't produce + anything. + + * eqref.tex: test \eqdef inside \displaylines. + + * xeplain.tex (\eplain): define to be `t'. + +Sun Nov 25 09:30:46 1990 Karl Berry (karl at hayley) + + * xeplain.tex (\eqref, \xrefn): no, that's not enough. Use + \if@citewarning here, so the \if's and \fi's match properly. + * eplain.texinfo (Citations): document \xrefwarningtrue. + (Cross-references): ditto. + + * xeplain.tex (\ifxrefwarning): define to be \if@citewarning, so + changes to the latter are reflected in the former. + +Sat Nov 24 08:21:35 1990 Karl Berry (karl at hayley) + + * xeplain.tex: say that we have two version numbers now in the + header comment. + +Thu Nov 22 10:48:35 1990 Karl Berry (karl at hayley) + + * eplain.texinfo (Equation references): \eqdef can be used in an + \eqalignno now, so \eqdefn is useful in even fewer sitations. + +Thu Nov 15 10:28:13 1990 Karl Berry (karl at hayley) + + * Version 1.5. + + * merge: remove comments from xeplain.tex as well as btxmac.tex, + and fix the checksum and filename in the final eplain.tex. + + * xeplain.tex (\if@fileexists, ...): \let = \relax, in case the + file is being read twice. + + * Makefile (etex.fmt): new rule. + +Wed Nov 14 19:02:28 1990 Karl Berry (karl at aten) + + * eplain.texinfo (Iterations): fix syntax error in example (from + bsuggs@hac2arpa.hac.com). + +Mon Nov 12 10:34:37 1990 Karl Berry (karl at hayley) + + * etex.tex: mention that plain should be loaded. + * eplain.texinfo (Installation): mention etex.tex. + + * xeplain.tex (\ifnobibtex): set to true if \nobibtex is defined. + * eplain.texinfo (Installation): describe this. + + * btxmac.tex: new version incorporating my changes from Oren. + \@citewarning has to be defined in the non-bibtex specific part. + +Sat Nov 10 08:49:07 1990 Karl Berry (karl at hayley) + + * xeplain.tex (\xrlabel): explain how _ works. + +Wed Oct 31 06:24:56 1990 Karl Berry (karl at hayley) + + * merge: make eplain.tex readonly after creating it. + +Tue Oct 30 07:52:07 1990 Karl Berry (karl at hayley) + + * eplain.texinfo: `eplain' changed to `Eplain' throughout; a few + other typos corrected. + + * btxmac.tex (\@innerdef): new macro to give an inner definition + to an outer control sequence. + (\@innernewcount, \@innernewdimen, \@innernewif, + \@innernewwrite): use it to define these macros. + * xeplain.tex: make \innernewcount et al. synonyms for the above, + and also make inner versions of all the other plain TeX macros. + * eplain.texinfo (Allocation macros): new section to document this. + + * xeplain.tex: rename \@xrlabel to \xrlabel. + * eplain.texinfo (Converting to characters): document \xrlabel. + +Sun Oct 28 08:35:20 1990 Karl Berry (karl at hayley) + + * eplain.texinfo (Cross-references): explain which characters are + valid. + + * btxmac.tex (\@setletters): change all characters with category + code 12 into category code 11, instead of writing a list. + (Also change _.) + (@setmoreletters): remove. + + * btxmac.tex (\@resetnumerals): also change the category codes of + ', `, and ". + +Sat Oct 27 09:46:54 1990 Karl Berry (karl at hayley) + + * eplain.tex becomes xeplain.tex; a shell script `merge' puts + definitions from btxmac.tex that are used in the rest of eplain + into xeplain, creating eplain.tex. Also, a new conditional, + \ifnobibtex, determines whether we read btxmac.tex or not. + (Being able to not read btxmac suggested by Paul.) + +Sun Oct 21 14:03:31 1990 Karl Berry (karl at hayley) + + * eplain.texinfo (Cross-references): users should use + \@setmoreletters, not redefine \@setletters. + +Wed Oct 17 07:14:26 1990 Karl Berry (karl at hayley) + + * eplain.tex (\eqdef): don't do \eqno if we're inner. + +Sat Oct 13 07:28:11 1990 Karl Berry (karl at hayley) + + * eplain.tex (\leftdisplayindent): new \dimen parameter + (suggested by wiawkph@dutrun.tudelft.nl). + (\leftdisplays): use it. + * eplain.texinfo (Displays): document it. + + * eplain.tex (\@ddisplaytest): new macro to find an \eqdef in a + display. + (displaysetup): call it. + +Fri Oct 12 06:27:52 1990 Karl Berry (karl at hayley) + + * eplain.texinfo: describe @menu entries. + + * eplain.tex (\topmargin, et al.): new macros. + * eplain.texinfo (Margins): new section to document them. + +Thu Oct 11 06:30:54 1990 Karl Berry (karl at hayley) + + * xref.tex: forgot \xref in front of {label2}. + +Tue Oct 9 06:48:08 1990 Karl Berry (karl at hayley) + + * eplain.tex (\xrdef): use \@xrlabel, not \xrlabel. + +Tue Sep 25 17:55:32 1990 Karl Berry (karl at hayley) + + * eplain.tex (\TeX): new macro, adds \null to plain's definition. + +Fri Sep 14 13:54:01 1990 Karl Berry (karl at hayley) + + * eplain.tex (\writenumberedtocentry): expand the third parameter + now, instead of at the time of the \write. + * eplain.texinfo (Contents): document this. + +Thu Sep 13 08:09:25 1990 Karl Berry (karl at hayley) + + * eplain.texinfo (Citations, Formatting citations, Formatting + bibliographies): emendations from Oren Patashnik + . + + * eplain.tex (\footnoterule): new macro from plain TeX, + generalized to arbitrary dimensions. + (\vfootnote): advance \splittopskip by \interfootnoteskip, so that + split footnotes have the right amount of space at the top. + * footnote.tex: test the new dimension parameters. + * eplain.texinfo (Footnotes): document all this. + +Fri Sep 7 06:38:49 1990 Karl Berry (karl at hayley) + + * Version 1.4. + +2005-08-13 Oleg Katsitadze + + * doc/ChangeLog, doc/Makefile: Added "public domain" note. + +2005-08-12 Karl Berry + + * doc/userdef.texi, doc/eplain.info, doc/eplain.texi: wording + +2005-08-12 Oleg Katsitadze + + * doc/Makefile (doc): Added btxdoc prerequisite. + (pdf): New target. + (btxdoc): New target. + (eplain.html): No need for it, html is good enough. + (distclean): Brought up-to-date with the changes. + + * doc/userdef.texi (Contents): \readtocfile does not wipe out toc + file any more, to allow multiple contents + +Sun Apr 25 22:30:00 1999 Adam Lewenberg + + * doc/progdef.texi: Added a section on user-defined environments + to progdef.texi and fixed a few typos in documentation. Suggested + by Paul Abrahams. + +Sun Dec 7 18:29:00 1997 Adam Lewenberg + + * doc/eplain.texi: Force line length of documentation to be 6.5 inches + by adding a @changepagesizes command. + +Fri Dec 5 09:10:00 1997 Adam Lewenberg + + * doc/userdef.texi: Added \gutterbox explanation to multicolumn + section. + +Sun Jun 2 09:30:00 1996 Adam Lewenberg (adam@math.uiuc.edu) + + * doc/userdef.texi: added a missing word in section on path + command. + +Mon Apr 8 12:00:00 1996 Adam Lewenberg (adam@math.uiuc.edu) + + * doc/userdef.texi: changed dimensions in section on margins from in to + true in. + +Thu Jul 28 15:41:40 1994 Karl Berry (karl@cs.umb.edu) + + * doc/userdef.texi: \{above,below}doublecolumnskip => + \{above,below}columnskip. From wiawkph@dutrun2.tudelft.nl. + +Sat Apr 30 17:51:52 1994 Karl Berry (karl@cs.umb.edu) + + * Version 2.6. + + * doc/userdef.tex (Indexing): New section. + (Contents): Describe new generic contents commands. + +Sun Apr 17 10:06:50 1994 Karl Berry (karl@ra.cs.umb.edu) + + * doc/progdef.texi (Converting to characters): Remove spurious period. + * doc/userdef.tex (Verbatim listing, Cross-references): Fix other typos. + * doc/invoke.texi: Rewrite \nobibtex section. + From adam@symcom.math.uiuc.edu. + +Wed Mar 30 14:27:21 1994 Karl Berry (karl@cs.umb.edu) + + * Version 2.5. + + * doc/userdef.texi (Verbatim listing): Document \makeverbatimescapechar. + +Tue Mar 22 10:48:01 1994 Karl Berry (karl@cs.umb.edu) + + * Version 2.4. + +Thu Mar 3 17:47:55 1994 Karl Berry (karl@cs.umb.edu) + + * doc/invoke.texi (Invoking Eplain): Document \noarrow. + + * doc/userdef.texi (Formatting bibliographies): Index extra space + between the items. + +Sun Apr 11 15:44:58 1993 Karl Berry (karl@cs.umb.edu) + + * doc/userdef.texi (Equation references): Document empty equation labels. + +Sun Apr 4 13:21:12 1993 Karl Berry (karl@cs.umb.edu) + + * doc/install.texi: Include information for emtex. + + * doc/Makefile (TEX): Be sure .. is in TEXINPUTS. + + * doc/Makefile (distclean): Remove empty .??s files. + +Mon Mar 1 06:26:51 1993 Karl Berry (karl@cs.umb.edu) + + * Version 2.3. + +Fri Dec 18 10:14:25 1992 Karl Berry (karl@cs.umb.edu) + + * doc/progdef.texi: Document \expandifdefined. + +Thu Nov 12 17:53:07 1992 Karl Berry (karl@cs.umb.edu) + + * doc/userdef.texi (Formatting displays): \displaysetup is now + \leftdisplaysetup. + +Wed Nov 11 07:08:12 1992 Karl Berry (karl@cs.umb.edu) + + * Version 2.2. + +Mon Nov 9 09:59:24 1992 Karl Berry (karl@cs.umb.edu) + + * doc/Makefile (dist): Make the Info and index files after inserting + the new version number. + +Thu Oct 22 10:46:28 1992 Karl Berry (karl@cs.umb.edu) + + * update.el (make-backup-files): Set to nil. + +Tue Aug 18 15:55:15 1992 Karl Berry (karl@hayley) + + * doc/Makefile (INSTALL): `Node: Installation' does not begin a line. + +Fri Jul 31 19:18:12 1992 Karl Berry (karl@hayley) + + * doc/userdef.texi (Verbatim): \verbatim doesn't work in macro definitions. + +Fri Jul 17 09:55:10 1992 Karl Berry (karl@hayley) + + * doc/userdef.texi (Tables): update info for ruled.tex (from + mathew@bach.crhc.uiuc.edu). + +Fri May 29 09:35:59 1992 Karl Berry (karl@hayley) + + * doc/userdef.texi (Paths): new section. + +Thu May 21 09:08:18 1992 Karl Berry (karl@hayley) + + * doc/userdef.texi (Verbatim listing): had the example wrong. + +Tue May 12 15:28:04 1992 Karl Berry (karl@hayley) + + * doc/userdef.texi (Cross-references): had sense of valid xref + catcodes inverted. + +Thu May 7 08:08:24 1992 Karl Berry (karl@hayley) + + * doc/Makefile (dist): link the .texi files. + +Wed May 6 15:41:24 1992 Karl Berry (karl@hayley) + + * doc/eplain.texi: add an `@paragraphindent'. + +Tue May 5 11:05:43 1992 Karl Berry (karl@hayley) + + * doc/Makefile (install): use a loop to install the multiple info + files. + (eplain.info): depend on *.texi. + * doc/*.texi: split up eplain.texinfo. + +Tue Apr 28 08:23:30 1992 Karl Berry (karl@hayley) + + * doc/Makefile (prefix, infodir, INSTALL_DATA): add definitions. + (distclean): new target. + (dist): put INSTALL in the distribution. + +Sun Apr 19 08:17:43 1992 Karl Berry (karl@hayley) + + * doc/eplain.texinfo (\expandonce): new subsection. + (\futurenonspacelet): change to a subsection. + (\ifundefined): might as well document this here, also. + (Expansion): new section. + + * doc/eplain.texinfo (Verbatim listing): document \listingfont. + + * doc/Makefile (eplain.dvi): tex eplain.texinfo, not eplain.cps. + +Tue Mar 31 14:12:03 1992 Karl Berry (karl at hayley) + + * doc/eplain.texinfo (Boxes): document \boxit using \e[hv]rule. + +Wed Mar 25 09:22:29 1992 Karl Berry (karl at hayley) + + * Version 2.1. + + * doc/eplain.texinfo: add section on patents and copyrights. + +Sun Mar 15 08:22:56 1992 Karl Berry (karl at hayley) + + * doc/Makefile: new file. + + +This file is public domain. diff --git a/Master/texmf-dist/doc/eplain/INSTALL b/Master/texmf-dist/doc/eplain/INSTALL new file mode 100644 index 00000000000..dcd705281b6 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/INSTALL @@ -0,0 +1,46 @@ +Installation +************ + +Your TeX installation should already contain a version of Eplain +(`eplain.tex') in its main `texmf' tree (usually under +`/usr/share/texmf/tex/eplain/' on Unix systems). To install a newer +version of Eplain, put the new `eplain.tex' (included in Eplain +distributions) in the `tex/eplain/' subdirectory of your local `texmf' +tree. The newer version you install in the local tree should override +the older one in the main tree. + + The location of the local `texmf' tree obviously depends on your +operating system and TeX installation. On Unix systems the usual +location is `/usr/local/share/texmf/'. If you don't have write +permissions for `/usr/local/share/texmf/', many installations read the +`texmf' tree in the user's home directory; `eplain.tex' then should go +under `~/texmf/tex/eplain/'. For more information about TeX directory +structure, please see +`http://www.tex.ac.uk/cgi-bin/texfaq2html?label=tds'. + + If you prefer to install `eplain.tex' in a non-standard place, set +an environment variable (`TEXINPUTS' for the Web2C port of TeX to Unix) +to tell TeX how to find it. + + If you want, you can also create a format (`.fmt') file for Eplain, +which will eliminate the time spent reading the macro source file with +`\input'. You do this by issuing a sequence of Unix commands something +like this: + + prompt$ touch eplain.aux + prompt$ initex + This is TeX, ... + **&plain eplain + (eplain.tex) + *\dump + ... MESSAGES ... + +You must make sure that `eplain.aux' exists _before_ you run `initex'; +otherwise, warning messages about undefined labels will never be issued. + + You then have to install the resulting `eplain.fmt' in your local +`texmf' tree or set an environment variable to tell TeX how to find it. +For the Web2C port of TeX to Unix, format files are usually installed +under `/usr/local/share/texmf/web2c/' or `/var/lib/texmf/web2c/'; the +environment variable is `TEXFORMATS'. + diff --git a/Master/texmf-dist/doc/eplain/NEWS b/Master/texmf-dist/doc/eplain/NEWS new file mode 100644 index 00000000000..ac08de2a900 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/NEWS @@ -0,0 +1,141 @@ +This file records noteworthy changes. This file is public domain. + +3.1 (3 December 2006) + +General: +* Rearranged the distro to comply with TDS. +* Distro now includes PDF, HTML and INFO versions of the manual. +* Removed etex.tex. + +LaTeX packages under Eplain: +* When reloading LaTeX packages, warn and skip reloading, instead of + giving an error. Suggested by Dan Luecking. +* The primitive \input is now restored after loading LaTeX packages. +* Added more "LaTeX" defs needed by: the `draft' option to + graphic{s,x}.sty; warnings from epstopdf.sty when graphics.sty is + not loaded. + +Hyperlinks: +* Added the `hypertex' driver, and made it the default driver. +* Made footnote hyperlinks off by default. +* Added the \href macro. Suggested by Dorai Sitaram. +* LABEL argument of the hyperlink macros now allow special characters + like # and ~ (useful for URLs). Suggested by Dorai Sitaram. +* Fixed a hyperlink-related bug in equation macros. +* Fixed a bug in the `nolinks' driver. +* Added \writenumberedtocline macro, which is \writenumberedtocentry + with permuted parameters. Suggested by Dorai Sitaram. +* Hyperlink macros now ignore leading spaces in option lists. +* All hyperlink macros now report errors until links are enabled. + +Cross-references, TOC and indexing: +* Added warnings about multiply defined xref labels. Suggested by + Tomas Penicka. +* Fixed \definexref to (once again) ignore following spaces. +* Indexing macros now read TERM, SUBTERM and SEE... arguments + verbatim, to allow special characters and catcode changes. + Suggested by Dorai Sitaram. +* Extended the TOC macros: when given an integer for the type of a + TOC entry, they write \tocentry{NUM}... to the .toc file. Suggested + by Dorai Sitaram. + +Programming defs: +* Added \ifinteger and \isinteger macros. +* Added \For loop which strips off leading spaces from items. + +Manual: +* Added demo subdir with demo files, and added new chapter `Demo + files' to the manual. +* Documented \ifempty, the extended \loop macro, and the new macros. +* Many small improvements and additions to the manual. + +Other: +* Added new \nolastlinelisting listing hook which omits the last + (empty) line of the file. + + +3.0 (20 September 2005) +* Eplain now hosted at Sarovar: http://sarovar.org/projects/eplain/ +* Support for hyperlinks! +* Support for (a few) LaTeX packages, notably graphicx and color. +* Incorporated ifpdf.sty into eplain.tex [2005-08-15]. +* Many improvements of double-column macros by Stepan Kasal. +* ConTeXt compatibility; do not wipe out toc file unnecessarily to + allow multiple contents. [2005-08-12]. +* Avoid pagebreak at the xref \write before a list item. [2004-07-26] +* When under \indexproofing, allow hyphenation of indexed words and + avoid shift of page body. [2004-08-31] +* New documentation for the hyperlinks and the LaTeX package support, + many improvements of the old docs. + +2.8 (2 September 2000) +* Added a section on user-defined environments to progdef.texi and + fixed a few typos in documentation. Suggested by Paul Abrahams + [25 April 1999] +* Added a fix to a buggy double-column macro that Adam Lewenberg + introduced when attempting to fix the balancing macros. + [9 April 2000] + +2.7 (14 January 1998) +* Added the control sequence \gutterbox as a hook to add arbitrary + vertical material between columns in multi-column mode. [5 December 1997] +* Removed spurious space in \verbatim macro. [26 March 1997] +* Added some code to the multiple columns section so that when + switching from multi- to single-columns lines are not lost. + [22 September 1996]. +* Changed \smash to \smash@@ in arrow.tex to allow arrow.tex to work with + amstex. [2 March 1996]. +* Changed all dimension values in margin setting macros to 'true'; redefined + \magnification so that this works. + +2.6 (2 May 1994) +* Indexing support (in conjunction with MakeIndex). +* Generalization of .toc files for lists of figures/tables, etc. +* \commdiag and other arrow macros work again. +* \eqalignno right-justifies the first column in \leftdisplays, as in + non-leftdisplays. + +2.5 (31 March 1994) +* Do not ignore first \ref command. +* Make \verbatim (and the || feature) work again (thanks to Dorai Sitaram). + +2.4 (16 March 1994) +* \catcode of @ properly restored (reported by adam@symcom.math.uiuc.edu). +* `| ' in \verbatim argument documented (also reported by adam). +* | not hardwired as the \verbatim escape character (thanks to + dorai@cs.rice.edu). +* Defining \noarrow before eplain.tex is read omits arrow macros + (suggested by Rex Shudde <0024P@NAVPGS.BITNET> and + murray@macadam.mpce.mq.edu.au.) +* Double column macros revamped (thanks to guichard@fermat.whitman.edu) so + \singlecolumn can be invoked on the same page as \doublecolumns. + 3- and 4-column typesetting also supported. + Column ejects also supported (sort of). +* \parskip set to zero before each footnote (but not for the footnote text). +* \ref and \cite conflicts with amstex described in manual. + +2.3 (1 March 1993) + +* New macros for arbitrary cross-references. +* \iterate is redefined to allow \else in loops. +* texnames.sty uses \spacefactor1000 instead of an empty hbox to handle + \TeX at the end of a sentence. +* New macros for hooks and properties. +* \centereddisplays and \leftdisplays can be repeated, and called in any + order. +* New macros \csn and \ece to do common expansion things. + +2.2 (11 November 1992) +* New \toks register \everylist, expanded at the start of every list. +* \footnoterulewidth defined as 2in, not 2true in, thus allowing the use + of \mag after reading eplain.tex. The `2true in' was Knuth's, but I + don't know why he did it. +* \obeywhitespace works inside a \vbox. +* \boxit is \long, and uses \ehrule and \evrule. +* \writenumberedtocentry expands the chapter number, so `\the + ' can be used. +* \verbatim doesn't begin and end with \par, so it can be used in the + middle of a paragraph. +* \pathafterhook added to \path in path.sty, so macros can execute + cleanup actions. +* The \path command and friends are documented in the manual. diff --git a/Master/texmf-dist/doc/eplain/PROJECTS b/Master/texmf-dist/doc/eplain/PROJECTS new file mode 100644 index 00000000000..d24baf64c58 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/PROJECTS @@ -0,0 +1,18 @@ +This file is public domain. + +How about list processing macros like those in ``Tex in Practice''? + +In TUGboat volume 11 number 3, Amy Hendrickson gives some modified +routines for \newcount that do work inside groups. Perhaps they should +be included. + +FABROADI@CUGSBVM.BITNET suggests that the verbatim macros be extended to +allow things like: + \verbatim{first line + second line + third line} +to optionally have line numbers. + +Generalize toc files to other kinds of generated listings (e.g., figures). + +Define a spec for \ifempty and write a robust macro to implement it. diff --git a/Master/texmf-dist/doc/eplain/README b/Master/texmf-dist/doc/eplain/README new file mode 100644 index 00000000000..9ec64791292 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/README @@ -0,0 +1,50 @@ +(This file is public domain.) + +This file describes the Eplain (expanded or extended plain, take your +pick) distribution. The current version number is at the beginning and +end of eplain.tex, among other places. + +See INSTALL for installation and basic usage hints. + +eplain.tex is the macros. This file is generated (by the Unix shell +script merge) from xeplain.tex, btxmac.tex, arrow.tex, and other files. +Unless you are hacking the macros, you should have no need to regenerate +the file; just use the one that's provided. If you do regenerate it, +you will need a date program which understands the %B format (GNU date does). + +doc/eplain.texi and other .texi files in the doc directory describe the +features currently provided. If you think of additional features that +would be useful, or extensions to existing ones, see email below. + +doc/eplain.info is the Info file resulting from doc/eplain.texi and +other .texi files in the doc directory, which GNU Emacs and GNU Info +can read. You'll need makeinfo, from the GNU Texinfo distribution, to +process it, if you happen to need to. Here is the line I added to the +dir file, in the top-level Emacs info directory: + * Eplain: (eplain). Expansions to plain TeX. +See http://www.gnu.org/software/texinfo for more information about Texinfo. + +The files in the test subdirectory are of course for testing of various +features, but also provide some examples of usage. + +The util subdirectory contains some useful scripts to help with "see" +and "see also" index entries, and making index entries with +hyperlinks. + +You can get the current development sources for Eplain via CVS from +sarovar, http://sarovar.org/projects/eplain. + +Most of these macros, like most of the manual, are in the public domain. +The exceptions are the commutative diagram macros (the file arrow.tex) +and the documentation for them (the file doc/arrow.texi). Both of +arrow.tex and doc/arrow.texi are under the GNU General Public +License (see the file headers for details). + +Eplain was developed as part of the book TeX for the Impatient, +published by Addison-Wesley in 1990. It is now freely available, from +http://tug.org/ftp/tex/impatient, with a free French translation. + +Eplain is currently maintained by Oleg Katsitadze. + +email: bug-eplain@tug.org +www: http://www.tug.org/eplain diff --git a/Master/texmf-dist/doc/eplain/base/AUTHORS b/Master/texmf-dist/doc/eplain/base/AUTHORS deleted file mode 100644 index b44969727ac..00000000000 --- a/Master/texmf-dist/doc/eplain/base/AUTHORS +++ /dev/null @@ -1,12 +0,0 @@ -Eplain was originally written mostly by Karl Berry. Some ideas were -suggested by Paul Abrahams, who also wrote a few of the macros. Other -macros are based on ones in The TeXbook. - -David Guichard and Adam Lewenberg improved the multicolumn macros. -Stepan Kasal has contributed several patches. -Oleg Katsitadze added the hyperlink capabilities to Eplain. -Oren Patashnik has worked tirelessly on improving the BibTeX macros. -Heiko Oberdiek wrote ifpdf.sty. -Steven Smith wrote the commutative diagram macros. -Philip Taylor wrote path.sty starting from an initial macro by Nelson Beebe. -Nelson also collected the texnames.sty which Eplain incorporates. diff --git a/Master/texmf-dist/doc/eplain/base/COPYING b/Master/texmf-dist/doc/eplain/base/COPYING deleted file mode 100644 index 3912109b5cd..00000000000 --- a/Master/texmf-dist/doc/eplain/base/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program 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. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public 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. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/Master/texmf-dist/doc/eplain/base/ChangeLog b/Master/texmf-dist/doc/eplain/base/ChangeLog deleted file mode 100644 index 8b875392f07..00000000000 --- a/Master/texmf-dist/doc/eplain/base/ChangeLog +++ /dev/null @@ -1,1750 +0,0 @@ -2005-09-20 Oleg Katsitadze - - * doc/eplain.texi, doc/hlink.texi: New documentation for hyperlinks. - - * doc/userdef.texi: - Added references to implicit hyperlink subsections. Punctuation - corrections by Karl Berry. - - * doc/progdef.texi (Page list and page range parsers): New section. - - * test/example.eps: New file (from PSfrag). - - * test/dvipdfm.tex, test/hlcite.tex, test/hlfoot.tex, test/hlidx.tex, test/hlink.tex, test/pdftex.tex, test/usepackage.tex: - Updated to the changes. - - * NEWS: Updated for the upcoming release 3.0. - - * eplain.tex, xeplain.tex: - Added color support for hyperlinks. Completely reworked hyperlink - option setting (added \hl[dest]{type,opts}). Renamed `uri' link - types to `url'. - -2005-09-19 Karl Berry - - * AUTHORS: alphabetize - -2005-09-15 Oleg Katsitadze - - * doc/userdef.texi (Environment for loading packages): - Changed @emph{preamble} to @dfn{preamble}. - - * doc/intro.texi, doc/userdef.texi: - Replaced a bunch of @w{foo bar} with foo@tie{}bar. - -2005-09-11 Oleg Katsitadze - - * test/cite.tex, test/xampl.tex: Removed \mbox definitions. - -2005-09-07 Karl Berry - - * doc/invoke.texi: pxref in parens - -2005-09-07 Oleg Katsitadze - - * doc/invoke.texi: - Added ifpdf.sty and path.sty to the list of incorporated files. - Added reference to texi2dvi. - - * doc/userdef.texi (Citations): (Indexing): Added references to texi2dvi. - -2005-09-03 Karl Berry - - * doc/invoke.texi: missing punct - -2005-08-30 Oleg Katsitadze - - * doc/userdef.texi: - Changed paths on CTAN hosts to actual links on www.ctan.org - (Packages known to work): Added reference to \begin{picture} and - \end{picture} - - * doc/intro.texi: - Changed La@TeX{} to @LaTeX{}. Updated mailing list addresses. - - * doc/arrow.texi: Changed La@TeX{} to @LaTeX{}. - - * doc/eplain.texi, doc/userdef.texi (Equation references): - Added doc on referring to empty labels. (Loading LaTeX packages): - New section. - - * test/usepackage.tex: New file. - - * eplain.tex, xeplain.tex: Added \@inmatherr needed by autopict.sty - -2005-08-29 Oleg Katsitadze - - * eplain.tex, xeplain.tex: Added support for LaTeX packages. - -2005-08-25 Oleg Katsitadze - - * doc/progdef.texi (Category codes): Corrections to the new doc - on \makeat{letter,other} (thanks to Karl Berry, as always). - - * doc/progdef.texi, doc/eplain.info, doc/eplain.pdf (Category codes): - Added doc on \makeatletter and \makeatother. - - * xeplain.tex: Added \makeatletter and \makeatother. - -2005-08-23 Oleg Katsitadze - - * doc/eplain.info, doc/eplain.pdf, doc/progdef.texi (Auxiliary files): - Added doc on optional arg to \testfileexistence. (User-defined - environments): Removed spurious indentation. - -2005-08-21 Oleg Katsitadze - - * README: Added description of util dir. - - * doc/eplain.info, doc/eplain.pdf, doc/userdef.texi (Page - references): Updated. (Modifying index entries): Updated. - (Customizing indexing): Added docs on customizing see entries and - on trimsee. - - * util/trimsee: Added --help and -v|--version options. - - * xeplain.tex, eplain.tex: Added italics correction to - \indexsee[also] (thanks to Dan Luecking ), - downcased See. - -2005-08-20 Oleg Katsitadze - - * Makefile: Added util and scripts. - - * util/idxuniq, util/trimsee: New file. - -2005-08-19 Karl Berry - - * btxmac.tex: simplify license to be like plain.tex - -2005-08-18 Oleg Katsitadze - - * doc/eplain.pdf, doc/eplain.info, doc/eplain.texi, doc/userdef.texi (Equation references): - Made into section. (Checking for pdfTeX...): New section (documents ifpdf.sty). - -2005-08-17 Oleg Katsitadze - - * Makefile, doc/Makefile: Rearranged. - - * manifest, tarchive: Removed (Makefile now does the packaging). - - * MANIFESTO: Removed. - -2005-08-15 Oleg Katsitadze - - * eplain.tex, xeplain.tex: Got rid of the homegrown \ifpdf. - - * xeplain.tex, AUTHORS, eplain.tex, manifest, merge: - Added ifpdf.sty to Eplain. - - * ifpdf.sty: New file. - - * manifest: Removed intermediate doc/eplain.??s and multiple info - files. - -2005-08-15 Oleg Katsitadze , Karl Berry - - * README: Updated; authorship info moved to AUTHORS. - -2005-08-15 Oleg Katsitadze - - * doc/Makefile (distclean): Do not delete eplain.pdf (it is now - part of distro). (maintainer-clean): Delete eplain.pdf. - - * doc/eplain.kys, doc/eplain.pgs, doc/eplain.tps, doc/eplain.vrs: - Removed. - - * AUTHORS: New file. - -2005-08-15 Karl Berry - - * doc/texinfo.tex: update from texinfo - -2005-08-15 Oleg Katsitadze - - * manifest: Removed doc/*.t2p files (we don't use tex2page anymore). - - * doc/eplain.t2p, doc/btxdoc.t2p, doc/texinfo.t2p: Removed (we - don't use tex2page anymore). - - * manifest: Include .mst file(s) from test/ in tarball. - - * test/dvipdfm.tex, test/hlcite.tex, test/hlfoot.tex, test/hlidx.mst, test/hlidx.tex, test/hlink.tex, test/pdftex.tex: - New test files for hyperlinks. - - * btxmac.tex: Changes required to support hyperlinks in bibliography. - - * xeplain.tex: Added hyperlink support. - -2005-08-14 Karl Berry - - * doc/.cvsignore, doc/eplain.info: clean - - * doc/Makefile: eplain only - - * doc/arrow.texi, doc/eplain.pdf, doc/eplain.texi, doc/gpl.texi, doc/index.texi, doc/install.texi, doc/intro.texi, doc/invoke.texi, doc/progdef.texi, doc/userdef.texi: - make most of the manual public domain - -2005-08-14 Oleg Katsitadze - - * doc/userdef.texi (Indexing): dropped reference to ftp.math.utah.edu - -2005-08-13 Oleg Katsitadze - - * doc/eplain.texi Removed pagesize specifications. (@menu): - Corrected nodes, added detailed node listing for Indexing. - - * doc/userdef.texi (Indexing): Updated stale link to MakeIndex on - ftp.math.utah.edu (@menu): Changed tabs to spaces in Indexing - node. (Indexing): changed references to MakeIndex from @xref to - @url - - * doc/Makefile (../INSTALL): Adjusted sed command to the new - output from makeinfo (old one resulted in empty ../INSTALL). - - * ChangeLog: Merged with doc/ChangeLog (old doc entries at the bottom). - - * doc/ChangeLog: Removed (merged with ChangeLog). - -2005-08-13 Karl Berry - - * doc/texinfo.tex: update from texinfo - - * doc/progdef.texi: typo - - * doc/.cvsignore, doc/eplain.cps, doc/eplain.fns, doc/eplain.info-1, doc/eplain.info-2, doc/eplain.info-3, doc/eplain.info-4, doc/texinfo.tex: - omit intermediate files and delete old info files from repository - -2005-08-13 Oleg Katsitadze - - * arrow.tex, xeplain.tex: Header update. - - * COPYING: Added GPL v.2 for arrow.tex - - * ChangeLog, MANIFESTO, Makefile, NEWS, PROJECTS, README, add-date, add-version, fix-checksum, merge, tarchive, test/allref.tex, test/boxes.tex, test/boxit.tex, test/catcode.tex, test/center.tex, test/cite.bib, test/cite.tex, test/citeall.tex, test/citealph.tex, test/citeapa.tex, test/citebegin.tex, test/citecust.tex, test/citenote.tex, test/citex.tex, test/colfootn.tex, test/colrule.tex, test/column.tex, test/column2.tex, test/column3.tex, test/commdiags.tex, test/contents.tex, test/displine.tex, test/double.tex, test/double2.tex, test/ecommdiag.tex, test/emergncy.tex, test/env.tex, test/eqdef.tex, test/eqref.tex, test/filexist.tex, test/flynn.tex, test/footnote.tex, test/frac.tex, test/gcol.tex, test/ian.tex, test/index.tex, test/jan.tex, test/justify.tex, test/knuth.bib, test/label.tex, test/latexcite.tex, test/liang.tex, test/list.tex, test/listing.tex, test/logo.tex, test/loop.tex, test/loopnext.tex, test/mag.tex, test/makecol.tex, test/margin.tex, test/matrix.tex, test/mdisplay.tex, test/names.tex, test/noarrow.tex, test/nobib.tex, test/nonouter.tex, test/optional.tex, test/outer.tex, test/page.tex, test/path.tex, test/pcol.tex, test/psfont.map, test/rex.tex, test/rule.tex, test/sidx.tex, test/subdef.tex, test/tenenb.tex, test/tenenb2.tex, test/test.tex, test/time.tex, test/truemarg.tex, test/uscore.bib, test/uscore.tex, test/verb2.tex, test/verbatim.tex, test/vlach.tex, test/whitespc.tex, test/xampl.tex, test/xref.tex: - Added "public domain" note. - - * test/nagflm.tex, test/nhm.style, test/nhm.tex, test/tables.tex: - Removed (non-public domain/outdated). - -2005-08-12 Karl Berry - - * xeplain.tex: header updates - -2005-08-12 Oleg Katsitadze - - * Makefile (pdf): New target. - (html): No need for eplain.html, use html instead. - (info): Bug correction, there is no info dir. - (btxdoc): New target. - - * 00Description: Removed. - -2005-08-12 Karl Berry - - * CVSROOT/checkoutlist, CVSROOT/commitinfo, CVSROOT/config, CVSROOT/cvswrappers, CVSROOT/editinfo, CVSROOT/loginfo, CVSROOT/modules, CVSROOT/notify, CVSROOT/rcsinfo, CVSROOT/taginfo, CVSROOT/verifymsg: - remove dup CVSROOT - -2005-08-12 Stepan Kasal - - * xeplain.tex (^^L): Remove the redefinition. - (\@setuplisting): Fix the def in the case that ^^L is not - active. - - * xeplain.tex (\readcontentsfile): Do not open toc file for - writing, to allow multiple contents - -2005-08-06 Oleg Katsitadze - - * Imported sources into CVS on sarovar.org - (http://sarovar.org/projects/eplain) - -2004-09-05 - - * Version 2.8.4 - -2004-08-31 Oleg Katsitadze - - * xeplain.tex: \indexproofunbox: add \nointerlineskip - - * xeplain.tex: \@idxwrite: Add \allowhyphens when under - \indexproofing, otherwise `infinitesimal' in - \sidx{Infinitesimal}infinitesimal won't be hyphenated. - -2004-08-31 Stepan Kasal - - * xeplain.tex: \def\endcolumns{\singlecolumn} instead of \let... - - * xeplain.tex: \makecolumns. Correct calculation of - items-per-column - -2004-07-26 Stepan Kasal , Karl Berry - - * Version 2.8.3 - * README: Fix URL - -2004-07-26 Stepan Kasal - - * xeplain.tex (\printitem): Add \nobreak before \vskip-\parskip and - (implicit) \vskip\parskip, so that a page break cannot appear - here, between the indexing \write at the start of the item. - -2004-02-28 - - * Version 2.8.2 - * Updated texnames.sty, version 1.10 - -2003-12-27 Stepan Kasal - - * xeplain.tex (\@column): Make sure there is enough space before - we start columned output. - (\@col@minlines, \@ejectpartialpenalty): New constants. - (\@columnhsize): Removed. - (\@setuplisting, \@endcolumns): Use \break instead of \eject, - when we are sure TeX is in vertical mode. - -Tue Jul 15 xx:xx:xx 2003 Dorai Sitaram - - * \setpropertyglobal, from - Oleg Katsitadze - -Mon Jan 30 xx:xx:xx 2001 Dorai Sitaram - - * packaged for CTAN - -Sat Nov 11 20:00:00 2000 Dorai Sitaram - - * Version 2.8.1 - - * \leftdisplays was not allowing pagebreaks - inside \eqalignno. Bug reported by Ludger Hentschel - . Fixed by - Donald Arsenau . - - * doc/btxdoc.bib included alongside doc/btxdoc.tex - -Sat Sep 2 13:20:00 2000 Dorai Sitaram - - * Version 2.8 - -Sun May 7 09:40:00 2000 Dorai Sitaram - - * Fixed problem where Eplain's redefinition of \iterate - was causing nameclash of \next in a TeXdraw macro. - Suggested by TeXdraw author Peter Kabal - . - -Sat Apr 9 00:17:00 2000 Adam Lewenberg - - * xeplain.tex: Fixed problem introduced when double column uneven - bug was `fixed'. - -Sun Apr 25 22:30:00 1999 Adam Lewenberg - - * doc/progdef.texi: Added a section on user-defined environments - to progdef.texi and fixed a few typos in documentation. Suggested - by Paul Abrahams. - -Thu May 14 11:30:00 1998 Adam Lewenberg - - * xeplain.tex: Changed \columnfill after suggestion of - Helmut Jarausch . - -Wed Dec 5 09:10:00 1997 Adam Lewenberg - - * Version 2.7. - - * xeplain.tex: Added the control sequence \gutterbox as a hook - to add arbitrary vertical material between columns in - multi-column mode. - -Wed Mar 26 07:17:00 1997 Adam Lewenberg - - * xeplain.tex: Moved an \obeywhitespace to the end of the - definition of \verbatim to remove spurious space. - Suggested by Dorai Sitaram. - -Wed Jan 28 08:00:00 1997 Adam Lewenberg - - * xeplain.tex: Added \def\@emptymarkA{\@emptymarkB} so that - \ifempty\undefined is false. Suggested by Stanislav Brabec. - -Sat Oct 5 18:11:00 1996 Adam Lewenberg - - * xeplain.tex: Changed a line in the definition of \@fineqdefn - to remove a \noexpand which seemed to be causing a problem - with \eqdef. - -Tue Sep 24 10:25:00 1996 Adam Lewenberg - - * xeplain.tex: Added some code to multiple columns so that - when switching from multi- to single-columns the last line or - so does not get lost. Let's hope it works; added a \newif. - -Wed Apr 1 10:11:00 1996 Adam Lewenberg - - * arrow.tex: changed \smash to \smash@@ (a synonym for plain's - smash) so that arrow.tex works with amstex. - - * xeplain.tex: Put a test at the start so that eplain.tex is loaded - only once. - - * xeplain.tex: changed -1in to -1truein in margin macros; - Macros affected: - \@finishtopmargin - \@finishleftmargin - \@computebottommargin - \@computerightmargin - \indexsetmargins. - Also, initialize \paperheight to 11truein and \paperwidth to - 8.5truein when \mag is not 1000. - - These changes forced a redefinition of \magnification in the event - that \magnification is called AFTER eplain.tex is \input (in - particular, when \magnification is used with an eplain .fmt). - - * xeplain.tex: changed {toc} to {#1} in the definition of - \readcontentsfile to allow more general use. - - * merge: the merge script improperly replaced "xeplain" by "eplain" - in too many places. - -Mon Nov 13 14:14:28 1995 Karl Berry - - * btxmac.tex: Update for Oren's new 0.99k. - -Tue Mar 14 11:36:55 1995 Karl Berry - - * xeplain.tex: Doc fix. - -Sat Apr 30 05:58:31 1994 Karl Berry (karl@cs.umb.edu) - - * Version 2.6. - - * xeplain.tex (toc commands): Rewrite to allow general toc's. - - * xeplain.tex: Include indexing commands. - -Sun Apr 24 14:59:59 1994 Kathy Hargreaves (karl@cs.umb.edu) - - * xeplain.tex (\eqalignno): put \hfil back in (from plain) front of - first \@align, so lhs will be right justified. - -Fri Apr 15 17:46:39 1994 Karl Berry (karl@ra.cs.umb.edu) - - * merge: Split arrow into pre- and post-catcode changes. - * xeplain.tex: Read both parts. - -Wed Mar 30 14:34:52 1994 Karl Berry (karl@ra.cs.umb.edu) - - * xeplain.tex: Globally replace \dimen0 with \dimen@, why not. - -Wed Mar 30 13:19:59 1994 Karl Berry (karl@cs.umb.edu) - - * Version 2.5. - - * xeplain.tex (\@makeverbatimdoubleescape): New macro from - dorai@cs.rice.edu. - (\verbatimescapechar): Call it. - -Mon Mar 28 11:09:03 1994 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\@maybewarnref): Call \ref at the end. - -Tue Mar 22 10:48:01 1994 Karl Berry (karl@cs.umb.edu) - - * Version 2.4. - -Tue Mar 15 12:01:57 1994 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\@maybewarnref): New macro. - (\ref): Define to that initially. - (\eplainref): Name the real definition this. - -Sat Mar 12 15:32:32 1994 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\@columnsplit): Omit doing the looping; it causes - strange column splits on my index tests. - -Tue Mar 8 10:59:31 1994 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\@columns): Correct for one too many gutters. - -Sat Mar 5 15:16:47 1994 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\@numcolumns): Remove \newcount in favor of a \chardef. - (\columnfill): New macro. - -Thu Mar 3 14:31:16 1994 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\@oldandcode, \@plainnew{if,dimen}): New control - sequences, so we can read arrow.tex conditionally a la bibtex. - - * xeplain.tex (\@oldatcatcode): Rename to \@eplainoldatcode, so - btxmac and arrow's redefinitions don't affect us. - -Sat May 22 11:24:31 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (dist): Run gzip -9. - -Sun Apr 11 15:19:18 1993 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\@eqdefn): \@definelabel after the \definexref. - - * xeplain.tex (\xrlabel): Append an `x' after the _. - -Mon Mar 15 08:42:49 1993 Karl Berry (karl@cs.umb.edu) - - * btxmac.tex (\@readbblfile): Let our default \end be \@gobble. - - * btxmac.tex (\@readbblfile): Don't define \begin and \end if - \begin is already defined. - - * btxmac.tex (\@onecitation): Call \@printcitelabel. - (\@printcitelabel): New macro. - -Mon Mar 1 06:26:46 1993 Karl Berry (karl@cs.umb.edu) - - * Version 2.3. - -Tue Feb 23 16:52:49 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (dist): Copy info files to my local info directory. - -Sun Feb 21 11:07:38 1993 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\definexref, \ref, etc.): New macros. - (\@eqdefn, \writeitemxref, \xrdef): Use \definexref. - - * xeplain.tex (\{set,get}property): New macros from generic. - - * xeplain.tex (\tokstostring): This is no longer defined. - -Sat Feb 20 08:07:12 1993 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\hook{append,prepend,action,actiononce,run}): New - macros. - - * xeplain.tex (\expandifdefined): Remove. - - * Makefile (default): Change default to `eplain.tex'. - - * xeplain.tex (\toks@ii): New definition. - -Fri Feb 5 08:07:21 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile (dist, eplain.tex): Pass version explicitly. - -Sun Jan 17 14:08:14 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile (dist): Copy add-version. - -Sun Dec 27 17:00:59 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\csn, \ece): New macros. - -Fri Dec 18 10:11:33 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\expandifdefined): New macro. - -Sun Nov 22 12:03:13 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\ifempty, \@@ifempty): Restore from an old btxmac, - as some people were using them. - -Wed Nov 18 11:15:16 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex: Doc fix. - -Thu Nov 12 17:52:24 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\if@leftdisplays): New conditional. - (\{left,centered}displays): Set it and test it appropriately. - - * xeplain.tex (\displaysetup): Rename to \leftdisplaysetup. - - * xeplain.tex (\centereddisplays): Don't set \displaysetup to - \relax, just go back to the \previouseverydisplay. - -Wed Nov 11 07:08:18 1992 Karl Berry (karl@cs.umb.edu) - - * Version 2.2. - -Mon Nov 9 09:50:43 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\{,end}orderedlist): Synonyms for \{,end}numberedlist. - -Fri Nov 6 15:19:03 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\@removebox): Don't use \lastbox unless we're in - horizontal mode. - ( ): \let to `\ ', instead of \def. - -Mon Oct 19 09:10:56 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\boxit): Define to be \long. - -Fri Oct 9 10:19:05 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex (\everylist): New toks register. - (\beginlist): Expand it. - -Thu Oct 8 17:42:33 1992 Karl Berry (karl@cs.umb.edu) - - * Makefile (topfiles): Add `NEWS'. - - * xeplain.tex (\footnoterulewidth): Define as 2in, not 2true in. - Why did Knuth do this? - -Fri Oct 2 11:48:26 1992 Karl Berry (karl@cs.umb.edu) - - * xeplain.tex: doc fix. - -Sat Sep 19 17:32:44 1992 Karl Berry (karl@hayley) - - * xeplain.tex (\xrlabel): set the catcode of _ to 8 before the - definition, to protect ourselves. (From adam@symcom.math.uiuc.edu) - -Tue Aug 25 12:06:50 1992 Karl Berry (karl@hayley) - - * xeplain.tex: save and restore the catcode of @ as we do with - btxmac.tex. - -Tue Aug 11 07:54:52 1992 Karl Berry (karl@hayley) - - * xeplain.tex (\fmtversion): use `23 April 1964' style instead of - Unix-y timestamp style. - -Sat Aug 8 12:04:29 1992 Karl Berry (karl@hayley) - - * Makefile (eplain.tex): depend on Makefile. - -Fri Aug 7 14:43:22 1992 Karl Berry (karl@Prometheus) - - * xeplain.tex (\displayhook): remove this \newtoks. - (\leftdisplays): don't insert it into \everydisplay. - -Fri Jul 31 17:00:23 1992 Karl Berry (karl@hayley) - - * Makefile (topfiles): use *.sty, not just texnames.sty. - -Sat Jul 25 17:23:10 1992 Karl Berry (karl@hayley) - - * path.sty: new version (with Phil's blessing). Changes recorded - in the file itself. - -Fri Jun 19 09:17:04 1992 Karl Berry (karl@hayley) - - * xeplain.tex (\@lefteqalignnonoalign): use \parindent=0pt instead - of \noindent to lose the indentation. - -Thu Jun 11 09:13:14 1992 Karl Berry (karl@hayley) - - * arrow.tex: new version from Steven, changes only the license. - -Fri May 29 08:46:35 1992 Karl Berry (karl@hayley) - - * Makefile (dist): include add-date. - - * merge: include path.sty. - * xeplain.tex: leave marker. - * Makefile (eplain.tex): depend on path.sty. - -Mon May 25 11:16:15 1992 Karl Berry (karl@hayley) - - * xeplain.tex (\writenumberedtocentry): only expand the ``number'' - once, via \expandafter and \the\toks. - -Thu May 21 09:11:05 1992 Karl Berry (karl@hayley) - - * xeplain.tex (\verbatim, \endverbatim): do not begin and end with - \par. - -Sat May 16 11:26:19 1992 Karl Berry (karl@hayley) - - * xeplain.tex (\makeblankbox): assign to \errhelp before the - \errmessage. - -Sat May 9 06:42:57 1992 Karl Berry (karl@hayley) - - * xeplain.tex (\writenumberedtocentry): \edef the extra number, so - \the gets expanded. - -Wed May 6 15:46:52 1992 Karl Berry (karl@hayley) - - * Makefile (realclean): separate from distclean, and remove INSTALL. - -Tue May 5 11:25:44 1992 Karl Berry (karl@hayley) - - * Makefile (install): install eplain.tex. - -Tue Apr 28 08:28:29 1992 Karl Berry (karl@hayley) - - * Makefile (distclean): new target. - -Sun Apr 19 08:18:22 1992 Karl Berry (karl@hayley) - - * xeplain.tex (\expandonce): new macro from generic. - - * xeplain.tex (\@setuplisting): set \parskip = 0pt. - - * xeplain.tex (\@setuplisting): use `\listingfont' instead of \tt. - (\listingfont): new macro. - -Thu Apr 9 09:27:25 1992 Karl Berry (karl@hayley) - - * Makefile: use $(MAKE) to do submakes. - -Tue Mar 31 14:10:45 1992 Karl Berry (karl at hayley) - - * xeplain.tex (\boxit): use \ehrule and \evrule. - -Wed Mar 25 09:27:51 1992 Karl Berry (karl at hayley) - - * Version 2.1. - - * xeplain.tex (^^I): don't do \tt while defining this, as we might - not have any fonts yet. - -Sun Mar 15 06:58:33 1992 Karl Berry (karl at hayley) - - * Makefile: general cleanup. - - * btxmac.tex: version 0.99j, from Oren. - -Thu Mar 5 13:53:06 1992 Karl Berry (karl at claude.cs.umb.edu) - - * Version 2.0. - - * New btxmac.tex from Oren. - - * doc/eplain.texinfo: replace GPL. - -Mon Feb 17 14:19:27 1992 Karl Berry (karl at hayley) - - * btxmac.tex (\newcommand): use \@getoptionalarg. - (\@continuenewcommand): rewrite accordingly. - (\@newcommandwithargs): delete. - (\bibitem, \@bibitem): likewise. - - * btxmac.tex (\biblabelprint): use \p{re,ost}biblabelcontents - instead of hardwiring the \hss. - (\@readbblfile): in \@alphabibitem and \@numberedbibitem, define - the appropriate one to \hss to do the justification. - - * btxmac.tex (\@readauxfile): improve comments. - - * btxmac.tex (\biblabelprint): \kern\biblabelextrahang, instead of - \enspace. - (\@readbblfile): change comment at \biblabelextrahang. - -Fri Feb 7 08:11:07 1992 Karl Berry (karl at hayley) - - * eplain.texinfo (Cross-references): bring the list of valid chars - in references up-to-date. - -Wed Feb 5 12:05:09 1992 Karl Berry (karl at hayley) - - * xeplain.tex: remove spurious spaces from ends of definitions. - - * xeplain.tex: marker for arrow.tex. - * merge: include arrow.tex in eplain.tex. - * arrow.tex: new file. - -Mon Jan 27 06:22:43 1992 Karl Berry (karl at hayley) - - * xeplain.tex (*printmarker): use \listmarkerspace instead of - \enspace. - * eplain.texinfo (List formatting): document this. - - * xeplain.tex (\linenumberedlisting, \printlistinglineno): new - macros, from FABROADI@CUGSBVM.BITNET. - * eplain.texinfo (Verbatim listing): document them. - - * eplain.texinfo (Verbatim listing): document it. - * xeplain.tex (\verbatim): new macro, mostly from - beebe@math.utah.edu, to do inline verbatim mode. - - * eplain.texinfo (Footnotes): say that the space above the rule - and below the text is \skip\footins. - - * xeplain.tex (\center, \flush{left,right}): define with \gdef; - remove the \globaldefs = 1. - - * eplain.texinfo (Logos): add some more. - * xeplain.tex: include texnames.sty. - -Thu Jan 23 08:35:43 1992 Karl Berry (karl at hayley) - - * xeplain.tex (\writenumberedtocentry): \sanitize the section - number (arg#3), in case it happens to have weird control - sequences in it (e.g., if it's an author's name instead of a - number). - -Wed Jan 15 10:52:32 1992 Karl Berry (karl at hayley) - - * eplain.texinfo (Citations): document \bblfilebasename. - - * eplain.texinfo (Contents): document this. - * xeplain.tex (\readtocfile, \opentocfile): use \tocfilebasename. - (\tocfilebasename): defaults to \jobname. - -Fri Dec 27 11:07:41 1991 Karl Berry (karl at Prometheus) - - * btxmac.tex (\@getoptionalarg): set \@optionalnext to \relax - before using it as the arg to \@futurenonspacelet. - -Sat Dec 7 07:23:14 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\eqnofontfam): remove this. What was I thinking of? - -Fri Dec 6 12:57:16 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\eqnofontfam): change from \mit to \rm. - (\eqprint): enclose the font change in a group. - - * xeplain.tex (\displaysetup): subtract \leftskip from - \displaywidth (on the umpteenth alternation here); also, don't - \hskip by \displaywidth after advancing by the extra parameters. - Instead, use a temporary. (Otherwise, we would \hskip by too much.) - -Mon Nov 18 06:57:33 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\eqprint): call \eqnofontfam first. - (\eqnofontfam): define to be \mit. - - * xeplain.tex (\leftdisplays): decrease \hsize, so \noalign in - \eqalignno doesn't produce an overfull box. - (\eqalignno in \redefinealignmentdisplays): set \noalign to a new - definition. - (\@primitivenoalign): new synonym. - (\@lefteqalignnonoalign): new macro. - - * btxmac.tex (\bibliography): do \nobreak before reading the bbl file. - -Mon Oct 28 10:01:39 1991 Karl Berry (karl at hayley) - - * btxmac.tex (\@readbblfile): correct test for \@itemnum being - defined. - - * xeplain.tex (\@eateol): if there's text on the line with the - justify command, do the right thing. - * eplain.texinfo (Justification): document these changes. - - * xeplain.tex (\@finjustifyreturn): new macro to test for two - ^^M's in justified environments. If we find this, insert - \blanklineskipamount glue. - (\beforejustify): set up ^^M to call this; set up \@eateol. - (\flushleft, \flushright, \center): define \@eolaction instead of - defining ^^M directly; ditto for \@eateol. - -Sun Oct 6 12:02:46 1991 Karl Berry (karl at hayley) - - * btxmac.tex (\@readbblfile): don't define \@itemnum if it's - already defined. - -Fri Oct 4 14:34:58 1991 Karl Berry (karl at hayley) - - * btxmac.tex (\bblfilebasename): new macro, defaults to \jobname. - (\bibliography, \@readbblfile): use it. - -Sat Sep 28 11:46:10 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\unorderedprintmarker): new macro. - (\unorderedlist): set \printmarker to it. - (\writeitemxref): new macro, the xref-defining part from \@finli. - - * xeplain.tex (\leftdisplays): don't save and restore \eqalign, - since we don't change it in \@redefinealignmentdisplays. - -Fri Sep 27 09:45:17 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\displaysetup): no, take \leftskip into account - after all. What's going on? - -Tue Sep 24 07:10:23 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\displaysetup): don't advance \displayindent by - \leftskip, since TeX already does. - - * btxmac.tex (\nexttoken): rename to \@nexttoken. - -Fri Sep 20 10:45:23 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\displaysetup): don't subtract \leftskip when computing - \displaywidth; TeX already does that. - - * xeplain.tex (\@finli): don't call \xrlabel on the arg to - \definexref; advance \itemromannumeral. - -Thu Sep 19 16:12:14 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\xrefn): remove spurious braces from warning. - - * eplain.texinfo (Lists): document this. - * xeplain.tex (\{print,}itemromannumeral): new macros. - (\numberedmarker): use roman numerals for depth 3. - -Tue Sep 17 06:30:25 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\xrefn): remove calls to \tokstostring; \csname - works just as well. - * btxmac.tex (\@readauxfile): don't call \@setletters; only reset @. - (\@tokstostring): remove. - (\@cite...): remove calls to \@tokstostring - - * xeplain.tex (\@finli): define the item cross-reference label, as - well as write it out; no, don't, the value might be a page number. - - * xeplain.tex (\xrlabel): remove assignments, so it becomes - expandable. (This means control sequences are no longer allowed - in labels.) Change callers. - -Mon Sep 16 15:17:09 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\eqdefn): don't call \eqconstruct if we're given an - optional argument. - -Sun Sep 15 17:19:33 1991 Karl Berry (karl at hayley) - - * eplain.texinfo (Lists): document this. - * xeplain.tex (\beginlist): set \itemnumber=1; remove from \...list. - (\li): remove from the \...list macros and only - define once; allow an optional arg as a cross-reference label. - (\item{number,letter}out): rename to \print...; change caller. - (\printmarker): new macro to output the actual item marker. - -Sat Sep 14 15:55:39 1991 Karl Berry (karl at hayley) - - * btxmac.tex (\@getoptionalarg): use \@futurenonspacelet. - (\@futurenonspacelet): move from xeplain.tex. - * eplain.texinfo (Macro arguments): document this. - -Mon Sep 9 10:25:51 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\@redefinealignmentdisplays): add another \hfil - outside math mode to the template for \displaylines. - -Sun Sep 8 06:31:50 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\eqdef): call \eqconstruct here. - (\eq@eqdefn): not here. - - * eplain.texinfo: document all this. - - * xeplain.tex (\beginlist): do the \abovelistskip first. - - * xeplain.tex (\{v,h}penalty): new macros. - - * xeplain.tex (\{above,below}listskipamount, - \interitemskipamount): rename from ...skip. - (\{above,below}listpenalty, \interitempenalty): new count - registers. - (\{above,below}listskip, \interitemskip): macros which skip by the - register and include the \...penalty. - -Sat Sep 7 07:29:12 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\gtracingoff, \gloggingall): new macros. - * eplain.texinfo (Diagnostics): document them. - -Fri Sep 6 13:40:11 1991 Karl Berry (karl at hayley) - - * eplain.texinfo (Diagnostics): new command \tracingoff. - * xeplain.tex (\tracingoff): define it. - -Thu Sep 5 10:19:49 1991 Karl Berry (karl at hayley) - - * eplain.texinfo (Tables): replace reference to INRSTeX, which - seems not to exist, with one to ruled.tex, available on ymir. - -Sun Sep 1 14:53:38 1991 Karl Berry (karl at hayley) - - * xeplain.tex: change header comment. - -Thu Aug 29 16:01:43 1991 Karl Berry (karl at hayley) - - * eplain.texinfo (Formatting equation references): document - \eqconstruct. - * eplain.texinfo (Macro arguments): document \identity. - - * xeplain.tex (\identity): new definition. - (\eqconstruct): new macro \let = \identity. - (\@eqdefn): call \eqconstruct to produce the final cross-reference - text. - - * eplain.texinfo (Index): rename to `Concept index'. - - * eplain.texinfo (Top): include version number. - -Sat Aug 24 07:09:23 1991 Karl Berry (karl at hayley) - - * Makefile (dist): make a doc subdirectory in the distribution. - (dos): don't distribute all the test files. - - * Makefile (install): install the info files. - (infodir): new variable. - -Fri Aug 23 11:48:40 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\eqsubdefn): expand \@currenteqlabel before - defining it. - - * xeplain.tex (\xrlabel): use 95 instead of `\_, so \edef doesn't - break quite so badly. - -Thu Aug 22 14:42:45 1991 Karl Berry (karl at ra.cs.umb.edu) - - * xeplain.tex (\@eqdef): new command for both \eqdef and \eqsubdef - to call. - (\eqrefn): new command to do what \eqref does, except omits the - call to \eqprint. - (\eqref): call \eqrefn. - (\eqdefn): allow an optional argument to specify the text of the - label, instead of always using numbers. - (\@currenteqlabel): defined by \eqdefn to be the last defined - label. - (\eqsubdefn): use \eqrefn of \@currenteqlabel to define the text - for the subequation label. - (\@eqdef): use \eqref to generate the printed material, instead of - writing the numbers. - - * xeplain.tex (\xrlabel): remove grouping; use \count@ to save - \escapechar instead. Also, use \temp instead of \tts. - (\xrdef, \@eqdefn): remove grouping. - - * btxmac.tex (\cite): do \printcitestart before \@nocite. - - * merge: don't use /bin/date. - -Fri Aug 16 08:06:26 1991 Karl Berry (karl at hayley) - - * eplain.texinfo: fix node pointers. - -Wed Aug 14 14:53:10 1991 Karl Berry (karl at hayley) - - * Makefile (etex.fmt): rm -f etex.aux before creating it. - (merge): assume fix-checksum is in PATH. - -Mon Aug 12 19:42:07 1991 Karl Berry (karl at hayley) - - * eplain.texinfo (Formatting displays): remove the stuff about - \generaldisplay, since that's gone. - - * xeplain.tex (\eqsubdefn): new macro to define subequations. - (\eqsubdef): its companion. - (\eqsubreftext): macro to produce the text of such a reference. - (\@eqdefn): new subroutine for \eqsubdefn and \eqdefn. - (\subeqnumber): new count register. - * eplain.texinfo (Subequation references): new subsection to - describe all this. - -Mon Aug 5 07:08:55 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\eattoken): use a private control sequence for - eating, to avoid conflicts. - (\@eattoken): \let = \relax. - -Sat Jul 20 06:39:48 1991 Karl Berry (karl at hayley) - - * eplain.texinfo (Copying): replace with version 2 of the GPL. - - * eplain.texinfo (Local variables): remove this, since it's - standard now. - -Mon Jul 8 05:46:57 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\leftdisplays): new implementation. - - * xeplain.tex (\eattoken): new macro. - * eplain.texinfo (Macro arguments): document it. - -Sun Jun 23 11:13:42 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\ifundefined): new macro. - - * xeplain.tex (\blackbox): add \relax at the end. - - * xeplain.tex (\BibTeX): use \TeX. - (\MF): use \rm instead of \tenrm. - - * merge: automatically figure out the date, and version, and loop - on the checksum. - * xeplain.tex (\fmtversion): don't include real version numbers, - dates, or the checksum. - - * xeplain.tex (\environment): define \@groupname with \edef - instead of \def. - -Sat Jun 22 08:23:05 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\@isolatedendenvironmenthelp): improve this message. - -Fri May 31 06:19:40 1991 Karl Berry (karl at hayley) - - * eplain.texinfo: do @finalout, to prevent overfull boxes. - -Sun May 19 07:01:12 1991 Karl Berry (karl at hayley) - - * citecust.tex: define the \scriptfont for \ttfam, so that - undefined references work properly (found by - jxp@ccadfa.cc.adfa.oz.au). - -Wed May 15 06:52:20 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\writetocentry): pass in an empty arg to - \writenumberedtocentry, not \empty, so the \ifx works right - (found by Paul). - -Wed May 8 17:04:32 1991 Karl Berry (karl at hayley) - - * Makefile (dos): put texinfo.tex in the DOS distribution. - -Tue May 7 12:19:24 1991 Karl Berry (karl at ra.cs.umb.edu) - - * xeplain.tex (\xrefwarningfalse): forgot a \ in front of the \let - (found by Paul). - -Mon May 6 11:01:07 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\AMS): new macro from \AMSTeX. - (\AMSTeX): use it. - (\AMSLaTeX): new macro. - * eplain.texinfo (logos): document \AMSLaTeX. - - * xeplain.tex (\today): new macro. - * eplain.texinfo (Time of day): document it. - -Fri Apr 26 08:29:08 1991 Karl Berry (karl at hayley) - - * Makefile (dos): rename INSTALL, remove ORIG. - - * Version 1.9. - - * Makefile (clean): remove the .??O files that texi2dvi creates. - (eplain.dvi): use texi2dvi. - - * Makefile (dist): create the file `INSTALL' after making the info - files. - - * eplain.texinfo (Installation): bring up to date. - * README: likewise. - - * btxmac.tex: final (for now) version. - -Mon Apr 22 09:53:53 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\@writeeqdef, \@writexrdef): we don't need a - \percentchar at the end of the lines we write anymore, since - btxmac.tex does \endlinechar = -1 before reading the aux file. - - * allref.tex: new test file to test all kinds of reference - simultaneously. - -Mon Apr 15 09:15:51 1991 Karl Berry (karl at hayley) - - * eplain.texinfo (Installation): describe \noauxfile. - - * xeplain.tex (\singlecolumn): document (somewhat) better. - - * btxmac.tex: new version from Oren. - -Sun Apr 7 14:54:05 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\boxit, \boxitspace): new macros from the TeXbook. - * eplain.texinfo (Boxes): document it. - - * xeplain.tex (\hidevrule): remove a spurious space. - - * xeplain.tex (\lbracechar, \rbracechar): new definitions. - * eplain.texinfo (Category codes): document them. - -Fri Mar 29 17:13:46 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\makecolumns): set the \hsize inside each entry. - (\currentcolumn): new register. - - * xeplain.tex (\hidehrule, \hidevrule): comment these; remove a - group from \hidevrule. - -Tue Mar 26 12:20:35 1991 Karl Berry (karl at ra.cs.umb.edu) - - * xeplain.tex (\linenumber): \let = \@linenumber. - -Mon Mar 25 05:52:27 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\writenumberedtocentry): don't test #3 with an - \ifx; define it in a control sequence first. - -Mon Mar 11 08:56:43 1991 Karl Berry (karl at hayley) - - * Version 1.8. - - * xeplain.tex (\environment, \endenvironment): don't ignore spaces - at the end. - - * xeplain.tex (\@undefinedmessage): don't define it if it's - already defined. - - * xeplain.tex (\everyjob): expand the old \everyjob. - -Fri Mar 8 08:03:50 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\writenumberedtocentry): \ignorespaces after the - \fi, not before (found by abrahams@mts.cc.wayne.edu). - -Tue Mar 5 08:33:16 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\makeblankbox): give an error message if \box0 is - void. - (\@makeblankboxhelp): new control sequence with help for the error - message. - -Mon Mar 4 07:10:10 1991 Karl Berry (karl at hayley) - - * btxmac.tex (\linenumber): define this, and use it in the - undefined citation message. - * xeplain.tex: use \linenumber in the undefined messages. - - * xeplain.tex: change all \undefined's to \@undefined's. - -Sun Mar 3 07:43:11 1991 Karl Berry (karl at hayley) - - * xeplain.tex: put the BibTeX definitions in a token register; - expand it if \nobibtex is undefined. - -Fri Mar 1 16:00:38 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\@redefinealignmentdisplays): Make \displaylines - redefine \eqprint, so the equation number still comes out on the - right. - - * Makefile (etex.fmt): cp /dev/null onto etex.aux, don't just - touch it. - - * xeplain.tex (\if@nobibtex): remove this; just test - \ifx\nobibtex\@undefined instead. - - * btxmac.tex (\@innernewdimen): define this. - (\if@notfirstcitation, \biblabelwidth, \biblabelextrahang, - \@numparams): define using \@inner..., since we include all of - btxmac.tex in an \if ... \fi construction in eplain.tex now. - -Wed Feb 27 08:02:24 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\@ddisplaytest): this time really remove the - trailing spaces; I didn't test it properly before. - - * eplain.texinfo (Justification): remark that setting the - linespacing values inside \center et al. is useless. - -Sat Feb 23 08:42:12 1991 Karl Berry (karl at hayley) - - * xeplain.toc (\opentocfile): make the \@tocfileopenedtrue be - \global (from Paul). - - * xeplain.tex (\fullmonthname): new macro. - * eplain.texinfo (Time of day): document it. - -Fri Feb 22 15:11:14 1991 Karl Berry (karl at hayley) - - * eqref.tex: say that the output of the \displaylines test should - look bad. - - * xeplain.tex (\@displaytest, \@ldisplaytest): use \noexpand on - the argument, to prevent obscure errors (that might never - actually occur, I'm not sure). - - * xeplain.tex (\@ddisplaytest): remove trailing spaces and/or - surrounding braces from the argument to \eqdef (from - jxp@ccadfa.cc.adfa.oz.au). - (\@removetrailingspaces): new macro. - -Sat Feb 2 09:25:30 1991 Karl Berry (karl at hayley) - - * fileexist.tex: new file to test the various possibilities. - - * btxmac.tex (\@testfileexistence): allow an optional argument - specifying the root name of the file. - (\@finishtestfileexistence): new macro. - - * merge: merge all of btxmac into eplain.tex. - * xeplain.tex: rearrange slightly to accommodate this. - -Fri Jan 25 11:34:09 1991 Karl Berry (karl at hayley) - - * Version 1.7 (released for ASI only). - - * Makefile (dist): automatically include btxdoc.tex and - texinfo.tex in the distribution. - - * Makefile (etex.fmt): don't print all the stupid \font... lines. - - * contents.tex: make a subsection include \cos, to test the - non-expansion. - * xeplain.tex (\sanitize, \gobblemeaning): new macros from a - TUGboat article by Ron Whitney. - (\writenumberedtocentry, \writetocentry): do not expand the text - of the heading. - * eplain.texinfo (Contents): say that the title text is not - expanded. - -Thu Jan 3 09:07:05 1991 Karl Berry (karl at hayley) - - * xeplain.tex (\beginlist): don't set \parskip = 0pt, in case - \parindent is zero. - (\printitem): do \vskip-\parskip, so we don't get extra space if - \parskip is nonzero. - - * list.tex: test a multiple-paragraph list item with \parindent=0 - and \parskip nonzero. - -Mon Dec 17 12:57:41 1990 Karl Berry (karl at hayley) - - * xeplain.tex (` ' in \obeywhitespace): define to be `\ ' using - \def instead of \let, to allow redefinition. - -Wed Dec 12 14:34:28 1990 Karl Berry (karl at aten) - - * Version 1.6. - - * eplain.texinfo (Formatting bibliographies): \biblabelextrahang - and \parskip must be set inside \bblhook. - - * Makefile (etex.fmt): make sure etex.aux exists. - -Mon Dec 10 16:09:30 1990 Karl Berry (karl at aten) - - * eplain.texinfo (Formatting bibliographies): describe - \biblabelextrahang and \bblsc. - - * xref.tex: don't unconditionally input eplain.tex. - - * xeplain.tex: don't set \@citewarningtrue after all; that makes - it so we always warn about labels. - * btxmac.tex (\@readauxfile): set \@citewarningtrue if there was - an aux file, so that we get warned about undefined references - when we make a format file. - - * xeplain.tex: remove misplaced comment. - -Sun Dec 9 07:52:52 1990 Karl Berry (karl at hayley) - - * xeplain.tex (\blanklineskipamount, \@finishobeyedreturn): new - definitions to generalize the handling of blank lines in - \obeywhitespace. - * eplain.texinfo (Obeying spaces): document this. - - * xeplain.tex (\obeywhitespace): use `\ ' instead of - `\alwaysspace', and remove the latter. - * eplain.texinfo (Obeying spaces): remove reference to \alwaysspace. - - * xeplain.tex: set \@citewarningtrue after reading the stuff from - btxmac, so that we get undefined label messages when we use a - format file. - -Sat Dec 1 07:44:52 1990 Karl Berry (karl at hayley) - - * eplain.texinfo (Installation): refer to `\fmtversion', not - `\eplainversion'. - - * btxmac.tex (\@getoptionalarg): new macro. - * xeplain.tex (\getoptionalarg): \let = to above. - * eplain.texinfo (Macro arguments): document it. - - * xeplain.tex (\futurenonspacelet): new macro from the TeXbook. - * eplain.texinfo: document it. - - * btxmac.tex (\@setletters): only check characters with codes - below 128 if we are the old TeX. - - * xeplain.tex (\@ddisplaytest): omit extra braces around the call - to \eqdef. - (\eqdef, \eqdefn): ignore following spaces. - - * xeplain.tex (\@undefinedmessage): change wording slightly. - -Fri Nov 30 10:51:02 1990 Karl Berry (karl at hayley) - - * eplain.texinfo (Installation): describe \eplain. - - * eplain.texinfo (Citations): use @file instead of @t, and make - editorial changes. - -Wed Nov 28 06:57:24 1990 Karl Berry (karl at hayley) - - * eplain.texinfo (Cross-references): escapes are catcode 0, not 1. - Also, don't put a \ in the invalid example. - - * eplain.texinfo (Allocation macros): use `proclaim' in the - example, not `innerproclaim'. - - * xeplain.tex (\alwaysspace): use \font instead of \the\font. - - * xeplain.tex (^^I): use \fontdimen2\font, instead of \tt, since - \tt might not be a font selector. - - * Makefile (etex.fmt): remove etex.aux. - - * xeplain.tex (\displayhook): new token register expanded at - \everydisplay time. - * eplain.texinfo (displays): document this. - -Tue Nov 27 08:24:41 1990 Karl Berry (karl at hayley) - - * xeplain.tex (\eqdef): make \eqno = \relax if we are inner. - * eplain.texinfo (Equation references): \eqdefn doesn't produce - anything. - - * eqref.tex: test \eqdef inside \displaylines. - - * xeplain.tex (\eplain): define to be `t'. - -Sun Nov 25 09:30:46 1990 Karl Berry (karl at hayley) - - * xeplain.tex (\eqref, \xrefn): no, that's not enough. Use - \if@citewarning here, so the \if's and \fi's match properly. - * eplain.texinfo (Citations): document \xrefwarningtrue. - (Cross-references): ditto. - - * xeplain.tex (\ifxrefwarning): define to be \if@citewarning, so - changes to the latter are reflected in the former. - -Sat Nov 24 08:21:35 1990 Karl Berry (karl at hayley) - - * xeplain.tex: say that we have two version numbers now in the - header comment. - -Thu Nov 22 10:48:35 1990 Karl Berry (karl at hayley) - - * eplain.texinfo (Equation references): \eqdef can be used in an - \eqalignno now, so \eqdefn is useful in even fewer sitations. - -Thu Nov 15 10:28:13 1990 Karl Berry (karl at hayley) - - * Version 1.5. - - * merge: remove comments from xeplain.tex as well as btxmac.tex, - and fix the checksum and filename in the final eplain.tex. - - * xeplain.tex (\if@fileexists, ...): \let = \relax, in case the - file is being read twice. - - * Makefile (etex.fmt): new rule. - -Wed Nov 14 19:02:28 1990 Karl Berry (karl at aten) - - * eplain.texinfo (Iterations): fix syntax error in example (from - bsuggs@hac2arpa.hac.com). - -Mon Nov 12 10:34:37 1990 Karl Berry (karl at hayley) - - * etex.tex: mention that plain should be loaded. - * eplain.texinfo (Installation): mention etex.tex. - - * xeplain.tex (\ifnobibtex): set to true if \nobibtex is defined. - * eplain.texinfo (Installation): describe this. - - * btxmac.tex: new version incorporating my changes from Oren. - \@citewarning has to be defined in the non-bibtex specific part. - -Sat Nov 10 08:49:07 1990 Karl Berry (karl at hayley) - - * xeplain.tex (\xrlabel): explain how _ works. - -Wed Oct 31 06:24:56 1990 Karl Berry (karl at hayley) - - * merge: make eplain.tex readonly after creating it. - -Tue Oct 30 07:52:07 1990 Karl Berry (karl at hayley) - - * eplain.texinfo: `eplain' changed to `Eplain' throughout; a few - other typos corrected. - - * btxmac.tex (\@innerdef): new macro to give an inner definition - to an outer control sequence. - (\@innernewcount, \@innernewdimen, \@innernewif, - \@innernewwrite): use it to define these macros. - * xeplain.tex: make \innernewcount et al. synonyms for the above, - and also make inner versions of all the other plain TeX macros. - * eplain.texinfo (Allocation macros): new section to document this. - - * xeplain.tex: rename \@xrlabel to \xrlabel. - * eplain.texinfo (Converting to characters): document \xrlabel. - -Sun Oct 28 08:35:20 1990 Karl Berry (karl at hayley) - - * eplain.texinfo (Cross-references): explain which characters are - valid. - - * btxmac.tex (\@setletters): change all characters with category - code 12 into category code 11, instead of writing a list. - (Also change _.) - (@setmoreletters): remove. - - * btxmac.tex (\@resetnumerals): also change the category codes of - ', `, and ". - -Sat Oct 27 09:46:54 1990 Karl Berry (karl at hayley) - - * eplain.tex becomes xeplain.tex; a shell script `merge' puts - definitions from btxmac.tex that are used in the rest of eplain - into xeplain, creating eplain.tex. Also, a new conditional, - \ifnobibtex, determines whether we read btxmac.tex or not. - (Being able to not read btxmac suggested by Paul.) - -Sun Oct 21 14:03:31 1990 Karl Berry (karl at hayley) - - * eplain.texinfo (Cross-references): users should use - \@setmoreletters, not redefine \@setletters. - -Wed Oct 17 07:14:26 1990 Karl Berry (karl at hayley) - - * eplain.tex (\eqdef): don't do \eqno if we're inner. - -Sat Oct 13 07:28:11 1990 Karl Berry (karl at hayley) - - * eplain.tex (\leftdisplayindent): new \dimen parameter - (suggested by wiawkph@dutrun.tudelft.nl). - (\leftdisplays): use it. - * eplain.texinfo (Displays): document it. - - * eplain.tex (\@ddisplaytest): new macro to find an \eqdef in a - display. - (displaysetup): call it. - -Fri Oct 12 06:27:52 1990 Karl Berry (karl at hayley) - - * eplain.texinfo: describe @menu entries. - - * eplain.tex (\topmargin, et al.): new macros. - * eplain.texinfo (Margins): new section to document them. - -Thu Oct 11 06:30:54 1990 Karl Berry (karl at hayley) - - * xref.tex: forgot \xref in front of {label2}. - -Tue Oct 9 06:48:08 1990 Karl Berry (karl at hayley) - - * eplain.tex (\xrdef): use \@xrlabel, not \xrlabel. - -Tue Sep 25 17:55:32 1990 Karl Berry (karl at hayley) - - * eplain.tex (\TeX): new macro, adds \null to plain's definition. - -Fri Sep 14 13:54:01 1990 Karl Berry (karl at hayley) - - * eplain.tex (\writenumberedtocentry): expand the third parameter - now, instead of at the time of the \write. - * eplain.texinfo (Contents): document this. - -Thu Sep 13 08:09:25 1990 Karl Berry (karl at hayley) - - * eplain.texinfo (Citations, Formatting citations, Formatting - bibliographies): emendations from Oren Patashnik - . - - * eplain.tex (\footnoterule): new macro from plain TeX, - generalized to arbitrary dimensions. - (\vfootnote): advance \splittopskip by \interfootnoteskip, so that - split footnotes have the right amount of space at the top. - * footnote.tex: test the new dimension parameters. - * eplain.texinfo (Footnotes): document all this. - -Fri Sep 7 06:38:49 1990 Karl Berry (karl at hayley) - - * Version 1.4. - -2005-08-13 Oleg Katsitadze - - * doc/ChangeLog, doc/Makefile: Added "public domain" note. - -2005-08-12 Karl Berry - - * doc/userdef.texi, doc/eplain.info, doc/eplain.texi: wording - -2005-08-12 Oleg Katsitadze - - * doc/Makefile (doc): Added btxdoc prerequisite. - (pdf): New target. - (btxdoc): New target. - (eplain.html): No need for it, html is good enough. - (distclean): Brought up-to-date with the changes. - - * doc/userdef.texi (Contents): \readtocfile does not wipe out toc - file any more, to allow multiple contents - -Sun Apr 25 22:30:00 1999 Adam Lewenberg - - * doc/progdef.texi: Added a section on user-defined environments - to progdef.texi and fixed a few typos in documentation. Suggested - by Paul Abrahams. - -Sun Dec 7 18:29:00 1997 Adam Lewenberg - - * doc/eplain.texi: Force line length of documentation to be 6.5 inches - by adding a @changepagesizes command. - -Fri Dec 5 09:10:00 1997 Adam Lewenberg - - * doc/userdef.texi: Added \gutterbox explanation to multicolumn - section. - -Sun Jun 2 09:30:00 1996 Adam Lewenberg (adam@math.uiuc.edu) - - * doc/userdef.texi: added a missing word in section on path - command. - -Mon Apr 8 12:00:00 1996 Adam Lewenberg (adam@math.uiuc.edu) - - * doc/userdef.texi: changed dimensions in section on margins from in to - true in. - -Thu Jul 28 15:41:40 1994 Karl Berry (karl@cs.umb.edu) - - * doc/userdef.texi: \{above,below}doublecolumnskip => - \{above,below}columnskip. From wiawkph@dutrun2.tudelft.nl. - -Sat Apr 30 17:51:52 1994 Karl Berry (karl@cs.umb.edu) - - * Version 2.6. - - * doc/userdef.tex (Indexing): New section. - (Contents): Describe new generic contents commands. - -Sun Apr 17 10:06:50 1994 Karl Berry (karl@ra.cs.umb.edu) - - * doc/progdef.texi (Converting to characters): Remove spurious period. - * doc/userdef.tex (Verbatim listing, Cross-references): Fix other typos. - * doc/invoke.texi: Rewrite \nobibtex section. - From adam@symcom.math.uiuc.edu. - -Wed Mar 30 14:27:21 1994 Karl Berry (karl@cs.umb.edu) - - * Version 2.5. - - * doc/userdef.texi (Verbatim listing): Document \makeverbatimescapechar. - -Tue Mar 22 10:48:01 1994 Karl Berry (karl@cs.umb.edu) - - * Version 2.4. - -Thu Mar 3 17:47:55 1994 Karl Berry (karl@cs.umb.edu) - - * doc/invoke.texi (Invoking Eplain): Document \noarrow. - - * doc/userdef.texi (Formatting bibliographies): Index extra space - between the items. - -Sun Apr 11 15:44:58 1993 Karl Berry (karl@cs.umb.edu) - - * doc/userdef.texi (Equation references): Document empty equation labels. - -Sun Apr 4 13:21:12 1993 Karl Berry (karl@cs.umb.edu) - - * doc/install.texi: Include information for emtex. - - * doc/Makefile (TEX): Be sure .. is in TEXINPUTS. - - * doc/Makefile (distclean): Remove empty .??s files. - -Mon Mar 1 06:26:51 1993 Karl Berry (karl@cs.umb.edu) - - * Version 2.3. - -Fri Dec 18 10:14:25 1992 Karl Berry (karl@cs.umb.edu) - - * doc/progdef.texi: Document \expandifdefined. - -Thu Nov 12 17:53:07 1992 Karl Berry (karl@cs.umb.edu) - - * doc/userdef.texi (Formatting displays): \displaysetup is now - \leftdisplaysetup. - -Wed Nov 11 07:08:12 1992 Karl Berry (karl@cs.umb.edu) - - * Version 2.2. - -Mon Nov 9 09:59:24 1992 Karl Berry (karl@cs.umb.edu) - - * doc/Makefile (dist): Make the Info and index files after inserting - the new version number. - -Thu Oct 22 10:46:28 1992 Karl Berry (karl@cs.umb.edu) - - * update.el (make-backup-files): Set to nil. - -Tue Aug 18 15:55:15 1992 Karl Berry (karl@hayley) - - * doc/Makefile (INSTALL): `Node: Installation' does not begin a line. - -Fri Jul 31 19:18:12 1992 Karl Berry (karl@hayley) - - * doc/userdef.texi (Verbatim): \verbatim doesn't work in macro definitions. - -Fri Jul 17 09:55:10 1992 Karl Berry (karl@hayley) - - * doc/userdef.texi (Tables): update info for ruled.tex (from - mathew@bach.crhc.uiuc.edu). - -Fri May 29 09:35:59 1992 Karl Berry (karl@hayley) - - * doc/userdef.texi (Paths): new section. - -Thu May 21 09:08:18 1992 Karl Berry (karl@hayley) - - * doc/userdef.texi (Verbatim listing): had the example wrong. - -Tue May 12 15:28:04 1992 Karl Berry (karl@hayley) - - * doc/userdef.texi (Cross-references): had sense of valid xref - catcodes inverted. - -Thu May 7 08:08:24 1992 Karl Berry (karl@hayley) - - * doc/Makefile (dist): link the .texi files. - -Wed May 6 15:41:24 1992 Karl Berry (karl@hayley) - - * doc/eplain.texi: add an `@paragraphindent'. - -Tue May 5 11:05:43 1992 Karl Berry (karl@hayley) - - * doc/Makefile (install): use a loop to install the multiple info - files. - (eplain.info): depend on *.texi. - * doc/*.texi: split up eplain.texinfo. - -Tue Apr 28 08:23:30 1992 Karl Berry (karl@hayley) - - * doc/Makefile (prefix, infodir, INSTALL_DATA): add definitions. - (distclean): new target. - (dist): put INSTALL in the distribution. - -Sun Apr 19 08:17:43 1992 Karl Berry (karl@hayley) - - * doc/eplain.texinfo (\expandonce): new subsection. - (\futurenonspacelet): change to a subsection. - (\ifundefined): might as well document this here, also. - (Expansion): new section. - - * doc/eplain.texinfo (Verbatim listing): document \listingfont. - - * doc/Makefile (eplain.dvi): tex eplain.texinfo, not eplain.cps. - -Tue Mar 31 14:12:03 1992 Karl Berry (karl at hayley) - - * doc/eplain.texinfo (Boxes): document \boxit using \e[hv]rule. - -Wed Mar 25 09:22:29 1992 Karl Berry (karl at hayley) - - * Version 2.1. - - * doc/eplain.texinfo: add section on patents and copyrights. - -Sun Mar 15 08:22:56 1992 Karl Berry (karl at hayley) - - * doc/Makefile: new file. - - -This file is public domain. diff --git a/Master/texmf-dist/doc/eplain/base/INSTALL b/Master/texmf-dist/doc/eplain/base/INSTALL deleted file mode 100644 index 3a514ae606b..00000000000 --- a/Master/texmf-dist/doc/eplain/base/INSTALL +++ /dev/null @@ -1,51 +0,0 @@ -Installation -************ - -The simplest way to install Eplain is simply to install the file -`eplain.tex' in a directory where TeX will find it. What that -directory is obviously depends on your operating system and TeX -installation. I personally install `eplain.tex' in a directory -`/usr/local/lib/texmf/tex/plain'. - - If you want, you can also create a format (`.fmt') file for Eplain, -which will eliminate the time spent reading the macro source file with -`\input'. You do this by issuing a sequence of Unix commands something -like this: - - prompt$ touch eplain.aux - prompt$ initex - This is TeX, ... - **&plain eplain - (eplain.tex) - *\dump - ... MESSAGES ... - -You must make sure that `eplain.aux' exists _before_ you run `initex'; -otherwise, warning messages about undefined labels will never be issued. - - You then have to install the resulting `eplain.fmt' in some system -directory or set an environment variable to tell TeX how to find it. I -install the format files in `/usr/local/lib/texmf/ini'; the environment -variable for the Web2C port of TeX to Unix is `TEXFORMATS'. - - Some implementations of TeX (including Web2C) use the name by which -TeX is invoked to determine what format to read. For them, you should -make a link to the `virtex' program named `etex', and then install the -format file with the name `etex.fmt'. This lets users invoke TeX as -`etex' and get the format file read automatically, without having to -say `&eplain'. - - For convenience, the file `etex.tex' in the distribution directory -does `\input eplain' and then `\dump', so that if you replace `eplain' -with `etex' in the example above, the format file will end up with the -right name. - - The `install' target in the `Makefile' does all this properly for -Unix systems and Web2C. You may have to change the pathnames. - - Under emtex, `eaj@acpub.duke.edu' says that - - tex386 -i ^&plain eplain \dump - -produces a format file. - diff --git a/Master/texmf-dist/doc/eplain/base/Makefile b/Master/texmf-dist/doc/eplain/base/Makefile deleted file mode 100644 index 6ff999f6a73..00000000000 --- a/Master/texmf-dist/doc/eplain/base/Makefile +++ /dev/null @@ -1,97 +0,0 @@ -# Makefile for Eplain. This file is public domain. - -VERSION = 3.0 -SOURCES = arrow.tex btxmac.tex ifpdf.sty path.sty texnames.sty xeplain.tex -SUPPORT = add-date add-version AUTHORS ChangeLog COPYING etex.tex fix-checksum \ - INSTALL Makefile merge NEWS PROJECTS README -MANUALS = $(patsubst %,doc/%,Makefile *.texi btxdoc.bib btxdoc.tex texinfo.tex) -TESTS = $(patsubst %,test/%,*.tex *.bib *.map *.mst *.eps) -UTILS = util/idxuniq util/trimsee - -DIST_FILES = eplain.tex doc/eplain.info $(SOURCES) $(SUPPORT) $(MANUALS) \ - $(TESTS) $(UTILS) -DIST_NAME = eplain-$(VERSION) - -TAR_FLAGS = -GZIP_FLAGS = - - -.PHONY: default alldoc doc dvi pdf html info btxdoc dist -.PHONY: clean mostlyclean distclean maintainer-clean -.DELETE_ON_ERROR: - - -default: eplain.tex - -eplain.tex: merge $(SOURCES) - version=$(VERSION) ./merge - -etex.fmt: eplain.tex - rm -f etex.aux - cp /dev/null etex.aux - initex \&plain etex | grep -v '^\\font' - - -alldoc: - cd doc && make - -doc: - cd doc && make doc - -dvi: - cd doc && make dvi - -pdf: - cd doc && make pdf - -html: - cd doc && make html - -info doc/eplain.info: - cd doc && make info - -btxdoc: - cd doc && make btxdoc - -INSTALL: - cd doc && make ../INSTALL - - -dist: $(DIST_FILES) - @rm -rf $(DIST_NAME) - @echo D $(DIST_NAME) - @mkdir $(DIST_NAME) - @for file in $(DIST_FILES); do \ - echo A $(DIST_NAME)/$$file; \ - cp --parents $$file $(DIST_NAME); \ - done - @echo C $(DIST_NAME).tar.gz - @tar -c $(TAR_FLAGS) $(DIST_NAME) | gzip $(GZIP_FLAGS) > $(DIST_NAME).tar.gz - @rm -rf $(DIST_NAME) - - -define clean-cmds -rm -rf $(DIST_NAME) etex.aux etex.log -endef - -define distclean-cmds -$(clean-cmds) -rm -f etex.fmt $(DIST_NAME).tar.gz -endef - -define maintainer-clean-cmds -$(distclean-cmds) -rm -f eplain.tex -endef - -clean mostlyclean: - $(clean-cmds) - cd doc && make $@ - -distclean: - $(distclean-cmds) - cd doc && make distclean - -maintainer-clean: - $(maintainer-clean-cmds) - cd doc && make maintainer-clean diff --git a/Master/texmf-dist/doc/eplain/base/NEWS b/Master/texmf-dist/doc/eplain/base/NEWS deleted file mode 100644 index 2b7f9364d7c..00000000000 --- a/Master/texmf-dist/doc/eplain/base/NEWS +++ /dev/null @@ -1,87 +0,0 @@ -This file records noteworthy changes. This file is public domain. - -3.0 (20 September 2005) -* Eplain now hosted at Sarovar: http://sarovar.org/projects/eplain/ -* Support for hyperlinks! -* Support for (a few) LaTeX packages, notably graphicx and color. -* Incorporated ifpdf.sty into eplain.tex [2005-08-15]. -* Many improvements of double-column macros by Stepan Kasal. -* ConTeXt compatibility; do not wipe out toc file unnecessarily to - allow multiple contents. [2005-08-12]. -* Avoid pagebreak at the xref \write before a list item. [2004-07-26] -* When under \indexproofing, allow hyphenation of indexed words and - avoid shift of page body. [2004-08-31] -* New documentation for the hyperlinks and the LaTeX package support, - many improvements of the old docs. - -2.8 (2 September 2000) -* Added a section on user-defined environments to progdef.texi and - fixed a few typos in documentation. Suggested by Paul Abrahams - [25 April 1999] -* Added a fix to a buggy double-column macro that Adam Lewenberg - introduced when attempting to fix the balancing macros. - [9 April 2000] - -2.7 (14 January 1998) -* Added the control sequence \gutterbox as a hook to add arbitrary - vertical material between columns in multi-column mode. [5 December 1997] -* Removed spurious space in \verbatim macro. [26 March 1997] -* Added some code to the multiple columns section so that when - switching from multi- to single-columns lines are not lost. - [22 September 1996]. -* Changed \smash to \smash@@ in arrow.tex to allow arrow.tex to work with - amstex. [2 March 1996]. -* Changed all dimension values in margin setting macros to 'true'; redefined - \magnification so that this works. - -2.6 (2 May 1994) -* Indexing support (in conjunction with MakeIndex). -* Generalization of .toc files for lists of figures/tables, etc. -* \commdiag and other arrow macros work again. -* \eqalignno right-justifies the first column in \leftdisplays, as in - non-leftdisplays. - -2.5 (31 March 1994) -* Do not ignore first \ref command. -* Make \verbatim (and the || feature) work again (thanks to Dorai Sitaram). - -2.4 (16 March 1994) -* \catcode of @ properly restored (reported by adam@symcom.math.uiuc.edu). -* `| ' in \verbatim argument documented (also reported by adam). -* | not hardwired as the \verbatim escape character (thanks to - dorai@cs.rice.edu). -* Defining \noarrow before eplain.tex is read omits arrow macros - (suggested by Rex Shudde <0024P@NAVPGS.BITNET> and - murray@macadam.mpce.mq.edu.au.) -* Double column macros revamped (thanks to guichard@fermat.whitman.edu) so - \singlecolumn can be invoked on the same page as \doublecolumns. - 3- and 4-column typesetting also supported. - Column ejects also supported (sort of). -* \parskip set to zero before each footnote (but not for the footnote text). -* \ref and \cite conflicts with amstex described in manual. - -2.3 (1 March 1993) - -* New macros for arbitrary cross-references. -* \iterate is redefined to allow \else in loops. -* texnames.sty uses \spacefactor1000 instead of an empty hbox to handle - \TeX at the end of a sentence. -* New macros for hooks and properties. -* \centereddisplays and \leftdisplays can be repeated, and called in any - order. -* New macros \csn and \ece to do common expansion things. - -2.2 (11 November 1992) -* New \toks register \everylist, expanded at the start of every list. -* \footnoterulewidth defined as 2in, not 2true in, thus allowing the use - of \mag after reading eplain.tex. The `2true in' was Knuth's, but I - don't know why he did it. -* \obeywhitespace works inside a \vbox. -* \boxit is \long, and uses \ehrule and \evrule. -* \writenumberedtocentry expands the chapter number, so `\the - ' can be used. -* \verbatim doesn't begin and end with \par, so it can be used in the - middle of a paragraph. -* \pathafterhook added to \path in path.sty, so macros can execute - cleanup actions. -* The \path command and friends are documented in the manual. diff --git a/Master/texmf-dist/doc/eplain/base/PROJECTS b/Master/texmf-dist/doc/eplain/base/PROJECTS deleted file mode 100644 index d24baf64c58..00000000000 --- a/Master/texmf-dist/doc/eplain/base/PROJECTS +++ /dev/null @@ -1,18 +0,0 @@ -This file is public domain. - -How about list processing macros like those in ``Tex in Practice''? - -In TUGboat volume 11 number 3, Amy Hendrickson gives some modified -routines for \newcount that do work inside groups. Perhaps they should -be included. - -FABROADI@CUGSBVM.BITNET suggests that the verbatim macros be extended to -allow things like: - \verbatim{first line - second line - third line} -to optionally have line numbers. - -Generalize toc files to other kinds of generated listings (e.g., figures). - -Define a spec for \ifempty and write a robust macro to implement it. diff --git a/Master/texmf-dist/doc/eplain/base/README b/Master/texmf-dist/doc/eplain/base/README deleted file mode 100644 index 9ec64791292..00000000000 --- a/Master/texmf-dist/doc/eplain/base/README +++ /dev/null @@ -1,50 +0,0 @@ -(This file is public domain.) - -This file describes the Eplain (expanded or extended plain, take your -pick) distribution. The current version number is at the beginning and -end of eplain.tex, among other places. - -See INSTALL for installation and basic usage hints. - -eplain.tex is the macros. This file is generated (by the Unix shell -script merge) from xeplain.tex, btxmac.tex, arrow.tex, and other files. -Unless you are hacking the macros, you should have no need to regenerate -the file; just use the one that's provided. If you do regenerate it, -you will need a date program which understands the %B format (GNU date does). - -doc/eplain.texi and other .texi files in the doc directory describe the -features currently provided. If you think of additional features that -would be useful, or extensions to existing ones, see email below. - -doc/eplain.info is the Info file resulting from doc/eplain.texi and -other .texi files in the doc directory, which GNU Emacs and GNU Info -can read. You'll need makeinfo, from the GNU Texinfo distribution, to -process it, if you happen to need to. Here is the line I added to the -dir file, in the top-level Emacs info directory: - * Eplain: (eplain). Expansions to plain TeX. -See http://www.gnu.org/software/texinfo for more information about Texinfo. - -The files in the test subdirectory are of course for testing of various -features, but also provide some examples of usage. - -The util subdirectory contains some useful scripts to help with "see" -and "see also" index entries, and making index entries with -hyperlinks. - -You can get the current development sources for Eplain via CVS from -sarovar, http://sarovar.org/projects/eplain. - -Most of these macros, like most of the manual, are in the public domain. -The exceptions are the commutative diagram macros (the file arrow.tex) -and the documentation for them (the file doc/arrow.texi). Both of -arrow.tex and doc/arrow.texi are under the GNU General Public -License (see the file headers for details). - -Eplain was developed as part of the book TeX for the Impatient, -published by Addison-Wesley in 1990. It is now freely available, from -http://tug.org/ftp/tex/impatient, with a free French translation. - -Eplain is currently maintained by Oleg Katsitadze. - -email: bug-eplain@tug.org -www: http://www.tug.org/eplain diff --git a/Master/texmf-dist/doc/eplain/base/arrow.texi b/Master/texmf-dist/doc/eplain/base/arrow.texi deleted file mode 100644 index c5d4786cef3..00000000000 --- a/Master/texmf-dist/doc/eplain/base/arrow.texi +++ /dev/null @@ -1,781 +0,0 @@ -@c arrow.texi - documentation for Eplain's commutative diagrams. -@c Copyright (C) 1991, 1992 Steven Smith. -@c This is part of the Eplain manual. -@c -@c This file is free software; you can redistribute it and/or modify -@c it under the terms of the GNU General Public License as published by -@c the Free Software Foundation; either version 2, or (at your option) -@c any later version. -@c -@c This file is distributed in the hope that it will be useful, -@c but WITHOUT ANY WARRANTY; without even the implied warranty of -@c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@c GNU General Public License for more details. -@c -@c You should have received a copy of the GNU General Public License -@c along with this file; if not, write to the Free Software -@c Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -@c 02110-1301, USA. - -@comment \input texinfo -@comment setfilename arrow.info -@comment settitle Arrow Theoretic Diagrams - -@c Input arrow macros without altering texinfo's \catcodes. -@c Use the arrow macros in an `@iftex @tex ... @end iftex' environment. - -@iftex -@catcode`@$=3 @catcode`@%=14 @catcode`@&=4 @catcode`@#=6 -@catcode`@^=7 @catcode`@_=8 -@catcode`@"=@other @catcode`@<=@other @catcode`@>=@other -@catcode`@\=0 -\catcode`\@=\other -\input arrow -\catcode`\@=0 -@catcode`@\=@active -@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other -@catcode`@^=@active @catcode`@_=@active -@catcode`@"=@active @catcode`@<=@active @catcode`@>=@active -@end iftex - - -@node Arrow theoretic diagrams -@chapter Arrow theoretic diagrams - -This chapter describes definitions for producing commutative diagrams. - -Steven Smith wrote this documentation (and the macros). - -@menu -* Slanted lines and vectors:: -* Commutative diagrams:: -@end menu - -@node Slanted lines and vectors -@section Slanted lines and vectors - -The macros @code{\drawline} -@findex drawline -and @code{\drawvector} -@findex drawvector -provide the capability found in @LaTeX{}'s -@cindex @LaTeX{} -@cindex picture mode -picture mode to draw slanted lines and vectors of certain directions. -Both of these macros take three arguments: two integer arguments to -specify the direction of the line or vector, and one argument to specify -its length. For example, @samp{\drawvector(-4,1)@{60pt@}} produces the -vector -@iftex -@tex -$$\vbox{\hbox{\drawvector(-4,1){60pt}}\smallskip - \hbox{$\mathop{\hbox to60pt{\leftarrowfill\hskip-5pt\rightarrowfill}} - \limits_{{\fam0 60\,pt}}$}}$$ -@end tex -@end iftex -@ifinfo - -@center (A vector in the 2d quadrant of length 60 pt appears here.) - -@end ifinfo -@cindex lines -@cindex vectors -which lies in the 2d quadrant, has a slope of minus 1/4, and a width of -60 pt. - -Note that if an @code{\hbox} is placed around @code{\drawline} or -@code{\drawvector}, then the width of the @code{\hbox} will be the -positive dimension specified in the third argument, except when a -vertical line or vector is specified, e.g., -@code{\drawline(0,1)@{1in@}}, which has zero width. If the specified -direction lies in the 1st or 2d quadrant (e.g., @code{(1,1)} or -@code{(-2,3)}), then the @code{\hbox} will have positive height and zero -depth. Conversely, if the specified direction lies in the 3d or 4th -quadrant (e.g., @code{(-1,-1)} or @code{(2,-3)}), then the @code{\hbox} -will have positive depth and zero height. - -There are a finite number of directions that can be specified. For -@code{\drawline}, the absolute value of each integer defining the -direction must be less than or equal to six, i.e., @code{(7,-1)} is -incorrect, but @code{(6,-1)} is acceptable. For @code{\drawvector}, the -absolute value of each integer must be less than or equal to four. -Furthermore, the two integers cannot have common divisors; therefore, if -a line with slope 2 is desired, say @code{(2,1)} instead of -@code{(4,2)}. Also, specify @code{(1,0)} instead of, say, @code{(3,0)} -for horizontal lines and likewise for vertical lines. - -Finally, these macros depend upon the @LaTeX{} font @code{line10}. If -your site doesn't have this font, ask your system administrator to get -it. Future enhancements will include macros to draw dotted lines and -dotted vectors of various directions. - - -@node Commutative diagrams -@section Commutative diagrams - -@cindex commutative diagrams - -The primitive commands @code{\drawline} and @code{\drawvector} can be -used to typeset arrow theoretic diagrams. This section describes (1) -macros to facilitate typesetting arrows and morphisms, and (2) macros to -facilitate the construction of commutative diagrams. All macros -described in this section must be used in math mode. - -@menu -* Arrows and morphisms:: -* Construction of commutative diagrams:: -* Commutative diagram parameters:: -@end menu - -@node Arrows and morphisms -@subsection Arrows and morphisms -@cindex arrows -@cindex morphisms - -The macros @code{\mapright} and @code{\mapleft} produce right and left -@findex mapright -@findex mapleft -pointing arrows, respectively. Use superscript (@code{^}) to place a -morphism above the arrow, e.g., @samp{\mapright^\alpha}; use subscript -(@code{_}) to place a morphism below the arrow, e.g., -@samp{\mapright_@{\tilde l@}}. Superscripts and subscripts may be used -simulataneously, e.g., @samp{\mapright^\pi_@{\rm epimor.@}}. - -Similarly, the macros @code{\mapup} and @code{\mapdown} produce up and -@findex mapup -@findex mapdown -down pointing arrows, respectively. Use @code{\rt} -@findex rt -to place a morphism to the right of the arrow, e.g., @samp{\mapup\rt@{\rm -id@}}; use @code{\lft} -@findex lft -to place a morphism to the left of the arrow, e.g., @samp{\mapup\lft\omega}. -@code{\lft} and @code{\rt} may be used simultaneously, e.g., -@samp{\mapdown\lft\pi\rt@{\rm monomor.@}}. - -Slanted arrows are produced by the macro @code{\arrow}, which takes -@findex arrow -a direction argument (e.g., @samp{\arrow(3,-4)}). Use @code{\rt} and -@code{\lft} to place morphisms to the right and left, respectively, of -the arrow. A slanted line (no arrowhead) is produced with the macro -@code{\sline}, -@findex sline -whose syntax is identical to that of @code{\arrow}. - -The length of these macros is predefined by the default @TeX{} -dimensions @code{\harrowlength}, -@findex harrowlength -for horizontal arrows (or lines), -@code{\varrowlength}, -@findex varrowlength -for vertical arrows (or lines), and -@code{\sarrowlength}, -@findex sarrowlength -for slanted arrows (or lines). To change any of these dimensions, say, -e.g., @samp{\harrowlength=40pt}. As with all other @TeX{} dimensions, -the change may be as global or as local as you like. Furthermore, the -placement of morphisms on the arrows is controlled by the dimensions -@code{\hmorphposn}, -@findex hmorphposn -@code{\vmorphposn}, -@findex vmorphposn -and @code{\morphdist}. -@findex morphdist -The first two dimensions control the horizontal and vertical position of -the morphism from its default position; the latter dimension controls -the distance of the morphism from the arrow. If you have more than one -morphism per arrow (i.e., a @code{^}/@code{_} or @code{\lft}/@code{\rt} -construction), use the parameters -@code{\hmorphposnup}, -@findex hmorphposnup -@code{\hmorphposndn}, -@findex hmorphposndn -@code{\vmorphposnup}, -@findex vmorphposnup -@code{\vmorphposndn}, -@findex vmorphposndn -@code{\hmorphposnrt}, -@findex hmorphposnrt -@code{\hmorphposnlft}, -@findex hmorphposnlft -@code{\vmorphposnrt}, -@findex vmorphposnrt -and @code{\vmorphposnlft}. -@findex vmorphposnlft -The default values of all these dimensions are provided in the section -on parameters that follows below. - -There is a family of macros to produce horizontal lines, arrows, and -adjoint arrows. The following macros produce horizontal maps and have -the same syntax as @code{\mapright}: - -@table @code - -@item \mapright -@findex mapright -@code{$X\mapright Y$} -@iftex -@tex -$\equiv$ $\harrowlength=20ptX\mapright Y$. -@end tex -@end iftex -@ifinfo -= (a right arrow). -@end ifinfo - -@item \mapleft -@findex mapleft -@code{$X\mapleft Y$} -@iftex -@tex -$\equiv$ $\harrowlength=20ptX\mapleft Y$. -@end tex -@end iftex -@ifinfo -= (a left arrow). -@end ifinfo - -@item \hline -@findex hline -@code{$X\hline Y$} -@iftex -@tex -$\equiv$ $\harrowlength=20ptX\hline Y$. -@end tex -@end iftex -@ifinfo -= (horizontal line) -@end ifinfo - -@ignore -@item \dothline -@findex dothline -(dotted horizontal line) {@bf Unimplemented.} -@end ignore - -@item \bimapright -@findex bimapright -@code{$X\bimapright Y$} -@iftex -@tex -$\equiv$ $\harrowlength=20ptX\bimapright Y$. -@end tex -@end iftex -@ifinfo -= (two right arrows). -@end ifinfo - -@item \bimapleft -@findex bimapleft -@code{$X\bimapleft Y$} -@iftex -@tex -$\equiv$ $\harrowlength=20ptX\bimapleft Y$. -@end tex -@end iftex -@ifinfo -= (two left arrows) -@end ifinfo - -@item \adjmapright -@findex adjmapright -@code{$X\adjmapright Y$} -@iftex -@tex -$\equiv$ $\harrowlength=20ptX\adjmapright Y$. -@end tex -@end iftex -@ifinfo -= (two adjoint arrows; left over right) -@end ifinfo - -@item \adjmapleft -@findex adjmapleft -@code{$X\adjmapleft Y$} -@iftex -@tex -$\equiv$ $\harrowlength=20ptX\adjmapleft Y$. -@end tex -@end iftex -@ifinfo -= (two adjoint arrows; right over left) -@end ifinfo - -@item \bihline -@findex bihline -@code{$X\bihline Y$} -@iftex -@tex -$\equiv$ $\harrowlength=20ptX\bihline Y$. -@end tex -@end iftex -@ifinfo -= (two horizontal lines) -@end ifinfo -@end table - -There is also a family of macros to produce vertical lines, arrows, and -adjoint arrows. The following macros produce vertical maps and have -the same syntax as @code{\mapdown}: - -@table @code - -@item \mapdown -@findex mapdown -(a down arrow) - -@item \mapup -@findex mapup -(an up arrow) - -@item \vline -@findex vline -(vertical line) - -@ignore -@item \dotvline -@findex dotvline -(dotted vertical line) {@bf Unimplemented.} -@end ignore - -@item \bimapdown -@findex bimapdown -(two down arrows) - -@item \bimapup -@findex bimapup -(two up arrows) - -@item \adjmapdown -@findex adjmapdown -(two adjoint arrows; down then up) - -@item \adjmapup -@findex adjmapup -(two adjoint arrows; up then down) - -@item \bivline -@findex bivline -(two vertical lines) -@end table - -Finally, there is a family of macros to produce slanted lines, arrows, -and adjoint arrows. The following macros produce slanted maps and have -the same syntax as @code{\arrow}: - -@table @code - -@item \arrow -@findex arrow -(a slanted arrow) - -@item \sline -@findex sline -(a slanted line) - -@item \biarrow -@findex biarrow -(two straight arrows) - -@item \adjarrow -@findex adjarrow -(two adjoint arrows) - -@item \bisline -@findex bisline -(two straight lines) - -@end table - -The width between double arrows is controlled by the parameter -@code{\channelwidth}. -@findex channelwidth -The parameters @code{\hchannel} and @code{\vchannel}, if nonzero, -override @code{\channelwidth} by controlling the horizontal and vertical -shifting from the first arrow to the second. - -There are no adornments on these arrows to distinguish inclusions from -epimorphisms from monomorphisms. Many texts, such as Lang's book -@cite{Algebra}, use as a tasteful alternative the symbol `inc' (in roman) next -to an arrow to denote inclusion. -@cindex Lang, Serge - -Future enhancements will include a mechanism to draw curved arrows -found in, e.g., the Snake Lemma, by employing a version of the -@code{\path} macros of Appendix D of @cite{The @TeX{}book}. -@cindex Snake Lemma - - -@node Construction of commutative diagrams -@subsection Construction of commutative diagrams - -There are two approaches to the construction of commutative diagrams -described here. The first approach, and the simplest, treats -commutative diagrams like fancy matrices, as Knuth does in Exercise -18.46 of @cite{The @TeX{}book}. This case is covered by the macro -@code{\commdiag}, -@findex commdiag -which is an altered version of the Plain @TeX{} macro @code{\matrix}. -@findex matrix -An example suffices to demonstrate this macro. The following -commutative diagram (illustrating the covering homotopy property; Bott -and Tu, @cite{Differential Forms in Algebraic Topology}) -@cindex Bott, Raoul -@cindex Tu, Loring W. -@cindex covering homotopy property -@iftex -@tex -$$\commdiag{Y&\mapright^f&E\cr \mapdown&\arrow(3,2)\lft{f_t}&\mapdown\cr -Y\times I&\mapright^{\bar f_t}&X}$$ -@end tex -@end iftex -@ifinfo - -@center (A commutative diagram appears here in the printed output.) - -@end ifinfo -is produced with the code - -@example -$$\commdiag@{Y&\mapright^f&E\cr \mapdown&\arrow(3,2)\lft@{f_t@}&\mapdown\cr -Y\times I&\mapright^@{\bar f_t@}&X@}$$ -@end example - -Of course, the parameters may be changed to produce a different effect. -The following commutative diagram (illustrating the universal mapping -property; Warner, @cite{Foundations of Differentiable Manifolds and Lie -Groups}) -@cindex Warner, Frank W. -@cindex universal mapping property -@iftex -@tex -$$\varrowlength=20pt -\commdiag{V\otimes W\cr \mapup\lft\phi&\arrow(3,-1)\rt{\tilde l}\cr -V\times W&\mapright^l&U\cr}$$ -@end tex -@end iftex -@ifinfo - -@center (A commutative diagram appears here in the printed output.) - -@end ifinfo -is produced with the code - -@example -$$\varrowlength=20pt -\commdiag@{V\otimes W\cr \mapup\lft\phi&\arrow(3,-1)\rt@{\tilde l@}\cr -V\times W&\mapright^l&U\cr@}$$ -@end example - -A diagram containing isosceles triangles is achieved by placing the apex -of the triangle in the center column, as shown in the example -(illustrating all constant minimal realizations of a linear system; -Brockett, @cite{Finite Dimensional Linear Systems}) -@cindex Brockett, Roger W. -@cindex minimal realizations -@cindex linear systems theory -@iftex -@tex -$$\sarrowlength=.42\harrowlength -\commdiag{&R^m\cr &\arrow(-1,-1)\lft{\fam6 B}\quad \arrow(1,-1)\rt{\fam6 G}\cr -R^n&\mapright^{\fam6 P}&R^n\cr -\mapdown\lft{e^{{\fam6 A}t}}&&\mapdown\rt{e^{{\fam6 F}t}}\cr -R^n&\mapright^{\fam6 P}&R^n\cr -&\arrow(1,-1)\lft{\fam6 C}\quad \arrow(-1,-1)\rt{\fam6 H}\cr -&R^q\cr}$$ -@end tex -@end iftex -@ifinfo - -@center (A commutative diagram appears here in the printed output.) - -@end ifinfo -which is produced with the code - -@example -$$\sarrowlength=.42\harrowlength -\commdiag@{&R^m\cr &\arrow(-1,-1)\lft@{\bf B@}\quad \arrow(1,-1)\rt@{\bf G@}\cr -R^n&\mapright^@{\bf P@}&R^n\cr -\mapdown\lft@{e^@{@{\bf A@}t@}@}&&\mapdown\rt@{e^@{@{\bf F@}t@}@}\cr -R^n&\mapright^@{\bf P@}&R^n\cr -&\arrow(1,-1)\lft@{\bf C@}\quad \arrow(-1,-1)\rt@{\bf H@}\cr -&R^q\cr@}$$ -@end example - -Other commutative diagram examples appear in the file -@code{commdiags.tex}, which is distributed with this package. - -In these examples the arrow lengths and line slopes were carefully -chosen to blend with each other. In the first example, the default -settings for the arrow lengths are used, but a direction for the arrow -must be chosen. The ratio of the default horizontal and vertical arrow -lengths is approximately the golden mean -@cindex golden mean -@iftex -@tex -$\gamma=1.618\ldots$; -@end tex -@end iftex -@ifinfo -gamma=1.618...; -@end ifinfo -@cindex golden mean -the arrow direction closest to this mean is @code{(3,2)}. In the second -example, a slope of -@iftex -@tex -$-1/3$ -@end tex -@end iftex -@ifinfo --1/3 -@end ifinfo -is desired and the default horizontal arrow length is 60 pt; therefore, -choose a vertical arrow length of 20 pt. You may affect the interline -glue settings of @code{\commdiag} by redefining the macro -@code{\commdiagbaselines}. -@findex commdiagbaselines -(cf@. Exercise 18.46 of @cite{The @TeX{}book} and the section on -parameters below.) - -The width, height, and depth of all morphisms are hidden so that the -morphisms' size do not affect arrow positions. This can cause a large -morphism at the top or bottom of a diagram to impinge upon the text -surrounding the diagram. To overcome this problem, use @TeX{}'s -@code{\noalign} primitive to insert a @code{\vskip} immediately above or -below the offending line, e.g., -@samp{$$\commdiag@{\noalign@{\vskip6pt@}X&\mapright^\int&Y\cr ...@}}. - -The macro @code{\commdiag} is too simple to be used for more complicated -diagrams, which may have intersecting or overlapping arrows. A second -approach, borrowed from Francis Borceux's @cite{Diagram} macros for -@LaTeX{}, treats the commutative diagram like a grid of identically -shaped boxes. To compose the commutative diagram, first draw an equally -spaced grid, e.g., -@cindex grid -@cindex Borceux, Francis -@cindex Diagram, macros for LaTeX -@iftex -@tex -$$\def\grid{\cdot&\cdot&\cdot&\cdot&\cdot&\cdot\cr} -\matrix{\grid\grid\grid\grid}$$ -@end tex -@end iftex -@ifinfo - -@center . . . . . . -@center . . . . . . -@center . . . . . . -@center . . . . . . - -@end ifinfo -on a piece of scratch paper. Then draw each element (vertices and -arrows) of the commutative diagram on this grid, centered at each -grid point. Finally, use the macro @code{\gridcommdiag} -@findex gridcommdiag -to implement your design as a @TeX{} alignment. For example, the cubic -diagram -@cindex cube -@iftex -@tex -$$\harrowlength=48pt \varrowlength=48pt \sarrowlength=20pt -\def\cross#1#2{\setbox0=\hbox{$#1$}% - \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}} -\gridcommdiag{&&B&&\mapright^b&&D\cr -&\arrow(1,1)\lft a&&&&\arrow(1,1)\lft d\cr -A&&\cross{\hmorphposn=12pt\mapright^c}{\vmorphposn=-12pt\mapdown\lft f} -&&C&&\mapdown\rt h\cr\cr -\mapdown\lft e&&F&&\cross{\hmorphposn=-12pt\mapright_j} -{\vmorphposn=12pt\mapdown\rt g}&&H\cr -&\arrow(1,1)\lft i&&&&\arrow(1,1)\rt l\cr -E&&\mapright_k&&G\cr}$$ -@end tex -@end iftex -@ifinfo - -@center (A commutative diagram appears here.) - -@end ifinfo -that appears in Francis Borceux's documentation can be implemented on -a 7 by 7 grid, and is achieved with the code - -@example -$$\harrowlength=48pt \varrowlength=48pt \sarrowlength=20pt -\def\cross#1#2@{\setbox0=\hbox@{$#1$@}% - \hbox to\wd0@{\hss\hbox@{$#2$@}\hss@}\llap@{\unhbox0@}@} -\gridcommdiag@{&&B&&\mapright^b&&D\cr -&\arrow(1,1)\lft a&&&&\arrow(1,1)\lft d\cr -A&&\cross@{\hmorphposn=12pt\mapright^c@}@{\vmorphposn=-12pt\mapdown\lft f@} -&&C&&\mapdown\rt h\cr\cr -\mapdown\lft e&&F&&\cross@{\hmorphposn=-12pt\mapright_j@} -@{\vmorphposn=12pt\mapdown\rt g@}&&H\cr -&\arrow(1,1)\lft i&&&&\arrow(1,1)\rt l\cr -E&&\mapright_k&&G\cr@}$$ -@end example - -The dimensions @code{\hgrid} and @code{\vgrid} -@findex hgrid -@findex vgrid -control the horizontal and vertical spacing of the grid used by -@code{\gridcommdiag}. The default setting for both of these dimensions -is 15 pt. Note that in the example of the cube the arrow lengths must -be adjusted so that the arrows overlap into neighboring boxes by the -desired amount. Hence, the @code{\gridcommdiag} method, albeit more -powerful, is less automatic than the simpler @code{\commdiag} method. -Furthermore, the ad hoc macro @code{\cross} is introduced to allow the -effect of overlapping arrows. Finally, note that the positions of four -of the morphisms are adjusted by setting @code{\hmorphposn} and -@code{\vmorphposn}. - -One is not restricted to a square grid. For example, the proof of -Zassenhaus's Butterfly Lemma can be illustrated by the diagram (appearing -in Lang's book @cite{Algebra}) -@cindex Zassenhaus, Hans -@cindex Lang, Serge -@cindex Butterfly Lemma -@iftex -@tex -$$\hgrid=16pt \vgrid=8pt \sarrowlength=32pt -\def\cross#1#2{\setbox0=\hbox{$#1$}% - \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}} -\def\l#1{\llap{$#1$\hskip.5em}} -\def\r#1{\rlap{\hskip.5em$#1$}} -\gridcommdiag{&&U&&&&V\cr &&\bullet&&&&\bullet\cr -&&\sarrowlength=16pt\sline(0,1)&&&&\sarrowlength=16pt\sline(0,1)\cr -&&\l{u(U\cap V)}\bullet&&&&\bullet\r{(U\cap V)v}\cr -&&&\sline(2,-1)&&\sline(2,1)\cr -&&\cross{=}{\sline(0,1)}&&\bullet&&\cross{=}{\sline(0,1)}\cr\cr -&&\l{^{\textstyle u(U\cap v)}}\bullet&&\cross{=}{\sline(0,1)}&& - \bullet\r{^{\textstyle(u\cap V)v}}\cr -&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)\cr -\l{u}\bullet&&&&\bullet&&&&\bullet\r{v}\cr -&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)\cr -&&\bullet&&&&\bullet\cr &&u\cap V&&&&U\cap v\cr}$$ -@end tex -@end iftex -@ifinfo - -@center (A commutative diagram appears here.) - -@end ifinfo -This diagram may be implemented on a 9 by 12 grid with an aspect ratio -of 1/2, and is set with the code - -@example -$$\hgrid=16pt \vgrid=8pt \sarrowlength=32pt -\def\cross#1#2@{\setbox0=\hbox@{$#1$@}% - \hbox to\wd0@{\hss\hbox@{$#2$@}\hss@}\llap@{\unhbox0@}@} -\def\l#1@{\llap@{$#1$\hskip.5em@}@} -\def\r#1@{\rlap@{\hskip.5em$#1$@}@} -\gridcommdiag@{&&U&&&&V\cr &&\bullet&&&&\bullet\cr -&&\sarrowlength=16pt\sline(0,1)&&&&\sarrowlength=16pt\sline(0,1)\cr -&&\l@{u(U\cap V)@}\bullet&&&&\bullet\r@{(U\cap V)v@}\cr -&&&\sline(2,-1)&&\sline(2,1)\cr -&&\cross@{=@}@{\sline(0,1)@}&&\bullet&&\cross@{=@}@{\sline(0,1)@}\cr\cr -&&\l@{^@{\textstyle u(U\cap v)@}@}\bullet&&\cross@{=@}@{\sline(0,1)@}&& - \bullet\r@{^@{\textstyle(u\cap V)v@}@}\cr -&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)\cr -\l@{u@}\bullet&&&&\bullet&&&&\bullet\r@{v@}\cr -&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)\cr -&&\bullet&&&&\bullet\cr &&u\cap V&&&&U\cap v\cr@}$$ -@end example - -Again, the construction of this diagram requires careful choices for the -arrow lengths and is facilitated by the introduction of the ad hoc -macros @code{\cross}, @code{\r}, and @code{\l}. Note also that -superscripts were used to adjust the position of the vertices -@iftex -@tex -$u(U\cap v)$ and $(u\cap V)v$. -@end tex -@end iftex -@ifinfo -u(U intersection v) and (u intersection V)v. -@end ifinfo -Many diagrams may be typeset with the predefined macros that appear -here; however, ingenuity is often required to handle special cases. - -@node Commutative diagram parameters -@subsection Commutative diagram parameters - -The following is a list describing the parameters used in the -commutative diagram macros. These dimensions may be changed globally or -locally. - -@table @code -@item \harrowlength -@findex harrowlength -(Default: 60 pt) The length of right or left arrows. - -@item \varrowlength -@findex varrowlength -(Default: 0.618@code{\harrowlength}) The length of up or down -arrows. - -@item \sarrowlength -@findex sarrowlength -(Default: 60 pt) The horizontal length of slanted arrows. - -@item \hmorphposn -@findex hmorphposn -(Default: 0 pt) The horizontal position of the morphism with -respect to its default position. There are also the dimensions -@code{\hmorphposnup}, -@findex hmorphposnup -@code{\hmorphposndn}, -@findex hmorphposndn -@code{\hmorphposnrt}, -@findex hmorphposnrt -and @code{\hmorphposnlft} -@findex hmorphposnlft -for @code{^}/@code{_} or @code{\lft}/@code{\rt} constructions. - -@item \vmorphposn -@findex vmorphposn -(Default: 0 pt) The vertical position of the morphism with -respect to its default position. There are also the dimensions -@code{\vmorphposnup}, -@findex vmorphposnup -@code{\vmorphposndn}, -@findex vmorphposndn -@code{\vmorphposnrt}, -@findex vmorphposnrt -and @code{\vmorphposnlft} -@findex vmorphposnlft -for @code{^}/@code{_} or @code{\lft}/@code{\rt} constructions. - -@item \morphdist -@findex morphdist -(Default: 4 pt) The distance of morphisms from slanted lines -or arrows. - -@item \channelwidth -@findex channelwidth -(Default: 3 pt) The distance between double lines or arrows. - -@item \hchannel, \vchannel -@findex hchannel -@findex vchannel -(Defaults: 0 pt) Overrides @code{\channelwidth}. The -horizontal and vertical shifts between double lines or arrows. - -@item \commdiagbaselines -@findex commdiagbaselines -(Default: @code{\baselineskip=15pt -\lineskip=3pt -\lineskiplimit=3pt }) -The parameters used by @code{\commdiag} for setting interline glue. - -@item \hgrid -@findex hgrid -(Default: 15 pt) The horizontal spacing of the grid used by -@code{\gridcommdiag}. - -@item \vgrid -@findex vgrid -(Default: 15 pt) The vertical spacing of the grid used by -@code{\gridcommdiag}. - -@end table - -@comment bye diff --git a/Master/texmf-dist/doc/eplain/base/btxdoc.bib b/Master/texmf-dist/doc/eplain/base/btxdoc.bib deleted file mode 100644 index 4eaf3eddc56..00000000000 --- a/Master/texmf-dist/doc/eplain/base/btxdoc.bib +++ /dev/null @@ -1,90 +0,0 @@ -Copyright (C) 1988, all rights reserved. - -@COMMENT(You may put a comment in a `comment' command, - the way you would with SCRIBE.) - -Or you may dispense with the command and simply give the comment, -as long as it's not within an entry. - -If you really want to put a comment inside an entry, simply -make up a never-to-be-used field. - -@FAKE-ENTRY - {fake-database-key, - never-to-be-used-field = "Even if this were a real entry, - I could still have a comment inside an entry - by making up a fake field" - } - -@string (SCRIBE-NOTE = {Chapter twelve and appendices E8 through E10 deal - with bibliographies}) - -The next entry shows some of the syntactically legal things that -those with the inclination may use.@ - -MaNuAl (scribe, - TITLE="Scribe Document Production System - - - User Manual", - ORGANIZATION = {Unilogic,}#" Ltd"# {. - }, - ADDRESS = "Pittsburgh", - MONTH -=aPR - ,YEAR=1984, - note = scribe-note, -) May the inclination not be with you. - - -@MISC{prime-number-theorem, - author = "Charles Louis Xavier Joseph de la Vall{\'e}e Poussin", - note = "A strong form of the prime number theorem, 19th century" } - -@INBOOK{chicago, - title = "The Chicago Manual of Style", - publisher = "University of Chicago Press", - edition = "Thirteenth", - year = 1982, - pages = "400--401", - key = "Chicago" } - -@BOOK{texbook, - author = "Donald E. Knuth", - title= "The {{\TeX}book}", - publisher = "Addison-Wesley", - year = 1984 } - -@BOOK{latex, - author = "Leslie Lamport", - title = "{\LaTeX \rm:} {A} Document Preparation System", - publisher = "Addison-Wesley", - year = 1986 } - -@UNPUBLISHED{btxdoc, - author = "Oren Patashnik", - title = "{{\BibTeX ing}}", - note = "Documentation for general {\BibTeX} users", - month = "8~" # feb, - year = 1988 } - -@UNPUBLISHED{btxhak, - author = "Oren Patashnik", - title = "Designing {\BibTeX} Styles", - note = "The part of \BibTeX's documentation - that's not meant for general users", - month = "8~" # feb, - year = 1988 } - -@BOOK{strunk-and-white, - author = "Strunk, Jr., William and E. B. White", - title = "The Elements of Style", - publisher = "Macmillan", - edition = "Third", - year = 1979 } - -@BOOK{van-leunen, - title = "A Handbook for Scholars", - author = "Mary-Claire van Leunen", - publisher = "Knopf", - year = 1979 } diff --git a/Master/texmf-dist/doc/eplain/base/btxdoc.tex b/Master/texmf-dist/doc/eplain/base/btxdoc.tex deleted file mode 100644 index 52723e08b69..00000000000 --- a/Master/texmf-dist/doc/eplain/base/btxdoc.tex +++ /dev/null @@ -1,1117 +0,0 @@ -% Copyright (C) 1988, all rights reserved. - -\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em - T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} - -\title{B\kern-.05em{\large I}\kern-.025em{\large B}\kern-.08em\TeX ing} -\author{Oren Patashnik} -\date{February 8, 1988} - -\documentstyle{article} -\begin{document} - -\maketitle - -\section{Overview} - -[This document will be expanded when \BibTeX\ version 1.00 comes out. -Please report typos, omissions, inaccuracies, -and especially unclear explanations -to me ({\tt patashnik@SCORE.STANFORD.EDU}). -Suggestions for improvements are wanted and welcome.] - -This documentation, for \BibTeX\ version 0.99b, -is meant for general \BibTeX\ users; -bibliography-style designers should read this document -and then read ``Designing \BibTeX\ Styles''~\cite{btxhak}, -which is meant for just them. - -This document has three parts: -Section~\ref{differences} -describes the differences between versions 0.98i and 0.99b -of \BibTeX\ and between the corresponding versions of the standard styles; -Section~\ref{latex-appendix} -updates Appendix~B.2 of the \LaTeX\ book~\cite{latex}; -and Section~\ref{odds-and-ends} -gives some general and specific tips -that aren't documented elsewhere. -It's assumed throughout that you're familiar with -the relevant sections of the \LaTeX\ book. - -This documentation also serves as sample input to help -\BibTeX\ implementors get it running. -For most documents, this one included, you produce the reference list by: -running \LaTeX\ on the document (to produce the {\tt aux} file(s)), -then running \BibTeX\ (to produce the {\tt bbl} file), -then \LaTeX\ twice more (first to find the information in the {\tt bbl} file -and then to get the forward references correct). -In very rare circumstances you may need an extra \BibTeX/\LaTeX\ run. - -\BibTeX\ version 0.99b should be used with \LaTeX\ version 2.09, -for which the closed bibliography format is the default; -to get the open format, use the optional document style {\tt openbib} -(in an open format there's a line break between major blocks of a -reference-list entry; in a closed format the blocks run together).] - -Note: \BibTeX\ 0.99b is not compatible with the old style files; -nor is \BibTeX\ 0.98i compatible with the new ones -(the new \BibTeX, however, is compatible with old database files). - -Note for implementors: \BibTeX\ provides logical-area names -\hbox{\tt TEXINPUTS:} for bibliography-style files and -\hbox{\tt TEXBIB:} for database files it can't otherwise find. - - -\section{Changes} -\label{differences} - -This section describes the differences between -\BibTeX\ versions 0.98i and 0.99b, and also between -the corresponding standard styles. -There were a lot of differences; -there will be a lot fewer between 0.99 and 1.00. - - -\subsection{New \BibTeX\ features} -\label{features} - -The following list explains \BibTeX's new features and how to use them. -\begin{enumerate} - -\item -With the single command `\hbox{\verb|\nocite{*}|}' -you can now include in the reference list -every entry in the database files, without having to explicitly -\verb|\cite| or \hbox{\verb|\nocite|} each entry. -Giving this command, in essence, -\hbox{\verb|\nocite|}s -all the enties in the database, in database order, -at the very spot in your document -where you give the command. - -\item -\label{concat} -You can now have as a field value (or an {\tt @STRING} definition) -the concatenation of several strings. -For example if you've defined -\begin{verbatim} - @STRING( WGA = " World Gnus Almanac" ) -\end{verbatim} -then it's easy to produce nearly-identical -{\tt title} fields for different entries: -\begin{verbatim} - @BOOK(almanac-66, - title = 1966 # WGA, - . . . - @BOOK(almanac-67, - title = 1967 # WGA, -\end{verbatim} -and so on. Or, you could have a field like -\begin{verbatim} - month = "1~" # jan, -\end{verbatim} -which would come out something like -`\hbox{\verb|1~January|}' or `\hbox{\verb|1~Jan.|}' in the {\tt bbl} file, -depending on how your bibliography style defines -the {\tt jan} abbreviation. -You may concatenate as many strings as you like -(except that there's a limit to the overall length -of the resulting field); -just be sure to put the concatenation character `{\tt\#}'$\!$, -surrounded by optional spaces or newlines, -between each successive pair of strings. - -\item -\BibTeX\ has a new cross-referencing feature, -explained by an example. -Suppose you say \hbox{\verb|\cite{no-gnats}|} in your document, -and suppose you have these two entries in your database file: -\begin{verbatim} - @INPROCEEDINGS(no-gnats, - crossref = "gg-proceedings", - author = "Rocky Gneisser", - title = "No Gnats Are Taken for Granite", - pages = "133-139") - . . . - @PROCEEDINGS(gg-proceedings, - editor = "Gerald Ford and Jimmy Carter", - title = "The Gnats and Gnus 1988 Proceedings", - booktitle = "The Gnats and Gnus 1988 Proceedings") -\end{verbatim} -Two things happen. -First, the special \hbox{\tt crossref} field tells \BibTeX\ -that the \hbox{\tt no-gnats} entry should inherit -any fields it's missing from -the entry it cross references, \hbox{\tt gg-proceedings}. -In this case it in inherits the two fields -\hbox{\tt editor} and \hbox{\tt booktitle}. -Note that, in the standard styles at least, -the \hbox{\tt booktitle} field is irrelevant -for the \hbox{\tt PROCEEDINGS} entry type. -The \hbox{\tt booktitle} field appears here -in the \hbox{\tt gg-proceedings} entry -only so that the entries that cross reference it -may inherit the field. -No matter how many papers from this meeting exist in the database, -this \hbox{\tt booktitle} field need only appear once. - -The second thing that happens: -\BibTeX\ automatically puts the entry \hbox{\tt gg-proceedings} -into the reference list if it's cross -referenced by two or more entries that you -\verb|\cite| or \hbox{\verb|\nocite|}, -even if you don't \verb|\cite| or \hbox{\verb|\nocite|} -the \hbox{\tt gg-proceedings} entry itself. -So \hbox{\tt gg-proceedings} will automatically appear -on the reference list if one other entry -besides \hbox{\tt no-gnats} cross references it. - -To guarantee that this scheme works, however, -a cross-referenced entry must occur later in the database files -than every entry that cross-references it. -Thus, putting all cross-referenced entries at the end makes sense. -(Moreover, you may not reliably nest cross references; -that is, a cross-referenced entry may -not itself reliably cross reference an entry. -This is almost certainly not something you'd -want to do, though.) - -One final note: -This cross-referencing feature is completely unrelated -to the old \BibTeX's cross referencing, -which is still allowed. -Thus, having a field like -\begin{verbatim} - note = "Jones \cite{jones-proof} improves the result" -\end{verbatim} -is not affected by the new feature. - -\item -\BibTeX\ now handles accented characters. -For example if you have an entry with the two fields -\begin{verbatim} - author = "Kurt G{\"o}del", - year = 1931, -\end{verbatim} -and if you're using the \hbox{\tt alpha} bibliography style, -then \BibTeX\ will construct the label -\hbox{[G{\"o}d31]} for this entry, which is what you'd want. -To get this feature to work you must place the entire accented -character in braces; -in this case either \hbox{\verb|{\"o}|} -or \hbox{\verb|{\"{o}}|} will do. -Furthermore these braces must not themselves be -enclosed in braces (other than the ones that might delimit -the entire field or the entire entry); -and there must be a backslash -as the very first character inside the braces. -Thus neither \hbox{\verb|{G{\"{o}}del}|} -nor \hbox{\verb|{G\"{o}del}|} will work for this example. - -This feature handles all the accented characters and -all but the nonbackslashed foreign symbols found in Tables -3.1 and~3.2 of the \LaTeX\ book. -This feature behaves similarly for ``accents'' you might define; -we'll see an example shortly. -For the purposes of counting letters in labels, -\BibTeX\ considers everything contained inside the braces -as a single letter. - -\item -\BibTeX\ also handles hyphenated names. -For example if you have an entry with -\begin{verbatim} - author = "Jean-Paul Sartre", -\end{verbatim} -and if you're using the \hbox{\tt abbrv} style, -then the result is `J.-P. Sartre'$\!$. - -\item -\label{preamble} -There's now an \hbox{\verb|@PREAMBLE|} command -for the database files. -This command's syntax is just like \hbox{\verb|@STRING|}'s, -except that there is no name or equals-sign, just the string. -Here's an example: -\begin{verbatim} - @PREAMBLE{ "\newcommand{\noopsort}[1]{} " - # "\newcommand{\singleletter}[1]{#1} " } -\end{verbatim} -(note the use of concatenation here, too). -The standard styles output whatever information you give this command -(\LaTeX\ macros most likely) directly to the {\tt bbl} file. -We'll look at one possible use of this command, -based on the \hbox{\verb|\noopsort|} command just defined. - -The issue here is sorting (alphabetizing). -\BibTeX\ does a pretty good job, -but occasionally weird circumstances conspire to confuse \BibTeX: -Suppose that you have entries in your database for -the two books in a two-volume set by the same author, -and that you'd like volume~1 to appear -just before volume~2 in your reference list. -Further suppose that there's now a second edition of volume~1, -which came out in 1973, say, -but that there's still just one edition of volume~2, -which came out in 1971. -Since the {\tt plain} standard style -sorts by author and then year, -it will place volume~2 first -(because its edition came out two years earlier) -unless you help \BibTeX. -You can do this by using the {\tt year} fields below -for the two volumes: -\begin{verbatim} - year = "{\noopsort{a}}1973" - . . . - year = "{\noopsort{b}}1971" -\end{verbatim} -According to the definition of \hbox{\verb|\noopsort|}, -\LaTeX\ will print nothing but the true year for these fields. -But \BibTeX\ will be perfectly happy pretending that -\hbox{\verb|\noopsort|} specifies some fancy accent -that's supposed to adorn the `a' and the~`b'; -thus when \BibTeX\ sorts it will pretend that -`a1973' and `b1971' are the real years, -and since `a' comes before~`b'$\!$, it will place volume~1 before volume~2, -just what you wanted. -By the way, if this author has any other works included -in your database, you'd probably want to use instead something like -\hbox{\verb|{\noopsort{1968a}}1973|} and -\hbox{\verb|{\noopsort{1968b}}1971|}, -so that these two books would come out in a reasonable spot -relative to the author's other works -(this assumes that 1968 results in a reasonable spot, -say because that's when the first edition of volume~1 appeared). - -There is a limit to the number of \hbox{\verb|@PREAMBLE|} commands -you may use, but you'll never exceed this limit if -you restrict yourself to one per database file; -this is not a serious restriction, -given the concatenation feature (item~\ref{concat}). - -\item -\BibTeX's sorting algorithm is now stable. -This means that if two entries have identical sort keys, -those two entries will appear in citation order. -(The bibliography styles construct these sort keys---% -usually the author information followed by the year and the title.) - -\item -\BibTeX\ no longer does case conversion for file names; -this will make \BibTeX\ easier to install on Unix systems, for example. - -\item -It's now easier to add code for processing a -command-line {\tt aux}-file name. - -\end{enumerate} - - -\subsection{Changes to the standard styles} - -This section describes changes to the standard styles -({\tt plain}, {\tt unsrt}, {\tt alpha}, {\tt abbrv}) -that affect ordinary users. -Changes that affect style designers appear in -the document ``Designing \BibTeX\ Styles''~\cite{btxhak}. -\begin{enumerate} - -\item -In general, sorting is now by ``author''$\!$, then year, then title---% -the old versions didn't use the year field. -(The {\tt alpha} style, however, sorts first by label, -then ``author''$\!$, year, and title.) -The quotes around author mean that some entry types -might use something besides the author, like the editor or organization. - -\item -Many unnecessary ties (\verb|~|) have been removed. -\LaTeX\ thus will produce slightly fewer -`\hbox{\tt Underfull} \verb|\hbox|' messages -when it's formatting the reference list. - -\item -Emphasizing (\hbox{\verb|{\em ...}|}) -has replaced italicizing (\hbox{\verb|{\it ...}|}). -This will almost never result in a difference -between the old output and the new. - -\item -The {\tt alpha} style now uses a superscripted~`$^{+}$' instead of a~`*' -to represent names omitted in constructing the label. -If you really liked it the way it was, however, -or if you want to omit the character entirely, -you don't have to modify the style file---% -you can override the~`$^{+}$' by -redefining the \hbox{\verb|\etalchar|} command -that the {\tt alpha} style writes onto the {\tt bbl} file -(just preceding the \hbox{\verb|\thebibliography|} environment); -use \LaTeX's \hbox{\verb|\renewcommand|} inside -a database \hbox{\tt @PREAMBLE} command, -described in the previous subsection's item~\ref{preamble}. - -\item -The {\tt abbrv} style now uses `Mar.' and `Sept.'\ -for those months rather than `March' and `Sep.' - -\item -The standard styles use \BibTeX's new cross-referencing feature -by giving a \verb|\cite| of the cross-referenced entry and by -omitting from the cross-referencing entry -(most of the) information that appears -in the cross-referenced entry. -These styles do this when -a titled thing (the cross-referencing entry) -is part of a larger titled thing (the cross-referenced entry). -There are five such situations: -when (1)~an \hbox{\tt INPROCEEDINGS} -(or \hbox{\tt CONFERENCE}, which is the same) -cross references a \hbox{\tt PROCEEDINGS}; -when (2)~a {\tt BOOK}, (3)~an \hbox{\tt INBOOK}, -or (4)~an \hbox{\tt INCOLLECTION} -cross references a {\tt BOOK} -(in these cases, the cross-referencing entry is a single -volume in a multi-volume work); -and when (5)~an \hbox{\tt ARTICLE} -cross references an \hbox{\tt ARTICLE} -(in this case, the cross-referenced entry is really a journal, -but there's no \hbox{\tt JOURNAL} entry type; -this will result in warning messages about -an empty \hbox{\tt author} and \hbox{\tt title} for the journal---% -you should just ignore these warnings). - -\item -The \hbox{\tt MASTERSTHESIS} and \hbox{\tt PHDTHESIS} -entry types now take an optional {\tt type} field. -For example you can get the standard styles to -call your reference a `Ph.D.\ dissertation' -instead of the default `PhD thesis' by including a -\begin{verbatim} - type = "{Ph.D.} dissertation" -\end{verbatim} -in your database entry. - -\item -Similarly, the \hbox{\tt INBOOK} and \hbox{\tt INCOLLECTION} -entry types now take an optional {\tt type} field, -allowing `section~1.2' instead of the default `chapter~1.2'$\!$. -You get this by putting -\begin{verbatim} - chapter = "1.2", - type = "Section" -\end{verbatim} -in your database entry. - -\item -The \hbox{\tt BOOKLET}, \hbox{\tt MASTERSTHESIS}, -and \hbox{\tt TECHREPORT} entry types now format -their \hbox{\tt title} fields as if they were -\hbox{\tt ARTICLE} \hbox{\tt title}s -rather than \hbox{\tt BOOK} \hbox{\tt title}s. - -\item -The \hbox{\tt PROCEEDINGS} and \hbox{\tt INPROCEEDINGS} -entry types now use the \hbox{\tt address} field -to tell where a conference was held, -rather than to give the address -of the publisher or organization. -If you want to include the -publisher's or organization's address, -put it in the \hbox{\tt publisher} -or \hbox{\tt organization} field. - -\item -The \hbox{\tt BOOK}, \hbox{\tt INBOOK}, \hbox{\tt INCOLLECTION}, -and \hbox{\tt PROCEEDINGS} entry types now allow either -\hbox{\tt volume} or \hbox{\tt number} (but not both), -rather than just \hbox{\tt volume}. - -\item -The \hbox{\tt INCOLLECTION} entry type now allows -a \hbox{\tt series} and an \hbox{\tt edition} field. - -\item -The \hbox{\tt INPROCEEDINGS} and \hbox{\tt PROCEEDINGS} -entry types now allow either a \hbox{\tt volume} or \hbox{\tt number}, -and also a \hbox{\tt series} field. - -\item -The \hbox{\tt UNPUBLISHED} entry type now outputs, -in one block, the \hbox{\tt note} field -followed by the date information. - -\item -The \hbox{\tt MANUAL} entry type now prints out -the \hbox{\tt organization} in the first block -if the \hbox{\tt author} field is empty. - -\item -The {\tt MISC} entry type now issues a warning -if all the optional fields are empty -(that is, if the entire entry is empty). - -\end{enumerate} - - -\section{The Entries} -\label{latex-appendix} - -This section is simply a corrected version of -Appendix~B.2 of the \LaTeX\ book~\cite{latex}, -\copyright~1986, by Addison-Wesley. -The basic scheme is the same, only a few details have changed. - - -\subsection{Entry Types} - -When entering a reference in the database, the first thing to decide -is what type of entry it is. No fixed classification scheme can be -complete, but \BibTeX\ provides enough entry types to handle almost -any reference reasonably well. - -References to different types of publications contain different -information; a reference to a journal article might include the volume -and number of the journal, which is usually not meaningful for a book. -Therefore, database entries of different types have different fields. -For each entry type, the fields are divided into three classes: -\begin{description} - -\item[required] -Omitting the field will produce a warning message -and, rarely, a badly formatted bibliography entry. -If the required information is not meaningful, -you are using the wrong entry type. -However, if the required information is meaningful -but, say, already included is some other field, -simply ignore the warning. - -\item[optional] -The field's information will be used if present, -but can be omitted without causing any formatting problems. -You should include the optional field if it will help the reader. - -\item[ignored] -The field is ignored. -\BibTeX\ ignores any field that is not required or optional, so you can include -any fields you want in a \hbox{\tt bib} file entry. It's a good idea -to put all relevant information about -a reference in its \hbox{\tt bib} file entry---even information that -may never appear in the bibliography. For example, if you want to -keep an abstract of a paper in a computer file, put it in an \hbox{\tt -abstract} field in the paper's \hbox{\tt bib} file entry. The -\hbox{\tt bib} file is likely to be as good a place as any for the -abstract, and it is possible to design a bibliography style for -printing selected abstracts. -Note: Misspelling a field name will -result in its being ignored, -so watch out for typos -(especially for optional fields, -since \BibTeX\ won't warn you when those are missing). - -\end{description} - -The following are the standard entry types, along with their required -and optional fields, that are used by the standard bibliography styles. -The fields within each class (required or optional) -are listed in order of occurrence in the output, -except that a few entry types may perturb the order slightly, -depending on what fields are missing. -These entry types are similar to those adapted by Brian Reid -from the classification scheme of van~Leunen~\cite{van-leunen} -for use in the {\em Scribe\/} system. -The meanings of the individual fields are explained in the next section. -Some nonstandard bibliography styles may ignore some optional fields -in creating the reference. -Remember that, when used in the \hbox{\tt bib} -file, the entry-type name is preceded by an \hbox{\tt @} character. - -\begin{description} -\sloppy - -\item[article\hfill] An article from a journal or magazine. -Required fields: \hbox{\tt author}, \hbox{\tt title}, \hbox{\tt journal}, -\hbox{\tt year}. -Optional fields: \hbox{\tt volume}, \hbox{\tt number}, -\hbox{\tt pages}, \hbox{\tt month}, \hbox{\tt note}. - -\item[book\hfill] A book with an explicit publisher. -Required fields: \hbox{\tt author} or \hbox{\tt editor}, -\hbox{\tt title}, \hbox{\tt publisher}, \hbox{\tt year}. -Optional fields: \hbox{\tt volume} or \hbox{\tt number}, \hbox{\tt series}, -\hbox{\tt address}, \hbox{\tt edition}, \hbox{\tt month}, -\hbox{\tt note}. - -\item[booklet\hfill] A work that is printed and bound, -but without a named publisher or sponsoring institution. -Required field: \hbox{\tt title}. -Optional fields: \hbox{\tt author}, \hbox{\tt howpublished}, -\hbox{\tt address}, \hbox{\tt month}, \hbox{\tt year}, \hbox{\tt note}. - -\item[conference\hfill] The same as {\tt INPROCEEDINGS}, -included for {\em Scribe\/} compatibility. - -\item[inbook\hfill] A part of a book, -which may be a chapter (or section or whatever) and/or a range of pages. -Required fields: \hbox{\tt author} or \hbox{\tt editor}, \hbox{\tt title}, -\hbox{\tt chapter} and/or \hbox{\tt pages}, \hbox{\tt publisher}, -\hbox{\tt year}. -Optional fields: \hbox{\tt volume} or \hbox{\tt number}, \hbox{\tt series}, -\hbox{\tt type}, \hbox{\tt address}, -\hbox{\tt edition}, \hbox{\tt month}, \hbox{\tt note}. - -\item[incollection\hfill] A part of a book having its own title. -Required fields: \hbox{\tt author}, \hbox{\tt title}, \hbox{\tt booktitle}, -\hbox{\tt publisher}, \hbox{\tt year}. -Optional fields: \hbox{\tt editor}, \hbox{\tt volume} or \hbox{\tt number}, -\hbox{\tt series}, \hbox{\tt type}, \hbox{\tt chapter}, \hbox{\tt pages}, -\hbox{\tt address}, \hbox{\tt edition}, \hbox{\tt month}, \hbox{\tt note}. - -\item[inproceedings\hfill] An article in a conference proceedings. -Required fields: \hbox{\tt author}, \hbox{\tt title}, \hbox{\tt booktitle}, -\hbox{\tt year}. -Optional fields: \hbox{\tt editor}, \hbox{\tt volume} or \hbox{\tt number}, -\hbox{\tt series}, \hbox{\tt pages}, \hbox{\tt address}, \hbox{\tt month}, -\hbox{\tt organization}, \hbox{\tt publisher}, \hbox{\tt note}. - -\item[manual\hfill] Technical documentation. Required field: \hbox{\tt title}. -Optional fields: \hbox{\tt author}, \hbox{\tt organization}, -\hbox{\tt address}, \hbox{\tt edition}, \hbox{\tt month}, \hbox{\tt year}, -\hbox{\tt note}. - -\item[mastersthesis\hfill] A Master's thesis. -Required fields: \hbox{\tt author}, \hbox{\tt title}, \hbox{\tt school}, -\hbox{\tt year}. -Optional fields: \hbox{\tt type}, \hbox{\tt address}, \hbox{\tt month}, -\hbox{\tt note}. - -\item[misc\hfill] Use this type when nothing else fits. -Required fields: none. -Optional fields: \hbox{\tt author}, \hbox{\tt title}, \hbox{\tt howpublished}, -\hbox{\tt month}, \hbox{\tt year}, \hbox{\tt note}. - -\item[phdthesis\hfill] A PhD thesis. -Required fields: \hbox{\tt author}, \hbox{\tt title}, \hbox{\tt school}, -\hbox{\tt year}. -Optional fields: \hbox{\tt type}, \hbox{\tt address}, \hbox{\tt month}, -\hbox{\tt note}. - -\item[proceedings\hfill] The proceedings of a conference. -Required fields: \hbox{\tt title}, \hbox{\tt year}. -Optional fields: \hbox{\tt editor}, \hbox{\tt volume} or \hbox{\tt number}, -\hbox{\tt series}, \hbox{\tt address}, \hbox{\tt month}, -\hbox{\tt organization}, \hbox{\tt publisher}, \hbox{\tt note}. - - -\item[techreport\hfill] A report published by a school or other institution, -usually numbered within a series. -Required fields: \hbox{\tt author}, -\hbox{\tt title}, \hbox{\tt institution}, \hbox{\tt year}. -Optional fields: \hbox{\tt type}, \hbox{\tt number}, \hbox{\tt address}, -\hbox{\tt month}, \hbox{\tt note}. - -\item[unpublished\hfill] A document having an author and title, -but not formally published. -Required fields: \hbox{\tt author}, \hbox{\tt title}, \hbox{\tt note}. -Optional fields: \hbox{\tt month}, \hbox{\tt year}. - -\end{description} - -In addition to the fields listed above, each entry type also has an -optional \hbox{\tt key} field, used in some styles -for alphabetizing, for cross referencing, -or for forming a \hbox{\verb|\bibitem|} label. -You should include a \hbox{\tt key} field for any entry whose -``author'' information is missing; -the ``author'' information is usually the \hbox{\tt author} field, -but for some entry types it can be the \hbox{\tt editor} -or even the \hbox{\tt organization} field -(Section~\ref{odds-and-ends} describes this in more detail). -Do not confuse the \hbox{\tt key} field with the key that appears in the -\hbox{\verb|\cite|} command and at the beginning of the database entry; -this field is named ``key'' only for compatibility with {\it Scribe}. - - -\subsection{Fields} - -Below is a description of all fields -recognized by the standard bibliography styles. -An entry can also contain other fields, which are ignored by those styles. -\begin{description} - -\item[address\hfill] -Usually the address of the \hbox{\tt publisher} or other type -of institution. -For major publishing houses, -van~Leunen recommends omitting the information entirely. -For small publishers, on the other hand, you can help the -reader by giving the complete address. - -\item[annote\hfill] -An annotation. -It is not used by the standard bibliography styles, -but may be used by others that produce an annotated bibliography. - -\item[author\hfill] -The name(s) of the author(s), -in the format described in the \LaTeX\ book. - -\item[booktitle\hfill] -Title of a book, part of which is being cited. -See the \LaTeX\ book for how to type titles. -For book entries, use the \hbox{\tt title} field instead. - -\item[chapter\hfill] -A chapter (or section or whatever) number. - -\item[crossref\hfill] -The database key of the entry being cross referenced. - -\item[edition\hfill] -The edition of a book---for example, ``Second''$\!$. -This should be an ordinal, and -should have the first letter capitalized, as shown here; -the standard styles convert to lower case when necessary. - -\item[editor\hfill] -Name(s) of editor(s), typed as indicated in the \LaTeX\ book. -If there is also an \hbox{\tt author} field, then -the \hbox{\tt editor} field gives the editor of the book or collection -in which the reference appears. - -\item[howpublished\hfill] -How something strange has been published. -The first word should be capitalized. - -\item[institution\hfill] -The sponsoring institution of a technical report. - -\item[journal\hfill] -A journal name. -Abbreviations are provided for many journals; see the {\it Local Guide}. - -\item[key\hfill] -Used for alphabetizing, cross referencing, and creating a label when -the ``author'' information -(described in Section~\ref{odds-and-ends}) is missing. -This field should not be confused with the key that appears in the -\hbox{\verb|\cite|} command and at the beginning of the database entry. - -\item[month\hfill] -The month in which the work was -published or, for an unpublished work, in which it was written. -You should use the standard three-letter abbreviation, -as described in Appendix B.1.3 of the \LaTeX\ book. - -\item[note\hfill] -Any additional information that can help the reader. -The first word should be capitalized. - -\item[number\hfill] -The number of a journal, magazine, technical report, -or of a work in a series. -An issue of a journal or magazine is usually -identified by its volume and number; -the organization that issues a -technical report usually gives it a number; -and sometimes books are given numbers in a named series. - -\item[organization\hfill] -The organization that sponsors a conference or that publishes a \hbox{manual}. - -\item[pages\hfill] -One or more page numbers or range of numbers, -such as \hbox{\tt 42--111} or \hbox{\tt 7,41,73--97} or \hbox{\tt 43+} -(the `{\tt +}' in this last example indicates pages following -that don't form a simple range). -To make it easier to maintain {\em Scribe\/}-compatible databases, -the standard styles convert a single dash (as in \hbox{\tt 7-33}) -to the double dash used in \TeX\ to denote number ranges -(as in \hbox{\tt 7--33}). - -\item[publisher\hfill] -The publisher's name. - -\item[school\hfill] -The name of the school where a thesis was written. - -\item[series\hfill] -The name of a series or set of books. -When citing an entire book, the the \hbox{\tt title} field -gives its title and an optional \hbox{\tt series} field gives the -name of a series or multi-volume set -in which the book is published. - -\item[title\hfill] -The work's title, typed as explained in the \LaTeX\ book. - -\item[type\hfill] -The type of a technical report---for example, -``Research Note''$\!$. - -\item[volume\hfill] -The volume of a journal or multivolume book. - -\item[year\hfill] -The year of publication or, for -an unpublished work, the year it was written. -Generally it should consist of four numerals, such as {\tt 1984}, -although the standard styles can handle any {\tt year} whose -last four nonpunctuation characters are numerals, -such as `\hbox{(about 1984)}'$\!$. - -\end{description} - - -\section{Helpful Hints} -\label{odds-and-ends} - -This section gives some random tips -that aren't documented elsewhere, -at least not in this detail. -They are, roughly, in order -of least esoteric to most. -First, however, a brief spiel. - -I understand that there's often little choice in choosing -a bibliography style---journal~$X$ says you must use style~$Y$ -and that's that. -If you have a choice, however, I strongly recommend that you -choose something like the {\tt plain} standard style. -Such a style, van~Leunen~\cite{van-leunen} argues convincingly, -encourages better writing than the alternatives---% -more concrete, more vivid. - -{\em The Chicago Manual of Style\/}~\cite{chicago}, -on the other hand, -espouse the author-date system, -in which the citation might appear in the text as `(Jones, 1986)'$\!$. -I argue that this system, -besides cluttering up the -text with information that may or may not be relevant, -encourages the passive voice and vague writing. -Furthermore the strongest arguments for -using the author-date system---like ``it's the most practical''---% -fall flat on their face with the advent -of computer-typesetting technology. -For instance the {\em Chicago Manual\/} contains, -right in the middle of page~401, this anachronism: -``The chief disadvantage of [a style like {\tt plain}] is that additions -or deletions cannot be made after the manuscript is typed without changing -numbers in both text references and list.'' -\LaTeX, obviously, sidesteps the disadvantage. - -Finally, the logical deficiencies of the author-date style -are quite evident once you've written a program to implement it. -For example, in a large bibliography, -using the standard alphabetizing scheme, -the entry for `(Aho et~al., 1983b)' -might be half a page later than the one for `(Aho et~al., 1983a)'$\!$. -Fixing this problem results in even worse ones. -What a mess. -(I have, unfortunately, programmed such a style, -and if you're saddled with an unenlightened publisher -or if you don't buy my propaganda, -it's available from the Rochester style collection.) - -Ok, so the spiel wasn't very brief; -but it made me feel better, -and now my blood pressure is back to normal. -Here are the tips for using \BibTeX\ -with the standard styles -(although many of them hold for nonstandard styles, too). -\begin{enumerate} - -\item -With \BibTeX's style-designing language -you can program general database manipulations, -in addition to bibliography styles. -For example it's a fairly easy task for someone familiar with the language -to produce a database-key/author index of all the entries in a database. -Consult the {\em Local Guide\/} to see -what tools are available on your system. - -\item -The standard style's thirteen entry types -do reasonably well at formatting most entries, -but no scheme with just thirteen formats -can do everything perfectly. -Thus, you should feel free to be creative -in how you use these entry types -(but if you have to be too creative, -there's a good chance you're using the wrong entry type). - -\item -Don't take the field names too seriously. -Sometimes, for instance, you might have to include -the publisher's address along with the publisher's name -in the \hbox{\tt publisher} field, -rather than putting it in the \hbox{\tt address} field. -Or sometimes, difficult entries work best when you -make judicious use of the {\tt note} field. - -\item -Don't take the warning messages too seriously. -Sometimes, for instance, the year appears in the title, -as in {\em The 1966 World Gnus Almanac}. -In this case it's best to omit the {\tt year} field -and to ignore \BibTeX's warning message. - -\item -If you have too many names to list in an -\hbox{\tt author} or \hbox{\tt editor} field, -you can end the list with ``and others''; -the standard styles appropriately append an ``et~al.'' - -\item -In general, if you want to keep \BibTeX\ from changing -something to lower case, you enclose it in braces. -You might not get the effect you want, however, -if the very first character after the left brace is a backslash. -The ``special characters'' item later in this section explains. - -\item -For {\em Scribe\/} compatibility, the database files -allow an \hbox{\tt @COMMENT} command; it's not really -needed because \BibTeX\ allows in the database files -any comment that's not within an entry. -If you want to comment out an entry, -simply remove the `{\tt @}' character preceding the entry type. - -\item -The standard styles have journal abbreviations that are -computer-science oriented; -these are in the style files primarily for the example. -If you have a different set of journal abbreviations, -it's sensible to put them in \hbox{\tt @STRING} commands -in their own database file and to list this database file -as an argument to \LaTeX's \hbox{\verb|\bibliography|} command -(but you should list this argument before the ones that -specify real database entries). - -\item -It's best to use the three-letter abbreviations for the month, -rather than spelling out the month yourself. -This lets the bibliography style be consistent. -And if you want to include information for the day of the month, -the {\tt month} field is usually the best place. -For example -\begin{verbatim} - month = jul # "~4," -\end{verbatim} -will probably produce just what you want. - -\item -If you're using the \hbox{\tt unsrt} style -(references are listed in order of citation) -along with the \hbox{\verb|\nocite{*}|} feature -(all entries in the database are included), -the placement of the \hbox{\verb|\nocite{*}|} command -within your document file will determine the reference order. -According to the rule given in Section~\ref{features}: -If the command is placed at the beginning of the document, -the entries will be listed in exactly the order -they occur in the database; -if it's placed at the end, -the entries that you explicitly -\hbox{\verb|\cite|} or \hbox{\verb|\nocite|} -will occur in citation order, -and the remaining database entries will be in database order. - -\item -For theses, van Leunen recommends not giving -the school's department after the name of the degree, -since schools, not departments, issue degrees. -If you really think that giving the department information -will help the reader find the thesis, -put that information in the \hbox{\tt address} field. - -\item -The \hbox{\tt MASTERSTHESIS} and \hbox{\tt PHDTHESIS} entry types -are so named for {\em Scribe\/} compatibility; -\hbox{\tt MINORTHESIS} and \hbox{\tt MAJORTHESIS} -probably would have been better names. -Keep this in mind when trying to classify -a non-U.S.\ thesis. - -\item -Here's yet another suggestion for what to do when an author's -name appears slightly differently in two publications. -Suppose, for example, two journals articles use these fields. -\begin{verbatim} - author = "Donald E. Knuth" - . . . - author = "D. E. Knuth" -\end{verbatim} -There are two possibilities. -You could (1)~simply leave them as is, -or (2)~assuming you know for sure that -these authors are one and the same person, -you could list both in the form that the author prefers -(say, `Donald~E.\ Knuth'). -In the first case, the entries might be alphabetized incorrectly, -and in the second, the slightly altered name might -foul up somebody's electronic library search. -But there's a third possibility, which is the one I prefer. -You could convert the second journal's field to -\begin{verbatim} - author = "D[onald] E. Knuth" -\end{verbatim} -This avoids the pitfalls of the previous two solutions, -since \BibTeX\ alphabetizes this as if the brackets weren't there, -and since the brackets clue the reader in that a full first name -was missing from the original. -Of course it introduces another pitfall---`D[onald]~E.\ Knuth' looks ugly---% -but in this case I think the increase in accuracy outweighs -the loss in aesthetics. - -\item -\LaTeX's comment character `{\tt\%}' is not a comment character -in the database files. - -\item -Here's a more complete description of -the ``author'' information referred to in previous sections. -For most entry types the ``author'' information -is simply the \hbox{\tt author} field. -However: -For the \hbox{\tt BOOK} and \hbox{\tt INBOOK} entry types -it's the \hbox{\tt author} field, but if there's no author -then it's the \hbox{\tt editor} field; -for the \hbox{\tt MANUAL} entry type -it's the \hbox{\tt author} field, but if there's no author -then it's the \hbox{\tt organization} field; -and for the \hbox{\tt PROCEEDINGS} entry type -it's the \hbox{\tt editor} field, but if there's no editor -then it's the \hbox{\tt organization} field. - -\item -When creating a label, -the \hbox{\tt alpha} style uses the ``author'' information described above, -but with a slight change---% -for the \hbox{\tt MANUAL} and \hbox{\tt PROCEEDINGS} entry types, -the {\tt key} field takes precedence over the \hbox{\tt organization} field. -Here's a situation where this is useful. -\begin{verbatim} - organization = "The Association for Computing Machinery", - key = "ACM" -\end{verbatim} -Without the {\tt key} field, the \hbox{\tt alpha} style -would make a label from the first three letters of information -in the \hbox{\tt organization} field; -\hbox{\tt alpha} knows to strip off the `\hbox{\tt The }'$\!$, -but it would still form a label like `\hbox{[Ass86]}'$\!$, -which, however intriguing, is uninformative. -Including the {\tt key} field, as above, -would yield the better label `\hbox{[ACM86]}'$\!$. - -You won't always need the {\tt key} field to override the -\hbox{\tt organization}, though: -With -\begin{verbatim} - organization = "Unilogic, Ltd.", -\end{verbatim} -for instance, the \hbox{\tt alpha} style would -form the perfectly reasonable label `\hbox{[Uni86]}'$\!$. - -\item -Section~\ref{features} discusses accented characters. -To \BibTeX, an accented character is really a special case -of a ``special character''$\!$, -which consists of everything from a left brace at the top-most level, -immediately followed by a backslash, -up through the matching right brace. -For example in the field -\begin{verbatim} - author = "\AA{ke} {Jos{\'{e}} {\'{E}douard} G{\"o}del" -\end{verbatim} -there are just two special characters, -`\hbox{\verb|{\'{E}douard}|}' and `\hbox{\verb|{\"o}|}' -(the same would be true if the pair of double quotes -delimiting the field were braces instead). -In general, \BibTeX\ will not do any processing -of a \TeX\ or \LaTeX\ control sequence inside a special character, -but it {\em will\/} process other characters. -Thus a style that converts all titles to lower case -would convert -\begin{verbatim} - The {\TeX BOOK\NOOP} Experience -\end{verbatim} -to -\begin{verbatim} - The {\TeX book\NOOP} experience -\end{verbatim} -(the `{\tt The}' is still capitalized -because it's the first word of the title). - -This special-character scheme is useful for handling accented characters, -for getting \BibTeX's alphabetizing to do what you want, -and, since \BibTeX\ counts an entire special character as just one letter, -for stuffing extra characters inside labels. -The file \hbox{\tt XAMPL.BIB} distributed with \BibTeX\ -gives examples of all three uses. - -\item -This final item of the section describes \BibTeX's names -(which appear in the \hbox{\tt author} or \hbox{\tt editor} field) -in slightly more detail than what -appears in Appendix~B of the \LaTeX\ book. -In what follows, a ``name'' corresponds to a person. -(Recall that you separate multiple names in a single field -with the word ``and''$\!$, surrounded by spaces, -and not enclosed in braces. -This item concerns itself with the structure of a single name.) - -Each name consists of four parts: First, von, Last, and~Jr; -each part consists of a (possibly empty) list of name-tokens. -The Last part will be nonempty if any part is, -so if there's just one token, it's always a Last token. - -Recall that Per Brinch~Hansen's name should be typed -\begin{verbatim} - "Brinch Hansen, Per" -\end{verbatim} -The First part of his name has the single token ``Per''; -the Last part has two tokens, ``Brinch'' and ``Hansen''; -and the von and Jr parts are empty. -If you had typed -\begin{verbatim} - "Per Brinch Hansen" -\end{verbatim} -instead, \BibTeX\ would (erroneously) think ``Brinch'' were a First-part token, -just as ``Paul'' is a First-part token in ``John~Paul Jones''$\!$, -so this erroneous form would have two First tokens and one Last token. - -Here's another example: -\begin{verbatim} - "Charles Louis Xavier Joseph de la Vall{\'e}e Poussin" -\end{verbatim} -This name has four tokens in the First part, two in the von, and -two in the Last. -Here \BibTeX\ knows where one part ends and the other begins because -the tokens in the von part begin with lower-case letters. - -In general, it's a von token if the first letter at brace-level~0 -is in lower case. -Since technically everything -in a ``special character'' is at brace-level~0, -you can trick \BibTeX\ into thinking that -a token is or is not a von token by prepending a dummy -special character whose first letter past the \TeX\ control sequence -is in the desired case, upper or lower. - -To summarize, \BibTeX\ allows three possible forms for the name: -\begin{verbatim} - "First von Last" - "von Last, First" - "von Last, Jr, First" -\end{verbatim} -You may almost always use the first form; -you shouldn't if either there's a Jr part, -or the Last part has multiple tokens but there's no von part. - -\end{enumerate} - -\bibliography{btxdoc} -\bibliographystyle{plain} -\end{document} diff --git a/Master/texmf-dist/doc/eplain/base/csindex.texi b/Master/texmf-dist/doc/eplain/base/csindex.texi deleted file mode 100644 index f80b7058979..00000000000 --- a/Master/texmf-dist/doc/eplain/base/csindex.texi +++ /dev/null @@ -1,6 +0,0 @@ -@c Public domain. - -@node Macro index -@unnumbered Macro index - -@printindex fn diff --git a/Master/texmf-dist/doc/eplain/base/eplain.html b/Master/texmf-dist/doc/eplain/base/eplain.html deleted file mode 100644 index 638a3492141..00000000000 --- a/Master/texmf-dist/doc/eplain/base/eplain.html +++ /dev/null @@ -1,6644 +0,0 @@ - - -Expanded Plain TeX - - - - - - - - - - -

Expanded Plain TeX

-
-


- -Next: , -Up: (dir) - -
- -

Eplain

- -

This manual documents the Eplain macros, version 3.0, -September 2005. Eplain provides functionality for plain TeX that -is intended to be useful regardless of how your document is actually -formatted. - -

Most of this manual is in the public domain, like most of the Eplain -code. It was mostly written by Karl Berry, starting in 1989. Steven -Smith wrote the documentation for the commutative diagram macros; this -chapter is under the GNU General Public License. Oleg Katsitadze and -Adam Lewenberg have made additions and corrections. - -

-

--- The Detailed Node Listing --- - -

User definitions - -

- -

Citations - -

- -

Displays - -

- -

Lists - -

- -

Cross-references - -

- -

Equation references - -

- -

Indexing - -

- -

Indexing terms - -

- -

Hyperlinks - -

- -

Implicit hyperlinks - -

- -

Index hyperlinks - -

- -

Hyperlink drivers - -

- -

Hyperlink drivers pdftex and dvipdfm:: - -

- -

Setting hyperlink types and options - -

- -

Turning hyperlinks on/off - -

- -

Arrow theoretic diagrams - -

- -

Commutative diagrams - -

- -

Programming definitions - -

- -

Expansion - -

- - - -
-


- -Next: , -Previous: Top, -Up: Top - -
- -

1 Introduction

- -

-The Eplain macro package expands on and extends the definitions in -plain TeX. This manual describes the definitions that you, as either -an author or a macro writer, might like to use. It doesn't discuss the -implementation; see comments in the source code (xeplain.tex) for -that. - -

Eplain is not intended to provide “generic” typesetting capabilities, as -do LaTeX (written by Leslie Lamport) -or Texinfo -(written by Richard Stallman and others). -Instead, it provides definitions that are intended to be useful -regardless of the high-level commands that you use when you actually -prepare your manuscript. - -

For example, Eplain does not have a command \section, which -would format section headings in an “appropriate” way, such as -LaTeX's \section. The philosophy of Eplain is -that some people will always need or want to go beyond the macro -designer's idea of “appropriate”. Such canned macros are -fine—as long as you are willing to accept the resulting output. If -you don't like the results, or if you are trying to match a different -format, you are out of luck. - -

On the other hand, almost everyone would like capabilities such as -cross-referencing by labels, so that you don't have to put actual page -numbers in the manuscript. The author of Eplain -is not aware of any generally available macro packages that (1) do -not force their typographic style on an author, and yet (2) provide -such capabilities. - -

Besides such generic macros as cross-referencing, Eplain -contains another set of definitions: ones that change the conventions of -plain TeX's output. For example, math displays in TeX are, by -default, centered. If you want your displays to come out -left-justified, you have to plow through The TeXbook to find -some way to do it, and then adapt the code to your own needs. Eplain -tries to take care of the messy details of such things, while still -leaving the detailed appearance of the output up to you. - -

Finally, numerous definitions turned out to be useful as Eplain was -developed. They are also documented in this manual, on the chance that -people writing other macros will be able to use them. - -

You can send bug reports or suggestions to -tex-eplain@tug.org. The current version number of Eplain is -defined as the macro \fmtversion -at the end of the source file eplain.tex. When corresponding, -please refer to it. - -

To get on this mailing list yourself, email -tex-eplain-request@tug.org with a message whose body contains -a line -

     subscribe you@your.preferred.address
-
- -
-


- -Next: , -Previous: Introduction, -Up: Top - -
- -

2 Installation

- -

The simplest way to install Eplain is simply to install the file -eplain.tex in a directory where TeX will find it. What that -directory is obviously depends on your operating system and TeX -installation. I personally install eplain.tex in -a directory /usr/local/lib/texmf/tex/plain. - -

If you want, you can also create a format (.fmt) -file for Eplain, which will eliminate the time spent reading the macro -source file with \input. You do this by issuing a sequence of -Unix commands something like this: - -

     prompt$ touch eplain.aux
-     prompt$ initex
-     This is TeX, ...
-     **&plain eplain
-     (eplain.tex)
-     *\dump
-     ... messages ...
-
-

You must make sure that eplain.aux exists before you -run initex; otherwise, warning messages about undefined labels -will never be issued. - -

You then have to install the resulting eplain.fmt in some system -directory or set an environment variable to tell TeX how to find it. -I install the format files in /usr/local/lib/texmf/ini; the -environment variable for the Web2C port of TeX to Unix is -TEXFORMATS. - -

Some implementations of TeX (including Web2C) use the name by which -TeX is invoked to determine what format to read. For them, you -should make a link to the virtex program named etex, and -then install the format file with the name etex.fmt. This lets -users invoke TeX as etex and get the format file read -automatically, without having to say `&eplain'. - -

For convenience, the file etex.tex in the distribution directory -does \input eplain and then \dump, so that if you replace -`eplain' with `etex' in the example above, the format file -will end up with the right name. - -

The install target in the Makefile does all this properly -for Unix systems and Web2C. You may have to change the pathnames. - -

Under emtex, `eaj@acpub.duke.edu' says that - -

     tex386 -i ^&plain eplain \dump
-
-

produces a format file. - - -

-


- -Next: , -Previous: Installation, -Up: Top - -
- -

3 Invoking Eplain

- -

The simplest way to use Eplain is simply to put: - -

     \input eplain
-
-

at the beginning of your input file. The macro file is small -enough that reading it does not take an unbearably long time—at least on -contemporary machines. - -

In addition, if a format (.fmt) -file has been created for Eplain (see the previous section), you can -eliminate the time spent reading the macro source file. You do this -by responding &eplain to TeX's `**' prompt. For -example: - -

     initex
-     This is TeX, ...
-     **&eplain myfile
-
-

Depending on the implementation of TeX which you are using, you might -also be able to invoke TeX as eplain and have the format file -automatically read. - -

If you write something which you will be distributing to others, you -won't know if the Eplain format will be loaded already. If it is, then -doing \input eplain will waste time; if it isn't, then you must -load it. To solve this, Eplain defines the control sequence -\eplain -to be the letter t (a convention borrowed from Lisp; it doesn't -actually matter what the definition is, only that the definition -exists). Therefore, you can do the following: -

     \ifx\eplain\undefined \input eplain \fi
-
-

where \undefined must never acquire a definition. - -

Eplain consists of several source files: -

-
xeplain.tex
most of the macros; - -
arrow.tex
commutative diagram macros (see Arrow theoretic diagrams), written by -Steven Smith; - -
btxmac.tex
bibliography-related macros (see Citations); - -
ifpdf.sty
sets the switch \ifpdf, which can be used to -detect pdfTeX in PDF mode (see Checking for PDF output), written -by Heiko Oberdiek; - -
path.sty
macro for allowing line breaks at punctuation characters within long -pathnames, electronic mail addresses, etc., (see Paths), written -by Philip Taylor; - -
texnames.sty
abbreviations for various TeX-related names (see Logos), edited -by Nelson Beebe. - -
- -

The file eplain.tex is all of these files merged -together, with comments removed. - -

All of these files except xeplain.tex can be input individually, -if all you want are the definitions in that file. - -

Also, since the bibliography macros are fairly extensive, you might not -want to load them, to conserve TeX's memory. Therefore, if the -control sequence \nobibtex -is defined, then the bibliography definitions are skipped. You must set -\nobibtex before eplain.tex is read, naturally. For -example, you could start your input file like this: - -

     \let\nobibtex = t
-     \input eplain
-
-

By default, \nobibtex is undefined, and so the bibliography -definitions are made. - -

Likewise, define \noarrow if you don't want to include the -commutative diagram macros from arrow.tex, perhaps because you -already have conflicting ones. - -

If you don't want to read or write an aux file at all, for any -kind of cross-referencing, define \noauxfile -before reading eplain.tex. This also turns off all warnings -about undefined labels. - -

Eplain conflicts with AMSTeX (to be precise, with amsppt.sty): -the macros \cite and \ref are defined by both. - -

If you want to use AMSTeX's \cite, the solution is to define -\nobibtex before reading Eplain, as described above. - -

If you have amsppt.sty loaded and use \ref, Eplain writes -a warning on your terminal. If you want to use the AMSTeX -\ref, do \let\ref = \amsref after reading Eplain. -To avoid the warning, do \let\ref = \eplainref after reading -Eplain and before using \ref. - -

Sometimes you may need to run TeX more then once on your -.tex file in order to produce and typeset indexes, resolve -undefined cross-references and/or citations. The shell script -texi2dvi from the Texinfo documentation system (see -http://www.gnu.org/software/texinfo/) can automate this process: -it runs BibTeX, MakeIndex and TeX as many times as needed to -complete the compilation process. You will need to set the -LATEX environment variable to `tex'. For example, in a -Bourne-compatible shell, the following command will do all the work: - -

     prompt$ LATEX=tex texi2dvi file.tex
-
-

(Despite the name, texi2dvi can also produce -.pdf files; just set `LATEX=pdftex'.) See the output from -the command texi2dvi --help for invoking information and a -full list of options. - - -

-


- -Next: , -Previous: Invoking Eplain, -Up: Top - -
- -

4 User definitions

- -

This chapter describes definitions that are meant to be used directly -in a document. When appropriate, ways to change the default -formatting are described in subsections. - -

- -
-


- -Next: , -Up: User definitions - -
- -

4.1 Diagnostics

- -

Plain TeX provides the \tracingall command, to turn on the -maximum amount of tracing possible in TeX. The (usually voluminous) -output from \tracingall goes both on the terminal and into the -transcript file. -It is sometimes easier to have the output go only to the transcript -file, so you can peruse it at your leisure and not obscure other output -to the terminal. So, Eplain provides the command \loggingall. -(For some reason, this command is available in Metafont, but not in -TeX.) - -

It is also sometimes useful to see the complete contents of boxes. -\tracingboxes does this. (It doesn't affect whether or not the -contents -are shown on the terminal.) - -

You can turn off all tracing with \tracingoff. - -You can also turn logging on and off globally, so you don't have to -worry about whether or not you're inside a group at the time of command. -These variants are named \gloggingall -and \gtracingall. - -Finally, if you write your own help messages (see \newhelp -in The TeXbook), you want a convenient way to break lines in -them. This is what TeX's \newlinechar parameter is for; -however, plain TeX doesn't set \newlinechar. Therefore, -Eplain defines it to be the character ^^J. - -

For example, one of Eplain's own error messages is defined as follows: -

     \newhelp\envhelp{Perhaps you forgot to end the previous^^J%
-        environment? I'm finishing off the current group,^^J%
-        hoping that will fix it.}%
-
-
-


- -Next: , -Previous: Diagnostics, -Up: User definitions - -
- -

4.2 Rules

- -

The default dimensions of rules are defined in chapter 21 of the -The TeXbook. To sum up what is given there, the “thickness” -of rules is -0.4pt by default. Eplain defines three parameters that let you change -this dimension: \hruledefaultheight, \hruledefaultdepth, -and \vruledefaultwidth. By default, they are defined as -The TeXbook describes. - -

But it would be wrong to redefine \hrule and \vrule. For -one thing, some macros in plain TeX depend on the default dimensions -being used; for another, rules are used quite heavily, and the -performance impact of making it a macro can be noticeable. Therefore, -to take advantage of the default rule parameters, you must use -\ehrule -and \evrule. - - -

-


- -Next: , -Previous: Rules, -Up: User definitions - -
- -

4.3 Citations

- -

Bibliographies are part of almost every technical document. To handle -them easily, you need two things: a program to do the tedious -formatting, and a way to cite references by labels, rather than by -numbers. The BibTeX program, written by Oren Patashnik, takes care -of the first item; the citation commands in LaTeX, written to be used -with BibTeX, take care of the second. Therefore, -Eplain adopts the use of BibTeX, and virtually the same interface as -LaTeX. - -

The general idea is that you put citation commands in the text of your -document, and commands saying where the bibliography data is. When you -run TeX, these commands produce output on the file with the same root -name as your document (by default) and the extension .aux. -BibTeX reads this file. You should put the bibliography data in a -file or files with the extension .bib. BibTeX writes out a -file with the same root -name as your document and extension .bbl. Eplain reads this file -the next time you run your document through TeX. (It takes -multiple passes to get everything straight, because usually after seeing -your bibliography typeset, you want to make changes in the .bib -file, which means you have to run BibTeX again, which means you have -to run TeX again...) An annotated example of the whole process is -given below. - -

If your document has more than one bibliography—for example, if it -is a collection of papers—you can tell Eplain to use a different root -name for the .bbl file by defining the control sequence -\bblfilebasename. -The default definition is simply \jobname. - -

See the document BibTeXing (whose text is in the file -btxdoc.tex, which should be in the Eplain distribution you got) -for information on how to write your .bib files. Both the -BibTeX and the Eplain distributions contain several examples, also. - -

The \cite -command produces a citation in the text of your document. The exact -printed form the citation will take is under your control; -see Formatting citations. \cite takes one -required argument, a comma-separated list of cross-reference labels -(see Cross-references, for exactly what characters are allowed in -such labels). Warning: spaces in this list are taken as part of the -following label name, which is probably not what you expect. -The \cite command also produces a command -in the .aux file that tells BibTeX to retrieve the given reference(s) -from the .bib file. \cite also takes one optional argument, -which you specify within square brackets, as in LaTeX. This text is -simply typeset after the citations. (See the example below.) - -

Eplain can create hypertext links for citations pointing to the relevant -bibliography entries; see Citation hyperlinks. - -

Another command, \nocite, -puts the given reference(s) into the bibliography, but produces nothing -in the text. - -

The \bibliography -command is next. It serves two purposes: producing the typeset -bibliography, and telling BibTeX the root names of the .bib -files. Therefore, the argument to \bibliography is a comma -separated list of the .bib files (without the `.bib'). Again, -spaces in this list are significant. - -

You tell BibTeX the particular style in which you want your -bibliography typeset with one more command: -\bibliographystyle. -The argument to this is a single filename style, which tells -BibTeX to look for a file style.bst. -See the document Designing BibTeX styles (whose text is in the -btxhak.tex) for information on how to write your own styles. - -

Eplain automatically reads the citations from the .aux file when -your job starts. - -

If you don't want to see the messages about undefined citations, you -can say \xrefwarningfalse before making any citations. -Eplain automatically does this if the .aux file does not exist. -You can restore the default by saying \xrefwarningtrue. - -

Here is a TeX input file that illustrates the various commands. - -

     \input eplain                    % Reads the .aux file.
-     Two citations to Knuthian works:
-       \cite[note]{surreal,concrete-math}.
-     \beginsection{References.}\par   % Title for the bibliography.
-     \bibliography{knuth}             % Use knuth.bib for the labels.
-     \bibliographystyle{plain}        % Number the references.
-     \end                             % End of the document.
-
-

-If we suppose that this file was named citex.tex and that the -bibliography data is in knuth.bib (as the \bibliography -command says), the following commands do what's required. (`$ ' -represents the shell prompt.) - -

     $ tex citex       (produces undefined citation messages)
-     $ bibtex citex    (read knuth.bib and citex.aux, write citex.bbl)
-     $ tex citex       (read citex.bbl, still have undefined citations)
-     $ tex citex       (one more time, to resolve the references)
-
-

(The texi2dvi program can help you automate this -process, see Invoking Eplain.) - -

The output looks something like (because we used the plain -bibliography style): - -

-Two citations to Knuthian works: [2,1 note]. - -

References - -

[1] Ronald L. Graham, Donald E. Knuth, and Oren Patashnik. Concrete -Mathematics. Addison-Wesley, Reading, Massachusetts, 1989. - -

[2] Donald E. Knuth. Surreal Numbers. Addison-Wesley, Reading, -Massachusetts, 1974. -

- -

See the BibTeX documentation for information on how to write the -bibliography databases, and the bibliography styles that are available. -(If you want your references printed with names, as in [Knu74], instead -of numbered, the bibliography style is alpha.) - - -

- -
-


- -Next: , -Up: Citations - -
- -

4.3.1 Formatting citations

- -

-You may wish to change Eplain's formatting of citations; i.e., the -result of your \cite commands. By default, the citation labels -are printed one after another, separated by commas and enclosed in -brackets, using the main text font. Some formats require other styles, -such as superscripted labels. You can accomodate such formats by -redefining the following macros. - -

-
\printcitestart
\printcitefinish
Eplain expands these macros at the begining and end of the list of -citations for each \cite command. By default, they produce a -`[' and `]', respectively. - -
\printbetweencitations
If a \cite command has multiple citations, as in -\cite{acp,texbook}, Eplain expands this macro in between each -pair of citations. By default, it produces a comma followed by a space. - -
\printcitenote
This macro takes one argument, which is the optional note to the -\cite command. If the \cite command had no note, this -macro isn't used. Otherwise, it should print the note. By default, the -note is preceded with a comma and a space. -
- -

Here is an example, showing you could produce citations as -superscripted labels, with the optional notes in parentheses. - -

     \def\printcitestart{\unskip $^\bgroup}
-     \def\printbetweencitations{,}
-     \def\printcitefinish{\egroup$}
-     \def\printcitenote#1{\hbox{\sevenrm\space (#1)}}
-
-
-


- -Previous: Formatting citations, -Up: Citations - -
- -

4.3.2 Formatting bibliographies

- -

-You may wish to change Eplain's formatting of the bibliography, -especially with respect to the fonts that are used. Therefore, Eplain -provides the following control sequences: - -

-
\biblabelwidth
This control sequence represents a \dimen register, and its value -is the width of the widest label in the bibliography. Although it is -unlikely you will ever want to redefine it, you might want -to use it if you redefine \biblabelprint, below. - -
\biblabelprint
This macro takes one argument, the label to print. By default, the -label is put in a box of width \biblabelwidth, and is followed by -an enspace. When you want to change the spacing around the labels, this -is the right macro to redefine. - -
\biblabelcontents
This macro also takes one argument, the label to print. By default, the -label is printed using the font \bblrm (below), and enclosed in -brackets. When you want to change the appearance of the label, but not -the spacing around it, this is the right macro to redefine. - -
\bblrm
The default font used for printing the bibliography. - -
\bblem
The font used for printing the titles and other “emphasized” material. - -
\bblsc
In some styles, authors' names are printed in a caps-and-small-caps -font. In those cases, this font is used. - -
\bblnewblock
This is invoked between each of the parts of a bibliography entry. The -default is to leave some extra space between the parts; you could -redefine it to start each part on a new line (for example). A part is -simply a main element of the entry; for example, the author is a part. -(It was LaTeX that introduced the (misleading, as far as I am -concerned) term `block' for this.) - -
\biblabelextraspace
Bibliography entries are typeset with a hanging indentation of -\biblabelwidth plus this. The default is .5em, where the -em width is taken from the \bblrm font. If you want to change -this, you should do it inside \bblhook. - -
\bblhook
This is expanded before reading the .bbl file. By -default, it does nothing. You could, for example, define it to set the -bibliography fonts, or produce the heading for the references. Two -spacing parameters must be changed inside \bblhook: -\parskip, which produces extra space between the items; and -\biblabelextraspace, which is described above. -(By the way, \hookappend won't work with \bblhook, despite -the names. Just use \def.) - -
- -

If you are really desperate, you can also hand-edit the .bbl file -that BibTeX produces to do anything you wish. - -

-


- -Next: , -Previous: Citations, -Up: User definitions - -
- -

4.4 Displays

- -

-By default, TeX centers displayed material. (Displayed material is -just whatever you put between $$'s—it's not necessarily -mathematics.) Many layouts would be better served if the displayed -material was left-justified. Therefore, Eplain provides the command -\leftdisplays, -which indents displayed material by \parindent plus -\leftskip, plus \leftdisplayindent. - -You can go back to centering displays with \centereddisplays. -(It is usually poor typography to have both centered and left-justified -displays in a single publication, though.) - -

\leftdisplays also changes the plain TeX commands that deal -with alignments inside math displays, -\displaylines, -\eqalignno, -and \leqalignno, -to produce left-justified text. You can still override this formatting -by inserting \hfill glue, as explained in The TeXbook. - -

- -
-


- -Up: Displays - -
- -

4.4.1 Formatting displays

- -

If you want some other kind of formatting, you can write a definition -of your own, analogous to \leftdisplays. You need only make sure -that \leftdisplaysetup -is called at the beginning of every display (presumably by invoking it -in TeX's \everydisplay parameter), and to define -\generaldisplay. - -\leftdisplays expands the old value of \everydisplay -before calling \leftdisplaysetup, so that any changes you have made -to it won't be lost. That old token list as available as the value of -the token register \previouseverydisplay. - - -

-


- -Next: , -Previous: Displays, -Up: User definitions - -
- -

4.5 Time of day

- -

-TeX provides the day, month, and year as numeric quantities (unless -your TeX implementation is woefully deficient). Eplain provides some -control sequences to make them a little more friendly to humans. - -

\monthname -produces the name of the current month, abbreviated to three letters. - -

\fullmonthname -produces the name of the current month, unabbreviated (in English). - -

\timestring -produces the current time, as in `1:14 p.m.' - -

\timestamp -produces the current date and time, as in `23 Apr 64 1:14 p.m.'. -(Except the spacing is slightly different.) - -

\today -produces the current date, as in `23 April 1964'. - -

-


- -Next: , -Previous: Time of day, -Up: User definitions - -
- -

4.6 Lists

- -

-Many documents require lists of items, either numbered or simply -enumerated. Plain TeX defines one macro to help with creating lists, -\item, but that is insufficient in many cases. Therefore, -Eplain provides two pairs of commands: - -

-
\numberedlist ... \endnumberedlist
\orderedlist ... \endorderedlist
These commands (they are synonyms) produce a list with the items -numbered sequentially, starting from one. A nested \numberedlist -labels the items with lowercase letters, starting with `a'. Another -nested \numberedlist labels the items with roman numerals. Yet -more deeply nested numbered lists label items with `*'. - -
\unorderedlist ... \endunorderedlist
This produces a list with the items labelled with small black boxes -(“square bullets”). A nested \unorderedlist labels items with -em-dashes. Doubly (and deeper) nested unordered lists label items with -`*'s. - -
- -

The two kinds of lists can be nested within each other, as well. - -

In both kinds of lists, you begin an item with \li. -An item may continue for several paragraphs. Each item starts a -paragraph. - -

You can give \li an optional argument, a cross-reference label. -It's defined to be the “marker” for the current item. This is useful -if the list items are numbered. You can produce the value of the label -with \xrefn. See Cross-references. - -

Eplain can create hypertext links for the markers produced by -\xrefn pointing to the relevant list item; see List hyperlinks. - -

You can also say \listcompact -right after \numberedlist or \unorderedlist. The items in -the list will then not have any extra space between them -(see Formatting lists). You might want to do this if the items in -this particular list are short. - -

Here is an example: -

     \numberedlist\listcompact
-     \li The first item.
-     \li The second item.
-     
-     The second paragraph of the second item.
-     \endnumberedlist
-
- - -
-


- -Up: Lists - -
- -

4.6.1 Formatting lists

- -

-Several registers define the spacing associated with lists. It is -likely that their default values won't suit your particular layout. - -

-
\abovelistskipamount, \belowlistskipamount
The vertical glue inserted before and after every list, respectively. - -
\interitemskipamount
The vertical glue inserted before each item except the first. -\listcompact resets this to zero, as mentioned above. - -
\listleftindent, \listrightindent
\listrightindent is the amount of space by which the list is -indented on the right; i.e., it is added to \rightskip. -\listleftindent is the amount of space, relative to -\parindent, by which the list is indented on the left. Why treat -the two parameters differently? Because (a) it is more useful to -make the list indentation depend on the paragraph indentation; -(b) footnotes aren't formatted right if \parindent is reset -to zero. - -
- -

The three vertical glues are inserted by macros, and preceded by -penalties: \abovelistskip -does \vpenalty\abovelistpenalty -and then \vskip\abovelistskip. \belowlistskip -and \interitemskip -are analogous. - -

In addition, the macro \listmarkerspace -is called to separate the item label from the item text. This is set to -\enspace by default. - -

If you want to change the labels on the items, you can redefine these -macros: -\numberedmarker -or \unorderedmarker. -The following registers might be useful if you do: - -

-
\numberedlistdepth, \unorderedlistdepth
These keep track of the depth of nesting of the two kinds of lists. - -
\itemnumber, \itemletter
These keep track of the number of items that have been seen in the current -numbered list. They are both integer registers. The difference is that -\itemnumber starts at one, and \itemletter starts at 97, -i.e., lowercase `a'. - -
- -

You can also redefine the control sequences that are used internally, -if you want to do something radically different: \beginlist -is invoked to begin both kinds of lists; \printitem -is invoked to print the label (and space following the label) for each -item; and \endlist -is invoked to end both kinds of -lists. - - -

-


- -Next: , -Previous: Lists, -Up: User definitions - -
- -

4.7 Verbatim listing

- -

It is sometimes useful to include a file verbatim in your document; -for example, part of a computer program. The \listing -command is given one argument, a filename, and produces the contents of -that file in your document. \listing expands \listingfont -to set the current font. The default value of \listingfont -is \tt. - -

You can take arbitrary actions before reading the file by defining the macro -\setuplistinghook. -This is expanded just before the file is input. - -

If you want to have line numbers on the output, you can say -\let\setuplistinghook = \linenumberedlisting. -The line numbers are stored in the count register \lineno while -the file is being read. You can redefine the macro -\printlistinglineno to change how they are printed. - -

You can produce in-line verbatim text in your document with \verbatim. -End the text with |endverbatim. If you need a `|' in the text, -double it. If the first character of the verbatim text is a space, use -| . (| will work elsewhere in the argument, too, but -isn't necessary.) - -

For example: - -

     \verbatim| ||\#%&!|endverbatim
-
-

produces |\#%&!. - -

Line breaks and spaces in the verbatim text are preserved. - -

You can change the verbatim escape character from the default `|' -with \verbatimescapechar char; for example, this changes -it to `@'. - -

     \verbatimescapechar \@
-
-

The backslash is not necessary in some cases, but is in -others, depending on the catcode of the character. The argument to -\verbatimescapechar is used as \catcode `char, so -the exact rules follow that for \catcode. - -

Because \verbatim must change the category code of special -characters, calling inside a macro definition of your own does not work -properly. For example: - -

     \def\mymacro{\verbatim &#%|endverbatim}% Doesn't work!
-
-

To accomplish this, you must change the category codes yourself before -making the macro definition. Perhaps \uncatcodespecials will -help you (see Category codes). - -

-


- -Next: , -Previous: Verbatim listing, -Up: User definitions - -
- -

4.8 Contents

- -

-Producing a table of contents that is both useful and aesthetic is one -of the most difficult design problems in any work. Naturally, Eplain -does not pretend to solve the design problem. Collecting the raw data -for a table of contents, however, is much the same across documents. -Eplain uses an auxiliary file with extension .toc -(and the same root name as your document) to save the information. - -

To write an entry for the table of contents, you say -\writetocentry{part}{text}, -where part is the type of part this entry is, e.g., -`chapter', and text is the text of the title. -\writetocentry puts an entry into the .toc file that looks -like \tocpartentry{text}{page number}. The -text is written unexpanded. - -

A related command, \writenumberedtocentry, takes one additional -argument, the first token of which is expanded at the point of the -\writenumberedtocentry, but the rest of the argument is not -expanded. The usual application is when the parts of the document are -numbered. On the other hand, the one-level expansion allows you to use -the argument for other things as well (author's names in a proceedings, -say), and not have accents or other control sequences expanded. The -downside is that if you want full expansion of the third -argument, you don't get it—you must expand it yourself, before you -call \writenumberedtocentry. - -

For example: - -

     \writenumberedtocentry{chapter}{A $\sin$ wave}{\the\chapno}
-     \writetocentry{section}{A section title}
-
-

Supposing \the\chapno expanded to `3' and that the -\write's occurred on pages eight and nine, respectively, the -above writes the following to the .toc file: - -

     \tocchapterentry{A $\sin$ wave}{3}{8}
-     \tocsectionentry{A section title}{9}
-
-

You read the .toc file with the command \readtocfile. -Naturally, whatever \toc... entry commands that were written -to the file must be defined when \readtocfile is invoked. Eplain -has minimal definitions for \tocchapterentry, -\tocsectionentry, and \tocsubsectionentry, just to prevent -undefined control sequence errors in common cases. They aren't suitable -for anything but preliminary proofs. - -

Each of \writetocentry and \writenumberedtocentry opens -the .toc file for writing, thereby deleting the information from the -previous run. You should therefore arrange that \readtocfile be -called before the first call to a \writetoc... macro. -\readtocfile does not itself delete the information -from the .toc file, so that you can call it several times, -e.g., to create both a short -and normal table of contents. (To produce this in particular, define -\tocsectionentry to produce nothing while you are reading -.toc file for a short table of contents (see Macro arguments).) - -

On the other hand, if you don't want to rewrite the .toc file at -all, perhaps because you are only running TeX on part of your -manuscript, you can set \rewritetocfilefalse. - -By default, the .toc file has the root \jobname. If your -document has more than one contents—for example, if it is a collection -of papers, some of which have their own contents—you can tell Eplain -to use a different root name by defining the control sequence -\tocfilebasename. - -In addition to the usual table of contents, you may want to have a list -of figures, list of tables, or other such contents-like list. You can do -this with \definecontentsfile{abbrev}. All of the -above commands are actually a special case that Eplain predefines with - -

     \definecontentsfile{toc}
-
-

The abbrev is used both for the file extension and in -the control sequence names. - -

-


- - -Next: , -Previous: Contents, -Up: User definitions - -
- -

4.9 Cross-references

- -

It is often useful to refer the reader to other parts of your document; -but putting literal page, section, equation, or whatever numbers in the -text is certainly a bad thing. - -

Eplain therefore provides commands for symbolic cross-references. It -uses an auxiliary file with extension .aux -(and the same root name as your document) to keep track of the -information. Therefore, it takes two passes to get the cross-references -right—one to write them out, and one to read them in. Eplain -automatically reads the .aux file at the first reference; after -reading it, Eplain reopens it for writing. - -

You can control whether or not Eplain warns you about undefined -labels. See Citations. - -

Labels in Eplain's cross-reference commands can use characters of -category code eleven (letter), twelve (other), ten (space), three (math -shift), four (alignment tab), seven (superscript), or eight (subscript). -For example, `(a1 $&^_' is a valid label (assuming the category -codes of plain TeX), but `%#\{' has no valid characters. - -

You can also do symbolic cross-references for bibliographic citations -and list items. See Citations, and Lists. - -

Eplain can create hypertext links for the cross-references; -see Cross-reference hyperlinks. - -

- - - -

4.9.1 Defining generic references

- -

-Eplain provides the command \definexref for general -cross-references. It takes three arguments: the name of the label (see -section above for valid label names), the value of the label (which can -be anything), and the “class” of the reference—whether it's a -section, or theorem, or what. For example: - -

     \definexref{sec-intro}{3.1}{section}
-
-

Of course, the label value is usually generated by another -macro using TeX count registers or some such. - -

\definexref doesn't actually define label; instead, it -writes out the definition to the .aux file, where Eplain will read -it on the next TeX run. - -

The class argument is used by the \ref and \refs -commands. See the next section. - -

-


- -Previous: Defining generic references, -Up: Cross-references - -
- -

4.9.2 Using generic references

- -

-To retrieve the value of the label defined via \definexref (see -the previous section), Eplain provides the following macros: - - - -

\refn{label}

\xrefn{label}
\refn and \xrefn (they are synonyms) produce the bare -definition of label. If label isn't defined, issue a -warning, and produce label itself instead, in typewriter. (The -warning isn't given if \xrefwarningfalse.) - -
\ref{label}
Given the class c for label (see the description of -\definexref in the previous section), expand the control sequence -\c word (if it's defined) followed by a tie. Then call -\refn on label. (Example below.) - -


\refs{label}
Like \ref, but append the letter `s' to the -\...word. - -
- -

The purpose of the \...word macro is to produce the word -`Section' or `Figure' or whatever that usually precedes the actual -reference number. - -

Here is an example: - -

     \def\sectionword{Section}
-     \definexref{sec-intro}{3.1}{section}
-     \definexref{sec-next}{3.2}{section}
-     See \refs{sec-intro} and \refn{sec-next} ...
-
-

This produces `See Sections 3.1 and 3.2 ...' - -

-


- -Next: , -Previous: Cross-references, -Up: User definitions - -
- -

4.10 Page references

- -

Eplain provides two commands for handling references to page numbers, -one for definition and one for use. - -

-
\xrdef{label}
Define label to be the current page number. This produces no -printed output, and ignores following spaces. - -
\xref{label}
Produce the text `p. pageno', which is the usual form for -cross-references. The pageno is actually label's -definition; if label isn't defined, the text of the label itself -is printed. The `p. ' prefix is defined by \xrefpageword. -Its default definition is p.\thinspace. - -
- -

Eplain can create hypertext links for the page references; see Page reference hyperlinks. - -

-


- -Next: , -Previous: Page references, -Up: User definitions - -
- -

4.11 Equation references

- -

Instead of referring to pages, it's most useful if equation labels -refer to equation numbers. Therefore, Eplain reserves a \count -register, \eqnumber, -for the current equation number, and increments it at each -numbered equation. - -

Here are the commands to define equation labels and then refer to them: - -

-
\eqdef{label}
This defines label to be the current value of \eqnumber, -and, if the current context is not inner, then produces a \eqno -command. (The condition makes it possible to use \eqdef in an -\eqalignno construction, for example.) The text of the equation -number is produced using \eqprint. See Formatting equation references. - -

If label is empty, you still get an equation number (although -naturally you can't reliably refer to it). This is useful if you want -to put numbers on all equations in your document, and you don't want to -think up unique labels. - -

To refer to the last equation with the empty label, you just use the -empty label in one of the equation reference macros (see below). This -can be handy when you want to refer to an equation shortly after its -definition, say, in the sentence following the displayed equation, and -do not intend to refer to the equation later. But use this trick with -extreme caution: if later you change the text and insert another -empty definition between the original definition and the reference, -the reference will start to refer to the new empty-labeled equation. - -

\eqdefn{label}
This is like \eqdef, except it always omits the \eqno -command. It can therefore be used in places where \eqdef can't; -for example, in a non-displayed equation. The text of the equation -number is not produced, so you can also use it in the (admittedly -unusual) circumstance when you want to define an equation label but not -print that label. - -
\eqref{label}
This produces a formatted reference to label. If label is -undefined (perhaps because it is a forward reference), it just produces -the text of the label itself. Otherwise, it calls \eqprint. - -
\eqrefn{label}
This produces the cross-reference text for label. That is, it -is like \eqref, except it doesn't call \eqprint. - -
- -

Equation labels can contain the same characters that are valid in -general cross-references. - -

Eplain can create hypertext links for the equation references; -see Equation reference hyperlinks. - -

- - - -

4.11.1 Formatting equation references

- -

Both defining an equation label and referring to it should usually -produce output. This output is produced with the \eqprint macro, -which takes one argument, the equation number being defined or referred -to. By default, this just produces `(number)', where -number is the equation number. To produce the equation number in -a different font, or with different surrounding symbols, or whatever, -you can redefine \eqprint. -For example, the following definition would print all equation numbers -in italics. (The extra braces define a group, to keep the font change -from affecting surrounding text.) - -

     \def\eqprint#1{{\it (#1)}}
-
-

In addition to changing the formatting of equation numbers, you might -to add more structure to the equation number; for example, you might -want to include the chapter number, to get equation numbers like -`(1.2)'. To achieve this, you redefine \eqconstruct. -For example: - -

     \def\eqconstruct#1{\the\chapternumber.#1}
-
-

(If you are keeping the chapter number in a count register named -\chapternumber, naturally.) - -

The reason for having both \eqconstruct and \eqprint may -not be immediately apparent. The difference is that \eqconstruct -affects the text that cross-reference label is defined to be, while -\eqprint affects only what is typeset on the page. The example -just below might help. - -

Usually, you want equation labels to refer to equation numbers. But -sometimes you might want a more complicated text. For example, you -might have an equation `(1)', and then have a variation several pages -later which you want to refer to as `(1*)'. - -

Therefore, Eplain allows you to give an optional argument (i.e., -arbitrary text in square brackets) before the cross-reference label to -\eqdef. Then, when you refer to the equation, that text is produced. -Here's how to get the example just mentioned: - -

     $$...\eqdef{a-eq}$$
-     ...
-     $$...\eqdef[\eqrefn{a-eq}*]{a-eq-var}$$
-     In \eqref{a-eq-var}, we expand on \eqref{a-eq}, ...
-
-

We use \eqrefn in the cross-reference text, not -\eqref, so that \eqprint is called only once. - -

- -

4.11.2 Subequation references

- -

Eplain also provides for one level of substructure for equations. That -is, you might want to define a related group of equations with numbers -like `2.1' and `2.2', and then be able to refer to the group as a whole: -“... in the system of equations (2)...”. - -

The commands to do this are \eqsubdef and -\eqsubdefn. -They take one label argument like their counterparts above, -and generally behave in the same way. The difference is in how they -construct the equation number: instead of using just \eqnumber, -they also use another counter, \subeqnumber. -This counter is advanced by one at every \eqsubdef or -\eqsubdefn, and reset to zero at every \eqdef or -\eqdefn. - -

You use \eqref to refer to subequations as well as main -equations. - -

To put the two together to construct the text that the label will -produce, they use a macro \eqsubreftext. -This macros takes two arguments, the “main” equation number (which, -because the equation label can be defined as arbitrary text, as -described in the previous section, might be anything at all) and the -“sub” equation number (which is always just a number). Eplain's -default definition just puts a period between them: -

     \def\eqsubreftext#1#2{#1.#2}%
-
-

You can redefine \eqsubreftext to print however you -like. For example, this definition makes the labels print as `2a', -`2b', and so on. -

     \newcount\subref
-     \def\eqsubreftext#1#2{%
-       \subref = #2           % The space stops a <number>.
-       \advance\subref by 96  % `a' is character code 97.
-       #1\char\subref
-     }
-
-

Sadly, we must define a new count register, \subref, -instead of using the scratch count register \count255, because -`#1' might include other macro calls which use \count255. - -

-


- -Next: , -Previous: Equation references, -Up: User definitions - -
- -

4.12 Indexing

- -

-Eplain provides support for generating raw material for an index, and -for typesetting a sorted index. A separate program must do the actual -collection and sorting of terms, because TeX itself has no support -for sorting. - -

Eplain can create hypertext links pointing from the index to the index -terms; see Index hyperlinks. - -

Eplain's indexing commands were designed to work with the program -MakeIndex, available from CTAN hosts in -tex-archive/indexing/makeindex; MakeIndex is also commonly -included in prepackaged TeX distributions. It is beyond the scope of -this manual to explain how to run MakeIndex, and all of its many -options. See http://www.ctan.org/tex-archive/indexing/makeindex/ - -

The basic strategy for indexing works like this: - -

    - -

  1. For a document foo.tex, Eplain's indexing commands (e.g., -\idx; see the section `Indexing terms' below) write the raw index -material to foo.idx. - -

  2. MakeIndex reads foo.idx, collects and sorts the index, and -writes the result to foo.ind. - -
  3. Eplain reads and typesets foo.ind on a subsequent run of -TeX. See the section `Typesetting an index' below. - -
- -

The texi2dvi program can help you automate this -process, see Invoking Eplain. - -

If your document needs more than one index, each must have its own -file. Therefore, Eplain provides the command \defineindex, which -takes an argument that is a single letter, which replaces `i' in -the filenames and in the indexing command names described below. For -example, - -

     \defineindex{m}
-
-

defines the command \mdx to write to the file -foo.mdx. Eplain simply does \defineindex{i} to define -the default commands. - -

- -
-


- -Next: , -Up: Indexing - -
- -

4.12.1 Indexing terms

- -

-Indexing commands in Eplain come in pairs: one command that only -writes the index entry to the `.idx' file (see above section), and -one that also typesets the term being indexed. The former always starts -with `s' (for “silent”). In either case, the name always includes -`Idx', where I is the index letter, also described -above. Eplain defines the index `i' itself, so that's what we'll -use in the names below. - -

The silent form of the commands take a subterm as a trailing optional -argument. For example, \sidx{truth}[definition of] on page 75 -makes an index entry that will eventually be typeset (by default) as - -

     truth
-       definition of, 75
-
-

Also, the silent commands ignore trailing spaces. The non-silent ones do not. - -

- -
-


- -Next: , -Up: Indexing terms - -
- -
4.12.1.1 Indexing commands
- -

Here are the commands. - -

    -
  • \sidx{term}[subterm] makes an index entry for -term, optionally with subterm subterm. -\idx{term} also produces term as output. Example: - -
              \sidx{truth}[beauty of]
    -          The beauty of truth is \idx{death}.
    -     
    -

    Subterms at the second and further levels can also be -specified in subterm, using the -\idxsubentryseparator character to separate -them. This character is by default `!'. - -

  • \sidxname{First M.}{von Last}[subterm] -makes an index -entry for `von Last, First M.'. You can change the -`, ' by redefining \idxnameseparator. -\idxname{First M.}{von Last} also produces First M. von -Last as output. (These commands are useful special cases of \idx -and \sidx.) Example: - -
              \sidxname{Richard}{Stark}
    -          \idxname{Donald}{Westlake} has written many kinds of novels, under
    -          almost as many names.
    -     
    -
  • \sidxmarked\cs{term}[subterm] makes an index -entry for term[subterm], but term will be put -in the index as \cs{term}, but still sorted as just -term. \idxmarked\cs{term} also typesets -\cs{term}. This provides for the usual ways of changing -the typesetting of index entries. Example: - -
              \def\article#1{``#1''}
    -          \sidxmarked\article{Miss Elsa and Aunt Sophie}
    -          Peter Drucker's \idxmarked\article{The Polanyis} is a remarkable
    -          essay about a remarkable family.
    -     
    -
  • \sidxsubmarked{term}\cs{subterm} makes an index -entry for term, subterm as usual, but also puts subterm in -the index as \cs{term}. -\idxsubmarked{term}\cs{subterm} also typesets -term \cs{subterm}, in the unlikely event that your -syntax is convoluted enough to make this useful. Example: - -
              \def\title#1{{\sl #1}}
    -          \sidxsubmarked{Anderson, Laurie}\title{Strange Angels}
    -          The \idxsubmarked{Anderson}\title{Carmen} is a strange twist.
    -     
    -
- -

The commands above rely on MakeIndex's feature for separating sorting of -an index entry's from its typesetting. You can use this directly by -specifying an index entry as sort@typeset. For -example: - -

     \sidx{Ap-weight@$A_\pi$-weight}
-
-

will sort as Ap-weight, but print with the proper math. -The @ here is MakeIndex's default character for this purpose. -See http://www.ctan.org/tex-archive/indexing/makeindex/. To make an index -entry with an @ in it, you have to escape it with a backslash; -Eplain provides no macros for doing this. - -

After any index command, Eplain runs -\hookaction{afterindexterm}. Because the index commands always -add a whatsit item to the current list, you may wish to preserve a -penalty or space past the new item. For example, given a conditional -\if@aftersctnhead set true when you're at a section heading, you -could do: - -

     \hookaction{afterindexterm}{\if@aftersctnhead \nobreak \fi}
-
-
-


- -Next: , -Previous: Indexing commands, -Up: Indexing terms - -
- -
4.12.1.2 Modifying index entries
- -

-All the index commands described in the previous section take an initial -optional argument before the index term, which modify the index entry's -meaning in various ways. You can specify only one of the following in -any given command, except that begin and end can be -specified together with pagemarkup=cs (separate them with -a comma without a following space, like this: -[begin,pagemarkup=defn]). - -

These work via MakeIndex's “encapsulation” feature. See Customizing indexing, if you're not using the default characters for the -MakeIndex operators. The other optional argument (specifying a subterm) -is independent of these. - -

Here are the possibilities: - -

-
begin
end
These mark an index entry as the beginning or end of a range. The index -entries must match exactly for MakeIndex to recognize them. -Example: - -
          \sidx[begin]{future}[Cohen, Leonard]
-          ...
-          \sidx[end]{future}[Cohen, Leonard]
-     
-

will typeset as something like - -

          future,
-            Cohen, Leonard, 65–94
-     
-
see
This marks an index entry as pointing to another; the real index term is -an additional (non-optional) argument to the command. Thus you can -anticipate a term readers may wish to look up, yet which you have -decided not to index. Example: - -
          \sidx[see]{analysis}[archetypal]{archetypal criticism}
-     
-

becomes - -

          analysis,
-            archetypal, see archetypal criticism
-     
-
seealso
Similar to see (the previous item), but also allows for normal -index entries of the referencing term. Example: - -
          \sidx[seealso]{archetypal criticism}[elements of]{dichotomies}
-     
-

becomes - -

          archetypal criticism,
-            elements of, 75, 97, 114, see also dichotomies
-     
-

(Aside for the academically curious: The archetypally critical book I -took these dichotomous examples from is Laurence Berman's The -Musical Image, which I happened to co-design and typeset.) - -

pagemarkup=cs
This puts \cs before the page number in the typeset index, -thus allowing you to underline definitive entries, italicize examples, -and the like. You do not precede the control sequence cs -with a backslash. (That just leads to expansive difficulties.) Naturally -it is up to you to define the control sequences you want to use. Example: - -
          \def\defn#1{{\sl #1}}
-          \sidx[pagemarkeup=defn]{indexing}
-     
-

becomes something like - -

          indexing, \defn{75}
-     
-
- -
-


- -Previous: Modifying index entries, -Up: Indexing terms - -
- -
4.12.1.3 Proofing index terms
- -

-As you are reading through a manuscript, it is helpful to see what terms -have been indexed, so you can add others, catch miscellaneous errors, -etc. (Speaking from bitter experience, I can say it is extremely -error-prone to leave all indexing to the end of the writing, since it -involves adding many TeX commands to the source files.) - -

So Eplain puts index terms in the margin of each page, if you -set \indexproofingtrue. It is false by default. The terms -are typeset by the macro \indexproofterm, which takes a single -argument, the term to be typeset. Eplain's definition of -\indexproofterm just puts it into an \hbox, first doing -\indexprooffont, which Eplain defines to select the font -cmtt8. With this definition long terms run off the page, but -since this is just for proofreading anyway, it seems acceptable. - -

On the other hand, we certainly don't want the index term to run into -the text of the page, so Eplain uses the right-hand side of the page -rather than the left-hand page (assuming a language read left to right -here). So \ifodd\pageno, Eplain kerns by \outsidemargin, -otherwise by \insidemargin. If those macros are undefined, -\indexsetmargins defines them to be one inch plus \hoffset. - -

To get the proofing index entries on the proper page, Eplain defines a new -insertion class \@indexproof. To unbox any index proofing -material, Eplain redefines \makeheadline to call -\indexproofunbox before the original \makeheadline. Thus, -if you have your own output routine, that redefines or doesn't use -\makeheadline, it's up to you to call \indexproofunbox at -the appropriate time. - -

-


- -Next: , -Previous: Indexing terms, -Up: Indexing - -
- -

4.12.2 Typesetting an index

- -

-The command \readindexfile{i} reads and typesets the -.ind file that MakeIndex outputs (from the .idx file which -the indexing commands in the previous sections write). Eplain defines a -number of commands that support the default MakeIndex output. - -

More precisely, \readindexfile reads -\indexfilebasename.index-letternd, where the -index-letter is the argument. \indexfilebasename is -\jobname by default, but if you have different indexes in -different parts of a book, you may wish to change it, just as with -bibliographies (see Citations). - -

MakeIndex was designed to work with LaTeX; therefore, by default the -.ind file starts with \begin{theindex} and ends with -\end{theindex}. If no \begin has been defined, Eplain -defines one to ignore its argument and set up for typesetting the index -(see below), and also defines a \end to ignore its argument. (In -a group, naturally, since there is a primitive \end). - -

Eplain calls \indexfonts, sets \parindent = 0pt, and does -\doublecolumns (see Multiple columns) at the -\begin{theindex}. \indexfonts does nothing by default; -it's just there for you to override. (Indexes are usually typeset in -smaller type than the main text.) - -

It ends the setup with \hookrun{beginindex}, so you can -override anything you like in that hook (see Hooks). For example: - -

     \hookaction{beginindex}{\triplecolumns}
-
-

MakeIndex turns each main index entry into an \item, subentries -into \subitem, and subsubentries into \subsubitem. By -default, the first line of main entries are not indented, and subentries -are indented 1em per level. Main entries are preceded by a \vskip -of \aboveitemskipamount, 0pt plus2pt by default. Page -breaks are encouraged before main entries (\penalty -100), but -prohibited afterwards—Eplain has no provision for “continued” -index entries. - -

All levels do the following: - -

-

     \hangindent = 1em
-     \raggedright
-     \hyphenpenalty = 10000
-
-

Each entry ends with \hookrun{indexitem}, so you can change any -of this. For example, to increase the allowable rag: - -

     \hookaction{indexitem}{\advance\rightskip by 2em}
-
-

Finally, MakeIndex outputs \indexspace between each group of -entries in the .ind file. Eplain makes this equivalent to -\bigbreak. - -

-


- -Previous: Typesetting an index, -Up: Indexing - -
- -

4.12.3 Customizing indexing

- -

-By default, MakeIndex outputs `, ' after each term in the index. To -change this, you can add the following to your MakeIndex style -(.ist) file: - -

     delim_0 "\\afterindexterm "
-     delim_1 "\\afterindexterm "
-     delim_2 "\\afterindexterm "
-
-

Eplain makes \afterindexterm equivalent to -\quad. - -

You can also change the keywords Eplain recognizes (see Modifying index entries): - -

-
\idxrangebeginword
`begin' - -
\idxrangeendword
`end' - -
\idxseecmdword
`see' - -
\idxseealsocmdword
`seealso' - -
- -

You can also change the magic characters Eplain puts into the -.idx file, in case you've changed them in the .ist file: - -

-
\idxsubentryseparator
`!' - -
\idxencapoperator
`|' - -
\idxbeginrangemark
`(' - -
\idxendrangemark
`)' - -
- -

There is no macro for the actual (`@' by default) -character, because it's impossible to make it expand properly. - -

You can change the (imaginary) page number that “see also” -entries sort as by redefining \idxmaxpagenum. This is 99999 by -default, which is one digit too many for old versions of MakeIndex. - -

The words output by Eplain for “see” and “see also” index entries -are defined by \indexseeword and \indexseealsowords -respectively. You can change the typeface used for these words by -redefining \seevariant. And finally, the macros -\indexsee and \indexseealso actually produce the “see -...” entries, so you can redefine them if you want something -entirely different. If you do redefine them, make them take two -parameters, the term being referenced and the \idxmaxpagenum -(the latter should normally be ignored). See the example below. - -

Unfortunately, it is impossible to reliably control the commas -produced by MakeIndex in front of “see ...” entries in the -.ind file, either at MakeIndex level or at Eplain level. -However, the -sed script named trimsee -distributed with Eplain in the test directory can be used to -filter out these commas from the output of MakeIndex. For example, -suppose you want the following style for your “see ...” entries: - -

     analysis,
-       archetypal (see archetypal criticism)
-     archetypal criticism,
-       elements of, 75, 97, 114 (see also dichotomies)
-
-

You would need to redefine these macros in your TeX -file: - -

     \def\indexsee#1#2{({\seevariant \indexseeword\/ }#1)}
-     \def\indexseealso#1#2{({\seevariant \indexseealsowords\/ }#1)}
-
-

and then filter out the commas in front of the “see ...” -entries by running the following command to produce the .ind -file (assuming the name of the .idx file is myfile.idx -and the trimsee script is placed in the current directory): - -

     prompt$ cat myfile.idx | makeindex | ./trimsee > myfile.ind
-
-

By default, trimsee uses default page list separators and -default “see ...” command names. If you set up MakeIndex to use -different page list separator or change the names of \indexsee -and \indexseealso commands, it is possible to adjust the -trimsee script through its command line options, which are the -following: - -

-
-i is
Use is as a regular expression matching separator before “see -...” commands in the input (default: `, \+'). - -
-o os
Use os as a separator to replace is before “see ...” -commands (default: ` '). - -
-s see
Use see as a regular expression matching “see ...” -commands (default: `\\indexsee'). - -
-h
--help
Print a usage message. - -
-v
--version
Print version. -
- -

trimsee reads input from the standard input, and directs its -output to the standard output. - -

-


- -Next: , -Previous: Indexing, -Up: User definitions - -
- -

4.13 Justification

- -

Eplain defines three commands to conveniently justify multiple -lines of text: \flushright, \flushleft, and -\center. - -They all work in the same way; let's take \center as the -example. To start centering lines, you say \center inside a -group; to stop, you end the group. Between the two commands, each -end-of-line in the input file also starts a new line in the output file. - -

The entire block of text is broken into paragraphs at blank lines, -so all the TeX paragraph-shaping parameters apply in the usual way. -This is convenient, but it implies something else that isn't so -convenient: changes to any linespacing parameters, such as -\baselineskip, will have no effect on the paragraph in -which they are changed. TeX does not handle linespacing changes -within a paragraph (because it doesn't know where the line breaks are -until the end of the paragraph). - -

The space between paragraphs is by default one blank line's worth. -You can adjust this space by assigning to \blanklineskipamount; -this (vertical) glue is inserted after each blank line. - -

Here is an example: -

     {\center First line.
-     
-        Second line, with a blank line before.
-     }
-
-

This produces: - -

First line.
-
-
Second line, with a blank line before.
- -

You may wish to use the justification macros inside of your own -macros. Just be sure to put them in a group. For example, here is how -a title macro might be defined: - -

     \def\title{\begingroup\titlefont\center}
-     \def\endtitle{\endgroup}
-
-
-


- -Next: , -Previous: Justification, -Up: User definitions - -
- -

4.14 Tables

- -

Eplain provides a single command, \makecolumns, -to make generating one particular kind of table easier. More ambitious -macro packages might be helpful to you for more difficult applications. -The files ruled.tex and TXSruled.tex, available from -`lifshitz.ph.utexas.edu' in texis/tables, is the only one I -know of. - -

Many tables are homogenous, i.e., all the entries are semantically the -same. The arrangement into columns is to save space on the page, not -to encode different meanings. In this kind of the table, it is useful to -have the column breaks chosen automatically, so that you can add or -delete entries without worrying about the column breaks. - -

\makecolumns takes two arguments: the number of entries in the -table, and the number of columns to break them into. As you can see -from the example below, the first argument is delimited by a slash, and -the second by a colon and a space (or end-of-line). The entries for the -table then follow, one per line (not including the line with the -\makecolumns command itself). - -

\parindent defines the space to the left of the -table. \hsize defines the width of the table. -So you can adjust the position of the table on the page by assignments -to these parameters, probably inside a group. - -

You can also control the penalty at a page break before the -\makecolumns by setting the parameter -\abovecolumnspenalty. -Usually, the table is preceded by some explanatory text. You wouldn't -want a page break to occur after the text and before the table, so -Eplain sets it to 10000. But if the table produced by -\makecolumns is standing on its own, \abovecolumnspenalty -should be decreased. - -

If you happen to give \makecolumns a smaller number of entries -than you really have, some text beyond the (intended) end of the table -will be incorporated into the table, probably producing an error -message, or at least some strange looking entries. And if you give -\makecolumns a larger number of entries than you really have, -some of the entries will be typeset as straight text, probably also -looking somewhat out of place. - -

Here is an example: -

     % Arrange 6 entries into 2 columns:
-     \makecolumns 6/2: % This line doesn't have an entry.
-     one
-     two
-     three
-     four
-     five
-     six
-     Text after the table.
-
-

This produces `one', `two', and `three' in the first column, and -`four', `five', and `six' in the second. - -

-


- -Next: , -Previous: Tables, -Up: User definitions - -
- -

4.15 Margins

- -

TeX's primitives describe the type area in terms of an offset from -the upper left corner, and the width and height of the type. Some -people prefer to think in terms of the margins at the top, bottom, -left, and right of the page, and most composition systems other than -TeX conceive of the page laid out in this way. Therefore, Eplain -provides commands to directly assign and increment the margins. - -

-
\topmargin = dimen
\bottommargin = dimen
\leftmargin = dimen
\rightmargin = dimen
These commands set the specified margin to the dimen given. -The = and the spaces around it are optional. The control -sequences here are not TeX registers, despite appearances; -therefore, commands like \showthe\topmargin will not do what you -expect. - -
\advancetopmargin by dimen
\advancebottommargin by dimen
\advanceleftmargin by dimen
\advancerightmargin by dimen
These commands change the specified margin by the dimen given. -
- -

Regardless of whether you use the assignment or the advance commands, -Eplain always changes the type area in response, not the other margins. -For example, when TeX starts, the left and right margins are both one -inch. If you then say \leftmargin = 2in, the right margin will -remain at one inch, and the width of the lines (i.e., \hsize) -will decrease by one inch. - -

When you use any of these commands, Eplain computes the old value of -the particular margin, by how much you want to change it, and then -resets the values of TeX's primitive parameters to correspond. -Unfortunately, Eplain cannot compute the right or bottom margin without -help: you must tell it the full width and height of the final output -page. It defines two new parameters for this: - -

-
\paperheight
The height of the output page; default is 11truein. - -
\paperwidth
The width of the output page; default is 8.5truein. -
- -

If your output page has different dimensions than this, you must -reassign to these parameters, as in - -

     \paperheight = 11truein
-     \paperwidth = 17truein
-
-
-


- -Next: , -Previous: Margins, -Up: User definitions - -
- -

4.16 Multiple columns

- -

Eplain provides for double, triple, and quadruple column output: say -\doublecolumns, -\triplecolumns, -or \quadcolumns, -and from that point on, the manuscript will be -set in columns. To go back to one column, say -\singlecolumn. - -You may need to invoke \singlecolumn to balance the columns -on the last page of output. - -

To do a “column eject”, i.e., move to the top of the next column, do -\columnfill. This does not actually force an eject, however: it -merely inserts a kern of size \@normalvsize minus -\pagetotal (\@normalvsize being the usual height of the -page; to implement multicolumns, Eplain multiplies \vsize itself -by the number of columns). In most circumstances, a column break will be -forced after this kern (during the column splitting operation when the -whole page is output), as desired. - -

The columns are separated by the value of the dimen parameter -\gutter. Default value is two picas. -If you want to add vertical material between the columns, use -\gutterbox. For example, to put a vertical line between columns, -define -\gutterbox as -

     \def\gutterbox{\vbox to \dimen0{\vfil\hbox{\vrule height\dimen0}\vfil}}%
-
-

The dimension counter -\dimen0 -contains the height of the column. - -

All the \...columns macros insert the value of the glue parameter -\abovecolumnskip -before the multicolumn text, and the value of the glue parameter -\belowcolumnskip -after it. The default value for both of these parameters is -\bigskipamount, i.e., one linespace in plain TeX. - -

The macros take into account only the insertion classes -defined by plain TeX; namely, footnotes and \topinserts. If -you have additional insertion classes, you will need to change -the implementation. - -

Also, Eplain makes insertions the full page width. There is no -provision for column-width insertions. - -

-


- -Next: , -Previous: Multiple columns, -Up: User definitions - -
- -

4.17 Footnotes

- -

The most common reference mark for footnotes is a raised number, -incremented on each footnote. The \numberedfootnote -macro provides this. It takes one argument, the footnote text. - -

If your document uses only numbered footnotes, you could make typing -\numberedfootnote more convenient with a command such as: - -

     \let\footnote = \numberedfootnote
-
-

After doing this, you can type your footnotes as -\footnote{footnote text}, instead of as -\numberedfootnote{footnote text}. - -

Eplain keeps the current footnote number in the count register -\footnotenumber. So, to reset the footnote number to zero, -as you might want to do at, for example, the beginning of a chapter, you -could say \footnotenumber=0. - -

Plain TeX separates the footnote marker from the footnote text by -an en space (it uses the \textindent macro). In Eplain, you can -change this space by setting the dimension register -\footnotemarkseparation. -The default is still an en. - -

You can produce a space between footenotes by setting the glue -register \interfootnoteskip. -The default is zero. - -

\parskip is also set to zero by default before the beginning of -each footnote (but not for the text of the footnote). - -

You can also control footnote formatting in a more general way: -Eplain expands the token register \everyfootnote -before a footnote is typeset, but after the default values for all the -parameters have been established. For example, if you want your -footnotes to be printed in seven-point type, indented by one inch, you -could say: -

     \everyfootnote = {\sevenrm \leftskip = 1in}
-
-

By default, an \hrule is typeset above each group of footnotes -on a page. You can control the dimensions of this rule by setting -the dimension registers \footnoterulewidth -and \footnoteruleheight. -The space between the rule and the first footnote on the page is -determined by the dimension register \belowfootnoterulespace. -If you don't want any rule at all, set \footenoteruleheight=0pt, -and, most likely, \belowfootnoterulespace=0pt. The defaults for -these parameters typeset the rule in the same way as plain TeX: the -rule is 0.4 points high, 2 true inches wide, with 2.6 points below it. - -

The space above the rule and below the text on the page is controlled -by the glue register \skip\footins. The default is a plain TeX -\bigskip. - -

Eplain can create hypertext links for the footnote marks; see Footnote hyperlinks. - -

-


- -Next: , -Previous: Footnotes, -Up: User definitions - -
- -

4.18 Fractions

- -

Exercise 11.6 of The TeXbook describes a macro \frac -for setting fractions, but \frac never made it into plain TeX. -So Eplain includes it. - -

\frac typesets the numerator and denominator in -\scriptfont0, slightly raised and lowered. The numerator and -denominator are separated by a slash. The denominator must be enclosed -in braces if it's more than one token long, but the numerator need not -be. (This is a consequence of \frac taking delimited arguments; -see page 203 of The TeXbook for an explanation of -delimited macro arguments.) - -

For example, \frac 23/{64} turns `23/64' into -. - -

-


- -Next: , -Previous: Fractions, -Up: User definitions - -
- -

4.19 Paths

- -

-When you typeset long pathnames, electronic mail addresses, or other -such “computer” names, you would like TeX to break lines at -punctuation characters within the name, rather than trying to find -hyphenation points within the words. For example, it would be better to -break the email address letters@alpha.gnu.ai.mit.edu at the -`@' or a `.', rather than at the hyphenation points in -`letters' and `alpha'. - -

If you use the \path macro to typeset the names, TeX will find -these good breakpoints. The argument to \path is delimited by -any character other other than `\' which does not appear in the -name itself. -`|' is often a good choice, as in: -

     \path|letters@alpha.gnu.ai.mit.edu|
-
-

You can control the exact set of characters at which breakpoints will be -allowed by calling \discretionaries. This takes the same sort of -delimited argument; any character in the argument will henceforth be a valid -breakpoint within \path. The default set is essentially all the -punctuation characters: -

     \discretionaries |~!@$%^&*()_+`-=#{}[]:";'<>,.?\/|
-
-

If for some reason you absolutely must use \ as the delimiter -character for \path, you can set -\specialpathdelimiterstrue. (Other delimiter characters can -still be used.) TeX then processes the \path argument -about four times more slowly. - -

The \path macro comes from path.sty, written by Nelson -Beebe and Philip Taylor and available at -http://www.ctan.org/tex-archive/macros/latex/contrib/misc/path.sty. - -

-


- -Next: , -Previous: Paths, -Up: User definitions - -
- -

4.20 Logos

- -

-Eplain redefines the \TeX -macro of plain TeX to end with \null, so that the proper -spacing is produced when \TeX is used at the end of a sentence. -The other ...TeX macros listed here do this, also. - -

Eplain defines -\AMSTeX, -\BibTeX -\AMSLaTeX, -\LAMSTeX, -\LaTeX -\MF, -and \SLiTeX -to produce their respective logos. (Sorry, the logos are not shown -here.) Some spelling variants of these are also supported. - -

All these macros come from texnames.sty, compiled by Nelson -Beebe and available at -http://www.ctan.org/tex-archive/info/biblio/texnames.sty. - -

-


- -Next: , -Previous: Logos, -Up: User definitions - -
- -

4.21 Boxes

- -

The solid rectangle that Eplain uses as a marker in unordered lists -(see Lists) is available by itself: just say \blackbox. - -You can create black boxes of arbitrary size with \hrule or -\vrule. - -

You can also get unfilled rectangles with \makeblankbox. -This takes two explicit arguments: the height and depth of the rules that -define the top and bottom of the rectangle. (The two arguments are -added to get the width of the left and right borders, so that the -thickness of the border is the same on all four sides.) It also uses, -as implicit arguments, the dimensions of \box0 to define the -dimensions of the rectangle it produces. (The contents of \box0 -are ignored.) - -

Here is an example. This small raised open box is suitable for -putting next to numbers in, e.g., a table of contents. - -

     \def\openbox{%
-       \ht0 = 1.75pt \dp0 = 1.75pt \wd0 = 3.5pt
-       \raise 2.75pt \makeblankbox{.2pt}{.2pt}
-     }
-
-

Finally, you can put a box around arbitrary text with \boxit. -This takes one argument, which must itself be a (TeX) box, and puts a -printed box around it, separated by \boxitspace -white space (3 points by default) on all four sides. For example: - -

     \boxit{\hbox{This text is boxed.}}
-
-

The reason that the argument must be a box is that when the text is -more than one line long, TeX cannot figure out the line length for -itself. Eplain does set \parindent to zero inside \boxit, -since it is very unlikely you would want indentation there. (If you do, -you can always reset it yourself.) - -

\boxit uses \ehrule and \evrule so that you can -easily adjust the thicknesses of the box rules. See Rules. - -

-


- -Next: , -Previous: Boxes, -Up: User definitions - -
- -

4.22 Checking for PDF output

- -

pdfTeX is a TeX variant that can output both .dvi and -.pdf (Adobe's Portable Document Format) files (see -http://www.ctan.org/tex-archive/systems/pdftex/). You might -sometimes want to know whether the target format is .pdf or -.dvi. The \ifpdf -switch can be used to detect pdfTeX in PDF mode: - -

     \ifpdf
-        This text is produced when pdfTeX is in PDF mode.
-     \else
-        This text is produced when pdfTeX is in DVI mode,
-        or when some program other than pdfTeX is used.
-     \fi
-
-

Keep in mind that \ifpdf is set based on the value of the -\pdfoutput -primitive of pdfTeX at the time Eplain is loaded. If you change -the value of \pdfoutput after you load Eplain, \ifpdf -will not reflect the change. - -

Eplain defines \ifpdf by incorporating Heiko Oberdiek's -ifpdf.sty, which is available at -http://www.ctan.org/tex-archive/macros/latex/contrib/oberdiek/ifpdf.sty. - -

-


- -Previous: Checking for PDF output, -Up: User definitions - -
- -

4.23 Loading LaTeX packages

- -

Eplain provides a limited support for loading LaTeX packages -(.sty files—not .cls). This will mostly work for -packages which were designed with plain TeX compatibility in mind, -which means that most LaTeX packages cannot be loaded. The -packages which are known to work are listed below (see Packages known to work). If you discover a working package which is not in -the list, please report it to the Eplain mailing list -(see Introduction). - -

To set up a pseudo-LaTeX environment for the packages, Eplain uses -miniltx.tex -(http://www.ctan.org/tex-archive/macros/plain/graphics/miniltx.tex) -from the LaTeX graphics collection, written by David Carlisle and -Sebastian Rahtz (the collection is available at -http://www.ctan.org/tex-archive/macros/latex/required/graphics/). -Eplain extends miniltx.tex to provide some additional features, -e.g., support for package options. - -

- - - -

4.23.1 The \usepackage command

- -

\usepackage loads a LaTeX package. Its syntax is similar to -that of LaTeX's \usepackage command: - -

     \usepackage[options]{packages}[version]
-
-

where options is a comma-separated list of package -options, packages is a comma-separated list of packages to load -(without the .sty suffix), and version is a package -version number given as a date in the format `YYYY/MM/DD'. If an -older version of the package is found, a warning is issued. If -several packages are loaded within a single \usepackage -command, the options will be applied to each of the packages. -As usual, parameters in square brackets are optional and can be -omitted (together with the square brackets). - -

For example: - -

     \usepackage[foo,bar]{pack1,pack2}[2005/08/29]
-
-

will load packages `pack1' and `pack2', each with -the options `foo' and `bar', and will check that each of the -packages are dated 2005/08/29 or newer. - -

- -

4.23.2 Environment for loading packages

- -

Some packages request that certain commands are executed after all -packages have been loaded. In LaTeX, this means that the commands -are executed at the beginning of the document, after the so-called -preamble. Neither plain TeX nor Eplain have any kind of -preamble; therefore, Eplain requires that all packages be loaded inside -a \beginpackages...\endpackages block, for example: - -

     \beginpackages
-       \usepackage[foo,bar]{pack1}
-       \usepackage{pack2}
-     \endpackages
-
-

This requirement enables Eplain to execute the “delayed” -commands at the end of the \beginpackages...\endpackages block. - -

For the same reason, it is advisable to specify only one such block -per document, just like there is only one preamble in LaTeX. - -

- -

4.23.3 Packages known to work

- -

The following table lists packages that had been tested and are known -to work with Eplain, and locations where you can find manuals for -these packages. Some of the short descriptions of the packages were -taken from the documentation for those packages. - -

-
autopict (`2001/06/04 v1.1j Picture mode autoload file')
http://tug.org/eplain/ltpictur.pdf - -

This is the LaTeX “picture mode”, started by -\begin{picture} and ended by \end{picture} (in -LaTeX, this package is not explicitly loaded since it is part of -the LaTeX kernel). It provides commands to draw simple figures -inside your document without resorting to any external tools. - -

color (`1999/02/16 v1.0i Standard LaTeX Color (DPC)')
graphics (`2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR)')
graphicx (`1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)')
http://www.ctan.org/tex-archive/macros/latex/required/graphics/grfguide.pdf - -

These packages are from the LaTeX graphics collection. They -provide commands for changing text/page colors, text rotation and -scaling, and much more. - -

psfrag (`1998/04/11 v3.04 PSfrag (MCG)')
http://www.ctan.org/tex-archive/macros/latex/contrib/psfrag/pfgguide.pdf - -

PSfrag allows the user to precisely overlay Encapsulated PostScript -(EPS) files with arbitrary (La)TeX constructions. In order to -accomplish this, the user places a simple text “tag” in the graphics -file, as a “position marker” of sorts. Then, using simple -(La)TeX commands, the user instructs PSfrag to remove that tag from -the figure, and replace it with a properly sized, aligned, and rotated -(La)TeX equation. - -

url (`2005/06/27 ver 3.2 Verb mode for urls, etc.')
http://www.ctan.org/tex-archive/macros/latex/contrib/misc/url.sty - -

This package provides a form of \verbatim that allows -line breaks at certain characters or combinations of characters, -accepts reconfiguration, and can usually be used in the argument to -another command. It is intended for email addresses, hypertext links, -directories/paths, etc., which normally have no spaces. - -

Eplain can create hypertext links with the \url command; -see URL hyperlinks. -

- - - -

4.23.4 Packages known not to work

- -

The following packages are known not to work with Eplain: - -

-
pict2e (`2005/07/15 v0.2r Improved picture commands (HjG,RN)')
http://www.ctan.org/tex-archive/macros/latex/contrib/pict2e/ - -
xcolor (`2005/06/06 v2.03 LaTeX color extensions (UK)')
http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor/ -
- - -
-


- -Next: , -Previous: User definitions, -Up: Top - -
- -

5 Hyperlinks

- -

This chapter describes the support which Eplain provides for hypertext -links (hyperlinks for short). Hyperlinks can be created -implicitly by the cross-reference, indexing and other macros in -Eplain. Macros for constructing explicit hyperlinks are also -provided. - -

- -
-


- -Next: , -Up: Hyperlinks - -
- -

5.1 Introduction to hyperlinks

- -

The original TeX engine has no built-in support for hyperlinks. -Many of the present-day file formats with hyperlinking capabilities -did not even exist at the time TeX was written. However, TeX's -\special primitive can be used to instruct TeX to write -special directives into its .dvi output file. These directives -are not interpreted by TeX in any way; they are intended for programs -which process the .dvi files produced by TeX, be it printing -or converting to other formats, such as -.ps or .pdf. - -

Another approach is to extend the original TeX engine with the -ability to generate one of the hyperlinking formats; TeX's set of -primitives can be extended to include hyperlink commands. This is the -approach used by the pdfTeX engine, which is capable of producing -.pdf files directly from the TeX source, skipping the -.dvi generation and processing step. - -

It turns out that the sets of commands for different formats are mostly -not interchangeable, as each of the file formats has its own quirks and -capabilities. And this is where Eplain hyperlink drivers come -into play. - -

In order for Eplain to generate proper commands, Eplain has to know -two things: which engine or .dvi processor you are using, and -the set of commands it understands. - -

The knowledge about the commands that the various processors -understand is programmed into Eplain's hyperlink drivers. Eplain -provides two drivers, pdftex and dvipdfm, named after -the programs which process the hyperlink commands, -pdfTeX and -dvipdfm. Therefore, Eplain can only produce hyperlink commands for one -of these two programs—except that the extended dvipdfmx program -can be used as well as the original dvipdfm, since they are -compatible. - -

To tell Eplain which .dvi processor or extended TeX engine you -are using, use the command -\enablehyperlinks. - -

For example: - -

     \enablehyperlinks
-
-

instructs Eplain to attempt to automatically detect which -driver to use, as follows: if it detects pdfTeX in PDF mode, it -loads the pdftex driver. If it does not detect pdfTeX in -PDF mode, the dvipdfm driver is loaded. The detection is based -on the -\ifpdf switch (see Checking for PDF output). - -

If necessary, you can explicitly specify the driver name: - -

     \enablehyperlinks[pdftex]
-
-

will start producing hyperlinks under the assumption that -you are using pdfTeX. - -

Eplain does not produce any hyperlinks until you explicitly enable -them with \enablehyperlinks. For one thing, this keeps Eplain -backward-compatible with previous releases without hyperlink support. -For another, you may be using a program other than pdfTeX or -dvipdfm, which does not understand their hyperlink commands. - -

Concepts and Terminology

- -

In general, hyperlinks work as follows. You mark some place in your -document as a hyperlink destination, associating a hyperlink -label with that destination. Next, somewhere within your document, -you create a hyperlink, using a label to identify the destination you -want this link to point to. A hyperlink is a region in the document -(which can take many forms, for example, text or a picture); when a -user clicks on that region, they will be taken to a place in the -document marked by the corresponding destination. The following two -sections (Explicit hyperlinks, and Implicit hyperlinks) -describe the macros you can use to define destinations and create -links pointing to those destinations. - -

In the rest of this chapter, we will often need to refer to links and -destinations jointly, in which case we will use the term -hyperlinks. We will use the terms links and -destinations in cases when we need to refer specifically to -links or destinations. - -

Hyperlink drivers provide several kinds of links and destinations. We -will refer to them as link types and destination types. - -

For example, one of the destination types that the pdftex -driver provides is the `xyz' type; when the user follows a link -pointing to an `xyz' destination, the exact location marked by -that destination is displayed. Another destination type provided by -the pdftex driver is the `fit' type; when the user follows -a link pointing to a `fit' destination, the page containing that -destination is zoomed to fit into the window in which the document is -displayed. - -

Similarly, drivers support various link types. For example, with the -pdftex driver, the usual link type used to refer to -destinations in the current document is called `name'. You can -also create a link pointing to another local document (by using the -`filename' link type) or to a URL (by using the `url' link -type). - -

In addition, each hyperlink driver supports a number of destination and -link options. By setting these options you can customize -hyperlink parameters (e.g., the thickness of the border drawn around a -hyperlink) or pass information to hyperlinks (for example, file name of -a document, for a link pointing to a destination in another document). - -

See Hyperlink drivers, for the description of hyperlink types and -options supported by the drivers. See Setting hyperlink types and options, for the information on how to set hyperlink options. - -

-


- -Next: , -Previous: Introduction to hyperlinks, -Up: Hyperlinks - -
- -

5.2 Explicit hyperlinks

- -

Explicit hyperlinks are created by you, in the source of your -document. The simplest command is \hldest, which marks the -current position in your document as a destination: - -

     \hldest{type}{options}{label}
-
-

Here type is one of the destination types supported by -the hyperlink driver (see Hyperlink drivers), options is a -comma-separated list of option assignments, and label is the -hyperlink label to associate with this destination. This label will -identify the destination when creating links pointing to this -destination. For example, with the pdftex driver, the command - -

     \hldest{xyz}{zoom=2000}{index}
-
-

creates a destination of type `xyz' (“the current -position”), sets the magnification ratio for this destination to be -200%, and associates the label index with the destination. - -

Another command, \hlstart, paired with \hlend, turns all -intervening material into a link: - -

     \hlstart{type}{options}{label} ... \hlend
-
-

Here type, options and label have the same -meaning as for \hldest. Continuing the previous example, - -

     \hlstart{name}{bstyle=U,bwidth=2}{index} Index\hlend
-
-

typesets the word `Index' as a link with underline border of -width PostScript points, pointing to the named destination -index defined in the previous example. (The other options, like -highlight mode and border color, are determined by the defaults, -see Setting default types and options). - -

Both \hldest and \hlstart ignore following spaces. - -

Both \hldest and \hlstart expand the first token of -options once, so you can save a list of options in a macro and -pass it for the options. For example: - -

     \def\linkopts{bstyle=U,bwidth=2}
-     \hlstart{name}{\linkopts}{index}Index\hlend
-
-

is functionally equivalent to the previous example. - -

-


- -Next: , -Previous: Explicit hyperlinks, -Up: Hyperlinks - -
- -

5.3 Implicit hyperlinks

- -

Implicit hyperlinks are hyperlinks created implicitly by various -Eplain macros, such as the macros for citations, cross-references, -indexing, etc. - -

All such macros are divided into link groups and -destination groups (or linkgroups and destgroups for -short) so that parameters can be set individually for each group. For -example, all equation macros which define a destination are assigned -to the `eq' destgroup; equation macros which create a link are -assigned to the `eq' linkgroup. By setting parameters for the `eq' -linkgroup (destgroup), you can uniformly customize all links -(destinations) related to equation references, without interfering -with settings for the other groups. - -

See Setting hyperlink types and options, for information on how to -set parameters for a group. - -

Here is the list of the linkgroups: - -

     cite, ref, xref, eq, idx, foot, footback, url.
-
-

And here are the destgroups: - -

     bib, li, definexref, xrdef, eq, idx, foot, footback.
-
-

The following subsections describe each of the linkgroups and destgroups -and the hyperlink support provided. - -

- - - -

5.3.1 URL hyperlinks: url

- -

The `url' linkgroup covers the -\url command from the LaTeX package -url (see Packages known to work), as well as any new -\url-like commands you define. The type for this linkgroup is -set to `url' by the drivers which support this link type. -`url' links use the parameter to the \url command as the URL -to point to. - -

You may be using the \url command to typeset something other than -a URL, e.g., a path, for which you do not want a link to be created; in -that case, you can disable the `url' linkgroup with the command -\hloff[url] (see Turning hyperlinks on/off for a group). - -

-


- -Next: , -Previous: URL hyperlinks, -Up: Implicit hyperlinks - -
- -

5.3.2 Citation hyperlinks: cite, bib

- -

The `cite' linkgroup includes only the \cite command -(see Citations). \cite turns each of the references in the -list into a link pointing to the respective bibliography entry -produced by the \bibliography command. - -

The `bib' destgroup includes the macros related to the -\bibliography command (see Citations). \bibliography -inputs a .bbl file, which contains a list of bibliography -entries. For each of the entries, a destination is defined. - -

Both commands use the citation label as the hyperlink label. - -

- -

5.3.3 List hyperlinks: li

- -

The `li' destgroup consists of the \li command (see Lists), -which defines a destination if you supply the optional argument -(cross-reference label). This label is also used as the hyperlink -label. - -

-


- - -Next: , -Previous: List hyperlinks, -Up: Implicit hyperlinks - -
- -

5.3.4 Cross-reference hyperlinks: definexref, ref

- -

The `definexref' destgroup is for the \definexref command -(see Defining generic references). \definexref defines a -destination using the cross-reference label (the first argument) as the -hyperlink label. - -

The `ref' linkgroup includes \refn and \xrefn (they are -synonyms), \ref, and \refs (see Using generic references). - -

\refn turns the cross-reference it produces into a link, using -the cross-reference label as the hyperlink label. If an optional -argument is present, it is tied by -\reftie to the reference and become part of the link. - -

\ref works similarly to \refn. It takes an optional -argument, which is treated the same way as the optional argument to -\refn. In addition, \ref can produce a “class word”. -Both the optional argument and the class word become part of the link, -when present. The cross-reference is tied by -\reftie to the preceding word. The optional argument is -separated from the class word by -\refspace. - -

Unlike \ref, \refs does not take an optional argument and -does not make the class word part of the link, which is appropriate for -its intended use. - -

- -

5.3.5 Page reference hyperlinks: xrdef, xref

- -

The `xrdef' destgroup is for \xrdef (see Page references). -\xrdef defines a destination using cross-reference label as the -hyperlink label. - -

The `xref' linkgroup includes the \xref command (see Page references). \xref turns its optional argument (followed by -\refspace), \xrefpageword and the cross-reference (page -number) into a link, using the cross-reference label as the hyperlink -label. - -

- -

5.3.6 Equation reference hyperlinks: eq

- -

All commands that define equation labels are part of the `eq' destgroup. -These are \eqdef, \eqdefn, \eqsubdef and -\eqsubdefn (see Equation references). All these commands use -the equation label as the hyperlink label. However, if the equation -label is empty, they make up a (hopefully) unique hyperlink label for -the destination. This label will be used for the link when you refer to -this empty-labeled equation with one of the equation reference macros. - -

The command \phantomeqlabel is called to generate hyperlink -labels for the empty-labeled equations. By default, it produces the -labels in the format `PHEQnumber', where number comes -from the count register \phantomeqnumber; this count register is -incremented at every empty-labeled equation definition. - -

The commands \eqref and \eqrefn (see Equation references) form the `eq' linkgroup. These commands take an optional -argument, which, when present, is tied with \reftie to the -equation reference and becomes part of the link. The equation label is -used for the hyperlink label; if the label is empty, the link is for the -label generated for the last empty-labeled equation. - -

- -

5.3.7 Index hyperlinks: idx

- -

All indexing commands (\idx, \idxname, \idxmarked, -\idxsubmarked and their silent equivalents, see Indexing commands) form the `idx' destgroup. The `idx' linkgroup consists of -the macros which are used to typeset the index when you say -\readindexfile{index-letter} (see Typesetting an index). - -

To create the links in index entries, Eplain uses MakeIndex's -“encapsulation” feature. When you use an indexing macro to mark an -index term, Eplain writes out a line to the -.idx file of the following general form: - -

     \indexentry{entry|pagemarkup}{pageno}
-
-

where entry is the index entry (converted into the -internal format that MakeIndex understands), cs is the markup -command you specified with the pagemarkup=cs optional -argument to the indexing commands (see Modifying index entries), -and pageno is the page number on which the term appeared. When -processing the .idx file, MakeIndex makes the page number an -argument to the page markup command (“encapsulates” the page -number), so the page number in the -.ind file appears as \cs{pageno}. Eplain -internally replaces the cs command name with its own command, -which, in addition to calling the original \cs -encapsulator, turns the page number into a link. - -

Eplain provides two approaches to linking page numbers in the index to -locations of index terms in the text. - -

- - - -
5.3.7.1 Exact destinations for index terms
- -

In this approach, each command that marks an index term defines a unique -destination and passes its label on to the .idx file as part of -the \indexentry command. The \indexentry line that Eplain -writes to the .idx file becomes - -

     \indexentry{entry|hlidx{label}{cs}}{pageno}
-
-

where \hlidx is the command that is defined by Eplain -to take three arguments: a hyperlink label (label), a name of -page number encapsulator (cs) and a page number (pageno). -In the .ind file that MakeIndex will generate, the page number -will now appear as - -

     \hlidx{label}{cs}{pageno}
-
-

The result of this command is -\cs{pageno}, wrapped up into a link pointing to -label destination. - -

The hyperlink labels for the index terms are generated by the -\hlidxlabel command, by default in the format -`IDXnumber', where number is the value of the count -register -\hlidxlabelnumber. This count register is incremented at each -index term. - -

The advantage of this approach, as compared to the second approach -described below, is that links in the index point to exact locations of -the indexed terms on the page. The disadvantage of this approach is -that MakeIndex will regard all index entries as distinct, because -each one contains a (unique) hyperlink label. This disadvantage can be -partially overcome by the script -idxuniq distributed with Eplain in the util directory. -This script filters out \indexentry lines differing only in the -hyperlink label but identical otherwise. You should process the -.idx with this script before passing it on to MakeIndex. For -example: - -

     prompt$ ./idxuniq file.idx | makeindex > file.ind
-
-

Still, this solution is not ideal, as the page-range formation -ability of MakeIndex will not work, and there will be problems of -apparently identical index entries clashing (e.g., when a range-end -entry appears on the same page as another entry with the same -definition; idxuniq will not filter out the second entry). - -

- -
5.3.7.2 Page destinations for index terms
- -

In the second approach, Eplain does not write out any destination labels -for the index terms. Instead, Eplain writes out a wrapper for page -number encapsulator which can parse the page number and generate a link -pointing to the page on which the term appeared. On top of each -page containing an index term, Eplain defines a destination with label -produced by -\hlidxpagelabel. The \hlidxpagelabel command takes a -single argument (page number number) and by default produces the -label in the format `IDXPGnumber'. - -

With this approach, the \indexentry line which Eplain writes to -the .idx file looks like this: - -

     \indexentry{entry|hlidxpage{cs}}{pageno}
-
-

where \hlidxpage is the command that is defined by Eplain -to take two arguments: a name of page number encapsulator (cs) -and a page number (pageno). In the .ind file that -MakeIndex will generate, the page number will appear as - -

     \hlidxpage{cs}{pageno}
-
-

The advantage of this approach is that all features of MakeIndex are -intact. The drawback is that links in the index do not point to exact -locations of indexed terms on a page, but to the top of a page on -which the term appears. - -

Another disadvantage is that this approach depends on the page range and -page list separators which MakeIndex was configured to output. -\hlidxpage must be able to parse the first page number in a page -range like `1--4'. In addition, page list parsing is needed -because MakeIndex combines two consecutive page numbers in one call to -the page number encapsulator, so \hlidxpage can be passed, e.g., -`1, 2' for the pageno. In this last case, \hlidxpage -splits the two page numbers, applies \cs to each of them, -and makes each of the page numbers a link to the appropriate page. Note -that this will alter typesetting slightly, because now the page list -separator (a comma followed by a space, by default) is not typeset using -the page number encapsulator (\cs). - -

Eplain's defaults for the page list and page number delimiters are the -same as those in MakeIndex, a comma followed by a space (`, ') and -two dashes (`--'), respectively. If you customize MakeIndex to use -different delimiters, you must not forget to let Eplain know about them -with the commands - -

     \setidxpagelistdelimiter{list-delim}
-     \setidxpagerangedelimiter{page-delim}
-
-

(see Page list and page range parsers). - -

- -
5.3.7.3 Choosing destination placement
- -

The approach that Eplain should use for the index terms can be -selected in the -\enablehyperlinks command. The optional argument it accepts is -a comma-separated list of options. The -idxexact option selects the first approach, -idxpage the second, and -idxnone disables hyperlink support for the index terms -altogether, in case you want to stop Eplain from writing its link -wrappers into the .idx file. The default is idxpage. - -

For example: - -

     \enablehyperlinks[idxexact]
-
-

selects the first approach (“exact index links”). - -

- -
5.3.7.4 Index page list and page range parsers
- -

The macros that Eplain uses to parse page lists and page ranges, -\idxparselist and \idxparserange, can sometimes be useful -when defining page number encapsulators. See Page list and page range parsers, for the description of these commands and an example of their -usage. - -

- -
5.3.7.5 Hyperlinks in see and see also entries
- -

There is no automatic support for hyperlinks with “see” and “see -also” index entries, as there is not enough information to trace the -parameters of -\indexsee and -\indexseealso to corresponding index entries. But if desired, -this can be implemented with \hldest and \hlstart -(see Explicit hyperlinks); for example: - -

     \sidx{semantic theory of truth@%
-           \leavevmode\hldest{}{}{idx:theo truth}semantic theory of truth}
-     ...
-     \sidx[seealso]{truth}[definition of]%
-           {\hlstart{}{}{idx:theo truth}semantic theory of truth\hlend}
-
-
-


- -Next: , -Previous: Index hyperlinks, -Up: Implicit hyperlinks - -
- -

5.3.8 Footnote hyperlinks: foot, footback

- -

The `foot' link and destination groups include the -\numberedfootnote and -\footnote macros (see Footnotes). The `footback' groups -include the same macros, but control parameters for links and -destinations created inside the footnote to point back to the footnote -mark within the text body. - -

The macros use hyperlink labels generated by -\hlfootlabel and -\hlfootbacklabel. The default formats for the labels are -`FOOTnumber' and `FOOTBnumber', respectively, -where number is the value of the count register -\hlfootlabelnumber. This register is incremented at every -footnote. - -

-


- -Previous: Footnote hyperlinks, -Up: Implicit hyperlinks - -
- -

5.3.9 Contents hyperlinks

- -

There is currently no special support for hyperlinks in the table of -contents (see Contents), but implementing them with the -\hldest and \hlstart ... \hlend commands -(see Explicit hyperlinks) should be possible. - -

- -

5.4 Hyperlink drivers

- -

This section describes the hyperlink drivers: the types of hyperlinks -they support, and the options they accept. During the first reading, -you may only want to skim through this section. - -

Some of the descriptions below come from Portable Document Format -Reference Manual Version 1.3, March 11, 1999. - -

- - - -

5.4.1 Options supported by all drivers

- -

This subsection describes the destination and link options which are -supported by all hyperlink drivers. - -

Destination options supported by all drivers
- -

-

-
raise
Specifies how much to raise destinations above the baseline. When set -to zero or empty, destinations are placed at the baseline. - -

It is usually convenient to set this option to some variable parameter, -so that the height to which destinations are raised is automatically -adjusted according to the current context. For example, setting it to -\normalbaselineskip (or some fraction of it, like -1.7\normalbaselineskip) makes the setting appropriate for -different point sizes, in case your document uses more than one. - -

The default setting is \normalbaselineskip. Initially, the -destgroups do not define this option, so they fall back on the default, -except for the `eq' destgroup, for which this option is set to -1.7\normalbaselineskip, -to accommodate the usual cases of large operators in displayed math. - -

Example: \hldestopts[eq]{raise=2.5\normalbaselineskip} -

- -
Link options supported by all drivers
- -

-

-
colormodel
color
These two options define the color to be used for rendering the link -text. The colors are used only when a \color command is defined, -e.g., by loading the LaTeX `color' package (see Packages known to work). The \color command is called as -\color[colormodel]{color}, where colormodel -and color are the definitions of the colormodel and -color options, respectively. However, if colormodel is -empty, the optional argument to \color is omitted; and if -color is empty, the \color command is omitted altogether. -The default setting is colormodel=cmyk and -color=0.28,1,1,0.35. - -

When specifying colors with several components delimited by commas -(e.g., RGB and CMYK colors in the LaTeX `color' package), it is not -possible to specify the components directly in the option list of -\hlopts, because comma is the option list delimiter. With the -`color' package, it is possible to specify such colors by defining a -custom color with \definecolor and using the new color name with -an empty colormodel (see examples below). - -

Examples: -

          \hlopts{colormodel=,color=blue}% predefined color
-          \definecolor{mycolor}{rgb}{.3,.8,.95}
-          \hlopts{colormodel=,color=mycolor}% custom color
-          \hlopts{colormodel=gray,color=.4}
-     
-
- - - -

5.4.2 Hyperlink drivers pdftex and dvipdfm

- -

This subsection describes link and destination types and options -supported by the pdftex and dvipdfm drivers. Many of the -hyperlink types and options are common to both drivers, so we describe -them together. - -

- - - -
5.4.2.1 Destination types for pdftex and dvipdfm
- -

-

-
xyz
“Current position”. The option -zoom specifies magnification to use (zero or empty means leave -magnification unchanged, which is the default). This is the default -type. - -

For dvipdfm: the options -left and -top specify position coordinates to use (empty options mean -current position coordinate, which is the default). - -

Example: \hldest{xyz}{zoom=2000}{dest123} - -

fit
Fit the page to the window. - -

Example: \hldest{fit}{}{dest123} - -

fith
Fit the width of the page to the window. - -

For dvipdfm: the -top option specifies vertical position (default is empty, meaning -current position). - -

Example: \hldest{fith}{}{dest123} - -

fitv
Fit the height of the page to the window. - -

For dvipdfm: The option -left specifies horizontal position (default is empty, meaning -current position). - -

Example: \hldest{fitv}{}{dest123} - -

fitb
Fit the page's bounding box to the window. - -

Example: \hldest{fitb}{}{dest123} - -

fitbh
Fit the width of the page's bounding box to the window. - -

For dvipdfm: the option -top specifies vertical position (default is empty, meaning -current position). - -

Example: \hldest{fitbh}{}{dest123} - -

fitbv
Fit the height of the page's bounding box to the window. - -

For dvipdfm: the option -left specifies horizontal position (default is empty, meaning -current position). - -

Example: \hldest{fitbv}{}{dest123} - -

fitr
For pdftex: fit the rectangle specified by the options -width, -height and -depth (as a TeX rule specification) in the window. For -dimensions set to empty, the corresponding value of the parent box is -used (these are the defaults). - -

For dvipdfm: fit the rectangle specified by the options -left, -bottom, -right and -top (in -PostScript points, 72 points per inch) in the window. For -dimensions set to empty, current position coordinate is substituted -(these are the defaults). - -

Example for pdftex: - -

          \hldest{fitr}{width=\hsize,height=.5\vsize,depth=0pt}{dest123}
-     
-

Example for dvipdfm: - -

          \hldest{fitr}{left=72,bottom=72,right=720,top=360}{dest123}
-     
-
raw
The destination specification (in the form of a pdfTeX command or a -dvipdfm \special) is taken from the command sequence -\cs, where cs is the value of the -cmd option. In the definition of \cs, use -\@hllabel to refer to the hyperlink label. This option is -intended to be used with destgroups (see Setting hyperlink types and options), as it does not make sense to use it in a direct call to -\hldest—you can just call the raw command. - -

Example for pdftex: - -

          \makeatletter
-          \def\mydest{\pdfdest name{\@hllabel} xyz}
-          \hldesttype{raw}
-          \hldestopts{cmd=mydest}
-          \resetatcatcode
-     
-

Example for dvipdfm: - -

          \makeatletter
-          \def\mydest{\special{pdf: dest (\@hllabel)
-                                    [@thispage /XYZ @xpos @ypos 0]}}
-          \hldesttype{raw}
-          \hldestopts{cmd=mydest}
-          \resetatcatcode
-     
-
- - - -
5.4.2.2 Destination options for pdftex and dvipdfm
- -

With respect to the destination options, the pdftex and -dvipdfm differ in the way the fit rectangle is specified -(relative coordinates for pdftex, absolute coordinates for -dvipdfm). - -

Common destination options
- -
-
cmd
Name of the macro (without the leading `\') containing a -pdfTeX command or a dvipdfm \special for the raw -destination. - -

For an example of usage, see Destination types for pdftex and dvipdfm, description of the raw destination. - -

zoom
Magnification ratio times 1000 (like TeX's scale factor). -Zero or empty means leave magnification unchanged, which is the -default. - -

Example: \hldest{xyz}{zoom=2000}{dest123} -

- -
pdftex-specific destination options
- -

The dimension options below must be specified as a TeX rule -specification. When set to empty, the corresponding value -of the parent box is used (this is the default for all dimension -options). - -

-
depth
Depth of the fit rectangle for the fitr destination. - -
height
Height of the fit rectangle for the fitr destination. - -
width
Width of the fit rectangle for the fitr destination. - -

Example: - -

          \hldest{fitr}{width=\hsize,height=.5\vsize,depth=0pt}{dest123}
-     
-
- -
dvipdfm-specific destination options
- -

The dimension options below must be specified in -PostScript points (72 points per inch), as a number without the -`bp' unit name. When set to empty, the current position -coordinate is used (this is the default for all dimension options). - -

-
bottom
Bottom position coordinate of a box specification for the various -destination types. - -
left
Left position coordinate of a box specification for the various -destination types. - -
right
Right position coordinate of a box specification for the various -destination types. - -
top
Top position coordinate of a box specification for the various -destination types. - -

Example: - -

          \hldest{fitr}{left=72,bottom=72,right=720,top=360}{dest123}
-     
-
- - - -
5.4.2.3 Link types for pdftex and dvipdfm
- -

Link types are the same for the pdftex and dvipdfm -drivers, except that the pdftex driver provides one additional -link type num (link to a numbered destination). dvipdfm does not -support numbered destinations, therefore it does not have this link -type. Note that all destinations created by Eplain hyperlink macros are -named destinations; to define a numbered destination, you have to use -low-level pdfTeX commands. - -

Common link types
- -
-
name
Go to a “named destination”. The label is the destination name. -All destinations created with \hldest are named destinations. -This is the default type. - -

Example: \hlstart{name}{}{dest123}Link to dest123\hlend - -

page
Go to a page. The label is the page number (counting from 1). -Page fitting is specified by the -pagefit option. - -

Example: - -

          \hlstart{page}{pagefit=/FitH 600}{123}Link to page~123\hlend
-     
-
filename
Go to a named destination in another file. The label is the -destination name. The file name is specified by the -file option. Page fitting is specified by the -pagefit option. The -newwin option specifies whether the destination document is -opened in the same window or in a new window. - -

Example: -

          \hlstart{filename}{file=book.pdf,newwin=1}{dest123}
-            Link to dest123 in file `book.pdf'\hlend
-     
-
filepage
Go to a page in another file. The label is the page number (counting -from 1). The file name is specified by the -file option. Page fitting is specified by the -pagefit option. The -newwin option specifies whether the destination document is -opened in the same window or in a new window. - -

Example: -

          \hlstart{filepage}{file=book.pdf,newwin=,%
-                             pagefit=/FitR 50 100 300 500}{1}
-            Link to page~1 in file `book.pdf'\hlend
-     
-
url
Go to a URL. The label is the URL. - -

Example: \hlstart{url}{}{http://tug.org/eplain/}Eplain home\hlend - -

raw
The link specification (in the form of a pdfTeX command or a dvipdfm -\special primitive) is taken from the command sequence -\cs, where cs is the value of the -cmd option. This option is intended to be used with linkgroups -(see Setting hyperlink types and options), as it does not make sense -to use it in a direct call to -\hlstart—you can just call the raw command. - -

Example for pdftex: - -

          % Redirect all \url links to the first page
-          \def\mycmd{\pdfstartlink goto page 1 {/Fit}}
-          \hltype[url]{raw}
-          \hlopts[url]{cmd=mycmd}
-     
-

Example for dvipdfm: - -

          % Redirect all \url links to the first page
-          \def\mycmd{\special{pdf: beginann <</Type/Annot /Subtype/Link
-                                              /Dest[0 /Fit]>>}}
-          \hltype[url]{raw}
-          \hlopts[url]{cmd=mycmd}
-     
-
- -
pdftex-specific link types
- -
-
num
Go to a “numbered destination”. The label is the destination -number. - -

Example: \hlstart{num}{}{123}Link to 123\hlend -

- - - -
5.4.2.4 Link options for pdftex and dvipdfm
- -

Link options are mostly the same for the pdftex and -dvipdfm drivers. The pdftex driver has additional -options to specify link dimensions. - -

Common link options
- -
-
bcolor
Border color. An array of three numbers in the range 0 to 1, -representing a color in DeviceRGB. - -

Example: \hlstart{name}{bcolor=.1 .5 1}{dest123}Link\hlend - -

bdash
Array of numbers representing on and off stroke lengths for drawing -dashes. - -

Example: \hlstart{name}{bstyle=D,bdash=2 4}{dest123}Link\hlend - -

bstyle
Link border style: - -
-
S
The border is drawn as a solid line. - -
D
The border is drawn with a dashed line (the dash pattern is specified -by the -bdash option). - -
B
The border is drawn in a beveled style. - -
I
The border is drawn in an inset style. - -
U
The border is drawn as a line on the bottom of the link rectangle. -
- -

The default is `S'. - -

Example: \hlstart{name}{bstyle=D,bdash=2 4}{dest123}Link\hlend - -

bwidth
Border width in -PostScript points (72 points per inch). The default is 1. - -

Example: \hlstart{name}{bwidth=2}{dest123}Link\hlend - -

cmd
Name of the macro (without the leading `\') containing a -pdfTeX command or a dvipdfm \special for the raw link. - -

For an example of usage, see Link types for pdftex and dvipdfm, -description of the raw link. - -

file
File name for the filename and filepage link types. - -

For an example of usage, see Link types for pdftex and dvipdfm, -description of the filename and filepage links. - -

hlight
Link border highlight modes: - -
-
I
The rectangle specified by the bounding box of the link is inverted. - -
N
No highlighting is done. - -
O
The border of the link is inverted. - -
P
The region underneath the bounding box of the link is drawn inset into -the page. -
- -

The default is `I'. - -

Example: \hlstart{name}{bstyle=S,hlight=O}{dest123}Link\hlend - -

newwin
For the filename and filepage links, specifies whether the destination document is -opened in the same window or in a new window. The settings are: - -
-
0
Open in the same window. -
non-0
Open in a new window. -
empty
Behavior according to the viewer settings. -
- -

The default is empty. - -

For an example of usage, see Link types for pdftex and dvipdfm, -description of the filename and filepage links. - -

pagefit
For the page and filepage links, specifies how the page -must be fitted to the window. pagefit specification is written -to the PDF file as is, so it must conform to the PDF standard. - -

For an example of usage, see Link types for pdftex and dvipdfm, -description of the page and filepage links. -

- -
pdftex-specific link options
- -

The dimension options below must be specified as a TeX rule -specification. When set to empty, the corresponding value -of the parent box is used (this is the default for all dimension -options). - -

-
depth
Depth of the link. - -
height
Height of the link. - -
width
Width of the link. - -

Example: - -

          \hlstart{name}{width=5in,height=20pc,depth=0pt}{dest123}
-            Link\hlend
-     
-
- - - -

5.4.3 Hyperlink driver nolinks

- -

Select this driver to suppress all hyperlinks in your document. - -

Selecting this driver is quite different from not selecting any driver -at all, or from selecting some driver and then turning hyperlinks off -for the entire document with -\hloff and -\hldestoff (see Turning hyperlinks on/off). - -

The purpose of \hldestoff and \hloff is to mark (parts) of -your document where hyperlinks should never appear. (Imagine you want -to prevent a cross-referencing macro from generating a link at a certain -spot in your document.) - -

If instead you have prepared a document with hyperlinks and just want to -compile a version without them, it is better to select the driver -nolinks. This ensures that spacing and page-breaking are the -same as what you were getting with hyperlinks enabled. - -

The reason for this is that hyperlinks are produced by the -\special primitives or low-level hyperlink commands. Each such -command is placed inside a -whatsit (an internal TeX object), which may introduce -legitimate breakpoints at places where none would exist without the -whatsits. The macros \hldestoff and \hloff disable the -hyperlink macros completely, so that no whatsits are produced. - -

In contrast, the nolinks driver does not completely disable -hyperlink macros. Instead, it defines them to merely write to the log -file (what gets written is unimportant). This also produces -whatsits, thus imitating the whatsits from the hyperlink commands. -(This trick was borrowed from the -LaTeX `color' package.) - -

Another reason for using nolinks is that in horizontal mode -\hldest places destinations inside boxes of zero width, height, -and depth. When you say \hldestoff, \hldest will omit -both destination definitions and these boxes. The missing boxes can -again cause the typesetting to be inconsistent with that with -destinations enabled. Here again, the nolinks driver helps by -defining \hldest to produce the empty boxes. - -

-


- -Next: , -Previous: Hyperlink drivers, -Up: Hyperlinks - -
- -

5.5 Setting hyperlink types and options

- -

You can define default types for links and destinations, which will be -used when you do not specify a type in -\hlstart or -\hldest. Similarly, you can define default values for the -options; the default value for an option is used when you do not set the -option in the argument to \hlstart or \hldest. - -

The parameters for implicit links and destinations can be customized by -setting the “group” types and options. When not set, the defaults are -used. - -

All these settings are local to the current (TeX) group, so if -you want to set an option temporarily, you can do so inside a -\begingroup...\endgroup block; when the group ends, the -previous settings are restored. - -

- - - -

5.5.1 Setting default types and options

- -

The default types for links and destinations can be set with the -following commands: - -

     \hltype{type}
-     \hldesttype{type}
-
-

where type is one of the -link/destination types supported by the selected hyperlink driver -(see Hyperlink drivers). - -

Default values for the options can be set with the following commands: - -

     \hlopts{options}
-     \hldestopts{options}
-
-

where options is a comma-separated list of option -assignments in the format `option=value'. Again, what options -are allowed depends on the selected hyperlink driver. - -

- -

5.5.2 Setting group types

- -

When called with an optional argument, as in - -

     \hltype[groups]{type}
-     \hldesttype[groups]{type}
-
-

where groups is a comma-separated list of groups, -\hltype and \hldesttype set the type for each group from -groups to type. The default type is used for all groups -with an empty type (this is the initial setting for all groups, except -that the type for the `url' linkgroup is set to `url' by the -drivers which support this link type). - -

There are two special “groups” which can be used inside the -groups list. An empty group sets the default type. This allows -to set the default type and group types in one command, for example: - -

     \hltype[eq,]{type}
-
-

sets the link type for the `eq' linkgroup and the -default link type to type. - -

Another special group is a star (`*') group, which signifies all -defined groups. For example, the command - -

     \hldesttype[*,]{type}
-
-

sets the destination type to type for each group, -as well as the default destination type. - -

- -

5.5.3 Setting group options

- -

Option values for each group are stored as a list of option -assignments. This list does not have to contain every supported -option. Values for options missing from this list are taken from the -default option values. - -

To manipulate the list of option values for the groups, you use the -\hlopts and \hldestopts commands with an optional -argument: - -

     \hlopts[groups]{options}
-     \hldestopts[groups]{options}
-     \hlopts![groups]{options}
-     \hldestopts![groups]{options}
-
-

where groups is a comma-separated list of groups and -options is a comma-separated list of option assignments. The -two special “groups”, the empty group and the star (`*') -group, have the same meaning as for \hltype and -\hldesttype. -When used without the exclamation mark, \hlopts and -\hldestopts preserve the current list of options for the groups, -and only update the options listed in options. If you add the -exclamation mark, the current list of options for each group in -groups is discarded and the new list is set to options. - -

The “overriding” nature of the `!' is appropriate when you give -a complete specification of the options for a group, e.g., at the -beginning of your document. On the other hand, when you want to -adjust some option(s) and leave others intact, you should use the -macros without the `!'. - -

For example, with displayed mathematical formulas, you often need to -adjust the `raise' option for the -`eq' destgroup, because the formulas often contain large parentheses and -brackets. But when doing so, you want to leave the other settings -unchanged. To achieve this, call \hldestopts without the -`!', for example: - -

     $$\hldestopts[eq]{raise=2.5\normalbaselineskip}
-     ...
-     $$
-
-

The display commands (`$$') implicitly put the entire -formula inside a (TeX) group (\begingroup...\endgroup), so -you do not need to isolate the setting of the `raise' option—it -will be restored after the closing `$$'. - -

Initially, Eplain sets the option lists for almost all groups to empty, -so that the groups fall back on the default values for all options. The -one exception to this rule is the `eq' destgroup, whose initial option -list contains one setting: - -

     raise=1.7\normalbaselineskip
-
-

This setting usually accommodates the large operators, which often -appear in displayed math. - -

-


- - -Previous: Setting hyperlink types and options, -Up: Hyperlinks - -
- -

5.6 Turning hyperlinks on/off

- -

Links and/or destinations can be turned on or off globally by disabling -the low-level commands, or for each group individually. - -

All these settings are local to the current (TeX) group, so if you -want to enable or disable links/destinations temporarily, you can do so -inside a \begingroup...\endgroup block; when the group ends, the -previous settings are restored. - -

- - - -

5.6.1 Turning low-level commands on/off

- -

The low-level commands \hlstart, \hlend and -\hldest can be turned on/off with the following commands: - -

     \hldeston
-     \hldestoff
-     \hlon
-     \hloff
-
-

See Hyperlink driver nolinks, for the implications of using -these commands to disable hyperlinks for the entire document. - -

- -

5.6.2 Turning hyperlinks on/off for a group

- -

If you want to disable links/destinations produced by certain groups, -you can give a list of the groups as an optional argument to these -commands: - -

     \hldeston[groups]
-     \hldestoff[groups]
-     \hlon[groups]
-     \hloff[groups]
-
-

where groups is the list of linkgroups/destgroups. This -list can contain two special groups. The empty group switches the -low-level commands (see Turning low-level commands on/off), and the -star (`*') group operates on all defined groups. - -

Note that turning off the low-level commands disables all hyperlinks -globally, including groups which have them enabled. Turning off certain -linkgroups/destgroups records the fact that the macros in the group -should not produce links/destinations. To illustrate the distinction, -assume that all links are on; after the following sequence of commands: - -

     \hloff
-     \hloff[eq]
-     \hlon
-
-

all links are on except for the `eq' linkgroup. - - - - - - - - - - - - - - - - - - - - - -

-


- -Next: , -Previous: Hyperlinks, -Up: Top - -
- -

6 Arrow theoretic diagrams

- -

This chapter describes definitions for producing commutative diagrams. - -

Steven Smith wrote this documentation (and the macros). - -

- - - -

6.1 Slanted lines and vectors

- -

The macros \drawline -and \drawvector -provide the capability found in LaTeX's -picture mode to draw slanted lines and vectors of certain directions. -Both of these macros take three arguments: two integer arguments to -specify the direction of the line or vector, and one argument to specify -its length. For example, `\drawvector(-4,1){60pt}' produces the -vector -which lies in the 2d quadrant, has a slope of minus 1/4, and a width of -60 pt. - -

Note that if an \hbox is placed around \drawline or -\drawvector, then the width of the \hbox will be the -positive dimension specified in the third argument, except when a -vertical line or vector is specified, e.g., -\drawline(0,1){1in}, which has zero width. If the specified -direction lies in the 1st or 2d quadrant (e.g., (1,1) or -(-2,3)), then the \hbox will have positive height and zero -depth. Conversely, if the specified direction lies in the 3d or 4th -quadrant (e.g., (-1,-1) or (2,-3)), then the \hbox -will have positive depth and zero height. - -

There are a finite number of directions that can be specified. For -\drawline, the absolute value of each integer defining the -direction must be less than or equal to six, i.e., (7,-1) is -incorrect, but (6,-1) is acceptable. For \drawvector, the -absolute value of each integer must be less than or equal to four. -Furthermore, the two integers cannot have common divisors; therefore, if -a line with slope 2 is desired, say (2,1) instead of -(4,2). Also, specify (1,0) instead of, say, (3,0) -for horizontal lines and likewise for vertical lines. - -

Finally, these macros depend upon the LaTeX font line10. If -your site doesn't have this font, ask your system administrator to get -it. Future enhancements will include macros to draw dotted lines and -dotted vectors of various directions. - -

- -

6.2 Commutative diagrams

- -

-The primitive commands \drawline and \drawvector can be -used to typeset arrow theoretic diagrams. This section describes (1) -macros to facilitate typesetting arrows and morphisms, and (2) macros to -facilitate the construction of commutative diagrams. All macros -described in this section must be used in math mode. - -

- - - -

6.2.1 Arrows and morphisms

- -

-The macros \mapright and \mapleft produce right and left -pointing arrows, respectively. Use superscript (^) to place a -morphism above the arrow, e.g., `\mapright^\alpha'; use subscript -(_) to place a morphism below the arrow, e.g., -`\mapright_{\tilde l}'. Superscripts and subscripts may be used -simulataneously, e.g., `\mapright^\pi_{\rm epimor.}'. - -

Similarly, the macros \mapup and \mapdown produce up and -down pointing arrows, respectively. Use \rt -to place a morphism to the right of the arrow, e.g., `\mapup\rt{\rm -id}'; use \lft -to place a morphism to the left of the arrow, e.g., `\mapup\lft\omega'. -\lft and \rt may be used simultaneously, e.g., -`\mapdown\lft\pi\rt{\rm monomor.}'. - -

Slanted arrows are produced by the macro \arrow, which takes -a direction argument (e.g., `\arrow(3,-4)'). Use \rt and -\lft to place morphisms to the right and left, respectively, of -the arrow. A slanted line (no arrowhead) is produced with the macro -\sline, -whose syntax is identical to that of \arrow. - -

The length of these macros is predefined by the default TeX -dimensions \harrowlength, -for horizontal arrows (or lines), -\varrowlength, -for vertical arrows (or lines), and -\sarrowlength, -for slanted arrows (or lines). To change any of these dimensions, say, -e.g., `\harrowlength=40pt'. As with all other TeX dimensions, -the change may be as global or as local as you like. Furthermore, the -placement of morphisms on the arrows is controlled by the dimensions -\hmorphposn, -\vmorphposn, -and \morphdist. -The first two dimensions control the horizontal and vertical position of -the morphism from its default position; the latter dimension controls -the distance of the morphism from the arrow. If you have more than one -morphism per arrow (i.e., a ^/_ or \lft/\rt -construction), use the parameters -\hmorphposnup, -\hmorphposndn, -\vmorphposnup, -\vmorphposndn, -\hmorphposnrt, -\hmorphposnlft, -\vmorphposnrt, -and \vmorphposnlft. -The default values of all these dimensions are provided in the section -on parameters that follows below. - -

There is a family of macros to produce horizontal lines, arrows, and -adjoint arrows. The following macros produce horizontal maps and have -the same syntax as \mapright: - -

-
\mapright
$X\mapright Y$ - -
\mapleft
$X\mapleft Y$ - -
\hline
$X\hline Y$ - -
\bimapright
$X\bimapright Y$ - -
\bimapleft
$X\bimapleft Y$ - -
\adjmapright
$X\adjmapright Y$ - -
\adjmapleft
$X\adjmapleft Y$ - -
\bihline
$X\bihline Y$ -
- -

There is also a family of macros to produce vertical lines, arrows, and -adjoint arrows. The following macros produce vertical maps and have -the same syntax as \mapdown: - -

-
\mapdown
(a down arrow) - -
\mapup
(an up arrow) - -
\vline
(vertical line) - -
\bimapdown
(two down arrows) - -
\bimapup
(two up arrows) - -
\adjmapdown
(two adjoint arrows; down then up) - -
\adjmapup
(two adjoint arrows; up then down) - -
\bivline
(two vertical lines) -
- -

Finally, there is a family of macros to produce slanted lines, arrows, -and adjoint arrows. The following macros produce slanted maps and have -the same syntax as \arrow: - -

-
\arrow
(a slanted arrow) - -
\sline
(a slanted line) - -
\biarrow
(two straight arrows) - -
\adjarrow
(two adjoint arrows) - -
\bisline
(two straight lines) - -
- -

The width between double arrows is controlled by the parameter -\channelwidth. -The parameters \hchannel and \vchannel, if nonzero, -override \channelwidth by controlling the horizontal and vertical -shifting from the first arrow to the second. - -

There are no adornments on these arrows to distinguish inclusions from -epimorphisms from monomorphisms. Many texts, such as Lang's book -Algebra, use as a tasteful alternative the symbol `inc' (in roman) next -to an arrow to denote inclusion. - -Future enhancements will include a mechanism to draw curved arrows -found in, e.g., the Snake Lemma, by employing a version of the -\path macros of Appendix D of The TeXbook. - - -

- -

6.2.2 Construction of commutative diagrams

- -

There are two approaches to the construction of commutative diagrams -described here. The first approach, and the simplest, treats -commutative diagrams like fancy matrices, as Knuth does in Exercise -18.46 of The TeXbook. This case is covered by the macro -\commdiag, -which is an altered version of the Plain TeX macro \matrix. -An example suffices to demonstrate this macro. The following -commutative diagram (illustrating the covering homotopy property; Bott -and Tu, Differential Forms in Algebraic Topology) -is produced with the code - -

     $$\commdiag{Y&\mapright^f&E\cr \mapdown&\arrow(3,2)\lft{f_t}&\mapdown\cr
-     Y\times I&\mapright^{\bar f_t}&X}$$
-
-

Of course, the parameters may be changed to produce a different effect. -The following commutative diagram (illustrating the universal mapping -property; Warner, Foundations of Differentiable Manifolds and Lie -Groups) -is produced with the code - -

     $$\varrowlength=20pt
-     \commdiag{V\otimes W\cr \mapup\lft\phi&\arrow(3,-1)\rt{\tilde l}\cr
-     V\times W&\mapright^l&U\cr}$$
-
-

A diagram containing isosceles triangles is achieved by placing the apex -of the triangle in the center column, as shown in the example -(illustrating all constant minimal realizations of a linear system; -Brockett, Finite Dimensional Linear Systems) -which is produced with the code - -

     $$\sarrowlength=.42\harrowlength
-     \commdiag{&R^m\cr &\arrow(-1,-1)\lft{\bf B}\quad \arrow(1,-1)\rt{\bf G}\cr
-     R^n&\mapright^{\bf P}&R^n\cr
-     \mapdown\lft{e^{{\bf A}t}}&&\mapdown\rt{e^{{\bf F}t}}\cr
-     R^n&\mapright^{\bf P}&R^n\cr
-     &\arrow(1,-1)\lft{\bf C}\quad \arrow(-1,-1)\rt{\bf H}\cr
-     &R^q\cr}$$
-
-

Other commutative diagram examples appear in the file -commdiags.tex, which is distributed with this package. - -

In these examples the arrow lengths and line slopes were carefully -chosen to blend with each other. In the first example, the default -settings for the arrow lengths are used, but a direction for the arrow -must be chosen. The ratio of the default horizontal and vertical arrow -lengths is approximately the golden mean -the arrow direction closest to this mean is (3,2). In the second -example, a slope of -is desired and the default horizontal arrow length is 60 pt; therefore, -choose a vertical arrow length of 20 pt. You may affect the interline -glue settings of \commdiag by redefining the macro -\commdiagbaselines. -(cf. Exercise 18.46 of The TeXbook and the section on -parameters below.) - -

The width, height, and depth of all morphisms are hidden so that the -morphisms' size do not affect arrow positions. This can cause a large -morphism at the top or bottom of a diagram to impinge upon the text -surrounding the diagram. To overcome this problem, use TeX's -\noalign primitive to insert a \vskip immediately above or -below the offending line, e.g., -`$$\commdiag{\noalign{\vskip6pt}X&\mapright^\int&Y\cr ...}'. - -

The macro \commdiag is too simple to be used for more complicated -diagrams, which may have intersecting or overlapping arrows. A second -approach, borrowed from Francis Borceux's Diagram macros for -LaTeX, treats the commutative diagram like a grid of identically -shaped boxes. To compose the commutative diagram, first draw an equally -spaced grid, e.g., -on a piece of scratch paper. Then draw each element (vertices and -arrows) of the commutative diagram on this grid, centered at each -grid point. Finally, use the macro \gridcommdiag -to implement your design as a TeX alignment. For example, the cubic -diagram -that appears in Francis Borceux's documentation can be implemented on -a 7 by 7 grid, and is achieved with the code - -

     $$\harrowlength=48pt \varrowlength=48pt \sarrowlength=20pt
-     \def\cross#1#2{\setbox0=\hbox{$#1$}%
-       \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}}
-     \gridcommdiag{&&B&&\mapright^b&&D\cr
-     &\arrow(1,1)\lft a&&&&\arrow(1,1)\lft d\cr
-     A&&\cross{\hmorphposn=12pt\mapright^c}{\vmorphposn=-12pt\mapdown\lft f}
-     &&C&&\mapdown\rt h\cr\cr
-     \mapdown\lft e&&F&&\cross{\hmorphposn=-12pt\mapright_j}
-     {\vmorphposn=12pt\mapdown\rt g}&&H\cr
-     &\arrow(1,1)\lft i&&&&\arrow(1,1)\rt l\cr
-     E&&\mapright_k&&G\cr}$$
-
-

The dimensions \hgrid and \vgrid -control the horizontal and vertical spacing of the grid used by -\gridcommdiag. The default setting for both of these dimensions -is 15 pt. Note that in the example of the cube the arrow lengths must -be adjusted so that the arrows overlap into neighboring boxes by the -desired amount. Hence, the \gridcommdiag method, albeit more -powerful, is less automatic than the simpler \commdiag method. -Furthermore, the ad hoc macro \cross is introduced to allow the -effect of overlapping arrows. Finally, note that the positions of four -of the morphisms are adjusted by setting \hmorphposn and -\vmorphposn. - -

One is not restricted to a square grid. For example, the proof of -Zassenhaus's Butterfly Lemma can be illustrated by the diagram (appearing -in Lang's book Algebra) -This diagram may be implemented on a 9 by 12 grid with an aspect ratio -of 1/2, and is set with the code - -

     $$\hgrid=16pt \vgrid=8pt \sarrowlength=32pt
-     \def\cross#1#2{\setbox0=\hbox{$#1$}%
-       \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}}
-     \def\l#1{\llap{$#1$\hskip.5em}}
-     \def\r#1{\rlap{\hskip.5em$#1$}}
-     \gridcommdiag{&&U&&&&V\cr &&\bullet&&&&\bullet\cr
-     &&\sarrowlength=16pt\sline(0,1)&&&&\sarrowlength=16pt\sline(0,1)\cr
-     &&\l{u(U\cap V)}\bullet&&&&\bullet\r{(U\cap V)v}\cr
-     &&&\sline(2,-1)&&\sline(2,1)\cr
-     &&\cross{=}{\sline(0,1)}&&\bullet&&\cross{=}{\sline(0,1)}\cr\cr
-     &&\l{^{\textstyle u(U\cap v)}}\bullet&&\cross{=}{\sline(0,1)}&&
-      \bullet\r{^{\textstyle(u\cap V)v}}\cr
-     &\sline(2,1)&&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)\cr
-     \l{u}\bullet&&&&\bullet&&&&\bullet\r{v}\cr
-     &\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)\cr
-     &&\bullet&&&&\bullet\cr &&u\cap V&&&&U\cap v\cr}$$
-
-

Again, the construction of this diagram requires careful choices for the -arrow lengths and is facilitated by the introduction of the ad hoc -macros \cross, \r, and \l. Note also that -superscripts were used to adjust the position of the vertices -Many diagrams may be typeset with the predefined macros that appear -here; however, ingenuity is often required to handle special cases. - -

- -

6.2.3 Commutative diagram parameters

- -

The following is a list describing the parameters used in the -commutative diagram macros. These dimensions may be changed globally or -locally. - -

-
\harrowlength
(Default: 60 pt) The length of right or left arrows. - -
\varrowlength
(Default: 0.618\harrowlength) The length of up or down -arrows. - -
\sarrowlength
(Default: 60 pt) The horizontal length of slanted arrows. - -
\hmorphposn
(Default: 0 pt) The horizontal position of the morphism with -respect to its default position. There are also the dimensions -\hmorphposnup, -\hmorphposndn, -\hmorphposnrt, -and \hmorphposnlft -for ^/_ or \lft/\rt constructions. - -
\vmorphposn
(Default: 0 pt) The vertical position of the morphism with -respect to its default position. There are also the dimensions -\vmorphposnup, -\vmorphposndn, -\vmorphposnrt, -and \vmorphposnlft -for ^/_ or \lft/\rt constructions. - -
\morphdist
(Default: 4 pt) The distance of morphisms from slanted lines -or arrows. - -
\channelwidth
(Default: 3 pt) The distance between double lines or arrows. - -
\hchannel, \vchannel
(Defaults: 0 pt) Overrides \channelwidth. The -horizontal and vertical shifts between double lines or arrows. - -
\commdiagbaselines
(Default: \baselineskip=15pt -\lineskip=3pt -\lineskiplimit=3pt ) -The parameters used by \commdiag for setting interline glue. - -
\hgrid
(Default: 15 pt) The horizontal spacing of the grid used by -\gridcommdiag. - -
\vgrid
(Default: 15 pt) The vertical spacing of the grid used by -\gridcommdiag. - -
- - - -
-


- -Next: , -Previous: Arrow theoretic diagrams, -Up: Top - -
- -

7 Programming definitions

- -

The definitions in this section are only likely to be useful when you -are writing nontrivial macros, not when writing a document. - -

- - - -

7.1 Category codes

- -

-Plain TeX defines \active (as the number 13) for use in -changing category codes. Although the author of The TeXbook -has “intentionally kept the category codes numeric”, two other -categories are commonly used: letters (category code 11) and others -(12). Therefore, Eplain defines \letter and -\other. - -Sometimes it is cleaner to make a character active without actually -writing a \catcode command. The \makeactive command takes -a character as an argument to make active (and ignores following -spaces). For example, here are two commands which both make \ -active: - -

     \makeactive`\\   \makeactive92
-
-

Sometimes you might want to temporarily change the category code of -the `@' character to \letter, so that you can use or define -macros which are normally inaccessible to the user. For such -situations, Eplain provides the \makeatletter -command. It sets the category code of `@' to \letter (11) and -defines -\resetatcatcode -to restore the category code to whatever it was before the call to -\makeatletter. For example: - -

     \makeatletter
-     \def\@hidden@macro{This macro cannot normally be
-                        called / redefined by the user}
-     \resetatcatcode
-
-

There is also \makeatother -which works similarly but sets the category code of `@' to -\other (12). - -

Usually, when you give a definition to an active character, you have -to do so inside a group where you temporarily make the character active, -and then give it a global definition (cf. the definition of -\obeyspaces in The TeXbook). -This is inconvenient if you are writing a long macro, or if the -character already has a global definition you do not wish to transcend. -Eplain provides \letreturn, which defines the usual end-of-line -character to be the argument. For example: - -

     \def\mymacro{... \letreturn\myreturn ... }
-     \mymacro hello
-     there
-
-

The end-of-line between `hello' and `there' causes -\myreturn to be expanded. - -

The TeXbook describes \uncatcodespecials, -which makes all characters which are normally “special” into “other” -characters, but the definition never made it into plain TeX. -Eplain therefore defines it. - -

Finally, \percentchar -expands into a literal `%' character. This is useful when you -\write TeX output to a file, and want to avoid spurious -spaces. For example, Eplain writes a \percentchar after the -definition of cross-references. The macros \lbracechar -and \rbracechar -expand similarly. - -

-


- -Next: , -Previous: Category codes, -Up: Programming definitions - -
- -

7.2 Allocation macros

- -

-Plain TeX provides macros that allocate registers of each primitive -type in TeX, to prevent different sets of macros from using the same -register for two different things. The macros are all named starting -with `new', -e.g., \newcount allocates a new “count” -(integer) register. Such allocations are usually needed only at the top -level of some macro definition file; therefore, plain TeX makes the -allocation registers \outer, -to help find errors. (The error this helps to find is a missing right -brace in some macro definition.) - -

Sometimes, however, it is useful to allocate a register as part of -some macro. An outer control sequence cannot be used as part of a macro -definition (or in a few other contexts: the parameter text of a -definition, an argument to a definition, the preamble of an alignment, -or in conditional text that is being skipped). Therefore, Eplain -defines “inner” versions of all the allocation macros, named with the -prefix `inner': -\innernewbox, -\innernewcount, -\innernewdimen, -\innernewfam, -\innernewhelp, -\innernewif, -\innernewinsert, -\innernewlanguage, -\innernewread,
-\innernewskip, -\innernewtoks, -\innernewwrite. - -You can also define non-outer versions of other macros in the same way -that Eplain defines the above. The basic macro is called -\innerdef: - -

     \innerdef \innername {outername}
-
-

The first argument (\innername) to \innerdef is the -control sequence that you want to define. Any previous definition of -\innername is replaced. The second argument -(outername) is the characters in the name of the outer -control sequence. (You can't use the actual control sequence name, -since it's outer!) - -

If the outer control sequence is named \cs, and you want to -define innercs as the inner one, you can use -\innerinnerdef, -which is just an abbreviation for a call to \innerdef. For -example, these two calls are equivalent: - -

     \innerdef\innerproclaim{proclaim}
-     \innerinnerdef{proclaim}
-
-
-


- -Next: , -Previous: Allocation macros, -Up: Programming definitions - -
- -

7.3 Iteration

- -

-You can iterate through a comma-separated list of items with -\for. -Here is an example: - -

     \for\name:=karl,kathy\do{%
-        \message{\name}%
-     }%
-
-

This writes `karl' and `kathy' to the terminal. Spaces -before or after the commas in the list, or after the :=, are -not ignored. - -

\for expands the iterated values fully (with \edef), so -this is equivalent to the above: - -

     \def\namelist{karl,kathy}%
-     \for\name:=\namelist\do ...
-
-
-


- -Next: , -Previous: Iteration, -Up: Programming definitions - -
- -

7.4 Macro arguments

- -

It is occasionally useful to redefine a macro that takes arguments to -do nothing. Eplain defines \gobble, -\gobbletwo, -and \gobblethree to swallow one, two, and three arguments, -respectively. - -

For example, if you want to produce a “short” table of -contents—one that includes only chapters, say—the easiest thing to -do is read the entire .toc file (see Contents), and just -ignore the commands that produce section or subsection entries. To be -specific: - -

     \let\tocchapterentry = \shorttocchapter
-     \let\tocsectionentry = \gobbletwo
-     \let\tocsubsectionentry = \gobbletwo
-     \readtocfile
-
-

(Of course, this assumes you only have chapters, sections, and -subsections in your document.) - -

In addition, Eplain defines \eattoken -to swallow the single following token, using \let. Thus, -\gobble followed by `{...}' ignores the entire -brace-enclosed text. \eattoken followed by the same ignores only -the opening left brace. - -

Eplain defines a macro \identity -which takes one argument and expands to that argument. This may be -useful if you want to provide a function for the user to redefine, but -don't need to do anything by default. (For example, the default -definition of \eqconstruct (see Formatting equation references) is \identity.) - -

You may also want to read an optional argument. The established -convention is that optional arguments are put in square brackets, so -that is the syntax Eplain recognizes. Eplain ignores space tokens -before an optional argument, via \futurenonspacelet. - -

You test for an optional argument by using \@getoptionalarg. - -It takes one argument, a control sequence to expand after reading the -argument, if present. If an optional argument is present, the control -sequence \@optionalarg expands to it; otherwise, -\@optionalarg is \empty. You must therefore have the -category code of @ set to 11 (letter). Here is an example: - -

     \catcode`@=\letter
-     \def\cmd{\@getoptionalarg\finishcmd}
-     \def\finishcmd{%
-       \ifx\@optionalarg\empty
-         % No optional argument present.
-       \else
-         % One was present.
-       \fi
-     }
-
-

If an optional argument contains another optional argument, the inner -one will need to be enclosed in braces, so TeX does not mistake the -end of the first for the end of the second. - -

-


- -Next: , -Previous: Macro arguments, -Up: Programming definitions - -
- -

7.5 Converting to characters

- -

Eplain defines \xrlabel -to produce control sequence names for cross-reference labels, et al. -This macro expands to its argument with an `_' appended. (It does -this because the usual use of \xrlabel is to generate a control -sequence name, and we naturally want to avoid conflicts between control -sequence names.) - -

Because \xrlabel is fully expandable, to make a control -sequence name out of the result you need only do -

     \csname \xrlabel{label}\endcsname
-
-

The \csname primitive makes a control sequence name out -of any sequence of character tokens, regardless of category code. -Labels can therefore include any characters except for `\', -`{', `}', and `#', all of which are used in macro -definitions themselves. - -

\sanitize takes a control sequence as an argument and converts -the expansion of the control sequence into a list of character tokens. -This is the behavior you want when writing information like chapter -titles to an output file. For example, here is part of the definition -of \writenumberedtocentry; #2 is the title that the user -has given. - -

     ...
-     \def\temp{#2}%
-     ...
-       \write\tocfile{%
-         ...
-         \sanitize\temp
-         ...
-       }%
-
- - -

7.6 Expansion

- -

This section describes some miscellanous macros for expansion, etc. - -

- -
-


- - -Next: , -Up: Expansion - -
- -

7.6.1 \csn and \ece

- -

\csn{name} simply abbreviates \csname name -\endcsname, thus saving some typing. The extra level of expansion -does take some time, though, so I don't recommend it for an inner loop. - -

\ece{token}{name} abbreviates - -

     \expandafter token \csname name \endcsname
-
-

For example, - -

     \def\fontabbrevdef#1#2{\ece\def{@#1font}{#2}}
-     \fontabbrevdef{normal}{ptmr}
-
-

defines a control sequence \@normalfont to expand to -ptmr. - -

-


- - -Next: , -Previous: \csn and \ece, -Up: Expansion - -
- -

7.6.2 \edefappend

- -

\edefappend is a way of adding on to an existing definition. It -takes two arguments: the first is the control sequence name, the second -the new tokens to append to the definition. The second argument is -fully expanded (in the \edef that redefines the control sequence). - -

For example: - -

     \def\foo{abc}
-     \def\bar{xyz}
-     \edefappend\foo{\bar karl}
-
-

results in \foo being defined as `abcxyzkarl'. - -

-


- -Next: , -Previous: \edefappend, -Up: Expansion - -
- -

7.6.3 Hooks

- -

A hook is simply a name for a group of actions which is executed -in certain places—presumably when it is most useful to allow -customization or modification. TeX already provides many builtin -hooks; for example, the \every ... token lists are all -examples of hooks. - -

Eplain provides several macros for adding actions to hooks. They all -take two arguments: the name of the hook and the new actions. - - - -

hookaction name actions
hookappend name actions

hookprepend name actions
Each of these adds actions to the hook name. (Any -previously-defined actions are retained.) name is not a control -sequence, but rather the characters of the name. - -


hookactiononce name \cs
\hookactiononce adds cs to name, like the macros -above, but first it adds - -
          \global\let \cs \relax
-     
-

to the definition of \cs. (This implies \cs must -be a true expandable macro, not a control sequence \let to a -primitive or some other such thing.) Thus, \cs is expanded the -next time the hook name is run, but it will disappear after that. - -

The \global is useful because \hookactiononce is most -useful when the grouping structure of the TeX code could be anything. -Neither this nor the other hook macros do global assignments to the hook -variable itself, so TeX's usual grouping rules apply. -

- -

The companion macro to defining hook actions is \hookrun, for -running them. This takes a single argument, the name of the hook. If -no actions for the hook are defined, no error ensues. - -

Here is a skeleton of general \begin and \end macros that -run hooks, and a couple of calls to define actions. The use of -\hookprepend for the begin action and \hookappend for the -end action ensures that the actions are executed in proper sequence with -other actions (as long as the other actions use \hookprepend and -\hookappend also). - -

     \def\begin#1{ ... \hookrun{begin} ... }
-     \def\end#1{ ... \hookrun{end} ... }
-     \hookprepend{begin}\start_underline
-     \hookappend{end}\finish_underline
-
-
-


- -Next: , -Previous: Hooks, -Up: Expansion - -
- -

7.6.4 Properties

- -

A property is a name/value pair associated with another symbol, -traditionally called an atom. Both atom and property names are -control sequence names. - -

Eplain provides two macros for dealing with property lists: -\setproperty and \getproperty. - - - -

\setproperty atom propname value
\setproperty defines the property property on the atom -atom to be value. atom and propname can be -anything acceptable to \csname. value can be anything. - -


\getproperty atom propname
\getproperty expands to the value stored for propname on -atom. If propname is undefined, it expands to nothing -(i.e., \empty). - -
- -

The idea of properties originated in Lisp (I believe). There, the -implementation truly does associate properties with atoms. In TeX, -where we have no builtin support for properties, the association is only -conceptual. - -

The following example typesets `xyz'. - -

     \setproperty{a}{pr}{xyz}
-     \getproperty{a}{pr}
-
-
-


- - -Next: , -Previous: Properties, -Up: Expansion - -
- -

7.6.5 \expandonce

- -

\expandonce is defined as \expandafter\noexpand. Thus, -\expandonce token expands token once, instead of to -TeX primitives. This is most useful in an \edef. - -

For example, the following defines \temp to be \foo, not -`abc'. - -

     \def\foo{abc}
-     \def\bar{\foo}
-     \edef\temp{\expandonce\bar}
-
-
-


- - -Next: , -Previous: \expandonce, -Up: Expansion - -
- -

7.6.6 \ifundefined

- -

\ifundefined{cs} t \else f \fi expands the -t text if the control sequence \cs is undefined or -has been \let to \relax, and the f text otherwise. - -

Since \ifundefined is not a primitive conditional, it cannot be -used in places where TeX might skip tokens “at high speed”, e.g., -within another conditional—TeX can't match up the \if's and -\fi's. - -

This macro was taken directly from The TeXbook, page 308. - -

-


- - -Previous: \ifundefined, -Up: Expansion - -
- -

7.6.7 \futurenonspacelet

- -

The \futurelet primitive allows you to look at the next token -from the input. Sometimes, though, you want to look ahead ignoring any -spaces. This is what \futurenonspacelet does. It is otherwise -the same as \futurelet: you give it two control sequences as -arguments, and it assigns the next nonspace token to the first, and then -expands the second. For example: - -

     \futurenonspacelet\temp\finishup
-     \def\finishup{\ifx\temp ...}
-
-
-


- -Next: , -Previous: Expansion, -Up: Programming definitions - -
- -

7.7 Obeying spaces

- -

-\obeywhitespace makes both end-of-lines and space characters in -the input be respected in the output. Unlike plain TeX's -\obeyspaces, even spaces at the beginnings of lines turn into -blank space. - -

By default, the size of the space that is produced by a space -character is the natural space of the current font, i.e., -what \ produces. - -

Ordinarily, a blank line in the input produces as much blank vertical -space as a line of text would occupy. You can adjust this by assigning -to the parameter \blanklineskipamount: -if you set this negative, the space produced by a blank line will be -smaller; if positive, larger. - -

Tabs are not affected by this routine. In particular, if tabs occur -at the beginning of a line, they will disappear. (If you are trying to -make TeX do the “right thing” with tabs, don't. Use a utility -program like expand instead.) - - -

- -

7.8 Writing out numbers

- -

\numbername -produces the written-out form of its argument, i.e., `zero' through -`ten' for the numbers 0–10, and numerals for all others. - -

-


- - -Next: , -Previous: Writing out numbers, -Up: Programming definitions - -
- -

7.9 Mode-specific penalties

- -

TeX's built-in \penalty command simply appends to the -current list, no matter what kind of list it is. You might intend a -particular penalty to always be a “vertical” penalty, however, i.e., -appended to a vertical list. Therefore, Eplain provides -\vpenalty -and \hpenalty -which first leave the other mode and then do \penalty. - -

More precisely, \vpenalty inserts \par if the current -mode is horizontal, and \hpenalty inserts \leavevmode if -the current mode is vertical. (Thus, \vpenalty cannot be used in -math mode.) - -

- -

7.10 Auxiliary files

- -

It is common to write some information out to a file to be used on a -subsequent run. But when it is time to read the file again, you only -want to do so if the file actually exists. \testfileexistence -is given an argument which is appended to \jobname, -and sets the conditional \iffileexists -appropriately. For example: - -

     \testfileexistence{toc}%
-     \iffileexists
-        \input \jobname.toc
-     \fi
-
-

\testfileexistence takes an optional parameter; when -given, it will override \jobname for the root part of the file -name. For example, if you want to test for the file -answers.aux, you can do this with the following: - -

     \testfileexistence[answers]{aux}%
-     \iffileexists
-        \input answers.aux
-     \fi
-
- - -

7.11 User-defined environments

- -

Plain TeX does not provide “named” block structures, only the anonymous -\begingroup and \endgroup pair. The disadvantage of this -is that when there are several such groups and one is mismatched, it can -be difficult to find the error. Eplain provides a named block structure -so that if you forget an \environment or an -\endenvironment, you will (probably) get an error message about -it. - -

For example: - -

     \def\itpar{
-       \environment{@italicpar}
-       \it\par
-     }
-     \def\enditpar{
-       \par
-       \endenvironment{@italicpar}%
-     }
-
-

which could then be used to set italicized paragraphs: -

     \itpar
-     If I reprehend anything in this world, it is the use of my oracular
-     tongue, and a nice derangement of epitaphs!
-     \enditpar
-
-

The above sort of environment allows nesting. But environments -shouldn't always be allowed to nest. Put the control sequence -\checkenv at the beginning of a macro that is going to define an -environment that should not be nested. - -

- -

7.12 Page list and page range parsers

- -

The macros which Eplain uses to parse the page lists and ranges in the -index, \idxparselist and \idxparserange (see Page destinations for index terms), are sometimes useful when defining page -number encapsulators. They take one argument, text to parse. When a -page list (range) is not present, they set \idxpagei to be -\empty; when a list (range) is detected, they set -\idxpagei and \idxpageii to the first and the second page -numbers, respectively. - -

Eplain's defaults for the page list and page range delimiters are the -same as those in MakeIndex, a comma followed by a space (`, ') and -two dashes (`--'), respectively. If you customize MakeIndex to use -different delimiters, you must not forget to let Eplain know about them -with the commands - -

     \setidxpagelistdelimiter{list-delim}
-     \setidxpagerangedelimiter{page-delim}
-
-

These commands save the list-delim and -page-delim delimiters in -\idxpagelistdelimiter and \idxpagerangedelimiter, -respectively. - -

For example, you may want to define a page number markup command which -italicizes and properly underlines page ranges by underlining only the -page numbers and not the delimiter: - -

-

     \def\ituline#1{%
-       {\it
-       \idxparserange{#1}%
-       \ifx\idxpagei\empty
-         % The argument is a single page number.
-         \underbar{#1}%
-       \else
-         % The argument is a page range.
-         \underbar{\idxpagei}\idxpagerangedelimiter\underbar{\idxpageii}%
-       \fi}%
-     }
-
-

Note that the \ituline macro is not aware of page -lists. This is not needed if you use hyperlinks in the index, because -\hlidx and \hlidxpage will break up the page lists before -calling the user's page encapsulator (see Page destinations for index terms), so \ituline will never see the lists. If, however, you -need to design a macro which also takes care of the lists, you can -extend \ituline with an additional call to \idxparselist. - - -

-


- -Next: , -Previous: Programming definitions, -Up: Top - -
- -

Macro index

- - - -
-


- -Previous: Macro index, -Up: Top - -
- -

Concept index

- - - - -
-

Table of Contents

- -
- - - diff --git a/Master/texmf-dist/doc/eplain/base/eplain.pdf b/Master/texmf-dist/doc/eplain/base/eplain.pdf deleted file mode 100644 index 099777a3115..00000000000 Binary files a/Master/texmf-dist/doc/eplain/base/eplain.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/eplain/base/eplain.texi b/Master/texmf-dist/doc/eplain/base/eplain.texi deleted file mode 100644 index 4b54e8160ea..00000000000 --- a/Master/texmf-dist/doc/eplain/base/eplain.texi +++ /dev/null @@ -1,228 +0,0 @@ -\input texinfo -@setfilename eplain.info -@settitle Expanded Plain @TeX{} - -@set UPDATED September 2005 -@set VERSION 3.0 - -@copying -This manual documents the Eplain macros, version @value{VERSION}, -@value{UPDATED}. Eplain provides functionality for plain @TeX{} that -is intended to be useful regardless of how your document is actually -formatted. - -Most of this manual is in the public domain, like most of the Eplain -code. It was mostly written by Karl Berry, starting in 1989. Steven -Smith wrote the documentation for the commutative diagram macros; this -chapter is under the GNU General Public License. Oleg Katsitadze and -Adam Lewenberg have made additions and corrections. -@end copying - -@dircategory Texinfo documentation system -@direntry -* Eplain: (eplain). Expanding on plain Tex. -@end direntry - -@titlepage -@title Expanded Plain @TeX{} -@subtitle @value{UPDATED} -@subtitle @value{VERSION} -@author Karl Berry -@author Steven Smith -@page -@vskip 0pt plus 1filll -@insertcopying -@end titlepage - -@headings double - -@c We use the program index for file extensions. (We want them to come out -@c in typewriter, but saying `@cindex @t{.aux} file', say, doesn't work.) -@synindex pg fn - - -@ifnottex -@node Top -@top Eplain - -@insertcopying -@end ifnottex - -@menu -* Introduction:: Eplain's purpose and philosophy. -* Installation:: Installing Eplain. -* Invoking Eplain:: Using Eplain from a TeX file. -* User definitions:: Macros to be used in a document. -* Hyperlinks:: Producing documents with hyperlinks. -* Arrow theoretic diagrams:: Macros for commutative diagrams. -* Programming definitions:: Macros to be used in writing other macros. -* Macro index:: Entries for TeX and Eplain control sequences. -* Concept index:: General index. - - --- The Detailed Node Listing --- - -User definitions - -* Diagnostics:: Tracing information. -* Rules:: Changing the default rule dimensions. -* Citations:: Using BibTeX and Eplain to make bibliographies. -* Displays:: Changing the formatting of math displays. -* Time of day:: Producing the time of day. -* Lists:: Producing numbered and unordered lists. -* Verbatim listing:: Producing text just as it appears. -* Contents:: Making a table of contents. -* Cross-references:: Symbolically referring to pages or equations. -* Page references:: Symbolic references to page numbers. -* Equation references:: Symbolic references to equation numbers. -* Indexing:: Creating and typesetting indexes. -* Justification:: Left- or right-justification, or centering. -* Tables:: Producing ordered tables. -* Margins:: Changing the margins directly. -* Multiple columns:: Getting output in two columns. -* Footnotes:: Autonumbered footnotes; changing formatting. -* Fractions:: A better way to produce fractions in text. -* Paths:: Allowing line breaks in pathnames. -* Logos:: Various logos. -* Boxes:: Producing filled or open rectangles. -* Checking for PDF output:: Checking for pdfTeX in PDF mode. - -Citations - -* Formatting citations:: Changing the way citations are printed. -* Formatting bibliographies:: Changing the way bibliographies are printed. - -Displays - -* Formatting displays:: General formatting of displays. - -Lists - -* Formatting lists:: Changing how the lists look. - -Cross-references - -* Defining generic references:: -* Using generic references:: - -Equation references - -* Formatting equation references:: -* Subequation references:: - -Indexing - -* Indexing terms:: Specifying what to index. -* Typesetting an index:: Printing the sorted output. -* Customizing indexing:: Creating commands and specifying extra actions. - -Indexing terms - -* Indexing commands:: Making index entries. -* Modifying index entries:: Ranges, see/see also, page number typesetting. -* Proofing index terms:: Noting index entries in the margins. - -Hyperlinks - -* Introduction to hyperlinks:: -* Explicit hyperlinks:: -* Implicit hyperlinks:: -* Hyperlink drivers:: -* Setting hyperlink types and options:: -* Turning hyperlinks on/off:: - -Implicit hyperlinks - -* URL hyperlinks:: url -* Citation hyperlinks:: cite, bib -* List hyperlinks:: li -* Cross-reference hyperlinks:: definexref, ref -* Page reference hyperlinks:: xrdef, xref -* Equation reference hyperlinks:: eq -* Index hyperlinks:: idx -* Footnote hyperlinks:: foot, footback -* Contents hyperlinks:: - -Index hyperlinks - -* Exact destinations for index terms:: -* Page destinations for index terms:: -* Choosing destination placement:: -* Index page list and page range parsers:: -* Hyperlinks in see and see also entries:: - -Hyperlink drivers - -* Options supported by all drivers:: -* Hyperlink drivers pdftex and dvipdfm:: -* Hyperlink driver nolinks:: - -Hyperlink drivers pdftex and dvipdfm:: - -* Destination types for pdftex and dvipdfm:: -* Destination options for pdftex and dvipdfm:: -* Link types for pdftex and dvipdfm:: -* Link options for pdftex and dvipdfm:: - -Setting hyperlink types and options - -* Setting default types and options:: -* Setting group types:: -* Setting group options:: - -Turning hyperlinks on/off - -* Turning low-level commands on/off:: -* Turning hyperlinks on/off for a group:: - -Arrow theoretic diagrams - -* Slanted lines and vectors:: -* Commutative diagrams:: - -Commutative diagrams - -* Arrows and morphisms:: -* Construction of commutative diagrams:: -* Commutative diagram parameters:: - -Programming definitions - -* Category codes:: Changing category codes. -* Allocation macros:: Non-outer versions of \newcount et al. -* Iteration:: Doing `for' loops in TeX. -* Macro arguments:: Reading and ignoring them. -* Converting to characters:: Normalizing control sequences and spaces. -* Expansion:: Controlling expansion. -* Obeying spaces:: Making whitespace count anywhere. -* Writing out numbers:: Making `1' into `one'. -* Mode-specific penalties:: -* Auxiliary files:: Testing for their existence. -* User-defined environments:: User-defined environments. -* Page list and page range parsers:: - -Expansion - -* \csn and \ece:: -* \edefappend:: -* Hooks:: Manipulating and executing named actions. -* Properties:: Associating information with a csname. -* \expandonce:: -* \ifundefined:: -* \futurenonspacelet:: - -@end menu - -@include intro.texi -@include install.texi -@include invoke.texi -@include userdef.texi -@include hlink.texi -@include arrow.texi -@include progdef.texi -@include csindex.texi -@include index.texi - - -@contents - -@bye diff --git a/Master/texmf-dist/doc/eplain/base/hlink.texi b/Master/texmf-dist/doc/eplain/base/hlink.texi deleted file mode 100644 index 083bfa99fac..00000000000 --- a/Master/texmf-dist/doc/eplain/base/hlink.texi +++ /dev/null @@ -1,1860 +0,0 @@ -@c This is part of the Eplain manual. Public domain. - -@node Hyperlinks -@chapter Hyperlinks - -@cindex links, hypertext -@cindex hypertext links -This chapter describes the support which Eplain provides for hypertext -links (@dfn{hyperlinks} for short). Hyperlinks can be created -implicitly by the cross-reference, indexing and other macros in -Eplain. Macros for constructing explicit hyperlinks are also -provided. - -@menu -* Introduction to hyperlinks:: -* Explicit hyperlinks:: -* Implicit hyperlinks:: -* Hyperlink drivers:: -* Setting hyperlink types and options:: -* Turning hyperlinks on/off:: -@end menu - - -@node Introduction to hyperlinks -@section Introduction to hyperlinks - -@cindex hyperlink drivers -@cindex drivers, hyperlink -The original @TeX{} engine has no built-in support for hyperlinks. -Many of the present-day file formats with hyperlinking capabilities -did not even exist at the time @TeX{} was written. However, @TeX{}'s -@findex special -@code{\special} primitive can be used to instruct @TeX{} to write -special directives into its @file{.dvi} output file. These directives -are not interpreted by @TeX{} in any way; they are intended for programs -which process the @file{.dvi} files produced by @TeX{}, be it printing -or converting to other formats, such as -@pindex .ps @r{files} -@pindex .pdf @r{files} -@file{.ps} or @file{.pdf}. - -Another approach is to extend the original @TeX{} engine with the -ability to generate one of the hyperlinking formats; @TeX{}'s set of -primitives can be extended to include hyperlink commands. This is the -approach used by the pdf@TeX{} engine, which is capable of producing -@file{.pdf} files directly from the @TeX{} source, skipping the -@file{.dvi} generation and processing step. - -It turns out that the sets of commands for different formats are mostly -not interchangeable, as each of the file formats has its own quirks and -capabilities. And this is where Eplain @dfn{hyperlink drivers} come -into play. - -In order for Eplain to generate proper commands, Eplain has to know -two things: which engine or @file{.dvi} processor you are using, and -the set of commands it understands. - -The knowledge about the commands that the various processors -understand is programmed into Eplain's hyperlink drivers. Eplain -provides two drivers, @code{pdftex} and @code{dvipdfm}, named after -the programs which process the hyperlink commands, -@pindex pdftex -pdf@TeX{} and -@pindex dvipdfm -dvipdfm. Therefore, Eplain can only produce hyperlink commands for one -of these two programs---except that the extended @code{dvipdfmx} program -can be used as well as the original @code{dvipdfm}, since they are -compatible. - -To tell Eplain which @file{.dvi} processor or extended @TeX{} engine you -are using, use the command -@findex enablehyperlinks -@code{\enablehyperlinks}. - -For example: - -@example -\enablehyperlinks -@end example - -@noindent instructs Eplain to attempt to automatically detect which -driver to use, as follows: if it detects pdf@TeX{} in PDF mode, it -loads the @code{pdftex} driver. If it does not detect pdf@TeX{} in -PDF mode, the @code{dvipdfm} driver is loaded. The detection is based -on the -@findex ifpdf -@code{\ifpdf} switch (@pxref{Checking for PDF output}). - -If necessary, you can explicitly specify the driver name: - -@example -\enablehyperlinks[pdftex] -@end example - -@noindent will start producing hyperlinks under the assumption that -you are using pdf@TeX{}. - -Eplain does not produce any hyperlinks until you explicitly enable -them with @code{\enablehyperlinks}. For one thing, this keeps Eplain -backward-compatible with previous releases without hyperlink support. -For another, you may be using a program other than pdf@TeX{} or -@code{dvipdfm}, which does not understand their hyperlink commands. - -@subheading Concepts and Terminology - -In general, hyperlinks work as follows. You mark some place in your -document as a hyperlink destination, associating a @dfn{hyperlink -label} with that destination. Next, somewhere within your document, -you create a hyperlink, using a label to identify the destination you -want this link to point to. A hyperlink is a region in the document -(which can take many forms, for example, text or a picture); when a -user clicks on that region, they will be taken to a place in the -document marked by the corresponding destination. The following two -sections (@ref{Explicit hyperlinks}, and @ref{Implicit hyperlinks}) -describe the macros you can use to define destinations and create -links pointing to those destinations. - -In the rest of this chapter, we will often need to refer to links and -destinations jointly, in which case we will use the term -@dfn{hyperlinks}. We will use the terms @dfn{links} and -@dfn{destinations} in cases when we need to refer specifically to -links or destinations. - -@cindex link type -@cindex destination type -@cindex type, link and destination -Hyperlink drivers provide several kinds of links and destinations. We -will refer to them as @dfn{link types} and @dfn{destination types}. - -For example, one of the destination types that the @code{pdftex} -driver provides is the @samp{xyz} type; when the user follows a link -pointing to an @samp{xyz} destination, the exact location marked by -that destination is displayed. Another destination type provided by -the @code{pdftex} driver is the @samp{fit} type; when the user follows -a link pointing to a @samp{fit} destination, the page containing that -destination is zoomed to fit into the window in which the document is -displayed. - -Similarly, drivers support various link types. For example, with the -@code{pdftex} driver, the usual link type used to refer to -destinations in the current document is called @samp{name}. You can -also create a link pointing to another local document (by using the -@samp{filename} link type) or to a URL (by using the @samp{url} link -type). - -@cindex link options -@cindex destination options -@cindex options, link and destination -In addition, each hyperlink driver supports a number of destination and -link @dfn{options}. By setting these options you can customize -hyperlink parameters (e.g., the thickness of the border drawn around a -hyperlink) or pass information to hyperlinks (for example, file name of -a document, for a link pointing to a destination in another document). - -@xref{Hyperlink drivers}, for the description of hyperlink types and -options supported by the drivers. @xref{Setting hyperlink types and -options}, for the information on how to set hyperlink options. - - -@node Explicit hyperlinks -@section Explicit hyperlinks - -@cindex explicit hyperlinks -@cindex hyperlinks, explicit -@findex hldest -Explicit hyperlinks are created by you, in the source of your -document. The simplest command is @code{\hldest}, which marks the -current position in your document as a destination: - -@example -\hldest@{@var{type}@}@{@var{options}@}@{@var{label}@} -@end example - -@noindent Here @var{type} is one of the destination types supported by -the hyperlink driver (@pxref{Hyperlink drivers}), @var{options} is a -comma-separated list of option assignments, and @var{label} is the -hyperlink label to associate with this destination. This label will -identify the destination when creating links pointing to this -destination. For example, with the @code{pdftex} driver, the command - -@example -\hldest@{xyz@}@{zoom=2000@}@{index@} -@end example - -@noindent creates a destination of type @samp{xyz} (``the current -position''), sets the magnification ratio for this destination to be -200%, and associates the label @code{index} with the destination. - -@findex hlstart -@findex hlend -Another command, @code{\hlstart}, paired with @code{\hlend}, turns all -intervening material into a link: - -@example -\hlstart@{@var{type}@}@{@var{options}@}@{@var{label}@} @dots{} \hlend -@end example - -@noindent Here @var{type}, @var{options} and @var{label} have the same -meaning as for @code{\hldest}. Continuing the previous example, - -@example -\hlstart@{name@}@{bstyle=U,bwidth=2@}@{index@} Index\hlend -@end example - -@noindent typesets the word `Index' as a link with underline border of -width@tie{}2@tie{}PostScript points, pointing to the named destination -@code{index} defined in the previous example. (The other options, like -highlight mode and border color, are determined by the defaults, -@pxref{Setting default types and options}). - -Both @code{\hldest} and @code{\hlstart} ignore following spaces. - -Both @code{\hldest} and @code{\hlstart} expand the first token of -@var{options} once, so you can save a list of options in a macro and -pass it for the @var{options}. For example: - -@example -\def\linkopts@{bstyle=U,bwidth=2@} -\hlstart@{name@}@{\linkopts@}@{index@}Index\hlend -@end example - -@noindent is functionally equivalent to the previous example. - - -@node Implicit hyperlinks -@section Implicit hyperlinks - -@cindex implicit hyperlinks -@cindex hyperlinks, implicit -@dfn{Implicit hyperlinks} are hyperlinks created implicitly by various -Eplain macros, such as the macros for citations, cross-references, -indexing, etc. - -@cindex link group -@cindex linkgroup -@cindex group, link -@cindex destination group -@cindex destgroup -@cindex group, destination -All such macros are divided into @dfn{link groups} and -@dfn{destination groups} (or @dfn{linkgroups} and @dfn{destgroups} for -short) so that parameters can be set individually for each group. For -example, all equation macros which define a destination are assigned -to the `eq' destgroup; equation macros which create a link are -assigned to the `eq' linkgroup. By setting parameters for the `eq' -linkgroup (destgroup), you can uniformly customize all links -(destinations) related to equation references, without interfering -with settings for the other groups. - -@xref{Setting hyperlink types and options}, for information on how to -set parameters for a group. - -Here is the list of the linkgroups: - -@display -cite, ref, xref, eq, idx, foot, footback, url. -@end display - -And here are the destgroups: - -@display -bib, li, definexref, xrdef, eq, idx, foot, footback. -@end display - -The following subsections describe each of the linkgroups and destgroups -and the hyperlink support provided. - -@menu -* URL hyperlinks:: url -* Citation hyperlinks:: cite, bib -* List hyperlinks:: li -* Cross-reference hyperlinks:: definexref, ref -* Page reference hyperlinks:: xrdef, xref -* Equation reference hyperlinks:: eq -* Index hyperlinks:: idx -* Footnote hyperlinks:: foot, footback -* Contents hyperlinks:: -@end menu - - -@node URL hyperlinks -@subsection URL hyperlinks: url - -@cindex URL hyperlink -@cindex hyperlinks, URL -@cindex group `url' -@cindex linkgroup `url' -The `url' linkgroup covers the -@findex url @r{(hyperlinks)} -@code{\url} command from the @LaTeX{} package -@pindex url.sty -@file{url} (@pxref{Packages known to work}), as well as any new -@code{\url}-like commands you define. The type for this linkgroup is -set to @samp{url} by the drivers which support this link type. -@samp{url} links use the parameter to the @code{\url} command as the URL -to point to. - -You may be using the @code{\url} command to typeset something other than -a URL, e.g., a path, for which you do not want a link to be created; in -that case, you can disable the `url' linkgroup with the command -@code{\hloff[url]} (@pxref{Turning hyperlinks on/off for a group}). - - -@node Citation hyperlinks -@subsection Citation hyperlinks: cite, bib - -@cindex citations, hyperlinks -@cindex hyperlinks, citations -@cindex group `cite' -@cindex linkgroup `cite' -@findex cite @r{(hyperlinks)} -The `cite' linkgroup includes only the @code{\cite} command -(@pxref{Citations}). @code{\cite} turns each of the references in the -list into a link pointing to the respective bibliography entry -produced by the @code{\bibliography} command. - -@cindex bibliography, hyperlinks -@cindex hyperlinks, bibliography -@cindex group `bib' -@cindex destgroup `bib' -@findex bibliography @r{(hyperlinks)} -The `bib' destgroup includes the macros related to the -@code{\bibliography} command (@pxref{Citations}). @code{\bibliography} -inputs a @file{.bbl} file, which contains a list of bibliography -entries. For each of the entries, a destination is defined. - -Both commands use the citation label as the hyperlink label. - - -@node List hyperlinks -@subsection List hyperlinks: li - -@cindex lists, hyperlinks -@cindex hyperlinks, lists -@findex li @r{(hyperlinks)} -@cindex group `li' -@cindex destgroup `li' -The `li' destgroup consists of the @code{\li} command (@pxref{Lists}), -which defines a destination if you supply the optional argument -(cross-reference label). This label is also used as the hyperlink -label. - - -@node Cross-reference hyperlinks -@subsection Cross-reference hyperlinks: definexref, ref - -@findex definexref @r{(hyperlinks)} -@cindex cross-references, hyperlinks -@cindex hyperlinks, cross-references -@cindex group `definexref' -@cindex destgroup `definexref' -The `definexref' destgroup is for the @code{\definexref} command -(@pxref{Defining generic references}). @code{\definexref} defines a -destination using the cross-reference label (the first argument) as the -hyperlink label. - -@cindex group `ref' -@cindex linkgroup `ref' -The `ref' linkgroup includes @code{\refn} and @code{\xrefn} (they are -synonyms), @code{\ref}, and @code{\refs} (@pxref{Using generic -references}). - -@findex refn @r{(hyperlinks)} -@findex xrefn @r{(hyperlinks)} -@code{\refn} turns the cross-reference it produces into a link, using -the cross-reference label as the hyperlink label. If an optional -argument is present, it is tied by -@findex reftie -@code{\reftie} to the reference and become part of the link. - -@findex ref @r{(hyperlinks)} -@code{\ref} works similarly to @code{\refn}. It takes an optional -argument, which is treated the same way as the optional argument to -@code{\refn}. In addition, @code{\ref} can produce a ``class word''. -Both the optional argument and the class word become part of the link, -when present. The cross-reference is tied by -@findex reftie -@code{\reftie} to the preceding word. The optional argument is -separated from the class word by -@findex refspace -@code{\refspace}. - -@findex refs @r{(hyperlinks)} -Unlike @code{\ref}, @code{\refs} does not take an optional argument and -does not make the class word part of the link, which is appropriate for -its intended use. - - -@node Page reference hyperlinks -@subsection Page reference hyperlinks: xrdef, xref - -@findex xrdef @r{(hyperlinks)} -@cindex page reference hyperlink -@cindex hyperlinks, page references -@cindex group `xrdef' -@cindex destgroup `xrdef' -The `xrdef' destgroup is for @code{\xrdef} (@pxref{Page references}). -@code{\xrdef} defines a destination using cross-reference label as the -hyperlink label. - -@findex xref @r{(hyperlinks)} -@findex refspace -@findex xrefpageword -@cindex group `xref' -@cindex linkgroup `xref' -The `xref' linkgroup includes the @code{\xref} command (@pxref{Page -references}). @code{\xref} turns its optional argument (followed by -@code{\refspace}), @code{\xrefpageword} and the cross-reference (page -number) into a link, using the cross-reference label as the hyperlink -label. - - -@node Equation reference hyperlinks -@subsection Equation reference hyperlinks: eq - -@findex eqdef @r{(hyperlinks)} -@findex eqdefn @r{(hyperlinks)} -@findex eqsubdef @r{(hyperlinks)} -@findex eqsubdefn @r{(hyperlinks)} -@cindex equations, hyperlinks -@cindex hyperlinks, equations -@cindex group `eq' -@cindex destgroup `eq' -All commands that define equation labels are part of the `eq' destgroup. -These are @code{\eqdef}, @code{\eqdefn}, @code{\eqsubdef} and -@code{\eqsubdefn} (@pxref{Equation references}). All these commands use -the equation label as the hyperlink label. However, if the equation -label is empty, they make up a (hopefully) unique hyperlink label for -the destination. This label will be used for the link when you refer to -this empty-labeled equation with one of the equation reference macros. - -@findex phantomeqlabel -@findex phantomeqnumber -The command @code{\phantomeqlabel} is called to generate hyperlink -labels for the empty-labeled equations. By default, it produces the -labels in the format @samp{PHEQ@var{number}}, where @var{number} comes -from the count register @code{\phantomeqnumber}; this count register is -incremented at every empty-labeled equation definition. - -@findex eqref -@findex eqrefn -@findex reftie -@cindex group `eq' -@cindex linkgroup `eq' -The commands @code{\eqref} and @code{\eqrefn} (@pxref{Equation -references}) form the `eq' linkgroup. These commands take an optional -argument, which, when present, is tied with @code{\reftie} to the -equation reference and becomes part of the link. The equation label is -used for the hyperlink label; if the label is empty, the link is for the -label generated for the last empty-labeled equation. - - -@node Index hyperlinks -@subsection Index hyperlinks: idx - -@findex idx @r{(hyperlinks)} -@findex idxname @r{(hyperlinks)} -@findex idxmarked @r{(hyperlinks)} -@findex idxsubmarked @r{(hyperlinks)} -@cindex index hyperlink -@cindex hyperlinks, index -@cindex group `idx' -@cindex linkgroup `idx' -@cindex destgroup `idx' -All indexing commands (@code{\idx}, @code{\idxname}, @code{\idxmarked}, -@code{\idxsubmarked} and their silent equivalents, @pxref{Indexing -commands}) form the `idx' destgroup. The `idx' linkgroup consists of -the macros which are used to typeset the index when you say -@findex readindexfile @r{(hyperlinks)} -@code{\readindexfile@{@var{index-letter}@}} (@pxref{Typesetting an -index}). - -@pindex makeindex -To create the links in index entries, Eplain uses MakeIndex's -``encapsulation'' feature. When you use an indexing macro to mark an -index term, Eplain writes out a line to the -@pindex .idx @r{files} -@file{.idx} file of the following general form: - -@example -\indexentry@{@var{entry}|@var{pagemarkup}@}@{@var{pageno}@} -@end example - -@noindent where @var{entry} is the index entry (converted into the -internal format that MakeIndex understands), @var{cs} is the markup -command you specified with the @code{pagemarkup=@var{cs}} optional -argument to the indexing commands (@pxref{Modifying index entries}), -and @var{pageno} is the page number on which the term appeared. When -processing the @file{.idx} file, MakeIndex makes the page number an -argument to the page markup command (``encapsulates'' the page -number), so the page number in the -@pindex .ind @r{files} -@file{.ind} file appears as @code{\@var{cs}@{@var{pageno}@}}. Eplain -internally replaces the @var{cs} command name with its own command, -which, in addition to calling the original @code{\@var{cs}} -encapsulator, turns the page number into a link. - -Eplain provides two approaches to linking page numbers in the index to -locations of index terms in the text. - -@menu -* Exact destinations for index terms:: -* Page destinations for index terms:: -* Choosing destination placement:: -* Index page list and page range parsers:: -* Hyperlinks in see and see also entries:: -@end menu - - -@node Exact destinations for index terms -@subsubsection Exact destinations for index terms - -In this approach, each command that marks an index term defines a unique -destination and passes its label on to the @file{.idx} file as part of -the @code{\indexentry} command. The @code{\indexentry} line that Eplain -writes to the @file{.idx} file becomes - -@example -\indexentry@{@var{entry}|hlidx@{@var{label}@}@{@var{cs}@}@}@{@var{pageno@}} -@end example - -@findex hlidx -@noindent where @code{\hlidx} is the command that is defined by Eplain -to take three arguments: a hyperlink label (@var{label}), a name of -page number encapsulator (@var{cs}) and a page number (@var{pageno}). -In the @file{.ind} file that MakeIndex will generate, the page number -will now appear as - -@example -\hlidx@{@var{label}@}@{@var{cs}@}@{@var{pageno}@} -@end example - -@noindent The result of this command is -@code{\@var{cs}@{@var{pageno}@}}, wrapped up into a link pointing to -@var{label} destination. - -The hyperlink labels for the index terms are generated by the -@findex hlidxlabel -@code{\hlidxlabel} command, by default in the format -@samp{IDX@var{number}}, where @var{number} is the value of the count -register -@findex hlidxlabelnumber -@code{\hlidxlabelnumber}. This count register is incremented at each -index term. - -@cindex exact index hyperlinks -@cindex index, exact hyperlinks -@cindex hyperlinks, index, exact -The advantage of this approach, as compared to the second approach -described below, is that links in the index point to exact locations of -the indexed terms on the page. The disadvantage of this approach is -that MakeIndex will regard @emph{all} index entries as distinct, because -each one contains a (unique) hyperlink label. This disadvantage can be -partially overcome by the script -@pindex idxuniq -@cindex filtering index entries with hyperlinks -@cindex hyperlinks, filtering index entries -@file{idxuniq} distributed with Eplain in the @file{util} directory. -This script filters out @code{\indexentry} lines differing only in the -hyperlink label but identical otherwise. You should process the -@file{.idx} with this script before passing it on to MakeIndex. For -example: - -@example -prompt$ ./idxuniq file.idx | makeindex > file.ind -@end example - -@noindent Still, this solution is not ideal, as the page-range formation -ability of MakeIndex will not work, and there will be problems of -apparently identical index entries clashing (e.g., when a range-end -entry appears on the same page as another entry with the same -definition; @file{idxuniq} will not filter out the second entry). - - -@node Page destinations for index terms -@subsubsection Page destinations for index terms - -In the second approach, Eplain does not write out any destination labels -for the index terms. Instead, Eplain writes out a wrapper for page -number encapsulator which can parse the page number and generate a link -pointing to the @emph{page} on which the term appeared. On top of each -page containing an index term, Eplain defines a destination with label -produced by -@findex hlidxpagelabel -@code{\hlidxpagelabel}. The @code{\hlidxpagelabel} command takes a -single argument (page number @var{number}) and by default produces the -label in the format @samp{IDXPG@var{number}}. - -With this approach, the @code{\indexentry} line which Eplain writes to -the @code{.idx} file looks like this: - -@example -\indexentry@{@var{entry}|hlidxpage@{@var{cs}@}@}@{@var{pageno@}} -@end example - -@findex hlidxpage -@noindent where @code{\hlidxpage} is the command that is defined by Eplain -to take two arguments: a name of page number encapsulator (@var{cs}) -and a page number (@var{pageno}). In the @file{.ind} file that -MakeIndex will generate, the page number will appear as - -@example -\hlidxpage@{@var{cs}@}@{@var{pageno}@} -@end example - -The advantage of this approach is that all features of MakeIndex are -intact. The drawback is that links in the index do not point to exact -locations of indexed terms on a page, but to the top of a page on -which the term appears. - -@cindex index, parsing page numbers -@cindex page range, parsing -@cindex page list, parsing -@cindex parsing page numbers -Another disadvantage is that this approach depends on the page range and -page list separators which MakeIndex was configured to output. -@code{\hlidxpage} must be able to parse the first page number in a page -range like @samp{1--4}. In addition, page list parsing is needed -because MakeIndex combines two consecutive page numbers in one call to -the page number encapsulator, so @code{\hlidxpage} can be passed, e.g., -@samp{1, 2} for the @var{pageno}. In this last case, @code{\hlidxpage} -splits the two page numbers, applies @code{\@var{cs}} to each of them, -and makes each of the page numbers a link to the appropriate page. Note -that this will alter typesetting slightly, because now the page list -separator (a comma followed by a space, by default) is not typeset using -the page number encapsulator (@code{\@var{cs}}). - -Eplain's defaults for the page list and page number delimiters are the -same as those in MakeIndex, a comma followed by a space (@samp{, }) and -two dashes (@samp{--}), respectively. If you customize MakeIndex to use -different delimiters, you must not forget to let Eplain know about them -with the commands - -@example -\setidxpagelistdelimiter@{@var{list-delim}@} -\setidxpagerangedelimiter@{@var{page-delim}@} -@end example - -@noindent (@pxref{Page list and page range parsers}). - - -@node Choosing destination placement -@subsubsection Choosing destination placement - -@cindex index, placement of destinations -@cindex index, destination placement -@cindex index, selecting destination placement -@cindex index, choosing destination placement -@cindex hyperlinks, index destination placement -The approach that Eplain should use for the index terms can be -selected in the -@findex enablehyperlinks -@code{\enablehyperlinks} command. The optional argument it accepts is -a comma-separated list of options. The -@findex idxexact -@code{idxexact} option selects the first approach, -@findex idxpage -@code{idxpage} the second, and -@findex idxnone -@code{idxnone} disables hyperlink support for the index terms -altogether, in case you want to stop Eplain from writing its link -wrappers into the @file{.idx} file. The default is @code{idxpage}. - -For example: - -@example -\enablehyperlinks[idxexact] -@end example - -@noindent selects the first approach (``exact index links''). - - -@node Index page list and page range parsers -@subsubsection Index page list and page range parsers - -The macros that Eplain uses to parse page lists and page ranges, -@code{\idxparselist} and @code{\idxparserange}, can sometimes be useful -when defining page number encapsulators. @xref{Page list and page range -parsers}, for the description of these commands and an example of their -usage. - - -@node Hyperlinks in see and see also entries -@subsubsection Hyperlinks in see and see also entries - -@cindex hyperlinks, see and see also index entries -@cindex index, hyperlinks in see and see also entries -@cindex see also index entries and hyperlinks -@cindex see, and index entries, hyperlinks -There is no automatic support for hyperlinks with ``see'' and ``see -also'' index entries, as there is not enough information to trace the -parameters of -@findex indexsee -@code{\indexsee} and -@findex indexseealso -@code{\indexseealso} to corresponding index entries. But if desired, -this can be implemented with @code{\hldest} and @code{\hlstart} -(@pxref{Explicit hyperlinks}); for example: - -@example -\sidx@{semantic theory of truth@@% - \leavevmode\hldest@{@}@{@}@{idx:theo truth@}semantic theory of truth@} -@dots{} -\sidx[seealso]@{truth@}[definition of]% - @{\hlstart@{@}@{@}@{idx:theo truth@}semantic theory of truth\hlend@} -@end example - - -@node Footnote hyperlinks -@subsection Footnote hyperlinks: foot, footback - -@cindex footnotes, hyperlinks -@cindex hyperlinks, footnotes -@cindex group `foot' -@cindex group `footback' -@cindex linkgroup `foot' -@cindex linkgroup `footback' -@cindex destgroup `foot' -@cindex destgroup `footback' -The `foot' link and destination groups include the -@findex numberedfootnote @r{(hyperlinks)} -@code{\numberedfootnote} and -@findex footnote @r{(hyperlinks)} -@code{\footnote} macros (@pxref{Footnotes}). The `footback' groups -include the same macros, but control parameters for links and -destinations created inside the footnote to point back to the footnote -mark within the text body. - -The macros use hyperlink labels generated by -@findex hlfootlabel -@code{\hlfootlabel} and -@findex hlfootbacklabel -@code{\hlfootbacklabel}. The default formats for the labels are -@samp{FOOT@var{number}} and @samp{FOOTB@var{number}}, respectively, -where @var{number} is the value of the count register -@findex hlfootlabelnumber -@code{\hlfootlabelnumber}. This register is incremented at every -footnote. - - -@node Contents hyperlinks -@subsection Contents hyperlinks - -@cindex table of contents, hyperlinks -@cindex contents, hyperlinks -@cindex hyperlinks, table of contents -There is currently no special support for hyperlinks in the table of -contents (@pxref{Contents}), but implementing them with the -@code{\hldest} and @code{\hlstart @dots{} \hlend} commands -(@pxref{Explicit hyperlinks}) should be possible. - - -@node Hyperlink drivers -@section Hyperlink drivers - -This section describes the hyperlink drivers: the types of hyperlinks -they support, and the options they accept. During the first reading, -you may only want to skim through this section. - -Some of the descriptions below come from @cite{Portable Document Format -Reference Manual Version@tie{}1.3}, March@tie{}11, 1999. - -@menu -* Options supported by all drivers:: -* Hyperlink drivers pdftex and dvipdfm:: -* Hyperlink driver nolinks:: -@end menu - - -@node Options supported by all drivers -@subsection Options supported by all drivers - -@cindex hyperlink options, common -This subsection describes the destination and link options which are -supported by all hyperlink drivers. - - -@subsubheading Destination options supported by all drivers - -@cindex destination options, common -@cindex options, destination, common -@table @code -@item raise -@findex raise @r{(hyperlink option)} -@cindex raising hyperlink destinations -@cindex hyperlink destination, raising -@cindex destinations, raising -Specifies how much to raise destinations above the baseline. When set -to zero or empty, destinations are placed at the baseline. - -It is usually convenient to set this option to some variable parameter, -so that the height to which destinations are raised is automatically -adjusted according to the current context. For example, setting it to -@findex normalbaselineskip -@code{\normalbaselineskip} (or some fraction of it, like -@code{1.7\normalbaselineskip}) makes the setting appropriate for -different point sizes, in case your document uses more than one. - -The default setting is @code{\normalbaselineskip}. Initially, the -destgroups do not define this option, so they fall back on the default, -except for the `eq' destgroup, for which this option is set to -@code{1.7\normalbaselineskip}, -@cindex mathematics displays, hyperlinks -@cindex displayed math and hyperlinks -@cindex large operators and hyperlinks -@cindex hyperlinks, large operators -@cindex destinations, large operators -to accommodate the usual cases of large operators in displayed math. - -Example: @code{\hldestopts[eq]@{raise=2.5\normalbaselineskip@}} -@end table - - -@subsubheading Link options supported by all drivers -@cindex link options, common -@cindex options, link, common - -@table @code -@item colormodel -@itemx color -@findex colormodel @r{(hyperlink option)} -@findex color @r{(hyperlink option)} -@cindex color, hyperlinks -These two options define the color to be used for rendering the link -text. The colors are used only when a @code{\color} command is defined, -e.g., by loading the @LaTeX{} `color' package (@pxref{Packages known to -work}). The @code{\color} command is called as -@code{\color[@var{colormodel}]@{@var{color}@}}, where @var{colormodel} -and @var{color} are the definitions of the @code{colormodel} and -@code{color} options, respectively. However, if @var{colormodel} is -empty, the optional argument to @code{\color} is omitted; and if -@var{color} is empty, the @code{\color} command is omitted altogether. -The default setting is @code{@var{colormodel}=cmyk} and -@code{@var{color}=0.28,1,1,0.35}. - -When specifying colors with several components delimited by commas -(e.g., RGB and CMYK colors in the @LaTeX{} `color' package), it is not -possible to specify the components directly in the option list of -@code{\hlopts}, because comma is the option list delimiter. With the -`color' package, it is possible to specify such colors by defining a -custom color with @code{\definecolor} and using the new color name with -an empty @var{colormodel} (see examples below). - -Examples: -@example -\hlopts@{colormodel=,color=blue@}% predefined color -\definecolor@{mycolor@}@{rgb@}@{.3,.8,.95@} -\hlopts@{colormodel=,color=mycolor@}% custom color -\hlopts@{colormodel=gray,color=.4@} -@end example -@end table - - -@node Hyperlink drivers pdftex and dvipdfm -@subsection Hyperlink drivers @code{pdftex} and @code{dvipdfm} - -@cindex @code{pdftex}, hyperlink driver -@cindex @code{dvipdfm}, hyperlink driver -@cindex driver @code{pdftex} -@cindex driver @code{dvipdfm} -@cindex hyperlink driver @code{pdftex} -@cindex hyperlink driver @code{dvipdfm} -This subsection describes link and destination types and options -supported by the @code{pdftex} and @code{dvipdfm} drivers. Many of the -hyperlink types and options are common to both drivers, so we describe -them together. - -@menu -* Destination types for pdftex and dvipdfm:: -* Destination options for pdftex and dvipdfm:: -* Link types for pdftex and dvipdfm:: -* Link options for pdftex and dvipdfm:: -@end menu - - -@node Destination types for pdftex and dvipdfm -@subsubsection Destination types for @code{pdftex} and @code{dvipdfm} - -@cindex destination types, @code{pdftex} -@cindex destination types, @code{dvipdfm} -@cindex types, destination, @code{pdftex} -@cindex types, destination, @code{dvipdfm} -@cindex @code{pdftex}, destination types -@cindex @code{dvipdfm}, destination types -@table @code -@item xyz -@findex xyz @r{(destination type)} -``Current position''. The option -@findex zoom @r{(destination option)} -@code{zoom} specifies magnification to use (zero or empty means leave -magnification unchanged, which is the default). This is the default -type. - -For @code{dvipdfm}: the options -@findex left @r{(destination option)} -@code{left} and -@findex top @r{(destination option)} -@code{top} specify position coordinates to use (empty options mean -current position coordinate, which is the default). - -Example: @code{\hldest@{xyz@}@{zoom=2000@}@{dest123@}} - -@item fit -@findex fit @r{(destination type)} -Fit the page to the window. - -Example: @code{\hldest@{fit@}@{@}@{dest123@}} - -@item fith -@findex fith @r{(destination type)} -Fit the width of the page to the window. - -For @code{dvipdfm}: the -@findex top @r{(destination option)} -@code{top} option specifies vertical position (default is empty, meaning -current position). - -Example: @code{\hldest@{fith@}@{@}@{dest123@}} - -@item fitv -@findex fitv @r{(destination type)} -Fit the height of the page to the window. - -For @code{dvipdfm}: The option -@findex left @r{(destination option)} -@code{left} specifies horizontal position (default is empty, meaning -current position). - -Example: @code{\hldest@{fitv@}@{@}@{dest123@}} - -@item fitb -@findex fitb @r{(destination type)} -Fit the page's bounding box to the window. - -Example: @code{\hldest@{fitb@}@{@}@{dest123@}} - -@item fitbh -@findex fitbh @r{(destination type)} -Fit the width of the page's bounding box to the window. - -For @code{dvipdfm}: the option -@findex top @r{(destination option)} -@code{top} specifies vertical position (default is empty, meaning -current position). - -Example: @code{\hldest@{fitbh@}@{@}@{dest123@}} - -@item fitbv -@findex fitbv @r{(destination type)} -Fit the height of the page's bounding box to the window. - -For @code{dvipdfm}: the option -@findex left @r{(destination option)} -@code{left} specifies horizontal position (default is empty, meaning -current position). - -Example: @code{\hldest@{fitbv@}@{@}@{dest123@}} - -@item fitr -@findex fitr @r{(destination type)} -For @code{pdftex}: fit the rectangle specified by the options -@findex width @r{(destination option)} -@code{width}, -@findex height @r{(destination option)} -@code{height} and -@findex depth @r{(destination option)} -@code{depth} (as a @TeX{} rule specification) in the window. For -dimensions set to empty, the corresponding value of the parent box is -used (these are the defaults). - -For @code{dvipdfm}: fit the rectangle specified by the options -@findex left @r{(destination option)} -@code{left}, -@findex bottom @r{(destination option)} -@code{bottom}, -@findex right @r{(destination option)} -@code{right} and -@findex top @r{(destination option)} -@code{top} (in -@cindex PostScript point -PostScript points, 72@tie{}points per inch) in the window. For -dimensions set to empty, current position coordinate is substituted -(these are the defaults). - -Example for @code{pdftex}: - -@example -\hldest@{fitr@}@{width=\hsize,height=.5\vsize,depth=0pt@}@{dest123@} -@end example - -Example for @code{dvipdfm}: - -@example -\hldest@{fitr@}@{left=72,bottom=72,right=720,top=360@}@{dest123@} -@end example - -@item raw -@findex raw @r{(destination type)} -The destination specification (in the form of a pdf@TeX{} command or a -dvipdfm @code{\special}) is taken from the command sequence -@code{\@var{cs}}, where @var{cs} is the value of the -@findex cmd @r{(destination option)} -@code{cmd} option. In the definition of @code{\@var{cs}}, use -@findex @@hllabel -@code{\@@hllabel} to refer to the hyperlink label. This option is -intended to be used with destgroups (@pxref{Setting hyperlink types and -options}), as it does not make sense to use it in a direct call to -@findex hldest -@code{\hldest}---you can just call the raw command. - -Example for @code{pdftex}: - -@example -\makeatletter -\def\mydest@{\pdfdest name@{\@@hllabel@} xyz@} -\hldesttype@{raw@} -\hldestopts@{cmd=mydest@} -\resetatcatcode -@end example - -Example for @code{dvipdfm}: - -@example -\makeatletter -\def\mydest@{\special@{pdf: dest (\@@hllabel) - [@@thispage /XYZ @@xpos @@ypos 0]@}@} -\hldesttype@{raw@} -\hldestopts@{cmd=mydest@} -\resetatcatcode -@end example -@end table - - -@node Destination options for pdftex and dvipdfm -@subsubsection Destination options for @code{pdftex} and @code{dvipdfm} - -@cindex destination options, @code{pdftex} -@cindex destination options, @code{dvipdfm} -@cindex options, destination, @code{pdftex} -@cindex options, destination, @code{dvipdfm} -@cindex @code{pdftex}, destination options -@cindex @code{dvipdfm}, destination options -With respect to the destination options, the @code{pdftex} and -@code{dvipdfm} differ in the way the fit rectangle is specified -(relative coordinates for @code{pdftex}, absolute coordinates for -@code{dvipdfm}). - - -@subsubheading Common destination options - -@table @code -@item cmd -@findex cmd @r{(destination option)} -Name of the macro (without the leading @samp{\}) containing a -pdf@TeX{} command or a dvipdfm @code{\special} for the @code{raw} -destination. - -For an example of usage, @pxref{Destination types for pdftex and -dvipdfm}, description of the @code{raw} destination. - -@item zoom -@findex zoom @r{(destination option)} -@cindex destinations, magnification -@cindex hyperlink destination, magnification -@cindex magnification, hyperlink destination -@cindex zooming, hyperlink destination -Magnification ratio times 1000 (like @TeX{}'s scale factor). -Zero or empty means leave magnification unchanged, which is the -default. - -Example: @code{\hldest@{xyz@}@{zoom=2000@}@{dest123@}} -@end table - - -@subsubheading @code{pdftex}-specific destination options - -The dimension options below must be specified as a @TeX{} rule -specification. When set to empty, the corresponding value -of the parent box is used (this is the default for all dimension -options). - -@table @code -@item depth -@findex depth @r{(destination option)} -@cindex destinations, dimensions -@cindex hyperlink destination, dimensions -@cindex dimensions, hyperlink destination -Depth of the fit rectangle for the @code{fitr} destination. - -@item height -@findex height @r{(destination option)} -@cindex destinations, dimensions -@cindex hyperlink destination, dimensions -@cindex dimensions, hyperlink destination -Height of the fit rectangle for the @code{fitr} destination. - -@item width -@findex width @r{(destination option)} -@cindex destinations, dimensions -@cindex hyperlink destination, dimensions -@cindex dimensions, hyperlink destination -Width of the fit rectangle for the @code{fitr} destination. - -Example: - -@example -\hldest@{fitr@}@{width=\hsize,height=.5\vsize,depth=0pt@}@{dest123@} -@end example -@end table - - -@subsubheading @code{dvipdfm}-specific destination options - -The dimension options below must be specified in -@cindex PostScript point -PostScript points (72@tie{}points per inch), as a number without the -@samp{bp} unit name. When set to empty, the current position -coordinate is used (this is the default for all dimension options). - -@table @code -@item bottom -@findex bottom @r{(destination option)} -@cindex destinations, dimensions -@cindex hyperlink destination, dimensions -@cindex dimensions, hyperlink destination -Bottom position coordinate of a box specification for the various -destination types. - -@item left -@findex left @r{(destination option)} -@cindex destinations, dimensions -@cindex hyperlink destination, dimensions -@cindex dimensions, hyperlink destination -Left position coordinate of a box specification for the various -destination types. - -@item right -@findex right @r{(destination option)} -@cindex destinations, dimensions -@cindex hyperlink destination, dimensions -@cindex dimensions, hyperlink destination -Right position coordinate of a box specification for the various -destination types. - -@item top -@findex top @r{(destination option)} -@cindex destinations, dimensions -@cindex hyperlink destination, dimensions -@cindex dimensions, hyperlink destination -Top position coordinate of a box specification for the various -destination types. - -Example: - -@example -\hldest@{fitr@}@{left=72,bottom=72,right=720,top=360@}@{dest123@} -@end example -@end table - - -@node Link types for pdftex and dvipdfm -@subsubsection Link types for @code{pdftex} and @code{dvipdfm} - -@cindex link types, @code{pdftex} -@cindex link types, @code{dvipdfm} -@cindex types, link, @code{pdftex} -@cindex types, link, @code{dvipdfm} -@cindex @code{pdftex}, link types -@cindex @code{dvipdfm}, link types -Link types are the same for the @code{pdftex} and @code{dvipdfm} -drivers, except that the @code{pdftex} driver provides one additional -link type @code{num} (link to a numbered destination). dvipdfm does not -support numbered destinations, therefore it does not have this link -type. Note that all destinations created by Eplain hyperlink macros are -named destinations; to define a numbered destination, you have to use -low-level pdf@TeX{} commands. - - -@subsubheading Common link types - -@table @code -@item name -@findex name @r{(hyperlink type)} -@cindex named destination -@cindex destinations, named -@cindex hyperlink destination, named -Go to a ``named destination''. The label is the destination name. -All destinations created with @code{\hldest} are named destinations. -This is the default type. - -Example: @code{\hlstart@{name@}@{@}@{dest123@}Link to dest123\hlend} - -@item page -@findex page @r{(hyperlink type)} -@cindex page destination -@cindex destinations, page -@cindex hyperlink destination, page -Go to a page. The label is the page number (counting from@tie{}1). -Page fitting is specified by the -@findex pagefit @r{(hyperlink option)} -@code{pagefit} option. - -Example: - -@example -\hlstart@{page@}@{pagefit=/FitH 600@}@{123@}Link to page~123\hlend -@end example - -@item filename -@findex filename @r{(hyperlink type)} -@cindex file, hyperlink to -@cindex destinations, in another file -@cindex hyperlinks, to another file -Go to a named destination in another file. The label is the -destination name. The file name is specified by the -@findex file @r{(hyperlink option)} -@code{file} option. Page fitting is specified by the -@findex pagefit @r{(hyperlink option)} -@code{pagefit} option. The -@findex newwin @r{(hyperlink option)} -@code{newwin} option specifies whether the destination document is -opened in the same window or in a new window. - -Example: -@example -\hlstart@{filename@}@{file=book.pdf,newwin=1@}@{dest123@} - Link to dest123 in file `book.pdf'\hlend -@end example - -@item filepage -@findex filepage @r{(hyperlink type)} -@cindex file, hyperlink to -@cindex destinations, in another file -@cindex hyperlinks, to another file -Go to a page in another file. The label is the page number (counting -from@tie{}1). The file name is specified by the -@findex file @r{(hyperlink option)} -@code{file} option. Page fitting is specified by the -@findex pagefit @r{(hyperlink option)} -@code{pagefit} option. The -@findex newwin @r{(hyperlink option)} -@code{newwin} option specifies whether the destination document is -opened in the same window or in a new window. - -Example: -@example -\hlstart@{filepage@}@{file=book.pdf,newwin=,% - pagefit=/FitR 50 100 300 500@}@{1@} - Link to page~1 in file `book.pdf'\hlend -@end example - -@item url -@findex url @r{(hyperlink type)} -@cindex URL hyperlink -@cindex destinations, URL -@cindex hyperlinks, URL -Go to a URL. The label is the URL. - -Example: @code{\hlstart@{url@}@{@}@{http://tug.org/eplain/@}Eplain home\hlend} - -@item raw -@findex raw @r{(hyperlink type)} -The link specification (in the form of a pdf@TeX{} command or a dvipdfm -@code{\special} primitive) is taken from the command sequence -@code{\@var{cs}}, where @var{cs} is the value of the -@findex cmd @r{(hyperlink option)} -@code{cmd} option. This option is intended to be used with linkgroups -(@pxref{Setting hyperlink types and options}), as it does not make sense -to use it in a direct call to -@findex hlstart -@code{\hlstart}---you can just call the raw command. - -Example for @code{pdftex}: - -@example -% Redirect all \url links to the first page -\def\mycmd@{\pdfstartlink goto page 1 @{/Fit@}@} -\hltype[url]@{raw@} -\hlopts[url]@{cmd=mycmd@} -@end example - -Example for @code{dvipdfm}: - -@example -% Redirect all \url links to the first page -\def\mycmd@{\special@{pdf: beginann <>@}@} -\hltype[url]@{raw@} -\hlopts[url]@{cmd=mycmd@} -@end example -@end table - -@subsubheading @code{pdftex}-specific link types - -@table @code -@item num -@findex num @r{(hyperlink type)} -@cindex numbered destination -@cindex destinations, numbered -@cindex hyperlink destination, numbered -Go to a ``numbered destination''. The label is the destination -number. - -Example: @code{\hlstart@{num@}@{@}@{123@}Link to 123\hlend} -@end table - - -@node Link options for pdftex and dvipdfm -@subsubsection Link options for @code{pdftex} and @code{dvipdfm} - -@cindex link options, @code{pdftex} -@cindex link options, @code{dvipdfm} -@cindex options, link, @code{pdftex} -@cindex options, link, @code{dvipdfm} -@cindex @code{pdftex}, link options -@cindex @code{dvipdfm}, link options -Link options are mostly the same for the @code{pdftex} and -@code{dvipdfm} drivers. The @code{pdftex} driver has additional -options to specify link dimensions. - - -@subsubheading Common link options - -@table @code -@item bcolor -@findex bcolor @r{(hyperlink option)} -@cindex hyperlink border color -@cindex border color, hyperlink -@cindex color, hyperlink border -Border color. An array of three numbers in the range 0 to 1, -representing a color in DeviceRGB@. - -Example: @code{\hlstart@{name@}@{bcolor=.1 .5 1@}@{dest123@}Link\hlend} - -@item bdash -@findex bdash @r{(hyperlink option)} -@cindex dashed hyperlink border -@cindex hyperlinks, border style -@cindex border style, hyperlink -Array of numbers representing on and off stroke lengths for drawing -dashes. - -Example: @code{\hlstart@{name@}@{bstyle=D,bdash=2 4@}@{dest123@}Link\hlend} - -@item bstyle -@findex bstyle @r{(hyperlink option)} -@cindex solid hyperlink border -@cindex dashed hyperlink border -@cindex beveled hyperlink border -@cindex inset hyperlink border -@cindex underline hyperlink border -@cindex hyperlinks, border style -@cindex style, hyperlink border -@cindex border style, hyperlink -Link border style: - -@table @code -@item S -The border is drawn as a solid line. - -@item D -The border is drawn with a dashed line (the dash pattern is specified -by the -@findex bdash @r{(hyperlink option)} -@code{bdash} option). - -@item B -The border is drawn in a beveled style. - -@item I -The border is drawn in an inset style. - -@item U -The border is drawn as a line on the bottom of the link rectangle. -@end table - -The default is @samp{S}. - -Example: @code{\hlstart@{name@}@{bstyle=D,bdash=2 4@}@{dest123@}Link\hlend} - -@item bwidth -@findex bwidth @r{(hyperlink option)} -@cindex width, hyperlink border -@cindex hyperlinks, border width -@cindex border width, hyperlink -Border width in -@cindex PostScript point -PostScript points (72@tie{}points per inch). The default is@tie{}1. - -Example: @code{\hlstart@{name@}@{bwidth=2@}@{dest123@}Link\hlend} - -@item cmd -@findex cmd @r{(hyperlink option)} -Name of the macro (without the leading @samp{\}) containing a -pdf@TeX{} command or a dvipdfm @code{\special} for the @code{raw} link. - -For an example of usage, @pxref{Link types for pdftex and dvipdfm}, -description of the @code{raw} link. - -@item file -@findex file @r{(hyperlink option)} -File name for the @code{filename} and @code{filepage} link types. - -For an example of usage, @pxref{Link types for pdftex and dvipdfm}, -description of the @code{filename} and @code{filepage} links. - -@item hlight -@findex hlight @r{(hyperlink option)} -@cindex hyperlinks, highlight mode -@cindex highlight modes, hyperlink -Link border highlight modes: - -@table @code -@item I -The rectangle specified by the bounding box of the link is inverted. - -@item N -No highlighting is done. - -@item O -The border of the link is inverted. - -@item P -The region underneath the bounding box of the link is drawn inset into -the page. -@end table - -The default is @samp{I}. - -Example: @code{\hlstart@{name@}@{bstyle=S,hlight=O@}@{dest123@}Link\hlend} - -@item newwin -@findex newwin @r{(hyperlink option)} -@cindex hyperlinks, opening in a new window -@cindex new window, opening hyperlink in -For the @code{filename} and @code{filepage} links, specifies whether the destination document is -opened in the same window or in a new window. The settings are: - -@table @code -@item 0 -Open in the same window. -@item @r{non-}0 -Open in a new window. -@item @r{empty} -Behavior according to the viewer settings. -@end table - -The default is empty. - -For an example of usage, @pxref{Link types for pdftex and dvipdfm}, -description of the @code{filename} and @code{filepage} links. - -@item pagefit -@findex pagefit @r{(hyperlink option)} -For the @code{page} and @code{filepage links}, specifies how the page -must be fitted to the window. @code{pagefit} specification is written -to the PDF file as is, so it must conform to the PDF standard. - -For an example of usage, @pxref{Link types for pdftex and dvipdfm}, -description of the @code{page} and @code{filepage} links. -@end table - - -@subsubheading @code{pdftex}-specific link options - -The dimension options below must be specified as a @TeX{} rule -specification. When set to empty, the corresponding value -of the parent box is used (this is the default for all dimension -options). - -@table @code -@item depth -@findex depth @r{(hyperlink option)} -@cindex hyperlink dimensions -@cindex dimensions, hyperlink -Depth of the link. - -@item height -@findex height @r{(hyperlink option)} -@cindex hyperlink dimensions -@cindex dimensions, hyperlink -Height of the link. - -@item width -@findex width @r{(hyperlink option)} -@cindex hyperlink dimensions -@cindex dimensions, hyperlink -Width of the link. - -Example: - -@example -\hlstart@{name@}@{width=5in,height=20pc,depth=0pt@}@{dest123@} - Link\hlend -@end example -@end table - - -@node Hyperlink driver nolinks -@subsection Hyperlink driver @code{nolinks} - -@cindex @code{nolinks}, hyperlink driver -@cindex driver @code{nolinks} -@cindex hyperlink driver @code{nolinks} -@cindex omitting hyperlinks -@cindex disabling hyperlinks -@cindex hyperlinks, disabling -@cindex destinations, disabling -@cindex spacing, preserving with hyperlinks -@cindex hyperlinks, preserving spacing -@cindex page-breaking, preserving with hyperlinks -@cindex hyperlinks, preserving page-breaking -Select this driver to suppress all hyperlinks in your document. - -Selecting this driver is quite different from not selecting any driver -at all, or from selecting some driver and then turning hyperlinks off -for the entire document with -@findex hloff -@code{\hloff} and -@findex hldestoff -@code{\hldestoff} (@pxref{Turning hyperlinks on/off}). - -The purpose of @code{\hldestoff} and @code{\hloff} is to mark (parts) of -your document where hyperlinks should never appear. (Imagine you want -to prevent a cross-referencing macro from generating a link at a certain -spot in your document.) - -If instead you have prepared a document with hyperlinks and just want to -compile a version without them, it is better to select the driver -@code{nolinks}. This ensures that spacing and page-breaking are the -same as what you were getting with hyperlinks enabled. - -The reason for this is that hyperlinks are produced by the -@code{\special} primitives or low-level hyperlink commands. Each such -command is placed inside a -@cindex whatsits, made by hyperlinks -@dfn{whatsit} (an internal @TeX{} object), which may introduce -legitimate breakpoints at places where none would exist without the -whatsits. The macros @code{\hldestoff} and @code{\hloff} disable the -hyperlink macros completely, so that no whatsits are produced. - -In contrast, the @code{nolinks} driver does not completely disable -hyperlink macros. Instead, it defines them to merely write to the log -file (what gets written is unimportant). This also produces -whatsits, thus imitating the whatsits from the hyperlink commands. -(This trick was borrowed from the -@pindex color.sty -@cindex graphics collection, @LaTeX{} -@cindex @LaTeX{} graphics collection -@LaTeX{} `color' package.) - -Another reason for using @code{nolinks} is that in horizontal mode -@code{\hldest} places destinations inside boxes of zero width, height, -and depth. When you say @code{\hldestoff}, @code{\hldest} will omit -both destination definitions and these boxes. The missing boxes can -again cause the typesetting to be inconsistent with that with -destinations enabled. Here again, the @code{nolinks} driver helps by -defining @code{\hldest} to produce the empty boxes. - - -@node Setting hyperlink types and options -@section Setting hyperlink types and options - -@cindex default hyperlink type -@cindex default hyperlink options -@cindex hyperlinks, default type -@cindex hyperlinks, default options -@cindex destinations, default type -@cindex destinations, default options -You can define default types for links and destinations, which will be -used when you do not specify a type in -@findex hlstart -@code{\hlstart} or -@findex hldest -@code{\hldest}. Similarly, you can define default values for the -options; the default value for an option is used when you do not set the -option in the argument to @code{\hlstart} or @code{\hldest}. - -@cindex group, type hyperlink -@cindex group, options hyperlink -@cindex hyperlinks, group type -@cindex hyperlinks, group options -@cindex link, group type -@cindex link, group options -@cindex linkgroup, type -@cindex linkgroup, options -@cindex destinations, group type -@cindex destinations, group options -@cindex destgroup, type -@cindex destgroup, options -The parameters for implicit links and destinations can be customized by -setting the ``group'' types and options. When not set, the defaults are -used. - -All these settings are local to the current (@TeX{}) group, so if -you want to set an option temporarily, you can do so inside a -@code{\begingroup@dots{}\endgroup} block; when the group ends, the -previous settings are restored. - -@menu -* Setting default types and options:: -* Setting group types:: -* Setting group options:: -@end menu - - -@node Setting default types and options -@subsection Setting default types and options - -@findex hltype -@findex hldesttype -The default types for links and destinations can be set with the -following commands: - -@example -\hltype@{@var{type}@} -\hldesttype@{@var{type}@} -@end example - -@noindent where @var{type} is one of the -link/destination types supported by the selected hyperlink driver -(@pxref{Hyperlink drivers}). - -@findex hlopts -@findex hldestopts -Default values for the options can be set with the following commands: - -@example -\hlopts@{@var{options}@} -\hldestopts@{@var{options}@} -@end example - -@noindent where @var{options} is a comma-separated list of option -assignments in the format @samp{@var{option}=@var{value}}. Again, what options -are allowed depends on the selected hyperlink driver. - - -@node Setting group types -@subsection Setting group types - -@findex hltype -@findex hldesttype -@cindex group, type hyperlink -@cindex hyperlinks, group type -@cindex link, group type -@cindex linkgroup, type -@cindex destinations, group type -@cindex destgroup, type -When called with an optional argument, as in - -@example -\hltype[@var{groups}]@{@var{type}@} -\hldesttype[@var{groups}]@{@var{type}@} -@end example - -@noindent where @var{groups} is a comma-separated list of groups, -@code{\hltype} and @code{\hldesttype} set the type for each group from -@var{groups} to @var{type}. The default type is used for all groups -with an empty type (this is the initial setting for all groups, except -that the type for the `url' linkgroup is set to @samp{url} by the -drivers which support this link type). - -@cindex group `' (empty) -@cindex default hyperlink type -@cindex default hyperlink options -@cindex hyperlinks, default type -@cindex hyperlinks, default options -@cindex destinations, default type -@cindex destinations, default options -There are two special ``groups'' which can be used inside the -@var{groups} list. An empty group sets the default type. This allows -to set the default type and group types in one command, for example: - -@example -\hltype[eq,]@{@var{type}@} -@end example - -@noindent sets the link type for the `eq' linkgroup and the -default link type to @var{type}. - -@cindex group `*' -@cindex groups, specifying all -@cindex all groups, specifying -Another special group is a star (@samp{*}) group, which signifies all -defined groups. For example, the command - -@example -\hldesttype[*,]@{@var{type}@} -@end example - -@noindent sets the destination type to @var{type} for each group, -as well as the default destination type. - - -@node Setting group options -@subsection Setting group options - -@cindex group, options hyperlink -@cindex hyperlinks, group options -@cindex link, group options -@cindex linkgroup, options -@cindex destinations, group options -@cindex destgroup, options -Option values for each group are stored as a list of option -assignments. This list does not have to contain every supported -option. Values for options missing from this list are taken from the -default option values. - -@findex hlopts -@findex hldestopts -To manipulate the list of option values for the groups, you use the -@code{\hlopts} and @code{\hldestopts} commands with an optional -argument: - -@example -\hlopts[@var{groups}]@{@var{options}@} -\hldestopts[@var{groups}]@{@var{options}@} -\hlopts![@var{groups}]@{@var{options}@} -\hldestopts![@var{groups}]@{@var{options}@} -@end example - -@noindent where @var{groups} is a comma-separated list of groups and -@var{options} is a comma-separated list of option assignments. The -two special ``groups'', the empty group and the star (@samp{*}) -group, have the same meaning as for @code{\hltype} and -@code{\hldesttype}. -@cindex group, preserving option list -@cindex hyperlink group, preserving option list -@cindex option list, preserving for group -When used without the exclamation mark, @code{\hlopts} and -@code{\hldestopts} preserve the current list of options for the groups, -and only update the options listed in @var{options}. If you add the -exclamation mark, the current list of options for each group in -@var{groups} is discarded and the new list is set to @var{options}. - -The ``overriding'' nature of the @samp{!} is appropriate when you give -a complete specification of the options for a group, e.g., at the -beginning of your document. On the other hand, when you want to -adjust some option(s) and leave others intact, you should use the -macros without the @samp{!}. - -@findex raise @r{(hyperlink option)} -@cindex mathematics displays, hyperlinks -@cindex displayed math and hyperlinks -@cindex large operators and hyperlinks -@cindex hyperlinks, large operators -@cindex destinations, large operators -@cindex raising hyperlink destinations -For example, with displayed mathematical formulas, you often need to -adjust the @samp{raise} option for the -@cindex group `eq' -@cindex linkgroup `eq' -`eq' destgroup, because the formulas often contain large parentheses and -brackets. But when doing so, you want to leave the other settings -unchanged. To achieve this, call @code{\hldestopts} without the -@samp{!}, for example: - -@example -$$\hldestopts[eq]@{raise=2.5\normalbaselineskip@} -@dots{} -$$ -@end example - -@noindent The display commands (@samp{$$}) implicitly put the entire -formula inside a (@TeX{}) group (@code{\begingroup@dots{}\endgroup}), so -you do not need to isolate the setting of the @samp{raise} option---it -will be restored after the closing @samp{$$}. - -@cindex option list, group -@cindex group option list -@cindex hyperlinks, group option list -Initially, Eplain sets the option lists for almost all groups to empty, -so that the groups fall back on the default values for all options. The -one exception to this rule is the `eq' destgroup, whose initial option -list contains one setting: - -@example -raise=1.7\normalbaselineskip -@end example - -@noindent This setting usually accommodates the large operators, which often -appear in displayed math. - - -@node Turning hyperlinks on/off -@section Turning hyperlinks on/off - -@cindex omitting hyperlinks -@cindex disabling hyperlinks -@cindex hyperlinks, disabling -@cindex destinations, disabling -Links and/or destinations can be turned on or off globally by disabling -the low-level commands, or for each group individually. - -All these settings are local to the current (@TeX{}) group, so if you -want to enable or disable links/destinations temporarily, you can do so -inside a @code{\begingroup@dots{}\endgroup} block; when the group ends, the -previous settings are restored. - -@menu -* Turning low-level commands on/off:: -* Turning hyperlinks on/off for a group:: -@end menu - - -@node Turning low-level commands on/off -@subsection Turning low-level commands on/off - -@findex hldeston -@findex hldestoff -@findex hlon -@findex hloff -The low-level commands @code{\hlstart}, @code{\hlend} and -@code{\hldest} can be turned on/off with the following commands: - -@example -\hldeston -\hldestoff -\hlon -\hloff -@end example - -@noindent @xref{Hyperlink driver nolinks}, for the implications of using -these commands to disable hyperlinks for the entire document. - - -@node Turning hyperlinks on/off for a group -@subsection Turning hyperlinks on/off for a group - -@cindex group, disabling hyperlinks -@cindex hyperlink group, disabling hyperlinks -If you want to disable links/destinations produced by certain groups, -you can give a list of the groups as an optional argument to these -commands: - -@example -\hldeston[@var{groups}] -\hldestoff[@var{groups}] -\hlon[@var{groups}] -\hloff[@var{groups}] -@end example - -@noindent where @var{groups} is the list of linkgroups/destgroups. This -list can contain two special groups. The empty group switches the -low-level commands (@pxref{Turning low-level commands on/off}), and the -star (@samp{*}) group operates on all defined groups. - -Note that turning off the low-level commands disables all hyperlinks -globally, including groups which have them enabled. Turning off certain -linkgroups/destgroups records the fact that the macros in the group -should not produce links/destinations. To illustrate the distinction, -assume that all links are on; after the following sequence of commands: - -@example -\hloff -\hloff[eq] -\hlon -@end example - -@noindent all links are on except for the `eq' linkgroup. diff --git a/Master/texmf-dist/doc/eplain/base/index.texi b/Master/texmf-dist/doc/eplain/base/index.texi deleted file mode 100644 index 7543633094d..00000000000 --- a/Master/texmf-dist/doc/eplain/base/index.texi +++ /dev/null @@ -1,7 +0,0 @@ -@c Public domain. - -@c makeinfo complains about bad links if we make them implicit. Strange. -@node Concept index, , Macro index, Top -@unnumbered Concept index - -@printindex cp diff --git a/Master/texmf-dist/doc/eplain/base/install.texi b/Master/texmf-dist/doc/eplain/base/install.texi deleted file mode 100644 index 10cc42057ef..00000000000 --- a/Master/texmf-dist/doc/eplain/base/install.texi +++ /dev/null @@ -1,65 +0,0 @@ -@c This is part of the Eplain manual. Public domain. - -@node Installation -@chapter Installation - -@cindex Eplain, installing -@ @cindex installation -The simplest way to install Eplain is simply to install the file -@file{eplain.tex} in a directory where @TeX{} will find it. What that -directory is obviously depends on your operating system and @TeX{} -installation. I personally install @file{eplain.tex} in -a directory @file{/usr/local/lib/texmf/tex/plain}. - -If you want, you can also create a format (@file{.fmt}) -@pindex .fmt @r{file} -@cindex format file -file for Eplain, which will eliminate the time spent reading the macro -source file with @code{\input}. You do this by issuing a sequence of -Unix commands something like this: - -@example -prompt$ touch eplain.aux -prompt$ initex -This is TeX, ... -**&plain eplain -(eplain.tex) -*\dump -... @var{messages} ... -@end example - -@pindex eplain.aux -@cindex undefined labels, warnings about -@noindent You must make sure that @file{eplain.aux} exists @emph{before} you -run @file{initex}; otherwise, warning messages about undefined labels -will never be issued. - -You then have to install the resulting @file{eplain.fmt} in some system -directory or set an environment variable to tell @TeX{} how to find it. -I install the format files in @file{/usr/local/lib/texmf/ini}; the -environment variable for the Web2C port of @TeX{} to Unix is -@code{TEXFORMATS}. - -Some implementations of @TeX{} (including Web2C) use the name by which -@TeX{} is invoked to determine what format to read. For them, you -should make a link to the @file{virtex} program named @file{etex}, and -then install the format file with the name @file{etex.fmt}. This lets -users invoke @TeX{} as @file{etex} and get the format file read -automatically, without having to say @samp{&eplain}. - -For convenience, the file @file{etex.tex} in the distribution directory -does @code{\input eplain} and then @code{\dump}, so that if you replace -@samp{eplain} with @samp{etex} in the example above, the format file -will end up with the right name. - -The @code{install} target in the @file{Makefile} does all this properly -for Unix systems and Web2C. You may have to change the pathnames. - -@cindex emtex, installation under -Under emtex, @samp{eaj@@acpub.duke.edu} says that - -@example -tex386 -i ^&plain eplain \dump -@end example - -@noindent produces a format file. diff --git a/Master/texmf-dist/doc/eplain/base/intro.texi b/Master/texmf-dist/doc/eplain/base/intro.texi deleted file mode 100644 index 00ccc5ad313..00000000000 --- a/Master/texmf-dist/doc/eplain/base/intro.texi +++ /dev/null @@ -1,71 +0,0 @@ -@c This is part of the Eplain manual. Public domain. - -@node Introduction -@chapter Introduction - -@cindex Eplain, purpose of - -@pindex xeplain.tex -The @dfn{Eplain} macro package expands on and extends the definitions in -plain @TeX{}. This manual describes the definitions that you, as either -an author or a macro writer, might like to use. It doesn't discuss the -implementation; see comments in the source code (@file{xeplain.tex}) for -that. - -Eplain is not intended to provide ``generic'' typesetting capabilities, as -do @LaTeX{} (written by Leslie Lamport) -@cindex @LaTeX{} -@cindex Lamport, Leslie -or Texinfo -@cindex Texinfo -(written by Richard Stallman and others). -@cindex Stallman, Richard -@cindex rms -Instead, it provides definitions that are intended to be useful -regardless of the high-level commands that you use when you actually -prepare your manuscript. - -For example, Eplain does not have a command @code{\section}, which -would format section headings in an ``appropriate'' way, such as -@LaTeX{}'s @code{\section}. The philosophy of Eplain is -that some people will always need or want to go beyond the macro -designer's idea of ``appropriate''. Such canned macros are -fine---as long as you are willing to accept the resulting output. If -you don't like the results, or if you are trying to match a different -format, you are out of luck. - -On the other hand, almost everyone would like capabilities such as -cross-referencing by labels, so that you don't have to put actual page -numbers in the manuscript. The author of Eplain -@cindex Berry, Karl -is not aware of any generally available macro packages that (1)@tie{}do -not force their typographic style on an author, and yet (2)@tie{}provide -such capabilities. - -Besides such generic macros as cross-referencing, Eplain -contains another set of definitions: ones that change the conventions of -plain @TeX{}'s output. For example, math displays in @TeX{} are, by -default, centered. If you want your displays to come out -left-justified, you have to plow through @cite{The @TeX{}book} to find -some way to do it, and then adapt the code to your own needs. Eplain -tries to take care of the messy details of such things, while still -leaving the detailed appearance of the output up to you. - -Finally, numerous definitions turned out to be useful as Eplain was -developed. They are also documented in this manual, on the chance that -people writing other macros will be able to use them. - -You can send bug reports or suggestions to -@email{tex-eplain@@tug.org}. The current version number of Eplain is -defined as the macro @code{\fmtversion} -@cindex version number -@findex fmtversion -at the end of the source file @file{eplain.tex}. When corresponding, -please refer to it. - -To get on this mailing list yourself, email -@email{tex-eplain-request@@tug.org} with a message whose body contains -a line -@example -subscribe @var{you@@your.preferred.address} -@end example diff --git a/Master/texmf-dist/doc/eplain/base/invoke.texi b/Master/texmf-dist/doc/eplain/base/invoke.texi deleted file mode 100644 index b412c64a57b..00000000000 --- a/Master/texmf-dist/doc/eplain/base/invoke.texi +++ /dev/null @@ -1,144 +0,0 @@ -@c This is part of the Eplain manual. Public domain. - -@node Invoking Eplain -@chapter Invoking Eplain - -@cindex Eplain, invoking -The simplest way to use Eplain is simply to put: - -@example -\input eplain -@end example - -@noindent at the beginning of your input file. The macro file is small -enough that reading it does not take an unbearably long time---at least on -contemporary machines. - -In addition, if a format (@file{.fmt}) -@pindex .fmt @r{file} -file has been created for Eplain (see the previous section), you can -eliminate the time spent reading the macro source file. You do this -by responding @code{&eplain} to @TeX{}'s @samp{**} prompt. For -example: - -@example -initex -This is TeX, ... -**&eplain myfile -@end example - -Depending on the implementation of @TeX{} which you are using, you might -also be able to invoke @TeX{} as @file{eplain} and have the format file -automatically read. - -If you write something which you will be distributing to others, you -won't know if the Eplain format will be loaded already. If it is, then -doing @code{\input eplain} will waste time; if it isn't, then you must -load it. To solve this, Eplain defines the control sequence -@code{\eplain} -@findex eplain -to be the letter @code{t} (a convention borrowed from Lisp; it doesn't -actually matter what the definition is, only that the definition -exists). Therefore, you can do the following: -@example -\ifx\eplain\undefined \input eplain \fi -@end example -@noindent where @code{\undefined} must never acquire a definition. - -Eplain consists of several source files: -@table @file -@item xeplain.tex -most of the macros; - -@item arrow.tex -commutative diagram macros (@pxref{Arrow theoretic diagrams}), written by -Steven Smith; - -@item btxmac.tex -bibliography-related macros (@pxref{Citations}); - -@item ifpdf.sty -sets the switch @code{\ifpdf}, which can be used to -detect pdf@TeX{} in PDF mode (@pxref{Checking for PDF output}), written -by Heiko Oberdiek; - -@item path.sty -macro for allowing line breaks at punctuation characters within long -pathnames, electronic mail addresses, etc., (@pxref{Paths}), written -by Philip Taylor; - -@item texnames.sty -abbreviations for various @TeX{}-related names (@pxref{Logos}), edited -by Nelson Beebe. - -@end table - -@noindent The file @file{eplain.tex} is all of these files merged -together, with comments removed. - -All of these files except @file{xeplain.tex} can be input individually, -if all you want are the definitions in that file. - -Also, since the bibliography macros are fairly extensive, you might not -want to load them, to conserve @TeX{}'s memory. Therefore, if the -control sequence @code{\nobibtex} -@findex nobibtex -is defined, then the bibliography definitions are skipped. You must set -@code{\nobibtex} before @file{eplain.tex} is read, naturally. For -example, you could start your input file like this: - -@example -\let\nobibtex = t -\input eplain -@end example - -By default, @code{\nobibtex} is undefined, and so the bibliography -definitions @emph{are} made. - -@findex noarrow -Likewise, define @code{\noarrow} if you don't want to include the -commutative diagram macros from @file{arrow.tex}, perhaps because you -already have conflicting ones. - -If you don't want to read or write an @file{aux} file at all, for any -kind of cross-referencing, define @code{\noauxfile} -@findex noauxfile -before reading @file{eplain.tex}. This also turns off all warnings -about undefined labels. - -@pindex amsppt.sty -@cindex AMS@TeX{} conflicts -Eplain conflicts with AMS@TeX{} (to be precise, with @file{amsppt.sty}): -the macros @code{\cite} and @code{\ref} are defined by both. - -If you want to use AMS@TeX{}'s @code{\cite}, the solution is to define -@code{\nobibtex} before reading Eplain, as described above. - -If you have @file{amsppt.sty} loaded and use @code{\ref}, Eplain writes -a warning on your terminal. If you want to use the AMS@TeX{} -@code{\ref}, do @code{\let\ref = \amsref} after reading Eplain. -To avoid the warning, do @code{\let\ref = \eplainref} after reading -Eplain and before using @code{\ref}. - -@pindex texi2dvi -@pindex bibtex -@pindex makeindex -Sometimes you may need to run @TeX{} more then once on your -@file{.tex} file in order to produce and typeset indexes, resolve -undefined cross-references and/or citations. The shell script -@command{texi2dvi} from the Texinfo documentation system (see -@url{http://www.gnu.org/software/texinfo/}) can automate this process: -it runs Bib@TeX{}, MakeIndex and @TeX{} as many times as needed to -complete the compilation process. You will need to set the -@env{LATEX} environment variable to @samp{tex}. For example, in a -Bourne-compatible shell, the following command will do all the work: - -@example -prompt$ LATEX=tex texi2dvi file.tex -@end example - -@pindex pdftex -@noindent (Despite the name, @command{texi2dvi} can also produce -@file{.pdf} files; just set @samp{LATEX=pdftex}.) See the output from -the command @command{texi2dvi --help} for invoking information and a -full list of options. diff --git a/Master/texmf-dist/doc/eplain/base/progdef.texi b/Master/texmf-dist/doc/eplain/base/progdef.texi deleted file mode 100644 index 4169f151730..00000000000 --- a/Master/texmf-dist/doc/eplain/base/progdef.texi +++ /dev/null @@ -1,768 +0,0 @@ -@c This is part of the Eplain manual. Public domain. - -@node Programming definitions -@chapter Programming definitions - -The definitions in this section are only likely to be useful when you -are writing nontrivial macros, not when writing a document. - -@menu -* Category codes:: Changing category codes. -* Allocation macros:: Non-outer versions of \newcount et al. -* Iteration:: Doing `for' loops in TeX. -* Macro arguments:: Reading and ignoring them. -* Converting to characters:: Normalizing control sequences and spaces. -* Expansion:: Controlling expansion. -* Obeying spaces:: Making whitespace count anywhere. -* Writing out numbers:: Making `1' into `one'. -* Mode-specific penalties:: -* Auxiliary files:: Testing for their existence. -* User-defined environments:: User-defined environments. -* Page list and page range parsers:: -@end menu - - -@node Category codes -@section Category codes - -@cindex category codes - -Plain @TeX{} defines @code{\active} (as the number 13) for use in -changing category codes. Although the author of @cite{The @TeX{}book} -@cindex Knuth, Donald Ervin -has ``intentionally kept the category codes numeric'', two other -categories are commonly used: letters (category code 11) and others -(12). Therefore, Eplain defines @code{\letter} and -@code{\other}. -@findex letter -@findex other - -Sometimes it is cleaner to make a character active without actually -@cindex active characters -writing a @code{\catcode} command. The @code{\makeactive} command takes -@findex catcode -@findex makeactive -a character as an argument to make active (and ignores following -spaces). For example, here are two commands which both make @kbd{\} -active: -@cindex backslash character - -@example -\makeactive`\\ \makeactive92 -@end example - -@cindex user-inaccessible macros -@cindex inaccessible macros -Sometimes you might want to temporarily change the category code of -the `@@' character to @code{\letter}, so that you can use or define -macros which are normally inaccessible to the user. For such -situations, Eplain provides the @code{\makeatletter} -@findex makeatletter -command. It sets the category code of `@@' to @code{\letter} (11) and -defines -@code{\resetatcatcode} -@findex resetatcatcode -to restore the category code to whatever it was before the call to -@code{\makeatletter}. For example: - -@example -\makeatletter -\def\@@hidden@@macro@{This macro cannot normally be - called / redefined by the user@} -\resetatcatcode -@end example - -@noindent There is also @code{\makeatother} -@findex makeatother -which works similarly but sets the category code of `@@' to -@code{\other} (12). - -Usually, when you give a definition to an active character, you have -to do so inside a group where you temporarily make the character active, -and then give it a global definition (cf.@: the definition of -@code{\obeyspaces} in @cite{The @TeX{}book}). -@cindex definitions, global -This is inconvenient if you are writing a long macro, or if the -character already has a global definition you do not wish to transcend. -Eplain provides @code{\letreturn}, which defines the usual end-of-line -@findex letreturn -@cindex return character -character to be the argument. For example: - -@example -\def\mymacro@{@dots{} \letreturn\myreturn @dots{} @} -\mymacro hello -there -@end example - -@noindent The end-of-line between @samp{hello} and @samp{there} causes -@code{\myreturn} to be expanded. - -@cite{The @TeX{}book} describes @code{\uncatcodespecials}, -@findex uncatcodespecials -which makes all characters which are normally ``special'' into ``other'' -characters, but the definition never made it into plain @TeX{}. -Eplain therefore defines it. - -Finally, @code{\percentchar} -@findex percentchar -expands into a literal `%' character. This is useful when you -@code{\write} @TeX{} output to a file, and want to avoid spurious -spaces. For example, Eplain writes a @code{\percentchar} after the -definition of cross-references. The macros @code{\lbracechar} -@findex lbracechar -and @code{\rbracechar} -@findex rbracechar -expand similarly. - - -@node Allocation macros -@section Allocation macros - -@cindex allocation macros -@cindex register allocation - -Plain @TeX{} provides macros that allocate registers of each primitive -type in @TeX{}, to prevent different sets of macros from using the same -register for two different things. The macros are all named starting -with @samp{new}, -@findex new@dots{} -e.g., @code{\newcount} allocates a new ``count'' -(integer) register. Such allocations are usually needed only at the top -level of some macro definition file; therefore, plain @TeX{} makes the -allocation registers @code{\outer}, -@findex outer -to help find errors. (The error this helps to find is a missing right -brace in some macro definition.) - -Sometimes, however, it is useful to allocate a register as part of -some macro. An outer control sequence cannot be used as part of a macro -definition (or in a few other contexts: the parameter text of a -definition, an argument to a definition, the preamble of an alignment, -or in conditional text that is being skipped). Therefore, Eplain -defines ``inner'' versions of all the allocation macros, named with the -prefix @samp{inner}: -@code{\innernewbox}, -@findex innernewbox -@code{\innernewcount}, -@findex innernewcount -@code{\innernewdimen}, -@findex innernewdimen -@code{\innernewfam}, -@findex innernewfam -@code{\innernewhelp}, -@findex innernewhelp -@code{\innernewif}, -@findex innernewif -@code{\innernewinsert}, -@findex innernewinsert -@code{\innernewlanguage}, -@findex innernewlanguage -@code{\innernewread},@* -@findex innernewread -@code{\innernewskip}, -@findex innernewskip -@code{\innernewtoks}, -@findex innernewtoks -@code{\innernewwrite}. -@findex innernewwrite - -You can also define non-outer versions of other macros in the same way -that Eplain defines the above. The basic macro is called -@code{\innerdef}: -@findex innerdef - -@example -\innerdef @var{\innername} @{@var{outername}@} -@end example - -The first argument (@var{\innername}) to @code{\innerdef} is the -control sequence that you want to define. Any previous definition of -@var{\innername} is replaced. The second argument -(@var{outername}) is the @emph{characters} in the name of the outer -control sequence. (You can't use the actual control sequence name, -since it's outer!) - -If the outer control sequence is named @var{\cs}, and you want to -define @code{inner@var{cs}} as the inner one, you can use -@code{\innerinnerdef}, -@findex innerinnerdef -which is just an abbreviation for a call to @code{\innerdef}. For -example, these two calls are equivalent: - -@example -\innerdef\innerproclaim@{proclaim@} -\innerinnerdef@{proclaim@} -@end example - - -@node Iteration -@section Iteration - -@cindex iteration -@cindex for loops - -You can iterate through a comma-separated list of items with -@code{\for}. -@findex for -Here is an example: - -@example -\for\name:=karl,kathy\do@{% - \message@{\name@}% -@}% -@end example - -This writes @samp{karl} and @samp{kathy} to the terminal. Spaces -before or after the commas in the list, or after the @code{:=}, are -@emph{not} ignored. - -@code{\for} expands the iterated values fully (with @code{\edef}), so -this is equivalent to the above: - -@example -\def\namelist@{karl,kathy@}% -\for\name:=\namelist\do @dots{} -@end example - - -@node Macro arguments -@section Macro arguments - -@cindex arguments, ignoring -@cindex ignoring arguments -@cindex gobbling arguments -It is occasionally useful to redefine a macro that takes arguments to -do nothing. Eplain defines @code{\gobble}, -@findex gobble -@code{\gobbletwo}, -@findex gobbletwo -and @code{\gobblethree} to swallow one, two, and three arguments, -respectively. - -For example, if you want to produce a ``short'' table of -@cindex table of contents, short -contents---one that includes only chapters, say---the easiest thing to -do is read the entire @code{.toc} file (@pxref{Contents}), and just -ignore the commands that produce section or subsection entries. To be -specific: - -@example -\let\tocchapterentry = \shorttocchapter -\let\tocsectionentry = \gobbletwo -\let\tocsubsectionentry = \gobbletwo -\readtocfile -@end example -@noindent (Of course, this assumes you only have chapters, sections, and -subsections in your document.) - -In addition, Eplain defines @code{\eattoken} -@findex eattoken -to swallow the single following token, using @code{\let}. Thus, -@code{\gobble} followed by @samp{@{@dots{}@}} ignores the entire -brace-enclosed text. @code{\eattoken} followed by the same ignores only -the opening left brace. - -Eplain defines a macro @code{\identity} -@findex identity -which takes one argument and expands to that argument. This may be -useful if you want to provide a function for the user to redefine, but -don't need to do anything by default. (For example, the default -definition of @code{\eqconstruct} (@pxref{Formatting equation -references}) is @code{\identity}.) - -You may also want to read an optional argument. The established -convention is that optional arguments are put in square brackets, so -that is the syntax Eplain recognizes. Eplain ignores space tokens -before an optional argument, via @code{\futurenonspacelet}. - -You test for an optional argument by using @code{\@@getoptionalarg}. -@c this confuses texinfo.tex: findex @@getoptionalarg -It takes one argument, a control sequence to expand after reading the -argument, if present. If an optional argument is present, the control -sequence @code{\@@optionalarg} expands to it; otherwise, -@code{\@@optionalarg} is @code{\empty}. You must therefore have the -category code of @kbd{@@} set to 11 (letter). Here is an example: - -@example -\catcode`@@=\letter -\def\cmd@{\@@getoptionalarg\finishcmd@} -\def\finishcmd@{% - \ifx\@@optionalarg\empty - % @r{No optional argument present.} - \else - % @r{One was present.} - \fi -@} -@end example - -If an optional argument contains another optional argument, the inner -one will need to be enclosed in braces, so @TeX{} does not mistake the -end of the first for the end of the second. - - -@node Converting to characters -@section Converting to characters - -@cindex characters, converting to -Eplain defines @code{\xrlabel} -@findex xrlabel -to produce control sequence names for cross-reference labels, et al. -This macro expands to its argument with an @samp{_} appended. (It does -this because the usual use of @code{\xrlabel} is to generate a control -sequence name, and we naturally want to avoid conflicts between control -sequence names.) - -Because @code{\xrlabel} is fully expandable, to make a control -sequence name out of the result you need only do -@example -@code{\csname \xrlabel@{@var{label}@}\endcsname} -@end example - -@noindent The @code{\csname} primitive makes a control sequence name out -of any sequence of character tokens, regardless of category code. -Labels can therefore include any characters except for @samp{\}, -@samp{@{}, @samp{@}}, and @samp{#}, all of which are used in macro -definitions themselves. - -@findex sanitize -@code{\sanitize} takes a control sequence as an argument and converts -the expansion of the control sequence into a list of character tokens. -This is the behavior you want when writing information like chapter -titles to an output file. For example, here is part of the definition -of @code{\writenumberedtocentry}; @code{#2} is the title that the user -has given. - -@example -@dots{} -\def\temp@{#2@}% -@dots{} - \write\tocfile@{% - @dots{} - \sanitize\temp - @dots{} - @}% -@end example - - -@node Expansion -@section Expansion - -This section describes some miscellanous macros for expansion, etc. - -@menu -* \csn and \ece:: Abbreviations for \csname expansions. -* \edefappend:: -* Hooks:: Manipulating and executing named actions. -* Properties:: Associating information with a csname. -* \expandonce:: -* \ifundefined:: -* \futurenonspacelet:: -@end menu - - -@node \csn and \ece -@subsection @code{\csn} and @code{\ece} - -@findex csn -@code{\csn}@{@var{name}@} simply abbreviates @code{\csname} @var{name} -@code{\endcsname}, thus saving some typing. The extra level of expansion -does take some time, though, so I don't recommend it for an inner loop. - -@findex ece -@code{\ece}@{@var{token}@}@{@var{name}@} abbreviates - -@example -\expandafter @var{token} \csname @var{name} \endcsname -@end example - -@noindent For example, - -@example -\def\fontabbrevdef#1#2@{\ece\def@{@@#1font@}@{#2@}@} -\fontabbrevdef@{normal@}@{ptmr@} -@end example - -@noindent defines a control sequence @code{\@@normalfont} to expand to -@code{ptmr}. - - -@node \edefappend -@subsection @code{\edefappend} - -@findex edefappend -@code{\edefappend} is a way of adding on to an existing definition. It -takes two arguments: the first is the control sequence name, the second -the new tokens to append to the definition. The second argument is -fully expanded (in the @code{\edef} that redefines the control sequence). - -For example: - -@example -\def\foo@{abc@} -\def\bar@{xyz@} -\edefappend\foo@{\bar karl@} -@end example - -@noindent results in @code{\foo} being defined as @samp{abcxyzkarl}. - - -@node Hooks -@subsection Hooks - -@cindex hooks -A @dfn{hook} is simply a name for a group of actions which is executed -in certain places---presumably when it is most useful to allow -customization or modification. @TeX{} already provides many builtin -hooks; for example, the @code{\every @dots{}} token lists are all -examples of hooks. - -Eplain provides several macros for adding actions to hooks. They all -take two arguments: the name of the hook and the new actions. - -@table @code - -@findex hookaction -@itemx hookaction @var{name} @var{actions} -@findex hookappend -@itemx hookappend @var{name} @var{actions} -@findex hookprepend -@item hookprepend @var{name} @var{actions} -Each of these adds @var{actions} to the hook @var{name}. (Any -previously-defined actions are retained.) @var{name} is not a control -sequence, but rather the characters of the name. - -@findex hookactiononce -@item hookactiononce @var{name} @code{\@var{cs}} -@code{\hookactiononce} adds @var{cs} to @var{name}, like the macros -above, but first it adds - -@example -\global\let @var{\cs} \relax -@end example - -@noindent to the definition of @var{\cs}. (This implies @var{\cs} must -be a true expandable macro, not a control sequence @code{\let} to a -primitive or some other such thing.) Thus, @var{\cs} is expanded the -next time the hook @var{name} is run, but it will disappear after that. - -The @code{\global} is useful because @code{\hookactiononce} is most -useful when the grouping structure of the @TeX{} code could be anything. -Neither this nor the other hook macros do global assignments to the hook -variable itself, so @TeX{}'s usual grouping rules apply. -@end table - -@findex hookrun -The companion macro to defining hook actions is @code{\hookrun}, for -running them. This takes a single argument, the name of the hook. If -no actions for the hook are defined, no error ensues. - -Here is a skeleton of general @code{\begin} and @code{\end} macros that -run hooks, and a couple of calls to define actions. The use of -@code{\hookprepend} for the begin action and @code{\hookappend} for the -end action ensures that the actions are executed in proper sequence with -other actions (as long as the other actions use @code{\hookprepend} and -@code{\hookappend} also). - -@example -\def\begin#1@{ @dots{} \hookrun@{begin@} @dots{} @} -\def\end#1@{ @dots{} \hookrun@{end@} @dots{} @} -\hookprepend@{begin@}\start_underline -\hookappend@{end@}\finish_underline -@end example - - -@node Properties -@subsection Properties - -@cindex properties -@cindex atom -A @dfn{property} is a name/value pair associated with another symbol, -traditionally called an @dfn{atom}. Both atom and property names are -control sequence names. - -Eplain provides two macros for dealing with property lists: -@code{\setproperty} and @code{\getproperty}. - -@table @code - -@findex setproperty -@item \setproperty @var{atom} @var{propname} @var{value} -@code{\setproperty} defines the property @var{property} on the atom -@var{atom} to be @var{value}. @var{atom} and @var{propname} can be -anything acceptable to @code{\csname}. @var{value} can be anything. - -@findex getproperty -@item \getproperty @var{atom} @var{propname} -@code{\getproperty} expands to the value stored for @var{propname} on -@var{atom}. If @var{propname} is undefined, it expands to nothing -(i.e., @code{\empty}). - -@end table - -The idea of properties originated in Lisp (I believe). There, the -implementation truly does associate properties with atoms. In @TeX{}, -where we have no builtin support for properties, the association is only -conceptual. - -The following example typesets @samp{xyz}. - -@example -\setproperty@{a@}@{pr@}@{xyz@} -\getproperty@{a@}@{pr@} -@end example - - -@node \expandonce -@subsection @code{\expandonce} - -@cindex expansion, one-level -@findex expandonce -@code{\expandonce} is defined as @code{\expandafter\noexpand}. Thus, -@code{\expandonce @var{token}} expands @var{token} once, instead of to -@TeX{} primitives. This is most useful in an @code{\edef}. - -For example, the following defines @code{\temp} to be @code{\foo}, not -@samp{abc}. - -@example -\def\foo@{abc@} -\def\bar@{\foo@} -\edef\temp@{\expandonce\bar@} -@end example - - -@node \ifundefined -@subsection @code{\ifundefined} - -@findex ifundefined -@code{\ifundefined@{@var{cs}@} @var{t} \else @var{f} \fi} expands the -@var{t} text if the control sequence @code{\@var{cs}} is undefined or -has been @code{\let} to @code{\relax}, and the @var{f} text otherwise. - -@cindex skipping tokens -@cindex undefined control sequence, checking for -Since @code{\ifundefined} is not a primitive conditional, it cannot be -used in places where @TeX{} might skip tokens ``at high speed'', e.g., -within another conditional---@TeX{} can't match up the @code{\if}'s and -@code{\fi}'s. - -This macro was taken directly from @cite{The @TeX{}book}, page 308. - - -@node \futurenonspacelet -@subsection @code{\futurenonspacelet} - -@cindex lookahead without spaces -@cindex spaces, ignoring -@findex futurenonspacelet -The @code{\futurelet} primitive allows you to look at the next token -from the input. Sometimes, though, you want to look ahead ignoring any -spaces. This is what @code{\futurenonspacelet} does. It is otherwise -the same as @code{\futurelet}: you give it two control sequences as -arguments, and it assigns the next nonspace token to the first, and then -expands the second. For example: - -@example -\futurenonspacelet\temp\finishup -\def\finishup@{\ifx\temp @dots{}@} -@end example - - -@node Obeying spaces -@section Obeying spaces - -@cindex whitespace -@cindex spaces, obeying -@cindex newlines, obeying -@findex obeywhitespace - -@code{\obeywhitespace} makes both end-of-lines and space characters in -the input be respected in the output. Unlike plain @TeX{}'s -@code{\obeyspaces}, even spaces at the beginnings of lines turn into -blank space. - -By default, the size of the space that is produced by a space -character is the natural space of the current font, i.e., -what @code{\ } produces. - -Ordinarily, a blank line in the input produces as much blank vertical -space as a line of text would occupy. You can adjust this by assigning -to the parameter @code{\blanklineskipamount}: -@findex blanklineskipamount @r{in obeyed text} -if you set this negative, the space produced by a blank line will be -smaller; if positive, larger. - -Tabs are not affected by this routine. In particular, if tabs occur -at the beginning of a line, they will disappear. (If you are trying to -make @TeX{} do the ``right thing'' with tabs, don't. Use a utility -program like @i{expand} instead.) -@cindex tabs - - -@node Writing out numbers -@section Writing out numbers - -@cindex numbers, written form of - @code{\numbername} -@findex numbername -produces the written-out form of its argument, i.e., `zero' through -`ten' for the numbers 0--10, and numerals for all others. - - -@node Mode-specific penalties -@section Mode-specific penalties - -@TeX{}'s built-in @code{\penalty} command simply appends to the -current list, no matter what kind of list it is. You might intend a -particular penalty to always be a ``vertical'' penalty, however, i.e., -appended to a vertical list. Therefore, Eplain provides -@code{\vpenalty} -@findex vpenalty -and @code{\hpenalty} -which first leave the other mode and then do @code{\penalty}. - -More precisely, @code{\vpenalty} inserts @code{\par} if the current -mode is horizontal, and @code{\hpenalty} inserts @code{\leavevmode} if -the current mode is vertical. (Thus, @code{\vpenalty} cannot be used in -math mode.) - - -@node Auxiliary files -@section Auxiliary files - -@cindex axuiliary files, existence of -It is common to write some information out to a file to be used on a -subsequent run. But when it is time to read the file again, you only -want to do so if the file actually exists. @code{\testfileexistence} -@findex testfileexistence -is given an argument which is appended to @code{\jobname}, -@findex jobname -and sets the conditional @code{\iffileexists} -@findex iffileexists -@findex fileexists @r{(conditional)} -appropriately. For example: - -@example -\testfileexistence@{toc@}% -\iffileexists - \input \jobname.toc -\fi -@end example - -@code{\testfileexistence} takes an optional parameter; when -given, it will override @code{\jobname} for the root part of the file -name. For example, if you want to test for the file -@file{answers.aux}, you can do this with the following: - -@example -\testfileexistence[answers]@{aux@}% -\iffileexists - \input answers.aux -\fi -@end example - - -@node User-defined environments -@section User-defined environments - -@cindex environments, user-defined -Plain @TeX{} does not provide ``named'' block structures, only the anonymous -@code{\begingroup} and @code{\endgroup} pair. The disadvantage of this -is that when there are several such groups and one is mismatched, it can -be difficult to find the error. Eplain provides a named block structure -so that if you forget an @code{\environment} or an -@code{\endenvironment}, you will (probably) get an error message about -it. - -For example: - -@example -\def\itpar@{ - \environment@{@@italicpar@} - \it\par -@} -\def\enditpar@{ - \par - \endenvironment@{@@italicpar@}% -@} -@end example -@noindent which could then be used to set italicized paragraphs: -@example -\itpar -If I reprehend anything in this world, it is the use of my oracular -tongue, and a nice derangement of epitaphs! -\enditpar -@end example - -The above sort of environment allows nesting. But environments -shouldn't always be allowed to nest. Put the control sequence -@code{\checkenv} at the beginning of a macro that is going to define an -environment that should not be nested. - - -@node Page list and page range parsers -@section Page list and page range parsers - -@findex idxparselist -@findex idxparserange -@findex idxpagei -@findex idxpageii -The macros which Eplain uses to parse the page lists and ranges in the -index, @code{\idxparselist} and @code{\idxparserange} (@pxref{Page -destinations for index terms}), are sometimes useful when defining page -number encapsulators. They take one argument, text to parse. When a -page list (range) is not present, they set @code{\idxpagei} to be -@code{\empty}; when a list (range) is detected, they set -@code{\idxpagei} and @code{\idxpageii} to the first and the second page -numbers, respectively. - -@findex setidxpagelistdelimiter -@findex setidxpagerangedelimiter -Eplain's defaults for the page list and page range delimiters are the -same as those in MakeIndex, a comma followed by a space (@samp{, }) and -two dashes (@samp{--}), respectively. If you customize MakeIndex to use -different delimiters, you must not forget to let Eplain know about them -with the commands - -@example -\setidxpagelistdelimiter@{@var{list-delim}@} -\setidxpagerangedelimiter@{@var{page-delim}@} -@end example - -@noindent These commands save the @var{list-delim} and -@var{page-delim} delimiters in -@findex idxpagelistdelimiter -@findex idxpagerangedelimiter -@code{\idxpagelistdelimiter} and @code{\idxpagerangedelimiter}, -respectively. - -@cindex underlining page numbers in index -@cindex index, underlining page numbers -@findex ituline -For example, you may want to define a page number markup command which -italicizes and properly underlines page ranges by underlining only the -page numbers and not the delimiter: - -@findex idxpagerangedelimiter -@example -\def\ituline#1@{% - @{\it - \idxparserange@{#1@}% - \ifx\idxpagei\empty - % The argument is a single page number. - \underbar@{#1@}% - \else - % The argument is a page range. - \underbar@{\idxpagei@}\idxpagerangedelimiter\underbar@{\idxpageii@}% - \fi@}% -@} -@end example - -@noindent Note that the @code{\ituline} macro is not aware of page -lists. This is not needed if you use hyperlinks in the index, because -@code{\hlidx} and @code{\hlidxpage} will break up the page lists before -calling the user's page encapsulator (@pxref{Page destinations for index -terms}), so @code{\ituline} will never see the lists. If, however, you -need to design a macro which also takes care of the lists, you can -extend @code{\ituline} with an additional call to @code{\idxparselist}. diff --git a/Master/texmf-dist/doc/eplain/base/userdef.texi b/Master/texmf-dist/doc/eplain/base/userdef.texi deleted file mode 100644 index dfc5fcc4497..00000000000 --- a/Master/texmf-dist/doc/eplain/base/userdef.texi +++ /dev/null @@ -1,2538 +0,0 @@ -@c This is part of the Eplain manual. Public domain. - -@node User definitions -@chapter User definitions - -This chapter describes definitions that are meant to be used directly -in a document. When appropriate, ways to change the default -formatting are described in subsections. - -@menu -* Diagnostics:: Tracing information. -* Rules:: Changing the default rule dimensions. -* Citations:: Using BibTeX and Eplain to make bibliographies. -* Displays:: Changing the formatting of math displays. -* Time of day:: Producing the time of day. -* Lists:: Producing numbered and unordered lists. -* Verbatim listing:: Producing text just as it appears. -* Contents:: Making a table of contents. -* Cross-references:: Symbolic references to equations, figures, etc. -* Page references:: Symbolic references to page numbers. -* Equation references:: Symbolic references to equation numbers. -* Indexing:: Creating and typesetting indexes. -* Justification:: Ragged left, ragged right, centered. -* Tables:: Producing ordered tables. -* Margins:: Changing the margins directly. -* Multiple columns:: Getting output in two columns. -* Footnotes:: Autonumbered footnotes; changing formatting. -* Fractions:: A better way to produce fractions in text. -* Paths:: Allowing line breaks in pathnames. -* Logos:: Various logos. -* Boxes:: Producing filled or open rectangles. -* Checking for PDF output:: Checking for pdfTeX in PDF mode. -* Loading LaTeX packages:: Support for LaTeX packages under plain TeX. -@end menu - - -@node Diagnostics -@section Diagnostics - -@cindex diagnostics -@cindex tracing -Plain @TeX{} provides the @code{\tracingall} command, to turn on the -maximum amount of tracing possible in @TeX{}. The (usually voluminous) -output from @code{\tracingall} goes both on the terminal and into the -transcript file. -@findex tracingall -It is sometimes easier to have the output go only to the transcript -file, so you can peruse it at your leisure and not obscure other output -to the terminal. So, Eplain provides the command @code{\loggingall}. -@findex loggingall -(For some reason, this command is available in Metafont, but not in -@TeX{}.) - -It is also sometimes useful to see the complete contents of boxes. -@code{\tracingboxes} does this. (It doesn't affect whether or not the -contents -@findex tracingboxes -are shown on the terminal.) - -You can turn off all tracing with @code{\tracingoff}. -@findex tracingoff - -You can also turn logging on and off globally, so you don't have to -worry about whether or not you're inside a group at the time of command. -These variants are named @code{\gloggingall} -@findex gloggingall -and @code{\gtracingall}. -@findex gtracingall - -Finally, if you write your own help messages (see @code{\newhelp} -@cindex help messages -@cindex error messages -in @cite{The @TeX{}book}), you want a convenient way to break lines in -them. This is what @TeX{}'s @code{\newlinechar} parameter is for; -@cindex newlinechar -however, plain @TeX{} doesn't set @code{\newlinechar}. Therefore, -Eplain defines it to be the character @code{^^J}. - -For example, one of Eplain's own error messages is defined as follows: -@example -\newhelp\envhelp@{Perhaps you forgot to end the previous^^J% - environment? I'm finishing off the current group,^^J% - hoping that will fix it.@}% -@end example - - -@node Rules -@section Rules - -The default dimensions of rules are defined in chapter@tie{}21 of the -@cite{The @TeX{}book}. To sum up what is given there, the ``thickness'' -of rules is -@cindex rule thickness -0.4pt by default. Eplain defines three parameters that let you change -this dimension: @code{\hruledefaultheight}, @code{\hruledefaultdepth}, -@findex hruledefaultheight -@findex hruledefaultdepth -and @code{\vruledefaultwidth}. By default, they are defined as -@findex vruledefaultwidth -@cite{The @TeX{}book} describes. - -But it would be wrong to redefine @code{\hrule} and @code{\vrule}. For -one thing, some macros in plain @TeX{} depend on the default dimensions -being used; for another, rules are used quite heavily, and the -performance impact of making it a macro can be noticeable. Therefore, -to take advantage of the default rule parameters, you must use -@code{\ehrule} -@findex ehrule -and @code{\evrule}. -@findex evrule - - -@node Citations -@section Citations - -@cindex citations -@cindex bibliographies -Bibliographies are part of almost every technical document. To handle -them easily, you need two things: a program to do the tedious -formatting, and a way to cite references by labels, rather than by -numbers. The Bib@TeX{} program, written by Oren Patashnik, takes care -@cindex Bib@TeX{} -@cindex Patashnik, Oren -of the first item; the citation commands in @LaTeX{}, written to be used -@cindex @LaTeX{} -with Bib@TeX{}, take care of the second. Therefore, -Eplain adopts the use of Bib@TeX{}, and virtually the same interface as -@LaTeX{}. - -The general idea is that you put citation commands in the text of your -document, and commands saying where the bibliography data is. When you -run @TeX{}, these commands produce output on the file with the same root -name as your document (by default) and the extension @file{.aux}. -@pindex .aux @r{file} -@findex jobname -Bib@TeX{} reads this file. You should put the bibliography data in a -file or files with the extension @file{.bib}. Bib@TeX{} writes out a -file with the same root -@pindex .bib @r{file} -name as your document and extension @file{.bbl}. Eplain reads this file -@pindex .bbl @r{file} -the next time you run your document through @TeX{}. (It takes -multiple passes to get everything straight, because usually after seeing -your bibliography typeset, you want to make changes in the @file{.bib} -file, which means you have to run Bib@TeX{} again, which means you have -to run @TeX{} again@dots{}) An annotated example of the whole process is -given below. - -If your document has more than one bibliography---for example, if it -is a collection of papers---you can tell Eplain to use a different root -name for the @file{.bbl} file by defining the control sequence -@code{\bblfilebasename}. -@findex bblfilebasename -The default definition is simply @code{\jobname}. - -See the document @cite{Bib@TeX{}ing} (whose text is in the file -@file{btxdoc.tex}, which should be in the Eplain distribution you got) -for information on how to write your @t{.bib} files. Both the -Bib@TeX{} and the Eplain distributions contain several examples, also. - -The @code{\cite} -@findex cite -command produces a citation in the text of your document. The exact -printed form the citation will take is under your control; -@pxref{Formatting citations}. @code{\cite} takes one -required argument, a comma-separated list of cross-reference labels -(@pxref{Cross-references}, for exactly what characters are allowed in -such labels). Warning: spaces in this list are taken as part of the -following label name, which is probably not what you expect. -@cindex citations, undefined -The @code{\cite} command also produces a command -in the @t{.aux} file that tells Bib@TeX{} to retrieve the given reference(s) -from the @t{.bib} file. @code{\cite} also takes one optional argument, -which you specify within square brackets, as in @LaTeX{}. This text is -simply typeset after the citations. (See the example below.) - -Eplain can create hypertext links for citations pointing to the relevant -bibliography entries; @pxref{Citation hyperlinks}. - -Another command, @code{\nocite}, -@findex nocite -puts the given reference(s) into the bibliography, but produces nothing -in the text. - -The @code{\bibliography} -@findex bibliography -command is next. It serves two purposes: producing the typeset -bibliography, and telling Bib@TeX{} the root names of the @t{.bib} -files. Therefore, the argument to @code{\bibliography} is a comma -separated list of the @t{.bib} files (without the @samp{.bib}). Again, -spaces in this list are significant. - -You tell Bib@TeX{} the particular style in which you want your -bibliography typeset with one more command: -@code{\bibliographystyle}. -@findex bibliographystyle -The argument to this is a single filename @var{style}, which tells -Bib@TeX{} to look for a file @var{style}@t{.bst}. -@pindex .bst @r{files} -See the document @cite{Designing Bib@TeX{} styles} (whose text is in the -@file{btxhak.tex}) for information on how to write your own styles. - -Eplain automatically reads the citations from the @t{.aux} file when -your job starts. - -If you don't want to see the messages about undefined citations, you -can say @code{\xrefwarningfalse} before making any citations. -@findex xrefwarningfalse -Eplain automatically does this if the @t{.aux} file does not exist. -You can restore the default by saying @code{\xrefwarningtrue}. - -Here is a @TeX{} input file that illustrates the various commands. - -@example -\input eplain % Reads the .aux file. -Two citations to Knuthian works: - \cite[note]@{surreal,concrete-math@}. -\beginsection@{References.@}\par % Title for the bibliography. -\bibliography@{knuth@} % Use knuth.bib for the labels. -\bibliographystyle@{plain@} % Number the references. -\end % End of the document. -@end example -@cindex Knuth, Donald Ervin -@cindex Graham, Ronald L. -@cindex numbered references -@cindex references, numbered - -If we suppose that this file was named @file{citex.tex} and that the -bibliography data is in @file{knuth.bib} (as the @code{\bibliography} -command says), the following commands do what's required. (@samp{$ } -represents the shell prompt.) - -@example -$ tex citex (produces undefined citation messages) -$ bibtex citex (read knuth.bib and citex.aux, write citex.bbl) -$ tex citex (read citex.bbl, still have undefined citations) -$ tex citex (one more time, to resolve the references) -@end example - -@pindex texi2dvi -@noindent (The @command{texi2dvi} program can help you automate this -process, @pxref{Invoking Eplain}.) - -The output looks something like (because we used the @t{plain} -bibliography style): - -@quotation -Two citations to Knuthian works: [2,1 note]. - -@b{References} -@tex -@frenchspacing -@end tex - -[1] Ronald L. Graham, Donald E. Knuth, and Oren Patashnik. @i{Concrete -Mathematics}. Addison-Wesley, Reading, Massachusetts, 1989. - -[2] Donald E. Knuth. @i{Surreal Numbers}. Addison-Wesley, Reading, -Massachusetts, 1974. -@end quotation - -See the Bib@TeX{} documentation for information on how to write the -bibliography databases, and the bibliography styles that are available. -(If you want your references printed with names, as in [Knu74], instead -of numbered, the bibliography style is @code{alpha}.) -@cindex alphanumeric references -@cindex references, alphanumeric - -@menu -* Formatting citations:: Changing the way citations are printed. -* Formatting bibliographies:: Changing the way bibliographies are printed. -@end menu - - -@node Formatting citations -@subsection Formatting citations - -@cindex citations, formatting - -You may wish to change Eplain's formatting of citations; i.e., the -result of your @code{\cite} commands. By default, the citation labels -are printed one after another, separated by commas and enclosed in -brackets, using the main text font. Some formats require other styles, -such as superscripted labels. You can accomodate such formats by -redefining the following macros. - -@table @code -@itemx \printcitestart -@item \printcitefinish -@findex printcitestart -@findex printcitefinish -Eplain expands these macros at the begining and end of the list of -citations for each @code{\cite} command. By default, they produce a -@samp{[} and @samp{]}, respectively. - -@item \printbetweencitations -@findex printbetweencitations -If a @code{\cite} command has multiple citations, as in -@code{\cite@{acp,texbook@}}, Eplain expands this macro in between each -pair of citations. By default, it produces a comma followed by a space. - -@item \printcitenote -@findex printcitenote -This macro takes one argument, which is the optional note to the -@code{\cite} command. If the @code{\cite} command had no note, this -macro isn't used. Otherwise, it should print the note. By default, the -note is preceded with a comma and a space. -@end table - - -Here is an example, showing you could produce citations as -superscripted labels, with the optional notes in parentheses. - -@example -\def\printcitestart@{\unskip $^\bgroup@} -\def\printbetweencitations@{,@} -\def\printcitefinish@{\egroup$@} -\def\printcitenote#1@{\hbox@{\sevenrm\space (#1)@}@} -@end example - - -@node Formatting bibliographies -@subsection Formatting bibliographies - -@cindex bibliography, formatting the - -You may wish to change Eplain's formatting of the bibliography, -especially with respect to the fonts that are used. Therefore, Eplain -provides the following control sequences: - -@table @code - -@item \biblabelwidth -@findex biblabelwidth -This control sequence represents a @code{\dimen} register, and its value -is the width of the widest label in the bibliography. Although it is -unlikely you will ever want to redefine it, you might want -to use it if you redefine @code{\biblabelprint}, below. - -@item \biblabelprint -@findex biblabelprint -This macro takes one argument, the label to print. By default, the -label is put in a box of width @code{\biblabelwidth}, and is followed by -an enspace. When you want to change the spacing around the labels, this -is the right macro to redefine. - -@item \biblabelcontents -@findex biblabelcontents -This macro also takes one argument, the label to print. By default, the -label is printed using the font @code{\bblrm} (below), and enclosed in -brackets. When you want to change the appearance of the label, but not -the spacing around it, this is the right macro to redefine. - -@item \bblrm -@findex bblrm -@cindex bibliography fonts -The default font used for printing the bibliography. - -@item \bblem -@findex bblem -The font used for printing the titles and other ``emphasized'' material. - -@item \bblsc -@findex bblsc -In some styles, authors' names are printed in a caps-and-small-caps -font. In those cases, this font is used. - -@item \bblnewblock -@findex bblnewblock -This is invoked between each of the parts of a bibliography entry. The -default is to leave some extra space between the parts; you could -redefine it to start each part on a new line (for example). A part is -simply a main element of the entry; for example, the author is a part. -(It was @LaTeX{} that introduced the (misleading, as far as I am -concerned) term `block' for this.) - -@item \biblabelextraspace -@findex biblabelextraspace -Bibliography entries are typeset with a hanging indentation of -@code{\biblabelwidth} plus this. The default is @code{.5em}, where the -em width is taken from the @code{\bblrm} font. If you want to change -this, you should do it inside @code{\bblhook}. - -@item \bblhook -@findex bblhook -@cindex bibliography items, extra space between -This is expanded before reading the @t{.bbl} file. By -default, it does nothing. You could, for example, define it to set the -bibliography fonts, or produce the heading for the references. Two -spacing parameters must be changed inside @code{\bblhook}: -@code{\parskip}, which produces extra space between the items; and -@code{\biblabelextraspace}, which is described above. -(By the way, @code{\hookappend} won't work with @code{\bblhook}, despite -the names. Just use @code{\def}.) - -@end table - -If you are really desperate, you can also hand-edit the @t{.bbl} file -that Bib@TeX{} produces to do anything you wish. - - -@node Displays -@section Displays - -@cindex displays, left-justifying -@cindex mathematics displays, formatting -@cindex left-justification of displays - -By default, @TeX{} centers displayed material. (Displayed material is -just whatever you put between @code{$$}'s---it's not necessarily -mathematics.) Many layouts would be better served if the displayed -material was left-justified. Therefore, Eplain provides the command -@code{\leftdisplays}, -@findex leftdisplays -which indents displayed material by @code{\parindent} plus -@code{\leftskip}, plus @code{\leftdisplayindent}. -@findex leftdisplayindent - -You can go back to centering displays with @code{\centereddisplays}. -@findex centereddisplays -(It is usually poor typography to have both centered and left-justified -displays in a single publication, though.) - -@code{\leftdisplays} also changes the plain @TeX{} commands that deal -with alignments inside math displays, -@code{\displaylines}, -@findex displaylines -@code{\eqalignno}, -@findex eqalignno -and @code{\leqalignno}, -@findex leqalignno -to produce left-justified text. You can still override this formatting -by inserting @code{\hfill} glue, as explained in @cite{The @TeX{}book}. - -@menu -* Formatting displays:: General formatting of displays. -@end menu - - -@node Formatting displays -@subsection Formatting displays - -If you want some other kind of formatting, you can write a definition -of your own, analogous to @code{\leftdisplays}. You need only make sure -that @code{\leftdisplaysetup} -@findex leftdisplaysetup -is called at the beginning of every display (presumably by invoking it -in @TeX{}'s @code{\everydisplay} parameter), and to define -@code{\generaldisplay}. -@findex generaldisplay - -@code{\leftdisplays} expands the old value of @code{\everydisplay} -before calling @code{\leftdisplaysetup}, so that any changes you have made -to it won't be lost. That old token list as available as the value of -the token register @code{\previouseverydisplay}. -@findex previouseverydisplay - - -@node Time of day -@section Time of day - -@cindex time of day -@cindex date - -@TeX{} provides the day, month, and year as numeric quantities (unless -your @TeX{} implementation is woefully deficient). Eplain provides some -control sequences to make them a little more friendly to humans. - -@code{\monthname} -@findex monthname -produces the name of the current month, abbreviated to three letters. - -@code{\fullmonthname} -@findex fullmonthname -produces the name of the current month, unabbreviated (in English). - -@code{\timestring} -@findex timestring -produces the current time, as in `1:14 p.m.' - -@code{\timestamp} -@findex timestamp -produces the current date and time, as in `23 Apr 64 1:14 p.m.'. -(Except the spacing is slightly different.) - -@code{\today} -@findex today -produces the current date, as in `23 April 1964'. - - -@node Lists -@section Lists - -@cindex lists -@cindex numbered lists -@cindex ordered list -@cindex unordered lists - -Many documents require lists of items, either numbered or simply -enumerated. Plain @TeX{} defines one macro to help with creating lists, -@code{\item}, but that is insufficient in many cases. Therefore, -Eplain provides two pairs of commands: - -@table @code - -@itemx \numberedlist @dots{} \endnumberedlist -@item \orderedlist @dots{} \endorderedlist -@findex numberedlist -@findex endnumberedlist -@findex orderedlist -@findex endorderedlist -These commands (they are synonyms) produce a list with the items -numbered sequentially, starting from one. A nested @code{\numberedlist} -labels the items with lowercase letters, starting with `a'. Another -nested @code{\numberedlist} labels the items with roman numerals. Yet -more deeply nested numbered lists label items with @samp{*}. - -@item \unorderedlist @dots{} \endunorderedlist -@findex unorderedlist -@findex endunorderedlist -This produces a list with the items labelled with small black boxes -(``square bullets''). A nested @code{\unorderedlist} labels items with -em-dashes. Doubly (and deeper) nested unordered lists label items with -`*'s. - -@end table - -The two kinds of lists can be nested within each other, as well. - -In both kinds of lists, you begin an item with @code{\li}. -@findex li -An item may continue for several paragraphs. Each item starts a -paragraph. - -You can give @code{\li} an optional argument, a cross-reference label. -It's defined to be the ``marker'' for the current item. This is useful -if the list items are numbered. You can produce the value of the label -with @code{\xrefn}. @xref{Cross-references}. - -Eplain can create hypertext links for the markers produced by -@code{\xrefn} pointing to the relevant list item; @pxref{List -hyperlinks}. - -You can also say @code{\listcompact} -@findex listcompact -right after @code{\numberedlist} or @code{\unorderedlist}. The items in -the list will then not have any extra space between them -(@pxref{Formatting lists}). You might want to do this if the items in -this particular list are short. - -Here is an example: -@example -\numberedlist\listcompact -\li The first item. -\li The second item. - -The second paragraph of the second item. -\endnumberedlist -@end example - -@menu -* Formatting lists:: Changing how the lists look. -@end menu - - -@node Formatting lists -@subsection Formatting lists - -@cindex lists, formatting - -Several registers define the spacing associated with lists. It is -likely that their default values won't suit your particular layout. - -@table @code -@item \abovelistskipamount, \belowlistskipamount -@findex abovelistskipamount -@findex belowlistskipamount -The vertical glue inserted before and after every list, respectively. - -@item \interitemskipamount -@findex interitemskipamount -The vertical glue inserted before each item except the first. -@code{\listcompact} resets this to zero, as mentioned above. - -@item \listleftindent, \listrightindent -@findex listleftindent -@findex listrightindent -@code{\listrightindent} is the amount of space by which the list is -indented on the right; i.e., it is added to @code{\rightskip}. -@code{\listleftindent} is the amount of space, @emph{relative to} -@code{\parindent}, by which the list is indented on the left. Why treat -the two parameters differently? Because (a)@tie{}it is more useful to -make the list indentation depend on the paragraph indentation; -(b)@tie{}footnotes aren't formatted right if @code{\parindent} is reset -to zero. - -@end table - -The three vertical glues are inserted by macros, and preceded by -penalties: @code{\abovelistskip} -@findex abovelistskip -does @code{\vpenalty\abovelistpenalty} -@findex abovelistpenalty -and then @code{\vskip\abovelistskip}. @code{\belowlistskip} -@findex belowlistskip -and @code{\interitemskip} -@findex interitemskip -are analogous. - -In addition, the macro @code{\listmarkerspace} -@findex listmarkerspace -is called to separate the item label from the item text. This is set to -@code{\enspace} by default. - -If you want to change the labels on the items, you can redefine these -macros: -@code{\numberedmarker} -@findex numberedmarker -or @code{\unorderedmarker}. -@findex unorderedmarker -The following registers might be useful if you do: - -@table @code -@item \numberedlistdepth, \unorderedlistdepth -@findex numberedlistdepth -@findex unorderedlistdepth -These keep track of the depth of nesting of the two kinds of lists. - -@item \itemnumber, \itemletter -@findex itemnumber -@findex itemletter -These keep track of the number of items that have been seen in the current -numbered list. They are both integer registers. The difference is that -@code{\itemnumber} starts at one, and @code{\itemletter} starts at 97, -i.e., lowercase `a'. - -@end table - -You can also redefine the control sequences that are used internally, -if you want to do something radically different: @code{\beginlist} -@findex beginlist -is invoked to begin both kinds of lists; @code{\printitem} -@findex printitem -is invoked to print the label (and space following the label) for each -item; and @code{\endlist} -@findex endlist -is invoked to end both kinds of -lists. -@cindex item labels, changing -@cindex labels on items, changing - - -@node Verbatim listing -@section Verbatim listing - -@cindex verbatim listing -@cindex listing files -@cindex files, verbatim listing of -It is sometimes useful to include a file verbatim in your document; -for example, part of a computer program. The @code{\listing} -@findex listing -command is given one argument, a filename, and produces the contents of -that file in your document. @code{\listing} expands @code{\listingfont} -to set the current font. The default value of @code{\listingfont} -@findex listingfont -is @code{\tt}. - -You can take arbitrary actions before reading the file by defining the macro -@code{\setuplistinghook}. -@findex setuplistinghook -This is expanded just before the file is input. - -If you want to have line numbers on the output, you can say -@code{\let\setuplistinghook = \linenumberedlisting}. -@findex linenumberedlisting -The line numbers are stored in the count register @code{\lineno} while -the file is being read. You can redefine the macro -@code{\printlistinglineno} to change how they are printed. - -You can produce in-line verbatim text in your document with @code{\verbatim}. -@findex verbatim -End the text with @code{|endverbatim}. If you need a @samp{|} in the text, -double it. If the first character of the verbatim text is a space, use -@code{| }. (@code{| } will work elsewhere in the argument, too, but -isn't necessary.) - -For example: - -@example -\verbatim| ||\#%&!|endverbatim -@end example - -@noindent produces @code{ |\#%&!}. - -Line breaks and spaces in the verbatim text are preserved. - -@findex verbatimescapechar -@cindex escape character, changing verbatim -You can change the verbatim escape character from the default @samp{|} -with @code{\verbatimescapechar @var{char}}; for example, this changes -it to @samp{@@}. - -@example -\verbatimescapechar \@@ -@end example - -@noindent The backslash is not necessary in some cases, but is in -others, depending on the catcode of the character. The argument to -@code{\verbatimescapechar} is used as @code{\catcode `@var{char}}, so -the exact rules follow that for @code{\catcode}. - -Because @code{\verbatim} must change the category code of special -characters, calling inside a macro definition of your own does not work -properly. For example: - -@example -\def\mymacro@{\verbatim &#%|endverbatim@}% Doesn't work! -@end example - -To accomplish this, you must change the category codes yourself before -making the macro definition. Perhaps @code{\uncatcodespecials} will -help you (@pxref{Category codes}). - - -@node Contents -@section Contents - -@cindex table of contents -@cindex contents - -Producing a table of contents that is both useful and aesthetic is one -of the most difficult design problems in any work. Naturally, Eplain -does not pretend to solve the design problem. Collecting the raw data -for a table of contents, however, is much the same across documents. -Eplain uses an auxiliary file with extension @file{.toc} -@pindex .toc @r{file} -(and the same root name as your document) to save the information. - -To write an entry for the table of contents, you say -@code{\writetocentry@{@var{part}@}@{@var{text}@}}, -@findex writetocentry -where @var{part} is the type of part this entry is, e.g., -@samp{chapter}, and @var{text} is the text of the title. -@code{\writetocentry} puts an entry into the @t{.toc} file that looks -@findex toc@dots{}entry -like @code{\toc@var{part}entry@{@var{text}@}@{@var{page number}@}}. The -@var{text} is written unexpanded. - -@findex writenumberedtocentry -A related command, @code{\writenumberedtocentry}, takes one additional -argument, the first token of which is expanded at the point of the -@code{\writenumberedtocentry}, but the rest of the argument is not -expanded. The usual application is when the parts of the document are -numbered. On the other hand, the one-level expansion allows you to use -the argument for other things as well (author's names in a proceedings, -say), and not have accents or other control sequences expanded. The -downside is that if you @emph{want} full expansion of the third -argument, you don't get it---you must expand it yourself, before you -call @code{\writenumberedtocentry}. - -For example: - -@example -\writenumberedtocentry@{chapter@}@{A $\sin$ wave@}@{\the\chapno@} -\writetocentry@{section@}@{A section title@} -@end example - -@noindent Supposing @code{\the\chapno} expanded to @samp{3} and that the -@code{\write}'s occurred on pages eight and nine, respectively, the -above writes the following to the @t{.toc} file: - -@example -\tocchapterentry@{A $\sin$ wave@}@{3@}@{8@} -\tocsectionentry@{A section title@}@{9@} -@end example - -@findex readtocfile -You read the @t{.toc} file with the command @code{\readtocfile}. -Naturally, whatever @code{\toc@dots{} entry} commands that were written -to the file must be defined when @code{\readtocfile} is invoked. Eplain -has minimal definitions for @code{\tocchapterentry}, -@code{\tocsectionentry}, and @code{\tocsubsectionentry}, just to prevent -undefined control sequence errors in common cases. They aren't suitable -for anything but preliminary proofs. - -Each of @code{\writetocentry} and @code{\writenumberedtocentry} opens -the @t{.toc} file for writing, thereby deleting the information from the -previous run. You should therefore arrange that @code{\readtocfile} be -called @emph{before} the first call to a @code{\writetoc@dots{}} macro. -@code{\readtocfile} does not itself delete the information -from the @t{.toc} file, so that you can call it several times, -e.g., to create both a short -@cindex table of contents, short -and normal table of contents. (To produce this in particular, define -@code{\tocsectionentry} to produce nothing while you are reading -@t{.toc} file for a short table of contents (@pxref{Macro arguments}).) - -On the other hand, if you don't want to rewrite the @t{.toc} file at -all, perhaps because you are only running @TeX{} on part of your -manuscript, you can set @code{\rewritetocfilefalse}. -@findex ifrewritetocfile -@findex rewritetocfile @r{(conditional)} - -By default, the @file{.toc} file has the root @code{\jobname}. If your -document has more than one contents---for example, if it is a collection -of papers, some of which have their own contents---you can tell Eplain -to use a different root name by defining the control sequence -@code{\tocfilebasename}. -@findex tocfilebasename - -@cindex list of figures -@cindex list of tables -@findex definecontentsfile -In addition to the usual table of contents, you may want to have a list -of figures, list of tables, or other such contents-like list. You can do -this with @code{\definecontentsfile@{@var{abbrev}@}}. All of the -above commands are actually a special case that Eplain predefines with - -@example -\definecontentsfile@{toc@} -@end example - -@noindent The @var{abbrev} is used both for the file extension and in -the control sequence names. - - - -@node Cross-references -@section Cross-references - -@cindex cross-references -It is often useful to refer the reader to other parts of your document; -but putting literal page, section, equation, or whatever numbers in the -text is certainly a bad thing. - -Eplain therefore provides commands for symbolic cross-references. It -uses an auxiliary file with extension @t{.aux} -@pindex .aux @r{file} -(and the same root name as your document) to keep track of the -information. Therefore, it takes two passes to get the cross-references -right---one to write them out, and one to read them in. Eplain -automatically reads the @t{.aux} file at the first reference; after -reading it, Eplain reopens it for writing. - -You can control whether or not Eplain warns you about undefined -labels. @xref{Citations}. - -@cindex labels, characters valid in -Labels in Eplain's cross-reference commands can use characters of -category code eleven (letter), twelve (other), ten (space), three (math -shift), four (alignment tab), seven (superscript), or eight (subscript). -For example, @samp{(a1 $&^_} is a valid label (assuming the category -codes of plain @TeX{}), but @samp{%#\@{} has no valid characters. - -You can also do symbolic cross-references for bibliographic citations -and list items. @xref{Citations}, and @ref{Lists}. - -Eplain can create hypertext links for the cross-references; -@pxref{Cross-reference hyperlinks}. - -@menu -* Defining generic references:: -* Using generic references:: -@end menu - - -@node Defining generic references -@subsection Defining generic references - -@cindex defining general references -@cindex references, defining general -@cindex cross-references, defining general - -@findex definexref -Eplain provides the command @code{\definexref} for general -cross-references. It takes three arguments: the name of the label (see -section above for valid label names), the value of the label (which can -be anything), and the ``class'' of the reference---whether it's a -section, or theorem, or what. For example: - -@example -\definexref@{sec-intro@}@{3.1@}@{section@} -@end example - -@noindent Of course, the label value is usually generated by another -macro using @TeX{} count registers or some such. - -@code{\definexref} doesn't actually define @var{label}; instead, it -writes out the definition to the @t{.aux} file, where Eplain will read -it on the next @TeX{} run. - -The @var{class} argument is used by the @code{\ref} and @code{\refs} -commands. See the next section. - - -@node Using generic references -@subsection Using generic references - -@cindex defining general references -@cindex references, defining general -@cindex cross-references, defining general - -To retrieve the value of the label defined via @code{\definexref} (see -the previous section), Eplain provides the following macros: - -@table @code - -@findex refn -@itemx \refn@{@var{label}@} -@findex xrefn -@item \xrefn@{@var{label}@} -@code{\refn} and @code{\xrefn} (they are synonyms) produce the bare -definition of @var{label}. If @var{label} isn't defined, issue a -warning, and produce @var{label} itself instead, in typewriter. (The -warning isn't given if @code{\xrefwarningfalse}.) -@findex xrefwarning @r{conditional} - -@findex ref -@item \ref@{@var{label}@} -Given the class @var{c} for @var{label} (see the description of -@code{\definexref} in the previous section), expand the control sequence -@code{\@var{c} word} (if it's defined) followed by a tie. Then call -@code{\refn} on @var{label}. (Example below.) - -@findex refs -@item \refs@{@var{label}@} -Like @code{\ref}, but append the letter @samp{s} to the -@code{\@dots{}word}. - -@end table - -The purpose of the @code{\@dots{}word} macro is to produce the word -`Section' or `Figure' or whatever that usually precedes the actual -reference number. - -Here is an example: - -@example -\def\sectionword@{Section@} -\definexref@{sec-intro@}@{3.1@}@{section@} -\definexref@{sec-next@}@{3.2@}@{section@} -See \refs@{sec-intro@} and \refn@{sec-next@} @dots{} -@end example - -@noindent This produces `See Sections 3.1 and 3.2 @dots{}' - - -@node Page references -@section Page references - -Eplain provides two commands for handling references to page numbers, -one for definition and one for use. - -@table @code - -@item \xrdef@{@var{label}@} -@findex xrdef -Define @var{label} to be the current page number. This produces no -printed output, and ignores following spaces. - -@item \xref@{@var{label}@} -@findex xref -Produce the text `p.@tie{}@var{pageno}', which is the usual form for -cross-references. The @var{pageno} is actually @var{label}'s -definition; if @var{label} isn't defined, the text of the label itself -is printed. The `p.@tie{}' prefix is defined by @code{\xrefpageword}. -@findex xrefpageword -Its default definition is @code{p.\thinspace}. - -@end table - -Eplain can create hypertext links for the page references; @pxref{Page -reference hyperlinks}. - - -@node Equation references -@section Equation references - -@cindex equations, references to -@cindex equations, numbering -Instead of referring to pages, it's most useful if equation labels -refer to equation numbers. Therefore, Eplain reserves a @code{\count} -register, @code{\eqnumber}, -@findex eqnumber -for the current equation number, and increments it at each -numbered equation. - -Here are the commands to define equation labels and then refer to them: - -@table @code - -@item \eqdef@{@var{label}@} -@findex eqdef -This defines @var{label} to be the current value of @code{\eqnumber}, -and, if the current context is not inner, then produces a @code{\eqno} -command. (The condition makes it possible to use @code{\eqdef} in an -@code{\eqalignno} construction, for example.) The text of the equation -number is produced using @code{\eqprint}. @xref{Formatting equation -references}. - -@cindex empty equation labels -@cindex labels, empty equation -@cindex equations, giving numbers to all -If @var{label} is empty, you still get an equation number (although -naturally you can't reliably refer to it). This is useful if you want -to put numbers on all equations in your document, and you don't want to -think up unique labels. - -@cindex empty equation labels, referring to -@cindex labels, empty equation, referring to -To refer to the last equation with the empty label, you just use the -empty label in one of the equation reference macros (see below). This -can be handy when you want to refer to an equation shortly after its -definition, say, in the sentence following the displayed equation, and -do not intend to refer to the equation later. But use this trick with -extreme caution: if later you change the text and insert another -empty definition between the original definition and the reference, -the reference will start to refer to the new empty-labeled equation. - -@item \eqdefn@{@var{label}@} -@findex eqdefn -This is like @code{\eqdef}, except it always omits the @code{\eqno} -command. It can therefore be used in places where @code{\eqdef} can't; -for example, in a non-displayed equation. The text of the equation -number is not produced, so you can also use it in the (admittedly -unusual) circumstance when you want to define an equation label but not -print that label. - -@item \eqref@{@var{label}@} -@findex eqref -This produces a formatted reference to @var{label}. If @var{label} is -undefined (perhaps because it is a forward reference), it just produces -the text of the label itself. Otherwise, it calls @code{\eqprint}. - -@item \eqrefn@{@var{label}@} -@findex eqrefn -This produces the cross-reference text for @var{label}. That is, it -is like @code{\eqref}, except it doesn't call @code{\eqprint}. - -@end table - -@cindex equation labels, characters valid in -Equation labels can contain the same characters that are valid in -general cross-references. - -Eplain can create hypertext links for the equation references; -@pxref{Equation reference hyperlinks}. - - -@menu -* Formatting equation references:: -* Subequation references:: -@end menu - - -@node Formatting equation references -@subsection Formatting equation references - -@cindex equation numbers, formatting of -Both defining an equation label and referring to it should usually -produce output. This output is produced with the @code{\eqprint} macro, -which takes one argument, the equation number being defined or referred -to. By default, this just produces @samp{(@var{number})}, where -@var{number} is the equation number. To produce the equation number in -a different font, or with different surrounding symbols, or whatever, -you can redefine @code{\eqprint}. -@findex eqprint -For example, the following definition would print all equation numbers -in italics. (The extra braces define a group, to keep the font change -from affecting surrounding text.) - -@example -\def\eqprint#1@{@{\it (#1)@}@} -@end example - -In addition to changing the formatting of equation numbers, you might -to add more structure to the equation number; for example, you might -want to include the chapter number, to get equation numbers like -`(1.2)'. To achieve this, you redefine @code{\eqconstruct}. -@findex eqconstruct -For example: - -@example -\def\eqconstruct#1@{\the\chapternumber.#1@} -@end example - -@noindent -(If you are keeping the chapter number in a count register named -@code{\chapternumber}, naturally.) - -The reason for having both @code{\eqconstruct} and @code{\eqprint} may -not be immediately apparent. The difference is that @code{\eqconstruct} -affects the text that cross-reference label is defined to be, while -@code{\eqprint} affects only what is typeset on the page. The example -just below might help. - -Usually, you want equation labels to refer to equation numbers. But -sometimes you might want a more complicated text. For example, you -might have an equation `(1)', and then have a variation several pages -later which you want to refer to as `(1*)'. - -Therefore, Eplain allows you to give an optional argument (i.e., -arbitrary text in square brackets) before the cross-reference label to -\eqdef. Then, when you refer to the equation, that text is produced. -Here's how to get the example just mentioned: - -@example -$$@dots{}\eqdef@{a-eq@}$$ -@dots{} -$$@dots{}\eqdef[\eqrefn@{a-eq@}*]@{a-eq-var@}$$ -In \eqref@{a-eq-var@}, we expand on \eqref@{a-eq@}, @dots{} -@end example - -We use @code{\eqrefn} in the cross-reference text, not -@code{\eqref}, so that @code{\eqprint} is called only once. - - -@node Subequation references -@subsection Subequation references - -@cindex equations, groups of -@cindex subequations, referring to -Eplain also provides for one level of substructure for equations. That -is, you might want to define a related group of equations with numbers -like `2.1' and `2.2', and then be able to refer to the group as a whole: -``@dots{} in the system of equations (2)@dots{}''. - -The commands to do this are @code{\eqsubdef} and -@findex eqsubdef -@code{\eqsubdefn}. -@findex eqsubdefn -They take one @var{label} argument like their counterparts above, -and generally behave in the same way. The difference is in how they -construct the equation number: instead of using just @code{\eqnumber}, -they also use another counter, @code{\subeqnumber}. -@findex subeqnumber -This counter is advanced by one at every @code{\eqsubdef} or -@code{\eqsubdefn}, and reset to zero at every @code{\eqdef} or -@code{\eqdefn}. - -You use @code{\eqref} to refer to subequations as well as main -equations. - -To put the two together to construct the text that the label will -produce, they use a macro @code{\eqsubreftext}. -@findex eqsubreftext -This macros takes two arguments, the ``main'' equation number (which, -because the equation label can be defined as arbitrary text, as -described in the previous section, might be anything at all) and the -``sub'' equation number (which is always just a number). Eplain's -default definition just puts a period between them: -@example -\def\eqsubreftext#1#2@{#1.#2@}% -@end example - -@noindent You can redefine @code{\eqsubreftext} to print however you -like. For example, this definition makes the labels print as `2a', -`2b', and so on. -@example -\newcount\subref -\def\eqsubreftext#1#2@{% - \subref = #2 % The space stops a . - \advance\subref by 96 % `a' is character code 97. - #1\char\subref -@} -@end example - -@noindent Sadly, we must define a new count register, @code{\subref}, -instead of using the scratch count register @code{\count255}, because -@samp{#1} might include other macro calls which use @code{\count255}. - - -@node Indexing -@section Indexing - -@cindex indexing -@cindex sorting an index - -Eplain provides support for generating raw material for an index, and -for typesetting a sorted index. A separate program must do the actual -collection and sorting of terms, because @TeX{} itself has no support -for sorting. - -Eplain can create hypertext links pointing from the index to the index -terms; @pxref{Index hyperlinks}. - -@cindex URL for MakeIndex -@pindex makeindex -Eplain's indexing commands were designed to work with the program -MakeIndex, available from CTAN hosts in -@file{tex-archive/indexing/makeindex}; MakeIndex is also commonly -included in prepackaged @TeX{} distributions. It is beyond the scope of -this manual to explain how to run MakeIndex, and all of its many -options. See @url{http://www.ctan.org/tex-archive/indexing/makeindex/} - -The basic strategy for indexing works like this: - -@enumerate - -@pindex .idx @r{files} -@item For a document @file{foo.tex}, Eplain's indexing commands (e.g., -@code{\idx}; see the section `Indexing terms' below) write the raw index -material to @file{foo.idx}. - -@pindex .ind @r{files} -@item MakeIndex reads @file{foo.idx}, collects and sorts the index, and -writes the result to @file{foo.ind}. - -@item Eplain reads and typesets @file{foo.ind} on a subsequent run of -@TeX{}. See the section `Typesetting an index' below. - -@end enumerate - -@pindex texi2dvi -@noindent The @command{texi2dvi} program can help you automate this -process, @pxref{Invoking Eplain}. - -@cindex multiple indexes -@cindex indexes, multiple -@findex defineindex -If your document needs more than one index, each must have its own -file. Therefore, Eplain provides the command @code{\defineindex}, which -takes an argument that is a single letter, which replaces @samp{i} in -the filenames and in the indexing command names described below. For -example, - -@example -\defineindex@{m@} -@end example - -@noindent defines the command @code{\mdx} to write to the file -@file{foo.mdx}. Eplain simply does @code{\defineindex@{i@}} to define -the default commands. - -@menu -* Indexing terms:: Specifying what to index. -* Typesetting an index:: Printing the sorted output. -* Customizing indexing:: Creating commands and specifying extra actions. -@end menu - - -@node Indexing terms -@subsection Indexing terms - -@cindex indexing terms -@cindex silent indexing - -Indexing commands in Eplain come in pairs: one command that only -writes the index entry to the @samp{.idx} file (see above section), and -one that also typesets the term being indexed. The former always starts -with @samp{s} (for ``silent''). In either case, the name always includes -@samp{@var{I}dx}, where @var{I} is the index letter, also described -above. Eplain defines the index @samp{i} itself, so that's what we'll -use in the names below. - -@cindex subterm in indexing -The silent form of the commands take a subterm as a trailing optional -argument. For example, @code{\sidx@{truth@}[definition of]} on page 75 -makes an index entry that will eventually be typeset (by default) as - -@display -truth - definition of, 75 -@end display - -@cindex trailing spaces and indexing commands -@cindex spaces, trailing and indexing commands -@cindex indexing and trailing spaces -Also, the silent commands ignore trailing spaces. The non-silent ones do not. - -@menu -* Indexing commands:: Making index entries. -* Modifying index entries:: Ranges, see/see also, page number typesetting. -* Proofing index terms:: Noting index entries in the margins. -@end menu - - -@node Indexing commands -@subsubsection Indexing commands - -@cindex indexing commands -Here are the commands. - -@itemize @bullet - -@item -@findex sidx -@findex idx -@code{\sidx@{@var{term}@}[@var{subterm}]} makes an index entry for -@var{term}, optionally with subterm @var{subterm}. -@code{\idx@{@var{term}@}} also produces @var{term} as output. Example: - -@example -\sidx@{truth@}[beauty of] -The beauty of truth is \idx@{death@}. -@end example - -Subterms at the second and further levels can also be -specified in @var{subterm}, using the -@code{\idxsubentryseparator} character to separate -them. This character is by default @samp{!}. - -@item -@findex sidxname -@findex idxnameseparator -@findex idxname -@code{\sidxname@{@var{First M.}@}@{@var{von Last}@}[@var{subterm}]} -makes an index -entry for @samp{@var{von Last}, @var{First M.}}. You can change the -@samp{, } by redefining @code{\idxnameseparator}. -@code{\idxname@{@var{First M.}@}@{@var{von Last}@}} also produces @var{First M. von -Last} as output. (These commands are useful special cases of @code{\idx} -and @code{\sidx}.) Example: - -@example -\sidxname@{Richard@}@{Stark@} -\idxname@{Donald@}@{Westlake@} has written many kinds of novels, under -almost as many names. -@end example - -@item -@findex sidxmarked -@findex idxmarked -@code{\sidxmarked\@var{cs}@{@var{term}@}[@var{subterm}]} makes an index -entry for @code{@var{term}[@var{subterm}]}, but @var{term} will be put -in the index as @code{\@var{cs}@{term@}}, but still sorted as just -@var{term}. @code{\idxmarked\@var{cs}@{@var{term}@}} also typesets -@code{\@var{cs}@{term@}}. This provides for the usual ways of changing -the typesetting of index entries. Example: - -@example -\def\article#1@{``#1''@} -\sidxmarked\article@{Miss Elsa and Aunt Sophie@} -Peter Drucker's \idxmarked\article@{The Polanyis@} is a remarkable -essay about a remarkable family. -@end example - -@item -@findex idxsubmarked -@findex sidxsubmarked -@code{\sidxsubmarked@{@var{term}@}\@var{cs}@{subterm@}} makes an index -entry for @var{term}, @var{subterm} as usual, but also puts @var{subterm} in -the index as @code{\@var{cs}@{term@}}. -@code{\idxsubmarked@{@var{term}@}\@var{cs}@{subterm@}} also typesets -@code{@var{term} \@var{cs}@{subterm@}}, in the unlikely event that your -syntax is convoluted enough to make this useful. Example: - -@example -\def\title#1@{@{\sl #1@}@} -\sidxsubmarked@{Anderson, Laurie@}\title@{Strange Angels@} -The \idxsubmarked@{Anderson@}\title@{Carmen@} is a strange twist. -@end example - -@end itemize - -@cindex index entry general sorting -@cindex sorting of index entries -The commands above rely on MakeIndex's feature for separating sorting of -an index entry's from its typesetting. You can use this directly by -specifying an index entry as @code{@var{sort}@@@var{typeset}}. For -example: - -@example -\sidx@{Ap-weight@@$A_\pi$-weight@} -@end example - -@noindent will sort as @code{Ap-weight}, but print with the proper math. -The @code{@@} here is MakeIndex's default character for this purpose. -See @url{http://www.ctan.org/tex-archive/indexing/makeindex/}. To make an index -entry with an @code{@@} in it, you have to escape it with a backslash; -Eplain provides no macros for doing this. - -@findex afterindexterm @r{hook} -@cindex whatsits made by index entries -After any index command, Eplain runs -@code{\hookaction@{afterindexterm@}}. Because the index commands always -add a whatsit item to the current list, you may wish to preserve a -penalty or space past the new item. For example, given a conditional -@code{\if@@aftersctnhead} set true when you're at a section heading, you -could do: - -@example -\hookaction@{afterindexterm@}@{\if@@aftersctnhead \nobreak \fi@} -@end example - - -@node Modifying index entries -@subsubsection Modifying index entries - -@cindex modifying index entries' page numbers -@cindex index entries' page numbers, modifying - -All the index commands described in the previous section take an initial -optional argument before the index term, which modify the index entry's -meaning in various ways. You can specify only one of the following in -any given command, except that @code{begin} and @code{end} can be -specified together with @code{pagemarkup=@var{cs}} (separate them with -a comma without a following space, like this: -@code{[begin,pagemarkup=defn]}). - -These work via MakeIndex's ``encapsulation'' feature. @xref{Customizing -indexing}, if you're not using the default characters for the -MakeIndex operators. The other optional argument (specifying a subterm) -is independent of these. - -Here are the possibilities: - -@table @code - -@item begin -@itemx end -@findex begin @r{for index entries} -@findex end @r{for index entries} -@cindex index entries and ranges -@cindex ranges and index entry -These mark an index entry as the beginning or end of a range. The index -entries must match exactly for MakeIndex to recognize them. -Example: - -@example -\sidx[begin]@{future@}[Cohen, Leonard] -@dots{} -\sidx[end]@{future@}[Cohen, Leonard] -@end example - -@noindent will typeset as something like - -@display -future, - Cohen, Leonard, 65--94 -@end display - -@item see -@findex see @r{for index entries} -@cindex see, and index entries -@cindex cross-referencing index entries -@cindex index entries, and cross-referencing -This marks an index entry as pointing to another; the real index term is -an additional (non-optional) argument to the command. Thus you can -anticipate a term readers may wish to look up, yet which you have -decided not to index. Example: - -@example -\sidx[see]@{analysis@}[archetypal]@{archetypal criticism@} -@end example - -@noindent becomes - -@display -analysis, - archetypal, @i{see} archetypal criticism -@end display - -@item seealso -@findex seealso @r{for index entries} -Similar to @code{see} (the previous item), but also allows for normal -index entries of the referencing term. Example: - -@example -\sidx[seealso]@{archetypal criticism@}[elements of]@{dichotomies@} -@end example - -@noindent becomes - -@display -archetypal criticism, - elements of, 75, 97, 114, @i{see also} dichotomies -@end display - -(Aside for the academically curious: The archetypally critical book I -took these dichotomous examples from is Laurence Berman's @cite{The -Musical Image}, which I happened to co-design and typeset.) - -@item pagemarkup=@var{cs} -This puts @code{\@var{cs}} before the page number in the typeset index, -thus allowing you to underline definitive entries, italicize examples, -and the like. You do @emph{not} precede the control sequence @var{cs} -with a backslash. (That just leads to expansive difficulties.) Naturally -it is up to you to define the control sequences you want to use. Example: - -@example -\def\defn#1@{@{\sl #1@}@} -\sidx[pagemarkeup=defn]@{indexing@} -@end example - -@noindent becomes something like - -@example -indexing, @code{\defn@{75@}} -@end example - -@end table - - -@node Proofing index terms -@subsubsection Proofing index terms - -@cindex proofing index terms -@cindex index terms, proofing -@cindex margins, index terms in - -As you are reading through a manuscript, it is helpful to see what terms -have been indexed, so you can add others, catch miscellaneous errors, -etc. (Speaking from bitter experience, I can say it is extremely -error-prone to leave all indexing to the end of the writing, since it -involves adding many @TeX{} commands to the source files.) - -@findex indexproofterm -@findex indexprooffont -@pindex cmtt8 -So Eplain puts index terms in the margin of each page, if you -set @code{\indexproofingtrue}. It is @code{false} by default. The terms -are typeset by the macro @code{\indexproofterm}, which takes a single -argument, the term to be typeset. Eplain's definition of -@code{\indexproofterm} just puts it into an @code{\hbox}, first doing -@code{\indexprooffont}, which Eplain defines to select the font -@code{cmtt8}. With this definition long terms run off the page, but -since this is just for proofreading anyway, it seems acceptable. - -@findex pageno -@findex insidemargin -@findex hoffset -@findex outsidemargin -@findex indexsetmargins -On the other hand, we certainly don't want the index term to run into -the text of the page, so Eplain uses the right-hand side of the page -rather than the left-hand page (assuming a language read left to right -here). So @code{\ifodd\pageno}, Eplain kerns by @code{\outsidemargin}, -otherwise by @code{\insidemargin}. If those macros are undefined, -@code{\indexsetmargins} defines them to be one inch plus @code{\hoffset}. - -@findex @@indexproof @r{insertion class} -@findex indexproofunbox -@findex makeheadline -@cindex output routine and index proofing -To get the proofing index entries on the proper page, Eplain defines a new -insertion class @code{\@@indexproof}. To unbox any index proofing -material, Eplain redefines @code{\makeheadline} to call -@code{\indexproofunbox} before the original @code{\makeheadline}. Thus, -if you have your own output routine, that redefines or doesn't use -@code{\makeheadline}, it's up to you to call @code{\indexproofunbox} at -the appropriate time. - - -@node Typesetting an index -@subsection Typesetting an index - -@cindex typesetting an index -@cindex index typesetting -@findex readindexfile - -The command @code{\readindexfile@{i@}} reads and typesets the -@file{.ind} file that MakeIndex outputs (from the @file{.idx} file which -the indexing commands in the previous sections write). Eplain defines a -number of commands that support the default MakeIndex output. - -@findex indexfilebasename -@findex jobname -More precisely, @code{\readindexfile} reads -@code{\indexfilebasename.@var{index-letter}nd}, where the -@var{index-letter} is the argument. @code{\indexfilebasename} is -@code{\jobname} by default, but if you have different indexes in -different parts of a book, you may wish to change it, just as with -bibliographies (@pxref{Citations}). - -@findex begin@{theindex@} -@findex end@{theindex@} -MakeIndex was designed to work with @LaTeX{}; therefore, by default the -@file{.ind} file starts with @code{\begin@{theindex@}} and ends with -@code{\end@{theindex@}}. If no @code{\begin} has been defined, Eplain -defines one to ignore its argument and set up for typesetting the index -(see below), and also defines a @code{\end} to ignore its argument. (In -a group, naturally, since there is a primitive @code{\end}). - -@findex parindent @r{in indexes} -@cindex index fonts -@findex indexfonts -@cindex double columns in indexes -Eplain calls @code{\indexfonts}, sets @code{\parindent = 0pt}, and does -@code{\doublecolumns} (@pxref{Multiple columns}) at the -@code{\begin@{theindex@}}. @code{\indexfonts} does nothing by default; -it's just there for you to override. (Indexes are usually typeset in -smaller type than the main text.) - -@findex beginindex @r{hook} -It ends the setup with @code{\hookrun@{beginindex@}}, so you can -override anything you like in that hook (@pxref{Hooks}). For example: - -@example -\hookaction@{beginindex@}@{\triplecolumns@} -@end example - -@findex item @r{in indexes} -@findex subitem @r{in indexes} -@findex subsubitem @r{in indexes} -@cindex index entry formatting -@cindex formatting index entries -@cindex space above index entries -@cindex continued index entries -@cindex index entry continuations -MakeIndex turns each main index entry into an @code{\item}, subentries -into @code{\subitem}, and subsubentries into @code{\subsubitem}. By -default, the first line of main entries are not indented, and subentries -are indented 1em per level. Main entries are preceded by a @code{\vskip} -of @code{\aboveitemskipamount}, @code{0pt plus2pt} by default. Page -breaks are encouraged before main entries (@code{\penalty -100}), but -prohibited afterwards---Eplain has no provision for ``continued'' -index entries. - -All levels do the following: - -@findex hangindent @r{for index entries} -@findex raggedright @r{for index entries} -@findex hyphenpenalty @r{for index entries} -@example -\hangindent = 1em -\raggedright -\hyphenpenalty = 10000 -@end example - -@findex indexitem @r{hook} -Each entry ends with @code{\hookrun@{indexitem@}}, so you can change any -of this. For example, to increase the allowable rag: - -@example -\hookaction@{indexitem@}@{\advance\rightskip by 2em@} -@end example - -@findex indexspace -@cindex index groupings -Finally, MakeIndex outputs @code{\indexspace} between each group of -entries in the @file{.ind} file. Eplain makes this equivalent to -@code{\bigbreak}. - - -@node Customizing indexing -@subsection Customizing indexing - -@cindex customizing indexing - -@findex afterindexterm -@cindex commas after index terms -@cindex after index terms -By default, MakeIndex outputs @samp{, } after each term in the index. To -change this, you can add the following to your MakeIndex style -(@file{.ist}) file: - -@example -delim_0 "\\afterindexterm " -delim_1 "\\afterindexterm " -delim_2 "\\afterindexterm " -@end example - -@noindent Eplain makes @code{\afterindexterm} equivalent to -@code{\quad}. - -You can also change the keywords Eplain recognizes (@pxref{Modifying -index entries}): - -@table @code - -@item \idxrangebeginword -@findex idxrangebeginword -`begin' - -@item \idxrangeendword -@findex idxrangeendword -`end' - -@item \idxseecmdword -@findex idxseecmdword -`see' - -@item \idxseealsocmdword -@findex idxseealsocmdword -`seealso' - -@end table - -You can also change the magic characters Eplain puts into the -@file{.idx} file, in case you've changed them in the @code{.ist} file: - -@table @code - -@item \idxsubentryseparator -@findex idxsubentryseparator -@samp{!} - -@item \idxencapoperator -@findex idxencapoperator -@samp{|} - -@item \idxbeginrangemark -@findex idxbeginrangemark -@samp{(} - -@item \idxendrangemark -@findex idxendrangemark -@samp{)} - -@end table - -There is no macro for the @code{actual} (@samp{@@} by default) -character, because it's impossible to make it expand properly. - -@findex idxpagenum -@cindex see also index entries and sorting -You can change the (imaginary) page number that ``see also'' -entries sort as by redefining @code{\idxmaxpagenum}. This is 99999 by -default, which is one digit too many for old versions of MakeIndex. - -@findex indexseeword -@findex indexseealsowords -@findex seevariant -@findex indexsee -@findex indexseealso -The words output by Eplain for ``see'' and ``see also'' index entries -are defined by @code{\indexseeword} and @code{\indexseealsowords} -respectively. You can change the typeface used for these words by -redefining @code{\seevariant}. And finally, the macros -@code{\indexsee} and @code{\indexseealso} actually produce the ``see -@dots{}'' entries, so you can redefine them if you want something -entirely different. If you do redefine them, make them take two -parameters, the term being referenced and the @code{\idxmaxpagenum} -(the latter should normally be ignored). See the example below. - -@findex see @r{for index entries} -@cindex see, and index entries -@cindex cross-referencing index entries -@cindex index entries, and cross-referencing -@cindex commas in cross-referencing index entries -Unfortunately, it is impossible to reliably control the commas -produced by MakeIndex in front of ``see @dots{}'' entries in the -@file{.ind} file, either at MakeIndex level or at Eplain level. -However, the -@pindex sed -@command{sed} script named @command{trimsee} -@pindex trimsee -distributed with Eplain in the @file{test} directory can be used to -filter out these commas from the output of MakeIndex. For example, -suppose you want the following style for your ``see @dots{}'' entries: - -@display -analysis, - archetypal (@i{see} archetypal criticism) -archetypal criticism, - elements of, 75, 97, 114 (@i{see also} dichotomies) -@end display - -@noindent You would need to redefine these macros in your @TeX{} -file: - -@example -\def\indexsee#1#2@{(@{\seevariant \indexseeword\/ @}#1)@} -\def\indexseealso#1#2@{(@{\seevariant \indexseealsowords\/ @}#1)@} -@end example - -@noindent and then filter out the commas in front of the ``see @dots{}'' -entries by running the following command to produce the @file{.ind} -file (assuming the name of the @file{.idx} file is @file{myfile.idx} -and the @file{trimsee} script is placed in the current directory): - -@example -prompt$ cat myfile.idx | makeindex | ./trimsee > myfile.ind -@end example - -By default, @file{trimsee} uses default page list separators and -default ``see @dots{}'' command names. If you set up MakeIndex to use -different page list separator or change the names of @code{\indexsee} -and @code{\indexseealso} commands, it is possible to adjust the -@file{trimsee} script through its command line options, which are the -following: - -@table @option -@item -i @var{is} -Use @var{is} as a regular expression matching separator before ``see -@dots{}'' commands in the input (default: @samp{, \+}). - -@item -o @var{os} -Use @var{os} as a separator to replace @var{is} before ``see @dots{}'' -commands (default: @samp{ }). - -@item -s @var{see} -Use @var{see} as a regular expression matching ``see @dots{}'' -commands (default: @samp{\\indexsee}). - -@item -h -@itemx --help -Print a usage message. - -@item -v -@itemx --version -Print version. -@end table - -@file{trimsee} reads input from the standard input, and directs its -output to the standard output. - - -@node Justification -@section Justification - -@cindex centering -@cindex left-justification -@cindex right-justification -@cindex justification -Eplain defines three commands to conveniently justify multiple -lines of text: @code{\flushright}, @code{\flushleft}, and -@code{\center}. -@findex flushright -@findex flushleft -@findex center - -They all work in the same way; let's take @code{\center} as the -example. To start centering lines, you say @code{\center} inside a -group; to stop, you end the group. Between the two commands, each -end-of-line in the input file also starts a new line in the output file. - -The entire block of text is broken into paragraphs at blank lines, -so all the @TeX{} paragraph-shaping parameters apply in the usual way. -This is convenient, but it implies something else that isn't so -convenient: changes to any linespacing parameters, such as -@code{\baselineskip}, will have @emph{no effect} on the paragraph in -which they are changed. @TeX{} does not handle linespacing changes -within a paragraph (because it doesn't know where the line breaks are -until the end of the paragraph). - -The space between paragraphs is by default one blank line's worth. -You can adjust this space by assigning to @code{\blanklineskipamount}; -@findex blanklineskipamount @r{in justified text} -this (vertical) glue is inserted after each blank line. - -Here is an example: -@example -@{\center First line. - - Second line, with a blank line before. -@} -@end example - -This produces: - -@center First line. -@center -@center Second line, with a blank line before. - -You may wish to use the justification macros inside of your own -macros. Just be sure to put them in a group. For example, here is how -a title macro might be defined: - -@example -\def\title@{\begingroup\titlefont\center@} -\def\endtitle@{\endgroup@} -@end example - - -@node Tables -@section Tables - -@cindex tables -@cindex alignments -Eplain provides a single command, @code{\makecolumns}, -@findex makecolumns -to make generating one particular kind of table easier. More ambitious -macro packages might be helpful to you for more difficult applications. -The files @file{ruled.tex} and @file{TXSruled.tex}, available from -@samp{lifshitz.ph.utexas.edu} in @file{texis/tables}, is the only one I -know of. - -Many tables are homogenous, i.e., all the entries are semantically the -same. The arrangement into columns is to save space on the page, not -to encode different meanings. In this kind of the table, it is useful to -have the column breaks chosen automatically, so that you can add or -delete entries without worrying about the column breaks. - -@code{\makecolumns} takes two arguments: the number of entries in the -table, and the number of columns to break them into. As you can see -from the example below, the first argument is delimited by a slash, and -the second by a colon and a space (or end-of-line). The entries for the -table then follow, one per line (not including the line with the -@code{\makecolumns} command itself). - -@code{\parindent} defines the space to the left of the -table. @code{\hsize} defines the width of the table. -So you can adjust the position of the table on the page by assignments -to these parameters, probably inside a group. - -You can also control the penalty at a page break before the -@code{\makecolumns} by setting the parameter -@code{\abovecolumnspenalty}. -@findex abovecolumnspenalty -Usually, the table is preceded by some explanatory text. You wouldn't -want a page break to occur after the text and before the table, so -Eplain sets it to @code{10000}. But if the table produced by -@code{\makecolumns} is standing on its own, @code{\abovecolumnspenalty} -should be decreased. - -If you happen to give @code{\makecolumns} a smaller number of entries -than you really have, some text beyond the (intended) end of the table -will be incorporated into the table, probably producing an error -message, or at least some strange looking entries. And if you give -@code{\makecolumns} a larger number of entries than you really have, -some of the entries will be typeset as straight text, probably also -looking somewhat out of place. - -Here is an example: -@example -% Arrange 6 entries into 2 columns: -\makecolumns 6/2: % This line doesn't have an entry. -one -two -three -four -five -six -Text after the table. -@end example - -This produces `one', `two', and `three' in the first column, and -`four', `five', and `six' in the second. - - -@node Margins -@section Margins - -@cindex margins, changing -@TeX{}'s primitives describe the type area in terms of an offset from -the upper left corner, and the width and height of the type. Some -people prefer to think in terms of the @dfn{margins} at the top, bottom, -left, and right of the page, and most composition systems other than -@TeX{} conceive of the page laid out in this way. Therefore, Eplain -provides commands to directly assign and increment the margins. - -@table @code -@itemx \topmargin = @var{dimen} -@itemx \bottommargin = @var{dimen} -@itemx \leftmargin = @var{dimen} -@item \rightmargin = @var{dimen} -@findex topmargin -@findex bottommargin -@findex leftmargin -@findex rightmargin -These commands set the specified margin to the @var{dimen} given. -The @code{=} and the spaces around it are optional. The control -sequences here are not @TeX{} registers, despite appearances; -therefore, commands like @code{\showthe\topmargin} will not do what you -expect. - -@itemx \advancetopmargin by @var{dimen} -@itemx \advancebottommargin by @var{dimen} -@itemx \advanceleftmargin by @var{dimen} -@item \advancerightmargin by @var{dimen} -@findex advancetopmargin -@findex advancebottommargin -@findex advanceleftmargin -@findex advancerightmargin -These commands change the specified margin by the @var{dimen} given. -@end table - -Regardless of whether you use the assignment or the advance commands, -Eplain always changes the type area in response, not the other margins. -For example, when @TeX{} starts, the left and right margins are both one -inch. If you then say @code{\leftmargin = 2in}, the right margin will -remain at one inch, and the width of the lines (i.e., @code{\hsize}) -@findex hsize -will decrease by one inch. - -When you use any of these commands, Eplain computes the old value of -the particular margin, by how much you want to change it, and then -resets the values of @TeX{}'s primitive parameters to correspond. -Unfortunately, Eplain cannot compute the right or bottom margin without -help: you must tell it the full width and height of the final output -page. It defines two new parameters for this: - -@table @code -@item \paperheight -@findex paperheight -The height of the output page; default is 11truein. - -@item \paperwidth -@findex paperwidth -The width of the output page; default is 8.5truein. -@end table - -If your output page has different dimensions than this, you must -reassign to these parameters, as in - -@example -\paperheight = 11truein -\paperwidth = 17truein -@end example - - -@node Multiple columns -@section Multiple columns - -@cindex double column output -@cindex triple column output -@cindex quadruple column output -@cindex multiple column output -Eplain provides for double, triple, and quadruple column output: say -@code{\doublecolumns}, -@findex doublecolumns -@code{\triplecolumns}, -@findex triplecolumns -or @code{\quadcolumns}, -@findex quadcolumns -and from that point on, the manuscript will be -set in columns. To go back to one column, say -@code{\singlecolumn}. -@findex singlecolumn - -@cindex column balancing with @code{\singlecolumn} -@cindex balancing of columns with @code{\singlecolumn} -You may need to invoke @code{\singlecolumn} to balance the columns -on the last page of output. - -@findex columnfill -@cindex column eject -@cindex eject in multicolumns -@findex pagetotal -To do a ``column eject'', i.e., move to the top of the next column, do -@code{\columnfill}. This does not actually force an eject, however: it -merely inserts a kern of size @code{\@@normalvsize} minus -@code{\pagetotal} (@code{\@@normalvsize} being the usual height of the -page; to implement multicolumns, Eplain multiplies @code{\vsize} itself -by the number of columns). In most circumstances, a column break will be -forced after this kern (during the column splitting operation when the -whole page is output), as desired. - -@findex gutter -The columns are separated by the value of the dimen parameter -@code{\gutter}. Default value is two picas. -@findex gutterbox -If you want to add vertical material between the columns, use -@code{\gutterbox}. For example, to put a vertical line between columns, -define -@code{\gutterbox} as -@example -\def\gutterbox@{\vbox to \dimen0@{\vfil\hbox@{\vrule height\dimen0@}\vfil@}@}% -@end example -The dimension counter -@code{\dimen0} -contains the height of the column. - -All the @code{\@dots{}columns} macros insert the value of the glue parameter -@code{\abovecolumnskip} -@findex abovecolumnskip -before the multicolumn text, and the value of the glue parameter -@code{\belowcolumnskip} -@findex belowcolumnskip -after it. The default value for both of these parameters is -@code{\bigskipamount}, i.e., one linespace in plain @TeX{}. - -The macros take into account only the insertion classes -@cindex insertion classes -defined by plain @TeX{}; namely, footnotes and @code{\topinsert}s. If -you have additional insertion classes, you will need to change -the implementation. - -Also, Eplain makes insertions the full page width. There is no -provision for column-width insertions. - - -@node Footnotes -@section Footnotes - -@cindex footnotes, numbered -The most common reference mark for footnotes is a raised number, -incremented on each footnote. The @code{\numberedfootnote} -@findex numberedfootnote -macro provides this. It takes one argument, the footnote text. - -If your document uses only numbered footnotes, you could make typing -@code{\numberedfootnote} more convenient with a command such as: - -@example -\let\footnote = \numberedfootnote -@end example - -After doing this, you can type your footnotes as -@code{\footnote@{@var{footnote text}@}}, instead of as -@code{\numberedfootnote@{@var{footnote text}@}}. - -Eplain keeps the current footnote number in the count register -@code{\footnotenumber}. So, to reset the footnote number to zero, -as you might want to do at, for example, the beginning of a chapter, you -could say @code{\footnotenumber=0}. - -Plain @TeX{} separates the footnote marker from the footnote text by -an en space (it uses the @code{\textindent} macro). In Eplain, you can -change this space by setting the dimension register -@code{\footnotemarkseparation}. -@findex footnotemarkseparation -The default is still an en. - -You can produce a space between footenotes by setting the glue -register @code{\interfootnoteskip}. -@findex interfootnoteskip -The default is zero. - -@code{\parskip} is also set to zero by default before the beginning of -each footnote (but not for the text of the footnote). - -You can also control footnote formatting in a more general way: -Eplain expands the token register @code{\everyfootnote} -@findex everyfootnote -before a footnote is typeset, but after the default values for all the -parameters have been established. For example, if you want your -footnotes to be printed in seven-point type, indented by one inch, you -could say: -@example -\everyfootnote = @{\sevenrm \leftskip = 1in@} -@end example - -By default, an @code{\hrule} is typeset above each group of footnotes -on a page. You can control the dimensions of this rule by setting -the dimension registers @code{\footnoterulewidth} -@findex footnoterulewidth -and @code{\footnoteruleheight}. -@findex footnoteruleheight -The space between the rule and the first footnote on the page is -determined by the dimension register @code{\belowfootnoterulespace}. -@findex belowfootnoterulespace -If you don't want any rule at all, set @code{\footenoteruleheight=0pt}, -and, most likely, @code{\belowfootnoterulespace=0pt}. The defaults for -these parameters typeset the rule in the same way as plain @TeX{}: the -rule is 0.4 points high, 2 true inches wide, with 2.6 points below it. - -The space above the rule and below the text on the page is controlled -by the glue register @code{\skip\footins}. The default is a plain @TeX{} -@code{\bigskip}. - -Eplain can create hypertext links for the footnote marks; @pxref{Footnote -hyperlinks}. - - - -@node Fractions -@section Fractions - -@cindex fractions -Exercise 11.6 of @cite{The @TeX{}book} describes a macro @code{\frac} -@findex frac -for setting fractions, but @code{\frac} never made it into plain @TeX{}. -So Eplain includes it. - -@code{\frac} typesets the numerator and denominator in -@code{\scriptfont0}, slightly raised and lowered. The numerator and -denominator are separated by a slash. The denominator must be enclosed -in braces if it's more than one token long, but the numerator need not -be. (This is a consequence of @code{\frac} taking delimited arguments; -see page@tie{}203 of @cite{The @TeX{}book} for an explanation of -delimited macro arguments.) - -For example, @code{\frac 23/@{64@}} turns `23/64' into -@tex -\leavevmode - \kern-.1em \raise .5ex \hbox{\the\scriptfont0 23}@comment - \kern-.1em $/$@comment - \kern-.15em \lower .25ex \hbox{\the\scriptfont0 64}@comment -@end tex -@ifinfo -23/64 (you can't see the difference in the Info file)@comment -@end ifinfo -. - - -@node Paths -@section Paths - -@cindex pathnames, breaking -@cindex filenames, breaking -@cindex electronic mail addresses, breaking - -When you typeset long pathnames, electronic mail addresses, or other -such ``computer'' names, you would like @TeX{} to break lines at -punctuation characters within the name, rather than trying to find -hyphenation points within the words. For example, it would be better to -break the email address @code{letters@@alpha.gnu.ai.mit.edu} at the -@samp{@@} or a @samp{.}, rather than at the hyphenation points in -@samp{letters} and @samp{alpha}. - -@findex path -If you use the @code{\path} macro to typeset the names, @TeX{} will find -these good breakpoints. The argument to @code{\path} is delimited by -any character other other than @samp{\} which does not appear in the -name itself. -@samp{|} is often a good choice, as in: -@example -\path|letters@@alpha.gnu.ai.mit.edu| -@end example - -@findex discretionaries -You can control the exact set of characters at which breakpoints will be -allowed by calling @code{\discretionaries}. This takes the same sort of -delimited argument; any character in the argument will henceforth be a valid -breakpoint within @code{\path}. The default set is essentially all the -punctuation characters: -@example -\discretionaries |~!@@$%^&*()_+`-=#@{@}[]:";'<>,.?\/| -@end example - -@findex specialpathdelimiters @r{(conditional)} -If for some reason you absolutely must use @code{\} as the delimiter -character for @code{\path}, you can set -@code{\specialpathdelimiterstrue}. (Other delimiter characters can -still be used.) @TeX{} then processes the @code{\path} argument -about four times more slowly. - -@cindex URL for @file{path.sty} -The @code{\path} macro comes from @file{path.sty}, written by Nelson -Beebe and Philip Taylor and available at -@url{http://www.ctan.org/tex-archive/macros/latex/contrib/misc/path.sty}. - - -@node Logos -@section Logos - -@cindex logos -@cindex names, of @TeX{} variants - -Eplain redefines the @code{\TeX} -@findex TeX -macro of plain @TeX{} to end with @code{\null}, so that the proper -spacing is produced when @code{\TeX} is used at the end of a sentence. -The other @dots{}@TeX{} macros listed here do this, also. - -Eplain defines -@code{\AMSTeX}, -@cindex AMS@TeX{} -@findex AMSTeX -@code{\BibTeX} -@cindex Bib@TeX{} -@findex BibTeX -@code{\AMSLaTeX}, -@cindex AMS@LaTeX{} -@findex AMSLaTeX -@code{\LAMSTeX}, -@cindex LAMS@TeX{} -@findex LAMSTeX -@code{\LaTeX} -@cindex @LaTeX{} -@findex LaTeX -@code{\MF}, -@cindex Metafont -@findex MF -and @code{\SLiTeX} -@cindex SLi@TeX{} -@findex SLiTeX -to produce their respective logos. (Sorry, the logos are not shown -here.) Some spelling variants of these are also supported. - -@cindex URL for @file{texnames.sty} -All these macros come from @file{texnames.sty}, compiled by Nelson -Beebe and available at -@url{http://www.ctan.org/tex-archive/info/biblio/texnames.sty}. - - -@node Boxes -@section Boxes - -@cindex black boxes -@cindex rectangles -The solid rectangle that Eplain uses as a marker in unordered lists -(@pxref{Lists}) is available by itself: just say @code{\blackbox}. -@findex blackbox - -You can create black boxes of arbitrary size with @code{\hrule} or -@code{\vrule}. - -@cindex open boxes -@cindex boxes, open -You can also get unfilled rectangles with @code{\makeblankbox}. -@findex makeblankbox -This takes two explicit arguments: the height and depth of the rules that -define the top and bottom of the rectangle. (The two arguments are -added to get the width of the left and right borders, so that the -thickness of the border is the same on all four sides.) It also uses, -as implicit arguments, the dimensions of @code{\box0} to define the -dimensions of the rectangle it produces. (The contents of @code{\box0} -are ignored.) - -Here is an example. This small raised open box is suitable for -putting next to numbers in, e.g., a table of contents. - -@example -\def\openbox@{% - \ht0 = 1.75pt \dp0 = 1.75pt \wd0 = 3.5pt - \raise 2.75pt \makeblankbox@{.2pt@}@{.2pt@} -@} -@end example - -Finally, you can put a box around arbitrary text with @code{\boxit}. -@findex boxit -This takes one argument, which must itself be a (@TeX{}) box, and puts a -printed box around it, separated by @code{\boxitspace} -@findex boxitspace -white space (3 points by default) on all four sides. For example: - -@example -\boxit@{\hbox@{This text is boxed.@}@} -@end example - -The reason that the argument must be a box is that when the text is -more than one line long, @TeX{} cannot figure out the line length for -itself. Eplain does set @code{\parindent} to zero inside @code{\boxit}, -since it is very unlikely you would want indentation there. (If you do, -you can always reset it yourself.) - -@code{\boxit} uses @code{\ehrule} and @code{\evrule} so that you can -easily adjust the thicknesses of the box rules. @xref{Rules}. - - -@node Checking for PDF output -@section Checking for PDF output - -@cindex URL for pdf@TeX{} -@cindex PDF output -@pindex pdftex -@pindex .pdf @r{files} -pdf@TeX{} is a @TeX{} variant that can output both @file{.dvi} and -@file{.pdf} (Adobe's Portable Document Format) files (see -@url{http://www.ctan.org/tex-archive/systems/pdftex/}). You might -sometimes want to know whether the target format is @file{.pdf} or -@file{.dvi}. The @code{\ifpdf} -@findex ifpdf -switch can be used to detect pdf@TeX{} in PDF mode: - -@example -\ifpdf - This text is produced when pdfTeX is in PDF mode. -\else - This text is produced when pdfTeX is in DVI mode, - or when some program other than pdfTeX is used. -\fi -@end example - -Keep in mind that @code{\ifpdf} is set based on the value of the -@code{\pdfoutput} -@findex pdfoutput -primitive of pdf@TeX{} at the time Eplain is loaded. If you change -the value of @code{\pdfoutput} after you load Eplain, @code{\ifpdf} -will not reflect the change. - -@cindex URL for @file{ifpdf.sty} -@cindex Oberdiek, Heiko -Eplain defines @code{\ifpdf} by incorporating Heiko Oberdiek's -@file{ifpdf.sty}, which is available at -@url{http://www.ctan.org/tex-archive/macros/latex/contrib/oberdiek/ifpdf.sty}. - - -@node Loading LaTeX packages -@section Loading @LaTeX{} packages - -@cindex @LaTeX{} packages -@cindex packages, @LaTeX{} -@pindex .sty @r{files} -@pindex .cls @r{files} -Eplain provides a limited support for loading @LaTeX{} packages -(@file{.sty} files---not @file{.cls}). This will mostly work for -packages which were designed with plain @TeX{} compatibility in mind, -which means that most @LaTeX{} packages cannot be loaded. The -packages which are known to work are listed below (@pxref{Packages -known to work}). If you discover a working package which is not in -the list, please report it to the Eplain mailing list -(@pxref{Introduction}). - -@cindex graphics collection, @LaTeX{} -@cindex @LaTeX{} graphics collection -@pindex miniltx.tex -@cindex Carlisle, David -@cindex Rahtz, Sebastian -To set up a pseudo-@LaTeX{} environment for the packages, Eplain uses -@file{miniltx.tex} -(@url{http://www.ctan.org/tex-archive/macros/plain/graphics/miniltx.tex}) -from the @LaTeX{} graphics collection, written by David Carlisle and -Sebastian Rahtz (the collection is available at -@url{http://www.ctan.org/tex-archive/macros/latex/required/graphics/}). -Eplain extends @file{miniltx.tex} to provide some additional features, -e.g., support for package options. - - -@menu -* The \usepackage command:: Command to load packages. -* Environment for loading packages:: Environment for the \usepackage commands. -* Packages known to work:: Supported packages. -* Packages known not to work:: Packages known not to work with Eplain. -@end menu - -@node The \usepackage command -@subsection The @code{\usepackage} command - -@findex usepackage -@code{\usepackage} loads a @LaTeX{} package. Its syntax is similar to -that of @LaTeX{}'s @code{\usepackage} command: - -@example -\usepackage[@var{options}]@{@var{packages}@}[@var{version}] -@end example - -@noindent where @var{options} is a comma-separated list of package -options, @var{packages} is a comma-separated list of packages to load -(without the @file{.sty} suffix), and @var{version} is a package -version number given as a date in the format @samp{YYYY/MM/DD}. If an -older version of the package is found, a warning is issued. If -several packages are loaded within a single @code{\usepackage} -command, the @var{options} will be applied to each of the packages. -As usual, parameters in square brackets are optional and can be -omitted (together with the square brackets). - -For example: - -@example -\usepackage[foo,bar]@{pack1,pack2@}[2005/08/29] -@end example - -@noindent will load packages @samp{pack1} and @samp{pack2}, each with -the options @samp{foo} and @samp{bar}, and will check that each of the -packages are dated 2005/08/29 or newer. - - -@node Environment for loading packages -@subsection Environment for loading packages - -@findex beginpackages -@findex endpackages -Some packages request that certain commands are executed after all -packages have been loaded. In @LaTeX{}, this means that the commands -are executed at the beginning of the document, after the so-called -@dfn{preamble}. Neither plain @TeX{} nor Eplain have any kind of -preamble; therefore, Eplain requires that all packages be loaded inside -a @code{\beginpackages...\endpackages} block, for example: - -@example -\beginpackages - \usepackage[foo,bar]@{pack1@} - \usepackage@{pack2@} -\endpackages -@end example - -@noindent This requirement enables Eplain to execute the ``delayed'' -commands at the end of the @code{\beginpackages...\endpackages} block. - -For the same reason, it is advisable to specify only one such block -per document, just like there is only one preamble in @LaTeX{}. - - -@node Packages known to work -@subsection Packages known to work - -@cindex @LaTeX{} packages -@cindex packages, @LaTeX{} -The following table lists packages that had been tested and are known -to work with Eplain, and locations where you can find manuals for -these packages. Some of the short descriptions of the packages were -taken from the documentation for those packages. - -@table @asis -@item autopict (@samp{2001/06/04 v1.1j Picture mode autoload file}) -@pindex autopict.sty -@url{http://tug.org/eplain/ltpictur.pdf} - -@cindex picture mode -@findex begin@{picture@} -@findex end@{picture@} -This is the @LaTeX{} ``picture mode'', started by -@code{\begin@{picture@}} and ended by @code{\end@{picture@}} (in -@LaTeX{}, this package is not explicitly loaded since it is part of -the @LaTeX{} kernel). It provides commands to draw simple figures -inside your document without resorting to any external tools. - -@item color (@samp{1999/02/16 v1.0i Standard LaTeX Color (DPC)}) -@pindex color.sty -@itemx graphics (@samp{2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR)}) -@pindex graphics.sty -@itemx graphicx (@samp{1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)}) -@pindex graphicx.sty -@url{http://www.ctan.org/tex-archive/macros/latex/required/graphics/grfguide.pdf} - -@cindex graphics collection, @LaTeX{} -@cindex @LaTeX{} graphics collection -@cindex color -@cindex rotation -@cindex scaling -These packages are from the @LaTeX{} graphics collection. They -provide commands for changing text/page colors, text rotation and -scaling, and much more. - -@item psfrag (@samp{1998/04/11 v3.04 PSfrag (MCG)}) -@pindex psfrag.sty -@url{http://www.ctan.org/tex-archive/macros/latex/contrib/psfrag/pfgguide.pdf} - -@cindex Encapsulated PostScript -@cindex EPS -@pindex .eps @r{files} -PSfrag allows the user to precisely overlay Encapsulated PostScript -(EPS) files with arbitrary (La)@TeX{} constructions. In order to -accomplish this, the user places a simple text ``tag'' in the graphics -file, as a ``position marker'' of sorts. Then, using simple -(La)@TeX{} commands, the user instructs PSfrag to remove that tag from -the figure, and replace it with a properly sized, aligned, and rotated -(La)@TeX{} equation. - -@item url (@samp{2005/06/27 ver 3.2 Verb mode for urls, etc.}) -@pindex url.sty -@url{http://www.ctan.org/tex-archive/macros/latex/contrib/misc/url.sty} - -@cindex pathnames, breaking -@cindex filenames, breaking -@cindex electronic mail addresses, breaking -This package provides a form of @code{\verbatim} that allows -line breaks at certain characters or combinations of characters, -accepts reconfiguration, and can usually be used in the argument to -another command. It is intended for email addresses, hypertext links, -directories/paths, etc., which normally have no spaces. - -Eplain can create hypertext links with the @code{\url} command; -@pxref{URL hyperlinks}. -@end table - - -@node Packages known not to work -@subsection Packages known not to work - -@cindex @LaTeX{} packages -@cindex packages, @LaTeX{} -The following packages are known not to work with Eplain: - -@table @asis -@item pict2e (@samp{2005/07/15 v0.2r Improved picture commands (HjG,RN)}) -@pindex pict2e.sty -@url{http://www.ctan.org/tex-archive/macros/latex/contrib/pict2e/} - -@item xcolor (@samp{2005/06/06 v2.03 LaTeX color extensions (UK)}) -@pindex xcolor.sty -@url{http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor/} -@end table diff --git a/Master/texmf-dist/doc/eplain/demo/Makefile b/Master/texmf-dist/doc/eplain/demo/Makefile new file mode 100644 index 00000000000..45ba215c7aa --- /dev/null +++ b/Master/texmf-dist/doc/eplain/demo/Makefile @@ -0,0 +1,41 @@ +# Makefile for the Eplain demos. This file is public domain. + +PDFTEX = pdftex +DVIPDFM = dvipdfmx +TEXI2PDF = texi2dvi --pdf + + +.PHONY: all pdftex dvipdfm dvips mostlyclean clean distclean maintainer-clean + + +all: pdftex dvipdfm dvips + +# +# Documents which have to be processed with pdfTeX. +# +pdftex: xhyper.pdf lscommnt.pdf + +xhyper.pdf: xhyper.tex ctan_lion_350x350.png + PDFLATEX=$(PDFTEX) $(TEXI2PDF) xhyper.tex + +lscommnt.pdf: lscommnt.tex + PDFLATEX=$(PDFTEX) $(TEXI2PDF) lscommnt.tex + +# +# Documents which have to be processed with dvipdfm(x). +# +dvipdfm: + +# +# Documents which have to be processed with dvips. +# +dvips: + + +clean mostlyclean: + rm -f xhyper.{aux,log} lscommnt.log + +distclean: clean + rm -f xhyper.pdf lscommnt.pdf + +maintainer-clean: distclean diff --git a/Master/texmf-dist/doc/eplain/demo/lscommnt.tex b/Master/texmf-dist/doc/eplain/demo/lscommnt.tex new file mode 100644 index 00000000000..26d3ec76164 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/demo/lscommnt.tex @@ -0,0 +1,47 @@ +% (This file is public domain.) +% Demonstrate how Eplain can be used to include a TeX source file +% verbatim, typesetting comments in colored italic typewriter type. + +% Load Eplain and LaTeX's color.sty package. +\input eplain +\beginpackages \usepackage{color} \endpackages +\nopagenumbers % Disable page numbers. +\font\commentfont = cmitt10 % Font for the comments (italic \tt). +% We'll define some `protected' macros with `@' in their names. +\makeatletter +% Define an equivalent of Eplain's \letreturn, to be able to assign +% various actions to the (active) percent character. +\begingroup \makeactive\% + \gdef\letpercent{\let%} +\endgroup +% The listing hook to be called in \setuplistinghook, see below. It +% makes `%' active and assigns it a `start comment' action. +\def\hlightcommentslisting{\makeactive\% \letpercent\start@comment}% +% This is what `%' is aliased to before a comment is started. +\def\start@comment{% + \leavevmode % Needed in the very first line of the input to process + % the new par (possibly inserting line number) before we + % kick in with the color and stuff. + \begingroup % Isolate color and font changes and the redefinitions. + \commentfont + \color[cmyk]{0.28,1,1,0.35}% + \percentchar % Produce the actual `%' and + \letpercent\percentchar % make all following `%'s do the same. + \letreturn\end@comment % Call \end@comment at end-of-line. +} +% \end@comment (alias for ^^M inside a comment) will end the comment +% started by \start@comment. We make ^^M active temporarily so that +% the active version of ^^M gets "frozen" into \end@comment. +\begingroup \makeactive\^^M % Avoid ^^M's from here on. + \gdef\end@comment{\endgroup ^^M}% +\endgroup +\resetatcatcode % Make `@' again inaccessible for use in macro names. + +% Define \setuplistinghook to setup comments highlighting, line +% numbering and omitting the last (empty) line of input. +\def\setuplistinghook{\hlightcommentslisting \linenumberedlisting + \nolastlinelisting} +% Isn't this fun? This file typesets itself, with the extra bonus of +% the pretty-printed comments and numbered source lines! +\listing{lscommnt} +\bye diff --git a/Master/texmf-dist/doc/eplain/demo/xhyper.tex b/Master/texmf-dist/doc/eplain/demo/xhyper.tex new file mode 100644 index 00000000000..54742cb50b5 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/demo/xhyper.tex @@ -0,0 +1,190 @@ +% (This file is public domain.) +% +% This file demonstrates the following features of Eplain: +% +% - explicit and implicit hyperlinks; +% - symbolic cross-references; +% - inserting external graphics using |\includegraphics| from +% the \LaTeX\ package |graphicx.sty|. +% - rotating text using |\rotatebox| from |graphicx.sty|. +% +% The compiled demo can be downloaded from +% +% http://tug.org/eplain/demo +% +% In order to compile this file yourself, you will need the CTAN lion +% drawing by Duane Bibby from +% +% ftp://tug.ctan.org/ftpmaint/CTAN_lion/ctan_lion_350x350.png +% +% (thanks, |www.ctan.org|). Place the image file in the same +% directory with this file, and change to that directory. Now, to +% produce a PDF, run twice the command +% +% pdftex xhyper.tex +% +% During the first run, Eplain will write the information about the +% cross-references into |xhyper.aux|, and during the second run this +% information will be read by Eplain to typeset the references. +% +% Demo case: +% +% Suppose you are using pdf\TeX, have a figure you want to insert +% scaled to $200\,pt$ horizontally, and you want this figure to +% completely fill the PDF viewer's window whenever the reader +% selects a link pointing to this figure. Additionally, you want to +% typeset some text as live hyperlinks, clicking on which will start +% a Web browser and open a URL. + +\input eplain + +% Load \LaTeX\ packages. +\beginpackages + % |url.sty| provides the |\url| command which we will use to typeset + % a URL. We request that |url.sty| be the version from June~27, + % 2005, or later, because earlier versions had problems interacting + % with plain \TeX. + \usepackage{url}[2005/06/27] + % |color.sty| provides support for colored text; all hyperlinks are + % automatically colored by Eplain when this package is loaded. We give + % the |dvipsnames| option because we want to use named colors from the + % |dvips| graphics driver. + \usepackage[dvipsnames]{color} + % Finally, we load |graphicx.sty|, for the macros |\includegraphics| + % and |\rotatebox|. + \usepackage{graphicx} +\endpackages + +% Remember that hyperlinks are off by default. Therefore, we need to +% enable them. +\enablehyperlinks + +% Customize some hyperlink options. First, we set border width to~$0$ +% for all links to get rid of the default boxes around links (we +% prefer colored links over the boxed links). Next, we say that all +% links created by the |url| hyperlink group (which means the |\url| +% command from |url.sty|) must be colored using the named color +% |BlueViolet|. +\hlopts{bwidth=0} +\hlopts[url]{colormodel=named,color=BlueViolet} + +% Inhibit page numbering (we have only one page). +\nopagenumbers + +% Define a class word for the cross-reference class |figure|. This +% word, when defined, will be automatically prepended by Eplain to the +% reference created by |\ref| (read on to see its use). +\def\figureword{fig.} + +% Allocate a count register for the figure's number, and a box +% register which we'll use to measure dimensions of the image. +\newcount\fignumber +\newbox\imgbox + +% Now comes the fun part--constructing the figure for the image of the +% \CTAN\ lion. We define a macro +% +% \fig{LABEL}{FILENAME}{CAPTION}{WIDTH} +% +% which creates a figure using LABEL for the cross-reference and +% hyperlink label, reading the image from file FILENAME, using CAPTION +% to name the figure, and WIDTH to scale the image horizontally. +\def\fig#1#2#3#4{% + % Leave some space above the figure. This will also ensure that we + % are in the vertical mode before we produce a |\vbox|. + \medskip + % Advance the figure number. |\global| ensures that the change to + % the count register is global, even when |\fig| is buried inside a + % group. + \global\advance\fignumber by 1 + % We use |\includegraphics| (from |graphicx.sty|) to load the image, + % scaled to the specified width, into our ``measuring'' box + % |\imgbox|. + \setbox\imgbox = \hbox{\includegraphics[width=#4]{#2}}% + % To make the demo even more exciting, let's put the figure's + % caption to the left of the image into the |\indent| space of the + % new paragraph, and rotate the caption~$90^\circ$. + \textindent{% + \rotatebox{90}{F{\sc IGURE}~\the\fignumber. #3}% + }% + % Continue the paragraph by constructing a |\vbox| with the image of + % the lion. We use |\definexref| to define the cross-reference + % label. + \vbox{% + % In addition to the cross-reference label, |\definexref| will + % create a hyperlink destination with the same label. Therefore, + % we customize this destination to do what we need. We say that + % destination type for the hyperlink group |definexref| (to which + % |\definexref| belongs) should be |fitr|. This destination type + % will magnify the rectangle specified by the options |width|, + % |height| and |depth| to the PDF viewer's window. Therefore, we + % set those options accordingly with |\hldestopts| (notice the use + % of |depth| instead of |height|---we will want the rectangle to + % extend {\it downward}, to cover the image which will come + % next). Notice that these settings will be isolated within the + % current group (i.e., the |\vbox| we're constructing). + \hldesttype[definexref]{fitr}% + \hldestopts[definexref]{width=\wd\imgbox,height=0pt,depth=\ht\imgbox}% + % We define a symbolic label so that we can later refer + % to the figure with |\ref|. The command |\definexref| does + % exactly that. The last argument to |\definexref| specifies + % class of the label, which determines the word used by |\ref| in + % front of the reference text (remember that we've defined + % |\figureword| above). + \definexref{#1}{\the\fignumber}{figure}% + % Finally, produce the image which we've been stashing in the box + % register |\imgbox|. + \box\imgbox + }% + \medskip +} + +% Create the figure. +\fig{CTANlion}{ctan_lion_350x350}{Lion in the archives}{200pt} + +% Finished with the fun part, we can relax and typeset some +% hyperlinks. The easiest way to do that is to use the |\ref| +% cross-reference command. We can even pass an optional argument +% (|the lion in|), which will be placed before the class word (|fig.|) +% and become part of the link (to make sure the reader does not have +% to aim too hard). +Show me \ref[the lion in]{CTANlion}. + +% If you are the restless kind, here's another way to create a +% hyperlink to the image: we create a link explicitly by using +% |\hlstart ... \hlend|. We don't specify the link type, therefore +% the default type |name| will be used (these are ``named links'', +% i.e., links pointing to destinations identified by labels). In the +% options argument, we specify that the border of the link should be +% inverted when the user clicks the link (|hlight=O|), and also set +% special color for this link, overriding the default dark-red. The +% label for the destination is the same as the cross-reference label, +% |CTANlion|. +Show me +\hlstart{}{hlight=O,colormodel=named,color=OliveGreen}{CTANlion} + the CTAN lion\hlend. + +% Let's now point somewhere outside our document. Eplain homepage is +% a good target. In the similar spirit, let's consider two +% approaches. The easy one is to use the |\url| command from +% |url.sty|. Remember that we have customized the color of |url| +% hyperlinks, so this one will show up with a different color than the +% default dark-red. +Take me to \url{http://tug.org/eplain}. + +% The second approach is to create an explicit URL link. We specify +% yet another border highlighting mode, |P|, which means that the +% region underneath the bounding box of the link will be drawn inset +% into the page. Also, let's set the color of the hyperlink to an RGB +% color |0.4,0.1,0.4|. Since we cannot use commas to separate the +% color elements inside the options parameter to |\hlstart| (commas +% there separate options), we have to first create a user-defined +% color with |\definecolor| from |color.sty|, and use that in +% |\hlstart|. +\definecolor{mycolor}{rgb}{0.4,0.1,0.4} + +Take me to +\hlstart{url}{hlight=P,colormodel=,color=mycolor}{http://tug.org/eplain} + Eplain homepage\hlend. + +\bye diff --git a/Master/texmf-dist/doc/eplain/doc/eplain.html b/Master/texmf-dist/doc/eplain/doc/eplain.html new file mode 100644 index 00000000000..968582fd698 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/doc/eplain.html @@ -0,0 +1,8078 @@ + + +Eplain: Expanded Plain TeX + + + + + + + + + + +

Eplain: Expanded Plain TeX

+ + + + +
+

Table of Contents

+ +
+ +
+


+ +Next: , +Up: (dir) + +
+ +

Eplain

+ +

This manual documents the Eplain macros, version 3.1, +December 2006. Eplain provides functionality for plain TeX that +is intended to be useful regardless of how your document is actually +formatted. + +

Most of this manual is in the public domain, like most of the Eplain +code. It was mostly written by Karl Berry, starting in 1989. Steven +Smith wrote the documentation for the commutative diagram macros; this +chapter is under the GNU General Public License. Adam Lewenberg has +made additions and corrections. Oleg Katsitadze has helped with writing +the section on LaTeX packages and the chapter on hyperlinks. + +

+

--- The Detailed Node Listing --- + +

User definitions + +

+ +

Citations + +

+ +

Displays + +

+ +

Lists + +

+ +

Contents + +

+ +

Cross-references + +

+ +

Equation references + +

+ +

Indexing + +

+ +

Indexing terms + +

+ +

Loading LaTeX packages + +

+ +

Hyperlinks + +

+ +

Implicit hyperlinks + +

+ +

Index hyperlinks + +

+ +

Hyperlink drivers + +

+ +

Hyperlink driver hypertex:: + +

+ +

Hyperlink drivers pdftex and dvipdfm:: + +

+ +

Setting hyperlink types and options + +

+ +

Turning hyperlinks on/off + +

+ +

Arrow theoretic diagrams + +

+ +

Commutative diagrams + +

+ +

Programming definitions + +

+ +

Expansion + +

+ +

Demo files + +

+ + + +
+


+ +Next: , +Previous: Top, +Up: Top + +
+ +

1 Introduction

+ +

+The Eplain macro package expands on and extends the definitions in +plain TeX. This manual describes the definitions that you, as either +an author or a macro writer, might like to use. It doesn't discuss the +implementation; see comments in the source code (xeplain.tex) for +that. + +

Eplain is not intended to provide “generic” typesetting capabilities, as +do LaTeX (written by Leslie Lamport) +or Texinfo +(written by Richard Stallman and others). +Instead, it provides definitions that are intended to be useful +regardless of the high-level commands that you use when you actually +prepare your manuscript. + +

For example, Eplain does not have a command \section, which +would format section headings in an “appropriate” way, such as +LaTeX's \section. The philosophy of Eplain is +that some people will always need or want to go beyond the macro +designer's idea of “appropriate”. Such canned macros are +fine—as long as you are willing to accept the resulting output. If +you don't like the results, or if you are trying to match a different +format, you are out of luck. + +

On the other hand, almost everyone would like capabilities such as +cross-referencing by labels, so that you don't have to put actual page +numbers in the manuscript. The author of Eplain +is not aware of any generally available macro packages that (1) do +not force their typographic style on an author, and yet (2) provide +such capabilities. + +

Besides such generic macros as cross-referencing, Eplain +contains another set of definitions: ones that change the conventions of +plain TeX's output. For example, math displays in TeX are, by +default, centered. If you want your displays to come out +left-justified, you have to plow through The TeXbook to find +some way to do it, and then adapt the code to your own needs. Eplain +tries to take care of the messy details of such things, while still +leaving the detailed appearance of the output up to you. + +

Finally, numerous definitions turned out to be useful as Eplain was +developed. They are also documented in this manual, on the chance that +people writing other macros will be able to use them. + +

You can send bug reports or suggestions to +tex-eplain@tug.org. The current version number of Eplain is +defined as the macro \fmtversion +at the end of the source file eplain.tex. When corresponding, +please refer to it. + +

To get on this mailing list yourself, email +tex-eplain-request@tug.org with a message whose body contains +a line + +

     subscribe you@your.preferred.address
+
+

or visit http://tug.org/mailman/listinfo/tex-eplain. + +

David Walden had reported his experience with Eplain as a new user. +The article is available online at +http://tug.org/pracjourn/2005-4/walden. An introductory +article (written for +TUGboat) is also available online at +http://tug.org/eplain/misc/tb84katsi.pdf. + + +

+


+ +Next: , +Previous: Introduction, +Up: Top + +
+ +

2 Installation

+ +

Your TeX installation should already contain a version of Eplain +(eplain.tex) in its main texmf tree (usually under +/usr/share/texmf/tex/eplain/ on Unix systems). To install a +newer version of Eplain, put the new eplain.tex (included in +Eplain distributions) in the tex/eplain/ subdirectory of your +local texmf tree. The newer version you install in the local +tree should override the older one in the main tree. + +

The location of the local texmf tree obviously depends on your +operating system and TeX installation. On Unix systems the usual +location is /usr/local/share/texmf/. If you don't have write +permissions for /usr/local/share/texmf/, many installations read +the texmf tree in the user's home directory; eplain.tex +then should go under ~/texmf/tex/eplain/. For more information +about TeX directory structure, please see +http://www.tex.ac.uk/cgi-bin/texfaq2html?label=tds. + +

If you prefer to install eplain.tex in a non-standard place, set +an environment variable (TEXINPUTS for the Web2C port of TeX +to Unix) to tell TeX how to find it. + +

If you want, you can also create a format (.fmt) +file for Eplain, which will eliminate the time spent reading the macro +source file with \input. You do this by issuing a sequence of +Unix commands something like this: + +

     prompt$ touch eplain.aux
+     prompt$ initex
+     This is TeX, ...
+     **&plain eplain
+     (eplain.tex)
+     *\dump
+     ... messages ...
+
+

You must make sure that eplain.aux exists before you +run initex; otherwise, warning messages about undefined labels +will never be issued. + +

You then have to install the resulting eplain.fmt in your local +texmf tree or set an environment variable to tell TeX how to +find it. For the Web2C port of TeX to Unix, format files are usually +installed under /usr/local/share/texmf/web2c/ or +/var/lib/texmf/web2c/; the environment variable is +TEXFORMATS. + + +

+


+ +Next: , +Previous: Installation, +Up: Top + +
+ +

3 Invoking Eplain

+ +

The simplest way to use Eplain is simply to put: + +

     \input eplain
+
+

at the beginning of your input file. The macro file is small +enough that reading it does not take an unbearably long time—at least on +contemporary machines. + +

In addition, if a format (.fmt) +file has been created for Eplain (see the previous section), you can +eliminate the time spent reading the macro source file. You do this +by responding &eplain to TeX's `**' prompt. For +example: + +

     initex
+     This is TeX, ...
+     **&eplain myfile
+
+

Depending on the implementation of TeX which you are using, you might +also be able to invoke TeX as eplain and have the format file +automatically read. + +

If you write something which you will be distributing to others, you +won't know if the Eplain format will be loaded already. If it is, then +doing \input eplain will waste time; if it isn't, then you must +load it. To solve this, Eplain defines the control sequence +\eplain +to be the letter t (a convention borrowed from Lisp; it doesn't +actually matter what the definition is, only that the definition +exists). Therefore, you can do the following: + +

     \ifx\eplain\undefined \input eplain \fi
+
+

where \undefined must never acquire a definition. + +

Eplain consists of several source files: +

+
xeplain.tex
most of the macros; + +
arrow.tex
commutative diagram macros (see Arrow theoretic diagrams), written by +Steven Smith; + +
btxmac.tex
bibliography-related macros (see Citations); + +
ifpdf.sty
sets the switch \ifpdf, which can be used to +detect pdfTeX in PDF mode (see Checking for PDF output), written by Heiko Oberdiek; + +
path.sty
macro for allowing line breaks at punctuation characters within long +pathnames, electronic mail addresses, etc., (see Paths), written +by Philip Taylor; + +
texnames.sty
abbreviations for various TeX-related names (see Logos), edited +by Nelson Beebe. + +
+ +

The file eplain.tex is all of these files merged +together, with comments removed. + +

All of these files except xeplain.tex can be input individually, +if all you want are the definitions in that file. + +

Also, since the bibliography macros are fairly extensive, you might not +want to load them, to conserve TeX's memory. Therefore, if the +control sequence \nobibtex +is defined, then the bibliography definitions are skipped. You must set +\nobibtex before eplain.tex is read, naturally. For +example, you could start your input file like this: + +

     \let\nobibtex = t
+     \input eplain
+
+

By default, \nobibtex is undefined, and so the +bibliography definitions are made. + +

Likewise, define \noarrow if you don't want to include the +commutative diagram macros from arrow.tex, perhaps because you +already have conflicting ones. + +

If you don't want to read or write an aux file at all, for any +kind of cross-referencing, define \noauxfile +before reading eplain.tex. This also turns off all warnings +about undefined labels. + +

Eplain conflicts with AMSTeX (to be precise, with amsppt.sty): +the macros \cite and \ref are defined by both. + +

If you want to use AMSTeX's \cite, the solution is to define +\nobibtex before reading Eplain, as described above. + +

If you have amsppt.sty loaded and use \ref, Eplain writes +a warning on your terminal. If you want to use the AMSTeX +\ref, do \let\ref = \amsref after reading Eplain. +To avoid the warning, do \let\ref = \eplainref after reading +Eplain and before using \ref. + +

Sometimes you may need to run TeX more then once on your +.tex file in order to produce and typeset indexes, resolve +undefined cross-references and/or citations. The shell script +texi2dvi from the Texinfo documentation system (see +http://www.gnu.org/software/texinfo) can automate this process: +it runs BibTeX, MakeIndex and TeX as many times as needed to +complete the compilation process. You will need to set the +LATEX environment variable to `tex'. For example, in a +Bourne-compatible shell, the following command will do all the work: + +

     prompt$ LATEX=tex texi2dvi file.tex
+
+

(Despite the name, texi2dvi can also produce +.pdf files; just set `LATEX=pdftex'.) See the output from +the command texi2dvi --help for invoking information and a +full list of options. + + +

+


+ +Next: , +Previous: Invoking Eplain, +Up: Top + +
+ +

4 User definitions

+ +

This chapter describes definitions that are meant to be used directly +in a document. When appropriate, ways to change the default +formatting are described in subsections. + +

+ +
+


+ +Next: , +Up: User definitions + +
+ +

4.1 Diagnostics

+ +

Plain TeX provides the \tracingall command, to turn on the +maximum amount of tracing possible in TeX. The (usually voluminous) +output from \tracingall goes both on the terminal and into the +transcript file. +It is sometimes easier to have the output go only to the transcript +file, so you can peruse it at your leisure and not obscure other output +to the terminal. So, Eplain provides the command \loggingall. +(For some reason, this command is available in Metafont, but not in +TeX.) + +

It is also sometimes useful to see the complete contents of boxes. +\tracingboxes does this. (It doesn't affect whether or not the +contents +are shown on the terminal.) + +

You can turn off all tracing with \tracingoff. + +You can also turn logging on and off globally, so you don't have to +worry about whether or not you're inside a group at the time of command. +These variants are named \gloggingall +and \gtracingall. + +Finally, if you write your own help messages (see \newhelp +in The TeXbook), you want a convenient way to break lines in +them. This is what TeX's \newlinechar parameter is for; +however, plain TeX doesn't set \newlinechar. Therefore, +Eplain defines it to be the character ^^J. + +

For example, one of Eplain's own error messages is defined as follows: + +

     \newhelp\envhelp{Perhaps you forgot to end the previous^^J%
+        environment? I'm finishing off the current group,^^J%
+        hoping that will fix it.}%
+
+
+


+ +Next: , +Previous: Diagnostics, +Up: User definitions + +
+ +

4.2 Rules

+ +

The default dimensions of rules are defined in chapter 21 of the +The TeXbook. To sum up what is given there, the “thickness” +of rules is +0.4pt by default. Eplain defines three parameters that let you change +this dimension: \hruledefaultheight, \hruledefaultdepth, +and \vruledefaultwidth. By default, they are defined as +The TeXbook describes. + +

But it would be wrong to redefine \hrule and \vrule. For +one thing, some macros in plain TeX depend on the default dimensions +being used; for another, rules are used quite heavily, and the +performance impact of making it a macro can be noticeable. Therefore, +to take advantage of the default rule parameters, you must use +\ehrule +and \evrule. + + +

+


+ +Next: , +Previous: Rules, +Up: User definitions + +
+ +

4.3 Citations

+ +

Bibliographies are part of almost every technical document. To handle +them easily, you need two things: a program to do the tedious +formatting, and a way to cite references by labels, rather than by +numbers. The BibTeX program, written by Oren Patashnik, takes care +of the first item; the citation commands in LaTeX, written to be used +with BibTeX, take care of the second. Therefore, +Eplain adopts the use of BibTeX, and virtually the same interface as +LaTeX. + +

The general idea is that you put citation commands in the text of your +document, and commands saying where the bibliography data is. When you +run TeX, these commands produce output on the file with the same root +name as your document (by default) and the extension .aux. +BibTeX reads this file. You should put the bibliography data in a +file or files with the extension .bib. BibTeX writes out a +file with the same root +name as your document and extension .bbl. Eplain reads this file +the next time you run your document through TeX. (It takes +multiple passes to get everything straight, because usually after seeing +your bibliography typeset, you want to make changes in the .bib +file, which means you have to run BibTeX again, which means you have +to run TeX again...) An annotated example of the whole process is +given below. + +

If your document has more than one bibliography—for example, if it +is a collection of papers—you can tell Eplain to use a different root +name for the .bbl file by defining the control sequence +\bblfilebasename. +The default definition is simply \jobname. + +

See the document BibTeXing (whose text is in the file +btxdoc.tex, which should be in the Eplain distribution you got) +for information on how to write your .bib files. Both the +BibTeX and the Eplain distributions contain several examples, also. + +

The \cite +command produces a citation in the text of your document. The exact +printed form the citation will take is under your control +(see Formatting citations). \cite takes one +required argument, a comma-separated list of cross-reference labels +(see Cross-references, for exactly what characters are allowed in +such labels). Warning: spaces in this list are taken as part of the +following label name, which is probably not what you expect. +The \cite command also produces a command +in the .aux file that tells BibTeX to retrieve the given reference(s) +from the .bib file. \cite also takes one optional argument, +which you specify within square brackets, as in LaTeX. This text is +simply typeset after the citations. (See the example below.) + +

Eplain can create hypertext links for citations pointing to the relevant +bibliography entries (see Citation hyperlinks). + +

Another command, \nocite, +puts the given reference(s) into the bibliography, but produces nothing +in the text. + +

The \bibliography +command is next. It serves two purposes: producing the typeset +bibliography, and telling BibTeX the root names of the .bib +files. Therefore, the argument to \bibliography is a comma +separated list of the .bib files (without the `.bib'). Again, +spaces in this list are significant. + +

You tell BibTeX the particular style in which you want your +bibliography typeset with one more command: +\bibliographystyle. +The argument to this is a single filename style, which tells +BibTeX to look for a file style.bst. +See the document Designing BibTeX styles (whose text is in the +btxhak.tex) for information on how to write your own styles. + +

Eplain automatically reads the citations from the .aux file when +your job starts. + +

If you don't want to see the messages about undefined citations, you +can say \xrefwarningfalse before making any citations. +Eplain automatically does this if the .aux file does not exist. +You can restore the default by saying \xrefwarningtrue. + +

Here is a TeX input file that illustrates the various commands. + +

     \input eplain                    % Reads the .aux file.
+     Two citations to Knuthian works:
+       \cite[note]{surreal,concrete-math}.
+     \beginsection{References.}\par   % Title for the bibliography.
+     \bibliography{knuth}             % Use knuth.bib for the labels.
+     \bibliographystyle{plain}        % Number the references.
+     \end                             % End of the document.
+
+

+If we suppose that this file was named citex.tex and that the +bibliography data is in knuth.bib (as the \bibliography +command says), the following commands do what's required. (`$ ' +represents the shell prompt.) + +

     $ tex citex       (produces undefined citation messages)
+     $ bibtex citex    (read knuth.bib and citex.aux, write citex.bbl)
+     $ tex citex       (read citex.bbl, still have undefined citations)
+     $ tex citex       (one more time, to resolve the references)
+
+

The texi2dvi program can help you automate this +process (see Invoking Eplain). + +

The output looks something like (because we used the plain +bibliography style): + +

+Two citations to Knuthian works: [2,1 note]. + +

References + +

[1] Ronald L. Graham, Donald E. Knuth, and Oren Patashnik. Concrete +Mathematics. Addison-Wesley, Reading, Massachusetts, 1989. + +

[2] Donald E. Knuth. Surreal Numbers. Addison-Wesley, Reading, +Massachusetts, 1974. +

+ +

See the BibTeX documentation for information on how to write the +bibliography databases, and the bibliography styles that are available. +(If you want your references printed with names, as in [Knu74], instead +of numbered, the bibliography style is alpha.) + + +

+ +
+


+ +Next: , +Up: Citations + +
+ +

4.3.1 Formatting citations

+ +

+You may wish to change Eplain's formatting of citations; i.e., the +result of your \cite commands. By default, the citation labels +are printed one after another, separated by commas and enclosed in +brackets, using the main text font. Some formats require other styles, +such as superscripted labels. You can accomodate such formats by +redefining the following macros. + +

+
\printcitestart
\printcitefinish
Eplain expands these macros at the begining and end of the list of +citations for each \cite command. By default, they produce a +`[' and `]', respectively. + +
\printbetweencitations
If a \cite command has multiple citations, as in +\cite{acp,texbook}, Eplain expands this macro in between each +pair of citations. By default, it produces a comma followed by a space. + +
\printcitenote
This macro takes one argument, which is the optional note to the +\cite command. If the \cite command had no note, this +macro isn't used. Otherwise, it should print the note. By default, the +note is preceded with a comma and a space. +
+ +

Here is an example, showing you could produce citations as +superscripted labels, with the optional notes in parentheses. + +

     \def\printcitestart{\unskip $^\bgroup}
+     \def\printbetweencitations{,}
+     \def\printcitefinish{\egroup$}
+     \def\printcitenote#1{\hbox{\sevenrm\space (#1)}}
+
+
+


+ +Previous: Formatting citations, +Up: Citations + +
+ +

4.3.2 Formatting bibliographies

+ +

+You may wish to change Eplain's formatting of the bibliography, +especially with respect to the fonts that are used. Therefore, Eplain +provides the following control sequences: + +

+
\biblabelwidth
This control sequence represents a \dimen register, and its value +is the width of the widest label in the bibliography. Although it is +unlikely you will ever want to redefine it, you might want +to use it if you redefine \biblabelprint, below. + +
\biblabelprint
This macro takes one argument, the label to print. By default, the +label is put in a box of width \biblabelwidth, and is followed by +an enspace. When you want to change the spacing around the labels, this +is the right macro to redefine. + +
\biblabelcontents
This macro also takes one argument, the label to print. By default, the +label is printed using the font \bblrm (below), and enclosed in +brackets. When you want to change the appearance of the label, but not +the spacing around it, this is the right macro to redefine. + +
\bblrm
The default font used for printing the bibliography. + +
\bblem
The font used for printing the titles and other “emphasized” material. + +
\bblsc
In some styles, authors' names are printed in a caps-and-small-caps +font. In those cases, this font is used. + +
\bblnewblock
This is invoked between each of the parts of a bibliography entry. The +default is to leave some extra space between the parts; you could +redefine it to start each part on a new line (for example). A part is +simply a main element of the entry; for example, the author is a part. +(It was LaTeX that introduced the (misleading, as far as I am +concerned) term `block' for this.) + +
\biblabelextraspace
Bibliography entries are typeset with a hanging indentation of +\biblabelwidth plus this. The default is .5em, where the +em width is taken from the \bblrm font. If you want to change +this, you should do it inside \bblhook. + +
\bblhook
This is expanded before reading the .bbl file. By +default, it does nothing. You could, for example, define it to set the +bibliography fonts, or produce the heading for the references. Two +spacing parameters must be changed inside \bblhook: +\parskip, which produces extra space between the items; and +\biblabelextraspace, which is described above. +(By the way, \hookappend won't work with \bblhook, despite +the names. Just use \def.) + +
+ +

If you are really desperate, you can also hand-edit the .bbl file +that BibTeX produces to do anything you wish. + +

+


+ +Next: , +Previous: Citations, +Up: User definitions + +
+ +

4.4 Displays

+ +

+By default, TeX centers displayed material. (Displayed material is +just whatever you put between $$'s—it's not necessarily +mathematics.) Many layouts would be better served if the displayed +material was left-justified. Therefore, Eplain provides the command +\leftdisplays, +which indents displayed material by \parindent plus +\leftskip, plus \leftdisplayindent. + +You can go back to centering displays with \centereddisplays. +(It is usually poor typography to have both centered and left-justified +displays in a single publication, though.) + +

\leftdisplays also changes the plain TeX commands that deal +with alignments inside math displays, +\displaylines, +\eqalignno, +and \leqalignno, +to produce left-justified text. You can still override this formatting +by inserting \hfill glue, as explained in The TeXbook. + +

+ +
+


+ +Up: Displays + +
+ +

4.4.1 Formatting displays

+ +

If you want some other kind of formatting, you can write a definition +of your own, analogous to \leftdisplays. You need only make sure +that \leftdisplaysetup +is called at the beginning of every display (presumably by invoking it +in TeX's \everydisplay parameter), and to define +\generaldisplay. + +\leftdisplays expands the old value of \everydisplay +before calling \leftdisplaysetup, so that any changes you have made +to it won't be lost. That old token list as available as the value of +the token register \previouseverydisplay. + + +

+


+ +Next: , +Previous: Displays, +Up: User definitions + +
+ +

4.5 Time of day

+ +

+TeX provides the day, month, and year as numeric quantities (unless +your TeX implementation is woefully deficient). Eplain provides some +control sequences to make them a little more friendly to humans. + +

\monthname +produces the name of the current month, abbreviated to three letters. + +

\fullmonthname +produces the name of the current month, unabbreviated (in English). + +

\timestring +produces the current time, as in `1:14 p.m.' + +

\timestamp +produces the current date and time, as in `23 Apr 64 1:14 p.m.'. +(Except the spacing is slightly different.) + +

\today +produces the current date, as in `23 April 1964'. + +

+


+ +Next: , +Previous: Time of day, +Up: User definitions + +
+ +

4.6 Lists

+ +

+Many documents require lists of items, either numbered or simply +enumerated. Plain TeX defines one macro to help with creating lists, +\item, but that is insufficient in many cases. Therefore, +Eplain provides two pairs of commands: + +

+
\numberedlist ... \endnumberedlist
\orderedlist ... \endorderedlist
These commands (they are synonyms) produce a list with the items +numbered sequentially, starting from one. A nested \numberedlist +labels the items with lowercase letters, starting with `a'. Another +nested \numberedlist labels the items with roman numerals. Yet +more deeply nested numbered lists label items with `*'. + +
\unorderedlist ... \endunorderedlist
This produces a list with the items labelled with small black boxes +(“square bullets”). A nested \unorderedlist labels items with +em-dashes. Doubly (and deeper) nested unordered lists label items with +`*'s. + +
+ +

The two kinds of lists can be nested within each other, as well. + +

In both kinds of lists, you begin an item with \li. +An item may continue for several paragraphs. Each item starts a +paragraph. + +

You can give \li an optional argument, a cross-reference label. +It's defined to be the “marker” for the current item. This is useful +if the list items are numbered. You can produce the value of the label +with \xrefn. See Cross-references. + +

Eplain can create hypertext links for the markers produced by +\xrefn pointing to the relevant list item (see List hyperlinks). + +

You can also say \listcompact +right after \numberedlist or \unorderedlist. The items in +the list will then not have any extra space between them +(see Formatting lists). You might want to do this if the items in +this particular list are short. + +

Here is an example: + +

     \numberedlist\listcompact
+     \li The first item.
+     \li The second item.
+     
+     The second paragraph of the second item.
+     \endnumberedlist
+
+ + +
+


+ +Up: Lists + +
+ +

4.6.1 Formatting lists

+ +

+Several registers define the spacing associated with lists. It is +likely that their default values won't suit your particular layout. + +

+
\abovelistskipamount, \belowlistskipamount
The vertical glue inserted before and after every list, respectively. + +
\interitemskipamount
The vertical glue inserted before each item except the first. +\listcompact resets this to zero, as mentioned above. + +
\listleftindent, \listrightindent
\listrightindent is the amount of space by which the list is +indented on the right; i.e., it is added to \rightskip. +\listleftindent is the amount of space, relative to +\parindent, by which the list is indented on the left. Why treat +the two parameters differently? Because (a) it is more useful to +make the list indentation depend on the paragraph indentation; +(b) footnotes aren't formatted right if \parindent is reset +to zero. + +
+ +

The three vertical glues are inserted by macros, and preceded by +penalties: \abovelistskip +does \vpenalty\abovelistpenalty +and then \vskip\abovelistskip. \belowlistskip +and \interitemskip +are analogous. + +

In addition, the macro \listmarkerspace +is called to separate the item label from the item text. This is set to +\enspace by default. + +

If you want to change the labels on the items, you can redefine these +macros: +\numberedmarker +or \unorderedmarker. +The following registers might be useful if you do: + +

+
\numberedlistdepth, \unorderedlistdepth
These keep track of the depth of nesting of the two kinds of lists. + +
\itemnumber, \itemletter
These keep track of the number of items that have been seen in the current +numbered list. They are both integer registers. The difference is that +\itemnumber starts at one, and \itemletter starts at 97, +i.e., lowercase `a'. + +
+ +

You can also redefine the control sequences that are used internally, +if you want to do something radically different: \beginlist +is invoked to begin both kinds of lists; \printitem +is invoked to print the label (and space following the label) for each +item; and \endlist +is invoked to end both kinds of +lists. + + +

+


+ +Next: , +Previous: Lists, +Up: User definitions + +
+ +

4.7 Verbatim listing

+ +

It is sometimes useful to include a file verbatim in your document; +for example, part of a computer program. The \listing +command is given one argument, a filename, and produces the contents of +that file in your document. \listing expands \listingfont +to set the current font. The default value of \listingfont +is \tt. + +

You can take arbitrary actions before reading the file by defining the macro +\setuplistinghook. +This is expanded just before the file is input. + +

If you want to have line numbers on the output, you can say +\let\setuplistinghook = \linenumberedlisting. +The line numbers are stored in the count register \lineno while +the file is being read. You can redefine the macro +\printlistinglineno +to change how they are printed. + +

Normally, the \listing command will add a final empty line at +the end of the output, even if the file does not end in a newline. To +suppress this final line, you can say +\let\setuplistinghook = \nolastlinelisting. +This also works with line numbers (say +\def\setuplistinghook{\linenumberedlisting \nolastlinelisting}), +but only if \printlistinglineno +consists exclusively of boxes at the top level (i.e., any +\kerns or glue should be wrapped up in a box). + +

You can use the form feed control character (ASCII +code 12, typed as CTRL-L) in the file to force a page break +in the output. + +

You can produce in-line verbatim text in your document with \verbatim. +End the text with |endverbatim. If you need a `|' in the text, +double it. If the first character of the verbatim text is a space, use +| . (| will work elsewhere in the argument, too, but +isn't necessary.) + +

For example: + +

     \verbatim| ||\#%&!|endverbatim
+
+

produces |\#%&!. + +

Line breaks and spaces in the verbatim text are preserved. + +

You can change the verbatim escape character from the default `|' +with \verbatimescapechar char; for example, this changes +it to `@'. + +

     \verbatimescapechar \@
+
+

The backslash is not necessary in some cases, but is in +others, depending on the catcode of the character. The argument to +\verbatimescapechar is used as \catcode `char, so +the exact rules follow that for \catcode. + +

Because \verbatim must change the category code of special +characters, calling inside a macro definition of your own does not work +properly. For example: + +

     \def\mymacro{\verbatim &#%|endverbatim}% Doesn't work!
+
+

To accomplish this, you must change the category codes yourself before +making the macro definition. Perhaps \uncatcodespecials will +help you (see Category codes). + +

+


+ +Next: , +Previous: Verbatim listing, +Up: User definitions + +
+ +

4.8 Contents

+ +

Producing a table of contents that is both useful and aesthetic is one +of the most difficult design problems in any work. Naturally, Eplain +does not pretend to solve the design problem. Collecting the raw data +for a table of contents, however, is much the same across documents. +Eplain uses an auxiliary file with extension .toc +(and the same root name as your document) to save the information. + +

+ +
+


+ + +Next: , +Up: Contents + +
+ +

4.8.1 Writing the .toc file

+ +

To write an entry for the table of contents, you say +\writetocentry{part}{text}, +where part is the type of part this entry is, e.g., +`chapter', and text is the text of the title. +\writetocentry puts an entry into the .toc file that looks +like \tocpartentry{text}{page number} +(unless part is an integer, see below). The text is +written unexpanded. + +

A related command, \writenumberedtocentry, takes one additional +argument, the first token of which is expanded at the point of the +\writenumberedtocentry, but the rest of the argument is not +expanded. The usual application is when the parts of the document are +numbered. On the other hand, the one-level expansion allows you to use +the argument for other things as well (author's names in a proceedings, +say), and not have accents or other control sequences expanded. The +downside is that if you want full expansion of the third +argument, you don't get it—you must expand it yourself, before you +call \writenumberedtocentry. + +

For example: + +

     \writenumberedtocentry{chapter}{A $\sin$ wave}{\the\chapno}
+     \writetocentry{section}{A section title}
+
+

Supposing \the\chapno expanded to `3' and that the +\write's occurred on pages eight and nine, respectively, the +above writes the following to the .toc file: + +

     \tocchapterentry{A $\sin$ wave}{3}{8}
+     \tocsectionentry{A section title}{9}
+
+

A variation on \writenumberedtocentry is +\writenumberedtocline, differing only in the order of the +parameters it takes and writes for the \tocpartentry +control sequences. To continue the previous example: + +

     \writenumberedtocline{chapter}{\the\chapno}{A $\sin$ wave}
+
+

writes the following to the .toc file: + +

     \tocchapterentry{3}{A $\sin$ wave}{8}
+
+

Such ordering of the parameters allows the +\tocpartentry macros to typeset the text of the entry +without actually reading it as an argument. This is required for +entries which need to change character catcodes, e.g., to produce +verbatim text (see Verbatim listing). + +

Each of \writetocentry, \writenumberedtocentry and +\writenumberedtocline processes a numeric part argument +specially. If you pass part expanding to an integer, these +macros write into the .toc file an entry that starts with +\tocentry{part}. Thus, you can define a single +\tocentry macro which formats all entries for a table of +contents. To continue the previous examples: + +

     \writenumberedtocentry{1}{A $\sin$ wave}{\the\chapno}
+     \writenumberedtocline{1}{\the\chapno}{A $\sin$ wave}
+     \writetocentry{2}{A section title}
+
+

writes the following to the .toc file: + +

     \tocentry{1}{A $\sin$ wave}{3}{8}
+     \tocentry{1}{3}{A $\sin$ wave}{8}
+     \tocentry{2}{A section title}{9}
+
+ + +

4.8.2 Reading the .toc file

+ +

You read the .toc file with the command \readtocfile. +Naturally, whatever \toc... entry commands that were written +to the file must be defined when \readtocfile is invoked. Eplain +has minimal definitions for \tocchapterentry, +\tocsectionentry, and \tocsubsectionentry, just to prevent +undefined control sequence errors in common cases. They aren't suitable +for anything but preliminary proofs. + +

Each of \writetocentry, \writenumberedtocentry and +\writenumberedtocline opens +the .toc file for writing, thereby deleting the information from the +previous run. You should therefore arrange that \readtocfile be +called before the first call to a \writetoc... macro. +\readtocfile does not itself delete the information +from the .toc file, so that you can call it several times, +e.g., to create both a short +and normal table of contents. (To produce this in particular, define +\tocsectionentry to produce nothing while you are reading +.toc file for a short table of contents (see Macro arguments).) + +

On the other hand, if you don't want to rewrite the .toc file at +all, perhaps because you are only running TeX on part of your +manuscript, you can set \rewritetocfilefalse. + + +

+


+ + +Next: , +Previous: Reading the .toc file, +Up: Contents + +
+ +

4.8.3 Changing the .toc file's root name

+ +

By default, the .toc file has the root \jobname. If your +document has more than one contents—for example, if it is a collection +of papers, some of which have their own contents—you can tell Eplain +to use a different root name by defining the control sequence +\tocfilebasename. + +Note that \writetocentry, \writenumberedtocentry and +\writenumberedtocline will +open the contents file for writing only at the first call, using the +value of \tocfilebasename at that time. Changing the value of +\tocfilebasename afterwards will not affect which file gets +written, although it will affect which file gets read by +\readcontentsfile. In case you need to write several contents +files from a single TeX job, use \definecontentsfile +(see Alternative contents files). + +

+


+ +Previous: Changing the .toc file's root name, +Up: Contents + +
+ +

4.8.4 Alternative contents files

+ +

In addition to the usual table of contents, you may want to have a list +of figures, list of tables, or other such contents-like list. You can do +this with \definecontentsfile{abbrev}. All of the +above commands are actually a special case that Eplain predefines with + +

     \definecontentsfile{toc}
+
+

The abbrev is used both for the file extension and in +the control sequence names. + +

+


+ + +Next: , +Previous: Contents, +Up: User definitions + +
+ +

4.9 Cross-references

+ +

It is often useful to refer the reader to other parts of your document; +but putting literal page, section, equation, or whatever numbers in the +text is certainly a bad thing. + +

Eplain therefore provides commands for symbolic cross-references. It +uses an auxiliary file with extension .aux +(and the same root name as your document) to keep track of the +information. Therefore, it takes two passes to get the cross-references +right—one to write them out, and one to read them in. Eplain +automatically reads the .aux file at the first reference; after +reading it, Eplain reopens it for writing. + +

You can control whether or not Eplain warns you about undefined +labels. See Citations. + +

Labels in Eplain's cross-reference commands can use characters of +category code eleven (letter), twelve (other), ten (space), three (math +shift), four (alignment tab), seven (superscript), or eight (subscript). +For example, `(a1 $&^_' is a valid label (assuming the category +codes of plain TeX), but `%#\{' has no valid characters. + +

You can also do symbolic cross-references for bibliographic citations +and list items. See Citations, and Lists. + +

Eplain can create hypertext links for the cross-references +(see Cross-reference hyperlinks). + +

+ + + +

4.9.1 Defining generic references

+ +

+Eplain provides the command \definexref for general +cross-references. It takes three arguments: the name of the label (see +section above for valid label names), the value of the label (which can +be anything), and the “class” of the reference—whether it's a +section, or theorem, or what. For example: + +

     \definexref{sec-intro}{3.1}{section}
+
+

Of course, the label value is usually generated by another +macro using TeX count registers or some such. + +

\definexref doesn't actually define label; instead, it +writes out the definition to the .aux file, where Eplain will read +it on the next TeX run. + +

The class argument is used by the \ref and \refs +commands. See the next section. + +

+


+ +Previous: Defining generic references, +Up: Cross-references + +
+ +

4.9.2 Using generic references

+ +

+To retrieve the value of the label defined via \definexref (see +the previous section), Eplain provides the following macros: + + + +

\refn{label}

\xrefn{label}
\refn and \xrefn (they are synonyms) produce the bare +definition of label. If label isn't defined, issue a +warning, and produce label itself instead, in typewriter. (The +warning isn't given if \xrefwarningfalse.) + +
\ref{label}
Given the class c for label (see the description of +\definexref in the previous section), expand the control sequence +\c word (if it's defined) followed by a tie. Then call +\refn on label. (Example below.) + +


\refs{label}
Like \ref, but append the letter `s' to the +\...word. + +
+ +

The purpose of the \...word macro is to produce the word +`Section' or `Figure' or whatever that usually precedes the actual +reference number. + +

Here is an example: + +

     \def\sectionword{Section}
+     \definexref{sec-intro}{3.1}{section}
+     \definexref{sec-next}{3.2}{section}
+     See \refs{sec-intro} and \refn{sec-next} ...
+
+

This produces `See Sections 3.1 and 3.2 ...' + +

+


+ +Next: , +Previous: Cross-references, +Up: User definitions + +
+ +

4.10 Page references

+ +

Eplain provides two commands for handling references to page numbers, +one for definition and one for use. + +

+
\xrdef{label}
Define label to be the current page number. This produces no +printed output, and ignores following spaces. + +
\xref{label}
Produce the text `p. pageno', which is the usual form for +cross-references. The pageno is actually label's +definition; if label isn't defined, the text of the label itself +is printed. The `p. ' prefix is defined by \xrefpageword. +Its default definition is p.\thinspace. + +
+ +

Eplain can create hypertext links for the page references (see Page reference hyperlinks). + +

+


+ +Next: , +Previous: Page references, +Up: User definitions + +
+ +

4.11 Equation references

+ +

Instead of referring to pages, it's most useful if equation labels +refer to equation numbers. Therefore, Eplain reserves a \count +register, \eqnumber, +for the current equation number, and increments it at each +numbered equation. + +

Here are the commands to define equation labels and then refer to them: + +

+
\eqdef{label}
This defines label to be the current value of \eqnumber, +and, if the current context is not inner, then produces a \eqno +command. (The condition makes it possible to use \eqdef in an +\eqalignno construction, for example.) The text of the equation +number is produced using \eqprint. See Formatting equation references. + +

If label is empty, you still get an equation number (although +naturally you can't reliably refer to it). This is useful if you want +to put numbers on all equations in your document, and you don't want to +think up unique labels. + +

To refer to the last equation with the empty label, you just use the +empty label in one of the equation reference macros (see below). This +can be handy when you want to refer to an equation shortly after its +definition, say, in the sentence following the displayed equation, and +do not intend to refer to the equation later. But use this trick with +extreme caution: if later you change the text and insert another +empty definition between the original definition and the reference, +the reference will start to refer to the new empty-labeled equation. + +

\eqdefn{label}
This is like \eqdef, except it always omits the \eqno +command. It can therefore be used in places where \eqdef can't; +for example, in a non-displayed equation. The text of the equation +number is not produced, so you can also use it in the (admittedly +unusual) circumstance when you want to define an equation label but not +print that label. + +
\eqref{label}
This produces a formatted reference to label. If label is +undefined (perhaps because it is a forward reference), it just produces +the text of the label itself. Otherwise, it calls \eqprint. + +
\eqrefn{label}
This produces the cross-reference text for label. That is, it +is like \eqref, except it doesn't call \eqprint. + +
+ +

Equation labels can contain the same characters that are valid in +general cross-references. + +

Eplain can create hypertext links for the equation references +(see Equation reference hyperlinks). + +

+ + + +

4.11.1 Formatting equation references

+ +

Both defining an equation label and referring to it should usually +produce output. This output is produced with the \eqprint macro, +which takes one argument, the equation number being defined or referred +to. By default, this just produces `(number)', where +number is the equation number. To produce the equation number in +a different font, or with different surrounding symbols, or whatever, +you can redefine \eqprint. +For example, the following definition would print all equation numbers +in italics. (The extra braces define a group, to keep the font change +from affecting surrounding text.) + +

     \def\eqprint#1{{\it (#1)}}
+
+

In addition to changing the formatting of equation numbers, you might want +to add more structure to the equation number; for example, you might +want to include the chapter number, to get equation numbers like +`(1.2)'. To achieve this, you redefine \eqconstruct. +For example: + +

     \def\eqconstruct#1{\the\chapternumber.#1}
+
+

(If you are keeping the chapter number in a count register named +\chapternumber, naturally.) + +

The reason for having both \eqconstruct and \eqprint may +not be immediately apparent. The difference is that \eqconstruct +affects the text that cross-reference label is defined to be, while +\eqprint affects only what is typeset on the page. The example +just below might help. + +

Usually, you want equation labels to refer to equation numbers. But +sometimes you might want a more complicated text. For example, you +might have an equation `(1)', and then have a variation several pages +later which you want to refer to as `(1*)'. + +

Therefore, Eplain allows you to give an optional argument (i.e., +arbitrary text in square brackets) before the cross-reference label to +\eqdef. Then, when you refer to the equation, that text is produced. +Here's how to get the example just mentioned: + +

     $$...\eqdef{a-eq}$$
+     ...
+     $$...\eqdef[\eqrefn{a-eq}*]{a-eq-var}$$
+     In \eqref{a-eq-var}, we expand on \eqref{a-eq}, ...
+
+

We use \eqrefn in the cross-reference text, not +\eqref, so that \eqprint is called only once. + +

+ +

4.11.2 Subequation references

+ +

Eplain also provides for one level of substructure for equations. That +is, you might want to define a related group of equations with numbers +like `2.1' and `2.2', and then be able to refer to the group as a whole: +“... in the system of equations (2)...”. + +

The commands to do this are \eqsubdef and +\eqsubdefn. +They take one label argument like their counterparts above, +and generally behave in the same way. The difference is in how they +construct the equation number: instead of using just \eqnumber, +they also use another counter, \subeqnumber. +This counter is advanced by one at every \eqsubdef or +\eqsubdefn, and reset to zero at every \eqdef or +\eqdefn. + +

You use \eqref to refer to subequations as well as main +equations. + +

To put the two together to construct the text that the label will +produce, they use a macro \eqsubreftext. +This macros takes two arguments, the “main” equation number (which, +because the equation label can be defined as arbitrary text, as +described in the previous section, might be anything at all) and the +“sub” equation number (which is always just a number). Eplain's +default definition just puts a period between them: + +

     \def\eqsubreftext#1#2{#1.#2}%
+
+

You can redefine \eqsubreftext to print however you +like. For example, this definition makes the labels print as `2a', +`2b', and so on. + +

     \newcount\subref
+     \def\eqsubreftext#1#2{%
+       \subref = #2           % The space stops a <number>.
+       \advance\subref by 96  % `a' is character code 97.
+       #1\char\subref
+     }
+
+

Sadly, we must define a new count register, \subref, +instead of using the scratch count register \count255, because +`#1' might include other macro calls which use \count255. + +

+


+ +Next: , +Previous: Equation references, +Up: User definitions + +
+ +

4.12 Indexing

+ +

+Eplain provides support for generating raw material for an index, and +for typesetting a sorted index. A separate program must do the actual +collection and sorting of terms, because TeX itself has no support +for sorting. + +

Eplain can create hypertext links pointing from the index to the index +terms (see Index hyperlinks). + +

Eplain's indexing commands were designed to work with the program +MakeIndex, available from CTAN hosts in +tex-archive/indexing/makeindex; MakeIndex is also commonly +included in prepackaged TeX distributions. It is beyond the scope of +this manual to explain how to run MakeIndex, and all of its many +options. See http://www.ctan.org/tex-archive/indexing/makeindex. + +

The basic strategy for indexing works like this: + +

    + +

  1. For a document foo.tex, Eplain's indexing commands (e.g., +\idx; see the section `Indexing terms' below) write the raw index +material to foo.idx. + +

  2. MakeIndex reads foo.idx, collects and sorts the index, and +writes the result to foo.ind. + +
  3. Eplain reads and typesets foo.ind on a subsequent run of +TeX. See the section `Typesetting an index' below. + +
+ +

The texi2dvi program can help you automate this +process (see Invoking Eplain). + +

If your document needs more than one index, each must have its own +file. Therefore, Eplain provides the command \defineindex, which +takes an argument that is a single letter, which replaces `i' in +the filenames and in the indexing command names described below. For +example, + +

     \defineindex{m}
+
+

defines the command \mdx to write to the file +foo.mdx. Eplain simply does \defineindex{i} to define +the default commands. + +

+ +
+


+ +Next: , +Up: Indexing + +
+ +

4.12.1 Indexing terms

+ +

+Indexing commands in Eplain come in pairs: one command that only +writes the index entry to the `.idx' file (see above section), and +one that also typesets the term being indexed. The former always starts +with `s' (for “silent”). In either case, the name always includes +`Idx', where I is the index letter, also described +above. Eplain defines the index `i' itself, so that's what we'll +use in the names below. + +

The silent form of the commands take a subterm as a trailing optional +argument. For example, \sidx{truth}[definition of] on page 75 +makes an index entry that will eventually be typeset (by default) as + +

     truth
+       definition of, 75
+
+

Also, the silent commands ignore trailing spaces. The non-silent ones do not. + +

+ +
+


+ +Next: , +Up: Indexing terms + +
+ +
4.12.1.1 Indexing commands
+ +

Here are the commands. + +

    +
  • \sidx{term}[subterm] makes an index entry for +term, optionally with subterm subterm. +\idx{term} also produces term as output. Example: + +
              \sidx{truth}[beauty of]
    +          The beauty of truth is \idx{death}.
    +     
    +

    Subterms at the second and further levels can also be +specified in subterm, using the +\idxsubentryseparator character to separate +them. This character is by default `!'. + +

  • \sidxname{First M.}{von Last}[subterm] +makes an index +entry for `von Last, First M.'. You can change the +`, ' by redefining \idxnameseparator. +\idxname{First M.}{von Last} also produces First M. von +Last as output. (These commands are useful special cases of \idx +and \sidx.) Example: + +
              \sidxname{Richard}{Stark}
    +          \idxname{Donald}{Westlake} has written many kinds of novels, under
    +          almost as many names.
    +     
    +
  • \sidxmarked\cs{term}[subterm] makes an index +entry for term[subterm], but term will be put +in the index as \cs{term}, but still sorted as just +term. \idxmarked\cs{term} also typesets +\cs{term}. This provides for the usual ways of changing +the typesetting of index entries. Example: + +
              \def\article#1{``#1''}
    +          \sidxmarked\article{Miss Elsa and Aunt Sophie}
    +          Peter Drucker's \idxmarked\article{The Polanyis} is a remarkable
    +          essay about a remarkable family.
    +     
    +
  • \sidxsubmarked{term}\cs{subterm} makes an index +entry for term, subterm as usual, but also puts subterm in +the index as \cs{term}. +\idxsubmarked{term}\cs{subterm} also typesets +term \cs{subterm}, in the unlikely event that your +syntax is convoluted enough to make this useful. Example: + +
              \def\title#1{{\sl #1}}
    +          \sidxsubmarked{Anderson, Laurie}\title{Strange Angels}
    +          The \idxsubmarked{Anderson}\title{Carmen} is a strange twist.
    +     
    +
+ +

The commands above rely on MakeIndex's feature for separating sorting of +an index entry's from its typesetting. You can use this directly by +specifying an index entry as sort@typeset. For +example: + +

     \sidx{Ap-weight@$A_\pi$-weight}
+
+

will sort as Ap-weight, but print with the proper math. +The @ here is MakeIndex's default character for this purpose. +See http://www.ctan.org/tex-archive/indexing/makeindex. To make an index +entry with an @ in it, you have to escape it with a backslash; +Eplain provides no macros for doing this. + +

After any index command, Eplain runs +\hookaction{afterindexterm}. Because the index commands always +add a whatsit item to the current list, you may wish to preserve a +penalty or space past the new item. For example, given a conditional +\if@aftersctnhead set true when you're at a section heading, you +could do: + +

     \hookaction{afterindexterm}{\if@aftersctnhead \nobreak \fi}
+
+ + +
4.12.1.2 Modifying index entries
+ +

+All the index commands described in the previous section take an initial +optional argument before the index term, which modify the index entry's +meaning in various ways. You can specify only one of the following in +any given command, except that begin and end can be +specified together with pagemarkup=cs (separate them with +a comma without a following space, like this: +[begin,pagemarkup=defn]). + +

These work via MakeIndex's “encapsulation” feature. See Customizing indexing, if you're not using the default characters for the +MakeIndex operators. The other optional argument (specifying a subterm) +is independent of these. + +

Here are the possibilities: + +

+
begin
end
These mark an index entry as the beginning or end of a range. The index +entries must match exactly for MakeIndex to recognize them. +Example: + +
          \sidx[begin]{future}[Cohen, Leonard]
+          ...
+          \sidx[end]{future}[Cohen, Leonard]
+     
+

will typeset as something like + +

          future,
+            Cohen, Leonard, 65–94
+     
+
see
This marks an index entry as pointing to another; the real index term is +an additional (non-optional) argument to the command. Thus you can +anticipate a term readers may wish to look up, yet which you have +decided not to index. Example: + +
          \sidx[see]{analysis}[archetypal]{archetypal criticism}
+     
+

becomes + +

          analysis,
+            archetypal, see archetypal criticism
+     
+
seealso
Similar to see (the previous item), but also allows for normal +index entries of the referencing term. Example: + +
          \sidx[seealso]{archetypal criticism}[elements of]{dichotomies}
+     
+

becomes + +

          archetypal criticism,
+            elements of, 75, 97, 114, see also dichotomies
+     
+

(Aside for the academically curious: The archetypally critical book I +took these dichotomous examples from is Laurence Berman's The +Musical Image, which I happened to co-design and typeset.) + +

pagemarkup=cs
This puts \cs before the page number in the typeset index, +thus allowing you to underline definitive entries, italicize examples, +and the like. You do not precede the control sequence cs +with a backslash. (That just leads to expansive difficulties.) Naturally +it is up to you to define the control sequences you want to use. Example: + +
          \def\defn#1{{\sl #1}}
+          \sidx[pagemarkeup=defn]{indexing}
+     
+

becomes something like + +

          indexing, \defn{75}
+     
+
+ +
+


+ +Next: , +Previous: Modifying index entries, +Up: Indexing terms + +
+ +
4.12.1.3 Index entries with special characters
+ +

+Indexing terms with special characters can become quite cumbersome +because you have to keep both TeX and MakeIndex happy at the same +time. For example, while `!' has no special meaning for TeX, +it is a subentry separator for MakeIndex, therefore you'd have to +escape occurrences of literal `!' in index terms. Things get +even more interesting with characters which are special in both TeX +and MakeIndex. + +

This in turn has some implications for the non-silent forms of the +indexing commands (see Indexing terms), since TeX and MakeIndex +use different conventions for escaping characters. For example, this +will not typeset the exclamation point correctly within the text, +while it will come out right inside the index, after MakeIndex strips +the quoting character (`"'): + +

     \idx{"!}
+
+

This would have to be rewritten using the silent command: + +

     !\sidx{"!}
+
+

In general, it is a good idea to eschew the non-silent +commands whenever index term contains anything unusual. + +

To understand this keep in mind that indexing commands read the terms +verbatim so that the terms can embed almost any character, and that's +what gets written into the .idx file. The non-silent forms +then typeset the term by rescanning the verbatim copy, therefore for +the non-silent commands the term, besides being a valid MakeIndex +input, must also represent a valid TeX input. The silent commands +don't have this restriction—their terms only need to become valid +TeX input after MakeIndex processes the .idx file and +writes the .ind file. This is what makes the non-silent +commands less powerful and more troublesome when dealing with special +characters. + +

Here's an example showing that terms for the silent commands can +contain almost any character: + +

     \sidx[see]{comments}[with %@with \verbatim %"|endverbatim]
+       {commenting with \verbatim %"|endverbatim}
+
+

We didn't have to escape `%' in the sort string for +MakeIndex, while we had to put it inside the verbatim environment +(see Verbatim listing) in the part which MakeIndex will pass back +to TeX. Also, we had to escape the `|' character because it +is special for MakeIndex. If you have trouble understanding the +reasons for the different types of escaping used, it is best to +examine the .idx and .ind files resulting from +processing the above input. + +

As was mentioned, index terms can embed “almost any character”, so +now we'll describe the exceptions. + +

The following characters are reset to their usual meanings because +they are not useful verbatim: multiple consequent spaces are +converted into a single space; ASCII tab characters are +treated as spaces; ASCII return is treated as end-of-line +(this means, among other things, that long terms can be broken across +several lines). + +

You have to be careful with the begin- and end-group characters +(`{' and `}' by default). If they are matched, you don't +have to do anything special. For example: + +

     \sidx {braces {, }@braces
+       \verbatim {"|endverbatim, \verbatim }"|endverbatim}
+
+

However, if they are not matched you have two problems on +hand. The first one is TeX—you have to instruct TeX to use +something else as begin- and/or end-group characters. Eplain provides +an easy way to do this: just define +\idxargopen and/or +\idxargclose to the begin- and end-group characters you are +going to use with indexing macros, and use braces inside index terms +without any restrictions. Here's an example: + +

     \def\idxargopen{`\<}
+     \def\idxargclose{`\>}
+     \sidx <left brace "{@left brace \verbatim "{"|endverbatim>
+
+

In this example we've also dealt with the second +problem—braces are MakeIndex's grouping characters as well (by +default), so we have escaped unmatched braces with `"'. + +

And the final note: if you need a subentry containing brackets +(`[' and `]'), avoid the optional argument of \sidx +and friends, and use instead MakeIndex's subentry separator to create +the subentry with the brackets in it: + +

     \sidx{entry!subentry with a bracket [}
+
+ + +
4.12.1.4 Proofing index terms
+ +

+As you are reading through a manuscript, it is helpful to see what terms +have been indexed, so you can add others, catch miscellaneous errors, +etc. (Speaking from bitter experience, I can say it is extremely +error-prone to leave all indexing to the end of the writing, since it +involves adding many TeX commands to the source files.) + +

So Eplain puts index terms in the margin of each page, if you +set \indexproofingtrue. It is false by default. The terms +are typeset by the macro \indexproofterm, which takes a single +argument, the term to be typeset. Eplain's definition of +\indexproofterm just puts it into an \hbox, first doing +\indexprooffont, which Eplain defines to select the font +cmtt8. With this definition long terms run off the page, but +since this is just for proofreading anyway, it seems acceptable. + +

On the other hand, we certainly don't want the index term to run into +the text of the page, so Eplain uses the right-hand side of the page +rather than the left-hand page (assuming a language read left to right +here). So \ifodd\pageno, Eplain kerns by \outsidemargin, +otherwise by \insidemargin. If those macros are undefined, +\indexsetmargins defines them to be one inch plus \hoffset. + +

To get the proofing index entries on the proper page, Eplain defines a new +insertion class \@indexproof. To unbox any index proofing +material, Eplain redefines \makeheadline to call +\indexproofunbox before the original \makeheadline. Thus, +if you have your own output routine, that redefines or doesn't use +\makeheadline, it's up to you to call \indexproofunbox at +the appropriate time. + +

+


+ +Next: , +Previous: Indexing terms, +Up: Indexing + +
+ +

4.12.2 Typesetting an index

+ +

+The command \readindexfile{i} reads and typesets the +.ind file that MakeIndex outputs (from the .idx file which +the indexing commands in the previous sections write). Eplain defines a +number of commands that support the default MakeIndex output. + +

More precisely, \readindexfile reads +\indexfilebasename.index-letternd, where the +index-letter is the argument. \indexfilebasename is +\jobname by default, but if you have different indexes in +different parts of a book, you may wish to change it, just as with +bibliographies (see Citations). + +

MakeIndex was designed to work with LaTeX; therefore, by default the +.ind file starts with \begin{theindex} and ends with +\end{theindex}. If no \begin has been defined, Eplain +defines one to ignore its argument and set up for typesetting the index +(see below), and also defines a \end to ignore its argument. (In +a group, naturally, since there is a primitive \end). + +

Eplain calls \indexfonts, sets \parindent = 0pt, and does +\doublecolumns (see Multiple columns) at the +\begin{theindex}. \indexfonts does nothing by default; +it's just there for you to override. (Indexes are usually typeset in +smaller type than the main text.) + +

It ends the setup with \hookrun{beginindex}, so you can +override anything you like in that hook (see Hooks). For example: + +

     \hookaction{beginindex}{\triplecolumns}
+
+

MakeIndex turns each main index entry into an \item, subentries +into \subitem, and subsubentries into \subsubitem. By +default, the first line of main entries are not indented, and subentries +are indented 1em per level. Main entries are preceded by a \vskip +of \aboveitemskipamount, 0pt plus2pt by default. Page +breaks are encouraged before main entries (\penalty -100), but +prohibited afterwards—Eplain has no provision for “continued” +index entries. + +

All levels do the following: + +

+

     \hangindent = 1em
+     \raggedright
+     \hyphenpenalty = 10000
+
+

Each entry ends with \hookrun{indexitem}, so you can change any +of this. For example, to increase the allowable rag: + +

     \hookaction{indexitem}{\advance\rightskip by 2em}
+
+

Finally, MakeIndex outputs \indexspace between each group of +entries in the .ind file. Eplain makes this equivalent to +\bigbreak. + +

+


+ +Previous: Typesetting an index, +Up: Indexing + +
+ +

4.12.3 Customizing indexing

+ +

+By default, MakeIndex outputs `, ' after each term in the index. To +change this, you can add the following to your MakeIndex style +(.ist) file: + +

     delim_0 "\\afterindexterm "
+     delim_1 "\\afterindexterm "
+     delim_2 "\\afterindexterm "
+
+

Eplain makes \afterindexterm equivalent to +\quad. + +

You can also change the keywords Eplain recognizes (see Modifying index entries): + +

+
\idxrangebeginword
`begin' + +
\idxrangeendword
`end' + +
\idxseecmdword
`see' + +
\idxseealsocmdword
`seealso' + +
+ +

You can also change the magic characters Eplain puts into the +.idx file, in case you've changed them in the .ist file: + +

+
\idxsubentryseparator
`!' + +
\idxencapoperator
`|' + +
\idxbeginrangemark
`(' + +
\idxendrangemark
`)' + +
+ +

There is no macro for the actual (`@' by default) +character, because it's impossible to make it expand properly. + +

You can change the (imaginary) page number that “see also” +entries sort as by redefining \idxmaxpagenum. This is 99999 by +default, which is one digit too many for old versions of MakeIndex. + +

The words output by Eplain for “see” and “see also” index entries +are defined by \indexseeword and \indexseealsowords +respectively. You can change the typeface used for these words by +redefining \seevariant. And finally, the macros +\indexsee and \indexseealso actually produce the “see +...” entries, so you can redefine them if you want something +entirely different. If you do redefine them, make them take two +parameters, the term being referenced and the \idxmaxpagenum +(the latter should normally be ignored). See the example below. + +

Unfortunately, it is impossible to reliably control the commas +produced by MakeIndex in front of “see ...” entries in the +.ind file, either at MakeIndex level or at Eplain level. +However, the +sed script contained in trimsee +distributed with Eplain in the util directory can be used to +filter out these commas from the output of MakeIndex. For example, +suppose you want the following style for your “see ...” entries: + +

     analysis,
+       archetypal (see archetypal criticism)
+     archetypal criticism,
+       elements of, 75, 97, 114 (see also dichotomies)
+
+

You would need to redefine these macros in your TeX +file: + +

     \def\indexsee#1#2{({\seevariant \indexseeword\/ }#1)}
+     \def\indexseealso#1#2{({\seevariant \indexseealsowords\/ }#1)}
+
+

and then filter out the commas in front of the “see ...” +entries by running the following command to produce the .ind +file (assuming the name of the .idx file is myfile.idx +and the trimsee script is placed in the current directory): + +

     prompt$ cat myfile.idx | makeindex | ./trimsee > myfile.ind
+
+

By default, trimsee uses default page list separators and +default “see ...” command names. If you set up MakeIndex to use +different page list separator or change the names of \indexsee +and \indexseealso commands, it is possible to adjust the +trimsee script through its command line options, which are the +following: + +

+
-i is
Use is as a regular expression matching separator before “see +...” commands in the input (default: `, \+'). + +
-o os
Use os as a separator to replace is before “see ...” +commands (default: ` '). + +
-s see
Use see as a regular expression matching “see ...” +commands (default: `\\indexsee'). + +
-h
--help
Print a usage message. + +
-v
--version
Print version. +
+ +

trimsee reads input from the standard input, and directs its +output to the standard output. + +

+


+ +Next: , +Previous: Indexing, +Up: User definitions + +
+ +

4.13 Justification

+ +

Eplain defines three commands to conveniently justify multiple +lines of text: \flushright, \flushleft, and +\center. + +They all work in the same way; let's take \center as the +example. To start centering lines, you say \center inside a +group; to stop, you end the group. Between the two commands, each +end-of-line in the input file also starts a new line in the output file. + +

The entire block of text is broken into paragraphs at blank lines, +so all the TeX paragraph-shaping parameters apply in the usual way. +This is convenient, but it implies something else that isn't so +convenient: changes to any linespacing parameters, such as +\baselineskip, will have no effect on the paragraph in +which they are changed. TeX does not handle linespacing changes +within a paragraph (because it doesn't know where the line breaks are +until the end of the paragraph). + +

The space between paragraphs is by default one blank line's worth. +You can adjust this space by assigning to \blanklineskipamount; +this (vertical) glue is inserted after each blank line. + +

Here is an example: + +

     {\center First line.
+     
+        Second line, with a blank line before.
+     }
+
+

This produces: + +

First line.
+
+
Second line, with a blank line before.
+ +

You may wish to use the justification macros inside of your own +macros. Just be sure to put them in a group. For example, here is how +a title macro might be defined: + +

     \def\title{\begingroup\titlefont\center}
+     \def\endtitle{\endgroup}
+
+
+


+ +Next: , +Previous: Justification, +Up: User definitions + +
+ +

4.14 Tables

+ +

Eplain provides a single command, \makecolumns, +to make generating one particular kind of table easier. More ambitious +macro packages might be helpful to you for more difficult applications. +The files ruled.tex and TXSruled.tex, available from +http://www.ctan.org/tex-archive/macros/texsis, is the only +one I know of. + +

Many tables are homogenous, i.e., all the entries are semantically the +same. The arrangement into columns is to save space on the page, not +to encode different meanings. In this kind of the table, it is useful to +have the column breaks chosen automatically, so that you can add or +delete entries without worrying about the column breaks. + +

\makecolumns takes two arguments: the number of entries in the +table, and the number of columns to break them into. As you can see +from the example below, the first argument is delimited by a slash, and +the second by a colon and a space (or end-of-line). The entries for the +table then follow, one per line (not including the line with the +\makecolumns command itself). + +

\parindent defines the space to the left of the +table. \hsize defines the width of the table. +So you can adjust the position of the table on the page by assignments +to these parameters, probably inside a group. + +

You can also control the penalty at a page break before the +\makecolumns by setting the parameter +\abovecolumnspenalty. +Usually, the table is preceded by some explanatory text. You wouldn't +want a page break to occur after the text and before the table, so +Eplain sets it to 10000. But if the table produced by +\makecolumns is standing on its own, \abovecolumnspenalty +should be decreased. + +

If you happen to give \makecolumns a smaller number of entries +than you really have, some text beyond the (intended) end of the table +will be incorporated into the table, probably producing an error +message, or at least some strange looking entries. And if you give +\makecolumns a larger number of entries than you really have, +some of the entries will be typeset as straight text, probably also +looking somewhat out of place. + +

Here is an example: + +

     % Arrange 6 entries into 2 columns:
+     \makecolumns 6/2: % This line doesn't have an entry.
+     one
+     two
+     three
+     four
+     five
+     six
+     Text after the table.
+
+

This produces `one', `two', and `three' in the first column, and +`four', `five', and `six' in the second. + +

+


+ +Next: , +Previous: Tables, +Up: User definitions + +
+ +

4.15 Margins

+ +

TeX's primitives describe the type area in terms of an offset from +the upper left corner, and the width and height of the type. Some +people prefer to think in terms of the margins at the top, bottom, +left, and right of the page, and most composition systems other than +TeX conceive of the page laid out in this way. Therefore, Eplain +provides commands to directly assign and increment the margins. + +

+
\topmargin = dimen
\bottommargin = dimen
\leftmargin = dimen
\rightmargin = dimen
These commands set the specified margin to the dimen given. +The = and the spaces around it are optional. The control +sequences here are not TeX registers, despite appearances; +therefore, commands like \showthe\topmargin will not do what you +expect. + +
\advancetopmargin by dimen
\advancebottommargin by dimen
\advanceleftmargin by dimen
\advancerightmargin by dimen
These commands change the specified margin by the dimen given. +
+ +

Regardless of whether you use the assignment or the advance commands, +Eplain always changes the type area in response, not the other margins. +For example, when TeX starts, the left and right margins are both one +inch. If you then say \leftmargin = 2in, the right margin will +remain at one inch, and the width of the lines (i.e., \hsize) +will decrease by one inch. + +

When you use any of these commands, Eplain computes the old value of +the particular margin, by how much you want to change it, and then +resets the values of TeX's primitive parameters to correspond. +Unfortunately, Eplain cannot compute the right or bottom margin without +help: you must tell it the full width and height of the final output +page. It defines two new parameters for this: + +

+
\paperheight
The height of the output page; default is 11truein. + +
\paperwidth
The width of the output page; default is 8.5truein. +
+ +

If your output page has different dimensions than this, you must +reassign to these parameters, as in + +

     \paperheight = 11truein
+     \paperwidth = 17truein
+
+
+


+ +Next: , +Previous: Margins, +Up: User definitions + +
+ +

4.16 Multiple columns

+ +

Eplain provides for double, triple, and quadruple column output: say +\doublecolumns, +\triplecolumns, +or \quadcolumns, +and from that point on, the manuscript will be +set in columns. To go back to one column, say +\singlecolumn. + +You may need to invoke \singlecolumn to balance the columns +on the last page of output. + +

To do a “column eject”, i.e., move to the top of the next column, do +\columnfill. This does not actually force an eject, however: it +merely inserts a kern of size \@normalvsize minus +\pagetotal (\@normalvsize being the usual height of the +page; to implement multicolumns, Eplain multiplies \vsize itself +by the number of columns). In most circumstances, a column break will be +forced after this kern (during the column splitting operation when the +whole page is output), as desired. + +

The columns are separated by the value of the dimen parameter +\gutter. Default value is two picas. +If you want to add vertical material between the columns, use +\gutterbox. For example, to put a vertical line between columns, +define +\gutterbox as + +

     \def\gutterbox{\vbox to \dimen0{\vfil\hbox{\vrule height\dimen0}\vfil}}%
+
+

The dimension counter +\dimen0 +contains the height of the column. + +

All the \...columns macros insert the value of the glue parameter +\abovecolumnskip +before the multicolumn text, and the value of the glue parameter +\belowcolumnskip +after it. The default value for both of these parameters is +\bigskipamount, i.e., one linespace in plain TeX. + +

The macros take into account only the insertion classes +defined by plain TeX; namely, footnotes and \topinserts. If +you have additional insertion classes, you will need to change +the implementation. + +

Also, Eplain makes insertions the full page width. There is no +provision for column-width insertions. + +

+


+ +Next: , +Previous: Multiple columns, +Up: User definitions + +
+ +

4.17 Footnotes

+ +

The most common reference mark for footnotes is a raised number, +incremented on each footnote. The \numberedfootnote +macro provides this. It takes one argument, the footnote text. + +

If your document uses only numbered footnotes, you could make typing +\numberedfootnote more convenient with a command such as: + +

     \let\footnote = \numberedfootnote
+
+

After doing this, you can type your footnotes as +\footnote{footnote text}, instead of as +\numberedfootnote{footnote text}. + +

Eplain keeps the current footnote number in the count register +\footnotenumber. So, to reset the footnote number to zero, +as you might want to do at, for example, the beginning of a chapter, you +could say \footnotenumber=0. + +

Plain TeX separates the footnote marker from the footnote text by +an en space (it uses the \textindent macro). In Eplain, you can +change this space by setting the dimension register +\footnotemarkseparation. +The default is still an en. + +

You can produce a space between footenotes by setting the glue +register \interfootnoteskip. +The default is zero. + +

\parskip is also set to zero by default before the beginning of +each footnote (but not for the text of the footnote). + +

You can also control footnote formatting in a more general way: +Eplain expands the token register \everyfootnote +before a footnote is typeset, but after the default values for all the +parameters have been established. For example, if you want your +footnotes to be printed in seven-point type, indented by one inch, you +could say: + +

     \everyfootnote = {\sevenrm \leftskip = 1in}
+
+

By default, an \hrule is typeset above each group of footnotes +on a page. You can control the dimensions of this rule by setting +the dimension registers \footnoterulewidth +and \footnoteruleheight. +The space between the rule and the first footnote on the page is +determined by the dimension register \belowfootnoterulespace. +If you don't want any rule at all, set \footenoteruleheight=0pt, +and, most likely, \belowfootnoterulespace=0pt. The defaults for +these parameters typeset the rule in the same way as plain TeX: the +rule is 0.4 points high, 2 true inches wide, with 2.6 points below it. + +

The space above the rule and below the text on the page is controlled +by the glue register \skip\footins. The default is a plain TeX +\bigskip. + +

Eplain can create hypertext links for the footnote marks (see Footnote hyperlinks). + +

+


+ +Next: , +Previous: Footnotes, +Up: User definitions + +
+ +

4.18 Fractions

+ +

Exercise 11.6 of The TeXbook describes a macro \frac +for setting fractions, but \frac never made it into plain TeX. +So Eplain includes it. + +

\frac typesets the numerator and denominator in +\scriptfont0, slightly raised and lowered. The numerator and +denominator are separated by a slash. The denominator must be enclosed +in braces if it's more than one token long, but the numerator need not +be. (This is a consequence of \frac taking delimited arguments; +see page 203 of The TeXbook for an explanation of +delimited macro arguments.) + +

For example, \frac 23/{64} turns `23/64' into +. + +

+


+ +Next: , +Previous: Fractions, +Up: User definitions + +
+ +

4.19 Paths

+ +

+When you typeset long pathnames, electronic mail addresses, or other +such “computer” names, you would like TeX to break lines at +punctuation characters within the name, rather than trying to find +hyphenation points within the words. For example, it would be better to +break the email address letters@alpha.gnu.ai.mit.edu at the +`@' or a `.', rather than at the hyphenation points in +`letters' and `alpha'. + +

If you use the \path macro to typeset the names, TeX will find +these good breakpoints. The argument to \path is delimited by +any character other other than `\' which does not appear in the +name itself. +`|' is often a good choice, as in: + +

     \path|letters@alpha.gnu.ai.mit.edu|
+
+

You can control the exact set of characters at which breakpoints will be +allowed by calling \discretionaries. This takes the same sort of +delimited argument; any character in the argument will henceforth be a valid +breakpoint within \path. The default set is essentially all the +punctuation characters: + +

     \discretionaries |~!@$%^&*()_+`-=#{}[]:";'<>,.?\/|
+
+

If for some reason you absolutely must use \ as the delimiter +character for \path, you can set +\specialpathdelimiterstrue. (Other delimiter characters can +still be used.) TeX then processes the \path argument +about four times more slowly. + +

The \path macro comes from path.sty, written by Nelson +Beebe and Philip Taylor and available at +http://www.ctan.org/tex-archive/macros/latex/contrib/misc/path.sty. + +

+


+ +Next: , +Previous: Paths, +Up: User definitions + +
+ +

4.20 Logos

+ +

+Eplain redefines the \TeX +macro of plain TeX to end with \null, so that the proper +spacing is produced when \TeX is used at the end of a sentence. +The other ...TeX macros listed here do this, also. + +

Eplain defines +\AMSTeX, +\BibTeX +\AMSLaTeX, +\LAMSTeX, +\LaTeX +\MF, +and \SLiTeX +to produce their respective logos. (Sorry, the logos are not shown +here.) Some spelling variants of these are also supported. + +

All these macros come from texnames.sty, compiled by Nelson +Beebe and available at +http://www.ctan.org/tex-archive/info/biblio/texnames.sty. + +

+


+ +Next: , +Previous: Logos, +Up: User definitions + +
+ +

4.21 Boxes

+ +

The solid rectangle that Eplain uses as a marker in unordered lists +(see Lists) is available by itself: just say \blackbox. + +You can create black boxes of arbitrary size with \hrule or +\vrule. + +

You can also get unfilled rectangles with \makeblankbox. +This takes two explicit arguments: the height and depth of the rules that +define the top and bottom of the rectangle. (The two arguments are +added to get the width of the left and right borders, so that the +thickness of the border is the same on all four sides.) It also uses, +as implicit arguments, the dimensions of \box0 to define the +dimensions of the rectangle it produces. (The contents of \box0 +are ignored.) + +

Here is an example. This small raised open box is suitable for +putting next to numbers in, e.g., a table of contents. + +

     \def\openbox{%
+       \ht0 = 1.75pt \dp0 = 1.75pt \wd0 = 3.5pt
+       \raise 2.75pt \makeblankbox{.2pt}{.2pt}
+     }
+
+

Finally, you can put a box around arbitrary text with \boxit. +This takes one argument, which must itself be a (TeX) box, and puts a +printed box around it, separated by \boxitspace +white space (3 points by default) on all four sides. For example: + +

     \boxit{\hbox{This text is boxed.}}
+
+

The reason that the argument must be a box is that when the text is +more than one line long, TeX cannot figure out the line length for +itself. Eplain does set \parindent to zero inside \boxit, +since it is very unlikely you would want indentation there. (If you do, +you can always reset it yourself.) + +

\boxit uses \ehrule and \evrule so that you can +easily adjust the thicknesses of the box rules. See Rules. + +

+


+ +Next: , +Previous: Boxes, +Up: User definitions + +
+ +

4.22 Checking for PDF output

+ +

pdfTeX is a TeX variant that can output both .dvi and +.pdf (Adobe's Portable Document Format) files (see +http://www.ctan.org/tex-archive/systems/pdftex). You might +sometimes want to know whether the target format is .pdf or +.dvi. The \ifpdf +switch can be used to detect pdfTeX in PDF mode: + +

     \ifpdf
+        This text is produced when pdfTeX is in PDF mode.
+     \else
+        This text is produced when pdfTeX is in DVI mode,
+        or when some program other than pdfTeX is used.
+     \fi
+
+

Keep in mind that \ifpdf is set based on the value of the +\pdfoutput +primitive of pdfTeX at the time Eplain is loaded. If you change +the value of \pdfoutput after you load Eplain, \ifpdf +will not reflect the change. + +

Eplain defines \ifpdf by incorporating Heiko Oberdiek's +ifpdf.sty, which is available at +http://www.ctan.org/tex-archive/macros/latex/contrib/oberdiek/ifpdf.sty. + +

+


+ +Previous: Checking for PDF output, +Up: User definitions + +
+ +

4.23 Loading LaTeX packages

+ +

Eplain provides a limited support for loading LaTeX packages +(.sty files—not .cls). This will mostly work for +packages which were designed with plain TeX compatibility in mind, +which means that most LaTeX packages cannot be loaded. The +packages which are known to work are listed below (see Packages known to work). If you discover a working package which is not in +the list, please report it to the Eplain mailing list +(see Introduction). + +

To set up a pseudo-LaTeX environment for the packages, Eplain uses +miniltx.tex +(http://www.ctan.org/tex-archive/macros/plain/graphics/miniltx.tex) +from the LaTeX graphics collection, written by David Carlisle and +Sebastian Rahtz (the collection is available at +http://www.ctan.org/tex-archive/macros/latex/required/graphics). +Eplain extends miniltx.tex to provide some additional features, +e.g., support for package options. + +

+ + + +

4.23.1 The \usepackage command

+ +

\usepackage loads a LaTeX package. Its syntax is similar to +that of LaTeX's \usepackage command: + +

     \usepackage[options]{packages}[version]
+
+

where options is a comma-separated list of package +options, packages is a comma-separated list of packages to load +(without the .sty suffix), and version is a package +version number given as a date in the format `YYYY/MM/DD'. If an +older version of the package is found, a warning is issued. If +several packages are loaded within a single \usepackage +command, the options will be applied to each of the packages. +As usual, parameters in square brackets are optional and can be +omitted (together with the square brackets). + +

For example: + +

     \usepackage[foo,bar]{pack1,pack2}[2005/08/29]
+
+

will load packages `pack1' and `pack2', each with +the options `foo' and `bar', and will check that each of the +packages are dated 2005/08/29 or newer. + +

+ +

4.23.2 Environment for loading packages

+ +

Some packages request that certain commands are executed after all +packages have been loaded. In LaTeX, this means that the commands +are executed at the beginning of the document, after the so-called +preamble. Neither plain TeX nor Eplain have any kind of +preamble; therefore, Eplain requires that all packages be loaded inside +a \beginpackages...\endpackages block, for example: + +

     \beginpackages
+       \usepackage[foo,bar]{pack1}
+       \usepackage{pack2}
+     \endpackages
+
+

This requirement enables Eplain to execute the “delayed” +commands at the end of the \beginpackages...\endpackages block. + +

For the same reason, it is advisable to specify only one such block +per document, just like there is only one preamble in LaTeX. + +

Some packages (and the pseudo-LaTeX environment, miniltx.tex) +redefine TeX's primitive \input to be a macro. Non-primitive +\input is probably not what the user expects under +plain TeX. Therefore, at the beginning of the +\beginpackages...\endpackages block Eplain saves the meaning of +\input as +\eplaininput and restores the original \input at the end +of the block. This usually means that the primitive \input is +restored, unless you (or some other macro package you've loaded +directly) have redefined it before calling \beginpackages. In +case you need to access the package-provided \input, Eplain saves +it as \packageinput. + +

Sometimes you may encounter packages which make conflicting +redefinitions of \input. Common symptoms are TeX spewing +incomprehensible error messages or hanging in a loop at a call to +\input. This sometimes can be cured by restoring \input +to \eplaininput before loading each package. For example: + +

     \beginpackages
+       \usepackage{pack1}
+       \let\input\eplaininput
+       \usepackage{pack2}
+     \endpackages
+
+ + +

4.23.3 Packages known to work

+ +

The following table lists packages that had been tested and are known +to work with Eplain, and locations where you can find manuals for +these packages. Some of the short descriptions of the packages were +taken from the documentation for those packages. + +

+
autopict (`2001/06/04 v1.1j Picture mode autoload file')
http://tug.org/eplain/misc/ltpictur.pdf + +

This is the LaTeX “picture mode”, started by +\begin{picture} and ended by \end{picture} (in +LaTeX, this package is not explicitly loaded since it is part of +the LaTeX kernel). It provides commands to draw simple figures +inside your document without resorting to any external tools. + +

color (`1999/02/16 v1.0i Standard LaTeX Color (DPC)')
graphics (`2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR)')
graphicx (`1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)')
http://www.ctan.org/tex-archive/macros/latex/required/graphics/grfguide.pdf + +

These packages are from the LaTeX graphics collection. They +provide commands for changing text/page colors, text rotation and +scaling, and much more. + +

Warning 1: If you encounter problems loading one of +these packages under pdfTeX (more specifically, when pdfTeX +reads supp-mis.tex), the cause may be an outdated +supp-mis.tex (part of ConTeXt, a typesetting system for +TeX) installed on your system. The problem was fixed in +supp-mis.tex version 2004.10.26. You can obtain +up-to-date versions of supp-mis.tex and the accompanying +supp-pdf.tex from +http://www.ctan.org/tex-archive/macros/pdftex/graphics. +To convince TeX to use the new files, you have the following +options in the decreasing order of preference: + +

    +
  1. put the new files in the same directory with your document; + +
  2. overwrite the outdated files installed by your TeX distribution; + +
  3. install the new supp-mis.tex and supp-pdf.tex files in +the relevant subdirectory of your local texmf tree (for info on +TeX directory structure see +http://www.tex.ac.uk/cgi-bin/texfaq2html?label=tds); + +
  4. upgrade your ConTeXt installation. +
+ +

Note that option 1 is the safest but provides the fix +only for your current document. Options 2 and 3 will +usually suffice for Eplain but may break ConTeXt. Option 4 is +the most general but is more complicated than the first three. Be +sure to backup any files you overwrite. Also keep in mind that +upgrading your TeX distribution may overwrite files you install in +the system texmf tree.
End of warning 1. + +

Warning 2: If you encounter problems using the +\pagecolor command from the color.sty package under +pdfTeX, the cause may be an outdated pdfTeX color and graphics +driver pdftex.def. The problem was fixed in pdftex.def +version 0.03p. You can obtain an up-to-date version from +http://www.ctan.org/tex-archive/graphics/pdftex/pdftex.def.
+End of warning 2. + +

The graphics/graphicx packages have the option +draft which instructs \includegraphics not to include the +graphics but instead typeset a box with the dimensions of the graphics +and the name of the graphics file in typewriter type at the center of +the box. These packages expect the LaTeX-provided command +\ttfamily to switch to the typewrite type. This command is not +defined by miniltx.tex, therefore Eplain defines it and makes it +equivalent to plain TeX's +\tt. + +

See Hyperlinks (xhyper.tex), for the demonstration of text rotation and +graphics inclusion using the graphicx package, and using the +color package to colorize hypertext links. + +

Klaus Höppner has written a nice introduction to the LaTeX graphics +packages and different graphics formats. You can download it from +

          http://www.tug.org/pracjourn/2005-3/hoeppner
+     
+
epstopdf (`2001/02/04 v1.1 Conversion with epstopdf on the fly (HO)')
http://www.ctan.org/tex-archive/macros/latex/contrib/oberdiek + +

This package does on-the-fly conversion of Encapsulated PostScript +(EPS) graphics into Portable Document Format (PDF) +graphics for inclusion with the \includegraphics command from +the graphics/graphicx packages, so that you do not have +to explicitly call the epstopdf script. + +

psfrag (`1998/04/11 v3.04 PSfrag (MCG)')
http://www.ctan.org/tex-archive/macros/latex/contrib/psfrag/pfgguide.pdf + +

PSfrag allows the user to precisely overlay Encapsulated PostScript +(EPS) files with arbitrary (La)TeX constructions. In order to +accomplish this, the user places a simple text “tag” in the graphics +file, as a “position marker” of sorts. Then, using simple +(La)TeX commands, the user instructs PSfrag to remove that tag from +the figure, and replace it with a properly sized, aligned, and rotated +(La)TeX equation. + +

soul (`2003/11/17 v2.4 letterspacing/underlining (mf)')
http://www.ctan.org/tex-archive/macros/latex/contrib/soul + +

This package provides hyphenatable letterspacing (spacing out), +underlining, and some derivatives. The package is optimized for +LaTeX, but works with plain TeX—you don't actually need to +load it with the \usepackage command, just say \input +soul.sty. If you intend to use the highlighting macros of +soul, don't forget to load the color package. + +

url (`2005/06/27 ver 3.2 Verb mode for urls, etc.')
http://www.ctan.org/tex-archive/macros/latex/contrib/misc/url.sty + +

This package provides a form of \verbatim that allows +line breaks at certain characters or combinations of characters, +accepts reconfiguration, and can usually be used in the argument to +another command. It is intended for email addresses, hypertext links, +directories/paths, etc., which normally have no spaces. + +

Eplain can create hypertext links with the \url command +(see URL hyperlinks). + +

Be sure to get a version dated at least 2005/06/27, as older versions +have problems in plain TeX. +

+ + + +

4.23.4 Packages known not to work

+ +

The following packages are known not to work with Eplain: + +

+
hyperref
http://www.ctan.org/tex-archive/macros/latex/contrib/hyperref + +

This package depends heavily on LaTeX, so that it is mostly +unusable outside of LaTeX. Eplain provides its own macros for +creating hyperlinks, see Hyperlinks. + +

pict2e (`2005/07/15 v0.2r Improved picture commands (HjG,RN)')
http://www.ctan.org/tex-archive/macros/latex/contrib/pict2e + +
xcolor (`2005/06/06 v2.03 LaTeX color extensions (UK)')
http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor +
+ + +
+


+ +Next: , +Previous: User definitions, +Up: Top + +
+ +

5 Hyperlinks

+ +

This chapter describes the support which Eplain provides for hypertext +links (hyperlinks for short). Hyperlinks can be created +implicitly by the cross-reference, indexing and other macros in +Eplain. Macros for constructing explicit hyperlinks are also +provided. + +

+ +
+


+ +Next: , +Up: Hyperlinks + +
+ +

5.1 Introduction to hyperlinks

+ +

The original TeX engine has no built-in support for hyperlinks +(a.k.a. hypertext links). +Many of the present-day file formats with hyperlinking capabilities +did not even exist at the time TeX was written. However, TeX's +\special primitive can be used to instruct TeX to write +special directives into its .dvi output file. These directives +are not interpreted by TeX in any way; they are intended for programs +which process the .dvi files produced by TeX, be it printing +or converting to other formats, such as +.ps or .pdf. + +

Another approach is to extend the original TeX engine with the +ability to generate one of the hyperlinking formats; TeX's set of +primitives can be extended to include hyperlink commands. This is the +approach used by the pdfTeX engine, which is capable of producing +.pdf files directly from the TeX source, skipping the +.dvi generation and processing step. + +

It turns out that the sets of commands for different formats are mostly +not interchangeable, as each of the file formats has its own quirks and +capabilities. And this is where Eplain hyperlink drivers come +into play. + +

In order for Eplain to generate proper commands, Eplain has to know +two things: which engine or .dvi processor you are using, and +the set of commands it understands. + +

The knowledge about the commands that the various processors +understand is programmed into Eplain's hyperlink drivers. Eplain +provides three drivers: hypertex (implementation of the +HyperTeX standard, see http://arxiv.org/hypertex), and +pdftex and dvipdfm (named after the programs which +process the hyperlink commands, +pdfTeX and +dvipdfm). Therefore, Eplain can only produce HyperTeX commands and +hyperlink commands for one of these two programs—except that the +extended dvipdfmx program can be used as well as the original +dvipdfm, since they are compatible. + +

To tell Eplain which .dvi processor or extended TeX engine you +are using, use the command +\enablehyperlinks. + +

For example: + +

     \enablehyperlinks
+
+

instructs Eplain to attempt to automatically detect which +driver to use, as follows: if it detects pdfTeX in PDF +mode, it loads the pdftex driver. If it does not detect +pdfTeX in PDF mode, the hypertex driver is loaded. +The detection is based on the +\ifpdf switch (see Checking for PDF output). + +

If necessary, you can explicitly specify the driver name: + +

     \enablehyperlinks[pdftex]
+
+

will start producing hyperlinks under the assumption that +you are using pdfTeX. + +

Eplain does not produce any hyperlinks until you explicitly enable +them with \enablehyperlinks. For one thing, this keeps Eplain +backward-compatible with previous releases without hyperlink support. +For another, you may be using a program other than pdfTeX or +dvipdfm, which does not understand their hyperlink commands or +the HyperTeX commands. + +

Concepts and Terminology

+ +

In general, hyperlinks work as follows. You mark some place in your +document as a hyperlink destination, associating a hyperlink +label with that destination. Next, somewhere within your document, +you create a hyperlink, using a label to identify the destination you +want this link to point to. A hyperlink is a region in the document +(which can take many forms, for example, text or a picture); when a +user clicks on that region, they will be taken to a place in the +document marked by the corresponding destination. The following two +sections (Explicit hyperlinks, and Implicit hyperlinks) +describe the macros you can use to define destinations and create +links pointing to those destinations. + +

In the rest of this chapter, we will often need to refer to links and +destinations jointly, in which case we will use the term +hyperlinks. We will use the terms links and +destinations in cases when we need to refer specifically to +links or destinations. + +

Hyperlink drivers provide several kinds of links and destinations. We +will refer to them as link types and destination types. + +

For example, one of the destination types that the pdftex +driver provides is the `xyz' type; when the user follows a link +pointing to an `xyz' destination, the exact location marked by +that destination is displayed. Another destination type provided by +the pdftex driver is the `fit' type; when the user follows +a link pointing to a `fit' destination, the page containing that +destination is zoomed to fit into the window in which the document is +displayed. + +

Similarly, drivers support various link types. For example, with the +pdftex driver, the usual link type used to refer to +destinations in the current document is called `name'. You can +also create a link pointing to another local document (by using the +`filename' link type) or to a URL (by using the +`url' link type). + +

In addition, each hyperlink driver supports a number of destination and +link options. By setting these options you can customize +hyperlink parameters (e.g., the thickness of the border drawn around a +hyperlink) or pass information to hyperlinks (for example, file name of +a document, for a link pointing to a destination in another document). + +

See Hyperlink drivers, for the description of hyperlink types and +options supported by the drivers. See Setting hyperlink types and options, for the information on how to set hyperlink options. + +

+


+ +Next: , +Previous: Introduction to hyperlinks, +Up: Hyperlinks + +
+ +

5.2 Explicit hyperlinks

+ +

Explicit hyperlinks are created by you, in the source of your +document. The simplest command is \hldest, which marks the +current position in your document as a destination: + +

     \hldest{type}{options}{label}
+
+

Here type is one of the destination types supported by +the hyperlink driver (see Hyperlink drivers), options is a +comma-separated list of option assignments, and label is the +hyperlink label to associate with this destination. This label will +identify the destination when creating links pointing to this +destination. For example, with the pdftex driver, the command + +

     \hldest{xyz}{zoom=2000}{index}
+
+

creates a destination of type `xyz' (“the current +position”), sets the magnification ratio for this destination to be +200%, and associates the label index with the destination. + +

Another command, \hlstart, paired with \hlend, turns all +intervening material into a link: + +

     \hlstart{type}{options}{label} ... \hlend
+
+

Here type, options and label have the same +meaning as for \hldest. Continuing the previous example, + +

     \hlstart{name}{bstyle=U,bwidth=2}{index} Index\hlend
+
+

typesets the word `Index' as a link with underline border of +width PostScript points, pointing to the named destination +index defined in the previous example. (The other options, like +highlight mode and border color, are determined by the defaults, +see Setting default types and options). + +

The label argument of both \hldest and \hlstart +can contain special characters (such as `#', `%', `&', +`~', etc.) without any escaping. This is especially important +for URL links supported by some drivers (see Hyperlink drivers). + +

Both \hldest and \hlstart ignore following spaces. + +

Both \hldest and \hlstart expand the first token of +options once, so you can save a list of options in a macro and +pass it for the options. For example: + +

     \def\linkopts{bstyle=U,bwidth=2}
+     \hlstart{name}{\linkopts}{index}Index\hlend
+
+

is functionally equivalent to the previous example. + +

See Hyperlinks (xhyper.tex), for a demonstration of the usage of +explicit hyperlinks. + +

+


+ +Next: , +Previous: Explicit hyperlinks, +Up: Hyperlinks + +
+ +

5.3 Implicit hyperlinks

+ +

Implicit hyperlinks are hyperlinks created implicitly by various +Eplain macros, such as the macros for citations, cross-references, +indexing, etc. + +

All such macros are divided into link groups and +destination groups (or linkgroups and destgroups for +short) so that parameters can be set individually for each group. For +example, all equation macros which define a destination are assigned +to the `eq' destgroup; equation macros which create a link are +assigned to the `eq' linkgroup. By setting parameters for the `eq' +linkgroup (destgroup), you can uniformly customize all links +(destinations) related to equation references, without interfering +with settings for the other groups. + +

See Setting hyperlink types and options, for information on how to +set parameters for a group. + +

Here is the list of the linkgroups: + +

     hrefint, hrefext, url, cite, ref, xref, eq, idx, foot, footback.
+
+

And here are the destgroups: + +

     bib, li, definexref, xrdef, eq, idx, foot, footback.
+
+

See Hyperlinks (xhyper.tex), for a demonstration of the usage of +implicit hyperlinks. + +

The following subsections describe each of the linkgroups and destgroups +and the hyperlink support provided. + +

+ +
+


+ +Next: , +Up: Implicit hyperlinks + +
+ +

5.3.1 General hyperlinks: hrefint, hrefext

+ +

\href{url}{text} typesets text as a link +to url. It basically does what the explicit hyperlink macros do +(see Explicit hyperlinks), but is more convenient (at the expense +of flexibility). + +

If url starts with `#', the rest of url is assumed to +be a local hyperlink destination name (destination within the same +document). Parameters for these links can be set by customizing the +`hrefint' linkgroup. For example: + +

     See \href{#intro}{Introduction}
+
+

will make `Introduction' into an internal link, which might +have been created, e.g., with \xrdef{intro}. + +

If url does not start with `#', it is assumed to be a +URL link. Parameters for these links can be set by +customizing the +`hrefext' linkgroup. The special characters (such as `#' and +`~') in the URL don't need to be escaped. For example: + +

     \href{http://tug.org/eplain/doc/eplain.html#Hyperlinks}{Hyperlinks
+     in Eplain}
+
+

See URL hyperlinks, for another way to create +URL hyperlinks. + +

The text argument of \href can contain verbatim text +(see Verbatim listing) or other macros which manipulate character +catcodes. For example: + +

     \href{#WeirdChars}{The weird chars \verbatim #&%$~|endverbatim}
+
+

\href does not currently handle other link types, such as +`file:' and +`run:' links. + +

+


+ +Next: , +Previous: General hyperlinks, +Up: Implicit hyperlinks + +
+ +

5.3.2 URL hyperlinks: url

+ +

The `url' linkgroup covers the +\url command from the LaTeX package +url (see Packages known to work), as well as any new +\url-like commands you define. The type for this linkgroup is +set to `url' by the drivers which support this link type. +`url' links use the parameter to the \url command as the +URL to point to. + +

You may be using the \url command to typeset something other than +a URL, e.g., a path, for which you do not want a link to be +created; in that case, you can disable the `url' linkgroup with the +command \hloff[url] (see Turning hyperlinks on/off for a group). + +

By default, URL (and other types of) links are boxed, so +that they are visually marked even if you do not load the LaTeX +`color' package (see Loading LaTeX packages) and therefore link text +is not colored. You can see the effect by compiling the following code +snippet (be sure to get a modern url.sty, older versions do not +work in plain TeX; see Packages known to work): + +

     \input eplain
+     \beginpackages
+       \usepackage{url}
+     \endpackages
+     
+     \enablehyperlinks
+     
+     \url{http://foo/bar}
+     \bye
+
+

If the hyperlink driver you use supports the link option bwidth +(see Hyperlink drivers), you can produce colored links with no +border around them. Try this: + +

     \input eplain
+     \beginpackages
+       \usepackage{url}
+       \usepackage{color}
+     \endpackages
+     
+     \enablehyperlinks
+     \hlopts{bwidth=0}
+     
+     \url{http://foo/bar}
+     \bye
+
+

The command \hlopts{bwidth=0} sets border width to +zero as the default for all links, and loading the color package +automatically colors links using the default color (see Options supported by all drivers). If you want the border width setting to +apply to URL links only, say \hlopts[url]{bwidth=0} +(see Setting hyperlink types and options). + +

+


+ +Next: , +Previous: URL hyperlinks, +Up: Implicit hyperlinks + +
+ +

5.3.3 Citation hyperlinks: cite, bib

+ +

The `cite' linkgroup includes only the \cite command +(see Citations). \cite turns each of the references in the +list into a link pointing to the respective bibliography entry +produced by the \bibliography command. + +

The `bib' destgroup includes the macros related to the +\bibliography command (see Citations). \bibliography +inputs a .bbl file, which contains a list of bibliography +entries. For each of the entries, a destination is defined. + +

Both commands use the citation label as the hyperlink label. + +

+ +

5.3.4 List hyperlinks: li

+ +

The `li' destgroup consists of the \li command (see Lists), +which defines a destination if you supply the optional argument +(cross-reference label). This label is also used as the hyperlink +label. + +

+


+ + +Next: , +Previous: List hyperlinks, +Up: Implicit hyperlinks + +
+ +

5.3.5 Cross-reference hyperlinks: definexref, ref

+ +

The `definexref' destgroup is for the \definexref command +(see Defining generic references). \definexref defines a +destination using the cross-reference label (the first argument) as the +hyperlink label. + +

The `ref' linkgroup includes \refn and \xrefn (they are +synonyms), \ref, and \refs (see Using generic references). + +

\refn turns the cross-reference it produces into a link, using +the cross-reference label as the hyperlink label. If an optional +argument is present, it is tied by +\reftie to the reference and become part of the link. + +

\ref works similarly to \refn. It takes an optional +argument, which is treated the same way as the optional argument to +\refn. In addition, \ref can produce a “class word”. +Both the optional argument and the class word become part of the link, +when present. The cross-reference is tied by +\reftie to the preceding word. The optional argument is +separated from the class word by +\refspace. + +

Unlike \ref, \refs does not take an optional argument and +does not make the class word part of the link, which is appropriate for +its intended use. + +

+ +

5.3.6 Page reference hyperlinks: xrdef, xref

+ +

The `xrdef' destgroup is for \xrdef (see Page references). +\xrdef defines a destination using cross-reference label as the +hyperlink label. + +

The `xref' linkgroup includes the \xref command (see Page references). \xref turns its optional argument (followed by +\refspace), \xrefpageword and the cross-reference (page +number) into a link, using the cross-reference label as the hyperlink +label. + +

+ +

5.3.7 Equation reference hyperlinks: eq

+ +

All commands that define equation labels are part of the `eq' destgroup. +These are \eqdef, \eqdefn, \eqsubdef and +\eqsubdefn (see Equation references). All these commands use +the equation label as the hyperlink label. However, if the equation +label is empty, they make up a (hopefully) unique hyperlink label for +the destination. This label will be used for the link when you refer to +this empty-labeled equation with one of the equation reference macros. + +

The command \phantomeqlabel is called to generate hyperlink +labels for the empty-labeled equations. By default, it produces the +labels in the format `PHEQnumber', where number comes +from the count register \phantomeqnumber; this count register is +incremented at every empty-labeled equation definition. + +

The commands \eqref and \eqrefn (see Equation references) form the `eq' linkgroup. These commands take an optional +argument, which, when present, is tied with \reftie to the +equation reference and becomes part of the link. The equation label is +used for the hyperlink label; if the label is empty, the link is for the +label generated for the last empty-labeled equation. + +

+ +

5.3.8 Index hyperlinks: idx

+ +

All indexing commands (\idx, \idxname, \idxmarked, +\idxsubmarked and their silent equivalents, see Indexing commands) form the `idx' destgroup. The `idx' linkgroup consists of +the macros which are used to typeset the index when you say +\readindexfile{index-letter} (see Typesetting an index). + +

To create the links in index entries, Eplain uses MakeIndex's +“encapsulation” feature. When you use an indexing macro to mark an +index term, Eplain writes out a line to the +.idx file of the following general form: + +

     \indexentry{entry|pagemarkup}{pageno}
+
+

where entry is the index entry (converted into the +internal format that MakeIndex understands), cs is the markup +command you specified with the pagemarkup=cs optional +argument to the indexing commands (see Modifying index entries), +and pageno is the page number on which the term appeared. When +processing the .idx file, MakeIndex makes the page number an +argument to the page markup command (“encapsulates” the page +number), so the page number in the +.ind file appears as \cs{pageno}. Eplain +internally replaces the cs command name with its own command, +which, in addition to calling the original \cs +encapsulator, turns the page number into a link. + +

Eplain provides two approaches to linking page numbers in the index to +locations of index terms in the text. + +

+ + + +
5.3.8.1 Exact destinations for index terms
+ +

In this approach, each command that marks an index term defines a unique +destination and passes its label on to the .idx file as part of +the \indexentry command. The \indexentry line that Eplain +writes to the .idx file becomes + +

     \indexentry{entry|hlidx{label}{cs}}{pageno}
+
+

where \hlidx is the command that is defined by Eplain +to take three arguments: a hyperlink label (label), a name of +page number encapsulator (cs) and a page number (pageno). +In the .ind file that MakeIndex will generate, the page number +will now appear as + +

     \hlidx{label}{cs}{pageno}
+
+

The result of this command is +\cs{pageno}, wrapped up into a link pointing to +label destination. + +

The hyperlink labels for the index terms are generated by the +\hlidxlabel command, by default in the format +`IDXnumber', where number is the value of the count +register +\hlidxlabelnumber. This count register is incremented at each +index term. + +

The advantage of this approach, as compared to the second approach +described below, is that links in the index point to exact locations of +the indexed terms on the page. The disadvantage of this approach is +that MakeIndex will regard all index entries as distinct, because +each one contains a (unique) hyperlink label. This disadvantage can be +partially overcome by the script +idxuniq distributed with Eplain in the util directory. +This script filters out \indexentry lines differing only in the +hyperlink label but identical otherwise. You should process the +.idx with this script before passing it on to MakeIndex. For +example: + +

     prompt$ ./idxuniq file.idx | makeindex > file.ind
+
+

Still, this solution is not ideal, as the page-range formation +ability of MakeIndex will not work, and there will be problems of +apparently identical index entries clashing (e.g., when a range-end +entry appears on the same page as another entry with the same +definition; idxuniq will not filter out the second entry). + +

+ +
5.3.8.2 Page destinations for index terms
+ +

In the second approach, Eplain does not write out any destination labels +for the index terms. Instead, Eplain writes out a wrapper for page +number encapsulator which can parse the page number and generate a link +pointing to the page on which the term appeared. On top of each +page containing an index term, Eplain defines a destination with label +produced by +\hlidxpagelabel. The \hlidxpagelabel command takes a +single argument (page number number) and by default produces the +label in the format `IDXPGnumber'. + +

With this approach, the \indexentry line which Eplain writes to +the .idx file looks like this: + +

     \indexentry{entry|hlidxpage{cs}}{pageno}
+
+

where \hlidxpage is the command that is defined by Eplain +to take two arguments: a name of page number encapsulator (cs) +and a page number (pageno). In the .ind file that +MakeIndex will generate, the page number will appear as + +

     \hlidxpage{cs}{pageno}
+
+

The advantage of this approach is that all features of MakeIndex are +intact. The drawback is that links in the index do not point to exact +locations of indexed terms on a page, but to the top of a page on +which the term appears. + +

Another disadvantage is that this approach depends on the page range and +page list separators which MakeIndex was configured to output. +\hlidxpage must be able to parse the first page number in a page +range like `1--4'. In addition, page list parsing is needed +because MakeIndex combines two consecutive page numbers in one call to +the page number encapsulator, so \hlidxpage can be passed, e.g., +`1, 2' for the pageno. In this last case, \hlidxpage +splits the two page numbers, applies \cs to each of them, +and makes each of the page numbers a link to the appropriate page. Note +that this will alter typesetting slightly, because now the page list +separator (a comma followed by a space, by default) is not typeset using +the page number encapsulator (\cs). + +

Eplain's defaults for the page list and page number delimiters are the +same as those in MakeIndex, a comma followed by a space (`, ') and +two dashes (`--'), respectively. If you customize MakeIndex to use +different delimiters, you must not forget to let Eplain know about them +with the commands + +

     \setidxpagelistdelimiter{list-delim}
+     \setidxpagerangedelimiter{page-delim}
+
+

(see Page list and page range parsers). + +

+ +
5.3.8.3 Choosing destination placement
+ +

The approach that Eplain should use for the index terms can be +selected in the +\enablehyperlinks command. The optional argument it accepts is +a comma-separated list of options. The +idxexact option selects the first approach, +idxpage the second, and +idxnone disables hyperlink support for the index terms +altogether, in case you want to stop Eplain from writing its link +wrappers into the .idx file. The default is idxpage. + +

For example: + +

     \enablehyperlinks[idxexact]
+
+

selects the first approach (“exact index links”). + +

+ +
5.3.8.4 Index page list and page range parsers
+ +

The macros that Eplain uses to parse page lists and page ranges, +\idxparselist and \idxparserange, can sometimes be useful +when defining page number encapsulators. See Page list and page range parsers, for the description of these commands and an example of their +usage. + +

+ +
5.3.8.5 Hyperlinks in see and see also entries
+ +

There is no automatic support for hyperlinks with “see” and “see +also” index entries, as there is not enough information to trace the +parameters of +\indexsee and +\indexseealso to corresponding index entries. But if desired, +this can be implemented with \hldest and \hlstart +(see Explicit hyperlinks); for example: + +

     \sidx{semantic theory of truth@%
+           \leavevmode\hldest{}{}{idx:theo truth}semantic theory of truth}
+     ...
+     \sidx[seealso]{truth}[definition of]%
+           {\hlstart{}{}{idx:theo truth}semantic theory of truth\hlend}
+
+
+


+ +Next: , +Previous: Index hyperlinks, +Up: Implicit hyperlinks + +
+ +

5.3.9 Footnote hyperlinks: foot, footback

+ +

The `foot' link and destination groups include the +\numberedfootnote and +\footnote macros (see Footnotes). The `footback' groups +include the same macros, but control parameters for links and +destinations created inside the footnote to point back to the footnote +mark within the text body. + +

The macros use hyperlink labels generated by +\hlfootlabel and +\hlfootbacklabel. The default formats for the labels are +`FOOTnumber' and `FOOTBnumber', respectively, +where number is the value of the count register +\hlfootlabelnumber. This register is incremented at every +footnote. + +

Generally, footnote hyperlinks are not of much use, because the +footnotes are usually placed on the same page as the footnote mark. +Therefore, footnote hyperlinks are disabled by default. Here is how you +can turn them on selectively, without affecting the other kinds of +hyperlinks (see Turning hyperlinks on/off for a group): + +

     \hldeston[foot,footback]
+     \hlon[foot,footback]
+
+
+


+ +Previous: Footnote hyperlinks, +Up: Implicit hyperlinks + +
+ +

5.3.10 Contents hyperlinks

+ +

There is currently no special support for hyperlinks in the table of +contents (see Contents), but implementing them with the +\hldest and \hlstart ... \hlend commands +(see Explicit hyperlinks) should be possible. + +

+ +

5.4 Hyperlink drivers

+ +

This section describes the hyperlink drivers: the types of hyperlinks +they support, and the options they accept. During the first reading, +you may only want to skim through this section. + +

Some of the descriptions below come from Portable Document Format +Reference Manual Version 1.3, March 11, 1999. + +

+ + + +

5.4.1 Options supported by all drivers

+ +

This subsection describes the destination and link options which are +supported by all hyperlink drivers. + +

Destination options supported by all drivers
+ +

+

+
raise
Specifies how much to raise destinations above the baseline. When set +to zero or empty, destinations are placed at the baseline. + +

It is usually convenient to set this option to some variable parameter, +so that the height to which destinations are raised is automatically +adjusted according to the current context. For example, setting it to +\normalbaselineskip (or some fraction of it, like +1.7\normalbaselineskip) makes the setting appropriate for +different point sizes, in case your document uses more than one. + +

The default setting is \normalbaselineskip. Initially, the +destgroups do not define this option, so they fall back on the default, +except for the `eq' destgroup, for which this option is set to +1.7\normalbaselineskip, +to accommodate the usual cases of large operators in displayed math. + +

Example: \hldestopts[eq]{raise=2.5\normalbaselineskip} +

+ +
Link options supported by all drivers
+ +

+

+
colormodel
color
These two options define the color to be used for rendering the link +text. The colors are used only when a \color command is defined, +e.g., by loading the LaTeX `color' package (see Packages known to work). The \color command is called as +\color[colormodel]{color}, where colormodel +and color are the definitions of the colormodel and +color options, respectively. However, if colormodel is +empty, the optional argument to \color is omitted; and if +color is empty, the \color command is omitted altogether. +The default setting is colormodel=cmyk and +color=0.28,1,1,0.35. + +

When specifying colors with several components delimited by commas +(e.g., RGB and CMYK colors in the LaTeX `color' package), it is not +possible to specify the components directly in the option list of +\hlopts, because comma is the option list delimiter. With the +`color' package, it is possible to specify such colors by defining a +custom color with \definecolor and using the new color name with +an empty colormodel (see examples below). + +

Examples: + +

          \hlopts{colormodel=,color=blue}% predefined color
+          \definecolor{mycolor}{rgb}{.3,.8,.95}
+          \hlopts{colormodel=,color=mycolor}% custom color
+          \hlopts{colormodel=gray,color=.4}
+     
+
+ + + +

5.4.2 Hyperlink driver hypertex

+ +

HyperTeX is a standard for inclusion of hyperlink information in +TeX (and LaTeX) documents (see http://arxiv.org/hypertex). +This standard defines a set of hyperlink tags implemented as +\special commands written into the DVI file. The +major advantage of such standard is that a single .dvi file +containing HyperTeX commands can be viewed by any +HyperTeX-enabled viewer (e.g., any more or less modern version of +xdvi) or converted to other file formats (e.g., PDF) +by any HyperTeX-enabled DVI converter (e.g., +dvipdfmx or +dvips with +Ghostscript's +ps2pdf script). + +

The downside to the standard is that it is by design “the common +factor” of other formats supporting hyperlinks, so many features of a +particular file format cannot be supported by HyperTeX. Therefore, +if you need to use special features of a particular format, HyperTeX +is not a good choice. For the PDF file format, Eplain +provides the pdftex and dvipdfm drivers which provide +fine control over the PDF options (see Hyperlink drivers pdftex and dvipdfm). + +

For more information on programs which support the HyperTeX standard, +please see + +

     http://arxiv.org/hypertex
+     http://www.tug.org/tex-archive/support/hypertex/hypertex
+
+

For convenience, we list a few HyperTeX-enabled converters: + + + +

dvips
Note that you need to pass the -z option to dvips to +tell it to preserve the information about the hyperlinks. To generate a +.pdf file with hyperlinks, you can use the +ps2pdf script of +Ghostscript. For example, if foo.tex is a TeX file using +HyperTeX commands, then + +
          prompt$ tex foo.tex
+          prompt$ dvips -z foo.dvi -o
+          prompt$ ps2pdf foo.ps
+     
+

will produce foo.pdf with hyperlinks. + +

dvipdfm
dvipdfmx
No special command line arguments are required, these programs +automatically detect the HyperTeX commands. + +
+ +

One more note is in place: support for the HyperTeX commands varies +from one previewer/converter to another, so you might need to experiment +to see if what you need is supported by the program(s) you intend to +use. For example, dvips(k) as of version 5.92b converts all +internal hyperlinks into page links pointing to a page containing the +destination, so that “exact” linking to destinations is not possible +(this was confirmed to be a bug and most probably has already been fixed +in later versions of dvips(k)); dvipdfm as of version 0.13.2c and +dvipdfmx as of version 20040411 do not correctly parse links to +external local files, and produce a URL link instead of a +file link. + +

+ + + +
5.4.2.1 Destination types for hypertex
+ +

+

+
xyz
“Current position”. This is the default type. + +

Example: \hldest{xyz}{}{dest123} + +

raw
The destination specification (in the form of a HyperTeX +\special) is taken from the command sequence \cs, +where cs is the value of the +cmd option. In the definition of \cs, use +\@hllabel to refer to the hyperlink label. This option is +intended to be used with destgroups (see Setting hyperlink types and options), as it does not make sense in a direct call to +\hldest—you can just call the raw command. + +

Example: + +

          \makeatletter
+          \def\mydest{\special{html:<a name="\@hllabel">}%
+                      \special{html:</a>}}
+          \resetatcatcode
+          \indent\hldest{raw}{cmd=mydest}{SpecialDest}
+            Special destination.
+     
+
+ + + +
5.4.2.2 Destination options for hypertex
+ +

+

+
cmd
Name of the macro (without the leading `\') containing a +HyperTeX \special for the raw destination. + +

See Destination types for hypertex, the description of the raw +destination, for an example. +

+ + + +
5.4.2.3 Link types for hypertex
+ +

+

+
name
Go to a “named destination”. The label is the destination name. All +destinations in HyperTeX are named destinations. This is the default +type. + +

Example: \hlstart{name}{}{dest123}Link to dest123\hlend + +

url
Go to a URL. The label is the URL. + +

Example: + +

          \hlstart{url}{}{http://tug.org/eplain/}Eplain home\hlend
+     
+
filename
Go to a named destination in another file. The label is the +destination name. The file name is specified by the +file option. The file name extension can be specified separately +by the +ext option. The idea is to set the ext option globally at +the beginning of the document to avoid hard-coding the extension +together with the file name within each link—HyperTeX is not +restricted to any single output format, it can be DVI, +PDF, possibly other formats. + +

Example: + +

          \hlopts{ext=.pdf}
+          \hlstart{filename}{file=book}{dest123}
+            Link to dest123 in file `book.pdf'\hlend
+     
+
raw
The link specification (in the form of a HyperTeX \special) is +taken from the command sequence \cs, where cs is the +value of the +cmd option. In the definition of \cs, use +\@hllabel to refer to the hyperlink label. Use the predefined +command +\hlhash to insert the # characters. This option is +intended to be used with linkgroups (see Setting hyperlink types and options), as it does not make sense in a direct call to +\hlstart—you can just call the raw command. + +

Example: + +

          \makeatletter
+          \def\mylink{\special{html:<a href="\hlhash\@hllabel">}}
+          \resetatcatcode
+          \hlstart{raw}{cmd=mylink}{SpecialDest}
+            Link to the special destination.\hlend
+     
+
+ + + +
5.4.2.4 Link options for hypertex
+ +

+

+
cmd
Name of the macro (without the leading `\') containing a +HyperTeX \special for the raw link. + +

See Link types for hypertex, the description of the raw link, +for an example. + +

file
File name for the filename link type. See also the ext +option. + +

See Link types for hypertex, the description of the filename +link, for an example. + +

ext
File name extension for the filename link type. The idea is to +set the ext option globally at the beginning of the document to +avoid hard-coding the extension together with the file name within each +link—HyperTeX is not restricted to any single output format, it can +be DVI, PDF, possibly other formats. + +

See Link types for hypertex, the description of the filename +link, for an example. +

+ + + +

5.4.3 Hyperlink drivers pdftex and dvipdfm

+ +

This subsection describes link and destination types and options +supported by the pdftex and dvipdfm drivers. Many of the +hyperlink types and options are common to both drivers, so we describe +them together. + +

+ + + +
5.4.3.1 Destination types for pdftex and dvipdfm
+ +

+

+
xyz
“Current position”. The option +zoom specifies magnification to use (zero or empty means leave +magnification unchanged, which is the default). This is the default +type. + +

For dvipdfm: the options +left and +top specify position coordinates to use (empty options mean +current position coordinate, which is the default). + +

Example: \hldest{xyz}{zoom=2000}{dest123} + +

fit
Fit the page to the window. + +

Example: \hldest{fit}{}{dest123} + +

fith
Fit the width of the page to the window. + +

For dvipdfm: the +top option specifies vertical position (default is empty, meaning +current position). + +

Example: \hldest{fith}{}{dest123} + +

fitv
Fit the height of the page to the window. + +

For dvipdfm: The option +left specifies horizontal position (default is empty, meaning +current position). + +

Example: \hldest{fitv}{}{dest123} + +

fitb
Fit the page's bounding box to the window. + +

Example: \hldest{fitb}{}{dest123} + +

fitbh
Fit the width of the page's bounding box to the window. + +

For dvipdfm: the option +top specifies vertical position (default is empty, meaning +current position). + +

Example: \hldest{fitbh}{}{dest123} + +

fitbv
Fit the height of the page's bounding box to the window. + +

For dvipdfm: the option +left specifies horizontal position (default is empty, meaning +current position). + +

Example: \hldest{fitbv}{}{dest123} + +

fitr
For pdftex: fit the rectangle specified by the options +width, +height and +depth (as a TeX rule specification) in the window. For +dimensions set to empty, the corresponding value of the parent box is +used (these are the defaults). + +

For dvipdfm: fit the rectangle specified by the options +left, +bottom, +right and +top (in +PostScript points, 72 points per inch) in the window. For +dimensions set to empty, current position coordinate is substituted +(these are the defaults). + +

Example for pdftex: + +

          \hldest{fitr}{width=\hsize,
+                        height=.5\vsize,depth=0pt}{dest123}
+     
+

Example for dvipdfm: + +

          \hldest{fitr}{left=72,bottom=72,
+                        right=720,top=360}{dest123}
+     
+
raw
The destination specification (in the form of a pdfTeX command or a +dvipdfm \special) is taken from the command sequence +\cs, where cs is the value of the +cmd option. In the definition of \cs, use +\@hllabel to refer to the hyperlink label. This option is +intended to be used with destgroups (see Setting hyperlink types and options), as it does not make sense in a direct call to +\hldest—you can just call the raw command. + +

Example for pdftex: + +

          \makeatletter
+          \def\mydest{\pdfdest name{\@hllabel} xyz}
+          \resetatcatcode
+          \hldesttype{raw}
+          \hldestopts{cmd=mydest}
+     
+

Example for dvipdfm: + +

          \makeatletter
+          \def\mydest{\special{pdf: dest (\@hllabel)
+                                    [@thispage /XYZ @xpos @ypos 0]}}
+          \resetatcatcode
+          \hldesttype{raw}
+          \hldestopts{cmd=mydest}
+     
+
+ + + +
5.4.3.2 Destination options for pdftex and dvipdfm
+ +

With respect to the destination options, the pdftex and +dvipdfm differ in the way the fit rectangle is specified +(relative coordinates for pdftex, absolute coordinates for +dvipdfm). + +

Common destination options
+ +
+
cmd
Name of the macro (without the leading `\') containing a +pdfTeX command or a dvipdfm \special for the raw +destination. + +

See Destination types for pdftex and dvipdfm, the description of the +raw destination, for an example. + +

zoom
Magnification ratio times 1000 (like TeX's scale factor). +Zero or empty means leave magnification unchanged, which is the +default. + +

Example: \hldest{xyz}{zoom=2000}{dest123} +

+ +
pdftex-specific destination options
+ +

The dimension options below must be specified as a TeX rule +specification. When set to empty, the corresponding value +of the parent box is used (this is the default for all dimension +options). + +

+
depth
Depth of the fit rectangle for the fitr destination. + +
height
Height of the fit rectangle for the fitr destination. + +
width
Width of the fit rectangle for the fitr destination. + +

Example: + +

          \hldest{fitr}{width=\hsize,
+                        height=.5\vsize,depth=0pt}{dest123}
+     
+
+ +
dvipdfm-specific destination options
+ +

The dimension options below must be specified in +PostScript points (72 points per inch), as a number without the +`bp' unit name. When set to empty, the current position +coordinate is used (this is the default for all dimension options). + +

+
bottom
Bottom position coordinate of a box specification for the various +destination types. + +
left
Left position coordinate of a box specification for the various +destination types. + +
right
Right position coordinate of a box specification for the various +destination types. + +
top
Top position coordinate of a box specification for the various +destination types. + +

Example: + +

          \hldest{fitr}{left=72,bottom=72,
+                        right=720,top=360}{dest123}
+     
+
+ + + +
5.4.3.3 Link types for pdftex and dvipdfm
+ +

Link types are the same for the pdftex and dvipdfm +drivers, except that the pdftex driver provides one additional +link type num (link to a numbered destination). dvipdfm does not +support numbered destinations, therefore it does not have this link +type. Note that all destinations created by Eplain hyperlink macros are +named destinations; to define a numbered destination, you have to use +low-level pdfTeX commands. + +

Common link types
+ +
+
name
Go to a “named destination”. The label is the destination name. +All destinations created with \hldest are named destinations +(see Explicit hyperlinks). This is the default type. + +

Example: \hlstart{name}{}{dest123}Link to dest123\hlend + +

url
Go to a URL. The label is the URL. + +

Example: \hlstart{url}{}{http://tug.org/eplain/}Eplain home\hlend + +

page
Go to a page. The label is the page number (counting from 1). +Page fitting is specified by the +pagefit option. + +

Example: + +

          \hlstart{page}{pagefit=/FitH 600}{123}
+            Link to page~123\hlend
+     
+
filename
Go to a named destination in another file. The label is the +destination name. The file name is specified by the +file option. Page fitting is specified by the +pagefit option. The +newwin option specifies whether the destination document is +opened in the same window or in a new window. + +

Example: + +

          \hlstart{filename}{file=book.pdf,newwin=1}{dest123}
+            Link to dest123 in file `book.pdf'\hlend
+     
+
filepage
Go to a page in another file. The label is the page number (counting +from 1). The file name is specified by the +file option. Page fitting is specified by the +pagefit option. The +newwin option specifies whether the destination document is +opened in the same window or in a new window. + +

Example: + +

          \hlstart{filepage}{file=book.pdf,newwin=,
+                             pagefit=/FitR 50 100 300 500}{1}
+            Link to page~1 in file `book.pdf'\hlend
+     
+
raw
The link specification (in the form of a pdfTeX command or a dvipdfm +\special primitive) is taken from the command sequence +\cs, where cs is the value of the +cmd option. In the definition of \cs, use +\@hllabel to refer to the hyperlink label. This option is +intended to be used with linkgroups (see Setting hyperlink types and options), as it does not make sense in a direct call to +\hlstart—you can just call the raw command. + +

Example for pdftex: + +

          % Redirect all \url links to the first page
+          \def\mycmd{\pdfstartlink goto page 1 {/Fit}}
+          \hltype[url]{raw}
+          \hlopts[url]{cmd=mycmd}
+     
+

Example for dvipdfm: + +

          % Redirect all \url links to the first page
+          \def\mycmd{\special{pdf: beginann <</Type/Annot /Subtype/Link
+                                              /Dest[0 /Fit]>>}}
+          \hltype[url]{raw}
+          \hlopts[url]{cmd=mycmd}
+     
+
+ +
pdftex-specific link types
+ +
+
num
Go to a “numbered destination”. The label is the destination +number. + +

Example: \hlstart{num}{}{123}Link to 123\hlend +

+ + + +
5.4.3.4 Link options for pdftex and dvipdfm
+ +

Link options are mostly the same for the pdftex and +dvipdfm drivers. The pdftex driver has additional +options to specify link dimensions. + +

Common link options
+ +
+
bcolor
Border color. An array of three numbers in the range 0 to 1, +representing a color in DeviceRGB. + +

Example: \hlstart{name}{bcolor=.1 .5 1}{dest123}Link\hlend + +

bdash
Array of numbers representing on and off stroke lengths for drawing +dashes. + +

Example: \hlstart{name}{bstyle=D,bdash=2 4}{dest123}Link\hlend + +

bstyle
Link border style: + +
+
S
The border is drawn as a solid line. + +
D
The border is drawn with a dashed line (the dash pattern is specified +by the +bdash option). + +
B
The border is drawn in a beveled style. + +
I
The border is drawn in an inset style. + +
U
The border is drawn as a line on the bottom of the link rectangle. +
+ +

The default is `S'. + +

Example: \hlstart{name}{bstyle=D,bdash=2 4}{dest123}Link\hlend + +

bwidth
Border width in +PostScript points (72 points per inch). The default is 1. + +

Example: \hlstart{name}{bwidth=2}{dest123}Link\hlend + +

cmd
Name of the macro (without the leading `\') containing a +pdfTeX command or a dvipdfm \special for the raw link. + +

See Link types for pdftex and dvipdfm, the description of the +raw link, for an example. + +

file
File name for the filename and filepage link types. + +

See Link types for pdftex and dvipdfm, the descriptions of the +filename and filepage links, for an example. + +

hlight
Link border highlight modes: + +
+
I
The rectangle specified by the bounding box of the link is inverted. + +
N
No highlighting is done. + +
O
The border of the link is inverted. + +
P
The region underneath the bounding box of the link is drawn inset into +the page. +
+ +

The default is `I'. + +

Example: \hlstart{name}{bstyle=S,hlight=O}{dest123}Link\hlend + +

newwin
For the filename and filepage links, specifies whether the destination document is +opened in the same window or in a new window. The settings are: + +
+
0
Open in the same window. +
non-0
Open in a new window. +
empty
Behavior according to the viewer settings. +
+ +

The default is empty. + +

See Link types for pdftex and dvipdfm, the descriptions of the +filename and filepage links, for an example. + +

pagefit
For the page and filepage links, specifies how the page +must be fitted to the window. pagefit specification is written +to the PDF file as is, so it must conform to the +PDF standard. + +

See Link types for pdftex and dvipdfm, the descriptions of the +page and filepage links, for an example. +

+ +
pdftex-specific link options
+ +

The dimension options below must be specified as a TeX rule +specification. When set to empty, the corresponding value +of the parent box is used (this is the default for all dimension +options). + +

+
depth
Depth of the link. + +
height
Height of the link. + +
width
Width of the link. + +

Example: + +

          \hlstart{name}{width=5in,height=20pc,depth=0pt}{dest123}
+            Link\hlend
+     
+
+ + + +

5.4.4 Hyperlink driver nolinks

+ +

Select this driver to suppress all hyperlinks in your document. + +

Selecting this driver is quite different from not selecting any driver +at all, or from selecting some driver and then turning hyperlinks off +for the entire document with +\hloff and +\hldestoff (see Turning hyperlinks on/off). + +

The purpose of \hldestoff and \hloff is to mark (parts) of +your document where hyperlinks should never appear. (Imagine you want +to prevent a cross-referencing macro from generating a link at a certain +spot in your document.) + +

If instead you have prepared a document with hyperlinks and just want to +compile a version without them, it is better to select the driver +nolinks. This ensures that spacing and page-breaking are the +same as what you were getting with hyperlinks enabled. + +

The reason for this is that hyperlinks are produced by the +\special primitives or low-level hyperlink commands. Each such +command is placed inside a +whatsit (an internal TeX object), which may introduce +legitimate breakpoints at places where none would exist without the +whatsits. The macros \hldestoff and \hloff disable the +hyperlink macros completely, so that no whatsits are produced. + +

In contrast, the nolinks driver does not completely disable +hyperlink macros. Instead, it defines them to merely write to the log +file (what gets written is unimportant). This also produces +whatsits, thus imitating the whatsits from the hyperlink commands. +(This trick was borrowed from the +LaTeX `color' package.) + +

Another reason for using nolinks is that in horizontal mode +\hldest places destinations inside boxes of zero width, height, +and depth. When you say \hldestoff, \hldest will omit +both destination definitions and these boxes. The missing boxes can +again cause the typesetting to be inconsistent with that with +destinations enabled. Here again, the nolinks driver helps by +defining \hldest to produce the empty boxes. + +

So, if you are planning to produce versions of your PDF +document both with and without hyperlinks, here is the recommended way +to enable the hyperlinks under pdfTeX: + +

+

     \ifpdf
+       \enablehyperlinks
+     \else
+       \enablehyperlinks[nolinks]%
+     \fi
+
+
+


+ +Next: , +Previous: Hyperlink drivers, +Up: Hyperlinks + +
+ +

5.5 Setting hyperlink types and options

+ +

You can define default types for links and destinations, which will be +used when you do not specify a type in +\hlstart or +\hldest. Similarly, you can define default values for the +options; the default value for an option is used when you do not set the +option in the argument to \hlstart or \hldest. + +

The parameters for implicit links and destinations can be customized by +setting the “group” types and options. When not set, the defaults are +used. + +

All these settings are local to the current (TeX) group, so if +you want to set an option temporarily, you can do so inside a +\begingroup...\endgroup block; when the group ends, the +previous settings are restored. + +

+ + + +

5.5.1 Setting default types and options

+ +

The default types for links and destinations can be set with the +following commands: + +

     \hltype{type}
+     \hldesttype{type}
+
+

where type is one of the +link/destination types supported by the selected hyperlink driver +(see Hyperlink drivers). + +

Default values for the options can be set with the following commands: + +

     \hlopts{options}
+     \hldestopts{options}
+
+

where options is a comma-separated list of option +assignments in the format `option=value'. Again, what options +are allowed depends on the selected hyperlink driver. + +

Many people regard the default boxed links as not aesthetic and +intruding on page layout. The reason why boxed links are the default is +that the links are not colored until you load the LaTeX +`color' package (see Loading LaTeX packages) or use other means to +define the \color command; therefore, not producing any kind of +link border may result in the links not being marked in any way. +However, when the links are actually colored, there is no need to +produce the link boxes anymore; to avoid the boxes, you can set the +default border width to zero (if the driver you use supports the link +option bwidth; see Hyperlink drivers): + +

     \hlopts{bwidth=0}
+
+ + +

5.5.2 Setting group types

+ +

When called with an optional argument, as in + +

     \hltype[groups]{type}
+     \hldesttype[groups]{type}
+
+

where groups is a comma-separated list of groups, +\hltype and \hldesttype set the type for each group from +groups to type. The default type is used for all groups +with an empty type (this is the initial setting for all groups, except +that the type for the `url' linkgroup is set to `url' by the +drivers which support this link type). + +

There are two special “groups” which can be used inside the +groups list. An empty group sets the default type. This allows +to set the default type and group types in one command, for example: + +

     \hltype[eq,]{type}
+
+

sets the link type for the `eq' linkgroup and the +default link type to type. + +

Another special group is a star (`*') group, which signifies all +defined groups. For example, the command + +

     \hldesttype[*,]{type}
+
+

sets the destination type to type for each group, +as well as the default destination type. + +

+ +

5.5.3 Setting group options

+ +

Option values for each group are stored as a list of option +assignments. This list does not have to contain every supported +option. Values for options missing from this list are taken from the +default option values. + +

To manipulate the list of option values for the groups, you use the +\hlopts and \hldestopts commands with an optional +argument: + +

     \hlopts[groups]{options}
+     \hldestopts[groups]{options}
+     \hlopts![groups]{options}
+     \hldestopts![groups]{options}
+
+

where groups is a comma-separated list of groups and +options is a comma-separated list of option assignments. The +two special “groups”, the empty group and the star (`*') +group, have the same meaning as for \hltype and +\hldesttype. +When used without the exclamation mark, \hlopts and +\hldestopts preserve the current list of options for the groups, +and only update the options listed in options. If you add the +exclamation mark, the current list of options for each group in +groups is discarded and the new list is set to options. + +

The “overriding” nature of the `!' is appropriate when you give +a complete specification of the options for a group, e.g., at the +beginning of your document. On the other hand, when you want to +adjust some option(s) and leave others intact, you should use the +macros without the `!'. + +

For example, with displayed mathematical formulas, you often need to +adjust the `raise' option for the +`eq' destgroup, because the formulas often contain large parentheses and +brackets. But when doing so, you want to leave the other settings +unchanged. To achieve this, call \hldestopts without the +`!', for example: + +

     $$\hldestopts[eq]{raise=2.5\normalbaselineskip}
+     ...
+     $$
+
+

The display commands (`$$') implicitly put the entire +formula inside a (TeX) group (\begingroup...\endgroup), so +you do not need to isolate the setting of the `raise' option—it +will be restored after the closing `$$'. + +

Initially, Eplain sets the option lists for almost all groups to empty, +so that the groups fall back on the default values for all options. The +one exception to this rule is the `eq' destgroup, whose initial option +list contains one setting: + +

     raise=1.7\normalbaselineskip
+
+

This setting usually accommodates the large operators, which often +appear in displayed math. + +

+


+ + +Previous: Setting hyperlink types and options, +Up: Hyperlinks + +
+ +

5.6 Turning hyperlinks on/off

+ +

Links and/or destinations can be turned on or off globally by disabling +the low-level commands, or for each group individually. + +

All these settings are local to the current (TeX) group, so if you +want to enable or disable links/destinations temporarily, you can do so +inside a \begingroup...\endgroup block; when the group ends, the +previous settings are restored. + +

+ + + +

5.6.1 Turning low-level commands on/off

+ +

The low-level commands \hlstart, \hlend and +\hldest can be turned on/off with the following commands: + +

     \hldeston
+     \hldestoff
+     \hlon
+     \hloff
+
+

See Hyperlink driver nolinks, for the implications of using +these commands to disable hyperlinks for the entire document. + +

+ +

5.6.2 Turning hyperlinks on/off for a group

+ +

If you want to disable links/destinations produced by certain groups, +you can give a list of the groups as an optional argument to these +commands: + +

     \hldeston[groups]
+     \hldestoff[groups]
+     \hlon[groups]
+     \hloff[groups]
+
+

where groups is the list of linkgroups/destgroups. This +list can contain two special groups. The empty group switches the +low-level commands (see Turning low-level commands on/off), and the +star (`*') group operates on all defined groups. + +

Note that turning off the low-level commands disables all hyperlinks +globally, including groups which have them enabled. Turning off certain +linkgroups/destgroups records the fact that the macros in the group +should not produce links/destinations. To illustrate the distinction, +assume that all links are on; after the following sequence of commands: + +

     \hloff
+     \hloff[eq]
+     \hlon
+
+

all links are on except for the `eq' linkgroup. + + + + + + + + + + + + + + + + + + + + + +

+


+ +Next: , +Previous: Hyperlinks, +Up: Top + +
+ +

6 Arrow theoretic diagrams

+ +

This chapter describes definitions for producing commutative diagrams. + +

Steven Smith wrote this documentation (and the macros). + +

+ + + +

6.1 Slanted lines and vectors

+ +

The macros \drawline +and \drawvector +provide the capability found in LaTeX's +picture mode to draw slanted lines and vectors of certain directions. +Both of these macros take three arguments: two integer arguments to +specify the direction of the line or vector, and one argument to specify +its length. For example, `\drawvector(-4,1){60pt}' produces the +vector +which lies in the 2d quadrant, has a slope of minus 1/4, and a width of +60 pt. + +

Note that if an \hbox is placed around \drawline or +\drawvector, then the width of the \hbox will be the +positive dimension specified in the third argument, except when a +vertical line or vector is specified, e.g., +\drawline(0,1){1in}, which has zero width. If the specified +direction lies in the 1st or 2d quadrant (e.g., (1,1) or +(-2,3)), then the \hbox will have positive height and zero +depth. Conversely, if the specified direction lies in the 3d or 4th +quadrant (e.g., (-1,-1) or (2,-3)), then the \hbox +will have positive depth and zero height. + +

There are a finite number of directions that can be specified. For +\drawline, the absolute value of each integer defining the +direction must be less than or equal to six, i.e., (7,-1) is +incorrect, but (6,-1) is acceptable. For \drawvector, the +absolute value of each integer must be less than or equal to four. +Furthermore, the two integers cannot have common divisors; therefore, if +a line with slope 2 is desired, say (2,1) instead of +(4,2). Also, specify (1,0) instead of, say, (3,0) +for horizontal lines and likewise for vertical lines. + +

Finally, these macros depend upon the LaTeX font line10. If +your site doesn't have this font, ask your system administrator to get +it. Future enhancements will include macros to draw dotted lines and +dotted vectors of various directions. + +

+ +

6.2 Commutative diagrams

+ +

+The primitive commands \drawline and \drawvector can be +used to typeset arrow theoretic diagrams. This section describes (1) +macros to facilitate typesetting arrows and morphisms, and (2) macros to +facilitate the construction of commutative diagrams. All macros +described in this section must be used in math mode. + +

+ + + +

6.2.1 Arrows and morphisms

+ +

+The macros \mapright and \mapleft produce right and left +pointing arrows, respectively. Use superscript (^) to place a +morphism above the arrow, e.g., `\mapright^\alpha'; use subscript +(_) to place a morphism below the arrow, e.g., +`\mapright_{\tilde l}'. Superscripts and subscripts may be used +simulataneously, e.g., `\mapright^\pi_{\rm epimor.}'. + +

Similarly, the macros \mapup and \mapdown produce up and +down pointing arrows, respectively. Use \rt +to place a morphism to the right of the arrow, e.g., `\mapup\rt{\rm +id}'; use \lft +to place a morphism to the left of the arrow, e.g., `\mapup\lft\omega'. +\lft and \rt may be used simultaneously, e.g., +`\mapdown\lft\pi\rt{\rm monomor.}'. + +

Slanted arrows are produced by the macro \arrow, which takes +a direction argument (e.g., `\arrow(3,-4)'). Use \rt and +\lft to place morphisms to the right and left, respectively, of +the arrow. A slanted line (no arrowhead) is produced with the macro +\sline, +whose syntax is identical to that of \arrow. + +

The length of these macros is predefined by the default TeX +dimensions \harrowlength, +for horizontal arrows (or lines), +\varrowlength, +for vertical arrows (or lines), and +\sarrowlength, +for slanted arrows (or lines). To change any of these dimensions, say, +e.g., `\harrowlength=40pt'. As with all other TeX dimensions, +the change may be as global or as local as you like. Furthermore, the +placement of morphisms on the arrows is controlled by the dimensions +\hmorphposn, +\vmorphposn, +and \morphdist. +The first two dimensions control the horizontal and vertical position of +the morphism from its default position; the latter dimension controls +the distance of the morphism from the arrow. If you have more than one +morphism per arrow (i.e., a ^/_ or \lft/\rt +construction), use the parameters +\hmorphposnup, +\hmorphposndn, +\vmorphposnup, +\vmorphposndn, +\hmorphposnrt, +\hmorphposnlft, +\vmorphposnrt, +and \vmorphposnlft. +The default values of all these dimensions are provided in the section +on parameters that follows below. + +

There is a family of macros to produce horizontal lines, arrows, and +adjoint arrows. The following macros produce horizontal maps and have +the same syntax as \mapright: + +

+
\mapright
$X\mapright Y$ + +
\mapleft
$X\mapleft Y$ + +
\hline
$X\hline Y$ + +
\bimapright
$X\bimapright Y$ + +
\bimapleft
$X\bimapleft Y$ + +
\adjmapright
$X\adjmapright Y$ + +
\adjmapleft
$X\adjmapleft Y$ + +
\bihline
$X\bihline Y$ +
+ +

There is also a family of macros to produce vertical lines, arrows, and +adjoint arrows. The following macros produce vertical maps and have +the same syntax as \mapdown: + +

+
\mapdown
(a down arrow) + +
\mapup
(an up arrow) + +
\vline
(vertical line) + +
\bimapdown
(two down arrows) + +
\bimapup
(two up arrows) + +
\adjmapdown
(two adjoint arrows; down then up) + +
\adjmapup
(two adjoint arrows; up then down) + +
\bivline
(two vertical lines) +
+ +

Finally, there is a family of macros to produce slanted lines, arrows, +and adjoint arrows. The following macros produce slanted maps and have +the same syntax as \arrow: + +

+
\arrow
(a slanted arrow) + +
\sline
(a slanted line) + +
\biarrow
(two straight arrows) + +
\adjarrow
(two adjoint arrows) + +
\bisline
(two straight lines) + +
+ +

The width between double arrows is controlled by the parameter +\channelwidth. +The parameters \hchannel and \vchannel, if nonzero, +override \channelwidth by controlling the horizontal and vertical +shifting from the first arrow to the second. + +

There are no adornments on these arrows to distinguish inclusions from +epimorphisms from monomorphisms. Many texts, such as Lang's book +Algebra, use as a tasteful alternative the symbol `inc' (in roman) next +to an arrow to denote inclusion. + +Future enhancements will include a mechanism to draw curved arrows +found in, e.g., the Snake Lemma, by employing a version of the +\path macros of Appendix D of The TeXbook. + + +

+ +

6.2.2 Construction of commutative diagrams

+ +

There are two approaches to the construction of commutative diagrams +described here. The first approach, and the simplest, treats +commutative diagrams like fancy matrices, as Knuth does in Exercise +18.46 of The TeXbook. This case is covered by the macro +\commdiag, +which is an altered version of the Plain TeX macro \matrix. +An example suffices to demonstrate this macro. The following +commutative diagram (illustrating the covering homotopy property; Bott +and Tu, Differential Forms in Algebraic Topology) +is produced with the code + +

     $$\commdiag{Y&\mapright^f&E\cr \mapdown&\arrow(3,2)\lft{f_t}&\mapdown\cr
+     Y\times I&\mapright^{\bar f_t}&X}$$
+
+

Of course, the parameters may be changed to produce a different effect. +The following commutative diagram (illustrating the universal mapping +property; Warner, Foundations of Differentiable Manifolds and Lie +Groups) +is produced with the code + +

     $$\varrowlength=20pt
+     \commdiag{V\otimes W\cr \mapup\lft\phi&\arrow(3,-1)\rt{\tilde l}\cr
+     V\times W&\mapright^l&U\cr}$$
+
+

A diagram containing isosceles triangles is achieved by placing the apex +of the triangle in the center column, as shown in the example +(illustrating all constant minimal realizations of a linear system; +Brockett, Finite Dimensional Linear Systems) +which is produced with the code + +

     $$\sarrowlength=.42\harrowlength
+     \commdiag{&R^m\cr &\arrow(-1,-1)\lft{\bf B}\quad \arrow(1,-1)\rt{\bf G}\cr
+     R^n&\mapright^{\bf P}&R^n\cr
+     \mapdown\lft{e^{{\bf A}t}}&&\mapdown\rt{e^{{\bf F}t}}\cr
+     R^n&\mapright^{\bf P}&R^n\cr
+     &\arrow(1,-1)\lft{\bf C}\quad \arrow(-1,-1)\rt{\bf H}\cr
+     &R^q\cr}$$
+
+

Other commutative diagram examples appear in the file +commdiags.tex, which is distributed with this package. + +

In these examples the arrow lengths and line slopes were carefully +chosen to blend with each other. In the first example, the default +settings for the arrow lengths are used, but a direction for the arrow +must be chosen. The ratio of the default horizontal and vertical arrow +lengths is approximately the golden mean +the arrow direction closest to this mean is (3,2). In the second +example, a slope of +is desired and the default horizontal arrow length is 60 pt; therefore, +choose a vertical arrow length of 20 pt. You may affect the interline +glue settings of \commdiag by redefining the macro +\commdiagbaselines. +(cf. Exercise 18.46 of The TeXbook and the section on +parameters below.) + +

The width, height, and depth of all morphisms are hidden so that the +morphisms' size do not affect arrow positions. This can cause a large +morphism at the top or bottom of a diagram to impinge upon the text +surrounding the diagram. To overcome this problem, use TeX's +\noalign primitive to insert a \vskip immediately above or +below the offending line, e.g., +`$$\commdiag{\noalign{\vskip6pt}X&\mapright^\int&Y\cr ...}'. + +

The macro \commdiag is too simple to be used for more complicated +diagrams, which may have intersecting or overlapping arrows. A second +approach, borrowed from Francis Borceux's Diagram macros for +LaTeX, treats the commutative diagram like a grid of identically +shaped boxes. To compose the commutative diagram, first draw an equally +spaced grid, e.g., +on a piece of scratch paper. Then draw each element (vertices and +arrows) of the commutative diagram on this grid, centered at each +grid point. Finally, use the macro \gridcommdiag +to implement your design as a TeX alignment. For example, the cubic +diagram +that appears in Francis Borceux's documentation can be implemented on +a 7 by 7 grid, and is achieved with the code + +

     $$\harrowlength=48pt \varrowlength=48pt \sarrowlength=20pt
+     \def\cross#1#2{\setbox0=\hbox{$#1$}%
+       \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}}
+     \gridcommdiag{&&B&&\mapright^b&&D\cr
+     &\arrow(1,1)\lft a&&&&\arrow(1,1)\lft d\cr
+     A&&\cross{\hmorphposn=12pt\mapright^c}{\vmorphposn=-12pt\mapdown\lft f}
+     &&C&&\mapdown\rt h\cr\cr
+     \mapdown\lft e&&F&&\cross{\hmorphposn=-12pt\mapright_j}
+     {\vmorphposn=12pt\mapdown\rt g}&&H\cr
+     &\arrow(1,1)\lft i&&&&\arrow(1,1)\rt l\cr
+     E&&\mapright_k&&G\cr}$$
+
+

The dimensions \hgrid and \vgrid +control the horizontal and vertical spacing of the grid used by +\gridcommdiag. The default setting for both of these dimensions +is 15 pt. Note that in the example of the cube the arrow lengths must +be adjusted so that the arrows overlap into neighboring boxes by the +desired amount. Hence, the \gridcommdiag method, albeit more +powerful, is less automatic than the simpler \commdiag method. +Furthermore, the ad hoc macro \cross is introduced to allow the +effect of overlapping arrows. Finally, note that the positions of four +of the morphisms are adjusted by setting \hmorphposn and +\vmorphposn. + +

One is not restricted to a square grid. For example, the proof of +Zassenhaus's Butterfly Lemma can be illustrated by the diagram (appearing +in Lang's book Algebra) +This diagram may be implemented on a 9 by 12 grid with an aspect ratio +of 1/2, and is set with the code + +

     $$\hgrid=16pt \vgrid=8pt \sarrowlength=32pt
+     \def\cross#1#2{\setbox0=\hbox{$#1$}%
+       \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}}
+     \def\l#1{\llap{$#1$\hskip.5em}}
+     \def\r#1{\rlap{\hskip.5em$#1$}}
+     \gridcommdiag{&&U&&&&V\cr &&\bullet&&&&\bullet\cr
+     &&\sarrowlength=16pt\sline(0,1)&&&&\sarrowlength=16pt\sline(0,1)\cr
+     &&\l{u(U\cap V)}\bullet&&&&\bullet\r{(U\cap V)v}\cr
+     &&&\sline(2,-1)&&\sline(2,1)\cr
+     &&\cross{=}{\sline(0,1)}&&\bullet&&\cross{=}{\sline(0,1)}\cr\cr
+     &&\l{^{\textstyle u(U\cap v)}}\bullet&&\cross{=}{\sline(0,1)}&&
+      \bullet\r{^{\textstyle(u\cap V)v}}\cr
+     &\sline(2,1)&&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)\cr
+     \l{u}\bullet&&&&\bullet&&&&\bullet\r{v}\cr
+     &\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)\cr
+     &&\bullet&&&&\bullet\cr &&u\cap V&&&&U\cap v\cr}$$
+
+

Again, the construction of this diagram requires careful choices for the +arrow lengths and is facilitated by the introduction of the ad hoc +macros \cross, \r, and \l. Note also that +superscripts were used to adjust the position of the vertices +Many diagrams may be typeset with the predefined macros that appear +here; however, ingenuity is often required to handle special cases. + +

+ +

6.2.3 Commutative diagram parameters

+ +

The following is a list describing the parameters used in the +commutative diagram macros. These dimensions may be changed globally or +locally. + +

+
\harrowlength
(Default: 60 pt) The length of right or left arrows. + +
\varrowlength
(Default: 0.618\harrowlength) The length of up or down +arrows. + +
\sarrowlength
(Default: 60 pt) The horizontal length of slanted arrows. + +
\hmorphposn
(Default: 0 pt) The horizontal position of the morphism with +respect to its default position. There are also the dimensions +\hmorphposnup, +\hmorphposndn, +\hmorphposnrt, +and \hmorphposnlft +for ^/_ or \lft/\rt constructions. + +
\vmorphposn
(Default: 0 pt) The vertical position of the morphism with +respect to its default position. There are also the dimensions +\vmorphposnup, +\vmorphposndn, +\vmorphposnrt, +and \vmorphposnlft +for ^/_ or \lft/\rt constructions. + +
\morphdist
(Default: 4 pt) The distance of morphisms from slanted lines +or arrows. + +
\channelwidth
(Default: 3 pt) The distance between double lines or arrows. + +
\hchannel, \vchannel
(Defaults: 0 pt) Overrides \channelwidth. The +horizontal and vertical shifts between double lines or arrows. + +
\commdiagbaselines
(Default: \baselineskip=15pt +\lineskip=3pt +\lineskiplimit=3pt ) +The parameters used by \commdiag for setting interline glue. + +
\hgrid
(Default: 15 pt) The horizontal spacing of the grid used by +\gridcommdiag. + +
\vgrid
(Default: 15 pt) The vertical spacing of the grid used by +\gridcommdiag. + +
+ + + +
+


+ +Next: , +Previous: Arrow theoretic diagrams, +Up: Top + +
+ +

7 Programming definitions

+ +

The definitions in this section are only likely to be useful when you +are writing nontrivial macros, not when writing a document. + +

+ + + +

7.1 Category codes

+ +

+Plain TeX defines \active (as the number 13) for use in +changing category codes. Although the author of The TeXbook +has “intentionally kept the category codes numeric”, two other +categories are commonly used: letters (category code 11) and others +(12). Therefore, Eplain defines \letter and +\other. + +Sometimes it is cleaner to make a character active without actually +writing a \catcode command. The \makeactive command takes +a character as an argument to make active (and ignores following +spaces). For example, here are two commands which both make \ +active: + +

     \makeactive\\   \makeactive92
+
+

Sometimes you might want to temporarily change the category code of +the `@' character to \letter, so that you can use or define +macros which are normally inaccessible to the user. For such +situations, Eplain provides the \makeatletter +command. It sets the category code of `@' to \letter (11) and +defines +\resetatcatcode +to restore the category code to whatever it was before the call to +\makeatletter. For example: + +

     \makeatletter
+     \def\@hidden@macro{This macro cannot normally be
+                        called / redefined by the user}
+     \resetatcatcode
+
+

There is also \makeatother +which works similarly but sets the category code of `@' to +\other (12). + +

Usually, when you give a definition to an active character, you have +to do so inside a group where you temporarily make the character active, +and then give it a global definition (cf. the definition of +\obeyspaces in The TeXbook). +This is inconvenient if you are writing a long macro, or if the +character already has a global definition you do not wish to transcend. +Eplain provides \letreturn, which defines the usual end-of-line +character to be the argument. For example: + +

     \def\mymacro{... \letreturn\myreturn ... }
+     \mymacro hello
+     there
+
+

The end-of-line between `hello' and `there' causes +\myreturn to be expanded. + +

The TeXbook describes \uncatcodespecials, +which makes all characters which are normally “special” into “other” +characters, but the definition never made it into plain TeX. +Eplain therefore defines it. + +

Finally, \percentchar +expands into a literal `%' character. This is useful when you +\write TeX output to a file, and want to avoid spurious +spaces. For example, Eplain writes a \percentchar after the +definition of cross-references. The macros \lbracechar +and \rbracechar +expand similarly. + +

+


+ +Next: , +Previous: Category codes, +Up: Programming definitions + +
+ +

7.2 Allocation macros

+ +

+Plain TeX provides macros that allocate registers of each primitive +type in TeX, to prevent different sets of macros from using the same +register for two different things. The macros are all named starting +with `new', +e.g., \newcount allocates a new “count” +(integer) register. Such allocations are usually needed only at the top +level of some macro definition file; therefore, plain TeX makes the +allocation registers \outer, +to help find errors. (The error this helps to find is a missing right +brace in some macro definition.) + +

Sometimes, however, it is useful to allocate a register as part of +some macro. An outer control sequence cannot be used as part of a macro +definition (or in a few other contexts: the parameter text of a +definition, an argument to a definition, the preamble of an alignment, +or in conditional text that is being skipped). Therefore, Eplain +defines “inner” versions of all the allocation macros, named with the +prefix `inner': +\innernewbox, +\innernewcount, +\innernewdimen, +\innernewfam, +\innernewhelp, +\innernewif, +\innernewinsert, +\innernewlanguage, +\innernewread,
+\innernewskip, +\innernewtoks, +\innernewwrite. + +You can also define non-outer versions of other macros in the same way +that Eplain defines the above. The basic macro is called +\innerdef: + +

     \innerdef \innername {outername}
+
+

The first argument (\innername) to \innerdef is the +control sequence that you want to define. Any previous definition of +\innername is replaced. The second argument +(outername) is the characters in the name of the outer +control sequence. (You can't use the actual control sequence name, +since it's outer!) + +

If the outer control sequence is named \cs, and you want to +define innercs as the inner one, you can use +\innerinnerdef, +which is just an abbreviation for a call to \innerdef. For +example, these two calls are equivalent: + +

     \innerdef\innerproclaim{proclaim}
+     \innerinnerdef{proclaim}
+
+
+


+ +Next: , +Previous: Allocation macros, +Up: Programming definitions + +
+ +

7.3 Iteration

+ +

+You can iterate through a comma-separated list of items with +\for. +Here is an example: + +

     \for\name:=karl,kathy\do{%
+        \message{\name}%
+     }%
+
+

This writes `karl' and `kathy' to the terminal. Spaces +before or after the commas in the list, or after the :=, are +not ignored. To strip leading spaces off the items, use +\For: + +

     \For\name:=
+        karl,
+        kathy\do{%
+           \message{\name}%
+        }%
+
+

Note that trailing spaces are still not ignored. + +

Both \for and \For expand the first token of the item +list fully, so this is equivalent to the above: + +

     \def\namelist{karl,kathy}%
+     \for\name:=\namelist\do ...
+
+

However, this won't work, either with \for or with +\For: + +

     \def\namelist{karl,kathy}%
+     \For\name:= \namelist\do ...
+
+

because \for and \For expand the first +token after := which is space, not \namelist. + +

Eplain provides another kind of loops, which is an extension of plain +TeX's +\loop. If you say: + +

+

     \loop
+       loop-text
+     \if condition
+       if-text
+     \repeat
+
+

then loop-text will be repeated as long as condition +is satisfied (\if can be any of the TeX's conditional +commands, without the matching \fi). Eplain extends this with +the optional else clause: + +

     \loop
+       loop-text
+     \if condition
+       if-text
+     \else
+       else-text
+     \repeat
+
+

Here, loop-text will be repeated as long as +condition is not satisfied. This extension is from +Victor Eijkhout's +TeX by Topic (page 104). + +

+


+ +Next: , +Previous: Iteration, +Up: Programming definitions + +
+ +

7.4 Macro arguments

+ +

It is occasionally useful to redefine a macro that takes arguments to +do nothing. Eplain defines \gobble, +\gobbletwo, +and \gobblethree to swallow one, two, and three arguments, +respectively. + +

For example, if you want to produce a “short” table of +contents—one that includes only chapters, say—the easiest thing to +do is read the entire .toc file (see Contents), and just +ignore the commands that produce section or subsection entries. To be +specific: + +

     \let\tocchapterentry = \shorttocchapter
+     \let\tocsectionentry = \gobbletwo
+     \let\tocsubsectionentry = \gobbletwo
+     \readtocfile
+
+

(Of course, this assumes you only have chapters, sections, and +subsections in your document.) + +

In addition, Eplain defines \eattoken +to swallow the single following token, using \let. Thus, +\gobble followed by `{...}' ignores the entire +brace-enclosed text. \eattoken followed by the same ignores only +the opening left brace. + +

Eplain defines a macro \identity +which takes one argument and expands to that argument. This may be +useful if you want to provide a function for the user to redefine, but +don't need to do anything by default. (For example, the default +definition of \eqconstruct (see Formatting equation references) is \identity.) + +

You may also want to read an optional argument. The established +convention is that optional arguments are put in square brackets, so +that is the syntax Eplain recognizes. Eplain ignores space tokens +before an optional argument, via \futurenonspacelet. + +

You test for an optional argument by using \@getoptionalarg. + +It takes one argument, a control sequence to expand after reading the +argument, if present. If an optional argument is present, the control +sequence \@optionalarg expands to it; otherwise, +\@optionalarg is \empty. You must therefore have the +category code of @ set to 11 (letter). Here is an example: + +

     \catcode`@=\letter
+     \def\cmd{\@getoptionalarg\finishcmd}
+     \def\finishcmd{%
+       \ifx\@optionalarg\empty
+         % No optional argument present.
+       \else
+         % One was present.
+       \fi
+     }
+
+

If an optional argument contains another optional argument, the inner +one will need to be enclosed in braces, so TeX does not mistake the +end of the first for the end of the second. + +

+


+ +Next: , +Previous: Macro arguments, +Up: Programming definitions + +
+ +

7.5 Converting to characters

+ +

Eplain defines \xrlabel +to produce control sequence names for cross-reference labels, et al. +This macro expands to its argument with an `_' appended. (It does +this because the usual use of \xrlabel is to generate a control +sequence name, and we naturally want to avoid conflicts between control +sequence names.) + +

Because \xrlabel is fully expandable, to make a control +sequence name out of the result you need only do + +

     \csname \xrlabel{label}\endcsname
+
+

The \csname primitive makes a control sequence name out +of any sequence of character tokens, regardless of category code. +Labels can therefore include any characters except for `\', +`{', `}', and `#', all of which are used in macro +definitions themselves. + +

\sanitize takes a control sequence as an argument and converts +the expansion of the control sequence into a list of character tokens. +This is the behavior you want when writing information like chapter +titles to an output file. For example, here is part of the definition +of \writenumberedtocentry; #2 is the title that the user +has given. + +

     ...
+     \def\temp{#2}%
+     ...
+       \write\tocfile{%
+         ...
+         \sanitize\temp
+         ...
+       }%
+
+ + +

7.6 Expansion

+ +

This section describes some miscellanous macros for expansion, etc. + +

+ +
+


+ + +Next: , +Up: Expansion + +
+ +

7.6.1 \csn and \ece

+ +

\csn{name} simply abbreviates \csname name +\endcsname, thus saving some typing. The extra level of expansion +does take some time, though, so I don't recommend it for an inner loop. + +

\ece{token}{name} abbreviates + +

     \expandafter token \csname name \endcsname
+
+

For example, + +

     \def\fontabbrevdef#1#2{\ece\def{@#1font}{#2}}
+     \fontabbrevdef{normal}{ptmr}
+
+

defines a control sequence \@normalfont to expand to +ptmr. + +

+


+ + +Next: , +Previous: \csn and \ece, +Up: Expansion + +
+ +

7.6.2 \edefappend

+ +

\edefappend is a way of adding on to an existing definition. It +takes two arguments: the first is the control sequence name, the second +the new tokens to append to the definition. The second argument is +fully expanded (in the \edef that redefines the control sequence). + +

For example: + +

     \def\foo{abc}
+     \def\bar{xyz}
+     \edefappend\foo{\bar karl}
+
+

results in \foo being defined as `abcxyzkarl'. + +

+


+ +Next: , +Previous: \edefappend, +Up: Expansion + +
+ +

7.6.3 Hooks

+ +

A hook is simply a name for a group of actions which is executed +in certain places—presumably when it is most useful to allow +customization or modification. TeX already provides many builtin +hooks; for example, the \every ... token lists are all +examples of hooks. + +

Eplain provides several macros for adding actions to hooks. They all +take two arguments: the name of the hook and the new actions. + + + +

hookaction name actions
hookappend name actions

hookprepend name actions
Each of these adds actions to the hook name. (Any +previously-defined actions are retained.) name is not a control +sequence, but rather the characters of the name. + +


hookactiononce name \cs
\hookactiononce adds cs to name, like the macros +above, but first it adds + +
          \global\let \cs \relax
+     
+

to the definition of \cs. (This implies \cs must +be a true expandable macro, not a control sequence \let to a +primitive or some other such thing.) Thus, \cs is expanded the +next time the hook name is run, but it will disappear after that. + +

The \global is useful because \hookactiononce is most +useful when the grouping structure of the TeX code could be anything. +Neither this nor the other hook macros do global assignments to the hook +variable itself, so TeX's usual grouping rules apply. +

+ +

The companion macro to defining hook actions is \hookrun, for +running them. This takes a single argument, the name of the hook. If +no actions for the hook are defined, no error ensues. + +

Here is a skeleton of general \begin and \end macros that +run hooks, and a couple of calls to define actions. The use of +\hookprepend for the begin action and \hookappend for the +end action ensures that the actions are executed in proper sequence with +other actions (as long as the other actions use \hookprepend and +\hookappend also). + +

     \def\begin#1{ ... \hookrun{begin} ... }
+     \def\end#1{ ... \hookrun{end} ... }
+     \hookprepend{begin}\start_underline
+     \hookappend{end}\finish_underline
+
+
+


+ +Next: , +Previous: Hooks, +Up: Expansion + +
+ +

7.6.4 Properties

+ +

A property is a name/value pair associated with another symbol, +traditionally called an atom. Both atom and property names are +control sequence names. + +

Eplain provides two macros for dealing with property lists: +\setproperty and \getproperty. + + + +

\setproperty atom propname value
\setproperty defines the property property on the atom +atom to be value. atom and propname can be +anything acceptable to \csname. value can be anything. + +


\getproperty atom propname
\getproperty expands to the value stored for propname on +atom. If propname is undefined, it expands to nothing +(i.e., \empty). + +
+ +

The idea of properties originated in Lisp (I believe). There, the +implementation truly does associate properties with atoms. In TeX, +where we have no builtin support for properties, the association is only +conceptual. + +

The following example typesets `xyz'. + +

     \setproperty{a}{pr}{xyz}
+     \getproperty{a}{pr}
+
+
+


+ + +Next: , +Previous: Properties, +Up: Expansion + +
+ +

7.6.5 \expandonce

+ +

\expandonce is defined as \expandafter\noexpand. Thus, +\expandonce token expands token once, instead of to +TeX primitives. This is most useful in an \edef. + +

For example, the following defines \temp to be \foo, not +`abc'. + +

     \def\foo{abc}
+     \def\bar{\foo}
+     \edef\temp{\expandonce\bar}
+
+
+


+ + +Next: , +Previous: \expandonce, +Up: Expansion + +
+ +

7.6.6 \ifundefined

+ +

\ifundefined{cs} t \else f \fi expands the +t text if the control sequence \cs is undefined or +has been \let to \relax, and the f text otherwise. + +

Since \ifundefined is not a primitive conditional, it cannot be +used in places where TeX might skip tokens “at high speed”, e.g., +within another conditional—TeX can't match up the \if's and +\fi's. + +

This macro was taken directly from The TeXbook, page 308. + +

+


+ + +Next: , +Previous: \ifundefined, +Up: Expansion + +
+ +

7.6.7 \ifempty

+ +

\ifempty{arg} t \else f \fi expands the +t text if arg is the empty string, and the f text +otherwise. This macro is useful when you need to test for empty +arguments to your macros, for example: + +

     \def\foo#1{\ifempty{#1} t \else f \fi}
+
+

Since \ifempty is not a primitive conditional, it cannot be +used in places where TeX might skip tokens “at high speed”, e.g., +within another conditional—TeX can't match up the \if's and +\fi's. + +

Note that the following code + +

     \def\empty{}
+     \ifempty\empty\message{empty}\else\message{not empty}\fi
+
+

will produce the message `not empty'. + +

+


+ + +Next: , +Previous: \ifempty, +Up: Expansion + +
+ +

7.6.8 \ifinteger and \isinteger

+ +

\ifinteger{arg} t \else f \fi expands the +t text if arg is an integer, and the f text +otherwise. This macro can detect positive and negative integers. + +

Since \ifinteger is not a primitive conditional, it cannot be +used in places where TeX might skip tokens “at high speed”, e.g., +within another conditional—TeX can't match up the \if's +and \fi's. For such situations Eplain provides +\isinteger, which can be used as follows: + +

     \if\isinteger{arg} t \else f \fi
+
+

Although \ifinteger and \isinteger work well +with regular input, they are not bullet-proof. For example, the +following code + +

     \ifinteger{12_ab}integer\else not integer\fi
+
+

will expand to `ab_integer' (and thus would not +even compile outside math mode). + +

These macros come from TeX Frequently Asked Question +(http://www.tex.ac.uk/cgi-bin/texfaq2html). + +

+


+ + +Previous: \ifinteger and \isinteger, +Up: Expansion + +
+ +

7.6.9 \futurenonspacelet

+ +

The \futurelet primitive allows you to look at the next token +from the input. Sometimes, though, you want to look ahead ignoring any +spaces. This is what \futurenonspacelet does. It is otherwise +the same as \futurelet: you give it two control sequences as +arguments, and it assigns the next nonspace token to the first, and then +expands the second. For example: + +

     \futurenonspacelet\temp\finishup
+     \def\finishup{\ifx\temp ...}
+
+
+


+ +Next: , +Previous: Expansion, +Up: Programming definitions + +
+ +

7.7 Obeying spaces

+ +

+\obeywhitespace makes both end-of-lines and space characters in +the input be respected in the output. Unlike plain TeX's +\obeyspaces, even spaces at the beginnings of lines turn into +blank space. + +

By default, the size of the space that is produced by a space +character is the natural space of the current font, i.e., +what \ produces. + +

Ordinarily, a blank line in the input produces as much blank vertical +space as a line of text would occupy. You can adjust this by assigning +to the parameter \blanklineskipamount: +if you set this negative, the space produced by a blank line will be +smaller; if positive, larger. + +

Tabs are not affected by this routine. In particular, if tabs occur +at the beginning of a line, they will disappear. (If you are trying to +make TeX do the “right thing” with tabs, don't. Use a utility +program like expand instead.) + + +

+ +

7.8 Writing out numbers

+ +

\numbername +produces the written-out form of its argument, i.e., `zero' through +`ten' for the numbers 0–10, and numerals for all others. + +

+


+ + +Next: , +Previous: Writing out numbers, +Up: Programming definitions + +
+ +

7.9 Mode-specific penalties

+ +

TeX's built-in \penalty command simply appends to the +current list, no matter what kind of list it is. You might intend a +particular penalty to always be a “vertical” penalty, however, i.e., +appended to a vertical list. Therefore, Eplain provides +\vpenalty +and \hpenalty +which first leave the other mode and then do \penalty. + +

More precisely, \vpenalty inserts \par if the current +mode is horizontal, and \hpenalty inserts \leavevmode if +the current mode is vertical. (Thus, \vpenalty cannot be used in +math mode.) + +

+ +

7.10 Auxiliary files

+ +

It is common to write some information out to a file to be used on a +subsequent run. But when it is time to read the file again, you only +want to do so if the file actually exists. \testfileexistence +is given an argument which is appended to \jobname, +and sets the conditional \iffileexists +appropriately. For example: + +

     \testfileexistence{toc}%
+     \iffileexists
+        \input \jobname.toc
+     \fi
+
+

\testfileexistence takes an optional parameter; when +given, it will override \jobname for the root part of the file +name. For example, if you want to test for the file +answers.aux, you can do this with the following: + +

     \testfileexistence[answers]{aux}%
+     \iffileexists
+        \input answers.aux
+     \fi
+
+ + +

7.11 User-defined environments

+ +

Plain TeX does not provide “named” block structures, only the anonymous +\begingroup and \endgroup pair. The disadvantage of this +is that when there are several such groups and one is mismatched, it can +be difficult to find the error. Eplain provides a named block structure +so that if you forget an \environment or an +\endenvironment, you will (probably) get an error message about +it. + +

For example: + +

     \def\itpar{
+       \environment{@italicpar}
+       \it\par
+     }
+     \def\enditpar{
+       \par
+       \endenvironment{@italicpar}%
+     }
+
+

which could then be used to set italicized paragraphs: + +

     \itpar
+     If I reprehend anything in this world, it is the use of my oracular
+     tongue, and a nice derangement of epitaphs!
+     \enditpar
+
+

The above sort of environment allows nesting. But environments +shouldn't always be allowed to nest. Put the control sequence +\checkenv at the beginning of a macro that is going to define an +environment that should not be nested. + +

+ +

7.12 Page list and page range parsers

+ +

The macros which Eplain uses to parse the page lists and ranges in the +index, \idxparselist and \idxparserange (see Page destinations for index terms), are sometimes useful when defining page +number encapsulators. They take one argument, text to parse. When a +page list (range) is not present, they set \idxpagei to be +\empty; when a list (range) is detected, they set +\idxpagei and \idxpageii to the first and the second page +numbers, respectively. + +

Eplain's defaults for the page list and page range delimiters are the +same as those in MakeIndex, a comma followed by a space (`, ') and +two dashes (`--'), respectively. If you customize MakeIndex to use +different delimiters, you must not forget to let Eplain know about them +with the commands + +

     \setidxpagelistdelimiter{list-delim}
+     \setidxpagerangedelimiter{page-delim}
+
+

These commands save the list-delim and +page-delim delimiters in +\idxpagelistdelimiter and \idxpagerangedelimiter, +respectively. + +

For example, you may want to define a page number markup command which +italicizes and properly underlines page ranges by underlining only the +page numbers and not the delimiter: + +

+

     \def\ituline#1{%
+       {\it
+       \idxparserange{#1}%
+       \ifx\idxpagei\empty
+         % The argument is a single page number.
+         \underbar{#1}%
+       \else
+         % The argument is a page range.
+         \underbar{\idxpagei}\idxpagerangedelimiter\underbar{\idxpageii}%
+       \fi}%
+     }
+
+

Note that the \ituline macro is not aware of page +lists. This is not needed if you use hyperlinks in the index, because +\hlidx and \hlidxpage will break up the page lists before +calling the user's page encapsulator (see Page destinations for index terms), so \ituline will never see the lists. If, however, you +need to design a macro which also takes care of the lists, you can +extend \ituline with an additional call to \idxparselist. + + +

+


+ +Next: , +Previous: Programming definitions, +Up: Top + +
+ +

8 Demo files

+ +

This chapter contains listings of source files, along with the output +they produce (where appropriate), which illustrate various aspects of +Eplain. The files can be found in the demo subdirectory of +Eplain distribution. These demos, both the sources and the compiled PDF +and PS files, are also available from http://tug.org/eplain/demo. + +

+ + + +

8.1 Hyperlinks (xhyper.tex)

+ +
xhyper.jpg
+ +

+ + + + + + + + + +

% (This file is public domain.)
+%
+% This file demonstrates the following features of Eplain:
+%
+%   - explicit and implicit hyperlinks;
+%   - symbolic cross-references;
+%   - inserting external graphics using |\includegraphics| from
+%     the \LaTeX\ package |graphicx.sty|.
+%   - rotating text using |\rotatebox| from |graphicx.sty|.
+%
+% The compiled demo can be downloaded from
+%
+%   http://tug.org/eplain/demo
+%
+% In order to compile this file yourself, you will need the CTAN lion
+% drawing by Duane Bibby from
+%
+%   ftp://tug.ctan.org/ftpmaint/CTAN_lion/ctan_lion_350x350.png
+%
+% (thanks, |www.ctan.org|).  Place the image file in the same
+% directory with this file, and change to that directory.  Now, to
+% produce a PDF, run twice the command
+%
+%   pdftex xhyper.tex
+%
+% During the first run, Eplain will write the information about the
+% cross-references into |xhyper.aux|, and during the second run this
+% information will be read by Eplain to typeset the references.
+%
+% Demo case:
+%
+%   Suppose you are using pdf\TeX, have a figure you want to insert
+%   scaled to $200\,pt$ horizontally, and you want this figure to
+%   completely fill the PDF viewer's window whenever the reader
+%   selects a link pointing to this figure.  Additionally, you want to
+%   typeset some text as live hyperlinks, clicking on which will start
+%   a Web browser and open a URL.
+
+\input eplain
+
+% Load \LaTeX\ packages.
+\beginpackages
+  % |url.sty| provides the |\url| command which we will use to typeset
+  % a URL.  We request that |url.sty| be the version from June~27,
+  % 2005, or later, because earlier versions had problems interacting
+  % with plain \TeX.
+  \usepackage{url}[2005/06/27]
+  % |color.sty| provides support for colored text; all hyperlinks are
+  % automatically colored by Eplain when this package is loaded.  We give
+  % the |dvipsnames| option because we want to use named colors from the
+  % |dvips| graphics driver.
+  \usepackage[dvipsnames]{color}
+  % Finally, we load |graphicx.sty|, for the macros |\includegraphics|
+  % and |\rotatebox|.
+  \usepackage{graphicx}
+\endpackages
+
+% Remember that hyperlinks are off by default.  Therefore, we need to
+% enable them.
+\enablehyperlinks
+
+% Customize some hyperlink options.  First, we set border width to~$0$
+% for all links to get rid of the default boxes around links (we
+% prefer colored links over the boxed links). Next, we say that all
+% links created by the |url| hyperlink group (which means the |\url|
+% command from |url.sty|) must be colored using the named color
+% |BlueViolet|.
+\hlopts{bwidth=0}
+\hlopts[url]{colormodel=named,color=BlueViolet}
+
+% Inhibit page numbering (we have only one page).
+\nopagenumbers
+
+% Define a class word for the cross-reference class |figure|.  This
+% word, when defined, will be automatically prepended by Eplain to the
+% reference created by |\ref| (read on to see its use).
+\def\figureword{fig.}
+
+% Allocate a count register for the figure's number, and a box
+% register which we'll use to measure dimensions of the image.
+\newcount\fignumber
+\newbox\imgbox
+
+% Now comes the fun part--constructing the figure for the image of the
+% \CTAN\ lion.  We define a macro
+%
+%   \fig{LABEL}{FILENAME}{CAPTION}{WIDTH}
+%
+% which creates a figure using LABEL for the cross-reference and
+% hyperlink label, reading the image from file FILENAME, using CAPTION
+% to name the figure, and WIDTH to scale the image horizontally.
+\def\fig#1#2#3#4{%
+  % Leave some space above the figure.  This will also ensure that we
+  % are in the vertical mode before we produce a |\vbox|.
+  \medskip
+  % Advance the figure number.  |\global| ensures that the change to
+  % the count register is global, even when |\fig| is buried inside a
+  % group.
+  \global\advance\fignumber by 1
+  % We use |\includegraphics| (from |graphicx.sty|) to load the image,
+  % scaled to the specified width, into our ``measuring'' box
+  % |\imgbox|.
+  \setbox\imgbox = \hbox{\includegraphics[width=#4]{#2}}%
+  % To make the demo even more exciting, let's put the figure's
+  % caption to the left of the image into the |\indent| space of the
+  % new paragraph, and rotate the caption~$90^\circ$.
+  \textindent{%
+    \rotatebox{90}{F{\sc IGURE}~\the\fignumber.  #3}%
+  }%
+  % Continue the paragraph by constructing a |\vbox| with the image of
+  % the lion.  We use |\definexref| to define the cross-reference
+  % label.
+  \vbox{%
+    % In addition to the cross-reference label, |\definexref| will
+    % create a hyperlink destination with the same label.  Therefore,
+    % we customize this destination to do what we need.  We say that
+    % destination type for the hyperlink group |definexref| (to which
+    % |\definexref| belongs) should be |fitr|.  This destination type
+    % will magnify the rectangle specified by the options |width|,
+    % |height| and |depth| to the PDF viewer's window.  Therefore, we
+    % set those options accordingly with |\hldestopts| (notice the use
+    % of |depth| instead of |height|---we will want the rectangle to
+    % extend {\it downward}, to cover the image which will come
+    % next).  Notice that these settings will be isolated within the
+    % current group (i.e., the |\vbox| we're constructing).
+    \hldesttype[definexref]{fitr}%
+    \hldestopts[definexref]{width=\wd\imgbox,height=0pt,depth=\ht\imgbox}%
+    % We define a symbolic label so that we can later refer
+    % to the figure with |\ref|.  The command |\definexref| does
+    % exactly that.  The last argument to |\definexref| specifies
+    % class of the label, which determines the word used by |\ref| in
+    % front of the reference text (remember that we've defined
+    % |\figureword| above).
+    \definexref{#1}{\the\fignumber}{figure}%
+    % Finally, produce the image which we've been stashing in the box
+    % register |\imgbox|.
+    \box\imgbox
+  }%
+  \medskip
+}
+
+% Create the figure.
+\fig{CTANlion}{ctan_lion_350x350}{Lion in the archives}{200pt}
+
+% Finished with the fun part, we can relax and typeset some
+% hyperlinks.  The easiest way to do that is to use the |\ref|
+% cross-reference command.  We can even pass an optional argument
+% (|the lion in|), which will be placed before the class word (|fig.|)
+% and become part of the link (to make sure the reader does not have
+% to aim too hard).
+Show me \ref[the lion in]{CTANlion}.
+
+% If you are the restless kind, here's another way to create a
+% hyperlink to the image:  we create a link explicitly by using
+% |\hlstart ... \hlend|.  We don't specify the link type, therefore
+% the default type |name| will be used (these are ``named links'',
+% i.e., links pointing to destinations identified by labels).  In the
+% options argument, we specify that the border of the link should be
+% inverted when the user clicks the link (|hlight=O|), and also set
+% special color for this link, overriding the default dark-red.  The
+% label for the destination is the same as the cross-reference label,
+% |CTANlion|.
+Show me
+\hlstart{}{hlight=O,colormodel=named,color=OliveGreen}{CTANlion}
+  the CTAN lion\hlend.
+
+% Let's now point somewhere outside our document.  Eplain homepage is
+% a good target.  In the similar spirit, let's consider two
+% approaches.  The easy one is to use the |\url| command from
+% |url.sty|.  Remember that we have customized the color of |url|
+% hyperlinks, so this one will show up with a different color than the
+% default dark-red.
+Take me to \url{http://tug.org/eplain}.
+
+% The second approach is to create an explicit URL link.  We specify
+% yet another border highlighting mode, |P|, which means that the
+% region underneath the bounding box of the link will be drawn inset
+% into the page.  Also, let's set the color of the hyperlink to an RGB
+% color |0.4,0.1,0.4|.  Since we cannot use commas to separate the
+% color elements inside the options parameter to |\hlstart| (commas
+% there separate options), we have to first create a user-defined
+% color with |\definecolor| from |color.sty|, and use that in
+% |\hlstart|.
+\definecolor{mycolor}{rgb}{0.4,0.1,0.4}
+
+Take me to
+\hlstart{url}{hlight=P,colormodel=,color=mycolor}{http://tug.org/eplain}
+  Eplain homepage\hlend.
+
+\bye
+
+ +
+


+ + +Previous: Hyperlinks (xhyper.tex), +Up: Demo files + +
+ +

8.2 Highlighting TeX comments in listings (lscommnt.tex)

+ +
lscommnt.jpg
+ +

+ + + +

% (This file is public domain.)
+% Demonstrate how Eplain can be used to include a TeX source file
+% verbatim, typesetting comments in colored italic typewriter type.
+
+% Load Eplain and LaTeX's color.sty package.
+\input eplain
+\beginpackages \usepackage{color} \endpackages
+\nopagenumbers % Disable page numbers.
+\font\commentfont = cmitt10 % Font for the comments (italic \tt).
+% We'll define some `protected' macros with `@' in their names.
+\makeatletter
+% Define an equivalent of Eplain's \letreturn, to be able to assign
+% various actions to the (active) percent character.
+\begingroup \makeactive\%
+  \gdef\letpercent{\let%}
+\endgroup
+% The listing hook to be called in \setuplistinghook, see below.  It
+% makes `%' active and assigns it a `start comment' action.
+\def\hlightcommentslisting{\makeactive\% \letpercent\start@comment}%
+% This is what `%' is aliased to before a comment is started.
+\def\start@comment{%
+  \leavevmode % Needed in the very first line of the input to process
+              % the new par (possibly inserting line number) before we
+              % kick in with the color and stuff.
+  \begingroup % Isolate color and font changes and the redefinitions.
+    \commentfont
+    \color[cmyk]{0.28,1,1,0.35}%
+    \percentchar            % Produce the actual `%' and
+    \letpercent\percentchar % make all following `%'s do the same.
+    \letreturn\end@comment  % Call \end@comment at end-of-line.
+}
+% \end@comment (alias for ^^M inside a comment) will end the comment
+% started by \start@comment.  We make ^^M active temporarily so that
+% the active version of ^^M gets "frozen" into \end@comment.
+\begingroup \makeactive\^^M % Avoid ^^M's from here on.
+  \gdef\end@comment{\endgroup ^^M}%
+\endgroup
+\resetatcatcode % Make `@' again inaccessible for use in macro names.
+
+% Define \setuplistinghook to setup comments highlighting, line
+% numbering and omitting the last (empty) line of input.
+\def\setuplistinghook{\hlightcommentslisting \linenumberedlisting
+                      \nolastlinelisting}
+% Isn't this fun?  This file typesets itself, with the extra bonus of
+% the pretty-printed comments and numbered source lines!
+\listing{lscommnt}
+\bye
+
+ + +
+


+ +Next: , +Previous: Demo files, +Up: Top + +
+ +

Macro index

+ + + +
+


+ +Previous: Macro index, +Up: Top + +
+ +

Concept index

+ + + + + diff --git a/Master/texmf-dist/doc/eplain/doc/eplain.info b/Master/texmf-dist/doc/eplain/doc/eplain.info new file mode 100644 index 00000000000..aa7dd6bbd4e --- /dev/null +++ b/Master/texmf-dist/doc/eplain/doc/eplain.info @@ -0,0 +1,7863 @@ +This is eplain.info, produced by makeinfo version 4.8 from eplain.texi. + + This manual documents the Eplain macros, version 3.1, December 2006. +Eplain provides functionality for plain TeX that is intended to be +useful regardless of how your document is actually formatted. + + Most of this manual is in the public domain, like most of the Eplain +code. It was mostly written by Karl Berry, starting in 1989. Steven +Smith wrote the documentation for the commutative diagram macros; this +chapter is under the GNU General Public License. Adam Lewenberg has +made additions and corrections. Oleg Katsitadze has helped with writing +the section on LaTeX packages and the chapter on hyperlinks. + +INFO-DIR-SECTION Texinfo documentation system +START-INFO-DIR-ENTRY +* Eplain: (eplain). Expanding on plain Tex. +END-INFO-DIR-ENTRY + + +File: eplain.info, Node: Top, Next: Introduction, Up: (dir) + +Eplain +****** + +This manual documents the Eplain macros, version 3.1, December 2006. +Eplain provides functionality for plain TeX that is intended to be +useful regardless of how your document is actually formatted. + + Most of this manual is in the public domain, like most of the Eplain +code. It was mostly written by Karl Berry, starting in 1989. Steven +Smith wrote the documentation for the commutative diagram macros; this +chapter is under the GNU General Public License. Adam Lewenberg has +made additions and corrections. Oleg Katsitadze has helped with writing +the section on LaTeX packages and the chapter on hyperlinks. + +* Menu: + +* Introduction:: Eplain's purpose and philosophy. +* Installation:: Installing Eplain. +* Invoking Eplain:: Using Eplain from a TeX file. +* User definitions:: Macros to be used in a document. +* Hyperlinks:: Producing documents with hyperlinks. +* Arrow theoretic diagrams:: Macros for commutative diagrams. +* Programming definitions:: Macros to be used in writing other macros. +* Demo files:: Sample documents demonstrating Eplain. +* Macro index:: Entries for TeX and Eplain control sequences. +* Concept index:: General index. + + --- The Detailed Node Listing --- + +User definitions + +* Diagnostics:: Tracing information. +* Rules:: Changing the default rule dimensions. +* Citations:: Using BibTeX and Eplain to make bibliographies. +* Displays:: Changing the formatting of math displays. +* Time of day:: Producing the time of day. +* Lists:: Producing numbered and unordered lists. +* Verbatim listing:: Producing text just as it appears. +* Contents:: Making a table of contents. +* Cross-references:: Symbolically referring to pages or equations. +* Page references:: Symbolic references to page numbers. +* Equation references:: Symbolic references to equation numbers. +* Indexing:: Creating and typesetting indexes. +* Justification:: Left- or right-justification, or centering. +* Tables:: Producing ordered tables. +* Margins:: Changing the margins directly. +* Multiple columns:: Getting output in two columns. +* Footnotes:: Autonumbered footnotes; changing formatting. +* Fractions:: A better way to produce fractions in text. +* Paths:: Allowing line breaks in pathnames. +* Logos:: Various logos. +* Boxes:: Producing filled or open rectangles. +* Checking for PDF output:: Checking for pdfTeX in PDF mode. +* Loading LaTeX packages:: Support for LaTeX packages under plain TeX. + +Citations + +* Formatting citations:: Changing the way citations are printed. +* Formatting bibliographies:: Changing the way bibliographies are printed. + +Displays + +* Formatting displays:: General formatting of displays. + +Lists + +* Formatting lists:: Changing how the lists look. + +Contents + +* Writing the .toc file:: +* Reading the .toc file:: +* Changing the .toc file's root name:: +* Alternative contents files:: + +Cross-references + +* Defining generic references:: +* Using generic references:: + +Equation references + +* Formatting equation references:: +* Subequation references:: + +Indexing + +* Indexing terms:: Specifying what to index. +* Typesetting an index:: Printing the sorted output. +* Customizing indexing:: Creating commands and specifying extra actions. + +Indexing terms + +* Indexing commands:: Making index entries. +* Modifying index entries:: Ranges, see/see also, page number typesetting. +* Index entries with special characters:: +* Proofing index terms:: Noting index entries in the margins. + +Loading LaTeX packages + +* The \usepackage command:: Command to load packages. +* Environment for loading packages:: Environment for the \usepackage commands. +* Packages known to work:: Supported packages. +* Packages known not to work:: Packages known not to work with Eplain. + +Hyperlinks + +* Introduction to hyperlinks:: +* Explicit hyperlinks:: +* Implicit hyperlinks:: +* Hyperlink drivers:: +* Setting hyperlink types and options:: +* Turning hyperlinks on/off:: + +Implicit hyperlinks + +* General hyperlinks:: hrefint, hrefext +* URL hyperlinks:: url +* Citation hyperlinks:: cite, bib +* List hyperlinks:: li +* Cross-reference hyperlinks:: definexref, ref +* Page reference hyperlinks:: xrdef, xref +* Equation reference hyperlinks:: eq +* Index hyperlinks:: idx +* Footnote hyperlinks:: foot, footback +* Contents hyperlinks:: + +Index hyperlinks + +* Exact destinations for index terms:: +* Page destinations for index terms:: +* Choosing destination placement:: +* Index page list and page range parsers:: +* Hyperlinks in see and see also entries:: + +Hyperlink drivers + +* Options supported by all drivers:: +* Hyperlink driver hypertex:: +* Hyperlink drivers pdftex and dvipdfm:: +* Hyperlink driver nolinks:: + +Hyperlink driver hypertex:: + +* Destination types for hypertex:: +* Destination options for hypertex:: +* Link types for hypertex:: +* Link options for hypertex:: + +Hyperlink drivers pdftex and dvipdfm:: + +* Destination types for pdftex and dvipdfm:: +* Destination options for pdftex and dvipdfm:: +* Link types for pdftex and dvipdfm:: +* Link options for pdftex and dvipdfm:: + +Setting hyperlink types and options + +* Setting default types and options:: +* Setting group types:: +* Setting group options:: + +Turning hyperlinks on/off + +* Turning low-level commands on/off:: +* Turning hyperlinks on/off for a group:: + +Arrow theoretic diagrams + +* Slanted lines and vectors:: +* Commutative diagrams:: + +Commutative diagrams + +* Arrows and morphisms:: +* Construction of commutative diagrams:: +* Commutative diagram parameters:: + +Programming definitions + +* Category codes:: Changing category codes. +* Allocation macros:: Non-outer versions of \newcount et al. +* Iteration:: Doing `for' and `while' loops in TeX. +* Macro arguments:: Reading and ignoring them. +* Converting to characters:: Normalizing control sequences and spaces. +* Expansion:: Controlling expansion. +* Obeying spaces:: Making whitespace count anywhere. +* Writing out numbers:: Making `1' into `one'. +* Mode-specific penalties:: +* Auxiliary files:: Testing for their existence. +* User-defined environments:: User-defined environments. +* Page list and page range parsers:: + +Expansion + +* \csn and \ece:: +* \edefappend:: +* Hooks:: Manipulating and executing named actions. +* Properties:: Associating information with a csname. +* \expandonce:: +* \ifundefined:: +* \ifempty:: +* \ifinteger and \isinteger:: +* \futurenonspacelet:: + +Demo files + +* Hyperlinks (xhyper.tex):: +* Highlighting TeX comments in listings (lscommnt.tex):: + + +File: eplain.info, Node: Introduction, Next: Installation, Prev: Top, Up: Top + +1 Introduction +************** + +The "Eplain" macro package expands on and extends the definitions in +plain TeX. This manual describes the definitions that you, as either +an author or a macro writer, might like to use. It doesn't discuss the +implementation; see comments in the source code (`xeplain.tex') for +that. + + Eplain is not intended to provide "generic" typesetting +capabilities, as do LaTeX (written by Leslie Lamport) or Texinfo (written +by Richard Stallman and others). Instead, it provides definitions that +are intended to be useful regardless of the high-level commands that +you use when you actually prepare your manuscript. + + For example, Eplain does not have a command `\section', which would +format section headings in an "appropriate" way, such as LaTeX's +`\section'. The philosophy of Eplain is that some people will always +need or want to go beyond the macro designer's idea of "appropriate". +Such canned macros are fine--as long as you are willing to accept the +resulting output. If you don't like the results, or if you are trying +to match a different format, you are out of luck. + + On the other hand, almost everyone would like capabilities such as +cross-referencing by labels, so that you don't have to put actual page +numbers in the manuscript. The author of Eplain is not aware of any +generally available macro packages that (1) do not force their +typographic style on an author, and yet (2) provide such capabilities. + + Besides such generic macros as cross-referencing, Eplain contains +another set of definitions: ones that change the conventions of plain +TeX's output. For example, math displays in TeX are, by default, +centered. If you want your displays to come out left-justified, you +have to plow through `The TeXbook' to find some way to do it, and then +adapt the code to your own needs. Eplain tries to take care of the +messy details of such things, while still leaving the detailed +appearance of the output up to you. + + Finally, numerous definitions turned out to be useful as Eplain was +developed. They are also documented in this manual, on the chance that +people writing other macros will be able to use them. + + You can send bug reports or suggestions to . +The current version number of Eplain is defined as the macro +`\fmtversion' at the end of the source file `eplain.tex'. When +corresponding, please refer to it. + + To get on this mailing list yourself, email + with a message whose body contains a line + + subscribe YOU@YOUR.PREFERRED.ADDRESS + +or visit `http://tug.org/mailman/listinfo/tex-eplain'. + + David Walden had reported his experience with Eplain as a new user. +The article is available online at +`http://tug.org/pracjourn/2005-4/walden'. An introductory article +(written for TUGboat) is also available online at +`http://tug.org/eplain/misc/tb84katsi.pdf'. + + +File: eplain.info, Node: Installation, Next: Invoking Eplain, Prev: Introduction, Up: Top + +2 Installation +************** + +Your TeX installation should already contain a version of Eplain +(`eplain.tex') in its main `texmf' tree (usually under +`/usr/share/texmf/tex/eplain/' on Unix systems). To install a newer +version of Eplain, put the new `eplain.tex' (included in Eplain +distributions) in the `tex/eplain/' subdirectory of your local `texmf' +tree. The newer version you install in the local tree should override +the older one in the main tree. + + The location of the local `texmf' tree obviously depends on your +operating system and TeX installation. On Unix systems the usual +location is `/usr/local/share/texmf/'. If you don't have write +permissions for `/usr/local/share/texmf/', many installations read the +`texmf' tree in the user's home directory; `eplain.tex' then should go +under `~/texmf/tex/eplain/'. For more information about TeX directory +structure, please see +`http://www.tex.ac.uk/cgi-bin/texfaq2html?label=tds'. + + If you prefer to install `eplain.tex' in a non-standard place, set +an environment variable (`TEXINPUTS' for the Web2C port of TeX to Unix) +to tell TeX how to find it. + + If you want, you can also create a format (`.fmt') file for Eplain, +which will eliminate the time spent reading the macro source file with +`\input'. You do this by issuing a sequence of Unix commands something +like this: + + prompt$ touch eplain.aux + prompt$ initex + This is TeX, ... + **&plain eplain + (eplain.tex) + *\dump + ... MESSAGES ... + +You must make sure that `eplain.aux' exists _before_ you run `initex'; +otherwise, warning messages about undefined labels will never be issued. + + You then have to install the resulting `eplain.fmt' in your local +`texmf' tree or set an environment variable to tell TeX how to find it. +For the Web2C port of TeX to Unix, format files are usually installed +under `/usr/local/share/texmf/web2c/' or `/var/lib/texmf/web2c/'; the +environment variable is `TEXFORMATS'. + + +File: eplain.info, Node: Invoking Eplain, Next: User definitions, Prev: Installation, Up: Top + +3 Invoking Eplain +***************** + +The simplest way to use Eplain is simply to put: + + \input eplain + +at the beginning of your input file. The macro file is small enough +that reading it does not take an unbearably long time--at least on +contemporary machines. + + In addition, if a format (`.fmt') file has been created for Eplain +(see the previous section), you can eliminate the time spent reading +the macro source file. You do this by responding `&eplain' to TeX's +`**' prompt. For example: + + initex + This is TeX, ... + **&eplain myfile + + Depending on the implementation of TeX which you are using, you might +also be able to invoke TeX as `eplain' and have the format file +automatically read. + + If you write something which you will be distributing to others, you +won't know if the Eplain format will be loaded already. If it is, then +doing `\input eplain' will waste time; if it isn't, then you must load +it. To solve this, Eplain defines the control sequence `\eplain' to be +the letter `t' (a convention borrowed from Lisp; it doesn't actually +matter what the definition is, only that the definition exists). +Therefore, you can do the following: + + \ifx\eplain\undefined \input eplain \fi + +where `\undefined' must never acquire a definition. + + Eplain consists of several source files: +`xeplain.tex' + most of the macros; + +`arrow.tex' + commutative diagram macros (*note Arrow theoretic diagrams::), + written by Steven Smith; + +`btxmac.tex' + bibliography-related macros (*note Citations::); + +`ifpdf.sty' + sets the switch `\ifpdf', which can be used to detect pdfTeX in + PDF mode (*note Checking for PDF output::), written by Heiko + Oberdiek; + +`path.sty' + macro for allowing line breaks at punctuation characters within + long pathnames, electronic mail addresses, etc., (*note Paths::), + written by Philip Taylor; + +`texnames.sty' + abbreviations for various TeX-related names (*note Logos::), edited + by Nelson Beebe. + + +The file `eplain.tex' is all of these files merged together, with +comments removed. + + All of these files except `xeplain.tex' can be input individually, +if all you want are the definitions in that file. + + Also, since the bibliography macros are fairly extensive, you might +not want to load them, to conserve TeX's memory. Therefore, if the +control sequence `\nobibtex' is defined, then the bibliography +definitions are skipped. You must set `\nobibtex' before `eplain.tex' +is read, naturally. For example, you could start your input file like +this: + + \let\nobibtex = t + \input eplain + +By default, `\nobibtex' is undefined, and so the bibliography +definitions _are_ made. + + Likewise, define `\noarrow' if you don't want to include the +commutative diagram macros from `arrow.tex', perhaps because you +already have conflicting ones. + + If you don't want to read or write an `aux' file at all, for any +kind of cross-referencing, define `\noauxfile' before reading +`eplain.tex'. This also turns off all warnings about undefined labels. + + Eplain conflicts with AMSTeX (to be precise, with `amsppt.sty'): the +macros `\cite' and `\ref' are defined by both. + + If you want to use AMSTeX's `\cite', the solution is to define +`\nobibtex' before reading Eplain, as described above. + + If you have `amsppt.sty' loaded and use `\ref', Eplain writes a +warning on your terminal. If you want to use the AMSTeX `\ref', do +`\let\ref = \amsref' after reading Eplain. To avoid the warning, do +`\let\ref = \eplainref' after reading Eplain and before using `\ref'. + + Sometimes you may need to run TeX more then once on your `.tex' file +in order to produce and typeset indexes, resolve undefined +cross-references and/or citations. The shell script `texi2dvi' from +the Texinfo documentation system (see +`http://www.gnu.org/software/texinfo') can automate this process: it +runs BibTeX, MakeIndex and TeX as many times as needed to complete the +compilation process. You will need to set the `LATEX' environment +variable to `tex'. For example, in a Bourne-compatible shell, the +following command will do all the work: + + prompt$ LATEX=tex texi2dvi file.tex + +(Despite the name, `texi2dvi' can also produce `.pdf' files; just set +`LATEX=pdftex'.) See the output from the command `texi2dvi --help' for +invoking information and a full list of options. + + +File: eplain.info, Node: User definitions, Next: Hyperlinks, Prev: Invoking Eplain, Up: Top + +4 User definitions +****************** + +This chapter describes definitions that are meant to be used directly +in a document. When appropriate, ways to change the default formatting +are described in subsections. + +* Menu: + +* Diagnostics:: Tracing information. +* Rules:: Changing the default rule dimensions. +* Citations:: Using BibTeX and Eplain to make bibliographies. +* Displays:: Changing the formatting of math displays. +* Time of day:: Producing the time of day. +* Lists:: Producing numbered and unordered lists. +* Verbatim listing:: Producing text just as it appears. +* Contents:: Making a table of contents. +* Cross-references:: Symbolic references to equations, figures, etc. +* Page references:: Symbolic references to page numbers. +* Equation references:: Symbolic references to equation numbers. +* Indexing:: Creating and typesetting indexes. +* Justification:: Ragged left, ragged right, centered. +* Tables:: Producing ordered tables. +* Margins:: Changing the margins directly. +* Multiple columns:: Getting output in two columns. +* Footnotes:: Autonumbered footnotes; changing formatting. +* Fractions:: A better way to produce fractions in text. +* Paths:: Allowing line breaks in pathnames. +* Logos:: Various logos. +* Boxes:: Producing filled or open rectangles. +* Checking for PDF output:: Checking for pdfTeX in PDF mode. +* Loading LaTeX packages:: Support for LaTeX packages under plain TeX. + + +File: eplain.info, Node: Diagnostics, Next: Rules, Up: User definitions + +4.1 Diagnostics +=============== + +Plain TeX provides the `\tracingall' command, to turn on the maximum +amount of tracing possible in TeX. The (usually voluminous) output +from `\tracingall' goes both on the terminal and into the transcript +file. It is sometimes easier to have the output go only to the +transcript file, so you can peruse it at your leisure and not obscure +other output to the terminal. So, Eplain provides the command +`\loggingall'. (For some reason, this command is available in +Metafont, but not in TeX.) + + It is also sometimes useful to see the complete contents of boxes. +`\tracingboxes' does this. (It doesn't affect whether or not the +contents are shown on the terminal.) + + You can turn off all tracing with `\tracingoff'. + + You can also turn logging on and off globally, so you don't have to +worry about whether or not you're inside a group at the time of command. +These variants are named `\gloggingall' and `\gtracingall'. + + Finally, if you write your own help messages (see `\newhelp' in `The +TeXbook'), you want a convenient way to break lines in them. This is +what TeX's `\newlinechar' parameter is for; however, plain TeX doesn't +set `\newlinechar'. Therefore, Eplain defines it to be the character +`^^J'. + + For example, one of Eplain's own error messages is defined as +follows: + + \newhelp\envhelp{Perhaps you forgot to end the previous^^J% + environment? I'm finishing off the current group,^^J% + hoping that will fix it.}% + + +File: eplain.info, Node: Rules, Next: Citations, Prev: Diagnostics, Up: User definitions + +4.2 Rules +========= + +The default dimensions of rules are defined in chapter 21 of the `The +TeXbook'. To sum up what is given there, the "thickness" of rules is 0.4pt +by default. Eplain defines three parameters that let you change this +dimension: `\hruledefaultheight', `\hruledefaultdepth', and +`\vruledefaultwidth'. By default, they are defined as `The TeXbook' +describes. + + But it would be wrong to redefine `\hrule' and `\vrule'. For one +thing, some macros in plain TeX depend on the default dimensions being +used; for another, rules are used quite heavily, and the performance +impact of making it a macro can be noticeable. Therefore, to take +advantage of the default rule parameters, you must use `\ehrule' and +`\evrule'. + + +File: eplain.info, Node: Citations, Next: Displays, Prev: Rules, Up: User definitions + +4.3 Citations +============= + +Bibliographies are part of almost every technical document. To handle +them easily, you need two things: a program to do the tedious +formatting, and a way to cite references by labels, rather than by +numbers. The BibTeX program, written by Oren Patashnik, takes care of +the first item; the citation commands in LaTeX, written to be used with +BibTeX, take care of the second. Therefore, Eplain adopts the use of +BibTeX, and virtually the same interface as LaTeX. + + The general idea is that you put citation commands in the text of +your document, and commands saying where the bibliography data is. +When you run TeX, these commands produce output on the file with the +same root name as your document (by default) and the extension `.aux'. BibTeX +reads this file. You should put the bibliography data in a file or +files with the extension `.bib'. BibTeX writes out a file with the same +root name as your document and extension `.bbl'. Eplain reads this file the +next time you run your document through TeX. (It takes multiple passes +to get everything straight, because usually after seeing your +bibliography typeset, you want to make changes in the `.bib' file, +which means you have to run BibTeX again, which means you have to run +TeX again...) An annotated example of the whole process is given below. + + If your document has more than one bibliography--for example, if it +is a collection of papers--you can tell Eplain to use a different root +name for the `.bbl' file by defining the control sequence +`\bblfilebasename'. The default definition is simply `\jobname'. + + See the document `BibTeXing' (whose text is in the file +`btxdoc.tex', which should be in the Eplain distribution you got) for +information on how to write your .bib files. Both the BibTeX and the +Eplain distributions contain several examples, also. + + The `\cite' command produces a citation in the text of your +document. The exact printed form the citation will take is under your +control (*note Formatting citations::). `\cite' takes one required +argument, a comma-separated list of cross-reference labels (*note +Cross-references::, for exactly what characters are allowed in such +labels). Warning: spaces in this list are taken as part of the +following label name, which is probably not what you expect. The +`\cite' command also produces a command in the .aux file that tells +BibTeX to retrieve the given reference(s) from the .bib file. `\cite' +also takes one optional argument, which you specify within square +brackets, as in LaTeX. This text is simply typeset after the +citations. (See the example below.) + + Eplain can create hypertext links for citations pointing to the +relevant bibliography entries (*note Citation hyperlinks::). + + Another command, `\nocite', puts the given reference(s) into the +bibliography, but produces nothing in the text. + + The `\bibliography' command is next. It serves two purposes: +producing the typeset bibliography, and telling BibTeX the root names +of the .bib files. Therefore, the argument to `\bibliography' is a +comma separated list of the .bib files (without the `.bib'). Again, +spaces in this list are significant. + + You tell BibTeX the particular style in which you want your +bibliography typeset with one more command: `\bibliographystyle'. The +argument to this is a single filename STYLE, which tells BibTeX to look +for a file STYLE.bst. See the document `Designing BibTeX styles' +(whose text is in the `btxhak.tex') for information on how to write +your own styles. + + Eplain automatically reads the citations from the .aux file when +your job starts. + + If you don't want to see the messages about undefined citations, you +can say `\xrefwarningfalse' before making any citations. Eplain +automatically does this if the .aux file does not exist. You can +restore the default by saying `\xrefwarningtrue'. + + Here is a TeX input file that illustrates the various commands. + + \input eplain % Reads the .aux file. + Two citations to Knuthian works: + \cite[note]{surreal,concrete-math}. + \beginsection{References.}\par % Title for the bibliography. + \bibliography{knuth} % Use knuth.bib for the labels. + \bibliographystyle{plain} % Number the references. + \end % End of the document. + + If we suppose that this file was named `citex.tex' and that the +bibliography data is in `knuth.bib' (as the `\bibliography' command +says), the following commands do what's required. (`$ ' represents the +shell prompt.) + + $ tex citex (produces undefined citation messages) + $ bibtex citex (read knuth.bib and citex.aux, write citex.bbl) + $ tex citex (read citex.bbl, still have undefined citations) + $ tex citex (one more time, to resolve the references) + +The `texi2dvi' program can help you automate this process (*note +Invoking Eplain::). + + The output looks something like (because we used the plain +bibliography style): + + Two citations to Knuthian works: [2,1 note]. + + References + + [1] Ronald L. Graham, Donald E. Knuth, and Oren Patashnik. + Concrete Mathematics. Addison-Wesley, Reading, Massachusetts, 1989. + + [2] Donald E. Knuth. Surreal Numbers. Addison-Wesley, Reading, + Massachusetts, 1974. + + See the BibTeX documentation for information on how to write the +bibliography databases, and the bibliography styles that are available. +(If you want your references printed with names, as in [Knu74], instead +of numbered, the bibliography style is `alpha'.) + +* Menu: + +* Formatting citations:: Changing the way citations are printed. +* Formatting bibliographies:: Changing the way bibliographies are printed. + + +File: eplain.info, Node: Formatting citations, Next: Formatting bibliographies, Up: Citations + +4.3.1 Formatting citations +-------------------------- + +You may wish to change Eplain's formatting of citations; i.e., the +result of your `\cite' commands. By default, the citation labels are +printed one after another, separated by commas and enclosed in +brackets, using the main text font. Some formats require other styles, +such as superscripted labels. You can accomodate such formats by +redefining the following macros. + +`\printcitestart' + +`\printcitefinish' + Eplain expands these macros at the begining and end of the list of + citations for each `\cite' command. By default, they produce a + `[' and `]', respectively. + +`\printbetweencitations' + If a `\cite' command has multiple citations, as in + `\cite{acp,texbook}', Eplain expands this macro in between each + pair of citations. By default, it produces a comma followed by a + space. + +`\printcitenote' + This macro takes one argument, which is the optional note to the + `\cite' command. If the `\cite' command had no note, this macro + isn't used. Otherwise, it should print the note. By default, the + note is preceded with a comma and a space. + + Here is an example, showing you could produce citations as +superscripted labels, with the optional notes in parentheses. + + \def\printcitestart{\unskip $^\bgroup} + \def\printbetweencitations{,} + \def\printcitefinish{\egroup$} + \def\printcitenote#1{\hbox{\sevenrm\space (#1)}} + + +File: eplain.info, Node: Formatting bibliographies, Prev: Formatting citations, Up: Citations + +4.3.2 Formatting bibliographies +------------------------------- + +You may wish to change Eplain's formatting of the bibliography, +especially with respect to the fonts that are used. Therefore, Eplain +provides the following control sequences: + +`\biblabelwidth' + This control sequence represents a `\dimen' register, and its value + is the width of the widest label in the bibliography. Although it + is unlikely you will ever want to redefine it, you might want to + use it if you redefine `\biblabelprint', below. + +`\biblabelprint' + This macro takes one argument, the label to print. By default, the + label is put in a box of width `\biblabelwidth', and is followed by + an enspace. When you want to change the spacing around the + labels, this is the right macro to redefine. + +`\biblabelcontents' + This macro also takes one argument, the label to print. By + default, the label is printed using the font `\bblrm' (below), and + enclosed in brackets. When you want to change the appearance of + the label, but not the spacing around it, this is the right macro + to redefine. + +`\bblrm' + The default font used for printing the bibliography. + +`\bblem' + The font used for printing the titles and other "emphasized" + material. + +`\bblsc' + In some styles, authors' names are printed in a caps-and-small-caps + font. In those cases, this font is used. + +`\bblnewblock' + This is invoked between each of the parts of a bibliography entry. + The default is to leave some extra space between the parts; you + could redefine it to start each part on a new line (for example). + A part is simply a main element of the entry; for example, the + author is a part. (It was LaTeX that introduced the (misleading, + as far as I am concerned) term `block' for this.) + +`\biblabelextraspace' + Bibliography entries are typeset with a hanging indentation of + `\biblabelwidth' plus this. The default is `.5em', where the em + width is taken from the `\bblrm' font. If you want to change + this, you should do it inside `\bblhook'. + +`\bblhook' + This is expanded before reading the .bbl file. By default, it + does nothing. You could, for example, define it to set the + bibliography fonts, or produce the heading for the references. Two + spacing parameters must be changed inside `\bblhook': `\parskip', + which produces extra space between the items; and + `\biblabelextraspace', which is described above. (By the way, + `\hookappend' won't work with `\bblhook', despite the names. Just + use `\def'.) + + + If you are really desperate, you can also hand-edit the .bbl file +that BibTeX produces to do anything you wish. + + +File: eplain.info, Node: Displays, Next: Time of day, Prev: Citations, Up: User definitions + +4.4 Displays +============ + +By default, TeX centers displayed material. (Displayed material is +just whatever you put between `$$''s--it's not necessarily +mathematics.) Many layouts would be better served if the displayed +material was left-justified. Therefore, Eplain provides the command +`\leftdisplays', which indents displayed material by `\parindent' plus +`\leftskip', plus `\leftdisplayindent'. + + You can go back to centering displays with `\centereddisplays'. (It +is usually poor typography to have both centered and left-justified +displays in a single publication, though.) + + `\leftdisplays' also changes the plain TeX commands that deal with +alignments inside math displays, `\displaylines', `\eqalignno', and +`\leqalignno', to produce left-justified text. You can still override +this formatting by inserting `\hfill' glue, as explained in `The +TeXbook'. + +* Menu: + +* Formatting displays:: General formatting of displays. + + +File: eplain.info, Node: Formatting displays, Up: Displays + +4.4.1 Formatting displays +------------------------- + +If you want some other kind of formatting, you can write a definition +of your own, analogous to `\leftdisplays'. You need only make sure +that `\leftdisplaysetup' is called at the beginning of every display +(presumably by invoking it in TeX's `\everydisplay' parameter), and to +define `\generaldisplay'. + + `\leftdisplays' expands the old value of `\everydisplay' before +calling `\leftdisplaysetup', so that any changes you have made to it +won't be lost. That old token list as available as the value of the +token register `\previouseverydisplay'. + + +File: eplain.info, Node: Time of day, Next: Lists, Prev: Displays, Up: User definitions + +4.5 Time of day +=============== + +TeX provides the day, month, and year as numeric quantities (unless +your TeX implementation is woefully deficient). Eplain provides some +control sequences to make them a little more friendly to humans. + + `\monthname' produces the name of the current month, abbreviated to +three letters. + + `\fullmonthname' produces the name of the current month, +unabbreviated (in English). + + `\timestring' produces the current time, as in `1:14 p.m.' + + `\timestamp' produces the current date and time, as in `23 Apr 64 +1:14 p.m.'. (Except the spacing is slightly different.) + + `\today' produces the current date, as in `23 April 1964'. + + +File: eplain.info, Node: Lists, Next: Verbatim listing, Prev: Time of day, Up: User definitions + +4.6 Lists +========= + +Many documents require lists of items, either numbered or simply +enumerated. Plain TeX defines one macro to help with creating lists, +`\item', but that is insufficient in many cases. Therefore, Eplain +provides two pairs of commands: + +`\numberedlist ... \endnumberedlist' + +`\orderedlist ... \endorderedlist' + These commands (they are synonyms) produce a list with the items + numbered sequentially, starting from one. A nested `\numberedlist' + labels the items with lowercase letters, starting with `a'. + Another nested `\numberedlist' labels the items with roman + numerals. Yet more deeply nested numbered lists label items with + `*'. + +`\unorderedlist ... \endunorderedlist' + This produces a list with the items labelled with small black boxes + ("square bullets"). A nested `\unorderedlist' labels items with + em-dashes. Doubly (and deeper) nested unordered lists label items + with `*'s. + + + The two kinds of lists can be nested within each other, as well. + + In both kinds of lists, you begin an item with `\li'. An item may +continue for several paragraphs. Each item starts a paragraph. + + You can give `\li' an optional argument, a cross-reference label. +It's defined to be the "marker" for the current item. This is useful +if the list items are numbered. You can produce the value of the label +with `\xrefn'. *Note Cross-references::. + + Eplain can create hypertext links for the markers produced by +`\xrefn' pointing to the relevant list item (*note List hyperlinks::). + + You can also say `\listcompact' right after `\numberedlist' or +`\unorderedlist'. The items in the list will then not have any extra +space between them (*note Formatting lists::). You might want to do +this if the items in this particular list are short. + + Here is an example: + + \numberedlist\listcompact + \li The first item. + \li The second item. + + The second paragraph of the second item. + \endnumberedlist + +* Menu: + +* Formatting lists:: Changing how the lists look. + + +File: eplain.info, Node: Formatting lists, Up: Lists + +4.6.1 Formatting lists +---------------------- + +Several registers define the spacing associated with lists. It is +likely that their default values won't suit your particular layout. + +`\abovelistskipamount, \belowlistskipamount' + The vertical glue inserted before and after every list, + respectively. + +`\interitemskipamount' + The vertical glue inserted before each item except the first. + `\listcompact' resets this to zero, as mentioned above. + +`\listleftindent, \listrightindent' + `\listrightindent' is the amount of space by which the list is + indented on the right; i.e., it is added to `\rightskip'. + `\listleftindent' is the amount of space, _relative to_ + `\parindent', by which the list is indented on the left. Why treat + the two parameters differently? Because (a) it is more useful to + make the list indentation depend on the paragraph indentation; + (b) footnotes aren't formatted right if `\parindent' is reset to + zero. + + + The three vertical glues are inserted by macros, and preceded by +penalties: `\abovelistskip' does `\vpenalty\abovelistpenalty' and then +`\vskip\abovelistskip'. `\belowlistskip' and `\interitemskip' are +analogous. + + In addition, the macro `\listmarkerspace' is called to separate the +item label from the item text. This is set to `\enspace' by default. + + If you want to change the labels on the items, you can redefine these +macros: `\numberedmarker' or `\unorderedmarker'. The following +registers might be useful if you do: + +`\numberedlistdepth, \unorderedlistdepth' + These keep track of the depth of nesting of the two kinds of lists. + +`\itemnumber, \itemletter' + These keep track of the number of items that have been seen in the + current numbered list. They are both integer registers. The + difference is that `\itemnumber' starts at one, and `\itemletter' + starts at 97, i.e., lowercase `a'. + + + You can also redefine the control sequences that are used internally, +if you want to do something radically different: `\beginlist' is +invoked to begin both kinds of lists; `\printitem' is invoked to print +the label (and space following the label) for each item; and `\endlist' is +invoked to end both kinds of lists. + + +File: eplain.info, Node: Verbatim listing, Next: Contents, Prev: Lists, Up: User definitions + +4.7 Verbatim listing +==================== + +It is sometimes useful to include a file verbatim in your document; for +example, part of a computer program. The `\listing' command is given +one argument, a filename, and produces the contents of that file in +your document. `\listing' expands `\listingfont' to set the current +font. The default value of `\listingfont' is `\tt'. + + You can take arbitrary actions before reading the file by defining +the macro `\setuplistinghook'. This is expanded just before the file +is input. + + If you want to have line numbers on the output, you can say +`\let\setuplistinghook = \linenumberedlisting'. The line numbers are +stored in the count register `\lineno' while the file is being read. +You can redefine the macro `\printlistinglineno' to change how they are +printed. + + Normally, the `\listing' command will add a final empty line at the +end of the output, even if the file does not end in a newline. To +suppress this final line, you can say `\let\setuplistinghook = +\nolastlinelisting'. This also works with line numbers (say +`\def\setuplistinghook{\linenumberedlisting \nolastlinelisting}'), but +only if `\printlistinglineno' consists exclusively of boxes at the top +level (i.e., any `\kern's or glue should be wrapped up in a box). + + You can use the form feed control character (ASCII code 12, typed as +`CTRL-L') in the file to force a page break in the output. + + You can produce in-line verbatim text in your document with +`\verbatim'. End the text with `|endverbatim'. If you need a `|' in +the text, double it. If the first character of the verbatim text is a +space, use `| '. (`| ' will work elsewhere in the argument, too, but +isn't necessary.) + + For example: + + \verbatim| ||\#%&!|endverbatim + +produces ` |\#%&!'. + + Line breaks and spaces in the verbatim text are preserved. + + You can change the verbatim escape character from the default `|' +with `\verbatimescapechar CHAR'; for example, this changes it to `@'. + + \verbatimescapechar \@ + +The backslash is not necessary in some cases, but is in others, +depending on the catcode of the character. The argument to +`\verbatimescapechar' is used as `\catcode `CHAR', so the exact rules +follow that for `\catcode'. + + Because `\verbatim' must change the category code of special +characters, calling inside a macro definition of your own does not work +properly. For example: + + \def\mymacro{\verbatim &#%|endverbatim}% Doesn't work! + +To accomplish this, you must change the category codes yourself before +making the macro definition. Perhaps `\uncatcodespecials' will help +you (*note Category codes::). + + +File: eplain.info, Node: Contents, Next: Cross-references, Prev: Verbatim listing, Up: User definitions + +4.8 Contents +============ + +Producing a table of contents that is both useful and aesthetic is one +of the most difficult design problems in any work. Naturally, Eplain +does not pretend to solve the design problem. Collecting the raw data +for a table of contents, however, is much the same across documents. +Eplain uses an auxiliary file with extension `.toc' (and the same root +name as your document) to save the information. + +* Menu: + +* Writing the .toc file:: +* Reading the .toc file:: +* Changing the .toc file's root name:: +* Alternative contents files:: + + +File: eplain.info, Node: Writing the .toc file, Next: Reading the .toc file, Up: Contents + +4.8.1 Writing the .toc file +--------------------------- + +To write an entry for the table of contents, you say +`\writetocentry{PART}{TEXT}', where PART is the type of part this entry +is, e.g., `chapter', and TEXT is the text of the title. +`\writetocentry' puts an entry into the .toc file that looks like +`\tocPARTentry{TEXT}{PAGE NUMBER}' (unless PART is an integer, see +below). The TEXT is written unexpanded. + + A related command, `\writenumberedtocentry', takes one additional +argument, the first token of which is expanded at the point of the +`\writenumberedtocentry', but the rest of the argument is not expanded. +The usual application is when the parts of the document are numbered. +On the other hand, the one-level expansion allows you to use the +argument for other things as well (author's names in a proceedings, +say), and not have accents or other control sequences expanded. The +downside is that if you _want_ full expansion of the third argument, +you don't get it--you must expand it yourself, before you call +`\writenumberedtocentry'. + + For example: + + \writenumberedtocentry{chapter}{A $\sin$ wave}{\the\chapno} + \writetocentry{section}{A section title} + +Supposing `\the\chapno' expanded to `3' and that the `\write''s +occurred on pages eight and nine, respectively, the above writes the +following to the .toc file: + + \tocchapterentry{A $\sin$ wave}{3}{8} + \tocsectionentry{A section title}{9} + + A variation on `\writenumberedtocentry' is `\writenumberedtocline', +differing only in the order of the parameters it takes and writes for +the `\tocPARTentry' control sequences. To continue the previous +example: + + \writenumberedtocline{chapter}{\the\chapno}{A $\sin$ wave} + +writes the following to the .toc file: + + \tocchapterentry{3}{A $\sin$ wave}{8} + +Such ordering of the parameters allows the `\tocPARTentry' macros to +typeset the text of the entry without actually reading it as an +argument. This is required for entries which need to change character +catcodes, e.g., to produce verbatim text (*note Verbatim listing::). + + Each of `\writetocentry', `\writenumberedtocentry' and +`\writenumberedtocline' processes a numeric PART argument specially. +If you pass PART expanding to an integer, these macros write into the +.toc file an entry that starts with `\tocentry{PART}'. Thus, you can +define a single `\tocentry' macro which formats all entries for a table +of contents. To continue the previous examples: + + \writenumberedtocentry{1}{A $\sin$ wave}{\the\chapno} + \writenumberedtocline{1}{\the\chapno}{A $\sin$ wave} + \writetocentry{2}{A section title} + +writes the following to the .toc file: + + \tocentry{1}{A $\sin$ wave}{3}{8} + \tocentry{1}{3}{A $\sin$ wave}{8} + \tocentry{2}{A section title}{9} + + +File: eplain.info, Node: Reading the .toc file, Next: Changing the .toc file's root name, Prev: Writing the .toc file, Up: Contents + +4.8.2 Reading the .toc file +--------------------------- + +You read the .toc file with the command `\readtocfile'. Naturally, +whatever `\toc... entry' commands that were written to the file must be +defined when `\readtocfile' is invoked. Eplain has minimal definitions +for `\tocchapterentry', `\tocsectionentry', and `\tocsubsectionentry', +just to prevent undefined control sequence errors in common cases. +They aren't suitable for anything but preliminary proofs. + + Each of `\writetocentry', `\writenumberedtocentry' and +`\writenumberedtocline' opens the .toc file for writing, thereby +deleting the information from the previous run. You should therefore +arrange that `\readtocfile' be called _before_ the first call to a +`\writetoc...' macro. `\readtocfile' does not itself delete the +information from the .toc file, so that you can call it several times, +e.g., to create both a short and normal table of contents. (To produce +this in particular, define `\tocsectionentry' to produce nothing while +you are reading .toc file for a short table of contents (*note Macro +arguments::).) + + On the other hand, if you don't want to rewrite the .toc file at +all, perhaps because you are only running TeX on part of your +manuscript, you can set `\rewritetocfilefalse'. + + +File: eplain.info, Node: Changing the .toc file's root name, Next: Alternative contents files, Prev: Reading the .toc file, Up: Contents + +4.8.3 Changing the .toc file's root name +---------------------------------------- + +By default, the `.toc' file has the root `\jobname'. If your document +has more than one contents--for example, if it is a collection of +papers, some of which have their own contents--you can tell Eplain to +use a different root name by defining the control sequence +`\tocfilebasename'. + + Note that `\writetocentry', `\writenumberedtocentry' and +`\writenumberedtocline' will open the contents file for writing only at +the first call, using the value of `\tocfilebasename' at that time. +Changing the value of `\tocfilebasename' afterwards will not affect +which file gets _written_, although it will affect which file gets +_read_ by `\readcontentsfile'. In case you need to write several +contents files from a single TeX job, use `\definecontentsfile' (*note +Alternative contents files::). + + +File: eplain.info, Node: Alternative contents files, Prev: Changing the .toc file's root name, Up: Contents + +4.8.4 Alternative contents files +-------------------------------- + +In addition to the usual table of contents, you may want to have a list +of figures, list of tables, or other such contents-like list. You can do +this with `\definecontentsfile{ABBREV}'. All of the above commands are +actually a special case that Eplain predefines with + + \definecontentsfile{toc} + +The ABBREV is used both for the file extension and in the control +sequence names. + + +File: eplain.info, Node: Cross-references, Next: Page references, Prev: Contents, Up: User definitions + +4.9 Cross-references +==================== + +It is often useful to refer the reader to other parts of your document; +but putting literal page, section, equation, or whatever numbers in the +text is certainly a bad thing. + + Eplain therefore provides commands for symbolic cross-references. It +uses an auxiliary file with extension .aux (and the same root name as +your document) to keep track of the information. Therefore, it takes +two passes to get the cross-references right--one to write them out, +and one to read them in. Eplain automatically reads the .aux file at +the first reference; after reading it, Eplain reopens it for writing. + + You can control whether or not Eplain warns you about undefined +labels. *Note Citations::. + + Labels in Eplain's cross-reference commands can use characters of +category code eleven (letter), twelve (other), ten (space), three (math +shift), four (alignment tab), seven (superscript), or eight (subscript). +For example, `(a1 $&^_' is a valid label (assuming the category codes +of plain TeX), but `%#\{' has no valid characters. + + You can also do symbolic cross-references for bibliographic citations +and list items. *Note Citations::, and *Note Lists::. + + Eplain can create hypertext links for the cross-references (*note +Cross-reference hyperlinks::). + +* Menu: + +* Defining generic references:: +* Using generic references:: + + +File: eplain.info, Node: Defining generic references, Next: Using generic references, Up: Cross-references + +4.9.1 Defining generic references +--------------------------------- + +Eplain provides the command `\definexref' for general cross-references. +It takes three arguments: the name of the label (see section above for +valid label names), the value of the label (which can be anything), and +the "class" of the reference--whether it's a section, or theorem, or +what. For example: + + \definexref{sec-intro}{3.1}{section} + +Of course, the label value is usually generated by another macro using +TeX count registers or some such. + + `\definexref' doesn't actually define LABEL; instead, it writes out +the definition to the .aux file, where Eplain will read it on the next +TeX run. + + The CLASS argument is used by the `\ref' and `\refs' commands. See +the next section. + + +File: eplain.info, Node: Using generic references, Prev: Defining generic references, Up: Cross-references + +4.9.2 Using generic references +------------------------------ + +To retrieve the value of the label defined via `\definexref' (see the +previous section), Eplain provides the following macros: + +`\refn{LABEL}' + +`\xrefn{LABEL}' + `\refn' and `\xrefn' (they are synonyms) produce the bare + definition of LABEL. If LABEL isn't defined, issue a warning, and + produce LABEL itself instead, in typewriter. (The warning isn't + given if `\xrefwarningfalse'.) + +`\ref{LABEL}' + Given the class C for LABEL (see the description of `\definexref' + in the previous section), expand the control sequence `\C word' + (if it's defined) followed by a tie. Then call `\refn' on LABEL. + (Example below.) + +`\refs{LABEL}' + Like `\ref', but append the letter `s' to the `\...word'. + + + The purpose of the `\...word' macro is to produce the word `Section' +or `Figure' or whatever that usually precedes the actual reference +number. + + Here is an example: + + \def\sectionword{Section} + \definexref{sec-intro}{3.1}{section} + \definexref{sec-next}{3.2}{section} + See \refs{sec-intro} and \refn{sec-next} ... + +This produces `See Sections 3.1 and 3.2 ...' + + +File: eplain.info, Node: Page references, Next: Equation references, Prev: Cross-references, Up: User definitions + +4.10 Page references +==================== + +Eplain provides two commands for handling references to page numbers, +one for definition and one for use. + +`\xrdef{LABEL}' + Define LABEL to be the current page number. This produces no + printed output, and ignores following spaces. + +`\xref{LABEL}' + Produce the text `p. PAGENO', which is the usual form for + cross-references. The PAGENO is actually LABEL's definition; if + LABEL isn't defined, the text of the label itself is printed. The + `p. ' prefix is defined by `\xrefpageword'. Its default + definition is `p.\thinspace'. + + + Eplain can create hypertext links for the page references (*note +Page reference hyperlinks::). + + +File: eplain.info, Node: Equation references, Next: Indexing, Prev: Page references, Up: User definitions + +4.11 Equation references +======================== + +Instead of referring to pages, it's most useful if equation labels +refer to equation numbers. Therefore, Eplain reserves a `\count' +register, `\eqnumber', for the current equation number, and increments +it at each numbered equation. + + Here are the commands to define equation labels and then refer to +them: + +`\eqdef{LABEL}' + This defines LABEL to be the current value of `\eqnumber', and, if + the current context is not inner, then produces a `\eqno' command. + (The condition makes it possible to use `\eqdef' in an + `\eqalignno' construction, for example.) The text of the equation + number is produced using `\eqprint'. *Note Formatting equation + references::. + + If LABEL is empty, you still get an equation number (although + naturally you can't reliably refer to it). This is useful if you + want to put numbers on all equations in your document, and you + don't want to think up unique labels. + + To refer to the last equation with the empty label, you just use + the empty label in one of the equation reference macros (see + below). This can be handy when you want to refer to an equation + shortly after its definition, say, in the sentence following the + displayed equation, and do not intend to refer to the equation + later. But use this trick with extreme caution: if later you + change the text and insert another empty definition between the + original definition and the reference, the reference will start to + refer to the new empty-labeled equation. + +`\eqdefn{LABEL}' + This is like `\eqdef', except it always omits the `\eqno' command. + It can therefore be used in places where `\eqdef' can't; for + example, in a non-displayed equation. The text of the equation + number is not produced, so you can also use it in the (admittedly + unusual) circumstance when you want to define an equation label + but not print that label. + +`\eqref{LABEL}' + This produces a formatted reference to LABEL. If LABEL is + undefined (perhaps because it is a forward reference), it just + produces the text of the label itself. Otherwise, it calls + `\eqprint'. + +`\eqrefn{LABEL}' + This produces the cross-reference text for LABEL. That is, it is + like `\eqref', except it doesn't call `\eqprint'. + + + Equation labels can contain the same characters that are valid in +general cross-references. + + Eplain can create hypertext links for the equation references (*note +Equation reference hyperlinks::). + +* Menu: + +* Formatting equation references:: +* Subequation references:: + + +File: eplain.info, Node: Formatting equation references, Next: Subequation references, Up: Equation references + +4.11.1 Formatting equation references +------------------------------------- + +Both defining an equation label and referring to it should usually +produce output. This output is produced with the `\eqprint' macro, +which takes one argument, the equation number being defined or referred +to. By default, this just produces `(NUMBER)', where NUMBER is the +equation number. To produce the equation number in a different font, +or with different surrounding symbols, or whatever, you can redefine +`\eqprint'. For example, the following definition would print all +equation numbers in italics. (The extra braces define a group, to keep +the font change from affecting surrounding text.) + + \def\eqprint#1{{\it (#1)}} + + In addition to changing the formatting of equation numbers, you +might want to add more structure to the equation number; for example, +you might want to include the chapter number, to get equation numbers +like `(1.2)'. To achieve this, you redefine `\eqconstruct'. For +example: + + \def\eqconstruct#1{\the\chapternumber.#1} + +(If you are keeping the chapter number in a count register named +`\chapternumber', naturally.) + + The reason for having both `\eqconstruct' and `\eqprint' may not be +immediately apparent. The difference is that `\eqconstruct' affects +the text that cross-reference label is defined to be, while `\eqprint' +affects only what is typeset on the page. The example just below might +help. + + Usually, you want equation labels to refer to equation numbers. But +sometimes you might want a more complicated text. For example, you +might have an equation `(1)', and then have a variation several pages +later which you want to refer to as `(1*)'. + + Therefore, Eplain allows you to give an optional argument (i.e., +arbitrary text in square brackets) before the cross-reference label to +\eqdef. Then, when you refer to the equation, that text is produced. +Here's how to get the example just mentioned: + + $$...\eqdef{a-eq}$$ + ... + $$...\eqdef[\eqrefn{a-eq}*]{a-eq-var}$$ + In \eqref{a-eq-var}, we expand on \eqref{a-eq}, ... + + We use `\eqrefn' in the cross-reference text, not `\eqref', so that +`\eqprint' is called only once. + + +File: eplain.info, Node: Subequation references, Prev: Formatting equation references, Up: Equation references + +4.11.2 Subequation references +----------------------------- + +Eplain also provides for one level of substructure for equations. That +is, you might want to define a related group of equations with numbers +like `2.1' and `2.2', and then be able to refer to the group as a whole: +"... in the system of equations (2)...". + + The commands to do this are `\eqsubdef' and `\eqsubdefn'. They take +one LABEL argument like their counterparts above, and generally behave +in the same way. The difference is in how they construct the equation +number: instead of using just `\eqnumber', they also use another +counter, `\subeqnumber'. This counter is advanced by one at every +`\eqsubdef' or `\eqsubdefn', and reset to zero at every `\eqdef' or +`\eqdefn'. + + You use `\eqref' to refer to subequations as well as main equations. + + To put the two together to construct the text that the label will +produce, they use a macro `\eqsubreftext'. This macros takes two +arguments, the "main" equation number (which, because the equation +label can be defined as arbitrary text, as described in the previous +section, might be anything at all) and the "sub" equation number (which +is always just a number). Eplain's default definition just puts a +period between them: + + \def\eqsubreftext#1#2{#1.#2}% + +You can redefine `\eqsubreftext' to print however you like. For +example, this definition makes the labels print as `2a', `2b', and so +on. + + \newcount\subref + \def\eqsubreftext#1#2{% + \subref = #2 % The space stops a . + \advance\subref by 96 % `a' is character code 97. + #1\char\subref + } + +Sadly, we must define a new count register, `\subref', instead of using +the scratch count register `\count255', because `#1' might include +other macro calls which use `\count255'. + + +File: eplain.info, Node: Indexing, Next: Justification, Prev: Equation references, Up: User definitions + +4.12 Indexing +============= + +Eplain provides support for generating raw material for an index, and +for typesetting a sorted index. A separate program must do the actual +collection and sorting of terms, because TeX itself has no support for +sorting. + + Eplain can create hypertext links pointing from the index to the +index terms (*note Index hyperlinks::). + + Eplain's indexing commands were designed to work with the program +MakeIndex, available from CTAN hosts in +`tex-archive/indexing/makeindex'; MakeIndex is also commonly included +in prepackaged TeX distributions. It is beyond the scope of this +manual to explain how to run MakeIndex, and all of its many options. +See `http://www.ctan.org/tex-archive/indexing/makeindex'. + + The basic strategy for indexing works like this: + + 1. For a document `foo.tex', Eplain's indexing commands (e.g., + `\idx'; see the section `Indexing terms' below) write the raw index + material to `foo.idx'. + + 2. MakeIndex reads `foo.idx', collects and sorts the index, and + writes the result to `foo.ind'. + + 3. Eplain reads and typesets `foo.ind' on a subsequent run of TeX. + See the section `Typesetting an index' below. + + +The `texi2dvi' program can help you automate this process (*note +Invoking Eplain::). + + If your document needs more than one index, each must have its own +file. Therefore, Eplain provides the command `\defineindex', which +takes an argument that is a single letter, which replaces `i' in the +filenames and in the indexing command names described below. For +example, + + \defineindex{m} + +defines the command `\mdx' to write to the file `foo.mdx'. Eplain +simply does `\defineindex{i}' to define the default commands. + +* Menu: + +* Indexing terms:: Specifying what to index. +* Typesetting an index:: Printing the sorted output. +* Customizing indexing:: Creating commands and specifying extra actions. + + +File: eplain.info, Node: Indexing terms, Next: Typesetting an index, Up: Indexing + +4.12.1 Indexing terms +--------------------- + +Indexing commands in Eplain come in pairs: one command that only writes +the index entry to the `.idx' file (see above section), and one that +also typesets the term being indexed. The former always starts with `s' +(for "silent"). In either case, the name always includes `Idx', where I +is the index letter, also described above. Eplain defines the index `i' +itself, so that's what we'll use in the names below. + + The silent form of the commands take a subterm as a trailing optional +argument. For example, `\sidx{truth}[definition of]' on page 75 makes +an index entry that will eventually be typeset (by default) as + + truth + definition of, 75 + + Also, the silent commands ignore trailing spaces. The non-silent +ones do not. + +* Menu: + +* Indexing commands:: Making index entries. +* Modifying index entries:: Ranges, see/see also, page number typesetting. +* Index entries with special characters:: +* Proofing index terms:: Noting index entries in the margins. + + +File: eplain.info, Node: Indexing commands, Next: Modifying index entries, Up: Indexing terms + +4.12.1.1 Indexing commands +.......................... + +Here are the commands. + + * `\sidx{TERM}[SUBTERM]' makes an index entry for TERM, optionally + with subterm SUBTERM. `\idx{TERM}' also produces TERM as output. + Example: + + \sidx{truth}[beauty of] + The beauty of truth is \idx{death}. + + Subterms at the second and further levels can also be specified in + SUBTERM, using the `\idxsubentryseparator' character to separate + them. This character is by default `!'. + + * `\sidxname{FIRST M.}{VON LAST}[SUBTERM]' makes an index entry for + `VON LAST, FIRST M.'. You can change the `, ' by redefining + `\idxnameseparator'. `\idxname{FIRST M.}{VON LAST}' also produces + FIRST M. VON LAST as output. (These commands are useful special + cases of `\idx' and `\sidx'.) Example: + + \sidxname{Richard}{Stark} + \idxname{Donald}{Westlake} has written many kinds of novels, under + almost as many names. + + * `\sidxmarked\CS{TERM}[SUBTERM]' makes an index entry for + `TERM[SUBTERM]', but TERM will be put in the index as `\CS{term}', + but still sorted as just TERM. `\idxmarked\CS{TERM}' also typesets + `\CS{term}'. This provides for the usual ways of changing the + typesetting of index entries. Example: + + \def\article#1{``#1''} + \sidxmarked\article{Miss Elsa and Aunt Sophie} + Peter Drucker's \idxmarked\article{The Polanyis} is a remarkable + essay about a remarkable family. + + * `\sidxsubmarked{TERM}\CS{subterm}' makes an index entry for TERM, + SUBTERM as usual, but also puts SUBTERM in the index as + `\CS{term}'. `\idxsubmarked{TERM}\CS{subterm}' also typesets + `TERM \CS{subterm}', in the unlikely event that your syntax is + convoluted enough to make this useful. Example: + + \def\title#1{{\sl #1}} + \sidxsubmarked{Anderson, Laurie}\title{Strange Angels} + The \idxsubmarked{Anderson}\title{Carmen} is a strange twist. + + + The commands above rely on MakeIndex's feature for separating +sorting of an index entry's from its typesetting. You can use this +directly by specifying an index entry as `SORT@TYPESET'. For example: + + \sidx{Ap-weight@$A_\pi$-weight} + +will sort as `Ap-weight', but print with the proper math. The `@' here +is MakeIndex's default character for this purpose. See +`http://www.ctan.org/tex-archive/indexing/makeindex'. To make an index +entry with an `@' in it, you have to escape it with a backslash; Eplain +provides no macros for doing this. + + After any index command, Eplain runs `\hookaction{afterindexterm}'. +Because the index commands always add a whatsit item to the current +list, you may wish to preserve a penalty or space past the new item. +For example, given a conditional `\if@aftersctnhead' set true when +you're at a section heading, you could do: + + \hookaction{afterindexterm}{\if@aftersctnhead \nobreak \fi} + + +File: eplain.info, Node: Modifying index entries, Next: Index entries with special characters, Prev: Indexing commands, Up: Indexing terms + +4.12.1.2 Modifying index entries +................................ + +All the index commands described in the previous section take an initial +optional argument before the index term, which modify the index entry's +meaning in various ways. You can specify only one of the following in +any given command, except that `begin' and `end' can be specified +together with `pagemarkup=CS' (separate them with a comma without a +following space, like this: `[begin,pagemarkup=defn]'). + + These work via MakeIndex's "encapsulation" feature. *Note +Customizing indexing::, if you're not using the default characters for +the MakeIndex operators. The other optional argument (specifying a +subterm) is independent of these. + + Here are the possibilities: + +`begin' +`end' + These mark an index entry as the beginning or end of a range. The + index entries must match exactly for MakeIndex to recognize them. + Example: + + \sidx[begin]{future}[Cohen, Leonard] + ... + \sidx[end]{future}[Cohen, Leonard] + + will typeset as something like + + future, + Cohen, Leonard, 65-94 + +`see' + This marks an index entry as pointing to another; the real index + term is an additional (non-optional) argument to the command. Thus + you can anticipate a term readers may wish to look up, yet which + you have decided not to index. Example: + + \sidx[see]{analysis}[archetypal]{archetypal criticism} + + becomes + + analysis, + archetypal, see archetypal criticism + +`seealso' + Similar to `see' (the previous item), but also allows for normal + index entries of the referencing term. Example: + + \sidx[seealso]{archetypal criticism}[elements of]{dichotomies} + + becomes + + archetypal criticism, + elements of, 75, 97, 114, see also dichotomies + + (Aside for the academically curious: The archetypally critical + book I took these dichotomous examples from is Laurence Berman's + `The Musical Image', which I happened to co-design and typeset.) + +`pagemarkup=CS' + This puts `\CS' before the page number in the typeset index, thus + allowing you to underline definitive entries, italicize examples, + and the like. You do _not_ precede the control sequence CS with a + backslash. (That just leads to expansive difficulties.) Naturally + it is up to you to define the control sequences you want to use. + Example: + + \def\defn#1{{\sl #1}} + \sidx[pagemarkeup=defn]{indexing} + + becomes something like + + indexing, `\defn{75}' + + + +File: eplain.info, Node: Index entries with special characters, Next: Proofing index terms, Prev: Modifying index entries, Up: Indexing terms + +4.12.1.3 Index entries with special characters +.............................................. + +Indexing terms with special characters can become quite cumbersome +because you have to keep both TeX and MakeIndex happy at the same time. +For example, while `!' has no special meaning for TeX, it is a +subentry separator for MakeIndex, therefore you'd have to escape +occurrences of literal `!' in index terms. Things get even more +interesting with characters which are special in both TeX and MakeIndex. + + This in turn has some implications for the non-silent forms of the +indexing commands (*note Indexing terms::), since TeX and MakeIndex use +different conventions for escaping characters. For example, this will +not typeset the exclamation point correctly within the text, while it +will come out right inside the index, after MakeIndex strips the +quoting character (`"'): + + \idx{"!} + +This would have to be rewritten using the silent command: + + !\sidx{"!} + +In general, it is a good idea to eschew the non-silent commands +whenever index term contains anything unusual. + + To understand this keep in mind that indexing commands read the terms +verbatim so that the terms can embed almost any character, and that's +what gets written into the `.idx' file. The non-silent forms then +typeset the term by rescanning the verbatim copy, therefore for the +non-silent commands the term, besides being a valid MakeIndex input, +must also represent a valid TeX input. The silent commands don't have +this restriction--their terms only need to become valid TeX input +_after_ MakeIndex processes the `.idx' file and writes the `.ind' file. +This is what makes the non-silent commands less powerful and more +troublesome when dealing with special characters. + + Here's an example showing that terms for the silent commands can +contain almost any character: + + \sidx[see]{comments}[with %@with \verbatim %"|endverbatim] + {commenting with \verbatim %"|endverbatim} + +We didn't have to escape `%' in the sort string for MakeIndex, while we +had to put it inside the verbatim environment (*note Verbatim +listing::) in the part which MakeIndex will pass back to TeX. Also, we +had to escape the `|' character because it is special for MakeIndex. +If you have trouble understanding the reasons for the different types +of escaping used, it is best to examine the `.idx' and `.ind' files +resulting from processing the above input. + + As was mentioned, index terms can embed "almost any character", so +now we'll describe the exceptions. + + The following characters are reset to their usual meanings because +they are not useful verbatim: multiple consequent spaces are converted +into a single space; ASCII tab characters are treated as spaces; ASCII +return is treated as end-of-line (this means, among other things, that +long terms can be broken across several lines). + + You have to be careful with the begin- and end-group characters (`{' +and `}' by default). If they are matched, you don't have to do +anything special. For example: + + \sidx {braces {, }@braces + \verbatim {"|endverbatim, \verbatim }"|endverbatim} + +However, if they are not matched you have two problems on hand. The +first one is TeX--you have to instruct TeX to use something else as +begin- and/or end-group characters. Eplain provides an easy way to do +this: just define `\idxargopen' and/or `\idxargclose' to the begin- +and end-group characters you are going to use with indexing macros, and +use braces inside index terms without any restrictions. Here's an +example: + + \def\idxargopen{`\<} + \def\idxargclose{`\>} + \sidx + +In this example we've also dealt with the second problem--braces are +MakeIndex's grouping characters as well (by default), so we have +escaped unmatched braces with `"'. + + And the final note: if you need a subentry containing brackets (`[' +and `]'), avoid the optional argument of `\sidx' and friends, and use +instead MakeIndex's subentry separator to create the subentry with the +brackets in it: + + \sidx{entry!subentry with a bracket [} + + +File: eplain.info, Node: Proofing index terms, Prev: Index entries with special characters, Up: Indexing terms + +4.12.1.4 Proofing index terms +............................. + +As you are reading through a manuscript, it is helpful to see what terms +have been indexed, so you can add others, catch miscellaneous errors, +etc. (Speaking from bitter experience, I can say it is extremely +error-prone to leave all indexing to the end of the writing, since it +involves adding many TeX commands to the source files.) + + So Eplain puts index terms in the margin of each page, if you set +`\indexproofingtrue'. It is `false' by default. The terms are typeset +by the macro `\indexproofterm', which takes a single argument, the term +to be typeset. Eplain's definition of `\indexproofterm' just puts it +into an `\hbox', first doing `\indexprooffont', which Eplain defines to +select the font `cmtt8'. With this definition long terms run off the +page, but since this is just for proofreading anyway, it seems +acceptable. + + On the other hand, we certainly don't want the index term to run into +the text of the page, so Eplain uses the right-hand side of the page +rather than the left-hand page (assuming a language read left to right +here). So `\ifodd\pageno', Eplain kerns by `\outsidemargin', otherwise +by `\insidemargin'. If those macros are undefined, `\indexsetmargins' +defines them to be one inch plus `\hoffset'. + + To get the proofing index entries on the proper page, Eplain defines +a new insertion class `\@indexproof'. To unbox any index proofing +material, Eplain redefines `\makeheadline' to call `\indexproofunbox' +before the original `\makeheadline'. Thus, if you have your own output +routine, that redefines or doesn't use `\makeheadline', it's up to you +to call `\indexproofunbox' at the appropriate time. + + +File: eplain.info, Node: Typesetting an index, Next: Customizing indexing, Prev: Indexing terms, Up: Indexing + +4.12.2 Typesetting an index +--------------------------- + +The command `\readindexfile{i}' reads and typesets the `.ind' file that +MakeIndex outputs (from the `.idx' file which the indexing commands in +the previous sections write). Eplain defines a number of commands that +support the default MakeIndex output. + + More precisely, `\readindexfile' reads +`\indexfilebasename.INDEX-LETTERnd', where the INDEX-LETTER is the +argument. `\indexfilebasename' is `\jobname' by default, but if you +have different indexes in different parts of a book, you may wish to +change it, just as with bibliographies (*note Citations::). + + MakeIndex was designed to work with LaTeX; therefore, by default the +`.ind' file starts with `\begin{theindex}' and ends with +`\end{theindex}'. If no `\begin' has been defined, Eplain defines one +to ignore its argument and set up for typesetting the index (see +below), and also defines a `\end' to ignore its argument. (In a group, +naturally, since there is a primitive `\end'). + + Eplain calls `\indexfonts', sets `\parindent = 0pt', and does +`\doublecolumns' (*note Multiple columns::) at the `\begin{theindex}'. +`\indexfonts' does nothing by default; it's just there for you to +override. (Indexes are usually typeset in smaller type than the main +text.) + + It ends the setup with `\hookrun{beginindex}', so you can override +anything you like in that hook (*note Hooks::). For example: + + \hookaction{beginindex}{\triplecolumns} + + MakeIndex turns each main index entry into an `\item', subentries +into `\subitem', and subsubentries into `\subsubitem'. By default, the +first line of main entries are not indented, and subentries are +indented 1em per level. Main entries are preceded by a `\vskip' of +`\aboveitemskipamount', `0pt plus2pt' by default. Page breaks are +encouraged before main entries (`\penalty -100'), but prohibited +afterwards--Eplain has no provision for "continued" index entries. + + All levels do the following: + + \hangindent = 1em + \raggedright + \hyphenpenalty = 10000 + + Each entry ends with `\hookrun{indexitem}', so you can change any of +this. For example, to increase the allowable rag: + + \hookaction{indexitem}{\advance\rightskip by 2em} + + Finally, MakeIndex outputs `\indexspace' between each group of +entries in the `.ind' file. Eplain makes this equivalent to `\bigbreak'. + + +File: eplain.info, Node: Customizing indexing, Prev: Typesetting an index, Up: Indexing + +4.12.3 Customizing indexing +--------------------------- + +By default, MakeIndex outputs `, ' after each term in the index. To +change this, you can add the following to your MakeIndex style (`.ist') +file: + + delim_0 "\\afterindexterm " + delim_1 "\\afterindexterm " + delim_2 "\\afterindexterm " + +Eplain makes `\afterindexterm' equivalent to `\quad'. + + You can also change the keywords Eplain recognizes (*note Modifying +index entries::): + +`\idxrangebeginword' + `begin' + +`\idxrangeendword' + `end' + +`\idxseecmdword' + `see' + +`\idxseealsocmdword' + `seealso' + + + You can also change the magic characters Eplain puts into the `.idx' +file, in case you've changed them in the `.ist' file: + +`\idxsubentryseparator' + `!' + +`\idxencapoperator' + `|' + +`\idxbeginrangemark' + `(' + +`\idxendrangemark' + `)' + + + There is no macro for the `actual' (`@' by default) character, +because it's impossible to make it expand properly. + + You can change the (imaginary) page number that "see also" entries +sort as by redefining `\idxmaxpagenum'. This is 99999 by default, which +is one digit too many for old versions of MakeIndex. + + The words output by Eplain for "see" and "see also" index entries +are defined by `\indexseeword' and `\indexseealsowords' respectively. +You can change the typeface used for these words by redefining +`\seevariant'. And finally, the macros `\indexsee' and `\indexseealso' +actually produce the "see ..." entries, so you can redefine them if you +want something entirely different. If you do redefine them, make them +take two parameters, the term being referenced and the `\idxmaxpagenum' +(the latter should normally be ignored). See the example below. + + Unfortunately, it is impossible to reliably control the commas +produced by MakeIndex in front of "see ..." entries in the `.ind' file, +either at MakeIndex level or at Eplain level. However, the `sed' +script contained in `trimsee' distributed with Eplain in the `util' +directory can be used to filter out these commas from the output of +MakeIndex. For example, suppose you want the following style for your +"see ..." entries: + + analysis, + archetypal (see archetypal criticism) + archetypal criticism, + elements of, 75, 97, 114 (see also dichotomies) + +You would need to redefine these macros in your TeX file: + + \def\indexsee#1#2{({\seevariant \indexseeword\/ }#1)} + \def\indexseealso#1#2{({\seevariant \indexseealsowords\/ }#1)} + +and then filter out the commas in front of the "see ..." entries by +running the following command to produce the `.ind' file (assuming the +name of the `.idx' file is `myfile.idx' and the `trimsee' script is +placed in the current directory): + + prompt$ cat myfile.idx | makeindex | ./trimsee > myfile.ind + + By default, `trimsee' uses default page list separators and default +"see ..." command names. If you set up MakeIndex to use different page +list separator or change the names of `\indexsee' and `\indexseealso' +commands, it is possible to adjust the `trimsee' script through its +command line options, which are the following: + +`-i IS' + Use IS as a regular expression matching separator before "see ..." + commands in the input (default: `, \+'). + +`-o OS' + Use OS as a separator to replace IS before "see ..." commands + (default: ` '). + +`-s SEE' + Use SEE as a regular expression matching "see ..." commands + (default: `\\indexsee'). + +`-h' +`--help' + Print a usage message. + +`-v' +`--version' + Print version. + + `trimsee' reads input from the standard input, and directs its +output to the standard output. + + +File: eplain.info, Node: Justification, Next: Tables, Prev: Indexing, Up: User definitions + +4.13 Justification +================== + +Eplain defines three commands to conveniently justify multiple lines of +text: `\flushright', `\flushleft', and `\center'. + + They all work in the same way; let's take `\center' as the example. +To start centering lines, you say `\center' inside a group; to stop, +you end the group. Between the two commands, each end-of-line in the +input file also starts a new line in the output file. + + The entire block of text is broken into paragraphs at blank lines, +so all the TeX paragraph-shaping parameters apply in the usual way. +This is convenient, but it implies something else that isn't so +convenient: changes to any linespacing parameters, such as +`\baselineskip', will have _no effect_ on the paragraph in which they +are changed. TeX does not handle linespacing changes within a +paragraph (because it doesn't know where the line breaks are until the +end of the paragraph). + + The space between paragraphs is by default one blank line's worth. +You can adjust this space by assigning to `\blanklineskipamount'; this +(vertical) glue is inserted after each blank line. + + Here is an example: + + {\center First line. + + Second line, with a blank line before. + } + +This produces: + + First line. + + Second line, with a blank line before. + + You may wish to use the justification macros inside of your own +macros. Just be sure to put them in a group. For example, here is how +a title macro might be defined: + + \def\title{\begingroup\titlefont\center} + \def\endtitle{\endgroup} + + +File: eplain.info, Node: Tables, Next: Margins, Prev: Justification, Up: User definitions + +4.14 Tables +=========== + +Eplain provides a single command, `\makecolumns', to make generating +one particular kind of table easier. More ambitious macro packages +might be helpful to you for more difficult applications. The files +`ruled.tex' and `TXSruled.tex', available from +`http://www.ctan.org/tex-archive/macros/texsis', is the only one I know +of. + + Many tables are homogenous, i.e., all the entries are semantically +the same. The arrangement into columns is to save space on the page, +not to encode different meanings. In this kind of the table, it is +useful to have the column breaks chosen automatically, so that you can +add or delete entries without worrying about the column breaks. + + `\makecolumns' takes two arguments: the number of entries in the +table, and the number of columns to break them into. As you can see +from the example below, the first argument is delimited by a slash, and +the second by a colon and a space (or end-of-line). The entries for the +table then follow, one per line (not including the line with the +`\makecolumns' command itself). + + `\parindent' defines the space to the left of the table. `\hsize' +defines the width of the table. So you can adjust the position of the +table on the page by assignments to these parameters, probably inside a +group. + + You can also control the penalty at a page break before the +`\makecolumns' by setting the parameter `\abovecolumnspenalty'. Usually, +the table is preceded by some explanatory text. You wouldn't want a +page break to occur after the text and before the table, so Eplain sets +it to `10000'. But if the table produced by `\makecolumns' is standing +on its own, `\abovecolumnspenalty' should be decreased. + + If you happen to give `\makecolumns' a smaller number of entries +than you really have, some text beyond the (intended) end of the table +will be incorporated into the table, probably producing an error +message, or at least some strange looking entries. And if you give +`\makecolumns' a larger number of entries than you really have, some of +the entries will be typeset as straight text, probably also looking +somewhat out of place. + + Here is an example: + + % Arrange 6 entries into 2 columns: + \makecolumns 6/2: % This line doesn't have an entry. + one + two + three + four + five + six + Text after the table. + +This produces `one', `two', and `three' in the first column, and +`four', `five', and `six' in the second. + + +File: eplain.info, Node: Margins, Next: Multiple columns, Prev: Tables, Up: User definitions + +4.15 Margins +============ + +TeX's primitives describe the type area in terms of an offset from the +upper left corner, and the width and height of the type. Some people +prefer to think in terms of the "margins" at the top, bottom, left, and +right of the page, and most composition systems other than TeX conceive +of the page laid out in this way. Therefore, Eplain provides commands +to directly assign and increment the margins. + +`\topmargin = DIMEN' +`\bottommargin = DIMEN' +`\leftmargin = DIMEN' + +`\rightmargin = DIMEN' + These commands set the specified margin to the DIMEN given. The + `=' and the spaces around it are optional. The control sequences + here are not TeX registers, despite appearances; therefore, + commands like `\showthe\topmargin' will not do what you expect. + +`\advancetopmargin by DIMEN' +`\advancebottommargin by DIMEN' +`\advanceleftmargin by DIMEN' + +`\advancerightmargin by DIMEN' + These commands change the specified margin by the DIMEN given. + + Regardless of whether you use the assignment or the advance commands, +Eplain always changes the type area in response, not the other margins. +For example, when TeX starts, the left and right margins are both one +inch. If you then say `\leftmargin = 2in', the right margin will +remain at one inch, and the width of the lines (i.e., `\hsize') will +decrease by one inch. + + When you use any of these commands, Eplain computes the old value of +the particular margin, by how much you want to change it, and then +resets the values of TeX's primitive parameters to correspond. +Unfortunately, Eplain cannot compute the right or bottom margin without +help: you must tell it the full width and height of the final output +page. It defines two new parameters for this: + +`\paperheight' + The height of the output page; default is 11truein. + +`\paperwidth' + The width of the output page; default is 8.5truein. + + If your output page has different dimensions than this, you must +reassign to these parameters, as in + + \paperheight = 11truein + \paperwidth = 17truein + + +File: eplain.info, Node: Multiple columns, Next: Footnotes, Prev: Margins, Up: User definitions + +4.16 Multiple columns +===================== + +Eplain provides for double, triple, and quadruple column output: say +`\doublecolumns', `\triplecolumns', or `\quadcolumns', and from that +point on, the manuscript will be set in columns. To go back to one +column, say `\singlecolumn'. + + You may need to invoke `\singlecolumn' to balance the columns on the +last page of output. + + To do a "column eject", i.e., move to the top of the next column, do +`\columnfill'. This does not actually force an eject, however: it +merely inserts a kern of size `\@normalvsize' minus `\pagetotal' +(`\@normalvsize' being the usual height of the page; to implement +multicolumns, Eplain multiplies `\vsize' itself by the number of +columns). In most circumstances, a column break will be forced after +this kern (during the column splitting operation when the whole page is +output), as desired. + + The columns are separated by the value of the dimen parameter +`\gutter'. Default value is two picas. If you want to add vertical +material between the columns, use `\gutterbox'. For example, to put a +vertical line between columns, define `\gutterbox' as + + \def\gutterbox{\vbox to \dimen0{\vfil\hbox{\vrule height\dimen0}\vfil}}% + +The dimension counter `\dimen0' contains the height of the column. + + All the `\...columns' macros insert the value of the glue parameter +`\abovecolumnskip' before the multicolumn text, and the value of the +glue parameter `\belowcolumnskip' after it. The default value for both +of these parameters is `\bigskipamount', i.e., one linespace in plain +TeX. + + The macros take into account only the insertion classes defined by +plain TeX; namely, footnotes and `\topinsert's. If you have additional +insertion classes, you will need to change the implementation. + + Also, Eplain makes insertions the full page width. There is no +provision for column-width insertions. + + +File: eplain.info, Node: Footnotes, Next: Fractions, Prev: Multiple columns, Up: User definitions + +4.17 Footnotes +============== + +The most common reference mark for footnotes is a raised number, +incremented on each footnote. The `\numberedfootnote' macro provides +this. It takes one argument, the footnote text. + + If your document uses only numbered footnotes, you could make typing +`\numberedfootnote' more convenient with a command such as: + + \let\footnote = \numberedfootnote + +After doing this, you can type your footnotes as `\footnote{FOOTNOTE +TEXT}', instead of as `\numberedfootnote{FOOTNOTE TEXT}'. + + Eplain keeps the current footnote number in the count register +`\footnotenumber'. So, to reset the footnote number to zero, as you +might want to do at, for example, the beginning of a chapter, you could +say `\footnotenumber=0'. + + Plain TeX separates the footnote marker from the footnote text by an +en space (it uses the `\textindent' macro). In Eplain, you can change +this space by setting the dimension register `\footnotemarkseparation'. The +default is still an en. + + You can produce a space between footenotes by setting the glue +register `\interfootnoteskip'. The default is zero. + + `\parskip' is also set to zero by default before the beginning of +each footnote (but not for the text of the footnote). + + You can also control footnote formatting in a more general way: +Eplain expands the token register `\everyfootnote' before a footnote is +typeset, but after the default values for all the parameters have been +established. For example, if you want your footnotes to be printed in +seven-point type, indented by one inch, you could say: + + \everyfootnote = {\sevenrm \leftskip = 1in} + + By default, an `\hrule' is typeset above each group of footnotes on +a page. You can control the dimensions of this rule by setting the +dimension registers `\footnoterulewidth' and `\footnoteruleheight'. The +space between the rule and the first footnote on the page is determined +by the dimension register `\belowfootnoterulespace'. If you don't want +any rule at all, set `\footenoteruleheight=0pt', and, most likely, +`\belowfootnoterulespace=0pt'. The defaults for these parameters +typeset the rule in the same way as plain TeX: the rule is 0.4 points +high, 2 true inches wide, with 2.6 points below it. + + The space above the rule and below the text on the page is controlled +by the glue register `\skip\footins'. The default is a plain TeX +`\bigskip'. + + Eplain can create hypertext links for the footnote marks (*note +Footnote hyperlinks::). + + +File: eplain.info, Node: Fractions, Next: Paths, Prev: Footnotes, Up: User definitions + +4.18 Fractions +============== + +Exercise 11.6 of `The TeXbook' describes a macro `\frac' for setting +fractions, but `\frac' never made it into plain TeX. So Eplain +includes it. + + `\frac' typesets the numerator and denominator in `\scriptfont0', +slightly raised and lowered. The numerator and denominator are +separated by a slash. The denominator must be enclosed in braces if +it's more than one token long, but the numerator need not be. (This is +a consequence of `\frac' taking delimited arguments; see page 203 of +`The TeXbook' for an explanation of delimited macro arguments.) + + For example, `\frac 23/{64}' turns `23/64' into 23/64 (you can't see +the difference in the Info file). + + +File: eplain.info, Node: Paths, Next: Logos, Prev: Fractions, Up: User definitions + +4.19 Paths +========== + +When you typeset long pathnames, electronic mail addresses, or other +such "computer" names, you would like TeX to break lines at punctuation +characters within the name, rather than trying to find hyphenation +points within the words. For example, it would be better to break the +email address `letters@alpha.gnu.ai.mit.edu' at the `@' or a `.', +rather than at the hyphenation points in `letters' and `alpha'. + + If you use the `\path' macro to typeset the names, TeX will find +these good breakpoints. The argument to `\path' is delimited by any +character other other than `\' which does not appear in the name itself. +`|' is often a good choice, as in: + + \path|letters@alpha.gnu.ai.mit.edu| + + You can control the exact set of characters at which breakpoints +will be allowed by calling `\discretionaries'. This takes the same +sort of delimited argument; any character in the argument will +henceforth be a valid breakpoint within `\path'. The default set is +essentially all the punctuation characters: + + \discretionaries |~!@$%^&*()_+`-=#{}[]:";'<>,.?\/| + + If for some reason you absolutely must use `\' as the delimiter +character for `\path', you can set `\specialpathdelimiterstrue'. +(Other delimiter characters can still be used.) TeX then processes the +`\path' argument about four times more slowly. + + The `\path' macro comes from `path.sty', written by Nelson Beebe and +Philip Taylor and available at +`http://www.ctan.org/tex-archive/macros/latex/contrib/misc/path.sty'. + + +File: eplain.info, Node: Logos, Next: Boxes, Prev: Paths, Up: User definitions + +4.20 Logos +========== + +Eplain redefines the `\TeX' macro of plain TeX to end with `\null', so +that the proper spacing is produced when `\TeX' is used at the end of a +sentence. The other ...TeX macros listed here do this, also. + + Eplain defines `\AMSTeX', `\BibTeX' `\AMSLaTeX', `\LAMSTeX', `\LaTeX' `\MF', and +`\SLiTeX' to produce their respective logos. (Sorry, the logos are not +shown here.) Some spelling variants of these are also supported. + + All these macros come from `texnames.sty', compiled by Nelson Beebe +and available at +`http://www.ctan.org/tex-archive/info/biblio/texnames.sty'. + + +File: eplain.info, Node: Boxes, Next: Checking for PDF output, Prev: Logos, Up: User definitions + +4.21 Boxes +========== + +The solid rectangle that Eplain uses as a marker in unordered lists +(*note Lists::) is available by itself: just say `\blackbox'. + + You can create black boxes of arbitrary size with `\hrule' or +`\vrule'. + + You can also get unfilled rectangles with `\makeblankbox'. This +takes two explicit arguments: the height and depth of the rules that +define the top and bottom of the rectangle. (The two arguments are +added to get the width of the left and right borders, so that the +thickness of the border is the same on all four sides.) It also uses, +as implicit arguments, the dimensions of `\box0' to define the +dimensions of the rectangle it produces. (The contents of `\box0' are +ignored.) + + Here is an example. This small raised open box is suitable for +putting next to numbers in, e.g., a table of contents. + + \def\openbox{% + \ht0 = 1.75pt \dp0 = 1.75pt \wd0 = 3.5pt + \raise 2.75pt \makeblankbox{.2pt}{.2pt} + } + + Finally, you can put a box around arbitrary text with `\boxit'. This +takes one argument, which must itself be a (TeX) box, and puts a +printed box around it, separated by `\boxitspace' white space (3 points +by default) on all four sides. For example: + + \boxit{\hbox{This text is boxed.}} + + The reason that the argument must be a box is that when the text is +more than one line long, TeX cannot figure out the line length for +itself. Eplain does set `\parindent' to zero inside `\boxit', since it +is very unlikely you would want indentation there. (If you do, you can +always reset it yourself.) + + `\boxit' uses `\ehrule' and `\evrule' so that you can easily adjust +the thicknesses of the box rules. *Note Rules::. + + +File: eplain.info, Node: Checking for PDF output, Next: Loading LaTeX packages, Prev: Boxes, Up: User definitions + +4.22 Checking for PDF output +============================ + +pdfTeX is a TeX variant that can output both `.dvi' and `.pdf' (Adobe's +Portable Document Format) files (see +`http://www.ctan.org/tex-archive/systems/pdftex'). You might sometimes +want to know whether the target format is `.pdf' or `.dvi'. The +`\ifpdf' switch can be used to detect pdfTeX in PDF mode: + + \ifpdf + This text is produced when pdfTeX is in PDF mode. + \else + This text is produced when pdfTeX is in DVI mode, + or when some program other than pdfTeX is used. + \fi + + Keep in mind that `\ifpdf' is set based on the value of the +`\pdfoutput' primitive of pdfTeX at the time Eplain is loaded. If you +change the value of `\pdfoutput' after you load Eplain, `\ifpdf' will +not reflect the change. + + Eplain defines `\ifpdf' by incorporating Heiko Oberdiek's +`ifpdf.sty', which is available at +`http://www.ctan.org/tex-archive/macros/latex/contrib/oberdiek/ifpdf.sty'. + + +File: eplain.info, Node: Loading LaTeX packages, Prev: Checking for PDF output, Up: User definitions + +4.23 Loading LaTeX packages +=========================== + +Eplain provides a limited support for loading LaTeX packages (`.sty' +files--not `.cls'). This will mostly work for packages which were +designed with plain TeX compatibility in mind, which means that most +LaTeX packages cannot be loaded. The packages which are known to work +are listed below (*note Packages known to work::). If you discover a +working package which is not in the list, please report it to the +Eplain mailing list (*note Introduction::). + + To set up a pseudo-LaTeX environment for the packages, Eplain uses +`miniltx.tex' +(`http://www.ctan.org/tex-archive/macros/plain/graphics/miniltx.tex') +from the LaTeX graphics collection, written by David Carlisle and +Sebastian Rahtz (the collection is available at +`http://www.ctan.org/tex-archive/macros/latex/required/graphics'). +Eplain extends `miniltx.tex' to provide some additional features, e.g., +support for package options. + +* Menu: + +* The \usepackage command:: Command to load packages. +* Environment for loading packages:: Environment for the \usepackage commands. +* Packages known to work:: Supported packages. +* Packages known not to work:: Packages known not to work with Eplain. + + +File: eplain.info, Node: The \usepackage command, Next: Environment for loading packages, Up: Loading LaTeX packages + +4.23.1 The `\usepackage' command +-------------------------------- + +`\usepackage' loads a LaTeX package. Its syntax is similar to that of +LaTeX's `\usepackage' command: + + \usepackage[OPTIONS]{PACKAGES}[VERSION] + +where OPTIONS is a comma-separated list of package options, PACKAGES is +a comma-separated list of packages to load (without the `.sty' suffix), +and VERSION is a package version number given as a date in the format +`YYYY/MM/DD'. If an older version of the package is found, a warning +is issued. If several packages are loaded within a single `\usepackage' +command, the OPTIONS will be applied to each of the packages. As +usual, parameters in square brackets are optional and can be omitted +(together with the square brackets). + + For example: + + \usepackage[foo,bar]{pack1,pack2}[2005/08/29] + +will load packages `pack1' and `pack2', each with the options `foo' and +`bar', and will check that each of the packages are dated 2005/08/29 or +newer. + + +File: eplain.info, Node: Environment for loading packages, Next: Packages known to work, Prev: The \usepackage command, Up: Loading LaTeX packages + +4.23.2 Environment for loading packages +--------------------------------------- + +Some packages request that certain commands are executed after all +packages have been loaded. In LaTeX, this means that the commands are +executed at the beginning of the document, after the so-called +"preamble". Neither plain TeX nor Eplain have any kind of preamble; +therefore, Eplain requires that all packages be loaded inside a +`\beginpackages...\endpackages' block, for example: + + \beginpackages + \usepackage[foo,bar]{pack1} + \usepackage{pack2} + \endpackages + +This requirement enables Eplain to execute the "delayed" commands at +the end of the `\beginpackages...\endpackages' block. + + For the same reason, it is advisable to specify only one such block +per document, just like there is only one preamble in LaTeX. + + Some packages (and the pseudo-LaTeX environment, `miniltx.tex') +redefine TeX's primitive `\input' to be a macro. Non-primitive +`\input' is probably not what the user expects under plain TeX. +Therefore, at the beginning of the `\beginpackages...\endpackages' +block Eplain saves the meaning of `\input' as `\eplaininput' and +restores the original `\input' at the end of the block. This usually +means that the primitive `\input' is restored, unless you (or some +other macro package you've loaded directly) have redefined it before +calling `\beginpackages'. In case you need to access the +package-provided `\input', Eplain saves it as `\packageinput'. + + Sometimes you may encounter packages which make conflicting +redefinitions of `\input'. Common symptoms are TeX spewing +incomprehensible error messages or hanging in a loop at a call to +`\input'. This sometimes can be cured by restoring `\input' to +`\eplaininput' before loading each package. For example: + + \beginpackages + \usepackage{pack1} + \let\input\eplaininput + \usepackage{pack2} + \endpackages + + +File: eplain.info, Node: Packages known to work, Next: Packages known not to work, Prev: Environment for loading packages, Up: Loading LaTeX packages + +4.23.3 Packages known to work +----------------------------- + +The following table lists packages that had been tested and are known +to work with Eplain, and locations where you can find manuals for these +packages. Some of the short descriptions of the packages were taken +from the documentation for those packages. + +autopict (`2001/06/04 v1.1j Picture mode autoload file') + `http://tug.org/eplain/misc/ltpictur.pdf' + + This is the LaTeX "picture mode", started by `\begin{picture}' and + ended by `\end{picture}' (in LaTeX, this package is not explicitly + loaded since it is part of the LaTeX kernel). It provides + commands to draw simple figures inside your document without + resorting to any external tools. + +color (`1999/02/16 v1.0i Standard LaTeX Color (DPC)') +graphics (`2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR)') +graphicx (`1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)') + `http://www.ctan.org/tex-archive/macros/latex/required/graphics/grfguide.pdf' + + These packages are from the LaTeX graphics collection. They + provide commands for changing text/page colors, text rotation and + scaling, and much more. + + *Warning 1:* If you encounter problems loading one of these + packages under pdfTeX (more specifically, when pdfTeX reads + `supp-mis.tex'), the cause may be an outdated `supp-mis.tex' (part + of ConTeXt, a typesetting system for TeX) installed on your + system. The problem was fixed in `supp-mis.tex' + version 2004.10.26. You can obtain up-to-date versions of + `supp-mis.tex' and the accompanying `supp-pdf.tex' from + `http://www.ctan.org/tex-archive/macros/pdftex/graphics'. To + convince TeX to use the new files, you have the following options + in the decreasing order of preference: + + 1. put the new files in the same directory with your document; + + 2. overwrite the outdated files installed by your TeX + distribution; + + 3. install the new `supp-mis.tex' and `supp-pdf.tex' files in + the relevant subdirectory of your local `texmf' tree (for + info on TeX directory structure see + `http://www.tex.ac.uk/cgi-bin/texfaq2html?label=tds'); + + 4. upgrade your ConTeXt installation. + + Note that option 1 is the safest but provides the fix only for + your current document. Options 2 and 3 will usually suffice for + Eplain but may break ConTeXt. Option 4 is the most general but is + more complicated than the first three. Be sure to backup any + files you overwrite. Also keep in mind that upgrading your TeX + distribution may overwrite files you install in the system `texmf' + tree. + *End of warning 1.* + + *Warning 2:* If you encounter problems using the `\pagecolor' + command from the `color.sty' package under pdfTeX, the cause may + be an outdated pdfTeX color and graphics driver `pdftex.def'. The + problem was fixed in `pdftex.def' version 0.03p. You can obtain + an up-to-date version from + `http://www.ctan.org/tex-archive/graphics/pdftex/pdftex.def'. + *End of warning 2.* + + The `graphics'/`graphicx' packages have the option `draft' which + instructs `\includegraphics' not to include the graphics but + instead typeset a box with the dimensions of the graphics and the + name of the graphics file in typewriter type at the center of the + box. These packages expect the LaTeX-provided command `\ttfamily' + to switch to the typewrite type. This command is not defined by + `miniltx.tex', therefore Eplain defines it and makes it equivalent + to plain TeX's `\tt'. + + *Note Hyperlinks (xhyper.tex)::, for the demonstration of text + rotation and graphics inclusion using the `graphicx' package, and + using the `color' package to colorize hypertext links. + + Klaus Ho"ppner has written a nice introduction to the LaTeX + graphics packages and different graphics formats. You can + download it from + `http://www.tug.org/pracjourn/2005-3/hoeppner' + +epstopdf (`2001/02/04 v1.1 Conversion with epstopdf on the fly (HO)') + `http://www.ctan.org/tex-archive/macros/latex/contrib/oberdiek' + + This package does on-the-fly conversion of Encapsulated PostScript + (EPS) graphics into Portable Document Format (PDF) graphics for + inclusion with the `\includegraphics' command from the + `graphics'/`graphicx' packages, so that you do not have to + explicitly call the `epstopdf' script. + +psfrag (`1998/04/11 v3.04 PSfrag (MCG)') + `http://www.ctan.org/tex-archive/macros/latex/contrib/psfrag/pfgguide.pdf' + + PSfrag allows the user to precisely overlay Encapsulated PostScript + (EPS) files with arbitrary (La)TeX constructions. In order to + accomplish this, the user places a simple text "tag" in the + graphics file, as a "position marker" of sorts. Then, using simple + (La)TeX commands, the user instructs PSfrag to remove that tag from + the figure, and replace it with a properly sized, aligned, and + rotated (La)TeX equation. + +soul (`2003/11/17 v2.4 letterspacing/underlining (mf)') + `http://www.ctan.org/tex-archive/macros/latex/contrib/soul' + + This package provides hyphenatable letterspacing (spacing out), + underlining, and some derivatives. The package is optimized for + LaTeX, but works with plain TeX--you don't actually need to load + it with the `\usepackage' command, just say `\input soul.sty'. If + you intend to use the highlighting macros of `soul', don't forget + to load the `color' package. + +url (`2005/06/27 ver 3.2 Verb mode for urls, etc.') + `http://www.ctan.org/tex-archive/macros/latex/contrib/misc/url.sty' + + This package provides a form of `\verbatim' that allows line + breaks at certain characters or combinations of characters, + accepts reconfiguration, and can usually be used in the argument to + another command. It is intended for email addresses, hypertext + links, directories/paths, etc., which normally have no spaces. + + Eplain can create hypertext links with the `\url' command (*note + URL hyperlinks::). + + Be sure to get a version dated at least 2005/06/27, as older + versions have problems in plain TeX. + + +File: eplain.info, Node: Packages known not to work, Prev: Packages known to work, Up: Loading LaTeX packages + +4.23.4 Packages known not to work +--------------------------------- + +The following packages are known not to work with Eplain: + +hyperref + `http://www.ctan.org/tex-archive/macros/latex/contrib/hyperref' + + This package depends heavily on LaTeX, so that it is mostly + unusable outside of LaTeX. Eplain provides its own macros for + creating hyperlinks, see *Note Hyperlinks::. + +pict2e (`2005/07/15 v0.2r Improved picture commands (HjG,RN)') + `http://www.ctan.org/tex-archive/macros/latex/contrib/pict2e' + +xcolor (`2005/06/06 v2.03 LaTeX color extensions (UK)') + `http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor' + + +File: eplain.info, Node: Hyperlinks, Next: Arrow theoretic diagrams, Prev: User definitions, Up: Top + +5 Hyperlinks +************ + +This chapter describes the support which Eplain provides for hypertext +links ("hyperlinks" for short). Hyperlinks can be created implicitly +by the cross-reference, indexing and other macros in Eplain. Macros +for constructing explicit hyperlinks are also provided. + +* Menu: + +* Introduction to hyperlinks:: +* Explicit hyperlinks:: +* Implicit hyperlinks:: +* Hyperlink drivers:: +* Setting hyperlink types and options:: +* Turning hyperlinks on/off:: + + +File: eplain.info, Node: Introduction to hyperlinks, Next: Explicit hyperlinks, Up: Hyperlinks + +5.1 Introduction to hyperlinks +============================== + +The original TeX engine has no built-in support for hyperlinks (a.k.a. +hypertext links). Many of the present-day file formats with +hyperlinking capabilities did not even exist at the time TeX was +written. However, TeX's `\special' primitive can be used to instruct +TeX to write special directives into its `.dvi' output file. These +directives are not interpreted by TeX in any way; they are intended for +programs which process the `.dvi' files produced by TeX, be it printing +or converting to other formats, such as `.ps' or `.pdf'. + + Another approach is to extend the original TeX engine with the +ability to generate one of the hyperlinking formats; TeX's set of +primitives can be extended to include hyperlink commands. This is the +approach used by the pdfTeX engine, which is capable of producing +`.pdf' files directly from the TeX source, skipping the `.dvi' +generation and processing step. + + It turns out that the sets of commands for different formats are +mostly not interchangeable, as each of the file formats has its own +quirks and capabilities. And this is where Eplain "hyperlink drivers" +come into play. + + In order for Eplain to generate proper commands, Eplain has to know +two things: which engine or `.dvi' processor you are using, and the set +of commands it understands. + + The knowledge about the commands that the various processors +understand is programmed into Eplain's hyperlink drivers. Eplain +provides three drivers: `hypertex' (implementation of the HyperTeX +standard, see `http://arxiv.org/hypertex'), and `pdftex' and `dvipdfm' +(named after the programs which process the hyperlink commands, pdfTeX +and dvipdfm). Therefore, Eplain can only produce HyperTeX commands and +hyperlink commands for one of these two programs--except that the +extended `dvipdfmx' program can be used as well as the original +`dvipdfm', since they are compatible. + + To tell Eplain which `.dvi' processor or extended TeX engine you are +using, use the command `\enablehyperlinks'. + + For example: + + \enablehyperlinks + +instructs Eplain to attempt to automatically detect which driver to +use, as follows: if it detects pdfTeX in PDF mode, it loads the +`pdftex' driver. If it does not detect pdfTeX in PDF mode, the +`hypertex' driver is loaded. The detection is based on the `\ifpdf' +switch (*note Checking for PDF output::). + + If necessary, you can explicitly specify the driver name: + + \enablehyperlinks[pdftex] + +will start producing hyperlinks under the assumption that you are using +pdfTeX. + + Eplain does not produce any hyperlinks until you explicitly enable +them with `\enablehyperlinks'. For one thing, this keeps Eplain +backward-compatible with previous releases without hyperlink support. +For another, you may be using a program other than pdfTeX or `dvipdfm', +which does not understand their hyperlink commands or the HyperTeX +commands. + +Concepts and Terminology +------------------------ + +In general, hyperlinks work as follows. You mark some place in your +document as a hyperlink destination, associating a "hyperlink label" +with that destination. Next, somewhere within your document, you +create a hyperlink, using a label to identify the destination you want +this link to point to. A hyperlink is a region in the document (which +can take many forms, for example, text or a picture); when a user +clicks on that region, they will be taken to a place in the document +marked by the corresponding destination. The following two sections +(*Note Explicit hyperlinks::, and *Note Implicit hyperlinks::) describe +the macros you can use to define destinations and create links pointing +to those destinations. + + In the rest of this chapter, we will often need to refer to links and +destinations jointly, in which case we will use the term "hyperlinks". +We will use the terms "links" and "destinations" in cases when we need +to refer specifically to links or destinations. + + Hyperlink drivers provide several kinds of links and destinations. +We will refer to them as "link types" and "destination types". + + For example, one of the destination types that the `pdftex' driver +provides is the `xyz' type; when the user follows a link pointing to an +`xyz' destination, the exact location marked by that destination is +displayed. Another destination type provided by the `pdftex' driver is +the `fit' type; when the user follows a link pointing to a `fit' +destination, the page containing that destination is zoomed to fit into +the window in which the document is displayed. + + Similarly, drivers support various link types. For example, with the +`pdftex' driver, the usual link type used to refer to destinations in +the current document is called `name'. You can also create a link +pointing to another local document (by using the `filename' link type) +or to a URL (by using the `url' link type). + + In addition, each hyperlink driver supports a number of destination +and link "options". By setting these options you can customize +hyperlink parameters (e.g., the thickness of the border drawn around a +hyperlink) or pass information to hyperlinks (for example, file name of +a document, for a link pointing to a destination in another document). + + *Note Hyperlink drivers::, for the description of hyperlink types and +options supported by the drivers. *Note Setting hyperlink types and +options::, for the information on how to set hyperlink options. + + +File: eplain.info, Node: Explicit hyperlinks, Next: Implicit hyperlinks, Prev: Introduction to hyperlinks, Up: Hyperlinks + +5.2 Explicit hyperlinks +======================= + +Explicit hyperlinks are created by you, in the source of your document. +The simplest command is `\hldest', which marks the current position in +your document as a destination: + + \hldest{TYPE}{OPTIONS}{LABEL} + +Here TYPE is one of the destination types supported by the hyperlink +driver (*note Hyperlink drivers::), OPTIONS is a comma-separated list +of option assignments, and LABEL is the hyperlink label to associate +with this destination. This label will identify the destination when +creating links pointing to this destination. For example, with the +`pdftex' driver, the command + + \hldest{xyz}{zoom=2000}{index} + +creates a destination of type `xyz' ("the current position"), sets the +magnification ratio for this destination to be 200%, and associates the +label `index' with the destination. + + Another command, `\hlstart', paired with `\hlend', turns all +intervening material into a link: + + \hlstart{TYPE}{OPTIONS}{LABEL} ... \hlend + +Here TYPE, OPTIONS and LABEL have the same meaning as for `\hldest'. +Continuing the previous example, + + \hlstart{name}{bstyle=U,bwidth=2}{index} Index\hlend + +typesets the word `Index' as a link with underline border of +width 2 PostScript points, pointing to the named destination `index' +defined in the previous example. (The other options, like highlight +mode and border color, are determined by the defaults, *note Setting +default types and options::). + + The LABEL argument of both `\hldest' and `\hlstart' can contain +special characters (such as `#', `%', `&', `~', etc.) without any +escaping. This is especially important for URL links supported by some +drivers (*note Hyperlink drivers::). + + Both `\hldest' and `\hlstart' ignore following spaces. + + Both `\hldest' and `\hlstart' expand the first token of OPTIONS +once, so you can save a list of options in a macro and pass it for the +OPTIONS. For example: + + \def\linkopts{bstyle=U,bwidth=2} + \hlstart{name}{\linkopts}{index}Index\hlend + +is functionally equivalent to the previous example. + + *Note Hyperlinks (xhyper.tex)::, for a demonstration of the usage of +explicit hyperlinks. + + +File: eplain.info, Node: Implicit hyperlinks, Next: Hyperlink drivers, Prev: Explicit hyperlinks, Up: Hyperlinks + +5.3 Implicit hyperlinks +======================= + +"Implicit hyperlinks" are hyperlinks created implicitly by various +Eplain macros, such as the macros for citations, cross-references, +indexing, etc. + + All such macros are divided into "link groups" and "destination +groups" (or "linkgroups" and "destgroups" for short) so that parameters +can be set individually for each group. For example, all equation +macros which define a destination are assigned to the `eq' destgroup; +equation macros which create a link are assigned to the `eq' linkgroup. +By setting parameters for the `eq' linkgroup (destgroup), you can +uniformly customize all links (destinations) related to equation +references, without interfering with settings for the other groups. + + *Note Setting hyperlink types and options::, for information on how +to set parameters for a group. + + Here is the list of the linkgroups: + + hrefint, hrefext, url, cite, ref, xref, eq, idx, foot, footback. + + And here are the destgroups: + + bib, li, definexref, xrdef, eq, idx, foot, footback. + + *Note Hyperlinks (xhyper.tex)::, for a demonstration of the usage of +implicit hyperlinks. + + The following subsections describe each of the linkgroups and +destgroups and the hyperlink support provided. + +* Menu: + +* General hyperlinks:: hrefint, hrefext +* URL hyperlinks:: url +* Citation hyperlinks:: cite, bib +* List hyperlinks:: li +* Cross-reference hyperlinks:: definexref, ref +* Page reference hyperlinks:: xrdef, xref +* Equation reference hyperlinks:: eq +* Index hyperlinks:: idx +* Footnote hyperlinks:: foot, footback +* Contents hyperlinks:: + + +File: eplain.info, Node: General hyperlinks, Next: URL hyperlinks, Up: Implicit hyperlinks + +5.3.1 General hyperlinks: hrefint, hrefext +------------------------------------------- + +`\href{URL}{TEXT}' typesets TEXT as a link to URL. It basically does +what the explicit hyperlink macros do (*note Explicit hyperlinks::), +but is more convenient (at the expense of flexibility). + + If URL starts with `#', the rest of URL is assumed to be a local +hyperlink destination name (destination within the same document). +Parameters for these links can be set by customizing the `hrefint' +linkgroup. For example: + + See \href{#intro}{Introduction} + +will make `Introduction' into an internal link, which might have been +created, e.g., with `\xrdef{intro}'. + + If URL does not start with `#', it is assumed to be a URL link. +Parameters for these links can be set by customizing the `hrefext' +linkgroup. The special characters (such as `#' and `~') in the URL +don't need to be escaped. For example: + + \href{http://tug.org/eplain/doc/eplain.html#Hyperlinks}{Hyperlinks + in Eplain} + +*Note URL hyperlinks::, for another way to create URL hyperlinks. + + The TEXT argument of `\href' can contain verbatim text (*note +Verbatim listing::) or other macros which manipulate character +catcodes. For example: + + \href{#WeirdChars}{The weird chars \verbatim #&%$~|endverbatim} + + `\href' does not currently handle other link types, such as `file:' +and `run:' links. + + +File: eplain.info, Node: URL hyperlinks, Next: Citation hyperlinks, Prev: General hyperlinks, Up: Implicit hyperlinks + +5.3.2 URL hyperlinks: url +-------------------------- + +The `url' linkgroup covers the `\url' command from the LaTeX package `url' +(*note Packages known to work::), as well as any new `\url'-like +commands you define. The type for this linkgroup is set to `url' by +the drivers which support this link type. `url' links use the +parameter to the `\url' command as the URL to point to. + + You may be using the `\url' command to typeset something other than +a URL, e.g., a path, for which you do not want a link to be created; in +that case, you can disable the `url' linkgroup with the command +`\hloff[url]' (*note Turning hyperlinks on/off for a group::). + + By default, URL (and other types of) links are boxed, so that they +are visually marked even if you do not load the LaTeX `color' package +(*note Loading LaTeX packages::) and therefore link text is not +colored. You can see the effect by compiling the following code +snippet (be sure to get a modern `url.sty', older versions do not work +in plain TeX; *note Packages known to work::): + + \input eplain + \beginpackages + \usepackage{url} + \endpackages + + \enablehyperlinks + + \url{http://foo/bar} + \bye + + If the hyperlink driver you use supports the link option `bwidth' +(*note Hyperlink drivers::), you can produce colored links with no +border around them. Try this: + + \input eplain + \beginpackages + \usepackage{url} + \usepackage{color} + \endpackages + + \enablehyperlinks + \hlopts{bwidth=0} + + \url{http://foo/bar} + \bye + +The command `\hlopts{bwidth=0}' sets border width to zero as the +default for all links, and loading the `color' package automatically +colors links using the default color (*note Options supported by all +drivers::). If you want the border width setting to apply to URL links +only, say `\hlopts[url]{bwidth=0}' (*note Setting hyperlink types and +options::). + + +File: eplain.info, Node: Citation hyperlinks, Next: List hyperlinks, Prev: URL hyperlinks, Up: Implicit hyperlinks + +5.3.3 Citation hyperlinks: cite, bib +------------------------------------- + +The `cite' linkgroup includes only the `\cite' command (*note +Citations::). `\cite' turns each of the references in the list into a +link pointing to the respective bibliography entry produced by the +`\bibliography' command. + + The `bib' destgroup includes the macros related to the +`\bibliography' command (*note Citations::). `\bibliography' inputs a +`.bbl' file, which contains a list of bibliography entries. For each +of the entries, a destination is defined. + + Both commands use the citation label as the hyperlink label. + + +File: eplain.info, Node: List hyperlinks, Next: Cross-reference hyperlinks, Prev: Citation hyperlinks, Up: Implicit hyperlinks + +5.3.4 List hyperlinks: li +-------------------------- + +The `li' destgroup consists of the `\li' command (*note Lists::), which +defines a destination if you supply the optional argument +(cross-reference label). This label is also used as the hyperlink +label. + + +File: eplain.info, Node: Cross-reference hyperlinks, Next: Page reference hyperlinks, Prev: List hyperlinks, Up: Implicit hyperlinks + +5.3.5 Cross-reference hyperlinks: definexref, ref +-------------------------------------------------- + +The `definexref' destgroup is for the `\definexref' command (*note +Defining generic references::). `\definexref' defines a destination +using the cross-reference label (the first argument) as the hyperlink +label. + + The `ref' linkgroup includes `\refn' and `\xrefn' (they are +synonyms), `\ref', and `\refs' (*note Using generic references::). + + `\refn' turns the cross-reference it produces into a link, using the +cross-reference label as the hyperlink label. If an optional argument +is present, it is tied by `\reftie' to the reference and become part of +the link. + + `\ref' works similarly to `\refn'. It takes an optional argument, +which is treated the same way as the optional argument to `\refn'. In +addition, `\ref' can produce a "class word". Both the optional +argument and the class word become part of the link, when present. The +cross-reference is tied by `\reftie' to the preceding word. The +optional argument is separated from the class word by `\refspace'. + + Unlike `\ref', `\refs' does not take an optional argument and does +not make the class word part of the link, which is appropriate for its +intended use. + + +File: eplain.info, Node: Page reference hyperlinks, Next: Equation reference hyperlinks, Prev: Cross-reference hyperlinks, Up: Implicit hyperlinks + +5.3.6 Page reference hyperlinks: xrdef, xref +--------------------------------------------- + +The `xrdef' destgroup is for `\xrdef' (*note Page references::). +`\xrdef' defines a destination using cross-reference label as the +hyperlink label. + + The `xref' linkgroup includes the `\xref' command (*note Page +references::). `\xref' turns its optional argument (followed by +`\refspace'), `\xrefpageword' and the cross-reference (page number) +into a link, using the cross-reference label as the hyperlink label. + + +File: eplain.info, Node: Equation reference hyperlinks, Next: Index hyperlinks, Prev: Page reference hyperlinks, Up: Implicit hyperlinks + +5.3.7 Equation reference hyperlinks: eq +---------------------------------------- + +All commands that define equation labels are part of the `eq' destgroup. +These are `\eqdef', `\eqdefn', `\eqsubdef' and `\eqsubdefn' (*note +Equation references::). All these commands use the equation label as +the hyperlink label. However, if the equation label is empty, they +make up a (hopefully) unique hyperlink label for the destination. This +label will be used for the link when you refer to this empty-labeled +equation with one of the equation reference macros. + + The command `\phantomeqlabel' is called to generate hyperlink labels +for the empty-labeled equations. By default, it produces the labels in +the format `PHEQNUMBER', where NUMBER comes from the count register +`\phantomeqnumber'; this count register is incremented at every +empty-labeled equation definition. + + The commands `\eqref' and `\eqrefn' (*note Equation references::) +form the `eq' linkgroup. These commands take an optional argument, +which, when present, is tied with `\reftie' to the equation reference +and becomes part of the link. The equation label is used for the +hyperlink label; if the label is empty, the link is for the label +generated for the last empty-labeled equation. + + +File: eplain.info, Node: Index hyperlinks, Next: Footnote hyperlinks, Prev: Equation reference hyperlinks, Up: Implicit hyperlinks + +5.3.8 Index hyperlinks: idx +---------------------------- + +All indexing commands (`\idx', `\idxname', `\idxmarked', +`\idxsubmarked' and their silent equivalents, *note Indexing +commands::) form the `idx' destgroup. The `idx' linkgroup consists of +the macros which are used to typeset the index when you say `\readindexfile{INDEX-LETTER}' +(*note Typesetting an index::). + + To create the links in index entries, Eplain uses MakeIndex's +"encapsulation" feature. When you use an indexing macro to mark an +index term, Eplain writes out a line to the `.idx' file of the +following general form: + + \indexentry{ENTRY|PAGEMARKUP}{PAGENO} + +where ENTRY is the index entry (converted into the internal format that +MakeIndex understands), CS is the markup command you specified with the +`pagemarkup=CS' optional argument to the indexing commands (*note +Modifying index entries::), and PAGENO is the page number on which the +term appeared. When processing the `.idx' file, MakeIndex makes the +page number an argument to the page markup command ("encapsulates" the +page number), so the page number in the `.ind' file appears as +`\CS{PAGENO}'. Eplain internally replaces the CS command name with its +own command, which, in addition to calling the original `\CS' +encapsulator, turns the page number into a link. + + Eplain provides two approaches to linking page numbers in the index +to locations of index terms in the text. + +* Menu: + +* Exact destinations for index terms:: +* Page destinations for index terms:: +* Choosing destination placement:: +* Index page list and page range parsers:: +* Hyperlinks in see and see also entries:: + + +File: eplain.info, Node: Exact destinations for index terms, Next: Page destinations for index terms, Up: Index hyperlinks + +5.3.8.1 Exact destinations for index terms +.......................................... + +In this approach, each command that marks an index term defines a unique +destination and passes its label on to the `.idx' file as part of the +`\indexentry' command. The `\indexentry' line that Eplain writes to +the `.idx' file becomes + + \indexentry{ENTRY|hlidx{LABEL}{CS}}{PAGENO} + +where `\hlidx' is the command that is defined by Eplain to take three +arguments: a hyperlink label (LABEL), a name of page number +encapsulator (CS) and a page number (PAGENO). In the `.ind' file that +MakeIndex will generate, the page number will now appear as + + \hlidx{LABEL}{CS}{PAGENO} + +The result of this command is `\CS{PAGENO}', wrapped up into a link +pointing to LABEL destination. + + The hyperlink labels for the index terms are generated by the `\hlidxlabel' +command, by default in the format `IDXNUMBER', where NUMBER is the +value of the count register `\hlidxlabelnumber'. This count register +is incremented at each index term. + + The advantage of this approach, as compared to the second approach +described below, is that links in the index point to exact locations of +the indexed terms on the page. The disadvantage of this approach is +that MakeIndex will regard _all_ index entries as distinct, because +each one contains a (unique) hyperlink label. This disadvantage can be +partially overcome by the script `idxuniq' distributed with Eplain in +the `util' directory. This script filters out `\indexentry' lines +differing only in the hyperlink label but identical otherwise. You +should process the `.idx' with this script before passing it on to +MakeIndex. For example: + + prompt$ ./idxuniq file.idx | makeindex > file.ind + +Still, this solution is not ideal, as the page-range formation ability +of MakeIndex will not work, and there will be problems of apparently +identical index entries clashing (e.g., when a range-end entry appears +on the same page as another entry with the same definition; `idxuniq' +will not filter out the second entry). + + +File: eplain.info, Node: Page destinations for index terms, Next: Choosing destination placement, Prev: Exact destinations for index terms, Up: Index hyperlinks + +5.3.8.2 Page destinations for index terms +......................................... + +In the second approach, Eplain does not write out any destination labels +for the index terms. Instead, Eplain writes out a wrapper for page +number encapsulator which can parse the page number and generate a link +pointing to the _page_ on which the term appeared. On top of each page +containing an index term, Eplain defines a destination with label +produced by `\hlidxpagelabel'. The `\hlidxpagelabel' command takes a +single argument (page number NUMBER) and by default produces the label +in the format `IDXPGNUMBER'. + + With this approach, the `\indexentry' line which Eplain writes to +the `.idx' file looks like this: + + \indexentry{ENTRY|hlidxpage{CS}}{PAGENO} + +where `\hlidxpage' is the command that is defined by Eplain to take two +arguments: a name of page number encapsulator (CS) and a page number +(PAGENO). In the `.ind' file that MakeIndex will generate, the page +number will appear as + + \hlidxpage{CS}{PAGENO} + + The advantage of this approach is that all features of MakeIndex are +intact. The drawback is that links in the index do not point to exact +locations of indexed terms on a page, but to the top of a page on which +the term appears. + + Another disadvantage is that this approach depends on the page range +and page list separators which MakeIndex was configured to output. +`\hlidxpage' must be able to parse the first page number in a page +range like `1--4'. In addition, page list parsing is needed because +MakeIndex combines two consecutive page numbers in one call to the page +number encapsulator, so `\hlidxpage' can be passed, e.g., `1, 2' for +the PAGENO. In this last case, `\hlidxpage' splits the two page +numbers, applies `\CS' to each of them, and makes each of the page +numbers a link to the appropriate page. Note that this will alter +typesetting slightly, because now the page list separator (a comma +followed by a space, by default) is not typeset using the page number +encapsulator (`\CS'). + + Eplain's defaults for the page list and page number delimiters are +the same as those in MakeIndex, a comma followed by a space (`, ') and +two dashes (`--'), respectively. If you customize MakeIndex to use +different delimiters, you must not forget to let Eplain know about them +with the commands + + \setidxpagelistdelimiter{LIST-DELIM} + \setidxpagerangedelimiter{PAGE-DELIM} + +(*note Page list and page range parsers::). + + +File: eplain.info, Node: Choosing destination placement, Next: Index page list and page range parsers, Prev: Page destinations for index terms, Up: Index hyperlinks + +5.3.8.3 Choosing destination placement +...................................... + +The approach that Eplain should use for the index terms can be selected +in the `\enablehyperlinks' command. The optional argument it accepts is +a comma-separated list of options. The `idxexact' option selects the +first approach, `idxpage' the second, and `idxnone' disables hyperlink +support for the index terms altogether, in case you want to stop Eplain +from writing its link wrappers into the `.idx' file. The default is +`idxpage'. + + For example: + + \enablehyperlinks[idxexact] + +selects the first approach ("exact index links"). + + +File: eplain.info, Node: Index page list and page range parsers, Next: Hyperlinks in see and see also entries, Prev: Choosing destination placement, Up: Index hyperlinks + +5.3.8.4 Index page list and page range parsers +.............................................. + +The macros that Eplain uses to parse page lists and page ranges, +`\idxparselist' and `\idxparserange', can sometimes be useful when +defining page number encapsulators. *Note Page list and page range +parsers::, for the description of these commands and an example of their +usage. + + +File: eplain.info, Node: Hyperlinks in see and see also entries, Prev: Index page list and page range parsers, Up: Index hyperlinks + +5.3.8.5 Hyperlinks in see and see also entries +.............................................. + +There is no automatic support for hyperlinks with "see" and "see also" +index entries, as there is not enough information to trace the +parameters of `\indexsee' and `\indexseealso' to corresponding index +entries. But if desired, this can be implemented with `\hldest' and +`\hlstart' (*note Explicit hyperlinks::); for example: + + \sidx{semantic theory of truth@% + \leavevmode\hldest{}{}{idx:theo truth}semantic theory of truth} + ... + \sidx[seealso]{truth}[definition of]% + {\hlstart{}{}{idx:theo truth}semantic theory of truth\hlend} + + +File: eplain.info, Node: Footnote hyperlinks, Next: Contents hyperlinks, Prev: Index hyperlinks, Up: Implicit hyperlinks + +5.3.9 Footnote hyperlinks: foot, footback +------------------------------------------ + +The `foot' link and destination groups include the `\numberedfootnote' +and `\footnote' macros (*note Footnotes::). The `footback' groups +include the same macros, but control parameters for links and +destinations created inside the footnote to point back to the footnote +mark within the text body. + + The macros use hyperlink labels generated by `\hlfootlabel' and `\hlfootbacklabel'. +The default formats for the labels are `FOOTNUMBER' and `FOOTBNUMBER', +respectively, where NUMBER is the value of the count register `\hlfootlabelnumber'. +This register is incremented at every footnote. + + Generally, footnote hyperlinks are not of much use, because the +footnotes are usually placed on the same page as the footnote mark. +Therefore, footnote hyperlinks are disabled by default. Here is how you +can turn them on selectively, without affecting the other kinds of +hyperlinks (*note Turning hyperlinks on/off for a group::): + + \hldeston[foot,footback] + \hlon[foot,footback] + + +File: eplain.info, Node: Contents hyperlinks, Prev: Footnote hyperlinks, Up: Implicit hyperlinks + +5.3.10 Contents hyperlinks +-------------------------- + +There is currently no special support for hyperlinks in the table of +contents (*note Contents::), but implementing them with the `\hldest' +and `\hlstart ... \hlend' commands (*note Explicit hyperlinks::) should +be possible. + + +File: eplain.info, Node: Hyperlink drivers, Next: Setting hyperlink types and options, Prev: Implicit hyperlinks, Up: Hyperlinks + +5.4 Hyperlink drivers +===================== + +This section describes the hyperlink drivers: the types of hyperlinks +they support, and the options they accept. During the first reading, +you may only want to skim through this section. + + Some of the descriptions below come from `Portable Document Format +Reference Manual Version 1.3', March 11, 1999. + +* Menu: + +* Options supported by all drivers:: +* Hyperlink driver hypertex:: +* Hyperlink drivers pdftex and dvipdfm:: +* Hyperlink driver nolinks:: + + +File: eplain.info, Node: Options supported by all drivers, Next: Hyperlink driver hypertex, Up: Hyperlink drivers + +5.4.1 Options supported by all drivers +-------------------------------------- + +This subsection describes the destination and link options which are +supported by all hyperlink drivers. + +Destination options supported by all drivers +............................................ + +`raise' + Specifies how much to raise destinations above the baseline. When + set to zero or empty, destinations are placed at the baseline. + + It is usually convenient to set this option to some variable + parameter, so that the height to which destinations are raised is + automatically adjusted according to the current context. For + example, setting it to `\normalbaselineskip' (or some fraction of + it, like `1.7\normalbaselineskip') makes the setting appropriate + for different point sizes, in case your document uses more than + one. + + The default setting is `\normalbaselineskip'. Initially, the + destgroups do not define this option, so they fall back on the + default, except for the `eq' destgroup, for which this option is + set to `1.7\normalbaselineskip', to accommodate the usual cases of + large operators in displayed math. + + Example: `\hldestopts[eq]{raise=2.5\normalbaselineskip}' + +Link options supported by all drivers +..................................... + +`colormodel' +`color' + These two options define the color to be used for rendering the + link text. The colors are used only when a `\color' command is + defined, e.g., by loading the LaTeX `color' package (*note + Packages known to work::). The `\color' command is called as + `\color[COLORMODEL]{COLOR}', where COLORMODEL and COLOR are the + definitions of the `colormodel' and `color' options, respectively. + However, if COLORMODEL is empty, the optional argument to + `\color' is omitted; and if COLOR is empty, the `\color' command + is omitted altogether. The default setting is `COLORMODEL=cmyk' + and `COLOR=0.28,1,1,0.35'. + + When specifying colors with several components delimited by commas + (e.g., RGB and CMYK colors in the LaTeX `color' package), it is not + possible to specify the components directly in the option list of + `\hlopts', because comma is the option list delimiter. With the + `color' package, it is possible to specify such colors by defining + a custom color with `\definecolor' and using the new color name + with an empty COLORMODEL (see examples below). + + Examples: + + \hlopts{colormodel=,color=blue}% predefined color + \definecolor{mycolor}{rgb}{.3,.8,.95} + \hlopts{colormodel=,color=mycolor}% custom color + \hlopts{colormodel=gray,color=.4} + + +File: eplain.info, Node: Hyperlink driver hypertex, Next: Hyperlink drivers pdftex and dvipdfm, Prev: Options supported by all drivers, Up: Hyperlink drivers + +5.4.2 Hyperlink driver `hypertex' +--------------------------------- + +HyperTeX is a standard for inclusion of hyperlink information in TeX +(and LaTeX) documents (see `http://arxiv.org/hypertex'). This standard +defines a set of hyperlink tags implemented as `\special' commands +written into the DVI file. The major advantage of such standard is +that a single `.dvi' file containing HyperTeX commands can be viewed by +any HyperTeX-enabled viewer (e.g., any more or less modern version of `xdvi') +or converted to other file formats (e.g., PDF) by any HyperTeX-enabled +DVI converter (e.g., `dvipdfmx' or `dvips' with Ghostscript's `ps2pdf' +script). + + The downside to the standard is that it is by design "the common +factor" of other formats supporting hyperlinks, so many features of a +particular file format cannot be supported by HyperTeX. Therefore, if +you need to use special features of a particular format, HyperTeX is +not a good choice. For the PDF file format, Eplain provides the +`pdftex' and `dvipdfm' drivers which provide fine control over the PDF +options (*note Hyperlink drivers pdftex and dvipdfm::). + + For more information on programs which support the HyperTeX standard, +please see + + `http://arxiv.org/hypertex' + `http://www.tug.org/tex-archive/support/hypertex/hypertex' + +For convenience, we list a few HyperTeX-enabled converters: + +`dvips' + Note that you need to pass the `-z' option to `dvips' to tell it + to preserve the information about the hyperlinks. To generate a + `.pdf' file with hyperlinks, you can use the `ps2pdf' script of Ghostscript. + For example, if `foo.tex' is a TeX file using HyperTeX commands, + then + + prompt$ tex foo.tex + prompt$ dvips -z foo.dvi -o + prompt$ ps2pdf foo.ps + + will produce `foo.pdf' with hyperlinks. + +`dvipdfm' +`dvipdfmx' + No special command line arguments are required, these programs + automatically detect the HyperTeX commands. + + + One more note is in place: support for the HyperTeX commands varies +from one previewer/converter to another, so you might need to experiment +to see if what you need is supported by the program(s) you intend to +use. For example, dvips(k) as of version 5.92b converts all internal +hyperlinks into page links pointing to a page containing the +destination, so that "exact" linking to destinations is not possible +(this was confirmed to be a bug and most probably has already been fixed +in later versions of dvips(k)); dvipdfm as of version 0.13.2c and +dvipdfmx as of version 20040411 do not correctly parse links to +external local files, and produce a URL link instead of a file link. + +* Menu: + +* Destination types for hypertex:: +* Destination options for hypertex:: +* Link types for hypertex:: +* Link options for hypertex:: + + +File: eplain.info, Node: Destination types for hypertex, Next: Destination options for hypertex, Up: Hyperlink driver hypertex + +5.4.2.1 Destination types for `hypertex' +........................................ + +`xyz' + "Current position". This is the default type. + + Example: `\hldest{xyz}{}{dest123}' + +`raw' + The destination specification (in the form of a HyperTeX + `\special') is taken from the command sequence `\CS', where CS is + the value of the `cmd' option. In the definition of `\CS', use `\@hllabel' + to refer to the hyperlink label. This option is intended to be + used with destgroups (*note Setting hyperlink types and + options::), as it does not make sense in a direct call to `\hldest'--you + can just call the raw command. + + Example: + + \makeatletter + \def\mydest{\special{html:}% + \special{html:}} + \resetatcatcode + \indent\hldest{raw}{cmd=mydest}{SpecialDest} + Special destination. + + + +File: eplain.info, Node: Destination options for hypertex, Next: Link types for hypertex, Prev: Destination types for hypertex, Up: Hyperlink driver hypertex + +5.4.2.2 Destination options for `hypertex' +.......................................... + +`cmd' + Name of the macro (without the leading `\') containing a HyperTeX + `\special' for the `raw' destination. + + *Note Destination types for hypertex::, the description of the + `raw' destination, for an example. + + +File: eplain.info, Node: Link types for hypertex, Next: Link options for hypertex, Prev: Destination options for hypertex, Up: Hyperlink driver hypertex + +5.4.2.3 Link types for `hypertex' +................................. + +`name' + Go to a "named destination". The label is the destination name. + All destinations in HyperTeX are named destinations. This is the + default type. + + Example: `\hlstart{name}{}{dest123}Link to dest123\hlend' + +`url' + Go to a URL. The label is the URL. + + Example: + + `\hlstart{url}{}{http://tug.org/eplain/}Eplain home\hlend' + +`filename' + Go to a named destination in another file. The label is the + destination name. The file name is specified by the `file' + option. The file name extension can be specified separately by the `ext' + option. The idea is to set the `ext' option globally at the + beginning of the document to avoid hard-coding the extension + together with the file name within each link--HyperTeX is not + restricted to any single output format, it can be DVI, PDF, + possibly other formats. + + Example: + + \hlopts{ext=.pdf} + \hlstart{filename}{file=book}{dest123} + Link to dest123 in file `book.pdf'\hlend + +`raw' + The link specification (in the form of a HyperTeX `\special') is + taken from the command sequence `\CS', where CS is the value of the `cmd' + option. In the definition of `\CS', use `\@hllabel' to refer to + the hyperlink label. Use the predefined command `\hlhash' to + insert the `#' characters. This option is intended to be used + with linkgroups (*note Setting hyperlink types and options::), as + it does not make sense in a direct call to `\hlstart'--you can + just call the raw command. + + Example: + + \makeatletter + \def\mylink{\special{html:}} + \resetatcatcode + \hlstart{raw}{cmd=mylink}{SpecialDest} + Link to the special destination.\hlend + + + +File: eplain.info, Node: Link options for hypertex, Prev: Link types for hypertex, Up: Hyperlink driver hypertex + +5.4.2.4 Link options for `hypertex' +................................... + +`cmd' + Name of the macro (without the leading `\') containing a HyperTeX + `\special' for the `raw' link. + + *Note Link types for hypertex::, the description of the `raw' link, + for an example. + +`file' + File name for the `filename' link type. See also the `ext' option. + + *Note Link types for hypertex::, the description of the `filename' + link, for an example. + +`ext' + File name extension for the `filename' link type. The idea is to + set the `ext' option globally at the beginning of the document to + avoid hard-coding the extension together with the file name within + each link--HyperTeX is not restricted to any single output format, + it can be DVI, PDF, possibly other formats. + + *Note Link types for hypertex::, the description of the `filename' + link, for an example. + + +File: eplain.info, Node: Hyperlink drivers pdftex and dvipdfm, Next: Hyperlink driver nolinks, Prev: Hyperlink driver hypertex, Up: Hyperlink drivers + +5.4.3 Hyperlink drivers `pdftex' and `dvipdfm' +---------------------------------------------- + +This subsection describes link and destination types and options +supported by the `pdftex' and `dvipdfm' drivers. Many of the hyperlink +types and options are common to both drivers, so we describe them +together. + +* Menu: + +* Destination types for pdftex and dvipdfm:: +* Destination options for pdftex and dvipdfm:: +* Link types for pdftex and dvipdfm:: +* Link options for pdftex and dvipdfm:: + + +File: eplain.info, Node: Destination types for pdftex and dvipdfm, Next: Destination options for pdftex and dvipdfm, Up: Hyperlink drivers pdftex and dvipdfm + +5.4.3.1 Destination types for `pdftex' and `dvipdfm' +.................................................... + +`xyz' + "Current position". The option `zoom' specifies magnification to + use (zero or empty means leave magnification unchanged, which is + the default). This is the default type. + + For `dvipdfm': the options `left' and `top' specify position + coordinates to use (empty options mean current position + coordinate, which is the default). + + Example: `\hldest{xyz}{zoom=2000}{dest123}' + +`fit' + Fit the page to the window. + + Example: `\hldest{fit}{}{dest123}' + +`fith' + Fit the width of the page to the window. + + For `dvipdfm': the `top' option specifies vertical position + (default is empty, meaning current position). + + Example: `\hldest{fith}{}{dest123}' + +`fitv' + Fit the height of the page to the window. + + For `dvipdfm': The option `left' specifies horizontal position + (default is empty, meaning current position). + + Example: `\hldest{fitv}{}{dest123}' + +`fitb' + Fit the page's bounding box to the window. + + Example: `\hldest{fitb}{}{dest123}' + +`fitbh' + Fit the width of the page's bounding box to the window. + + For `dvipdfm': the option `top' specifies vertical position + (default is empty, meaning current position). + + Example: `\hldest{fitbh}{}{dest123}' + +`fitbv' + Fit the height of the page's bounding box to the window. + + For `dvipdfm': the option `left' specifies horizontal position + (default is empty, meaning current position). + + Example: `\hldest{fitbv}{}{dest123}' + +`fitr' + For `pdftex': fit the rectangle specified by the options `width', `height' + and `depth' (as a TeX rule specification) in the window. For + dimensions set to empty, the corresponding value of the parent box + is used (these are the defaults). + + For `dvipdfm': fit the rectangle specified by the options `left', `bottom', `right' + and `top' (in PostScript points, 72 points per inch) in the + window. For dimensions set to empty, current position coordinate + is substituted (these are the defaults). + + Example for `pdftex': + + \hldest{fitr}{width=\hsize, + height=.5\vsize,depth=0pt}{dest123} + + Example for `dvipdfm': + + \hldest{fitr}{left=72,bottom=72, + right=720,top=360}{dest123} + +`raw' + The destination specification (in the form of a pdfTeX command or a + dvipdfm `\special') is taken from the command sequence `\CS', + where CS is the value of the `cmd' option. In the definition of + `\CS', use `\@hllabel' to refer to the hyperlink label. This + option is intended to be used with destgroups (*note Setting + hyperlink types and options::), as it does not make sense in a + direct call to `\hldest'--you can just call the raw command. + + Example for `pdftex': + + \makeatletter + \def\mydest{\pdfdest name{\@hllabel} xyz} + \resetatcatcode + \hldesttype{raw} + \hldestopts{cmd=mydest} + + Example for `dvipdfm': + + \makeatletter + \def\mydest{\special{pdf: dest (\@hllabel) + [@thispage /XYZ @xpos @ypos 0]}} + \resetatcatcode + \hldesttype{raw} + \hldestopts{cmd=mydest} + + +File: eplain.info, Node: Destination options for pdftex and dvipdfm, Next: Link types for pdftex and dvipdfm, Prev: Destination types for pdftex and dvipdfm, Up: Hyperlink drivers pdftex and dvipdfm + +5.4.3.2 Destination options for `pdftex' and `dvipdfm' +...................................................... + +With respect to the destination options, the `pdftex' and `dvipdfm' +differ in the way the fit rectangle is specified (relative coordinates +for `pdftex', absolute coordinates for `dvipdfm'). + +Common destination options +.......................... + +`cmd' + Name of the macro (without the leading `\') containing a pdfTeX + command or a dvipdfm `\special' for the `raw' destination. + + *Note Destination types for pdftex and dvipdfm::, the description + of the `raw' destination, for an example. + +`zoom' + Magnification ratio times 1000 (like TeX's scale factor). Zero or + empty means leave magnification unchanged, which is the default. + + Example: `\hldest{xyz}{zoom=2000}{dest123}' + +`pdftex'-specific destination options +..................................... + +The dimension options below must be specified as a TeX rule +specification. When set to empty, the corresponding value of the +parent box is used (this is the default for all dimension options). + +`depth' + Depth of the fit rectangle for the `fitr' destination. + +`height' + Height of the fit rectangle for the `fitr' destination. + +`width' + Width of the fit rectangle for the `fitr' destination. + + Example: + + \hldest{fitr}{width=\hsize, + height=.5\vsize,depth=0pt}{dest123} + +`dvipdfm'-specific destination options +...................................... + +The dimension options below must be specified in PostScript points +(72 points per inch), as a number without the `bp' unit name. When set +to empty, the current position coordinate is used (this is the default +for all dimension options). + +`bottom' + Bottom position coordinate of a box specification for the various + destination types. + +`left' + Left position coordinate of a box specification for the various + destination types. + +`right' + Right position coordinate of a box specification for the various + destination types. + +`top' + Top position coordinate of a box specification for the various + destination types. + + Example: + + \hldest{fitr}{left=72,bottom=72, + right=720,top=360}{dest123} + + +File: eplain.info, Node: Link types for pdftex and dvipdfm, Next: Link options for pdftex and dvipdfm, Prev: Destination options for pdftex and dvipdfm, Up: Hyperlink drivers pdftex and dvipdfm + +5.4.3.3 Link types for `pdftex' and `dvipdfm' +............................................. + +Link types are the same for the `pdftex' and `dvipdfm' drivers, except +that the `pdftex' driver provides one additional link type `num' (link +to a numbered destination). dvipdfm does not support numbered +destinations, therefore it does not have this link type. Note that all +destinations created by Eplain hyperlink macros are named destinations; +to define a numbered destination, you have to use low-level pdfTeX +commands. + +Common link types +................. + +`name' + Go to a "named destination". The label is the destination name. + All destinations created with `\hldest' are named destinations + (*note Explicit hyperlinks::). This is the default type. + + Example: `\hlstart{name}{}{dest123}Link to dest123\hlend' + +`url' + Go to a URL. The label is the URL. + + Example: `\hlstart{url}{}{http://tug.org/eplain/}Eplain + home\hlend' + +`page' + Go to a page. The label is the page number (counting from 1). + Page fitting is specified by the `pagefit' option. + + Example: + + \hlstart{page}{pagefit=/FitH 600}{123} + Link to page~123\hlend + +`filename' + Go to a named destination in another file. The label is the + destination name. The file name is specified by the `file' + option. Page fitting is specified by the `pagefit' option. The `newwin' + option specifies whether the destination document is opened in the + same window or in a new window. + + Example: + + \hlstart{filename}{file=book.pdf,newwin=1}{dest123} + Link to dest123 in file `book.pdf'\hlend + +`filepage' + Go to a page in another file. The label is the page number + (counting from 1). The file name is specified by the `file' + option. Page fitting is specified by the `pagefit' option. The `newwin' + option specifies whether the destination document is opened in the + same window or in a new window. + + Example: + + \hlstart{filepage}{file=book.pdf,newwin=, + pagefit=/FitR 50 100 300 500}{1} + Link to page~1 in file `book.pdf'\hlend + +`raw' + The link specification (in the form of a pdfTeX command or a + dvipdfm `\special' primitive) is taken from the command sequence + `\CS', where CS is the value of the `cmd' option. In the + definition of `\CS', use `\@hllabel' to refer to the hyperlink + label. This option is intended to be used with linkgroups (*note + Setting hyperlink types and options::), as it does not make sense + in a direct call to `\hlstart'--you can just call the raw command. + + Example for `pdftex': + + % Redirect all \url links to the first page + \def\mycmd{\pdfstartlink goto page 1 {/Fit}} + \hltype[url]{raw} + \hlopts[url]{cmd=mycmd} + + Example for `dvipdfm': + + % Redirect all \url links to the first page + \def\mycmd{\special{pdf: beginann <>}} + \hltype[url]{raw} + \hlopts[url]{cmd=mycmd} + +`pdftex'-specific link types +............................ + +`num' + Go to a "numbered destination". The label is the destination + number. + + Example: `\hlstart{num}{}{123}Link to 123\hlend' + + +File: eplain.info, Node: Link options for pdftex and dvipdfm, Prev: Link types for pdftex and dvipdfm, Up: Hyperlink drivers pdftex and dvipdfm + +5.4.3.4 Link options for `pdftex' and `dvipdfm' +............................................... + +Link options are mostly the same for the `pdftex' and `dvipdfm' +drivers. The `pdftex' driver has additional options to specify link +dimensions. + +Common link options +................... + +`bcolor' + Border color. An array of three numbers in the range 0 to 1, + representing a color in DeviceRGB. + + Example: `\hlstart{name}{bcolor=.1 .5 1}{dest123}Link\hlend' + +`bdash' + Array of numbers representing on and off stroke lengths for drawing + dashes. + + Example: `\hlstart{name}{bstyle=D,bdash=2 4}{dest123}Link\hlend' + +`bstyle' + Link border style: + + `S' + The border is drawn as a solid line. + + `D' + The border is drawn with a dashed line (the dash pattern is + specified by the `bdash' option). + + `B' + The border is drawn in a beveled style. + + `I' + The border is drawn in an inset style. + + `U' + The border is drawn as a line on the bottom of the link + rectangle. + + The default is `S'. + + Example: `\hlstart{name}{bstyle=D,bdash=2 4}{dest123}Link\hlend' + +`bwidth' + Border width in PostScript points (72 points per inch). The + default is 1. + + Example: `\hlstart{name}{bwidth=2}{dest123}Link\hlend' + +`cmd' + Name of the macro (without the leading `\') containing a pdfTeX + command or a dvipdfm `\special' for the `raw' link. + + *Note Link types for pdftex and dvipdfm::, the description of the + `raw' link, for an example. + +`file' + File name for the `filename' and `filepage' link types. + + *Note Link types for pdftex and dvipdfm::, the descriptions of the + `filename' and `filepage' links, for an example. + +`hlight' + Link border highlight modes: + + `I' + The rectangle specified by the bounding box of the link is + inverted. + + `N' + No highlighting is done. + + `O' + The border of the link is inverted. + + `P' + The region underneath the bounding box of the link is drawn + inset into the page. + + The default is `I'. + + Example: `\hlstart{name}{bstyle=S,hlight=O}{dest123}Link\hlend' + +`newwin' + For the `filename' and `filepage' links, specifies whether the + destination document is opened in the same window or in a new + window. The settings are: + + `0' + Open in the same window. + + `non-0' + Open in a new window. + + `empty' + Behavior according to the viewer settings. + + The default is empty. + + *Note Link types for pdftex and dvipdfm::, the descriptions of the + `filename' and `filepage' links, for an example. + +`pagefit' + For the `page' and `filepage links', specifies how the page must + be fitted to the window. `pagefit' specification is written to + the PDF file as is, so it must conform to the PDF standard. + + *Note Link types for pdftex and dvipdfm::, the descriptions of the + `page' and `filepage' links, for an example. + +`pdftex'-specific link options +.............................. + +The dimension options below must be specified as a TeX rule +specification. When set to empty, the corresponding value of the +parent box is used (this is the default for all dimension options). + +`depth' + Depth of the link. + +`height' + Height of the link. + +`width' + Width of the link. + + Example: + + \hlstart{name}{width=5in,height=20pc,depth=0pt}{dest123} + Link\hlend + + +File: eplain.info, Node: Hyperlink driver nolinks, Prev: Hyperlink drivers pdftex and dvipdfm, Up: Hyperlink drivers + +5.4.4 Hyperlink driver `nolinks' +-------------------------------- + +Select this driver to suppress all hyperlinks in your document. + + Selecting this driver is quite different from not selecting any +driver at all, or from selecting some driver and then turning +hyperlinks off for the entire document with `\hloff' and `\hldestoff' +(*note Turning hyperlinks on/off::). + + The purpose of `\hldestoff' and `\hloff' is to mark (parts) of your +document where hyperlinks should never appear. (Imagine you want to +prevent a cross-referencing macro from generating a link at a certain +spot in your document.) + + If instead you have prepared a document with hyperlinks and just +want to compile a version without them, it is better to select the +driver `nolinks'. This ensures that spacing and page-breaking are the +same as what you were getting with hyperlinks enabled. + + The reason for this is that hyperlinks are produced by the +`\special' primitives or low-level hyperlink commands. Each such +command is placed inside a "whatsit" (an internal TeX object), which +may introduce legitimate breakpoints at places where none would exist +without the whatsits. The macros `\hldestoff' and `\hloff' disable the +hyperlink macros completely, so that no whatsits are produced. + + In contrast, the `nolinks' driver does not completely disable +hyperlink macros. Instead, it defines them to merely write to the log +file (what gets written is unimportant). This also produces whatsits, +thus imitating the whatsits from the hyperlink commands. (This trick +was borrowed from the LaTeX `color' package.) + + Another reason for using `nolinks' is that in horizontal mode +`\hldest' places destinations inside boxes of zero width, height, and +depth. When you say `\hldestoff', `\hldest' will omit both destination +definitions and these boxes. The missing boxes can again cause the +typesetting to be inconsistent with that with destinations enabled. +Here again, the `nolinks' driver helps by defining `\hldest' to produce +the empty boxes. + + So, if you are planning to produce versions of your PDF document +both with and without hyperlinks, here is the recommended way to enable +the hyperlinks under pdfTeX: + + \ifpdf + \enablehyperlinks + \else + \enablehyperlinks[nolinks]% + \fi + + +File: eplain.info, Node: Setting hyperlink types and options, Next: Turning hyperlinks on/off, Prev: Hyperlink drivers, Up: Hyperlinks + +5.5 Setting hyperlink types and options +======================================= + +You can define default types for links and destinations, which will be +used when you do not specify a type in `\hlstart' or `\hldest'. +Similarly, you can define default values for the options; the default +value for an option is used when you do not set the option in the +argument to `\hlstart' or `\hldest'. + + The parameters for implicit links and destinations can be customized +by setting the "group" types and options. When not set, the defaults +are used. + + All these settings are local to the current (TeX) group, so if you +want to set an option temporarily, you can do so inside a +`\begingroup...\endgroup' block; when the group ends, the previous +settings are restored. + +* Menu: + +* Setting default types and options:: +* Setting group types:: +* Setting group options:: + + +File: eplain.info, Node: Setting default types and options, Next: Setting group types, Up: Setting hyperlink types and options + +5.5.1 Setting default types and options +--------------------------------------- + +The default types for links and destinations can be set with the +following commands: + + \hltype{TYPE} + \hldesttype{TYPE} + +where TYPE is one of the link/destination types supported by the +selected hyperlink driver (*note Hyperlink drivers::). + + Default values for the options can be set with the following +commands: + + \hlopts{OPTIONS} + \hldestopts{OPTIONS} + +where OPTIONS is a comma-separated list of option assignments in the +format `OPTION=VALUE'. Again, what options are allowed depends on the +selected hyperlink driver. + + Many people regard the default boxed links as not aesthetic and +intruding on page layout. The reason why boxed links are the default is +that the links are not colored until you load the LaTeX `color' package +(*note Loading LaTeX packages::) or use other means to define the +`\color' command; therefore, not producing any kind of link border may +result in the links not being marked in any way. However, when the +links are actually colored, there is no need to produce the link boxes +anymore; to avoid the boxes, you can set the default border width to +zero (if the driver you use supports the link option `bwidth'; *note +Hyperlink drivers::): + + \hlopts{bwidth=0} + + +File: eplain.info, Node: Setting group types, Next: Setting group options, Prev: Setting default types and options, Up: Setting hyperlink types and options + +5.5.2 Setting group types +------------------------- + +When called with an optional argument, as in + + \hltype[GROUPS]{TYPE} + \hldesttype[GROUPS]{TYPE} + +where GROUPS is a comma-separated list of groups, `\hltype' and +`\hldesttype' set the type for each group from GROUPS to TYPE. The +default type is used for all groups with an empty type (this is the +initial setting for all groups, except that the type for the `url' +linkgroup is set to `url' by the drivers which support this link type). + + There are two special "groups" which can be used inside the GROUPS +list. An empty group sets the default type. This allows to set the +default type and group types in one command, for example: + + \hltype[eq,]{TYPE} + +sets the link type for the `eq' linkgroup and the default link type to +TYPE. + + Another special group is a star (`*') group, which signifies all +defined groups. For example, the command + + \hldesttype[*,]{TYPE} + +sets the destination type to TYPE for each group, as well as the +default destination type. + + +File: eplain.info, Node: Setting group options, Prev: Setting group types, Up: Setting hyperlink types and options + +5.5.3 Setting group options +--------------------------- + +Option values for each group are stored as a list of option +assignments. This list does not have to contain every supported +option. Values for options missing from this list are taken from the +default option values. + + To manipulate the list of option values for the groups, you use the +`\hlopts' and `\hldestopts' commands with an optional argument: + + \hlopts[GROUPS]{OPTIONS} + \hldestopts[GROUPS]{OPTIONS} + \hlopts![GROUPS]{OPTIONS} + \hldestopts![GROUPS]{OPTIONS} + +where GROUPS is a comma-separated list of groups and OPTIONS is a +comma-separated list of option assignments. The two special "groups", +the empty group and the star (`*') group, have the same meaning as for +`\hltype' and `\hldesttype'. When used without the exclamation mark, +`\hlopts' and `\hldestopts' preserve the current list of options for +the groups, and only update the options listed in OPTIONS. If you add +the exclamation mark, the current list of options for each group in +GROUPS is discarded and the new list is set to OPTIONS. + + The "overriding" nature of the `!' is appropriate when you give a +complete specification of the options for a group, e.g., at the +beginning of your document. On the other hand, when you want to adjust +some option(s) and leave others intact, you should use the macros +without the `!'. + + For example, with displayed mathematical formulas, you often need to +adjust the `raise' option for the `eq' destgroup, because the formulas +often contain large parentheses and brackets. But when doing so, you +want to leave the other settings unchanged. To achieve this, call +`\hldestopts' without the `!', for example: + + $$\hldestopts[eq]{raise=2.5\normalbaselineskip} + ... + $$ + +The display commands (`$$') implicitly put the entire formula inside a +(TeX) group (`\begingroup...\endgroup'), so you do not need to isolate +the setting of the `raise' option--it will be restored after the +closing `$$'. + + Initially, Eplain sets the option lists for almost all groups to +empty, so that the groups fall back on the default values for all +options. The one exception to this rule is the `eq' destgroup, whose +initial option list contains one setting: + + raise=1.7\normalbaselineskip + +This setting usually accommodates the large operators, which often +appear in displayed math. + + +File: eplain.info, Node: Turning hyperlinks on/off, Prev: Setting hyperlink types and options, Up: Hyperlinks + +5.6 Turning hyperlinks on/off +============================= + +Links and/or destinations can be turned on or off globally by disabling +the low-level commands, or for each group individually. + + All these settings are local to the current (TeX) group, so if you +want to enable or disable links/destinations temporarily, you can do so +inside a `\begingroup...\endgroup' block; when the group ends, the +previous settings are restored. + +* Menu: + +* Turning low-level commands on/off:: +* Turning hyperlinks on/off for a group:: + + +File: eplain.info, Node: Turning low-level commands on/off, Next: Turning hyperlinks on/off for a group, Up: Turning hyperlinks on/off + +5.6.1 Turning low-level commands on/off +--------------------------------------- + +The low-level commands `\hlstart', `\hlend' and `\hldest' can be turned +on/off with the following commands: + + \hldeston + \hldestoff + \hlon + \hloff + +*Note Hyperlink driver nolinks::, for the implications of using these +commands to disable hyperlinks for the entire document. + + +File: eplain.info, Node: Turning hyperlinks on/off for a group, Prev: Turning low-level commands on/off, Up: Turning hyperlinks on/off + +5.6.2 Turning hyperlinks on/off for a group +------------------------------------------- + +If you want to disable links/destinations produced by certain groups, +you can give a list of the groups as an optional argument to these +commands: + + \hldeston[GROUPS] + \hldestoff[GROUPS] + \hlon[GROUPS] + \hloff[GROUPS] + +where GROUPS is the list of linkgroups/destgroups. This list can +contain two special groups. The empty group switches the low-level +commands (*note Turning low-level commands on/off::), and the star +(`*') group operates on all defined groups. + + Note that turning off the low-level commands disables all hyperlinks +globally, including groups which have them enabled. Turning off certain +linkgroups/destgroups records the fact that the macros in the group +should not produce links/destinations. To illustrate the distinction, +assume that all links are on; after the following sequence of commands: + + \hloff + \hloff[eq] + \hlon + +all links are on except for the `eq' linkgroup. + + +File: eplain.info, Node: Arrow theoretic diagrams, Next: Programming definitions, Prev: Hyperlinks, Up: Top + +6 Arrow theoretic diagrams +************************** + +This chapter describes definitions for producing commutative diagrams. + + Steven Smith wrote this documentation (and the macros). + +* Menu: + +* Slanted lines and vectors:: +* Commutative diagrams:: + + +File: eplain.info, Node: Slanted lines and vectors, Next: Commutative diagrams, Up: Arrow theoretic diagrams + +6.1 Slanted lines and vectors +============================= + +The macros `\drawline' and `\drawvector' provide the capability found +in LaTeX's picture mode to draw slanted lines and vectors of certain +directions. Both of these macros take three arguments: two integer +arguments to specify the direction of the line or vector, and one +argument to specify its length. For example, `\drawvector(-4,1){60pt}' +produces the vector + + (A vector in the 2d quadrant of length 60 pt appears here.) + + which lies in the 2d quadrant, has a slope of minus 1/4, and a width +of 60 pt. + + Note that if an `\hbox' is placed around `\drawline' or +`\drawvector', then the width of the `\hbox' will be the positive +dimension specified in the third argument, except when a vertical line +or vector is specified, e.g., `\drawline(0,1){1in}', which has zero +width. If the specified direction lies in the 1st or 2d quadrant +(e.g., `(1,1)' or `(-2,3)'), then the `\hbox' will have positive height +and zero depth. Conversely, if the specified direction lies in the 3d +or 4th quadrant (e.g., `(-1,-1)' or `(2,-3)'), then the `\hbox' will +have positive depth and zero height. + + There are a finite number of directions that can be specified. For +`\drawline', the absolute value of each integer defining the direction +must be less than or equal to six, i.e., `(7,-1)' is incorrect, but +`(6,-1)' is acceptable. For `\drawvector', the absolute value of each +integer must be less than or equal to four. Furthermore, the two +integers cannot have common divisors; therefore, if a line with slope 2 +is desired, say `(2,1)' instead of `(4,2)'. Also, specify `(1,0)' +instead of, say, `(3,0)' for horizontal lines and likewise for vertical +lines. + + Finally, these macros depend upon the LaTeX font `line10'. If your +site doesn't have this font, ask your system administrator to get it. +Future enhancements will include macros to draw dotted lines and dotted +vectors of various directions. + + +File: eplain.info, Node: Commutative diagrams, Prev: Slanted lines and vectors, Up: Arrow theoretic diagrams + +6.2 Commutative diagrams +======================== + +The primitive commands `\drawline' and `\drawvector' can be used to +typeset arrow theoretic diagrams. This section describes (1) macros to +facilitate typesetting arrows and morphisms, and (2) macros to +facilitate the construction of commutative diagrams. All macros +described in this section must be used in math mode. + +* Menu: + +* Arrows and morphisms:: +* Construction of commutative diagrams:: +* Commutative diagram parameters:: + + +File: eplain.info, Node: Arrows and morphisms, Next: Construction of commutative diagrams, Up: Commutative diagrams + +6.2.1 Arrows and morphisms +-------------------------- + +The macros `\mapright' and `\mapleft' produce right and left pointing +arrows, respectively. Use superscript (`^') to place a morphism above +the arrow, e.g., `\mapright^\alpha'; use subscript (`_') to place a +morphism below the arrow, e.g., `\mapright_{\tilde l}'. Superscripts +and subscripts may be used simulataneously, e.g., `\mapright^\pi_{\rm +epimor.}'. + + Similarly, the macros `\mapup' and `\mapdown' produce up and down +pointing arrows, respectively. Use `\rt' to place a morphism to the +right of the arrow, e.g., `\mapup\rt{\rm id}'; use `\lft' to place a +morphism to the left of the arrow, e.g., `\mapup\lft\omega'. `\lft' +and `\rt' may be used simultaneously, e.g., `\mapdown\lft\pi\rt{\rm +monomor.}'. + + Slanted arrows are produced by the macro `\arrow', which takes a +direction argument (e.g., `\arrow(3,-4)'). Use `\rt' and `\lft' to +place morphisms to the right and left, respectively, of the arrow. A +slanted line (no arrowhead) is produced with the macro `\sline', whose +syntax is identical to that of `\arrow'. + + The length of these macros is predefined by the default TeX +dimensions `\harrowlength', for horizontal arrows (or lines), +`\varrowlength', for vertical arrows (or lines), and `\sarrowlength', for +slanted arrows (or lines). To change any of these dimensions, say, +e.g., `\harrowlength=40pt'. As with all other TeX dimensions, the +change may be as global or as local as you like. Furthermore, the +placement of morphisms on the arrows is controlled by the dimensions +`\hmorphposn', `\vmorphposn', and `\morphdist'. The first two +dimensions control the horizontal and vertical position of the morphism +from its default position; the latter dimension controls the distance +of the morphism from the arrow. If you have more than one morphism per +arrow (i.e., a `^'/`_' or `\lft'/`\rt' construction), use the parameters +`\hmorphposnup', `\hmorphposndn', `\vmorphposnup', `\vmorphposndn', `\hmorphposnrt', `\hmorphposnlft', `\vmorphposnrt', and +`\vmorphposnlft'. The default values of all these dimensions are +provided in the section on parameters that follows below. + + There is a family of macros to produce horizontal lines, arrows, and +adjoint arrows. The following macros produce horizontal maps and have +the same syntax as `\mapright': + +`\mapright' + `$X\mapright Y$' = (a right arrow). + +`\mapleft' + `$X\mapleft Y$' = (a left arrow). + +`\hline' + `$X\hline Y$' = (horizontal line) + +`\bimapright' + `$X\bimapright Y$' = (two right arrows). + +`\bimapleft' + `$X\bimapleft Y$' = (two left arrows) + +`\adjmapright' + `$X\adjmapright Y$' = (two adjoint arrows; left over right) + +`\adjmapleft' + `$X\adjmapleft Y$' = (two adjoint arrows; right over left) + +`\bihline' + `$X\bihline Y$' = (two horizontal lines) + + There is also a family of macros to produce vertical lines, arrows, +and adjoint arrows. The following macros produce vertical maps and have +the same syntax as `\mapdown': + +`\mapdown' + (a down arrow) + +`\mapup' + (an up arrow) + +`\vline' + (vertical line) + +`\bimapdown' + (two down arrows) + +`\bimapup' + (two up arrows) + +`\adjmapdown' + (two adjoint arrows; down then up) + +`\adjmapup' + (two adjoint arrows; up then down) + +`\bivline' + (two vertical lines) + + Finally, there is a family of macros to produce slanted lines, +arrows, and adjoint arrows. The following macros produce slanted maps +and have the same syntax as `\arrow': + +`\arrow' + (a slanted arrow) + +`\sline' + (a slanted line) + +`\biarrow' + (two straight arrows) + +`\adjarrow' + (two adjoint arrows) + +`\bisline' + (two straight lines) + + + The width between double arrows is controlled by the parameter +`\channelwidth'. The parameters `\hchannel' and `\vchannel', if +nonzero, override `\channelwidth' by controlling the horizontal and +vertical shifting from the first arrow to the second. + + There are no adornments on these arrows to distinguish inclusions +from epimorphisms from monomorphisms. Many texts, such as Lang's book +`Algebra', use as a tasteful alternative the symbol `inc' (in roman) +next to an arrow to denote inclusion. + + Future enhancements will include a mechanism to draw curved arrows +found in, e.g., the Snake Lemma, by employing a version of the `\path' +macros of Appendix D of `The TeXbook'. + + +File: eplain.info, Node: Construction of commutative diagrams, Next: Commutative diagram parameters, Prev: Arrows and morphisms, Up: Commutative diagrams + +6.2.2 Construction of commutative diagrams +------------------------------------------ + +There are two approaches to the construction of commutative diagrams +described here. The first approach, and the simplest, treats +commutative diagrams like fancy matrices, as Knuth does in Exercise +18.46 of `The TeXbook'. This case is covered by the macro `\commdiag', which +is an altered version of the Plain TeX macro `\matrix'. An example +suffices to demonstrate this macro. The following commutative diagram +(illustrating the covering homotopy property; Bott and Tu, +`Differential Forms in Algebraic Topology') + + (A commutative diagram appears here in the printed output.) + + is produced with the code + + $$\commdiag{Y&\mapright^f&E\cr \mapdown&\arrow(3,2)\lft{f_t}&\mapdown\cr + Y\times I&\mapright^{\bar f_t}&X}$$ + + Of course, the parameters may be changed to produce a different +effect. The following commutative diagram (illustrating the universal +mapping property; Warner, `Foundations of Differentiable Manifolds and +Lie Groups') + + (A commutative diagram appears here in the printed output.) + + is produced with the code + + $$\varrowlength=20pt + \commdiag{V\otimes W\cr \mapup\lft\phi&\arrow(3,-1)\rt{\tilde l}\cr + V\times W&\mapright^l&U\cr}$$ + + A diagram containing isosceles triangles is achieved by placing the +apex of the triangle in the center column, as shown in the example +(illustrating all constant minimal realizations of a linear system; +Brockett, `Finite Dimensional Linear Systems') + + (A commutative diagram appears here in the printed output.) + + which is produced with the code + + $$\sarrowlength=.42\harrowlength + \commdiag{&R^m\cr &\arrow(-1,-1)\lft{\bf B}\quad \arrow(1,-1)\rt{\bf G}\cr + R^n&\mapright^{\bf P}&R^n\cr + \mapdown\lft{e^{{\bf A}t}}&&\mapdown\rt{e^{{\bf F}t}}\cr + R^n&\mapright^{\bf P}&R^n\cr + &\arrow(1,-1)\lft{\bf C}\quad \arrow(-1,-1)\rt{\bf H}\cr + &R^q\cr}$$ + + Other commutative diagram examples appear in the file +`commdiags.tex', which is distributed with this package. + + In these examples the arrow lengths and line slopes were carefully +chosen to blend with each other. In the first example, the default +settings for the arrow lengths are used, but a direction for the arrow +must be chosen. The ratio of the default horizontal and vertical arrow +lengths is approximately the golden mean gamma=1.618...; the arrow +direction closest to this mean is `(3,2)'. In the second example, a +slope of -1/3 is desired and the default horizontal arrow length is 60 +pt; therefore, choose a vertical arrow length of 20 pt. You may affect +the interline glue settings of `\commdiag' by redefining the macro +`\commdiagbaselines'. (cf. Exercise 18.46 of `The TeXbook' and the +section on parameters below.) + + The width, height, and depth of all morphisms are hidden so that the +morphisms' size do not affect arrow positions. This can cause a large +morphism at the top or bottom of a diagram to impinge upon the text +surrounding the diagram. To overcome this problem, use TeX's +`\noalign' primitive to insert a `\vskip' immediately above or below +the offending line, e.g., +`$$\commdiag{\noalign{\vskip6pt}X&\mapright^\int&Y\cr ...}'. + + The macro `\commdiag' is too simple to be used for more complicated +diagrams, which may have intersecting or overlapping arrows. A second +approach, borrowed from Francis Borceux's `Diagram' macros for LaTeX, +treats the commutative diagram like a grid of identically shaped boxes. +To compose the commutative diagram, first draw an equally spaced grid, +e.g., + + . . . . . . + . . . . . . + . . . . . . + . . . . . . + + on a piece of scratch paper. Then draw each element (vertices and +arrows) of the commutative diagram on this grid, centered at each grid +point. Finally, use the macro `\gridcommdiag' to implement your design +as a TeX alignment. For example, the cubic diagram + + (A commutative diagram appears here.) + + that appears in Francis Borceux's documentation can be implemented on +a 7 by 7 grid, and is achieved with the code + + $$\harrowlength=48pt \varrowlength=48pt \sarrowlength=20pt + \def\cross#1#2{\setbox0=\hbox{$#1$}% + \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}} + \gridcommdiag{&&B&&\mapright^b&&D\cr + &\arrow(1,1)\lft a&&&&\arrow(1,1)\lft d\cr + A&&\cross{\hmorphposn=12pt\mapright^c}{\vmorphposn=-12pt\mapdown\lft f} + &&C&&\mapdown\rt h\cr\cr + \mapdown\lft e&&F&&\cross{\hmorphposn=-12pt\mapright_j} + {\vmorphposn=12pt\mapdown\rt g}&&H\cr + &\arrow(1,1)\lft i&&&&\arrow(1,1)\rt l\cr + E&&\mapright_k&&G\cr}$$ + + The dimensions `\hgrid' and `\vgrid' control the horizontal and +vertical spacing of the grid used by `\gridcommdiag'. The default +setting for both of these dimensions is 15 pt. Note that in the +example of the cube the arrow lengths must be adjusted so that the +arrows overlap into neighboring boxes by the desired amount. Hence, +the `\gridcommdiag' method, albeit more powerful, is less automatic +than the simpler `\commdiag' method. Furthermore, the ad hoc macro +`\cross' is introduced to allow the effect of overlapping arrows. +Finally, note that the positions of four of the morphisms are adjusted +by setting `\hmorphposn' and `\vmorphposn'. + + One is not restricted to a square grid. For example, the proof of +Zassenhaus's Butterfly Lemma can be illustrated by the diagram +(appearing in Lang's book `Algebra') + + (A commutative diagram appears here.) + + This diagram may be implemented on a 9 by 12 grid with an aspect +ratio of 1/2, and is set with the code + + $$\hgrid=16pt \vgrid=8pt \sarrowlength=32pt + \def\cross#1#2{\setbox0=\hbox{$#1$}% + \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}} + \def\l#1{\llap{$#1$\hskip.5em}} + \def\r#1{\rlap{\hskip.5em$#1$}} + \gridcommdiag{&&U&&&&V\cr &&\bullet&&&&\bullet\cr + &&\sarrowlength=16pt\sline(0,1)&&&&\sarrowlength=16pt\sline(0,1)\cr + &&\l{u(U\cap V)}\bullet&&&&\bullet\r{(U\cap V)v}\cr + &&&\sline(2,-1)&&\sline(2,1)\cr + &&\cross{=}{\sline(0,1)}&&\bullet&&\cross{=}{\sline(0,1)}\cr\cr + &&\l{^{\textstyle u(U\cap v)}}\bullet&&\cross{=}{\sline(0,1)}&& + \bullet\r{^{\textstyle(u\cap V)v}}\cr + &\sline(2,1)&&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)\cr + \l{u}\bullet&&&&\bullet&&&&\bullet\r{v}\cr + &\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)\cr + &&\bullet&&&&\bullet\cr &&u\cap V&&&&U\cap v\cr}$$ + + Again, the construction of this diagram requires careful choices for +the arrow lengths and is facilitated by the introduction of the ad hoc +macros `\cross', `\r', and `\l'. Note also that superscripts were used +to adjust the position of the vertices u(U intersection v) and (u +intersection V)v. Many diagrams may be typeset with the predefined +macros that appear here; however, ingenuity is often required to handle +special cases. + + +File: eplain.info, Node: Commutative diagram parameters, Prev: Construction of commutative diagrams, Up: Commutative diagrams + +6.2.3 Commutative diagram parameters +------------------------------------ + +The following is a list describing the parameters used in the +commutative diagram macros. These dimensions may be changed globally or +locally. + +`\harrowlength' + (Default: 60 pt) The length of right or left arrows. + +`\varrowlength' + (Default: 0.618`\harrowlength') The length of up or down arrows. + +`\sarrowlength' + (Default: 60 pt) The horizontal length of slanted arrows. + +`\hmorphposn' + (Default: 0 pt) The horizontal position of the morphism with + respect to its default position. There are also the dimensions + `\hmorphposnup', `\hmorphposndn', `\hmorphposnrt', and + `\hmorphposnlft' for `^'/`_' or `\lft'/`\rt' constructions. + +`\vmorphposn' + (Default: 0 pt) The vertical position of the morphism with respect + to its default position. There are also the dimensions + `\vmorphposnup', `\vmorphposndn', `\vmorphposnrt', and + `\vmorphposnlft' for `^'/`_' or `\lft'/`\rt' constructions. + +`\morphdist' + (Default: 4 pt) The distance of morphisms from slanted lines or + arrows. + +`\channelwidth' + (Default: 3 pt) The distance between double lines or arrows. + +`\hchannel, \vchannel' + (Defaults: 0 pt) Overrides `\channelwidth'. The horizontal and + vertical shifts between double lines or arrows. + +`\commdiagbaselines' + (Default: `\baselineskip=15pt \lineskip=3pt \lineskiplimit=3pt ') + The parameters used by `\commdiag' for setting interline glue. + +`\hgrid' + (Default: 15 pt) The horizontal spacing of the grid used by + `\gridcommdiag'. + +`\vgrid' + (Default: 15 pt) The vertical spacing of the grid used by + `\gridcommdiag'. + + + +File: eplain.info, Node: Programming definitions, Next: Demo files, Prev: Arrow theoretic diagrams, Up: Top + +7 Programming definitions +************************* + +The definitions in this section are only likely to be useful when you +are writing nontrivial macros, not when writing a document. + +* Menu: + +* Category codes:: Changing category codes. +* Allocation macros:: Non-outer versions of \newcount et al. +* Iteration:: Doing `for' and `while' loops in TeX. +* Macro arguments:: Reading and ignoring them. +* Converting to characters:: Normalizing control sequences and spaces. +* Expansion:: Controlling expansion. +* Obeying spaces:: Making whitespace count anywhere. +* Writing out numbers:: Making `1' into `one'. +* Mode-specific penalties:: +* Auxiliary files:: Testing for their existence. +* User-defined environments:: User-defined environments. +* Page list and page range parsers:: + + +File: eplain.info, Node: Category codes, Next: Allocation macros, Up: Programming definitions + +7.1 Category codes +================== + +Plain TeX defines `\active' (as the number 13) for use in changing +category codes. Although the author of `The TeXbook' has +"intentionally kept the category codes numeric", two other categories +are commonly used: letters (category code 11) and others (12). +Therefore, Eplain defines `\letter' and `\other'. + + Sometimes it is cleaner to make a character active without actually writing +a `\catcode' command. The `\makeactive' command takes a character as +an argument to make active (and ignores following spaces). For +example, here are two commands which both make `\' active: + + \makeactive\\ \makeactive92 + + Sometimes you might want to temporarily change the category code of +the `@' character to `\letter', so that you can use or define macros +which are normally inaccessible to the user. For such situations, +Eplain provides the `\makeatletter' command. It sets the category code +of `@' to `\letter' (11) and defines `\resetatcatcode' to restore the +category code to whatever it was before the call to `\makeatletter'. +For example: + + \makeatletter + \def\@hidden@macro{This macro cannot normally be + called / redefined by the user} + \resetatcatcode + +There is also `\makeatother' which works similarly but sets the +category code of `@' to `\other' (12). + + Usually, when you give a definition to an active character, you have +to do so inside a group where you temporarily make the character active, +and then give it a global definition (cf. the definition of +`\obeyspaces' in `The TeXbook'). This is inconvenient if you are +writing a long macro, or if the character already has a global +definition you do not wish to transcend. Eplain provides `\letreturn', +which defines the usual end-of-line character to be the argument. For +example: + + \def\mymacro{... \letreturn\myreturn ... } + \mymacro hello + there + +The end-of-line between `hello' and `there' causes `\myreturn' to be +expanded. + + `The TeXbook' describes `\uncatcodespecials', which makes all +characters which are normally "special" into "other" characters, but +the definition never made it into plain TeX. Eplain therefore defines +it. + + Finally, `\percentchar' expands into a literal `%' character. This +is useful when you `\write' TeX output to a file, and want to avoid +spurious spaces. For example, Eplain writes a `\percentchar' after the +definition of cross-references. The macros `\lbracechar' and +`\rbracechar' expand similarly. + + +File: eplain.info, Node: Allocation macros, Next: Iteration, Prev: Category codes, Up: Programming definitions + +7.2 Allocation macros +===================== + +Plain TeX provides macros that allocate registers of each primitive +type in TeX, to prevent different sets of macros from using the same +register for two different things. The macros are all named starting +with `new', e.g., `\newcount' allocates a new "count" (integer) +register. Such allocations are usually needed only at the top level of +some macro definition file; therefore, plain TeX makes the allocation +registers `\outer', to help find errors. (The error this helps to find +is a missing right brace in some macro definition.) + + Sometimes, however, it is useful to allocate a register as part of +some macro. An outer control sequence cannot be used as part of a macro +definition (or in a few other contexts: the parameter text of a +definition, an argument to a definition, the preamble of an alignment, +or in conditional text that is being skipped). Therefore, Eplain +defines "inner" versions of all the allocation macros, named with the +prefix `inner': `\innernewbox', `\innernewcount', `\innernewdimen', `\innernewfam', `\innernewhelp', `\innernewif', `\innernewinsert', `\innernewlanguage', `\innernewread', +`\innernewskip', `\innernewtoks', `\innernewwrite'. + + You can also define non-outer versions of other macros in the same +way that Eplain defines the above. The basic macro is called +`\innerdef': + + \innerdef \INNERNAME {OUTERNAME} + + The first argument (\INNERNAME) to `\innerdef' is the control +sequence that you want to define. Any previous definition of +\INNERNAME is replaced. The second argument (OUTERNAME) is the +_characters_ in the name of the outer control sequence. (You can't use +the actual control sequence name, since it's outer!) + + If the outer control sequence is named \CS, and you want to define +`innerCS' as the inner one, you can use `\innerinnerdef', which is just +an abbreviation for a call to `\innerdef'. For example, these two +calls are equivalent: + + \innerdef\innerproclaim{proclaim} + \innerinnerdef{proclaim} + + +File: eplain.info, Node: Iteration, Next: Macro arguments, Prev: Allocation macros, Up: Programming definitions + +7.3 Iteration +============= + +You can iterate through a comma-separated list of items with `\for'. Here +is an example: + + \for\name:=karl,kathy\do{% + \message{\name}% + }% + +This writes `karl' and `kathy' to the terminal. Spaces before or after +the commas in the list, or after the `:=', are _not_ ignored. To strip +leading spaces off the items, use `\For': + + \For\name:= + karl, + kathy\do{% + \message{\name}% + }% + +Note that trailing spaces are still _not_ ignored. + + Both `\for' and `\For' expand the first token of the item list +fully, so this is equivalent to the above: + + \def\namelist{karl,kathy}% + \for\name:=\namelist\do ... + +However, this won't work, either with `\for' or with `\For': + + \def\namelist{karl,kathy}% + \For\name:= \namelist\do ... + +because `\for' and `\For' expand the first token after `:=' which is +space, not `\namelist'. + + Eplain provides another kind of loops, which is an extension of plain +TeX's `\loop'. If you say: + + \loop + LOOP-TEXT + \if CONDITION + IF-TEXT + \repeat + +then LOOP-TEXT will be repeated as long as CONDITION is satisfied +(`\if' can be any of the TeX's conditional commands, without the +matching `\fi'). Eplain extends this with the optional else clause: + + \loop + LOOP-TEXT + \if CONDITION + IF-TEXT + \else + ELSE-TEXT + \repeat + +Here, LOOP-TEXT will be repeated as long as CONDITION is _not_ +satisfied. This extension is from Victor Eijkhout's TeX by Topic +(page 104). + + +File: eplain.info, Node: Macro arguments, Next: Converting to characters, Prev: Iteration, Up: Programming definitions + +7.4 Macro arguments +=================== + +It is occasionally useful to redefine a macro that takes arguments to +do nothing. Eplain defines `\gobble', `\gobbletwo', and `\gobblethree' +to swallow one, two, and three arguments, respectively. + + For example, if you want to produce a "short" table of contents--one +that includes only chapters, say--the easiest thing to do is read the +entire `.toc' file (*note Contents::), and just ignore the commands +that produce section or subsection entries. To be specific: + + \let\tocchapterentry = \shorttocchapter + \let\tocsectionentry = \gobbletwo + \let\tocsubsectionentry = \gobbletwo + \readtocfile + +(Of course, this assumes you only have chapters, sections, and +subsections in your document.) + + In addition, Eplain defines `\eattoken' to swallow the single +following token, using `\let'. Thus, `\gobble' followed by `{...}' +ignores the entire brace-enclosed text. `\eattoken' followed by the +same ignores only the opening left brace. + + Eplain defines a macro `\identity' which takes one argument and +expands to that argument. This may be useful if you want to provide a +function for the user to redefine, but don't need to do anything by +default. (For example, the default definition of `\eqconstruct' (*note +Formatting equation references::) is `\identity'.) + + You may also want to read an optional argument. The established +convention is that optional arguments are put in square brackets, so +that is the syntax Eplain recognizes. Eplain ignores space tokens +before an optional argument, via `\futurenonspacelet'. + + You test for an optional argument by using `\@getoptionalarg'. It +takes one argument, a control sequence to expand after reading the +argument, if present. If an optional argument is present, the control +sequence `\@optionalarg' expands to it; otherwise, `\@optionalarg' is +`\empty'. You must therefore have the category code of `@' set to 11 +(letter). Here is an example: + + \catcode`@=\letter + \def\cmd{\@getoptionalarg\finishcmd} + \def\finishcmd{% + \ifx\@optionalarg\empty + % No optional argument present. + \else + % One was present. + \fi + } + + If an optional argument contains another optional argument, the inner +one will need to be enclosed in braces, so TeX does not mistake the end +of the first for the end of the second. + + +File: eplain.info, Node: Converting to characters, Next: Expansion, Prev: Macro arguments, Up: Programming definitions + +7.5 Converting to characters +============================ + +Eplain defines `\xrlabel' to produce control sequence names for +cross-reference labels, et al. This macro expands to its argument with +an `_' appended. (It does this because the usual use of `\xrlabel' is +to generate a control sequence name, and we naturally want to avoid +conflicts between control sequence names.) + + Because `\xrlabel' is fully expandable, to make a control sequence +name out of the result you need only do + + `\csname \xrlabel{LABEL}\endcsname' + +The `\csname' primitive makes a control sequence name out of any +sequence of character tokens, regardless of category code. Labels can +therefore include any characters except for `\', `{', `}', and `#', all +of which are used in macro definitions themselves. + + `\sanitize' takes a control sequence as an argument and converts the +expansion of the control sequence into a list of character tokens. +This is the behavior you want when writing information like chapter +titles to an output file. For example, here is part of the definition +of `\writenumberedtocentry'; `#2' is the title that the user has given. + + ... + \def\temp{#2}% + ... + \write\tocfile{% + ... + \sanitize\temp + ... + }% + + +File: eplain.info, Node: Expansion, Next: Obeying spaces, Prev: Converting to characters, Up: Programming definitions + +7.6 Expansion +============= + +This section describes some miscellanous macros for expansion, etc. + +* Menu: + +* \csn and \ece:: Abbreviations for \csname expansions. +* \edefappend:: +* Hooks:: Manipulating and executing named actions. +* Properties:: Associating information with a csname. +* \expandonce:: +* \ifundefined:: +* \ifempty:: +* \ifinteger and \isinteger:: +* \futurenonspacelet:: + + +File: eplain.info, Node: \csn and \ece, Next: \edefappend, Up: Expansion + +7.6.1 `\csn' and `\ece' +----------------------- + +`\csn'{NAME} simply abbreviates `\csname' NAME `\endcsname', thus +saving some typing. The extra level of expansion does take some time, +though, so I don't recommend it for an inner loop. + + `\ece'{TOKEN}{NAME} abbreviates + + \expandafter TOKEN \csname NAME \endcsname + +For example, + + \def\fontabbrevdef#1#2{\ece\def{@#1font}{#2}} + \fontabbrevdef{normal}{ptmr} + +defines a control sequence `\@normalfont' to expand to `ptmr'. + + +File: eplain.info, Node: \edefappend, Next: Hooks, Prev: \csn and \ece, Up: Expansion + +7.6.2 `\edefappend' +------------------- + +`\edefappend' is a way of adding on to an existing definition. It +takes two arguments: the first is the control sequence name, the second +the new tokens to append to the definition. The second argument is +fully expanded (in the `\edef' that redefines the control sequence). + + For example: + + \def\foo{abc} + \def\bar{xyz} + \edefappend\foo{\bar karl} + +results in `\foo' being defined as `abcxyzkarl'. + + +File: eplain.info, Node: Hooks, Next: Properties, Prev: \edefappend, Up: Expansion + +7.6.3 Hooks +----------- + +A "hook" is simply a name for a group of actions which is executed in +certain places--presumably when it is most useful to allow +customization or modification. TeX already provides many builtin +hooks; for example, the `\every ...' token lists are all examples of +hooks. + + Eplain provides several macros for adding actions to hooks. They all +take two arguments: the name of the hook and the new actions. + +`hookaction NAME ACTIONS' +`hookappend NAME ACTIONS' + +`hookprepend NAME ACTIONS' + Each of these adds ACTIONS to the hook NAME. (Any + previously-defined actions are retained.) NAME is not a control + sequence, but rather the characters of the name. + +`hookactiononce NAME `\CS'' + `\hookactiononce' adds CS to NAME, like the macros above, but + first it adds + + \global\let \CS \relax + + to the definition of \CS. (This implies \CS must be a true + expandable macro, not a control sequence `\let' to a primitive or + some other such thing.) Thus, \CS is expanded the next time the + hook NAME is run, but it will disappear after that. + + The `\global' is useful because `\hookactiononce' is most useful + when the grouping structure of the TeX code could be anything. + Neither this nor the other hook macros do global assignments to + the hook variable itself, so TeX's usual grouping rules apply. + + The companion macro to defining hook actions is `\hookrun', for +running them. This takes a single argument, the name of the hook. If +no actions for the hook are defined, no error ensues. + + Here is a skeleton of general `\begin' and `\end' macros that run +hooks, and a couple of calls to define actions. The use of +`\hookprepend' for the begin action and `\hookappend' for the end +action ensures that the actions are executed in proper sequence with +other actions (as long as the other actions use `\hookprepend' and +`\hookappend' also). + + \def\begin#1{ ... \hookrun{begin} ... } + \def\end#1{ ... \hookrun{end} ... } + \hookprepend{begin}\start_underline + \hookappend{end}\finish_underline + + +File: eplain.info, Node: Properties, Next: \expandonce, Prev: Hooks, Up: Expansion + +7.6.4 Properties +---------------- + +A "property" is a name/value pair associated with another symbol, +traditionally called an "atom". Both atom and property names are +control sequence names. + + Eplain provides two macros for dealing with property lists: +`\setproperty' and `\getproperty'. + +`\setproperty ATOM PROPNAME VALUE' + `\setproperty' defines the property PROPERTY on the atom ATOM to + be VALUE. ATOM and PROPNAME can be anything acceptable to + `\csname'. VALUE can be anything. + +`\getproperty ATOM PROPNAME' + `\getproperty' expands to the value stored for PROPNAME on ATOM. + If PROPNAME is undefined, it expands to nothing (i.e., `\empty'). + + + The idea of properties originated in Lisp (I believe). There, the +implementation truly does associate properties with atoms. In TeX, +where we have no builtin support for properties, the association is only +conceptual. + + The following example typesets `xyz'. + + \setproperty{a}{pr}{xyz} + \getproperty{a}{pr} + + +File: eplain.info, Node: \expandonce, Next: \ifundefined, Prev: Properties, Up: Expansion + +7.6.5 `\expandonce' +------------------- + +`\expandonce' is defined as `\expandafter\noexpand'. Thus, +`\expandonce TOKEN' expands TOKEN once, instead of to TeX primitives. +This is most useful in an `\edef'. + + For example, the following defines `\temp' to be `\foo', not `abc'. + + \def\foo{abc} + \def\bar{\foo} + \edef\temp{\expandonce\bar} + + +File: eplain.info, Node: \ifundefined, Next: \ifempty, Prev: \expandonce, Up: Expansion + +7.6.6 `\ifundefined' +-------------------- + +`\ifundefined{CS} T \else F \fi' expands the T text if the control +sequence `\CS' is undefined or has been `\let' to `\relax', and the F +text otherwise. + + Since `\ifundefined' is not a primitive conditional, it cannot be +used in places where TeX might skip tokens "at high speed", e.g., +within another conditional--TeX can't match up the `\if''s and `\fi''s. + + This macro was taken directly from `The TeXbook', page 308. + + +File: eplain.info, Node: \ifempty, Next: \ifinteger and \isinteger, Prev: \ifundefined, Up: Expansion + +7.6.7 `\ifempty' +---------------- + +`\ifempty{ARG} T \else F \fi' expands the T text if ARG is the empty +string, and the F text otherwise. This macro is useful when you need +to test for empty arguments to your macros, for example: + + \def\foo#1{\ifempty{#1} T \else F \fi} + + Since `\ifempty' is not a primitive conditional, it cannot be used +in places where TeX might skip tokens "at high speed", e.g., within +another conditional--TeX can't match up the `\if''s and `\fi''s. + + Note that the following code + + \def\empty{} + \ifempty\empty\message{empty}\else\message{not empty}\fi + +will produce the message `not empty'. + + +File: eplain.info, Node: \ifinteger and \isinteger, Next: \futurenonspacelet, Prev: \ifempty, Up: Expansion + +7.6.8 `\ifinteger' and `\isinteger' +----------------------------------- + +`\ifinteger{ARG} T \else F \fi' expands the T text if ARG is an +integer, and the F text otherwise. This macro can detect positive and +negative integers. + + Since `\ifinteger' is not a primitive conditional, it cannot be used +in places where TeX might skip tokens "at high speed", e.g., within +another conditional--TeX can't match up the `\if''s and `\fi''s. For +such situations Eplain provides `\isinteger', which can be used as +follows: + + \if\isinteger{ARG} T \else F \fi + + Although `\ifinteger' and `\isinteger' work well with regular input, +they are not bullet-proof. For example, the following code + + \ifinteger{12_ab}integer\else not integer\fi + +will expand to `ab_integer' (and thus would not even compile outside +math mode). + + These macros come from TeX Frequently Asked Question +(`http://www.tex.ac.uk/cgi-bin/texfaq2html'). + + +File: eplain.info, Node: \futurenonspacelet, Prev: \ifinteger and \isinteger, Up: Expansion + +7.6.9 `\futurenonspacelet' +-------------------------- + +The `\futurelet' primitive allows you to look at the next token from +the input. Sometimes, though, you want to look ahead ignoring any +spaces. This is what `\futurenonspacelet' does. It is otherwise the +same as `\futurelet': you give it two control sequences as arguments, +and it assigns the next nonspace token to the first, and then expands +the second. For example: + + \futurenonspacelet\temp\finishup + \def\finishup{\ifx\temp ...} + + +File: eplain.info, Node: Obeying spaces, Next: Writing out numbers, Prev: Expansion, Up: Programming definitions + +7.7 Obeying spaces +================== + +`\obeywhitespace' makes both end-of-lines and space characters in the +input be respected in the output. Unlike plain TeX's `\obeyspaces', +even spaces at the beginnings of lines turn into blank space. + + By default, the size of the space that is produced by a space +character is the natural space of the current font, i.e., what `\ ' +produces. + + Ordinarily, a blank line in the input produces as much blank vertical +space as a line of text would occupy. You can adjust this by assigning +to the parameter `\blanklineskipamount': if you set this negative, the +space produced by a blank line will be smaller; if positive, larger. + + Tabs are not affected by this routine. In particular, if tabs occur +at the beginning of a line, they will disappear. (If you are trying to +make TeX do the "right thing" with tabs, don't. Use a utility program +like expand instead.) + + +File: eplain.info, Node: Writing out numbers, Next: Mode-specific penalties, Prev: Obeying spaces, Up: Programming definitions + +7.8 Writing out numbers +======================= + +`\numbername' produces the written-out form of its argument, i.e., +`zero' through `ten' for the numbers 0-10, and numerals for all others. + + +File: eplain.info, Node: Mode-specific penalties, Next: Auxiliary files, Prev: Writing out numbers, Up: Programming definitions + +7.9 Mode-specific penalties +=========================== + +TeX's built-in `\penalty' command simply appends to the current list, +no matter what kind of list it is. You might intend a particular +penalty to always be a "vertical" penalty, however, i.e., appended to a +vertical list. Therefore, Eplain provides `\vpenalty' and `\hpenalty' +which first leave the other mode and then do `\penalty'. + + More precisely, `\vpenalty' inserts `\par' if the current mode is +horizontal, and `\hpenalty' inserts `\leavevmode' if the current mode +is vertical. (Thus, `\vpenalty' cannot be used in math mode.) + + +File: eplain.info, Node: Auxiliary files, Next: User-defined environments, Prev: Mode-specific penalties, Up: Programming definitions + +7.10 Auxiliary files +==================== + +It is common to write some information out to a file to be used on a +subsequent run. But when it is time to read the file again, you only +want to do so if the file actually exists. `\testfileexistence' is +given an argument which is appended to `\jobname', and sets the +conditional `\iffileexists' appropriately. For example: + + \testfileexistence{toc}% + \iffileexists + \input \jobname.toc + \fi + + `\testfileexistence' takes an optional parameter; when given, it +will override `\jobname' for the root part of the file name. For +example, if you want to test for the file `answers.aux', you can do +this with the following: + + \testfileexistence[answers]{aux}% + \iffileexists + \input answers.aux + \fi + + +File: eplain.info, Node: User-defined environments, Next: Page list and page range parsers, Prev: Auxiliary files, Up: Programming definitions + +7.11 User-defined environments +============================== + +Plain TeX does not provide "named" block structures, only the anonymous +`\begingroup' and `\endgroup' pair. The disadvantage of this is that +when there are several such groups and one is mismatched, it can be +difficult to find the error. Eplain provides a named block structure so +that if you forget an `\environment' or an `\endenvironment', you will +(probably) get an error message about it. + + For example: + + \def\itpar{ + \environment{@italicpar} + \it\par + } + \def\enditpar{ + \par + \endenvironment{@italicpar}% + } + +which could then be used to set italicized paragraphs: + + \itpar + If I reprehend anything in this world, it is the use of my oracular + tongue, and a nice derangement of epitaphs! + \enditpar + + The above sort of environment allows nesting. But environments +shouldn't always be allowed to nest. Put the control sequence +`\checkenv' at the beginning of a macro that is going to define an +environment that should not be nested. + + +File: eplain.info, Node: Page list and page range parsers, Prev: User-defined environments, Up: Programming definitions + +7.12 Page list and page range parsers +===================================== + +The macros which Eplain uses to parse the page lists and ranges in the +index, `\idxparselist' and `\idxparserange' (*note Page destinations +for index terms::), are sometimes useful when defining page number +encapsulators. They take one argument, text to parse. When a page +list (range) is not present, they set `\idxpagei' to be `\empty'; when +a list (range) is detected, they set `\idxpagei' and `\idxpageii' to +the first and the second page numbers, respectively. + + Eplain's defaults for the page list and page range delimiters are the +same as those in MakeIndex, a comma followed by a space (`, ') and two +dashes (`--'), respectively. If you customize MakeIndex to use +different delimiters, you must not forget to let Eplain know about them +with the commands + + \setidxpagelistdelimiter{LIST-DELIM} + \setidxpagerangedelimiter{PAGE-DELIM} + +These commands save the LIST-DELIM and PAGE-DELIM delimiters in `\idxpagelistdelimiter' +and `\idxpagerangedelimiter', respectively. + + For example, you may want to define a page number markup command +which italicizes and properly underlines page ranges by underlining +only the page numbers and not the delimiter: + + \def\ituline#1{% + {\it + \idxparserange{#1}% + \ifx\idxpagei\empty + % The argument is a single page number. + \underbar{#1}% + \else + % The argument is a page range. + \underbar{\idxpagei}\idxpagerangedelimiter\underbar{\idxpageii}% + \fi}% + } + +Note that the `\ituline' macro is not aware of page lists. This is not +needed if you use hyperlinks in the index, because `\hlidx' and +`\hlidxpage' will break up the page lists before calling the user's +page encapsulator (*note Page destinations for index terms::), so +`\ituline' will never see the lists. If, however, you need to design a +macro which also takes care of the lists, you can extend `\ituline' +with an additional call to `\idxparselist'. + + +File: eplain.info, Node: Demo files, Next: Macro index, Prev: Programming definitions, Up: Top + +8 Demo files +************ + +This chapter contains listings of source files, along with the output +they produce (where appropriate), which illustrate various aspects of +Eplain. The files can be found in the `demo' subdirectory of Eplain +distribution. These demos, both the sources and the compiled PDF and +PS files, are also available from `http://tug.org/eplain/demo'. + +* Menu: + +* Hyperlinks (xhyper.tex):: +* Highlighting TeX comments in listings (lscommnt.tex):: + + +File: eplain.info, Node: Hyperlinks (xhyper.tex), Next: Highlighting TeX comments in listings (lscommnt.tex), Up: Demo files + +8.1 Hyperlinks (`xhyper.tex') +============================= + +% (This file is public domain.) +% +% This file demonstrates the following features of Eplain: +% +% - explicit and implicit hyperlinks; +% - symbolic cross-references; +% - inserting external graphics using |\includegraphics| from +% the \LaTeX\ package |graphicx.sty|. +% - rotating text using |\rotatebox| from |graphicx.sty|. +% +% The compiled demo can be downloaded from +% +% http://tug.org/eplain/demo +% +% In order to compile this file yourself, you will need the CTAN lion +% drawing by Duane Bibby from +% +% ftp://tug.ctan.org/ftpmaint/CTAN_lion/ctan_lion_350x350.png +% +% (thanks, |www.ctan.org|). Place the image file in the same +% directory with this file, and change to that directory. Now, to +% produce a PDF, run twice the command +% +% pdftex xhyper.tex +% +% During the first run, Eplain will write the information about the +% cross-references into |xhyper.aux|, and during the second run this +% information will be read by Eplain to typeset the references. +% +% Demo case: +% +% Suppose you are using pdf\TeX, have a figure you want to insert +% scaled to $200\,pt$ horizontally, and you want this figure to +% completely fill the PDF viewer's window whenever the reader +% selects a link pointing to this figure. Additionally, you want to +% typeset some text as live hyperlinks, clicking on which will start +% a Web browser and open a URL. + +\input eplain + +% Load \LaTeX\ packages. +\beginpackages + % |url.sty| provides the |\url| command which we will use to typeset + % a URL. We request that |url.sty| be the version from June~27, + % 2005, or later, because earlier versions had problems interacting + % with plain \TeX. + \usepackage{url}[2005/06/27] + % |color.sty| provides support for colored text; all hyperlinks are + % automatically colored by Eplain when this package is loaded. We give + % the |dvipsnames| option because we want to use named colors from the + % |dvips| graphics driver. + \usepackage[dvipsnames]{color} + % Finally, we load |graphicx.sty|, for the macros |\includegraphics| + % and |\rotatebox|. + \usepackage{graphicx} +\endpackages + +% Remember that hyperlinks are off by default. Therefore, we need to +% enable them. +\enablehyperlinks + +% Customize some hyperlink options. First, we set border width to~$0$ +% for all links to get rid of the default boxes around links (we +% prefer colored links over the boxed links). Next, we say that all +% links created by the |url| hyperlink group (which means the |\url| +% command from |url.sty|) must be colored using the named color +% |BlueViolet|. +\hlopts{bwidth=0} +\hlopts[url]{colormodel=named,color=BlueViolet} + +% Inhibit page numbering (we have only one page). +\nopagenumbers + +% Define a class word for the cross-reference class |figure|. This +% word, when defined, will be automatically prepended by Eplain to the +% reference created by |\ref| (read on to see its use). +\def\figureword{fig.} + +% Allocate a count register for the figure's number, and a box +% register which we'll use to measure dimensions of the image. +\newcount\fignumber +\newbox\imgbox + +% Now comes the fun part--constructing the figure for the image of the +% \CTAN\ lion. We define a macro +% +% \fig{LABEL}{FILENAME}{CAPTION}{WIDTH} +% +% which creates a figure using LABEL for the cross-reference and +% hyperlink label, reading the image from file FILENAME, using CAPTION +% to name the figure, and WIDTH to scale the image horizontally. +\def\fig#1#2#3#4{% + % Leave some space above the figure. This will also ensure that we + % are in the vertical mode before we produce a |\vbox|. + \medskip + % Advance the figure number. |\global| ensures that the change to + % the count register is global, even when |\fig| is buried inside a + % group. + \global\advance\fignumber by 1 + % We use |\includegraphics| (from |graphicx.sty|) to load the image, + % scaled to the specified width, into our ``measuring'' box + % |\imgbox|. + \setbox\imgbox = \hbox{\includegraphics[width=#4]{#2}}% + % To make the demo even more exciting, let's put the figure's + % caption to the left of the image into the |\indent| space of the + % new paragraph, and rotate the caption~$90^\circ$. + \textindent{% + \rotatebox{90}{F{\sc IGURE}~\the\fignumber. #3}% + }% + % Continue the paragraph by constructing a |\vbox| with the image of + % the lion. We use |\definexref| to define the cross-reference + % label. + \vbox{% + % In addition to the cross-reference label, |\definexref| will + % create a hyperlink destination with the same label. Therefore, + % we customize this destination to do what we need. We say that + % destination type for the hyperlink group |definexref| (to which + % |\definexref| belongs) should be |fitr|. This destination type + % will magnify the rectangle specified by the options |width|, + % |height| and |depth| to the PDF viewer's window. Therefore, we + % set those options accordingly with |\hldestopts| (notice the use + % of |depth| instead of |height|---we will want the rectangle to + % extend {\it downward}, to cover the image which will come + % next). Notice that these settings will be isolated within the + % current group (i.e., the |\vbox| we're constructing). + \hldesttype[definexref]{fitr}% + \hldestopts[definexref]{width=\wd\imgbox,height=0pt,depth=\ht\imgbox}% + % We define a symbolic label so that we can later refer + % to the figure with |\ref|. The command |\definexref| does + % exactly that. The last argument to |\definexref| specifies + % class of the label, which determines the word used by |\ref| in + % front of the reference text (remember that we've defined + % |\figureword| above). + \definexref{#1}{\the\fignumber}{figure}% + % Finally, produce the image which we've been stashing in the box + % register |\imgbox|. + \box\imgbox + }% + \medskip +} + +% Create the figure. +\fig{CTANlion}{ctan_lion_350x350}{Lion in the archives}{200pt} + +% Finished with the fun part, we can relax and typeset some +% hyperlinks. The easiest way to do that is to use the |\ref| +% cross-reference command. We can even pass an optional argument +% (|the lion in|), which will be placed before the class word (|fig.|) +% and become part of the link (to make sure the reader does not have +% to aim too hard). +Show me \ref[the lion in]{CTANlion}. + +% If you are the restless kind, here's another way to create a +% hyperlink to the image: we create a link explicitly by using +% |\hlstart ... \hlend|. We don't specify the link type, therefore +% the default type |name| will be used (these are ``named links'', +% i.e., links pointing to destinations identified by labels). In the +% options argument, we specify that the border of the link should be +% inverted when the user clicks the link (|hlight=O|), and also set +% special color for this link, overriding the default dark-red. The +% label for the destination is the same as the cross-reference label, +% |CTANlion|. +Show me +\hlstart{}{hlight=O,colormodel=named,color=OliveGreen}{CTANlion} + the CTAN lion\hlend. + +% Let's now point somewhere outside our document. Eplain homepage is +% a good target. In the similar spirit, let's consider two +% approaches. The easy one is to use the |\url| command from +% |url.sty|. Remember that we have customized the color of |url| +% hyperlinks, so this one will show up with a different color than the +% default dark-red. +Take me to \url{http://tug.org/eplain}. + +% The second approach is to create an explicit URL link. We specify +% yet another border highlighting mode, |P|, which means that the +% region underneath the bounding box of the link will be drawn inset +% into the page. Also, let's set the color of the hyperlink to an RGB +% color |0.4,0.1,0.4|. Since we cannot use commas to separate the +% color elements inside the options parameter to |\hlstart| (commas +% there separate options), we have to first create a user-defined +% color with |\definecolor| from |color.sty|, and use that in +% |\hlstart|. +\definecolor{mycolor}{rgb}{0.4,0.1,0.4} + +Take me to +\hlstart{url}{hlight=P,colormodel=,color=mycolor}{http://tug.org/eplain} + Eplain homepage\hlend. + +\bye + + +File: eplain.info, Node: Highlighting TeX comments in listings (lscommnt.tex), Prev: Hyperlinks (xhyper.tex), Up: Demo files + +8.2 Highlighting TeX comments in listings (`lscommnt.tex') +========================================================== + +% (This file is public domain.) +% Demonstrate how Eplain can be used to include a TeX source file +% verbatim, typesetting comments in colored italic typewriter type. + +% Load Eplain and LaTeX's color.sty package. +\input eplain +\beginpackages \usepackage{color} \endpackages +\nopagenumbers % Disable page numbers. +\font\commentfont = cmitt10 % Font for the comments (italic \tt). +% We'll define some `protected' macros with `@' in their names. +\makeatletter +% Define an equivalent of Eplain's \letreturn, to be able to assign +% various actions to the (active) percent character. +\begingroup \makeactive\% + \gdef\letpercent{\let%} +\endgroup +% The listing hook to be called in \setuplistinghook, see below. It +% makes `%' active and assigns it a `start comment' action. +\def\hlightcommentslisting{\makeactive\% \letpercent\start@comment}% +% This is what `%' is aliased to before a comment is started. +\def\start@comment{% + \leavevmode % Needed in the very first line of the input to process + % the new par (possibly inserting line number) before we + % kick in with the color and stuff. + \begingroup % Isolate color and font changes and the redefinitions. + \commentfont + \color[cmyk]{0.28,1,1,0.35}% + \percentchar % Produce the actual `%' and + \letpercent\percentchar % make all following `%'s do the same. + \letreturn\end@comment % Call \end@comment at end-of-line. +} +% \end@comment (alias for ^^M inside a comment) will end the comment +% started by \start@comment. We make ^^M active temporarily so that +% the active version of ^^M gets "frozen" into \end@comment. +\begingroup \makeactive\^^M % Avoid ^^M's from here on. + \gdef\end@comment{\endgroup ^^M}% +\endgroup +\resetatcatcode % Make `@' again inaccessible for use in macro names. + +% Define \setuplistinghook to setup comments highlighting, line +% numbering and omitting the last (empty) line of input. +\def\setuplistinghook{\hlightcommentslisting \linenumberedlisting + \nolastlinelisting} +% Isn't this fun? This file typesets itself, with the extra bonus of +% the pretty-printed comments and numbered source lines! +\listing{lscommnt} +\bye + + +File: eplain.info, Node: Macro index, Next: Concept index, Prev: Demo files, Up: Top + +Macro index +*********** + +[index] +* Menu: + +* @hllabel <1>: Link types for pdftex and dvipdfm. + (line 68) +* @hllabel <2>: Destination types for pdftex and dvipdfm. + (line 84) +* @hllabel <3>: Link types for hypertex. + (line 39) +* @hllabel: Destination types for hypertex. + (line 14) +* @indexproof insertion class: Proofing index terms. + (line 28) +* abovecolumnskip: Multiple columns. (line 33) +* abovecolumnspenalty: Tables. (line 32) +* abovelistpenalty: Formatting lists. (line 29) +* abovelistskip: Formatting lists. (line 29) +* abovelistskipamount: Formatting lists. (line 10) +* adjarrow: Arrows and morphisms. + (line 112) +* adjmapdown: Arrows and morphisms. + (line 90) +* adjmapleft: Arrows and morphisms. + (line 65) +* adjmapright: Arrows and morphisms. + (line 62) +* adjmapup: Arrows and morphisms. + (line 93) +* advancebottommargin: Margins. (line 28) +* advanceleftmargin: Margins. (line 28) +* advancerightmargin: Margins. (line 28) +* advancetopmargin: Margins. (line 28) +* afterindexterm: Customizing indexing. + (line 6) +* afterindexterm hook: Indexing commands. (line 63) +* AMSLaTeX: Logos. (line 10) +* AMSTeX: Logos. (line 10) +* arrow: Arrows and morphisms. + (line 20) +* bblem: Formatting bibliographies. + (line 33) +* bblfilebasename: Citations. (line 30) +* bblhook: Formatting bibliographies. + (line 55) +* bblnewblock: Formatting bibliographies. + (line 41) +* bblrm: Formatting bibliographies. + (line 30) +* bblsc: Formatting bibliographies. + (line 37) +* bcolor (hyperlink option): Link options for pdftex and dvipdfm. + (line 14) +* bdash (hyperlink option): Link options for pdftex and dvipdfm. + (line 20) +* begin for index entries: Modifying index entries. + (line 22) +* beginindex hook: Typesetting an index. + (line 30) +* beginlist: Formatting lists. (line 51) +* beginpackages: Environment for loading packages. + (line 6) +* begin{picture}: Packages known to work. + (line 14) +* begin{theindex}: Typesetting an index. + (line 17) +* belowcolumnskip: Multiple columns. (line 34) +* belowfootnoterulespace: Footnotes. (line 46) +* belowlistskip: Formatting lists. (line 30) +* belowlistskipamount: Formatting lists. (line 10) +* biarrow: Arrows and morphisms. + (line 109) +* biblabelcontents: Formatting bibliographies. + (line 23) +* biblabelextraspace: Formatting bibliographies. + (line 49) +* biblabelprint: Formatting bibliographies. + (line 17) +* biblabelwidth: Formatting bibliographies. + (line 11) +* bibliography: Citations. (line 56) +* bibliography (hyperlinks): Citation hyperlinks. (line 11) +* bibliographystyle: Citations. (line 63) +* BibTeX: Logos. (line 10) +* bihline: Arrows and morphisms. + (line 68) +* bimapdown: Arrows and morphisms. + (line 84) +* bimapleft: Arrows and morphisms. + (line 59) +* bimapright: Arrows and morphisms. + (line 56) +* bimapup: Arrows and morphisms. + (line 87) +* bisline: Arrows and morphisms. + (line 115) +* bivline: Arrows and morphisms. + (line 96) +* blackbox: Boxes. (line 7) +* blanklineskipamount in justified text: Justification. (line 24) +* blanklineskipamount in obeyed text: Obeying spaces. (line 16) +* bottom (destination option) <1>: Destination options for pdftex and dvipdfm. + (line 56) +* bottom (destination option): Destination types for pdftex and dvipdfm. + (line 65) +* bottommargin: Margins. (line 18) +* boxit: Boxes. (line 29) +* boxitspace: Boxes. (line 31) +* bstyle (hyperlink option): Link options for pdftex and dvipdfm. + (line 26) +* bwidth (hyperlink option): Link options for pdftex and dvipdfm. + (line 50) +* catcode: Category codes. (line 13) +* center: Justification. (line 7) +* centereddisplays: Displays. (line 13) +* channelwidth <1>: Commutative diagram parameters. + (line 36) +* channelwidth: Arrows and morphisms. + (line 119) +* cite: Citations. (line 37) +* cite (hyperlinks): Citation hyperlinks. (line 6) +* cmd (destination option) <1>: Destination options for pdftex and dvipdfm. + (line 14) +* cmd (destination option) <2>: Destination types for pdftex and dvipdfm. + (line 83) +* cmd (destination option) <3>: Destination options for hypertex. + (line 7) +* cmd (destination option): Destination types for hypertex. + (line 14) +* cmd (hyperlink option) <1>: Link options for pdftex and dvipdfm. + (line 56) +* cmd (hyperlink option) <2>: Link types for pdftex and dvipdfm. + (line 67) +* cmd (hyperlink option) <3>: Link options for hypertex. + (line 7) +* cmd (hyperlink option): Link types for hypertex. + (line 38) +* color (hyperlink option): Options supported by all drivers. + (line 37) +* colormodel (hyperlink option): Options supported by all drivers. + (line 37) +* columnfill: Multiple columns. (line 14) +* commdiag: Construction of commutative diagrams. + (line 9) +* commdiagbaselines <1>: Commutative diagram parameters. + (line 43) +* commdiagbaselines: Construction of commutative diagrams. + (line 64) +* csn: \csn and \ece. (line 6) +* definecolor: Hyperlinks (xhyper.tex). + (line 6) +* definecontentsfile: Alternative contents files. + (line 6) +* defineindex: Indexing. (line 37) +* definexref <1>: Hyperlinks (xhyper.tex). + (line 6) +* definexref: Defining generic references. + (line 6) +* definexref (hyperlinks): Cross-reference hyperlinks. + (line 6) +* depth (destination option) <1>: Destination options for pdftex and dvipdfm. + (line 34) +* depth (destination option): Destination types for pdftex and dvipdfm. + (line 61) +* depth (hyperlink option): Link options for pdftex and dvipdfm. + (line 124) +* discretionaries: Paths. (line 20) +* displaylines: Displays. (line 18) +* doublecolumns: Multiple columns. (line 7) +* drawline: Slanted lines and vectors. + (line 6) +* drawvector: Slanted lines and vectors. + (line 6) +* dvipdfm (hyperlink driver): Hyperlink drivers pdftex and dvipdfm. + (line 6) +* eattoken: Macro arguments. (line 23) +* ece: \csn and \ece. (line 10) +* edefappend: \edefappend. (line 6) +* ehrule: Rules. (line 17) +* enablehyperlinks <1>: Hyperlink driver nolinks. + (line 48) +* enablehyperlinks <2>: Choosing destination placement. + (line 7) +* enablehyperlinks: Introduction to hyperlinks. + (line 42) +* end for index entries: Modifying index entries. + (line 22) +* endlist: Formatting lists. (line 53) +* endnumberedlist: Lists. (line 14) +* endorderedlist: Lists. (line 14) +* endpackages: Environment for loading packages. + (line 6) +* endunorderedlist: Lists. (line 22) +* end{picture}: Packages known to work. + (line 14) +* end{theindex}: Typesetting an index. + (line 17) +* eplain: Invoking Eplain. (line 30) +* eplaininput: Environment for loading packages. + (line 28) +* eqalignno: Displays. (line 18) +* eqconstruct: Formatting equation references. + (line 21) +* eqdef: Equation references. (line 15) +* eqdef (hyperlinks): Equation reference hyperlinks. + (line 6) +* eqdefn: Equation references. (line 38) +* eqdefn (hyperlinks): Equation reference hyperlinks. + (line 6) +* eqnumber: Equation references. (line 8) +* eqprint: Formatting equation references. + (line 12) +* eqref <1>: Equation reference hyperlinks. + (line 20) +* eqref: Equation references. (line 46) +* eqrefn <1>: Equation reference hyperlinks. + (line 20) +* eqrefn: Equation references. (line 52) +* eqsubdef: Subequation references. + (line 11) +* eqsubdef (hyperlinks): Equation reference hyperlinks. + (line 6) +* eqsubdefn: Subequation references. + (line 11) +* eqsubdefn (hyperlinks): Equation reference hyperlinks. + (line 6) +* eqsubreftext: Subequation references. + (line 22) +* everyfootnote: Footnotes. (line 35) +* evrule: Rules. (line 18) +* expandonce: \expandonce. (line 6) +* ext (hyperlink option) <1>: Link options for hypertex. + (line 20) +* ext (hyperlink option): Link types for hypertex. + (line 23) +* file (hyperlink option) <1>: Link options for pdftex and dvipdfm. + (line 63) +* file (hyperlink option) <2>: Link types for pdftex and dvipdfm. + (line 41) +* file (hyperlink option) <3>: Link options for hypertex. + (line 14) +* file (hyperlink option): Link types for hypertex. + (line 22) +* fileexists (conditional): Auxiliary files. (line 10) +* filename (hyperlink type) <1>: Link types for pdftex and dvipdfm. + (line 40) +* filename (hyperlink type): Link types for hypertex. + (line 21) +* filepage (hyperlink type): Link types for pdftex and dvipdfm. + (line 52) +* fit (destination type): Destination types for pdftex and dvipdfm. + (line 18) +* fitb (destination type): Destination types for pdftex and dvipdfm. + (line 39) +* fitbh (destination type): Destination types for pdftex and dvipdfm. + (line 44) +* fitbv (destination type): Destination types for pdftex and dvipdfm. + (line 52) +* fith (destination type): Destination types for pdftex and dvipdfm. + (line 23) +* fitr (destination type): Destination types for pdftex and dvipdfm. + (line 60) +* fitv (destination type): Destination types for pdftex and dvipdfm. + (line 31) +* flushleft: Justification. (line 7) +* flushright: Justification. (line 7) +* fmtversion: Introduction. (line 47) +* footnote (hyperlinks): Footnote hyperlinks. (line 7) +* footnotemarkseparation: Footnotes. (line 25) +* footnoteruleheight: Footnotes. (line 44) +* footnoterulewidth: Footnotes. (line 44) +* For: Iteration. (line 15) +* for: Iteration. (line 6) +* frac: Fractions. (line 6) +* fullmonthname: Time of day. (line 13) +* futurenonspacelet: \futurenonspacelet. (line 6) +* generaldisplay: Formatting displays. (line 10) +* getproperty: Properties. (line 18) +* gloggingall: Diagnostics. (line 23) +* gobble: Macro arguments. (line 7) +* gobbletwo: Macro arguments. (line 7) +* gridcommdiag: Construction of commutative diagrams. + (line 89) +* gtracingall: Diagnostics. (line 23) +* gutter: Multiple columns. (line 23) +* gutterbox: Multiple columns. (line 24) +* hangindent for index entries: Typesetting an index. + (line 45) +* harrowlength <1>: Commutative diagram parameters. + (line 11) +* harrowlength: Arrows and morphisms. + (line 27) +* hchannel: Commutative diagram parameters. + (line 39) +* height (destination option) <1>: Destination options for pdftex and dvipdfm. + (line 37) +* height (destination option): Destination types for pdftex and dvipdfm. + (line 60) +* height (hyperlink option): Link options for pdftex and dvipdfm. + (line 127) +* hgrid <1>: Commutative diagram parameters. + (line 47) +* hgrid: Construction of commutative diagrams. + (line 109) +* hldest <1>: Setting hyperlink types and options. + (line 7) +* hldest <2>: Destination types for pdftex and dvipdfm. + (line 87) +* hldest <3>: Destination types for hypertex. + (line 17) +* hldest: Explicit hyperlinks. (line 6) +* hldestoff <1>: Turning low-level commands on/off. + (line 6) +* hldestoff: Hyperlink driver nolinks. + (line 10) +* hldeston: Turning low-level commands on/off. + (line 6) +* hldestopts <1>: Hyperlinks (xhyper.tex). + (line 6) +* hldestopts <2>: Setting group options. + (line 11) +* hldestopts: Setting default types and options. + (line 15) +* hldesttype <1>: Hyperlinks (xhyper.tex). + (line 6) +* hldesttype <2>: Setting group types. (line 6) +* hldesttype: Setting default types and options. + (line 6) +* hlend <1>: Hyperlinks (xhyper.tex). + (line 6) +* hlend: Explicit hyperlinks. (line 25) +* hlfootbacklabel: Footnote hyperlinks. (line 12) +* hlfootlabel: Footnote hyperlinks. (line 12) +* hlfootlabelnumber: Footnote hyperlinks. (line 14) +* hlhash: Link types for hypertex. + (line 40) +* hlidx: Exact destinations for index terms. + (line 13) +* hlidxlabel: Exact destinations for index terms. + (line 23) +* hlidxlabelnumber: Exact destinations for index terms. + (line 25) +* hlidxpage: Page destinations for index terms. + (line 20) +* hlidxpagelabel: Page destinations for index terms. + (line 11) +* hlight (hyperlink option): Link options for pdftex and dvipdfm. + (line 69) +* hlightcommentslisting: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* hline: Arrows and morphisms. + (line 53) +* hloff <1>: Turning low-level commands on/off. + (line 6) +* hloff: Hyperlink driver nolinks. + (line 10) +* hlon: Turning low-level commands on/off. + (line 6) +* hlopts <1>: Hyperlinks (xhyper.tex). + (line 6) +* hlopts <2>: Setting group options. + (line 11) +* hlopts: Setting default types and options. + (line 15) +* hlstart <1>: Hyperlinks (xhyper.tex). + (line 6) +* hlstart <2>: Setting hyperlink types and options. + (line 7) +* hlstart <3>: Link types for pdftex and dvipdfm. + (line 71) +* hlstart <4>: Link types for hypertex. + (line 43) +* hlstart: Explicit hyperlinks. (line 25) +* hltype <1>: Setting group types. (line 6) +* hltype: Setting default types and options. + (line 6) +* hmorphposn <1>: Commutative diagram parameters. + (line 20) +* hmorphposn: Arrows and morphisms. + (line 33) +* hmorphposndn <1>: Commutative diagram parameters. + (line 22) +* hmorphposndn: Arrows and morphisms. + (line 38) +* hmorphposnlft <1>: Commutative diagram parameters. + (line 23) +* hmorphposnlft: Arrows and morphisms. + (line 38) +* hmorphposnrt <1>: Commutative diagram parameters. + (line 22) +* hmorphposnrt: Arrows and morphisms. + (line 38) +* hmorphposnup <1>: Commutative diagram parameters. + (line 22) +* hmorphposnup: Arrows and morphisms. + (line 38) +* hoffset: Proofing index terms. + (line 21) +* hookaction: Hooks. (line 15) +* hookactiononce: Hooks. (line 23) +* hookappend: Hooks. (line 16) +* hookprepend: Hooks. (line 17) +* hookrun: Hooks. (line 39) +* href: General hyperlinks. (line 6) +* hruledefaultdepth: Rules. (line 9) +* hruledefaultheight: Rules. (line 9) +* hsize: Margins. (line 34) +* hypertex (hyperlink driver): Hyperlink driver hypertex. + (line 6) +* hyphenpenalty for index entries: Typesetting an index. + (line 45) +* identity: Macro arguments. (line 28) +* idx: Indexing commands. (line 8) +* idx (hyperlinks): Index hyperlinks. (line 6) +* idxargclose: Index entries with special characters. + (line 73) +* idxargopen: Index entries with special characters. + (line 73) +* idxbeginrangemark: Customizing indexing. + (line 42) +* idxencapoperator: Customizing indexing. + (line 39) +* idxendrangemark: Customizing indexing. + (line 45) +* idxexact: Choosing destination placement. + (line 8) +* idxmarked: Indexing commands. (line 29) +* idxmarked (hyperlinks): Index hyperlinks. (line 6) +* idxname: Indexing commands. (line 19) +* idxname (hyperlinks): Index hyperlinks. (line 6) +* idxnameseparator: Indexing commands. (line 19) +* idxnone: Choosing destination placement. + (line 9) +* idxpage: Choosing destination placement. + (line 9) +* idxpagei: Page list and page range parsers. + (line 6) +* idxpageii: Page list and page range parsers. + (line 6) +* idxpagelistdelimiter: Page list and page range parsers. + (line 23) +* idxpagenum: Customizing indexing. + (line 51) +* idxpagerangedelimiter: Page list and page range parsers. + (line 23) +* idxparselist: Page list and page range parsers. + (line 6) +* idxparserange: Page list and page range parsers. + (line 6) +* idxrangebeginword: Customizing indexing. + (line 20) +* idxrangeendword: Customizing indexing. + (line 23) +* idxseealsocmdword: Customizing indexing. + (line 29) +* idxseecmdword: Customizing indexing. + (line 26) +* idxsubentryseparator: Customizing indexing. + (line 36) +* idxsubmarked: Indexing commands. (line 40) +* idxsubmarked (hyperlinks): Index hyperlinks. (line 6) +* ifempty: \ifempty. (line 6) +* iffileexists: Auxiliary files. (line 10) +* ifinteger: \ifinteger and \isinteger. + (line 6) +* ifpdf <1>: Introduction to hyperlinks. + (line 51) +* ifpdf: Checking for PDF output. + (line 10) +* ifrewritetocfile: Reading the .toc file. + (line 26) +* ifundefined: \ifundefined. (line 6) +* includegraphics: Hyperlinks (xhyper.tex). + (line 6) +* indexfilebasename: Typesetting an index. + (line 11) +* indexfonts: Typesetting an index. + (line 24) +* indexitem hook: Typesetting an index. + (line 49) +* indexprooffont: Proofing index terms. + (line 12) +* indexproofterm: Proofing index terms. + (line 12) +* indexproofunbox: Proofing index terms. + (line 28) +* indexsee <1>: Hyperlinks in see and see also entries. + (line 8) +* indexsee: Customizing indexing. + (line 55) +* indexseealso <1>: Hyperlinks in see and see also entries. + (line 8) +* indexseealso: Customizing indexing. + (line 55) +* indexseealsowords: Customizing indexing. + (line 55) +* indexseeword: Customizing indexing. + (line 55) +* indexsetmargins: Proofing index terms. + (line 21) +* indexspace: Typesetting an index. + (line 54) +* innerdef: Allocation macros. (line 26) +* innerinnerdef: Allocation macros. (line 37) +* innernewbox: Allocation macros. (line 21) +* innernewcount: Allocation macros. (line 21) +* innernewdimen: Allocation macros. (line 21) +* innernewfam: Allocation macros. (line 21) +* innernewhelp: Allocation macros. (line 21) +* innernewif: Allocation macros. (line 21) +* innernewinsert: Allocation macros. (line 21) +* innernewlanguage: Allocation macros. (line 21) +* innernewread: Allocation macros. (line 22) +* innernewskip: Allocation macros. (line 22) +* innernewtoks: Allocation macros. (line 22) +* innernewwrite: Allocation macros. (line 22) +* input: Environment for loading packages. + (line 24) +* insidemargin: Proofing index terms. + (line 21) +* interfootnoteskip: Footnotes. (line 29) +* interitemskip: Formatting lists. (line 30) +* interitemskipamount: Formatting lists. (line 14) +* isinteger: \ifinteger and \isinteger. + (line 13) +* item in indexes: Typesetting an index. + (line 35) +* itemletter: Formatting lists. (line 44) +* itemnumber: Formatting lists. (line 44) +* ituline: Page list and page range parsers. + (line 26) +* jobname <1>: Auxiliary files. (line 9) +* jobname <2>: Typesetting an index. + (line 11) +* jobname: Citations. (line 17) +* LAMSTeX: Logos. (line 10) +* LaTeX: Logos. (line 10) +* lbracechar: Category codes. (line 59) +* left (destination option) <1>: Destination options for pdftex and dvipdfm. + (line 60) +* left (destination option): Destination types for pdftex and dvipdfm. + (line 11) +* leftdisplayindent: Displays. (line 11) +* leftdisplays: Displays. (line 10) +* leftdisplaysetup: Formatting displays. (line 8) +* leftmargin: Margins. (line 18) +* leqalignno: Displays. (line 19) +* letreturn: Category codes. (line 41) +* letter: Category codes. (line 10) +* lft: Arrows and morphisms. + (line 15) +* li: Lists. (line 30) +* li (hyperlinks): List hyperlinks. (line 6) +* linenumberedlisting <1>: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* linenumberedlisting: Verbatim listing. (line 17) +* listcompact: Lists. (line 41) +* listing <1>: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* listing: Verbatim listing. (line 7) +* listingfont: Verbatim listing. (line 10) +* listleftindent: Formatting lists. (line 18) +* listmarkerspace: Formatting lists. (line 33) +* listrightindent: Formatting lists. (line 18) +* loggingall: Diagnostics. (line 12) +* loop: Iteration. (line 40) +* makeactive: Category codes. (line 13) +* makeatletter: Category codes. (line 22) +* makeatother: Category codes. (line 32) +* makeblankbox: Boxes. (line 12) +* makecolumns: Tables. (line 6) +* makeheadline: Proofing index terms. + (line 28) +* mapdown: Arrows and morphisms. + (line 13) +* mapleft: Arrows and morphisms. + (line 6) +* mapright: Arrows and morphisms. + (line 6) +* mapup: Arrows and morphisms. + (line 13) +* matrix: Construction of commutative diagrams. + (line 10) +* MF: Logos. (line 10) +* monthname: Time of day. (line 10) +* morphdist <1>: Commutative diagram parameters. + (line 32) +* morphdist: Arrows and morphisms. + (line 33) +* name (hyperlink type) <1>: Link types for pdftex and dvipdfm. + (line 18) +* name (hyperlink type): Link types for hypertex. + (line 7) +* new...: Allocation macros. (line 9) +* newwin (hyperlink option) <1>: Link options for pdftex and dvipdfm. + (line 90) +* newwin (hyperlink option): Link types for pdftex and dvipdfm. + (line 42) +* noarrow: Invoking Eplain. (line 84) +* noauxfile: Invoking Eplain. (line 89) +* nobibtex: Invoking Eplain. (line 73) +* nocite: Citations. (line 53) +* nolastlinelisting <1>: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* nolastlinelisting: Verbatim listing. (line 25) +* nolinks (hyperlink driver): Hyperlink driver nolinks. + (line 6) +* normalbaselineskip: Options supported by all drivers. + (line 19) +* num (hyperlink type): Link types for pdftex and dvipdfm. + (line 92) +* numberedfootnote: Footnotes. (line 7) +* numberedfootnote (hyperlinks): Footnote hyperlinks. (line 6) +* numberedlist: Lists. (line 14) +* numberedlistdepth: Formatting lists. (line 41) +* numberedmarker: Formatting lists. (line 37) +* numbername: Writing out numbers. (line 6) +* obeywhitespace: Obeying spaces. (line 6) +* orderedlist: Lists. (line 14) +* other: Category codes. (line 10) +* outer: Allocation macros. (line 12) +* outsidemargin: Proofing index terms. + (line 21) +* page (hyperlink type): Link types for pdftex and dvipdfm. + (line 31) +* pagefit (hyperlink option) <1>: Link options for pdftex and dvipdfm. + (line 109) +* pagefit (hyperlink option): Link types for pdftex and dvipdfm. + (line 32) +* pageno: Proofing index terms. + (line 21) +* pagetotal: Multiple columns. (line 14) +* paperheight: Margins. (line 45) +* paperwidth: Margins. (line 48) +* parindent in indexes: Typesetting an index. + (line 24) +* path: Paths. (line 13) +* pdfoutput: Checking for PDF output. + (line 20) +* pdftex (hyperlink driver): Hyperlink drivers pdftex and dvipdfm. + (line 6) +* percentchar: Category codes. (line 56) +* phantomeqlabel: Equation reference hyperlinks. + (line 14) +* phantomeqnumber: Equation reference hyperlinks. + (line 14) +* previouseverydisplay: Formatting displays. (line 15) +* printbetweencitations: Formatting citations. + (line 21) +* printcitefinish: Formatting citations. + (line 16) +* printcitenote: Formatting citations. + (line 27) +* printcitestart: Formatting citations. + (line 16) +* printitem: Formatting lists. (line 52) +* printlistinglineno: Verbatim listing. (line 19) +* quadcolumns: Multiple columns. (line 7) +* raggedright for index entries: Typesetting an index. + (line 45) +* raise (hyperlink option) <1>: Setting group options. + (line 34) +* raise (hyperlink option): Options supported by all drivers. + (line 13) +* raw (destination type) <1>: Destination types for pdftex and dvipdfm. + (line 81) +* raw (destination type): Destination types for hypertex. + (line 12) +* raw (hyperlink type) <1>: Link types for pdftex and dvipdfm. + (line 65) +* raw (hyperlink type): Link types for hypertex. + (line 37) +* rbracechar: Category codes. (line 60) +* readindexfile: Typesetting an index. + (line 6) +* readindexfile (hyperlinks): Index hyperlinks. (line 9) +* readtocfile: Reading the .toc file. + (line 6) +* ref <1>: Hyperlinks (xhyper.tex). + (line 6) +* ref: Using generic references. + (line 17) +* ref (hyperlinks): Cross-reference hyperlinks. + (line 19) +* refn: Using generic references. + (line 9) +* refn (hyperlinks): Cross-reference hyperlinks. + (line 14) +* refs: Using generic references. + (line 23) +* refs (hyperlinks): Cross-reference hyperlinks. + (line 26) +* refspace <1>: Page reference hyperlinks. + (line 10) +* refspace: Cross-reference hyperlinks. + (line 24) +* reftie <1>: Equation reference hyperlinks. + (line 20) +* reftie: Cross-reference hyperlinks. + (line 16) +* repeat: Iteration. (line 42) +* resetatcatcode: Category codes. (line 23) +* rewritetocfile (conditional): Reading the .toc file. + (line 26) +* right (destination option) <1>: Destination options for pdftex and dvipdfm. + (line 64) +* right (destination option): Destination types for pdftex and dvipdfm. + (line 65) +* rightmargin: Margins. (line 18) +* rotatebox: Hyperlinks (xhyper.tex). + (line 6) +* rt: Arrows and morphisms. + (line 14) +* sanitize: Converting to characters. + (line 22) +* sarrowlength <1>: Commutative diagram parameters. + (line 17) +* sarrowlength: Arrows and morphisms. + (line 28) +* see for index entries <1>: Customizing indexing. + (line 64) +* see for index entries: Modifying index entries. + (line 36) +* seealso for index entries: Modifying index entries. + (line 49) +* seevariant: Customizing indexing. + (line 55) +* setidxpagelistdelimiter: Page list and page range parsers. + (line 14) +* setidxpagerangedelimiter: Page list and page range parsers. + (line 14) +* setproperty: Properties. (line 13) +* setuplistinghook <1>: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* setuplistinghook: Verbatim listing. (line 13) +* sidx: Indexing commands. (line 8) +* sidxmarked: Indexing commands. (line 29) +* sidxname: Indexing commands. (line 19) +* sidxsubmarked: Indexing commands. (line 40) +* singlecolumn: Multiple columns. (line 9) +* sline: Arrows and morphisms. + (line 23) +* SLiTeX: Logos. (line 11) +* special: Introduction to hyperlinks. + (line 9) +* specialpathdelimiters (conditional): Paths. (line 28) +* subeqnumber: Subequation references. + (line 15) +* subitem in indexes: Typesetting an index. + (line 35) +* subsubitem in indexes: Typesetting an index. + (line 35) +* testfileexistence: Auxiliary files. (line 8) +* TeX: Logos. (line 6) +* timestamp: Time of day. (line 18) +* timestring: Time of day. (line 16) +* toc...entry: Writing the .toc file. + (line 9) +* tocfilebasename: Changing the .toc file's root name. + (line 10) +* today: Time of day. (line 21) +* top (destination option) <1>: Destination options for pdftex and dvipdfm. + (line 68) +* top (destination option): Destination types for pdftex and dvipdfm. + (line 11) +* topmargin: Margins. (line 18) +* tracingall: Diagnostics. (line 9) +* tracingboxes: Diagnostics. (line 17) +* tracingoff: Diagnostics. (line 19) +* triplecolumns: Multiple columns. (line 7) +* tt: Packages known to work. + (line 76) +* ttfamily: Packages known to work. + (line 73) +* uncatcodespecials: Category codes. (line 51) +* unorderedlist: Lists. (line 22) +* unorderedlistdepth: Formatting lists. (line 41) +* unorderedmarker: Formatting lists. (line 37) +* url: Hyperlinks (xhyper.tex). + (line 6) +* url (hyperlink type) <1>: Link types for pdftex and dvipdfm. + (line 25) +* url (hyperlink type): Link types for hypertex. + (line 14) +* url (hyperlinks): URL hyperlinks. (line 6) +* usepackage: The \usepackage command. + (line 6) +* varrowlength <1>: Commutative diagram parameters. + (line 14) +* varrowlength: Arrows and morphisms. + (line 28) +* vchannel: Commutative diagram parameters. + (line 39) +* verbatim: Verbatim listing. (line 34) +* verbatimescapechar: Verbatim listing. (line 47) +* vgrid <1>: Commutative diagram parameters. + (line 51) +* vgrid: Construction of commutative diagrams. + (line 109) +* vline: Arrows and morphisms. + (line 81) +* vmorphposn <1>: Commutative diagram parameters. + (line 26) +* vmorphposn: Arrows and morphisms. + (line 33) +* vmorphposndn <1>: Commutative diagram parameters. + (line 28) +* vmorphposndn: Arrows and morphisms. + (line 38) +* vmorphposnlft <1>: Commutative diagram parameters. + (line 29) +* vmorphposnlft: Arrows and morphisms. + (line 39) +* vmorphposnrt <1>: Commutative diagram parameters. + (line 28) +* vmorphposnrt: Arrows and morphisms. + (line 38) +* vmorphposnup <1>: Commutative diagram parameters. + (line 28) +* vmorphposnup: Arrows and morphisms. + (line 38) +* vpenalty: Mode-specific penalties. + (line 9) +* vruledefaultwidth: Rules. (line 10) +* width (destination option) <1>: Destination options for pdftex and dvipdfm. + (line 40) +* width (destination option): Destination types for pdftex and dvipdfm. + (line 60) +* width (hyperlink option): Link options for pdftex and dvipdfm. + (line 130) +* writenumberedtocentry: Writing the .toc file. + (line 13) +* writenumberedtocline: Writing the .toc file. + (line 36) +* writetocentry: Writing the .toc file. + (line 7) +* xrdef: Page references. (line 10) +* xrdef (hyperlinks): Page reference hyperlinks. + (line 6) +* xref: Page references. (line 14) +* xref (hyperlinks): Page reference hyperlinks. + (line 10) +* xrefn: Using generic references. + (line 10) +* xrefn (hyperlinks): Cross-reference hyperlinks. + (line 14) +* xrefpageword <1>: Page reference hyperlinks. + (line 10) +* xrefpageword: Page references. (line 17) +* xrefwarning conditional: Using generic references. + (line 15) +* xrefwarningfalse: Citations. (line 73) +* xrlabel: Converting to characters. + (line 6) +* xyz (destination type) <1>: Destination types for pdftex and dvipdfm. + (line 7) +* xyz (destination type): Destination types for hypertex. + (line 7) +* zoom (destination option) <1>: Destination options for pdftex and dvipdfm. + (line 21) +* zoom (destination option): Destination types for pdftex and dvipdfm. + (line 7) + + +File: eplain.info, Node: Concept index, Prev: Macro index, Up: Top + +Concept index +************* + +[index] +* Menu: + +* .aux file <1>: Cross-references. (line 11) +* .aux file: Citations. (line 17) +* .bbl file: Citations. (line 20) +* .bib file: Citations. (line 20) +* .bst files: Citations. (line 65) +* .cls files: Loading LaTeX packages. + (line 6) +* .eps files: Packages known to work. + (line 90) +* .fmt file <1>: Invoking Eplain. (line 14) +* .fmt file: Installation. (line 27) +* .idx files <1>: Index hyperlinks. (line 14) +* .idx files: Indexing. (line 23) +* .ind files <1>: Index hyperlinks. (line 25) +* .ind files: Indexing. (line 27) +* .pdf files <1>: Introduction to hyperlinks. + (line 13) +* .pdf files <2>: Packages known to work. + (line 90) +* .pdf files: Checking for PDF output. + (line 6) +* .ps files: Introduction to hyperlinks. + (line 13) +* .sty files: Loading LaTeX packages. + (line 6) +* .toc file: Contents. (line 10) +* active characters: Category codes. (line 12) +* after index terms: Customizing indexing. + (line 6) +* alignments: Tables. (line 6) +* all groups, specifying: Setting group types. (line 26) +* allocation macros: Allocation macros. (line 6) +* alphanumeric references: Citations. (line 116) +* AMSLaTeX: Logos. (line 10) +* amsppt.sty: Invoking Eplain. (line 92) +* AMSTeX: Logos. (line 10) +* AMSTeX conflicts: Invoking Eplain. (line 92) +* arguments, ignoring: Macro arguments. (line 6) +* arrows: Arrows and morphisms. + (line 6) +* atom: Properties. (line 6) +* autopict.sty: Packages known to work. + (line 12) +* avoiding boxed links <1>: Setting default types and options. + (line 25) +* avoiding boxed links: URL hyperlinks. (line 17) +* axuiliary files, existence of: Auxiliary files. (line 6) +* backslash character: Category codes. (line 15) +* balancing of columns with \singlecolumn: Multiple columns. (line 11) +* Berry, Karl: Introduction. (line 28) +* beveled hyperlink border: Link options for pdftex and dvipdfm. + (line 26) +* bibliographies: Citations. (line 6) +* bibliography fonts: Formatting bibliographies. + (line 30) +* bibliography items, extra space between: Formatting bibliographies. + (line 55) +* bibliography, formatting the: Formatting bibliographies. + (line 6) +* bibliography, hyperlinks: Citation hyperlinks. (line 11) +* BibTeX <1>: Logos. (line 10) +* BibTeX: Citations. (line 9) +* bibtex: Invoking Eplain. (line 103) +* black boxes: Boxes. (line 6) +* Borceux, Francis: Construction of commutative diagrams. + (line 80) +* border color, hyperlink: Link options for pdftex and dvipdfm. + (line 14) +* border style, hyperlink: Link options for pdftex and dvipdfm. + (line 20) +* border width, hyperlink: Link options for pdftex and dvipdfm. + (line 50) +* Bott, Raoul: Construction of commutative diagrams. + (line 13) +* boxed links, avoiding <1>: Setting default types and options. + (line 25) +* boxed links, avoiding: URL hyperlinks. (line 17) +* boxes, open: Boxes. (line 12) +* braces, inside index entries: Index entries with special characters. + (line 63) +* brackets, inside index entries: Index entries with special characters. + (line 86) +* Brockett, Roger W.: Construction of commutative diagrams. + (line 38) +* Butterfly Lemma: Construction of commutative diagrams. + (line 122) +* Carlisle, David: Loading LaTeX packages. + (line 14) +* category codes: Category codes. (line 6) +* centering: Justification. (line 6) +* characters, converting to: Converting to characters. + (line 6) +* citations: Citations. (line 6) +* citations, formatting: Formatting citations. + (line 6) +* citations, hyperlinks: Citation hyperlinks. (line 6) +* citations, undefined: Citations. (line 43) +* cmtt8: Proofing index terms. + (line 12) +* color: Packages known to work. + (line 25) +* color, demo: Hyperlinks (xhyper.tex). + (line 6) +* color, hyperlink border: Link options for pdftex and dvipdfm. + (line 14) +* color, hyperlinks <1>: Setting default types and options. + (line 25) +* color, hyperlinks <2>: Options supported by all drivers. + (line 37) +* color, hyperlinks: URL hyperlinks. (line 17) +* color, problems with pdfTeX: Packages known to work. + (line 29) +* color.sty <1>: Hyperlinks (xhyper.tex). + (line 6) +* color.sty <2>: Setting default types and options. + (line 27) +* color.sty <3>: Hyperlink driver nolinks. + (line 34) +* color.sty <4>: URL hyperlinks. (line 18) +* color.sty: Packages known to work. + (line 21) +* colored links <1>: Setting default types and options. + (line 25) +* colored links <2>: Options supported by all drivers. + (line 37) +* colored links: URL hyperlinks. (line 17) +* column balancing with \singlecolumn: Multiple columns. (line 11) +* column eject: Multiple columns. (line 14) +* commas after index terms: Customizing indexing. + (line 6) +* commas in cross-referencing index entries: Customizing indexing. + (line 64) +* comments, highlighting in listings: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* commutative diagrams: Commutative diagrams. + (line 6) +* contents: Contents. (line 6) +* contents, and verbatim text: Writing the .toc file. + (line 50) +* contents, hyperlinks: Contents hyperlinks. (line 6) +* ConTeXt: Packages known to work. + (line 29) +* continued index entries: Typesetting an index. + (line 35) +* covering homotopy property: Construction of commutative diagrams. + (line 13) +* cross-references: Cross-references. (line 6) +* cross-references, defining general <1>: Using generic references. + (line 6) +* cross-references, defining general: Defining generic references. + (line 6) +* cross-references, demo: Hyperlinks (xhyper.tex). + (line 6) +* cross-references, hyperlinks: Cross-reference hyperlinks. + (line 6) +* cross-referencing index entries <1>: Customizing indexing. + (line 64) +* cross-referencing index entries: Modifying index entries. + (line 36) +* CTRL-L, and verbatim listing: Verbatim listing. (line 30) +* cube: Construction of commutative diagrams. + (line 90) +* customizing indexing: Customizing indexing. + (line 6) +* dashed hyperlink border: Link options for pdftex and dvipdfm. + (line 20) +* date: Time of day. (line 6) +* default hyperlink options <1>: Setting group types. (line 17) +* default hyperlink options: Setting hyperlink types and options. + (line 6) +* default hyperlink type <1>: Setting group types. (line 17) +* default hyperlink type: Setting hyperlink types and options. + (line 6) +* defining general references <1>: Using generic references. + (line 6) +* defining general references: Defining generic references. + (line 6) +* definitions, global: Category codes. (line 38) +* demo files: Demo files. (line 6) +* destgroup: Implicit hyperlinks. (line 10) +* destgroup `bib': Citation hyperlinks. (line 11) +* destgroup `definexref': Cross-reference hyperlinks. + (line 6) +* destgroup `eq': Equation reference hyperlinks. + (line 6) +* destgroup `foot': Footnote hyperlinks. (line 6) +* destgroup `footback': Footnote hyperlinks. (line 6) +* destgroup `idx': Index hyperlinks. (line 6) +* destgroup `li': List hyperlinks. (line 6) +* destgroup `xrdef': Page reference hyperlinks. + (line 6) +* destgroup options <1>: Setting group options. + (line 6) +* destgroup options: Setting hyperlink types and options. + (line 12) +* destgroup options, demo: Hyperlinks (xhyper.tex). + (line 6) +* destgroup type <1>: Setting group types. (line 6) +* destgroup type: Setting hyperlink types and options. + (line 12) +* destgroup type, demo: Hyperlinks (xhyper.tex). + (line 6) +* destination group: Implicit hyperlinks. (line 10) +* destination options: Introduction to hyperlinks. + (line 105) +* destination options, common: Options supported by all drivers. + (line 12) +* destination options, dvipdfm: Destination options for pdftex and dvipdfm. + (line 6) +* destination options, hypertex: Destination options for hypertex. + (line 6) +* destination options, pdftex: Destination options for pdftex and dvipdfm. + (line 6) +* destination type: Introduction to hyperlinks. + (line 88) +* destination types, dvipdfm: Destination types for pdftex and dvipdfm. + (line 6) +* destination types, hypertex: Destination types for hypertex. + (line 6) +* destination types, pdftex: Destination types for pdftex and dvipdfm. + (line 6) +* destinations, default options <1>: Setting group types. (line 17) +* destinations, default options: Setting hyperlink types and options. + (line 6) +* destinations, default type <1>: Setting group types. (line 17) +* destinations, default type: Setting hyperlink types and options. + (line 6) +* destinations, dimensions: Destination options for pdftex and dvipdfm. + (line 34) +* destinations, disabling <1>: Turning hyperlinks on/off. + (line 6) +* destinations, disabling: Hyperlink driver nolinks. + (line 6) +* destinations, group options <1>: Setting group options. + (line 6) +* destinations, group options: Setting hyperlink types and options. + (line 12) +* destinations, group options, demo: Hyperlinks (xhyper.tex). + (line 6) +* destinations, group type <1>: Setting group types. (line 6) +* destinations, group type: Setting hyperlink types and options. + (line 12) +* destinations, group type, demo: Hyperlinks (xhyper.tex). + (line 6) +* destinations, in another file <1>: Link types for pdftex and dvipdfm. + (line 40) +* destinations, in another file: Link types for hypertex. + (line 21) +* destinations, large operators <1>: Setting group options. + (line 34) +* destinations, large operators: Options supported by all drivers. + (line 27) +* destinations, magnification: Destination options for pdftex and dvipdfm. + (line 21) +* destinations, named <1>: Link types for pdftex and dvipdfm. + (line 18) +* destinations, named: Link types for hypertex. + (line 7) +* destinations, numbered: Link types for pdftex and dvipdfm. + (line 92) +* destinations, page: Link types for pdftex and dvipdfm. + (line 31) +* destinations, raising: Options supported by all drivers. + (line 13) +* destinations, URL <1>: Link types for pdftex and dvipdfm. + (line 25) +* destinations, URL: Link types for hypertex. + (line 14) +* detecting numbers: \ifinteger and \isinteger. + (line 6) +* diagnostics: Diagnostics. (line 6) +* Diagram, macros for LaTeX: Construction of commutative diagrams. + (line 80) +* dimensions, hyperlink: Link options for pdftex and dvipdfm. + (line 124) +* dimensions, hyperlink destination: Destination options for pdftex and dvipdfm. + (line 34) +* disabling hyperlinks <1>: Turning hyperlinks on/off. + (line 6) +* disabling hyperlinks: Hyperlink driver nolinks. + (line 6) +* displayed math and hyperlinks <1>: Setting group options. + (line 34) +* displayed math and hyperlinks: Options supported by all drivers. + (line 27) +* displays, left-justifying: Displays. (line 6) +* do...while loops: Iteration. (line 6) +* double column output: Multiple columns. (line 6) +* double columns in indexes: Typesetting an index. + (line 24) +* draft, option for graphics.sty: Packages known to work. + (line 69) +* driver dvipdfm: Hyperlink drivers pdftex and dvipdfm. + (line 6) +* driver hypertex: Hyperlink driver hypertex. + (line 6) +* driver nolinks: Hyperlink driver nolinks. + (line 6) +* driver pdftex: Hyperlink drivers pdftex and dvipdfm. + (line 6) +* drivers, hyperlink: Introduction to hyperlinks. + (line 6) +* dvipdfm <1>: Hyperlink driver hypertex. + (line 13) +* dvipdfm: Introduction to hyperlinks. + (line 36) +* dvipdfm, destination options: Destination options for pdftex and dvipdfm. + (line 6) +* dvipdfm, destination types: Destination types for pdftex and dvipdfm. + (line 6) +* dvipdfm, hyperlink driver: Hyperlink drivers pdftex and dvipdfm. + (line 6) +* dvipdfm, link options: Link options for pdftex and dvipdfm. + (line 6) +* dvipdfm, link types: Link types for pdftex and dvipdfm. + (line 6) +* dvips: Hyperlink driver hypertex. + (line 13) +* Eijkhout, Victor: Iteration. (line 61) +* eject in multicolumns: Multiple columns. (line 14) +* electronic mail addresses, breaking <1>: Packages known to work. + (line 120) +* electronic mail addresses, breaking: Paths. (line 6) +* empty argument, checking for: \ifempty. (line 6) +* empty equation labels: Equation references. (line 22) +* empty equation labels, referring to: Equation references. (line 27) +* empty string, checking for: \ifempty. (line 6) +* Encapsulated PostScript: Packages known to work. + (line 90) +* environments, user-defined: User-defined environments. + (line 6) +* Eplain, installing: Installation. (line 6) +* Eplain, invoking: Invoking Eplain. (line 6) +* Eplain, purpose of: Introduction. (line 6) +* Eplain, upgrading: Installation. (line 6) +* eplain.aux: Installation. (line 40) +* eplain.fmt: Installation. (line 27) +* EPS: Packages known to work. + (line 90) +* epstopdf: Packages known to work. + (line 90) +* epstopdf.sty: Packages known to work. + (line 88) +* equation labels, characters valid in: Equation references. (line 56) +* equation numbers, formatting of: Formatting equation references. + (line 6) +* equations, giving numbers to all: Equation references. (line 22) +* equations, groups of: Subequation references. + (line 6) +* equations, hyperlinks: Equation reference hyperlinks. + (line 6) +* equations, numbering: Equation references. (line 6) +* equations, references to: Equation references. (line 6) +* error messages: Diagnostics. (line 25) +* error on \input: Environment for loading packages. + (line 35) +* escape character, changing verbatim: Verbatim listing. (line 47) +* exact index hyperlinks: Exact destinations for index terms. + (line 28) +* expansion, one-level: \expandonce. (line 6) +* explicit hyperlinks: Explicit hyperlinks. (line 6) +* explicit hyperlinks, demo: Hyperlinks (xhyper.tex). + (line 6) +* file, hyperlink to <1>: Link types for pdftex and dvipdfm. + (line 40) +* file, hyperlink to: Link types for hypertex. + (line 21) +* file: links: General hyperlinks. (line 36) +* filenames, breaking <1>: Packages known to work. + (line 120) +* filenames, breaking: Paths. (line 6) +* files, verbatim listing of: Verbatim listing. (line 6) +* files, verbatim listing of, demo: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* filtering index entries with hyperlinks: Exact destinations for index terms. + (line 33) +* footnotes, hyperlinks: Footnote hyperlinks. (line 6) +* footnotes, numbered: Footnotes. (line 6) +* for loops: Iteration. (line 6) +* form feed character, and verbatim listing: Verbatim listing. + (line 30) +* format file: Installation. (line 27) +* formatting index entries: Typesetting an index. + (line 35) +* fractions: Fractions. (line 6) +* Ghostscript: Hyperlink driver hypertex. + (line 13) +* gobbling arguments: Macro arguments. (line 6) +* golden mean: Construction of commutative diagrams. + (line 59) +* Graham, Ronald L.: Citations. (line 86) +* graphics collection, LaTeX <1>: Hyperlink driver nolinks. + (line 34) +* graphics collection, LaTeX <2>: Packages known to work. + (line 25) +* graphics collection, LaTeX: Loading LaTeX packages. + (line 14) +* graphics collection, LaTeX, demo: Hyperlinks (xhyper.tex). + (line 6) +* graphics, omitting typesetting of: Packages known to work. + (line 69) +* graphics, problems with pdfTeX: Packages known to work. + (line 29) +* graphics.sty: Packages known to work. + (line 22) +* graphicx.sty <1>: Hyperlinks (xhyper.tex). + (line 6) +* graphicx.sty: Packages known to work. + (line 23) +* grid: Construction of commutative diagrams. + (line 80) +* group `' (empty): Setting group types. (line 17) +* group `*': Setting group types. (line 26) +* group `bib': Citation hyperlinks. (line 11) +* group `cite': Citation hyperlinks. (line 6) +* group `definexref': Cross-reference hyperlinks. + (line 6) +* group `eq' <1>: Setting group options. + (line 35) +* group `eq': Equation reference hyperlinks. + (line 6) +* group `foot': Footnote hyperlinks. (line 6) +* group `footback': Footnote hyperlinks. (line 6) +* group `hrefext': General hyperlinks. (line 21) +* group `hrefint': General hyperlinks. (line 12) +* group `idx': Index hyperlinks. (line 6) +* group `li': List hyperlinks. (line 6) +* group `ref': Cross-reference hyperlinks. + (line 11) +* group `url': URL hyperlinks. (line 6) +* group `xrdef': Page reference hyperlinks. + (line 6) +* group `xref': Page reference hyperlinks. + (line 10) +* group option list: Setting group options. + (line 49) +* group options, hyperlink <1>: Setting group options. + (line 6) +* group options, hyperlink: Setting hyperlink types and options. + (line 12) +* group options, hyperlink, demo: Hyperlinks (xhyper.tex). + (line 6) +* group type, hyperlink <1>: Setting group types. (line 6) +* group type, hyperlink: Setting hyperlink types and options. + (line 12) +* group type, hyperlink, demo: Hyperlinks (xhyper.tex). + (line 6) +* group, destination: Implicit hyperlinks. (line 10) +* group, disabling hyperlinks: Turning hyperlinks on/off for a group. + (line 6) +* group, link: Implicit hyperlinks. (line 10) +* group, preserving option list: Setting group options. + (line 22) +* groups, specifying all: Setting group types. (line 26) +* hanging on \input: Environment for loading packages. + (line 35) +* help messages: Diagnostics. (line 25) +* highlight modes, hyperlink: Link options for pdftex and dvipdfm. + (line 69) +* highlighting: Packages known to work. + (line 110) +* highlighting, in listings: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* Ho"ppner, Klaus: Packages known to work. + (line 82) +* hooks: Hooks. (line 6) +* hyperlink border color: Link options for pdftex and dvipdfm. + (line 14) +* hyperlink color <1>: Setting default types and options. + (line 25) +* hyperlink color <2>: Options supported by all drivers. + (line 37) +* hyperlink color: URL hyperlinks. (line 17) +* hyperlink destination, dimensions: Destination options for pdftex and dvipdfm. + (line 34) +* hyperlink destination, magnification: Destination options for pdftex and dvipdfm. + (line 21) +* hyperlink destination, named <1>: Link types for pdftex and dvipdfm. + (line 18) +* hyperlink destination, named: Link types for hypertex. + (line 7) +* hyperlink destination, numbered: Link types for pdftex and dvipdfm. + (line 92) +* hyperlink destination, page: Link types for pdftex and dvipdfm. + (line 31) +* hyperlink destination, raising: Options supported by all drivers. + (line 13) +* hyperlink dimensions: Link options for pdftex and dvipdfm. + (line 124) +* hyperlink driver dvipdfm: Hyperlink drivers pdftex and dvipdfm. + (line 6) +* hyperlink driver hypertex: Hyperlink driver hypertex. + (line 6) +* hyperlink driver nolinks: Hyperlink driver nolinks. + (line 6) +* hyperlink driver pdftex: Hyperlink drivers pdftex and dvipdfm. + (line 6) +* hyperlink drivers: Introduction to hyperlinks. + (line 6) +* hyperlink group, disabling hyperlinks: Turning hyperlinks on/off for a group. + (line 6) +* hyperlink group, preserving option list: Setting group options. + (line 22) +* hyperlink options, common: Options supported by all drivers. + (line 6) +* hyperlinks, bibliography: Citation hyperlinks. (line 11) +* hyperlinks, border style: Link options for pdftex and dvipdfm. + (line 20) +* hyperlinks, border width: Link options for pdftex and dvipdfm. + (line 50) +* hyperlinks, citations: Citation hyperlinks. (line 6) +* hyperlinks, cross-references: Cross-reference hyperlinks. + (line 6) +* hyperlinks, default options <1>: Setting group types. (line 17) +* hyperlinks, default options: Setting hyperlink types and options. + (line 6) +* hyperlinks, default type <1>: Setting group types. (line 17) +* hyperlinks, default type: Setting hyperlink types and options. + (line 6) +* hyperlinks, demo: Hyperlinks (xhyper.tex). + (line 6) +* hyperlinks, disabling <1>: Turning hyperlinks on/off. + (line 6) +* hyperlinks, disabling: Hyperlink driver nolinks. + (line 6) +* hyperlinks, equations: Equation reference hyperlinks. + (line 6) +* hyperlinks, explicit: Explicit hyperlinks. (line 6) +* hyperlinks, explicit, demo: Hyperlinks (xhyper.tex). + (line 6) +* hyperlinks, filtering index entries: Exact destinations for index terms. + (line 33) +* hyperlinks, footnotes: Footnote hyperlinks. (line 6) +* hyperlinks, group option list: Setting group options. + (line 49) +* hyperlinks, group options <1>: Setting group options. + (line 6) +* hyperlinks, group options: Setting hyperlink types and options. + (line 12) +* hyperlinks, group options, demo: Hyperlinks (xhyper.tex). + (line 6) +* hyperlinks, group type <1>: Setting group types. (line 6) +* hyperlinks, group type: Setting hyperlink types and options. + (line 12) +* hyperlinks, highlight mode: Link options for pdftex and dvipdfm. + (line 69) +* hyperlinks, implicit: Implicit hyperlinks. (line 6) +* hyperlinks, implicit, demo: Hyperlinks (xhyper.tex). + (line 6) +* hyperlinks, index: Index hyperlinks. (line 6) +* hyperlinks, index destination placement: Choosing destination placement. + (line 6) +* hyperlinks, index, exact: Exact destinations for index terms. + (line 28) +* hyperlinks, large operators <1>: Setting group options. + (line 34) +* hyperlinks, large operators: Options supported by all drivers. + (line 27) +* hyperlinks, lists: List hyperlinks. (line 6) +* hyperlinks, opening in a new window: Link options for pdftex and dvipdfm. + (line 90) +* hyperlinks, page references: Page reference hyperlinks. + (line 6) +* hyperlinks, preserving page-breaking: Hyperlink driver nolinks. + (line 6) +* hyperlinks, preserving spacing: Hyperlink driver nolinks. + (line 6) +* hyperlinks, see and see also index entries: Hyperlinks in see and see also entries. + (line 6) +* hyperlinks, table of contents: Contents hyperlinks. (line 6) +* hyperlinks, to another file <1>: Link types for pdftex and dvipdfm. + (line 40) +* hyperlinks, to another file: Link types for hypertex. + (line 21) +* hyperlinks, URL <1>: Link types for pdftex and dvipdfm. + (line 25) +* hyperlinks, URL <2>: Link types for hypertex. + (line 14) +* hyperlinks, URL <3>: URL hyperlinks. (line 6) +* hyperlinks, URL: General hyperlinks. (line 20) +* hyperref.sty: Packages known not to work. + (line 9) +* hypertex, destination options: Destination options for hypertex. + (line 6) +* hypertex, destination types: Destination types for hypertex. + (line 6) +* hypertex, hyperlink driver: Hyperlink driver hypertex. + (line 6) +* hypertex, link options: Link options for hypertex. + (line 6) +* hypertex, link types: Link types for hypertex. + (line 6) +* hypertext links: Hyperlinks. (line 6) +* identifying numbers: \ifinteger and \isinteger. + (line 6) +* idxuniq: Exact destinations for index terms. + (line 33) +* ignoring arguments: Macro arguments. (line 6) +* implicit hyperlinks: Implicit hyperlinks. (line 6) +* implicit hyperlinks, demo: Hyperlinks (xhyper.tex). + (line 6) +* inaccessible macros: Category codes. (line 19) +* index entries and ranges: Modifying index entries. + (line 22) +* index entries containing braces: Index entries with special characters. + (line 63) +* index entries containing brackets: Index entries with special characters. + (line 86) +* index entries with special characters: Index entries with special characters. + (line 6) +* index entries' page numbers, modifying: Modifying index entries. + (line 6) +* index entries, and cross-referencing <1>: Customizing indexing. + (line 64) +* index entries, and cross-referencing: Modifying index entries. + (line 36) +* index entries, proofing: Proofing index terms. + (line 6) +* index entries, with verbatim text: Index entries with special characters. + (line 40) +* index entry continuations: Typesetting an index. + (line 35) +* index entry formatting: Typesetting an index. + (line 35) +* index entry general sorting: Indexing commands. (line 51) +* index fonts: Typesetting an index. + (line 24) +* index groupings: Typesetting an index. + (line 54) +* index hyperlink: Index hyperlinks. (line 6) +* index typesetting: Typesetting an index. + (line 6) +* index, and verbatim text: Index entries with special characters. + (line 40) +* index, choosing destination placement: Choosing destination placement. + (line 6) +* index, destination placement: Choosing destination placement. + (line 6) +* index, exact hyperlinks: Exact destinations for index terms. + (line 28) +* index, hyperlinks in see and see also entries: Hyperlinks in see and see also entries. + (line 6) +* index, parsing page numbers: Page destinations for index terms. + (line 32) +* index, placement of destinations: Choosing destination placement. + (line 6) +* index, selecting destination placement: Choosing destination placement. + (line 6) +* index, underlining page numbers: Page list and page range parsers. + (line 26) +* indexes, multiple: Indexing. (line 37) +* indexing: Indexing. (line 6) +* indexing and trailing spaces: Indexing terms. (line 20) +* indexing commands: Indexing commands. (line 6) +* indexing terms: Indexing terms. (line 6) +* insertion classes: Multiple columns. (line 38) +* inset hyperlink border: Link options for pdftex and dvipdfm. + (line 26) +* installation: Installation. (line 6) +* integers, detecting: \ifinteger and \isinteger. + (line 6) +* item labels, changing: Formatting lists. (line 54) +* iteration: Iteration. (line 6) +* justification: Justification. (line 6) +* Knuth, Donald Ervin <1>: Category codes. (line 7) +* Knuth, Donald Ervin: Citations. (line 86) +* labels on items, changing: Formatting lists. (line 54) +* labels, characters valid in: Cross-references. (line 20) +* labels, empty equation: Equation references. (line 22) +* labels, empty equation, referring to: Equation references. (line 27) +* Lamport, Leslie: Introduction. (line 13) +* LAMSTeX: Logos. (line 10) +* Lang, Serge <1>: Construction of commutative diagrams. + (line 122) +* Lang, Serge: Arrows and morphisms. + (line 126) +* large operators and hyperlinks <1>: Setting group options. + (line 34) +* large operators and hyperlinks: Options supported by all drivers. + (line 27) +* LaTeX <1>: Slanted lines and vectors. + (line 7) +* LaTeX <2>: Logos. (line 10) +* LaTeX <3>: Citations. (line 10) +* LaTeX: Introduction. (line 13) +* LaTeX graphics collection <1>: Hyperlink driver nolinks. + (line 34) +* LaTeX graphics collection <2>: Packages known to work. + (line 25) +* LaTeX graphics collection: Loading LaTeX packages. + (line 14) +* LaTeX graphics collection, demo: Hyperlinks (xhyper.tex). + (line 6) +* LaTeX packages <1>: Packages known not to work. + (line 6) +* LaTeX packages <2>: Packages known to work. + (line 6) +* LaTeX packages: Loading LaTeX packages. + (line 6) +* LaTeX packages, restoring \input: Environment for loading packages. + (line 24) +* left-justification: Justification. (line 6) +* left-justification of displays: Displays. (line 6) +* letterspacing: Packages known to work. + (line 110) +* linear systems theory: Construction of commutative diagrams. + (line 38) +* lines: Slanted lines and vectors. + (line 15) +* link group: Implicit hyperlinks. (line 10) +* link options: Introduction to hyperlinks. + (line 105) +* link options, common: Options supported by all drivers. + (line 35) +* link options, dvipdfm: Link options for pdftex and dvipdfm. + (line 6) +* link options, hypertex: Link options for hypertex. + (line 6) +* link options, pdftex: Link options for pdftex and dvipdfm. + (line 6) +* link type: Introduction to hyperlinks. + (line 88) +* link types, dvipdfm: Link types for pdftex and dvipdfm. + (line 6) +* link types, hypertex: Link types for hypertex. + (line 6) +* link types, pdftex: Link types for pdftex and dvipdfm. + (line 6) +* link, group options <1>: Setting group options. + (line 6) +* link, group options: Setting hyperlink types and options. + (line 12) +* link, group options, demo: Hyperlinks (xhyper.tex). + (line 6) +* link, group type <1>: Setting group types. (line 6) +* link, group type: Setting hyperlink types and options. + (line 12) +* linkgroup: Implicit hyperlinks. (line 10) +* linkgroup `cite': Citation hyperlinks. (line 6) +* linkgroup `eq' <1>: Setting group options. + (line 35) +* linkgroup `eq': Equation reference hyperlinks. + (line 20) +* linkgroup `foot': Footnote hyperlinks. (line 6) +* linkgroup `footback': Footnote hyperlinks. (line 6) +* linkgroup `hrefext': General hyperlinks. (line 21) +* linkgroup `hrefint': General hyperlinks. (line 12) +* linkgroup `idx': Index hyperlinks. (line 6) +* linkgroup `ref': Cross-reference hyperlinks. + (line 11) +* linkgroup `url': URL hyperlinks. (line 6) +* linkgroup `xref': Page reference hyperlinks. + (line 10) +* linkgroup options <1>: Setting group options. + (line 6) +* linkgroup options: Setting hyperlink types and options. + (line 12) +* linkgroup options, demo: Hyperlinks (xhyper.tex). + (line 6) +* linkgroup type <1>: Setting group types. (line 6) +* linkgroup type: Setting hyperlink types and options. + (line 12) +* links, hypertext: Hyperlinks. (line 6) +* list of figures: Alternative contents files. + (line 6) +* list of tables: Alternative contents files. + (line 6) +* listing files: Verbatim listing. (line 6) +* listing files, demo: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* lists: Lists. (line 6) +* lists, formatting: Formatting lists. (line 6) +* lists, hyperlinks: List hyperlinks. (line 6) +* logos: Logos. (line 6) +* lookahead without spaces: \futurenonspacelet. (line 6) +* loops: Iteration. (line 6) +* lscommnt.tex: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* magnification, hyperlink destination: Destination options for pdftex and dvipdfm. + (line 21) +* makeindex <1>: Index hyperlinks. (line 12) +* makeindex <2>: Indexing. (line 14) +* makeindex: Invoking Eplain. (line 103) +* margins, changing: Margins. (line 6) +* margins, index terms in: Proofing index terms. + (line 6) +* mathematics displays, formatting: Displays. (line 6) +* mathematics displays, hyperlinks <1>: Setting group options. + (line 34) +* mathematics displays, hyperlinks: Options supported by all drivers. + (line 27) +* Metafont: Logos. (line 10) +* miniltx.tex: Loading LaTeX packages. + (line 14) +* minimal realizations: Construction of commutative diagrams. + (line 38) +* modifying index entries' page numbers: Modifying index entries. + (line 6) +* morphisms: Arrows and morphisms. + (line 6) +* multiple column output: Multiple columns. (line 6) +* multiple indexes: Indexing. (line 37) +* named destination <1>: Link types for pdftex and dvipdfm. + (line 18) +* named destination: Link types for hypertex. + (line 7) +* names, of TeX variants: Logos. (line 6) +* new window, opening hyperlink in: Link options for pdftex and dvipdfm. + (line 90) +* newlinechar: Diagnostics. (line 27) +* newlines, obeying: Obeying spaces. (line 6) +* nolinks, hyperlink driver: Hyperlink driver nolinks. + (line 6) +* numbered destination: Link types for pdftex and dvipdfm. + (line 92) +* numbered lists: Lists. (line 6) +* numbered references: Citations. (line 86) +* numbers, detecting: \ifinteger and \isinteger. + (line 6) +* numbers, written form of: Writing out numbers. (line 6) +* Oberdiek, Heiko: Checking for PDF output. + (line 24) +* omitting hyperlinks <1>: Turning hyperlinks on/off. + (line 6) +* omitting hyperlinks: Hyperlink driver nolinks. + (line 6) +* omitting typesetting of graphics: Packages known to work. + (line 69) +* open boxes: Boxes. (line 12) +* option list, group: Setting group options. + (line 49) +* option list, preserving for group: Setting group options. + (line 22) +* options, destination, common: Options supported by all drivers. + (line 12) +* options, destination, dvipdfm: Destination options for pdftex and dvipdfm. + (line 6) +* options, destination, hypertex: Destination options for hypertex. + (line 6) +* options, destination, pdftex: Destination options for pdftex and dvipdfm. + (line 6) +* options, link and destination: Introduction to hyperlinks. + (line 105) +* options, link, common: Options supported by all drivers. + (line 35) +* options, link, dvipdfm: Link options for pdftex and dvipdfm. + (line 6) +* options, link, hypertex: Link options for hypertex. + (line 6) +* options, link, pdftex: Link options for pdftex and dvipdfm. + (line 6) +* ordered list: Lists. (line 6) +* output routine and index proofing: Proofing index terms. + (line 28) +* overstriking: Packages known to work. + (line 110) +* packages, LaTeX <1>: Packages known not to work. + (line 6) +* packages, LaTeX <2>: Packages known to work. + (line 6) +* packages, LaTeX: Loading LaTeX packages. + (line 6) +* page destination: Link types for pdftex and dvipdfm. + (line 31) +* page list, parsing: Page destinations for index terms. + (line 32) +* page range, parsing: Page destinations for index terms. + (line 32) +* page reference hyperlink: Page reference hyperlinks. + (line 6) +* page-breaking, preserving with hyperlinks: Hyperlink driver nolinks. + (line 6) +* parsing page numbers: Page destinations for index terms. + (line 32) +* Patashnik, Oren: Citations. (line 9) +* pathnames, breaking <1>: Packages known to work. + (line 120) +* pathnames, breaking: Paths. (line 6) +* PDF: Packages known to work. + (line 90) +* PDF output: Checking for PDF output. + (line 6) +* pdftex <1>: Introduction to hyperlinks. + (line 35) +* pdftex <2>: Checking for PDF output. + (line 6) +* pdftex: Invoking Eplain. (line 115) +* pdftex, destination options: Destination options for pdftex and dvipdfm. + (line 6) +* pdftex, destination types: Destination types for pdftex and dvipdfm. + (line 6) +* pdftex, hyperlink driver: Hyperlink drivers pdftex and dvipdfm. + (line 6) +* pdftex, link options: Link options for pdftex and dvipdfm. + (line 6) +* pdftex, link types: Link types for pdftex and dvipdfm. + (line 6) +* pdfTeX, problems using color and graphics: Packages known to work. + (line 29) +* pdfTeX, problems with supp-mis.tex: Packages known to work. + (line 29) +* pict2e.sty: Packages known not to work. + (line 16) +* picture mode <1>: Slanted lines and vectors. + (line 7) +* picture mode: Packages known to work. + (line 14) +* Portable Document Format: Packages known to work. + (line 90) +* PostScript point <1>: Link options for pdftex and dvipdfm. + (line 50) +* PostScript point <2>: Destination options for pdftex and dvipdfm. + (line 50) +* PostScript point: Destination types for pdftex and dvipdfm. + (line 66) +* proofing index terms: Proofing index terms. + (line 6) +* properties: Properties. (line 6) +* ps2pdf: Hyperlink driver hypertex. + (line 13) +* psfrag.sty: Packages known to work. + (line 97) +* quadruple column output: Multiple columns. (line 6) +* Rahtz, Sebastian: Loading LaTeX packages. + (line 14) +* raising hyperlink destinations <1>: Setting group options. + (line 34) +* raising hyperlink destinations: Options supported by all drivers. + (line 13) +* ranges and index entry: Modifying index entries. + (line 22) +* recognizing numbers: \ifinteger and \isinteger. + (line 6) +* rectangles: Boxes. (line 6) +* references, alphanumeric: Citations. (line 116) +* references, defining general <1>: Using generic references. + (line 6) +* references, defining general: Defining generic references. + (line 6) +* references, numbered: Citations. (line 86) +* register allocation: Allocation macros. (line 6) +* restoring \input, LaTeX packages: Environment for loading packages. + (line 24) +* return character: Category codes. (line 41) +* right-justification: Justification. (line 6) +* rms: Introduction. (line 14) +* rotation: Packages known to work. + (line 25) +* rotation, demo: Hyperlinks (xhyper.tex). + (line 6) +* rule thickness: Rules. (line 7) +* run: links: General hyperlinks. (line 37) +* scaling: Packages known to work. + (line 25) +* scaling, demo: Hyperlinks (xhyper.tex). + (line 6) +* sed: Customizing indexing. + (line 66) +* see also index entries and hyperlinks: Hyperlinks in see and see also entries. + (line 6) +* see also index entries and sorting: Customizing indexing. + (line 51) +* see, and index entries <1>: Customizing indexing. + (line 64) +* see, and index entries: Modifying index entries. + (line 36) +* see, and index entries, hyperlinks: Hyperlinks in see and see also entries. + (line 6) +* silent indexing: Indexing terms. (line 6) +* skipping tokens <1>: \ifempty. (line 12) +* skipping tokens: \ifundefined. (line 10) +* SLiTeX: Logos. (line 11) +* Snake Lemma: Arrows and morphisms. + (line 130) +* solid hyperlink border: Link options for pdftex and dvipdfm. + (line 26) +* sorting an index: Indexing. (line 6) +* sorting of index entries: Indexing commands. (line 51) +* soul.sty: Packages known to work. + (line 108) +* space above index entries: Typesetting an index. + (line 35) +* spaces, ignoring: \futurenonspacelet. (line 6) +* spaces, obeying: Obeying spaces. (line 6) +* spaces, trailing and indexing commands: Indexing terms. (line 20) +* spacing out: Packages known to work. + (line 110) +* spacing, preserving with hyperlinks: Hyperlink driver nolinks. + (line 6) +* special characters, in index entries: Index entries with special characters. + (line 6) +* special characters, in table of contents: Writing the .toc file. + (line 50) +* Stallman, Richard: Introduction. (line 14) +* striking out: Packages known to work. + (line 110) +* style, hyperlink border: Link options for pdftex and dvipdfm. + (line 26) +* subequations, referring to: Subequation references. + (line 6) +* subterm in indexing: Indexing terms. (line 13) +* supp-mis.tex, problems with pdfTeX: Packages known to work. + (line 29) +* supp-pdf.tex: Packages known to work. + (line 29) +* table of contents: Contents. (line 6) +* table of contents, and verbatim text: Writing the .toc file. + (line 50) +* table of contents, hyperlinks: Contents hyperlinks. (line 6) +* table of contents, short <1>: Macro arguments. (line 10) +* table of contents, short: Reading the .toc file. + (line 19) +* tables: Tables. (line 6) +* tabs: Obeying spaces. (line 22) +* TeX by Topic: Iteration. (line 61) +* TeX Frequently Asked Question: \ifinteger and \isinteger. + (line 26) +* TEXFORMATS: Installation. (line 43) +* texi2dvi <1>: Indexing. (line 34) +* texi2dvi <2>: Citations. (line 97) +* texi2dvi: Invoking Eplain. (line 103) +* Texinfo: Introduction. (line 13) +* TEXINPUTS: Installation. (line 23) +* time of day: Time of day. (line 6) +* toc files, writing several: Changing the .toc file's root name. + (line 12) +* tracing: Diagnostics. (line 6) +* trailing spaces and indexing commands: Indexing terms. (line 20) +* trimsee: Customizing indexing. + (line 67) +* triple column output: Multiple columns. (line 6) +* Tu, Loring W.: Construction of commutative diagrams. + (line 13) +* TUGboat: Introduction. (line 60) +* type, link and destination: Introduction to hyperlinks. + (line 88) +* types, destination, dvipdfm: Destination types for pdftex and dvipdfm. + (line 6) +* types, destination, hypertex: Destination types for hypertex. + (line 6) +* types, destination, pdftex: Destination types for pdftex and dvipdfm. + (line 6) +* types, link, dvipdfm: Link types for pdftex and dvipdfm. + (line 6) +* types, link, hypertex: Link types for hypertex. + (line 6) +* types, link, pdftex: Link types for pdftex and dvipdfm. + (line 6) +* typesetting an index: Typesetting an index. + (line 6) +* undefined control sequence, checking for: \ifundefined. (line 10) +* undefined labels, warnings about: Installation. (line 40) +* underline hyperlink border: Link options for pdftex and dvipdfm. + (line 26) +* underlining: Packages known to work. + (line 110) +* underlining page numbers in index: Page list and page range parsers. + (line 26) +* universal mapping property: Construction of commutative diagrams. + (line 25) +* unordered lists: Lists. (line 6) +* upgrading: Installation. (line 6) +* URL for ifpdf.sty: Checking for PDF output. + (line 24) +* URL for MakeIndex: Indexing. (line 14) +* URL for path.sty: Paths. (line 33) +* URL for pdfTeX: Checking for PDF output. + (line 6) +* URL for texnames.sty: Logos. (line 14) +* URL hyperlink <1>: Link types for pdftex and dvipdfm. + (line 25) +* URL hyperlink <2>: Link types for hypertex. + (line 14) +* URL hyperlink <3>: URL hyperlinks. (line 6) +* URL hyperlink: General hyperlinks. (line 20) +* url.sty <1>: Hyperlinks (xhyper.tex). + (line 6) +* url.sty <2>: URL hyperlinks. (line 6) +* url.sty: Packages known to work. + (line 118) +* user-inaccessible macros: Category codes. (line 19) +* vectors: Slanted lines and vectors. + (line 15) +* verbatim listing: Verbatim listing. (line 6) +* verbatim listing, demo: Highlighting TeX comments in listings (lscommnt.tex). + (line 6) +* verbatim text, in index: Index entries with special characters. + (line 40) +* verbatim text, in table of contents: Writing the .toc file. + (line 50) +* version number: Introduction. (line 47) +* Walden, David: Introduction. (line 57) +* Warner, Frank W.: Construction of commutative diagrams. + (line 25) +* whatsits made by hyperlinks: Hyperlink driver nolinks. + (line 25) +* whatsits made by index entries: Indexing commands. (line 63) +* while loops: Iteration. (line 6) +* whitespace: Obeying spaces. (line 6) +* width, hyperlink border: Link options for pdftex and dvipdfm. + (line 50) +* writing several toc files: Changing the .toc file's root name. + (line 12) +* xcolor.sty: Packages known not to work. + (line 19) +* xdvi: Hyperlink driver hypertex. + (line 11) +* xeplain.tex: Introduction. (line 6) +* xhyper.tex: Hyperlinks (xhyper.tex). + (line 6) +* Zassenhaus, Hans: Construction of commutative diagrams. + (line 122) +* zooming, hyperlink destination: Destination options for pdftex and dvipdfm. + (line 21) + + + +Tag Table: +Node: Top824 +Node: Introduction8097 +Node: Installation11064 +Node: Invoking Eplain13116 +Node: User definitions17568 +Node: Diagnostics19395 +Node: Rules20965 +Node: Citations21798 +Node: Formatting citations27641 +Node: Formatting bibliographies29187 +Node: Displays32016 +Node: Formatting displays33063 +Node: Time of day33735 +Node: Lists34496 +Node: Formatting lists36655 +Node: Verbatim listing38951 +Node: Contents41680 +Node: Writing the .toc file42351 +Node: Reading the .toc file45219 +Node: Changing the .toc file's root name46629 +Node: Alternative contents files47649 +Node: Cross-references48214 +Node: Defining generic references49699 +Node: Using generic references50577 +Node: Page references51868 +Node: Equation references52692 +Node: Formatting equation references55445 +Node: Subequation references57745 +Node: Indexing59668 +Node: Indexing terms61671 +Node: Indexing commands62784 +Node: Modifying index entries65812 +Node: Index entries with special characters68529 +Node: Proofing index terms72788 +Node: Typesetting an index74601 +Node: Customizing indexing77068 +Node: Justification80775 +Node: Tables82454 +Node: Margins85009 +Node: Multiple columns87170 +Node: Footnotes89154 +Node: Fractions91741 +Node: Paths92528 +Node: Logos94135 +Node: Boxes94822 +Node: Checking for PDF output96620 +Node: Loading LaTeX packages97711 +Node: The \usepackage command99059 +Node: Environment for loading packages100149 +Node: Packages known to work102216 +Node: Packages known not to work108621 +Node: Hyperlinks109383 +Node: Introduction to hyperlinks109966 +Node: Explicit hyperlinks115522 +Node: Implicit hyperlinks117812 +Node: General hyperlinks119634 +Node: URL hyperlinks121102 +Node: Citation hyperlinks123131 +Node: List hyperlinks123863 +Node: Cross-reference hyperlinks124257 +Node: Page reference hyperlinks125637 +Node: Equation reference hyperlinks126301 +Node: Index hyperlinks127699 +Node: Exact destinations for index terms129463 +Node: Page destinations for index terms131639 +Node: Choosing destination placement134267 +Node: Index page list and page range parsers135059 +Node: Hyperlinks in see and see also entries135612 +Node: Footnote hyperlinks136411 +Node: Contents hyperlinks137609 +Node: Hyperlink drivers137992 +Node: Options supported by all drivers138627 +Node: Hyperlink driver hypertex141431 +Node: Destination types for hypertex144383 +Node: Destination options for hypertex145422 +Node: Link types for hypertex145904 +Node: Link options for hypertex147925 +Node: Hyperlink drivers pdftex and dvipdfm148949 +Node: Destination types for pdftex and dvipdfm149595 +Node: Destination options for pdftex and dvipdfm153094 +Node: Link types for pdftex and dvipdfm155549 +Node: Link options for pdftex and dvipdfm159088 +Node: Hyperlink driver nolinks162727 +Node: Setting hyperlink types and options165139 +Node: Setting default types and options166141 +Node: Setting group types167570 +Node: Setting group options168763 +Node: Turning hyperlinks on/off171253 +Node: Turning low-level commands on/off171891 +Node: Turning hyperlinks on/off for a group172404 +Node: Arrow theoretic diagrams173561 +Node: Slanted lines and vectors173928 +Node: Commutative diagrams176010 +Node: Arrows and morphisms176609 +Node: Construction of commutative diagrams181087 +Node: Commutative diagram parameters188279 +Node: Programming definitions190098 +Node: Category codes191099 +Node: Allocation macros193709 +Node: Iteration195857 +Node: Macro arguments197516 +Node: Converting to characters200015 +Node: Expansion201407 +Node: \csn and \ece201970 +Node: \edefappend202536 +Node: Hooks203085 +Node: Properties205271 +Node: \expandonce206356 +Node: \ifundefined206805 +Node: \ifempty207369 +Node: \ifinteger and \isinteger208112 +Node: \futurenonspacelet209150 +Node: Obeying spaces209749 +Node: Writing out numbers210780 +Node: Mode-specific penalties211103 +Node: Auxiliary files211835 +Node: User-defined environments212758 +Node: Page list and page range parsers213973 +Node: Demo files216110 +Node: Hyperlinks (xhyper.tex)216678 +Node: Highlighting TeX comments in listings (lscommnt.tex)224997 +Node: Macro index227421 +Node: Concept index289457 + +End Tag Table diff --git a/Master/texmf-dist/doc/eplain/doc/eplain.pdf b/Master/texmf-dist/doc/eplain/doc/eplain.pdf new file mode 100644 index 00000000000..206298f2393 Binary files /dev/null and b/Master/texmf-dist/doc/eplain/doc/eplain.pdf differ diff --git a/Master/texmf-dist/doc/eplain/doc/lscommnt.jpg b/Master/texmf-dist/doc/eplain/doc/lscommnt.jpg new file mode 100644 index 00000000000..6f40a9ac8b7 Binary files /dev/null and b/Master/texmf-dist/doc/eplain/doc/lscommnt.jpg differ diff --git a/Master/texmf-dist/doc/eplain/doc/xhyper.jpg b/Master/texmf-dist/doc/eplain/doc/xhyper.jpg new file mode 100644 index 00000000000..60c5abf18e2 Binary files /dev/null and b/Master/texmf-dist/doc/eplain/doc/xhyper.jpg differ diff --git a/Master/texmf-dist/doc/eplain/util/idxuniq b/Master/texmf-dist/doc/eplain/util/idxuniq new file mode 100644 index 00000000000..6ee7d225f5c --- /dev/null +++ b/Master/texmf-dist/doc/eplain/util/idxuniq @@ -0,0 +1,37 @@ +#!/usr/bin/awk -f + +# (This file is public domain.) + +# This script filters input lines (which are expected to be a list of +# `\indexentry' lines for MakeIndex) eliminating matching lines. The comparison +# is done without regard to hyperlink label names (in the form `IDX*', where `*' +# stands for a non-negative integer). + +# This has to be done to avoid terms which differ only in hyperlink label names +# embedded into them, because MakeIndex will treat these otherwise identical +# terms as distinct, listing more than once a page number for equivalent terms +# on the same page. + +# `stripped' array is indexed by `\indexentry' lines stripped off the hyperlink +# label name. For each term, we use its stripped version as a key into the +# `stripped' array to increment its element. This records the fact that we have +# seen the term with such key. Also, we add the (full) `\indexentry' line to +# the `terms' array, but only if we have not yet seen a term with such key. + +# The idea was borrowed from Edition 3 of `GAWK: Effective AWK Programming: A +# User's Guide for GNU Awk', which contains the following credit: + +# histsort.awk --- compact a shell history file +# Thanks to Byron Rakitzis for the general idea + +{ + temp = $0 + sub (/{IDX[[:digit:]]+}/, "", temp) + if (stripped[temp]++ == 0) + terms[++count] = $0 +} + +END { + for (i = 1; i <= count; i++) + print terms[i] +} diff --git a/Master/texmf-dist/doc/eplain/util/trimsee b/Master/texmf-dist/doc/eplain/util/trimsee new file mode 100644 index 00000000000..8af5ebe6434 --- /dev/null +++ b/Master/texmf-dist/doc/eplain/util/trimsee @@ -0,0 +1,106 @@ +#!/bin/sh + +# (This file is public domain.) + +help () +{ + cat <&2 + exit 1 + fi +} + +VERSION='0.1' + +DEFAULT_SEE='\\indexsee' +DEFAULT_IS=', \+' +DEFAULT_OS=' ' + +SEE=$DEFAULT_SEE +IS=$DEFAULT_IS +OS=$DEFAULT_OS + +while [ $# != 0 ] +do + case "$1" in + -i) + check_missing_arg $# "$1" + IS=$2 + shift + ;; + -o) + check_missing_arg $# "$1" + OS=$2 + shift + ;; + -s) + check_missing_arg $# "$1" + SEE=$2 + shift + ;; + -h | --help) + help + exit 0 + ;; + -v | --version) + echo "trimsee version $VERSION" + exit 0 + ;; + *) + echo "Unknown option '$1'" 1>&2 + exit 1 + ;; + esac + shift +done + + +# The idea is to implement line output delayed by one line. When we +# read next line, we check if it starts with a see/see also entry, and +# if it does, we remove the comma at the end of the previous line +# before printing it. We keep previous lines in the hold buffer. + +sed -n ' + +# Remove all commas in front of see/see also inside each line. +s/'"$IS$SEE/$OS$SEE"'/g + +# If this line does not start with see/see also, we will print the +# previous line intact. NOTE: There are two characters inside the +# brackets: a space and a tab. +/^[ ]*'"$SEE"'/! { x; b PRINT; } + +# This line starts with see/see also, so remove comma at the end of +# the previous line before we print it. +x +s/'"$IS"'$/'"$OS"'/ + +# Print the previous line. +:PRINT +1! p + +# At the end of the input, print the last line. +$ { x; p; } + +' diff --git a/Master/texmf-dist/source/eplain/base/add-date b/Master/texmf-dist/source/eplain/base/add-date deleted file mode 100644 index 8465939b5b8..00000000000 --- a/Master/texmf-dist/source/eplain/base/add-date +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -# This file is public domain. - -# Change placeholders to variations on the current date. Assumes -# various % constructs are recognized. - -if test $# -lt 1 -then - echo "Usage: $0 [ ...]" - exit 1 -fi - -temp=${TMPDIR-/tmp}/adddate$$ - -for f in "$@"; do - sed -e s/REPLACE-WITH-MONTH-YEAR/"`date +'%B %Y'`"/ \ - -e s/REPLACE-WITH-DAY-MONTH-YEAR/"`date +'%e %B %Y'`"/ \ - -e s/REPLACE-WITH-DATE/"`date`"/ \ - <$f >$temp - if cmp -s $f $temp; then - echo "$f: No REPLACE-WITH-." - exit 1 - fi - rm -f $f - mv $temp $f -done - -rm -f $temp diff --git a/Master/texmf-dist/source/eplain/base/add-version b/Master/texmf-dist/source/eplain/base/add-version deleted file mode 100644 index 1934c8957f6..00000000000 --- a/Master/texmf-dist/source/eplain/base/add-version +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -# This file is public domain. - -if test $# -lt 2; then - echo "Usage: $0 [ ...]" - exit 1 -fi - -temp=${TMPDIR-/tmp}/version$$ - -version=$1 -shift - -for f in "$@"; do - sed "s/REPLACE-WITH-VERSION/$version/" <$f >$temp || exit 1 - if cmp -s $f $temp; then - echo "$f: No REPLACE-WITH-VERSION." - exit 1 - fi - rm -f $f - mv $temp $f -done - -rm -f $temp diff --git a/Master/texmf-dist/source/eplain/base/etex.tex b/Master/texmf-dist/source/eplain/base/etex.tex deleted file mode 100644 index 46fe32ee733..00000000000 --- a/Master/texmf-dist/source/eplain/base/etex.tex +++ /dev/null @@ -1,5 +0,0 @@ -% This file just makes a .fmt file, assuming plain is loaded. -% -\input eplain - -\dump diff --git a/Master/texmf-dist/source/eplain/base/fix-checksum b/Master/texmf-dist/source/eplain/base/fix-checksum deleted file mode 100644 index c2f830f10f3..00000000000 --- a/Master/texmf-dist/source/eplain/base/fix-checksum +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -# This file is public domain. - -# Fix a checksum line in the files given as arguments. - -tmpfile=/tmp/checksum$$ - -for f in $* -do - checksum="" - newchecksum=`wc < $f | sed "s/^ *//"` - while test "$checksum" != "$newchecksum" - do - sed -e "1,50s/checksum = .*,/checksum = \"$newchecksum\",/" $f > $tmpfile - checksum="$newchecksum" - newchecksum=`wc < $tmpfile | sed "s/^ *//"` - done - mv -f $tmpfile $f -done - diff --git a/Master/texmf-dist/source/eplain/base/merge b/Master/texmf-dist/source/eplain/base/merge deleted file mode 100644 index b300b936bca..00000000000 --- a/Master/texmf-dist/source/eplain/base/merge +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -# This file is public domain. - -# Merge the constituent files with xeplain.tex to produce eplain.tex. - -# Usually we are called from the Makefile, and the `version' variable is set. -if test -z "$version"; then - echo "No version number, using xx!" - version=xx -fi - -btxtmp=/tmp/mergebtx$$ -common1tmp=/tmp/mergec1$$ -common2tmp=/tmp/mergec2$$ -common3tmp=/tmp/mergec3$$ -eplaintmp=/tmp/mergepl$$ -arrow1tmp=/tmp/mergea1$$ -arrow2tmp=/tmp/mergea2$$ -pathtmp=/tmp/mergepa$$ -ifpdftmp=/tmp/mergeif$$ - -rm -f eplain.tex - -# Use this regexp to strip comments with egrep. -commentre='^ *%([^%]|$)' - -# Extract the relevant parts of btxmac.tex (without comments). -egrep -v "$commentre" btxmac.tex \ - | sed -n \ - -e "1,/^%% \[\[\[start .*\]\]\]/w $common1tmp" \ - -e "/^%% \[\[\[start .*\]\]\]/,/^%% \[\[\[end .*\]\]\]/w $btxtmp" \ - -e "/^%% \[\[\[end .*\]\]\]/,\$w $common2tmp" - -# Get texnames.sty and path.sty. Remove the announcement, as well as -# the comments. -egrep -v "$commentre|immediate" texnames.sty > $common3tmp -egrep -v "$commentre|immediate" path.sty > $pathtmp - -# Get arrow.tex. -egrep -v "$commentre" arrow.tex \ - | sed -n \ - -e '1,/catcode.*\&.*4/w '"$arrow1tmp" \ - -e '/catcode.*\&.*4/,$w '"$arrow2tmp" - -# Get ifpdf.sty -egrep -v "$commentre"'|^ {0,6}\\immediate' ifpdf.sty > $ifpdftmp - -# Merge the above into xeplain, calling the result eplain. Also change the -# `filename' in the comment.%% -egrep -v "$commentre" xeplain.tex \ - | sed -e 's/"xeplain.tex"/"eplain.tex"/' \ - -e "/^%% \[\[\[here is the first.*\]\]\]/r $common1tmp" \ - -e "/^ %% \[\[\[here are the BibTeX.*\]\]\]/r $btxtmp" \ - -e "/^%% \[\[\[here is the second.*\]\]\]/r $common2tmp" \ - -e "/^%% \[\[\[include texnames.*\]\]\]/r $common3tmp" \ - -e "/^%% \[\[\[include path.*\]\]\]/r $pathtmp" \ - -e "/^ %% \[\[\[include arrow1\]\]\]/r $arrow1tmp" \ - -e "/^ %% \[\[\[include arrow2\]\]\]/r $arrow2tmp" \ - -e "/^%% \[\[\[include ifpdf.*\]\]\]/r $ifpdftmp" \ - > $eplaintmp - -# Remove our [[[...]]] markers and \endinput's. -egrep -v '\[\[\[|^ *$|\\endinput' $eplaintmp > eplain.tex - -# Fix header fields. -./add-date eplain.tex -./add-version $version eplain.tex -./fix-checksum eplain.tex - -# Old checksum computation: -#checksum=`wc < $eplaintmp | sed -n "s/^ *//"` -# Replace the checksum in the old file. We really should loop here, -# since one iteration may not be enough. Only replace the first -# checksum, since the second is for btxmac. -#sed -e "1,50s/checksum = .*,/checksum = \"$checksum\",/" $eplaintmp \ -# > eplain.tex - -chmod a-w eplain.tex -#ls -lt btxmac.tex path.sty texnames.sty xeplain.tex eplain.tex arrow.tex -#wc eplain.tex -#grep 'checksum.*=' eplain.tex - -rm -f $btxtmp $eplaintmp $common1tmp $common2tmp $common3tmp -rm -f $arrow1tmp $arrow2tmp $pathtmp $ifpdftmp diff --git a/Master/texmf-dist/source/eplain/base/packages.zip b/Master/texmf-dist/source/eplain/base/packages.zip deleted file mode 100644 index 6bbf89e4203..00000000000 Binary files a/Master/texmf-dist/source/eplain/base/packages.zip and /dev/null differ diff --git a/Master/texmf-dist/source/eplain/base/test/allref.tex b/Master/texmf-dist/source/eplain/base/test/allref.tex deleted file mode 100644 index 8e4f51270b0..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/allref.tex +++ /dev/null @@ -1,15 +0,0 @@ -% This file is public domain. -% -% Test all kinds of references. -% -\ifx\undefined\eplain \input eplain \fi - -\let\primitiveend = \end -\let\end = \relax - -\input cite -\input xref -\primitiveend - -\input eqref - diff --git a/Master/texmf-dist/source/eplain/base/test/boxes.tex b/Master/texmf-dist/source/eplain/base/test/boxes.tex deleted file mode 100644 index b58e1ffef34..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/boxes.tex +++ /dev/null @@ -1,11 +0,0 @@ -% This file is public domain. -% -\input eplain - -A box: \blackbox - -A large rectangle: -\ht0=2pc \dp0=2pc \wd0=3pc -\makeblankbox{.8pt}{.8pt} - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/boxit.tex b/Master/texmf-dist/source/eplain/base/test/boxit.tex deleted file mode 100644 index 20da2e7c27d..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/boxit.tex +++ /dev/null @@ -1,24 +0,0 @@ -% This file is public domain. -% -% Test \boxit. -% -\ifx\undefined\eplain \input eplain \fi - -\boxit{\hbox{the basics, boxed}} - -\boxitspace = 24pt -\boxit{\hbox{should be spacier}} - -\boxitspace = 5pt - -\boxit{\vbox{Something that is more than one line long, no matter how verbose -I have to do make it so, so that we can see if the line breaks are -plausible.}} - - -\boxit{\vbox{\hsize = 4in Another one that is more than one line long, just -to see if resetting hsize inside the box will work.}} - -\boxit{\boxit{\hbox{double box}}} - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/catcode.tex b/Master/texmf-dist/source/eplain/base/test/catcode.tex deleted file mode 100644 index af71f740ea9..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/catcode.tex +++ /dev/null @@ -1,8 +0,0 @@ -% This file is public domain. -% -The catcode BEFORE loading eplain: \the\catcode`@ \showthe\catcode`@ -\input eplain - -The catcode AFTER loading eplain: \the\catcode`@ \showthe\catcode`@ - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/center.tex b/Master/texmf-dist/source/eplain/base/test/center.tex deleted file mode 100644 index 628155050a6..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/center.tex +++ /dev/null @@ -1,12 +0,0 @@ -% This file is public domain. -% -\input eplain - -\def\title{\begingroup \def\endcentermacro{\endtitle}\bf\center} -\def\endtitle{\endcenter\endgroup} - -\loggingall -\title hi -\endtitle - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/cite.bib b/Master/texmf-dist/source/eplain/base/test/cite.bib deleted file mode 100644 index 7c082677b4f..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/cite.bib +++ /dev/null @@ -1,25 +0,0 @@ -% This file is public domain. - -@book{chicago, - title = "Chicago", -} - -@book{texbook, - title = "texbook" -} - -@book{prime-number-theorem, - title = "prime number theorem", -} - -@book{1234567890)(@!`['";:]|<>./?-=+_$^&, - title = "weird label" -} - -@book{others, - author = "Jill and Susan and others" -} - -@book{accented, - author = "{\'E}ric {\'E}ttelbaum" -} diff --git a/Master/texmf-dist/source/eplain/base/test/cite.tex b/Master/texmf-dist/source/eplain/base/test/cite.tex deleted file mode 100644 index 12b818995bb..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/cite.tex +++ /dev/null @@ -1,35 +0,0 @@ -% This file is public domain. -% -% Test file for citations (plain bibliography style). -% -\ifx\eplain\undefined \input eplain \fi -\loggingall - -Let's cite chicago: \cite{chicago}. - -Now let's have multiple citations: \cite{chicago,texbook}. - -Now let's have a non-alphabetic label: \cite{prime-number-theorem}. - -Here is an undefined citation: \cite{undefined}. - -Here is a citation with an optional note: \cite[note]{texbook}. - -Here is a citation with a weird label: -\cite{1234567890)(@!`['";:]|<>./?-=+_$^&}. - -Now let's cite an `and others': \cite{others}. - -And an accented one: \cite{accented}. - -Let's get up to ten refs: -\cite{article-minimal,article-full,article-crossref,whole-journal,% -inbook-minimal,inbook-full} - -\bigskip -\leftline{\bf References.} - -\bibliography{cite,xampl} -\bibliographystyle{plain} - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/citeall.tex b/Master/texmf-dist/source/eplain/base/test/citeall.tex deleted file mode 100644 index 24929568abe..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/citeall.tex +++ /dev/null @@ -1,12 +0,0 @@ -% This file is public domain. -% -\input btxmac - -Cite all the entries in the bib database files {\tt knuth.bib} and {\tt -ep.bib}: - -\nocite{*} -\bibliography{knuth,ep} -\bibliographystyle{plain} - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/citealph.tex b/Master/texmf-dist/source/eplain/base/test/citealph.tex deleted file mode 100644 index 5b83d26d2b6..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/citealph.tex +++ /dev/null @@ -1,26 +0,0 @@ -% This file is public domain. -% -% Test file for citations (alphabetic bibliography style). -% -\input eplain - -Let's cite chicago and van-leunen: \cite{chicago,van-leunen}. - -Now let's cite an `and others': \cite{others}. - -And an accented one: \cite{accented}. - -Here is a citation with an optional note: \cite[note]{texbook}. - -Here is a citation with a weird label: -\cite{1234567890)(@!`['";:]|<>./?-=+}. - -Here is an undefined citation: \cite{undefined}. - -\bigskip -\leftline{\bf References.} - -\bibliography{cite} -\bibliographystyle{alpha} - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/citeapa.tex b/Master/texmf-dist/source/eplain/base/test/citeapa.tex deleted file mode 100644 index 3d59f70fa09..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/citeapa.tex +++ /dev/null @@ -1,26 +0,0 @@ -% This file is public domain. -% -% Test file for citations (alphabetic bibliography style). -% -\input btxmac - -Let's cite chicago and van-leunen: \cite{chicago,van-leunen}. - -Now let's cite an `and others': \cite{others}. - -And an accented one: \cite{accented}. - -Here is a citation with an optional note: \cite[note]{texbook}. - -Here is a citation with a weird label: -\cite{1234567890)(@!`['";:]|<>./?-=+}. - -Here is an undefined citation: \cite{undefined}. - -\bigskip -\leftline{\bf References.} - -\bibliography{cite} -\bibliographystyle{apalike} - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/citebegin.tex b/Master/texmf-dist/source/eplain/base/test/citebegin.tex deleted file mode 100644 index 75b5c8d6de6..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/citebegin.tex +++ /dev/null @@ -1,20 +0,0 @@ -% This file is public domain. -% -\input eplain - -\let\primitiveend = \end -\def\bye{\vfill\eject\primitiveend} - -\def\begin#1#2{% - \message{widest label is #2} -} -\def\end#1{} - -Two citations to Knuthian works: \cite{surreal,concrete-math}. - -\beginsection{References.}\par % Title for the bibliography. - -\bibliography{knuth} % Use knuth.bib to resolve the labels. -\bibliographystyle{plain} % Number the references. - -\bye % End of the document. diff --git a/Master/texmf-dist/source/eplain/base/test/citecust.tex b/Master/texmf-dist/source/eplain/base/test/citecust.tex deleted file mode 100644 index 2b3266407ba..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/citecust.tex +++ /dev/null @@ -1,38 +0,0 @@ -% This file is public domain. -% -% File to test the various customizations btxmac.tex allows. -% -\input eplain - -% Have citations come out as superscripts, as in footnotes. -% -% Unfortunately, plain TeX doesn't define the \scriptfont for the \tt -% family. Since we use \tt to print unresolved bib-references, we define -% it ourselves, so we can use superscripts. -\font\eighttt = cmtt8 -\scriptfont\ttfam = \eighttt -\def\printcitestart{$^\bgroup} -\def\printbetweencitations{,\space} -\def\printcitefinish{\egroup$} -\def\printcitenote#1{\hbox{\sevenrm\space (#1)}} - -% Do angle brackets instead of brackets. (We don't redefine \biblabelprint.) -% -\def\biblabelcontents#1{\bblrm $\langle$#1$\rangle$} - -% Use sans serif instead of roman, and slanted instead of italic. -% -\font\bblrm = cmss10 -\font\bblem = cmsl10 - -% Put a rule before the bibliography. -% -\def\bblhook{\medskip\hrule\smallskip} - -Two citations to Knuthian works: \cite{surreal,concrete-math}. - -This one with a note: \cite[another one]{surreal}. - -\bibliography{knuth} % Use knuth.bib to resolve the labels. -\bibliographystyle{plain} % Number the references. -\end % End of the document. diff --git a/Master/texmf-dist/source/eplain/base/test/citenote.tex b/Master/texmf-dist/source/eplain/base/test/citenote.tex deleted file mode 100644 index 429b5cd456f..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/citenote.tex +++ /dev/null @@ -1,13 +0,0 @@ -% This file is public domain. -% -% Test file for citations (plain bibliography style). -% -\ifx\eplain\undefined \input eplain \fi -\loggingall - -Here is a citation with an optional note, first: \cite[note]{texbook}. - -\bibliography{cite} -\bibliographystyle{plain} - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/citex.tex b/Master/texmf-dist/source/eplain/base/test/citex.tex deleted file mode 100644 index 69e880490a7..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/citex.tex +++ /dev/null @@ -1,8 +0,0 @@ -% This file is public domain. -% -\input eplain -Two citations to Knuthian works: \cite{surreal,concrete-math}. -\beginsection{References.}\par % Title for the bibliography. -\bibliography{knuth} % Use knuth.bib to resolve the labels. -\bibliographystyle{plain} % Number the references. -\end % End of the document. diff --git a/Master/texmf-dist/source/eplain/base/test/colfootn.tex b/Master/texmf-dist/source/eplain/base/test/colfootn.tex deleted file mode 100644 index 942f71f50b3..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/colfootn.tex +++ /dev/null @@ -1,18 +0,0 @@ -% This file is public domain. -% -\input eplain - -\loggingall - -\vsize = 6\baselineskip -\doublecolumns - -\leftline{1\footnote\dag{A footnote that is longer than the column -width. Much much longer longer.}} -\count255 = 2 -\loop - \leftline{\number\count255} - \advance\count255 by 1 -\ifnum\count255 < 14 \repeat - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/colrule.tex b/Master/texmf-dist/source/eplain/base/test/colrule.tex deleted file mode 100644 index 5213685e9a3..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/colrule.tex +++ /dev/null @@ -1,33 +0,0 @@ -% This file is public domain. -% -\input eplain - -% ashley suggested the length of the footnote rule changes where the -% second column starts. -\vsize = 3in -\footnoterulewidth = 6in -\doublecolumns -This is a footnote\footnote1{No, this is the footnote} in double column mode. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. -And now we have lots of text to fill up the column. - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/column.tex b/Master/texmf-dist/source/eplain/base/test/column.tex deleted file mode 100644 index be1d521fe08..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/column.tex +++ /dev/null @@ -1,228 +0,0 @@ -% This file is public domain. -% -% Test double columns with headlines, single-column material, and a -% \topinsert. -\ifx\undefined\eplain \input eplain \fi -%\catcode`@=11 -%\input gcol -%\catcode`@=12 - -\gutter = 1pc -\hyphenation{pour-ed} - -\headline = {This is the headline \hfil} - -{\center - A test file for eplain - Karl\footnote\dag{Credit in a footnote. Longer than one column. % - Longer longer longer.} -} - -\topinsert -This should appear at the top of the page, since it's a topinsert. It's -also longer than one column. -\endinsert - -Here is a six-and-a-half-inch long rule. - -\hrule width 6.5in - -\doublecolumns - -Here the main document starts. It should be in double columns until -further notice. It's all one paragraph. I am going to use Wuthering -Heights, as usual. With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. Presently the whole chapel resounded with -rappings and counter-rappings. Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, pour\-ed forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? What had -played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! I listened doubtingly an instant, detected the -disturber, then turned and dozed, and dreamt again---if possible, still -more disagreeably than before. This time I remembered I was lying in -the oak closet, and I heard distinctly the gusty wind and the driving of -the snow. I heard also the fir-bough repeat its teasing sound, and -ascribed it to the right cause. But it annoyed me so much that I -resolved to silence it, if possible; and I thought I rose and -endeavoured to unhasp the casement. The hook was soldered into the -staple---a circumstance observed by me when awake, but forgotten. ``I -must stop it, nevertheless!'' I muttered, knocking my knuckles through -the glass, and stretching an arm out to seize the importunate branch; -instead of which, my fingers closed on the fingers of a little, icecold -hand! - -The intense horror of nightmare came over me. I tried to draw -back my arm, but the hand clung to it, and a most melancholy voice -sobbed, ``Let me in---let me in!'' ``Who are you?'' I asked, struggling, -meanwhile, to disengage myself. ``Catherine Linton,'' it replied -shiveringly. (Why did I think of Linton? I had read Earnshaw twenty -times for Linton.) ``I'm come home. I'd lost my way on the moor.'' As -it spoke, I discerned, obscurely, a child's face looking through the -window. Terror made me cruel; and finding it useless to attempt shaking -the creature off, I pulled its wrist on to the broken pane, and rubbed -it to and fro till the blood ran down and soaked the bedclothes. Still -it wailed, ``Let me in!'' and maintained its tenacious gripe, almost -maddening me with fear. ``How can I?'' I said at length. ``Let me go, -if you want me to let you in!'' - -With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. Presently the whole chapel resounded with -rappings and counter-rappings. Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, pour\-ed forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? What had -played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! I listened doubtingly an instant, detected the -disturber, then turned and dozed, and dreamt again---if possible, still -more disagreeably than before. This time I remembered I was lying in -the oak closet, and I heard distinctly the gusty wind and the driving of -the snow. I heard also the fir-bough repeat its teasing sound, and -ascribed it to the right cause. But it annoyed me so much that I -resolved to silence it, if possible; and I thought I rose and -endeavoured to unhasp the casement. The hook was soldered into the -staple---a circumstance observed by me when awake, but forgotten. ``I -must stop it, nevertheless!'' I muttered, knocking my knuckles through -the glass, and stretching an arm out to seize the importunate branch; -instead of which, my fingers closed on the fingers of a little, icecold -hand! - -The intense horror of nightmare came over me. I tried to draw -back my arm, but the hand clung to it, and a most melancholy voice -sobbed, ``Let me in---let me in!'' ``Who are you?'' I asked, struggling, -meanwhile, to disengage myself. ``Catherine Linton,'' it replied -shiveringly. (Why did I think of Linton? I had read Earnshaw twenty -times for Linton.) ``I'm come home. I'd lost my way on the moor.'' As -it spoke, I discerned, obscurely, a child's face looking through the -window. Terror made me cruel; and finding it useless to attempt shaking -the creature off, I pulled its wrist on to the broken pane, and rubbed -it to and fro till the blood ran down and soaked the bedclothes. Still -it wailed, ``Let me in!'' and maintained its tenacious gripe, almost -maddening me with fear. ``How can I?'' I said at length. ``Let me go, -if you want me to let you in!'' - -With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. Presently the whole chapel resounded with -rappings and counter-rappings. Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, re forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? What had -played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! I listened doubtingly an instant, detected the -disturber, then turned and dozed, and dreamt again---if possible, still -more disagreeably than before. This time I remembered I was lying in -the oak closet, and I heard distinctly the gusty wind and the driving of -the snow. I heard also the fir-bough repeat its teasing sound, and -ascribed it to the right cause. But it annoyed me so much that I -resolved to silence it, if possible; and I thought I rose and -endeavoured to unhasp the casement. The hook was soldered into the -staple---a circumstance observed by me when awake, but forgotten. ``I -must stop it, nevertheless!'' I muttered, knocking my knuckles through -the glass, and stretching an arm out to seize the importunate branch; -instead of which, my fingers closed on the fingers of a little, icecold -hand! - -The intense horror of nightmare came over me. I tried to draw -back my arm, but the hand clung to it, and a most melancholy voice -sobbed, ``Let me in---let me in!'' ``Who are you?'' I asked, struggling, -meanwhile, to disengage myself. ``Catherine Linton,'' it replied -shiveringly. (Why did I think of Linton? I had read Earnshaw twenty -times for Linton.) ``I'm come home. I'd lost my way on the moor.'' As -it spoke, I discerned, obscurely, a child's face looking through the -window. Terror made me cruel; and finding it useless to attempt shaking -the creature off, I pulled its wrist on to the broken pane, and rubbed -it to and fro till the blood ran down and soaked the bedclothes. Still -it wailed, ``Let me in!'' and maintained its tenacious gripe, almost -maddening me with fear. ``How can I?'' I said at length. ``Let me go, -if you want me to let you in!'' - -With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. Presently the whole chapel resounded with -rappings and counter-rappings. Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, re forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? What had -played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! I listened doubtingly an instant, detected the -disturber, then turned and dozed, and dreamt again---if possible, still -more disagreeably than before. This time I remembered I was lying in -the oak closet, and I heard distinctly the gusty wind and the driving of -the snow. I heard also the fir-bough repeat its teasing sound, and -ascribed it to the right cause. But it annoyed me so much that I -resolved to silence it, if possible; and I thought I rose and -endeavoured to unhasp the casement. The hook was soldered into the -staple---a circumstance observed by me when awake, but forgotten. ``I -must stop it, nevertheless!'' I muttered, knocking my knuckles through -the glass, and stretching an arm out to seize the importunate branch; -instead of which, my fingers closed on the fingers of a little, icecold -hand! - -The intense horror of nightmare came over me. I tried to draw -back my arm, but the hand clung to it, and a most melancholy voice -sobbed, ``Let me in---let me in!'' ``Who are you?'' I asked, struggling, -meanwhile, to disengage myself. ``Catherine Linton,'' it replied -shiveringly. (Why did I think of Linton? I had read Earnshaw twenty -times for Linton.) ``I'm come home. I'd lost my way on the moor.'' As -it spoke, I discerned, obscurely, a child's face looking through the -window. Terror made me cruel; and finding it useless to attempt shaking -the creature off, I pulled its wrist on to the broken pane, and rubbed -it to and fro till the blood ran down and soaked the bedclothes. Still -it wailed, ``Let me in!'' and maintained its tenacious gripe, almost -maddening me with fear. ``How can I?'' I said at length. ``Let me go, -if you want me to let you in!'' - -\singlecolumn -Now we should be typesetting in a single column, i.e., normally. The -fingers relaxed; I snatched mine through the hole, hurriedly piled the -books up in a pyramid against it, and stopped my ears to exclude the -lamentable prayer. I seemed to keep them closed above a quarter of an -hour; yet the instant I listened again, there was the doleful cry -moaning on! ``Begone!'' I shouted; ``I'll never let you in---not if you -beg for twenty years.'' ``It is twenty years,'' mourned the -voice---``twenty years. I've been a waif for twenty years!'' Thereat -began a feeble scratching outside, and the pile of books moved as if -thrust forward. I tried to jump up, but could not stir a limb, and so -yelled aloud in a frenzy of fright. To my confusion, I discovered the -yell was not ideal. Hasty footsteps approached my chamber door; somebody -pushed it open with a vigorous hand, and a light glimmered through the -squares at the top of the bed. I sat shuddering yet, and wiping the -perspiration from my forehead. The intruder appeared to hesitate, and -muttered to himself. At last he said in a half-whisper, plainly not -expecting an answer, ``Is any one here?'' I considered it best to -confess my presence, for I knew Heathcliff's accents, and feared he -might search further if I kept quiet. With this intention I turned and -opened the panels. I shall not soon forget the effect my action -produced. Heathcliff stood near the entrance, in his shirt and -trousers, with a candle dripping over his fingers, and his face as white -as the wall behind him. The first creak of the oak startled him like an -electric shock. The light leaped from his hold to a distance of some -feet, and his agitation was so extreme that he could hardly pick it up. -``It is only your guest, sir,'' I called out, desirous to spare him the -humiliation of exposing his cowardice further. ``I had the misfortune -to scream in my sleep, owing to a frightful nightmare. I'm sorry I -disturbed you.'' -\end diff --git a/Master/texmf-dist/source/eplain/base/test/column2.tex b/Master/texmf-dist/source/eplain/base/test/column2.tex deleted file mode 100644 index 90a736e4333..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/column2.tex +++ /dev/null @@ -1,51 +0,0 @@ -% This file is public domain. -% -\input eplain - -\headline = {headline\hfil} -\topinsert -topinsert -\endinsert - -\parskip = 0pt - -\centerline{Xiaogen Yang and Max L. Deinzer} -\smallskip -\centerline{Department of Agricultural Chemistry} -\centerline{Oregon State University, Corvallis, Oregon 97331} - -\doublecolumns -Humulene monoepoxides exist in hop essential oil and were suggested -as one of the important contributors of hop flavor to fermented -malt beverages [1-3]. However, it is more possible that the ``noble -hop'' aroma compounds are produced from certain hop components -during the brewing process, because the ``noble hop'' aroma is -distinct from ``dry hop'' aroma. The aging of hops, during which the -amount of oxidation products of humulene increases [4], is also -necessary to develop the ``noble hop'' aroma. One approach to find -out the flavor compounds and their origin is to examine the brewing -products of the oxygenated sesquiterpenes. The reactions of the -brewing process can be simplified to hydrolyzation and fermentation -as the first step. We have been investigated the hydrolysis of -humulene monoepoxides. -\singlecolumn -To simulate the hydrolyzation effect in the ``late hop'' brewing -process, humulene monoepoxides were boiled in water at -pH\thinspace 4 for 10 minutes. After boiling, a large amount of -the epoxides remain unreacted. When the solution was kept at -ambient temperature for several weeks, humulene epoxides were -then almost completely hydrolyzed. To accelerate the hydrolysis -process, humulene epoxides were suspended in a aqueous solution -buffered at pH\thinspace 4 and boiled for three hours under -reflux. All three humulene monoepoxides produced a complex -mixture after the reaction (Figure 1). The hydrolysis products -can be easily separated into two groups by extraction with -pentane and dichloro\-me\-thane subsequently. The pentane -extracts are less polar, more volatile and smell stron\-ger than -the dichloro\-methane extracts. Sensory evaluation of the -hydrolysis products of humulene epoxide II and III by sniffing -gas chromatography effluent indicates that some of the compounds -have the flavor notes which are close to the ``noble hop'' aroma -character described as ``spicy, citrus, floral'' (Table 1). - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/column3.tex b/Master/texmf-dist/source/eplain/base/test/column3.tex deleted file mode 100644 index 01788bd3064..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/column3.tex +++ /dev/null @@ -1,23 +0,0 @@ -% This file is public domain. -% -\ifx\undefined\eplain \input eplain \fi - -Here is a single-column line of text. -%\vskip 6in -%And another one. - -\doublecolumns -\newcount \xxx -\xxx=0 -\par -\baselineskip = 2.5\baselineskip -\loop - \hbox{Line \the\xxx.} - \ifnum \xxx < 3 - \advance \xxx by 1 -\repeat - -\singlecolumn -Another single-column line of text. - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/commdiags.tex b/Master/texmf-dist/source/eplain/base/test/commdiags.tex deleted file mode 100644 index ae5ca6221d4..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/commdiags.tex +++ /dev/null @@ -1,111 +0,0 @@ -% This file is public domain. -% -% Examples of commutative diagrams from Brockett, {\it Finite -% Dimensional Linear Systems}. - -\input arrow - -\def\Real{\mathord{R}} -\def\Rn{\Real^n} -\def\A{{\bf A}} -\def\B{{\bf B}} -\def\C{{\bf C}} -\def\F{{\bf F}} -\def\G{{\bf G}} -\def\H{{\bf H}} -\def\I{{\bf I}} -\def\K{{\bf K}} -\def\L{{\bf L}} -\def\M{{\bf M}} -\def\N{{\bf N}} -\def\P{{\bf P}} -\def\Q{{\bf Q}} -\def\R{{\bf R}} -\def\S{{\bf S}} -\def\W{{\bf W}} -\def\bp{{\bf\Phi}} - - -Page 29, Fig.~3 -$$\commdiag{\Rn&\mapright^{\bp(t_1,t_0)}&\Rn\cr -&\arrow(3,-2)\lft{\bp(t,t_0)}&\mapdown\rt{\bp(t,t_1)}\cr &&\Rn\cr}$$ - -Page 48, Fig.~1: -$$\commdiag{\Rn&\mapright^{\bp(t,t_0)}&\Rn\cr -\mapdown\lft{\P(t_0)}&&\mapup\rt{\P^{-1}(t)}\cr -\Rn&\mapright^{e^{\R(t-t_0)}}&\Rn\cr}$$ - -Page 69, Fig.~1: -$$\commdiag{\Rn&\mapright^{\M_1}&\Real^m\cr -\mapdown\lft\Q&&\mapup\rt\P\cr -\Rn&\mapright^{\M_2}&\Real^m\cr}$$ - -Page 69, Fig.~2: -$$\commdiag{\Rn&\mapright^\A&\Rn\cr -\mapdown\lft\P&&\mapup\rt{\P'}\cr -\Rn&\mapright^\S&\Rn\cr}$$ - -Page 71, Fig.~3: -$$\commdiag{\Rn&\mapright^\A&\Rn\cr -\mapdown\lft\P&&\mapup\rt{\P^{-1}}\cr -\Rn&\mapright^\B&\Rn\cr}$$ - -Page 92, Fig.~1: -$$\harrowlength=40pt \varrowlength=24.7pt \sarrowlength=\harrowlength -\commdiag{C^m&\mapright^{\B(\sigma)}&\Rn&\mapright^{\bp_\A(t_0,\sigma)}& -\Rn&\mapright^{\int_{t_0}^t-d\sigma}&\Rn&\mapright^{\bp_\A(t,t_0)}& -\Rn&\mapright^{\C(t)}&C^q\cr -&\arrow(3,-2)\lft{\P(\sigma)\B(\sigma)}&\mapdown\rt{\P(\sigma)}&& -\mapdown\rt{\P^{-1}(t_0)}&&\mapdown\rt{\P(t_0)}&&\mapdown\lft{\P^{-1}(t)}& -\arrow(3,2)\rt{\C(t)\P^{-1}(t)}\cr -&&\Rn&\mapright_{\bp_{\A_1}(t_0,\sigma)}&\Rn&\mapright_{\int_{t_0}^t-d\sigma}& -\Rn&\mapright_{\bp_{\A_1}(t,t_0)}&\Rn}$$ - -Page 96, Fig.~2: -$$\harrowlength=32pt \varrowlength=\harrowlength \sarrowlength=\harrowlength -\def\olap#1{\harrowlength=118pt\hbox to0pt{\hss$#1$\hss}} -\commdiag{C^m&&&&&&&&&&C^q\cr \mapup\lft{\G(\sigma)} -&\hmorphposn=2pt\arrow(1,-1)\rt{\int_{t_0}^{t_1}-\G(\sigma)\,d\sigma} -&&&&&&&&\arrow(1,1)\lft{\H(\ )}&\mapdown\rt -{\int_{t_0}^{t_1}-\H(\sigma)\,d\sigma}\cr -\Rn&\mapleft_{\W(t_0,t_1)}&\Rn&&&\olap{\mapright^{\I}}&&& -\Rn&\mapleft_{\M(t_0,t_1)}&\Rn\cr -\mapdown\lft{\P'}&&\mapup\lft\P&\arrow(-1,1)\rt\P&&&&\arrow(-1,-1)\lft\Q& -\mapdown\rt\Q&&\mapup\rt{\Q'}\cr -\Rn&\mapright^{\S_1}&\Rn&\mapright^{\S_1}&\Rn&\harrowlength=20pt -\mapright^{\Q\P}&\Rn&\mapright^{\S_2}&\Rn&\mapright^{\S_2}&\Rn\cr -&&\mapdown\lft{\N_1}&&&&&&\mapup\rt{\N_2}\cr -&&\Rn&&&\olap{\mapright^{\I}}&&&\Rn\cr}$$ - -Page 114, Fig.~1: -$$\sarrowlength=.42\harrowlength -\commdiag{&\Real^m\cr &\arrow(-1,-1)\lft\B\quad \arrow(1,-1)\rt\G\cr -\Rn&\mapright^\P&\Rn\cr \mapdown\lft{e^{\A t}}&&\mapdown\rt{e^{\F t}}\cr -\Rn&\mapright^\P&\Rn\cr &\arrow(1,-1)\lft\C\quad \arrow(-1,-1)\rt\H\cr -&\Real^q\cr}$$ - -Page 127, Fig.~2: -$$\commdiag{Y&\mapright^{L^*}&X\cr &\adjarrow(3,-2)\lft{LL^*}\rt{(LL^*)^{-1}}& -\mapdown\rt{L}\cr &&Y\cr}$$ - -Page 135, Fig.~2: -$$\harrowlength=80pt \varrowlength=40pt \sarrowlength=50pt -\def\olap#1{\harrowlength=214pt\hbox to0pt{\hss$#1$\hss}} -\def\vlap#1{\varrowlength=93pt\setbox0=\hbox{$#1$}\ht0=0pt\dp0=0pt\box0} -\commdiag{\Rn&&&\olap{\mapright^{\dot\K+\A'\K+\K\A+\L}}&&&\Rn\cr -&\arrow(3,-1)\rt\K&&&&\arrow(-3,-1)\lft\K\cr \noalign{\vskip-3pt} -&&\Rn&\mapright^{\B\B'}&\Rn\cr -\vlap{\mapdown\lft\P}&&\mapup\lft{\P'}&&\mapdown\rt\P&&\vlap{\mapup\rt{\P'}}\cr -&&\Rn&\mapleft^{\P\B\B'\P'}&\Rn\cr \noalign{\vskip-3pt} -&\arrow(3,1)\lft{\K_1}&&&&\arrow(-3,1)\rt{\K_1}\cr -\Rn&&&\olap{\mapright_{\dot\K_1+(\P\A\P^{-1}+\dot\P\P^{-1})\K_1 -+\K_1(\P\A\P^{-1}+\dot\P\P^{-1})+\P'^{-1}\L\P^{-1}}}&&&\Rn\cr -\noalign{\medskip}}$$ - -Page 139, Fig.~2: -$$\harrowlength=80pt \varrowlength=.618\harrowlength -\sarrowlength=\harrowlength -\commdiag{\Rn&\mapright^{\B'(\sigma)\bp'(t_0,\sigma)}&C^m\cr -&\adjarrow(3,-2)\lft{\W(t_0,t_1)}\rt{\W^{-1}(t_0,t_1)}& -\mapdown\rt{\int_{t_0}^{t_1}\bp(t_0,\sigma)\B(\sigma)\,d\sigma}\cr -&&\Rn\cr}$$ diff --git a/Master/texmf-dist/source/eplain/base/test/contents.tex b/Master/texmf-dist/source/eplain/base/test/contents.tex deleted file mode 100644 index 6c3159da810..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/contents.tex +++ /dev/null @@ -1,30 +0,0 @@ -% This file is public domain. -% -\input eplain - -\newcount\subsectionno - -\def\tocsubsectionentry#1#2#3{\leftline{Subsection #2.~#1\dotfill#3}} -\let\tocentry = \tocsubsectionentry - -\readtocfile - -\subsectionno = 13 - -\writetocentry{chapter}{beginning} -\writetocentry{section}{subbeginning $\sin$} - -\advance\subsectionno by 1 -\writenumberedtocentry{subsection}{Subsection $\cos$ \#14} - {\the\subsectionno} - -\advance\subsectionno by 1 -\writenumberedtocentry{subsection}{Subsection \#15}{\the\subsectionno} - -% This doesn't expand \the\subsectionno -- only the first token gets -% expanded. Its output line starts with \tocentry. -\writenumberedtocentry{}{A toc entry}{1{\the\subsectionno}} - -%\loggingall - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/displine.tex b/Master/texmf-dist/source/eplain/base/test/displine.tex deleted file mode 100644 index 97730ede242..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/displine.tex +++ /dev/null @@ -1,36 +0,0 @@ -% This file is public domain. -% -\ifx\undefined\eplain \input eplain \fi - -\loggingall - -\leftdisplays -\parindent=31pt - -A displaylines with an eqdef: text mre more more more more more more -more more more more more more more more more more text. -$$\displaylines{x=1 \eqdef{eqdef-displ}\cr}$$ - -{\leftskip = 14pt -\noindent -And a indented normal equation: -$$y=2\eqdef{foo} -$$ -An indented displaylines with an eqdef: -$$\displaylines{x=1 \eqdef{eqdef-displ}\cr} -$$ - -Now the same two with hangindent nonzero. -\hangindent=17pt -And a indented normal equation: -$$y=2\eqdef{foo} -$$ -An indented displaylines with an eqdef: -$$\displaylines{x=1 \eqdef{eqdef-displ}\cr} -$$ -\par} - -Well? - -\bye - diff --git a/Master/texmf-dist/source/eplain/base/test/double.tex b/Master/texmf-dist/source/eplain/base/test/double.tex deleted file mode 100644 index aca6d6bb3e4..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/double.tex +++ /dev/null @@ -1,24 +0,0 @@ -% This file is public domain. -% -\ifx\undefined\eplain \input eplain \fi - -%\catcode`@ = 11 -%\input gcol -%\catcode`@ = 12 - -Here is a single-column line of text. -%\vskip 6in -%And another one. - -\doublecolumns -\newcount \xxx -\xxx=0 -\par -\baselineskip = 2.5\baselineskip -\loop - \hbox{Line \the\xxx.} - \ifnum \xxx < 3 - \advance \xxx by 1 -\repeat - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/double2.tex b/Master/texmf-dist/source/eplain/base/test/double2.tex deleted file mode 100644 index d1b794cad18..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/double2.tex +++ /dev/null @@ -1,163 +0,0 @@ -% This file is public domain. -% -\input eplain - -\tolerance=2000 - -\def\SP{\ } -\def\throwaway#1{} -\def\checkspace{\ifx \next\ -\let\result=\throwaway - \else \let\result=\ignorespaces \fi \result } -\font\bigfont=cmr10 scaled \magstep5 -\def\bfl#1{\setbox0=\hbox {{\bigfont #1}\thinspace} - \noindent \hangindent \wd0 \hangafter -2 - \llap {\vbox to \ht0{\kern\baselineskip \box0 \kern-\baselineskip}}% - \futurelet \next \checkspace} - -\parskip=10pt -\hbadness = 1500 -\parindent=0pt - -\font\cmbig=cmr17 -\font\cmrbv=cmb10 scaled \magstep5 -\font\iti=cmbxti10 scaled \magstep2 -\font\erm=cmr8 - -\doublecolumns - -%************************************************************************** -% Generate a dummy first page for the twocol macro -% The first page is to have the left column blank. - -\phantom{dummy first line} \vskip5truein - {\font\iti=cmti10 scaled \magstep1 - \iti - \rightline{An abstract} - \rightline{goes} - \rightline{in here.} - } - -%karl \vfill -%karl \eject - -%************************************************************************** - -\phantom{dummy first line} \vskip0.75truein - -\rightline{\cmrbv Title} -\bigskip\bigskip -\rightline{\iti Author} - -\bigskip\bigskip\bigskip -%\rightline{\hrulefill}% width6.5truein} - -\nointerlineskip -\moveleft 3.31truein -\vbox{\hrule width6.5truein} -\nointerlineskip - -\vskip0.75truein - -%************************************************************************** - -\bfl -Xxxxxxx xxxxxx xxxxxx xxxxxxx xxxx xxx xxx\numberedfootnote{\erm Xxxxx xxxxx -xxx xxxx Xxxxx xxxxx, Xxxxx xxxx Xxxxxx xxxxxx, xxxxxx xxxxx xx Xxxxxx Xxxxxx, -Xxx., X.~X. Xxx~xxx, Xxxx Xxxxx, XX~xxxxx.} Xxxx Xxxxxxxxxx xxxxxxxx xxxx, Xxx -xxxxx xxxxxx xx xxxxxxxx xx xxxxx xxxxxxx xxxxxxx xxxx xx xxxx xx xxxxxxx xx -xxx xxxxx xx x xxx xxxxxxx xx xxxxx. Xx x/xxx xx x xxx xxxx xxxxxxx xxxxx -xxxxxxx, Xxxxxx xxxxxxxxx xxxxx xxxxx x/xxx,xxx,xxx xx x xxxxxx. Xxxx xxxxx - xxxx xx xxxx xxxx Xxxxxx'x xxxxxxxx xx xxx xxxxxxx xxxxxxxx xxxxxx xx xxxxx - xx xxxx xxxxxxx xxx xxxxxx xxxx xx xxxxxxx xx xxxxxx x.xx xx x xxx, xxx x.xx -xxx xxxxxx xxxxx xx~xxxxxxx. Xxxx xx x xxxxx xxxxxx xxx xxxxxxxxx xxxxxxxx xxx -xxxxxxxx xxxx xxxxxxxx xxxxxxxxx xxx xxxxxx xxxxxx xxxx, xxx xxx xxxxxxxx -xxxxxxxxx xx xxx xxxx xx xxxxxxxxxx xx x xxxx xxxxx xxxxxxxxxx. - -Xxxxx xxx xxxxxx xxx xxxxxx xx xxx xxxxx xx xxx xxx xxxxxxxxx (xxx XX-xxx -xxxxx xxxxxx xxxxxxxx xx xxx Xxx Xxxxxxxxxx Xxxxxxxxxx), xx xxx xxxxxxx xxxx -xx xxxxx xx xxxxxxxxxxx xx xxxxxxx x xxxxx xxxxxxx xxx xxxx xx xxxxx xxxx -xxxxxx xx xxxx x xxxxxxxxxxx xxxxxx xxxx xxx xxxxxxx. - -Xxxxx x xxxxx xx xxx xxxx xx xxxxxxxxxx xxx xxxxxxxx xx xxx xxxxxxxxxx xxx -xxxxxx xxxxxxxx xxx xxxx xxxxxx xxx xxxxx xxxx. Xxxx xxx xxxx xxxx xxxx xx -xxxxx xxx xxxxxx'x xxxx xxxx xxxxxxxx, xxxx {xxx xxxxxxx} xx xxx xxxxxxx -xxxxxxxxx, xxxxxxxx, xx x, xxx xxxxxxxx. Xxxxx xxxx xxxxxxxxx xxx xxxx (xxxx -xxx Xxxx) xxx xxxxx xx Xxxxx~x. - -Xx xxxxxxxxxxx xx Xxxxx~x xxxxxxx xxxx xxx xxxxxxxx xx xxxxxxx xx xxxx xxxxxxx -xxxxxxxx xxx xxx xx xxxxxxxxxx xx xxxxx xx xxxxxxxx. Xx xxxx, xx xxxxxxx xx -xxxxxx xxx xxxxx xx xx xxxxx xxx xxx xxxxxxxxx xxx xxxxxxxx xxxxx xx Xxxxxx'x -xxxxx xx Xxxxxx' xxxxxx xxxxxxx. Xxxx xxx xxxxxxxx xxxxx xxx xx xx xxxx, xxx -xxxxxxxxx. Xxxxx~x xxxxxxxx xxx xxxxxxxxx xx xxxxxxx xx xxx xxxxxx xxxxxx xx -xxxx xxxxxx xxxxxxxx xx xxxxxxxxx xx xxxxxxxxx. - - -\singlecolumn -\centerline{Table 1---Xxxxxxxxx Xxxx Xxxxxxxx xx Xxxxxxxx} -\smallbreak -\line \bgroup \hss - \vbox to 11\baselineskip{} -\hss \egroup -\doublecolumns - - -Xxxx xxxxxx x xxxxxx xxxxxxx Xxxxxx'x xxxxxx xxxxxx xx xxx xxxxxx xxxxx xxxxxx -xxx xxxx xxxxx xx Xxxxx~x, xxxx xxxx xxxxxx xx xxxxx xxxxxxx. Xx, xxx xxxxxxx, -xx xxxxxxxxxx xxx xxxxxxxx xxxx xxxxxx xxxxxx, xx xxxxx xxxxx xx xxxxxxxxxxx, -xxxxxxxxxx, xxx xxxxxxxxx, xxxxxxx xx xxx xxxxxxxx xx xxxx xxxxxx xxxx xxxxx -xxxxxxx, xx xxxxx xxxxx xx xxx xxxxxxxx, xxxxx xxxxx, xxx xxxxxxxxx. Xxxx xxx -xxxx xx xxxxxxxxx. - -\medskip\bigskip -\centerline{Table 2---Xxxxxxx xx Xxxxxx'x Xxxxxx Xxxxxxx} -\nobreak -\centerline{(Xxxxxxx Xxxxxxxx)} -\smallbreak -\line \bgroup \hss - \vbox to 9\baselineskip{} -\hss \egroup - -Xxxxxxxx xxx xxxx xxxx xxxxx xxxxx xx Xxxxx~x xxx xxx xxxx, xxxx xxx xxx xxxx -xx xxx xxxxxxxx xxxxxxxx xxxxxxxxx xxxxx. Xx xxx x xxxxx xxxxxxx xx xxx xxxx -xx xxxxxxx, xx xxx xxxxxxx xx xx x xxxxxx xxxxxx xx xxxxx xxxxxxx xx xxxxxx xx -xxxx xxxxx xxxxxx x ``xxxxx xxxx'' xxxxxxxx. Xxxxx x xxxxx xx xxxx xxxxx xx -xxx xxxx xx xxxxxxx xxx xxxxxxxx. Xxxx xxx xxxx xxxxxxxx xx xxxxx xxx xxxxxx'x -xxxxxxxx xxxxxx xx xxxxx xxxxx, xxxxxxx xxx, xxx xxxxxx xxxx xxxx xxx xxxxx -xxxxx xxxxxxxx xxx xxxxxxxx. Xxx xxxxxxx, xx xxx xxxxx xxxxx xxxxxx xxxx xxxx -xxxxxx, xx xxx xxxx xxxxxx xxxxxxxx xxx xxx xxxxx. Xxx xxxxxxx xxx xxxxx xx -Table~3. - - -\font\eri=cmti8 - -Xx xxxxxx xx xxxxxxxxxx xxxx xxxxx xxxxxx xxxx xxxxxxxx xxxx xxx xxx xxxxxxx -xxxxx xx xxx xxxx xxxxx xxx xx xxx xx xxx xxx xxxxxxxxx xx xxxxxxx xxxx xx xxx -xxx xxxxx xxxxx xxxxxx. Xxxxx~x xxxxxxx xxxx xxx xxxxx xxxxxxx, xx xx -xxxxxxxxx xxxxxxxxx xx xxxxxxxx xx xxxx xxxx xxxxxxx xxxx xxx xxxx xxx xxxx -xxxxxxxx xxxxxxxxxxx xxx xxx xxxxxx xx xx xxxxxxx. Xxxxxxxxx xxxxxxx xxxxx xxx -xx xxxxxxxx xxxxxx xxxx xxx xxxx xxxxxxx xx x xxxxx xxxxxxxxx, xxx xxx -xxxxxxxx xx xxx xxxxxxxxx? Xxx xxxx xxxxxxxx xxxxxxxxx xxxxxxxxx xxxxxxxxx xx -XX-xxx, xxx xxxxxxxxx xx xxx {xxx Xxxxxx xxxxxx Xxxx -xxx},\numberedfootnote{\erm Xxxx Xx xx xxx xxxx Xxxxxx Xxxxxxx xxxx xxxxx -xxxx.} ``X xxxxxxx xxxxx xxxxxxxxx xxx Xxxxxx xxx xxx xxxx'x xxxxx xx xxxxxxxx -xxxx xx xxxxxxxxx xxxxxx xxxxxx xxxx xxxxxx xxxx.'' Xxxx xxxxxx xxxxx xx x -xxxxxxxx xxxx xxxxxxxx xxxxx xxxxxx xxx xxxxxxxx xxx xxx xxxxxxx xxx xx xxxx -xxxxxxx xxx xxxxxx xxxxxx xxxxxxxx xxx xxxx xxxxxxxxxxx xxxx xxx xxx xxxxxxx -xxx xxxxxx xxxxxx xx Xxxxxx xxxxx xx xxxx, xxx xxxxx xxx xxx xxxxxxxx xx x -Xxxxxx xxxxxxx xxxx xxx xxxx? Xxx xxxxxx xxxxx xx xx xxxxxxxxx xxx xxxxxxx -xxxx xxx xxxx xxxx xx Xxxxx~x xxx xxxxxx xxxx xxx xxxxxxx xxxx xxxxx xx -xxxxxxx xx xxxxxx xxx xx xxxxx. - -\singlecolumn - -\medskip\bigbreak -\midinsert -\centerline{Table 3---Xxxxxxxxx Xxxx Xxxxxxxx xx Xxxxxxxx} -\smallbreak -\line \bgroup \hss - \vbox to11\baselineskip{} -\hss \egroup -\endinsert - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/dvipdfm.tex b/Master/texmf-dist/source/eplain/base/test/dvipdfm.tex deleted file mode 100644 index 0760afbe50b..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/dvipdfm.tex +++ /dev/null @@ -1,111 +0,0 @@ -\input ../eplain -%\enablehyperlinks[nolinks] -%\enablehyperlinks[dvipdfm] -\enablehyperlinks - -\beginpackages -\usepackage[dvipsnames]{color} -\endpackages - -% Execute #1 then print it verbatim and indented. -\def\c{\cf\indent\relax} -% Same as \c, but do not indent and at the end say \hlend. -\def\f{\cf\noindent\hlend} -% -\def\cf#1#2#3{% - \def\temp{#3}% - \edef\cftemp{\sanitize\temp}% - #1#3\expandafter\verbatim\cftemp\endverbatim#2\par -} -% -\newcount\destcount -% Execute `#1{d\the\destcount}' then print it (`#1', `{d', and `}' are printed -% verbatim; `\the\destcount' is expanded). -\def\d{\dl\relax} -% Same as \d, but at the end also say \hlend. -\def\l{\dl\hlend} -% -\def\dl#1#2{% - \global\advance\destcount by1 - \toks0={#2}% - \edef\temp{\the\toks0{d\the\destcount}}% - \edef\dltemp{\sanitize\temp}% - \noindent#2{d\the\destcount}\expandafter\verbatim\dltemp\endverbatim#1\par -} - - - -\leftline{\bf Destinations} -\medskip - -{\tt\global\parindent=4em} - -\d{\hldest{}{}} -\c{\hldestopts{zoom=2345}} -\d{\hldest{}{}} -\medskip -\c{\hldesttype{fitr}} -\c{\hldestopts{left=36,bottom=420,right=360,top=720}} -\d{\hldest{}{}} -\c{\def\mydesttype{xyz}} -\c{\def\myopts{left=72,top=648}} -\d{\hldest{\mydesttype}{\myopts}} -\medskip -\c{\let\myopts\empty} -\c{\hldestopts{raise=2\normalbaselineskip}} -\d{\hldest{xyz}{\myopts,zoom=2500}} -\c{\hldestopts{left=,bottom=,right=,top=}} -\d{\hldest{xyz}{raise=\ht\strutbox,zoom=3000}} -\medskip -\makeatletter -\c{\def\mydest{\special{pdf: dest (\@hllabel) [@thispage /FitBH @ypos]}}} -\d{\hldest{raw}{cmd=mydest}} -\resetatcatcode -\medskip -\d{\hldest{fit}{}} -\d{\hldest{fith}{}} -\d{\hldest{fitv}{}} -\d{\hldest{fitb}{}} -\d{\hldest{fitbh}{}} -\d{\hldest{fitbv}{}} -\vfil\eject - - - -\leftline{\bf Links} -\medskip - -{\tt\global\parindent=4.5em} - -\destcount=0 % Reset destination count. -\l{\hlstart{name}{}} -\c{\hlopts{bstyle=U}} -\l{\hlstart{name}{}} -\l{\hlstart{}{bstyle=D,bdash=2 4,bcolor=1 0 0,hlight=I}} -\l{\hlstart{}{bstyle=B,bwidth=3}} -\c{\hlopts{bcolor=0 0 1}} -\l{\hlstart{}{bstyle=I,bwidth=4}} -\l{\hlstart{}{bstyle=U,bwidth=1}} -\c{\hlopts{bstyle=S}} -\l{\hlstart{}{hlight=I,bcolor=1 .2 .2,bwidth=2}} -\l{\hlstart{}{hlight=N,bstyle=D,bwidth=3}} -\l{\hlstart{}{hlight=O}} -\l{\hlstart{}{hlight=P,bcolor=.3 .6 .7}} -\l{\hlstart{}{bstyle=D,bdash=2 4 6}} -\l{\hlstart{}{bwidth=0}} -\l{\hlstart{}{bstyle=D,bdash=2 4 6 8}} -\f{\hlstart{page}{pagefit=/FitH 600}{1}} -\f{\hlstart{filename}{file=hlink.pdf,newwin=1}{eq1}} -\f{\hlstart{filepage}{file=hlink.pdf,pagefit=/FitR 50 100 300 500}{1}} -\f{\hlstart{filepage}{file=hlink.pdf,pagefit=/FitB}{2}} -\f{\hlstart{url}{}{http://tug.org/eplain/}} -\c{\def\c{\special{pdf:beginann<>}}} -\f{\hlstart{raw}{cmd=c}{}} - - - -\bye - -% Local variables: -% compile-command: "(cd .. && make eplain.tex) && tex --interact=nonstopmode dvipdfm.tex && dvipdfm -p letter dvipdfm.dvi" -% End: diff --git a/Master/texmf-dist/source/eplain/base/test/ecommdiag.tex b/Master/texmf-dist/source/eplain/base/test/ecommdiag.tex deleted file mode 100644 index 562ad84ce00..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/ecommdiag.tex +++ /dev/null @@ -1,15 +0,0 @@ -% This file is public domain. -% -\input ../eplain - -\fmtversion - -$$\commdiag{Y&\mapright^f&E\cr \mapdown&\arrow(3,2)\lft{f_t}&\mapdown\cr -Y\times I&\mapright^{\bar f_t}&X}$$ - -\end - -From DYMACEK@fs.sciences.WLU.EDU Fri Apr 15 09:21:12 1994 -To: kb@cs.umb.edu -From: "Wayne M. Dymacek" -Date: Fri, 15 Apr 1994 9:19:15 EDT diff --git a/Master/texmf-dist/source/eplain/base/test/emergncy.tex b/Master/texmf-dist/source/eplain/base/test/emergncy.tex deleted file mode 100644 index de1eeaefe6f..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/emergncy.tex +++ /dev/null @@ -1,19 +0,0 @@ -% This file is public domain. -% -%\ifx\undefined\eplain \input eplain \fi - -\hsize = 32pc -\emergencystretch = 8pc -%\tolerance = 10000 - -\def\code#1{{\tt #1}} -\def\\{{\tt \char92}} - -You can make a new numbered theorem-like environment with -\code{\\definenumberedtheorem}. This macro takes one argument, the name -of the environment. The first letter of the name will be capitalized -when it is typeset. Analogously, you can use -\code{\\defineunnumberedtheorem} to make a new unnumbered theorem-like -environment. These commands can only be used before \code{\\body}. - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/env.tex b/Master/texmf-dist/source/eplain/base/test/env.tex deleted file mode 100644 index 3b4cf56be66..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/env.tex +++ /dev/null @@ -1,42 +0,0 @@ -% This file is public domain. -% -\input eplain - -First, let's make sure they work. - -\loggingall - -\environment{outer} - \environment{inner} - This is in the first inner. - \endenvironment{inner} - - This is between inners. - - \environment{inner} - This is in the second inner. - - \environment{even-more-inner} - This is even more inner. - \endenvironment{even-more-inner} - \endenvironment{inner} -\endenvironment{outer} - -This is after the outer. - -Now let's make some mistakes. - -%\environment{start-1} -%\endenvironment{end-2} - -\endenvironment{where-is-the-start?} - -\begingroup -\endenvironment{begingroup-started} - -\environment{endgroup-ended} -\endgroup - -\environment{noend} - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/eqdef.tex b/Master/texmf-dist/source/eplain/base/test/eqdef.tex deleted file mode 100644 index 8a72b874333..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/eqdef.tex +++ /dev/null @@ -1,15 +0,0 @@ -% This file is public domain. -% -% Test empty eqdef's. -\ifx\undefined\eplain \input eplain \fi - -\loggingall - -$$a = 1 -\eqdef{} -$$ - -$$b = 2 -\eqdef{} -$$ -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/eqref.tex b/Master/texmf-dist/source/eplain/base/test/eqref.tex deleted file mode 100644 index 8f0d4f8bb59..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/eqref.tex +++ /dev/null @@ -1,141 +0,0 @@ -% This file is public domain. -% -% Test symbolic equation references. -% -\ifx\eplain\undefined \input eplain \fi - -\loggingall -\leftdisplays - -An equation with a number in its name: -$$ a+b=1\eqdef{line1}$$ -\line{did we mess up plain's line in equation \eqref{line1}?\hfil} - -\bye - -The first equation: -$$x + y = 1 \eqdef{first}$$ - -In equation \eqref{first}, we said that $x+y=1$. -Now, in equation \eqref{second}, we say that $a+b=2$. - -$$a + b = 2 \eqdef{second}$$ - -The next equation is unlabeled in the output, but we can still refer to -it. -$$c + d = 3 \eqdefn{*}$$ - -And here's an equation whose text references another equation, namely, -\eqref{first}: -$$c=3\eqdef[\eqrefn{first}*]{first-star}$$ -And a reference to it: \eqref{first-star}. - -Here is the first of a group of equations: \eqdefn{group} -$$a = 1\eqsubdef{group-1}$$ -and the invisible second, then the third of the group \eqsubdefn{group-invis}: -$$b = 2\eqsubdef{group-2}$$ -We refer to the group as \eqref{group}, to the first as -\eqref{group-1}, the third as \eqref{group-2}, and the invisible second -as \eqref{group-invis}. - -Here's an equation labeled strangely: -$$a=1\eqdef[\rm strange*]{foo}$$ -And let's refer to \eqref{foo}. - -Let's do subequations off that: -$$b=2\eqsubdef{foo-1}$$ -And refer to it: \eqref{foo-1}. - -% We can't use \count255, since #1 might involve contortions which -% trample it. -\newcount\subrefcount -\def\eqsubreftext#1#2{% - \subrefcount = #2 - \advance\subrefcount by 96 - #1\char\subrefcount -} - -Let's try another group, with a different labelling scheme. Here is the -first of this group2: \eqdefn{group2} -$$a = 1\eqsubdef{group2-1}$$ -and the second of the group2 \eqsubdefn{group2-invis}: -$$b = 2\eqsubdef{group2-2}$$ -We refer to the group2 as \eqref{group2}, to the first as -\eqref{group2-1}, the third as \eqref{group2-2}, and the invisible second -as \eqref{group2-invis}. - -Here is one done with displaylines: -% The \hfill's and \llap make the equation numbers come out in the right -% place if we are not doing \leftdisplays. (See the TeXbook, p.194.) -%$$\displaylines{ -% \hfill x=1\hfill\llap{\eqdef{displayline-1}}\cr -% \hfill y=2\hfill\llap{\eqdef{displayline-2}}\cr -%}$$ -$$\displaylines{ - x=1\eqdef{displayline-1}\cr - y=2\eqdef{displayline-2}\cr -}$$ - -Let's refer to each of the equations in the displaylines: -\eqref{displayline-1}, \eqref{displayline-2}. - -And one with eqalignno: -$$ -\eqalignno{ - a+b&=c&\eqdef{eqalign-1}\cr - d+e&=f&\eqdef{eqalign-2}\cr -} -$$ - -And one with leqalignno, and indented more: -{\leftdisplayindent = 1in -$$\leqalignno{ - a+b &=c&\eqdef{leqalign-1}\cr - dt+eg&=f&\eqdef{leqalign-2}\cr -}$$ -} - -And now let's refer to those: \eqref{eqalign-1}, \eqref{eqalign-2}, -\eqref{leqalign-1}, \eqref{leqalign-2}. - - - -\def\eqprint#1{[\rm A.#1]} - -From now on, all equation labels should be in brackets and preceded -by `A.'. In \eqref{*}, we said that $c+d=3$. And in equation -\eqref{undefined}, we say that $1+1=2$. - -\eqdefn{*x} -\eqdefn{*y} - -We defined equation \eqref{*y}, although we didn't give an equation for -it. -This is a forward reference to equation \eqref{forward}. - -$$e + f = 4 \eqdef{forward}$$ - -That equation above defines \eqref{forward}. - - -\newcount\sectionnum \sectionnum = 1 -\def\eqconstruct#1{\the\sectionnum.#1} - -And now equation numbers should have a section number (which we start at -one) preceding them. - -$$a+b=1 \eqdef{s-ab}$$ - -That equation is \eqref{s-ab}. The one we'll define in the next section -is \eqref{s-cd}. - - -\advance\sectionnum by 1 -The equation in the previous section was \eqref{s-ab}. Let's define one -in this section: - -$$c+d=3 \eqdef{s-cd}$$ - -And refer to it: \eqref{s-cd}. - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/example.eps b/Master/texmf-dist/source/eplain/base/test/example.eps deleted file mode 100644 index 4074a32b458..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/example.eps +++ /dev/null @@ -1,389 +0,0 @@ -%!PS-Adobe-2.0 EPSF-1.2 -%%Creator: MATLAB, The Mathworks, Inc. -%%Title: example.eps -%%CreationDate: 11/05/96 21:16:44 -%%DocumentNeededFonts: Helvetica -%%DocumentProcessColors: Cyan Magenta Yellow Black -%%Pages: 1 -%%BoundingBox: 97 197 502 604 -%%EndComments - -%%BeginProlog - -% MathWorks dictionary -/MathWorks 150 dict begin - -% definition operators -/bdef {bind def} bind def -/ldef {load def} bind def -/xdef {exch def} bdef -/xstore {exch store} bdef - -% operator abbreviations -/c /clip ldef -/cc /concat ldef -/cp /closepath ldef -/gr /grestore ldef -/gs /gsave ldef -/mt /moveto ldef -/np /newpath ldef -/cm /currentmatrix ldef -/sm /setmatrix ldef -/rc {rectclip} bdef -/rf {rectfill} bdef -/rm /rmoveto ldef -/rl /rlineto ldef -/s /show ldef -/sc {setcmykcolor} bdef -/sr /setrgbcolor ldef -/w /setlinewidth ldef -/j /setlinejoin ldef -/cap /setlinecap ldef - -% page state control -/pgsv () def -/bpage {/pgsv save def} bdef -/epage {pgsv restore} bdef -/bplot /gsave ldef -/eplot {stroke grestore} bdef - -% orientation switch -/portraitMode 0 def -/landscapeMode 1 def - -% coordinate system mappings -/dpi2point 0 def - -% font control -/FontSize 0 def -/FMS { - /FontSize xstore %save size off stack - findfont - [FontSize 0 0 FontSize neg 0 0] - makefont - setfont - }bdef - -/reencode { -exch dup where -{pop load} {pop StandardEncoding} ifelse -exch -dup 3 1 roll -findfont dup length dict begin - { 1 index /FID ne {def}{pop pop} ifelse } forall - /Encoding exch def - currentdict -end -definefont pop -} bdef - -/isroman { -findfont /CharStrings get -/Agrave known -} bdef - -/FMSR { -3 1 roll 1 index -dup isroman -{reencode} {pop pop} ifelse -exch FMS -} bdef - -/csm { - 1 dpi2point div -1 dpi2point div scale - neg translate - landscapeMode eq {90 rotate} if - } bdef - -% line types: solid, dotted, dashed, dotdash -/SO { [] 0 setdash } bdef -/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef -/DA { [6 dpi2point mul] 0 setdash } bdef -/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef - -% macros for lines and objects -/L { - lineto - stroke - } bdef -/MP { - 3 1 roll moveto - 1 sub {rlineto} repeat - } bdef -/AP { - {rlineto} repeat - } bdef -/PP { - closepath fill - } bdef -/DP { - closepath stroke - } bdef -/MR { - 4 -2 roll moveto - dup 0 exch rlineto - exch 0 rlineto - neg 0 exch rlineto - closepath - } bdef -/FR { - MR stroke - } bdef -/PR { - MR fill - } bdef -/L1i { - { currentfile picstr readhexstring pop } image - } bdef - -/tMatrix matrix def -/MakeOval { - newpath - tMatrix currentmatrix pop - translate scale - 0 0 1 0 360 arc - tMatrix setmatrix - } bdef -/FO { - MakeOval - stroke - } bdef -/PO { - MakeOval - fill - } bdef - -/PD { - 2 copy moveto lineto stroke - } bdef - - -currentdict end def -%%EndProlog - -%%BeginSetup -MathWorks begin - -0 cap - -end -%%EndSetup - -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 97 197 502 604 -MathWorks begin -bpage -%%EndPageSetup - -%%BeginObject: graph1 1 -bplot - -/dpi2point 12 def -portraitMode 0216 7344 csm - - 956 91 4862 4883 MR c np -76 dict begin %Colortable dictionary -/c0 { 0 0 0 sr} bdef -/c1 { 1 1 1 sr} bdef -/c2 { 1 0 0 sr} bdef -/c3 { 0 1 0 sr} bdef -/c4 { 0 0 1 sr} bdef -/c5 { 1 1 0 sr} bdef -/c6 { 1 0 1 sr} bdef -/c7 { 0 1 1 sr} bdef -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 144 FMSR - -1 j -c1 - 0 0 6912 5185 PR -6 w -DO -4 w -c0 -1463 4613 mt 1463 388 L -1463 388 mt 1463 388 L -2308 4613 mt 2308 388 L -2308 388 mt 2308 388 L -3153 4613 mt 3153 388 L -3153 388 mt 3153 388 L -3999 4613 mt 3999 388 L -3999 388 mt 3999 388 L -4844 4613 mt 4844 388 L -4844 388 mt 4844 388 L -5689 4613 mt 5689 388 L -5689 388 mt 5689 388 L -1463 4613 mt 5689 4613 L -5689 4613 mt 5689 4613 L -1463 4191 mt 5689 4191 L -5689 4191 mt 5689 4191 L -1463 3768 mt 5689 3768 L -5689 3768 mt 5689 3768 L -1463 3346 mt 5689 3346 L -5689 3346 mt 5689 3346 L -1463 2923 mt 5689 2923 L -5689 2923 mt 5689 2923 L -1463 2501 mt 5689 2501 L -5689 2501 mt 5689 2501 L -1463 2078 mt 5689 2078 L -5689 2078 mt 5689 2078 L -1463 1655 mt 5689 1655 L -5689 1655 mt 5689 1655 L -1463 1233 mt 5689 1233 L -5689 1233 mt 5689 1233 L -1463 811 mt 5689 811 L -5689 811 mt 5689 811 L -1463 388 mt 5689 388 L -5689 388 mt 5689 388 L -1463 4613 mt 1463 388 L -1463 388 mt 5689 388 L -1463 4613 mt 1463 388 L -1463 388 mt 5689 388 L -1463 4613 mt 1463 388 L -1463 388 mt 5689 388 L -SO -6 w -1463 4613 mt 5689 4613 L -1463 388 mt 5689 388 L -5689 4613 mt 5689 388 L -1463 4613 mt 1463 388 L -5689 4613 mt 5689 4613 L -1463 4613 mt 1463 4613 L -1463 4613 mt 5689 4613 L -1463 4613 mt 1463 388 L -1463 4613 mt 1463 4613 L -1463 4613 mt 1463 4571 L -1463 388 mt 1463 430 L -1423 4782 mt -(0) s -2308 4613 mt 2308 4571 L -2308 388 mt 2308 430 L -2268 4782 mt -(2) s -3153 4613 mt 3153 4571 L -3153 388 mt 3153 430 L -3113 4782 mt -(4) s -3999 4613 mt 3999 4571 L -3999 388 mt 3999 430 L -3959 4782 mt -(6) s -4844 4613 mt 4844 4571 L -4844 388 mt 4844 430 L -4804 4782 mt -(8) s -5689 4613 mt 5689 4571 L -5689 388 mt 5689 430 L -5609 4782 mt -(10) s -1463 4613 mt 1505 4613 L -5689 4613 mt 5647 4613 L -1264 4666 mt -(-1) s -1463 4191 mt 1505 4191 L -5689 4191 mt 5647 4191 L -1144 4244 mt -(-0.8) s -1463 3768 mt 1505 3768 L -5689 3768 mt 5647 3768 L -1144 3821 mt -(-0.6) s -1463 3346 mt 1505 3346 L -5689 3346 mt 5647 3346 L -1144 3399 mt -(-0.4) s -1463 2923 mt 1505 2923 L -5689 2923 mt 5647 2923 L -1144 2976 mt -(-0.2) s -1463 2501 mt 1505 2501 L -5689 2501 mt 5647 2501 L -1348 2554 mt -(0) s -1463 2078 mt 1505 2078 L -5689 2078 mt 5647 2078 L -1228 2131 mt -(0.2) s -1463 1655 mt 1505 1655 L -5689 1655 mt 5647 1655 L -1228 1708 mt -(0.4) s -1463 1233 mt 1505 1233 L -5689 1233 mt 5647 1233 L -1228 1286 mt -(0.6) s -1463 811 mt 1505 811 L -5689 811 mt 5647 811 L -1228 864 mt -(0.8) s -1463 388 mt 1505 388 L -5689 388 mt 5647 388 L -1348 441 mt -(1) s -1463 388 mt 5689 388 L -1463 4613 mt 5689 4613 L -1463 4613 mt 1463 388 L -5689 4613 mt 5689 388 L -1463 388 mt 1463 388 L -5689 388 mt 5689 388 L -gs 1463 388 4227 4226 MR c np -42 183 43 192 42 200 42 206 42 210 43 211 42 210 42 208 -42 204 43 196 42 188 42 177 42 165 43 151 42 135 42 119 -42 100 43 82 42 61 42 42 42 20 43 -1 42 -22 42 -43 -42 -63 43 -83 42 -102 42 -120 43 -137 42 -152 42 -166 42 -178 -43 -188 42 -197 42 -204 42 -208 43 -211 42 -211 42 -209 42 -206 -43 -199 42 -192 42 -182 42 -170 43 -157 42 -142 42 -126 42 -108 -43 -89 42 -70 42 -50 43 -29 42 -8 42 13 42 34 43 55 -42 75 42 94 42 113 43 130 42 146 42 160 42 173 43 185 -42 193 42 202 42 206 43 210 42 211 42 211 42 207 43 202 -42 195 42 186 42 176 43 162 42 149 42 132 43 116 42 97 -42 79 42 58 43 37 42 17 42 -4 42 -26 43 -46 42 -67 -42 -86 42 -105 43 -123 42 -139 42 -155 42 -168 43 -180 42 -190 -42 -198 42 -205 43 -209 1505 2290 100 MP stroke -42 -211 1463 2501 2 MP stroke -42 -106 43 -87 42 -67 42 -48 42 -26 43 -5 42 15 42 37 -42 57 43 78 42 96 42 115 42 132 43 148 42 162 42 175 -42 185 43 195 42 202 42 207 42 210 43 211 42 211 42 206 -42 202 43 194 42 185 42 174 43 161 42 146 42 131 42 113 -43 95 42 76 42 56 42 35 43 14 42 -7 42 -28 42 -49 -43 -69 42 -89 42 -107 42 -125 43 -141 42 -157 42 -169 42 -182 -43 -191 42 -199 42 -205 43 -210 42 -211 42 -210 42 -209 43 -204 -42 -197 42 -189 42 -179 43 -166 42 -153 42 -137 42 -121 43 -103 -42 -84 42 -64 42 -44 43 -22 42 -2 42 19 42 40 43 61 -42 81 42 99 42 118 43 135 42 150 42 164 43 177 42 187 -42 197 42 203 43 207 42 211 42 211 42 210 43 206 42 200 -42 193 42 183 43 172 42 158 42 144 42 128 43 110 42 92 -42 73 42 52 43 31 1505 399 100 MP stroke -42 11 1463 388 2 MP stroke - -gr -3194 4942 mt -(\\tex[t][t]{$t$}) s -1090 3419 mt -90 rotate -(\\tex[B][B]{$\\sin\(t\)$, $\\cos\(t\)$}) s -90 rotate -2314 273 mt -(\\tex[B][B]{Plot of $\\sin\(t\)$ and $\\cos\(t\)$}) s -2689 2048 mt -(p1) s -3956 3343 mt -(p2) s -5224 1495 mt -(p2) s -3486 2178 mt -78 rotate -(p3) s -78 rotate - -end - -eplot -%%EndObject graph 1 - -epage -end - -showpage - -%%Trailer -%%EOF diff --git a/Master/texmf-dist/source/eplain/base/test/filexist.tex b/Master/texmf-dist/source/eplain/base/test/filexist.tex deleted file mode 100644 index e80485577a5..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/filexist.tex +++ /dev/null @@ -1,22 +0,0 @@ -% This file is public domain. -% -% Test \testfileexistence. -% -\ifx\undefined\eplain \input eplain\fi - -\testfileexistence{tex} -\iffileexists \else - \message{\jobname.tex does not exist, but it should.} -\fi - -\testfileexistence[README]{} -\iffileexists \else - \message{README does not exist, but it should.} -\fi - -\testfileexistence[foo]{bar} -\iffileexists - \message{foo.bar exists, but it shouldn't.} -\fi - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/flynn.tex b/Master/texmf-dist/source/eplain/base/test/flynn.tex deleted file mode 100644 index d5efea792cd..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/flynn.tex +++ /dev/null @@ -1,7 +0,0 @@ -% This file is public domain. -% -\input eplain -\loggingall -\xrdef{foo} -\xrdef{bar} -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/footnote.tex b/Master/texmf-dist/source/eplain/base/test/footnote.tex deleted file mode 100644 index de30cc89de4..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/footnote.tex +++ /dev/null @@ -1,88 +0,0 @@ -% This file is public domain. -% -\input eplain - -This is some text\numberedfootnote{And this is the first footnote.} and -now some more text\numberedfootnote{The second.} and -finally\numberedfootnote{the third} some -more.\numberedfootnote{The fourth.} And again. - -\footnotenumber = 0 - -\leftskip = 1in -Let's do another, this one should be numbered one -again\numberedfootnote{OK, here it is, numbered one}. This paragraph -ends up being indented by one inch. But this time the -footnote\numberedfootnote{This one should be like the others.} shouldn't be -indented. - -\footnotemarkseparation = .16666em - -\numberedlist -\li This is the first item in a list, and it has a -footnote\numberedfootnote{See? With a separation less than the others, too}. - -This is the second paragraph of the first item, and it has -one\numberedfootnote{This is in the second paragraph.} too. -\endnumberedlist - -\leftskip = 0pt -Now let's redefine the footnote command. -\let\footnote = \numberedfootnote - -\everyfootnote = {\it\leftskip=1in}% - -And do one\footnote{This is it, should be indented by one inch and in -italics.} footnote with that, which should also end up indented. - -\font\small = cmr7 -\everyfootnote = {\small \baselineskip = 7pt } -Another paragraph\footnote{With a footnote in a smaller font, but make -it more than one line long so we can see if the baselineskip change -worked or not. Because it's a small font, it has to go on for ages, -simply ages.\par}. - -\vfill\eject - -% Test the \footnoterule parameters. -% -\footnoterulewidth = 6in -\footnoteruleheight = 4pt -\belowfootnoterulespace = 6pt - -New page\footnote{This footnote should have a 4pt rule above it which 6 inches -wide and has 6 points of space below it.} to test the footnote rule -parameters. - -\vfill\eject - -\everyfootnote = {\bf} -\interfootnoteskip = 8pt -\footnoteruleheight = 0pt -\belowfootnoterulespace = 0pt -\skip\footins = 12pt - -Some more\footnote{In bold, indented by the usual parindent, with no -extra space between it and the rule; in fact, no rule.} footnotes so we can -test\footnote{In bold, with 8pt extra space above it.} -interfootnoteskip. - -The big blank space following this will force a long footnote to be -broken across pages. - -\vglue 41pc plus 1filll - -This is the last line on the page\footnote{And this is the last -footnote; it should be like the last one. We are making this -footnote pretty long, so that it won't all fit on one page. I hope that -\TeX\ will break it across pages, so we see if the new footnote -formatting parameters still work in that case. Oh, boy, I can see we -should make this footnote really long; much longer than I can make up -garbage sentences like this for. Well, maybe not. I can be pretty -verbose when I have to be. I suppose anyone can. Did you notice I'm -inconsistent about leaving one space or two after sentence-ending -periods? Punctuation, really.}, and it should have 12pt -(which is the footins skip) between it and the rule\footnote{I lied; -{\it this} is the last footnote}. - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/frac.tex b/Master/texmf-dist/source/eplain/base/test/frac.tex deleted file mode 100644 index f4f4cd565ab..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/frac.tex +++ /dev/null @@ -1,24 +0,0 @@ -% This file is public domain. -% -\input eplain - -\obeylines % -This is \frac 1/2 cup. -This is \frac 2/3 cup. -This is \frac 3/4 cup. -This is \frac 5/6 cup. -This is \frac 6/7 cup. -This is \frac 7/8 cup. -This is \frac 8/9 cup. -This is \frac 9/{10} cup. -This is \frac 10/{11} cup. - -\end - - - - - - - - diff --git a/Master/texmf-dist/source/eplain/base/test/gcol.tex b/Master/texmf-dist/source/eplain/base/test/gcol.tex deleted file mode 100644 index e44455ce0e7..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/gcol.tex +++ /dev/null @@ -1,218 +0,0 @@ -% This file is public domain. -% -%Date: Thu, 16 May 91 14:59 PDT -%From: David Guichard -%Subject: Re: eplain -%To: karl@cs -% -%Karl-- -% -%Here are my multi-column macros and a rewrite of the double columns section -%of eplain.texinfo. I included a \quadcolumns because this seems potentially -%useful on landscape pages. -% -%I ran into a couple of problems/bugs/features of the original macros that I -%think I've fixed. -% -%First, if I started double columns and then returned to single column before -%the output routine was invoked, but there was too much text in the columns to -%fit on the current page, then all of the text was put on the next page, leaving -%lots of blank space on the first page. I think I've fixed this by changing how -%\vsize is defined. -% -%Next, unless I'm doing something screwy, it looks to me like eplain goofs up on -%footnotes and topinserts issued in multicolumn mode. I think I've got things -%changed around so they work. -% -%I also discovered that the "\vskip\interfootnoteskip" in the vfootnote macro -%will produce a parskip even if the interfootnoteskip is 0---was this -%intentional? If not, perhaps you'd like to add \parskip=0pt to vfootnote. -%(I have already added it to the modified vfootnote in the columns macro). - -\newskip\abovecolumnskip \abovecolumnskip = \bigskipamount -\newskip\belowcolumnskip \belowcolumnskip = \bigskipamount -\newdimen\gutter \gutter = 2pc -\newdimen\c@lumnhsize -\newtoks\previousoutput -\newcount\number@fcolumns -\newbox\@partialpage -\newdimen\singlec@lumnhsize -\newdimen\singlec@lumnvsize -\newtoks\previousoutput -\let\@ndcolumns=\relax -% -% We have a few synonymous ways to refer to multiple column modes. -% -\def\doublecolumns{\@columns2} -\def\triplecolumns{\@columns3} -\def\quadcolumns{\@columns4} -\def\begincolumns#1{\ifcase#1\relax \or \singlecolumn \or \@columns2 \or% - \@columns3 \or \@columns4 \else \relax \fi} -\def\singlecolumn{\@ndcolumns\vskip\belowcolumnskip\nointerlineskip} -\let\endcolumns=\singlecolumn -% -\def\@columns#1{% - \@ndcolumns% - \begingroup -% -% We redefine the main footnote macro so footnotes will extend across -% the whole page, not just the width of a column. Likewise for @ins, -% the insertion macro. -% - \def\vfootnote##1{\insert\footins\bgroup\hsize=\singlec@lumnhsize - \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 = {}% - \parskip0pt - \the\everyfootnote - \vskip\interfootnoteskip - \indent\llap{##1\kern\footnotemarkseparation}\footstrut\futurelet\next\fo@t} - % - \def\@ins{\par\begingroup\setbox\z@\vbox\bgroup\hsize=\singlec@lumnhsize} - \global\let\@ndcolumns=\@@endcolumns - \global\number@fcolumns=#1 - \global\c@lumnhsize = \hsize % If \hsize changed, get the new value. - \par % Shouldn't start in horizontal mode. - \global\previousoutput = \expandafter{\the\output}% - \global\advance\c@lumnhsize by -#1\gutter - \global\divide\c@lumnhsize by #1 - \global\output = {% - \global\setbox\@partialpage = - \vbox{\unvbox255\vskip\abovecolumnskip}% - }% - \pagegoal = \pagetotal - \eject % Now expand the \output just above. - \global\output = {\c@lumnoutput}% - \global\singlec@lumnhsize = \hsize - \global\singlec@lumnvsize = \vsize - \hsize = \c@lumnhsize -% -% Compute the proper vsize based on what's already on the page -% and the number of columns. Also change the mag factor for insertions. -% - \global\advance\vsize by -\ht\@partialpage - \global\advance\vsize by -\ht\footins - \ifvoid\footins\else \global\advance\vsize by -\skip\footins \fi - \global\advance\vsize by -\ht\topins - \ifvoid\topins\else \global\advance\vsize by -\skip\topins \fi - \global\vsize = #1\vsize - \multiply\count\footins by #1 \multiply\count\topins by #1 -}% -% -% When this is invoked box 255 should contain just the right amount of -% material, whether triggered by an output routine or a change in the -% number of columns. Because columns have to contain a whole number of -% lines of type, we take a bit of care with balancing the heights of the -% columns to prevent either losing material or having a very short last -% column. -% -% Note: when a page ends due to \bye or \eject, box 255 will contain lotsa -% white space, so the columns will not look balanced. To fix this use -% \singlecolumn before ending the page. -% -\def\@columnsplit{% - \splittopskip = \topskip - \splitmaxdepth = \baselineskip - \dimen0 = \ht255 - \divide\dimen0 by \number@fcolumns - \begingroup % the balancing act - \vbadness = 10000 \loop \setbox8=\copy255 - \global\setbox1 = \vsplit8 to \dimen0 \global\wd1 = \hsize - \global\setbox3 = \vsplit8 to \dimen0 \global\wd3 = \hsize - \ifnum\number@fcolumns>2% - \global\setbox5 = \vsplit8 to \dimen0 - \global\wd5 = \hsize \fi - \ifnum\number@fcolumns>3% - \global\setbox7 = \vsplit8 to \dimen0 - \global\wd7 = \hsize \fi - \ifdim\ht8>0pt \advance\dimen0 by 1pt \repeat - \endgroup - \global\setbox255 = \vbox{% - \unvbox\@partialpage - \ifcase\number@fcolumns \relax\or\relax\or% - \hbox to \singlec@lumnhsize{\box1\hfil\box3}\or% - \hbox to\singlec@lumnhsize{\box1\hfil\box3\hfil\box5}\or% - \hbox to\singlec@lumnhsize{\box1\hfil\box3\hfil\box5\hfil\box7}\or% - \else\relax\fi% - }% -}% -\def\c@lumnoutput{% - \@columnsplit - \hsize = \singlec@lumnhsize % Local to the \output group. - \vsize = \singlec@lumnvsize - \the\previousoutput -% -% Now the correct vsize is the original vsize times the -% number of columns. -% - \global\vsize=\number@fcolumns\singlec@lumnvsize -}% -\def\@@endcolumns{% - \global\let\@ndcolumns=\relax% - \par % Shouldn't start in horizontal mode. - \global\output = {\global\setbox1 = \box255}% - \pagegoal = \pagetotal - \eject - \global\setbox255 = \box1 - \@columnsplit - \global\vsize = \singlec@lumnvsize - \global\output = \expandafter{\the\previousoutput}% - \endgroup - \ifvoid\topins\else\topinsert\unvbox\topins\endinsert\fi - \unvbox255 -}% - -\endinput - -@node Multiple columns, Footnotes, Margins, User definitions -@section Multiple columns - -@cindex double column output -@cindex triple column output -@cindex quadruple column output -@cindex multiple column output - Eplain provides for double, triple and quadruple -column output: you just say -@code{\doublecolumns}, -@findex doublecolumns -@code{\triplecolumns} -@findex triplecolumns -or @code{\quadcolumns} -@findex quadcolumns -and from that point on, the manuscript will be -set in columns. If you want to go back to one column, say -@code{\singlecolumn}. -@findex singlecolumn - - The columns macros insert the value of the glue parameter -@code{\abovecolumnskip} -@findex abovecolumnskip -before the multi-column text, and the value of the glue parameter -@code{\belowcolumnskip} -@findex belowcolumnskip -after it. The default value for both of these parameters is -@code{\bigskipamount}, i.e., one linespace. - - The columns are separated by the value of the dimen parameter -@code{\gutter}. -@findex gutter -The default value for @code{\gutter} is two picas. - - The macros take into account only the insertion classes -@cindex insertion classes -defined by plain @TeX{}, namely, footnotes and @code{\topinsert}s. If -you have defined additional insertion classes, you will need to change -the macros which implement multi-column mode. Furthermore, the insertions -do not respect the column widths; if you want them to, you have to -change the way your output routine works. (Eplain uses whatever the -current output routine is; it is not tied to @code{\plainoutput}.) -@findex plainoutput - -@xx: \columnfill -@xx: \singlecolumn to balance columns -@xx: footnote/topinsert width of whole page -@xx: \vfootnote resets \parskip diff --git a/Master/texmf-dist/source/eplain/base/test/hlcite.tex b/Master/texmf-dist/source/eplain/base/test/hlcite.tex deleted file mode 100644 index ec27c4e8fbe..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/hlcite.tex +++ /dev/null @@ -1,55 +0,0 @@ -\input ../eplain -%\enablehyperlinks[nolinks] -%\enablehyperlinks[pdftex] -%\enablehyperlinks[dvipdfm] -\enablehyperlinks - -\ifpdf - \pdfpagewidth=8.5in - \pdfpageheight=11in -\fi - -\beginpackages - \usepackage{color} -\endpackages - -\hldestopts[bib]{raise=\ht\strutbox} -\hlopts![cite]{bstyle=U} - - -% Bibliography in front of the text. - -%\beginsection{References.}\par % Title for the bibliography. -%\bibliography{knuth,xampl} % Use knuth.bib (from Eplain) and xampl.bib - % (from BibTeX) for the labels. -%\bibliographystyle{plain} -%\vfil\eject - - -Two citations to Knuthian works: - \cite[note]{surreal,concrete-math}. - - -\vfil\eject -Three citations: - \cite[note]{surreal,article-crossref,whole-journal}. - -One citation: - \cite{article-crossref}. - - -% Bibliography after the text. - -\vfil\eject -\beginsection{References.}\par % Title for the bibliography. -\bibliography{knuth,xampl} % Use knuth.bib (from Eplain) and xampl.bib - % (from BibTeX) for the labels. -\bibliographystyle{plain} - - -\bye - -% Local variables: -% compile-command: "rm -f hlcite.aux hlcite.bbl && tex --interact=nonstopmode hlcite && bibtex hlcite && tex --interact=nonstopmode hlcite && tex --interact=nonstopmode hlcite && dvipdfm -p letter hlcite" -% compile-command: "rm -f hlcite.aux hlcite.bbl && pdftex --interact=nonstopmode hlcite && bibtex hlcite && pdftex --interact=nonstopmode hlcite && pdftex --interact=nonstopmode hlcite" -% End: diff --git a/Master/texmf-dist/source/eplain/base/test/hlfoot.tex b/Master/texmf-dist/source/eplain/base/test/hlfoot.tex deleted file mode 100644 index 01fae52386b..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/hlfoot.tex +++ /dev/null @@ -1,47 +0,0 @@ -\input ../eplain -%\enablehyperlinks[nolinks] -%\enablehyperlinks[pdftex] -%\enablehyperlinks[dvipdfm] -\enablehyperlinks - -\ifpdf - \pdfpagewidth=8.5in - \pdfpageheight=11in -\fi - -\beginpackages - \usepackage{color} -\endpackages - -% Set \normalbaselineskip for the sake of \hldestfootraise -\everyfootnote = {\sevenrm \normalbaselineskip=9pt \normalbaselines} - -\hlopts![foot]{bstyle=U} -\hldesttype[foot]{fitbh} -\hlopts![footback]{bstyle=D,bdash=1 4} -\hldesttype[footback]{fith} - - -This\numberedfootnote{Footnote to `This'.} is a -sentence\footnote*{Footnote to `sentence'.} with -footnotes\footnote{**}{Footnote to `footnotes'.}. - -\medskip -Now we say -\verbatim\let\footnote=\numberedfootnote|endverbatim -\let\footnote=\numberedfootnote\ and look what we get: - -This\footnote{Another footnote to `This'.} is another -sentence\footnote{Another footnote to `sentence'.} with -footnotes\footnote{Another footnote to `footnotes'.}. - -\vfil\eject -Second page. - - -\bye - -% Local variables: -% compile-command: "tex --interact=nonstopmode hlfoot.tex && dvipdfm -p letter hlfoot.dvi" -% compile-command: "pdftex --interact=nonstopmode hlfoot.tex" -% End: diff --git a/Master/texmf-dist/source/eplain/base/test/hlidx.mst b/Master/texmf-dist/source/eplain/base/test/hlidx.mst deleted file mode 100644 index 1f0813b806b..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/hlidx.mst +++ /dev/null @@ -1,2 +0,0 @@ -delim_n "; " -delim_r "\\thinspace--\\allowbreak\\thinspace " diff --git a/Master/texmf-dist/source/eplain/base/test/hlidx.tex b/Master/texmf-dist/source/eplain/base/test/hlidx.tex deleted file mode 100644 index 2d177a9c6d2..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/hlidx.tex +++ /dev/null @@ -1,138 +0,0 @@ -\input ../eplain - -% If you uncomment the optional arg, index hyperlinks will point to exact -% locations of terms, but MakeIndex will regard _all_ index entries as distinct. -% This can be partially cured by piping hlidx.idx through `util/idxuniq' script -% before feeding it to MakeIndex (see the first compile-command at the end of -% this file). -\enablehyperlinks%[idxexact] -%\enablehyperlinks[nolinks] -%\enablehyperlinks[pdftex] -%\enablehyperlinks[dvipdfm] - -\ifpdf - \pdfpagewidth=8.5in - \pdfpageheight=11in -\fi - -\beginpackages - \usepackage{color} -\endpackages - -\headline={\hrulefill} - -% Try to redefine the delimiters. -\setidxpagelistdelimiter{; } -\setidxpagerangedelimiter{\thinspace--\allowbreak\thinspace} - -% Underline and italisize a page number / page range, taking care not to -% underline `--' in page range like `1--3'. -% -% Note that this definition is not enough if you don't use hyperlinks in index -% (i.e., if you pass `idxnone' to \enablehyperlinks). Then page lists -% like `1, 2' are not broken up by \hlidxpage, and the entire list may -% be passed, which will be be italicized and underlined without being -% split up. You can see the effect by commenting out -% \enablehyperlinks above. In that case, you will have to do a more -% sophisticated parsing using both \idxparserange and \idxparselist -% (like in \@hlidxgetpages). -\def\ituline#1{% - {\it - \idxparserange{#1}% - \ifx\idxpagei\empty - \underbar{#1}% - \else - \underbar{\idxpagei}\idxpagerangedelimiter\underbar{\idxpageii}% - \fi}% -} - - -\count0=-1 - -% i -\topglue12pt -% \indent is needed to place hyperlink destination at the beginning of the first -% line of the paragraph instead of vertical mode above the paragraph. -\indent -\sidx[pagemarkup=ituline]{truth}[definition of] -Definition of truth, page~i. - -Another -\sidx[pagemarkup=ituline]{truth}[definition of] -definition of truth on page~i. -\vfil\eject - -% ii -\topglue24pt -\indent -\sidx[pagemarkup=ituline]{truth}[definition of] -Definition of truth, page~ii. -\vfil\eject - -% iii -No index entries, page~iii. -\vfil\eject - -\count0=1 - -% 1 -\topglue36pt -\indent -\sidx[pagemarkup=ituline]{truth}[definition of] -Definition of truth, page~1. -\vfil\eject - -% 2 -\topglue24pt -Beginning of -\sidx[begin,pagemarkup=ituline]{truth}[definition of] -definition of truth, page~2. -\vfil\eject - -% 3 -\indent -\sidx[pagemarkup=ituline]{truth}[definition of] -Definition of truth that comes whithin an explicit range, page~3. -\vfil\eject - -% 4 -End of -\sidx[end]{truth}[definition of] -definition of truth, page~4. -\vfil\eject - -% 5 -\indent\idxname{Adrien-Marie}{Legendre} (September~18, 1752~-- January~10, 1833) -was a French mathematician. - -Legendre integrals -\sidx{Legendre\idxnameseparator Adrien-Marie!functions!F(k, phi), E(k, -phi)@$F(k,\varphi)$, $E(k,\varphi)$} -$F(k,\varphi)$ and $E(k,\varphi)$ are called {\it complete\/} when -$\varphi=\pi/2$, in which case they are denoted by -\sidx[pagemarkup=ituline]{Legendre\idxnameseparator Adrien-Marie!functions!K(k), -E(k)@${\bf K}(k)$, ${\bf E}(k)$} -${\bf K}(k)$ and ${\bf E}(k)$. - -\indent -\sidx{semantic theory of truth@\leavevmode\hldest{}{}{idx:TSTT}semantic theory of truth} -Semantic theory of truth was developed by Polish logician Alfred Tarski in the -1930s. - - -\sidx[seealso]{truth}[definition of]{\hlstart{}{}{idx:TSTT}semantic theory of -truth\hlend} - - -{\baselineskip=36pt -\noindent\bf Index\par} - -\hookaction{beginindex}{\singlecolumn} -\readindexfile{i} - -\bye - -% Local variables: -% compile-command: "(cd .. && make eplain.tex) && rm -f hlidx.aux hlidx.ind hlidx.idx && tex --interact=nonstopmode hlidx && cat hlidx.idx | ../util/idxuniq | makeindex -s hlidx.mst > hlidx.ind && tex --interact=nonstopmode hlidx && dvipdfm -p letter hlidx.dvi" -% compile-command: "(cd .. && make eplain.tex) && rm -f hlidx.aux hlidx.ind hlidx.idx && pdftex --interact=nonstopmode hlidx && makeindex -s hlidx.mst hlidx && pdftex --interact=nonstopmode hlidx" -% End: diff --git a/Master/texmf-dist/source/eplain/base/test/hlink.tex b/Master/texmf-dist/source/eplain/base/test/hlink.tex deleted file mode 100644 index 939a552ad3c..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/hlink.tex +++ /dev/null @@ -1,144 +0,0 @@ -\input ../eplain -%\enablehyperlinks[nolinks] -%\enablehyperlinks[pdftex] -%\enablehyperlinks[dvipdfm] -\enablehyperlinks - -\beginpackages -\usepackage[dvipsnames]{color} -\endpackages - -\ifpdf - \pdfpagewidth=8.5in - \pdfpageheight=11in -\fi - -\def\sectionword{Section}% -\newcount\sectioncount -\def\beginsection#1\par{% - \par - \advance\sectioncount by1 - {\normalbaselineskip=3pc \normalbaselines - \noindent\definexref{sec\the\sectioncount}{\the\sectioncount}{section}% - {\bf Section~\the\sectioncount} #1\par} -}% - -\def\deriv#1/#2{{{d#1}\over d#2}}% -\def\vec#1#2{#1_1,#1_2,\ldots,#1_{#2}}% -\def\cdotfill{\cleaders\hbox to 1em{\hss$\cdot$\hss}\hfill}% - -% Set defaults for hyperlink options. -\hlopts{bstyle=U}% underlined border -\hlopts{bwidth=2}% -% Make \xrdef destinations make pages fit in the screen. -\hldesttype[xrdef]{fit}% fit page -% Set hyperlink options for various kinds of hyperlinks. -\hlopts![ref]{bstyle=D,bdash=3,hlight=I}% dash border, invert box hlight -\hlopts[ref]{bcolor=1 0 0,bwidth=1}% add options to the current list -\hlopts![eq]{bcolor=0 1 0,hlight=O}% invert border hlight -\hlopts![xref]{bstyle=I,bcolor=0 0 1,hlight=P,bwidth=4}% inset border, inset hlight - - -Ordered list: -\numberedlist -\li[li1] Item 1 -\li[li2] \xrdef{li2:pg}Item 2 - \numberedlist - \li[li2.a] subitem 2.a - \li[li2.b] subitem 2.b - \endnumberedlist -\li Item 3 -\endnumberedlist - -Reference to \ref{li1}. Reference to {\let\reftie.\refn[item~\refn{li2}]{li2.b}}. - -\vskip\abovelistskipamount -Unordered list: -\unorderedlist -\li[uli1] Item 1 -\li Item 2 - \unorderedlist - \li[uli2.a] subitem 2.a - \li subitem 2.b - \endunorderedlist -\endunorderedlist - -Refereneces to \ref[\sevenrm\lbrack dvipdfm will not make the \blackbox\ part of -the link\rbrack]{uli1} and~\refn{uli2.a}. - - -\beginsection \xrdef{sec1:pg} - -Reference to \ref{sec1} and forward reference to \ref{sec2}. - - - -\beginsection - -References to \refs{sec1} and~\refn{sec2}. - -\indent\ref{sec3} will start on \xref{sec3:pg}. -$$\|A\| = \sup_{x\ne0} { \|Ax\| \over \|x\| }. \eqdef{eq1}$$ -Reference to \eqref{eq1}. -$$\|A\| \ge {\|Ax\| \over \|x\|}. \eqsubdef{}$$ -Reference to \eqref[subequation]{}. -$$\|Ax\| \le \|A\| \cdot \|x\|. \eqsubdef{subeq1.2}$$ -Reference to \eqref[subequation]{subeq1.2}. One more reference to -\eqref[subequation]{}. - -\vfil\eject - - - -Forward reference to \eqref[equation]{subeq2.1}. -$$\openup\jot -\eqalignno{\eqdefn{eq2}% fake definition for \eqsubdef's to work - \deriv x/t &= 3x-2y,&\eqsubdef{subeq2.1}\cr - \deriv y/t &= 2x-y.&\eqsubdef{subeq2.2}\cr -}$$ -References to equations \eqref{eq2}, \eqref{subeq2.1} and~\eqref{subeq2.2}. - -$$\hldestopts[eq]{raise=4.5\normalbaselineskip} -\openup\jot -\left.\,\eqalign{ - \deriv x_1/t &= f_1(t,\vec xn),\cr - \deriv x_2/t &= f_2(t,\vec xn),\cr - \omit\span\omit\strut\cdotfill\cr - \deriv x_n/t &= f_n(t,\vec xn).\cr -}\,\right\}\eqdef{eq3}$$ -Another notation for the \eqref[system]{eq3}: -$$\deriv x_i/t=f_i(t,\vec xn)\quad -(i=1,2,\ldots,n).\eqdef[\hbox{$\eqrefn{eq3}^*$}]{}$$ -Reference to \eqref[system]{}. - -Subequations in \verbatim\displaylines|endverbatim: -$$\openup\jot -\displaylines{ - \eqsubdefn{eq3*.1} - \hfill\deriv x_2/t=f_2(t,\vec xn),\hfill\llap{\eqsubdef{eq3*.2}}\cr - \hfill\deriv x_3/t=f_3(t,\vec xn).\hfill\llap{\eqsubdef{eq3*.3}}\cr -}$$ -References to \eqref{eq3*.1}, \eqref{eq3*.2} and~\eqref{eq3*.3}. - -\hloff[eq,] -One more reference to \eqref[system]{}. -\hlon -And one more reference to \eqref[system]{}. - -\beginsection \xrdef{sec3:pg} - -\definecolor{mycolor}{rgb}{0,0,1} -\hlopts{colormodel=,color=mycolor} - -Reference to \ref[item]{li2} on {\hloff\xref{li2:pg}}. - -\indent\ref{sec1} started on {\def\xrefpageword{page~}\xref[title]{sec1:pg}}. - - - -\bye - -% Local variables: -% compile-command: "(cd .. && make eplain.tex) && rm -f hlink.aux && tex --interact=nonstopmode hlink.tex && tex --interact=nonstopmode hlink.tex && dvipdfm -p letter hlink.dvi" -% compile-command: "(cd .. && make eplain.tex) && rm -f hlink.aux && pdftex --interact=nonstopmode hlink.tex && pdftex --interact=nonstopmode hlink.tex" -% End: diff --git a/Master/texmf-dist/source/eplain/base/test/ian.tex b/Master/texmf-dist/source/eplain/base/test/ian.tex deleted file mode 100644 index 95c254c6546..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/ian.tex +++ /dev/null @@ -1,28 +0,0 @@ -% This file is public domain. -% -\input eplain - -\vsize 10cm \hsize 7cm - -Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. - -\doublecolumns - -Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah -blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. - -\singlecolumn - -Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/index.tex b/Master/texmf-dist/source/eplain/base/test/index.tex deleted file mode 100644 index 0a039dec9c2..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/index.tex +++ /dev/null @@ -1,36 +0,0 @@ -% This file is public domain. -% -\input eplain - -\indexproofingtrue -\hsize = 5in - -\def\defn#1{{\sl #1\/}} -\def\title#1{{\it #1\/}} - -\idx{term} -\idxname{K. Elizabeth}{Tachikawa} -\idxmarked\title{Strange Angels} -\idxsubmarked{Anderson, Laurie}\defn{Strange Angels} -\idx[begin]{range} starts. -\sidx[begin]{home} - -\vfill\eject - -\sidx[pagemarkup=defn]{truth} -\sidxname{Megan Anne}{Haney} - -\sidx[end]{home} -\idx[end]{range} ends. - -\sidx[see]{beauty}[truthful]{Anderson, Laurie} -\sidxmarked[seealso]\defn{Strange Angels}{\defn{Home of the Brave}} - - -\leftline{\bf Index} - -\def\idxpreface{These words precede the index.} - -\readindexfile{i} - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/jan.tex b/Master/texmf-dist/source/eplain/base/test/jan.tex deleted file mode 100644 index b94ab34556f..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/jan.tex +++ /dev/null @@ -1,15 +0,0 @@ -% This file is public domain. -% -\input eplain - -This gives \eqdefn{aa} -$$1+2,\eqsubdef{op}$$ -and -$$1+3.\eqsubdef{pp}$$ -And \eqref{aa} and \eqref{op} and \eqref{pp}. -\bye - -From: deleeuw@laplace.sscnet.ucla.edu (Jan Deleeuw) -Subject: batch mode -To: karl@cs.umb.edu -Date: Mon, 7 Jun 1993 20:26:22 -0700 (PDT) diff --git a/Master/texmf-dist/source/eplain/base/test/justify.tex b/Master/texmf-dist/source/eplain/base/test/justify.tex deleted file mode 100644 index 232a6915064..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/justify.tex +++ /dev/null @@ -1,106 +0,0 @@ -% This file is public domain. -% -\input eplain - -{\center foo -bar -} - -% Changing \parfillskip is OK, since the macros reset it. -%\parfillskip = .75\hsize plus .06\hsize minus .75\hsize -\loggingall - -Pre-text. These should be flush left: -{\flushleft -Here are a few -lines that we are -\vadjust{\bigskip}going to take {\it literally}. (with vadjusted space now) -And a couple more -of them.} - -Now we're back to normal. -Now we're back to normal. -Now we're back to normal. -Pre-text. These should be flush right: - -{\it \flushright -Here are a few italic -lines that we are -\vadjust{\bigskip}going to take literally. -And a couple more -of {\bf them.} - -In fact, let's do two paragraphs, -this is so much fun. No, let's make it three. - - For Dan - ---{\bf k.b.} -} - -Now we're back to normal. -Now we're back to normal. -Now we're back to normal. -These should be centered. - -{\center -Here are a few -lines that we are -\vadjust{\bigskip}going to take literally. -And a couple more -of them.} - -Some centered paragraphs: -{\center - Here is the first paragraph. - - Here is the second. - - Here is the third. -} - -Now we're back to normal. -Now we're back to normal. -Now we're back to normal. -These should be flush left again (two groups): - -{\flushleft - Here is the first paragraph. - - Here is the second. -} - -\blanklineskipamount = -.8\baselineskip -{\flushleft - Here is the first paragraph. - - Here is the second. - - Here is the third -} - -We changed the amount of space between the paragraphs in the second -group so it was less than a full blank line. Did you notice? - -\scrollmode - -{\message{Now comes a mysterious error.} \center on first line---what happens? -centered -} - -\def\title{\begingroup\center} -\def\endtitle{\endgroup} - -\title -this should be centered -by virtue of a macro -\endtitle - -Back to normal. - -{\center -centered -\message{Now there should be an error:}% -\flushleft % error -} - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/knuth.bib b/Master/texmf-dist/source/eplain/base/test/knuth.bib deleted file mode 100644 index abdf6ddecfa..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/knuth.bib +++ /dev/null @@ -1,17 +0,0 @@ -% This file is public domain. - -@book{surreal, - author = "Donald E. Knuth", - title = "Surreal Numbers", - year = 1974, - publisher = "Addison-Wesley", - address = "Reading, Massachusetts" -} - -@book{concrete-math, - author = "Ronald L. Graham and Donald E. Knuth and Oren Patashnik", - title = "Concrete Mathematics", - year = 1989, - publisher = "Addison-Wesley", - address = "Reading, Massachusetts" -} diff --git a/Master/texmf-dist/source/eplain/base/test/label.tex b/Master/texmf-dist/source/eplain/base/test/label.tex deleted file mode 100644 index 348a7541711..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/label.tex +++ /dev/null @@ -1,8 +0,0 @@ -% This file is public domain. -% -\ifx\undefined \eplain \input eplain \fi - -\xrdef{a1@$^ ~&_} -\xref{a1@$^ ~&_} - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/latexcite.tex b/Master/texmf-dist/source/eplain/base/test/latexcite.tex deleted file mode 100644 index 5ad031aa1a6..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/latexcite.tex +++ /dev/null @@ -1,9 +0,0 @@ -% This file is public domain. -% -\documentstyle{article} -\begin{document} -\cite{chicago,texbook,prime-number-theorem,1234567890)(@!`['";:]|<>./?-=+_$^&} -\cite{others,accented} -\bibliographystyle{plain} -\bibliography{cite} -\end{document} diff --git a/Master/texmf-dist/source/eplain/base/test/liang.tex b/Master/texmf-dist/source/eplain/base/test/liang.tex deleted file mode 100644 index 975fa83d020..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/liang.tex +++ /dev/null @@ -1,300 +0,0 @@ -% This file is public domain. -% -% Test double columns with headlines, single-column material, and a -% \topinsert. -\ifx\undefined\eplain \input eplain \fi -%\catcode`@=11 -%\input gcol -%\catcode`@=12 -\magnification=\magstep1 -\parskip=10pt -\gutter = 1pc -\hyphenation{pour-ed} - -\headline = {This is the headline \hfil} - -{\center - A test file for eplain - Karl\footnote\dag{Credit in a footnote.} -} - -\topinsert -This should appear at the top of the page, since it's a topinsert. -\endinsert - -Here the main document starts. It should be in double columns until -further notice. It's all one paragraph. I am going to use Wuthering -Heights, as usual. - -With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. Presently the whole chapel resounded with -rappings and counter-rappings. - -Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, pour\-ed forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? What had -played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! - - -\doublecolumns -Here the main document starts. It should be in double columns until -further notice. It's all one paragraph. I am going to use Wuthering -Heights, as usual. - -With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. - -Presently the whole chapel resounded with -rappings and counter-rappings. Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, pour\-ed forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? - -What had played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! Here the main document starts. It should be in double columns - until -further notice. It's all one paragraph. I am going to use Wuthering -Heights, as usual. With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. Presently the whole chapel resounded with -rappings and counter-rappings. Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, pour\-ed forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? -What had played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! - -\singlecolumn % an extra insert of singlecolumn -I listened doubtingly an instant, detected the -disturber, then turned and dozed, and dreamt again---if possible, still -more disagreeably than before. This time I remembered I was lying in -the oak closet, and I heard distinctly the gusty wind and the driving of -the snow. I heard also the fir-bough repeat its teasing sound, and -ascribed it to the right cause. But it annoyed me so much that I -resolved to silence it, if possible; and I thought I rose and -endeavoured to unhasp the casement. The hook was soldered into the -staple---a circumstance observed by me when awake, but forgotten. ``I -must stop it, nevertheless!'' I muttered, knocking my knuckles through -the glass, and stretching an arm out to seize the importunate branch; -instead of which, my fingers closed on the fingers of a little, icecold -hand! - -\doublecolumns % an extra insert of doublecolumns -The intense horror of nightmare came over me. I tried to draw -back my arm, but the hand clung to it, and a most melancholy voice -sobbed, ``Let me in---let me in!'' ``Who are you?'' I asked, struggling, -meanwhile, to disengage myself. ``Catherine Linton,'' it replied -shiveringly. (Why did I think of Linton? I had read Earnshaw twenty -times for Linton.) ``I'm come home. I'd lost my way on the moor.'' As -it spoke, I discerned, obscurely, a child's face looking through the -window. Terror made me cruel; and finding it useless to attempt shaking -the creature off, I pulled its wrist on to the broken pane, and rubbed -it to and fro till the blood ran down and soaked the bedclothes. Still -it wailed, ``Let me in!'' and maintained its tenacious gripe, almost -maddening me with fear. ``How can I?'' I said at length. ``Let me go, -if you want me to let you in!'' - -With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. Presently the whole chapel resounded with -rappings and counter-rappings. Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, pour\-ed forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? What had -played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! I listened doubtingly an instant, detected the -disturber, then turned and dozed, and dreamt again---if possible, still -more disagreeably than before. This time I remembered I was lying in -the oak closet, and I heard distinctly the gusty wind and the driving of -the snow. I heard also the fir-bough repeat its teasing sound, and -ascribed it to the right cause. But it annoyed me so much that I -resolved to silence it, if possible; and I thought I rose and -endeavoured to unhasp the casement. The hook was soldered into the -staple---a circumstance observed by me when awake, but forgotten. ``I -must stop it, nevertheless!'' I muttered, knocking my knuckles through -the glass, and stretching an arm out to seize the importunate branch; -instead of which, my fingers closed on the fingers of a little, icecold -hand! - -The intense horror of nightmare came over me. I tried to draw -back my arm, but the hand clung to it, and a most melancholy voice -sobbed, ``Let me in---let me in!'' ``Who are you?'' I asked, struggling, -meanwhile, to disengage myself. ``Catherine Linton,'' it replied -shiveringly. (Why did I think of Linton? I had read Earnshaw twenty -times for Linton.) ``I'm come home. I'd lost my way on the moor.'' As -it spoke, I discerned, obscurely, a child's face looking through the -window. Terror made me cruel; and finding it useless to attempt shaking -the creature off, I pulled its wrist on to the broken pane, and rubbed -it to and fro till the blood ran down and soaked the bedclothes. Still -it wailed, ``Let me in!'' and maintained its tenacious gripe, almost -maddening me with fear. ``How can I?'' I said at length. ``Let me go, -if you want me to let you in!'' - -With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. Presently the whole chapel resounded with -rappings and counter-rappings. Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, repoured forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? What had -played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! I listened doubtingly an instant, detected the -disturber, then turned and dozed, and dreamt again---if possible, still -more disagreeably than before. This time I remembered I was lying in -the oak closet, and I heard distinctly the gusty wind and the driving of -the snow. I heard also the fir-bough repeat its teasing sound, and -ascribed it to the right cause. But it annoyed me so much that I -resolved to silence it, if possible; and I thought I rose and -endeavoured to unhasp the casement. The hook was soldered into the -staple---a circumstance observed by me when awake, but forgotten. ``I -must stop it, nevertheless!'' I muttered, knocking my knuckles through -the glass, and stretching an arm out to seize the importunate branch; -instead of which, my fingers closed on the fingers of a little, icecold -hand! - -The intense horror of nightmare came over me. I tried to draw -back my arm, but the hand clung to it, and a most melancholy voice -sobbed, ``Let me in---let me in!'' ``Who are you?'' I asked, struggling, -meanwhile, to disengage myself. ``Catherine Linton,'' it replied -shiveringly. (Why did I think of Linton? I had read Earnshaw twenty -times for Linton.) ``I'm come home. I'd lost my way on the moor.'' As -it spoke, I discerned, obscurely, a child's face looking through the -window. Terror made me cruel; and finding it useless to attempt shaking -the creature off, I pulled its wrist on to the broken pane, and rubbed -it to and fro till the blood ran down and soaked the bedclothes. Still -it wailed, ``Let me in!'' and maintained its tenacious gripe, almost -maddening me with fear. ``How can I?'' I said at length. ``Let me go, -if you want me to let you in!'' - -With that concluding word, the whole assembly, -exalting their pilgrim's staves, rushed round me in a body; and I, -having no weapon to raise in self-defence, commenced grappling with -Joseph, my nearest and most ferocious assailant, for his. In the -confluence of the multitude several clubs crossed; blows aimed at me -fell on other sconces. Presently the whole chapel resounded with -rappings and counter-rappings. Every man's hand was against his -neighbour; and Branderham, unwilling to remain idle, repoured forth his -zeal in a shower of loud taps on the boards of the pulpit, which -responded so smartly that at last, to my unspeakable relief, they woke -me. And what was it that had suggested the tremendous tumult? What had -played Jabes's part in the row? Merely the branch of a fir-tree that -touched my lattice, as the blast wailed by, and rattled its dry cones -against the panes! I listened doubtingly an instant, detected the -disturber, then turned and dozed, and dreamt again---if possible, still -more disagreeably than before. This time I remembered I was lying in -the oak closet, and I heard distinctly the gusty wind and the driving of -the snow. I heard also the fir-bough repeat its teasing sound, and -ascribed it to the right cause. But it annoyed me so much that I -resolved to silence it, if possible; and I thought I rose and -endeavoured to unhasp the casement. The hook was soldered into the -staple---a circumstance observed by me when awake, but forgotten. ``I -must stop it, nevertheless!'' I muttered, knocking my knuckles through -the glass, and stretching an arm out to seize the importunate branch; -instead of which, my fingers closed on the fingers of a little, icecold -hand! - -The intense horror of nightmare came over me. I tried to draw -back my arm, but the hand clung to it, and a most melancholy voice -sobbed, ``Let me in---let me in!'' ``Who are you?'' I asked, struggling, -meanwhile, to disengage myself. ``Catherine Linton,'' it replied -shiveringly. (Why did I think of Linton? I had read Earnshaw twenty -times for Linton.) ``I'm come home. I'd lost my way on the moor.'' As -it spoke, I discerned, obscurely, a child's face looking through the -window. Terror made me cruel; and finding it useless to attempt shaking -the creature off, I pulled its wrist on to the broken pane, and rubbed -it to and fro till the blood ran down and soaked the bedclothes. Still -it wailed, ``Let me in!'' and maintained its tenacious gripe, almost -maddening me with fear. ``How can I?'' I said at length. ``Let me go, -if you want me to let you in!'' - -\singlecolumn -Now we should be typesetting in a single column, i.e., normally. The -fingers relaxed; I snatched mine through the hole, hurriedly piled the -books up in a pyramid against it, and stopped my ears to exclude the -lamentable prayer. I seemed to keep them closed above a quarter of an -hour; yet the instant I listened again, there was the doleful cry -moaning on! ``Begone!'' I shouted; ``I'll never let you in---not if you -beg for twenty years.'' ``It is twenty years,'' mourned the -voice---``twenty years. I've been a waif for twenty years!'' Thereat -began a feeble scratching outside, and the pile of books moved as if -thrust forward. I tried to jump up, but could not stir a limb, and so -yelled aloud in a frenzy of fright. To my confusion, I discovered the -yell was not ideal. Hasty footsteps approached my chamber door; somebody -pushed it open with a vigorous hand, and a light glimmered through the -squares at the top of the bed. I sat shuddering yet, and wiping the -perspiration from my forehead. The intruder appeared to hesitate, and -muttered to himself. At last he said in a half-whisper, plainly not -expecting an answer, ``Is any one here?'' I considered it best to -confess my presence, for I knew Heathcliff's accents, and feared he -might search further if I kept quiet. With this intention I turned and -opened the panels. I shall not soon forget the effect my action -produced. Heathcliff stood near the entrance, in his shirt and -trousers, with a candle dripping over his fingers, and his face as white -as the wall behind him. The first creak of the oak startled him like an -electric shock. The light leaped from his hold to a distance of some -feet, and his agitation was so extreme that he could hardly pick it up. -``It is only your guest, sir,'' I called out, desirous to spare him the -humiliation of exposing his cowardice further. ``I had the misfortune -to scream in my sleep, owing to a frightful nightmare. I'm sorry I -disturbed you.'' -\end -From: Jun-Jih Liang -Subject: A vbox underfull while using eplain.tex -To: karl@cs.umb.edu -Date: Wed, 10 Nov 93 11:47:39 MEZ - -Dear Karl: - - I'd like to appreciate your kindness to put the "eplain.tex" in the public -domain so that I can switch \doublecolumns and \singlecolumn in an article. -After a little change in the file "column.tex" which is located at the -subdirectory "/eplain-2.3/test" I have got an unexpected output. There is a -"verticle underfull (Underfull \vbox ...)" at the first page. What I've done at -the file are: - -1) magnify the text font at 1 step (\magnification=\magstep1) -2) add an extra "\singlecolumn" and "\doublecolumns" after the first - "doublecolumn". - - Would you please tell me how can I get rid of the verticle underfull and -get the normal single- and doublecolumns output at the same page? Thank you for -your helpness in advance! - - Sincerely, - Jun-Jih Liang - -P.S. In the following two mails I attach the file "column.tex" which has -changed by me in the first and a Postcript formated "column.ps" which is -transformed from "column.dvi" in the second. - - - diff --git a/Master/texmf-dist/source/eplain/base/test/list.tex b/Master/texmf-dist/source/eplain/base/test/list.tex deleted file mode 100644 index 68775b3d822..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/list.tex +++ /dev/null @@ -1,90 +0,0 @@ -% This file is public domain. -% -% Test file for lists. -% -\ifx\undefined\eplain \input eplain \fi - -{\parindent = 0pt - \parskip = .5\baselineskip -\unorderedlist - \li hello there - - This item has two paragraphs since we want to see if it - works anywhere, and of course we want the paragraphs to be long. - - \li We did this list with zero parindent and nonzero parskip. -\endunorderedlist -} - -\unorderedlist - \li hello there - - This item has two paragraphs since we want to see if it - works anywhere, and of course we want the paragraphs to be long. - - \li second item - \numberedlist - \li nested - \li and again. - - This item has two paragraphs, also, since we want to see if it - works anywhere, and of course we want the paragraphs to be long. - - \li and again - \numberedlist - \li I am going three-level with you. - \endnumberedlist - \unorderedlist - \li I'm not. - - This item has two paragraphs, also, since we want to see if - it works anywhere, and of course we want the paragraphs to - be long. - - In fact, maybe we better make it three paragraphs. What - will happen then? This should tell us. - - \endunorderedlist - \endnumberedlist -\endunorderedlist - -This is a paragraph between the lists. It should be indented. But we'll -make it go on for more than one line, so we'll be able to see where the -left margin is. - -\numberedlist - \li hello there - - This item has two paragraphs. Isn't that annoying? - In fact, the second paragraph has more than one line, at least - I'm going to make it long enough so that that is true---I hope. - - \li second item - \numberedlist - \li nested - \li and again - \li and again - \numberedlist - \li I am going three-level with you. - \endnumberedlist - \unorderedlist - \li I'm not. - \endunorderedlist - \endnumberedlist -\endnumberedlist - -\listleftindent = 4pc -\unorderedlist -\li A shorter list, but with a bigger indent. -\numberedlist \li A nested list. -\endnumberedlist -\li The second item. -\endunorderedlist - -A list with an xref label: -\numberedlist -\li[listitem] This is the first. -\endnumberedlist - -And now we can refer to that item: \xrefn{listitem}. -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/listing.tex b/Master/texmf-dist/source/eplain/base/test/listing.tex deleted file mode 100644 index 60ae74c9ef3..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/listing.tex +++ /dev/null @@ -1,10 +0,0 @@ -% This file is public domain. -% -\input eplain - -\listing{verbatim.tex} - -\let\setuplistinghook = \linenumberedlisting -\listing{verbatim.tex} - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/logo.tex b/Master/texmf-dist/source/eplain/base/test/logo.tex deleted file mode 100644 index 5b137a56c46..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/logo.tex +++ /dev/null @@ -1,20 +0,0 @@ -% This file is public domain. -% -\input eplain - -\xspaceskip = 2em -Sentence-ending \TeX. And sentence \TeX\ middle. Sentence. - -\LaTeX - -\AMSTeX - -\LAMSTeX - -\BibTeX - -\MF - -\SLITEX - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/loop.tex b/Master/texmf-dist/source/eplain/base/test/loop.tex deleted file mode 100644 index 7f6b7bd4e89..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/loop.tex +++ /dev/null @@ -1,20 +0,0 @@ -% This file is public domain. -% -\input eplain - -\def\iterate{% - \let\next\relax - \body - \let\next\iterate - \fi - \next -} - -\count255 = 5 -\loop - loop iteration \number\count255 %\par - \ifnum\count255<3 \else - \advance\count255 by -1 -\repeat - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/loopnext.tex b/Master/texmf-dist/source/eplain/base/test/loopnext.tex deleted file mode 100644 index 8d77b8622bf..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/loopnext.tex +++ /dev/null @@ -1,21 +0,0 @@ -% This file is public domain. -% -% Date: Tue, 2 May 2000 17:27:38 -0400 -% From: "Peter Kabal" -% To: -% Subject: eplain interaction with TeXdraw -% -% A TeXdraw user alerted me to the fact that the TeXdraw routines gave a -% warning message when used together with eplain. It seems that eplain -% defines \iterate -% differently than plain tex. Using plain TeX, there is no problem, but using -% eplain one there is. - -\input eplain - -\input texdraw -\btexdraw - \lpatt(0.1 0.1) -\etexdraw - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/mag.tex b/Master/texmf-dist/source/eplain/base/test/mag.tex deleted file mode 100644 index 8704c008996..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/mag.tex +++ /dev/null @@ -1,14 +0,0 @@ -% This file is public domain. -% -% \magnification=1200 -\input eplain.tex -\paperheight=11truein -\paperwidth=8.5truein -\leftmargin=2.5truecm -\rightmargin=2.5truecm -\topmargin=2.5truecm -\bottommargin=2.5truecm - -This is a test - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/makecol.tex b/Master/texmf-dist/source/eplain/base/test/makecol.tex deleted file mode 100644 index 4c0379a703d..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/makecol.tex +++ /dev/null @@ -1,17 +0,0 @@ -% This file is public domain. -% -\input eplain - -Should have two columns with 1--3 in the first, and 4--6 in the second. - -\loggingall - -\makecolumns 6/2: -one -two -three -four -five -six -I should be after the table. -\end diff --git a/Master/texmf-dist/source/eplain/base/test/margin.tex b/Master/texmf-dist/source/eplain/base/test/margin.tex deleted file mode 100644 index 8275e543326..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/margin.tex +++ /dev/null @@ -1,68 +0,0 @@ -% This file is public domain. -% -\input marg - -\headline = {headline with descender: p\hfil} -\parindent = 0pt - -% Assigning to \topskip increases the space at the top of the page, -% between the headline and the text. -% -%\topskip = .5in - - -\topmargin = 3in \leftmargin = 3in -\bottommargin = 3in \rightmargin = 3in - -This is the first line of text. The top of it should be 3in from the -top of the paper. -\vfill -This is in the middle. The left margin should be three inches, and so -should the right margin (on the whole page, not just here, of course). -\vfill -The last line's baseline should be 3in from the bottom. -(This page tested assignments that increase the margins.) -\eject - - -\advancetopmargin by -1in \advanceleftmargin by -1in -\advancebottommargin by -1in \advancerightmargin by -1in - -This is the first line of text. The top of it should be 2in from the -top of the paper. -\vfill -This is in the middle. The left and right margins should be two inches -each. -\vfill -The last line's baseline should be 2in from the bottom. -(This page tested advances that decreased the margins.) -\eject - - -\topmargin = .5in \leftmargin = .5in -\bottommargin = .5in \rightmargin = .5in - -This is the first line of text. The top of it should be .5in from the -top of the paper. -\vfill -This is in the middle. The left and right margins should be .5in each, -just as you might expect by now, if you've been reading. -\vfill -The last line's baseline should be .5in from the bottom. -(This page tested assignments that decreased the margins.) -\eject - - -\advancetopmargin by 1in \advanceleftmargin by 1in -\advancebottommargin by 1in \advancerightmargin by 1in - -This is the first line of text. The top of it should be 1.5in from the -top of the paper. -\vskip0pt plus1filll -I bet you can guess what the left and right margins should be: yup, -1.5in. Let's make this line a little longer, so it will actually hit -the margin. -\vskip0pt plus1filll -The last line's baseline should be 1.5in from the bottom. -(This page tested assignments that increased the margins.) -\end diff --git a/Master/texmf-dist/source/eplain/base/test/matrix.tex b/Master/texmf-dist/source/eplain/base/test/matrix.tex deleted file mode 100644 index 4c966c312b4..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/matrix.tex +++ /dev/null @@ -1,18 +0,0 @@ -% This file is public domain. -% -\ifx\undefined\eplain \input eplain \fi - -This tests matrix inside eqalignno with leftdisplays. - -% $$\eqalignno{ -% \matrix{a \cr b\cr c} & = 1 & 1 \cr -% }$$ - -\loggingall - -\leftdisplays -$$\eqalignno{ - \matrix{a \cr b\cr c} & = 1 & 1 \cr -}$$ - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/mdisplay.tex b/Master/texmf-dist/source/eplain/base/test/mdisplay.tex deleted file mode 100644 index 96ed8543b9c..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/mdisplay.tex +++ /dev/null @@ -1,215 +0,0 @@ -% This file is public domain. -% -% Test math displays. -% -\ifx\undefined\eplain \input eplain \fi - -%\loggingall - -A simple one, done with plain, for comparison (it should come out -centered). Because of the way that \TeX's modes work, you should never -leave a blank line (i.e., cause a par command) before a display. When -\TeX\ sees a \$ in vertical mode, it switches to horizontal mode; but -then when the display starts, it goes back to vertical mode, thus -causing an extraneous blank line before the display. (Plain \TeX\ sets -abovedisplayskip to about a baselineskip, so you are going to get one -blank line from that (unless the line above the display is short, in -which case aboveshortdisplayskip is used, which is 3pt or some such); -but if a par intervenes between the end of the paragraph and the -beginning of the display, you get a second one.) -$$x = y + z$$ - -After a centereddisplays: -\centereddisplays -$$d+e+f$$ - -Now starting leftdisplays. -\leftdisplays - -No equation number: -$$A = B + C$$ - -Do another leftdisplays. -\leftdisplays -$$a+n=m$$ - -Equation number on right: -$$D = E + F\eqno (r)$$ - -Equation number on left: -$$G = H + I\leqno (l)$$ - -Using eqdef: -$$J = K + L\eqdef{hello}$$ - -Here is one done with displaylines: -$$\displaylines{x=1\cr}$$ - -Let's do those again, indented by one inch plus the paragraph indentation: -{\leftdisplayindent = 1in - No equation number: - $$A = B + C$$ - - Equation number on right: - $$D = E + F\eqno (r)$$ - - Equation number on left: - $$G = H + I\leqno (l)$$ - - Using eqdef: - $$J = K + L\eqdef{hello}$$ - - Here is one done with displaylines: - $$\displaylines{x=1\cr}$$ -} - -\hrule -\smallskip -The rule above just makes it easier to see the margins. - -Another displaylines, this one should end up on the right. -$$\displaylines{\hfill y=2\cr}$$ - -A displaylines with an eqno: -$$\displaylines{x=1 \eqno{d}\cr}$$ - -A displaylines with an eqdef: -$$\displaylines{x=1 \eqdef{eqdef-displ}\cr}$$ - -{\leftskip = 14pt -An indented displaylines with an eqdef: -$$\displaylines{x=1 \eqdef{eqdef-displ}\cr}$$ - -} - -Here is one with done with eqalign (the ='s should line up): -$$\eqalign{ - a+b&=c\cr - dq+er&=f\cr -}$$ - -An eqalign with a noalign inside: -$$\eqalign{ - a+b&=c\cr - g+h&=i\cr -}$$ - -And one with eqalignno: -$$\eqalignno{ - a+b&=c&(1)\cr - d+e&=f&(1*)\cr - g+h&=i&\eqdef{eqdef-2}\cr -}$$ - -An eqalignno with a noalign inside: -$$\eqalignno{ - a+b&=c&(1)\cr -\noalign{and} - g+h&=i&\eqdef{eqdef-2}\cr -}$$ - -And one (indented more) with leqalignno: -{\leftdisplayindent = 1in -$$\leqalignno{ - a+b&=c&(1)\cr - dt+eg&=f&(1*)\cr - g+h&=i&\eqdef{eqdef-3}\cr -}$$ -} - -A cases, from p.175 of the TeXbook. -$$ - |x| = \cases{x, &if $x\ge0$;\cr - -x, &otherwise.\cr -}$$ - -A pmatrix, from p.176. -$$\pmatrix{ - x-\lambda&1&0\cr - 0&x-\lambda&1\cr - 0&0&x-\lambda\cr -}$$ - - -The rule below just makes it easier to see the margins. -\smallskip -\hrule -\bigskip - -Back to centered displays now. -\centereddisplays - -No equation number: -$$A = B + C$$ - -Equation number on right: -$$D = E + F\eqno (r)$$ - -Equation number on left: -$$G = H + I\leqno (l)$$ - -Using eqdef: -$$J = K + L\eqdef{hello}$$ - -Here is one done with displaylines: -$$\displaylines{x=1\cr}$$ - -\hrule -\smallskip -The rule above just makes it easier to see the margins. - -Another displaylines, this one should end up on the right. -$$\displaylines{\hfill y=2\cr}$$ - -Here is one with done with eqalign (the ='s should line up): -$$\eqalign{ - a+b&=c\cr - dq+er&=f\cr -}$$ - -And one with eqalignno: -$$\eqalignno{ - a+b&=c&(1)\cr - d+e&=f&(1*)\cr - g+h&=i&\eqdef{eqdef-2}\cr -}$$ - -An eqalignno with a noalign inside: -$$\eqalignno{ - a+b&=c&(1)\cr -\noalign{and} - g+h&=i&\eqdef{eqdef-2}\cr -}$$ - -And one (indented more) with leqalignno: -{\leftdisplayindent = 1in -$$\leqalignno{ - a+b&=c&(1)\cr - dt+eg&=f&(1*)\cr - g+h&=i&\eqdef{eqdef-3}\cr -}$$ -} - -The rule below just makes it easier to see the margins. -\smallskip -\hrule -\bigskip - - -A cases, from p.175 of the TeXbook. -$$ - |x| = \cases{x, &if $x\ge0$;\cr - -x, &otherwise.\cr -}$$ - -A pmatrix, from p.176. -$$\pmatrix{ - x-\lambda&1&0\cr - 0&x-\lambda&1\cr - 0&0&x-\lambda\cr -}$$ - -Now after a second centereddisplays: -\centereddisplays -$$a + b = c$$ -\end diff --git a/Master/texmf-dist/source/eplain/base/test/names.tex b/Master/texmf-dist/source/eplain/base/test/names.tex deleted file mode 100644 index b996738a63a..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/names.tex +++ /dev/null @@ -1,21 +0,0 @@ -% This file is public domain. -% -\input texnames.sty - -\parskip = \baselineskip -\nopagenumbers - -\def\test{% - \AMSTeX\par - \BibTeX\par - \LAMSTeX\par - \LaTeX\par - \MF\par - \SLiTeX\par -} - -\rm \test -\it \test -\bf \test -\sl \test -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/noarrow.tex b/Master/texmf-dist/source/eplain/base/test/noarrow.tex deleted file mode 100644 index f0379f7f813..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/noarrow.tex +++ /dev/null @@ -1,8 +0,0 @@ -% This file is public domain. -% -\let\noarrow = t -\input eplain - -\show\commdiag - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/nobib.tex b/Master/texmf-dist/source/eplain/base/test/nobib.tex deleted file mode 100644 index e2586ecd8c2..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/nobib.tex +++ /dev/null @@ -1,10 +0,0 @@ -% This file is public domain. -% -\let\nobibtex = t -\ifx\eplain\undefined\input eplain \fi - -\tokstostring{abc} -\xrdef{label} -\xref{label} - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/nonouter.tex b/Master/texmf-dist/source/eplain/base/test/nonouter.tex deleted file mode 100644 index 32aa5c9fee1..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/nonouter.tex +++ /dev/null @@ -1,11 +0,0 @@ -% This file is public domain. -% -\outer\def\nonouterdef#1#2{\begingroup - \def\startdef{\def #1\bgroup}% -% \expandafter\defstart \csname #2\endcsname\egroup - \def\outername{\csname #2\endcsname}% - \expandafter\startdef \outername \egroup -\endgroup} - -\tracingall -\nonouterdef\innernewwrite{newwrite} diff --git a/Master/texmf-dist/source/eplain/base/test/optional.tex b/Master/texmf-dist/source/eplain/base/test/optional.tex deleted file mode 100644 index f7cc917000e..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/optional.tex +++ /dev/null @@ -1,30 +0,0 @@ -% This file is public domain. -% -% Test optional arguments. - -\ifx\undefined\eplain \input eplain \fi - -\catcode`@ = \letter -\def\foo{\@getoptionalarg\finfoo} -\def\finfoo#1{% - \edef\firstarg{\@optionalarg} - \edef\mandatoryarg{#1}% - \@getoptionalarg\finfinfoo -} -\def\finfinfoo{% - The first optional argument is `\firstarg', the mandatory argument - is `\mandatoryarg', and the second optional argument is `\@optionalarg'. - \par -} - -\loggingall -\foo[a {\cite[p.10]{xyz}} b]{mand2} - -\foo{mand} -\foo[opt1]{mand} -\foo{mand}[opt2] -\foo[opt1]{mand}[opt2] -\foo[opt1]{mand} - [opt2 on a separate line] - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/outer.tex b/Master/texmf-dist/source/eplain/base/test/outer.tex deleted file mode 100644 index e424bebed12..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/outer.tex +++ /dev/null @@ -1,26 +0,0 @@ -% This file is public domain. -% -% Test file to make sure all the inner allocation routines really are -% inner. -% -\input eplain - -\def\foo{% - \innernewcount\a - \innernewdimen\b - \innernewskip\c - \innernewmuskip\d - \innernewbox\e - \innernewhelp\f{Help.}% - \innernewtoks\g - \innernewread\h - \innernewwrite\i - \innernewfam\j - \innernewlanguage\k - \innernewinsert\l - \innernewif\ifm -} - -\foo - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/page.tex b/Master/texmf-dist/source/eplain/base/test/page.tex deleted file mode 100644 index 5112d5d9ed4..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/page.tex +++ /dev/null @@ -1,8 +0,0 @@ -% This file is public domain. -% -\hrule -top of page -\vskip 0pt plus1filll -bottom of page -\hrule -\end diff --git a/Master/texmf-dist/source/eplain/base/test/path.tex b/Master/texmf-dist/source/eplain/base/test/path.tex deleted file mode 100644 index 8a891bd3623..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/path.tex +++ /dev/null @@ -1,25 +0,0 @@ -% This file is public domain. -% -% Test the \path macro. - -\input eplain -%\input path.sty - -This is a normal path: \path|karl@cs.umb.edu|. This is a somewhat -longer path: \path|letters@kropotkin.gnu.ai.mit.edu|. This is a still -longer path: -\path|megan@agroecology.university-of-california-at-santa-cruz.edu|. I'm -making this all one paragraph so the path macro will have a chance to -show its stuff. This path has dollar signs and other strange characters -(but no vertical bars) in it: \path|#$%^_<>|. Now I'm going to change -the discretionaries to only be at !'s. \discretionaries|!| Now this path -should break only at !'s: \path|-hello!..from!@@bang!land|. Now I'm -going to change things so backslash is the delimiter. -\specialpathdelimiterstrue -\path\##hello!there!@.@again!...we!**still!_have!-bangs!\. That last -was delimited by backslashes, now let's do one that isn't delimited by -backslashes: \path@hi, there!this is fun!@. I'll go on for a little -while not doing anything in particular, so \TeX\ will have a chance to -break the paragraph nicely. That's all, folks! - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/pcol.tex b/Master/texmf-dist/source/eplain/base/test/pcol.tex deleted file mode 100644 index 52bfc2cc77d..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/pcol.tex +++ /dev/null @@ -1,183 +0,0 @@ -% This file is public domain. -% -% These are the double-column macros from Paul Abrahams, Dec 1991 -% They add the following features: -% \ifbalance (by default true, causes last page to be balanced) -% \everycolumn (a token list, useful for marks) -% \pageeject -% \eject does a column eject - -\newtoks\mainoutput -\newbox\partialpage -\newdimen\fullvsize \newdimen \fullhsize -\newbox\leftcolumn \newbox \rightcolumn -\newbox\savefootins \newskip\footskip -\newbox\savetopins \newskip\topinsskip -\newif\ifbalance \balancetrue -\newtoks\everycolumn - - -\def\pageeject{\penalty -10005 }% - -\def\doublecolumns{% - \mainoutput = \output % Save the previous \output. - % - % This grabs any single-column material. - \output = {\global\setbox\partialpage = \vbox{\unvbox255}}% - \vskip\abovedoublecolumnskip - \par % \par updates \pagetotal - \pagegoal = \pagetotal - \break % Now expand the \output we assigned just above. - \output = {\doublecolumnoutput}% - % - % Set up \hsize and \vsize for double columns. - \fullvsize = \vsize - \fullhsize = \hsize - \advance\hsize by -\gutter - \divide \hsize by 2 - \advance\vsize by -\ht\partialpage - % - % Take account of existing insertions. - \ifvoid\footins\else - \advance\vsize by -\ht\footins - \advance\vsize by -\skip\footins - \fi - \setbox\savefootins = \box\footins - \footskip = \skip\footins - % - \ifvoid\topins\else - \advance\vsize by -\ht\topins - \advance\vsize by -\skip\topins - \fi - \setbox\savetopins = \box\topins - \topinsskip = \skip\topins - % - % Start at the left, clear the existing columns. - \let\lr = L% - \setbox0 = \box\leftcolumn \setbox0 = \box\rightcolumn -}% -% -% This routine actually does the outputting. -\def\doublecolumnoutput{% - \ifbalance\else \ifnum \outputpenalty < -10000 - \setbox255 = \vbox{\unvbox255 \vfil}% - \fi\fi - % - \the\everycolumn - \if \lr L% - \buildcolumn\leftcolumn - \global\let\lr = R% - \else - \buildcolumn\rightcolumn - \global\let\lr = L% - \fi - % - \ifnum \outputpenalty < -10000 - \ifbalance - \ifdim \ht\leftcolumn > 8\baselineskip - \balancecolumns - \global \let \lr = L% - \fi\fi\fi - % - \if \lr L% - \setbox255 = \vbox{% - \unvbox\partialpage - \dimen0 = \ht\leftcolumn \dimen1 = \dp\leftcolumn - \joincolumns - \ifnum \outputpenalty = -10005 \vfil \fi - }% - % The restoration of the insertion boxes happens only once, since - % they are empty thereafter. - \setbox\footins = \box\savefootins - \setbox\topins = \box\savetopins - \vsize = \fullvsize % Because we've taken care of \partialoutput - \ifnum \outputpenalty = -10006 - \unvbox255 - \else - \the\mainoutput - \global\vsize = \fullvsize - \fi - \fi -}% -% -% -% \joincolumns joins \leftcolumn and \rightcolumn into a vbox that aligns -% the tops of the two columns and has the depth of the deeper column. -% It adds the resulting box to the main vertical list. -% -\def\joincolumns{% - \dimen0 = \dp\leftcolumn \dimen1 = \dp \rightcolumn - \setbox0 = \hbox to \fullhsize{% - \vtop to \ht\leftcolumn{\unvbox\leftcolumn}% - \hfil - \vtop to \ht\rightcolumn{\unvbox\rightcolumn}% - }% - \dimen2 = \boxmaxdepth % For restoring it later - \ifdim \dimen0 < \dimen1 - \boxmaxdepth = \dimen1 - \else - \boxmaxdepth = \dimen0 - \fi - \setbox0 = \vbox{\box0}% - \boxmaxdepth = \dimen2 - \box0 % Produce for the calling context -}% - -\def\buildcolumn #1{% - \ifnum \outputpenalty < -9999 - \global \setbox #1 = \vbox{\pagecontents}% - \else - \global \setbox #1 = \vbox to \vsize{\pagecontents}% - \fi -}% -% -% -% Go back to single-column typesetting. Unfortunately, we cannot start -% a group in \doublecolumns and end it here, because some documents -% might want double-column mode to continue to the end. So we have to -% restore the things we've changed manually. -% -\def\singlecolumn{% - \penalty -10006 - \output = \mainoutput - \hsize = \fullhsize - \vsize = \fullvsize - % - % Add \belowdoublecolumnskip if there's enough room, otherwise a \vfil - % to fill out the page. - \dimen0 = \pagetotal \advance \dimen0 by \belowdoublecolumnskip - \ifdim \dimen0 < \pagegoal - \vskip\belowdoublecolumnskip - \else - \vfil - \fi - \allowbreak -}% -% -\def \balancecolumns{% - \setbox\leftcolumn = \vbox{\unvbox\leftcolumn \unskip}% - \setbox\rightcolumn = \vbox{\unvbox\rightcolumn \unskip}% - \setbox0 = \vbox{% - \dimen0 = \dp\leftcolumn - \unvbox \leftcolumn - \if \lr L - \kern -\dimen0 - \vskip -\topskip - \vskip \baselineskip - \unvbox \rightcolumn - \fi - }% - \dimen0 = \ht0 - \advance \dimen0 by \topskip \advance \dimen0 by -\baselineskip - \divide \dimen0 by 2 \splittopskip = \topskip - \count@ = \vbadness \vbadness = 10000 - \loop - \setbox2 = \copy0 - \setbox1 = \vsplit2 to \dimen0 - \ifdim \ht2 > \dimen0 - \advance \dimen0 by 1pt - \repeat - \vbadness = \count@ - \setbox \leftcolumn = \vbox to \dimen0{\unvbox1}% - \setbox \rightcolumn = \vbox to \dimen0{\unvbox2}% -}% diff --git a/Master/texmf-dist/source/eplain/base/test/pdftex.tex b/Master/texmf-dist/source/eplain/base/test/pdftex.tex deleted file mode 100644 index 7aa765d2c89..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/pdftex.tex +++ /dev/null @@ -1,112 +0,0 @@ -\input ../eplain -%\enablehyperlinks[nolinks] -%\enablehyperlinks[pdftex] -\enablehyperlinks - -\beginpackages -\usepackage[dvipsnames]{color} -\endpackages - -% Execute #1 then print it verbatim and indented. -\def\c{\cf\indent\relax} -% Same as \c, but do not indent and at the end say \hlend. -\def\f{\cf\noindent\hlend} -% -\def\cf#1#2#3{% - \def\temp{#3}% - \edef\cftemp{\sanitize\temp}% - #1#3\expandafter\verbatim\cftemp\endverbatim#2\par -} -% -\newcount\destcount -% Execute `#1{d\the\destcount}' then print it (`#1', `{d', and `}' are printed -% verbatim; `\the\destcount' is expanded). -\def\d{\dl\relax} -% Same as \d, but at the end also say \hlend. -\def\l{\dl\hlend} -% -\def\dl#1#2{% - \global\advance\destcount by1 - \toks0={#2}% - \edef\temp{\the\toks0{d\the\destcount}}% - \edef\dltemp{\sanitize\temp}% - \noindent#2{d\the\destcount}\expandafter\verbatim\dltemp\endverbatim#1\par -} - -\pdfpagewidth=8.5in -\pdfpageheight=11in - - - -\leftline{\bf Destinations} -\medskip - -{\tt\global\parindent=4em} - -\d{\hldest{}{}} -\c{\hldestopts{zoom=2345}} -\d{\hldest{}{}} -\medskip -\c{\hldesttype{fitr}} -\c{\hldestopts{width=\hsize}} -\d{\hldest{}{}} -\c{\def\myopts{width=.5\hsize,depth=.25\hsize}} -\d{\hldest{}{\myopts,height=.25\hsize}} -\medskip -\c{\let\myopts\empty} -\c{\hldestopts{raise=2\normalbaselineskip}} -\d{\hldest{xyz}{\myopts,zoom=2500}} -\d{\hldest{xyz}{raise=\ht\strutbox,zoom=3000}} -\medskip -\makeatletter -\c{\def\mydest{\pdfdest name{\@hllabel} xyz}} -\d{\hldest{raw}{cmd=mydest}} -\resetatcatcode -\medskip -\d{\hldest{fit}{}} -\d{\hldest{fith}{}} -\d{\hldest{fitv}{}} -\d{\hldest{fitb}{}} -\d{\hldest{fitbh}{}} -\d{\hldest{fitbv}{}} -\vfil\eject - - - -\leftline{\bf Links} -\medskip - -{\tt\global\parindent=4.5em} - -\destcount=0 % Reset destination count. -\l{\hlstart{name}{}} -\c{\hlopts{bstyle=U}} -\l{\hlstart{name}{}} -\l{\hlstart{}{bstyle=D,bdash=2 4,bcolor=1 0 0,hlight=I}} -\l{\hlstart{}{bstyle=B,bwidth=3}} -\c{\hlopts{bcolor=0 0 1}} -\l{\hlstart{}{bstyle=I,bwidth=4}} -\l{\hlstart{}{bstyle=U,bwidth=1}} -\c{\hlopts{bstyle=S}} -\l{\hlstart{}{hlight=I,bcolor=1 .2 .2,bwidth=2}} -\l{\hlstart{}{hlight=N,bstyle=D,bwidth=3}} -\l{\hlstart{}{hlight=O}} -\l{\hlstart{}{hlight=P,bcolor=.3 .6 .7}} -\l{\hlstart{}{bstyle=D,bdash=2 4 6}} -\l{\hlstart{}{bwidth=0}} -\l{\hlstart{}{bstyle=D,bdash=2 4 6 8}} -\f{\hlstart{page}{pagefit=/FitH 600}{1}} -\f{\hlstart{filename}{file=hlink.pdf,newwin=1}{eq1}} -\f{\hlstart{filepage}{file=hlink.pdf,pagefit=/FitR 50 100 300 500}{1}} -\f{\hlstart{filepage}{file=hlink.pdf,pagefit=/FitB}{2}} -\f{\hlstart{url}{}{http://tug.org/eplain/}} -\c{\def\mycmd{\pdfstartlink goto page 1 {/Fit}}} -\f{\hlstart{raw}{cmd=mycmd}{}} - - - -\bye - -% Local variables: -% compile-command: "(cd .. && make eplain.tex) && pdftex --interact=nonstopmode pdftex.tex" -% End: diff --git a/Master/texmf-dist/source/eplain/base/test/psfont.map b/Master/texmf-dist/source/eplain/base/test/psfont.map deleted file mode 100644 index 6b25d458abb..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/psfont.map +++ /dev/null @@ -1,78 +0,0 @@ -% This file is public domain. -% -% +--------------------------------------------------------------------+ -% | | -% | Font mapping for Turing | -% | ----------------------- | -% | | -% | Letter Font Letter Qualifier | -% | ------ ------------ ------ ------------ | -% | A Avant-Garde B Bold | -% | B Bookman D Demi | -% | C Courier I Italic | -% | H Helvetica L Light | -% | N New-Century M Medium | -% | Schoolbook O Oblique | -% | P Palatino R Roman | -% | S Symbol S Small Caps | -% | T Times | -% | ZC Zapf Chancery | -% | ZD Zapf Dingbats | -% | | -% +--------------------------------------------------------------------+ - - \def\SYSTEM{Turing} - - \def\AB@#1pt{pagk at #1pt} - \def\ABO@#1pt{pagko at #1pt} - \def\AD@#1pt{pagd at #1pt} - \def\ADO@#1pt{pagdo at #1pt} - - \def\BD@#1pt{pbkd at #1pt} - \def\BDI@#1pt{pbkdi at #1pt} - \def\BL@#1pt{pbkl at #1pt} - \def\BLI@#1pt{pbkli at #1pt} - \def\BO@#1pt{pbkro at #1pt} - - \def\CB@#1pt{pcrb at #1pt} - \def\CBO@#1pt{pcrbo at #1pt} - \def\CM@#1pt{pccr at #1pt} - \def\CO@#1pt{pccro at #1pt} - - \def\HB@#1pt{phvb at #1pt} - \def\HBO@#1pt{phvbo at #1pt} - \def\HM@#1pt{phvr at #1pt} - \def\HO@#1pt{phvro at #1pt} - - \def\NB@#1pt{pncb at #1pt} - \def\NBI@#1pt{pncbi at #1pt} - \def\NI@#1pt{pncri at #1pt} - \def\NR@#1pt{pncr at #1pt} - \def\NO@#1pt{pncro at #1pt} - - \def\PB@#1pt{pplb at #1pt} - \def\PBI@#1pt{pplbi at #1pt} - \def\PBO@#1pt{pplbo at #1pt} - \def\PI@#1pt{pplri at #1pt} - \def\PO@#1pt{pplro at #1pt} - \def\PR@#1pt{pplr at #1pt} - - \def\TB@#1pt{ptmb at #1pt} - \def\TBI@#1pt{ptmbi at #1pt} - \def\TBO@#1pt{ptmbo at #1pt} - \def\TI@#1pt{ptmri at #1pt} - \def\TIU@#1pt{ptmru at #1pt} - \def\TO@#1pt{ptmro at #1pt} - \def\TR@#1pt{ptmr at #1pt} - - \def\ZCMI@#1pt{pzcmi at #1pt} - \def\ZD@#1pt{pzdr at #1pt} - - \def\S@#1pt{psyr at #1pt} - \def\SO@#1pt{psyro at #1pt} - \def\SX@#1pt{psyrx at #1pt} - - \def\TRS@#1pt{ptmrc at #1pt} - \def\PRS@#1pt{pplrc at #1pt} - \def\NRS@#1pt{pncrc at #1pt} - \def\BS@#1pt{pblrc at #1pt} diff --git a/Master/texmf-dist/source/eplain/base/test/rex.tex b/Master/texmf-dist/source/eplain/base/test/rex.tex deleted file mode 100644 index 7fc90ba9367..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/rex.tex +++ /dev/null @@ -1,277 +0,0 @@ -% This file is public domain. -% -%Date: Fri, 08 May 92 12:28:17 PDT -%From: Rex Shudde <0024P%NAVPGS.BITNET@CORNELLC.cit.cornell.edu> -%Subject: Eplain document -%To: karl berry -% -%Karl, -% -%Attached is an emulation of my document. Re-iterating, (1) the title should be -%on the first page with the abstract, and a horizontal rule should span the -%entire first page, and (2) the second footnote is referenced in the second -%column on third page. -% -%Undoubtedly I've violated some of the rules of either TeX or eplain, but I -%don't know what. -% -%Again, many thanks. -% -%Rex -% -%Bitnet: 0024p@navpgs -%Internet: 0024p@cc.nps.navy.mil -%............................................................................. -%\magnification=\magstep0 -\input eplain -\input tables %This is Ferguson's INRSTeX Tables (a very old version). - -\hbadness = 100000 \vbadness = 10000 \hfuzz = \maxdimen -\tolerance=2000 - -\def\SP{\ } -\def\throwaway#1{} -\def\checkspace{\ifx \next\ -\let\result=\throwaway - \else \let\result=\ignorespaces \fi \result } -\font\bigfont=cmr10 scaled \magstep5 -\def\bfl#1{\setbox0=\hbox {{\bigfont #1}\thinspace} - \noindent \hangindent \wd0 \hangafter -2 - \llap {\vbox to \ht0{\kern\baselineskip \box0 \kern-\baselineskip}}% - \futurelet \next \checkspace} - -\parskip=10pt -\parindent=0pt - -\font\cmbig=cmr17 -\font\cmrbv=cmb10 scaled \magstep5 -\font\iti=cmbxti10 scaled \magstep2 -\font\erm=cmr8 - -\doublecolumns - -%************************************************************************** -% Generate a dummy first page for the twocol macro -% The first page is to have the left column blank. - -\phantom{dummy first line} \vskip5truein - {\font\iti=cmti10 scaled \magstep1 - \iti - \rightline{An abstract} - \rightline{goes} - \rightline{in here.} - } - -\columnfill - -%************************************************************************** - -\phantom{dummy first line} \vskip0.75truein - -\rightline{\cmrbv Title} -\bigskip\bigskip -\rightline{\iti Author} - -\bigskip\bigskip\bigskip -%\rightline{\hrulefill}% width6.5truein} - -\nointerlineskip -\moveleft 3.31truein -\vbox{\hrule width6.5truein} -\nointerlineskip - -\vskip0.75truein - -%************************************************************************** - -\bfl -Xxxxxxx xxxxxx xxxxxx xxxxxxx xxxx xxx xxx\numberedfootnote{\erm Xxxxx xxxxx -xxx xxxx Xxxxx xxxxx, Xxxxx xxxx Xxxxxx xxxxxx, xxxxxx xxxxx xx Xxxxxx Xxxxxx, -Xxx., X.~X. Xxx~xxx, Xxxx Xxxxx, XX~xxxxx.} Xxxx Xxxxxxxxxx xxxxxxxx xxxx, Xxx -xxxxx xxxxxx xx xxxxxxxx xx xxxxx xxxxxxx xxxxxxx xxxx xx xxxx xx xxxxxxx xx -xxx xxxxx xx x xxx xxxxxxx xx xxxxx. Xx x/xxx xx x xxx xxxx xxxxxxx xxxxx -xxxxxxx, Xxxxxx xxxxxxxxx xxxxx xxxxx x/xxx,xxx,xxx xx x xxxxxx. Xxxx xxxxx - xxxx xx xxxx xxxx Xxxxxx'x xxxxxxxx xx xxx xxxxxxx xxxxxxxx xxxxxx xx xxxxx - xx xxxx xxxxxxx xxx xxxxxx xxxx xx xxxxxxx xx xxxxxx x.xx xx x xxx, xxx x.xx -xxx xxxxxx xxxxx xx~xxxxxxx. Xxxx xx x xxxxx xxxxxx xxx xxxxxxxxx xxxxxxxx xxx -xxxxxxxx xxxx xxxxxxxx xxxxxxxxx xxx xxxxxx xxxxxx xxxx, xxx xxx xxxxxxxx -xxxxxxxxx xx xxx xxxx xx xxxxxxxxxx xx x xxxx xxxxx xxxxxxxxxx. - -Xxxxx xxx xxxxxx xxx xxxxxx xx xxx xxxxx xx xxx xxx xxxxxxxxx (xxx XX-xxx -xxxxx xxxxxx xxxxxxxx xx xxx Xxx Xxxxxxxxxx Xxxxxxxxxx), xx xxx xxxxxxx xxxx -xx xxxxx xx xxxxxxxxxxx xx xxxxxxx x xxxxx xxxxxxx xxx xxxx xx xxxxx xxxx -xxxxxx xx xxxx x xxxxxxxxxxx xxxxxx xxxx xxx xxxxxxx. - -Xxxxx x xxxxx xx xxx xxxx xx xxxxxxxxxx xxx xxxxxxxx xx xxx xxxxxxxxxx xxx -xxxxxx xxxxxxxx xxx xxxx xxxxxx xxx xxxxx xxxx. Xxxx xxx xxxx xxxx xxxx xx -xxxxx xxx xxxxxx'x xxxx xxxx xxxxxxxx, xxxx {xxx xxxxxxx} xx xxx xxxxxxx -xxxxxxxxx, xxxxxxxx, xx x, xxx xxxxxxxx. Xxxxx xxxx xxxxxxxxx xxx xxxx (xxxx -xxx Xxxx) xxx xxxxx xx Xxxxx~x. - -Xx xxxxxxxxxxx xx Xxxxx~x xxxxxxx xxxx xxx xxxxxxxx xx xxxxxxx xx xxxx xxxxxxx -xxxxxxxx xxx xxx xx xxxxxxxxxx xx xxxxx xx xxxxxxxx. Xx xxxx, xx xxxxxxx xx -xxxxxx xxx xxxxx xx xx xxxxx xxx xxx xxxxxxxxx xxx xxxxxxxx xxxxx xx Xxxxxx'x -xxxxx xx Xxxxxx' xxxxxx xxxxxxx. Xxxx xxx xxxxxxxx xxxxx xxx xx xx xxxx, xxx -xxxxxxxxx. Xxxxx~x xxxxxxxx xxx xxxxxxxxx xx xxxxxxx xx xxx xxxxxx xxxxxx xx -xxxx xxxxxx xxxxxxxx xx xxxxxxxxx xx xxxxxxxxx. - - -\singlecolumn -\centerline{Table 1---Xxxxxxxxx Xxxx Xxxxxxxx xx Xxxxxxxx} -\smallbreak -\line \bgroup \hss - \begintable - \begintableformat - & \center - \endtableformat - \- - \br{\::} : : \use{3} Xxxxxxxxxx Xxxxxxx: - : \use{3} Xxxxxx Xxxxxxn \er{:} - \br{\:} \zb{Xxxxxx} : \zb{Xxxx} : \use{3} \- - : \zb{Xxxx} : \use{3} \- \er{:} - \br{\::} : : -xxxxx " -xxxxx " -x : - : +xxxxx " +xxxxx " +x \er{:} - \- - \br{\::} xxxxxxx : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx - : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx \er{:} - \- - \br{\::} xxxxxxx : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx - : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx \er{:} - \- - \br{\::} xxxxxxx : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx - : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx \er{:} - \- - \br{\::} xxxxxxx : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx - : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx \er{:} - \- - \br{\::} xxxxxxx : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx - : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx \er{:} - \- - \br{\::} xxxxxxx : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx - : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx \er{:} - \- - \br{\::} xxxxxxx : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx - : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx \er{:} - \- - \br{\::} xxxxxxx : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx - : ~x-xx-xx : xxxxx " ~xxxxx " ~xxxxx \er{:} - \- - \endtable -\hss \egroup -\doublecolumns - - -Xxxx xxxxxx x xxxxxx xxxxxxx Xxxxxx'x xxxxxx xxxxxx xx xxx xxxxxx xxxxx xxxxxx -xxx xxxx xxxxx xx Xxxxx~x, xxxx xxxx xxxxxx xx xxxxx xxxxxxx. Xx, xxx xxxxxxx, -xx xxxxxxxxxx xxx xxxxxxxx xxxx xxxxxx xxxxxx, xx xxxxx xxxxx xx xxxxxxxxxxx, -xxxxxxxxxx, xxx xxxxxxxxx, xxxxxxx xx xxx xxxxxxxx xx xxxx xxxxxx xxxx xxxxx -xxxxxxx, xx xxxxx xxxxx xx xxx xxxxxxxx, xxxxx xxxxx, xxx xxxxxxxxx. Xxxx xxx -xxxx xx xxxxxxxxx. - -\medskip\bigskip -\centerline{Table 2---Xxxxxxx xx Xxxxxx'x Xxxxxx Xxxxxxx} -\nobreak -\centerline{(Xxxxxxx Xxxxxxxx)} -\smallbreak -\line \bgroup \hss - \begintable - \begintableformat - & \center - \endtableformat - \- - \br{\::} Xxxx : xxxxxxxx " xxxxxxx " xxxxxx " xxx \er{:} - \- - \br{\::} xxxx : xxxxxxxx " xxxxxxx " xxxxxx " $x''$ \er{:} - \br{\::} xxxx : xxxxxxxx " xxxxxxx " xxxxxx " $x''$ \er{:} - \- - \br{\::} xxxx : xxxxxxxx " xxxxxxx " xxxxxx " $x''$ \er{:} - \br{\::} xxxx : xxxxxxxx " xxxxxxx " xxxxxx " $x''$ \er{:} - \- - \br{\::} xxxx : xxxxxxxx " xxxxxxx " xxxxxx " $x''$ \er{:} - \br{\::} xxxx : xxxxxxxx " xxxxxxx " xxxxxx " $x''$ \er{:} - \- - \br{\::} xxxx : xxxxxxxx " xxxxxxx " xxxxxx " $x''$ \er{:} - \br{\::} xxxx : xxxxxxxx " xxxxxxx " xxxxxx " $x''$ \er{:} - \- - \endtable -\hss \egroup - -Xxxxxxxx xxx xxxx xxxx xxxxx xxxxx xx Xxxxx~x xxx xxx xxxx, xxxx xxx xxx xxxx -xx xxx xxxxxxxx xxxxxxxx xxxxxxxxx xxxxx. Xx xxx x xxxxx xxxxxxx xx xxx xxxx -xx xxxxxxx, xx xxx xxxxxxx xx xx x xxxxxx xxxxxx xx xxxxx xxxxxxx xx xxxxxx xx -xxxx xxxxx xxxxxx x ``xxxxx xxxx'' xxxxxxxx. Xxxxx x xxxxx xx xxxx xxxxx xx -xxx xxxx xx xxxxxxx xxx xxxxxxxx. Xxxx xxx xxxx xxxxxxxx xx xxxxx xxx xxxxxx'x -xxxxxxxx xxxxxx xx xxxxx xxxxx, xxxxxxx xxx, xxx xxxxxx xxxx xxxx xxx xxxxx -xxxxx xxxxxxxx xxx xxxxxxxx. Xxx xxxxxxx, xx xxx xxxxx xxxxx xxxxxx xxxx xxxx -xxxxxx, xx xxx xxxx xxxxxx xxxxxxxx xxx xxx xxxxx. Xxx xxxxxxx xxx xxxxx xx -Table~3. - - -\font\eri=cmti8 - -Xx xxxxxx xx xxxxxxxxxx xxxx xxxxx xxxxxx xxxx xxxxxxxx xxxx xxx xxx xxxxxxx -xxxxx xx xxx xxxx xxxxx xxx xx xxx xx xxx xxx xxxxxxxxx xx xxxxxxx xxxx xx xxx -xxx xxxxx xxxxx xxxxxx. Xxxxx~x xxxxxxx xxxx xxx xxxxx xxxxxxx, xx xx -xxxxxxxxx xxxxxxxxx xx xxxxxxxx xx xxxx xxxx xxxxxxx xxxx xxx xxxx xxx xxxx -xxxxxxxx xxxxxxxxxxx xxx xxx xxxxxx xx xx xxxxxxx. Xxxxxxxxx xxxxxxx xxxxx xxx -xx xxxxxxxx xxxxxx xxxx xxx xxxx xxxxxxx xx x xxxxx xxxxxxxxx, xxx xxx -xxxxxxxx xx xxx xxxxxxxxx? Xxx xxxx xxxxxxxx xxxxxxxxx xxxxxxxxx xxxxxxxxx xx -XX-xxx, xxx xxxxxxxxx xx xxx {xxx Xxxxxx xxxxxx Xxxx -xxx},\numberedfootnote{\erm Xxxx Xx xx xxx xxxx Xxxxxx Xxxxxxx xxxx xxxxx -xxxx.} ``X xxxxxxx xxxxx xxxxxxxxx xxx Xxxxxx xxx xxx xxxx'x xxxxx xx xxxxxxxx -xxxx xx xxxxxxxxx xxxxxx xxxxxx xxxx xxxxxx xxxx.'' Xxxx xxxxxx xxxxx xx x -xxxxxxxx xxxx xxxxxxxx xxxxx xxxxxx xxx xxxxxxxx xxx xxx xxxxxxx xxx xx xxxx -xxxxxxx xxx xxxxxx xxxxxx xxxxxxxx xxx xxxx xxxxxxxxxxx xxxx xxx xxx xxxxxxx -xxx xxxxxx xxxxxx xx Xxxxxx xxxxx xx xxxx, xxx xxxxx xxx xxx xxxxxxxx xx x -Xxxxxx xxxxxxx xxxx xxx xxxx? Xxx xxxxxx xxxxx xx xx xxxxxxxxx xxx xxxxxxx -xxxx xxx xxxx xxxx xx Xxxxx~x xxx xxxxxx xxxx xxx xxxxxxx xxxx xxxxx xx -xxxxxxx xx xxxxxx xxx xx xxxxx. - -\singlecolumn - -\medskip\bigbreak -\midinsert -\centerline{Table 3---Xxxxxxxxx Xxxx Xxxxxxxx xx Xxxxxxxx} -\smallbreak -\line \bgroup \hss - \begintable - \begintableformat - & \center - \endtableformat - \- - \br{\::} : : \use{3} Xxxxxxxxxx Xxxxxxx: - : \use{3} Xxxxxx Xxxxxxx \er{:} - \br{\:} \zb{Xxxxxx} : \zb{Xxxx} : \use{3} \- - : \zb{Xxxx} : \use{3} \- \er{:} - \br{\::} : : -xxxxxxx " -xxxxxxx " -xxxxxxx : - : +xxxxxxx " +xxxxxxx " +xxxxxxx \er{:} - \- - \br{\::} {xxx x} : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx - : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx \er{:} - \- - \br{\::} {xxx x} : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx - : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx \er{:} - \- - \br{\::} {xxx x} : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx - : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx \er{:} - \- - \br{\::} {xxx x} : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx - : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx \er{:} - \- - \br{\::} {xxx x} : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx - : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx \er{:} - \- - \br{\::} {xxx x} : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx - : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx \er{:} - \- - \br{\::} {xxx x} : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx - : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx \er{:} - \- - \br{\::} {xxx x} : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx - : ~x-xx-xx : xxxxxx " ~xxxxxx " ~xxxxxx \er{:} - \- - \endtable -\hss \egroup -\endinsert - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/rule.tex b/Master/texmf-dist/source/eplain/base/test/rule.tex deleted file mode 100644 index 7001ca9a368..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/rule.tex +++ /dev/null @@ -1,23 +0,0 @@ -% This file is public domain. -% -\input eplain - -\hruledefaultheight = 4pt -\hruledefaultdepth = 8pt - -\vruledefaultwidth = 36pt - -\vglue 1in - -\line{\leaders\ehrule\hfil gA}% - -\smallskip -\ehrule -\medskip - -\noindent \evrule \quad Greetings -\smallskip -\vbox to 3in{\leaders\evrule\vfil gB} - -\hbox to 40pt{\downbracefill} % uses \vrule -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/sidx.tex b/Master/texmf-dist/source/eplain/base/test/sidx.tex deleted file mode 100644 index 88041620f09..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/sidx.tex +++ /dev/null @@ -1,5 +0,0 @@ -% This file is public domain. -% -\input eplain -\sidx{help} -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/subdef.tex b/Master/texmf-dist/source/eplain/base/test/subdef.tex deleted file mode 100644 index 55d624b729a..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/subdef.tex +++ /dev/null @@ -1,24 +0,0 @@ -% This file is public domain. -% -%Karl: on page 15 of the eplain manual (referring to subequation -%formatting) you say -% "Eplain's default definition just puts a period between them:" -%However, when I run eplain (version 2.3 dated "Mon Mar 1 06:30:39 EST -%1993") I get a colon ":" between the two. Below is a sample file. -% Adam H. Lewenberg adam@math.uiuc.edu -%%%%%%%%%% -\input eplain %Version 2.3 "Mon Mar 1 06:30:39 EST 1993" - -$$5+5=10\eqdefn{ggg}$$ -$$4+5=10\eqsubdef{b-eq}$$ - -\eqref{ggg} is correct and \eqrefn{b-eq} is incorrect. - - -\end - -Date: Tue, 8 Jun 1993 09:46:11 -0500 -From: "Adam H. Lewenberg" -To: karl@cs.umb.edu -Subject: subeq referencing in eplain.tex (v. 2.3) -Cc: adam@symcom.math.uiuc.edu diff --git a/Master/texmf-dist/source/eplain/base/test/tenenb.tex b/Master/texmf-dist/source/eplain/base/test/tenenb.tex deleted file mode 100644 index 89cd534e55d..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/tenenb.tex +++ /dev/null @@ -1,48 +0,0 @@ -% This file is public domain. -% -%Date: Sun, 7 Jan 2001 20:31:13 +0100 -%To: tex-eplain@tug.org -%From: Gerald Tenenbaum -%Subject: doublecolumns again -%Cc: -%Bcc: -%X-Attachments: -% -%Hi, -% -%Here is a small file: -% -%***************************** -\magnification1200 -\input eplain.tex -\vsize30mm\hsize100mm - -This is an example of an apparent bug in {\tt $\backslash$doublecolumns}. -This is an example of an apparent bug in {\tt -$\backslash$doublecolumns}. This is -an example of an apparent bug in {\tt $\backslash$doublecolumns}. This is an -example of an apparent bug in {\tt $\backslash$doublecolumns}. This -is an example -of an apparent bug in {\tt $\backslash$doublecolumns}. This is an example of an -apparent bug in {\tt $\backslash$doublecolumns}. -\par -\obeylines\doublecolumns -item 1 -item 2 -item 3 -item 4 -item 5 -item 6 - \singlecolumn -\bye -************************************* - -Has anyone an explanation for this bad behaviour and an idea for a fix? - -Best wishes, - - Gérald - - - - diff --git a/Master/texmf-dist/source/eplain/base/test/tenenb2.tex b/Master/texmf-dist/source/eplain/base/test/tenenb2.tex deleted file mode 100644 index 734299c3726..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/tenenb2.tex +++ /dev/null @@ -1,23 +0,0 @@ -% This file is public domain. -% -% Gerald Tenenbaum, tenenb@arcturus.ciril.fr -% 7 Jan 2001 - -%\magnification 1200 -\input ../eplain -\vsize 30mm -\hsize 100mm - -This is an example of an apparent bug in double columns. -This is an example of an apparent bug in double columns. -This is an example of an apparent bug in double columns. -This is an example of an apparent bug in double columns. -This is an example of an apparent bug in double columns. -This is an example of an apparent bug in double columns. -This is an example of an apparent bug in double columns. - -\doublecolumns -This is an example of an apparent bug in double columns. -\singlecolumn - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/test.tex b/Master/texmf-dist/source/eplain/base/test/test.tex deleted file mode 100644 index 779d8adf662..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/test.tex +++ /dev/null @@ -1,14 +0,0 @@ -% This file is public domain. -% -\input ../eplain -\input asibook.gst - -\comment The title is actually irrelevant: we don't do the title page. -\title{Wavelets and their applications} - -\comment The other front stuff happens in asibook.gst's \producepreliminary, -\comment which is called by virtue of the \part here. - -\backthing{test.index} - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/time.tex b/Master/texmf-dist/source/eplain/base/test/time.tex deleted file mode 100644 index 90751506091..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/time.tex +++ /dev/null @@ -1,10 +0,0 @@ -% This file is public domain. -% -\input eplain - -\timestring - -\time = 68 -\timestring - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/truemarg.tex b/Master/texmf-dist/source/eplain/base/test/truemarg.tex deleted file mode 100644 index b057a86b94f..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/truemarg.tex +++ /dev/null @@ -1,36 +0,0 @@ -% This file is public domain. -% -% Some code to test margin-setting macros in concert with -% \magnification. - -\input ../eplain % margin altered version - -%\magnification=\magstep0 -%\magnification=\magstep1 -%\magnification=\magstep2 -\magnification=\magstep3 - - -\nopagenumbers - -\paperheight=11truein -\paperwidth=8.5truein - -\topmargin=1truein -\leftmargin=1truein -\rightmargin=6truein -\bottommargin=3truein - -\parindent=0pt - -\vbox to \vsize{ -\hrule depth4truept -\vfill -\centerline{Magnification = \the\mag} -\vfill -\hrule height4truept -} - - -\bye - diff --git a/Master/texmf-dist/source/eplain/base/test/uscore.bib b/Master/texmf-dist/source/eplain/base/test/uscore.bib deleted file mode 100644 index 82b7bcb07b1..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/uscore.bib +++ /dev/null @@ -1,5 +0,0 @@ -% This file is public domain. - -@misc{bib_uscore, - title = "Underscore label" -} diff --git a/Master/texmf-dist/source/eplain/base/test/uscore.tex b/Master/texmf-dist/source/eplain/base/test/uscore.tex deleted file mode 100644 index 097230596e0..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/uscore.tex +++ /dev/null @@ -1,14 +0,0 @@ -% This file is public domain. -% -\ifx\undefined\eplain \input eplain \fi - -Define a label with an underscore in it. \xrdef{u_score} -Refer to it: \xref{u_score}. - -Make a citation, too: \cite{bib_uscore}. - -\bibliographystyle{plain} -\bibliography{uscore} - -\bye - diff --git a/Master/texmf-dist/source/eplain/base/test/usepackage.tex b/Master/texmf-dist/source/eplain/base/test/usepackage.tex deleted file mode 100644 index ab797823fe7..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/usepackage.tex +++ /dev/null @@ -1,146 +0,0 @@ -% This file is public domain. -% -% Test \usepackage with packages: color, graphicx, autopict, psfrag, url. -\input ../eplain - -\beginpackages - \usepackage[dvipsnames]{color} - %\usepackage[draft,hidescale]{graphicx,autopict}\let\ttfamily\relax - \usepackage{graphicx,autopict} - \usepackage{psfrag} - \usepackage[obeyspaces,spaces]{url}[2005/06/27] -\endpackages - -%\enablehyperlinks - -\ifpdf - \pdfpagewidth=8.5in - \pdfpageheight=11in -\fi - -% The following redefinition works around a bug in pdftex.def v0.03m -% related to \pagecolor. -\ifpdf -\makeatletter -\ifx\GPT@outputbox\undefined -\def\set@page@color{% - \@ifundefined{GPT@outputbox}{% - % \newbox is outer in plain - \csname newbox\endcsname\GPT@outputbox - }{}% - \global\let\current@page@color\current@color - \@ifundefined{GPTorg@shipout}{% - \global\let\GPTorg@shipout\shipout - \gdef\shipout{% - \afterassignment\GPT@shipout - \global\setbox\GPT@outputbox=% - }% - \gdef\GPT@shipout{% - \ifvoid\GPT@outputbox\relax - \aftergroup\GPT@@shipout - \GPT@pageliteral - \else - \GPTorg@shipout\vbox{% - \GPT@pageliteral - \box\GPT@outputbox - }% - \fi - }% - \gdef\GPT@@shipout{% - \GPTorg@shipout\box\GPT@outputbox\relax - }% - \gdef\GPT@pageliteral{% - \pdfliteral direct{% - q % gsave - \current@page@color\space - n % newpath - 0 0 \strip@pt\pdfpagewidth\space - \strip@pt\pdfpageheight\space re % rectangle - % there is no need to convert to bp - f % fill - Q% grestore - }% - }% - }{}% -} -\fi -\resetatcatcode -\fi - - -\pagecolor[rgb]{.3,.8,.95} - -\centerline{\bf URL, color, rotation and scaling tests:} -\smallskip - -{\color[rgb]{1,0.2,0.3} RGB-colored text. }Non-colored text.\par -{\color[cmyk]{.2,.7,.5,.1}CMYK-colored text. }Non-colored text.\par -{\color[gray]{.4} GRAY-colored text. }Non-colored text.\par -\definecolor{refcolor}{cmyk}{0.28,1,1,0.35} -{\color{refcolor}Defined color. }Non-colored text.\par -\colorbox{green}{Green-colored box.}\par -\colorbox[rgb]{1,0,0}{Red-colored box.}\par -%\fcolorbox doesn't work because plain TeX does not have LaTeX's \fbox -What is this: -\rotatebox[origin=c]{180}{\reflectbox{\color[rgb]{.5,.3,.3}% - \hloff[url]\url{http : // tug . org / eplain}}}\par -Example of a line break inside a URL: \url{http://www.this.is.some/very.very.very.long.URL/which.goes.on/and.on/and.on.html}\par -\textcolor{red}{Predefined color `{\tt red}'. }Non-colored text.\par -\rotatebox{20}{\scalebox{2}[5]{\color[named]{DarkOrchid}Rotated, - scaled, and colored text.}}\par -\resizebox{1in}{\height}{Some text $\sum$.} - \resizebox*{1in}{\height}{Some text $\sum$.} - \resizebox{1in}{!}{Some text $\sum$.}\par - - -\bigskip -\centerline{\bf \LaTeX's picture environment:} -\smallskip - -\picture(50,50) - \color{red} - \thicklines - \put(0,0){\line(1,1){50}} - \color{blue} - \put(40,0){\circle{50}} - \put(0,0){\vector(1,0){50}} - \color{green} - \put(20,0){\circle*{12}} - \put(55,40){\oval(80,70)[t]} - \color{black} - \put(55,40){\oval(50,30)} - \bezier{0}(10,10)(40,90)(110,90) - %\qbezier does not work - %\qbezier[0](10,10)(40,90)(110,90) -\endpicture - -\LaTeXbegin - -\begin{picture}(40,40) -\put(0,0){\vector(1,1){40}} -\multiput(0,5)(10,10){4}{a} -\end{picture} - -\vfil\eject - - -\pagecolor[named]{SkyBlue} - -\centerline{\bf PSfrag test (uses {\tt example.eps} from the PSfrag package):} -\smallskip - -\centerline{\includegraphics[width=3.5in]{example.eps} -\quad -\psfragscanon -\psfrag*{p1}[][l]{$\ast$} -\psfrag{p2}[][l]{$\ast$} -\psfrag{p3}{$\cos(t)$} -\includegraphics[width=3.5in]{example.eps}} - - -\bye - -% Local variables: -% compile-command: "(cd .. && make eplain.tex) && pdftex --interact=nonstopmode usepackage.tex" -% compile-command: "(cd .. && make eplain.tex) && tex --interact=nonstopmode usepackage.tex && dvips -t letter usepackage.dvi -o" -% End: diff --git a/Master/texmf-dist/source/eplain/base/test/verb2.tex b/Master/texmf-dist/source/eplain/base/test/verb2.tex deleted file mode 100644 index b3c7c4ad54c..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/verb2.tex +++ /dev/null @@ -1,61 +0,0 @@ -% This file is public domain. -% -% Date: Wed, 30 Mar 94 09:50:27 CST -% From: dorai@cs.rice.edu (Dorai Sitaram) -% To: karl@cs.umb.edu -% Subject: eplain 2.4's \verbatim: problem & fix - -\input eplain - -Testing Eplain's \verbatim verbatim|endverbatim - -\def\junk{{\it Some obviously $a^2+b^2$ non-verbatim stuff}} - -\bigskip\bigskip - -First let's test if the default | works - -\verbatim -verbatim starts -Some special chars: - !@#$%^&*()_+ -Now test if doubling works: - This line ends with a single || -Now test if I can use || to get non-verbatim stuff: - \junk -verbatim ends -|endverbatim - -\bigskip\bigskip - -Now let's try the same with escape set to \#. -\verbatimescapechar\# - -\verbatim -verbatim starts -Some special chars: - !@$%^&*()_+ -Now test if doubling works: - This line ends with a single ## -Now test if I can use ## to get non-verbatim stuff: - #junk -verbatim ends -#endverbatim - -\bigskip\bigskip - -Now with @. -\verbatimescapechar\@ - -\verbatim -verbatim starts -Some special chars: - !#$%^&*()_+ -Now test if doubling works: - This line ends with a single @@ -Now test if I can use @@ to get non-verbatim stuff: - @junk -verbatim ends -@endverbatim - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/verbatim.tex b/Master/texmf-dist/source/eplain/base/test/verbatim.tex deleted file mode 100644 index 677d0f3b176..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/verbatim.tex +++ /dev/null @@ -1,65 +0,0 @@ -% This file is public domain. -% -\input eplain - -Leading spaces: - -\verbatim ----T--T---- -One - - Two - - Three - - Four - -Five -|endverbatim - -The same again with spaces on empty lines: - -\verbatim ----T--T---- -One - - Two - - Three - - Four - -Five -|endverbatim - -Now for some tabs: - -\verbatim ---------T-------T -One - - Two - - Three - - Four - -Five - -|endverbatim - -Here is how you can get vertical bars into verbatim: - -\verbatim -||!@#$%^&*()_-+=\~`{}[]:'';'<>?,./ -|endverbatim - -And here's you can use it in a paragraph: -\verbatim middle%%%%|endverbatim. And this is the example from the -manual, quoted with a leading space: `\verbatim| ||\#%&!|endverbatim'. - -Now we change the escape character to @ and have a leading space: -\verbatimescapechar @ -`\verbatim@ @@|my what big teeth you have!@endverbatim'. - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/vlach.tex b/Master/texmf-dist/source/eplain/base/test/vlach.tex deleted file mode 100644 index 1aa8262d1b6..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/vlach.tex +++ /dev/null @@ -1,258 +0,0 @@ -% This file is public domain. -% -%Date: Sun, 29 Nov 92 18:21:53 EST -%From: avlach@cleveland.next.nd.edu (alan vlach) -%To: Karl Berry -%Subject: Re: eplain -% -%My problem occurs when I try to call \singlecolumn too quickly after -%I have called \doublecolumns, which is probably bad style anyway, but -%here's a sample file (below) so you can see what's happening. -% -%Put \singlecolumn just one paragraph later and everything works OK. -% -%Thanks for looking at this. -% -%Sincerely, -%Alan Vlach -%alan.d.vlach.1@nd.edu -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\input eplain - -This is a dummy file just to show Karl Berry the problem I'm having. - -Here is a first paragraph of nonsense. Here is a first paragraph of -nonsense. Here is a first paragraph of nonsense. Here is a first -paragraph of nonsense. Here is a first paragraph of nonsense. Here is -a first paragraph of nonsense. Here is a first paragraph of nonsense. -Here is a first paragraph of nonsense. Here is a first paragraph of -nonsense. Here is a first paragraph of nonsense. Here is a first -paragraph of nonsense. Here is a first paragraph of nonsense. Here is -a first paragraph of nonsense. Here is a first paragraph of nonsense. -Here is a first paragraph of nonsense. Here is a first paragraph of -nonsense. - -Here is another paragraph of nonsense. Here is another paragraph of -nonsense. Here is another paragraph of nonsense. Here is another -paragraph of nonsense. Here is another paragraph of nonsense. Here is -another paragraph of nonsense. Here is another paragraph of nonsense. -Here is another paragraph of nonsense. Here is another paragraph of -nonsense. Here is another paragraph of nonsense. Here is another -paragraph of nonsense. Here is another paragraph of nonsense. Here is -another paragraph of nonsense. Here is another paragraph of nonsense. -Here is another paragraph of nonsense. Here is another paragraph of -nonsense. Here is another paragraph of nonsense. Here is another -paragraph of nonsense. Here is another paragraph of nonsense. Here is -another paragraph of nonsense. Here is another paragraph of nonsense. -Here is another paragraph of nonsense. Here is another paragraph of -nonsense. Here is another paragraph of nonsense. Here is another -paragraph of nonsense. Here is another paragraph of nonsense. Here is -another paragraph of nonsense. Here is another paragraph of nonsense. -Here is another paragraph of nonsense. Here is another paragraph of -nonsense. Here is another paragraph of nonsense. Here is another -paragraph of nonsense. - -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. - -\doublecolumns - -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. -And here is where the double columns begin. - -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. - -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. - -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. - -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. - -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. - -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. - -\singlecolumn - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - -The single column resumes. The single column resumes. - - -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. -Here is the $n^{\rm th}$ paragraph of nonsense. - -This is the final paragraph. This is the final paragraph. -This is the final paragraph. This is the final paragraph. -This is the final paragraph. This is the final paragraph. -This is the final paragraph. This is the final paragraph. -This is the final paragraph. This is the final paragraph. -This is the final paragraph. This is the final paragraph. -This is the final paragraph. This is the final paragraph. -This is the final paragraph. This is the final paragraph. -This is the final paragraph. This is the final paragraph. -This is the final paragraph. This is the final paragraph. - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/whitespc.tex b/Master/texmf-dist/source/eplain/base/test/whitespc.tex deleted file mode 100644 index eb3ca0d6b3b..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/whitespc.tex +++ /dev/null @@ -1,51 +0,0 @@ -% This file is public domain. -% -\ifx\eplain\undefined \input eplain \fi - -\vbox{\obeywhitespace Does it work in vbox ?} - -This is some normal text, in a normal paragraph, that's been indented in -the normal way. Isn't that nice? The lines after the first aren't -indented, as usual. - -This line is the start of a paragraph; the obeyed material is next. And -it continues on the same line. -{\obeywhitespace This is the start of the obeyed stuff. - And this one by a couple spaces more than the indentation. -Back to the normal indentation--- some extra space there, did you notice? -That's it. -} -This is the end of the paragraph with the obeyed stuff, and it shouldn't -be indented, but it should start at the beginning of the line, since it -continues the paragraph. - -{\obeywhitespace This obeyed material starts a paragraph. -That line should have the normal indentation (so should this one). -And this line ends with the closing brace to the group.} -And this line continues the paragraph. - -{\obeywhitespace -Some more obeyed material (and a newline after the control sequence): - -That was a blank line above. -} - -That time no normal stuff continued the paragraph. It shouldn't have -made any difference. -Some more normal text, with spaces treated normally again. - -Here is some {\obeywhitespace obeyed stuff} in the middle of a line. -And this {\obeywhitespace more stuff} has multiple spaces before -the `more', that should be ignored. - -{\blanklineskipamount = -.5\baselineskip -\obeywhitespace The blank line after this line - -should be half as much as the blank lines above and below. -} - -{\obeywhitespace And now we should be - -back to normal.} - -\bye diff --git a/Master/texmf-dist/source/eplain/base/test/xampl.tex b/Master/texmf-dist/source/eplain/base/test/xampl.tex deleted file mode 100644 index 4b6eaab3f3e..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/xampl.tex +++ /dev/null @@ -1,13 +0,0 @@ -% This file is public domain. -% -% Test xampl.bib. -% -%\ifx\undefined\eplain \input eplain \fi -\input btxmac - -\bibliography{xampl} -\bibliographystyle{apalike} - -\nocite{*} - -\end diff --git a/Master/texmf-dist/source/eplain/base/test/xref.tex b/Master/texmf-dist/source/eplain/base/test/xref.tex deleted file mode 100644 index 70096bd29e9..00000000000 --- a/Master/texmf-dist/source/eplain/base/test/xref.tex +++ /dev/null @@ -1,39 +0,0 @@ -% This file is public domain. -% -% Test file for cross-references. -% -\ifx\undefined\eplain \input eplain \fi - -\catcode`\_ = 2 - -defining ``foo bar'': -\xrdef{foo bar}. - -and also a `sect' (make that word `Section') label `s' to be `3.1': -\definexref{s}{3.1}{sect}. -\def\sectword{Section} - -Let's also define two labels with a numbers, ``label1'' and ``label2'': -\xrdef{label1}\xrdef{label2} - -\vfill\eject - -defining ``foo baz''. -\xrdef{foo baz} -\vfill\eject - -Define something with all the other characters, including unprintable -ones: \xrdef{1234567890)(@!`['";:]|<>,./?À-=+}. - - -using everything (these should be page 1 and page 2): -\xref{foo bar} and \xref{foo baz}. - -And now the ones with numbers (page 1): \xref{label1} and \xref{label2}. - -And now the weird one (page 3): \xref{1234567890)(@!`['";:]|<>,./?À-=+}. - -ref, refn, and refs on s: \ref{s}, \refn{s}, \refs{s}. - -And an undefined one: \xref{undefined}. -\end diff --git a/Master/texmf-dist/source/eplain/base/util/idxuniq b/Master/texmf-dist/source/eplain/base/util/idxuniq deleted file mode 100644 index 6ee7d225f5c..00000000000 --- a/Master/texmf-dist/source/eplain/base/util/idxuniq +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/awk -f - -# (This file is public domain.) - -# This script filters input lines (which are expected to be a list of -# `\indexentry' lines for MakeIndex) eliminating matching lines. The comparison -# is done without regard to hyperlink label names (in the form `IDX*', where `*' -# stands for a non-negative integer). - -# This has to be done to avoid terms which differ only in hyperlink label names -# embedded into them, because MakeIndex will treat these otherwise identical -# terms as distinct, listing more than once a page number for equivalent terms -# on the same page. - -# `stripped' array is indexed by `\indexentry' lines stripped off the hyperlink -# label name. For each term, we use its stripped version as a key into the -# `stripped' array to increment its element. This records the fact that we have -# seen the term with such key. Also, we add the (full) `\indexentry' line to -# the `terms' array, but only if we have not yet seen a term with such key. - -# The idea was borrowed from Edition 3 of `GAWK: Effective AWK Programming: A -# User's Guide for GNU Awk', which contains the following credit: - -# histsort.awk --- compact a shell history file -# Thanks to Byron Rakitzis for the general idea - -{ - temp = $0 - sub (/{IDX[[:digit:]]+}/, "", temp) - if (stripped[temp]++ == 0) - terms[++count] = $0 -} - -END { - for (i = 1; i <= count; i++) - print terms[i] -} diff --git a/Master/texmf-dist/source/eplain/base/util/trimsee b/Master/texmf-dist/source/eplain/base/util/trimsee deleted file mode 100644 index 8af5ebe6434..00000000000 --- a/Master/texmf-dist/source/eplain/base/util/trimsee +++ /dev/null @@ -1,106 +0,0 @@ -#!/bin/sh - -# (This file is public domain.) - -help () -{ - cat <&2 - exit 1 - fi -} - -VERSION='0.1' - -DEFAULT_SEE='\\indexsee' -DEFAULT_IS=', \+' -DEFAULT_OS=' ' - -SEE=$DEFAULT_SEE -IS=$DEFAULT_IS -OS=$DEFAULT_OS - -while [ $# != 0 ] -do - case "$1" in - -i) - check_missing_arg $# "$1" - IS=$2 - shift - ;; - -o) - check_missing_arg $# "$1" - OS=$2 - shift - ;; - -s) - check_missing_arg $# "$1" - SEE=$2 - shift - ;; - -h | --help) - help - exit 0 - ;; - -v | --version) - echo "trimsee version $VERSION" - exit 0 - ;; - *) - echo "Unknown option '$1'" 1>&2 - exit 1 - ;; - esac - shift -done - - -# The idea is to implement line output delayed by one line. When we -# read next line, we check if it starts with a see/see also entry, and -# if it does, we remove the comma at the end of the previous line -# before printing it. We keep previous lines in the hold buffer. - -sed -n ' - -# Remove all commas in front of see/see also inside each line. -s/'"$IS$SEE/$OS$SEE"'/g - -# If this line does not start with see/see also, we will print the -# previous line intact. NOTE: There are two characters inside the -# brackets: a space and a tab. -/^[ ]*'"$SEE"'/! { x; b PRINT; } - -# This line starts with see/see also, so remove comma at the end of -# the previous line before we print it. -x -s/'"$IS"'$/'"$OS"'/ - -# Print the previous line. -:PRINT -1! p - -# At the end of the input, print the last line. -$ { x; p; } - -' diff --git a/Master/texmf-dist/source/eplain/base/xeplain.tex b/Master/texmf-dist/source/eplain/base/xeplain.tex deleted file mode 100644 index 5464d27a82e..00000000000 --- a/Master/texmf-dist/source/eplain/base/xeplain.tex +++ /dev/null @@ -1,4783 +0,0 @@ -% xeplain.tex: macros for nonformatting. Written 1989--94 by (mostly) -% Karl Berry. Some additions/changes 1997--98 by Adam Lewenberg. -% These macros are in the public domain. -% -% This is the ``extended plain'' TeX format that's described in -% `eplain.texinfo', which you should have received with this file. We -% assume plain has been loaded. -% -% N.B.: A version number is defined at the beginning and end of this file; -% please change those numbers whenever the file is modified! -% And it's best to rename the file if you're going to distribute a -% modified version. -% -% Some macros were written and/or suggested by Paul Abrahams. -% Other sources (e.g., The TeXbook) are cited at the appropriate places. -% -%% @texfile{ -%% author = "Karl Berry, Steven Smith, Oleg Katsitadze, and others", -%% version = "REPLACE-WITH-VERSION", -%% date = "REPLACE-WITH-DATE", -%% filename = "xeplain.tex", -%% email = "bug-eplain@tug.org", -%% checksum = "REPLACE-WITH-CHECKSUM", -%% 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. And please base diffs -%% or other contributions on xeplain.tex, not the -%% stripped-down eplain.tex.", -%% } -% -% -% Load eplain.tex only once (to avoid using up \new's). -% \eplain is defined at the end of this file, so we can test \eplain to -% detect whether eplain.tex has been loaded already or not. -% -% We use \expandafter because the merge script strips any lines -% with an \endinput. -% -\ifx\eplain\undefined - \let\next\relax -\else - \expandafter\let\expandafter\next\csname endinput\endcsname -\fi -\next -% The ifpdf.sty file included below was written by Heiko Oberdiek. -% See the complete source file (e.g., in this distribution) for -% comments. -%% [[[include ifpdf.sty]]] -% -% -% Category codes, etc. -% -\def\makeactive#1{\catcode`#1 = \active \ignorespaces}% -\chardef\letter = 11 -\chardef\other = 12 -% The following two macros were adopted from miniltx.tex of graphics. -\def\makeatletter{% - \edef\resetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}% - \catcode`\@11\relax -}% -\def\makeatother{% - \edef\resetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}% - \catcode`\@12\relax -}% -% -% -% So we can have user-inaccessible control sequences. -% -\edef\leftdisplays{\the\catcode`@}% -\catcode`@ = \letter -\let\@eplainoldatcode = \leftdisplays -% -% Save miniscule amounts of memory and time by writing \toks@ii instead -% of \toks2. -\toksdef\toks@ii = 2 -% -% -% This macro is defined in The TeXbook, but it never made it -% into plain TeX. \dospecials is defined there, though. -% -\def\uncatcodespecials{% - \def\do##1{\catcode`##1 = \other}% - \dospecials -}% -% -% -% Here is a way to do \let^^M = \cs, where the \let need not be global. -{% - \makeactive\^^M % - \long\gdef\letreturn#1{\let^^M = #1}% -}% -% -% -% Swallow parameters, etc. -% -\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{}% -% -% We can't just use \empty as the identity function, since then outer -% braces which would supposedly delimit the argument would define a group. -\def\identity#1{#1}% -% -% True if #1 is the empty string, i.e., called like `\ifempty{}'. -% Use notes: -% So far, \ifempty works in the following cases: -% 1. \ifempty{}\message{empty}\else\message{not empty}\fi --> empty -% 2. \ifempty\undefined\message{empty}\else\message{not empty}\fi --> not empty -% But does NOT work in the case -% 3. \def\empty{} -% \ifempty\empty\message{empty}\else\message{not empty}\fi --> not empty -% Question: When should \ifempty be true? -\def\@emptymarkA{\@emptymarkB} -% The above line suggested by Stanislav Brabec. -\def\ifempty#1{\@@ifempty #1\@emptymarkA\@emptymarkB}% -\def\@@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}% -% -% Turn a definition into the characters that compose it. See -% ``Sanitizing control sequences under \write'', by Ron Whitney, TUGboat -% 11(4), p.620. -\def\@gobblemeaning#1:->{}% -\def\sanitize{\expandafter\@gobblemeaning\meaning}% -% -% -% From p.308 of the TeXbook. This cannot be used in places where TeX -% might be skipping tokens, e.g., in conditionals. -% -\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}% -% -% -% \csname constructions come up an awful lot, so we save typing with the -% following. (But the extra macro expansion does take time, so we don't -% use these in frequently-executed code.) -% -\def\csn#1{\csname#1\endcsname}% -\def\ece#1#2{\expandafter#1\csname#2\endcsname}% -% -% -% \expandonce{TOKEN} abbreviates \expandafter\noexpand TOKEN. -% -\def\expandonce{\expandafter\noexpand}% -% -% -% Don't show our register allocations in the log. -% -\let\@plainwlog = \wlog -\let\wlog = \gobble -% -% -% Make it convenient to put newlines in error messages. -% -\newlinechar = `^^J -% -% -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. -% -\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 -}% -% Show the complete contents of boxes. -% -\def\tracingboxes{\showboxbreadth = \maxdimen \showboxdepth = \maxdimen}% -% -% Don't trace anything, except restore \showbox... to plain's values. -% -\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 -}% -% -% -% Definitions to produce actual `{' (et al.) characters in an output -% file via \write. We omit the line break after the first }, since we -% have no comment character at that point. -% -\begingroup - \catcode`\{ = 12 \catcode`\} = 12 - \catcode`\[ = 1 \catcode`\] = 2 - \gdef\lbracechar[{]% - \gdef\rbracechar[}]% - \catcode`\% = \other - \gdef\percentchar[%]\endgroup -% -% -% Leave horizontal mode (if we're in it), then insert a penalty. -% And conversely. -% -\def\vpenalty{\ifhmode\par\fi \penalty}% -\def\hpenalty{\ifvmode\leavevmode\fi \penalty}% -% -% -% Make \else usable in \loop. From Victor Eijkhout's TeX by Topic (page -% 104). See also Alois Kabelschacht, TUGboat 8(2), page 184. -% -\def\iterate{% - \let\loop@next\relax - \body - \let\loop@next\iterate - \fi - \loop@next -}% -% -% -% Add #2 (which is expanded in an \edef) to the end of the definition of -% #1 (which must be a previously-defined control sequence). This is a -% way to construct simple lists. -% -\def\edefappend#1#2{% - \toks@ = \expandafter{#1}% - \edef#1{\the\toks@ #2}% -}% -% -% -% \allowhyphens, from TeXbook, p. 395. Allows following & preceding word -% to be hyphenated. -% -\def\allowhyphens{\nobreak\hskip\z@skip}% -% -% -% -% Hooks. -% -% \hookaction{HOOK}{TOKENS} adds TOKENS to the list of actions for -% HOOK. We avoid defining a \toks register for each hook, although -% maybe that isn't so important. -% -% \hookappend and \hookprepend add TOKENS specificially to the end or -% the beginning. When the argument is used, \toks@ will be the previous -% value of the hook, and \toks@ii the new tokens. -% -\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 -% -% -% \@hookassign{LAST-DEF}{HOOK}{TOKENS} makes \toks@ the previous value -% of HOOK, and \toks@ii TOKENS, and then assigns the new value using -% LASTDEF. We store the hook in a control sequence \@HOOKhook. -% -\long\def\@hookassign#1#2#3{% - % Make \toks@ be the expansion (to one level) of \@HOOKhook, or empty. - \expandafter\ifx\csname @#2hook\endcsname \relax - % If \@HOOKhook was undefined, let it be empty. - \toks@ = {}% - \else - % Otherwise, expand it to one level. We can't just assign from - % \expandafter{\csname ...} since then the \toks register would - % contain the control sequence, not its definition. - \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}% -}% -% -% -% \hookactiononce{HOOK}\CS adds `\global\let\CS=\relax' to the -% definition of \CS, then adds to HOOK. Thus, \CS is expanded the next -% time HOOK is called, but then it goes away. This only works if \CS is -% expandable, though. -% -\long\def\hookactiononce#1#2{% - \edefappend#2{\global\let\noexpand#2\relax} - \hookaction{#1}#2% -}% -% -% -% \hookrun{HOOKNAME} runs whatever actions have been defined for HOOK. -% -\def\hookrun#1{% - \expandafter\ifx\csname @#1hook\endcsname \relax \else - % Isn't this fun? We want to get rid of the \fi before expanding - % the actions, so that they can read what's coming up next. - \def\temp{\csname @#1hook\endcsname}% - \expandafter\temp - \fi -}% -% -% -% -% Properties a la Lisp. -% -% \setproperty{ATOM}{PROPNAME}{VALUE} defines the property PROPNAME on the -% ``atom'' ATOM to have VALUE. -% -\def\setproperty#1#2#3{\ece\edef{#1@p#2}{#3}}% -\def\setpropertyglobal#1#2#3{\ece\xdef{#1@p#2}{#3}}% -% -% -% \getproperty{ATOM}{PROPNAME} expands to the value of the property -% PROPNAME on ATOM, or to nothing (i.e., \empty), if the property isn't -% present. -% -\def\getproperty#1#2{% - \expandafter\ifx\csname#1@p#2\endcsname\relax - % then \empty - \else \csname#1@p#2\endcsname - \fi -}% -% -% -% -% Macros to support BibTeX are in a separate file, btxmac.tex. -% -% (They are maintained separately, too, by Oren Patashnik, -% opbibtex@cs.stanford.edu.) btxmac.tex also defines other macros we -% want to use and make available. -% -% But not all people want to read the BibTeX macros, because of either -% space or time considerations. Therefore, we look for \nobibtex, -% which, if defined, causes btxmac.tex not to be read. But we still -% have to get \tokstostring et al. defined---so eplain.tex contains -% those definitions, automatically edited in from btxmac.tex. All the -% documentation has been removed, so you must read btxmac.tex if you -% want the comments. -% -% -% We want to give a slightly different message than btxmac if no .aux -% file exists (unless the person using us has already define some -% message, possibly empty.) -% -\ifx\@undefinedmessage\@undefined - \def\@undefinedmessage - {No .aux file; I won't warn you about undefined labels.}% -\fi -% -% -% We use a token register to define all the BibTeX definitions, to avoid -% problems with the \if... constructions when they are conditionally -% read. -% -%% [[[here is the first set of common definitions from btxmac]]] -\toks0 = {% - %% [[[here are the BibTeX-specific definitions from btxmac]]] -}% -\ifx\nobibtex\@undefined \the\toks0 \fi -%% [[[here is the second set of common definitions from btxmac]]] -% -% Here are the control sequences that btxmac.tex defines using an @, -% because btxmac.tex wants to absolutely minimize the chance of -% conflicts. But these control sequence implement documented features -% of eplain, so we want to allow people to use them without the @. -% -\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 -% -% -% btxmac.tex defines \innerdef. Let's use it to make an abbreviation -% for \innerdef\inner{}. -% -\def\innerinnerdef#1{\expandafter\innerdef\csname inner#1\endcsname{#1}}% -% -% Use that in turn to make non-outer versions of the rest of plain TeX's -% allocation macros. (btxmac.tex already did a few of them.) -% -\innerinnerdef{newbox}% -\innerinnerdef{newfam}% -\innerinnerdef{newhelp}% -\innerinnerdef{newinsert}% -\innerinnerdef{newlanguage}% -\innerinnerdef{newmuskip}% -\innerinnerdef{newread}% -\innerinnerdef{newskip}% -\innerinnerdef{newtoks}% -% -% -% Besides doing a \write to the aux file, we also need to do an -% \immediate\write. -% -\def\immediatewriteaux#1{% - \ifx\noauxfile\@undefined - \immediate\write\@auxfile{#1}% - \fi -}% -% -% -% We want \biblabelprint to define hyperlink destination. For that, -% we save the label for the current bibliography entry from within -% \bblitemhook. -\def\bblitemhook#1{\gdef\@hlbblitemlabel{#1}}% -% -\def\biblabelprint#1{% - \noindent - \hbox to \biblabelwidth{% - \hldest@impl{bib}{\@hlbblitemlabel}% - \biblabelprecontents - \biblabelcontents{#1}% - \biblabelpostcontents - }% - \kern\biblabelextraspace -}% -% We want each citation item to be hyperlink to bibliography entry. -% To avoid unnecessary warnings about undefined destinations (e.g., -% from pdfTeX), produce the link only when .bbl file (which does the -% \hldest's) is present. -\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}% -}% -% -% -% -% Macros that produce output. -% -% \obeywhitespace makes both end-of-lines and spaces in the input be -% respected in the output. Even spaces at the beginning of lines turn -% into blank space the size of the natural space of the current font. -% The reason why plain TeX's \obeyspaces does not do this last is that -% it produces actual space characters, i.e., glue, and glue is discarded -% at a(n output) line break, and so if line breaks in the input are -% line breaks in the output... -% -% Tabs are not affected; they will still produce glue (a single space). -% -\begingroup - \makeactive\^^M \makeactive\ % No spaces or ^^M's from here on. -\gdef\obeywhitespace{% -\makeactive\^^M\def^^M{\par\futurelet\next\@finishobeyedreturn}% -\makeactive\ \let =\ % -% -% The group we use here is the one \obeywhitespace must be enclosed in. -% If we don't do this, then if the obeyed stuff ends in a newline, the -% indent produced by the definition of ^^M will make that line indented, -% even if it isn't the end of the paragraph. -\aftergroup\@removebox% -\futurelet\next\@finishobeywhitespace% -}% -% -% \@finishobeywhitespace eats any spaces and/or the end-of-line after -% the \obeywhitespace command itself. The group here is the one that it -% itself creates. -% -\gdef\@finishobeywhitespace{{% -\ifx\next % -\aftergroup\@obeywhitespaceloop% -\else\ifx\next^^M% -\aftergroup\gobble% -\fi\fi}}% -% -% \@finishobeyedreturn is invoked at the end of every input line. We -% check if the next thing is also a return, and, if so, insert extra -% space. Then we start the next line. -% -\gdef\@finishobeyedreturn{% -\ifx\next^^M\vskip\blanklineskipamount\fi% -\indent% -}% -\endgroup -% -% The argument here is the space that we are supposed to eat after the -% \obeywhitespace command. -% -\def\@obeywhitespaceloop#1{\futurelet\next\@finishobeywhitespace}% -% -% -% This removes the last box, if it was a empty box of width \parindent. -% We might have been called inside a \vbox, so we have to test if we are -% in horizontal mode before using \lastbox. -% -\def\@removebox{% - \ifhmode - \setbox0 = \lastbox - \ifdim\wd0=\parindent - \setbox2 = \hbox{\unhbox0}% - \ifdim\wd2=0pt - % Don't put it back: it was an indentation box. - % This \ignorespaces ignores spaces after the group. - \ignorespaces - \else - \box2 % Put it back: it wasn't empty. - \fi - \else - \box0 % Put it back: it wasn't the right width. - \fi - \fi -}% -% -% We allow for extra (possibly negative) space when we hit blank lines. -% -\newskip\blanklineskipamount -\blanklineskipamount = 0pt -% -% -% A good way to print fractions in text when you don't want -% to use \over (which should be most of the time), and yet -% just `1/2' doesn't look right. (From the TeXbook, -% the answer to exercise 11.6, p.311.) -% -\def\frac#1/#2{\leavevmode - \kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}% - \kern-.1em $/$% - \kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}% -}% -% -% -% The `e' just means `Eplain', as in `Eplain's hrule'. The advantage -% to using these is that you can change the default thickness. -% -\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 texnames.sty and path.sty files included below were originally -% written by Nelson Beebe and Philip Taylor, respectively. See the -% complete source files (e.g., in this distribution) for comments. -%% [[[include texnames.sty]]] -%% [[[include path.sty]]] -% -% -% A square box, suitable for being a marker in lists. -% -\def\blackbox{\vrule height .8ex width .6ex depth -.2ex \relax}% square bullet -% -% -% From p.311 of the TeXbook. -% -% Make an unfilled rectangle with the dimensions of \box0. #1 is the -% height of the rules, #2 the depth (i.e., the thicknesses). -% -\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.}% -% -% -% Produce an hrule with height #1 and depth #2, and insert kerning so it -% doesn't change the current position. -% -\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2}% -% -% Produce a vrule with width #1+#2, kerning so as not to change the -% current position. -% -\def\hidevrule#1#2{% - \kern-#1% - \dimen@=#1\advance\dimen@ by #2% - \vrule width\dimen@ - \kern-#2% -}% -% -% -% The \boxit macro from the TeXbook, trivially generalized to allow -% something other than 3pt around the TeX box being boxed. -% -\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 - }% -}% -% -% -% Produce the written-out form of a number. -% -\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 -}% -% -% The following arrow macros were written by Steven Smith. See arrow.tex. -\let\@plainnewif = \newif -\let\@plainnewdimen = \newdimen -\let\newif = \innernewif -\let\newdimen = \innernewdimen -\edef\@eplainoldandcode{\the\catcode`& }% -\catcode`& = 11 -\toks0 = {% - %% [[[include arrow1]]] -}% -\catcode`& = 4 -\toks2 = {% - %% [[[include arrow2]]] -}% -\let\newif = \@plainnewif -\let\newdimen = \@plainnewdimen -\ifx\noarrow\@undefined \the\toks0 \the\toks2 \fi -\catcode`& = \@eplainoldandcode -% -% -% -% Environments. -% -% Define an ``environment'': arbitrary text, enclosed by \begingroup and -% \endgroup. But you get to label the group, so that if you forget an -% \environment or an \endenvironment, you will probably get an error -% message about it. -% -% Since the environment names appear in \errmessage arguments, it's best -% to keep them to `letter' and `other' characters. I suppose we could -% call \tokstostring to allow more general labels. -% -% These macros improve slightly on the answer to exercise 5.7 in -% The TeXbook, by making some checks on \begingroup and \endgroup, as -% well as just making sure \environment and \endenvironment's match. -% -% -\def\environment#1{% - \ifx\@groupname\@undefined\else - % This gets invoked if we have two \environments (and no matching - % \endenvironment to the first) with an \endgroup in between. - \errhelp = \@unnamedendgrouphelp - \errmessage{`\@groupname' was not closed by \string\endenvironment}% - \fi - % Use \edef in case we are passed a macro that contains the name, - % instead of the name. - \edef\@groupname{#1}% - \begingroup - \let\@groupname = \@undefined -}% -% -\def\endenvironment#1{% - \endgroup - \edef\@thearg{#1}% - \ifx\@groupname\@thearg - \else - \ifx\@groupname\@undefined - % Unfortunately, one gets an `extra \endgroup' message before - % seeing this. But we have to restore \@groupname, so I see no - % alternative. - \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?}% -% -% -% The above sort of environment allows nesting. But environments -% shouldn't always be allowed to nest (like the \flushright, -% \flushleft, and \center ones defined below). Here are some macros to -% help deal with that. -% -% \checkenv goes at the beginning of a macro that is -% going to define the environment. -% -\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.}% -% -% -% -% Mathematics displays. -% -% By default, TeX centers displayed material. To get left-justified -% displays, say \leftdisplays. To go back to centered displays, say -% \centereddisplays. -% -% This is based on an approach developed by Donald Arseneau, -% asnd@triumfrg.bitnet. -% -\newtoks\previouseverydisplay -% Here we want to make ordinary math displays flush left, -% indented by the dimen \leftdisplayindent, which defaults -% to \parindent. -% -% How do you want the first column aligned? -\let\@leftleftfill\relax % as it was -%\let\@leftleftfill\hfill % makes more sense, but could be too ugly -% -% Surely it makes more sense to not sum \leftdisplayindent+\parindent -\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 - % was: \kern-\displayindent % really \displayindent? - \kern-\leftdisplayindent % I'll use just \leftdisplayindent - $\aftergroup\@leftleqnoend % inserted after ending $ - }% - \@redefinealignmentdisplays - \@leftdisplaystrue - \fi -}% -\newbox\@lignbox -\newdimen\disprevdepth - -% In order to use $$ for left-aligned equation we have to -% put something like \leftline{$\displaystyle ...$} in the -% display. Then \eqno works basically like \hfill. -% In order to make $$\eqalignno{...}$$ work as -% expected, including page breaks, we have to get rid of the -% horizontal box, and un-vbox the alignment. Sadly, \unvbox -% does not perform baselineskip handing, so we need to get -% the \prevdepth ourselves...in order to get the prevdepth, -% the outermost display must be an alignment display. -% Therefore, an ordinary $$ a=b $$ becomes: -% $$\halign{#\cr\noalign{\disprevdepth = \prevdepth -% \leftline{$\displaystyle a=b$} -% }}$$ -% -\def\centereddisplays{% - % If \leftdisplays hasn't been called, don't try to restore all the - % stuff it changes. - % - \if@leftdisplays - \everydisplay = \previouseverydisplay - \let\@maybedisableeqno = \@save@maybedisableeqno - \let\eqno = \@saveeqno - \let\leqno = \@saveleqno - \let\eqalignno = \@saveeqalignno - \let\leqalignno = \@saveleqalignno - \@leftdisplaysfalse - \fi -}% -% -\def\leftdisplaysetup{% -% surely not this *and* \leftdisplayindent? : \dimen@ = \parindent - \dimen@ = \leftdisplayindent - \advance\dimen@ by \leftskip - \advance\displayindent by \dimen@ - \advance\displaywidth by -\dimen@ -% this outermost alignment doesn't align anything. - \halign\bgroup##\cr \noalign\bgroup - \disprevdepth = \prevdepth - \setbox\z@ = \hbox to\displaywidth\bgroup - % Why strut?? \strut - % Why this?? \advance\hsize by -\displayindent - $\displaystyle - \aftergroup\@lefteqend % inserted after ending $ -} -% -\def\@lefteqend{% gets inserted between the ending $$ - \hfil\egroup% end box 0 - \@putdisplay} -% gets inserted between trailing $$. -\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{&}% - \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{&}% - \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 -% \showthe\displayindent \showthe\leftdisplayindent - \rlap{\kern\displayindent \kern-\leftdisplayindent$\@lign####$}% - \tabskip\displaywidth\crcr - ##1\crcr}}}% -}% -% -% \noalign is typically used to insert a few words (`and', for example) -% between two aligned equations. So I don't think the \noaligned -% material should be indented. Since \noalign takes , we would end up with double indentation, anyway: one -% because we're indenting the whole display, and one at the start of the -% . (If you want to change any of this, you can put something in -% \@everynoalign.) So, we use this definition for \noalign in a -% left-justified \eqalignno: -% -\let\@primitivenoalign = \noalign -\newtoks\@everynoalign -\def\@lefteqalignonoalign#1{% - \@primitivenoalign{% - % Is it right to set \leftskip=0pt first, thus perhaps making this - % work in lists and so forth? We just compensate for the other ways - % the display is indented here. - \advance\leftskip by -\parindent - \advance\leftskip by -\leftdisplayindent - \parskip = 0pt - % - % We use \parindent=0pt instead of \noindent because the latter - % starts unrestricted horizontal mode, which means the alignment - % we're inside will wind up being as wide as the page. When the arg - % is just vertical material, this is wrong. For example, using - % \matrix inside \eqalignno fails if \noindent is used. - \parindent = 0pt - \the\@everynoalign - #1% - }% -}% -% -% -% -% Time macros. -% -% TeX sets \time, \day, \month, and \year when it begins. (And does not -% update them as it runs!) -% -% -% \monthname produces the name of the month, abbreviated to three -% letters. The primitive \month should never be zero. -% -\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 -}% -% -% \fullmonthname is like \monthname, except it doesn't abbreviate. -% -\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 -}% -% -% \timestring produces the current time, in a format like `1:14 p.m.'. -% -\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. - % But we need the minutes with a leading zero, if necessary. - \ifnum\count4<10 - \toks1 = {0}% - \else - \toks1 = {}% - \fi - % - % Convert the hour into `a.m.' or `p.m.', and make it mod 12. - \ifnum\count2<12 - \toks0 = {a.m.}% - \else - \toks0 = {p.m.}% - \advance\count2 by -12 - \fi - % - % If it's midnight, call it `12', not `0'. - \ifnum\count2=0 - \count2 = 12 - \fi - % - % Produce the output. - \number\count2:\the\toks1 \number\count4 \thinspace \the\toks0 -\endgroup}% -% -% -% \timestamp produces a text string for the whole thing like -% `23 Apr 1964 1:14 p.m.'. -% -\def\timestamp{\number\day\space\monthname\space\number\year\quad\timestring}% -% -% -% \today produces the current date, as in `23 April 1964'. -% -\def\today{\the\day\ \fullmonthname\ \the\year}% -% -% -% -% (Typographical) lists. -% -% These macros can produce numbered or unnumbered lists. -% -% You can change the spacing by assigning new values to these registers. -% They are used by both kinds of lists. \listleftindent is relative to -% the current paragraph indentation, while \listrightindent is an -% absolute value. I do this for two reasons: (1) it is more useful, if not -% more ``logical'', to make list indentation depend on the paragraph -% indentation; (2) footnotes do not work if \parindent is zero, and -% having a footnote in a list item is perfectly reasonable. -% -% If you change \baselineskip and want \abovelistskip and \belowlistskip -% to retain their meanings here, you will have to reassign to them. The -% \baselineskip here is the value at the time eplain.tex is read, i.e., -% 12pt (most likely). -% -% If the items in your lists are very long, you might want to -% make \interitemskipamount nonzero. -% -\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 -% -% To do arbitrary things at the start of each list: -\newtoks\everylist -% -% If you want no space between items for a particular list -% (perhaps because the items in it are short), you can say, -% e.g., \numberedlist\listcompact. -% -\def\listcompact{\interitemskipamount = 0pt \relax}% -% -% This is called to set up the parameters by both sorts of lists. -% Because we set \rightskip, we finish off the current paragraph. -% -\newdimen\@listindent -% -\def\beginlist{% - % Insert the space above this list, before we change \leftskip - % (because the \vskip in here might be what ends the paragraph). - \abovelistskip - % - \@listindent = \parindent - \advance\@listindent by \listleftindent - % - % \leftskip shifts nested lists to the right on the page. - \advance\leftskip by \@listindent - \advance\rightskip by \listrightindent - % - % We always need \itemnumber, so we can know whether an item is the - % first one or not. - \itemnumber = 1 - % - \the\everylist -}% -% -% A list item, for both kinds of lists. -% -\def\li{\@getoptionalarg\@finli}% -\def\@finli{% - % Save \@optionalarg in case \interitemskip garble it. - \let\@lioptarg\@optionalarg - % Write xref definition but do not define hyperlink destination - % (\printitem will do it). - \ifx\@lioptarg\empty \else - \begingroup - \@@hldestoff - \expandafter\writeitemxref\expandafter{\@lioptarg}% - \endgroup - \fi - \ifnum\itemnumber=1 \else \interitemskip \fi - % Add hyperlink destination in front of \marker before doing \printitem. - \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 - % - % Just in case somebody creeps in with an argument or something. - \ignorespaces -}% -% -% \writeitemxref{LABEL} writes out a definition for LABEL to be \marker -% for the aux file. -% -\def\writeitemxref#1{\definexref{#1}\marker{item}}% -% -% \printitem is used to print items by both sorts of lists. A \par gets -% produced before every item -- even the first one. We also want to -% make paragraphs after the first appear to be indented -- i.e., they -% will have double indentation. It is usually bad exposition to have -% lists with multiparagraph items, but sometimes it is unavoidable. -% -\def\printitem{% - \par - \nobreak - \vskip-\parskip - \noindent - \printmarker\marker -}% -% -% Output the list marker. -% -\def\printmarker#1{\llap{\marker \enspace}}% -% -% Common ending. -% -\def\endlist{\belowlistskip}% -% -% -% \numberedlist produces items which are numbered sequentially, starting -% from one. You start items with \li (`list item'). End the list with -% \endnumberedlist. -% -% A nested \numberedlist produces items labelled `(a)', `(b)', etc. A -% doubly (and deeper) nested \numberedlist labels items with `*'. -% -% These registers keep track of where we are. -% -\newcount\numberedlistdepth -\newcount\itemnumber -\newcount\itemletter -\newcount\itemromannumeral -% -\def\numberedmarker{% - \ifcase\numberedlistdepth - (impossible)% - \or \printitemnumber - \or \printitemletter - \or \printitemromannumeral - \else *% - \fi -}% -% -% These produce the text of the labels. We use \the\itemletter so that -% the value will expand. -% -\def\printitemnumber{\number\itemnumber}% -\def\printitemletter{\char\the\itemletter}% -\def\printitemromannumeral{\romannumeral\itemromannumeral}% -\def\numberedprintmarker#1{\llap{#1) \listmarkerspace}}% -% -\def\numberedlist{\environment{@numbered-list}% - % This is set back to zero by getting to the end of the group. - \advance\numberedlistdepth by 1 - \itemletter = `a - \itemromannumeral = 1 - \beginlist - \let\marker = \numberedmarker - \let\printmarker = \numberedprintmarker -}% -% -\def\endnumberedlist{% - \par - \endenvironment{@numbered-list}% - \endlist -}% -% -% Allow synonyms for \numberedlist. -\let\orderedlist = \numberedlist -\let\endorderedlist = \endnumberedlist -% -% -% -% \unorderedlist produces items which are labelled with bullets. You -% start an item with \li, just as with numbered lists. You end the list -% with \endunorderedlist. -% -% A nested \unorderedlist produces items labelled with em-dashes. A -% doubly (and deeper) nested \unorderedlist uses `*'. -% -\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 -}% -% -% -% -% Verbatim listing. -% -% ... well, almost verbatim. We assume the font \tt has all the -% characters that will appear. Control characters, except for tabs and -% form feeds (and returns) won't produce anything useful. Tabs produce -% a fixed amount of space, and form feeds produce a page break. -% -% This is based on Knuth's ideas in Appendix D of the TeXbook, p. 380. -% The argument should be a filename. -% -% if you need to do something more for your particular fonts and/or -% environment before the file is input, give a definition to -% \setuplistinghook. If you want line numbers on the output, you can -% say \let\setuplistinghook = \linenumberedlisting. -% -\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}}% -% -% -% \uncatcodespecials must come before \obeywhitespace, lest a space -% character in the input produce character 32 from the \tt font. -% Ensure ^^L is active and non-outer. -% -{% - \makeactive\^^L - \let^^L = \relax - \gdef\@setuplisting{% - \uncatcodespecials - \obeywhitespace - \makeactive\` - \makeactive\^^I - \makeactive\^^L - \def^^L{\vfill\break}% - \parskip = 0pt - \listingfont - }% -}% -\def\listingfont{\tt}% -% -% Give definitions to the characters we want to be special. -% -% Do ` separately, so can use ` in the \catcode commands elsewhere. -% -{% - \makeactive\` - \gdef`{\relax\lq}% Defeat ligatures. -}% -{% - \makeactive\^^I - \gdef^^I{\hskip8\fontdimen2\font \relax}% -}% -% -% -% \verbatim ... |endverbatim typesets the ... in typewriter. To produce a | -% in the ..., use ||. This macro was contributed by beebe@math.utah.edu. -% Generalized to characters other than | by dorai@cs.rice.edu. -% -\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 -% -% -% -% Table of contents, list of figures, etc. -% -% Entries for the table of contents are recorded in \jobname.toc, which -% we open for writing at the first \writetocentry. Actually, we use -% \tocfilebasename for the root of the filename to read; \jobname is -% the default. -% -\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\innernewif{ifrewrite#1file} \csname rewrite#1filetrue\endcsname - \ece\def{read#1file}{\readcontentsfile{#1}}% -}% -% -% We provide \opentocfile, \readtocfile, etc., by default. -\definecontentsfile{toc}% -% -% And `toc' is just the argument to this macro. -\def\opencontentsfile#1{% - \csname if@#1fileopened\endcsname \else - \ece{\immediate\openout}{#1file} = \csname #1filebasename\endcsname.#1 - \ece\global{@#1fileopenedtrue}% - \fi -}% -% -% \writetocentry#1#2 produces a line in the .toc file that -% looks like: -% \toc#1entry{#2}{page number} -% e.g., -% \tocchapterentry{Introduction}{2} -% would be written by -% \writetocentry{chapter}{Introduction} -% if the chapter started on page two. -% -% Thus, #1 is intended to be something like `chapter' or `section', #2 -% to be the text of the title. -% -% Of course, if you want, you can \write\tocfile yourself with whatever -% you like. In that case, you must also call \opentocfile. -% -% By the way, it would be wrong to put a \percentchar at the end of the -% output line. Then, when the .toc file is read, if each line is turned -% into a \leftline, say, there would be no legal breakpoint between the -% boxes, and one extremely long line would result. -% -% `toc' is the first argument to this; \writetocentry is defined by -% \definecontentsfile. -\def\writecontentsentry#1#2#3{\writenumberedcontentsentry{#1}{#2}{#3}{}}% -% -% Sometimes you want the control sequence to take another number (e.g., -% a chapter number) as a parameter. (Although you can pass anything you -% want as the third parameter, naturally.) The third parameter is -% expanded at the point of the \writenumberedtocentry, not when the -% \write actually happens. This makes the usual case---the third -% parameter being \the\someregister---work. -% -% For example: -% \writenumberedtocentry{chapter}{The second chapter}{2} -% would produce: -% \tocchapterentry{The second chapter}{2}{14} -% -% if the second chapter started on page 14. -% -% `toc' is the first argument, as above. -\def\writenumberedcontentsentry#1#2#3#4{% - \csname ifrewrite#1file\endcsname - \csname open#1file\endcsname - \toks0 = {\expandafter\noexpand \csname #1#2entry\endcsname}% - \def\temp{#3}% - % - % Usually #4 is just `\the\register', which we want to expand. But - % if it's not a number at all -- e.g., if it's an author's name, we - % don't want to expand control sequences for accents and the like. - % So we play some games here. - \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 -}% -% -% The entries are read in when the user invokes \readtocfile (which -% should be before the first \writetocentry). We do not open the .toc -% file to allow reading it in twice to make a short contents or some -% such. This should not cause any problems because each of -% \writecontentsentry and \writenumberedcontentsentry open the .toc -% file for writing (i.e., empty it) before trying to write to it. -\def\readcontentsfile#1{% - \edef\temp{% - \noexpand\testfileexistence[\csname #1filebasename\endcsname]{#1}% - }\temp - \if@fileexists - \input \csname #1filebasename\endcsname.#1\relax - \fi -}% -% -% Here are some sample definitions of the \toc...entry macros. Perhaps -% you or your book designer can come up with a better way of handling -% contents than leaders. These definitions are just examples, not -% something you might want to actually use to print a document. -\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}}% -% -% -% -% Cross-references. -% -% Definitions of references are recorded in \jobname.aux, called -% \auxfile in the macros, which btxmac.tex has opened. -% -% When a label isn't defined, we only want to complain if -% \xrefwarningtrue; btxmac uses \if@citewarning for this, so we have to -% reuse that name. We can't just say \let\ifxrefwarning = -% \if@citewarning, since then changes to the latter won't be reflected -% in the former. On the other hand, we have to have a true \if... -% command, so \if's and \fi's match properly. What a mess. -% -\let\ifxrefwarning = \iftrue -\def\xrefwarningtrue{\@citewarningtrue \let\ifxrefwarning = \iftrue}% -\def\xrefwarningfalse{\@citewarningfalse \let\ifxrefwarning = \iffalse}% -% -% -% \xref{foo} produces ``p.\thinspace ''. \xrefn{foo} produces -% ``''. \xrdef{foo} produces nothing, but defines the label -% `foo' to be on the current page. -% -% As usual, it takes two passes to get the cross-references right. I -% would like to check for labels being defined twice, but I don't know -% how to do that. If the cross-reference file has been read in, many -% cross-references will be defined that I don't want to complain about. -% It is only if two \xrdef commands are given to the same string that I -% want to complain. I could define a new control sequence for each -% cross-reference, and check that, but that seems like too high of a -% price to pay. -% -% -% \xrlabel{LABEL} expands to a cross-reference internal name. We append -% an _ character to NAME, to help avoid conflicts. And we append an `x' -% so that we don't redefine \_ on an empty label. -% -\begingroup - % Mike Spivak's MathTime macros for Times Roman fonts changes the - % catcode of _ to be active. Undo that. (From adam@symcom.math.uiuc.edu.) - \catcode`\_ = 8 - \gdef\xrlabel#1{#1_x}% -\endgroup -% -% -% \xrdef{LABEL} defines LABEL to be the current page number. But we -% don't define the label here, because the page number might be off: if -% this is not the first time through, the label would already be -% defined, and we would redefine it with the wrong information. -% -\def\xrdef#1{% - \begingroup - % Define hyperlink destination. - \hldest@impl{xrdef}{#1}% - % Define cross-reference but not hyperlink destination. - \begingroup - \@@hldestoff - \definexref{#1}{\noexpand\folio}{page}% - \endgroup - \endgroup -}% -% -% \definexref{LABEL}{DEFINITION}{CLASS} defines a cross-reference named -% LABEL of label class CLASS to be DEFINITION. (Or LABEL can be a -% control sequence; it's expanded to get the label text.) To get a -% possible page number right, we have to write the definition out to the -% auxiliary file, instead of only defining it directly. -% -\def\definexref#1#2#3{% - % Define a hyperlink destination LABEL. - \hldest@impl{definexref}{#1}% - % Remember what we're given; it might be `\@optionalarg', which - % \readauxfile trashes. (No loss of generality here, since \csname - % will fully expand the label anyway.) - \edef\temp{#1}% - % - % Be sure we've read the aux file before we zap it: - \readauxfile - % - % When we read in the aux file next time, define the label: - \edef\@wr{\noexpand\writeaux{\string\@definelabel{\temp}{#2}{#3}}}% - \@wr - \ignorespaces -}% -% -% \@definelabel{LABEL}{DEFINITION}{CLASS} actually defines LABEL of -% label class CLASS to be DEFINITION. -% -\def\@definelabel#1#2#3{% - % Define the control sequence. - \expandafter\gdef\csname\xrlabel{#1}\endcsname{#2}% - % - % Remember what kind of label this is, so \ref will know what to do. -% \global\setproperty{\xrlabel{#1}}{class}{#3}% - \setpropertyglobal{\xrlabel{#1}}{class}{#3}% -}% -% -% \reftie is used by several cross-referencing macros to separate -% optional text from label reference. \refspace is used by \ref to -% separate optional text from \CLASSword and by \xref to separate -% optional text from `p. '. -% -\def\reftie{\penalty\@M \ }% Do not rely on `~' being defined as a tie. -\let\refspace\ -% -% Typeset a reference to the label #1. If optional argument is -% present it will be tied with \reftie to the reference and become -% part of the hyperlink. -% -\def\xrefn{\@getoptionalarg\@finxrefn}% -\def\@finxrefn#1{% - % Hyperlink and optional TEXT. - \hlstart@impl{ref}{#1}% - \ifx\@optionalarg\empty \else - % Save \@optionalarg before it is trashed by \readauxfile. - \let\@xrefnoptarg\@optionalarg - % Read .aux file -- \@optionalarg may contain cross-references. - \readauxfile - % Typeset the \@optionalarg - {\@@hloff\@xrefnoptarg}\reftie - \fi - % Typeset the reference. - \plain@xrefn{#1}% - \hlend@impl{ref}% -}% -% This is equivalent to \xrefn but without the hyperlink stuff and the -% optional parameter so that its expansion does not contain the many -% \let's, \def's and such which the expansion of \xrefn contains. It -% is needed by \eqdefn and \eqsubdefn to be able to `cleanly' write -% texts of equation labels to .aux file. It is also used when -% functionality of \xrefn is needed without the hyperlink and the -% optional parameter. -\def\plain@xrefn#1{% - \readauxfile - % - \expandafter \ifx\csname\xrlabel{#1}\endcsname\relax - \if@citewarning - \message{\linenumber Undefined label `#1'.}% - \fi - % - % Give it a dummy definition, though, to stop multiple error messages. - \expandafter\def\csname\xrlabel{#1}\endcsname{% - `{\tt - \escapechar = -1 - \expandafter\string\csname#1\endcsname - }'% - }% - \fi - \csname\xrlabel{#1}\endcsname % Always produce something. -}% -% -% \refn is just a synonym. -% -\let\refn = \xrefn -% -% One common case: print `p. ' before the page number. -% -\def\xrefpageword{p.\thinspace}% -% -\def\xref{\@getoptionalarg\@finxref}% -\def\@finxref#1{% - % Hyperlink and optional TEXT. - \hlstart@impl{xref}{#1}% - \ifx\@optionalarg\empty \else - {\@@hloff\@optionalarg}\refspace - \fi - % Typeset page reference but omit hyperlink. - \xrefpageword\plain@xrefn{#1}% - \hlend@impl{xref}% -}% -% -% \ref[TEXT]{LABEL} typesets TEXT, \CLASSword for LABEL's class (if it's defined) -% and then does \refn on LABEL. But amstex also has a \ref, so tell the -% user if they try to use \ref and have loaded amsppt.sty. -% -% \refs{LABEL} is similar, but puts the letter `s' after the \...word, thus -% producing (for example) `Figures 1.2' (presumably to be followed by -% `and~\refn{fig-1.3}'). -% -% Note that \ref takes an optional TEXT, while \refs does not. This -% text (together with \CLASSword) will become part of the hyperlink -% generated by \ref. \refs does not include \CLASSword in the -% hyperlink. -% -\def\@maybewarnref{% - \ifundefined{amsppt.sty}% - % No amsppt.sty, so just use ours. - \else - \message{Warning: amsppt.sty and Eplain both define \string\ref. See - the Eplain manual.}% - % Remember their definition. - \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}% -% -% #1 is an integer flag which tells whether hyperlink should include -% \@optionalarg and class word (non-0) or not (0). #2 is the text to -% follow the \...word. Both #1 and #2 are supplied by the macros -% above. #3 comes from the document, and is the LABEL. -% -% \reftie separates \@optionalarg or \..word from \refn; \refspace -% separates \@optionalarg from \..word. -% -\def\@generalref#1#2#3{% - % Save \@optionalarg before it is trashed by \readauxfile. - \let\@generalrefoptarg\@optionalarg - \readauxfile - % Maybe start hyperlink here. - \ifcase#1 \else \hlstart@impl{ref}{#3}\fi - % Get the class of the label. - \edef\temp{\getproperty{\xrlabel{#3}}{class}}% - % If the word for this class is not defined, don't complain. - \expandafter\ifx\csname \temp word\endcsname\relax - % Produce \@optionalarg followed by a \reftie, if \@optionalarg is - % not empty. - \ifx\@generalrefoptarg\empty \else {\@@hloff\@generalrefoptarg\reftie}\fi - \else - \begingroup - \@@hloff - % Produce \@optionalarg, if not empty, followed by a \refspace. - \ifx\@generalrefoptarg\empty \else \@generalrefoptarg \refspace \fi - % Produce the word. - \csname \temp word\endcsname - % Add the suffix and then put in a \reftie before the \refn. - #2\reftie - \endgroup - \fi - % Maybe start hyperlink here. - \ifcase#1 \hlstart@impl{ref}{#3}\fi - % Typeset the reference omitting hyperlinks. - \plain@xrefn{#3}% - \hlend@impl{ref}% -}% -% -% -% References to equations are similar. -% -% \eqref{foo} produces ``()''. -% \eqdefn{foo} advances \eqnumber, resets \eqsubnumber, and defines -% `foo' to be the new number. -% \eqsubdefn{foo} advances \eqsubnumber and defines `foo'. \eqref works -% for both equations and subequations, -% \eqdef{foo} does \eqdefn, then inserts an \eqno and \eqref. -% \eqsubdef{foo} does \eqsubdefn, then what \eqdef does. -% -% The non-``sub'' macros also take an optional argument; if it's -% present, we use it as the text for the equation label, instead of the -% various counters. -% -% Because there are no page break issues with equations, we can -% immediately define the control sequence. But we also need to write -% the definition out, in case the user wants to forward reference an -% equation (bad style as that may be). -% -% The current equation number is in \eqnumber; we just advance it by one -% for each \eqdef. You can handle fancier equation numbers (e.g., ones -% that include a chapter number) by redefining \eqprint, below, and -% using your own counters. We do provide for one level of substructure, -% since that's more painful to implement than superstructures. -% -\newcount\eqnumber -\newcount\subeqnumber -% -% -% \eqdefn[TEXT]{LABEL} defines LABEL to be TEXT (if it's present), -% otherwise it advances \eqnumber and defines LABEL to be that. It -% doesn't produce anything. -% -\def\eqdefn{\@getoptionalarg\@fineqdefn}% -\def\@fineqdefn#1{% - \ifx\@optionalarg\empty - \global\advance\eqnumber by 1 - % We call \eqconstruct here instead of in \@eqdefn because we don't - % want to expand it for \eqsubdefn -- \eqsubdefn already includes an - % \eqrefn which includes the text of the label which was \eqconstructed. - \def\temp{\eqconstruct{\number\eqnumber}}% - \else - % In the next \def there is (I believe) a spurious \noexpand. - % I leave in the old definition, albeit commented out, in case the - % \noexpand really _is_ necessary. But I don't thikn so. Adam Lewenberg -% \def\temp{\noexpand\@optionalarg}% - \def\temp{\@optionalarg}% - \fi - % - % Always reset the current subequation number: - \global\subeqnumber = 0 - % - % Remember this label, so that we can define subequations: - \gdef\@currenteqlabel{#1}% - \toks0 = \expandafter{\@currenteqlabel}% - % - % Actually do the definition, replacing \xrefn and \eqrefn with - % \plain@xrefn and taking precautions not to expand \plain@xrefn - % in what we output to the aux file. \plain@xrefn expands to many things, - % including \count@'s and \edef's and the expansion of \xrlabel, and - % it's just a real mess. - \begingroup - \def\eqrefn{\noexpand\plain@xrefn}% - \def\xrefn{\noexpand\plain@xrefn}% - \edef\temp{\noexpand\@eqdefn{\the\toks0}{\temp}}% - \temp - \endgroup -}% -% -% -% \eqsubdefn defines its argument as a ``subequation'' of the last \eqdef. -% -\def\eqsubdefn#1{% - \global\advance\subeqnumber by 1 - \toks0 = {#1}% - % - % Get the text of the label; - \toks2 = \expandafter{\@currenteqlabel}% - % - % We must expand \@currenteqlabel. We have to not expand - % \eqsubreftext here, as well as \plain@xrefn (which we substitute - % for \eqrefn and \xrefn), since the first arg to \eqsubreftext - % could also include lots of complicated things. - \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 -}% -% -% \@eqdefn{LABEL}{REF-TEXT} actually handles the equation number -% definitions and writing to the aux file. -% -% In contrast to \xrdef, we define LABEL right away (as REF-TEXT). We -% can do this since we know right now what the right equation number is. -% This eliminates some unnecessary warning. It also lets the user put -% \eqdef{} on all equations and have it work, since then \eqref -% refers to the just-defined new value. -% -\def\@eqdefn#1#2{% - % Define hyperlink destination taking care of empty LABEL. - \hl@define@eqlabel{#1}% - \hldest@impl{eq}{\hl@eqlabel}% - % Define cross-reference but not hyperlink destination. - \begingroup - \@@hldestoff - \definexref{#1}{#2}{eq}% - \endgroup - % Define the LABEL. - \@definelabel{#1}{#2}{eq}% -}% -% -% \eqdef{LABEL} defines LABEL, with \eqdefn, then prints it. We allow -% an optional argument to explicitly specify the text which we define -% the label as. -% -\def\eqdef{\@getoptionalarg\@fineqdef}% -\def\@fineqdef{% - \toks0 = \expandafter{\@optionalarg}% - \edef\temp{\noexpand\@eqdef{\noexpand\eqdefn[\the\toks0]}}% - \temp -}% -% -% \eqsubdef is to \eqdef as \eqsubdefn is to \eqdefn. No optional -% argument allowed here. -% -\def\eqsubdef{\@eqdef\eqsubdefn}% -% -% \@eqdef{DEFN-CMD}{LABEL} defines LABEL, using DEFN-CMD. Then it -% inserts an \eqno (unless it's called when an \eqno would be invalid). -% Then it prints the newly-defined value using \eqprint. -% -\def\@eqdef#1#2{% - % Define the label but not hyperlink destination (we want to define - % the destination after \eqno). Note that \@eqdefn will call - % \hl@define@eqlabel{#2}, so we won't call it again (definintions in - % \hl@define@eqlabel must be global to survive past the group). - \begingroup - \@@hldestoff - #1{#2}% - \endgroup - % Define hyperlink destination and print the text. - \@maybedisableeqno - \eqno % \hl@define@eqlabel already called in \@eqdefn. - \hldest@impl{eq}{\hl@eqlabel}% - \let\@optionalarg\empty % \@fineqref will examine \@optionalarg. - {\@@hloff\@fineqref{#2}}% No hyperlink here. - \@mayberestoreeqno - \ignorespaces -}% -% -% -% If we are in an alignment or some other inner place, \eqno won't work. -% -\let\@mayberestoreeqno = \relax -% -\def\@maybedisableeqno{% - \ifinner - \global\let\eqno = \relax - \global\let\@mayberestoreeqno = \@restoreeqno - \fi -}% -% -% This makes `\eqno' mean \eqno again. -% -\let\@primitiveeqno = \eqno -\def\@restoreeqno{% - \global\let\eqno = \@primitiveeqno - \global\let\@mayberestoreeqno = \empty -}% -% -% -% \eqrefn[TEXT]{LABEL} produces the text for the equation label LABEL, or -% something suitable if LABEL is undefined. (It possibly issues a -% warning in the latter case as well.) TEXT followed by a \reftie is -% prepended to the equation text as part of the hyperlink. -% -\def\eqrefn{\@getoptionalarg\@fineqrefn}% -\def\@fineqrefn#1{% - \eqref@start{#1}% - % Typeset the equation reference but do not produce hyperlink. - \plain@xrefn{#1}% - \hlend -}% -% -% \eqref[TEXT]{LABEL} is the usual way to refer to equation labels; it -% calls \eqprint on the text of LABEL, prepending it with TEXT and a -% \reftie as part of the hyperlink. -% -\def\eqref{\@getoptionalarg\@fineqref}% -\def\@fineqref#1{% - \eqref@start{#1}% - % Typeset the equation reference but do not produce hyperlink. - \eqprint{\plain@xrefn{#1}}% - \hlend@impl{eq}% -}% -% Common code executed at the start of \@fineqrefn and \@fineqref. -\def\eqref@start#1{% - % Save \@optionalarg in case \phantomeqlabel is redefined by the - % user to something that trashes it. - \let\@eqrefoptarg\@optionalarg - % Hyperlink (fetch last `phantom' equation label if LABEL is empty). - \ifempty{#1}% - \hlstart@impl{eq}{\phantomeqlabel}% - \else - \hlstart@impl{eq}{#1}% - \fi - % Optional TEXT followed by a \reftie. - \ifx\@eqrefoptarg\empty \else - {\@@hloff\@eqrefoptarg\reftie}% - \fi -}% -% -% -% \eqconstruct{EQ-TEXT} constructs an equation number, i.e., the text to -% be defined as the value of a label. -% -\let\eqconstruct = \identity -% -% \eqprint{EQ-TEXT} produces the typeset equation number EQ-TEXT. -% -\def\eqprint#1{(#1)}% -% -% \eqsubreftext{EQ-TEXT}{SUBEQ-TEXT} produces the text of a subequation -% reference. (\eqprint is later called on the result of this to produce -% output for subequations; I didn't define any \subeqprint.) -% -\def\eqsubreftext#1#2{#1.#2}% -% -% -% -% Indexing. -% -% \defineindex{PREFIX} defines an index with ``prefix'' PREFIX. The -% prefix is used to construct the output filename and the various -% commands. We just define all the index commands for this index to -% call the general commands with PREFIX. -% -\let\extraidxcmdsuffixes = \empty -% -\outer\def\defineindex#1{% - \def\@idxprefix{#1}% - % - % Define the indexing commands for this prefix. - \for\@idxcmd:=,marked,submarked,name% - \extraidxcmdsuffixes\do - {% - \@defineindexcmd\@idxcmd - }% - % - % Allocate a stream for the output. - \ece\innernewwrite{@#1indexfile}% - % - % And a conditional to test whether we've opened the file. - \ece\innernewif{if@#1indexfileopened}% -}% -% -% -% \@defineindexcmd{SUFFIX} defines both silent and non-silent index -% command for prefix \@idxprefix with suffix SUFFIX. That is, we define -% both `\@idxprefix dxSUFFIX' and `\s\@idxprefix dxSUFFIX' to call the -% corresponding generic command with \@idxprefix. \silentindexentry is -% used to decide whether we should ignore following spaces. -% -\newif\ifsilentindexentry -% -\def\@defineindexcmd#1{% - \@defineoneindexcmd{s}{#1}\silentindexentrytrue - \@defineoneindexcmd{}{#1}\silentindexentryfalse -}% -% -% -% \@defineoneindexcmd{PREFIX}{SUFFIX}{PRECALL} does just one silent or -% non-silent commands. We define the command `\@@PREFIXidxSUFFIX' to do -% PRECALL, then define \@idxprefix, then call \@idxgetrange with an -% argument of `\@@{,s}idxSUFFIX'. (So far every indexing command -% should allow a range. If not, you could redefine `\@@{,s}idxSUFFIX' -% after this macro is called.) -% -\def\@defineoneindexcmd#1#2#3{% - \toks@ = {#3}% - \edef\temp{% - \def - % We have to restrict expansion because the generic (\@@...) - % commands will be defined after the first call to \defineindex. - % Not expanding the user (\idx...) commands is unnecessary unless - % the user has defined some new commands, but may as well be cautious. - \expandonce\csname#1\@idxprefix dx#2\endcsname % e.g., \idx or \sidxname. - {\def\noexpand\@idxprefix{\@idxprefix}% define \@idxprefix - % call, e.g., \@@idx or \@@sidxname: - \expandonce\csname @@#1idx#2\endcsname - }% - \def - \expandonce\csname @@#1idx#2\endcsname{% e.g., \@@idx - % First do PRECALL. - \the\toks@ - % Then call \@idxgetrange with, e.g., \@idx or \@sidxname as its arg. - \noexpand\@idxgetrange\expandonce\csname @#1idx#2\endcsname - }% - }% - \temp -}% -% -% -% \@idxwrite{TERM}{PAGENO} writes a general index entry for TERM on page -% PAGENO to the index file `\@idxprefix indexfile'. We open the stream -% as `\indexfilebasename.\@idxprefix dx' if it isn't already open. -% -\let\indexfilebasename = \jobname -% -\def\@idxwrite#1#2{% - % Be sure the file is opened. - \csname if@\@idxprefix indexfileopened\endcsname \else - \expandafter\immediate\openout\csname @\@idxprefix indexfile\endcsname = - \indexfilebasename.\@idxprefix dx - \expandafter\global\csname @\@idxprefix indexfileopenedtrue\endcsname - \fi - % - % Save the index term. - \def\temp{#1}% - % - % Write the index term and page number. - \edef\@wr{% - \expandafter\write\csname @\@idxprefix indexfile\endcsname{% - \string\indexentry - {\sanitize\temp}% - {\noexpand#2}% - }% - }% - \@wr - % - % Marginalize the index term, if desired. - % (the \allowhyphens allows `infinitesimal' in \sidx{Infinitesimal}infinitesimal - % to be hyphenated. - \ifindexproofing \insert\@indexproof{\indexproofterm{#1}}\allowhyphens\fi - % - % We just appended at least one non-discardable item (namely, the - % whatsit from the \write) to the current list. So in case glue comes - % next (not unlikely), be sure we don't inadvertently make that glue a - % valid breakpoint, if it wouldn't have been without us. - \hookrun{afterindexterm}% - % - % This is the end of the index entry processing. If this was a silent - % entry, ignore following spaces. - \ifsilentindexentry \expandafter\ignorespaces\fi -}% -% -% -% If this conditional is true, we output the index terms on the page -% where they occur. -\newif\ifindexproofing -% -% We need a new insertion class to collect the proofed terms. -\newinsert\@indexproof -\dimen\@indexproof = \maxdimen % No limit on number of terms. -\count\@indexproof = 0 \skip\@indexproof = 0pt % They take up no space. -% -% This actually typesets the proofed term. We don't go to any lengths -% to provide nice-looking output; since the term might have all kinds of -% weird characters in it, we just dump it in the smallest standard -% Computer Modern typewriter font. -% -% We put the term in an \hbox, even though that might make the output -% run off the page, since we don't really need to see all of it, and -% I think it's better to opt for simplicity -- one term per line. -\font\indexprooffont = cmtt8 -\def\indexproofterm#1{\hbox{\strut \indexprooffont #1}}% -% -% -% If \output doesn't use \makeheadline, or redefines it, it's up to the -% new \output to define index hyperlink destination and to call -% \indexproofunbox. -\let\@plainmakeheadline = \makeheadline -\def\makeheadline{% - % Define index page destination only when this `cross-reference' is defined. - \expandafter\ifx\csname\xrlabel{\idxpagexref{\folio}}\endcsname\relax \else - % Say \@@hldeston in case a page break happened at an unfortunate - % time when user said \hldestoff. - {\@@hldeston \hldest@impl{idx}{\hlidxpagelabel{\folio}}}% - \fi - \indexproofunbox - \@plainmakeheadline -}% -% -% We want to put the proof index terms in the margin, outside the -% printed area. So if \outsidemargin (for odd pages) and \insidemargin -% (for even pages) are undefined, we define them (both) to be the default -% TeX margin -- one inch + \hoffset. -\def\indexsetmargins{% - \ifx\undefined\outsidemargin - \dimen@ = 1truein - \advance\dimen@ by \hoffset - \edef\outsidemargin{\the\dimen@}% - \let\insidemargin = \outsidemargin - \fi -}% -% -% We always put the terms in the right-hand margin, so long terms run -% off the page, instead of into the text. -\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 -}% -% -% -% \@idxgetrange\CS parses an optional argument which, if present, should -% be either `begin' or `end', marking the beginning or ending of a range -% for the index entry. If we find this, we set the appropriate one of -% \@idxrangestr. Then we call \CS. -% -% If the optional argument is `see' or `seealso' we read another -% argument, namely, the entry to see. -% -\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% - \@getoptionalarg\@finidxgetopt -}% -\def\@finidxgetopt{% - \@hlidxencaptrue - % - \for\@idxarg:=\@optionalarg\do{% - % These are ordered by my guess at frequency of use. - \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 - }% - % Stick hyperlink encapsulator into \@idxpagemarkup. - \ifnum\hldest@place@idx < 0 \else - \if@hlidxencap - \ifx\@idxpagemarkup\relax - % Even when user gives no pagemarkup command, we still do - % insert our hyperlink encapsulator. - \let\@idxpagemarkup\empty - \fi - \ifcase\hldest@place@idx \relax - % \hldest@place@idx = 0, dests point to a page with a term. - \edef\@idxpagemarkup{hlidxpage{\@idxpagemarkup}}% - % We want to define index \hldest's only on those - % pages which contain at least one index term, so this - % `cross-reference' will tell \makeheadline on which pages to - % generate an \hldest. - {\@@hldestoff \definexref{\idxpagexref{\folio}}{}{}}% - \else - % \hldest@place@idx = 1, dests point to exact location of a term. - \global\advance\hlidxlabelnumber by 1 - \edef\@idxpagemarkup{hlidx{\hlidxlabel}{\@idxpagemarkup}}% - \hldest@impl{idx}{\hlidxlabel}% - \fi - \fi - \fi - % - \@afteridxgetrange -}% -% -% -% Check for a command of the form `pagemarkup=\cmd', and if found, set -% \@idxpagemarkup to `cmd'. -% -\def\@idxcheckpagemarkup#1=#2,{% - \def\temp{#1}% - \ifx\temp\idxpagemarkupcmdword - \if ,#2, % If #2 is empty, complain. - \errmessage{Missing markup command to `pagemarkup'}% - \else - % Remove a trailing =. - \def\temp##1={##1}% - \edef\@idxpagemarkup{\temp\string#2}% - \fi - \fi -}% -% -% -% \hlidxpage and \hlidx are hyperlink encapsulators for the two types -% of hyperlink destinations for index terms. -% -% \hldest@place@idx defines which type is selected. When defined to 0, -% we generate destinations pointing to the page on which the indexed -% term is located. When defined to 1, we generate destinations -% pointing to exact location of the indexed term. When negative, we -% generate no hyperlinks / destinations. -\def\hldest@place@idx{-1}% -% Name for a `cross-reference' which \makeheadline uses do decide on -% which pages to generate \hldest. -\def\idxpagexref#1{@@IDXPG@@#1}% -% Hyperlink labels for both types of destinations. -\newcount\hlidxlabelnumber -\def\hlidxlabel{IDX\the\hlidxlabelnumber}% -\def\hlidxpagelabel#1{IDXPG#1}% -% -% \hlidx{HYPERLINK-LABEL}{PAGEENCAP}{PAGESPEC} -\def\hlidx#1#2#3{% - \hlstart@impl{idx}{#1}% - \csname #2\endcsname{#3}% - \hlend@impl{idx}% -}% -% -% \hlidxpage{PAGEENCAP}{PAGESPEC} -% -% We expect PAGESPEC to be one of the following: -% 14 (single page number) -% 14, 15 (list of two consecutive page numbers) -% 14--15 (page range) -% -% If you configure MakeIndex to use different page list separator -% (delim_n parameter in .mst file) / different page range separator -% (delim_r parameter), you should call \setidxpagelistdelimiter / -% \setidxpagerangedelimiter to setup the new separators. -% -% In case of a single page number, we call \PAGEENCAP on the page -% number and turn the result into a hyperlink. -% -% In case of a two-page list, we break the list, call \PAGEENCAP on -% each of the page numbers separately, and turn each result into a -% hyperlink, producing page list separator between the page numbers. -% -% In case of a page range, we do not break the range, call \PAGEENCAP -% on the entire range and turn what results into a hyperlink for the -% first of the page numbers. -\def\hlidxpage#1#2{% - % Set \@idxpagei[i][ref] and \@idxpagesep - \@hlidxgetpages{#2}% - % Alias for \PAGEENCAP. - \expandafter\let\expandafter\@idxpageencap\csname #1\endcsname - % Now comes the first part, to be done in any of the three cases. - \hlstart@impl{idx}{\hlidxpagelabel{\@idxpageiref}}% - \expandafter\@idxpageencap\expandafter{\@idxpagei}% - \hlend@impl{idx}% - % The second part, to be done only if there is a second page number. - \ifx\@idxpageii\empty \else - \@idxpagesep - \hlstart@impl{idx}{\hlidxpagelabel{\@idxpageiiref}}% - \expandafter\@idxpageencap\expandafter{\@idxpageii}% - \hlend@impl{idx}% - \fi -}% -% -% This macro parses PAGESPEC parameter to \hlidxpage. It sets -% \@idxpagei to the first page number, \@idxpageii to the second (if -% present; if not, \@idxpageii will be set to \empty). For the first -% page number, use \@idxpageiref to construct hyperlink label; for -% the second page number, use \@idxpageiiref. Use \@idxpagesep to -% separate the two page numbers. -% -% NOTE: we use \@idxpagei[i], not \idxpagei[i], because the user may -% use \idxparselist / \idxparserange in his \PAGEENCAP, in which case -% our \idxpagei[i]'s will get garbled. -\def\@hlidxgetpages#1{% - % Try to parse a two-page list. - \idxparselist{#1}% - \ifx\idxpagei\empty - % It is not a two-page list, try page range. - \idxparserange{#1}% - \ifx\idxpagei\empty - % It is neither a two-page list nor a page range, so we assume - % it is a single page number. - \def\@idxpageiref{#1}% Label for \hlstart. - \else - % It is a page range. - \let\@idxpageiref\idxpagei % Label for \hlstart. - \fi - \def\@idxpagei{#1}% - \let\@idxpageii\empty - \else - % It is a two-page list. - \let\@idxpagei\idxpagei - \let\@idxpageii\idxpageii - \let\@idxpageiref\idxpagei % Label for \hlstart. - \let\@idxpageiiref\idxpageii % Label for \hlstart. - \let\@idxpagesep\idxpagelistdelimiter - \fi -}% -% -% Set up a macro \@idxparselist and user-accessible \idxparselist for -% parsing two-page list. Takes list separator (which is saved in -% \idxpagelistdelimiter). If the list is found, \@idxparselist will -% set \idxpagei to the first page number, \idxpageii to the second; -% if not found, it will set \idxpagei to \empty (this implies that -% the list's first page number should never be empty). -\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\@@}% -}% -% -% Same as previous, but \@idxparserange and \idxparserange will parse -% page range, range separator is saved in \idxpagerangedelimiter. -\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\@@}% -}% -% -% Set up the default delimiters. -\setidxpagelistdelimiter{, }% -\setidxpagerangedelimiter{--}% -% -% -% \@idxtokscollect uses \@idxmaintoks as the token list for the main -% part of an index entry and \@idxsubtoks for the subpart. Then it -% calls \@idxwrite. -% -\def\idxsubentryseparator{!}% -\def\idxencapoperator{|}% -\def\idxmaxpagenum{99999}% -% -\newtoks\@idxmaintoks -\newtoks\@idxsubtoks -% -\def\@idxtokscollect{% - % Remember the subentry. - \edef\temp{\the\@idxsubtoks}% - % - % We want to expand the conditions, but not the terms. The index - % entry starts simply with \@idxmaintoks and \@idxsubtoks. - \edef\@indexentry{% - \the\@idxmaintoks - \ifx\temp\empty\else \idxsubentryseparator\the\@idxsubtoks \fi - \@idxrangestr - }% - % - % If this is a `see' or `see also' entry, we need to read one more - % arg. We use a giant page number so the entry will be last (for the - % benefit of `see also's). MakeIndex rejects page numbers >=1000. - % - \if@idxsee - \@idxseefalse % Reset so the next term won't be a `see'. - \edef\temp{\noexpand\@finidxtokscollect{\idxmaxpagenum}}% - \else - \def\temp{\@finfinidxtokscollect\folio}% - \fi - \temp -}% -% -% -% \@finidxtokscollect{PAGENO}{REAL-TERM} reads the final term for -% see/see also entries. We do not check if the person has put both a -% range and a see in the same index term (which will confuse makeindex). -% -\def\@finidxtokscollect#1#2{% - \def\@idxseenterm{#2}% - \@finfinidxtokscollect{#1}% -}% -% -% \@finfinidxtokscollect{PAGENO} writes \@indexentry for page PAGENO. -% Besides \@indexentry, if \@idxpagemarkup is not \relax we output an -% index entry \@indexentry|\@idxpagemarkup{PAGENO} (but omitting | if -% this is a range term, because in that case | will have been added -% together with \@idxrangestr in \@idxtokscollect). And if -% \@idxseenterm is not \relax we output {\@idxseenterm} after the -% \@idxpagemarkup. (This will become an argument to the ``markup'' -% command, which will be \indexsee or \indexseealso.) -% -\def\@finfinidxtokscollect#1{% - % If we've got a page markup command, append it. - \ifx\@idxpagemarkup\relax \else - \toks@ = \expandafter{\@indexentry}% - \edef\@indexentry{% - \the\toks@ - % Add | only if this is not a range term, otherwise | has - % already been added with \@idxrangestr by \@idxtokscollect. - \ifx\@idxrangestr\empty \idxencapoperator \fi - \@idxpagemarkup - }% - \let\@idxpagemarkup = \relax - \fi - % - % If we've got an argument to the ``page markup'' command, append it. - \ifx\@idxseenterm\relax \else - \toks@ = \expandafter{\@indexentry}% - \edef\@indexentry{\the\toks@{\sanitize\@idxseenterm}}% - \let\@idxseenterm = \relax - \fi - % - % Finally, write what we've constructed. - \expandafter\@idxwrite\expandafter{\@indexentry}{#1}% -}% -% -% -% \@idxcollect{MAIN}{SUB} sets up the token registers -% \@idx{main,sub}toks, then calls \@idxtokscollect. This is convenient -% for some of the macros below. -% -\def\@idxcollect#1#2{% - \@idxmaintoks = {#1}% - \@idxsubtoks = {#2}% - \@idxtokscollect -}% -% -% -% Following are the TeX macros that correspond to the commands -% that actually appear in the document. -% -% \@idx{TERM} produces TERM in the output and then makes the index entry -% for TERM as usual. We don't allow a [SUBTERM] here since then we -% would lose spaces after the command, which would be very inconvenient. -% -% As with all our index commands, we've already defined \@idxprefix (in -% \idx or whatever), to save passing it around, and we've looked for a -% range argument before TERM. -% -\def\@idx#1{% - #1% Produce TERM as output. - \@idxcollect{#1}{}% -}% -% -% \@sidx{TERM}[SUBTERM] produces an index entry TERM and no output. If -% SUBTERM is present, this is a subentry. (At the moment, I don't -% provide for subsubentries, since I've never needed that.) -% -\def\@sidx#1{\@idxmaintoks = {#1}\@getoptionalarg\@finsidx}% -\def\@finsidx{% - \@idxsubtoks = \expandafter{\@optionalarg}% - \@idxtokscollect -}% -% -% -% \@idxconstructmarked{TOKS-REG}\CS{TERM} -% -\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. - % - % Construct TERM@\CS{TERM} as the string to write. - \edef\temp{\the\toks2 \idxsortkeysep \the\toks@{\the\toks2}}% - % - % Save it in TOKS-REG. - #1 = \expandafter{\temp}% -}% -% -% -% \@idxmarked\CS{TERM} outputs \CS{TERM} and then calls the main part of -% \@sidxmarked. -% -\def\@idxmarked#1#2{% - #1{#2}% Produce \CS{TERM} as output. - \@idxconstructmarked\@idxmaintoks{#1}{#2}% - \@idxsubtoks = {}% - \@idxtokscollect -}% -% -% \@sidxmarked\CS{TERM}[SUBTERM] outputs an index entry sorted by TERM -% but producing \CS{TERM}. -% -\def\@sidxmarked#1#2{% - \@idxconstructmarked\toks@{#1}{#2}% - \edef\temp{{\the\toks@}}% - \expandafter\@sidx\temp -}% -% -% -% \@idxsubmarked{TERM}\CS{SUBTERM} is like \@idxmarked, except that it's -% SUBTERM that's marked instead of TERM. -% -\def\@idxsubmarked#1#2#3{% - #1 #2{#3}% produce `TERM \CS{SUBTERM} as output. - \@sidxsubmarked{#1}{#2}{#3}% -}% -% -% \@sidxsubmarked{TERM}\CS{SUBTERM} is to \@sidxmarked as \@idxsubmarked -% is to \@idxmarked. -% -\def\@sidxsubmarked#1#2#3{% - \@idxmaintoks = {#1}% - \@idxconstructmarked\@idxsubtoks{#2}{#3}% - \@idxtokscollect -}% -% -% -% \@idxcollectname{FIRST}{LAST} puts `LAST, FIRST' into \temp. (Well, -% we use \idxnameseparator instead of hardwiring `, '.) If FIRST is -% empty, don't include the separator. -% -\def\idxnameseparator{, }% as in `Tachikawa, Elizabeth' -% -\def\@idxcollectname#1#2{% - \def\temp{#1}% - \ifx\temp\empty - \toks@ = {}% - \else - \toks@ = {\idxnameseparator #1}% - \fi - \toks2 = {#2}% - % - \edef\temp{\the\toks2 \the\toks@}% -}% -% -% -% \@idxname{FIRST}{LAST} also produces `FIRST LAST' in the output and an -% index entry for `LAST, FIRST'. -% -\def\@idxname#1#2{% - #1 #2% Separate the names by a space in the output. - \@idxcollectname{#1}{#2}% - \expandafter\@idxcollect\expandafter{\temp}{}% -}% -% -% \@sidxname{FIRST}{LAST}[SUBTERM] is to \@sidx as \@idxname is to -% \@idx. -% -\def\@sidxname#1#2{% - \@idxcollectname{#1}{#2}% - \expandafter\@sidx\expandafter{\temp}% -}% -% -% -% Now we come to actually producing the index, i.e., implementing the -% formatting commands that MakeIndex outputs. -% -% \readindexfile is responsible for formatting and printing the index. -% It reads \indexfilebasename.ind. We implement the same commands that -% LaTeX does. I suppose we could allow for different indices having -% different basenames, but I can't imagine when that would be useful. -% -\let\indexfonts = \relax -% -\def\readindexfile#1{% - \edef\@idxprefix{#1}% - % - % Does the output file exist? - \testfileexistence[\indexfilebasename]{\@idxprefix nd}% - \iffileexists \begingroup - % If no \begin or \end, define them. The argument will be `{theindex}'. - \ifx\begin\undefined - \def\begin##1{\@beginindex}% - \let\end = \@gobble - \fi - % - % Read the file: - \input \indexfilebasename.\@idxprefix nd - % - % \doublecolumns isn't affected by groups. - \singlecolumn - \endgroup - \else - \message{No index file \indexfilebasename.\@idxprefix nd.}% - \fi -}% -% -% Here's the default for `\begin{theindex}', if \begin isn't defined. -\def\@beginindex{% - % Define the commands MakeIndex outputs. - \let\item = \@indexitem - \let\subitem = \@indexsubitem - \let\subsubitem = \@indexsubsubitem - % - % Set up the default formatting: - \indexfonts - \doublecolumns - \parindent = 0pt - % - % Let the user override the defaults. - \hookrun{beginindex}% -}% -% -% MakeIndex puts \indexspace between groups in the ind file. -\let\indexspace = \bigbreak -% -% You can make \afterindexterm appear after the term and before the -% first page with the following in the ist file: -% delim_0 "\\afterindexterm " -% delim_1 "\\afterindexterm " -% delim_2 "\\afterindexterm " -\let\afterindexterm = \quad -% -% -% Top-level index entries start with \item. -\newskip\aboveindexitemskipamount \aboveindexitemskipamount = 0pt plus2pt -\def\aboveindexitemskip{\vskip\aboveindexitemskipamount}% -% -\def\@indexitem{\begingroup - \@indexitemsetup - \leftskip = 0pt - \aboveindexitemskip - \penalty-100 % Encourage page breaks before items. - % - % But forbid page breaks after items, in case a subitem follows. - \def\par{\endgraf\endgroup\nobreak}% -}% -% -% Secondary index entries. -\def\@indexsubitem{% - \@indexitemsetup - \leftskip = 1em -}% -% -% And tertiary entries. -\def\@indexsubsubitem{% - \@indexitemsetup - \leftskip = 2em -}% -% -% Common setup for the formatting. -\def\@indexitemsetup{% - \par - \hangindent = 1em - \raggedright - \hyphenpenalty = 10000 - \hookrun{indexitem}% -}% -% -% -% \indexsee{TERM}{PAGENO} ignores PAGENO, and says `see TERM'. -\def\seevariant{\it}% -\def\indexseeword{see}% -\def\indexsee#1#2{{\seevariant \indexseeword\/ }#1}% -% -% \indexseealso{TERM}{PAGENO} is similar. -\def\indexseealsowords{see also}% -\def\indexseealso#1#2{{\seevariant \indexseealsowords\/ }#1}% -% -% -% We provide one index by default; commands are \idx, \sidx, etc. -\defineindex{i}% -% -% -% -% Justification of multiple input lines. -% -% You use these by saying -% {\flushright -% -% } -% -% and similarly for \flushleft and \center. The command must be -% embedded in a group. The lines are set in paragraphs as usual, i.e., -% blank lines start a new paragraph (by virtue of the -% \blanklineskipamount vertical glue being inserted). -% -% \environment ... \endenvironment isn't appropriate in this case, since -% these ``environments'' can't be nested. -% -\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 % - }% - % - % We do this before starting any of the justification commands. - \gdef\@startjustify{% - \parskip = 0pt - \catcode`\^^M = \active % - \def^^M{\futurelet\next\@finjustifyreturn}% - % - % \@eateol is called at the beginning of each justified paragraph. - \def\@eateol##1^^M{% - \def\temp{##1}% - \@firstlinejustifyaction % - \ifx\temp\empty\else \temp^^M\fi % - }% - \expandafter\aftergroup\@endjustifycmd % - \checkenv \environmenttrue % - \par\noindent % - \@eateol % - }% - % - % If the next thing is a ^^M, insert \blanklineskipamount glue. Then - % do \@eoljustifyaction (which each justification command defines). - \gdef\@finjustifyreturn{% - \@eoljustifyaction % - \ifx\next^^M% - % Insert extra glue when the \@end... command does the \par. - \def\par{\endgraf\vskip\blanklineskipamount \global\let\par = \endgraf}% - \@endjustifycmd % - % Get back into horizontal mode for the next line. - \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 - % 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 plus1fil \par}\ignorespaces -}% -% -% -% -% Automatically-columnated tables. -% -% \makecolumns N/K: organizes the entries on the following N lines into -% K columns. If N is too small, some text beyond the end of the table -% will be incorporated into the table, probably producing an error -% message. If N is too large, some of the entries will appear after the -% table, probably looking very out of place. -% -% You can adjust the position of the table on the page by changing -% \parindent (space to the left of the block) and \hsize (distance from -% the left margin to the right of the block). (No doubt inside a -% group.) And you can allow a page break above the valign by changing -% \abovecolumnspenalty. -% -\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 -% -% The space matches an end-of-line that will probably be there. -% -\def\makecolumns#1/#2: {\par \begingroup - % Set \@columndepth to the number of items we will put in a column: - % ceiling(N/K), i.e. (N - 1) / K + 1. - \@columndepth = #1 - \advance\@columndepth by -1 - \divide \@columndepth by #2 - \advance\@columndepth by 1 - \@linestogoincolumn = \@columndepth - \@linestogo = #1 - % - % We start in the first column. - \currentcolumn = 1 - % - \def\@endcolumnactions{% - \ifnum \@linestogo<2 - \the\crtok \egroup \endgroup \par % End \valign and \makecolumns. - \else - % We've done one more line out of the total. - \global\advance\@linestogo by -1 - % - % How many left in the column? - % - \ifnum\@linestogoincolumn<2 - % End this column, that was the last line. - \global\advance\currentcolumn by 1 - \global\@linestogoincolumn = \@columndepth - \the\crtok - \else - % Still got more lines to go. - &\global\advance\@linestogoincolumn by -1 - \fi - \fi - }% - % - % Set up to read the table. - % - \makeactive\^^M - \letreturn \@endcolumnactions - % - % Figure out how wide our columns are going to be; each column has - % exactly the same template, so we can use the feature described on - % p.241 of the TeXbook for repeating preambles. - % - \@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 - % - % The next end-of-line starts everything going. -}% -% -% -% -% \numberedfootnote is like plain TeX's \footnote, but automatically -% numbered. When you want to reset the footnote number, say -% \footnotenumber = 0. -% -% We also provide for more general formatting than \footnote: -% \footnotemarkseparation is the space between the reference mark and -% the footnote text; -% \interfootnoteskip is the space between footnotes; -% \everyfootnote is expanded just before we typeset the footnote. -% -% The dimensions of the footnote rule are controlled by -% \footnoterulewidth and \footnoteruleheight (the depth is always zero); -% the space after the rule is \belowfootnoterulespace. -% -\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 -% Hyperlink labels for forward and back references. -\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 - % Even if typesetting in multicolumns, do footnotes in normal page width. - % (We don't have any provision in the output routine for having - % footnotes per column, anyway.) - \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}$}% -}% -% -% -% -% Margins. -% -% TeX's primitives determine the type area. But some users prefer to -% think in terms of margins. These definitions allow one to say, for -% example, `\topmargin = 2in', instead of `\voffset=1in\advance\vsize by -% -1in'. Constructions like `\advance\topmargin by 1in' give an error -% message, though, since \topmargin is not a parameter. Instead, the -% macro \advancetopmargin has to be used. -% -\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@ -}% -% -% Find the current bottom margin, putting the result in \dimen2. -% -\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@ -}% -% -% Find the current right margin, putting the result in \dimen2. -% -\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. -}% -% -% There is a potential problem when using the margin macros at a true -% dimension and then calling \magnification. So we redefine -% \magnification to address this. -% -\let\@plainm@g = \m@g -\def\m@g{\@plainm@g \paperwidth = 8.5 true in \paperheight = 11 true in}% -% -% -% -% Double column output. -% -% \doublecolumns begins double column output. It can be called -% in the midst of a page. \singlecolumn restores single column -% output. (It would be wrong to require \enddoublecolumns, because -% often one wants double column mode to continue to the end of -% the document.) -% -% The basic approach is that of Appendix E of the TeXbook, p.417. -% David Guichard made significant improvements to my original implementation. -% -% The glue here (the default is intended to be one linespace) is inserted -% before double columns start, and after they end. -% -\newskip\abovecolumnskip \abovecolumnskip = \bigskipamount -\newskip\belowcolumnskip \belowcolumnskip = \bigskipamount -% -% Space between the columns. It can be changed as desired. -\newdimen\gutter \gutter = 2pc -% -% These registers are needed for dealing with switching back and forth. -\newbox\@partialpage -\newdimen\@normalhsize -\newdimen\@normalvsize % The original (before multi-columns) \vsize. -\newtoks\previousoutput -% -% Some synonymous ways to refer to multiple column modes. -\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 -% -% Set this by default so \vfootnote can unconditionally inspect it. -\chardef\@numcolumns = 1 -% -\mathchardef\@ejectpartialpenalty = 10141 -% -% -% \@columns: Start typesetting with #1 columns. -% -% Before we actually start, we have to make sure that there are at least -\chardef\@col@minlines = 3 -% free lines. -% (It could be 2, or even 1, but it might give ugly results; at least one -% line is absolutely necessary, or the output routine might get confused.) -% We have to be careful, so that eg. -% \hbox{TITLE} -% \nobreak -% \doublecolumns -% won't break between the title and the start of the columned output. -% -% To achieve this, we add vskip of fixed size equal to -% @col@minlines * baselineskip -% and then eject the page. -% The output routine then catches the pages ejected: -% 1) if it's a normal page, it is processed by previous output routine; -% 2) if it's the last one, it is saved and the added skip is removed. -% -% When the box is processed according to 1), an underfull vbox can appear, -% but it's not our problem, the manuscript (or it's macros) has to be fixed. -% -% Another note: all assignments are global; it is not possible to call -% \doublecolumns in a group. -% -\def\@columns#1{% - \@ndcolumns - % - \global\let\@ndcolumns = \@endcolumns - \global\chardef\@numcolumns = #1 - \global\previousoutput = \expandafter{\the\output}% - % - % Grab the page so far (i.e., the material BEFORE \@columns was called) - % and save it in \@partialpage. - \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 - % now execute the output routine: - \penalty -\@ejectpartialpenalty - % - % Reset \output to prepare for the first real page break. - \global\output = {\@columnoutput}% - % - \global\@normalhsize = \hsize - \global\@normalvsize = \vsize - % - % Figure out how wide the columns should be -- for n columns, - % decrement by n - 1 gutters. - \count@ = \@numcolumns - \advance\count@ by -1 - \global\advance\hsize by -\count@\gutter - \global\divide\hsize by \@numcolumns - % - % Compute \vsize based on what's already on the page - % and the number of columns. Also change the mag factor for insertions. - % - \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 -}% -% -% When this is invoked box 255 contains just the right amount of -% material, whether triggered by an output routine or a change in the -% number of columns. Because columns have to contain an integral number -% of lines of type, we take a bit of care with balancing the heights of -% the columns to prevent either losing material or having a very short -% last column. -% -% When a page ends due to \bye or \eject, box 255 will contain lots of -% white space, so the columns will not look balanced. To fix this use -% \singlecolumn before ending the page. -% -% [gutterbox material added by AHL on 5 November 1997.] -% \gutterbox is a hook to enable the placement of arbitrary vertical -% material in the gutter between columns. For example, to put a -% vertical line between the columns you could say -% -% \def\gutterbox{\vbox to \dimen0{\vfil\hbox{\vrule height\dimen0}\vfil}}% -% -% The dimension counter \dimen0 contains the height of the column. -% -% By default, we define \gutterbox to be "empty": -\def\gutterbox{\vbox to \dimen0{\vfil\hbox{\hfil}\vfil}}% -% -% [This next paragraph added by AHL on 22 Sep 1996.] -% There is a special case we have to worry about, namely when we -% switch from multiple columns to single columns. In this case, we may -% have a bit of text left over that doesn't fit evenly into the -% multiple columns. In that case, we will have un-even columns. Not a -% pretty solution, but I don't have a better one at the moment. The -% conditional \if@forceextraline tests whether we are in this case. -% -\newif\if@forceextraline\@forceextralinefalse -\def\@columnsplit{% - \splittopskip = \topskip - \splitmaxdepth = \baselineskip - % - % \dimen@ will be the height that the double-column material on this - % page should have, i.e., the height of the page (\singlecolumvsize) - % minus single-column material, which includes insertions. (If you - % want your insertions to respect the columns, you will have to - % change the output routine.) If you add more insertions, they - % should be taken into account both here and in \singlecolumn. - % - % Unfortunately, we lose on flexible glue because we must - % \vsplit to a . - \dimen@ = \ht255 - \divide\dimen@ by \@numcolumns - % - % If we are in an end-column mode and we need extra vertical space - % in the last column, advance \dimen@. - \if@forceextraline - \advance\dimen@ by \baselineskip - \fi - % - % Split the long scroll into columns. - \begingroup - % We do not want to see underfull \vbox messages unless the final - % page is underfull. - \vbadness = 10000 - % - % The first (leftmost) column. - \global\setbox1 = \vsplit255 to \dimen@ \global\wd1 = \hsize - % - % The second column. - \global\setbox3 = \vsplit255 to \dimen@ \global\wd3 = \hsize - % - \ifnum\@numcolumns > 2 - % The third column, if requested. - \global\setbox5 = \vsplit255 to \dimen@ \global\wd5 = \hsize - \fi - \ifnum\@numcolumns > 3 - % The fourth column, likewise if requested. - \global\setbox7 = \vsplit255 to \dimen@ \global\wd7 = \hsize - \fi - \endgroup - \if@forceextraline % If this is the first time - \else % through, save the single - \setbox\@forcelinebox=\copy\@partialpage % column material. - \fi - % - % Set up \box255 with the real output page, as the previous output - % routine expects. - \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 - }% - % - % Save what's left over in a private register before calling their - % output routine. - \setbox\@partialpage = \box0 -}% -% -% Our output routine splits the columns and then calls the previous one. -% -\def\@columnoutput{% - \@columnsplit - \@recoverclubpenalty - \hsize = \@normalhsize % Local to \output's group. - \vsize = \@normalvsize - \the\previousoutput - % - % Put back what didn't fit. - \unvbox\@partialpage - \penalty\outputpenalty - % - % The correct vsize is the original vsize times the - % number of columns. - \global\vsize = \@numcolumns\@normalvsize -}% -% -% Go back to single-column typesetting. Assume \doublecolumns has -% been called. -% -\def\singlecolumn{% - \@ndcolumns - \chardef\@numcolumns = 1 - \vskip\belowcolumnskip - \nointerlineskip -}% -% -\newbox\@forcelinebox -\def\@endcolumns{% - \global\let\@ndcolumns = \relax - \par % Shouldn't start in horizontal mode. - % - \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\setbox255 = \copy2 % Retrieve what the fake \output set. - % - % \box255 now has the double-column material. On the page where we - % switch back to one column, the double-column material might not - % fill up the page. We want to split whatever is there. - \@columnsplit - % - % Check that \@columnsplit did not leave any lines in - % \@partialpage. If it did, do it again, but this time with longer - % columns. - \ifvoid\@partialpage - \else % There is some left-over. - \setbox0=\box\@partialpage % Merely to void \@partialpage - \global\setbox255 = \box2 % Retrieve what the fake \output set. - \@forceextralinetrue % Add \forcelinebox to \box255 to save single - \@columnsplit % column material. - \global\setbox255 = \vbox{\box\@forcelinebox\box255}% - \fi - - \global\vsize = \@normalvsize - \global\hsize = \@normalhsize - \global\output = \expandafter{\the\previousoutput}% - % - \ifvoid\topins\else\topinsert\unvbox\topins\endinsert\fi - \unvbox255 -}% -% [\columnfill] -% We don't have any way to force a column eject, since the \output -% routine is only prepared to split up a full page of material. Instead, -% we provide the following as a guess at enough space to fill up the -% current column. -% -% [April 30, 1998] This definition is from -% Helmut Jarausch with some -% modifications by A. Lewenberg . -% -% Here is the main difficulty: when \vsplitting the long page into the -% component columns, \vsplit prepends to the top of each column glue -% in the amount \topskip - (height of top box). But this happens -% in the output routine _after_ the \columnfill does its -% calculations. The result of this is that if we are not careful -% \columnfill will insert too much space attempting to ``eject'' the -% current column. There is no simple way around this, so what I have -% done is have is make \columnfill insert less space than needed, and -% then not allow any \club lines by setting \clubpenalty to its -% maximum value. Not a pretty solution, but until something better -% comes along, it will have to do. -% -\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 set so far. - \temp@dimen = \vsize % = \@numcolumns * columnheight - \divide\temp@dimen by \@numcolumns % find out column height - \loop - \ifdim \dimen@ > \temp@dimen - \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 - \nointerlineskip - \par - \nointerlineskip - \penalty0\vfil % To allow a page break here. - \relax -}% -% -% -% -% Hypertext links support. -% -% Hyperlink destinations (driver-independent code). -% -% \hldest{TYPE}{OPTIONS}{LABEL} defines a hyperlink destination -% LABEL. OPTIONS is a comma-separated list of option assignments of -% the form `opt=value'; permitted values for TYPE and OPTIONS depend -% on selected hyperlink driver. -% -% \hldest will be \let to \@hldest by \enablehyperlinks. TYPE, -% OPTIONS and LABEL will be read by \hl@getparam. -\def\@hldest{% - \def\hl@prefix{hldest}% - \let\after@hl@getparam\hldest@aftergetparam - % Start the group which will isolate option settings. It will be - % ended in \hldest@aftergetparam - \begingroup - \hl@getparam -}% -% This actually produces hyperlink destination. It will be called at -% the end of \hl@getparam, after the parameters are parsed. -\def\hldest@aftergetparam{% - \ifvmode - % In vertical mode we don't raise the destination, so it can go - % directly into the vertical list. - \hldest@driver - \else - % In horizontal mode, the destination is raised \hldest@opt@raise - % above the baseline and placed inside a zero-width/height/depth - % box; the box is surrounded by \allowhyphens in case it is - % placed next to a word, to allow hyphenation of that word. - \allowhyphens - \smash{\ifx\hldest@opt@raise\empty \else \raise\hldest@opt@raise\fi - \hbox{\hldest@driver}}% - \allowhyphens - \fi - % End the group which was isolating option settings (it was started - % in \@hldest). - \endgroup -}% -% -% Hyperlinks (driver-independent code). -% -% \hlstart{TYPE}{OPTIONS}{LABEL} starts a hyperlink to destination -% LABEL. OPTIONS is a comma-separated list of option assignments of -% the form `opt=value'; permitted values of TYPE and OPTIONS depend on -% selected hyperlink driver. End the link with \hlend. -% -% \hlstart will be \let to \@hlstart by \enablehyperlinks. TYPE, -% OPTIONS and LABEL will be read by \hl@getparam. -\def\@hlstart{% - \leavevmode - \def\hl@prefix{hl}% - \let\after@hl@getparam\hlstart@aftergetparam - % Start the group which will isolate option settings and color - % changes. It will be ended in \@hlend - \begingroup - \hl@getparam -}% -% -\def\hlstart@aftergetparam{% - % Set the color for the link. - \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 - % Call the driver. - \hl@driver -}% -% \hlend will be \let to \@hlend by \enablehyperlinks. \@hlend will -% be defined by a driver. -% -% Macros which are used commonly by \hldest and \hlstart to parse and -% save parameters. \hl@prefix must be set to `hldest' by \hldest and -% to `hl' by \hlstart. -% -% \hl@getparam{TYPE}{OPTIONS}{LABEL} reads, parses and saves the -% parameters for \hldest or \hlstart into \@hltype, \hl[dest]@opt@... -% and \@hllabel. After doing that it calls \after@hl@getparam which -% should be defined by \@hldest and \@hlstart to produce destination / -% link using the saved parameters. -\def\hl@getparam#1#2#3{% - % Save TYPE in \@hltype (use default if empty). - \edef\@hltype{#1}% - \ifx\@hltype\empty - \expandafter\let\expandafter\@hltype - \csname \hl@prefix @type\endcsname - \fi - % For each supported destination / link type TYPE, a driver should - % define \hl[dest]@typeh@TYPE handler. - \expandafter\ifx\csname \hl@prefix @typeh@\@hltype\endcsname \relax - \errmessage{Invalid type `\@hltype'}% - \fi - % \for will expand #2 once so user can pass a shortcut macro. We - % also ignore empty \hl@arg, so that the following - % \hldest{TYPE}{\myopt,height=200pt}{LABEL} - % would be legal even when \myopt happens to be empty. - \for\hl@arg:=#2\do{% - \ifx\hl@arg\empty \else - \expandafter\hl@set@opt\hl@arg=,% - \fi - }% - % Save LABEL in \@hllabel. - \edef\@hllabel{#3}% - % Execute the commands specific to destination / link - \after@hl@getparam - % Ignore spaces after \hlstart and \hldest. - \ignorespaces -}% -% Parse and set a (default, not a group) option. -\def\hl@set@opt#1=#2,{% - % For each supported option OPTION, a driver should define - % \hl[dest]@opt@OPTION. - \expandafter\ifx\csname \hl@prefix @opt@#1\endcsname \relax - \errmessage{Invalid option `#1'}% - \fi - % Save the value of the option. - \if ,#2, % if #2 is empty, complain. - \errmessage{Missing value for option `#1'}% - \else - % Remove a trailing =. - \def\temp##1={##1}% - \expandafter\edef\csname \hl@prefix @opt@#1\endcsname{\temp#2}% - \fi -}% -% \hl{dest,start,end}@impl{GROUP}{LABEL} will generate `implicit' destination / -% hyperlink, if the user has not turned off this kind of implicit -% destinations / hyperlinks. This is used by Eplain's cross-reference -% macros. -\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 - % Still produce \leavevmode, to be consistent with \hloff. - \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 -}% -% -% Setting options and types. -% -\def\hl@asterisk@word{*}% -\def\hl@opts@word{opts}% -\newif\if@params@override -% We define hyperlink / destination groups. A group is a macro or a -% group of macros which implicitly generate hyperlink / destination. -% The user can set parameters for each group individually, as well as -% the default parameters, with the macros defined below. Group -% settings will override the default hyperlink / destination -% parameters. -\def\hldest@groups{definexref,xrdef,li,eq,bib,foot,footback,idx}% -\def\hl@groups{ref,xref,eq,cite,foot,footback,idx,url}% -% \hldesttype [GROUPS]{VALUE} -% \hldestopts [GROUPS]{VALUE} -% \hltype [GROUPS]{VALUE} -% \hlopts [GROUPS]{VALUE} -% -% Set hyperlink or destination parameter (type / opts) to VALUE for -% each group in GROUPS. An empty `group' will set default value for -% the parameter. A star (*) `group' stands for all groups (exept the -% empty `group'). If the macro is followed by an exclamation mark -% (like \hlopts!...), the parameters will be overridden; otherwise, -% they will be updated (this has effect only on group option list). -\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 -}% -% Set the parameter \hl@param to #1 for each group in \@optionalarg. -\def\hl@setparam#1{% - \ifx\@optionalarg\empty - \hl@setparam@default{#1}% Set default. - \else - % If we find an asterisk in the list, we have no choice but to - % finish the list and then call \hl@setparam again, now with - % \hl@all@groups for the list of groups. - \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 -}% -% Set a parameter (\hl@param) for one group (\hl@group) to the value -% (#1). The group may be empty, in which case we call -% \hl@setparam@default -\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 parameter `\hl@prefix:\hl@param:\hl@group' is not defined}% - \fi - \ifx\hl@param\hl@opts@word - % For the `opts' parameter, we want to expand the first token of - % #1 once, in case the user passed a macro containing the option - % list. We may need to either simply override the old option - % list, or to update it with the new option settings. - \if@params@override - \toks@=\expandafter{#1}% - \ece\edef{\hl@prefix @\hl@param @\hl@group}{\the\toks@}% - \else - \hl@update@opts@with@list{#1}% #1 will be used in the \for - % loop, so it will be expanded once. - \fi - \else - % Do not use \edef here to define the parameter, so the user can - % define it to, e.g., \normalbaselineskip, and make the parameter - % adjustable to a situation. - \ece\def{\hl@prefix @\hl@param @\hl@group}{#1}% - \fi - \fi -}% -% Set default parameter values. We have to treat `opts' (list of -% options) specially, because for option defaults we don't store a -% list of options (like we do for the group options) but set each -% option individually. -\def\hl@setparam@default#1{% - \ifx\hl@param\hl@opts@word - % `opts'. - \for\hl@opt:=#1\do{% - \ifx\hl@opt\empty \else - \expandafter\hl@set@opt\hl@opt=,% - \fi - }% - \else - % Everything except `opts'. - \expandafter\ifx\csname\hl@prefix @\hl@param\endcsname\relax - \message{Default parameter `\hl@prefix:\hl@param' is not defined}% - \fi - % Should not use \edef, so the user could define this to, e.g., - % \normalbaselineskip, to make the parameter adjustable to a - % situation. - \ece\def{\hl@prefix @\hl@param}{#1}% - \fi -}% -% For each option in the list (#1), call \hl@update@with@opt to update -% the group's option list (\csname\hl@prefix @opts@ \hl@group\endcsname) -% with this new option. -\def\hl@update@opts@with@list#1{% - % Start with the current list of the group. - \global\expandafter\let\expandafter\hl@update@new@list - \csname \hl@prefix @opts@\hl@group\endcsname - % We have to isolate the \for loop inside a (TeX) group, to avoid - % clashes with the loop in \hl@setparam - \begingroup - \for\hl@opt:=#1\do{% - \hl@update@opts@with@opt - }% - \endgroup - % Save the final list back in the option list for the group. - \ece\let{\hl@prefix @opts@\hl@group}\hl@update@new@list -}% -% Go through the option list (\hl@update@new@list) and construct the -% new list (in \hl@update@new@list), replacing the old definition of -% the option with the new one (\hl@opt). -\def\hl@update@opts@with@opt{% - % Save the old list and the new option. - \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 - % Get the key of the new option and save it. - \expandafter\hl@parse@opt@key\hl@opt=,% - \let\hl@update@new@key\hl@update@key - % We will set this to real comma after the first entry. - \global\let\hl@update@comma\empty - % We have to isolate the \for loop inside a (TeX) group, to avoid - % clashes with the loop in \hl@update@opts@with@list - \begingroup - \for\hl@opt:=\hl@update@old@list\do{% - \ifx\hl@opt\empty \else % Skip empty `options'. - % Get the key of this option. - \expandafter\hl@parse@opt@key\hl@opt=,% - % If the key matches, replace the option definition with the - % new definition, otherwise, repeat the old definition. - \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 - % If nothing was replaced, add the new option to the end of the new list. - \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 -}% -% Parse the key of the option and save it in \hl@update@key -\def\hl@parse@opt@key#1=#2,{\def\hl@update@key{#1}}% -% -% Default and group parameters (options and types). -% -% Option `raise' will determine how much to raise hyperlink -% destinations above the baseline. It will be supported by all -% drivers, since it is handled outside the drivers, in -% \hldest@aftergetparam. -\def\hldest@opt@raise{\normalbaselineskip}% -% Options `colormodel' and `color' will also be handled outside the -% drivers, in \hlstart@aftergetparam. -\def\hl@opt@colormodel{cmyk}% -\def\hl@opt@color{0.28,1,1,0.35}% -% -% Parameters for destinations and links produced implicitly by -% cross-reference macros. Note that each driver will additionally -% define \hldest@type and \hl@type parameters which will be used when -% one of the below is empty, and default values for destination and -% link options (which are driver-specific). -% -% Destination on/off flags (0=off, 1=on). -\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 -% Types of destinations. -\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 -% Options for destinations. -\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 -% -% Hyperlink on/off flags (0=off, 1=on). -\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 -% Types of links. -\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 - % drivers which support the `url' type) -% Options for links. -\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 -% -% \@hlon[GROUPS] -% \@hloff[GROUPS] -% \@hldeston[GROUPS] -% \@hldestoff[GROUPS] -% \@@hlon -% \@@hloff -% \@@hldeston -% \@@hldestoff -% -% Macros to switch hyperlinks / destinations on/off. -% -% The optional arg is the list of groups. It can contain a star (*) -% which will make the macros affect all groups (but not the low-level -% macros \hlstart, \hlend and \hldest). -% -% \@hlon, \@hldeston, \@hloff and \@hldestoff will turn low-level -% macros on/off only when they are used either without the optional -% arg or with an empty `group' in the optional arg, otherwise only the -% specified groups are affected. -% -% The single-`@' variants (\@hl...) are for the user. In your macros, -% if you want to (temporarily) turn low-level macros on/off, it's -% better to use the double-`@' variants (\@@hl...), because they are -% much faster and won't clobber \@optionalarg or anything else. -% -\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 - % If we find an asterisk in the list, we have no choice but to - % finish the list and then call \@finhlswitch again, now with - % \hl@all@groups for the list of groups. - \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 -}% -% Turn low-level macros on/off. -\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}% -}% -% -% Hyperlink drivers. -% -% \enablehyperlinks[OPTIONS] will enable hyperlinks. OPTIONS is a -% list of comma-separated options. An option is one of the following: -% -% idxexact Point index links to exact locations of the term -% idxpage Point index links to pages with the term (default) -% idxnone No links for index entries -% Force the hyperlink driver -% -% If is omitted, appropriate driver will be detected, if -% possible; if not, we fall back on `dvipdfm' (currently this means -% `pdftex' when \ifpdf, and `dvipdfm' otherwise). -\def\hl@idxexact@word{idxexact}% -\def\hl@idxpage@word{idxpage}% -\def\hl@idxnone@word{idxnone}% -% -\def\enablehyperlinks{\@getoptionalarg\@finenablehyperlinks}% -\def\@finenablehyperlinks{% - \let\hl@selecteddriver\empty - % By default we generate `idxpage' index hyperlinks. - \def\hldest@place@idx{0}% - % Go through the option list. - \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 - }% - % Check the driver name. - \ifx\hl@selecteddriver\empty - % The user did not specify a driver, detect. - \ifpdf - \def\hl@selecteddriver{pdftex}% - \message{^^JUsing `pdftex' hyperlink driver.}% - \else - \def\hl@selecteddriver{dvipdfm}% - \message{^^JUsing `dvipdfm' hyperlink driver.}% - \fi - \else - % Check that the requested driver's initialization routine is - % available. - \expandafter\ifx\csname hldriver@\hl@selecteddriver\endcsname \relax - \errmessage{No hyperlink driver `\hl@selecteddriver' available}% - \fi - \fi - % Call the driver's initialization routine. - \csname hldriver@\hl@selecteddriver\endcsname - % Driver should not be changed later. - \def\@finenablehyperlinks{\errmessage{Hyperlink driver `\hl@selecteddriver' - already selected}}% - % Free memory taken up by the drivers. - \let\hldriver@nolinks\undefined - \let\hldriver@pdftex \undefined - \let\hldriver@dvipdfm\undefined - % The user can use these to turn the links / destinations on/off - % (see comments to the driver `nolinks'). - \let\hloff\@hloff - \let\hlon\@hlon - \let\hldestoff\@hldestoff - \let\hldeston\@hldeston - % Turn everything on by default. - \hlon[*,]% - \hldeston[*,]% -}% -% -% Driver `nolinks'. -% -% Select this driver to suppress any hyperlinks / destinations in your -% document. -% -% NOTE: selecting this driver is quite different from not selecting -% any driver at all, or from selecting some driver and then turning -% off links and destinations for the entire document with \hloff and -% \hldestoff. -% -% The purpose of \hldestoff and \hloff is to mark (parts) of document -% where links should never appear. (Imagine you want to prevent a -% cross-referencing macro from generating a link at a certain spot in -% your document.) -% -% If instead you have prepared a document with links and just want to -% compile a version without the links, it is better to select the -% driver `nolinks'. This will ensure that spacing and pagebreaking -% will be the same as what you were getting with hyperlinks enabled. -% -% The reason for this is that hyperlinks are produced by \special -% commands. Each \special is placed inside a whatsit which may -% introduce a legitimate breakpoint at places where none would exist -% without the whatsit. The macros \hldestoff and \hloff disable -% hyperlink macros so drastically that no whatsits are produced. -% -% On the other hand, `nolinks' driver does not completely disable -% hyperlink macros. Instead, it defines them to write to the log -% file (what gets written is not really important). This will produce -% the whatsits imitating the whatsits from the \special's. (This -% trick was borrowed from graphics bundle.) -% -% Another reason for using `nolinks' is that in horizontal mode -% \hldest places destinations inside zero-width/height/depth boxes. -% When you say \hldestoff, \hldest will omit both destination specs -% and these boxes. The missing boxes can cause typesetting to be -% inconsistent with what you were getting with destinations enabled. -% Again, `nolinks' driver helps here by defining \hldest to still -% produce the empty boxes. -% -\def\hldriver@nolinks{% - \def\@hldest##1##2##3{% - \ifvmode - \write-1{\string\hldest: ##3}% - \else - \allowhyphens - \smash{\write-1{\string\hldest: ##3}}% - \allowhyphens - \fi - \ignorespaces - }% - \def\@hlstart##1##2##3{% - \leavevmode - \begingroup % Start the color group. - \write-1{\string\hlstart: ##3}% - \ignorespaces - }% - \def\@hlend{\write-1{\string\hlend}\endgroup}% End the group from \@hlstart. -}% -% -% Driver `pdftex'. -% -\def\hldriver@pdftex{% -\ifpdf % PDF output is enabled. - \def\hl@raw@word{raw}% - % - % Hyperlink destinations. - % - % Default type. - \def\hldest@type{xyz}% - % Set defaults for the options and tell \hl@set@opt what options we - % support. (We do not define \hldest@opt@raise, \hl@opt@colormodel - % and \hl@opt@color, they are defined and used outside the drivers.) - \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 - % Multiplexer for all supported destination types. - \def\hldest@driver{% - % Special case for `raw' destinations. - \ifx\@hltype\hl@raw@word - \csname \hldest@opt@cmd \endcsname - \else - \pdfdest name{\@hllabel}\@hltype - \csname hldest@typeh@\@hltype\endcsname - \fi - }% - % Define handlers for each supported destination type. - \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 - }% - % - % Hyperlinks. - % - % Default type. - \def\hl@type{name}% - % We support `url' hyperlinks, so set the `url' group type. - \ifx\hl@type@url\empty - \def\hl@type@url{url}% - \fi - % Set defaults for the options and tell \hl@set@opt what options we - % support. - \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 - % Multiplexer for all supported link types. - \def\hl@driver{% - % Special case for `raw' links. - \ifx\@hltype\hl@raw@word - \csname \hl@opt@cmd \endcsname - \else - % See if we will construct a /BS spec. We want to bother only - % if any of \hl@opt@bstyle, \hl@opt@bwidth and \hl@opt@bdash is - % not empty. - \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 - % Construct common preamble of a link. - \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 - }% - }% - % Call the handler. - \csname hl@typeh@\@hltype\endcsname - \fi - }% - % Link type handlers - \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{% - % PDF requires pages to start from 0, so adjust page number. - \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{% - % PDF requires pages to start from 0, so adjust page number. - \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{Warning: `pdftex' hyperlink driver: PDF output is - not enabled, falling back on `nolinks' driver.}% - \hldriver@nolinks -\fi -}% -% -% Driver `dvipdfm'. -% -\def\hldriver@dvipdfm{% - \def\hl@raw@word{raw}% - % - % Hyperlink destinations. - % - % Default type. - \def\hldest@type{xyz}% - % Set defaults for the options and tell \hl@set@opt what options we - % support. (We do not define \hldest@opt@raise, \hl@opt@colormodel - % and \hl@opt@color, they are defined and used outside the drivers.) - \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 - % Multiplexer for all supported destination types. - \def\hldest@driver{% - % Special case for `raw' destinations. - \ifx\@hltype\hl@raw@word - \csname \hldest@opt@cmd \endcsname - \else - % Construct common preamble of a destination. - \def\hldest@preamble{% - pdf: dest (\@hllabel) [@thispage - }% - % Call the handler. - \csname hldest@typeh@\@hltype\endcsname - \fi - }% - % Define handlers for each supported destination type. - \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 - % Convert zoom factor: 12345 -> 12.345 - \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 - }% - % - % Hyperlinks. - % - % Default type. - \def\hl@type{name}% - % We support `url' hyperlinks, so set `url' group type. - \ifx\hl@type@url\empty - \def\hl@type@url{url}% - \fi - % Set defaults for the options and tell \hl@set@opt what options we - % support. - \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 - % Multiplexer for all supported link types. - \def\hl@driver{% - % Special case for `raw' links. - \ifx\@hltype\hl@raw@word - \csname \hl@opt@cmd \endcsname - \else - % See if we will construct a /BS spec. We want to bother only - % if any of \hl@opt@bstyle, \hl@opt@bwidth and \hl@opt@bdash is - % not empty. - \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 - % Construct common preamble of a link. - \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 - }% - % Call the handler. - \csname hl@typeh@\@hltype\endcsname - \fi - }% - % Link type handlers. - \let\hl@typeh@raw\empty - \def\hl@typeh@name{\special{\hlstart@preamble /Dest(\@hllabel)>>}}% - \def\hl@typeh@page{% - % PDF requires pages to start from 0, so adjust page number. - \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{% - % PDF requires pages to start from 0, so adjust page number. - \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. -}% -% -% Internal hyperlink macros. -% -% \hl@define@eqlabel{LABEL} will define \hl@eqlabel to a non-empty -% hyperlink label for an equation. The idea is to generate -% (hopefully) unique label in cases when LABEL is empty (e.g., when -% user says `\eqdef{}'). To customize the autogenerated labels -% redefine \phantomeqlabel. -% -\newcount\phantomeqnumber -\def\phantomeqlabel{PHEQ\the\phantomeqnumber}% -% -\def\hl@define@eqlabel#1{% - % Make all definitions global so they are not shadowed by groups - % (\@eqdef depends on this). - \ifempty{#1}% - \global\advance\phantomeqnumber by1 - \xdef\hl@eqlabel{\phantomeqlabel}% - \else - \gdef\hl@eqlabel{#1}% - \fi -}% -% -% Cross-reference macros call hyperlink macros, so define them to -% produce nothing by default. However, we still want \hldest and -% \hlstart to produce \leavevmode and/or \ignorespaces, to make -% cross-reference macros consistent. Note that this, strictly -% speaking, makes cross-reference macros incompatible with -% pre-hyperlink releases of eplain, in cases where paragraph is -% started by a cross-reference macro. It is quite unlikely though -% that any problem will arise. -\let\hldeston\relax \let\hldestoff\relax -\let\hlon\relax \let\hloff\relax -\@@hloff -\@@hldestoff -% -% -% -% Support for LaTeX packages under plain TeX. -% -% We use miniltx.tex from the LaTeX graphics collection and build on -% it to provide package options support, package version check, -% recursive package loading with \RequirePackage, proper handling of -% \AtBeginDocument and \AtEndOfPackage. -% -% Much of the following was borrowed from LaTeX. -% -% The internal variables are quite a mess, so here is a hint: -% -% - \usepkg@pkg, \usepkg@options, \usepkg@date are used by -% \usepackage to save its parameters. -% -% - When \RequirePackage is called within a package, the above -% variables are saved in \usepkg@save@VAR@RECURSIONLEVEL, where -% VAR={pkg,options,date}, and RECURSIONLEVEL is incremented for -% each nested package inclusion. This way the variables can be -% restored after the (nested) package will have been loaded. -% -% - Options for package PACKAGE (no .sty extension) are accumulated -% in \usepkg@options@PACKAGE. -% -% - For each declared option OPTION in package PACKAGE, we save the -% code which enables OPTION in \usepkg@option@PACKAGE@OPTION. -% There may be a star (`*') option declaration, the code from which -% will be used to process options not declared by the package -% (without it, an undeclared option will cause an error). -% -% - For each loaded PACKAGE / FILE.EXT we declare \ver@PACKAGE.sty / -% \ver@FILE.EXT. We use \ver@PACKAGE.sty to detect reloading -% of packages. Some packages also use these macros. -% -% - Calls to \AtBeginDocument accumulate the code in -% \usepkg@at@begin@document. We will expand it at the end of the -% \beginpackages...\endpackages `environment'. -% -% - Calls to \AtEndOfPackage accumulate the code in -% \usepkg@at@end@of@package. We will expand it after the package -% is loaded. To allow recursive package loading, \RequirePackage -% saves \usepkg@at@end@of@package analogous to \usepkg@pkg. -% -\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}% -% \beginpackages...\endpackages -% -% All packages must be loaded within this `environment' (a kind of -% LaTeX's preamble). This is so to give us a chance to expand the -% accumulated \AtBeginDocument commands. Usually, you will want to -% restrict all \usepackage's to a single \beginpackages...\endpackages, -% just like in LaTeX, where you load all packages within a (single) -% preamble. -\long\def\beginpackages#1\endpackages{% - \let\usepackage\real@usepackage - #1% - \usepkg@at@begin@document - \global\let\usepkg@at@begin@document\empty - \global\let\usepackage\fake@usepackage -}% -% \fake@usepackage -% -% This is what \usepackage is defined to outside of -% \beginpackages...\endpackages `environment'. -\def\fake@usepackage{\errmessage{You should not use \string\usepackage\space outside of^^J - \@spaces\string\beginpackages...\string\endpackages\space environment}% -}% -% \RequirePackage[OPTIONS]{PACKAGES}[YYYY/MM/DD] -% -% Save parameters for the package being loaded and call \usepackage to -% load PACKAGES. We depend on \usepackage to restore the saved -% parameters. We allow for nested calls to \RequirePackage. -\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 -}% -% \usepackage[OPTIONS]{PACKAGES}[YYYY/MM/DD] -% -% Load each of the PACKAGES with OPTIONS, checking that the package -% date is at least YYYY/MM/DD; if it is not, issue a warning. -\let\usepackage\fake@usepackage -\def\real@usepackage{\@getoptionalarg\@finusepackage}% -\def\@finusepackage#1{% - \let\usepkg@options\@optionalarg - \ifempty{#1}% - \errmessage{No packages specified}% - \fi - % Load miniltx.tex, if it is not loaded. - \ifusepkg@miniltx@loaded \else - \testfileexistence[miniltx]{tex}% - \if@fileexists - \input miniltx.tex - \global\usepkg@miniltx@loadedtrue - % Redefine some macros from miniltx.tex - \global\let\RequirePackage\eplain@RequirePackage - \global\let\DeclareOption\eplain@DeclareOption - \global\let\PassOptionsToPackage\eplain@PassOptionsToPackage - \global\let\ExecuteOptions\eplain@ExecuteOptions - \global\let\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 - % Read the trailing optional arg (YYYY/MM/DD). - \@ifnextchar[%] - {\@finfinusepackage{#1}}% - {\@finfinusepackage{#1}[]}% -}% -% -\def\@finfinusepackage#1[#2]{% - \edef\usepkg@date{#2}% - % Load each package from the list. Do it outside the \for loop to - % avoid clashes with any \for loops executed by the package. - \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 - % Restore parameters in case we were called from \RequirePackage. - \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 - % Free the memory. - \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 -}% -% Load one package. We assume packages have `sty' extension. -\def\usepkg@load@pkg#1{% - % Special cases for `autopict' and `psfrag' packages: - % - `psfrag' is loaded by psfrag.tex. - % - `autopict' is loaded by picture.tex, but the package file is - % autopict.sty. - \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 - % See if the package was loaded. If it was, we just bail out. - % (Maybe we should skip reloading it/warn? We don't want to go into - % checking that the package was first loaded with a subset of - % options which are requested now.) \ProvidePackage and - % \ProvideFile define the macro \ver@PACKAGE.sty (see - % \eplain@pr@videpackage below). - \ifundefined{ver@\usepkg@pkg.sty}\else - \errmessage{Package `\usepkg@pkg' already loaded}% - \fi - \testfileexistence[\usepkg@pkg]{sty}% - \if@fileexists \else - \errmessage{Package `\usepkg@pkg' not found}% - \fi - % Construct option list for the package. Include any options - % passed to us by \PassOptionsToPackage and \RequirePackage. - \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 - % For the duration of the package, we want any calls to \usepackage - % to be mapped to \RequirePackage, to allow nested package loads - % without clobbering up anything. (Maybe packages never use - % \usepackage instead of \RequirePackage, but this won't hurt.) - \let\usepackage\eplain@RequirePackage - % Clear \AtEndOfPackage commands (can be non-empty during recursive - % package loading). - \global\let\usepkg@at@end@of@package\empty - % Load the package. If the package asks to load other package, - % \RequirePackage will save our \usepkg@{pkg,options,date} and - % \AtEndOfPackage commands, and \usepackage will restore them after - % recursively loading that package, so we don't worry about our - % setup being clobbered. - \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 - % Execute the accumulated \AtEndOfPackage commands, and reset them - % to free the memory. - \usepkg@at@end@of@package - \global\let\usepkg@at@end@of@package\empty - % Restore the `real' \usepackage definition. - \let\usepackage\real@usepackage - % Clear the option list for the loaded package (we won't load a - % second copy anyway). - \global\ece\let{usepkg@options@\usepkg@pkg}\undefined - % Set \Url@HyperHook for url.sty - \def\Url@HyperHook##1{\hlstart@impl{url}{\Url@String}##1\hlend@impl{url}}% - % We check package version in \ProvidePackage, before reading the - % rest of the package, so that in case of errors (which can be - % numerous) the warning hopefully comes before the errors. -% \@ifl@ter{sty}\usepkg@pkg\usepkg@date{}% -% {\message{Warning: you have requested package `\usepkg@pkg', version \usepkg@date,^^J -% \@spaces but only version `\csname ver@\usepkg@pkg.sty\endcsname' is available.}}% -}% -% \DeclareOption{OPTION}{CODE} -% -% Save CODE in `usepkg@option@PACKAGE@OPTION'. Starred version is not -% treated any different here, but when defined it will be used by -% \ProcessOptions and \ExecuteOptions to process undeclared options. -\def\eplain@DeclareOption#1#2{% - \toks@{#2}% - \expandafter\xdef\csname usepkg@option@\usepkg@pkg @#1\endcsname{\the\toks@}% -}% -% \PassOptionsToPackage{OPTIONS}{PACKAGES} -% -% Add OPTIONS to the option list for each of the PACKAGES. -\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 -}% -% \ExecuteOptions{OPTIONS} -% \ProcessOptions -% -% \ExecuteOptions executes each option from OPTIONS, \ProcessOptions -% executes each option from the option list for the current package. -% If the star (`*') option is declared, it will be used to process -% undeclared options; otherwise, undeclared option will cause an -% error. -\def\usepkg@exec@options#1{% - % The iterator \CurrentOption below was used purposely. Some - % packages use it in the argument to \DeclareOption. - \for\CurrentOption:=#1\do{% - \expandafter\let\expandafter\usepkg@temp - \csname usepkg@option@\usepkg@pkg @\CurrentOption\endcsname -% - \ifx\usepkg@temp\relax - % Option is not declared. If a `default' option handler is - % declared, use it. - \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 - % Option is declared. - \usepkg@temp - \fi - }% -}% -% -\let\eplain@ExecuteOptions\usepkg@exec@options -\def\eplain@ProcessOptions{% - \expandafter\usepkg@exec@options\csname usepkg@options@\usepkg@pkg\endcsname -}% -% \AtBeginDocument{CODE} -% \AtEndOfPackage{CODE} -% -% miniltx.tex defines \AtBeginDocument to execute its parameter right -% away, but some packages depend on \AtBeginDocument to be executed -% after packages are processed. So we redefine \AtBeginDocument to -% accumulate its argument, to be executed by us at the end of -% \beginpackages...\endpackages. \AtEndOfPackage is not defined by -% miniltx.tex at all; we define it similar to \AtBeginDocument. -\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}% -% \ProvidesFile{FILENAME.EXT}[VERSION] -% \ProvidesPackage{PACKAGENAME}[VERSION] -% -% miniltx.tex defines \ProvidesFile and \ProvidesPackage to only log a -% message. We want to define \ver@PACKAGE.sty / \ver@FILENAME.EXT, as -% we depend on these to know when a package/file has been loaded, and -% some packages depend on them, too. -\def\eplain@ProvidesPackage#1{% - \@ifnextchar[%] - {\eplain@pr@videpackage{#1.sty}}{\eplain@pr@videpackage#1[]}% -}% -\def\eplain@pr@videpackage#1[#2]{% - \wlog{#1: #2}% - % This will flag the package as loaded. - \expandafter\xdef\csname ver@#1\endcsname{#2}% -% \expandafter\edef\expandafter\temp{\csname usepkg@options@\usepkg@pkg\endcsname}% -% \message{^^JPackage:\usepkg@pkg^^JOptions:\usepkg@options^^J+ passed options:\temp^^J}% - % Check package version. - \@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}% - % This will flag the file as loaded. - \expandafter\xdef\csname ver@#1\endcsname{#2}% - % We don't check file version. graphics calls \ProvideFile to - % \includegraphics, and it does not give any date at the beginning - % of #2, so checking the date will cause an error. -}% -% Check package version. From LaTeX. -\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 }% -% Needed by some packages. -\def\@spaces{\space\space\space\space}% -\def\@inmatherr#1{% - \relax - \ifmmode - \errmessage{The command is invalid in math mode}% - \fi -}% -% -% -% -\let\wlog = \@plainwlog -\catcode`@ = \@eplainoldatcode -% -\def\fmtname{eplain}% -\def\eplain{t}% -{\edef\plainversion{\fmtversion}% - \xdef\fmtversion{REPLACE-WITH-VERSION: REPLACE-WITH-DAY-MONTH-YEAR (and plain \plainversion)}% -}% -% -% -% -% -% Local variables: -% page-delimiter: "^% \f" -% End: diff --git a/Master/texmf-dist/source/eplain/eplain-source-3.1.zip b/Master/texmf-dist/source/eplain/eplain-source-3.1.zip new file mode 100644 index 00000000000..bbd0d6cc76d Binary files /dev/null and b/Master/texmf-dist/source/eplain/eplain-source-3.1.zip differ diff --git a/Master/texmf-dist/tex/eplain/arrow.tex b/Master/texmf-dist/tex/eplain/arrow.tex new file mode 100644 index 00000000000..9c43c2fe3cc --- /dev/null +++ b/Master/texmf-dist/tex/eplain/arrow.tex @@ -0,0 +1,597 @@ +% arrow.tex: macros for commutative diagrams. +% +% Copyright (C) 1991,1992 Steven T. Smith. +% stsmith@ll.mit.edu +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 2, or (at your option) +% any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this file; see the file COPYING. If not, write to the +% Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +% Boston, MA 02110-1301, USA. +% +% As a special exception, when this file is read by TeX when +% processing a TeX source document, you may use the result without +% restriction. + +% Version 0 Released for alpha testing, November 16, 1991. +% Version 0.1 Morphism positions for slanted lines improved, Nov. 17, 1991. +% Version 0.11 \biline changed to \bisline for compatible naming. 11/21/91 +% Version 0.2 Equate \lft & \rt w. _ and ^ instead of L_{12} & R_{12}. 1/20/92 +% Version 1.0 Distributed with Eplain. 1/20/92 +% Version 1.1 Purged \newcount's, etc.; Warner ref.; \getch@nnel logic. 4/21/92 +% Version 1.11 Replace \smash with \smash@@ (for amstex compatibility) 3/27/96 + + + +% Syntax: \[arrow](X,Y) or +% \[arrow](X,Y)\lft{MOR} (morphism placed left of arrow) or +% \[arrow](X,Y)\rt{MOR} (morphism placed right of arrow) +% +% [arrow] is one of +% sline (straight line) +% dotline (dotted line) * Unimplemented +% arrow (straight arrow) +% dotarrow (dotted arrow) * Unimplemented +% +% The following allow plain versions and some combination of \lft and \rt. +% biarrow (two straight arrows) +% adjarrow (two adjoint arrows) +% bisline (two straight lines) +% +% Also, for left, right, up, and down mappings: +% +% \mapright (or \mapright^{f_*}, \mapright_{f_*}) +% \mapleft (ditto) +% \mapup (use \rt and \lft as above) +% \mapdown (ditto) +% +% And variants of these (can use combinations of ^/_ and lft/rt): +% +% \bimapright (two right arrows) +% \bimapleft (two left arrows) +% \adjmapright (two adjoint arrows; <- over ->) +% \adjmapleft (two adjoint arrows; -> over <-) +% \hline (horizontal line) +% \dothline (dotted horizontal line) * Unimplemented +% \bihline (two horizontal lines) +% +% \bimapdown (two down arrows) +% \bimapup (two left arrows) +% \adjmapdown (two adjoint arrows; down then up) +% \adjmapup (two adjoint arrows; up then down) +% \vline (vertical line) +% \dotvline (dotted vertical line) * Unimplemented +% \bivline (two vertical lines) + +% Use \thinlines temporarily to find the current catcode of @, so we can +% restore it at the end. +\edef\thinlines{\the\catcode`@ }% +\catcode`@ = 11 +\let\@oldatcatcode = \thinlines + + +% I changed \smash to \smash@@ in these macros to avoid AMSTEX conflict. + +\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@} + +% Adapted LaTeX code for drawing lines and vectors + +% Note: to ensure compatibility with LaTeX, all LaTeX control +% sequences have been renamed. Control sequence names containing the +% at sign (@) have been changed to contain an ampersand (&) instead. +\edef\@oldandcatcode{\the\catcode`& }% +\catcode`& = 11 + +% LaTeX macros changed here: +% \line - changed to \drawline +% \vector - changed to \drawvector +% \@badlinearg - simply uses \errmessage now +% \@height, \@width, and \@depth are changed to height, width, and depth +% \@sline and \@svector - changed so that \hbox{\drawline...} yields +% a box of positive width and positive height for a positive slope +% and positive depth for a negative slope. +% \@hline and \@hvector - likewise +% \unitlength eliminated; pass dimensions to \drawline and \drawvector. + +% LaTeX's while loop +\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}}% + +% LaTeX's \line and \vector macros: +\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.}}% + +%INITIALIZATION +\thinlines + +% Allocate registers using the rules of p.~346 of {\sl The \TeX book}. +\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. + + +% Macros for abstract nonsense + +% Macros for slanted lines and arrows. + +\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}% + +% Put arrow in \@arrbox, then add morphisms later. + +% Single lines and arrows. +\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)}% + +% Double lines, arrows, and adjoint arrows. +\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)}% + +% Morphism placement. + +% Logic for positioning morphisms on slanted arrows: +% If \lft then +% \hskip by -\@hmorphdflt +% if \@pslopetrue then \raise by \@vmorphdflt +% else \lower by \@vmorphdflt +% Else if \rt then +% \hskip by \@hmorphdflt +% if \@pslopetrue then \lower by \@vmorphdflt +% else \raise by \@vmorphdflt +% +% \@hmorphdflt and \@vmorphdflt defined by \getm@rphposn +% Advance \morphdist by .5\channelwidth if double arrows +% +% Use \@shiftmorph to allow users to move morphisms + +% Logic for \@shiftmorph: +% If \rtm@rph then +% if \hmorphposnrt=0 then hshift by\hmorphposn else hshift by\hmorphposnrt +% if \vmorphposnrt=0 then vshift by\vmorphposn else vshift by\vmorphposnrt +% Else +% if \hmorphposnlft=0 then hshift by\hmorphposn else hshift by\hmorphposnlft +% if \vmorphposnlft=0 then vshift by\vmorphposn else vshift by\vmorphposnlft + +\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}% + +% Get appropriate shifts for morphisms and double lines at various slopes +% Syntax e.g.: \@getshift(1,2){\@hchannel}{\@vchannel}{\channelwidth}% + +\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 + + +% Macros for horizontal and vertical lines and arrows. +% These macros use an idea from Appendix~D, p.~374 of the Texbook. +% Usage: `\mapright^f', `\mapleft', etc. +% `\mapdown\lft{f}', `\mapup\rt{g}', `\mapdown', etc. + +% \toks@ will contain the token sequence that defines the arrow and morphisms; +% ensure that \toks@={\mathop{\vcenter{\smash@@{horiz. arrow}}}\limits} to start. +\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}}}}% + +% Vertical arrows are handled differently because there is no \mathop. +% \toks@ will contain the token sequence that defines the arrow and morphisms; +% ensure that \toks@={\vcenter{vertical arrow}} to start. +\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}% +% Prepend or append to \toks@ depending on \rt or \lft. +\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}}% + + +% Macros for setting commutative diagrams. + +% A macro inspired by Ex.~18.46 of the TeXbook. +\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 }% +% A macro inspired by Francis Borceux's Diagram macros for LaTeX +% (FBORCEUX@BUCLLN11.BITNET). +\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}}}\,}% + +% Default parameters +% Define default heights and widths for arrows using the golden ratio. +% Note that 5:3 (for sline) and 3:2 (for vector) approximate this ratio. +\newdimen\harrowlength \harrowlength=60pt +\newdimen\varrowlength \varrowlength=.618\harrowlength +\newdimen\sarrowlength \sarrowlength=\harrowlength + +% Morphism placement +\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 + +% Default grid size for \gridcommdiag +\newdimen\hgrid \hgrid=15pt +\newdimen\vgrid \vgrid=15pt + +% Horizontal and vertical distance between double lines and arrows. +\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 + + +% Some examples + +%\parskip=20pt +% +%The first example: +%$$\commdiag{A&\mapright^f&B&\mapleft^g&C\cr +%\mapdown\lft\psi&\arrow(3,-2)\rt s&\mapup\rt\phi& +%\arrow(-3,2)\lft l&\mapdown\rt\theta\cr +%D&\mapright_h&E&\mapleft_{\int_0^t{\bf A}\,d\sigma}&F\cr}$$ +% +% +%Covering homotopy property (Bott and Tu, {\it Differential Forms in +%Algebraic Topology}): +%$$\commdiag{Y&\mapright^f&E\cr \mapdown&\arrow(3,2)\lft{f_t}&\mapdown\cr +%Y\times I&\mapright^{\bar f_t}&X}$$ +% +% +%Universal mapping property (Warner, {\it Foundations of Differentiable +%Manifolds and Lie Groups}): $$\varrowlength=20pt +%\commdiag{V\otimes W\cr \mapup\lft\phi&\arrow(3,-1)\rt{\tilde l}\cr +%V\times W&\mapright^l&U\cr}$$ +% +% +%A cube (Francis Borceux): +%$$\harrowlength=48pt \varrowlength=48pt \sarrowlength=20pt +%\def\cross#1#2{\setbox0=\hbox{$#1$}% +% \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}} +%\gridcommdiag{&&B&&\mapright^b&&D\cr +%&\arrow(1,1)\lft a&&&&\arrow(1,1)\lft d\cr +%A&&\cross{\hmorphposn=12pt\mapright^c}{\vmorphposn=-12pt\mapdown\lft f} +%&&C&&\mapdown\rt h\cr\cr +%\mapdown\lft e&&F&&\cross{\hmorphposn=-12pt\mapright_j} +%{\vmorphposn=12pt\mapdown\rt g}&&H\cr +%&\arrow(1,1)\lft i&&&&\arrow(1,1)\rt l\cr +%E&&\mapright_k&&G\cr}$$ +% +%Zassenhaus's Butterfly Lemma (Lang, {\it Algebra}): +%$$\hgrid=16pt \vgrid=8pt \sarrowlength=32pt +%\def\cross#1#2{\setbox0=\hbox{$#1$}% +% \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}} +%\def\l#1{\llap{$#1$\hskip.5em}} +%\def\r#1{\rlap{\hskip.5em$#1$}} +%\gridcommdiag{&&U&&&&V\cr &&\bullet&&&&\bullet\cr +%&&\sarrowlength=16pt\sline(0,1)&&&&\sarrowlength=16pt\sline(0,1)\cr +%&&\l{u(U\cap V)}\bullet&&&&\bullet\r{(U\cap V)v}\cr +%&&&\sline(2,-1)&&\sline(2,1)\cr +%&&\cross{=}{\sline(0,1)}&&\bullet&&\cross{=}{\sline(0,1)}\cr\cr +%&&\l{^{\textstyle u(U\cap v)}}\bullet&&\cross{=}{\sline(0,1)}&& +% \bullet\r{^{\textstyle(u\cap V)v}}\cr +%&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)\cr +%\l{u}\bullet&&&&\bullet&&&&\bullet\r{v}\cr +%&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)\cr +%&&\bullet&&&&\bullet\cr &&u\cap V&&&&U\cap v\cr}$$ diff --git a/Master/texmf-dist/tex/eplain/base/arrow.tex b/Master/texmf-dist/tex/eplain/base/arrow.tex deleted file mode 100644 index 9c43c2fe3cc..00000000000 --- a/Master/texmf-dist/tex/eplain/base/arrow.tex +++ /dev/null @@ -1,597 +0,0 @@ -% arrow.tex: macros for commutative diagrams. -% -% Copyright (C) 1991,1992 Steven T. Smith. -% stsmith@ll.mit.edu -% -% This program is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2, or (at your option) -% any later version. -% -% This program is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this file; see the file COPYING. If not, write to the -% Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -% Boston, MA 02110-1301, USA. -% -% As a special exception, when this file is read by TeX when -% processing a TeX source document, you may use the result without -% restriction. - -% Version 0 Released for alpha testing, November 16, 1991. -% Version 0.1 Morphism positions for slanted lines improved, Nov. 17, 1991. -% Version 0.11 \biline changed to \bisline for compatible naming. 11/21/91 -% Version 0.2 Equate \lft & \rt w. _ and ^ instead of L_{12} & R_{12}. 1/20/92 -% Version 1.0 Distributed with Eplain. 1/20/92 -% Version 1.1 Purged \newcount's, etc.; Warner ref.; \getch@nnel logic. 4/21/92 -% Version 1.11 Replace \smash with \smash@@ (for amstex compatibility) 3/27/96 - - - -% Syntax: \[arrow](X,Y) or -% \[arrow](X,Y)\lft{MOR} (morphism placed left of arrow) or -% \[arrow](X,Y)\rt{MOR} (morphism placed right of arrow) -% -% [arrow] is one of -% sline (straight line) -% dotline (dotted line) * Unimplemented -% arrow (straight arrow) -% dotarrow (dotted arrow) * Unimplemented -% -% The following allow plain versions and some combination of \lft and \rt. -% biarrow (two straight arrows) -% adjarrow (two adjoint arrows) -% bisline (two straight lines) -% -% Also, for left, right, up, and down mappings: -% -% \mapright (or \mapright^{f_*}, \mapright_{f_*}) -% \mapleft (ditto) -% \mapup (use \rt and \lft as above) -% \mapdown (ditto) -% -% And variants of these (can use combinations of ^/_ and lft/rt): -% -% \bimapright (two right arrows) -% \bimapleft (two left arrows) -% \adjmapright (two adjoint arrows; <- over ->) -% \adjmapleft (two adjoint arrows; -> over <-) -% \hline (horizontal line) -% \dothline (dotted horizontal line) * Unimplemented -% \bihline (two horizontal lines) -% -% \bimapdown (two down arrows) -% \bimapup (two left arrows) -% \adjmapdown (two adjoint arrows; down then up) -% \adjmapup (two adjoint arrows; up then down) -% \vline (vertical line) -% \dotvline (dotted vertical line) * Unimplemented -% \bivline (two vertical lines) - -% Use \thinlines temporarily to find the current catcode of @, so we can -% restore it at the end. -\edef\thinlines{\the\catcode`@ }% -\catcode`@ = 11 -\let\@oldatcatcode = \thinlines - - -% I changed \smash to \smash@@ in these macros to avoid AMSTEX conflict. - -\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@} - -% Adapted LaTeX code for drawing lines and vectors - -% Note: to ensure compatibility with LaTeX, all LaTeX control -% sequences have been renamed. Control sequence names containing the -% at sign (@) have been changed to contain an ampersand (&) instead. -\edef\@oldandcatcode{\the\catcode`& }% -\catcode`& = 11 - -% LaTeX macros changed here: -% \line - changed to \drawline -% \vector - changed to \drawvector -% \@badlinearg - simply uses \errmessage now -% \@height, \@width, and \@depth are changed to height, width, and depth -% \@sline and \@svector - changed so that \hbox{\drawline...} yields -% a box of positive width and positive height for a positive slope -% and positive depth for a negative slope. -% \@hline and \@hvector - likewise -% \unitlength eliminated; pass dimensions to \drawline and \drawvector. - -% LaTeX's while loop -\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}}% - -% LaTeX's \line and \vector macros: -\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.}}% - -%INITIALIZATION -\thinlines - -% Allocate registers using the rules of p.~346 of {\sl The \TeX book}. -\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. - - -% Macros for abstract nonsense - -% Macros for slanted lines and arrows. - -\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}% - -% Put arrow in \@arrbox, then add morphisms later. - -% Single lines and arrows. -\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)}% - -% Double lines, arrows, and adjoint arrows. -\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)}% - -% Morphism placement. - -% Logic for positioning morphisms on slanted arrows: -% If \lft then -% \hskip by -\@hmorphdflt -% if \@pslopetrue then \raise by \@vmorphdflt -% else \lower by \@vmorphdflt -% Else if \rt then -% \hskip by \@hmorphdflt -% if \@pslopetrue then \lower by \@vmorphdflt -% else \raise by \@vmorphdflt -% -% \@hmorphdflt and \@vmorphdflt defined by \getm@rphposn -% Advance \morphdist by .5\channelwidth if double arrows -% -% Use \@shiftmorph to allow users to move morphisms - -% Logic for \@shiftmorph: -% If \rtm@rph then -% if \hmorphposnrt=0 then hshift by\hmorphposn else hshift by\hmorphposnrt -% if \vmorphposnrt=0 then vshift by\vmorphposn else vshift by\vmorphposnrt -% Else -% if \hmorphposnlft=0 then hshift by\hmorphposn else hshift by\hmorphposnlft -% if \vmorphposnlft=0 then vshift by\vmorphposn else vshift by\vmorphposnlft - -\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}% - -% Get appropriate shifts for morphisms and double lines at various slopes -% Syntax e.g.: \@getshift(1,2){\@hchannel}{\@vchannel}{\channelwidth}% - -\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 - - -% Macros for horizontal and vertical lines and arrows. -% These macros use an idea from Appendix~D, p.~374 of the Texbook. -% Usage: `\mapright^f', `\mapleft', etc. -% `\mapdown\lft{f}', `\mapup\rt{g}', `\mapdown', etc. - -% \toks@ will contain the token sequence that defines the arrow and morphisms; -% ensure that \toks@={\mathop{\vcenter{\smash@@{horiz. arrow}}}\limits} to start. -\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}}}}% - -% Vertical arrows are handled differently because there is no \mathop. -% \toks@ will contain the token sequence that defines the arrow and morphisms; -% ensure that \toks@={\vcenter{vertical arrow}} to start. -\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}% -% Prepend or append to \toks@ depending on \rt or \lft. -\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}}% - - -% Macros for setting commutative diagrams. - -% A macro inspired by Ex.~18.46 of the TeXbook. -\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 }% -% A macro inspired by Francis Borceux's Diagram macros for LaTeX -% (FBORCEUX@BUCLLN11.BITNET). -\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}}}\,}% - -% Default parameters -% Define default heights and widths for arrows using the golden ratio. -% Note that 5:3 (for sline) and 3:2 (for vector) approximate this ratio. -\newdimen\harrowlength \harrowlength=60pt -\newdimen\varrowlength \varrowlength=.618\harrowlength -\newdimen\sarrowlength \sarrowlength=\harrowlength - -% Morphism placement -\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 - -% Default grid size for \gridcommdiag -\newdimen\hgrid \hgrid=15pt -\newdimen\vgrid \vgrid=15pt - -% Horizontal and vertical distance between double lines and arrows. -\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 - - -% Some examples - -%\parskip=20pt -% -%The first example: -%$$\commdiag{A&\mapright^f&B&\mapleft^g&C\cr -%\mapdown\lft\psi&\arrow(3,-2)\rt s&\mapup\rt\phi& -%\arrow(-3,2)\lft l&\mapdown\rt\theta\cr -%D&\mapright_h&E&\mapleft_{\int_0^t{\bf A}\,d\sigma}&F\cr}$$ -% -% -%Covering homotopy property (Bott and Tu, {\it Differential Forms in -%Algebraic Topology}): -%$$\commdiag{Y&\mapright^f&E\cr \mapdown&\arrow(3,2)\lft{f_t}&\mapdown\cr -%Y\times I&\mapright^{\bar f_t}&X}$$ -% -% -%Universal mapping property (Warner, {\it Foundations of Differentiable -%Manifolds and Lie Groups}): $$\varrowlength=20pt -%\commdiag{V\otimes W\cr \mapup\lft\phi&\arrow(3,-1)\rt{\tilde l}\cr -%V\times W&\mapright^l&U\cr}$$ -% -% -%A cube (Francis Borceux): -%$$\harrowlength=48pt \varrowlength=48pt \sarrowlength=20pt -%\def\cross#1#2{\setbox0=\hbox{$#1$}% -% \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}} -%\gridcommdiag{&&B&&\mapright^b&&D\cr -%&\arrow(1,1)\lft a&&&&\arrow(1,1)\lft d\cr -%A&&\cross{\hmorphposn=12pt\mapright^c}{\vmorphposn=-12pt\mapdown\lft f} -%&&C&&\mapdown\rt h\cr\cr -%\mapdown\lft e&&F&&\cross{\hmorphposn=-12pt\mapright_j} -%{\vmorphposn=12pt\mapdown\rt g}&&H\cr -%&\arrow(1,1)\lft i&&&&\arrow(1,1)\rt l\cr -%E&&\mapright_k&&G\cr}$$ -% -%Zassenhaus's Butterfly Lemma (Lang, {\it Algebra}): -%$$\hgrid=16pt \vgrid=8pt \sarrowlength=32pt -%\def\cross#1#2{\setbox0=\hbox{$#1$}% -% \hbox to\wd0{\hss\hbox{$#2$}\hss}\llap{\unhbox0}} -%\def\l#1{\llap{$#1$\hskip.5em}} -%\def\r#1{\rlap{\hskip.5em$#1$}} -%\gridcommdiag{&&U&&&&V\cr &&\bullet&&&&\bullet\cr -%&&\sarrowlength=16pt\sline(0,1)&&&&\sarrowlength=16pt\sline(0,1)\cr -%&&\l{u(U\cap V)}\bullet&&&&\bullet\r{(U\cap V)v}\cr -%&&&\sline(2,-1)&&\sline(2,1)\cr -%&&\cross{=}{\sline(0,1)}&&\bullet&&\cross{=}{\sline(0,1)}\cr\cr -%&&\l{^{\textstyle u(U\cap v)}}\bullet&&\cross{=}{\sline(0,1)}&& -% \bullet\r{^{\textstyle(u\cap V)v}}\cr -%&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)\cr -%\l{u}\bullet&&&&\bullet&&&&\bullet\r{v}\cr -%&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)\cr -%&&\bullet&&&&\bullet\cr &&u\cap V&&&&U\cap v\cr}$$ diff --git a/Master/texmf-dist/tex/eplain/base/btxmac.tex b/Master/texmf-dist/tex/eplain/base/btxmac.tex deleted file mode 100644 index 4b7fda7c61e..00000000000 --- a/Master/texmf-dist/tex/eplain/base/btxmac.tex +++ /dev/null @@ -1,906 +0,0 @@ -%% @texfile{ -%% author = "Karl Berry and Oren Patashnik", -%% version = "0.99k-18aug05", -%% date = "19 August 2005", -%% filename = "btxmac.tex", -%% address = "tex-eplain@tug.org", -%% checksum = "842 4571 33524", -%% codetable = "ISO/ASCII", -%% supported = "yes", -%% docstring = "Defines macros that make BibTeX work with plain TeX", -%% } -% BibTeX-for-TeX macros, version 0.99k, for BibTeX 0.99c, TeX 3.0 or later. -% Copyright (C) 1990, 1991, 1992, 1995, 2005 Karl Berry & Oren Patashnik. -% -% Unlimited copying and redistribution of this file are permitted as -% long as this file is not modified. Modifications (and redistribution -% thereof) are permitted, but only if the resulting file is not named -% btxmac.tex. -% -% This file contains TeX macros that allow BibTeX, a bibliography -% program that was originally designed for use with LaTeX, to work with -% plain TeX. Please report any bugs (outright goofs, improvable macros, -% misfeatures, or unclear documentation) to Oren Patashnik -% (opbibtex@cs.stanford.edu). These macros will become frozen shortly -% after BibTeX version 1.00 is released. -% -% AMS-TEX WARNING: We tried very hard, for version .99i of these macros, -% to make them compatible with AmS-TeX. We succeeded to the extent -% that, if you use one of the standard bibliography styles, you probably -% won't notice any problems with version 0.99i of btxmac.tex. But -% ultimately we failed, in that the inherent incompatibilities between -% plain TeX and AmS-TeX kept making these macros break, for certain -% inputs or certain styles. Examples: (1) AmS-TeX treats at-signs as -% special, in ways that plain TeX and LaTeX don't, so that, for example, -% you can't have any `@' characters in an argument to the \cite command, -% the way you can in TeX or LaTeX; (2) AmS-TeX decided that plain TeX's -% and LaTeX's macron-accent control sequence `\=' should be undefined; -% so you'll need to define `\=' to be `\B' to get the xampl.bib example -% suggested below to work with AmS-TeX; (3) AmS-TeX redefines the tie -% character `~' of plain TeX, and AmS-TeX's `amsppt' style redefines -% plain TeX's `\nobreak' macro, so that if you use an author-date style -% like `apalike' and you have a multiple-author reference for which the -% author-date style automatically produces a citation in the text like -% `(Jones et~al., 1992)' you will throw AmS-TeX's `amsppt' style into -% an infinite loop, exceeding its input stack size. -% -% In practice, such incompatibilities surface infrequently; but it is -% now clear to us that it's not worth the effort (perhaps it's not even -% possible) to make the btxmac.tex macros robust when used both with -% plain TeX and Ams-TeX. If the BibTeX/AmS-TeX results attainable with -% the current btxmac.tex macros are sufficient, fine. But if there's a -% demand for more robust BibTeX/AmS-TeX behavior, then someone who's -% very familiar with the AmS-TeX package should probably make an -% amsbtxmc.tex version of the macros (remembering to follow the -% copyright restrictions above). Until then, if you're an AmS-TeX user, -% or a LaTeX or plain TeX user sharing files with an AmS-TeX user, beware. -% END OF AMS-TEX WARNING. -% -% To use these macros you should be familiar with how BibTeX interacts -% with LaTeX, since BibTeX's interaction with TeX is very similar; that -% interaction is explained in the LaTeX manual. It also helps to -% have read "BibTeXing", the documentation that accompanies BibTeX. -% -% Then, if you want, you should redefine any of the macros that begin -% with `\bbl' or `\biblabel' or `\print' that you need to get formatting -% different from the default (the default settings are designed to -% accompany a bibliography style like BibTeX's standard style `plain'). -% The macros you might want to change are described briefly a few -% paragraphs hence. -% -% To get started without reading any documentation, try running the -% short .tex file below through TeX and BibTeX. -% -% Remember the general scheme: Running (La)TeX writes information on the -% .aux (auxiliary) file; then running BibTeX reads information from the -% .aux, .bst (style), and .bib (database) files, and writes information -% (the bibliography) on a .bbl file; then running (La)TeX incorporates -% the bibliography; then running (La)TeX once more fixes the remaining -% forward references into the bibliography. Thus, to get everything -% incorporated into your output, you'll have to run (La)TeX, BibTeX, -% (La)TeX, (La)TeX. (Standup, sitdown, fight, fight, fight.) -% -% These macros can stand alone or they can be \input into a macro -% package, like Eplain, that is sufficiently compatible with plain TeX. -% To use these macros to format the 0.99 version of the xampl.bib file -% that's distributed with BibTeX (that version of the file has no -% self-identification), you'll need to define \mbox, which is a LaTeX -% command, to be \hbox, as in the example below. -% -% Here's an eight-line plain TeX file for trying out btxmac.tex; of course -% you'll have to remove the comment characters at the beginning of each -% line, and, depending on your system, you might have to take steps so -% that BibTeX can "see" the files xampl.bib and plain.bst (BibTeX will -% give you two empty-field warning messages that you should ignore). -% -% \input btxmac -% \noindent This cites Aamport's gnominious article~\cite{article-full}. -% \medskip -% \leftline{\bf References} -% \nocite{*} % put all database entries into the reference list -% \bibliographystyle{plain} % specify plain.bst as the style file -% \bibliography{xampl} % specify the database files; here, just xampl.bib -% \bye -% -% -% HISTORY -% -% Karl Berry wrote the original version of these macros in 1989 and -% 1990, for use in his `Eplain' package. Oren Patashnik modified them -% slightly in July 1990, as part of the official BibTeX distribution. -% -% 1-Aug-90 Version 0.99a, not released to the general public. -% 14-Aug-90 0.99b, first general release. -% 26-Aug-90 0.99c, made \@undefinedmessage work with other macro packages. -% 6-Sep-90 0.99d, allowed for general formatting of bibliography labels, -% for general formatting of (in-text) citations, and for -% changing certain catcodes while reading the .aux file. -% 14-Nov-90 0.99e, changed the way \@setletters works, made some \new...'s -% non-outer, and changed the way Eplain reads this file. -% 12-Dec-90 0.99f, made \@resetnumerals change the `,' and `.' catcodes; and -% added \biblabelextrahang, \@getoptionalarg, and \bblsc. -% 11-Mar-91 0.99g, made a few minor changes required by the way Eplain reads -% this file, but no functional changes. -% 24-Apr-91 0.99h, inhibited the reading and writing of the .aux file if it -% isn't used or if the \noauxfile macro is defined, and -% removed some .aux-file-opening detritus; printed the -% cite-key of undefined citations in \tt font; changed the -% catcode of `_' inside \cite; and called \@resetnumerals -% from inside a group. -% 29-Feb-92 0.99i, made these macros semi-compatible with AmS-TeX; removed -% \@resetnumerals, \@setletters, \@tokstostring, and -% friends; changed the way \cite handles catcodes; changed -% \@getoptionalarg, and had \bibitem and \newcommand use -% it; added \@futurenonspacelet and (to facilitate the use -% of multiple reference lists) \bblfilebasename; changed -% \biblabelprint to use the new macros \biblabelprecontents -% and \biblabelpostcontents, and to, by default, right- -% justify numeric labels; and renamed \biblabelextrahang to -% the more descriptive \biblabelextraspace. -% 14-Mar-92 0.99j, made 0.99i's use of `\\' local to btxmac.tex. -% 13-Nov-95 0.99k, defined \begin and \end (while reading bbl file) only if -% it wasn't already defined. -% 04-Aug-04 0.99l, defined \renewcommand and \providecommand, since -% some AMS style files use them. Also defined -% \emph, \textbf, and \mbox, since many .bib files -% use them. And made these definitions (and others) -% only effective if not already defined. -% -% The LaTeX-related commands defined in this file include -% (a) the four commands that a user types (\bibliography, -% \bibliographystyle, \cite, and \nocite); -% (b) three commands that BibTeX looks for in the .aux -% file (\bibdata, \bibstyle, and \citation---there is a fourth command -% that BibTeX looks for, but that command is related to LaTeX's \include -% facility, so these macros ignore that command); and -% (c) the LaTeX commands (\newcommand, \renewcommand, \providecommand) -% that are written by a standard (alpha) or AMS bibliography style. -% (d) a few more LaTeX commands (\emph, \textbf, \mbox) which many .bib -% files use. -% -% The definitions here are not the same as the corresponding LaTeX -% definitions (those LaTeX definitions depend on a significant fraction -% of LaTeX itself). But the only significant differences are with the -% \*command macros, which in LaTeX (a) give warnings in various -% circumstances; (b) allow a second optional argument; and (c) make the -% defined control sequences \long. The versions here don't do any of -% those things. -% -% To summarize: Unless you know what you're doing, you shouldn't define -% any control sequences with these ten names: -% -% \bibdata -% \bibliography -% \bibliographystyle -% \bibstyle -% \citation -% \cite -% \newcommand -% \nocite -% \providecommand -% \renewcommand -% -% There are other commands written by one or more of the four standard -% (plain, abbrv, alpha, unsrt) or four semistandard (acm, apalike, -% ieeetr, siam) bibliography styles, or commonly used in .bib files. -% These take effect only within the bibliography, and are redefinable, -% as explained later: -% -% \em -% \emph -% \mbox -% \newblock -% \sc -% \textbf -% -% There's one control sequence you might want to use (but not redefine) -% in redefining \biblabelprint: -% -% \biblabelwidth -% -% There are fifteen other control sequences (explained later in more detail) -% that the macros of this file will use if you define them---you should -% define them after the \input btxmac command but before the \bibliography -% command. The first six begin with `\bbl' and affect fonts, spacing, -% perhaps other characteristics of the bibliography, and which .bbl files -% get read; the next five begin with `\biblabel' and determine how labels -% are formatted in the bibliography; and the last four begin with `\print' -% and determine how the in-text citations are formatted: -% -% \bblem -% \bblfilebasename -% \bblhook -% \bblnewblock -% \bblrm -% \bblsc -% \biblabelcontents -% \biblabelprecontents -% \biblabelprint -% \biblabelpostcontents -% \biblabelextraspace -% \printbetweencitations -% \printcitefinish -% \printcitenote -% \printcitestart -% -% If it's defined before the \input btxmac command, the control sequence -% below inhibits the reading and writing of the .aux file(s), and the -% issuing of related warning messages. Any definition will do. This -% feature might help when you're working on draft stages of a document: -% -% \noauxfile -% -% -% Here's another control sequence (it's described later) that you -% probably won't want to redefine unless you are writing another macro -% package; if you do redefine it, however, do it before the \input btxmac -% command (and notice that it has an `@' in its name): -% -% \@undefinedmessage -% -% Any other control sequence in this file that might conflict with -% something you've defined will have an `@' in its name, so such conflicts -% are unlikely; but if you're worried about a specific control sequence -% name, do a text search of this file to look for it. -% -% -% So to start things off we turn `@' into a letter (category code 11), -% keeping track of the old category code for future restoration. -% (Simply resetting it to 12 when we leave these macros is -% insufficient.) The use of `\cite' as a temporary control sequence is -% a kludge, but it's a reasonably simple way to accomplish what we need -% without possibly overwriting something (without an `@' in its name) -% that might already be defined. -% -\edef\cite{\the\catcode`@}% -\catcode`@ = 11 -\let\@oldatcatcode = \cite -\chardef\@letter = 11 -\chardef\@other = 12 -% -% -% Next come some things that will be useful later. -% -% Make an outer definition into an inner one (due to Chris Thompson). -% The arguments should be the control sequence to be defined, and the -% new of the \outer control sequence, as characters; the control -% sequence #1 is defined to be just the same as \csname#2\endcsname, but -% not \outer. For example, \@innerdef\innernewcount{newcount} would -% define \innernewcount to be a non-outer version of \newcount. -% -\def\@innerdef#1#2{\edef#1{\expandafter\noexpand\csname #2\endcsname}}% -% -% We use \@innerdef to make some of our allocations local, because -% Eplain includes our code inside a conditional. We put @'s in the -% names to minimize the (already small) chance of conflicts. -% -\@innerdef\@innernewcount{newcount}% -\@innerdef\@innernewdimen{newdimen}% -\@innerdef\@innernewif{newif}% -\@innerdef\@innernewwrite{newwrite}% -% -% -% Swallow one parameter. -% -\def\@gobble#1{}% -% -% -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\@undefined - \let\@linenumber = \empty % Pre-3.0. -\else - \def\@linenumber{\the\inputlineno:\space}% -\fi -% -% -% The following macro \@futurenonspacelet (from the TeXbook) behaves -% essentially like \futurelet except that it discards any implicit or -% explicit space tokens that intervene before a nonspace is scanned: -% -\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 - % space after it is seen). -\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= }% -% -% -% \@getoptionalarg\CS gets an optional argument from the input, enclosed -% in brackets, then expands \CS. We set \@optionalarg to \empty if we -% don't find one, otherwise to the text of the argument. This assumes -% the brackets don't have a funny category code. -% -\def\@getoptionalarg#1{% - \let\@optionaltemp = #1% - \let\@optionalnext = \relax - \@futurenonspacelet\@optionalnext\@bracketcheck -}% -% -% The \expandafter's in this macro let us avoid the use of \aftergroup, -% which is somewhat more expensive. -% -\def\@bracketcheck{% - \ifx [\@optionalnext - \expandafter\@@getoptionalarg - \else - \let\@optionalarg = \empty - % We can't do the \temp after the \fi, because then the \temp gets - % in the way of reading the optional argument from the input, if - % we do have one. - \expandafter\@optionaltemp - \fi -}% -% -\def\@@getoptionalarg[#1]{% - \def\@optionalarg{#1}% - \@optionaltemp -}% -% -% -% From LaTeX. -% -\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}% -}% -% -% -% This macro tests if a file \jobname.#1 exists, and sets \if@fileexists -% appropriately. If an optional argument is given, it is used as the -% root part of the filename instead of \jobname. -% -\@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 -}% -% -% -%% [[[start of BibTeX-specific stuff]]] -% -% Now come the four main LaTeX commands and their associated .aux -% commands. Just as in LaTeX, \bibliographystyle defines the BibTeX -% style name (.bst file, that is), and \bibliography defines the -% database (.bib) file(s). The corresponding .aux-file commands are -% \bibstyle and \bibdata, which are there only for BibTeX's (but not -% LaTeX's) use. -% -\def\bibliographystyle#1{% - \@readauxfile - \@writeaux{\string\bibstyle{#1}}% -}% -\let\bibstyle = \@gobble -% -% As well as writing the \bibdata command to tell BibTeX which .bib -% files to read, we read the .bbl file that BibTeX (or a person, -% conceivably) has produced. We use \bblfilebasename as the root of the -% filename to read; this defaults to \jobname. -% -\let\bblfilebasename = \jobname -\def\bibliography#1{% - \@readauxfile - \@writeaux{\string\bibdata{#1}}% - \@testfileexistence[\bblfilebasename]{bbl}% - \if@fileexists - % We just output a non-discardable item (the `whatsit' with the - % \bibdata command). This means that the glue that will be - % inserted next (\parskip or \baselineskip, most likely) will be a - % legal breakpoint. Most likely, this is after some kind of - % heading, where we don't want to allow a page break. So: - \nobreak - \@readbblfile - \fi -}% -\let\bibdata = \@gobble -% -% The \nocite{label,label,...} command writes its argument to \@auxfile, -% unless instructed not to, but produces no text in the document. Both -% the \nocite and \cite commands produce \citation commands in the .aux file. -% -\def\nocite#1{% - \@readauxfile - \@writeaux{\string\citation{#1}}% -}% -% -\@innernewif\if@notfirstcitation -% -% \cite[note]{label,label,...} produces the citations for the labels as -% well. If the optional argument `note' is present, it's added after -% the labels. Since \cite calls \nocite to do its .aux-file writing, -% \cite doesn't need to call \@readauxfile (\nocite does). -% -\def\cite{\@getoptionalarg\@cite}% -% -% Typeset the citations for the labels in #1, followed by the note, if -% it exists. To change the citation's format in the text, redefine one -% or more `\print...' macros, whose defaults appear later in this file. -% -\def\@cite#1{% - % Remember the optional argument, in case one of the macros we call - % below ends up looking for an optional argument itself. For - % example, if a \cite[note] triggers reading the .aux file, then the - % [note] would be clobbered, since \@testfileexistence looks for an - % optional arg. - \let\@citenotetext = \@optionalarg - % Start printing the text, beginning with a left bracket by default. - \printcitestart - % It's complicated, but because \nocite puts a `whatsit' onto the list, - % \nocite should follow \printcitestart. It's conceivable, but very - % unlikely, that this `whatsit' will cause a problem (glue that doesn't - % disappear when you want it to is the most likely symptom), requiring - % a change either to \printcitestart or to the label that the .bst file - % produces. - \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 - % Give it a dummy definition: - \expandafter\gdef\csname\@citelabel{#1}\endcsname{% - {\tt - \escapechar = -1 - \nobreak\hskip0pt - \expandafter\string\csname#1\endcsname - \nobreak\hskip0pt - }% - }% - \fi - % Now produce the text, whether it was undefined or not. - \printcitepreitem{#1}% - \csname\@citelabel{#1}\endcsname - \printcitepostitem - \@notfirstcitationtrue -}% -% -% Given a label `foo', the macro `\b@foo' is supposed to -% hold the text that should be produced. -% -\def\@citelabel#1{b@#1}% -% -% So, how does a citation label get defined? When we read the .bbl file -% (below), a \bibitem writes out a \@citedef command. And when we read -% the \@citedef, we define \@citelabel{#1}, where #1 is the user's -% label. -% -\def\@citedef#1#2{\expandafter\gdef\csname\@citelabel{#1}\endcsname{#2}}% -% -% -% Reading the .bbl file also produces the typeset bibliography. Please -% notice, however, that we do not produce the title for the references -% (e.g., `References'), as LaTeX does. The formatting and spacing of -% that title, whether it should go into the headline, and so on, are all -% things determined by your format. We cannot know those things in -% advance. If you wish, you can define \bblhook to produce the title. -% Or just do it before the \bibliography command. -% -\def\@readbblfile{% - % Define a counter to tell us which item number we are on, unless - % we've already defined it (because the document has more than one - % bibliography). - \ifx\@itemnum\@undefined - \@innernewcount\@itemnum - \fi - % - \begingroup - % If another package has already defined \begin, don't define our - % own simplistic \begin and \end; assume they want to take care of - % it themselves. (That way, their \begin's and \end's for other - % things can be used in the bib files.) - \ifx\begin\@undefined - \def\begin##1##2{% - % ##1 is just `thebibliography'. - % ##2 is the widest label. - % We set (new dimen) \biblabelwidth based on the widest label - \setbox0 = \hbox{\biblabelcontents{##2}}% - \biblabelwidth = \wd0 - }% - \let\end = \@gobble % The arg is `thebibliography' again. - \fi - % - % Here we have two possibilities: - % \bibitem[typesetlabel]{citationlabel} - % \bibitem{citationlabel} - % If we have the second of these, the citations are numbered, starting - % from one; we use our own count register \@itemnum for this. - % - \@itemnum = 0 - \def\bibitem{\@getoptionalarg\@bibitem}% - \def\@bibitem{% - \ifx\@optionalarg\empty - \expandafter\@numberedbibitem - \else - \expandafter\@alphabibitem - \fi - }% - \def\@alphabibitem##1{% - % Need \xdef here for various reasons. - \expandafter \xdef\csname\@citelabel{##1}\endcsname {\@optionalarg}% - % Left-justify alpha labels, unless \biblabel{pre,post}contents - % are already defined. - \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}% - % Right-justify numeric labels, unless \biblabel{pre,post}contents - % are already defined. - \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 - }% - % - % Do the printing (we're producing the bibliography, remember). - % - \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 - % - % Punctuation won't affect spacing; - \frenchspacing - % the penalties below are from LaTeX's [article,book,report].sty; - \clubpenalty = 4000 \widowpenalty = 4000 - % the next two values come from LaTeX's \sloppy command; - \tolerance = 10000 \hfuzz = .5pt - \everypar = {\hangindent = \biblabelwidth - \advance\hangindent by \biblabelextraspace}% - \bblrm - % the \parskip is a guess at what looks good; - \parskip = 1.5ex plus .5ex minus .5ex - % and the space between label and text comes from LaTeX's \labelsep. - \biblabelextraspace = .5em - \bblhook - % - \input \bblfilebasename.bbl - \endgroup -}% -% -% The widest label's width is useful for redefining \biblabelprint; -% you redefine \biblabelwidth, in effect, by redefining the -% \biblabelcontents macro that appears below. And \biblabelextraspace, -% which is redefinable inside \bblhook, is added to \biblabelwidth to -% determine the amount of hanging indentation. -% -\@innernewdimen\biblabelwidth -\@innernewdimen\biblabelextraspace -% -% Now come the main macros that are related to the printing of the -% bibliography. Since you might want to redefine them, they are given -% default definitions outside of \@readbblfile. -% -% The first one controls the printing of a bibliography entry's label. -% If you change it, make sure that it starts with something like -% \noindent or \indent or \leavevmode that puts TeX into horizontal mode -% (even if the label itself is empty); otherwise, the hanging -% indentation will get messed up in certain circumstances. -% -\def\biblabelprint#1{% - \noindent - \hbox to \biblabelwidth{% - \biblabelprecontents - \biblabelcontents{#1}% - \biblabelpostcontents - }% - \kern\biblabelextraspace -}% -% -% If you are using numeric labels, and you want them left-justified -% (numeric labels by default are right-justified), do something like: -% \def\biblabelprecontents{\relax} -% \def\biblabelpostcontents{\hss} -% -% By default the labels are typeset in \bblrm, and enclosed in brackets. -\def\biblabelcontents#1{{\bblrm [#1]}}% -% -% The main text, too, is typeset using \bblrm, which is \rm by default. -\def\bblrm{\rm}% -% -% Emphasis for producing, e.g., titles, is done with \it by default. -\def\bblem{\it}% -% -% Another way to emphasize, with built-in italic correction. (Doesn't -% look for a following comma or period, though.) -\def\bblemph#1{{\bblem #1\/}} -% -% And bold. -\def\textbf#1{{\bf #1}} -% -% \mbox is \hbox forcing horizontal mode. -\def\bblmbox{\leavevmode\hbox} -% -% Some styles use a caps-and-small-caps font for author names. LaTeX -% defines an \sc command but plain TeX doesn't, so we need one here. -% The definition below doesn't load the font unless it's needed, but it -% tries to load only the 10pt version, because it might not exist at -% other point sizes. -% -\def\bblsc{\ifx\@scfont\@undefined - \font\@scfont = cmcsc10 - \fi - \@scfont -}% -% -% The major parts of an entry are separated with \bblnewblock. The -% numbers below are taken from LaTeX's `article' style. -% -\def\bblnewblock{\hskip .11em plus .33em minus .07em }% -% -% Here's where you stick any other bibliography-formatting goodies, or -% redefine the values above. -% -\let\bblhook = \empty -% -% And here you can add code to be executed before each item (before -% \biblabelprint is called). The parameter is citation label for this -% bibliography entry. -% -\let\bblitemhook = \@gobble -% -% -% Here are the four default definitions for formatting the in-text -% citations. These are what you redefine (after your \input btxmac but -% before your \bibliography) to get parens instead of brackets, or -% superscripts, or footnotes, or whatever. -% -\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) -% -% That scheme is pretty flexible. For example you could use -% \def\printcitestart{\unskip $^\bgroup} -% \def\printcitefinish{\egroup$} -% \def\printbetweencitations{,} -% \def\printcitenote#1{\hbox{\sevenrm\space (#1)}} -% \font\eighttt = cmtt8 -% \scriptfont\ttfam = \eighttt -% to get superscripted in-text citations. (The scriptfont stuff -% exists only to print an undefined citation; it's in cmtt8 because -% there is no cmtt7.) To get something radically different, however, -% you'll have to define your own \cite command. -% -% When we read `\citation' from the .aux file, it means nothing. -% -\let\citation = \@gobble -% -% -% Now comes the stuff for dealing with LaTeX's \newcommand. As -% mentioned earlier, this \newcommand will redefine a preexisting -% command; that's different from how LaTeX's \newcommand behaves. -% -\@innernewcount\@numparams -% -% \newcommand{\foo}[n]{text} defines the control sequence \foo to have n -% parameters, and replacement text `text'. In LaTeX, this command gives -% a warning if \foo is already defined, and allows a second -% optional argument (which is a default value for the first optional -% arg) but we don't bother with either of these. -% -\ifx\newcommand\undefined -\def\newcommand#1{% - \def\@commandname{#1}% - \@getoptionalarg\@continuenewcommand -}% -\fi -% -% -% \renewcommand{\foo}[n]{text}, for our purposes, is the same as -% \newcommand. In LaTeX, it gives a warning if \foo is not already defined. -% -\ifx\renewcommand\undefined -\let\renewcommand = \newcommand -\fi -% -% -% \providecommand{\foo}[n]{text} defines \foo as in \newcommand only if -% \foo is not already defined. -% -\ifx\providecommand\undefined -\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 -% -% -% Figure out if this definition has parameters. -% -\def\@continuenewcommand{% - % If no optional argument, we have zero parameters. Otherwise, we - % have that many. - \@numparams = \ifx\@optionalarg\empty 0\else\@optionalarg \fi \relax - \@newcommand -}% -% -% \@numparams is how many arguments this command has. The name of the -% command is \@commandname. The replacement text for the new macro is #1. -% -\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{% - % This is disgusting, but \loop doesn't work inside \edef, - % because \body isn't defined. - \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}% -}% -% -%% [[[end of BibTeX-specific stuff]]] -% -% -% Names of references (arguments given in the \cite and \nocite -% commands) and file names (arguments given in the \bibliography and -% \bibliographystyle commands) are recorded in \jobname.aux, called the -% \@auxfile in these macros. Here's how they get read in. -% -\def\@readauxfile{% - \if@auxfiledone \else % remember: \@auxfiledonetrue if \noauxfile is defined - \global\@auxfiledonetrue - \@testfileexistence{aux}% - \if@fileexists - \begingroup - % Because we might be in horizontal mode when \@readauxfile - % is called (if it's in response to a \cite or \nocite), we - % want to ignore all the would-be spaces at the ends of - % lines in the aux file. Fortunately, it's highly unlikely - % an end-of-line might actually be desired. - % And because we don't change the category code of anything - % but @, primitives like \gdef can't be used to define labels - % in the aux file. The solution adopted by btxmac.tex is to - % write `\@citedef{LABEL}{DEFINITION}' to the aux file, and - % use \csname on LABEL. - \endlinechar = -1 - \catcode`@ = 11 - \input \jobname.aux - \endgroup - \else - \message{\@undefinedmessage}% - \global\@citewarningfalse - \fi - \immediate\openout\@auxfile = \jobname.aux - \fi -}% -% -% The \@readauxfile macro does all that work the first time it's called. -% Since it's called once for every \cite, \nocite, \bibliography, and -% \bibliographystyle command that the user issues, we need to remember -% whether the work's been done. It's considered done if we're not to do -% it---that is, if \noauxfile is defined. -% -\newif\if@auxfiledone -\ifx\noauxfile\@undefined \else \@auxfiledonetrue\fi -% -% It's conceivable you'd want to change how other characters are read; -% to do that, change their category code before doing \input btxmac. -% -% -% After reading the .aux file, \@readauxfile opens it for writing. -% The \@writeaux macro does the actual writing (as long as -% \noauxfile is undefined). -% -\@innernewwrite\@auxfile -\def\@writeaux#1{\ifx\noauxfile\@undefined \write\@auxfile{#1}\fi}% -% -% -% A macro package that uses btxmac.tex might define -% \@undefinedmessage (before doing an \input btxmac). -% -\ifx\@undefinedmessage\@undefined - \def\@undefinedmessage{No .aux file; I won't give you warnings about - undefined citations.}% -\fi -% -% Even if citations are undefined, we want to complain only if -% \@citewarningtrue. The default is to set \@citewarningtrue unless -% \noauxfile is defined. Again, a macro package that uses -% btxmac.tex might want to redefine this. -% -\@innernewif\if@citewarning -\ifx\noauxfile\@undefined \@citewarningtrue\fi -% -% -% Finally, before leaving we restore @'s old category code. -% -\catcode`@ = \@oldatcatcode diff --git a/Master/texmf-dist/tex/eplain/base/eplain.tex b/Master/texmf-dist/tex/eplain/base/eplain.tex deleted file mode 100644 index 7ee9282e9b9..00000000000 --- a/Master/texmf-dist/tex/eplain/base/eplain.tex +++ /dev/null @@ -1,3670 +0,0 @@ -%% @texfile{ -%% author = "Karl Berry, Steven Smith, Oleg Katsitadze, and others", -%% version = "3.0", -%% date = "Tue Sep 20 20:33:53 EEST 2005", -%% filename = "eplain.tex", -%% email = "bug-eplain@tug.org", -%% checksum = "3670 8000 118413", -%% 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. 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 -\begingroup - \expandafter\let\expandafter\x\csname ver@ifpdf.sty\endcsname - \ifcase 0% - \ifx\x\relax % plain - \else - \ifx\x\empty % LaTeX - \else - 1% - \fi - \fi - \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}% - \endgroup - \fi -\endgroup -\begingroup - \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\relax - \xdef#1{#3}% - \fi - }% - \fi -\expandafter\x\csname ver@ifpdf.sty\endcsname -\ProvidesPackage{ifpdf}% - [2005/07/22 v1.3 % - Providing \expandafter\string\csname ifpdf\endcsname\space (HO)] -\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 - \fi -\endgroup -\newif\ifpdf -\ifx\pdfoutput\undefined -\else - \ifx\pdfoutput\relax - \else - \ifnum\pdfoutput<1 % - \else - \pdftrue - \fi - \fi -\fi -\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 \ifpdf\else not \fi detected}% -\endgroup -\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\@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.99k-18aug05", -%% date = "19 August 2005", -%% filename = "btxmac.tex", -%% address = "tex-eplain@tug.org", -%% checksum = "842 4571 33524", -%% 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\@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\@optionaltemp = #1% - \let\@optionalnext = \relax - \@futurenonspacelet\@optionalnext\@bracketcheck -}% -\def\@bracketcheck{% - \ifx [\@optionalnext - \expandafter\@@getoptionalarg - \else - \let\@optionalarg = \empty - \expandafter\@optionaltemp - \fi -}% -\def\@@getoptionalarg[#1]{% - \def\@optionalarg{#1}% - \@optionaltemp -}% -\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\textbf#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 -\def\newcommand#1{% - \def\@commandname{#1}% - \@getoptionalarg\@continuenewcommand -}% -\fi -\ifx\renewcommand\undefined -\let\renewcommand = \newcommand -\fi -\ifx\providecommand\undefined -\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\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 - \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}% -}% -\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{\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 - \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 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 -%%% @texfile{ -%%% author = "Philip Taylor", -%%% version = "3.04", -%%% date = "25 July 1992", -%%% time = "17:07 EDT", -%%% filename = "path.sty", -%%% address = "The Computer Centre -%%% RHBNC, University of London -%%% Egham Hill -%%% Egham, Surrey TW20 0EX, ENGLAND", -%%% telephone = "Tel: +44 784 443172", -%%% FAX = "Fax: +44 784 434348", -%%% checksum = "41143 321 1758 13526", -%%% email = "P.Taylor@Vax.Rhbnc.Ac.Uk (Internet)", -%%% 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; here are two examples: -%%% -%%% Friesland%rz.informatik.uni-hamburg.dbp.de%germany.csnet@relay.cs.net -%%% -%%% 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 -%%% -%%% \documentstyle[...,path,...]{...} -%%% -%%% 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.} -%%% } -\edef\path{\the\catcode`@}% -\catcode`@ = 11 -\let\@oldatcatcode = \path -\newcount \c@tcode -\newcount \c@unter -\newif \ifspecialpathdelimiters -\begingroup -\catcode `\ = 10 -\gdef \passivesp@ce { }% -\catcode `\ = 13\relax% -\gdef\activesp@ce{ }% -\endgroup -\def \discretionaries % - {\begingroup - \c@tcodes = 13 - \discr@tionaries - }% -\def \discr@tionaries #1% - {\def \discr@ti@naries ##1#1% - {\endgroup - \def \discr@ti@n@ries ####1% or - {\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 - }% -\let\pathafterhook = \relax -\def \path - {\ifspecialpathdelimiters - \begingroup - \c@tcodes = 12 - \def \endp@th {\endgroup \endgroup \pathafterhook}% - \else - \def \endp@th {\endgroup \pathafterhook}% - \fi - \p@th - }% -\def \p@th #1% - {\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% - {\leavevmode \hbox {}##1% - \endp@th - }% - \p@@th - }% -\def \c@tcodes {\afterassignment \c@tc@des \c@tcode}% -\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 - }% -\catcode `\@ = \@oldatcatcode -\discretionaries |~!@$%^&*()_+`-=#{}[]:";'<>,.?\/|% -\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{&}% - \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{&}% - \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}}% -{% - \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\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 - \csname open#1file\endcsname - \toks0 = {\expandafter\noexpand \csname #1#2entry\endcsname}% - \def\temp{#3}% - \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\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}}% -\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 -}% -\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#3{% - \expandafter\gdef\csname\xrlabel{#1}\endcsname{#2}% - \setpropertyglobal{\xrlabel{#1}}{class}{#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\temp{\getproperty{\xrlabel{#3}}{class}}% - \expandafter\ifx\csname \temp word\endcsname\relax - \ifx\@generalrefoptarg\empty \else {\@@hloff\@generalrefoptarg\reftie}\fi - \else - \begingroup - \@@hloff - \ifx\@generalrefoptarg\empty \else \@generalrefoptarg \refspace \fi - \csname \temp 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 -}% -\def\@eqdefn#1#2{% - \hl@define@eqlabel{#1}% - \hldest@impl{eq}{\hl@eqlabel}% - \begingroup - \@@hldestoff - \definexref{#1}{#2}{eq}% - \endgroup - \@definelabel{#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{% - \begingroup - \@@hldestoff - #1{#2}% - \endgroup - \@maybedisableeqno - \eqno % \hl@define@eqlabel already called in \@eqdefn. - \hldest@impl{eq}{\hl@eqlabel}% - \let\@optionalarg\empty % \@fineqref will examine \@optionalarg. - {\@@hloff\@fineqref{#2}}% No hyperlink here. - \@mayberestoreeqno - \ignorespaces -}% -\let\@mayberestoreeqno = \relax -\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\eqrefn{\@getoptionalarg\@fineqrefn}% -\def\@fineqrefn#1{% - \eqref@start{#1}% - \plain@xrefn{#1}% - \hlend -}% -\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 -\outer\def\defineindex#1{% - \def\@idxprefix{#1}% - \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 indexfileopened\endcsname \else - \expandafter\immediate\openout\csname @\@idxprefix indexfile\endcsname = - \indexfilebasename.\@idxprefix dx - \expandafter\global\csname @\@idxprefix indexfileopenedtrue\endcsname - \fi - \def\temp{#1}% - \edef\@wr{% - \expandafter\write\csname @\@idxprefix indexfile\endcsname{% - \string\indexentry - {\sanitize\temp}% - {\noexpand#2}% - }% - }% - \@wr - \ifindexproofing \insert\@indexproof{\indexproofterm{#1}}\allowhyphens\fi - \hookrun{afterindexterm}% - \ifsilentindexentry \expandafter\ignorespaces\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\xrlabel{\idxpagexref{\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% - \@getoptionalarg\@finidxgetopt -}% -\def\@finidxgetopt{% - \@hlidxencaptrue - \for\@idxarg:=\@optionalarg\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}}% - {\@@hldestoff \definexref{\idxpagexref{\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}% -\def\idxpagexref#1{@@IDXPG@@#1}% -\newcount\hlidxlabelnumber -\def\hlidxlabel{IDX\the\hlidxlabelnumber}% -\def\hlidxpagelabel#1{IDXPG#1}% -\def\hlidx#1#2#3{% - \hlstart@impl{idx}{#1}% - \csname #2\endcsname{#3}% - \hlend@impl{idx}% -}% -\def\hlidxpage#1#2{% - \@hlidxgetpages{#2}% - \expandafter\let\expandafter\@idxpageencap\csname #1\endcsname - \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\@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\@idx#1{% - #1% Produce TERM as output. - \@idxcollect{#1}{}% -}% -\def\@sidx#1{\@idxmaintoks = {#1}\@getoptionalarg\@finsidx}% -\def\@finsidx{% - \@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#2{% - #1{#2}% Produce \CS{TERM} as output. - \@idxconstructmarked\@idxmaintoks{#1}{#2}% - \@idxsubtoks = {}% - \@idxtokscollect -}% -\def\@sidxmarked#1#2{% - \@idxconstructmarked\toks@{#1}{#2}% - \edef\temp{{\the\toks@}}% - \expandafter\@sidx\temp -}% -\def\@idxsubmarked#1#2#3{% - #1 #2{#3}% produce `TERM \CS{SUBTERM} as output. - \@sidxsubmarked{#1}{#2}{#3}% -}% -\def\@sidxsubmarked#1#2#3{% - \@idxmaintoks = {#1}% - \@idxconstructmarked\@idxsubtoks{#2}{#3}% - \@idxtokscollect -}% -\def\idxnameseparator{, }% as in `Tachikawa, Elizabeth' -\def\@idxcollectname#1#2{% - \def\temp{#1}% - \ifx\temp\empty - \toks@ = {}% - \else - \toks@ = {\idxnameseparator #1}% - \fi - \toks2 = {#2}% - \edef\temp{\the\toks2 \the\toks@}% -}% -\def\@idxname#1#2{% - #1 #2% Separate the names by a space in the output. - \@idxcollectname{#1}{#2}% - \expandafter\@idxcollect\expandafter{\temp}{}% -}% -\def\@sidxname#1#2{% - \@idxcollectname{#1}{#2}% - \expandafter\@sidx\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#1#2{{\seevariant \indexseeword\/ }#1}% -\def\indexseealsowords{see also}% -\def\indexseealso#1#2{{\seevariant \indexseealsowords\/ }#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 -\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 -}% -\def\gutterbox{\vbox to \dimen0{\vfil\hbox{\hfil}\vfil}}% -\newif\if@forceextraline\@forceextralinefalse -\def\@columnsplit{% - \splittopskip = \topskip - \splitmaxdepth = \baselineskip - \dimen@ = \ht255 - \divide\dimen@ by \@numcolumns - \if@forceextraline - \advance\dimen@ by \baselineskip - \fi - \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 - \if@forceextraline % If this is the first time - \else % through, save the single - \setbox\@forcelinebox=\copy\@partialpage % column material. - \fi - \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{% - \@columnsplit - \@recoverclubpenalty - \hsize = \@normalhsize % Local to \output's group. - \vsize = \@normalvsize - \the\previousoutput - \unvbox\@partialpage - \penalty\outputpenalty - \global\vsize = \@numcolumns\@normalvsize -}% -\def\singlecolumn{% - \@ndcolumns - \chardef\@numcolumns = 1 - \vskip\belowcolumnskip - \nointerlineskip -}% -\newbox\@forcelinebox -\def\@endcolumns{% - \global\let\@ndcolumns = \relax - \par % Shouldn't start in horizontal mode. - \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\setbox255 = \copy2 % Retrieve what the fake \output set. - \@columnsplit - \ifvoid\@partialpage - \else % There is some left-over. - \setbox0=\box\@partialpage % Merely to void \@partialpage - \global\setbox255 = \box2 % Retrieve what the fake \output set. - \@forceextralinetrue % Add \forcelinebox to \box255 to save single - \@columnsplit % column material. - \global\setbox255 = \vbox{\box\@forcelinebox\box255}% - \fi - \global\vsize = \@normalvsize - \global\hsize = \@normalhsize - \global\output = \expandafter{\the\previousoutput}% - \ifvoid\topins\else\topinsert\unvbox\topins\endinsert\fi - \unvbox255 -}% -\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 set so far. - \temp@dimen = \vsize % = \@numcolumns * columnheight - \divide\temp@dimen by \@numcolumns % find out column height - \loop - \ifdim \dimen@ > \temp@dimen - \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 - \nointerlineskip - \par - \nointerlineskip - \penalty0\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#3{% - \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 type `\@hltype'}% - \fi - \for\hl@arg:=#2\do{% - \ifx\hl@arg\empty \else - \expandafter\hl@set@opt\hl@arg=,% - \fi - }% - \edef\@hllabel{#3}% - \after@hl@getparam - \ignorespaces -}% -\def\hl@set@opt#1=#2,{% - \expandafter\ifx\csname \hl@prefix @opt@#1\endcsname \relax - \errmessage{Invalid 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}% -\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 parameter `\hl@prefix:\hl@param:\hl@group' is not defined}% - \fi - \ifx\hl@param\hl@opts@word - \if@params@override - \toks@=\expandafter{#1}% - \ece\edef{\hl@prefix @\hl@param @\hl@group}{\the\toks@}% - \else - \hl@update@opts@with@list{#1}% #1 will be used in the \for - \fi - \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 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 -\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@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 -\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\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{^^JUsing `pdftex' hyperlink driver.}% - \else - \def\hl@selecteddriver{dvipdfm}% - \message{^^JUsing `dvipdfm' hyperlink driver.}% - \fi - \else - \expandafter\ifx\csname hldriver@\hl@selecteddriver\endcsname \relax - \errmessage{No hyperlink driver `\hl@selecteddriver' available}% - \fi - \fi - \csname hldriver@\hl@selecteddriver\endcsname - \def\@finenablehyperlinks{\errmessage{Hyperlink driver `\hl@selecteddriver' - already selected}}% - \let\hldriver@nolinks\undefined - \let\hldriver@pdftex \undefined - \let\hldriver@dvipdfm\undefined - \let\hloff\@hloff - \let\hlon\@hlon - \let\hldestoff\@hldestoff - \let\hldeston\@hldeston - \hlon[*,]% - \hldeston[*,]% -}% -\def\hldriver@nolinks{% - \def\@hldest##1##2##3{% - \ifvmode - \write-1{\string\hldest: ##3}% - \else - \allowhyphens - \smash{\write-1{\string\hldest: ##3}}% - \allowhyphens - \fi - \ignorespaces - }% - \def\@hlstart##1##2##3{% - \leavevmode - \begingroup % Start the color group. - \write-1{\string\hlstart: ##3}% - \ignorespaces - }% - \def\@hlend{\write-1{\string\hlend}\endgroup}% End the group from \@hlstart. -}% -\def\hldriver@pdftex{% -\ifpdf % PDF output is enabled. - \def\hl@raw@word{raw}% - \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 - \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{Warning: `pdftex' hyperlink driver: PDF output is - not enabled, falling back on `nolinks' driver.}% - \hldriver@nolinks -\fi -}% -\def\hldriver@dvipdfm{% - \def\hl@raw@word{raw}% - \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 - \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. -}% -\newcount\phantomeqnumber -\def\phantomeqlabel{PHEQ\the\phantomeqnumber}% -\def\hl@define@eqlabel#1{% - \ifempty{#1}% - \global\advance\phantomeqnumber by1 - \xdef\hl@eqlabel{\phantomeqlabel}% - \else - \gdef\hl@eqlabel{#1}% - \fi -}% -\let\hldeston\relax \let\hldestoff\relax -\let\hlon\relax \let\hloff\relax -\@@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 - #1% - \usepkg@at@begin@document - \global\let\usepkg@at@begin@document\empty - \global\let\usepackage\fake@usepackage -}% -\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 - \global\let\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}\else - \errmessage{Package `\usepkg@pkg' already loaded}% - \fi - \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 }% -\def\@spaces{\space\space\space\space}% -\def\@inmatherr#1{% - \relax - \ifmmode - \errmessage{The command is invalid in math mode}% - \fi -}% -\let\wlog = \@plainwlog -\catcode`@ = \@eplainoldatcode -\def\fmtname{eplain}% -\def\eplain{t}% -{\edef\plainversion{\fmtversion}% - \xdef\fmtversion{3.0: 20 September 2005 (and plain \plainversion)}% -}% diff --git a/Master/texmf-dist/tex/eplain/btxmac.tex b/Master/texmf-dist/tex/eplain/btxmac.tex new file mode 100644 index 00000000000..4b7fda7c61e --- /dev/null +++ b/Master/texmf-dist/tex/eplain/btxmac.tex @@ -0,0 +1,906 @@ +%% @texfile{ +%% author = "Karl Berry and Oren Patashnik", +%% version = "0.99k-18aug05", +%% date = "19 August 2005", +%% filename = "btxmac.tex", +%% address = "tex-eplain@tug.org", +%% checksum = "842 4571 33524", +%% codetable = "ISO/ASCII", +%% supported = "yes", +%% docstring = "Defines macros that make BibTeX work with plain TeX", +%% } +% BibTeX-for-TeX macros, version 0.99k, for BibTeX 0.99c, TeX 3.0 or later. +% Copyright (C) 1990, 1991, 1992, 1995, 2005 Karl Berry & Oren Patashnik. +% +% Unlimited copying and redistribution of this file are permitted as +% long as this file is not modified. Modifications (and redistribution +% thereof) are permitted, but only if the resulting file is not named +% btxmac.tex. +% +% This file contains TeX macros that allow BibTeX, a bibliography +% program that was originally designed for use with LaTeX, to work with +% plain TeX. Please report any bugs (outright goofs, improvable macros, +% misfeatures, or unclear documentation) to Oren Patashnik +% (opbibtex@cs.stanford.edu). These macros will become frozen shortly +% after BibTeX version 1.00 is released. +% +% AMS-TEX WARNING: We tried very hard, for version .99i of these macros, +% to make them compatible with AmS-TeX. We succeeded to the extent +% that, if you use one of the standard bibliography styles, you probably +% won't notice any problems with version 0.99i of btxmac.tex. But +% ultimately we failed, in that the inherent incompatibilities between +% plain TeX and AmS-TeX kept making these macros break, for certain +% inputs or certain styles. Examples: (1) AmS-TeX treats at-signs as +% special, in ways that plain TeX and LaTeX don't, so that, for example, +% you can't have any `@' characters in an argument to the \cite command, +% the way you can in TeX or LaTeX; (2) AmS-TeX decided that plain TeX's +% and LaTeX's macron-accent control sequence `\=' should be undefined; +% so you'll need to define `\=' to be `\B' to get the xampl.bib example +% suggested below to work with AmS-TeX; (3) AmS-TeX redefines the tie +% character `~' of plain TeX, and AmS-TeX's `amsppt' style redefines +% plain TeX's `\nobreak' macro, so that if you use an author-date style +% like `apalike' and you have a multiple-author reference for which the +% author-date style automatically produces a citation in the text like +% `(Jones et~al., 1992)' you will throw AmS-TeX's `amsppt' style into +% an infinite loop, exceeding its input stack size. +% +% In practice, such incompatibilities surface infrequently; but it is +% now clear to us that it's not worth the effort (perhaps it's not even +% possible) to make the btxmac.tex macros robust when used both with +% plain TeX and Ams-TeX. If the BibTeX/AmS-TeX results attainable with +% the current btxmac.tex macros are sufficient, fine. But if there's a +% demand for more robust BibTeX/AmS-TeX behavior, then someone who's +% very familiar with the AmS-TeX package should probably make an +% amsbtxmc.tex version of the macros (remembering to follow the +% copyright restrictions above). Until then, if you're an AmS-TeX user, +% or a LaTeX or plain TeX user sharing files with an AmS-TeX user, beware. +% END OF AMS-TEX WARNING. +% +% To use these macros you should be familiar with how BibTeX interacts +% with LaTeX, since BibTeX's interaction with TeX is very similar; that +% interaction is explained in the LaTeX manual. It also helps to +% have read "BibTeXing", the documentation that accompanies BibTeX. +% +% Then, if you want, you should redefine any of the macros that begin +% with `\bbl' or `\biblabel' or `\print' that you need to get formatting +% different from the default (the default settings are designed to +% accompany a bibliography style like BibTeX's standard style `plain'). +% The macros you might want to change are described briefly a few +% paragraphs hence. +% +% To get started without reading any documentation, try running the +% short .tex file below through TeX and BibTeX. +% +% Remember the general scheme: Running (La)TeX writes information on the +% .aux (auxiliary) file; then running BibTeX reads information from the +% .aux, .bst (style), and .bib (database) files, and writes information +% (the bibliography) on a .bbl file; then running (La)TeX incorporates +% the bibliography; then running (La)TeX once more fixes the remaining +% forward references into the bibliography. Thus, to get everything +% incorporated into your output, you'll have to run (La)TeX, BibTeX, +% (La)TeX, (La)TeX. (Standup, sitdown, fight, fight, fight.) +% +% These macros can stand alone or they can be \input into a macro +% package, like Eplain, that is sufficiently compatible with plain TeX. +% To use these macros to format the 0.99 version of the xampl.bib file +% that's distributed with BibTeX (that version of the file has no +% self-identification), you'll need to define \mbox, which is a LaTeX +% command, to be \hbox, as in the example below. +% +% Here's an eight-line plain TeX file for trying out btxmac.tex; of course +% you'll have to remove the comment characters at the beginning of each +% line, and, depending on your system, you might have to take steps so +% that BibTeX can "see" the files xampl.bib and plain.bst (BibTeX will +% give you two empty-field warning messages that you should ignore). +% +% \input btxmac +% \noindent This cites Aamport's gnominious article~\cite{article-full}. +% \medskip +% \leftline{\bf References} +% \nocite{*} % put all database entries into the reference list +% \bibliographystyle{plain} % specify plain.bst as the style file +% \bibliography{xampl} % specify the database files; here, just xampl.bib +% \bye +% +% +% HISTORY +% +% Karl Berry wrote the original version of these macros in 1989 and +% 1990, for use in his `Eplain' package. Oren Patashnik modified them +% slightly in July 1990, as part of the official BibTeX distribution. +% +% 1-Aug-90 Version 0.99a, not released to the general public. +% 14-Aug-90 0.99b, first general release. +% 26-Aug-90 0.99c, made \@undefinedmessage work with other macro packages. +% 6-Sep-90 0.99d, allowed for general formatting of bibliography labels, +% for general formatting of (in-text) citations, and for +% changing certain catcodes while reading the .aux file. +% 14-Nov-90 0.99e, changed the way \@setletters works, made some \new...'s +% non-outer, and changed the way Eplain reads this file. +% 12-Dec-90 0.99f, made \@resetnumerals change the `,' and `.' catcodes; and +% added \biblabelextrahang, \@getoptionalarg, and \bblsc. +% 11-Mar-91 0.99g, made a few minor changes required by the way Eplain reads +% this file, but no functional changes. +% 24-Apr-91 0.99h, inhibited the reading and writing of the .aux file if it +% isn't used or if the \noauxfile macro is defined, and +% removed some .aux-file-opening detritus; printed the +% cite-key of undefined citations in \tt font; changed the +% catcode of `_' inside \cite; and called \@resetnumerals +% from inside a group. +% 29-Feb-92 0.99i, made these macros semi-compatible with AmS-TeX; removed +% \@resetnumerals, \@setletters, \@tokstostring, and +% friends; changed the way \cite handles catcodes; changed +% \@getoptionalarg, and had \bibitem and \newcommand use +% it; added \@futurenonspacelet and (to facilitate the use +% of multiple reference lists) \bblfilebasename; changed +% \biblabelprint to use the new macros \biblabelprecontents +% and \biblabelpostcontents, and to, by default, right- +% justify numeric labels; and renamed \biblabelextrahang to +% the more descriptive \biblabelextraspace. +% 14-Mar-92 0.99j, made 0.99i's use of `\\' local to btxmac.tex. +% 13-Nov-95 0.99k, defined \begin and \end (while reading bbl file) only if +% it wasn't already defined. +% 04-Aug-04 0.99l, defined \renewcommand and \providecommand, since +% some AMS style files use them. Also defined +% \emph, \textbf, and \mbox, since many .bib files +% use them. And made these definitions (and others) +% only effective if not already defined. +% +% The LaTeX-related commands defined in this file include +% (a) the four commands that a user types (\bibliography, +% \bibliographystyle, \cite, and \nocite); +% (b) three commands that BibTeX looks for in the .aux +% file (\bibdata, \bibstyle, and \citation---there is a fourth command +% that BibTeX looks for, but that command is related to LaTeX's \include +% facility, so these macros ignore that command); and +% (c) the LaTeX commands (\newcommand, \renewcommand, \providecommand) +% that are written by a standard (alpha) or AMS bibliography style. +% (d) a few more LaTeX commands (\emph, \textbf, \mbox) which many .bib +% files use. +% +% The definitions here are not the same as the corresponding LaTeX +% definitions (those LaTeX definitions depend on a significant fraction +% of LaTeX itself). But the only significant differences are with the +% \*command macros, which in LaTeX (a) give warnings in various +% circumstances; (b) allow a second optional argument; and (c) make the +% defined control sequences \long. The versions here don't do any of +% those things. +% +% To summarize: Unless you know what you're doing, you shouldn't define +% any control sequences with these ten names: +% +% \bibdata +% \bibliography +% \bibliographystyle +% \bibstyle +% \citation +% \cite +% \newcommand +% \nocite +% \providecommand +% \renewcommand +% +% There are other commands written by one or more of the four standard +% (plain, abbrv, alpha, unsrt) or four semistandard (acm, apalike, +% ieeetr, siam) bibliography styles, or commonly used in .bib files. +% These take effect only within the bibliography, and are redefinable, +% as explained later: +% +% \em +% \emph +% \mbox +% \newblock +% \sc +% \textbf +% +% There's one control sequence you might want to use (but not redefine) +% in redefining \biblabelprint: +% +% \biblabelwidth +% +% There are fifteen other control sequences (explained later in more detail) +% that the macros of this file will use if you define them---you should +% define them after the \input btxmac command but before the \bibliography +% command. The first six begin with `\bbl' and affect fonts, spacing, +% perhaps other characteristics of the bibliography, and which .bbl files +% get read; the next five begin with `\biblabel' and determine how labels +% are formatted in the bibliography; and the last four begin with `\print' +% and determine how the in-text citations are formatted: +% +% \bblem +% \bblfilebasename +% \bblhook +% \bblnewblock +% \bblrm +% \bblsc +% \biblabelcontents +% \biblabelprecontents +% \biblabelprint +% \biblabelpostcontents +% \biblabelextraspace +% \printbetweencitations +% \printcitefinish +% \printcitenote +% \printcitestart +% +% If it's defined before the \input btxmac command, the control sequence +% below inhibits the reading and writing of the .aux file(s), and the +% issuing of related warning messages. Any definition will do. This +% feature might help when you're working on draft stages of a document: +% +% \noauxfile +% +% +% Here's another control sequence (it's described later) that you +% probably won't want to redefine unless you are writing another macro +% package; if you do redefine it, however, do it before the \input btxmac +% command (and notice that it has an `@' in its name): +% +% \@undefinedmessage +% +% Any other control sequence in this file that might conflict with +% something you've defined will have an `@' in its name, so such conflicts +% are unlikely; but if you're worried about a specific control sequence +% name, do a text search of this file to look for it. +% +% +% So to start things off we turn `@' into a letter (category code 11), +% keeping track of the old category code for future restoration. +% (Simply resetting it to 12 when we leave these macros is +% insufficient.) The use of `\cite' as a temporary control sequence is +% a kludge, but it's a reasonably simple way to accomplish what we need +% without possibly overwriting something (without an `@' in its name) +% that might already be defined. +% +\edef\cite{\the\catcode`@}% +\catcode`@ = 11 +\let\@oldatcatcode = \cite +\chardef\@letter = 11 +\chardef\@other = 12 +% +% +% Next come some things that will be useful later. +% +% Make an outer definition into an inner one (due to Chris Thompson). +% The arguments should be the control sequence to be defined, and the +% new of the \outer control sequence, as characters; the control +% sequence #1 is defined to be just the same as \csname#2\endcsname, but +% not \outer. For example, \@innerdef\innernewcount{newcount} would +% define \innernewcount to be a non-outer version of \newcount. +% +\def\@innerdef#1#2{\edef#1{\expandafter\noexpand\csname #2\endcsname}}% +% +% We use \@innerdef to make some of our allocations local, because +% Eplain includes our code inside a conditional. We put @'s in the +% names to minimize the (already small) chance of conflicts. +% +\@innerdef\@innernewcount{newcount}% +\@innerdef\@innernewdimen{newdimen}% +\@innerdef\@innernewif{newif}% +\@innerdef\@innernewwrite{newwrite}% +% +% +% Swallow one parameter. +% +\def\@gobble#1{}% +% +% +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\@undefined + \let\@linenumber = \empty % Pre-3.0. +\else + \def\@linenumber{\the\inputlineno:\space}% +\fi +% +% +% The following macro \@futurenonspacelet (from the TeXbook) behaves +% essentially like \futurelet except that it discards any implicit or +% explicit space tokens that intervene before a nonspace is scanned: +% +\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 + % space after it is seen). +\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= }% +% +% +% \@getoptionalarg\CS gets an optional argument from the input, enclosed +% in brackets, then expands \CS. We set \@optionalarg to \empty if we +% don't find one, otherwise to the text of the argument. This assumes +% the brackets don't have a funny category code. +% +\def\@getoptionalarg#1{% + \let\@optionaltemp = #1% + \let\@optionalnext = \relax + \@futurenonspacelet\@optionalnext\@bracketcheck +}% +% +% The \expandafter's in this macro let us avoid the use of \aftergroup, +% which is somewhat more expensive. +% +\def\@bracketcheck{% + \ifx [\@optionalnext + \expandafter\@@getoptionalarg + \else + \let\@optionalarg = \empty + % We can't do the \temp after the \fi, because then the \temp gets + % in the way of reading the optional argument from the input, if + % we do have one. + \expandafter\@optionaltemp + \fi +}% +% +\def\@@getoptionalarg[#1]{% + \def\@optionalarg{#1}% + \@optionaltemp +}% +% +% +% From LaTeX. +% +\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}% +}% +% +% +% This macro tests if a file \jobname.#1 exists, and sets \if@fileexists +% appropriately. If an optional argument is given, it is used as the +% root part of the filename instead of \jobname. +% +\@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 +}% +% +% +%% [[[start of BibTeX-specific stuff]]] +% +% Now come the four main LaTeX commands and their associated .aux +% commands. Just as in LaTeX, \bibliographystyle defines the BibTeX +% style name (.bst file, that is), and \bibliography defines the +% database (.bib) file(s). The corresponding .aux-file commands are +% \bibstyle and \bibdata, which are there only for BibTeX's (but not +% LaTeX's) use. +% +\def\bibliographystyle#1{% + \@readauxfile + \@writeaux{\string\bibstyle{#1}}% +}% +\let\bibstyle = \@gobble +% +% As well as writing the \bibdata command to tell BibTeX which .bib +% files to read, we read the .bbl file that BibTeX (or a person, +% conceivably) has produced. We use \bblfilebasename as the root of the +% filename to read; this defaults to \jobname. +% +\let\bblfilebasename = \jobname +\def\bibliography#1{% + \@readauxfile + \@writeaux{\string\bibdata{#1}}% + \@testfileexistence[\bblfilebasename]{bbl}% + \if@fileexists + % We just output a non-discardable item (the `whatsit' with the + % \bibdata command). This means that the glue that will be + % inserted next (\parskip or \baselineskip, most likely) will be a + % legal breakpoint. Most likely, this is after some kind of + % heading, where we don't want to allow a page break. So: + \nobreak + \@readbblfile + \fi +}% +\let\bibdata = \@gobble +% +% The \nocite{label,label,...} command writes its argument to \@auxfile, +% unless instructed not to, but produces no text in the document. Both +% the \nocite and \cite commands produce \citation commands in the .aux file. +% +\def\nocite#1{% + \@readauxfile + \@writeaux{\string\citation{#1}}% +}% +% +\@innernewif\if@notfirstcitation +% +% \cite[note]{label,label,...} produces the citations for the labels as +% well. If the optional argument `note' is present, it's added after +% the labels. Since \cite calls \nocite to do its .aux-file writing, +% \cite doesn't need to call \@readauxfile (\nocite does). +% +\def\cite{\@getoptionalarg\@cite}% +% +% Typeset the citations for the labels in #1, followed by the note, if +% it exists. To change the citation's format in the text, redefine one +% or more `\print...' macros, whose defaults appear later in this file. +% +\def\@cite#1{% + % Remember the optional argument, in case one of the macros we call + % below ends up looking for an optional argument itself. For + % example, if a \cite[note] triggers reading the .aux file, then the + % [note] would be clobbered, since \@testfileexistence looks for an + % optional arg. + \let\@citenotetext = \@optionalarg + % Start printing the text, beginning with a left bracket by default. + \printcitestart + % It's complicated, but because \nocite puts a `whatsit' onto the list, + % \nocite should follow \printcitestart. It's conceivable, but very + % unlikely, that this `whatsit' will cause a problem (glue that doesn't + % disappear when you want it to is the most likely symptom), requiring + % a change either to \printcitestart or to the label that the .bst file + % produces. + \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 + % Give it a dummy definition: + \expandafter\gdef\csname\@citelabel{#1}\endcsname{% + {\tt + \escapechar = -1 + \nobreak\hskip0pt + \expandafter\string\csname#1\endcsname + \nobreak\hskip0pt + }% + }% + \fi + % Now produce the text, whether it was undefined or not. + \printcitepreitem{#1}% + \csname\@citelabel{#1}\endcsname + \printcitepostitem + \@notfirstcitationtrue +}% +% +% Given a label `foo', the macro `\b@foo' is supposed to +% hold the text that should be produced. +% +\def\@citelabel#1{b@#1}% +% +% So, how does a citation label get defined? When we read the .bbl file +% (below), a \bibitem writes out a \@citedef command. And when we read +% the \@citedef, we define \@citelabel{#1}, where #1 is the user's +% label. +% +\def\@citedef#1#2{\expandafter\gdef\csname\@citelabel{#1}\endcsname{#2}}% +% +% +% Reading the .bbl file also produces the typeset bibliography. Please +% notice, however, that we do not produce the title for the references +% (e.g., `References'), as LaTeX does. The formatting and spacing of +% that title, whether it should go into the headline, and so on, are all +% things determined by your format. We cannot know those things in +% advance. If you wish, you can define \bblhook to produce the title. +% Or just do it before the \bibliography command. +% +\def\@readbblfile{% + % Define a counter to tell us which item number we are on, unless + % we've already defined it (because the document has more than one + % bibliography). + \ifx\@itemnum\@undefined + \@innernewcount\@itemnum + \fi + % + \begingroup + % If another package has already defined \begin, don't define our + % own simplistic \begin and \end; assume they want to take care of + % it themselves. (That way, their \begin's and \end's for other + % things can be used in the bib files.) + \ifx\begin\@undefined + \def\begin##1##2{% + % ##1 is just `thebibliography'. + % ##2 is the widest label. + % We set (new dimen) \biblabelwidth based on the widest label + \setbox0 = \hbox{\biblabelcontents{##2}}% + \biblabelwidth = \wd0 + }% + \let\end = \@gobble % The arg is `thebibliography' again. + \fi + % + % Here we have two possibilities: + % \bibitem[typesetlabel]{citationlabel} + % \bibitem{citationlabel} + % If we have the second of these, the citations are numbered, starting + % from one; we use our own count register \@itemnum for this. + % + \@itemnum = 0 + \def\bibitem{\@getoptionalarg\@bibitem}% + \def\@bibitem{% + \ifx\@optionalarg\empty + \expandafter\@numberedbibitem + \else + \expandafter\@alphabibitem + \fi + }% + \def\@alphabibitem##1{% + % Need \xdef here for various reasons. + \expandafter \xdef\csname\@citelabel{##1}\endcsname {\@optionalarg}% + % Left-justify alpha labels, unless \biblabel{pre,post}contents + % are already defined. + \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}% + % Right-justify numeric labels, unless \biblabel{pre,post}contents + % are already defined. + \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 + }% + % + % Do the printing (we're producing the bibliography, remember). + % + \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 + % + % Punctuation won't affect spacing; + \frenchspacing + % the penalties below are from LaTeX's [article,book,report].sty; + \clubpenalty = 4000 \widowpenalty = 4000 + % the next two values come from LaTeX's \sloppy command; + \tolerance = 10000 \hfuzz = .5pt + \everypar = {\hangindent = \biblabelwidth + \advance\hangindent by \biblabelextraspace}% + \bblrm + % the \parskip is a guess at what looks good; + \parskip = 1.5ex plus .5ex minus .5ex + % and the space between label and text comes from LaTeX's \labelsep. + \biblabelextraspace = .5em + \bblhook + % + \input \bblfilebasename.bbl + \endgroup +}% +% +% The widest label's width is useful for redefining \biblabelprint; +% you redefine \biblabelwidth, in effect, by redefining the +% \biblabelcontents macro that appears below. And \biblabelextraspace, +% which is redefinable inside \bblhook, is added to \biblabelwidth to +% determine the amount of hanging indentation. +% +\@innernewdimen\biblabelwidth +\@innernewdimen\biblabelextraspace +% +% Now come the main macros that are related to the printing of the +% bibliography. Since you might want to redefine them, they are given +% default definitions outside of \@readbblfile. +% +% The first one controls the printing of a bibliography entry's label. +% If you change it, make sure that it starts with something like +% \noindent or \indent or \leavevmode that puts TeX into horizontal mode +% (even if the label itself is empty); otherwise, the hanging +% indentation will get messed up in certain circumstances. +% +\def\biblabelprint#1{% + \noindent + \hbox to \biblabelwidth{% + \biblabelprecontents + \biblabelcontents{#1}% + \biblabelpostcontents + }% + \kern\biblabelextraspace +}% +% +% If you are using numeric labels, and you want them left-justified +% (numeric labels by default are right-justified), do something like: +% \def\biblabelprecontents{\relax} +% \def\biblabelpostcontents{\hss} +% +% By default the labels are typeset in \bblrm, and enclosed in brackets. +\def\biblabelcontents#1{{\bblrm [#1]}}% +% +% The main text, too, is typeset using \bblrm, which is \rm by default. +\def\bblrm{\rm}% +% +% Emphasis for producing, e.g., titles, is done with \it by default. +\def\bblem{\it}% +% +% Another way to emphasize, with built-in italic correction. (Doesn't +% look for a following comma or period, though.) +\def\bblemph#1{{\bblem #1\/}} +% +% And bold. +\def\textbf#1{{\bf #1}} +% +% \mbox is \hbox forcing horizontal mode. +\def\bblmbox{\leavevmode\hbox} +% +% Some styles use a caps-and-small-caps font for author names. LaTeX +% defines an \sc command but plain TeX doesn't, so we need one here. +% The definition below doesn't load the font unless it's needed, but it +% tries to load only the 10pt version, because it might not exist at +% other point sizes. +% +\def\bblsc{\ifx\@scfont\@undefined + \font\@scfont = cmcsc10 + \fi + \@scfont +}% +% +% The major parts of an entry are separated with \bblnewblock. The +% numbers below are taken from LaTeX's `article' style. +% +\def\bblnewblock{\hskip .11em plus .33em minus .07em }% +% +% Here's where you stick any other bibliography-formatting goodies, or +% redefine the values above. +% +\let\bblhook = \empty +% +% And here you can add code to be executed before each item (before +% \biblabelprint is called). The parameter is citation label for this +% bibliography entry. +% +\let\bblitemhook = \@gobble +% +% +% Here are the four default definitions for formatting the in-text +% citations. These are what you redefine (after your \input btxmac but +% before your \bibliography) to get parens instead of brackets, or +% superscripts, or footnotes, or whatever. +% +\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) +% +% That scheme is pretty flexible. For example you could use +% \def\printcitestart{\unskip $^\bgroup} +% \def\printcitefinish{\egroup$} +% \def\printbetweencitations{,} +% \def\printcitenote#1{\hbox{\sevenrm\space (#1)}} +% \font\eighttt = cmtt8 +% \scriptfont\ttfam = \eighttt +% to get superscripted in-text citations. (The scriptfont stuff +% exists only to print an undefined citation; it's in cmtt8 because +% there is no cmtt7.) To get something radically different, however, +% you'll have to define your own \cite command. +% +% When we read `\citation' from the .aux file, it means nothing. +% +\let\citation = \@gobble +% +% +% Now comes the stuff for dealing with LaTeX's \newcommand. As +% mentioned earlier, this \newcommand will redefine a preexisting +% command; that's different from how LaTeX's \newcommand behaves. +% +\@innernewcount\@numparams +% +% \newcommand{\foo}[n]{text} defines the control sequence \foo to have n +% parameters, and replacement text `text'. In LaTeX, this command gives +% a warning if \foo is already defined, and allows a second +% optional argument (which is a default value for the first optional +% arg) but we don't bother with either of these. +% +\ifx\newcommand\undefined +\def\newcommand#1{% + \def\@commandname{#1}% + \@getoptionalarg\@continuenewcommand +}% +\fi +% +% +% \renewcommand{\foo}[n]{text}, for our purposes, is the same as +% \newcommand. In LaTeX, it gives a warning if \foo is not already defined. +% +\ifx\renewcommand\undefined +\let\renewcommand = \newcommand +\fi +% +% +% \providecommand{\foo}[n]{text} defines \foo as in \newcommand only if +% \foo is not already defined. +% +\ifx\providecommand\undefined +\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 +% +% +% Figure out if this definition has parameters. +% +\def\@continuenewcommand{% + % If no optional argument, we have zero parameters. Otherwise, we + % have that many. + \@numparams = \ifx\@optionalarg\empty 0\else\@optionalarg \fi \relax + \@newcommand +}% +% +% \@numparams is how many arguments this command has. The name of the +% command is \@commandname. The replacement text for the new macro is #1. +% +\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{% + % This is disgusting, but \loop doesn't work inside \edef, + % because \body isn't defined. + \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}% +}% +% +%% [[[end of BibTeX-specific stuff]]] +% +% +% Names of references (arguments given in the \cite and \nocite +% commands) and file names (arguments given in the \bibliography and +% \bibliographystyle commands) are recorded in \jobname.aux, called the +% \@auxfile in these macros. Here's how they get read in. +% +\def\@readauxfile{% + \if@auxfiledone \else % remember: \@auxfiledonetrue if \noauxfile is defined + \global\@auxfiledonetrue + \@testfileexistence{aux}% + \if@fileexists + \begingroup + % Because we might be in horizontal mode when \@readauxfile + % is called (if it's in response to a \cite or \nocite), we + % want to ignore all the would-be spaces at the ends of + % lines in the aux file. Fortunately, it's highly unlikely + % an end-of-line might actually be desired. + % And because we don't change the category code of anything + % but @, primitives like \gdef can't be used to define labels + % in the aux file. The solution adopted by btxmac.tex is to + % write `\@citedef{LABEL}{DEFINITION}' to the aux file, and + % use \csname on LABEL. + \endlinechar = -1 + \catcode`@ = 11 + \input \jobname.aux + \endgroup + \else + \message{\@undefinedmessage}% + \global\@citewarningfalse + \fi + \immediate\openout\@auxfile = \jobname.aux + \fi +}% +% +% The \@readauxfile macro does all that work the first time it's called. +% Since it's called once for every \cite, \nocite, \bibliography, and +% \bibliographystyle command that the user issues, we need to remember +% whether the work's been done. It's considered done if we're not to do +% it---that is, if \noauxfile is defined. +% +\newif\if@auxfiledone +\ifx\noauxfile\@undefined \else \@auxfiledonetrue\fi +% +% It's conceivable you'd want to change how other characters are read; +% to do that, change their category code before doing \input btxmac. +% +% +% After reading the .aux file, \@readauxfile opens it for writing. +% The \@writeaux macro does the actual writing (as long as +% \noauxfile is undefined). +% +\@innernewwrite\@auxfile +\def\@writeaux#1{\ifx\noauxfile\@undefined \write\@auxfile{#1}\fi}% +% +% +% A macro package that uses btxmac.tex might define +% \@undefinedmessage (before doing an \input btxmac). +% +\ifx\@undefinedmessage\@undefined + \def\@undefinedmessage{No .aux file; I won't give you warnings about + undefined citations.}% +\fi +% +% Even if citations are undefined, we want to complain only if +% \@citewarningtrue. The default is to set \@citewarningtrue unless +% \noauxfile is defined. Again, a macro package that uses +% btxmac.tex might want to redefine this. +% +\@innernewif\if@citewarning +\ifx\noauxfile\@undefined \@citewarningtrue\fi +% +% +% Finally, before leaving we restore @'s old category code. +% +\catcode`@ = \@oldatcatcode diff --git a/Master/texmf-dist/tex/eplain/config/eplain.ini b/Master/texmf-dist/tex/eplain/config/eplain.ini deleted file mode 100644 index 0df42edf053..00000000000 --- a/Master/texmf-dist/tex/eplain/config/eplain.ini +++ /dev/null @@ -1,6 +0,0 @@ -% Thomas Esser, 1998. public domain. -% hyphenation is set up in language.dat -\input bplain -\input eplain -\dump -\endinput diff --git a/Master/texmf-dist/tex/eplain/config/xeplain.ini b/Master/texmf-dist/tex/eplain/config/xeplain.ini deleted file mode 100644 index 969e7081ee7..00000000000 --- a/Master/texmf-dist/tex/eplain/config/xeplain.ini +++ /dev/null @@ -1,39 +0,0 @@ -% Jonathan Kew -% 2006-09-15 -% Public domain -% hyphenation is set up in language.dat -% based on eplain.ini ("xeplain" = the eplain macros with xetex) - -\input unicode-letters % required before patterns are loaded - -%% Disable the \font\preloaded=... entries from plain.tex -%% as xetex is primarily intended for use with other fonts -\catcode`\{=1 \catcode`\}=2 \catcode`\#=6 \catcode`\^=7 \catcode`\@=11 -\let\s@vef@nt=\font -\let\preloaded=2 -\def\font{\futurelet\next\d@ntpreload} -\def\d@ntpreload{\ifx\next\preloaded - \let\next\sk@pf@nt - \begingroup \catcode`\%=12 \catcode13=12 - \else - \let\next\s@vef@nt - \fi \next} -\lccode1=13 -\lowercase{\def\sk@pf@nt\preloaded=#1^^A{\endgroup}} - -\input bplain - -% restore the \font command and undefine other stuff -\catcode`\@=11 -\let\font=\s@vef@nt -\let\d@ntpreload=\und@fined -\let\sk@pf@nt=\und@fined -\let\s@vef@nt=\und@fined -\catcode`\@=12 - -\input eplain - -\XeTeXuseglyphmetrics=1 - -\dump -\endinput diff --git a/Master/texmf-dist/tex/eplain/eplain.aux b/Master/texmf-dist/tex/eplain/eplain.aux new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Master/texmf-dist/tex/eplain/eplain.ini b/Master/texmf-dist/tex/eplain/eplain.ini new file mode 100644 index 00000000000..0df42edf053 --- /dev/null +++ b/Master/texmf-dist/tex/eplain/eplain.ini @@ -0,0 +1,6 @@ +% Thomas Esser, 1998. public domain. +% hyphenation is set up in language.dat +\input bplain +\input eplain +\dump +\endinput diff --git a/Master/texmf-dist/tex/eplain/eplain.tex b/Master/texmf-dist/tex/eplain/eplain.tex new file mode 100644 index 00000000000..ae0685ca781 --- /dev/null +++ b/Master/texmf-dist/tex/eplain/eplain.tex @@ -0,0 +1,4001 @@ +%% @texfile{ +%% author = "Karl Berry, Steven Smith, Oleg Katsitadze, and others", +%% version = "3.1", +%% date = "Sun Dec 3 14:39:31 EET 2006", +%% filename = "eplain.tex", +%% email = "bug-eplain@tug.org", +%% checksum = "4001 8638 128661", +%% 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. 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 +\begingroup + \expandafter\let\expandafter\x\csname ver@ifpdf.sty\endcsname + \ifcase 0% + \ifx\x\relax % plain + \else + \ifx\x\empty % LaTeX + \else + 1% + \fi + \fi + \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}% + \endgroup + \fi +\endgroup +\begingroup + \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\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@ifpdf.sty\endcsname +\ProvidesPackage{ifpdf}% + [2005/07/22 v1.3 % + Providing \expandafter\string\csname ifpdf\endcsname\space (HO)] +\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 + \fi +\endgroup +\newif\ifpdf +\ifx\pdfoutput\undefined +\else + \ifx\pdfoutput\relax + \else + \ifnum\pdfoutput<1 % + \else + \pdftrue + \fi + \fi +\fi +\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 \ifpdf\else not \fi detected}% +\endgroup +\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.99k-18aug05", +%% date = "19 August 2005", +%% filename = "btxmac.tex", +%% address = "tex-eplain@tug.org", +%% checksum = "842 4571 33524", +%% 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\@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\@optionaltemp = #1% + \let\@optionalnext = \relax + \@futurenonspacelet\@optionalnext\@bracketcheck +}% +\def\@bracketcheck{% + \ifx [\@optionalnext + \expandafter\@@getoptionalarg + \else + \let\@optionalarg = \empty + \expandafter\@optionaltemp + \fi +}% +\def\@@getoptionalarg[#1]{% + \def\@optionalarg{#1}% + \@optionaltemp +}% +\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\textbf#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 +\def\newcommand#1{% + \def\@commandname{#1}% + \@getoptionalarg\@continuenewcommand +}% +\fi +\ifx\renewcommand\undefined +\let\renewcommand = \newcommand +\fi +\ifx\providecommand\undefined +\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\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 + \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 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 +%%% @texfile{ +%%% author = "Philip Taylor", +%%% version = "3.04", +%%% date = "25 July 1992", +%%% time = "17:07 EDT", +%%% filename = "path.sty", +%%% address = "The Computer Centre +%%% RHBNC, University of London +%%% Egham Hill +%%% Egham, Surrey TW20 0EX, ENGLAND", +%%% telephone = "Tel: +44 784 443172", +%%% FAX = "Fax: +44 784 434348", +%%% checksum = "41143 321 1758 13526", +%%% email = "P.Taylor@Vax.Rhbnc.Ac.Uk (Internet)", +%%% 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; here are two examples: +%%% +%%% Friesland%rz.informatik.uni-hamburg.dbp.de%germany.csnet@relay.cs.net +%%% +%%% 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 +%%% +%%% \documentstyle[...,path,...]{...} +%%% +%%% 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.} +%%% } +\edef\path{\the\catcode`@}% +\catcode`@ = 11 +\let\@oldatcatcode = \path +\newcount \c@tcode +\newcount \c@unter +\newif \ifspecialpathdelimiters +\begingroup +\catcode `\ = 10 +\gdef \passivesp@ce { }% +\catcode `\ = 13\relax% +\gdef\activesp@ce{ }% +\endgroup +\def \discretionaries % + {\begingroup + \c@tcodes = 13 + \discr@tionaries + }% +\def \discr@tionaries #1% + {\def \discr@ti@naries ##1#1% + {\endgroup + \def \discr@ti@n@ries ####1% or + {\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 + }% +\let\pathafterhook = \relax +\def \path + {\ifspecialpathdelimiters + \begingroup + \c@tcodes = 12 + \def \endp@th {\endgroup \endgroup \pathafterhook}% + \else + \def \endp@th {\endgroup \pathafterhook}% + \fi + \p@th + }% +\def \p@th #1% + {\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% + {\leavevmode \hbox {}##1% + \endp@th + }% + \p@@th + }% +\def \c@tcodes {\afterassignment \c@tc@des \c@tcode}% +\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 + }% +\catcode `\@ = \@oldatcatcode +\discretionaries |~!@$%^&*()_+`-=#{}[]:";'<>,.?\/|% +\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{&}% + \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{&}% + \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. + \expandafter\ifx\csname\xrlabel{#1}\endcsname \relax + \let\next\@definelabel@nocheck + \else + \let\next\@definelabel@warn + \fi + \next{#1}% +}% +\def\@definelabel@nocheck#1#2#3{% + \expandafter\gdef\csname\xrlabel{#1}\endcsname{#2}% + \setpropertyglobal{\xrlabel{#1}}{class}{#3}% +}% +\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}% + \@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 + \eqno #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\@mayberestoreeqno = \@restoreeqno + \fi +}% +\let\@primitiveeqno = \eqno +\def\@restoreeqno{% + \global\let\eqno = \@primitiveeqno + \global\let\@mayberestoreeqno = \empty +}% +\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 +\outer\def\defineindex#1{% + \def\@idxprefix{#1}% + \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 indexfileopened\endcsname \else + \expandafter\immediate\openout\csname @\@idxprefix indexfile\endcsname = + \indexfilebasename.\@idxprefix dx + \expandafter\global\csname @\@idxprefix indexfileopenedtrue\endcsname + \fi + \def\temp{#1}% + \edef\@wr{% + \expandafter\write\csname @\@idxprefix indexfile\endcsname{% + \string\indexentry + {\sanitize\temp}% + {\noexpand#2}% + }% + }% + \@wr + \ifindexproofing \insert\@indexproof{\indexproofterm{#1}}\allowhyphens\fi + \hookrun{afterindexterm}% + \ifsilentindexentry \expandafter\ignorespaces\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{\scantokens{#1&endinput}}% +}% +\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@ = {\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 +\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 +}% +\def\gutterbox{\vbox to \dimen0{\vfil\hbox{\hfil}\vfil}}% +\newif\if@forceextraline\@forceextralinefalse +\def\@columnsplit{% + \splittopskip = \topskip + \splitmaxdepth = \baselineskip + \dimen@ = \ht255 + \divide\dimen@ by \@numcolumns + \if@forceextraline + \advance\dimen@ by \baselineskip + \fi + \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 + \if@forceextraline % If this is the first time + \else % through, save the single + \setbox\@forcelinebox=\copy\@partialpage % column material. + \fi + \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{% + \@columnsplit + \@recoverclubpenalty + \hsize = \@normalhsize % Local to \output's group. + \vsize = \@normalvsize + \the\previousoutput + \unvbox\@partialpage + \penalty\outputpenalty + \global\vsize = \@numcolumns\@normalvsize +}% +\def\singlecolumn{% + \@ndcolumns + \chardef\@numcolumns = 1 + \vskip\belowcolumnskip + \nointerlineskip +}% +\newbox\@forcelinebox +\def\@endcolumns{% + \global\let\@ndcolumns = \relax + \par % Shouldn't start in horizontal mode. + \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\setbox255 = \copy2 % Retrieve what the fake \output set. + \@columnsplit + \ifvoid\@partialpage + \else % There is some left-over. + \setbox0=\box\@partialpage % Merely to void \@partialpage + \global\setbox255 = \box2 % Retrieve what the fake \output set. + \@forceextralinetrue % Add \forcelinebox to \box255 to save single + \@columnsplit % column material. + \global\setbox255 = \vbox{\box\@forcelinebox\box255}% + \fi + \global\vsize = \@normalvsize + \global\hsize = \@normalhsize + \global\output = \expandafter{\the\previousoutput}% + \ifvoid\topins\else\topinsert\unvbox\topins\endinsert\fi + \unvbox255 +}% +\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 set so far. + \temp@dimen = \vsize % = \@numcolumns * columnheight + \divide\temp@dimen by \@numcolumns % find out column height + \loop + \ifdim \dimen@ > \temp@dimen + \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 + \nointerlineskip + \par + \nointerlineskip + \penalty0\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:}\special{html:}% + \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:}}% + \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:}\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\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 +}% +\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 + \global\let\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 + \message{^^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.1: 3 December 2006 (and plain \plainversion)}% +}% diff --git a/Master/texmf-dist/tpm/eplain.tpm b/Master/texmf-dist/tpm/eplain.tpm index 603bd2e09b3..b896e45a273 100644 --- a/Master/texmf-dist/tpm/eplain.tpm +++ b/Master/texmf-dist/tpm/eplain.tpm @@ -3,7 +3,7 @@ eplain Package - 2006/01/11 23:03:17 + 1970/01/01 00:00:00 3.0 popineau Extended plain tex macros. @@ -17,137 +17,7 @@ tables, two-column output, footnotes and commutative diagrams. Karl Berry, Oleg Katsitadze 2005365 - -texmf-dist/tex/eplain/base/arrow.tex -texmf-dist/tex/eplain/base/btxmac.tex -texmf-dist/tex/eplain/base/eplain.tex -texmf-dist/tex/eplain/config/eplain.ini -texmf-dist/tex/eplain/config/xeplain.ini -texmf-dist/tpm/eplain.tpm - - -texmf-dist/doc/eplain/base/AUTHORS -texmf-dist/doc/eplain/base/COPYING -texmf-dist/doc/eplain/base/ChangeLog -texmf-dist/doc/eplain/base/INSTALL -texmf-dist/doc/eplain/base/Makefile -texmf-dist/doc/eplain/base/NEWS -texmf-dist/doc/eplain/base/PROJECTS -texmf-dist/doc/eplain/base/README -texmf-dist/doc/eplain/base/arrow.texi -texmf-dist/doc/eplain/base/btxdoc.bib -texmf-dist/doc/eplain/base/btxdoc.tex -texmf-dist/doc/eplain/base/csindex.texi -texmf-dist/doc/eplain/base/eplain.html -texmf-dist/doc/eplain/base/eplain.pdf -texmf-dist/doc/eplain/base/eplain.texi -texmf-dist/doc/eplain/base/hlink.texi -texmf-dist/doc/eplain/base/index.texi -texmf-dist/doc/eplain/base/install.texi -texmf-dist/doc/eplain/base/intro.texi -texmf-dist/doc/eplain/base/invoke.texi -texmf-dist/doc/eplain/base/progdef.texi -texmf-dist/doc/eplain/base/userdef.texi - - -texmf-dist/source/eplain/base/add-date -texmf-dist/source/eplain/base/add-version -texmf-dist/source/eplain/base/etex.tex -texmf-dist/source/eplain/base/fix-checksum -texmf-dist/source/eplain/base/merge -texmf-dist/source/eplain/base/packages.zip -texmf-dist/source/eplain/base/test/allref.tex -texmf-dist/source/eplain/base/test/boxes.tex -texmf-dist/source/eplain/base/test/boxit.tex -texmf-dist/source/eplain/base/test/catcode.tex -texmf-dist/source/eplain/base/test/center.tex -texmf-dist/source/eplain/base/test/cite.bib -texmf-dist/source/eplain/base/test/cite.tex -texmf-dist/source/eplain/base/test/citeall.tex -texmf-dist/source/eplain/base/test/citealph.tex -texmf-dist/source/eplain/base/test/citeapa.tex -texmf-dist/source/eplain/base/test/citebegin.tex -texmf-dist/source/eplain/base/test/citecust.tex -texmf-dist/source/eplain/base/test/citenote.tex -texmf-dist/source/eplain/base/test/citex.tex -texmf-dist/source/eplain/base/test/colfootn.tex -texmf-dist/source/eplain/base/test/colrule.tex -texmf-dist/source/eplain/base/test/column.tex -texmf-dist/source/eplain/base/test/column2.tex -texmf-dist/source/eplain/base/test/column3.tex -texmf-dist/source/eplain/base/test/commdiags.tex -texmf-dist/source/eplain/base/test/contents.tex -texmf-dist/source/eplain/base/test/displine.tex -texmf-dist/source/eplain/base/test/double.tex -texmf-dist/source/eplain/base/test/double2.tex -texmf-dist/source/eplain/base/test/dvipdfm.tex -texmf-dist/source/eplain/base/test/ecommdiag.tex -texmf-dist/source/eplain/base/test/emergncy.tex -texmf-dist/source/eplain/base/test/env.tex -texmf-dist/source/eplain/base/test/eqdef.tex -texmf-dist/source/eplain/base/test/eqref.tex -texmf-dist/source/eplain/base/test/example.eps -texmf-dist/source/eplain/base/test/filexist.tex -texmf-dist/source/eplain/base/test/flynn.tex -texmf-dist/source/eplain/base/test/footnote.tex -texmf-dist/source/eplain/base/test/frac.tex -texmf-dist/source/eplain/base/test/gcol.tex -texmf-dist/source/eplain/base/test/hlcite.tex -texmf-dist/source/eplain/base/test/hlfoot.tex -texmf-dist/source/eplain/base/test/hlidx.mst -texmf-dist/source/eplain/base/test/hlidx.tex -texmf-dist/source/eplain/base/test/hlink.tex -texmf-dist/source/eplain/base/test/ian.tex -texmf-dist/source/eplain/base/test/index.tex -texmf-dist/source/eplain/base/test/jan.tex -texmf-dist/source/eplain/base/test/justify.tex -texmf-dist/source/eplain/base/test/knuth.bib -texmf-dist/source/eplain/base/test/label.tex -texmf-dist/source/eplain/base/test/latexcite.tex -texmf-dist/source/eplain/base/test/liang.tex -texmf-dist/source/eplain/base/test/list.tex -texmf-dist/source/eplain/base/test/listing.tex -texmf-dist/source/eplain/base/test/logo.tex -texmf-dist/source/eplain/base/test/loop.tex -texmf-dist/source/eplain/base/test/loopnext.tex -texmf-dist/source/eplain/base/test/mag.tex -texmf-dist/source/eplain/base/test/makecol.tex -texmf-dist/source/eplain/base/test/margin.tex -texmf-dist/source/eplain/base/test/matrix.tex -texmf-dist/source/eplain/base/test/mdisplay.tex -texmf-dist/source/eplain/base/test/names.tex -texmf-dist/source/eplain/base/test/noarrow.tex -texmf-dist/source/eplain/base/test/nobib.tex -texmf-dist/source/eplain/base/test/nonouter.tex -texmf-dist/source/eplain/base/test/optional.tex -texmf-dist/source/eplain/base/test/outer.tex -texmf-dist/source/eplain/base/test/page.tex -texmf-dist/source/eplain/base/test/path.tex -texmf-dist/source/eplain/base/test/pcol.tex -texmf-dist/source/eplain/base/test/pdftex.tex -texmf-dist/source/eplain/base/test/psfont.map -texmf-dist/source/eplain/base/test/rex.tex -texmf-dist/source/eplain/base/test/rule.tex -texmf-dist/source/eplain/base/test/sidx.tex -texmf-dist/source/eplain/base/test/subdef.tex -texmf-dist/source/eplain/base/test/tenenb.tex -texmf-dist/source/eplain/base/test/tenenb2.tex -texmf-dist/source/eplain/base/test/test.tex -texmf-dist/source/eplain/base/test/time.tex -texmf-dist/source/eplain/base/test/truemarg.tex -texmf-dist/source/eplain/base/test/uscore.bib -texmf-dist/source/eplain/base/test/uscore.tex -texmf-dist/source/eplain/base/test/usepackage.tex -texmf-dist/source/eplain/base/test/verb2.tex -texmf-dist/source/eplain/base/test/verbatim.tex -texmf-dist/source/eplain/base/test/vlach.tex -texmf-dist/source/eplain/base/test/whitespc.tex -texmf-dist/source/eplain/base/test/xampl.tex -texmf-dist/source/eplain/base/test/xref.tex -texmf-dist/source/eplain/base/util/idxuniq -texmf-dist/source/eplain/base/util/trimsee -texmf-dist/source/eplain/base/xeplain.tex - + texmf-dist/tpm/eplain.tpm -- cgit v1.2.3