summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/info/eplain.info
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/info/eplain.info')
-rw-r--r--Master/texmf-dist/doc/info/eplain.info8187
1 files changed, 8187 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/info/eplain.info b/Master/texmf-dist/doc/info/eplain.info
new file mode 100644
index 00000000000..5b27ad3c3ae
--- /dev/null
+++ b/Master/texmf-dist/doc/info/eplain.info
@@ -0,0 +1,8187 @@
+This is eplain.info, produced by texi2any version 4.13.96+dev from
+eplain.texi.
+
+This manual documents the Eplain macros, version 3.5, February 2013.
+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 originally 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 wrote the section on LaTeX
+packages and the chapter on hyperlinks, and updates throughout.
+INFO-DIR-SECTION TeX
+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.5, February 2013.
+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 originally 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 wrote the section
+on LaTeX packages and the chapter on hyperlinks, and updates throughout.
+
+ The Eplain home page is <http://tug.org/eplain>.
+
+* 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. Its home on the web is <http://tug.org/eplain>.
+
+ 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>.
+
+
+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. The original sources can be found in Eplain source
+zip archive in your TeX distribution, on CTAN or on Eplain's home page
+at <http://tug.org/eplain>.
+
+ 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 conveniently, 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'.
+
+ On the other hand, if your document's bibliography is very simple,
+you may prefer to create the '.bbl' file yourself, by hand, instead of
+using BibTeX. An annotated example of this approach is also given
+below.
+
+ 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 above '\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::).
+
+ For simple documents you might choose to write the '.bbl' file
+yourself, instead of running BibTeX. For this scenario, the following
+commands should suffice:
+
+ $ tex citex (read citex.bbl, produces undefined citation messages)
+ $ tex citex (one more time, to resolve the references)
+
+ 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.
+* Commands from LaTeX:: LaTeX commands defined by 'btxmac'.
+
+
+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, Next: Commands from LaTeX, 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.
+
+'\biblabelprecontents'
+'\biblabelpostcontents'
+ Macros expanded before and after '\biblabelcontents', respectively.
+ For example, to get left-justified numeric labels (they are
+ right-justified by default):
+
+ \def\biblabelprecontents{\relax}
+ \def\biblabelpostcontents{\hss}
+
+'\bblrm'
+ The default font used for printing the bibliography.
+
+'\bblem'
+ The font used for printing the titles and other "emphasized"
+ material.
+
+'\bblemph'
+ Typesets its argument using '\bblem', then inserts an italic
+ correction.
+
+'\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 desperate, of course you can also hand-edit the .bbl file
+that BibTeX produces to do anything you wish.
+
+
+File: eplain.info, Node: Commands from LaTeX, Prev: Formatting bibliographies, Up: Citations
+
+4.3.3 Commands from LaTeX
+-------------------------
+
+Because of the historical connection between BibTeX and LaTeX, in
+practice many bibliography styles and bibliographies use LaTeX commmands
+that are not part of bibliography handling, per se.
+
+ To support this, 'btxmac.tex' (and thus Eplain) define the following.
+In all cases, an existing definition (e.g., from 'miniltx.tex', *note
+Loading LaTeX packages: Loading LaTeX packages.) will not be
+overwritten. Here is the list:
+
+'\newcommand'
+'\renewcommand'
+'\providecommand'
+ Defining new commands in various ways. The Eplain versions do not
+ support the *-form of these; use 'miniltx' for that.
+
+'\em'
+'\emph'
+'\sc'
+'\textbf'
+ Selecting fonts.
+
+'\mbox'
+ A horizontal box.
+
+'\newblock'
+ Starts elements of a bibliography entry.
+
+ For full information about these, see the LaTeX manual and sources.
+
+
+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'.
+
+ Eplain defines '\eqnum' and '\eqalignnum' which can be set up to
+produce either left-aligned or right-aligned equation numbers.
+'\lefteqnumbers' ('\righteqnumbers') will define '\eqnum' to expand to
+'\eqno' ('\leqno'), and '\eqalignnum' to expand to '\eqalignno'
+('\leqalignno'). Default is '\righteqnumbers' (right-aligned equation
+numbers).
+
+* 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).
+
+ '\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'.
+
+ To reset the category code of all special characters to 12 ("other"),
+'\verbatim' uses '\uncatcodespecials' (*note Category codes::). If you
+make additional characters "special", you should extend '\dospecials' to
+include those characters, lest they be given special treatment inside
+verbatim environments. For example,
+
+ \catcode`\A=\active
+ % Try commenting out the following line.
+ \expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\A}
+ \verbatimA#$%_^|endverbatim
+
+ 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 '\eqnum' command
+ (*note Displays::). (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 '\eqnum' 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.
+
+ As another example, consider the following requirement: we want to
+include chapter number in all equation references, and additionally we
+want to include the part number when referencing an equation from any
+part other than the one where the equation appears. For example,
+references to the third equation in chapter 2 of part 1 should be
+typeset as '(2.3)' throughout part 1, but as '(I.2.3)' in any other
+part. Let's assume we have the current chapter and part numbers in count
+registers '\chapnum' and '\partnum', respectively.
+
+ The idea is to have '\eqconstruct' store the part number of the
+equation (that is, the part number _at the time of definition_), so that
+later '\eqprint' can compare the stored number with the current part
+number (that is, the part number _at the time of reference_). The
+complicating factor is that internally, the result of '\eqconstruct' is
+both expanded and written out to the '.aux' file, _and_ used to typeset
+the equation number, so the commands that store the part number should
+behave correctly in both situations. This is difficult to achieve with
+expandable commands; therefore, to avoid expansion problems, we are
+going to use only TeX primitives, which are non-expandable:
+
+ \newcount\eqpartnum
+
+ \def\eqconstruct#1{%
+ \global\eqpartnum=\the\partnum\relax
+ \number\chapnum.#1%
+ }
+
+ \def\eqprint#1{%
+ \setbox0=\hbox{#1}%
+ (\ifnum\partnum=\eqpartnum \else
+ \uppercase\expandafter{\romannumeral\eqpartnum}.%
+ \fi
+ \box0)%
+ }%
+
+In '\eqconstruct', besides constructing the base equation number (e.g.,
+'1.2'), we also store the part number of the equation in the count
+register '\eqpartnum' ('\the\partnum' is expanded when the equation
+number is written to the '.aux' file, so the equation label definition
+in the '.aux' file will contain the actual part number). In '\eqprint',
+we need to know the equation's part number before we typeset the base
+equation number, therefore we first put the argument in a box, thus
+causing '\eqpartnum' to be set.
+
+
+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 <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'.
+
+
+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.
+
+ Note that MakeIndex does not use the above naming scheme for multiple
+indexes. Unless instructed otherwise, MakeIndex always writes its output
+to a file with extension '.ind'. For example, if you define an
+additional index with the command '\defineindex{j}', you'll need to run
+MakeIndex like this:
+
+ $ makeindex book.jdx -o book.jnd
+
+ For each index defined with '\defineindex{N}', Eplain provides a
+switch '\ifNdx' which controls whether indexing commands write index
+entries to the corresponding index file. However, even when index term
+writing is disabled, indexing commands still do all other processing of
+their arguments, including typesetting of proof index terms (*note
+Proofing index terms::.
+
+ For example, if you write '\idxfalse' near the beginning of a
+document 'foo.tex' (before the first indexing command), Eplain will not
+open the default index file ('foo.idx') and the corresponding indexing
+commands ('\idx', '\sidx', etc.) will not write index entries there.
+This may be useful for draft compilations of a manuscript, e.g., to
+avoid the overhead of index file input/output.
+
+* 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. The normal index entries
+ have to be created separately--'seealso' does _not_ contribute a
+ page number to the index entry. For example, if you have indexed a
+ term on pages 75, 97 and 114, and then add a 'seealso' entry for
+ the term:
+
+ \sidx[seealso]{archetypal criticism}[elements of]{dichotomies}
+
+ the index will contain
+
+ 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, hence 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 <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 [}
+
+
+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 LaTeX styles and macro
+packages tackle more difficult applications. The 'autorows' feature of
+the Memoir package provides similar functionality to this.
+
+ 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 an unbreakable space of (essentially) size '\@normalvsize' minus
+'\pagetotal' (where '\@normalvsize' is 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 space (during the column splitting operation when the whole page is
+output). Bugs are easily possible, unfortunately.
+
+ 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 '\AMSLaTeX', '\AMSTeX', '\BibTeX' '\eTeX', '\ExTeX',
+'\LAMSTeX', '\LaTeX', '\MF', '\SLiTeX', '\XeLaTeX', and '\XeTeX' to
+produce their respective logos. (Sorry, the logos are not shown here.)
+Some spelling variants of these are also supported.
+
+ Most of 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:: Packages supported with Eplain.
+* 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 a concept 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.
+
+ Both the 'miniltx.tex' file used by Eplain and some LaTeX packages
+redefine TeX's primitive '\input' to be a macro. Under plain TeX, users
+probably expect the primitive '\input'. 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'.
+
+ Along the same lines, Eplain restores the catcode of '@' at
+'\endpackages' to whatever it was before (using '\resetatcatcode', as
+defined by 'miniltx.tex'). This is needed because 'miniltx.tex', read by
+'\beginpackages', does not restore the catcode of '@', but leaves it as
+11 (letter).
+
+ 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 cna 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 ('2009/07/16 v2.2 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}
+ \href{mailto:tex-eplain@tug.org}{Eplain mailing list}
+
+*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}
+
+ \url{mailto:foobar@example.org}
+
+ \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}
+
+ \url{mailto:foobar@example.org}
+
+ \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:<a name="\@hllabel">}%
+ \special{html:</a>}}
+ \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:<a href="\hlhash\@hllabel">}}
+ \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 <</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'
+
+
+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.
+For notes on the usage, *note Verbatim listing::.
+
+ 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
+ }
+
+ It's possible to define macros that appear to accept optional
+arguments intermixed with mandatory arguments in any imaginable way. For
+example:
+
+ \makeatletter
+ % \mo{m}[o]
+ \def\mo#1{\def\mo@arg{#1}\@getoptionalarg\fin@mo}
+ \def\fin@mo{\vskip1pc
+ ARG: \mo@arg \par
+ OPTARG: \@optionalarg \par
+ }
+ % \mom{m}[o]{m}
+ \def\mom#1{\def\mom@arg{#1}\@getoptionalarg\fin@mom}
+ \def\fin@mom#1{\vskip1pc
+ ARG1: \mom@arg \par
+ OPTARG: \@optionalarg \par
+ ARG2: #1\par
+ }
+ % \omo[o]{m}[o]
+ \def\omo{\@getoptionalarg\fin@omo}
+ \def\fin@omo#1{\let\omo@optarg\@optionalarg
+ \def\omo@arg{#1}\@getoptionalarg\@fin@omo}
+ \def\@fin@omo{\vskip1pc
+ OPTARG1: \omo@optarg \par
+ ARG: \omo@arg \par
+ OPTARG2: \@optionalarg \par
+ }
+ \makeatother
+
+ 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
+***********
+
+
+* Menu:
+
+* @hllabel: Destination types for hypertex.
+ (line 14)
+* @hllabel <1>: Link types for hypertex.
+ (line 39)
+* @hllabel <2>: Destination types for pdftex and dvipdfm.
+ (line 84)
+* @hllabel <3>: Link types for pdftex and dvipdfm.
+ (line 67)
+* @indexproof insertion class: Proofing index terms.
+ (line 28)
+* abovecolumnskip: Multiple columns. (line 33)
+* abovecolumnspenalty: Tables. (line 30)
+* abovelistpenalty: Formatting lists. (line 29)
+* abovelistskip: Formatting lists. (line 29)
+* abovelistskipamount: Formatting lists. (line 10)
+* adjarrow: Arrows and morphisms.
+ (line 113)
+* adjmapdown: Arrows and morphisms.
+ (line 91)
+* adjmapleft: Arrows and morphisms.
+ (line 66)
+* adjmapright: Arrows and morphisms.
+ (line 63)
+* adjmapup: Arrows and morphisms.
+ (line 94)
+* advancebottommargin: Margins. (line 26)
+* advanceleftmargin: Margins. (line 26)
+* advancerightmargin: Margins. (line 26)
+* advancetopmargin: Margins. (line 26)
+* afterindexterm: Customizing indexing.
+ (line 6)
+* afterindexterm hook: Indexing commands. (line 62)
+* AMSLaTeX: Logos. (line 10)
+* AMSTeX: Logos. (line 10)
+* arrow: Arrows and morphisms.
+ (line 20)
+* arrow <1>: Arrows and morphisms.
+ (line 104)
+* bblem: Formatting bibliographies.
+ (line 41)
+* bblemph: Formatting bibliographies.
+ (line 45)
+* bblfilebasename: Citations. (line 30)
+* bblhook: Formatting bibliographies.
+ (line 67)
+* bblnewblock: Formatting bibliographies.
+ (line 53)
+* bblrm: Formatting bibliographies.
+ (line 38)
+* bblsc: Formatting bibliographies.
+ (line 49)
+* bcolor (hyperlink option): Link options for pdftex and dvipdfm.
+ (line 13)
+* bdash (hyperlink option): Link options for pdftex and dvipdfm.
+ (line 19)
+* bdash (hyperlink option) <1>: Link options for pdftex and dvipdfm.
+ (line 32)
+* begin for index entries: Modifying index entries.
+ (line 22)
+* beginindex hook: Typesetting an index.
+ (line 30)
+* beginlist: Formatting lists. (line 50)
+* 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 110)
+* biblabelcontents: Formatting bibliographies.
+ (line 23)
+* biblabelextraspace: Formatting bibliographies.
+ (line 61)
+* biblabelpostcontents: Formatting bibliographies.
+ (line 30)
+* biblabelprecontents: Formatting bibliographies.
+ (line 30)
+* biblabelprint: Formatting bibliographies.
+ (line 17)
+* biblabelwidth: Formatting bibliographies.
+ (line 11)
+* bibliography: Citations. (line 61)
+* bibliography (hyperlinks): Citation hyperlinks. (line 11)
+* bibliographystyle: Citations. (line 68)
+* BibTeX: Logos. (line 10)
+* bihline: Arrows and morphisms.
+ (line 69)
+* bimapdown: Arrows and morphisms.
+ (line 85)
+* bimapleft: Arrows and morphisms.
+ (line 60)
+* bimapright: Arrows and morphisms.
+ (line 57)
+* bimapup: Arrows and morphisms.
+ (line 88)
+* bisline: Arrows and morphisms.
+ (line 116)
+* bivline: Arrows and morphisms.
+ (line 97)
+* blackbox: Boxes. (line 7)
+* blanklineskipamount in justified text: Justification. (line 23)
+* blanklineskipamount in obeyed text: Obeying spaces. (line 16)
+* bottom (destination option): Destination types for pdftex and dvipdfm.
+ (line 65)
+* bottom (destination option) <1>: Destination options for pdftex and dvipdfm.
+ (line 56)
+* bottommargin: Margins. (line 17)
+* boxit: Boxes. (line 28)
+* boxitspace: Boxes. (line 30)
+* bstyle (hyperlink option): Link options for pdftex and dvipdfm.
+ (line 25)
+* bwidth (hyperlink option): Link options for pdftex and dvipdfm.
+ (line 49)
+* catcode: Category codes. (line 13)
+* center: Justification. (line 7)
+* centereddisplays: Displays. (line 13)
+* channelwidth: Arrows and morphisms.
+ (line 119)
+* channelwidth <1>: Commutative diagram parameters.
+ (line 36)
+* cite: Citations. (line 42)
+* cite (hyperlinks): Citation hyperlinks. (line 6)
+* cmd (destination option): Destination types for hypertex.
+ (line 14)
+* cmd (destination option) <1>: Destination options for hypertex.
+ (line 7)
+* cmd (destination option) <2>: Destination types for pdftex and dvipdfm.
+ (line 83)
+* cmd (destination option) <3>: Destination options for pdftex and dvipdfm.
+ (line 14)
+* cmd (hyperlink option): Link types for hypertex.
+ (line 39)
+* cmd (hyperlink option) <1>: Link options for hypertex.
+ (line 7)
+* cmd (hyperlink option) <2>: Link types for pdftex and dvipdfm.
+ (line 66)
+* cmd (hyperlink option) <3>: Link options for pdftex and dvipdfm.
+ (line 56)
+* 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: Construction of commutative diagrams.
+ (line 64)
+* commdiagbaselines <1>: Commutative diagram parameters.
+ (line 43)
+* csn: \csn and \ece. (line 6)
+* definecolor: Hyperlinks (xhyper.tex).
+ (line 7)
+* definecontentsfile: Alternative contents files.
+ (line 6)
+* defineindex: Indexing. (line 36)
+* definexref: Defining generic references.
+ (line 6)
+* definexref <1>: Hyperlinks (xhyper.tex).
+ (line 7)
+* definexref (hyperlinks): Cross-reference hyperlinks.
+ (line 6)
+* depth (destination option): Destination types for pdftex and dvipdfm.
+ (line 61)
+* depth (destination option) <1>: Destination options for pdftex and dvipdfm.
+ (line 34)
+* depth (hyperlink option): Link options for pdftex and dvipdfm.
+ (line 122)
+* discretionaries: Paths. (line 20)
+* displaylines: Displays. (line 18)
+* dospecials: Verbatim listing. (line 57)
+* 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)
+* em: Commands from LaTeX. (line 25)
+* emph: Commands from LaTeX. (line 25)
+* enablehyperlinks: Introduction to hyperlinks.
+ (line 42)
+* enablehyperlinks <1>: Choosing destination placement.
+ (line 7)
+* enablehyperlinks <2>: Hyperlink driver nolinks.
+ (line 48)
+* end for index entries: Modifying index entries.
+ (line 22)
+* endlist: Formatting lists. (line 52)
+* endnumberedlist: Lists. (line 13)
+* endorderedlist: Lists. (line 13)
+* endpackages: Environment for loading packages.
+ (line 6)
+* endunorderedlist: Lists. (line 20)
+* 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 24)
+* eqalignno: Displays. (line 18)
+* eqalignno <1>: Displays. (line 23)
+* eqalignnum: Displays. (line 23)
+* 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)
+* eqno: Displays. (line 23)
+* eqnum: Displays. (line 23)
+* eqnum <1>: Equation references. (line 15)
+* eqnum <2>: Equation references. (line 38)
+* eqnumber: Equation references. (line 8)
+* eqprint: Formatting equation references.
+ (line 12)
+* eqref: Equation references. (line 46)
+* eqref <1>: Equation reference hyperlinks.
+ (line 20)
+* eqrefn: Equation references. (line 51)
+* eqrefn <1>: Equation reference hyperlinks.
+ (line 20)
+* 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)
+* eTeX: Logos. (line 10)
+* everyfootnote: Footnotes. (line 35)
+* evrule: Rules. (line 18)
+* expandonce: \expandonce. (line 6)
+* ext (hyperlink option): Link types for hypertex.
+ (line 23)
+* ext (hyperlink option) <1>: Link options for hypertex.
+ (line 20)
+* ExTeX: Logos. (line 10)
+* file (hyperlink option): Link types for hypertex.
+ (line 22)
+* file (hyperlink option) <1>: Link options for hypertex.
+ (line 14)
+* file (hyperlink option) <2>: Link types for pdftex and dvipdfm.
+ (line 40)
+* file (hyperlink option) <3>: Link types for pdftex and dvipdfm.
+ (line 52)
+* file (hyperlink option) <4>: Link options for pdftex and dvipdfm.
+ (line 63)
+* fileexists (conditional): Auxiliary files. (line 10)
+* filename (hyperlink type): Link types for hypertex.
+ (line 21)
+* filename (hyperlink type) <1>: Link types for pdftex and dvipdfm.
+ (line 39)
+* filepage (hyperlink type): Link types for pdftex and dvipdfm.
+ (line 51)
+* 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 50)
+* footnote (hyperlinks): Footnote hyperlinks. (line 7)
+* footnotemarkseparation: Footnotes. (line 25)
+* footnoteruleheight: Footnotes. (line 44)
+* footnoterulewidth: Footnotes. (line 44)
+* for: Iteration. (line 6)
+* For: Iteration. (line 15)
+* frac: Fractions. (line 6)
+* fullmonthname: Time of day. (line 13)
+* futurenonspacelet: \futurenonspacelet. (line 6)
+* getproperty: Properties. (line 18)
+* gloggingall: Diagnostics. (line 22)
+* gobble: Macro arguments. (line 7)
+* gobbletwo: Macro arguments. (line 7)
+* gridcommdiag: Construction of commutative diagrams.
+ (line 88)
+* gtracingall: Diagnostics. (line 22)
+* gutter: Multiple columns. (line 23)
+* gutterbox: Multiple columns. (line 24)
+* hangindent for index entries: Typesetting an index.
+ (line 45)
+* harrowlength: Arrows and morphisms.
+ (line 27)
+* harrowlength <1>: Commutative diagram parameters.
+ (line 11)
+* hchannel: Commutative diagram parameters.
+ (line 39)
+* height (destination option): Destination types for pdftex and dvipdfm.
+ (line 60)
+* height (destination option) <1>: Destination options for pdftex and dvipdfm.
+ (line 37)
+* height (hyperlink option): Link options for pdftex and dvipdfm.
+ (line 125)
+* hgrid: Construction of commutative diagrams.
+ (line 108)
+* hgrid <1>: Commutative diagram parameters.
+ (line 47)
+* hldest: Explicit hyperlinks. (line 6)
+* hldest <1>: Destination types for hypertex.
+ (line 17)
+* hldest <2>: Destination types for pdftex and dvipdfm.
+ (line 86)
+* hldest <3>: Setting hyperlink types and options.
+ (line 7)
+* hldestoff: Hyperlink driver nolinks.
+ (line 10)
+* hldestoff <1>: Turning low-level commands on/off.
+ (line 6)
+* hldeston: Turning low-level commands on/off.
+ (line 6)
+* hldestopts: Setting default types and options.
+ (line 15)
+* hldestopts <1>: Setting group options.
+ (line 10)
+* hldestopts <2>: Hyperlinks (xhyper.tex).
+ (line 7)
+* hldesttype: Setting default types and options.
+ (line 6)
+* hldesttype <1>: Setting group types. (line 6)
+* hldesttype <2>: Hyperlinks (xhyper.tex).
+ (line 7)
+* hlend: Explicit hyperlinks. (line 25)
+* hlend <1>: Hyperlinks (xhyper.tex).
+ (line 7)
+* hlfootbacklabel: Footnote hyperlinks. (line 12)
+* hlfootlabel: Footnote hyperlinks. (line 12)
+* hlfootlabelnumber: Footnote hyperlinks. (line 15)
+* 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 7)
+* hline: Arrows and morphisms.
+ (line 54)
+* hloff: Hyperlink driver nolinks.
+ (line 10)
+* hloff <1>: Turning low-level commands on/off.
+ (line 6)
+* hlon: Turning low-level commands on/off.
+ (line 6)
+* hlopts: Setting default types and options.
+ (line 15)
+* hlopts <1>: Setting group options.
+ (line 10)
+* hlopts <2>: Hyperlinks (xhyper.tex).
+ (line 7)
+* hlstart: Explicit hyperlinks. (line 25)
+* hlstart <1>: Link types for hypertex.
+ (line 43)
+* hlstart <2>: Link types for pdftex and dvipdfm.
+ (line 70)
+* hlstart <3>: Setting hyperlink types and options.
+ (line 7)
+* hlstart <4>: Hyperlinks (xhyper.tex).
+ (line 7)
+* hltype: Setting default types and options.
+ (line 6)
+* hltype <1>: Setting group types. (line 6)
+* hmorphposn: Arrows and morphisms.
+ (line 32)
+* hmorphposn <1>: Commutative diagram parameters.
+ (line 20)
+* hmorphposndn: Arrows and morphisms.
+ (line 38)
+* hmorphposndn <1>: Commutative diagram parameters.
+ (line 22)
+* hmorphposnlft: Arrows and morphisms.
+ (line 39)
+* hmorphposnlft <1>: Commutative diagram parameters.
+ (line 23)
+* hmorphposnrt: Arrows and morphisms.
+ (line 39)
+* hmorphposnrt <1>: Commutative diagram parameters.
+ (line 22)
+* hmorphposnup: Arrows and morphisms.
+ (line 38)
+* hmorphposnup <1>: Commutative diagram parameters.
+ (line 22)
+* hoffset: Proofing index terms.
+ (line 21)
+* hookaction: Hooks. (line 14)
+* hookactiononce: Hooks. (line 21)
+* hookappend: Hooks. (line 15)
+* hookprepend: Hooks. (line 16)
+* hookrun: Hooks. (line 37)
+* href: General hyperlinks. (line 6)
+* hruledefaultdepth: Rules. (line 9)
+* hruledefaultheight: Rules. (line 9)
+* hsize: Margins. (line 32)
+* 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 41)
+* idxencapoperator: Customizing indexing.
+ (line 38)
+* idxendrangemark: Customizing indexing.
+ (line 44)
+* 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 49)
+* idxpagerangedelimiter: Page list and page range parsers.
+ (line 23)
+* idxpagerangedelimiter <1>: Page list and page range parsers.
+ (line 30)
+* 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 35)
+* idxsubmarked: Indexing commands. (line 40)
+* idxsubmarked (hyperlinks): Index hyperlinks. (line 6)
+* ifempty: \ifempty. (line 6)
+* iffileexists: Auxiliary files. (line 10)
+* ifidx: Indexing. (line 54)
+* ifindexproofing: Proofing index terms.
+ (line 12)
+* ifinteger: \ifinteger and \isinteger.
+ (line 6)
+* ifpdf: Checking for PDF output.
+ (line 10)
+* ifpdf <1>: Introduction to hyperlinks.
+ (line 51)
+* ifrewritetocfile: Reading the .toc file.
+ (line 26)
+* ifundefined: \ifundefined. (line 6)
+* includegraphics: Hyperlinks (xhyper.tex).
+ (line 7)
+* 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)
+* indexproofingfalse: Proofing index terms.
+ (line 12)
+* indexproofingtrue: Proofing index terms.
+ (line 12)
+* indexproofterm: Proofing index terms.
+ (line 12)
+* indexproofunbox: Proofing index terms.
+ (line 28)
+* indexsee: Customizing indexing.
+ (line 53)
+* indexsee <1>: Hyperlinks in see and see also entries.
+ (line 8)
+* indexseealso: Customizing indexing.
+ (line 53)
+* indexseealso <1>: Hyperlinks in see and see also entries.
+ (line 8)
+* indexseealsowords: Customizing indexing.
+ (line 53)
+* indexseeword: Customizing indexing.
+ (line 53)
+* indexsetmargins: Proofing index terms.
+ (line 21)
+* indexspace: Typesetting an index.
+ (line 54)
+* innerdef: Allocation macros. (line 28)
+* innerinnerdef: Allocation macros. (line 39)
+* innernewbox: Allocation macros. (line 21)
+* innernewcount: Allocation macros. (line 21)
+* innernewdimen: Allocation macros. (line 21)
+* innernewfam: Allocation macros. (line 22)
+* innernewhelp: Allocation macros. (line 22)
+* innernewif: Allocation macros. (line 22)
+* innernewinsert: Allocation macros. (line 22)
+* innernewlanguage: Allocation macros. (line 23)
+* innernewread: Allocation macros. (line 24)
+* innernewskip: Allocation macros. (line 24)
+* innernewtoks: Allocation macros. (line 24)
+* innernewwrite: Allocation macros. (line 24)
+* 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: Citations. (line 17)
+* jobname <1>: Typesetting an index.
+ (line 11)
+* jobname <2>: Auxiliary files. (line 9)
+* LAMSTeX: Logos. (line 11)
+* LaTeX: Logos. (line 11)
+* lbracechar: Category codes. (line 57)
+* left (destination option): Destination types for pdftex and dvipdfm.
+ (line 11)
+* left (destination option) <1>: Destination types for pdftex and dvipdfm.
+ (line 33)
+* left (destination option) <2>: Destination types for pdftex and dvipdfm.
+ (line 54)
+* left (destination option) <3>: Destination types for pdftex and dvipdfm.
+ (line 65)
+* left (destination option) <4>: Destination options for pdftex and dvipdfm.
+ (line 60)
+* leftdisplayindent: Displays. (line 11)
+* leftdisplays: Displays. (line 9)
+* leftdisplaysetup: Formatting displays. (line 8)
+* lefteqnumbers: Displays. (line 23)
+* leftmargin: Margins. (line 17)
+* leqalignno: Displays. (line 19)
+* leqalignno <1>: Displays. (line 23)
+* leqno: Displays. (line 23)
+* letreturn: Category codes. (line 40)
+* letter: Category codes. (line 10)
+* lft: Arrows and morphisms.
+ (line 15)
+* li: Lists. (line 27)
+* li (hyperlinks): List hyperlinks. (line 6)
+* linenumberedlisting: Verbatim listing. (line 17)
+* linenumberedlisting <1>: Highlighting TeX comments in listings (lscommnt.tex).
+ (line 7)
+* listcompact: Lists. (line 38)
+* listing: Verbatim listing. (line 7)
+* listing <1>: Highlighting TeX comments in listings (lscommnt.tex).
+ (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 11)
+* loop: Iteration. (line 40)
+* makeactive: Category codes. (line 13)
+* makeatletter: Category codes. (line 22)
+* makeatother: Category codes. (line 31)
+* makeblankbox: Boxes. (line 12)
+* makecolumns: Tables. (line 6)
+* makeheadline: Proofing index terms.
+ (line 28)
+* mapdown: Arrows and morphisms.
+ (line 13)
+* mapdown <1>: Arrows and morphisms.
+ (line 76)
+* mapleft: Arrows and morphisms.
+ (line 6)
+* mapleft <1>: Arrows and morphisms.
+ (line 51)
+* mapright: Arrows and morphisms.
+ (line 6)
+* mapright <1>: Arrows and morphisms.
+ (line 48)
+* mapup: Arrows and morphisms.
+ (line 13)
+* mapup <1>: Arrows and morphisms.
+ (line 79)
+* matrix: Construction of commutative diagrams.
+ (line 10)
+* mbox: Commands from LaTeX. (line 28)
+* MF: Logos. (line 11)
+* monthname: Time of day. (line 10)
+* morphdist: Arrows and morphisms.
+ (line 33)
+* morphdist <1>: Commutative diagram parameters.
+ (line 32)
+* name (hyperlink type): Link types for hypertex.
+ (line 7)
+* name (hyperlink type) <1>: Link types for pdftex and dvipdfm.
+ (line 18)
+* new...: Allocation macros. (line 8)
+* newblock: Commands from LaTeX. (line 31)
+* newcommand: Commands from LaTeX. (line 18)
+* newwin (hyperlink option): Link types for pdftex and dvipdfm.
+ (line 41)
+* newwin (hyperlink option) <1>: Link types for pdftex and dvipdfm.
+ (line 53)
+* newwin (hyperlink option) <2>: Link options for pdftex and dvipdfm.
+ (line 90)
+* noarrow: Invoking Eplain. (line 84)
+* noauxfile: Invoking Eplain. (line 89)
+* nobibtex: Invoking Eplain. (line 73)
+* nocite: Citations. (line 58)
+* nolastlinelisting: Verbatim listing. (line 25)
+* nolastlinelisting <1>: Highlighting TeX comments in listings (lscommnt.tex).
+ (line 7)
+* 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 91)
+* numberedfootnote: Footnotes. (line 7)
+* numberedfootnote (hyperlinks): Footnote hyperlinks. (line 6)
+* numberedlist: Lists. (line 13)
+* numberedlistdepth: Formatting lists. (line 41)
+* numberedmarker: Formatting lists. (line 37)
+* numbername: Writing out numbers. (line 6)
+* obeywhitespace: Obeying spaces. (line 6)
+* orderedlist: Lists. (line 13)
+* 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 30)
+* pagefit (hyperlink option): Link types for pdftex and dvipdfm.
+ (line 31)
+* pagefit (hyperlink option) <1>: Link types for pdftex and dvipdfm.
+ (line 41)
+* pagefit (hyperlink option) <2>: Link types for pdftex and dvipdfm.
+ (line 53)
+* pagefit (hyperlink option) <3>: Link options for pdftex and dvipdfm.
+ (line 107)
+* pageno: Proofing index terms.
+ (line 21)
+* pagetotal: Multiple columns. (line 14)
+* paperheight: Margins. (line 43)
+* paperwidth: Margins. (line 46)
+* 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 54)
+* phantomeqlabel: Equation reference hyperlinks.
+ (line 14)
+* phantomeqnumber: Equation reference hyperlinks.
+ (line 14)
+* previouseverydisplay: Formatting displays. (line 14)
+* printbetweencitations: Formatting citations.
+ (line 20)
+* printcitefinish: Formatting citations.
+ (line 15)
+* printcitenote: Formatting citations.
+ (line 26)
+* printcitestart: Formatting citations.
+ (line 15)
+* printitem: Formatting lists. (line 51)
+* printlistinglineno: Verbatim listing. (line 19)
+* printlistinglineno <1>: Verbatim listing. (line 27)
+* providecommand: Commands from LaTeX. (line 18)
+* quadcolumns: Multiple columns. (line 7)
+* raggedright for index entries: Typesetting an index.
+ (line 45)
+* raise (hyperlink option): Options supported by all drivers.
+ (line 13)
+* raise (hyperlink option) <1>: Setting group options.
+ (line 33)
+* raw (destination type): Destination types for hypertex.
+ (line 12)
+* raw (destination type) <1>: Destination types for pdftex and dvipdfm.
+ (line 81)
+* raw (hyperlink type): Link types for hypertex.
+ (line 37)
+* raw (hyperlink type) <1>: Link types for pdftex and dvipdfm.
+ (line 64)
+* rbracechar: Category codes. (line 58)
+* readindexfile: Typesetting an index.
+ (line 6)
+* readindexfile (hyperlinks): Index hyperlinks. (line 9)
+* readtocfile: Reading the .toc file.
+ (line 6)
+* ref: Using generic references.
+ (line 16)
+* ref <1>: Hyperlinks (xhyper.tex).
+ (line 7)
+* 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 22)
+* refs (hyperlinks): Cross-reference hyperlinks.
+ (line 26)
+* refspace: Cross-reference hyperlinks.
+ (line 24)
+* refspace <1>: Page reference hyperlinks.
+ (line 10)
+* reftie: Cross-reference hyperlinks.
+ (line 16)
+* reftie <1>: Cross-reference hyperlinks.
+ (line 23)
+* reftie <2>: Equation reference hyperlinks.
+ (line 20)
+* renewcommand: Commands from LaTeX. (line 18)
+* repeat: Iteration. (line 42)
+* resetatcatcode: Environment for loading packages.
+ (line 35)
+* resetatcatcode <1>: Category codes. (line 23)
+* rewritetocfile (conditional): Reading the .toc file.
+ (line 26)
+* right (destination option): Destination types for pdftex and dvipdfm.
+ (line 66)
+* right (destination option) <1>: Destination options for pdftex and dvipdfm.
+ (line 64)
+* righteqnumbers: Displays. (line 23)
+* rightmargin: Margins. (line 17)
+* rotatebox: Hyperlinks (xhyper.tex).
+ (line 7)
+* rt: Arrows and morphisms.
+ (line 14)
+* sanitize: Converting to characters.
+ (line 22)
+* sarrowlength: Arrows and morphisms.
+ (line 28)
+* sarrowlength <1>: Commutative diagram parameters.
+ (line 17)
+* sc: Commands from LaTeX. (line 25)
+* see for index entries: Modifying index entries.
+ (line 36)
+* see for index entries <1>: Customizing indexing.
+ (line 62)
+* seealso for index entries: Modifying index entries.
+ (line 49)
+* seevariant: Customizing indexing.
+ (line 53)
+* setidxpagelistdelimiter: Page list and page range parsers.
+ (line 14)
+* setidxpagerangedelimiter: Page list and page range parsers.
+ (line 14)
+* setproperty: Properties. (line 13)
+* setuplistinghook: Verbatim listing. (line 13)
+* setuplistinghook <1>: Highlighting TeX comments in listings (lscommnt.tex).
+ (line 7)
+* 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)
+* sline <1>: Arrows and morphisms.
+ (line 107)
+* 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)
+* textbf: Commands from LaTeX. (line 25)
+* timestamp: Time of day. (line 18)
+* timestring: Time of day. (line 16)
+* toc...entry: Writing the .toc file.
+ (line 9)
+* toc...entry <1>: Writing the .toc file.
+ (line 54)
+* tocfilebasename: Changing the .toc file's root name.
+ (line 10)
+* today: Time of day. (line 21)
+* top (destination option): Destination types for pdftex and dvipdfm.
+ (line 11)
+* top (destination option) <1>: Destination types for pdftex and dvipdfm.
+ (line 25)
+* top (destination option) <2>: Destination types for pdftex and dvipdfm.
+ (line 46)
+* top (destination option) <3>: Destination types for pdftex and dvipdfm.
+ (line 66)
+* top (destination option) <4>: Destination options for pdftex and dvipdfm.
+ (line 68)
+* topmargin: Margins. (line 17)
+* tracingall: Diagnostics. (line 8)
+* tracingboxes: Diagnostics. (line 16)
+* tracingoff: Diagnostics. (line 18)
+* triplecolumns: Multiple columns. (line 7)
+* tt: Packages known to work.
+ (line 77)
+* ttfamily: Packages known to work.
+ (line 73)
+* uncatcodespecials: Verbatim listing. (line 57)
+* uncatcodespecials <1>: Category codes. (line 49)
+* unorderedlist: Lists. (line 20)
+* unorderedlistdepth: Formatting lists. (line 41)
+* unorderedmarker: Formatting lists. (line 37)
+* url: Hyperlinks (xhyper.tex).
+ (line 7)
+* url (hyperlink type): Link types for hypertex.
+ (line 14)
+* url (hyperlink type) <1>: Link types for pdftex and dvipdfm.
+ (line 25)
+* url (hyperlinks): URL hyperlinks. (line 6)
+* usepackage: The \usepackage command.
+ (line 6)
+* varrowlength: Arrows and morphisms.
+ (line 28)
+* varrowlength <1>: Commutative diagram parameters.
+ (line 14)
+* vchannel: Commutative diagram parameters.
+ (line 39)
+* verbatim: Verbatim listing. (line 34)
+* verbatimescapechar: Verbatim listing. (line 47)
+* vgrid: Construction of commutative diagrams.
+ (line 108)
+* vgrid <1>: Commutative diagram parameters.
+ (line 51)
+* vline: Arrows and morphisms.
+ (line 82)
+* vmorphposn: Arrows and morphisms.
+ (line 33)
+* vmorphposn <1>: Commutative diagram parameters.
+ (line 26)
+* vmorphposndn: Arrows and morphisms.
+ (line 38)
+* vmorphposndn <1>: Commutative diagram parameters.
+ (line 28)
+* vmorphposnlft: Arrows and morphisms.
+ (line 40)
+* vmorphposnlft <1>: Commutative diagram parameters.
+ (line 29)
+* vmorphposnrt: Arrows and morphisms.
+ (line 39)
+* vmorphposnrt <1>: Commutative diagram parameters.
+ (line 28)
+* vmorphposnup: Arrows and morphisms.
+ (line 38)
+* vmorphposnup <1>: Commutative diagram parameters.
+ (line 28)
+* vpenalty: Mode-specific penalties.
+ (line 9)
+* vruledefaultwidth: Rules. (line 10)
+* width (destination option): Destination types for pdftex and dvipdfm.
+ (line 60)
+* width (destination option) <1>: Destination options for pdftex and dvipdfm.
+ (line 40)
+* width (hyperlink option): Link options for pdftex and dvipdfm.
+ (line 128)
+* writenumberedtocentry: Writing the .toc file.
+ (line 13)
+* writenumberedtocline: Writing the .toc file.
+ (line 36)
+* writetocentry: Writing the .toc file.
+ (line 7)
+* XeLaTeX: Logos. (line 11)
+* XeTeX: Logos. (line 11)
+* 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: Page references. (line 18)
+* xrefpageword <1>: Page reference hyperlinks.
+ (line 10)
+* xrefwarning conditional: Using generic references.
+ (line 14)
+* xrefwarningfalse: Citations. (line 78)
+* xrlabel: Converting to characters.
+ (line 6)
+* xyz (destination type): Destination types for hypertex.
+ (line 7)
+* xyz (destination type) <1>: Destination types for pdftex and dvipdfm.
+ (line 7)
+* zoom (destination option): Destination types for pdftex and dvipdfm.
+ (line 7)
+* zoom (destination option) <1>: Destination options for pdftex and dvipdfm.
+ (line 21)
+
+
+File: eplain.info, Node: Concept index, Prev: Macro index, Up: Top
+
+Concept index
+*************
+
+
+* Menu:
+
+* *-form of LaTeX commands: Commands from LaTeX. (line 18)
+* .aux file: Citations. (line 17)
+* .aux file <1>: Cross-references. (line 11)
+* .bbl file: Citations. (line 21)
+* .bib file: Citations. (line 20)
+* .bst files: Citations. (line 70)
+* .cls files: Loading LaTeX packages.
+ (line 6)
+* .eps files: Packages known to work.
+ (line 91)
+* .eps files <1>: Packages known to work.
+ (line 100)
+* .fmt file: Installation. (line 27)
+* .fmt file <1>: Invoking Eplain. (line 14)
+* .idx files: Indexing. (line 23)
+* .idx files <1>: Index hyperlinks. (line 14)
+* .ind files: Indexing. (line 27)
+* .ind files <1>: Index hyperlinks. (line 25)
+* .pdf files: Checking for PDF output.
+ (line 6)
+* .pdf files <1>: Packages known to work.
+ (line 91)
+* .pdf files <2>: Introduction to hyperlinks.
+ (line 13)
+* .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 128)
+* 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: URL hyperlinks. (line 17)
+* avoiding boxed links <1>: Setting default types and options.
+ (line 25)
+* 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 30)
+* beveled hyperlink border: Link options for pdftex and dvipdfm.
+ (line 25)
+* bibliographies: Citations. (line 6)
+* bibliography fonts: Formatting bibliographies.
+ (line 38)
+* bibliography items, extra space between: Formatting bibliographies.
+ (line 67)
+* bibliography, formatting the: Formatting bibliographies.
+ (line 6)
+* bibliography, hyperlinks: Citation hyperlinks. (line 11)
+* bibtex: Invoking Eplain. (line 103)
+* BibTeX: Citations. (line 9)
+* BibTeX <1>: Logos. (line 10)
+* black boxes: Boxes. (line 6)
+* Borceux, Francis: Construction of commutative diagrams.
+ (line 79)
+* border color, hyperlink: Link options for pdftex and dvipdfm.
+ (line 13)
+* border style, hyperlink: Link options for pdftex and dvipdfm.
+ (line 19)
+* border style, hyperlink <1>: Link options for pdftex and dvipdfm.
+ (line 25)
+* border width, hyperlink: Link options for pdftex and dvipdfm.
+ (line 49)
+* Bott, Raoul: Construction of commutative diagrams.
+ (line 13)
+* boxed links, avoiding: URL hyperlinks. (line 17)
+* boxed links, avoiding <1>: Setting default types and options.
+ (line 25)
+* 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 85)
+* Brockett, Roger W.: Construction of commutative diagrams.
+ (line 38)
+* Butterfly Lemma: Construction of commutative diagrams.
+ (line 121)
+* Carlisle, David: Loading LaTeX packages.
+ (line 14)
+* catcode of '@': Environment for loading packages.
+ (line 35)
+* category codes: Category codes. (line 6)
+* centering: Justification. (line 6)
+* characters, converting to: Converting to characters.
+ (line 6)
+* characters, special: Verbatim listing. (line 57)
+* citations: Citations. (line 6)
+* citations, formatting: Formatting citations.
+ (line 6)
+* citations, hyperlinks: Citation hyperlinks. (line 6)
+* citations, undefined: Citations. (line 48)
+* cmtt8: Proofing index terms.
+ (line 12)
+* color: Packages known to work.
+ (line 25)
+* color, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* color, hyperlink border: Link options for pdftex and dvipdfm.
+ (line 13)
+* color, hyperlinks: URL hyperlinks. (line 17)
+* color, hyperlinks <1>: Options supported by all drivers.
+ (line 37)
+* color, hyperlinks <2>: Setting default types and options.
+ (line 25)
+* color, problems with pdfTeX: Packages known to work.
+ (line 29)
+* color.sty: Packages known to work.
+ (line 21)
+* color.sty <1>: URL hyperlinks. (line 18)
+* color.sty <2>: Hyperlink driver nolinks.
+ (line 34)
+* color.sty <3>: Setting default types and options.
+ (line 27)
+* color.sty <4>: Hyperlinks (xhyper.tex).
+ (line 7)
+* colored links: URL hyperlinks. (line 17)
+* colored links <1>: Options supported by all drivers.
+ (line 37)
+* colored links <2>: Setting default types and options.
+ (line 25)
+* 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 62)
+* comments, highlighting in listings: Highlighting TeX comments in listings (lscommnt.tex).
+ (line 7)
+* commutative diagrams: Commutative diagrams.
+ (line 6)
+* contents: Contents. (line 6)
+* contents, and verbatim text: Writing the .toc file.
+ (line 49)
+* 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: Defining generic references.
+ (line 6)
+* cross-references, defining general <1>: Using generic references.
+ (line 6)
+* cross-references, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* cross-references, hyperlinks: Cross-reference hyperlinks.
+ (line 6)
+* cross-referencing index entries: Modifying index entries.
+ (line 36)
+* cross-referencing index entries <1>: Customizing indexing.
+ (line 62)
+* 'CTRL-L', and verbatim listing: Verbatim listing. (line 30)
+* cube: Construction of commutative diagrams.
+ (line 89)
+* customizing indexing: Customizing indexing.
+ (line 6)
+* dashed hyperlink border: Link options for pdftex and dvipdfm.
+ (line 19)
+* dashed hyperlink border <1>: Link options for pdftex and dvipdfm.
+ (line 25)
+* date: Time of day. (line 6)
+* default hyperlink options: Setting hyperlink types and options.
+ (line 6)
+* default hyperlink options <1>: Setting group types. (line 17)
+* default hyperlink type: Setting hyperlink types and options.
+ (line 6)
+* default hyperlink type <1>: Setting group types. (line 17)
+* defining general references: Defining generic references.
+ (line 6)
+* defining general references <1>: Using generic references.
+ (line 6)
+* definitions, global: Category codes. (line 37)
+* demo files: Demo files. (line 6)
+* destgroup: Implicit hyperlinks. (line 10)
+* destgroup options: Setting hyperlink types and options.
+ (line 12)
+* destgroup options <1>: Setting group options.
+ (line 6)
+* destgroup options, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* destgroup type: Setting hyperlink types and options.
+ (line 12)
+* destgroup type <1>: Setting group types. (line 6)
+* destgroup type, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* 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)
+* 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: Setting hyperlink types and options.
+ (line 6)
+* destinations, default options <1>: Setting group types. (line 17)
+* destinations, default type: Setting hyperlink types and options.
+ (line 6)
+* destinations, default type <1>: Setting group types. (line 17)
+* destinations, dimensions: Destination options for pdftex and dvipdfm.
+ (line 34)
+* destinations, dimensions <1>: Destination options for pdftex and dvipdfm.
+ (line 37)
+* destinations, dimensions <2>: Destination options for pdftex and dvipdfm.
+ (line 40)
+* destinations, dimensions <3>: Destination options for pdftex and dvipdfm.
+ (line 56)
+* destinations, dimensions <4>: Destination options for pdftex and dvipdfm.
+ (line 60)
+* destinations, dimensions <5>: Destination options for pdftex and dvipdfm.
+ (line 64)
+* destinations, dimensions <6>: Destination options for pdftex and dvipdfm.
+ (line 68)
+* destinations, disabling: Hyperlink driver nolinks.
+ (line 6)
+* destinations, disabling <1>: Turning hyperlinks on/off.
+ (line 6)
+* destinations, group options: Setting hyperlink types and options.
+ (line 12)
+* destinations, group options <1>: Setting group options.
+ (line 6)
+* destinations, group options, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* destinations, group type: Setting hyperlink types and options.
+ (line 12)
+* destinations, group type <1>: Setting group types. (line 6)
+* destinations, group type, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* destinations, in another file: Link types for hypertex.
+ (line 21)
+* destinations, in another file <1>: Link types for pdftex and dvipdfm.
+ (line 39)
+* destinations, in another file <2>: Link types for pdftex and dvipdfm.
+ (line 51)
+* destinations, large operators: Options supported by all drivers.
+ (line 27)
+* destinations, large operators <1>: Setting group options.
+ (line 33)
+* destinations, magnification: Destination options for pdftex and dvipdfm.
+ (line 21)
+* destinations, named: Link types for hypertex.
+ (line 7)
+* destinations, named <1>: Link types for pdftex and dvipdfm.
+ (line 18)
+* destinations, numbered: Link types for pdftex and dvipdfm.
+ (line 91)
+* destinations, page: Link types for pdftex and dvipdfm.
+ (line 30)
+* destinations, raising: Options supported by all drivers.
+ (line 13)
+* destinations, URL: Link types for hypertex.
+ (line 14)
+* destinations, URL <1>: Link types for pdftex and dvipdfm.
+ (line 25)
+* detecting numbers: \ifinteger and \isinteger.
+ (line 6)
+* diagnostics: Diagnostics. (line 6)
+* Diagram, macros for LaTeX: Construction of commutative diagrams.
+ (line 79)
+* dimensions, hyperlink: Link options for pdftex and dvipdfm.
+ (line 122)
+* dimensions, hyperlink <1>: Link options for pdftex and dvipdfm.
+ (line 125)
+* dimensions, hyperlink <2>: Link options for pdftex and dvipdfm.
+ (line 128)
+* dimensions, hyperlink destination: Destination options for pdftex and dvipdfm.
+ (line 34)
+* dimensions, hyperlink destination <1>: Destination options for pdftex and dvipdfm.
+ (line 37)
+* dimensions, hyperlink destination <2>: Destination options for pdftex and dvipdfm.
+ (line 40)
+* dimensions, hyperlink destination <3>: Destination options for pdftex and dvipdfm.
+ (line 56)
+* dimensions, hyperlink destination <4>: Destination options for pdftex and dvipdfm.
+ (line 60)
+* dimensions, hyperlink destination <5>: Destination options for pdftex and dvipdfm.
+ (line 64)
+* dimensions, hyperlink destination <6>: Destination options for pdftex and dvipdfm.
+ (line 68)
+* disabling hyperlinks: Hyperlink driver nolinks.
+ (line 6)
+* disabling hyperlinks <1>: Turning hyperlinks on/off.
+ (line 6)
+* disabling indexes: Indexing. (line 54)
+* displayed math and hyperlinks: Options supported by all drivers.
+ (line 27)
+* displayed math and hyperlinks <1>: Setting group options.
+ (line 33)
+* 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: Introduction to hyperlinks.
+ (line 36)
+* dvipdfm <1>: Hyperlink driver hypertex.
+ (line 13)
+* dvipdfm <2>: Hyperlink driver hypertex.
+ (line 47)
+* '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)
+* dvips <1>: Hyperlink driver hypertex.
+ (line 32)
+* Eijkhout, Victor: Iteration. (line 61)
+* eject in multicolumns: Multiple columns. (line 14)
+* electronic mail addresses, breaking: Paths. (line 6)
+* electronic mail addresses, breaking <1>: Packages known to work.
+ (line 121)
+* 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 91)
+* Encapsulated PostScript <1>: Packages known to work.
+ (line 100)
+* 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 91)
+* EPS <1>: Packages known to work.
+ (line 100)
+* epstopdf: Packages known to work.
+ (line 91)
+* epstopdf.sty: Packages known to work.
+ (line 89)
+* equation labels, characters valid in: Equation references. (line 54)
+* equation numbers, formatting of: Formatting equation references.
+ (line 6)
+* equation numbers, left-alignment: Displays. (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 24)
+* error on '\input': Environment for loading packages.
+ (line 41)
+* escape character, changing verbatim: Verbatim listing. (line 47)
+* eTeX: Logos. (line 10)
+* 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 7)
+* ExTeX: Logos. (line 10)
+* file, hyperlink to: Link types for hypertex.
+ (line 21)
+* file, hyperlink to <1>: Link types for pdftex and dvipdfm.
+ (line 39)
+* file, hyperlink to <2>: Link types for pdftex and dvipdfm.
+ (line 51)
+* 'file:' links: General hyperlinks. (line 37)
+* filenames, breaking: Paths. (line 6)
+* filenames, breaking <1>: Packages known to work.
+ (line 121)
+* files, verbatim listing of: Verbatim listing. (line 6)
+* files, verbatim listing of, demo: Highlighting TeX comments in listings (lscommnt.tex).
+ (line 7)
+* 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)
+* Ghostscript <1>: Hyperlink driver hypertex.
+ (line 35)
+* gobbling arguments: Macro arguments. (line 6)
+* golden mean: Construction of commutative diagrams.
+ (line 59)
+* golden mean <1>: Construction of commutative diagrams.
+ (line 59)
+* Graham, Ronald L.: Citations. (line 91)
+* graphics collection, LaTeX: Loading LaTeX packages.
+ (line 14)
+* graphics collection, LaTeX <1>: Packages known to work.
+ (line 25)
+* graphics collection, LaTeX <2>: Hyperlink driver nolinks.
+ (line 34)
+* graphics collection, LaTeX, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* 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: Packages known to work.
+ (line 23)
+* graphicx.sty <1>: Hyperlinks (xhyper.tex).
+ (line 7)
+* grid: Construction of commutative diagrams.
+ (line 79)
+* group option list: Setting group options.
+ (line 48)
+* group options, hyperlink: Setting hyperlink types and options.
+ (line 12)
+* group options, hyperlink <1>: Setting group options.
+ (line 6)
+* group options, hyperlink, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* group type, hyperlink: Setting hyperlink types and options.
+ (line 12)
+* group type, hyperlink <1>: Setting group types. (line 6)
+* group type, hyperlink, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* 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': Equation reference hyperlinks.
+ (line 6)
+* group 'eq' <1>: Equation reference hyperlinks.
+ (line 20)
+* group 'eq' <2>: Setting group options.
+ (line 34)
+* 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, 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 21)
+* groups, specifying all: Setting group types. (line 26)
+* hanging on '\input': Environment for loading packages.
+ (line 41)
+* help messages: Diagnostics. (line 24)
+* highlight modes, hyperlink: Link options for pdftex and dvipdfm.
+ (line 69)
+* highlighting: Packages known to work.
+ (line 111)
+* highlighting, in listings: Highlighting TeX comments in listings (lscommnt.tex).
+ (line 7)
+* Ho"ppner, Klaus: Packages known to work.
+ (line 83)
+* hooks: Hooks. (line 6)
+* hyperlink border color: Link options for pdftex and dvipdfm.
+ (line 13)
+* hyperlink color: URL hyperlinks. (line 17)
+* hyperlink color <1>: Options supported by all drivers.
+ (line 37)
+* hyperlink color <2>: Setting default types and options.
+ (line 25)
+* hyperlink destination, dimensions: Destination options for pdftex and dvipdfm.
+ (line 34)
+* hyperlink destination, dimensions <1>: Destination options for pdftex and dvipdfm.
+ (line 37)
+* hyperlink destination, dimensions <2>: Destination options for pdftex and dvipdfm.
+ (line 40)
+* hyperlink destination, dimensions <3>: Destination options for pdftex and dvipdfm.
+ (line 56)
+* hyperlink destination, dimensions <4>: Destination options for pdftex and dvipdfm.
+ (line 60)
+* hyperlink destination, dimensions <5>: Destination options for pdftex and dvipdfm.
+ (line 64)
+* hyperlink destination, dimensions <6>: Destination options for pdftex and dvipdfm.
+ (line 68)
+* hyperlink destination, magnification: Destination options for pdftex and dvipdfm.
+ (line 21)
+* hyperlink destination, named: Link types for hypertex.
+ (line 7)
+* hyperlink destination, named <1>: Link types for pdftex and dvipdfm.
+ (line 18)
+* hyperlink destination, numbered: Link types for pdftex and dvipdfm.
+ (line 91)
+* hyperlink destination, page: Link types for pdftex and dvipdfm.
+ (line 30)
+* hyperlink destination, raising: Options supported by all drivers.
+ (line 13)
+* hyperlink dimensions: Link options for pdftex and dvipdfm.
+ (line 122)
+* hyperlink dimensions <1>: Link options for pdftex and dvipdfm.
+ (line 125)
+* hyperlink dimensions <2>: Link options for pdftex and dvipdfm.
+ (line 128)
+* 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 21)
+* 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 19)
+* hyperlinks, border style <1>: Link options for pdftex and dvipdfm.
+ (line 25)
+* hyperlinks, border width: Link options for pdftex and dvipdfm.
+ (line 49)
+* hyperlinks, citations: Citation hyperlinks. (line 6)
+* hyperlinks, cross-references: Cross-reference hyperlinks.
+ (line 6)
+* hyperlinks, default options: Setting hyperlink types and options.
+ (line 6)
+* hyperlinks, default options <1>: Setting group types. (line 17)
+* hyperlinks, default type: Setting hyperlink types and options.
+ (line 6)
+* hyperlinks, default type <1>: Setting group types. (line 17)
+* hyperlinks, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* hyperlinks, disabling: Hyperlink driver nolinks.
+ (line 6)
+* hyperlinks, disabling <1>: Turning hyperlinks on/off.
+ (line 6)
+* hyperlinks, equations: Equation reference hyperlinks.
+ (line 6)
+* hyperlinks, explicit: Explicit hyperlinks. (line 6)
+* hyperlinks, explicit, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* 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 48)
+* hyperlinks, group options: Setting hyperlink types and options.
+ (line 12)
+* hyperlinks, group options <1>: Setting group options.
+ (line 6)
+* hyperlinks, group options, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* hyperlinks, group type: Setting hyperlink types and options.
+ (line 12)
+* hyperlinks, group type <1>: Setting group types. (line 6)
+* hyperlinks, highlight mode: Link options for pdftex and dvipdfm.
+ (line 69)
+* hyperlinks, implicit: Implicit hyperlinks. (line 6)
+* hyperlinks, implicit, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* 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: Options supported by all drivers.
+ (line 27)
+* hyperlinks, large operators <1>: Setting group options.
+ (line 33)
+* 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: Link types for hypertex.
+ (line 21)
+* hyperlinks, to another file <1>: Link types for pdftex and dvipdfm.
+ (line 39)
+* hyperlinks, to another file <2>: Link types for pdftex and dvipdfm.
+ (line 51)
+* hyperlinks, URL: General hyperlinks. (line 20)
+* hyperlinks, URL <1>: URL hyperlinks. (line 6)
+* hyperlinks, URL <2>: Link types for hypertex.
+ (line 14)
+* hyperlinks, URL <3>: Link types for pdftex and dvipdfm.
+ (line 25)
+* 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 7)
+* 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 85)
+* 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: Modifying index entries.
+ (line 36)
+* index entries, and cross-referencing <1>: Customizing indexing.
+ (line 62)
+* 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 50)
+* 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, disabling: Indexing. (line 54)
+* indexes, multiple: Indexing. (line 36)
+* 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 25)
+* installation: Installation. (line 6)
+* integers, detecting: \ifinteger and \isinteger.
+ (line 6)
+* italic correction: Formatting bibliographies.
+ (line 45)
+* item labels, changing: Formatting lists. (line 53)
+* iteration: Iteration. (line 6)
+* justification: Justification. (line 6)
+* Knuth, Donald Ervin: Citations. (line 91)
+* Knuth, Donald Ervin <1>: Category codes. (line 7)
+* labels on items, changing: Formatting lists. (line 53)
+* 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 15)
+* LAMSTeX: Logos. (line 11)
+* Lang, Serge: Arrows and morphisms.
+ (line 126)
+* Lang, Serge <1>: Construction of commutative diagrams.
+ (line 121)
+* large operators and hyperlinks: Options supported by all drivers.
+ (line 27)
+* large operators and hyperlinks <1>: Setting group options.
+ (line 33)
+* LaTeX: Introduction. (line 15)
+* LaTeX <1>: Citations. (line 10)
+* LaTeX <2>: Logos. (line 11)
+* LaTeX <3>: Slanted lines and vectors.
+ (line 7)
+* LaTeX commands, in 'btxmac.tex': Commands from LaTeX. (line 6)
+* LaTeX graphics collection: Loading LaTeX packages.
+ (line 14)
+* LaTeX graphics collection <1>: Packages known to work.
+ (line 25)
+* LaTeX graphics collection <2>: Hyperlink driver nolinks.
+ (line 34)
+* LaTeX graphics collection, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* LaTeX packages: Loading LaTeX packages.
+ (line 6)
+* LaTeX packages <1>: Packages known to work.
+ (line 6)
+* LaTeX packages <2>: Packages known not to work.
+ (line 6)
+* LaTeX packages, restoring '\input': Environment for loading packages.
+ (line 24)
+* left-alignment of equation numbers: Displays. (line 6)
+* left-justification: Justification. (line 6)
+* left-justification of displays: Displays. (line 6)
+* letterspacing: Packages known to work.
+ (line 111)
+* 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: Setting hyperlink types and options.
+ (line 12)
+* link, group options <1>: Setting group options.
+ (line 6)
+* link, group options, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* link, group type: Setting hyperlink types and options.
+ (line 12)
+* link, group type <1>: Setting group types. (line 6)
+* linkgroup: Implicit hyperlinks. (line 10)
+* linkgroup options: Setting hyperlink types and options.
+ (line 12)
+* linkgroup options <1>: Setting group options.
+ (line 6)
+* linkgroup options, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* linkgroup type: Setting hyperlink types and options.
+ (line 12)
+* linkgroup type <1>: Setting group types. (line 6)
+* linkgroup 'cite': Citation hyperlinks. (line 6)
+* linkgroup 'eq': Equation reference hyperlinks.
+ (line 20)
+* linkgroup 'eq' <1>: Setting group options.
+ (line 34)
+* 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)
+* 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 7)
+* lists: Lists. (line 6)
+* lists, formatting: Formatting lists. (line 6)
+* lists, hyperlinks: List hyperlinks. (line 6)
+* loading packages, environment for: Environment for loading packages.
+ (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 7)
+* magnification, hyperlink destination: Destination options for pdftex and dvipdfm.
+ (line 21)
+* makeindex: Invoking Eplain. (line 103)
+* makeindex <1>: Indexing. (line 14)
+* makeindex <2>: Index hyperlinks. (line 12)
+* margins, changing: Margins. (line 6)
+* margins, index terms in: Proofing index terms.
+ (line 6)
+* mathematics displays, formatting: Displays. (line 6)
+* mathematics displays, hyperlinks: Options supported by all drivers.
+ (line 27)
+* mathematics displays, hyperlinks <1>: Setting group options.
+ (line 33)
+* Metafont: Logos. (line 11)
+* 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 36)
+* named destination: Link types for hypertex.
+ (line 7)
+* named destination <1>: Link types for pdftex and dvipdfm.
+ (line 18)
+* names, of TeX variants: Logos. (line 6)
+* new window, opening hyperlink in: Link options for pdftex and dvipdfm.
+ (line 90)
+* newlinechar: Diagnostics. (line 26)
+* newlines, obeying: Obeying spaces. (line 6)
+* 'nolinks', hyperlink driver: Hyperlink driver nolinks.
+ (line 6)
+* numbered destination: Link types for pdftex and dvipdfm.
+ (line 91)
+* numbered lists: Lists. (line 6)
+* numbered references: Citations. (line 91)
+* 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: Hyperlink driver nolinks.
+ (line 6)
+* omitting hyperlinks <1>: Turning hyperlinks on/off.
+ (line 6)
+* omitting typesetting of graphics: Packages known to work.
+ (line 69)
+* open boxes: Boxes. (line 12)
+* option list, group: Setting group options.
+ (line 48)
+* option list, preserving for group: Setting group options.
+ (line 21)
+* 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 111)
+* packages, LaTeX: Loading LaTeX packages.
+ (line 6)
+* packages, LaTeX <1>: Packages known to work.
+ (line 6)
+* packages, LaTeX <2>: Packages known not to work.
+ (line 6)
+* page destination: Link types for pdftex and dvipdfm.
+ (line 30)
+* 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: Paths. (line 6)
+* pathnames, breaking <1>: Packages known to work.
+ (line 121)
+* PDF: Packages known to work.
+ (line 91)
+* PDF output: Checking for PDF output.
+ (line 6)
+* pdftex: Invoking Eplain. (line 114)
+* pdftex <1>: Checking for PDF output.
+ (line 6)
+* pdftex <2>: Introduction to hyperlinks.
+ (line 35)
+* '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: Packages known to work.
+ (line 14)
+* picture mode <1>: Slanted lines and vectors.
+ (line 7)
+* Portable Document Format: Packages known to work.
+ (line 91)
+* PostScript point: Destination types for pdftex and dvipdfm.
+ (line 66)
+* PostScript point <1>: Destination options for pdftex and dvipdfm.
+ (line 50)
+* PostScript point <2>: Link options for pdftex and dvipdfm.
+ (line 49)
+* proofing index terms: Proofing index terms.
+ (line 6)
+* properties: Properties. (line 6)
+* ps2pdf: Hyperlink driver hypertex.
+ (line 14)
+* ps2pdf <1>: Hyperlink driver hypertex.
+ (line 35)
+* psfrag.sty: Packages known to work.
+ (line 98)
+* quadruple column output: Multiple columns. (line 6)
+* Rahtz, Sebastian: Loading LaTeX packages.
+ (line 14)
+* raising hyperlink destinations: Options supported by all drivers.
+ (line 13)
+* raising hyperlink destinations <1>: Setting group options.
+ (line 33)
+* ranges and index entry: Modifying index entries.
+ (line 22)
+* recognizing numbers: \ifinteger and \isinteger.
+ (line 6)
+* rectangles: Boxes. (line 6)
+* references, alphanumeric: Citations. (line 128)
+* references, defining general: Defining generic references.
+ (line 6)
+* references, defining general <1>: Using generic references.
+ (line 6)
+* references, numbered: Citations. (line 91)
+* register allocation: Allocation macros. (line 6)
+* restoring '\input', LaTeX packages: Environment for loading packages.
+ (line 24)
+* return character: Category codes. (line 40)
+* right-justification: Justification. (line 6)
+* rms: Introduction. (line 16)
+* rotation: Packages known to work.
+ (line 25)
+* rotation, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* rule thickness: Rules. (line 7)
+* 'run:' links: General hyperlinks. (line 38)
+* scaling: Packages known to work.
+ (line 25)
+* scaling, demo: Hyperlinks (xhyper.tex).
+ (line 7)
+* sed: Customizing indexing.
+ (line 64)
+* see also index entries and hyperlinks: Hyperlinks in see and see also entries.
+ (line 6)
+* see also index entries and sorting: Customizing indexing.
+ (line 49)
+* see, and index entries: Modifying index entries.
+ (line 36)
+* see, and index entries <1>: Customizing indexing.
+ (line 62)
+* see, and index entries, hyperlinks: Hyperlinks in see and see also entries.
+ (line 6)
+* silent indexing: Indexing terms. (line 6)
+* skipping tokens: \ifundefined. (line 10)
+* skipping tokens <1>: \ifempty. (line 12)
+* SLiTeX: Logos. (line 11)
+* Snake Lemma: Arrows and morphisms.
+ (line 130)
+* solid hyperlink border: Link options for pdftex and dvipdfm.
+ (line 25)
+* sorting an index: Indexing. (line 6)
+* sorting of index entries: Indexing commands. (line 50)
+* soul.sty: Packages known to work.
+ (line 109)
+* 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 111)
+* spacing, preserving with hyperlinks: Hyperlink driver nolinks.
+ (line 6)
+* special characters: Verbatim listing. (line 57)
+* special characters, in index entries: Index entries with special characters.
+ (line 6)
+* special characters, in table of contents: Writing the .toc file.
+ (line 49)
+* Stallman, Richard: Introduction. (line 16)
+* striking out: Packages known to work.
+ (line 111)
+* style, hyperlink border: Link options for pdftex and dvipdfm.
+ (line 25)
+* 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 49)
+* table of contents, hyperlinks: Contents hyperlinks. (line 6)
+* table of contents, short: Reading the .toc file.
+ (line 19)
+* table of contents, short <1>: Macro arguments. (line 10)
+* 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: Invoking Eplain. (line 103)
+* texi2dvi <1>: Citations. (line 102)
+* texi2dvi <2>: Indexing. (line 33)
+* Texinfo: Introduction. (line 15)
+* 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 65)
+* triple column output: Multiple columns. (line 6)
+* Tu, Loring W.: Construction of commutative diagrams.
+ (line 13)
+* TUGboat: Introduction. (line 64)
+* 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 25)
+* underlining: Packages known to work.
+ (line 111)
+* 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 15)
+* URL hyperlink: General hyperlinks. (line 20)
+* URL hyperlink <1>: URL hyperlinks. (line 6)
+* URL hyperlink <2>: Link types for hypertex.
+ (line 14)
+* URL hyperlink <3>: Link types for pdftex and dvipdfm.
+ (line 25)
+* url.sty: Packages known to work.
+ (line 119)
+* url.sty <1>: URL hyperlinks. (line 6)
+* url.sty <2>: Hyperlinks (xhyper.tex).
+ (line 7)
+* 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 7)
+* verbatim text, in index: Index entries with special characters.
+ (line 40)
+* verbatim text, in table of contents: Writing the .toc file.
+ (line 49)
+* version number: Introduction. (line 50)
+* Walden, David: Introduction. (line 61)
+* 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 62)
+* while loops: Iteration. (line 6)
+* whitespace: Obeying spaces. (line 6)
+* width, hyperlink border: Link options for pdftex and dvipdfm.
+ (line 49)
+* 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)
+* XeLaTeX: Logos. (line 11)
+* xeplain.tex: Introduction. (line 6)
+* XeTeX: Logos. (line 11)
+* xhyper.tex: Hyperlinks (xhyper.tex).
+ (line 7)
+* Zassenhaus, Hans: Construction of commutative diagrams.
+ (line 121)
+* zooming, hyperlink destination: Destination options for pdftex and dvipdfm.
+ (line 21)
+
+
+
+Tag Table:
+Node: Top809
+Node: Introduction8254
+Node: Installation11274
+Node: Invoking Eplain13326
+Node: User definitions17923
+Node: Diagnostics19750
+Node: Rules21315
+Node: Citations22146
+Node: Formatting citations28574
+Node: Formatting bibliographies30111
+Node: Commands from LaTeX33347
+Node: Displays34321
+Node: Formatting displays35708
+Node: Time of day36341
+Node: Lists37100
+Node: Formatting lists39240
+Node: Verbatim listing41523
+Node: Contents44743
+Node: Writing the .toc file45412
+Node: Reading the .toc file48274
+Node: Changing the .toc file's root name49677
+Node: Alternative contents files50693
+Node: Cross-references51257
+Node: Defining generic references52743
+Node: Using generic references53619
+Node: Page references54903
+Node: Equation references55722
+Node: Formatting equation references58487
+Node: Subequation references62837
+Node: Indexing64753
+Node: Indexing terms67861
+Node: Indexing commands68973
+Node: Modifying index entries71992
+Node: Index entries with special characters74962
+Node: Proofing index terms79204
+Node: Typesetting an index81017
+Node: Customizing indexing83483
+Node: Justification87179
+Node: Tables88849
+Node: Margins91340
+Node: Multiple columns93493
+Node: Footnotes95530
+Node: Fractions98105
+Node: Paths98888
+Node: Logos100490
+Node: Boxes101220
+Node: Checking for PDF output103006
+Node: Loading LaTeX packages104094
+Node: The \usepackage command105451
+Node: Environment for loading packages106537
+Node: Packages known to work108877
+Node: Packages known not to work115252
+Node: Hyperlinks116013
+Node: Introduction to hyperlinks116594
+Node: Explicit hyperlinks122130
+Node: Implicit hyperlinks124415
+Node: General hyperlinks126236
+Node: URL hyperlinks127758
+Node: Citation hyperlinks129858
+Node: List hyperlinks130585
+Node: Cross-reference hyperlinks130976
+Node: Page reference hyperlinks132347
+Node: Equation reference hyperlinks133008
+Node: Index hyperlinks134398
+Node: Exact destinations for index terms136156
+Node: Page destinations for index terms138323
+Node: Choosing destination placement140941
+Node: Index page list and page range parsers141730
+Node: Hyperlinks in see and see also entries142282
+Node: Footnote hyperlinks143080
+Node: Contents hyperlinks144274
+Node: Hyperlink drivers144657
+Node: Options supported by all drivers145291
+Node: Hyperlink driver hypertex148087
+Node: Destination types for hypertex151031
+Node: Destination options for hypertex152065
+Node: Link types for hypertex152547
+Node: Link options for hypertex154554
+Node: Hyperlink drivers pdftex and dvipdfm155576
+Node: Destination types for pdftex and dvipdfm156221
+Node: Destination options for pdftex and dvipdfm159700
+Node: Link types for pdftex and dvipdfm162151
+Node: Link options for pdftex and dvipdfm165665
+Node: Hyperlink driver nolinks169303
+Node: Setting hyperlink types and options171706
+Node: Setting default types and options172707
+Node: Setting group types174133
+Node: Setting group options175322
+Node: Turning hyperlinks on/off177803
+Node: Turning low-level commands on/off178441
+Node: Turning hyperlinks on/off for a group178954
+Node: Arrow theoretic diagrams180107
+Node: Slanted lines and vectors180485
+Node: Commutative diagrams182558
+Node: Arrows and morphisms183167
+Node: Construction of commutative diagrams187623
+Node: Commutative diagram parameters194779
+Node: Programming definitions196595
+Node: Category codes197601
+Node: Allocation macros200246
+Node: Iteration202381
+Node: Macro arguments204033
+Node: Converting to characters207400
+Node: Expansion208785
+Node: \csn and \ece209408
+Node: \edefappend209973
+Node: Hooks210520
+Node: Properties212694
+Node: \expandonce213773
+Node: \ifundefined214221
+Node: \ifempty214785
+Node: \ifinteger and \isinteger215527
+Node: \futurenonspacelet216562
+Node: Obeying spaces217157
+Node: Writing out numbers218181
+Node: Mode-specific penalties218504
+Node: Auxiliary files219233
+Node: User-defined environments220152
+Node: Page list and page range parsers221365
+Node: Demo files223497
+Node: Hyperlinks (xhyper.tex)224063
+Node: Highlighting TeX comments in listings (lscommnt.tex)232412
+Node: Macro index234868
+Node: Concept index302707
+
+End Tag Table