summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/edmac/edmac.doc
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/edmac/edmac.doc')
-rw-r--r--Master/texmf-dist/doc/latex/edmac/edmac.doc7655
1 files changed, 7655 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/edmac/edmac.doc b/Master/texmf-dist/doc/latex/edmac/edmac.doc
new file mode 100644
index 00000000000..6327dbac6fc
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/edmac/edmac.doc
@@ -0,0 +1,7655 @@
+% \iffalse This is a METACOMMENT
+%
+% Macro file `EDMAC' for use with Plain TeX.
+%
+% Copyright (C) 1990-1996 John Lavagnino and Dominik Wujastyk.
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+% John Lavagnino and Dominik Wujastyk may be contacted at the email
+% and paper mail addresses given later in this file, after the
+% string "\author".
+% \fi
+%
+% \CheckSum{3106}
+{\catcode`\$=9
+\gdef\fileversion{ $Revision: 3.17 $ }
+\gdef\filedate{ $Date: 12 Jun 1996 17:15:00 $ }}
+\def\docdate{12 June 1996}
+% \hyphenation{man-u-script man-u-scripts}
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+% \title{Critical Edition Typesetting\\ The {\tt EDMAC} format for
+% P{\small LAIN}\,\TeX\thanks{This file is\fileversion\unskip,
+% \filedate\unskip.}}
+%
+% \author{John Lavagnino\thanks{%
+% Women Writers Project,
+% Brown University,
+% Box 1841,
+% Providence, RI 02912, USA.
+% Internet: {\tt John\_Lavagnino@brown.edu}.}
+% \and Dominik Wujastyk\thanks{%
+% Wellcome Institute for the History of Medicine,
+% 183 Euston Road,
+% London NW1 2BE, UK.
+% Internet: {\tt D.Wujastyk@ucl.ac.uk}.}}
+% \date{}
+% \DoNotIndex{\@,\@@par,\@beginparpenalty,\@empty}
+% \DoNotIndex{\@flushglue,\@input}
+% \DoNotIndex{\@makefnmark,\@makeother,\@maketitle}
+% \DoNotIndex{\@namedef,\@ne,\@spaces,\@tempa}
+% \DoNotIndex{\@tempb,\@tempswafalse,\@tempswatrue}
+% \DoNotIndex{\@thanks,\@thefnmark,\@topnum}
+% \DoNotIndex{\@@,\@elt,\@forloop,\@fortmp,\@gtempa,\@totalleftmargin}
+% \DoNotIndex{\",\/,\@ifundefined,\@nil,\@verbatim,\@vobeyspaces}
+% \DoNotIndex{\|,\~,\ ,\active,\advance,\aftergroup,\begingroup,\bgroup}
+% \DoNotIndex{\mathcal,\csname,\def,\documentstyle,\dospecials,\edef}
+% \DoNotIndex{\egroup}
+% \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\endtrivlist}
+% \DoNotIndex{\expandafter,\fi,\fnsymbol,\futurelet,\gdef,\global}
+% \DoNotIndex{\hbox,\hss,\if,\if@inlabel,\if@tempswa,\if@twocolumn}
+% \DoNotIndex{\ifcase}
+% \DoNotIndex{\ifcat,\iffalse,\ifx,\ignorespaces,\index,\input,\item}
+% \DoNotIndex{\jobname,\kern,\leavevmode,\leftskip,\let,\llap,\lower}
+% \DoNotIndex{\m@ne,\next,\newpage,\nobreak,\noexpand,\nonfrenchspacing}
+% \DoNotIndex{\obeylines,\or,\protect,\raggedleft,\rightskip,\rm,\sc}
+% \DoNotIndex{\setbox,\setcounter,\small,\space,\string,\strut}
+% \DoNotIndex{\strutbox}
+% \DoNotIndex{\thefootnote,\thispagestyle,\topmargin,\trivlist,\tt}
+% \DoNotIndex{\twocolumn,\typeout,\vss,\vtop,\xdef,\z@}
+% \DoNotIndex{\,,\@bsphack,\@esphack,\@noligs,\@vobeyspaces,\@xverbatim}
+% \DoNotIndex{\`,\catcode,\end,\escapechar,\frenchspacing,\glossary}
+% \DoNotIndex{\hangindent,\hfil,\hfill,\hskip,\hspace,\ht,\it,\langle}
+% \DoNotIndex{\leaders,\long,\makelabel,\marginpar,\markboth,\mathcode}
+% \DoNotIndex{\mathsurround,\mbox,\newcount,\newdimen,\newskip}
+% \DoNotIndex{\nopagebreak}
+% \DoNotIndex{\parfillskip,\parindent,\parskip,\penalty,\raise,\rangle}
+% \DoNotIndex{\section,\setlength,\TeX,\topsep,\underline,\unskip,\verb}
+% \DoNotIndex{\vskip,\vspace,\widetilde,\\,\%,\@date,\@defpar}
+% \DoNotIndex{\[,\{,\},\]}
+% \DoNotIndex{\count@,\ifnum,\loop,\today,\uppercase,\uccode}
+% \DoNotIndex{\baselineskip,\begin,\tw@}
+% \DoNotIndex{\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,\n,\o,\p,\q}
+% \DoNotIndex{\r,\s,\t,\u,\v,\w,\x,\y,\z,\A,\B,\C,\D,\E,\F,\G,\H}
+% \DoNotIndex{\I,\J,\K,\L,\M,\N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z}
+% \DoNotIndex{\1,\2,\3,\4,\5,\6,\7,\8,\9,\0}
+% \DoNotIndex{\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_}
+% \DoNotIndex{\discretionary,\immediate,\makeatletter,\makeatother}
+% \DoNotIndex{\meaning,\newenvironment,\par,\relax,\renewenvironment}
+% \DoNotIndex{\repeat,\scriptsize,\selectfont,\the,\undefined}
+% \DoNotIndex{\arabic,\do,\makeindex,\null,\number,\show,\write,\@ehc}
+% \DoNotIndex{\@author,\@ehc,\@ifstar,\@sanitize,\@title,\everypar}
+% \DoNotIndex{\if@minipage,\if@restonecol,\ifeof,\ifmmode}
+% \DoNotIndex{\lccode,\newtoks,\onecolumn,\openin,\p@,\SelfDocumenting}
+% \DoNotIndex{\settowidth,\@resetonecoltrue,\@resetonecolfalse,\bf}
+% \DoNotIndex{\clearpage,\closein,\lowercase,\@inlabelfalse}
+% \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault}
+% \DoNotIndex{\bfdefault}
+%
+% \iffalse This is a METACOMMENT
+% Everything up to the next `\ fi' (without a blank) will
+% be ignored. This is necessary because `%' may no longer
+% be a comment mark when this file is read in.
+%
+% HISTORY:
+%
+% $Log: D:/EDMAC/VCS/EDMAC.DOV $
+%
+% Rev 3.17 12 Jun 1996 17:15:00
+% o changed JL's and TUG's addresses;
+% o updated publication details of works produced with EDMAC;
+% o tidied up a bad cross-reference, etc.
+% o added several ftp and http references
+% o added the GNU license; moved (C) statement to top of file;
+% made the banner displayed when EDMAC is run conform to the GPL.
+% o added reference to CET.
+%
+% Rev 3.16 19 Jul 1994 11:17:04
+% o corrected space bug in \getref@num (thanks to Bernt Karasch);
+% changed documentation of how to use NFSS to point to an external
+% description ed-nfss.tex.
+%
+% Rev 3.15 13 May 1994 18:03:44
+% o added more comment to \morenoexpands;
+% o added example of \printlines after Sanskrit example;
+% o added more info on editions being done with EDMAC;
+% o minor tidying.
+%
+% Rev 3.14 11 May 1994 15:03:04
+% o removed a spurious space from \@lab; corrected a typo in docs.
+%
+% Rev 3.13 11 May 1994 14:01:28
+% o defined \list@clear and \list@create separately;
+% o swapped the subsections on fonts back, so NFSS is described first;
+% o rephrased all sentences with the word "default" to avoid its use.
+%
+% Rev 3.12 11 May 1994 12:03:10
+% o capitalized the footnote and endnote series letters: a-e > A-E.
+%
+% Rev 3.11 10 May 1994 15:19:54
+% o removed the optional braces from the second argument of \text
+% in the examples, and altered the documentation to match.
+%
+% Rev 3.10 10 May 1994 14:31:30
+% o changes to documentation;
+% o made \list@create same as \list@clear;
+% o added \f@encoding and \fontencoding;
+% o corrected \getref@num and \label@parse;
+% o brought the appendix examples more up to date and checked them;
+% o added more cross-references;
+% o added \selectfont to the end of NFSS-\select@@lemmafont.
+%
+% Rev 3.9 03 May 1994 11:42:36
+% o Full incorporation of edmacfss.doc. Appropriate changes in
+% documentation. New \morenoexpands macro. New \list@create
+% and \list@clear in anticipation of faster list handling.
+% Numerous running changes.
+%
+% Rev 3.8 14 Apr 1994 12:02:22
+% o revised the cross-referencing macros, which weren't working.
+%
+% Rev 3.7 31 Aug 1993 15:57:20
+% o Further changes in response to reviewer's observations. Correct
+% explanation of recursion problem with (some) aliases for \text.
+% Changed several more {\tt ...} strings to "..."; added some
+% \mbox{}s for italic in mathmode (wanted by NFSS2).
+%
+% Rev 3.6 27 Aug 1993 16:50:42
+% o made changes as recommended in the TUG publication reviewer's report.
+% Mostly changes to docs; added \edmac@warning.
+% o Added a paragraph to Known Bugs highlighting problem of line breaking
+% in paragraphed footnotes.
+%
+% Rev 3.5 23 Mar 1993 15:03:34
+% o added the corrections spotted by Gyula Mayer: some word duplications
+% and important changes to slhh.tex to make it compatible with the
+% current level of edmac.
+%
+% Rev 3.4 12 Mar 1993 13:47:32
+% o added appendix material: inclusion of EDMACFSS.DOC and
+% example page of Arabic from Klaus Lagally.
+% o cosmetic changes to some \index entries, and removal of
+% some unnecessary \Make/DeleteShortVerb statements.
+%
+% Rev 3.3 11 Mar 1993 12:56:34
+% o John's formatting revisions:
+% Fold long code lines so they don't overrun the measure.
+% Subsubsections changed to paragraphs.
+%
+% Rev 3.2 26 Feb 1993 17:55:12
+% o correction to def'n of \@adv: spotted by Klaus Lagally.
+%
+% Rev 3.1 25 Feb 1993 15:15:00
+% o small changes to documentation.
+%
+% Rev 3.1 25 Feb 1993 12:17:12
+% o small changes to documentation.
+%
+% Rev 3.0 25 Jun 1992 12:38:00
+% No change.
+%
+% Rev 2.25 25 Jun 1992 12:29:20
+% o cosmetic changes to examples and \ipn@skip use.
+%
+% Rev 2.24 22 Jun 1992 13:33:12
+% o cosmetic corrections.
+%
+% Rev 2.23 22 Jun 1992 11:22:52
+% o changed \interparanoteglue to calculate its value once and
+% stick it into a skip register, instead of evaluating afresh
+% in each footnote.
+%
+% Rev 2.22 19 Jun 1992 23:25:42
+% o added refreshed versions of arden.sty and features.tex; upgraded
+% the fonts section to a \subsection.
+%
+% Rev 2.21 19 Jun 1992 21:07:46
+% o numerous small changes by JL; \ifnumbering@ now becomes
+% \ifnumbering since users may want access to it.
+%
+% Rev 2.20 29 May 1992 13:04:26
+% o correction to ballast.
+% o brought "New to TeX?" section back into the document by default.
+%
+% Rev 2.19 26 May 1992 16:14:34
+% o tidied up the \rightskip and \leftskip code in the footstart
+% and vfootnote macros for the different kinds of notes, and
+% documented it (these skips are now zeroed in the vfootnote
+% code, not in footfmt); small corrections to docs.
+%
+% Rev 2.18 22 May 1992 17:35:02
+% o further revisions to the paragraph footnote code and documentation;
+% inserted the \ballast macros.
+%
+% Rev 2.17 18 May 1992 13:32:04
+% o more changes to the para-footnote code. Added @ to para@footgroup
+% and para@vfootnote, since I would not expect these to be easily
+% modified; managed to get para@footgroup back to pre-2.16 code,
+% i.e., as in TeXbook, with just an added \unpenalty; changed
+% \parafootfmt's parfillskip to put proper \interparanoteglue glue
+% between notes; used Michael Downes's \unvxh in para@vfootnote.
+%
+% Rev 2.16 08 May 1992 21:12:12
+% o applied several suggestions based on Wayne Sullivan's change
+% file of 27 April 1992. These included changing \normal@pars
+% to include resetting leftskip and rightskip to zero, and
+% setting \parfillskip to normal; changed \paravfootnote
+% to put the paragraphed footnotes into a \vbox rather
+% than an \hbox (reasons explained in the documentation);
+% changed \parafootgroup quite substantially in order to get
+% the para notes properly unboxed; cosmetic changes to
+% \@add and \everypar; added the macro \edfont@info to make
+% things simpler in edmacfss.doc;
+% o began to write in the \ballast macros.
+%
+% Rev 2.15 16 Apr 1992 17:16:52
+% o corrected minor spelling errors
+%
+% Rev 2.14 09 Dec 1991 16:56:46
+% o revision of \splitoff to get column vspacing right.
+% o more tidying of documentation and examples.
+%
+% Rev 2.13 05 Dec 1991 15:24:48
+% o changed \off@autopar to \normal@pars; changed \verb"xxx" to
+% just "xxx" globally, and put \MakeShortVerb{"} into the
+% driver file, edmacdoc.tex (this change requires the newdoc.sty
+% file, which supplements the doc.sty file); stripped out the
+% examples in the appendix, and put in new ones, tailored to fit
+% the changes in edmac.doc (removal of verbose definitions of
+% \eightpoint, etc.); changed \two- and \threecolfootgroup to
+% reduce the amount of boxing and reboxing of the footnote insertions
+% done in the output routine (not wholly sure about this); added
+% the periph4.tex file in the appendix (don't know how it got left
+% out in previous versions); small changes to columnar footnote
+% macros, and generally to the documentation.
+%
+% Rev 2.12 04 Dec 1991 17:13:22
+% o added Wayne Sullivan's new cross referencing macros.
+%
+% Rev 2.11 03 Dec 1991 10:17:48
+% o have added \eightpoint, and \notefontsetup; more work on
+% documentation of fonts, mentioned edmacfss.doc; put calls to
+% \notefontsetup into footnote macros, so default is now to
+% small notes; took out the separate \twocol@foottopskip etc.
+% macros, and put \notefontsetup in the right place to govern
+% \ht\footstrut.
+%
+% Rev 2.9 15 Nov 1991 17:46:06
+% o more macro name revisions; the bigee was \m@j -> \@l. All
+% list macros are now called ...@list. Modified \beginnumbering
+% to zero counters before reading the file, and took the zeroing
+% out of \readlinelist. Then added \pausenumbering and
+% \resumenumbering. More documentation. Added \endashchar,
+% \fullstop, \rbracket, and put \rbracket after the lemma in all
+% footnote commands (a better default, I think).
+%
+% Rev 2.8 12 Nov 1991 16:06:56
+% o major overhaul of macro names (w@rdw@rd -> word@word, etc.);
+% changed references to \count0 and \count255 (\count@) to
+% \@tempcntb and \@tempcnta; Changed the bitwise stuff in
+% \printlines to be done with new scratch counters.
+%
+% Rev 2.7 26 Aug 1991 18:06:10
+% o addition of line-number locking features.
+% o \global added to a few instances of \noteschanged@true.
+% o \@lnmoutstatus replaced by \first@lnmout@true and associated
+% macros.
+%
+% Rev 2.6 25 Jul 1991 11:27:52
+% o inserted new arden.sty and arden.tex (1 May 1991)
+% o altered the \rigidbalance definition to do away with spaces
+% in the arguments.
+% o added the \twocol@splittopskip and \threecol@splittopskip
+% dimensions to correct the vertical alignment in columnar
+% footnotes (reported by Paul Wackers).
+%
+% Rev 2.5 22 Apr 1991 9:11:40
+% o correction by W. Sullivan to addpenalties, avoiding use of \count0.
+%
+% Rev 2.4 08 Feb 1991 16:43:16
+% o added a fix to \addpenalti@s provided by Wayne Sullivan
+%
+% Rev 2.3 10 Jan 1991 20:47:34
+% o reduced the spacing around itemized lists.
+%
+% Rev 2.2 11 Dec 1990 23:02:16
+% o added the "general features" and "Periphyseon" examples.
+%
+% Rev 2.1 16 Oct 1990 15:35:42
+% o JL minor revisions to documentation, and editing of
+% the example files iocasta, gg, and arden.
+%
+% Rev 2.0 03 Oct 1990 14:19:38
+% No change.
+%
+% Rev 1.26 03 Oct 1990 12:49:20
+% o Did away with \inputverbatim, and wrote the example files
+% into edmac.doc itself. Added small amount of text to the Appendix.
+%
+% Rev 1.24 25 Sep 1990 15:45:06
+% o made a new \parafootstart, moving the \rightskip etc. from
+% \parafootfmt.
+%
+% Rev 1.23 25 Sep 1990 12:39:32
+% o Merged DW and JL changes; moved examples to \appendix; other
+% small changes to documentation.
+%
+% Rev 1.21 19 Sep 1990 22:23:02
+% o DW changes to documentation; changed "n@" to "@num" when it
+% meant "number"; likewise rationalized and slightly shortened
+% other macros; added parallel examples and picture of page.
+%
+% Rev 1.20 14 Sep 1990 12:39:58
+% o JL near final revision of documentation.
+%
+% Rev 1.18 22 Aug 1990 15:52:48
+% o revised crop mark code; small changes to documentation.
+%
+% Rev 1.18 20 Aug 1990 16:39:38
+% o Revised crop mark code
+%
+% Rev 1.17 20 Aug 1990 13:06:06
+% o Extensive changes in documentation.
+% o solved the \clubpenalty and \widowpenalty glitch
+%
+% Rev 1.16 13 Aug 1990
+% o \ignorespaces in \text and associated macros, to skip over any
+% stray spaces within #2.
+% o Crop marks, \autopar.
+% o More sensible error messages.
+%
+% Rev 1.15 03 Aug 1990 14:41:06
+% o Added two- and three- column footnotes.
+% o Corrected minor bugs in \parafootsetup and \parafootfmt.
+%
+% Rev 1.14 01 Aug 1990 17:58:08
+% o Added \label, \pageref, \lineref and \sublineref cross-referencing
+% commands and documentation. Small changes to documentation.
+%
+% Rev 1.13 27 Jul 1990 10:46:30
+% o Major revision by JL. (for earlier history log, see rev. 1.12)
+%
+% \fi
+%
+% \maketitle
+%
+% \iffalse % We're dropping the abstract for the book version.
+% \begin{abstract}
+% {\tt EDMAC} is a set of \PlainTeX\ macros providing the
+% ability to format critical editions of texts in the traditional
+% way, i.e., similar to the Oxford Classical Texts, Teubner, Arden
+% Shakespeare and other series. The principal functions that are
+% added are marginal line numbering and multiple series of
+% footnotes and endnotes keyed to line numbers. While {\tt EDMAC}'s
+% inner workings are necessarily esoteric, it seeks to provide
+% relatively simple macros to enable you to control the exact
+% format of the edition, taking into account the need to vary the
+% format for different sorts of texts.
+% \end{abstract}
+% \fi
+%
+% ^^A \addtocontents{toc}{\protect\begin{multicols}{2}}
+%
+% {\parskip 0pt ^^A We have to reset \parskip
+% ^^A (bug in \LaTeX)
+% \tableofcontents
+% }
+%
+%
+% \section{Introduction}
+% \subsection{Overview}
+%
+% The "EDMAC" macros, together with \TeX, provide several
+% important facilities for formatting critical editions of texts in
+% a traditional manner. Major features include:
+% \begin{itemize}\addtolength{\itemsep}{-1ex}
+% \item automatic stepped line numbering, by page or by chapter;
+% \item sub-lineation within the main series of line numbers;
+% \item variant readings automatically keyed to line numbers;
+% \item multiple series of footnotes and endnotes;
+% \item block or columnar formatting of footnotes.
+% \end{itemize}
+%
+% "EDMAC" allows the scholar engaged in preparing a critical
+% edition to focus attention wholly on the task of creating the
+% critical text and evaluating the variant readings, text-critical
+% notes and testimonia. \TeX{} and "EDMAC" will take care of
+% the formatting and visual correlation of all the disparate types
+% of information.
+%
+% "EDMAC" works together with the \PlainTeX{} format, and with
+% the exception of footnote-related commands, virtually all plain
+% \TeX{} commands are available for use in the normal way. Other
+% languages and fonts (Sanskrit, Greek, Russian,
+% etc.),\footnote{See, e.g., {\em TUGboat\/} {\bf 9} (1988),
+% pp.\,131--151.} can be incorporated.
+%
+% While "EDMAC" can be used ``out of the box'', with little or
+% no customization, you may also go to the other extreme and view
+% it as a collection of tools. Critical editions are amongst the
+% most idiosyncratic of books (like their authors), so we have made
+% "EDMAC" deliberately bland in some ways, while also trying to
+% document it reasonably well so that you can find out how to make
+% it do what you want.
+%
+% This documentation assumes the ``manual'' use of "EDMAC". But
+% "EDMAC" has also successfully been used (with \TeX, of
+% course) as the formatting engine or ``back end'' for the output
+% of an automatic manuscript collation program. "COLLATE" runs
+% on the Apple Macintosh, can collate simultaneously up to a
+% hundred manuscripts of any length, and provides facilities for
+% the scholar to tailor the collation
+% interactively.\footnote{"COLLATE" was created by Peter
+% Robinson\protect\index{Robinson, Peter} at The Computers and
+% Variant Texts Project, Oxford University Computing Service, 13 Banbury
+% Road, Oxford OX2 6NN, England. Email: "peterr@vax.oxford.ac.uk".
+% See "<URL http://www.shef.ac.uk/uni/projects/ctp/Main/collate.html>".}
+%
+% Another package which mediates between you as editor and the raw "EDMAC"
+% codes is Bernt Karasch's ``Critical Edition Typesetter'' (CET).
+% CET\label{CET}\index{Karasch, Bernt}
+% provides a menu-driven front end for "EDMAC" and the other programs
+% connected with \TeX. CET does not do any collation: you still have to
+% type the edition and the apparatus yourself.\footnote{For more details,
+% see "<URL http://s.top.ruhr-uni-bochum.de/cet.htm>".}
+%
+% This book contains a general description of how to use "EDMAC"
+% (in section~\ref{howto}); the complete source code for the package,
+% with extensive documentation (in sections~\ref{overview}
+% through \ref{end}); a series of examples (in
+% Appendix~\ref{examples}); and an Index to the
+% source code (in Appendix~B). We do not suggest that you need to
+% read the source code for this package in order to use it; we
+% provide this code primarily for reference, and many of our
+% comments on it repeat material that is also found in
+% section~\ref{howto}. But no documentation, however
+% thorough, can cover every question that comes up, and many can be
+% answered quickly by consultation of the code. On a first reading,
+% then, you should skip from the general documentation of
+% section~\ref{howto} to the examples in Appendix~\ref{examples},
+% unless you are particularly interested in the innards of "EDMAC".
+%
+% \subsubsection{Availability}
+%
+% The "EDMAC" macros are available from CTAN, the Comprehensive \TeX\
+% Archive Network.\footnote{See "<URL http://jasper.ora.com/ctan.html/>".}
+% And "EDMAC" has it's own home page on the world wide web: see
+% "<URL http://www.ucl.ac.uk/~ucgadkw/edmac.html>".
+%
+% \subsection{History}
+%
+% The original version of "EDMAC" was "TEXTED.TEX", written
+% by John Lavagnino in late 1987 and early 1988 for formatting
+% critical editions of English plays.
+%
+% John passed these macros on to Dominik Wujastyk who, in
+% September--October 1988, added the footnote paragraphing mechanism,
+% margin swapping and other changes to suit his own purposes, making the
+% style more like that traditionally used for classical texts in Latin and
+% Greek (e.g., the Oxford Classical Texts series). He also wrote some
+% extra documentation and sent the files out to several people. This
+% version of the macros was the first to be called "EDMAC".
+%
+% The present version was developed in the summer of 1990, with the
+% intent of adding necessary features, streamlining and documenting
+% the code, and further generalizing it to make it easily adaptable
+% to the needs of editors in different disciplines. John did most
+% of the general reworking and documentation, with the financial
+% assistance of the Division of the Humanities and Social Sciences,
+% California Institute of Technology. Dominik adapted the code to
+% the conventions of Frank Mittelbach's\index{Mittelbach, Frank}
+% "doc" option, and added some documentation, multiple-column
+% footnotes, cross-references, and crop marks.\footnote{This version of
+% the macros was used to format the Sanskrit text in volume I of {\em
+% Metarules of P\=a\d ninian Grammar\/} by Dominik Wujastyk (Groningen:
+% Forsten, 1993).} A description by John and Dominik of this version of
+% "EDMAC" was published as ``An overview of "EDMAC": a \PlainTeX\
+% format for critical editions'', {\em TUGboat\/} {\bf 11} (1990),
+% pp.\,623--643.
+%
+% From 1991 through 1994, the macros continued
+% to evolve, and were tested at a
+% number of sites. We are very grateful to all the members of the
+% (now defunct)
+% "edmac@mailbase.ac.uk" discussion group who helped us with
+% smoothing out bugs and infelicities in the macros.
+% Ron Whitney\index{Whitney, Ron} and our anonymous reviewer at
+% the TUG were both of great help in ironing out last-minute
+% wrinkles, while Ron made some important suggestions which may help
+% to make future versions of "EDMAC" even more efficient.
+% Wayne
+% Sullivan,\index{Sullivan, Wayne} in particular, provided several
+% important fixes and contributions, including adapting the
+% Mittelbach\slash
+% Sch\"opf\index{Sch\"opf, Rainer}\index{Mittelbach, Frank} ``New
+% Font Selection Scheme'' for use with \PlainTeX\ and "EDMAC" (see
+% p.\,\pageref{edmacnfss} below). Another project Wayne has worked
+% on is a "DVI" post-processor which works with an "EDMAC"
+% that has been slightly modified to output "\special"s. This
+% combination enables you to recover to some extent the text of
+% each line, as {\sc ascii} code, facilitating the creation of
+% concordances, an {\em index verborum}, etc.
+%
+% At the time of writing, we are pleased to be able to say that "EDMAC"
+% is used for real-life book production. Several interesting
+% editions have appeared in print or are underway, such as
+% the Latin texts of Euclid's {\sl
+% Elements},\footnote{Gerhard Brey\index{Brey, Gerhard} used "EDMAC" in
+% the production of Hubert L. L. Busard\index{Busard, Hubert L. L.} and
+% Menso Folkerts,\index{Folkerts, Menso} {\em Robert of Chester's
+% (?)\index{Chester, Robert of} Redaction of Euclid's\index{Euclid} {\em
+% Elements}, the so-called Adelard II\index{Adelard II} Version}, 2 vols.,
+% (Basel, Boston, Berlin: Birkh\"auser, 1992).} an edition of the letters
+% of Nicolaus Copernicus,\footnote{Being prepared at the German Copernicus
+% Research Institute, Munich, under the general editorship of Heribert
+% M. Nobis\index{Nobis, Heribert M.} and Menso Folkerts\index{Folkerts,
+% Menso}; volume 1 has appeared as {\em Documenta Copernicana: Briefe
+% (Texte und \"{U}bersetzungen)}, edited by Andreas
+% K\"{u}hne\index{Kuehne, Andreas}, et al. (Berlin: Akademie Verlag,
+% 1994).}\index{Copernicus, Nicolaus} Simon
+% Bredon's\index{Bredon, Simon} {\em Arithmetica},\footnote{Being prepared
+% by Menso Folkerts {\em et al.}, at the Institut f\"ur Geschichte der
+% Naturwissenschaften in Munich.} a Latin translation by Plato of
+% Tivoli\index{Plato of Tivoli} of an Arabic astrolabe
+% text,\footnote{Richard Lorch,\index{Lorch, Richard} Gerhard
+% Brey\index{Brey, Gerhard}, Stefan Kirschner\index{Kirschner, Stefan},
+% and Christoph Sch\"{o}ner\index{Schoener, Christoph},
+% `Ibn-a\d{s}-\d{S}aff\={a}rs Traktat \"{u}ber das Astrolab in der
+% \"{U}bersetzung von Plato von Tivoli,' in {\em Cosmographica et
+% Geographica}, ed.\ Bernhard Fritscher\index{Fritscher, Bernhard} and
+% Gerhard Brey\index{Brey, Gerhard}, (M\"{u}nchen: Instit\"{u}t f\"ur
+% Geschichte der Naturwissenschaften, 1994), vol.\,1, pp.\,125--180.} a
+% Latin
+% translation of part II of the Arabic {\em Algebra\/} by Ab\=u K\=amil
+% Shuj\=a' b. Aslam,\index{Abu Kamil Shuja' b. Aslam}\footnote{Richard
+% Lorch, `Ab\=u K\=amil on the Pentagon and Decagon' in {\em Vestigia
+% Mathematica}, ed.\ M. Folkerts\index{Folkerts, Menso} and J. P.
+% Hogendijk\index{Hogendijk, J. P.} (Amsterdam, Atlanta:
+% Rodopi, 1993).} the Latin {\em Rithmachia\/} of Werinher von
+% Tegernsee,\footnote{Menso Folkerts, `Die {\em Rithmachia\/} des Werinher
+% von Tegernsee', ibid.} a middle-Dutch romance epic on the
+% Crusades,\footnote{Geert H. M. Claassens,\index{Claassens, Geert H. M.}
+% {\em De Middelnederlandse Kruisvaartromans}, (Amsterdam: Schiphower en
+% Brinkman, 1993).}
+% Johann Widmann's German arithmetic of 1489,\footnote{{\em Behend vnd
+% h\"upsch Rechnung vff allen Kauffmanschafften}, being prepared at the
+% University of Heidelberg by Barbara G\"artner\index{Gaertner, Barbara}.}
+% a seventeenth-century Hungarian politico-philosophical
+% tract,\footnote{Emil Hargittay, {\em Cs\'aky Istv\'an: Politica
+% philosophiai Okoskod\'as-szerint val\'o rendes \'eletnek p\'eld\'aja
+% (1664--1674)\/} (Budapest: Argumentum Kiad\'o, 1992).} an anonymous
+% Latin compilation of Christian sermons from Hungary\footnote{{\em
+% Sermones Compilati in Studio Gererali Quinqeecclesiensi in Regno
+% Ungarie}, ed.\ Eduardo Petrovich\index{Petrovich, Eduardo} and Paulus
+% Ladislaus Timkovics\index{Timkovics, Paulus Ladislaus} (Budapest:
+% Akad\'emiai Kiad\'o, 1993), typeset, as was the previous book, by Gyula
+% Mayer\index{Mayer, Gyula}.} the collected letters and papers of
+% Leibniz,\index{Leibniz}\footnote{Leibniz, {\em S\"amtliche Schriften und
+% Briefe}, series {\sc I, III, VII,} being edited by Dr.\ H.
+% Breger\index{Breger, Herbert} and Dr. N. G\"adeke\index{G\"adeke, Nora}
+% at the Leibniz-Archiv, Nieders\"achsische Landesbibliothek, Hannover.}
+% Theodosius's\index{Theodosius} {\em Spherics}, the German {\em
+% Algorismus} of Sacrobosco,\index{Sacrobosco} the Sanskrit text of the
+% {\em Skandapur\=a\d{na}},\footnote{Being prepared at the University of
+% Groningen by Hans Bakker,\index{Bakker, Hans} Roelf
+% Adriaensen,\index{Adriaensen, Roelf} and
+% Harunaga Isaacson.\index{Isaacson, Harunaga}} and the English texts of
+% Thomas Middleton's\index{Middleton, Thomas} collected
+% works\footnote{{\em The Collected Works of Thomas Middleton}, Gary
+% Taylor, general editor, and John Lavagnino, electronics editor (Oxford:
+% Oxford University Press, forthcoming).}, as well as the editions by
+% Wayne Sullivan\index{Sullivan, Wayne}, Mac Pigman\index{Pigman,
+% III$^{rd}$, G. W.}, and Dominik Wujastyk\index{Wujastyk, Dominik} which
+% are illustrated in Appendix~\ref{examples}.
+%
+% \subsection{New to \TeX?}
+%
+% If you are coming to "EDMAC" primarily as the editor of a
+% text, but have not thought about using \TeX\ before, you should
+% find someone to help you get started with the program. It is not
+% really hard, but there are some points where a bit of good advice
+% might save you some time. \TeX{} is available in versions that
+% run on most computers, and many implementations of \TeX\ are
+% available free, or at a very low cost. The output of \TeX\ can
+% be printed without change on most printers and phototypesetting
+% machines. \TeX\ produces very high quality typesetting, and is
+% particularly strong in the areas of typesetting complex
+% mathematical formulae and multilingual texts.
+%
+% The \TeX{} Users Group (TUG) can advise you on all matters
+% related to \TeX. If you are not already a member of the group, it
+% is well worth joining. One of the most useful things TUG will do
+% for you initially is give you a membership list, so you can find
+% out who your local \TeX\ guru is. The address is:
+% \begin{quote}
+% \TeX{} Users Group,\\* 1850 Union Street, Suite 1637,\\*
+% San Francisco, CA 94123\\* USA.\\* Email: "tug@tug.org"\\*
+% Home page: "<URL http://www.tug.org/>".
+% \end{quote}
+%
+% This document does not include a \TeX{} tutorial.
+% Recent years have seen the publication of numerous excellent books on
+% how to learn and use \TeX, and the main implementations of \TeX, such as
+% em\TeX\ by Eberhard Mattes\index{Mattes, Eberhard}, come with first
+% class documentation. In brief, when
+% you use "EDMAC" the main text to be edited is typed into a
+% computer file as a plain text, with blank lines marking paragraph
+% breaks, and with all formatting, accented characters, and other
+% special requirements indicated by \TeX{} macros. {\em The \TeX
+% book\/}\footnote{Reading, MA: Addison-Wesley, 1984.} by
+% Donald E.~Knuth gives guidelines on various formatting commands
+% for headings, page size, etc., and is a necessary
+% reference for users of "EDMAC".
+%
+%
+% \section{How to use {\tt EDMAC}}\label{howto}
+% \subsection{Introduction}
+%
+% A document that uses "EDMAC" will use many standard \TeX{}
+% commands, along with special "EDMAC" commands. This chapter
+% describes the usage of all the "EDMAC" commands; the name of
+% each will be printed in the margin as it is introduced. We assume
+% a basic familiarity with \TeX{} conventions; if you are not
+% conversant with \TeX{}, you should be able to form an idea of
+% the specific capabilities of "EDMAC" from this account, but
+% (we repeat) you will not be able to use "EDMAC" without first
+% learning some \TeX{}.
+%
+% All you need to do to invoke "EDMAC" is to include the line
+% "\input EDMAC.DOC" at the top of your document, and to have the
+% file "EDMAC.DOC" somewhere on your disk that is ``visible''
+% to \TeX{} for input. It takes only a few
+% seconds for \TeX\ to read "EDMAC.DOC", but if you
+% are going to use it frequently, as will certainly be the case if
+% you are doing a real edition, you will find it convenient to
+% compile it into a \TeX\ format file, loading it after
+% "PLAIN.TEX" and any other private macros.
+%
+% "EDMAC" {\em is a three-pass system}, like
+% \LaTeX.\footnote{Oh yes it is, if you have a table of contents,
+% lists of figures, etc.} Although your textual apparatus and line
+% numbers will be printed even on the first run, it takes two more
+% passes through \TeX\ to be sure that everything gets to its right
+% place. Any changes you make to the input file may similarly
+% require three passes to get everything to the right place, if the
+% changes alter the number of lines or notes. "EDMAC" will tell
+% you that you need to make more runs, when it notices, but it does
+% not expend the labor to check this thoroughly. If you have
+% problems with a line or two misnumbered at the top of a page, try
+% running \TeX{} once or twice more.
+%
+% A file may mix {\em numbered\/} and {\em unnumbered\/} text.
+% Numbered text is printed with marginal line numbers and can include
+% footnotes and endnotes that are referenced to those line numbers:
+% this is how you'll want to print the text that you're editing.
+% Unnumbered text is not printed with line numbers, and you can't
+% use "EDMAC"'s note commands with it: this is appropriate for
+% introductions and other material added by the editor around the
+% edited text.
+%
+% \paragraph{The choice of editing program}
+% The careful choice of a good text editing program can make the
+% preparation of texts for "EDMAC" much easier. In common with
+% most \TeX\ documents, a file formatted with "EDMAC" macros
+% will have many sets of braces, often nested, and often enclosing
+% material that will end up at the bottom of the page as notes.
+% Some word processors or editors have the ability to ``fold'' text
+% out of sight. This means that on the computer screen a particular
+% string or passage can be hidden, perhaps behind a symbol. Most
+% modern word-processors handle footnotes in this way. When you want
+% to type a note, a window opens up; you type the note, and the
+% window closes, leaving a highlighted number to remind you that
+% a note is there. There are several folding editors available
+% commercially and in the public domain, which would allow you to
+% see only the main text of your work on the computer screen, while
+% the notes and variants, etc., would be hidden from view.\footnote{One
+% cross-platform public domain folding editor is ``Andys Editor'' which is
+% available from the well-known Hobbes Internet site,
+% "<URL http://hobbes.nmsu.edu/os2/editors/>" as the file "ae.zip".}
+% GNU "Emacs" has an "outline" mode which could probably be
+% modified to work like this. (It is important, of course, that
+% the editor doesn't pepper your text with unwanted control codes,
+% or that if it does, they can easily be removed.)
+%
+% Another helpful feature to look for in your editing program is
+% syntax-highlighting. This means that the editor displays \TeX\ codes in
+% a different colour from the textual matter. This is enormously helpful
+% in keeping clear what is what: you eye easily sees opening and closing
+% braces, text and note commands, etc. One editor which combines this and
+% other valuable features, as well as being available for most operating
+% systems, is "JED", by John E. Davis.\footnote{JED's home page on the
+% web is "<URL http://space.mit.edu/~davis/jed.html>".}
+% The CET system mentioned above (p.\,\pageref{CET} uses a simplified set
+% of tags for marking up the text, and includes a pre-processor which
+% turns these into actual "EDMAC" markup.
+%
+% An editor or system like this can be extremely helpful in keeping your
+% text in good order, and allowing you to concentrate on the edition.
+%
+% \subsection{General markup}
+%
+% \DescribeMacro{\beginnumbering}
+% \DescribeMacro{\endnumbering}
+% Each section of numbered text must be preceded by
+% "\beginnumbering" and followed by "\endnumbering":
+% \begin{samepage}
+% \smallskip
+%
+% "\beginnumbering"
+%
+% $\langle${\em text\/}$\rangle$
+%
+% "\endnumbering"
+% \end{samepage}
+%
+% The "\beginnumbering" macro resets the line number to zero,
+% reads an auxiliary file called \meta{filename}"."\meta{nn} (where
+% {\it filename\/} is the name of the main input file for this job,
+% and {\it nn\/} is "1" for the first numbered section, "2" for
+% the second section, and so on), and then creates a new version of
+% this auxiliary file to collect information during this run. The
+% first instance of "\beginnumbering" also opens a file called
+% \meta{filename}".end" to receive the text of the endnotes.
+% "\endnumbering" closes the \meta{filename}"."\meta{nn} file.
+%
+% If the line numbering of a text is to be continuous from start to end,
+% then the whole text will be typed between one pair of
+% "\beginnumbering" and "\endnumbering" commands. But your text
+% will most often contain chapter or other divisions marking sections
+% that should be independently numbered, and these will be appropriate
+% places to begin new numbered sections. "EDMAC" has to read and store
+% in memory
+% a certain amount of information about the entire section when it
+% encounters a "\beginnumbering" command, so it speeds up the
+% processing and reduces memory use when a text is divided into a larger
+% number of sections (at the expense of multiplying the number of
+% external files that are generated).
+%
+% \DescribeMacro{\pstart}
+% \DescribeMacro{\pend}
+% Within a numbered section, each paragraph of numbered text must
+% be marked using the "\pstart" and "\pend" commands:
+% \begin{samepage}
+% \smallskip
+%
+% "\pstart"
+%
+% $\langle${\em paragraph of text\/}$\rangle$
+%
+% "\pend"
+%
+% \end{samepage}
+%
+% Text that appears within a numbered section but isn't marked with
+% "\pstart" and "\pend" will not be numbered.
+%
+% The following example shows the proper section and paragraph
+% markup, and the kind of output that would typically be generated:
+% \egstart
+% \begin{verbatim}
+% \beginnumbering
+% \pstart
+% This is a sample paragraph, with
+% lines numbered automatically.
+% \pend
+%
+% \pstart
+% This paragraph too has its
+% lines automatically numbered.
+% \pend
+%
+% The lines of this paragraph are
+% not numbered.
+%
+% \pstart
+% And here the numbering begins
+% again.
+% \pend
+% \endnumbering
+% \end{verbatim}
+% \egmid
+% {\parskip0pt \count255=0
+% \everypar={\advance \count255 by 1 \hbox to 1.5em{\the\count255\hfil}}
+% This is a sample paragraph\par
+% with lines numbered\par
+% automatically.\smallskip
+%
+% This paragraph too\par
+% has its lines automatically\par
+% numbered.\smallskip
+%
+% \everypar={\hbox to 1.5em{\hfil}}
+% The lines of this paragraph\par
+% are not numbered.\smallskip
+%
+% \everypar={\advance \count255 by 1 \hbox to 1.5em{\the\count255\hfil}}
+% And here the numbering\par
+% begins again.\par}
+% \egend
+%
+% \DescribeMacro{\autopar}
+% You can use "\autopar" to avoid the nuisance of this paragraph markup
+% and still have every paragraph automatically numbered. The scope of the
+% "\autopar" command needs to be limited by keeping it within a group, as
+% follows:
+% \egstart
+% \begin{verbatim}
+% \begingroup
+% \beginnumbering
+% \autopar
+%
+% A paragraph of numbered text.
+%
+% Another paragraph of numbered
+% text.
+%
+% \endnumbering
+% \endgroup
+% \end{verbatim}
+% \egmid
+% {\parskip0pt \count255=0
+% \everypar={\advance \count255 by 1 \hbox to 1.5em{\the\count255\hfil}}
+% A paragraph of numbered\par
+% text.\smallskip
+%
+% Another paragraph of\par
+% numbered text.\par}
+% \egend
+% "\autopar" fails, however, on paragraphs that start with a
+% "{" or with any other command that starts a new group before it
+% generates any text. Such paragraphs need to be started explicitly,
+% before the new group is opened,
+% using "\indent", "\noindent", or "\leavevmode", or using
+% "\pstart" itself.\footnote{For a detailed study of the
+% reasons for this restriction, see Barbara Beeton, ``Initiation
+% rites'', {\em TUGboat\/} {\bf 12} (1991),
+% pp.\,257--258.\protect\index{Beeton, Barbara Ann Neuhaus Friend}}
+%
+% \DescribeMacro{\pausenumbering}
+% \DescribeMacro{\resumenumbering}
+% \label{pause}\relax
+% "EDMAC" stores a lot of information about line numbers and
+% footnotes in memory as it goes through a numbered section. But
+% at the end of such a section, it empties its memory out, so to
+% speak. If your text has a very long numbered section it is
+% possible that your \TeX\ may reach its memory limit. There are
+% two solutions to this. The first is to get a new \TeX\ with
+% increased memory. There are several Big\TeX\ implementations
+% easily available today, both commercial and public-domain,
+% depending on your operating system. The second solution is to
+% split your long section into several smaller ones. The trouble
+% with this is that your line numbering will start again at zero
+% with each new section. To avoid this problem, we provide
+% "\pausenumbering" and "\resumenumbering" which are just
+% like "\endnumbering" and "\beginnumbering", except that
+% they arrange for your line numbering to continue across the break.
+% Use "\pausenumbering" only between numbered paragraphs:
+% \egstart
+% \begin{verbatim}
+% \beginnumbering
+% \pstart
+% Paragraph of text.
+% \pend
+% \pausenumbering
+%
+% \resumenumbering
+% \pstart
+% Another paragraph.
+% \pend
+% \endnumbering
+% \bye
+% \end{verbatim}
+% \egmid
+% {\parskip0pt \count255=0
+% \everypar={\advance \count255 by 1 \hbox to 1.5em{\the\count255\hfil}}
+% Paragraph of\par
+% text.\medskip
+%
+% Another paragraph.\par}
+%
+% \egend
+%
+% We have
+% defined these commands as two macros, in case you find it necessary
+% to insert text between numbered sections without disturbing the
+% line numbering. But if you are really just using these macros to
+% save memory, you might as well say
+% \begin{verbatim}
+% \def\memorybreak{\pausenumbering\resumenumbering}
+% \end{verbatim}
+% and say "\memorybreak" between the relevant "\pend" and
+% "\pstart".
+%
+%
+%
+% \subsection{The apparatus}
+%
+% \DescribeMacro{\text}
+% Within numbered paragraphs, all footnotes and endnotes are generated
+% by forms of the "\text" macro:
+% \begin{verse}
+% "\text{"\meta{lemma}"}"\meta{commands}"/"
+% \end{verse}
+%
+% The \meta{lemma} argument is the lemma in the main text: "\text"
+% both prints this as part of the text, and makes it available to the
+% \meta{commands} you specify to generate notes. The "/" at the
+% end terminates the command; it is part of the macro's definition so
+% that spaces after the macro will be treated as significant.
+%
+% For example:
+% \egstart
+% \begin{verbatim}
+% I saw my friend \text{Smith}
+% \Afootnote{Jones C, D.}/
+% on Tuesday.
+% \end{verbatim}
+% \egmid
+% 1\enspace I saw my friend\\
+% 2\enspace Smith on Tuesday.\smallskip
+% \hrule width 1.5cm
+% \strut {\bf 2} Smith] Jones C, D.
+% \egend
+%
+% The lemma "Smith" is printed as part of this sentence in
+% the text, and is also made available to the footnote
+% that specifies a variant, "Jones C, D". The footnote macro
+% is supplied with the line number at which the lemma appears
+% in the main text.
+%
+% The \meta{lemma} may contain further "\text" commands; this is the
+% other reason why "\text"'s arguments are terminated by "/". Nesting makes
+% it possible to print an explanatory note on a long passage together with
+% notes on variants for individual words within the passage. For
+% example:
+% \egstart
+% \begin{verbatim}
+% \text{I saw my friend
+% \text{Smith}\Afootnote{Jones
+% C, D.}/ on Tuesday.}
+% \Bfootnote{The date was
+% July 16, 1954.}
+% /
+% \end{verbatim}
+% \egmid
+% 1\enspace I saw my friend\\
+% 2\enspace Smith on Tuesday.\smallskip
+% \hrule width 1.5cm
+% \strut {\bf 2} Smith] Jones C, D.\smallskip
+% \hrule width 1.5cm
+% \strut {\bf 1--2} I saw my friend \\
+% Smith on Tuesday.] The\\ date was
+% July 16, 1954.
+% \egend
+%
+% However, "\text" cannot handle overlapping but unnested
+% notes---for example, one note covering lines 10--15, and another
+% covering 12--18; a "\text" that starts in the \meta{lemma}
+% argument of another "\text" must end there, too. (The
+% "\lemma" and "\linenum" commands may be used to
+% generate overlapping notes if necessary.)
+%
+% \paragraph{Commands used in {\tt\protect\bslash text}'s second argument}
+%
+% The second argument of the "\text" macro, \meta{commands},
+% may contain a series of subsidiary commands that generate
+% various kinds of notes.
+%
+% \DescribeMacro{\Afootnote}
+% \DescribeMacro{\Bfootnote}
+% \DescribeMacro{\Cfootnote}
+% \DescribeMacro{\Dfootnote}
+% \DescribeMacro{\Efootnote}
+% Five separate series of footnotes are maintained; when all five
+% are used, the "A" notes appear in a layer just below the main
+% text, followed by the rest in turn, down to the "E" notes at
+% the bottom. These are the main macros that you will use to construct
+% the critical apparatus of your text. "EDMAC" provides five
+% layers of notes in the belief that this will be adequate for
+% the most demanding editions. But it is not hard to add further
+% layers of notes to "EDMAC" should they be required.
+%
+% \DescribeMacro{\Aendnote}
+% \DescribeMacro{\Bendnote}
+% \DescribeMacro{\Cendnote}
+% \DescribeMacro{\Dendnote}
+% \DescribeMacro{\Eendnote}
+% "EDMAC" also maintains five separate series of endnotes.
+% Normally, none of them is printed: you must use the
+% "\doendnotes" macro described below
+% (p.\,\pageref{doendnotes}) to call for their
+% output at the appropriate point in your document.
+%
+% \DescribeMacro{\lemma}
+% Sometimes you want to change the lemma that gets passed to the notes.
+% You can do this by using "\lemma" within the second argument to
+% "\text", before the note commands.
+% \begin{verse}
+% "\lemma{"\meta{alternative lemma}"}"
+% \end{verse}
+% The most common use of this command is to abbreviate the lemma that's
+% printed in the notes. For example:
+% \egstart
+% \begin{verbatim}
+% \text{I saw my friend
+% \text{Smith}\Afootnote{Jones
+% C, D.}/ on Tuesday.}
+% \lemma{I \dots\ Tuesday.}
+% \Bfootnote{The date was
+% July 16, 1954.}
+% /
+% \end{verbatim}
+% \egmid
+% 1\enspace I saw my friend\\
+% 2\enspace Smith on Tuesday.\smallskip
+% \hrule width 1.5cm
+% \strut {\bf 2} Smith] Jones C, D.\smallskip
+% \hrule width 1.5cm
+% \strut {\bf 1--2} I \dots\ Tuesday.] \\
+% The date was July 16, 1954.
+% \egend
+%
+% \DescribeMacro{\linenum}
+% \label{linenum}\relax
+% You can use "\linenum" to change the line numbers passed to
+% the notes. The notes are actually given seven parameters: the page,
+% line, and sub-line number for the start of the lemma; the same
+% three numbers for the end of the lemma; and the font specifier
+% for the lemma. As argument to "\linenum", you specify
+% those seven parameters in that order, separated by vertical bars
+% (the "|" character). However, you can retain the value
+% computed by "EDMAC" for any number by simply omitting it; and
+% you can omit a sequence of vertical bars at the end of the
+% argument. For example, "\linenum{|||23}" changes one number,
+% the ending page number of the current lemma.
+%
+% This command doesn't change the marginal line numbers in any way;
+% it just changes the numbers passed to the footnotes. Its use comes in
+% situations that "\text" has trouble dealing with for
+% whatever reason. If you need notes for overlapping passages that
+% aren't nested, for instance, you can use "\lemma" and
+% "\linenum" to generate such notes despite the limitations of
+% "\text". If the \meta{lemma} argument to "\text" is
+% extremely long, you may run out of memory; here again you can
+% specify a note with an abbreviated lemma using "\lemma" and
+% "\linenum". The numbers used in "\linenum" need not be
+% entered manually; you can use the ``"x-"'' symbolic cross-referencing
+% commands below (p.\,\pageref{crossref}) to compute them
+% automatically.
+%
+% Similarly, being able to manually change the lemma's font specifier
+% in the notes might be important if you were using multiple scripts or
+% languages. The form of the font specifier depends on the font
+% selection scheme you are using (see section~\ref{fonts} below).
+% If you're using Plain, it is the
+% ``font family'' number; if you're using NFSS, it is actually three
+% separate codes separated by "/" characters, giving the family,
+% series, and shape codes as defined within NFSS.
+%
+% \paragraph{Changing the names of these commands}
+%
+% The commands for generating the apparatus have been given
+% rather bland names, because editors in different fields have
+% widely divergent notions of what sort of notes are required, where
+% they should be printed, and what they should be called. But this
+% doesn't mean you have to type "\Afootnote" when you'd rather
+% say something you find more meaningful, like "\variant". We
+% recommend that you create a series of such aliases and use them
+% instead of the names chosen here; all you have to do is put commands
+% of this form at the start of your file:
+% \begin{verbatim}
+% \let\variant=\Afootnote
+% \let\explanatory=\Bfootnote
+% \let\trivial=\Aendnote
+% \let\testimonia=\Cfootnote
+% \end{verbatim}
+%
+% It is also possible to define aliases for "\text", which
+% can be easier to type. You can make a single character substitute
+% for "\text" by saying this:
+% \begin{verbatim}
+% \catcode`\<=\active
+% \let<=\text
+% \end{verbatim}
+%
+% Then you might say "<{Smith}\variant{Jones}/". This of course
+% destroys the ability to use "<" in any new macro definitions, so
+% long as it remains in effect; hence it should be used with care.
+%
+% Changing the character at the end of the command requires more work:
+% \begin{verbatim}
+% \catcode`\<=\active
+% \def\xtext#1#2>{\text{#1}{#2}/}
+% \let<=\xtext
+% \end{verbatim}
+% This allows you to say "<{Smith}\Afootnote{Jones}>".
+%
+% Aliases for "\text"
+% of the first kind shown here also can't be nested---that is,
+% you can't use the alias in the text that forms the first argument
+% to "\text". (See section~\ref{text} to find out why.) Aliases of
+% the second kind may be nested without any problem.
+%
+% \subsection{Lineation commands}
+%
+% \DescribeMacro{\lineation}
+% "EDMAC" can number lines either by page or by section; you specify
+% this using the "\lineation{"\meta{arg}"}"
+% macro, where \meta{arg} is either
+% "page" or "section". You may only use this command at places
+% where numbering is not in effect; you can't change the lineation system
+% within a section. You can change it between sections: they don't all
+% have to use the same lineation system. The line-of-section system is
+% "EDMAC"'s standard setting.
+%
+% \DescribeMacro{\linenummargin}
+% The marginal line numbers will be printed in the "left",
+% "right", "inner", or "outer" margin, depending on which you
+% specify as argument to the "\linenummargin"
+% command: for example, "\linenummargin{inner}".
+% Normally, line numbers appear
+% in the left margin. You can change this whenever you're not in the
+% middle of making a paragraph.
+%
+% \DescribeMacro{\firstlinenum}
+% \DescribeMacro{\linenumincrement}
+% \DescribeMacro{\firstsublinenum}
+% \DescribeMacro{\sublinenumincrement}
+% In most cases, you will not want a number printed for every
+% single line of the text. Four \TeX{} "count" registers control
+% the printing of marginal numbers.
+% "\firstlinenum" specifies the number of the first line in a
+% section to number, and "\linenumincrement" is the increment
+% between numbered lines. "\firstsublinenum" and
+% "\sublinenumincrement" do the same for
+% sub-lines. Initially, all these counters are set equal to $5$.
+%
+% \DescribeMacro{\leftlinenum}
+% \DescribeMacro{\rightlinenum}
+% \DescribeMacro{\linenumsep}
+% When a marginal line number is to be printed, there are a
+% lot of ways to display it.
+% You can redefine "\leftlinenum" and "\rightlinenum" to
+% change the way marginal line numbers are printed in the
+% left and right margins respectively; the initial
+% versions print the number in font "\numlabfont" (described
+% below) at a distance "\linenumsep" (initially set to one pica)
+% from the text.
+%
+% \subsection{Changing the line numbers}
+%
+% Normally the line numbering starts at 1 for the first line of
+% a section and steps up by one for each line thereafter. There
+% are various common modifications of this system, however; the
+% commands described here allow you to put such modifications
+% into effect.
+%
+% \DescribeMacro{\startsub}
+% \DescribeMacro{\endsub}
+% You insert the "\startsub" and "\endsub" commands in your text
+% to turn sub-lineation on and off. In plays, for
+% example, stage directions are often numbered with sub-line
+% numbers: as line $10.1$, $10.2$,
+% $10.3$, rather than as $11$, $12$, and $13$.
+% Titles and headings are sometimes numbered with sub-line numbers
+% as well.
+%
+% When sub-lineation is in effect, the line number counter is
+% frozen and the sub-line counter advances instead. If one of these
+% commands appears in the middle of a line, it doesn't take effect
+% until the next line; in other words, a line is counted as a line
+% or sub-line depending on what it started out as, even if that
+% changes in the middle.
+%
+% \DescribeMacro{\startlock}
+% \DescribeMacro{\endlock}
+% The "\startlock" command, used in running text, locks the
+% line number at its current value, until you say "\endlock".
+% It can tell for itself whether you are in a patch of line or
+% sub-line numbering. One use for line-number locking is in printing
+% poetry: there the line numbers should be those of verse lines
+% rather than of printed lines, even when a verse line requires several
+% printed lines.
+%
+% \DescribeMacro{\lockdisp}
+% When line-number locking is used,
+% several printed lines may have the same line number, and you have to
+% specify whether you want the number attached to the first printed
+% line or the last, or whether you just want the number printed by
+% them all. (This assumes that, on the basis of the settings of
+% the previous parameters, it is necessary to display a line number for
+% this line.) You specify your preference using "\lockdisp"; its
+% argument is a word, either "first", "last", or "all".
+% "EDMAC" initially sets this to "first".
+%
+% \DescribeMacro{\setline}
+% \DescribeMacro{\advanceline}
+% In some cases you may want to modify the line numbers that are
+% automatically calculated: if you are printing only fragments
+% of a work but want to print line numbers appropriate to a complete
+% version, for example. The "\setline" and "\advanceline" commands
+% may be used to change the current line's number (or the sub-line
+% number, if sub-lineation is currently on). They change both the
+% marginal line numbers and the line numbers passed to the notes.
+% "\setline" takes one argument, the value to which you want
+% the line number set; it must be $0$ or greater. "\advanceline"
+% takes one argument, an amount that should be added to the current
+% line number; it may be positive or negative.
+%
+% \subsection{Alternate footnote formatting}
+% If you just launch into "EDMAC" using the commands outlined
+% above, you will get a standard layout for your text and notes. You
+% may be happy to accept this at the very beginning, while you
+% get the hang of things, but the standard layout is not particularly
+% pretty, and you will certainly want to modify it in due course.
+% "EDMAC" provides ways of changing the fonts and layout of
+% your text, but these are not aimed at being totally comprehensive.
+% They are enough to deal with simple variations from the norm, and
+% to exemplify how you might go on to make more swingeing changes.
+%
+% \DescribeMacro{\footparagraph}
+% \DescribeMacro{\foottwocol}
+% \DescribeMacro{\footthreecol}
+% All footnotes will normally be formatted as a series of separate
+% paragraphs in one column. But there are three other formats
+% available for notes, and using these macros you can select a
+% different format for a series of notes. "\footparagraph" formats
+% all the footnotes of a series as a single paragraph (see
+% figs.~\ref{iocasta-out}, \ref{periphyseon-out} and \pageref{vyadi},
+% pp.\,\pageref{iocasta-out}, \pageref{periphyseon-out}, and
+% \pageref{vyadi}); "\foottwocol" formats them as separate paragraphs,
+% but in two columns (see bottom notes in fig.~\ref{arden-out},
+% p.\,\pageref{arden-out});
+% "\footthreecol", in three columns (see second layer of notes in
+% fig.\ref{features-out}, p.\,\pageref{features-out}). Each of these
+% macros
+% takes one argument: a letter (between "A" and "E") for
+% the series of notes you want changed.
+% So a text with three layers of notes might begin thus:
+% \begin{verbatim}
+% \footnormal{A}
+% \footthreecol{B}
+% \footparagraph{C}
+% \end{verbatim}
+% This would make the A-notes ordinary, B-notes would be in three
+% columns, and the bottom layer of notes would be formed into
+% a paragraph on each page.
+%
+% \DescribeMacro{\interparanoteglue}
+% If you use paragraphed footnotes, the macro "\interparanoteglue"
+% defines the glue appearing in between footnotes in the paragraph.
+% It is a macro whose argument is the glue you want, and its
+% initial setting is (see p.\,\pageref{interparanoteglue}):
+% \begin{verbatim}
+% \interparanoteglue{1em plus .4em minus .4em}
+% \end{verbatim}
+%
+% You should set "\hsize" for the text, and the "\baselineskip" of
+% the footnotes (this is done for you if you use the standard
+% "\notefontsetup"), before you call any
+% of these macros, because their action depends on those values;
+% too much or too little space will be allotted for the notes on
+% the page if these macros use the wrong
+% values.\footnote{\label{nobreaks}There
+% is one tiny proviso about using paragraphed notes: you shouldn't
+% force any explicit line-breaks inside such notes: do not use
+% {\tt \bslash par},
+% {\tt \bslash break}, or {\tt \bslash penalty=-10000}. If
+% you must have a line-break for some obscure reason, just suggest
+% the break very strongly: {\tt \bslash penalty=-9999} will do
+% the trick. Page \pageref{nobreak} explains why this restriction
+% is necessary.}
+%
+% \subsection{Fonts}\label{fonts}
+% One of the most important features of the appearance of the notes,
+% and indeed of your whole document, will be the fonts used. Because
+% the demands of critical editions tax the font-handling system of
+% \PlainTeX, we provide both that system and an alternative, the
+% New Font Selection System (NFSS) developed for \LaTeX. We will
+% first describe the commands that give you control over the
+% use of fonts in the different structural elements of the document,
+% especially within the notes, and then in
+% subsequent sections specify how these commands are used with each
+% of the font-handling systems.
+%
+% (For those who are setting up "EDMAC" for a large job, here is
+% a list of the complete set of "EDMAC" macros relating to fonts that
+% are intended for manipulation by the user: "\endashchar", "\fullstop",
+% "\headlinefont", "\notefontsetup", "\notenumfont",
+% "\numlabfont", and "\rbracket". "EDMAC" also assumes that "\rm" has
+% been defined so as to select a roman font in the current size,
+% and that some reasonable standard font has been selected before
+% the package is loaded.)
+%
+% \DescribeMacro{\notefontsetup}
+% \label{notefonts}\relax
+% The "\notefontsetup" macro defines the standard set of
+% fonts for all your footnotes. This command redefines such commands as
+% "\it" so that they refer to an appropriate family of fonts, typically
+% different from that used for the main text;
+% normally, "EDMAC" chooses eight-point
+% fonts for your footnotes, as against ten-point fonts for the main
+% text.
+%
+% \DescribeMacro{\notenumfont}
+% The "\notenumfont" macro specifies the font used for the line
+% numbers printed in notes. This will typically be a command like
+% "\bf" ("EDMAC"'s initial value is "\sevenrm") that selects a
+% distinctive style for the
+% note numbers, but leaves the choice of a size up to
+% "\notefontsetup".
+%
+% \DescribeMacro{\numlabfont}
+% Line numbers for the main text
+% are usually printed in a smaller font in the margin.
+% The "\numlabfont" macro is provided as a standard name for
+% that font: it is initially set to be a seven-point roman font.
+% You might wish to use a different font if, for example,
+% you preferred to have these line numbers printed using
+% old-style numerals.
+%
+% \DescribeMacro{\select@lemmafont}
+% We will briefly discuss "\select@lemmafont"
+% here because it is important to know about
+% it now, although it is not one of the macros you would expect to
+% change in the course of a simple job. Hence it is ``protected''
+% by having the @-sign in its name.
+%
+% When you use the "\text" macro to mark a word in your text
+% as a lemma, that word will normally be printed again in your
+% apparatus. If the word in the text happens to be in a font such
+% as italic or bold you would probably expect it to appear in the
+% apparatus in the same font. This becomes an absolute necessity
+% if the font is actually a different script, such as Arabic or
+% Cyrillic. "\select@lemmafont" does the work of
+% decoding "EDMAC"'s data about the fonts used to print the lemma in
+% the main text and calling up those fonts for printing the lemma in
+% the note.
+%
+% "\select@lemmafont" is a macro that takes one long
+% argument---the cluster of line numbers passed to the note
+% commands. This cluster ends with a code indicating what
+% fonts were in use at the start of the lemma.
+% "\select@lemmafont" selects the appropriate font for the
+% note using that font specifier.
+%
+% "EDMAC" uses "\select@lemmafont" in a standard footnote
+% format macro called "\normalfootfmt". The footnote formats
+% for each of the layers "A" to "E" are "\let" equal
+% to "\normalfootfmt". So all the layers of footnotes are
+% formatted in the same way.
+%
+% But it is also likely that you might want to have different fonts
+% for just, say, the note numbers in layers "A" and "B" of
+% your apparatus. To do this, make two copies of the
+% "\normalfootfmt" macro (see p.\,\pageref{normalfootfmt})---or
+% "\twocolfootfmt", or the other appropriate macro ending in
+% "-footfmt", depending on what footnote format you have
+% selected---and give these macros the names "\Afootfmt" and
+% "\Bfootfmt". Then, in these new macros, change the font
+% specifications (and spacing, or whatever) to your liking.
+%
+% \DescribeMacro{\endashchar}
+% \DescribeMacro{\fullstop}
+% \DescribeMacro{\rbracket}
+% \font\teni=cmmi10
+% A relatively trivial matter relates to punctuation. In your
+% footnotes, there will sometimes be spans of line numbers like
+% this: 12--34, or lines with sub-line numbers like this: 55.6. The
+% en-dash and the full stop are taken from the same font as the
+% numbers, and it all works nicely. But what if you wanted to use
+% old-style numbers, like {\teni12} and {\teni34}? These look nice
+% in an edition, but when you use the fonts provided by \PlainTeX\
+% they are taken from a math font which does not
+% have the en-dash or full stop in the same places as a text font.
+% If you (or your macros) just typed "$\oldstyle 12--34$" or
+% "$\oldstyle 55.6$" you would get ``{\teni12--34}''and
+% ``{\teni55.6}''. So we define "\endashchar" and
+% "\fullstop", which produce an en-dash and a full stop
+% respectively from the "\rm" font, whatever font you are using
+% for the numbers. These two macros are used in the
+% macros which format the line numbers in the margins and
+% footnotes, instead of explicit punctuation.
+% We also define an "\rbracket" macro for the
+% right square bracket printed at the end of the lemma in many
+% styles of textual notes (including "EDMAC"'s standard style).
+%
+% \subsubsection{The New Font Selection Scheme}
+% \label{edmacnfss}\relax
+%
+% While the handling the fonts in \PlainTeX\ works for simple cases, it
+% quickly gets inadequate if you want \TeX\ to load many different
+% fonts, or if you frequently change font sizes, languages, etc. We
+% recommend that for all but the simplest editions you consider using the
+% New Font Selection Scheme.
+%
+% The New Font Selection Scheme (NFSS) is a major piece of programming by
+% Frank Mittelbach\index{Mittelbach, Frank} and Rainer
+% Sch\"opf\index{Sch\"opf, Rainer} which completely rewrites the way \TeX\
+% macros handle fonts. It was first published in {\em TUGboat} in
+% 1989.\footnote{{\em TUGboat\/} {\bf 10} (1989), pp.\,222--238.}
+% Initially, the NFSS was aimed at replacing the \LaTeX\ system of font
+% handling, as contained in "lfonts.tex".\footnote{See {\em TUGboat} {\bf
+% 11} (1990), pp.\,297--305.} Later it became part of a major revision of
+% the whole of \LaTeX, and is now documented in {\em The \LaTeX\
+% Companion}\footnote{By Michel Goossens, Frank Mittelbach and Alexander
+% Samarin (Reading, etc.: Addison Wesley, 1994). See especially
+% chapter~7.} and in the files distributed with \LaTeX\
+% itself.\footnote{Of the files in the \LaTeXe\ distribution, you should
+% especially read "features.tex" and "fontcmds.dtx".} Another reason why
+% you might wish to use the NFSS is that you may already be accustomed to
+% using it if you are using \LaTeX\ for other parts of your book, or for
+% other publications.
+%
+% Wayne Sullivan\index{Sullivan, Wayne} adapted an early release of the
+% NFSS for separate use with \PlainTeX\ and "EDMAC".\footnote{See the file
+% "plainfss.zip" available from internet archive sites of \TeX-related
+% material.} Since then, the NFSS has become more closely integrated
+% into \LaTeX. So today, if you wish to use the NFSS, you should start by
+% installing the latest version of \LaTeX. This does not mean that
+% "EDMAC" is compatible with \LaTeX\ in general: it isn't. But the
+% accompanying file "ed-nfss.tex" contains instructions about a simple way
+% in which "EDMAC" can use just those parts of \LaTeX\ that define the
+% NFSS.\label{ed-nfss} We have kept these instructions separate because
+% \LaTeX\ is in a period of evolution, and things may work differently in
+% future. But "EDMAC" itself does contain the `hooks' required to access
+% the NFSS if it has been defined.
+%
+% What will you gain by using the NFSS with "EDMAC"? {\em The \LaTeX\
+% Companion}, referred to above, makes the general case for NFSS in clear
+% terms at the beginning of chapter~7. More specifically, if you
+% read the documentation below, you will come across several places
+% where we highlight how hamstrung we felt, being limited to the
+% font macros available in \PlainTeX. See the discussion of
+% "\select@lemmafont" in particular
+% (p.\,\pageref{selectlemmafont}). If you are happy with the CM
+% fonts used by \PlainTeX, plus just a very few others, then you could
+% stay with "EDMAC" as it is. But if you want to use
+% completely different families of fonts, such as PostScript fonts,
+% or if you plan to use several different languages or alphabets
+% such as Armenian or Greek, then your work will be made much easier
+% by the NFSS.
+%
+% Here are some examples of how you might define some of the font
+% macros when you use NFSS.
+% \begin{verbatim}
+% \def\notefontsetup{\fontsize{7}{8}\selectfont}
+% \let\notenumfont=\rm
+% \end{verbatim}
+% These commands select seven-point fonts on eight-point baselines
+% for the notes, and choose a roman font for the line numbers
+% within notes.
+%
+% \subsubsection{The Plain font selection scheme}
+%
+% If you run ordinary \TeX\ with "edmac.doc", the
+% main font commands of \PlainTeX\ will be available in the normal way
+% (see the {\em \TeX book}, chapter 4).
+%
+% "EDMAC" also defines a set of macros (modelled on some of the "manmac"
+% macros from appendix E of {\em The \TeX book}) to
+% invoke eight-point fonts, and an "\eightpoint" macro to select
+% a whole set of fonts at that size; when the Plain font selection
+% scheme is used, this is the initial value of "\notefontsetup". If you
+% want to use some other font size for the notes, you will need to
+% load the appropriate fonts in your file, and then
+% define your own macro on the model of "\eightpoint" that will
+% properly assign the baseline spacing, set the various font
+% families, and redefine the commands "\rm", "\it", etc.
+%
+% If your document requires font shapes other than those found
+% in \PlainTeX, you will need to go further and modify the
+% "\select@lemmafont" macro to handle these shapes:
+% see its use on
+% p.\,\pageref{selectlemmafont} for more details. As you will see
+% from that description, if you are using some new, outlandish font
+% such as Devan\=agar\=\i, you should assign it a new font family,
+% in order for "\select@lemmafont" to be able to handle it
+% this way. But once you get to this level of complexity, it
+% might be better to switch over to the New Font Selection Scheme
+% anyway. Note that our use of the Plain font selection scheme makes
+% a use of the ``font family'' specifier that is not what was
+% intended; and because \TeX's maximum font-family number is $15$,
+% it is possible to run out of font families if your text has many
+% different kinds of font or uses other macro packages that also
+% define new font families. When "EDMAC" uses NFSS, it does not
+% meddle with font-family numbers in this way.
+%
+% Because "\notefontsetup" sets up the whole set of fonts used
+% within notes that are likely to change font shapes, it needs
+% to be equated to a complex macro like "\eightpoint". But the
+% other "EDMAC" font macros---"\notenumfont" and
+% "\numlabfont"---are used for text which should not contain any
+% font changes, and it is usually good enough to equate one of
+% these to a command that selects a specific font at a specific
+% size. For example, saying "\let\numlabfont=\seveni" selects
+% a seven-point math italic font for marginal line numbers, so
+% that the numbers will be printed using old-style figures.
+%
+% \subsection{Crop marks}
+%
+% Publishers usually like crop marks on the camera-ready copy for
+% works of this kind, so a facility for generating them has been
+% incorporated into "EDMAC".
+%
+% Publishers specify crop marks (or trim lines, etc.) in terms of
+% two dimensions, height and width, and they also usually specify
+% back and head margins.
+%
+% The ``head margin'' is the distance between the top of the printed
+% text and the top crop marks; it is normally measured
+% from the top of the running head, \PlainTeX's
+% "\headline". The ``back margins'' (or ``gutter margins'') are
+% the right margins of even-numbered pages, and the left margins of
+% odd-numbered pages. If you hold a book open in front of you, they
+% are the margins in the middle of the opening.
+% \begin{figure}
+% \unitlength=0.80mm
+% \linethickness{0.4pt}
+% \begin{picture}(138.00,90.00)
+% \put(64.00,80.00){\line(-1,0){5.00}}
+% \put(14.01,80.00){\line(1,0){5.00}}
+% \put(14.00,15.00){\line(1,0){5.00}}
+% \put(59.00,15.00){\line(1,0){5.00}}
+% \put(20.01,81.00){\line(0,1){5.00}}
+% \put(58.00,86.00){\line(0,-1){5.00}}
+% \put(20.00,9.00){\line(0,1){5.00}}
+% \put(58.00,14.00){\line(0,-1){5.00}}
+% \put(25.00,20.00){\dashbox{2.00}(29.00,45.00)[cc]{}}
+% \put(25.00,70.00){\dashbox{2.00}(29.00,2.00)[cc]{{\tiny headline}}}
+% \put(10.00,5.00){\framebox(60.00,85.00)[cc]{\shortstack{\strut even\\
+% \strut page\\ \strut text}}}
+% \put(133.00,80.00){\line(-1,0){5.00}}
+% \put(83.00,80.00){\line(1,0){5.00}}
+% \put(83.00,15.00){\line(1,0){5.00}}
+% \put(128.00,15.00){\line(1,0){5.00}}
+% \put(89.00,81.00){\line(0,1){5.00}}
+% \put(127.00,86.00){\line(0,-1){5.00}}
+% \put(89.00,9.00){\line(0,1){5.00}}
+% \put(127.00,14.00){\line(0,-1){5.00}}
+% \put(93.00,20.00){\dashbox{2.00}(29.00,45.00)[cc]{}}
+% \put(93.00,70.00){\dashbox{2.00}(29.00,2.00)[cc]{{\tiny headline}}}
+% \put(78.00,5.00){\framebox(60.00,85.00)[cc]{\shortstack{\strut odd\\
+% \strut page\\ \strut text}}}
+% \put(25.00,77.00){\vector(0,-1){5.00}}
+% \put(25.00,77.00){\vector(0,1){3.00}}
+% \put(54.03,41.97){\makebox(0,0)[lb]{{\tiny back margin}}}
+% \put(91.00,45.00){\vector(-1,0){2.00}}
+% \put(91.00,45.00){\vector(1,0){2.00}}
+% \put(78.10,42.99){\makebox(0,0)[lb]{{\tiny back margin}}}
+% \put(16.00,45.00){\vector(0,1){35.00}}
+% \put(16.00,45.00){\vector(0,-1){30.00}}
+% \put(-0.03,44.00){\makebox(0,0)[lb]{{\tiny cropsetup \#1}}}
+% \put(31.01,8.00){\makebox(0,0)[lb]{{\tiny cropsetup \#2}}}
+% \put(54.03,39.97){\makebox(0,0)[lb]{{\tiny (cropsetup \#4)}}}
+% \put(26.00,75.00){\makebox(0,0)[lb]{{\tiny (cropsetup \#3)}}}
+% \put(26.00,77.00){\makebox(0,0)[lb]{{\tiny head margin}}}
+% \put(56.00,45.00){\vector(-1,0){2.00}}
+% \put(56.00,45.00){\vector(1,0){2.00}}
+% \put(38.03,11.01){\vector(-1,0){17.96}}
+% \put(38.03,11.01){\vector(1,0){20.00}}
+% \put(105.01,18.01){\vector(1,0){17.04}}
+% \put(105.01,18.01){\vector(-1,0){11.96}}
+% \put(103.04,16.04){\makebox(0,0)[lb]{{\tiny hsize}}}
+% \put(123.97,41.99){\vector(0,-1){21.94}}
+% \put(124.00,41.98){\vector(0,1){24.96}}
+% \put(124.94,43.05){\makebox(0,0)[lb]{{\tiny vsize}}}
+% \put(126.99,66.01){\makebox(0,0)[lc]{{\tiny topskip}}}
+% \put(125.99,70.01){\vector(0,-1){3.02}}
+% \put(125.99,62.00){\vector(0,1){2.99}}
+% \put(124.99,64.99){\line(1,0){2.03}}
+% \put(124.99,66.99){\line(1,0){2.03}}
+% \end{picture}
+% \caption{Crop marks, back and head margins.}
+% \label{pages}
+% \end{figure}
+% ^^A Ouch! I'd hate to do that without
+% ^^A Georg Horn's TeXcad program!
+%
+% \DescribeMacro{\cropsetup}
+% \label{cropsetup}\relax
+% If you want to have crop marks, and to control the back and
+% head margins, you issue the "\cropsetup" macro. It takes
+% four parameters (see Figure \ref{pages}):
+% \begin{enumerate}\addtolength{\itemsep}{-1ex}
+% \item the vertical distance between crop marks,
+% \item the horizontal distance between crop marks,
+% \item the head margin, and
+% \item the back margin.
+% \end{enumerate}
+%
+% In addition to these arguments, "EDMAC"
+% uses the "\hsize" of the page, as well as information about the
+% height at which the "\headline" floats above the main text (which
+% is set in \PlainTeX's "\makeheadline" macro). "EDMAC"
+% performs these calculations when you issue the "\cropsetup"
+% command. Therefore, it is important that you set the "\hsize"
+% and make any changes to "\makeheadline" {\sl before\/} you issue
+% the "\cropsetup" command. If you do change these values, issue
+% the "\cropsetup" command again.
+%
+% \DescribeMacro{\headlinefont}
+% \DescribeMacro{\magicvskip}
+% In particular, if the "\headline" is going to be set at a
+% different height from the top of the text, or in a different
+% font, you can change the appropriate values easily by using
+% "\headlinefont" and "\magicvskip". The former is what
+% you would expect; just "\let" it to be whatever font you
+% are using (the font macro should include a definition of an
+% appropriate "\strutbox" for that font). Note that this specification
+% does {\em not\/} change what font is actually used by \TeX, unless
+% you modify \TeX's "\headline" macro; it serves only to inform
+% "\cropsetup" of the size of your headline font.
+%
+% The "\magicvskip" gives you direct
+% access to what Donald Knuth calls
+% a ``magic constant'' on p.\,255 of {\em The \TeX book}. For
+% \PlainTeX, "\magicvskip" is $-22.5$\,pt, but you can change
+% this if you want the "\headline" higher or lower than the
+% built-in value. See p.\,\pageref{magic} below for more details.
+%
+% Apart from this stricture that the "\cropsetup" command
+% should follow any changes in "\hsize" and the "\headline",
+% there is no relation (other than visual) between the crop marks
+% and the "\hsize" and "\vsize". You can vary any of
+% these dimensions independently, without affecting any other. Your
+% publisher will almost always want the "\hsize" and
+% "\vsize" to be a few picas smaller than the horizontal and
+% vertical distances between crop marks. And if you want to shift
+% the whole of your printed page about on the paper, use
+% "\hoffset" and "\voffset" as described in {\em The \TeX
+% book}, p.\,251, or use the facilities of your "DVI" translator.
+%
+% \DescribeMacro{\cropwidth}
+% \DescribeMacro{\cropgap}
+% "\cropwidth" and "\cropgap" define the thickness of
+% the rules used for drawing crop marks and the gap by which crop marks
+% don't cross; as before, if you change either, do so before using
+% the "\cropsetup" macro.
+%
+% If, for example, you want your text to have a back margin,
+% for two-sided printing, but
+% you don't want crop marks, just set "\cropwidth=0pt".
+%
+% \subsection{Endnotes}
+%
+% \DescribeMacro{\doendnotes}
+% \DescribeMacro{\endprint}
+% \label{doendnotes}\relax
+% "\doendnotes" closes the ".end" file that contains
+% the text of the endnotes, if it's open, and
+% prints one series of endnotes, as specifed by a series-letter
+% argument, e.g., "\doendnotes{A}". "\endprint" is the
+% macro that's called to print each note. It uses
+% "\notenumfont", "\select@lemmafont", and
+% "\notefontsetup" to select fonts, just as the footnote
+% macros do (see p.\,\pageref{notefonts} above).
+%
+% \DescribeMacro{\noendnotes}
+% If you aren't going to have any endnotes, you can say "\noendnotes"
+% in your file, before the first "\beginnumbering", to suppress the
+% generation of an unneeded ".end" file.
+%
+% \subsection{Cross referencing}
+% \label{crossref}\relax
+% "EDMAC" provides a simple cross-referencing facility that allows
+% you to mark places in the text with labels, and generate page and
+% line number references to those places elsewhere in the text using
+% those labels.
+%
+% \DescribeMacro{\label}
+% First you place a label in the text using the command
+% "\label{foo}". ``"foo"'' can be almost anything you like, including
+% letters, numbers, punctuation, or a combination---anything but spaces;
+% you might say "\label{toves-3}", for example.\footnote{More precisely,
+% you should stick to characters in the \TeX\ categories of ``letter''
+% and ``other''.}
+%
+% \DescribeMacro{\pageref}
+% \DescribeMacro{\lineref}
+% \DescribeMacro{\sublineref}
+% Elsewhere in the text, either before or after the "\label",
+% you can refer to its location by saying "\pageref{foo}", or
+% "\lineref{foo}", or "\sublineref{foo}". These commands
+% will produce, respectively, the page, line and sub-line on which
+% the "\label{foo}" command occurred.
+%
+% A "\label" command may appear in the main text, or in the
+% first argument of "\text", but not in the apparatus itself. But
+% "\pageref", "\lineref" and "\sublineref" commands can also be used in
+% the apparatus to refer to "\label"s in the text.
+%
+% The "\label" command works by writing macros to an ".aux"
+% file (which will only be created if you are actually using
+% some of these commands). Clearly, then, you will need to process
+% your document through \TeX\ twice in order for the references to
+% be resolved.
+%
+% You will be warned if you say "\label{foo}" and "foo"
+% has been used as a label before. The "ref" commands will
+% return references to the last place in the file marked with this
+% label. You will also be warned if a reference is made to an
+% undefined label. (This will also happen the first time you
+% process a document after adding a new "\label" command: the
+% auxiliary file will not have been updated yet.)
+%
+% If you want to refer to a word inside a
+% \verb"\text{...}/" command, the "\label" should be defined inside
+% the first argument, e.g.,
+% \begin{verbatim}
+% The \text{creature\label{elephant} was quite
+% unafraid}\Afootnote{Of the mouse, that is.}/
+% \end{verbatim}
+%
+% \DescribeMacro{\xpageref}
+% \DescribeMacro{\xlineref}
+% \DescribeMacro{\xsublineref}
+% However, there are situations in which you'll want "EDMAC" to
+% return a number without displaying any
+% warning messages about undefined labels or the like: if you want to
+% use the reference in a context where \TeX\ is looking for a
+% number, such a warning will lead to a complaint that the number
+% is missing. This is the case for references used within the
+% argument to "\linenum", for example. For this situation,
+% three variants of the reference commands, with the "x"
+% prefix, are supplied: "\xpageref", "\xlineref", and "\xsublineref".
+% The only operations they perform are ones
+% that \TeX\ can do in its ``mouth''. They have these limitations:
+% they will not tell you if the label is undefined, and they must
+% be preceded in the file by at least one of the four other
+% cross-reference commands---e.g., a "\label{foo}" command,
+% even if you never refer to that label---since those commands can all
+% do the necessary processing of the ".aux" file, and these
+% cannot.
+%
+% \DescribeMacro{\xxref}
+% The macros "\xxref" and "\makelabel" let you manipulate numbers
+% and labels in ways which you may find helpful in tricky
+% situations.
+%
+% The "\xxref" command generates a reference to a sequence of
+% lines, for use in the second argument of "\text".
+% It takes two arguments, both of which are
+% labels: e.g., "\xxref{mouse}{elephant}". It calls "\linenum"
+% (q.v., p.\,\pageref{linenum} above) and sets the beginning page,
+% line, and sub-line numbers to those of the place where
+% "\label{mouse}" was placed, and the ending numbers to those where
+% "\label{elephant}" occurs.
+%
+% \DescribeMacro{\makelabel}
+% Sometimes the "\label" command cannot be used to specify exactly
+% the page and line desired---for example, if you want to refer to a
+% page and line number in another volume of your edition. In such
+% cases, you can use the "\makelabel" macro so that you can ``roll
+% your own'' label. For example, if you say
+% ``"\makelabel{elephant}{10|25|0}"'' you will have created a new
+% label, and a later call to "\pageref{elephant}" would print
+% ``10'' and "\lineref{elephant}" would print ``25''. The sub-line
+% number here is zero. It is usually best to collect your
+% "\makelabel" statements near the top of your document, so that
+% you can see them at a glance.
+%
+% \subsection{Miscellaneous}
+%
+% Generally, you should set the "\vsize" and "\hsize" of you
+% document at the top, before any "EDMAC" commands are issued,
+% since "EDMAC" uses these values to work out some things, like
+% crop marks and footnote spacing. As {\em The \TeX book\/} says
+% (p.\,251), ``It's best not to monkey with "\hsize" and "\vsize"
+% except at the very beginning of a job\ldots''.
+%
+% Any changes you make to "\leftskip" or "\rightskip" will apply to
+% the main body text, but not to the footnotes. This is how you
+% can get a narrow-set text on a wider base of notes, a common
+% style for critical editions. Footnote material is always set
+% "\hsize" wide.
+%
+% \DescribeMacro{\extensionchars}
+% When "EDMAC" assembles the name of the auxiliary file for a
+% section, it prefixes "\extensionchars" to the section number.
+% This is initially defined to be empty, but you can add some characters to
+% help distinguish these files if you like; what you use is likely
+% to be system-dependent. If, for example, you said
+% "\def\extensionchars{!}", then you would get temporary
+% files called "jobname.!1", "jobname.!2", etc.
+%
+% \subsection{Known bugs}
+%
+% The \PlainTeX{} "\footnote" command will work only within
+% unnumbered text; within numbered text it will wreak havoc.
+% In general, "EDMAC"'s system for adding marginal line numbers
+% breaks anything that makes direct use of the \TeX{} insert system.
+%
+% "\parshape" cannot be used within numbered text, except in a
+% very restricted way (see p.\,\pageref{parshape}).
+%
+% \DescribeMacro{\ballast}
+% \label{ballastdesc}\relax
+% "EDMAC" is a three-pass system, but even after a document has
+% been processed three times, there are some tricky situations in
+% which the page breaks decided by \TeX\ never settle down. At
+% each successive run of \TeX, "EDMAC" oscillates between two
+% different sets of page decisions. To stop this happening, should
+% it arise, Wayne Sullivan\index{Sullivan, Wayne} suggested the
+% inclusion of the quantity "\ballast". The amount of "\ballast"
+% will be subtracted from the penalties which apply to the page
+% breaks calculated on the {\em previous\/} run through \TeX, thus
+% reinforcing these breaks. So if you find your page breaks
+% oscillating, say "\ballast=100" or some such figure, and with any
+% luck the page breaks will settle down. Luckily, this problem
+% doesn't crop up at all often.
+%
+% The restriction on explicit line-breaking in paragraphed footnotes,
+% mentioned in footnote \ref{nobreaks}, p.\,\pageref{nobreaks}, and
+% described in more detail on p.\,\pageref{nobreaks-detail}, really is a
+% nuisance if that's something you need to do. There are some possible
+% solutions, described by Michael Downes\index{Downes, Michael},
+% but this area remains unsatisfactory.
+%
+% Help, suggestions and corrections will be gratefully received.
+%
+%
+% \StopEventually{%
+% \addcontentsline{toc}{section}{\protect\numberline{B}Index}
+% \PrintIndex
+% ^^A \addtocontents{toc}{\protect\end{multicols}}
+% }
+%
+% \section{Implementation overview}\label{overview}
+%
+% We present the "EDMAC" code in roughly the order in which it's used
+% during a run of \TeX. The order is {\em exactly\/} that in which
+% it's read when you load the "EDMAC" package, because the same file
+% is used to generate this book and to generate the \TeX{} input
+% file. Most of what follows consists of macro definitions, but there
+% are some \TeX{} commands that are executed immediately---especially
+% at the start of the code. The documentation generally describes the
+% code from the point of view of what happens when the macros are
+% executed, though. As each macro is introduced, its name is printed
+% in the margin.
+%
+% We begin with the commands you use to start and
+% stop line numbering in a section of text (Section~\ref{preliminaries}).
+% Next comes the machinery for writing and reading the auxiliary file for
+% each section that helps us count lines, and for creating list macros
+% encoding the information from that file (Section~\ref{lineation}); this
+% auxiliary file will be read at the start of each section, to create
+% those list macros, and a new version of the file will be started to
+% collect information from the body of the section.
+%
+% Next are commands for marking sections of
+% the text for footnotes (Section~\ref{text}), followed by the macros
+% that take each paragraph apart, attach the line numbers and insertions,
+% and send the result to the vertical list (Section~\ref{paragraph}). The
+% footnote commands (Section~\ref{footnotes}) and output routine
+% (Section~\ref{output}) finish the main part of the processing;
+% cross-referencing (Section~\ref{xref}) and endnotes
+% (Section~\ref{endnotes}) complete the story.
+%
+% In what follows, macros with an @ in their name are more internal
+% to the workings of "EDMAC" than those made up just of
+% ordinary letters, just as in \PlainTeX\ (see {\em The \TeX
+% book}, p.\,344). You are meant to be able to make free with
+% ordinary macros, but the ``@'' ones should be treated with more
+% respect, and changed only if you are pretty sure of what you are
+% doing.
+%
+%
+% \section{Preliminaries}
+% \label{preliminaries}\relax
+%
+% When this file is loaded by \TeX, it makes a check, before
+% anything else is done, for whether this set of macros has
+% already been loaded before. If it has, this file exits without
+% being read further; if it hasn't, some informative messages
+% are printed.
+%
+% \begin{macrocode}
+\ifx\edmacloaded\relax\endinput\else\let\edmacloaded=\relax\fi
+{\newlinechar=`\^^J
+\message{^^J
+ ********************************************************************^^J
+ EDMAC Critical edition macros.^^J
+ Copyright (C) 1990--1996 John Lavagnino and Dominik Wujastyk.^^J
+ This is free software, and you are welcome to redistribute it under^^J
+ certain conditions; see the accompanying file COPYING for details.^^J
+ ^^J%
+\fileversion\space\space\space <\filedate>.^^J
+ ********************************************************************^^J^^J }}
+% \end{macrocode}
+%
+% \begin{macro}{\makeatletter}
+% \begin{macro}{\makeatother}
+% You can't normally use @ signs within \TeX{} macro names. We
+% define macros that allow you to turn this capability on and off;
+% and then we turn it on for the time being, since this file
+% will use and define many macros with @ signs in their names.
+% \begin{macrocode}
+\def\makeatletter{\catcode`\@=11 }
+\def\makeatother{\catcode`\@=12 }
+\makeatletter
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@tempcnta}
+% \begin{macro}{\@tempcntb}
+% In imitation of \LaTeX, we create a couple of scratch counters,
+% "\@tempcnta" and "\@tempcntb", that we can
+% use like "\count255" (see {\em The \TeX book}, p.\,122).
+% \begin{macrocode}
+\newcount\@tempcnta \newcount\@tempcntb
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\edmac@warning}
+% "EDMAC" will sometimes want to warn you about what's going
+% on by writing to your terminal and log file; that operation
+% is handled by the "\edmac@warning" macro.
+% \begin{macrocode}
+\def\edmac@warning#1{\immediate\write\sixt@@n{EDMAC warning: #1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Sectioning commands}
+%
+% \begin{macro}{\section@num}
+% You use "\beginnumbering" and "\endnumbering" to begin
+% and end a line-numbered section of the text; the pair of commands may
+% be used as many times as you like within one document to start
+% and end multiple, separately line-numbered sections. \TeX\ will
+% maintain and display a ``section number'' as a counter named
+% "\section@num" that counts how many
+% "\beginnumbering" and "\resumenumbering"
+% commands have appeared; it needn't be
+% related to the logical divisions of your text.
+%
+% \begin{macro}{\extensionchars}
+% Each section will read and write an associated ``line-list
+% file'', containing information used to do the numbering; the file
+% will be called \meta{jobname}"."\meta{nn}, where {\it nn\/} is the
+% section number. However, you may direct that
+% an extra string be added before the
+% {\it nn\/} in that filename, in order to distinguish these
+% temporary files from others: that string is called
+% "\extensionchars". Initially it's empty, since different
+% operating systems have greatly varying ideas about what
+% characters are permitted in file names. So
+% "\def\extensionchars{-}" gives temporary files called
+% "jobname.-1", "jobname.-2", etc.
+% \begin{macrocode}
+\newcount\section@num
+\section@num=0
+\let\extensionchars=\empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ifnumbering}
+% \begin{macro}{\numberingtrue}
+% \begin{macro}{\numberingfalse}
+% The "\ifnumbering" flag is
+% set to "true" if we're within a numbered section (that is, between
+% "\beginnumbering" and "\endnumbering"). You can use "\ifnumbering"
+% in your own code to check whether you're in a numbered section, but
+% don't change the flag's value.
+% \begin{macrocode}
+\newif\ifnumbering
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\beginnumbering}
+% "\beginnumbering" begins a section of numbered text.
+% When it's executed we increment the section number,
+% initialize our counters, send a message to your terminal, and
+% call macros to start the lineation machinery and endnote files.
+%
+% The initializations here are trickier than they look.
+% "\line@list@stuff" will use all of the counters
+% that are zeroed here when it assembles
+% the line-list and other lists of information about the lineation.
+% But it will do all of this locally and
+% within a group, and when it's done the
+% lists will remain but the counters will return to zero. Those same
+% counters will then be used as we process the text of this section,
+% but the assignments will be made globally. These initializations
+% actually apply to both uses, though in all other respects there
+% should be no direct interaction between the use of these counters
+% and variables in the two processing steps.
+% \begin{macrocode}
+\def\beginnumbering{%
+ \ifnumbering
+ \errmessage{Numbering has already been started}%
+ \endnumbering
+ \fi
+ \global\numberingtrue
+ \global\advance\section@num by 1
+ \global\absline@num=0
+ \global\line@num=0
+ \global\subline@num=0
+ \global\@lock=0
+ \global\sub@lock=0
+ \global\sublines@false
+ \global\let\next@page@num=\relax
+ \global\let\sub@change=\relax
+ \message{Section \the\section@num }%
+ \line@list@stuff{\jobname.\extensionchars\the\section@num}%
+ \end@stuff}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endnumbering}
+% "\endnumbering" must follow the last text for a numbered section.
+% It takes care of notifying you when changes have been noted in the
+% input that require running the file through again to move everything
+% to the right place.
+% \begin{macrocode}
+\def\endnumbering{%
+ \ifnumbering
+ \global\numberingfalse
+ \normal@pars
+ \ifx\insertlines@list\empty\else
+ \global\noteschanged@true
+ \fi
+ \ifx\line@list\empty\else
+ \global\noteschanged@true
+ \fi
+ \ifnoteschanged@
+ \immediate\write\sixt@@n{EDMAC reminder: }%
+ \immediate\write\sixt@@n{ The number of footnotes in this section
+ has changed since the last run.}%
+ \immediate\write\sixt@@n{ You will need to run TeX two more times
+ before the footnote placement}%
+ \immediate\write\sixt@@n{ and line numbering in this section are
+ correct.}%
+ \fi
+ \else
+ \errmessage{Numbering was not started}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pausenumbering}
+% \begin{macro}{\resumenumbering}
+% The "\pausenumbering" macro is just the same as
+% "\endnumbering", but with the "\ifnumbering" flag set to "true", to
+% show that numbering continues across the gap.\footnote{Our thanks
+% to Wayne Sullivan,\index{Sullivan, Wayne} who suggested the idea
+% behind these macros.}
+% \begin{macrocode}
+\def\pausenumbering{\endnumbering\global\numberingtrue}
+% \end{macrocode}
+% The "\resumenumbering" macro is a bit more involved, but not much.
+% It does most of the same things as "\beginnumbering", but
+% without resetting the various counters. Note that no check is made
+% by "\resumenumbering" to ensure that "\pausenumbering" was actually
+% invoked.
+% \begin{macrocode}
+\def\resumenumbering{%
+ \ifnumbering
+ \global\advance\section@num by 1
+ \message{Section \the\section@num\space
+ (continuing the previous section)}%
+ \line@list@stuff{\jobname.\extensionchars\the\section@num}%
+ \end@stuff
+ \else
+ \errmessage{Numbering should already have been started.}%
+ \endnumbering
+ \beginnumbering
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \section{Line counting}
+% \label{lineation}\relax
+%
+% \subsection{Choosing the system of lineation}
+%
+% Sometimes you want line numbers that start at $1$ at the top of each
+% page; other times you want line numbers that start at $1$ at the start
+% of each section and increase regardless of page breaks.
+% "EDMAC" can do it either way, and you can switch from one to the
+% other within one work.
+% But you have to choose one or the other for all line numbers and
+% line references within each section. Here we will define
+% internal codes for these systems and the macros you use to select them.
+%
+% \begin{macro}{\ifbypage@}
+% \begin{macro}{\bypage@true}
+% \begin{macro}{\bypage@false}
+% The "\ifbypage@" flag specifies the current lineation
+% system: "true" for line-of-section, "false" for line-of-page.
+% "EDMAC" will use the line-of-section system unless instructed otherwise.
+% \begin{macrocode}
+\newif\ifbypage@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lineation}
+% "\lineation" is the macro you use to select the lineation system.
+% Its argument is a string: either "page" or "section".
+% \begin{macrocode}
+\def\lineation#1{{%
+ \ifnumbering
+ \errmessage{You can't use \string\lineation\space
+ within a numbered section}%
+ \else
+ \def\@tempa{#1}\def\@tempb{page}%
+ \ifx\@tempa\@tempb
+ \global\bypage@true
+ \else
+ \def\@tempb{section}%
+ \ifx\@tempa\@tempb
+ \global\bypage@false
+ \else
+ \edmac@warning{Bad \string\lineation\space argument.}%
+ \fi
+ \fi
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\linenummargin}
+% \begin{macro}{\line@margin}
+% You call "\linenummargin" to specify which margin you want your
+% line numbers in; it takes one argument, a string.
+% You can put the line numbers in the same margin on every page using
+% "left" or "right"; or you can use "inner" or
+% "outer" to get them in the inner or outer margins. (These last
+% two options assume that even-numbered pages will be on the
+% left-hand side of every opening in your book.)
+% You can change this within a numbered section, but the
+% change may not take effect just when you'd like; if it's done between
+% paragraphs nothing surprising should happen.
+%
+% The selection is recorded in "\line@margin":
+% $0$ for left, $1$ for right, $2$ for outer, and $3$ for inner.
+% \begin{macrocode}
+\newcount\line@margin
+\def\linenummargin#1{{%
+ \def\@tempa{#1}\def\@tempb{left}%
+ \ifx\@tempa\@tempb
+ \global\line@margin=0
+ \else
+ \def\@tempb{right}%
+ \ifx\@tempa\@tempb
+ \global\line@margin=1
+ \else
+ \def\@tempb{outer}%
+ \ifx\@tempa\@tempb
+ \global\line@margin=2
+ \else
+ \def\@tempb{inner}%
+ \ifx\@tempa\@tempb
+ \global\line@margin=3
+ \else
+ \edmac@warning{Bad \string\linenummargin\space argument.}%
+ \fi
+ \fi
+ \fi
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\firstlinenum}
+% \begin{macro}{\linenumincrement}
+% The following parameters tell "EDMAC" which lines should be
+% printed with line numbers. "\firstlinenum" is the number of the
+% first line in each section that gets a number;
+% "\linenumincrement"
+% is the difference between successive numbered lines. The initial
+% values of these counters produce labels on lines $5$, $10$, $15$, etc.
+% "\linenumincrement" must be at least $1$.
+% \begin{macrocode}
+\newcount\firstlinenum
+\newcount\linenumincrement
+\firstlinenum=5
+\linenumincrement=5
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\firstsublinenum}
+% \begin{macro}{\sublinenumincrement}
+% The following parameters are just like "\firstlinenum" and
+% "\linenumincrement", but for sub-line numbers.
+% "\sublinenumincrement" must be at least $1$.
+% \begin{macrocode}
+\newcount\firstsublinenum
+\newcount\sublinenumincrement
+\firstsublinenum=5
+\sublinenumincrement=5
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lockdisp}
+% \begin{macro}{\lock@disp}
+% When line locking is being used, the "\lockdisp" macro
+% specifies whether a line number---if one is due to
+% appear---should be printed on the first printed line or on the
+% last, or by all of them. Its argument is a word, either
+% "first", "last", or "all". Initially, it is set to "first".
+%
+% "\lock@disp" encodes the selection: $0$ for first, $1$ for last,
+% $2$ for all.
+% \begin{macrocode}
+\newcount\lock@disp
+\def\lockdisp#1{{%
+ \def\@tempa{#1}\def\@tempb{first}%
+ \ifx\@tempa\@tempb
+ \global\lock@disp=0
+ \else
+ \def\@tempb{last}%
+ \ifx\@tempa\@tempb
+ \global\lock@disp=1
+ \else
+ \def\@tempb{all}%
+ \ifx\@tempa\@tempb
+ \global\lock@disp=2
+ \else
+ \edmac@warning{Bad \string\lockdisp\space argument.}%
+ \fi
+ \fi
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sublockdisp}
+% \begin{macro}{\sublock@disp}
+% The same questions about where to print the line number apply to
+% sub-lines, and these are the analogous macros for dealing with
+% the problem.
+% \begin{macrocode}
+\newcount\sublock@disp
+\def\sublockdisp#1{{%
+ \def\@tempa{#1}\def\@tempb{first}%
+ \ifx\@tempa\@tempb
+ \global\sublock@disp=0
+ \else
+ \def\@tempb{last}%
+ \ifx\@tempa\@tempb
+ \global\sublock@disp=1
+ \else
+ \def\@tempb{all}%
+ \ifx\@tempa\@tempb
+ \global\sublock@disp=2
+ \else
+ \edmac@warning{Bad \string\sublockdisp\space argument.}%
+ \fi
+ \fi
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\leftlinenum}
+% \begin{macro}{\rightlinenum}
+% \begin{macro}{\linenumsep}
+% \begin{macro}{\numlabfont}
+% "\leftlinenum" and "\rightlinenum" are the macros that are
+% called to print marginal line numbers on
+% a page, for left- and right-hand margins respectively.
+% They're made easy to access and change, since you may
+% often want to change the styling in some way. These standard versions
+% illustrate the general sort of thing that will be needed; they're
+% based on the "\leftheadline" macro in {\em The \TeX book}, p.\,416.
+%
+% Whatever these macros output gets printed in a box that will be
+% put into the appropriate margin without any space between it and the
+% line of text. You'll generally want a kern between a line number and
+% the text, and "\linenumsep" is provided as a standard way of
+% storing its size. Line numbers are usually printed in a smaller
+% font, and "\numlabfont" is provided as a standard name for that
+% font. When called, these macros
+% will be executed within a group, so font changes and the like will
+% remain local.
+% \begin{macrocode}
+\newdimen\linenumsep
+\linenumsep=1pc
+\ifx\selectfont\undefined
+ \let\numlabfont=\sevenrm
+\else
+ \def\numlabfont{\fontsize{7}{8pt}\rm}
+\fi
+\def\leftlinenum{\numlabfont\the\line@num
+ \ifsublines@
+ \ifnum\subline@num>0
+ \unskip\fullstop\the\subline@num
+ \fi
+ \fi
+ \kern\linenumsep}
+\def\rightlinenum{\kern\linenumsep \numlabfont\the\line@num
+ \ifsublines@
+ \ifnum\subline@num>0
+ \unskip\fullstop\the\subline@num
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{List macros}
+%
+% We will make heavy use of lists of information, which will be built
+% up and taken apart by the following macros; they are
+% adapted from {\em The \TeX book}, pp.\,378--379, which discusses
+% their use in more detail.
+%
+% These macros consume a large amount of the run-time of this code.
+% We intend to replace them in a future version, and in anticipation
+% of doing so have defined their interface in such a way that it is
+% not sensitive to details of the underlying code.
+%
+% \begin{macro}{\list@create}
+% The "\list@create" macro creates a new list. In this version of
+% "EDMAC" this macro doesn't do anything beyond initializing an empty
+% list macro, but in future versions it will do more.
+% \begin{macrocode}
+\def\list@create#1{\global\let#1=\empty}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\list@clear}
+% The "\list@clear" macro just initializes a list to the empty list;
+% in this version of "EDMAC" it is no different from
+% "\list@create".
+% \begin{macrocode}
+\def\list@clear#1{\global\let#1=\empty}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\xright@appenditem}
+% \begin{macro}{\@toksa}
+% \begin{macro}{\@toksb}
+% "\xright@appenditem" expands an item and appends it to the right
+% end of a list macro. We want the expansion because we'll often
+% be using this to store the current value of a counter.
+% It creates global control sequences, like "\xdef", and uses two
+% temporary token-list registers, "\@toksa" and "\@toksb".
+% \begin{macrocode}
+\newtoks\@toksa \newtoks\@toksb
+\global\@toksa={\\}
+\long\def\xright@appenditem#1\to#2{%
+ \global\@toksb=\expandafter{#2}%
+ \xdef#2{\the\@toksb\the\@toksa\expandafter{#1}}%
+ \global\@toksb={}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\xleft@appenditem}
+% "\xleft@appenditem" expands an item and appends it to the left
+% end of a list macro; it is otherwise identical to
+% "\xright@appenditem".
+% \begin{macrocode}
+\long\def\xleft@appenditem#1\to#2{%
+ \global\@toksb=\expandafter{#2}%
+ \xdef#2{\the\@toksa\expandafter{#1}\the\@toksb}%
+ \global\@toksb={}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\gl@p}
+% The "\gl@p" macro removes the leftmost
+% item from a list and places it in a
+% control sequence. You say "\gl@p\l\to\z"
+% (where "\l" is the list macro, and
+% "\z" receives the left item). "\l" is assumed nonempty: say
+% "\ifx\l\empty" to test for an empty "\l". The control
+% sequences created by "\gl@p" are all global.
+% \begin{macrocode}
+\def\gl@p#1\to#2{\expandafter\gl@poff#1\gl@poff#1#2}
+\long\def\gl@poff\\#1#2\gl@poff#3#4{\gdef#4{#1}\gdef#3{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Line-number counters and lists}
+%
+% Footnote references using line numbers rather than symbols can't be
+% generated in one pass, because we don't know the line numbers till we
+% ship out the pages. It would be possible if footnotes were never keyed
+% to more than one line; but some footnotes gloss passages that may run
+% for several lines, and they must be tied to the first line of the
+% passage glossed. And even one-line passages require two passes if we
+% want line-per-page numbering rather than line-per-section numbering.
+%
+% So we run \TeX\ over the text several times, and each time save
+% information about page and line numbers in a ``line-list file'' to
+% be used during the next pass. At the start of each section---whenever
+% "\beginnumbering" is executed---the line-list file
+% for that section
+% is read, and the information from it is encoded into a few list
+% macros.
+%
+% We need first to define the different line numbers that are involved
+% in these macros, and the associated counters.
+%
+% \begin{macro}{\line@num}
+% The "\line@num" counter stores the line number that's used in
+% marginal line numbering and in notes: counting either from the start of
+% the page or from the start of the section, depending on your
+% choice for this section. This may be qualified by "\subline@num".
+% \begin{macrocode}
+\newcount\line@num
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subline@num}
+% The "\subline@num" counter stores
+% a sub-line number that qualifies "\line@num". For example,
+% line $10$ might have sub-line numbers $1$, $2$ and $3$, which might be
+% printed as lines $10.1$, $10.2$, $10.3$.
+% \begin{macrocode}
+\newcount\subline@num
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifsublines@}
+% \begin{macro}{\sublines@true}
+% \begin{macro}{\sublines@false}
+% We maintain an associated flag, "\ifsublines@",
+% to tell us whether we're within
+% a sub-line range or not.
+%
+% You may wonder why we don't just use the value of "\subline@num"
+% to determine this---treating anything greater than $0$ as an
+% indication that sub-lineation is on. We need a separate flag because
+% sub-lineation can be used together with line-number locking in odd
+% ways: several pieces of a logical line might be interrupted by
+% pieces of sub-lineated text, and those sub-line numbers should not
+% return to zero until the next change in the major line number. This
+% is common in the typesetting of English Renaissance verse
+% drama\index{Middleton, Thomas}, in which stage directions are
+% given sub-line numbers: a single line of verse may be
+% interrupted by several stage directions.
+% \begin{macrocode}
+\newif\ifsublines@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\absline@num}
+% The "\absline@num" counter stores the
+% absolute number of lines since the start
+% of the section: that is, the number we've actually printed, no matter
+% what numbers we attached to them.
+% This value is never printed on an output page, though
+% "\line@num" will often be equal to it. It is used internally to
+% keep track of where notes are to appear and where new
+% pages start: using this value rather than "\line@num" is a lot
+% simpler, because it doesn't depend on the lineation system in use.
+% \begin{macrocode}
+\newcount\absline@num
+% \end{macrocode}
+% \end{macro}
+%
+% We'll be calling "\absline@num" numbers ``absolute'' numbers, and
+% "\line@num" and "\subline@num" numbers ``visible'' numbers.
+%
+% \begin{macro}{\@lock}
+% \begin{macro}{\sub@lock}
+% The "\@lock" and "\sub@lock" counters
+% tell us the state of line-number
+% and sub-line-number locking. $0$ means we're not within a locked set of
+% lines; $1$ means we're at the first line in the set; $2$, at some
+% intermediate line; and $3$, at the last line.
+% \begin{macrocode}
+\newcount\@lock
+\newcount\sub@lock
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\line@list}
+% \begin{macro}{\insertlines@list}
+% \begin{macro}{\actionlines@list}
+% \begin{macro}{\actions@list}
+% Now we can define the list macros that will be created from the
+% line-list file. We will maintain the following lists:
+% \begin{itemize}\addtolength{\itemsep}{-1ex}
+% \item "\line@list": the page and line numbers for every
+% lemma marked by "\text".
+% There are seven pieces of information, separated by vertical bars:
+% \label{linenumbers}
+% \begin{enumerate}\addtolength{\itemsep}{-1ex}
+% \item the starting page,
+% \item line, and
+% \item sub-line numbers, followed by the
+% \item ending page,
+% \item line, and
+% \item sub-line numbers, and then the
+% \item font specifier for the lemma.
+% \end{enumerate}
+% These line numbers are all visible numbers. Thus a lemma that
+% started on page $23$, line $35$ and
+% went on until page $24$, line $3$
+% (with no sub-line numbering), and was typeset in a font from
+% "\fam0" would have a line list entry like this:
+% "23|35|0|24|3|0|0". That assumes the use of the Plain font selection
+% scheme, which uses the family number as its font specifier. When
+% NFSS is used, the font specifier is a set of four codes for
+% font encoding,
+% family, series, and shape, separated by "/" characters; in that
+% case, the line-list entry would be
+% "23|35|0|24|3|0|OT1/cmr/m/n".
+%
+% There is one item in this list for every lemma marked by
+% "\text", even if there are several notes to that lemma, or no
+% notes at all. "\text" reads the data in this list, making it
+% available for use in the text of notes.
+%
+% \item "\insertlines@list": the line numbers of lines that have
+% footnotes or other insertions.
+% These are the absolute numbers where the corresponding
+% lemmas begin. This list contains one entry for every footnote in the
+% section; one lemma may contribute no footnotes or many footnotes.
+% This list is used by "\add@inserts" within "\do@line", to tell
+% it where to insert notes.
+%
+% \item "\actionlines@list": a list of absolute line numbers at
+% which we are to perform special
+% actions; these actions are specified by the "\actions@list" list
+% defined below.
+%
+% \item "\actions@list": action codes corresponding to the line
+% numbers in "\actionlines@list". These codes tell "EDMAC" what action
+% it's supposed to take at each of these lines. One action, the
+% page-start action, is generated behind the scenes by "EDMAC" itself;
+% the others, for specifying sub-lineation, line-number locking, and
+% line-number alteration, are generated only by explicit commands in
+% your input file. The page-start and line-number-alteration actions
+% require arguments, to specify the new values for the page or line
+% numbers; instead of storing those arguments in another list, we have
+% chosen the action-code values so that they can encode both the action
+% and the argument in these cases. Action codes greater than $-1000$
+% are page-start actions, and the code value is the page number; action
+% codes less than $-5000$ specify line numbers, and the code value is
+% a transformed version of the line number; action codes between these
+% two values specify other actions which require no argument.
+%
+% Here is the full list of action codes and their meanings:
+%
+% Any number greater than $-1000$ is a page-start action: the line number
+% associated with it is the first line on a page, and the action number is
+% the page number. (The cutoff of $-1000$ is chosen because negative
+% page-number values are used by some macro packages; we assume that
+% page-number values less than $-1000$ are not common.)
+% Page-start action codes are added to the list by
+% the "\page@action" macro, which is (indirectly) triggered by the
+% workings of the "\page@start" macro; that macro should always be
+% called in the output routine, just before the page contents are
+% assembled. "EDMAC" calls it in "\pagecontents".
+%
+% The action code $-1001$ specifies the start of sub-lineation: meaning
+% that, starting with the next line, we should be advancing
+% "\subline@num" at each start-of-line command, rather than
+% "\line@num".
+%
+% The action code $-1002$ specifies the end of sub-lineation. At the
+% next start-of-line, we should clear the sub-line counter and start
+% advancing the line number. The action codes for starting and ending
+% sub-lineation are added to the list by the "\sub@action" macro, as
+% called to implement the "\startsub" and "\endsub" macros.
+%
+% The action code $-1003$ specifies the start of line number locking.
+% After the number for the current line is computed, it will remain
+% at that value through the next line that has an action code to end
+% locking.
+%
+% The action code $-1004$ specifies the end of line number locking.
+%
+% The action code $-1005$ specifies the start of sub-line number locking.
+% After the number for the current sub-line is computed, it will remain
+% at that value through the next sub-line that has an action code to end
+% locking.
+%
+% The action code $-1006$ specifies the end of sub-line number locking.
+%
+% The four action codes for line and sub-line number locking are added
+% to the list by the "\do@lockon" and "\do@lockoff" macros, as called
+% to implement the "\startlock" and "\endlock" macros.
+%
+% An action code of $-5000$ or less sets the current visible line
+% number (either the line number or the sub-line number, whichever is
+% currently being advanced) to a specific positive value. The value of
+% the code is $-(5000+n)$, where $n$ is the value (always $\ge 0$)
+% assigned to the current line number. Action codes of this type are
+% added to the list by the "\set@line@action" macro, as called to
+% implement the "\advanceline" and "\setline" macros: this action only
+% occurs when the user has specified some change to the line numbers
+% using those macros. Normally "EDMAC" computes the visible line numbers
+% from the absolute line numbers with reference to the other
+% action codes and the settings they invoke; it doesn't require an
+% entry in the action-code list for every line.
+%
+% Here are the commands to create these lists:
+%
+% \begin{macrocode}
+\list@create{\line@list}
+\list@create{\insertlines@list}
+\list@create{\actionlines@list}
+\list@create{\actions@list}
+% \end{macrocode}
+%
+% \end{itemize}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\page@num}
+% \begin{macro}{\endpage@num}
+% \begin{macro}{\endline@num}
+% \begin{macro}{\endsubline@num}
+% We'll need some counters while we read the line-list,
+% for the page number and the ending page, line, and sub-line numbers.
+% Some of these will be used again later on, when we are acting on the
+% data in our list macros.
+% \begin{macrocode}
+\newcount\page@num
+\newcount\endpage@num
+\newcount\endline@num
+\newcount\endsubline@num
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ifnoteschanged@}
+% \begin{macro}{\noteschanged@true}
+% \begin{macro}{\noteschanged@false}
+% If the number of footnotes in a section is different from what it was
+% during the last run, or if this is the very first time you've run
+% \TeX\
+% on this file, the information from the line-list used to place the
+% notes will be wrong, and some notes will probably be misplaced.
+% When this happens, we prefer
+% to give a single error message for the whole section rather than
+% messages at every point where we notice the problem, because
+% we don't really know where in the section notes were added or removed,
+% and the solution in any case is simply to run \TeX\ two more times;
+% there's no fix needed to the document. The
+% "\ifnoteschanged@" flag is set if such
+% a change in the number of notes is discovered at any point.
+% \begin{macrocode}
+\newif\ifnoteschanged@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Reading the line-list file}
+%
+% \begin{macro}{\read@linelist}
+% \begin{macro}{\@inputcheck}
+% "\read@linelist" is the control sequence
+% that's called by "\beginnumbering"
+% (via "\line@list@stuff") to open and process a
+% line-list file; its argument is the name of the file, which will
+% be opened on stream "\@inputcheck" to check for its existence.
+% The first thing we do is initialize all the lists we just
+% described.\label{readlinelist}
+% \begin{macrocode}
+\newread\@inputcheck
+\def\read@linelist#1{%
+ \list@clear{\line@list}%
+ \list@clear{\insertlines@list}%
+ \list@clear{\actionlines@list}%
+ \list@clear{\actions@list}%
+% \end{macrocode}
+%
+% Try to open the line-list file, as a check on whether it exists.
+% \begin{macrocode}
+ \openin\@inputcheck=#1
+ \ifeof\@inputcheck
+ \edmac@warning{Can't find line-list file #1}%
+ \global\noteschanged@true
+ \else
+ \global\noteschanged@false
+ \closein\@inputcheck
+% \end{macrocode}
+%
+% The file's there. We start a new group and make some special
+% definitions we'll need to process it: it's a sequence of \TeX\
+% commands, but they require a few special settings. We make [ and
+% ] become grouping characters: they're used that way in the
+% line-list file, because we need to write them out one at a time
+% rather than in balanced pairs, and it's easier to just use
+% something other than real braces. @ must become a letter, since
+% this is run in the ordinary \TeX\ context. We ignore carriage
+% returns, since if we're in horizontal mode they can get
+% interpreted as spaces to be printed.
+%
+% \begin{macrocode}
+ \begingroup
+ \catcode`\[=1 \catcode`\]=2
+ \makeatletter \catcode`\^^M=9
+% \end{macrocode}
+%
+% Our line, page, and line-locking counters were already zeroed
+% by "\line@list@stuff" if this is being called from within
+% "\beginnumbering"; sub-lineation will be turned off as well
+% in that case. On the other hand,
+% if this is being called from "\resumenumbering", those things
+% should still have the values they had when "\pausenumbering"
+% was executed.
+%
+% Now, after these preliminaries, we start interpreting the file.
+%
+% \begin{macrocode}
+ \input #1
+ \endgroup
+ \fi
+% \end{macrocode}
+%
+% When the "\input" is done, we're all through with the
+% line-list file. All the information we needed
+% from it will now be encoded in our list macros.
+%
+% Finally, we
+% initialize the "\next@actionline" and "\next@action" macros,
+% which specify where and what the next action to be taken is.
+% \begin{macrocode}
+ \global\page@num=-1
+ \ifx\actionlines@list\empty
+ \gdef\next@actionline{1000000}%
+ \else
+ \gl@p\actionlines@list\to\next@actionline
+ \gl@p\actions@list\to\next@action
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% This version of "\read@linelist" creates list macros
+% containing data for the entire section, so they could get rather
+% large. It would be no more difficult to read the line-list file
+% incrementally rather than all at once: we could read, at the
+% start of each paragraph, only the commands relating to that
+% paragraph, using "\read". But this would require that we
+% have two line-lists open at once, one for reading, one for
+% writing, and on systems without version numbers we'd have to do
+% some file renaming outside of \TeX{} for that to work. We've
+% retained this slower approach to avoid that sort of hacking
+% about, but have provided the "\pausenumbering" and
+% "\resumenumbering" macros to help you if you run into
+% macro memory limitations (see p.\,\pageref{pause} above).
+%
+% \subsection{Commands within the line-list file}
+%
+% This section defines the commands that can appear within a
+% line-list file. They all have very short names because we are
+% likely to be writing very large numbers of them out. One macro,
+% "\@l", is especially short, since it will be written to the
+% line-list file once for every line of text in a numbered section.
+% (Another of these commands, "\@lab", will be introduced in a
+% later section, among the cross-referencing commands it is
+% associated with.)
+%
+% When these commands modify the various page and line counters,
+% they deliberately do not say "\global". This is because we
+% want them to affect only the counter values within the current
+% group when nested calls of "\@ref" occur. (The code assumes
+% throughout that the value of "\globaldefs" is zero.)
+%
+% The macros with "action" in their names contain all the code
+% that modifies the action-code list: again, this is so that they
+% can be turned off easily for nested calls of "\@ref".
+%
+% \begin{macro}{\@l}
+% "\@l" does everything related to the start of a
+% new line of numbered text.
+%
+% First increment the absolute line-number, and perform
+% deferred actions relating to page starts and sub-lines.
+% \begin{macrocode}
+\def\@l{\advance\absline@num by 1
+ \ifx\next@page@num\relax \else
+ \page@action
+ \let\next@page@num=\relax
+ \fi
+ \ifx\sub@change\relax \else
+ \ifnum\sub@change>0
+ \sublines@true
+ \else
+ \sublines@false
+ \fi
+ \sub@action
+ \let\sub@change=\relax
+ \fi
+% \end{macrocode}
+%
+% Fix the lock counters, if necessary. A value of $1$ is advanced to
+% $2$; $3$ advances to $0$; other values are unchanged.
+% \begin{macrocode}
+ \ifcase\@lock
+ \or
+ \@lock=2
+ \or \or
+ \@lock=0
+ \fi
+ \ifcase\sub@lock
+ \or
+ \sub@lock=2
+ \or \or
+ \sub@lock=0
+ \fi
+% \end{macrocode}
+%
+% Now advance the visible line number, unless it's been locked.
+% \begin{macrocode}
+ \ifsublines@
+ \ifnum\sub@lock<2
+ \advance\subline@num by 1
+ \fi
+ \else
+ \ifnum\@lock<2
+ \advance\line@num by 1 \subline@num=0
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@page}
+% "\@page" marks the start of a new output page; its argument is
+% the number of that page.
+%
+% First we reset the visible line numbers, if we're numbering by page,
+% and store the page number itself in a counter.
+% \begin{macrocode}
+\def\@page#1{\ifbypage@
+ \line@num=0 \subline@num=0
+ \fi
+ \page@num=#1
+% \end{macrocode}
+%
+% And we set a flag that tells "\@l" that a new page number is
+% to be set, because other associated actions shouldn't occur until the
+% next line-start occurs.
+% \begin{macrocode}
+ \def\next@page@num{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sub@on}
+% \begin{macro}{\sub@off}
+% The "\sub@on" and "\sub@off" macros
+% turn sub-lineation on and off\/: but not directly, since such changes
+% don't really take effect until the next line of text. Instead
+% they set a flag that notifies "\@l" of the necessary action.
+% \begin{macrocode}
+\def\sub@on{\ifsublines@
+ \let\sub@change=\relax
+ \else
+ \def\sub@change{1}%
+ \fi}
+\def\sub@off{\ifsublines@
+ \def\sub@change{-1}%
+ \else
+ \let\sub@change=\relax
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@adv}
+% The "\@adv" macro advances
+% the current visible line number by the amount specified as
+% its argument. This is used to implement "\advanceline".
+% \begin{macrocode}
+\def\@adv#1{\ifsublines@
+ \advance\subline@num by #1
+ \ifnum\subline@num<0
+ \edmac@warning{\string\advanceline\space produced
+ a sub-line number less than zero.}%
+ \subline@num=0
+ \fi
+ \else
+ \advance\line@num by #1
+ \ifnum\line@num<0
+ \edmac@warning{\string\advanceline\space produced
+ a line number less than zero.}%
+ \line@num=0
+ \fi
+ \fi
+ \set@line@action}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@set}
+% The "\@set" macro sets
+% the current visible line number to the value specified as
+% its argument. This is used to implement "\setline".
+% \begin{macrocode}
+\def\@set#1{\ifsublines@
+ \subline@num=#1
+ \else
+ \line@num=#1
+ \fi
+ \set@line@action}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\page@action}
+% "\page@action"
+% adds an entry to the action-code list to change the page number.
+% \begin{macrocode}
+\def\page@action{%
+ \xright@appenditem{\the\absline@num}\to\actionlines@list
+ \xright@appenditem{\next@page@num}\to\actions@list}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\set@line@action}
+% "\set@line@action" adds an entry to the action-code
+% list to change the visible line number.
+% \begin{macrocode}
+\def\set@line@action{%
+ \xright@appenditem{\the\absline@num}\to\actionlines@list
+ \ifsublines@
+ \@tempcnta=-\subline@num
+ \else
+ \@tempcnta=-\line@num
+ \fi
+ \advance\@tempcnta by -5000
+ \xright@appenditem{\the\@tempcnta}\to\actions@list}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sub@action}
+% "\sub@action"
+% adds an entry to the action-code list to turn sub-lineation on or
+% off, according to the current value of the "\ifsublines@" flag.
+% \begin{macrocode}
+\def\sub@action{%
+ \xright@appenditem{\the\absline@num}\to\actionlines@list
+ \ifsublines@
+ \xright@appenditem{-1001}\to\actions@list
+ \else
+ \xright@appenditem{-1002}\to\actions@list
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lock@on}
+% \begin{macro}{\do@lockon}
+% "\lock@on"
+% adds an entry to the action-code list to turn line number
+% locking on. The current setting of the sub-lineation flag tells us
+% whether this applies to line numbers or sub-line numbers.
+%
+% Adding commands to the action list is slow, and it's very often the
+% case that a lock-on command is immediately followed by a lock-off
+% command in the line-list file, and therefore really does nothing.
+% We use a look-ahead scheme here to detect such pairs, and add nothing
+% to the line-list in those cases.
+% \begin{macrocode}
+\def\lock@on{\futurelet\next\do@lockon}
+\def\do@lockon{%
+ \ifx\next\lock@off
+ \global\let\lock@off=\skip@lockoff
+ \else
+ \xright@appenditem{\the\absline@num}\to\actionlines@list
+ \ifsublines@
+ \xright@appenditem{-1005}\to\actions@list
+ \ifcase\sub@lock
+ \sub@lock=1
+ \else
+ \sub@lock=0
+ \fi
+ \else
+ \xright@appenditem{-1003}\to\actions@list
+ \ifcase\@lock
+ \@lock=1
+ \else
+ \@lock=0
+ \fi
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lock@off}
+% \begin{macro}{\do@lockoff}
+% \begin{macro}{\skip@lockoff}
+% "\lock@off" adds an entry to the action-code list
+% to turn line number locking off.
+% \begin{macrocode}
+\def\do@lockoff{%
+ \xright@appenditem{\the\absline@num}\to\actionlines@list
+ \ifsublines@
+ \xright@appenditem{-1006}\to\actions@list
+ \ifnum\sub@lock=2
+ \sub@lock=3
+ \else
+ \sub@lock=0
+ \fi
+ \else
+ \xright@appenditem{-1004}\to\actions@list
+ \ifnum\@lock=2
+ \@lock=3
+ \else
+ \@lock=0
+ \fi
+ \fi}
+\def\skip@lockoff{\global\let\lock@off=\do@lockoff}
+\global\let\lock@off=\do@lockoff
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@ref}
+% \begin{macro}{\insert@count}
+% "\@ref"
+% marks the start of a passage, for creation of a footnote reference.
+% It takes two arguments:
+% \begin{itemize}\addtolength{\itemsep}{-1ex}
+% \item "#1", the number of entries to add to "\insertlines@list"
+% for this reference. \SpecialMainIndex{\insert@count}
+% This value, here and within "\text",
+% which computes it and writes it to the line-list file,
+% will be stored in the "\insert@count" counter.
+% \begin{macrocode}
+\newcount\insert@count
+% \end{macrocode}
+%
+% \item "#2", a sequence of other line-list-file commands, executed to
+% determine the ending line-number. (This may also include other
+% "\@ref" commands, corresponding to uses of "\text"
+% within the first argument of another instance of "\text".)
+% \end{itemize}
+%
+% \begin{macro}{\dummy@ref}
+% When nesting of "\@ref" commands does occur, it's necessary to
+% temporarily redefine "\@ref" within "\@ref", so that we're only
+% doing one of these at a time.
+% \begin{macrocode}
+\def\dummy@ref#1#2{#2}
+% \end{macrocode}
+% \end{macro}
+%
+% The first thing "\@ref" itself does is to add the specified number
+% of items to the "\insertlines@list" list.
+% \begin{macrocode}
+\def\@ref#1#2{%
+ \global\insert@count=#1
+ \loop\ifnum\insert@count>0
+ \xright@appenditem{\the\absline@num}\to\insertlines@list
+ \global\advance\insert@count by -1
+ \repeat
+% \end{macrocode}
+%
+% Next, process the second argument to determine the page
+% and line numbers for the end of this lemma.
+% We temporarily equate "\@ref" to a different macro that just executes
+% its argument, so that nested "\@ref" commands are just skipped
+% this time. Some other macros need to be temporarily redefined to
+% suppress their action.
+% \begin{macrocode}
+ \begingroup
+ \let\@ref=\dummy@ref
+ \let\page@action=\relax
+ \let\sub@action=\relax
+ \let\set@line@action=\relax
+ \let\@lab=\relax
+ #2
+ \global\endpage@num=\page@num
+ \global\endline@num=\line@num
+ \global\endsubline@num=\subline@num
+ \endgroup
+% \end{macrocode}
+%
+% Now store all the information about the location of the lemma's
+% start and end in "\line@list".
+% \begin{macrocode}
+ \xright@appenditem%
+ {\the\page@num|\the\line@num|%
+ \ifsublines@ \the\subline@num \else 0\fi|%
+ \the\endpage@num|\the\endline@num|%
+ \ifsublines@ \the\endsubline@num \else 0\fi}\to\line@list
+% \end{macrocode}
+%
+% Finally, execute the second argument of "\@ref" again,
+% to perform for real all the commands within it.
+% \begin{macrocode}
+ #2}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Writing to the line-list file}
+%
+% We've now defined all the counters, lists, and commands involved in
+% reading the line-list file at the start of a section. Now we'll
+% cover the commands that "EDMAC" uses within the text of a
+% section to write commands out to the line-list.
+%
+% \begin{macro}{\linenum@out}
+% The file will be opened on output stream "\linenum@out".
+% \begin{macrocode}
+\newwrite\linenum@out
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\iffirst@linenum@out@}
+% \begin{macro}{\first@linenum@out@true}
+% \begin{macro}{\first@linenum@out@false}
+% Once any file is opened on this stream, we keep it open forever, or
+% else switch to another file that we keep open. The reason is that
+% we want the output routine to write the page number for every page
+% to this file; otherwise we'd have to write it at the start of
+% every line.
+% But it's not very easy for the output routine to tell whether an
+% output stream is open or not. There's no way to test the status of
+% a particular output stream directly, and
+% the asynchronous nature of output routines makes the
+% status hard to determine by other means.
+%
+% We can manage pretty well by means of the "\iffirst@linenum@out@"
+% flag; its inelegant name suggests the nature of the problem that
+% made its creation necessary. It's set
+% to be "true" before any "\linenum@out" file is opened. When such a file
+% is opened for the first time, it's done using "\immediate", so that
+% it will at once be safe for the output routine to write to it; we then
+% set this flag to "false".
+% \begin{macrocode}
+\newif\iffirst@linenum@out@
+\first@linenum@out@true
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\line@list@stuff}
+% The "\line@list@stuff" macro, which
+% is called by "\beginnumbering", performs
+% all the line-list operations needed at the start of a section.
+% Its argument is the name of the line-list file.
+% \begin{macrocode}
+\def\line@list@stuff#1{%
+% \end{macrocode}
+%
+% First, use the commands of the previous section to interpret the
+% line-list file from the last run.
+% \begin{macrocode}
+ \read@linelist{#1}%
+% \end{macrocode}
+%
+% Now close the current output line-list file, if any, and open a new one.
+% The first time we open a line-list file for output, we do it using
+% "\immediate", and clear the "\iffirst@linenum@out@" flag.
+% \begin{macrocode}
+ \iffirst@linenum@out@
+ \immediate\closeout\linenum@out
+ \global\first@linenum@out@false
+ \immediate\openout\linenum@out=#1
+ \else
+% \end{macrocode}
+% If we get here, then this is
+% not the first line-list we've seen, so we
+% don't open or close the files immediately. We also need to insert
+% a "\@page" command, since this might begin in the middle of
+% a page.
+% \begin{macrocode}
+ \closeout\linenum@out
+ \openout\linenum@out=#1
+ \page@start
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\new@line}
+% The "\new@line" macro sends the "\@l" command to the line-list
+% file, to mark the start of a new text line.
+% \begin{macrocode}
+\def\new@line{\write\linenum@out{\string\@l}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\flag@start}
+% \begin{macro}{\flag@end}
+% We enclose a lemma marked by "\text" in
+% "\flag@start" and "\flag@end": these send the "\@ref"
+% command to the line-list file. "\text" is responsible for
+% setting the value of "\insert@count" appropriately; it
+% actually gets done by the various footnote macros.
+% \begin{macrocode}
+\def\flag@start{%
+ \edef\next{\write\linenum@out{%
+ \string\@ref[\the\insert@count][}}%
+ \next}
+\def\flag@end{\write\linenum@out{]}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\page@start}
+% "\page@start" writes a command to the line-list
+% file noting the current page number.
+% When used within an output routine, this should be called so as to place
+% its "\write" within the box that gets shipped out, and as close to
+% the top of that box as possible.
+% \begin{macrocode}
+\def\page@start{%
+ \iffirst@linenum@out@ \else
+ \write\linenum@out{\string\@page[\the\pageno]}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\startsub}
+% \begin{macro}{\endsub}
+% "\startsub" and "\endsub"
+% turn sub-lineation on and off, by writing
+% appropriate instructions to the line-list file. When
+% sub-lineation is in effect, the line number counter is frozen and
+% the sub-line counter advances instead. If one of these commands
+% appears in the middle of a line, it doesn't take effect until the
+% next line; in other words, a line is counted as a line or
+% sub-line depending on what it started out as, even if that
+% changes in the middle.
+%
+% We tinker with "\lastskip" because a command of either sort
+% really needs to be attached to the last word preceding the change, not
+% the first word that follows the change. This is because sub-lineation
+% will often turn on and off in mid-line---stage directions, for example,
+% often are mixed with dialogue in that way---and when a line is mixed
+% we want to label it using the system that was in effect at its start.
+% But when sub-lineation begins at the very start of a line we have a
+% problem, if we don't put in this code.
+% \begin{macrocode}
+\def\startsub{\dimen0\lastskip
+ \ifdim\dimen0>0pt \unskip \fi
+ \write\linenum@out{\string\sub@on}%
+ \ifdim\dimen0>0pt \hskip\dimen0 \fi}
+\def\endsub{\dimen0\lastskip
+ \ifdim\dimen0>0pt \unskip \fi
+ \write\linenum@out{\string\sub@off}%
+ \ifdim\dimen0>0pt \hskip\dimen0 \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\advanceline}
+% You can use "\advanceline"
+% in running text to advance the current visible
+% line-number by a specified value, positive or negative.
+% \begin{macrocode}
+\def\advanceline#1{\write\linenum@out{\string\@adv[#1]}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setline}
+% You can use "\setline"
+% in running text to set the current visible
+% line-number to a specified positive value.
+% \begin{macrocode}
+\def\setline#1{%
+ \ifnum#1<0
+ \edmac@warning{Bad setline argument.}%
+ \else
+ \write\linenum@out{\string\@set[#1]}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\startlock}
+% \begin{macro}{\endlock}
+% You can use "\startlock" or "\endlock"
+% in running text to start or end line number locking at
+% the current line. They decide whether line numbers or sub-line numbers
+% are affected, depending on the current state of the sub-lineation flags.
+% \begin{macrocode}
+\def\startlock{\write\linenum@out{\string\lock@on}}
+\def\endlock{\write\linenum@out{\string\lock@off}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Marking text for notes}
+% \label{text}\relax
+%
+% The "\text" macro is used to create all footnotes and endnotes,
+% as well as to print the portion of the main text to which a given note
+% or notes is keyed. The idea is to have that lemma appear only once in
+% the ".tex" file: all instances of it in the main text and in the
+% notes are copied from that one appearance.
+%
+% "\text" requires two arguments. At any point within numbered
+% text, you use it by saying:
+% \begin{verbatim}
+% \text{#1}{#2}/
+% \end{verbatim}
+% where
+% \begin{itemize}\addtolength{\itemsep}{-1ex}
+% \item "#1" is the piece of the main text being glossed;
+% it gets added to the
+% main text, and is also used as a lemma for notes to it.
+%
+% \item "#2" is a series of subsidiary macros that generate
+% various kinds of notes. The "/" after "#2" {\em must\/} appear:
+% it marks the end of the macro. ({\em The \TeX{}book},
+% p.\,204, points out that when
+% additional text to be matched follows the arguments like this, spaces
+% following the macro are not skipped, which is very desirable since
+% this macro will never be used except within text. Having an
+% explicit terminator also helps keep things straight when nested
+% calls to "\text" are used.) Braces around
+% "#2" are optional.
+% \end{itemize}
+%
+% The "\text" macro may be used (somewhat) recursively; that
+% is, "\text" may be used within its own first argument. The
+% code would be much simpler without this feature, but nested notes
+% will commonly be necessary: it's quite likely that we'll have an
+% explanatory note for a long passage and notes on variants for
+% individual words within that passage. The situation we can't
+% handle is overlapping notes that aren't nested: for example, one
+% note covering lines 10--15, and another covering 12--18. You can
+% handle such cases by using the "\lemma" and "\linenum"
+% macros within "#2": they alter the copy of the lemma and the
+% line numbers that are passed to the notes, and hence allow you to
+% overcome any limitations of this system, albeit with extra
+% effort.
+%
+% The recursive operation of "\text" will fail if you try to use a copy
+% that is called something other than "\text". In order to handle
+% recursion, "\text" needs to redefine its own definition temporarily
+% at one point, and that doesn't work if the macro you are calling is
+% not actually named "\text". There's no problem as long as "\text"
+% is not invoked in the first argument. If you want to call "\text"
+% something else, it is best to create instead a macro that expands
+% to an invocation of "\text", rather than copying "\text" and giving
+% it a new name; otherwise you will need to add an appropriate
+% definition for your new macro to "\morenoexpands".
+%
+% Side effects of our line-numbering code make it impossible to use
+% the usual footnote macros directly within a paragraph whose lines are
+% numbered (see comments to
+% "\do@line", p.\,\pageref{doline}).
+% Instead, the appropriate note-generating command
+% is appended to the list macro "\inserts@list", and when "\pend"
+% completes the paragraph it inserts all the notes at the proper places.
+%
+% Note that we don't provide previous-note information, although it's
+% often wanted; your own macros must handle that. We can't do it
+% correctly without keeping track of what kind of notes have gone past:
+% it's not just a matter of remembering the line numbers associated with
+% the previous invocation of "\text", because that might have been for
+% a different kind of note. It is preferable for your footnote macros
+% to store and recall this kind of information if they need it.
+%
+% \label{parallel}An example where some ``memory'' of line numbers
+% might be required is where there are several variant readings
+% per line of text, and you do not wish the line number to be repeated
+% for each lemma in the notes. After the first occurrence of the line
+% number, you might want the symbol ``$\parallel$'' instead of further
+% occurrences, for instance. This can easily be done by a macro like
+% "\printlines", if it saves the last value of "\@nums" that {\em it\/}
+% saw, and then performs a simple conditional test to see whether to print
+% a number or a~``$\parallel$'' (see p.\,\pageref{multinotes} for an
+% example of how to do this).
+%
+% \subsection{{\tt \protect\bslash text} itself}
+%
+% \begin{macro}{\end@lemmas}
+% The various note-generating macros might want to request that
+% commands be executed not at once, but in close connection with the
+% start or end of the lemma. For example, footnote numbers in the text
+% should be connected to the end of the lemma; or, instead of a single
+% macro to create a note listing variants, you might want to use
+% several macros in series to create individual variants, which would
+% each add information to a private macro or token register, which in
+% turn would be formatted and output when all of "#2" for the lemma
+% has been read.
+%
+% To accomodate this, we provide a list macro
+% to which macros may add commands that should subsequently
+% be executed at the end of the lemma when that lemma is added
+% to the text of the paragraph. A macro should add its contribution to
+% "\end@lemmas" by using "\xleft@appenditem".
+% (Anything that needs to be done at
+% the {\em start\/} of the lemma may be handled using "\aftergroup", since
+% the commands specified within "\text"'s second argument are
+% executed within a group that ends just before the lemma is added to
+% the main text.)
+%
+% "\end@lemmas" is intended for the few things that need to be
+% associated with the end of the lemma, like footnote numbers. Such
+% numbers are not implemented in the current version, and indeed
+% no use is currently made of "\end@lemmas" or of the "\aftergroup"
+% trick. The general
+% approach would be to define a macro to be used within the second
+% argument of "\text" that would add the appropriate command to
+% "\end@lemmas".
+%
+% Commands that are added to this list should always take care
+% not to do anything that adds possible line-breaks to the output;
+% otherwise line numbering could be thrown off.
+% \begin{macrocode}
+\list@create{\end@lemmas}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dummy@text}
+% We now need to define a number of macros that allow us to weed out
+% nested instances of "\text", and other problematic macros, from
+% our lemma. This is similar to what we did in reading the line-list
+% file using "\dummy@ref" and various redefinitions---and that's
+% because nested "\text" macros create nested "\@ref" entries
+% in the line-list file.
+%
+% Here's a macro that takes the same arguments as
+% "\text" but merely returns the first argument and ignores
+% the second.
+% \begin{macrocode}
+\long\def\dummy@text#1#2/{#1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@gobble}
+% We're going to need another macro that takes one argument and ignores
+% it entirely. This one is identical to the \LaTeX{} macro of the same
+% name.
+% \begin{macrocode}
+\def\@gobble#1{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\no@expands}
+% \begin{macro}{\morenoexpands}
+% We need to turn off macro expansion for certain sorts of macros we're
+% likely to see within the lemma and within the notes.
+%
+% The first class is font-changing macros. We suppress expansion for
+% them by letting them become equal to zero.\footnote{Since ``control
+% sequences equivalent to characters are not expandable''---{\em The
+% \TeX book\/}, answer to Exercise 20.14.} This is done because we want to
+% pass into our notes the generic commands to change to roman or
+% whatever, and not their expansions that will ask for a particular style at
+% a specified size. The notes may well be in a smaller font, so the
+% command should be expanded later, when the note's environment is in
+% effect.
+%
+% A second sort to turn off includes a few of the accent macros.
+% Most are not a problem: an accent that's expanded to an "\accent"
+% command may be harder to read but it works just the same. The
+% ones that cause problems are: those that use alignments---\TeX\
+% seems to get confused about the difference between alignment
+% parameters and macro parameters; those that use temporary control
+% sequences; and those that look carefully at what the current font
+% is.
+%
+% (The "\copyright" macro defined in \PlainTeX\ has this sort of
+% problem as well, but isn't used enough to bother with. That macro,
+% and any other that causes trouble, will get by all right if you put
+% a "\noexpand" in front of it in your file---or a "\protect" if
+% you're using NFSS.)
+%
+% We also need to eliminate all "EDMAC" macros like "\label" and
+% "\setline" that write things to auxiliary files: that writing
+% should be done only once. And we make
+% "\text" itself, if it appears within its own
+% argument, do nothing but copy its first argument.
+%
+% Finally, we execute "\morenoexpands". The version of
+% "\morenoexpands" defined here does nothing; but you may define
+% a version of your own when you need to add more expansion
+% suppressions as needed with your macros. That makes it possible
+% to make such additions without needing to copy or modify the
+% standard "EDMAC" code. If you define your own
+% "\morenoexpands", you must be very careful about spaces: if the
+% macro adds any spaces to the text when it runs, extra space
+% will appear in the main text when "\text" is used.
+%
+% (A related problem, not addressed by these two macros,
+% is that of characters whose category code is changed by any
+% the macros used in the arguments to "\text". Since the
+% category codes are set when the arguments are scanned, macros
+% that depend on changing them will not work. We have most often
+% encountered this with characters that are made ``active'' within
+% text in some, but not all, of the languages used within the document.
+% One way around the problem, if it takes this form,
+% is to ensure that those characters are {\em always\/} active; within
+% languages that make no special use of them, their associated
+% control sequences should simply return the proper character.)
+% \begin{macrocode}
+\def\no@expands{\let\rm=0\let\it=0\let\sl=0\let\bf=0\let\tt=0%
+ \let\b=0\let\c=0\let\d=0\let\t=0%
+ \let\select@@lemmafont=0%
+ \def\protect{\noexpand\protect\noexpand}%
+ \let\startsub=\relax \let\endsub=\relax
+ \let\startlock=\relax \let\endlock=\relax
+ \let\label=\@gobble \let\pageref=\@gobble
+ \let\lineref=\@gobble \let\sublineref=\@gobble
+ \let\setline=\@gobble \let\advanceline=\@gobble
+ \let\text=\dummy@text
+ \morenoexpands}
+\let\morenoexpands=\relax
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\text}
+% Now we begin "\text" itself. The definition requires a "/" after
+% the arguments: this eliminates the possibility of problems about
+% knowing where "#2" ends. This also changes the handling of spaces
+% following an invocation of the macro: normally such spaces are
+% skipped, but in this case they're significant because "#2" is
+% a ``delimited parameter''. Since "\text" is always used in running
+% text, it seems more appropriate to pay attention to spaces than to
+% skip them.
+%
+% When executed, "\text" first ensures that we're in
+% horizontal mode.
+% \begin{macrocode}
+\long\def\text#1#2/{\leavevmode
+% \end{macrocode}
+%
+% \begin{macro}{\@tag}
+% Our normal lemma is just argument "#1"; but that argument could have
+% further invocations of "\text" within it. We get a copy of the
+% lemma without any "\text" macros within it by temporarily redefining
+% "\text" to just copy its first argument and ignore the other,
+% and then expand "#1" into "\@tag", our lemma.
+%
+% This is done within a group that starts here, in order to get the
+% original "\text" restored; within this group we've also turned
+% off the expansion of those control sequences commonly found within text
+% that can cause trouble for us.
+% \begin{macrocode}
+ \begingroup
+ \no@expands
+ \xdef\@tag{#1}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@nums}
+% \label{nums}
+% Prepare more data for the benefit of note-generating macros: the line
+% references and font specifier for this lemma go to "\@nums".
+% \begin{macrocode}
+ \set@line
+% \end{macrocode}
+% \end{macro}
+%
+% "\insert@count" will be altered by the note-generating macros:
+% it counts the number of deferred footnotes or other insertions
+% generated by this instance of "\text".
+% \begin{macrocode}
+ \global\insert@count=0
+% \end{macrocode}
+%
+% Now process the note-generating macros in argument "#2"
+% (i.e., "\Afootnote", "\lemma", etc.). "\ignorespaces" is here to
+% skip over any spaces that might appear at the start of "#2";
+% otherwise they wind up in the main text. Footnote and other
+% macros that are used within "#2" should all end with
+% "\ignorespaces" as well, to skip any spaces between macros when
+% several are used in series.
+% \begin{macrocode}
+ \ignorespaces #2\relax
+% \end{macrocode}
+%
+% Finally, we're ready to admit the first argument into the current
+% paragraph.
+%
+% It's important that we generate and output all the notes for this
+% chunk of text {\em before} putting the text into the paragraph: notes
+% that are referenced by line number should generally be tied to the
+% start of the passage they gloss, not the end. That should all be done
+% within the expansion of "#2" above, or in "\aftergroup"
+% commands within that expansion.
+% \begin{macrocode}
+ \flag@start
+ \endgroup
+ #1%
+% \end{macrocode}
+%
+% Finally, we add any insertions that are
+% associated with the {\em end\/} of
+% the lemma. Footnotes that are identified by symbols rather than by
+% where the lemma begins in the main text need to be done here, and
+% not above.
+%
+% \begin{macrocode}
+ \ifx\end@lemmas\empty \else
+ \gl@p\end@lemmas\to\x@lemma
+ \x@lemma
+ \global\let\x@lemma=\relax
+ \fi
+ \flag@end}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\set@line}
+% The "\set@line" macro
+% is called by "\text" to put the line-reference field and
+% font specifier for the current block of text into "\@nums".
+%
+% One instance of "\text" may generate several notes, or it
+% may generate none---it's legitimate for argument "#2" to "\text" to
+% be empty. But "\flag@start" and "\flag@end" induce the generation of
+% a single entry in "\line@list" during the next run, and it's vital
+% to also remove one and only one "\line@list" entry here.
+% \begin{macrocode}
+\def\set@line{%
+% \end{macrocode}
+%
+% If no more lines are listed in "\line@list", something's
+% wrong---probably just some change in the input. We set all the numbers
+% to zeros, following an old publishing convention for numerical
+% references that haven't yet been resolved.
+% \begin{macrocode}
+ \ifx\line@list\empty
+ \global\noteschanged@true
+ \xdef\@nums{000|000|000|000|000|000|\edfont@info}%
+% \end{macrocode}
+%
+% All's well; our reference is there.
+% \begin{macrocode}
+ \else
+ \gl@p\line@list\to\@tempb
+ \xdef\@nums{\@tempb|\edfont@info}%
+ \global\let\@tempb=\undefined
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\edfont@info}
+% The macro "\edfont@info" returns coded information about the
+% current font; the coding depends on the font selection scheme
+% in use. See section~\ref{fontcode} for more on font selection
+% schemes.
+%
+% \begin{macrocode}
+\ifx\selectfont\undefined % we're using Plain fonts
+ \def\edfont@info{\the\fam}
+\else % we're using NFSS
+ \def\edfont@info{\f@encoding/\f@family/\f@series/\f@shape}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Substitute lemma}
+%
+% \begin{macro}{\lemma}
+% The "\lemma" macro allows you to change the lemma
+% that's passed on to the notes.
+% \begin{macrocode}
+\def\lemma#1{\xdef\@tag{#1}\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Substitute line numbers}
+%
+% \begin{macro}{\linenum}
+% \label{linenumdef}\relax
+% The "\linenum" macro can change any or all of
+% the page and line numbers that are
+% passed on to the notes.
+%
+% As argument "\linenum" takes a set of seven parameters
+% separated by vertical bars, in the format used internally for
+% "\@nums" (see p.\,\pageref{linenumbers}): the starting page,
+% line, and sub-line numbers, followed by the ending page, line, and
+% sub-line numbers, and then the font specifier for the lemma.
+% However, you can omit any parameters you don't want to change, and
+% you can omit a string of vertical bars at the end of the
+% argument. Hence "\linenum{18|4|0|18|7|1|0}" is an invocation
+% that changes all the parameters, but "\linenum{|3}" only
+% changes the starting line number, and leaves the rest unaltered.
+%
+% We use "\\" as an internal separator for the macro parameters.
+% \begin{macrocode}
+\def\linenum#1{%
+ \xdef\@tempa{#1|||||||\noexpand\\\@nums}%
+ \global\let\@nums=\empty
+ \expandafter\line@set\@tempa|\\\ignorespaces}
+% \end{macrocode}
+%
+% \begin{macro}{\line@set}
+% "\linenum" calls "\line@set" to do the actual work; it
+% looks at the first number in the argument to "\linenum",
+% sets the corresponding value in "\@nums", and then calls
+% itself to process the next number in the "\linenum"
+% argument, if there are more numbers in "\@nums" to process.
+% \begin{macrocode}
+\def\line@set#1|#2\\#3|#4\\{%
+ \gdef\@tempb{#1}%
+ \ifx\@tempb\empty
+ \@add{#3}%
+ \else
+ \@add{#1}%
+ \fi
+ \gdef\@tempb{#4}%
+ \ifx\@tempb\empty\else
+ \@add{|}\line@set#2\\#4\\%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@add}
+% "\line@set" uses "\@add" to tack numbers or vertical bars
+% onto the right hand end of "\@nums".
+% \begin{macrocode}
+\def\@add#1{\xdef\@nums{\@nums#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Paragraph decomposition and reassembly}
+% \label{paragraph}\relax
+%
+% In order to be able to count the lines of text and affix line
+% numbers, we add an extra stage of processing for each paragraph.
+% We send the paragraph into a box
+% register, rather than straight onto the vertical list, and when
+% the paragraph ends we
+% slice the paragraph into its component lines; to each line we
+% add any notes or line numbers, add a command to write to the
+% line-list, and then at last send the line to the vertical list.
+% This section contains all the code for this processing.
+%
+% \subsection{Boxes, counters, {\tt\protect\bslash pstart}
+% and {\tt\protect\bslash pend}}
+%
+% \begin{macro}{\raw@text}
+% \begin{macro}{\ifnumberedpar@}
+% \begin{macro}{\numberedpar@true}
+% \begin{macro}{\numberedpar@false}
+% \begin{macro}{\num@lines}
+% \begin{macro}{\one@line}
+% \begin{macro}{\par@line}
+% Here are numbers and flags that are used internally in the course
+% of the paragraph decomposition.
+%
+% When we first form the paragraph, it goes into a box register,
+% "\raw@text", instead of onto the current vertical list.
+% The "\ifnumberedpar@" flag will be "true" while a paragraph is
+% being processed in that way.
+% "\num@lines" will store the number of lines in the paragraph
+% when it's complete. When we chop it up into lines, each line
+% in turn goes into the
+% "\one@line" register, and "\par@line" will be the number
+% of that line within the paragraph.
+% \begin{macrocode}
+\newbox\raw@text
+\newif\ifnumberedpar@
+\newcount\num@lines
+\newbox\one@line
+\newcount\par@line
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pstart}
+% "\pstart" starts the paragraph by
+% clearing the "\inserts@list" list and other
+% relevant variables, and then arranges for the
+% subsequent text to go into the
+% "\raw@text" box. "\pstart" needs to appear at the start of
+% every paragraph that's to be numbered; the "\autopar" command below
+% may be used to insert these commands automatically.
+%
+% Beware: everything that occurs between "\pstart" and "\pend"
+% is happening within a group; definitions must be global if you want
+% them to survive past the end of the paragraph.
+% \begin{macrocode}
+\def\pstart{\ifnumbering \else
+ \errmessage{\string\pstart\space must be used
+ within a numbered section}%
+ \beginnumbering
+ \fi
+ \ifnumberedpar@
+ \errmessage{\string\pstart\space encountered while another
+ \string\pstart\space was in effect}%
+ \pend
+ \fi
+ \list@clear{\inserts@list}%
+ \global\let\next@insert=\empty
+ \begingroup\normal@pars
+ \global\setbox\raw@text=\vbox\bgroup
+ \numberedpar@true}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pend}
+% "\pend" must be used to end a numbered paragraph.
+%
+% \begin{macrocode}
+\def\pend{\ifnumbering \else
+ \errmessage{\string\pend\space must be used
+ within a numbered section}%
+ \fi
+ \ifnumberedpar@ \else
+ \errmessage{\string\pend\space must follow a \string\pstart}%
+ \fi
+% \end{macrocode}
+% We set all the usual interline penalties to zero and then immediately
+% call "\endgraf" to end the paragraph; this ensures that there'll
+% be no large interline penalties to prevent us from slicing the
+% paragraph into pieces. These penalties revert to the values
+% that you set when the group for the "\vbox" ends. Then we call
+% "\do@line" to slice a line off the top of the
+% paragraph, add a line number and footnotes, and restore it to the page;
+% we keep doing this until there aren't any more lines left.
+% \begin{macrocode}
+ \brokenpenalty=0 \clubpenalty=0
+ \displaywidowpenalty=0 \interlinepenalty=0 \predisplaypenalty=0
+ \postdisplaypenalty=0 \widowpenalty=0
+ \endgraf\global\num@lines=\prevgraf\egroup
+ \global\par@line=0
+ \loop\ifvbox\raw@text
+ \do@line
+ \repeat
+% \end{macrocode}
+% Deal with any leftover notes, and then end the group that was begun
+% in the "\pstart".
+% \begin{macrocode}
+ \flush@notes
+ \endgroup
+ \ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\autopar}
+% In most cases it's only an annoyance to have to label the paragraphs
+% to be numbered with "\pstart" and "\pend". "\autopar" will
+% do that automatically, allowing you to start a paragraph with its
+% first word and no other preliminaries, and to end it with a blank line
+% or a "\par" command. The command should be issued within a
+% group, after "\beginnumbering" has been used to start the
+% numbering; all paragraphs within the group will be affected.
+%
+% A few situations can cause problems. One is a paragraph that begins with
+% a begin-group character or command: "\pstart" will not get invoked
+% until after such a group beginning is processed; as a result the
+% character that ends the group will be mistaken for the end of the
+% "\vbox" that "\pstart" creates, and the rest of the paragraph
+% will not be numbered. Such paragraphs need to be started explicitly
+% using "\indent", "\noindent", or "\leavevmode"---or "\pstart", since
+% you can still include your own "\pstart" and "\pend"
+% commands even with "\autopar" on.
+%
+% Prematurely ending the group within which "\autopar" is in
+% effect will cause a similar problem. You must either leave a
+% blank line or use "\par" to end the last paragraph before
+% you end the group.
+%
+% The functioning of this macro is more tricky than the usual
+% "\everypar": we don't want anything to go onto the vertical
+% list at all, so we have to end the paragraph, erase any evidence
+% that it ever existed, and start it again using "\pstart".
+% We remove the paragraph-indentation box using "\lastbox" and
+% save the width, and then skip backwards over the "\parskip"
+% that's been added for this paragraph. Then we start again with
+% "\pstart", restoring the indentation that we saved, and
+% locally change "\par" so that it'll do our "\pend" for us.
+% \begin{macrocode}
+\def\autopar{\ifnumbering \else
+ \errmessage{\string\autopar\space must be used
+ within a numbered section}%
+ \beginnumbering
+ \fi
+ \everypar={\setbox0=\lastbox
+ \endgraf \vskip-\parskip
+ \pstart \noindent \kern\wd0
+ \let\par=\pend}%
+ \ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\normal@pars}
+% We also define a macro which we can rely on to turn off the
+% "\autopar" definitions at various important places, if they
+% are in force. We'll want to do this within footnotes, for
+% example.
+% \begin{macrocode}
+\def\normal@pars{\everypar={}\let\par\endgraf}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Processing one line}
+%
+% \begin{macro}{\do@line}
+% The "\do@line" macro is called by "\pend" to
+% do all the processing for a single line of text.
+% \begin{macrocode}
+\def\do@line{%
+% \end{macrocode}
+%
+% First, pull
+% one line off the top of "\raw@text", which contains the remaining
+% unprocessed lines of the paragraph. "\vbadness" must be cranked up to
+% suppress "Underfull vbox" errors from
+% "\vsplit"; "\splittopskip" will be inserted at the top of
+% "\one@line", so we zero it. (This skip will appear in the final
+% vertical list, just before every "\baselineskip".)
+% \begin{macrocode}
+ {\vbadness=10000 \splittopskip=0pt
+ \global\setbox\one@line=\vsplit\raw@text to\baselineskip}%
+% \end{macrocode}
+%
+% "\one@line" comes out of "\vsplit" as a "vbox";
+% we now convert it to an "hbox".
+%
+% This operation breaks if there's an insert connected to the
+% \label{doline} line. In that case, the content of the "vbox"
+% "\one@line" before this operation is not just an "hbox": it's
+% an "hbox" followed by an insert. After the "\unvbox", the
+% last thing on the vertical list is not the "hbox" but the
+% insert. The result is that our line heads prematurely onto the
+% vertical list---with incorrect interline spacing, because there's
+% still a level of boxing that should be undone---and "\one@line"
+% is the void box, because the last thing on the vertical list
+% wasn't a box. The subsequent code consequently prints a blank
+% line.
+%
+% All this is why insertions need to be kept out of the paragraph
+% until this point; our footnote macros add all insertions to list
+% macros, and the "\add@inserts" macro below puts them onto the
+% vertical list at the proper time.
+% \begin{macrocode}
+ \unvbox\one@line \global\setbox\one@line=\lastbox
+% \end{macrocode}
+%
+% Calculate the line and page number for this line.
+% \begin{macrocode}
+ \getline@num
+% \end{macrocode}
+%
+% Now we'll add the line to the vertical list, with a line
+% number attached if necessary.
+%
+% The "\hfil\hbox to \wd\one@line" is necessary to position a
+% hangindented line correctly: without it, "\one@line" gets
+% stretched out to "\hsize" in width and the indentation
+% disappears. This is because hanging indentation is done by
+% setting a nonzero ``shift'' value for the "hbox" that
+% contains the line within the "vbox", and that shift vanishes, like
+% the penalties, when we slice up the paragraph; one can examine
+% the "\ht" or "\wd" of a box within \TeX{}, but it provides no
+% way of examining the "\shift", though it would be a trivial
+% modification of the \TeX{} program to add that function.
+% ("\parshape"\label{parshape}
+% also works by setting a nonzero shift, but this fix isn't good
+% enough there, because the total width of the lines is also varied
+% in that case; our algorithm will push all the lines of text over
+% to the right margin.)
+%
+% We put the "\new@line" start-of-line marker in the output list at
+% this point too: putting it within the "\hbox" here ensures that
+% it comes before any of the text of the line in the vertical list,
+% but cannot be broken away from it at a page break.
+% \begin{macrocode}
+\hbox to \hsize{\affixline@num{%
+ \hfil\hbox to \wd\one@line{\new@line\unhbox\one@line}}}%
+% \end{macrocode}
+%
+% Now we pull the footnotes and insertions for this line out of the
+% "\inserts@list" list macro and attach them.
+% \begin{macrocode}
+ \add@inserts
+% \end{macrocode}
+%
+% Penalties get stripped off by this slicing process; the following
+% macro puts them back in as the last step.
+% \begin{macrocode}
+ \add@penalties}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Line and page number computation}
+%
+% \begin{macro}{\getline@num}
+% The "\getline@num" macro
+% determines the page and line numbers for the line we're about to
+% send to the vertical list.
+% \begin{macrocode}
+\def\getline@num{%
+ \global\advance\absline@num by 1
+ \do@actions
+ \do@ballast
+ \ifsublines@
+ \ifnum\sub@lock<2
+ \global\advance\subline@num by 1
+ \fi
+ \else
+ \ifnum\@lock<2
+ \global\advance\line@num by 1
+ \global\subline@num=0
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@ballast}
+% \label{do@ballast}\relax
+% The real work in the macro above is done in "\do@actions", but
+% before we plunge into that, let's get "\do@ballast" out of the
+% way. This macro looks to see if there is an action to be
+% performed on the {\em next\/} line, and if it is going to be a
+% page break action, "\do@ballast" decreases the "\ballast@count"
+% counter
+% by the amount of "\ballast". This means, in practice, that when
+% "\add@penalties" assigns penalties at this point, \TeX\ will be
+% given extra encouragement to break the page here (see
+% p.\,\pageref{add@penalties}).
+%
+% \begin{macro}{\ballast}
+% \begin{macro}{\ballast@count}
+% First we set up the required counters; they are initially
+% set to zero, and will remain so unless you say
+% "\ballast="\meta{some figure} in your document.
+% \begin{macrocode}
+\newcount\ballast@count
+\newcount\ballast
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% And here is "\do@ballast" itself. It advances "\absline@num"
+% within the protection of a group to make its check for what
+% happens on the next line.
+% \begin{macrocode}
+\def\do@ballast{\global\ballast@count=0
+ \begingroup
+ \advance\absline@num by 1
+ \ifnum\next@actionline=\absline@num
+ \ifnum\next@action>-1001
+ \global\advance\ballast@count by -\ballast
+ \fi
+ \fi
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@actions}
+% \begin{macro}{\do@actions@next}
+%
+% The "\do@actions" macro
+% looks at the list of actions to take at particular absolute line
+% numbers, and does everything that's specified for the current line.
+%
+% It may call itself recursively, and to do this efficiently (using
+% \TeX's optimization for tail recursion), we define a control-sequence
+% called "\do@actions@next" that is always the last thing that
+% "\do@actions" does. If there could be more actions to process for
+% this line, "\do@actions@next" is set equal to "\do@actions";
+% otherwise it's just "\relax".
+%
+% \begin{macrocode}
+\def\do@actions{%
+ \global\let\do@actions@next=\relax
+ \ifnum\absline@num<\next@actionline\else
+% \end{macrocode}
+%
+% First, page number changes, which will generally be the most common
+% actions. If we're restarting lineation on each page, this is where it
+% happens.
+% \begin{macrocode}
+ \ifnum\next@action>-1001
+ \global\page@num=\next@action
+ \ifbypage@
+ \global\line@num=0 \global\subline@num=0
+ \fi
+% \end{macrocode}
+%
+% Next, we handle
+% commands that change the line-number values. (We subtract $5001$ rather
+% than $5000$ here because the line number is going to be incremented
+% automatically in "\getline@num".)
+% \begin{macrocode}
+ \else
+ \ifnum\next@action<-4999
+ \@tempcnta=-\next@action
+ \advance\@tempcnta by -5001
+ \ifsublines@
+ \global\subline@num=\@tempcnta
+ \else
+ \global\line@num=\@tempcnta
+ \fi
+% \end{macrocode}
+%
+% It's one of the fixed codes. We rescale the value in
+% "\@tempcnta" so that we can use a case statement.
+% \begin{macrocode}
+ \else
+ \@tempcnta=-\next@action
+ \advance\@tempcnta by -1000
+ \ifcase\@tempcnta
+% \end{macrocode}
+%
+% Commands that turn sub-lineation on and off.
+% \begin{macrocode}
+ \or
+ \global\sublines@true
+ \or
+ \global\sublines@false
+% \end{macrocode}
+%
+% Line locking. We ignore these indications when they don't appear
+% at the right times: a start-lock should appear only when locking
+% is entirely off, and an end-lock should only appear when locking is
+% in the ``middle''.
+% \begin{macrocode}
+ \or
+ \ifcase\@lock
+ \global\@lock=1
+ \else
+ \global\@lock=0
+ \fi
+ \or
+ \ifnum\@lock=2
+ \global\@lock=3
+ \else
+ \global\@lock=0
+ \fi
+% \end{macrocode}
+%
+% Sub-line locking. Same comments as for line locking.
+% \begin{macrocode}
+ \or
+ \ifcase\sub@lock
+ \global\sub@lock=1
+ \else
+ \global\sub@lock=0
+ \fi
+ \or
+ \ifnum\sub@lock=2
+ \global\sub@lock=3
+ \else
+ \global\sub@lock=0
+ \fi
+% \end{macrocode}
+%
+% If we get here, some unknown action code has been encountered.
+% \begin{macrocode}
+ \else
+ \edmac@warning{Bad action code,
+ value \next@action.}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+%
+% Now we get information about the next action off the list,
+% and then set "\add@inserts@next" so that we'll
+% call ourself recursively: the next action might also be for this
+% line.
+%
+% There's no warning if we find "\actionlines@list" empty,
+% since that will always happen near the end of the section.
+%
+% \begin{macrocode}
+ \ifx\actionlines@list\empty
+ \gdef\next@actionline{1000000}%
+ \else
+ \gl@p\actionlines@list\to\next@actionline
+ \gl@p\actions@list\to\next@action
+ \global\let\do@actions@next=\do@actions
+ \fi
+ \fi
+% \end{macrocode}
+%
+% Make the recursive call, if necessary.
+%
+% \begin{macrocode}
+\do@actions@next}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Line number printing}
+%
+% \begin{macro}{\affixline@num}
+% "\affixline@num" takes a single argument, a series of
+% commands for printing the line just split off by "\do@line"; it
+% puts that line back on the vertical list, and adds a line number if
+% necessary.
+%
+% To determine whether we need to affix a line number to this line,
+% we compute the following:
+% \begin{tabbing}
+% \quad $m$ \= \kill
+% $n$ \> $= \mbox{\it int\/} ( ( \mbox{\it linenum\/} -
+% \mbox{\it firstlinenum\/} ) /
+% \mbox{\it linenumincrement\/} )$ \\
+% $m$ \> $= \mbox{\it firstlinenum\/} +
+% ( n \times \mbox{\it linenumincrement\/})$
+% \end{tabbing}
+% (where {\it int\/} truncates a real number to an integer).
+% $m$ will be equal to {\it linenum\/} only
+% if we're to paste a number on here.
+% However, the formula breaks down for the first line to number (and any
+% before that), so we check that case separately: if "\line@num" $\le$
+% "\firstlinenum", we compare the two directly instead of making these
+% calculations.
+%
+% We compute, in the scratch counter "\@tempcnta", the number
+% of the next line that should be printed with a number ($m$ in the
+% above discussion), and move the current line number into the
+% counter "\@tempcntb" for comparison.
+%
+% First, the case when we're within a sub-line range.
+% \begin{macrocode}
+\def\affixline@num#1{%
+ \ifsublines@
+ \@tempcntb=\subline@num
+ \ifnum\subline@num>\firstsublinenum
+ \@tempcnta=\subline@num
+ \advance\@tempcnta by-\firstsublinenum
+ \divide\@tempcnta by\sublinenumincrement
+ \multiply\@tempcnta by\sublinenumincrement
+ \advance\@tempcnta by\firstsublinenum
+ \else
+ \@tempcnta=\firstsublinenum
+ \fi
+% \end{macrocode}
+%
+% That takes care of computing the values for comparison, but if line
+% number locking is in effect we have to make a further check. If this
+% check fails, then we disable the line-number display by setting the
+% counters to arbitrary but unequal values.
+% \begin{macrocode}
+ \ifcase\sub@lock
+ \or
+ \ifnum\sublock@disp=1
+ \@tempcntb=0 \@tempcnta=1
+ \fi
+ \or
+ \ifnum\sublock@disp=2 \else
+ \@tempcntb=0 \@tempcnta=1
+ \fi
+ \or
+ \ifnum\sublock@disp=0
+ \@tempcntb=0 \@tempcnta=1
+ \fi
+ \fi
+% \end{macrocode}
+%
+% Now the line number case, which works the same way.
+% \begin{macrocode}
+ \else
+ \@tempcntb=\line@num
+ \ifnum\line@num>\firstlinenum
+ \@tempcnta=\line@num
+ \advance\@tempcnta by-\firstlinenum
+ \divide\@tempcnta by\linenumincrement
+ \multiply\@tempcnta by\linenumincrement
+ \advance\@tempcnta by\firstlinenum
+ \else
+ \@tempcnta=\firstlinenum
+ \fi
+% \end{macrocode}
+%
+% A locking check for sub-lines, just like the version for line
+% numbers above.
+% \begin{macrocode}
+ \ifcase\@lock
+ \or
+ \ifnum\lock@disp=1
+ \@tempcntb=0 \@tempcnta=1
+ \fi
+ \or
+ \ifnum\lock@disp=2 \else
+ \@tempcntb=0 \@tempcnta=1
+ \fi
+ \or
+ \ifnum\lock@disp=0
+ \@tempcntb=0 \@tempcnta=1
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+%
+% The following test is true if we need to print a line number.
+% \begin{macrocode}
+ \ifnum\@tempcnta=\@tempcntb
+% \end{macrocode}
+%
+% If we got here,
+% we're going to print a line number; so now we need to
+% calculate a number that will tell us which side of the page will get
+% the line number. We start from "\line@margin", which asks for
+% one side always if it's less than $2$; and then if the side does
+% depend on the page number, we simply add the page number to this
+% side code---because the values of "\line@margin" have been devised so
+% that this produces a number that's even for left-margin numbers and
+% odd for right-margin numbers.
+% \begin{macrocode}
+ \@tempcntb=\line@margin
+ \ifnum\@tempcntb>1
+ \advance\@tempcntb by\page@num
+ \fi
+% \end{macrocode}
+%
+% Now print the line ("#1") with its page number.
+% \begin{macrocode}
+ \ifodd\@tempcntb
+ #1\rlap{{\rightlinenum}}%
+ \else
+ \llap{{\leftlinenum}}#1%
+ \fi
+ \else
+% \end{macrocode}
+%
+% If no line number is to be appended, we just print the line as is.
+% \begin{macrocode}
+ #1%
+ \fi
+% \end{macrocode}
+%
+% Now fix the lock counters, if necessary. A value of $1$ is advanced to
+% $2$; $3$ advances to $0$; other values are unchanged.
+% \begin{macrocode}
+ \ifcase\@lock
+ \or
+ \global\@lock=2
+ \or \or
+ \global\@lock=0
+ \fi
+ \ifcase\sub@lock
+ \or
+ \global\sub@lock=2
+ \or \or
+ \global\sub@lock=0
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Add insertions to the vertical list}
+%
+% \begin{macro}{\inserts@list}
+% "\inserts@list" is the list macro that contains the inserts that
+% we save up for one paragraph.
+%
+% \begin{macrocode}
+\list@create{\inserts@list}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\add@inserts}
+% \begin{macro}{\add@inserts@next}
+% "\add@inserts"
+% is the penultimate macro used by "\do@line"; it takes
+% insertions saved in a list macro and sends them onto the vertical list.
+%
+% It may call itself recursively, and to do this efficiently (using
+% \TeX's optimization for tail recursion), we define a control-sequence
+% called "\add@inserts@next" that is always the last thing that
+% "\add@inserts" does. If there could be more inserts to process for
+% this line, "\add@inserts@next" is set equal to "\add@inserts";
+% otherwise it's just "\relax".
+%
+% \begin{macrocode}
+\def\add@inserts{%
+ \global\let\add@inserts@next=\relax
+% \end{macrocode}
+%
+% If "\inserts@list" is empty, there aren't any more notes or insertions
+% for this paragraph, and we needn't waste our time.
+% \begin{macrocode}
+ \ifx\inserts@list\empty \else
+% \end{macrocode}
+%
+% The "\next@insert" macro records the number of the line that
+% receives the next footnote or other insert; it's empty when we start
+% out, and just after we've affixed a note or insert.
+% \begin{macrocode}
+ \ifx\next@insert\empty
+ \ifx\insertlines@list\empty
+ \global\noteschanged@true
+ \gdef\next@insert{100000}%
+ \else
+ \gl@p\insertlines@list\to\next@insert
+ \fi
+ \fi
+% \end{macrocode}
+%
+% If the next insert's for this line, tack it on (and then erase the
+% contents of the insert macro, as it could be quite large).
+% In that case, we also set "\add@inserts@next" so that we'll
+% call ourself recursively: there might be another insert for this same
+% line.
+%
+% \begin{macrocode}
+ \ifnum\next@insert=\absline@num
+ \gl@p\inserts@list\to\@insert
+ \@insert
+ \global\let\@insert=\undefined
+ \global\let\next@insert=\empty
+ \global\let\add@inserts@next=\add@inserts
+ \fi
+\fi
+% \end{macrocode}
+%
+% Make the recursive call, if necessary.
+%
+% \begin{macrocode}
+\add@inserts@next}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Penalties}
+%
+% \begin{macro}{\add@penalties}
+% "\add@penalties" is
+% the last macro used by "\do@line". It adds up the club,
+% widow, and interline penalties, and puts a single penalty
+% of the appropriate size
+% back into the paragraph; these penalties get
+% removed by the "\vsplit" operation. "\displaywidowpenalty" and
+% "\brokenpenalty" are not restored, since we have no easy way to
+% find out where we should insert them.
+%
+% \label{add@penalties}
+% In this code, "\num@lines" is the number of lines in the whole
+% paragraph, and "\par@line" is the line we're working on at the
+% moment. The counter "\@tempcnta" is used to calculate and
+% accumulate the penalty; it is initially set to the value of
+% "\ballast@count", which has been worked out in "\do@ballast"
+% above (p.\,\pageref{do@ballast}). Finally, the penalty is
+% checked to see that it doesn't go below $-10000$.
+% \begin{macrocode}
+\def\add@penalties{\@tempcnta=\ballast@count
+ \ifnum\num@lines>1
+ \global\advance\par@line by 1
+ \ifnum\par@line=1
+ \advance\@tempcnta by \clubpenalty
+ \fi
+ \@tempcntb=\par@line \advance\@tempcntb by 1
+ \ifnum\@tempcntb=\num@lines
+ \advance\@tempcnta by \widowpenalty
+ \fi
+ \ifnum\par@line<\num@lines
+ \advance\@tempcnta by \interlinepenalty
+ \fi
+ \fi
+ \ifnum\@tempcnta=0
+ \relax
+ \else
+ \ifnum\@tempcnta>-10000
+ \penalty\@tempcnta
+ \else
+ \penalty -10000
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Printing leftover notes}
+%
+% \begin{macro}{\flush@notes}
+% The "\flush@notes"
+% macro is called after the entire paragraph has been sliced up
+% and sent on to the vertical list.
+% If the number of notes to this paragraph has increased since the last
+% run of \TeX, then there can be leftover notes that haven't yet been
+% printed. An appropriate error message will be printed elsewhere; but
+% it's best to go ahead and
+% print these notes somewhere, even if it's not in quite the
+% right place. What we do is dump them all out here, so that they should
+% be printed on the same page as the last line
+% of the paragraph. We can hope that's not
+% too far from the proper location, to which they'll move on the next
+% run.
+% \begin{macrocode}
+\def\flush@notes{%
+ \@xloop
+ \ifx\inserts@list\empty \else
+ \gl@p\inserts@list\to\@insert
+ \@insert
+ \global\let\@insert=\undefined
+ \repeat}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xloop}
+% "\@xloop" is
+% a variant of the \PlainTeX\ "\loop" macro, useful when it's
+% hard to construct a positive test using the \TeX\ "\if" commands---as
+% in "\flush@notes" above. One says "\@xloop" "..." "\if" "..." "\else"
+% "..." "\repeat", and the action following "\else" is repeated as long
+% as the "\if" test fails. (This macro will work wherever the \PlainTeX\
+% "\loop" is used, too, so we could just call it "\loop";
+% but it seems preferable not to change the definitions of any of
+% the standard macros.)
+%
+% This variant of "\loop" was introduced by
+% Alois Kabelschacht\index{Kabelschacht, Alois} in
+% {\em TUGboat\/} {\bf 8} (1987), pp.\,184--5.
+%
+% \begin{macrocode}
+\def\@xloop#1\repeat{%
+ \def\body{#1\expandafter\body\fi}%
+ \body}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Footnotes}
+% \label{footnotes}\relax
+%
+% The footnote macros are adapted from those in \PlainTeX, but they
+% differ in these respects: the outer-level commands must add other
+% commands to a list macro rather than doing insertions immediately;
+% there are five separate levels of footnotes, not just one; and there
+% are options to reformat footnotes into paragraphs or into multiple
+% columns.
+%
+% \subsection{Fonts (using the Plain font selection scheme)}
+% \label{fontcode}\relax
+% Before getting into the details of formatting the notes, we set
+% up some font macros. It is the notes that present the greatest
+% challenge for our font-handling mechanism, because we need to be
+% able to take fragments of our main text and print them in
+% different forms: it is common to reduce the size,
+% for example, without otherwise changing the fonts used.
+%
+% "EDMAC" supports two different systems for
+% font handling: the ``Plain font selection scheme'', that is,
+% the original \PlainTeX\ system, with some minor
+% extensions needed for our purposes here; and the New Font Selection
+% Scheme (NFSS) of Frank Mittelbach\index{Mittelbach, Frank} and Rainer
+% Sch\"opf\index{Sch\"opf, Rainer}, as adapted for use with \PlainTeX\
+% by Wayne Sullivan\index{Sullivan, Wayne}. The NFSS is strongly
+% recommended, but the Plain font selection scheme will suffice for
+% simple applications.
+%
+% "EDMAC" will define different versions of the following
+% macros, depending on which scheme is used: "\edfont@info",
+% "\notefontsetup", "\notenumfont", "\numlabfont", and
+% "\select@lemmafont". If the Plain font selection
+% scheme is chosen, "EDMAC" will also define an "\eightpoint"
+% macro and load additional Computer Modern fonts for use with it.
+%
+% The choice of a font selection scheme is made implicitly. If NFSS
+% has been loaded, it is assumed that you want to use it; otherwise
+% "EDMAC" uses the Plain font selection scheme. If you're using NFSS,
+% load it and make any choices of customizations and standard settings
+% before you load "EDMAC".
+%
+% We know that NFSS has been loaded if the "\selectfont" macro is
+% present.
+%
+% \begin{macrocode}
+\ifx\selectfont\undefined
+% \end{macrocode}
+%
+% The rest of this section defines macros for use with the Plain
+% font selection scheme; see the next section for definitions used
+% with NFSS.
+%
+% What we want to provide with these macros is something a little bit
+% more general than \PlainTeX, without going the whole way to
+% implementing a full, planned font scheme.
+%
+% \begin{macro}{\notefontsetup}
+% The font setup defined in "\notefontsetup" defines the
+% fonts which will normally be used
+% for the text of the footnotes. Parts of the footnote, such
+% as the line number references and the lemma, are enclosed in
+% groups, with their own font macros, so a note in plain roman can
+% still have line numbers in bold, say, and the lemma in the same
+% family of font as in the main text.
+%
+% Since it is common to have notes in a font smaller than
+% the main text, we set up an "\eightpoint" macro which contains
+% definitions for smaller versions of "\rm", "\it",
+% "\bf", "\tt", and "\sl". It also contains
+% definitions of the appropriate "\fam" for each of these
+% styles, as well as a smaller "\strutbox" and a setting of
+% the "\baselineskip".
+%
+% If you want to change the size or style of the standard footnote
+% font, it is important that your macro define at least these
+% items:
+% \begin{itemize}\addtolength{\itemsep}{-1ex}
+% \item fonts
+% \item "\fam"(s)
+% \item "\strutbox"
+% \item "\baselineskip"
+% \end{itemize}
+% For example, like \PlainTeX\ itself, "EDMAC" uses the height of a
+% "\strutbox" in a few crucial places, such as the crop marks,
+% the alignment of the top line of footnotes, etc. (Page
+% \pageref{magic} explains the reasons why this is important in one
+% instance.) If you change the size of your fonts, but don't
+% change the size of the "\strutbox" too, then there will be
+% various discrepancies in the spacing. The same holds for the
+% "\baselineskip", and the other macros mentioned here.
+%
+% The size of a "\strutbox" for the standard ten-point fonts
+% is already set by \PlainTeX, as are the other quantities. This
+% takes care of the "\headlinefont", since this is initially set to ten-point
+% "\rm". But once again, if you change the font of
+% the headline, be sure to add appropriate definitions of
+% "\baselineskip" and "\strutbox" too.
+%
+% The first thing, then, is to load some font metric information
+% for the small fonts that \PlainTeX\ doesn't load (cf.\ {\em The
+% \TeX book}, pp.\,413--415). (We load eight-point fonts where we
+% should load six-point ones, because the normal \TeX\ distributions
+% don't have "cmtt6" etc. If you have them, you may want to create
+% your own "\eightpoint" with proper definitions.)
+% \begin{macrocode}
+ \font\eightrm=cmr8 \font\eighti=cmmi8 \skewchar\eighti='177
+ \font\eightsy=cmsy8 \skewchar\eightsy='60 \font\eightbf=cmbx8
+ \font\eighttt=cmtt8 \hyphenchar\eighttt=-1 % inhibit hyphenation
+ \font\eightsl=cmsl8 \font\eightit=cmti8
+ \font\sixrm=cmr8 \font\sixi=cmmi8 \skewchar\sixi='177
+ \font\sixsy=cmsy8 \skewchar\sixsy='60 \font\sixbf=cmbx8
+ \font\sixtt=cmtt8 \hyphenchar\sixtt=-1 % inhibit hyphenation
+ \font\sixsl=cmsl8 \font\sixit=cmti8
+% \end{macrocode}
+%
+% \begin{macro}{\eightpoint}
+% \label{eightpoint}\relax
+% With that out of the way, we can now define an "\eightpoint"
+% macro that is taken almost directly from p.\,415 of {\em The \TeX
+% book\/} (can you spot the differences?).
+% \begin{macrocode}
+ \def\eightpoint{\def\rm{\fam0\eightrm}%
+ \textfont0=\eightrm \scriptfont0=\sixrm
+ \scriptscriptfont0=\fiverm
+ \textfont1=\eighti \scriptfont1=\sixi
+ \scriptscriptfont1=\fivei
+ \textfont2=\eightsy \scriptfont2=\sixsy
+ \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex
+ \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\eightit}\textfont\itfam=\eightit
+ \def\sl{\fam\slfam\eightsl}\textfont\slfam=\eightsl
+ \def\bf{\fam\bffam\eightbf}\textfont\bffam=\eightbf
+ \scriptfont\bffam=\sixbf \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\eighttt}\textfont\ttfam=\eighttt
+ \normalbaselineskip=9pt
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
+ \normalbaselines\rm}
+% \end{macrocode}
+% And finally, we set "\notefontsetup" to be the new font setup
+% macro:
+% \begin{macrocode}
+ \let\notefontsetup=\eightpoint
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% With the above macros, remember to use "\eightpoint" (alias
+% "\notefontsetup") inside a group. If you want to use it
+% outside a group, you will need to define a "\tenpoint" macro
+% to set all these definitions back to the standard ten-point settings of
+% \PlainTeX.
+%
+% \begin{macro}{\notenumfont}
+% The macro controlling the font for line numbers
+% within notes, "\notenumfont", is
+% more simple. It really is just a font call.
+% \begin{macrocode}
+ \let\notenumfont=\sevenrm
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\select@lemmafont}
+% \label{selectlemmafont}\relax
+% "\select@lemmafont" is provided to set the right font for
+% the lemma in a note. This macro extracts the font-family number
+% from the line and page number cluster, and issues the associated
+% font-changing command, so that the lemma is printed in its
+% original font.
+% \begin{macrocode}
+ \def\select@lemmafont#1|#2|#3|#4|#5|#6|#7|{%
+ \ifcase#7
+ \rm \or \rm \or \rm \or \rm % families 0--3
+ \or \it \or \sl \or \bf \or \tt % families 4--7
+ \else \rm
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% Note that this is a departure from the normal behavior of
+% \PlainTeX\ regarding font selection.
+% As Donald Knuth remarks ({\em The
+% \TeX book}, p.\,154), the "\fam" value is usually irrelevant
+% when \TeX\ is typesetting text in horizontal mode; "\fam"
+% only matters in math mode. But here we are using the
+% "\fam" value as a convenient way to select a font group. If
+% you are editing a text in some other font, say Cyrillic, be sure
+% to assign it a font "\fam", and add that to the list here in
+% "\select@lemmafont" (see the example given on p.\,\pageref{fam-fiddle}
+% below for using a Sanskrit font with "EDMAC").
+% The ideal in this situation would be to be
+% able to test for such parameters such as font series, style, and
+% size. Exactly those
+% capabilities are provided in the New Font Selection Scheme
+% written by Frank Mittelbach\index{Mittelbach, Frank} and Rainer
+% Sch\"opf,\index{Sch\"opf, Rainer}
+% and this is one place in "EDMAC" where
+% such a system can be used to good effect (see the discussion
+% above, page \pageref{edmacnfss}, and the following section).
+%
+% \subsection{Fonts: using the New Font Selection Scheme}
+%
+% These are the font macros used with NFSS. They will be activated if
+% the NFSS macros have been loaded as described above
+% (p.\,\pageref{ed-nfss}).
+% \begin{macrocode}
+\else
+% \end{macrocode}
+%
+% \begin{macro}{\notefontsetup}
+% The font setup defined in "\notefontsetup" defines the standard
+% fonts for the text of the footnotes. Parts of the footnote, such
+% as the line number references and the lemma, are enclosed in
+% groups, with their own font macros, so a note in plain roman can
+% still have line numbers in bold, say, and the lemma in the same
+% font encoding, family, series, and shape
+% of font as in the main text. Typically this definition should
+% specify only a size. It should always end with "\selectfont" or
+% with a command like "\rm" that does a "\selectfont".
+%
+% \begin{macrocode}
+ \def\notefontsetup{\fontsize{8}{9pt}\selectfont}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\notenumfont}
+% The line numbers will be printed using the font selected by
+% executing "\notenumfont".
+% \begin{macrocode}
+ \def\notenumfont{\fontsize{7}{8pt}\rm}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\select@lemmafont}
+% \begin{macro}{\select@@lemmafont}
+% "\select@lemmafont" is provided to set the right font for
+% the lemma in a note. This macro extracts the font specifier
+% from the line and page number cluster, and issues the associated
+% font-changing command, so that the lemma is printed in its
+% original font.
+% \begin{macrocode}
+ \def\select@lemmafont#1|#2|#3|#4|#5|#6|#7|{\select@@lemmafont#7|}
+ \def\select@@lemmafont#1/#2/#3/#4|%
+ {\fontencoding{#1}\fontfamily{#2}\fontseries{#3}\fontshape{#4}%
+ \selectfont}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% This is the end of the conditional section for font macro definition.
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \subsection{Outer-level footnote commands}
+% \begin{macro}{\Afootnote}
+% The outer-level footnote commands will look familiar: they're
+% just called "\Afootnote", "\Bfootnote", etc., instead of
+% plain "\footnote". What they do, however, is quite different,
+% since they have to operate in conjunction with "\text" when
+% numbering is in effect.
+%
+% If we're within a line-numbered paragraph, then, we tack this note onto
+% the "\inserts@list" list, and increment the deferred-page-bottom-note
+% counter.
+% \begin{macrocode}
+\def\Afootnote#1{%
+ \ifnumberedpar@
+ \xright@appenditem{\noexpand\vAfootnote{A}%
+ {{\@nums}{\@tag}{#1}}}\to\inserts@list
+ \global\advance\insert@count by 1
+% \end{macrocode}
+%
+% Within free text, there's no need to put off making the insertion
+% for this note. No line numbers are available, so this isn't generally
+% that useful; but you might want to use it to get around some
+% limitation of "EDMAC".
+% \begin{macrocode}
+ \else
+ \vAfootnote{A}{{0|0|0|0|0|0|0}{}{#1}}%
+ \fi\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Bfootnote}
+% \begin{macro}{\Cfootnote}
+% \begin{macro}{\Dfootnote}
+% \begin{macro}{\Efootnote}
+% We need similar commands for the other footnote series.
+% \begin{macrocode}
+\def\Bfootnote#1{%
+ \ifnumberedpar@
+ \xright@appenditem{\noexpand\vBfootnote{B}%
+ {{\@nums}{\@tag}{#1}}}\to\inserts@list
+ \global\advance\insert@count by 1
+ \else
+ \vBfootnote{B}{{0|0|0|0|0|0|0}{}{#1}}%
+ \fi\ignorespaces}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Cfootnote#1{%
+ \ifnumberedpar@
+ \xright@appenditem{\noexpand\vCfootnote{C}%
+ {{\@nums}{\@tag}{#1}}}\to\inserts@list
+ \global\advance\insert@count by 1
+ \else
+ \vCfootnote{C}{{0|0|0|0|0|0|0}{}{#1}}%
+ \fi\ignorespaces}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Dfootnote#1{%
+ \ifnumberedpar@
+ \xright@appenditem{\noexpand\vDfootnote{D}%
+ {{\@nums}{\@tag}{#1}}}\to\inserts@list
+ \global\advance\insert@count by 1
+ \else
+ \vDfootnote{D}{{0|0|0|0|0|0|0}{}{#1}}%
+ \fi\ignorespaces}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Efootnote#1{%
+ \ifnumberedpar@
+ \xright@appenditem{\noexpand\vEfootnote{E}%
+ {{\@nums}{\@tag}{#1}}}\to\inserts@list
+ \global\advance\insert@count by 1
+ \else
+ \vEfootnote{E}{{0|0|0|0|0|0|0}{}{#1}}%
+ \fi\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Normal footnote formatting}
+%
+% The processing of each note is done
+% by four principal macros: the "vfootnote" macro takes the text
+% of the footnote and does the "\insert"; it calls on the
+% "footfmt" macro to select the right fonts, print the line
+% number and lemma, and do any other formatting needed for that individual
+% note. Within the output routine, the two other macros, "footstart"
+% and "footgroup", are called; the first prints extra vertical
+% space and a footnote rule, if desired; the second does any reformatting
+% of the whole set of footnotes in this series for this page---such
+% as paragraphing or division into columns---and then sends them to the
+% page.
+%
+% These four macros, and the other macros and parameters shown
+% here, are distinguished by the ``series letter''
+% that indicates which set of footnotes
+% we're dealing with---"A", "B", "C", "D", or "E".
+% The series letter always precedes the string "foot" in macro
+% and parameter names. Hence, for the "A" series, the four macros
+% are called "\vAfootnote", "\Afootfmt", "\Afootstart",
+% and "\Afootgroup".
+%
+% \begin{macro}{\normalvfootnote}
+% We now begin a series of commands that do ``normal'' footnote
+% formatting: a format much like that implemented
+% in \PlainTeX{}, in which each footnote
+% is a separate paragraph.
+%
+% "\normalvfootnote" takes the series letter as "#1",
+% and the entire text of the footnote is "#2". It does the
+% "\insert" for this note, calling on the "footfmt" macro for
+% this note series to format the text of the note.
+% \begin{macrocode}
+\def\normalvfootnote#1#2{\insert\csname #1footins\endcsname\bgroup
+ \notefontsetup
+ \interlinepenalty\csname inter#1footnotelinepenalty\endcsname
+ \splittopskip\ht\strutbox
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \leftskip\z@skip \rightskip\z@skip
+ \spaceskip\z@skip \xspaceskip\z@skip
+ \csname #1footfmt\endcsname #2\egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\normalfootfmt}
+% \label{normalfootfmt}\relax
+% "\normalfootfmt" is a ``normal'' macro
+% to take the footnote line and page
+% number information (see p.\,\pageref{linenumbers}), and the
+% desired text, and output what's to be printed.
+% Argument "#1" contains the line and page number information
+% and lemma font specifier;
+% "#2" is the lemma;
+% "#3" is the note's text. This version is very
+% rudimentary---it uses "\printlines"
+% to print just the range of line numbers,
+% followed by a square bracket, the lemma, and the note text;
+% it's intended to be copied and modified as necessary.
+%
+% "\par" should always be redefined to "\endgraf" within
+% the format macro (this is what "\normal@pars" does),
+% to override any tricky stuff which might be done in the main text
+% to get the lines numbered automatically (as set up by
+% "\autopar", for example).
+% \begin{macrocode}
+\def\normalfootfmt#1#2#3{%
+ \normal@pars
+ \parindent=0pt \parfillskip=0pt plus 1fil
+ {\notenumfont\printlines#1|}\strut\enspace
+ {\select@lemmafont#1|#2}\rbracket\enskip#3\strut\par}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endashchar}
+% \begin{macro}{\fullstop}
+% \begin{macro}{\rbracket}
+% The fonts that are used for printing notes might not have the
+% character mapping we expect: for example, the Computer Modern font
+% that contains old-style numerals does not contain an en-dash or
+% square brackets, and its period and comma are in odd locations.
+% To allow use of the standard footnote macros with such fonts, we use
+% the following macros for certain characters.
+%
+% The "\endashchar" macro is simply an en-dash from a
+% "\rm" font that is immune to changes in the surrounding
+% font. The same goes for the full stop. These two are used in
+% "\printlines". The right bracket macro is the same again;
+% it crops up in "\normalfootfmt" and the other footnote
+% macros for controlling the format of footnotes.
+% \begin{macrocode}
+\def\endashchar{{\rm--}}
+\def\fullstop{{\rm.}}
+\def\rbracket{{\rm\thinspace]}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\printlines}
+% The "\printlines" macro prints the line
+% numbers for a note---which, in the
+% general case, is a rather complicated task.
+% The seven parameters of the
+% argument are the line numbers as stored in "\@nums", in the
+% form described on page \pageref{linenumbers}: the starting
+% page, line, and sub-line numbers, followed by the ending page,
+% line, and sub-line numbers, and then the font specifier for
+% the lemma.
+%
+% \begin{macro}{\@pnum}
+% \begin{macro}{\@ssub}
+% \begin{macro}{\@elin}
+% \begin{macro}{\@esl}
+% \begin{macro}{\@dash}
+% To simplify the logic, we use a lot of counters to tell us which
+% numbers need to get printed (using $1$ for yes, $0$ for no, so
+% that "\ifodd" tests for ``yes''). The counter assignments are:
+% \begin{itemize}\addtolength{\itemsep}{-1ex}
+% \item "\@pnum" for page numbers;
+% \item "\@ssub" for starting sub-line;
+% \item "\@elin" for ending line;
+% \item "\@esl" for ending sub-line; and
+% \item "\@dash" for the dash between the starting and ending groups.
+% \end{itemize}
+% There's no counter for the line number because it's always printed.
+% \begin{macrocode}
+\newcount\@pnum \newcount\@ssub \newcount\@elin
+\newcount\@esl \newcount\@dash
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% First of all, we print the page numbers only if\/: 1)~we're doing
+% the lineation by page, and 2)~the ending page number is different
+% from the starting page number.\label{printlines}
+% \begin{macrocode}
+\def\printlines#1|#2|#3|#4|#5|#6|#7|{\begingroup
+ \@pnum=0 \@dash=0
+ \ifbypage@
+ \ifnum#4=#1 \else
+ \@pnum=1
+ \@dash=1
+ \fi
+ \fi
+% \end{macrocode}
+%
+% We print the ending line number if\/: 1)~we're printing the ending
+% page number, or 2)~it's different from the starting line number.
+% \begin{macrocode}
+ \@elin=\@pnum
+ \ifnum#2=#5 \else
+ \@elin=1
+ \@dash=1
+ \fi
+% \end{macrocode}
+%
+% We print the starting sub-line if it's nonzero.
+% \begin{macrocode}
+ \@ssub=0
+ \ifnum#3=0 \else
+ \@ssub=1
+ \fi
+% \end{macrocode}
+%
+% We print the ending sub-line if it's nonzero and: 1)~it's different
+% from the starting sub-line number, or 2)~the ending line number is
+% being printed.
+% \begin{macrocode}
+ \@esl=0
+ \ifnum#6=0 \else
+ \ifnum#6=#3
+ \@esl=\@elin
+ \else
+ \@esl=1
+ \@dash=1
+ \fi
+ \fi
+% \end{macrocode}
+%
+% Now we're ready to print it all, based on our counter values. The
+% only subtlety left here is when to print a period between
+% numbers. But the only instance in which this is tricky is for the
+% ending sub-line number: it could be coming after the starting
+% sub-line number (in which case we want only the dash) or after an
+% ending line number (in which case we need to insert a period).
+% \begin{macrocode}
+ \ifodd\@pnum #1\fullstop\fi
+ #2%
+ \ifodd\@ssub \fullstop #3\fi
+ \ifodd\@dash \endashchar\fi
+ \ifodd\@pnum #4\fullstop\fi
+ \ifodd\@elin #5\fi
+ \ifodd\@esl \ifodd\@elin\fullstop\fi #6\fi
+\endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\normalfootstart}
+% \label{normalvalues}\relax
+% "\normalfootstart"
+% is a standard footnote-starting macro, called in the output
+% routine whenever there are footnotes of this series to be
+% printed: it skips a bit and then draws a rule.
+%
+% Any "footstart" macro must put onto the page something that
+% takes up space exactly equal to the "\skip\footins" value for
+% the associated series of notes. \TeX\ makes page computations based
+% on that "\skip" value, and the output pages will suffer from
+% spacing problems if what you add takes up a different amount of
+% space.
+%
+% The "\leftskip" and "\rightskip" values
+% are both zeroed here.\label{footskips}
+% Similarly, these skips are cancelled in the "vfootnote" macros
+% for the various types of notes. Strictly speaking,
+% this is necessary only
+% if you are using paragraphed footnotes, but we have put it here
+% and in the other "vfootnote" macros too so that the behavior of
+% "EDMAC" in this respect is general across all footnote types
+% (you can change this). What this means is that any "\leftskip"
+% and "\rightskip" you specify applies to the main text, but not
+% the footnotes. The footnotes continue to be of width "\hsize".
+% \begin{macrocode}
+\def\normalfootstart#1{%
+ \vskip\skip\csname #1footins\endcsname
+ \leftskip0pt \rightskip0pt
+ \csname #1footnoterule\endcsname}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\normalfootnoterule}
+% "\normalfootnoterule" is
+% a standard footnote-rule macro, for use by a "footstart"
+% macro: just the same as the \PlainTeX\ footnote rule.
+% \begin{macrocode}
+\let\normalfootnoterule=\footnoterule
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\normalfootgroup}
+% "\normalfootgroup" is
+% a standard footnote-grouping macro: it sends the
+% contents of the footnote-insert box to the output page without
+% alteration.
+% \begin{macrocode}
+\def\normalfootgroup#1{\unvbox\csname #1footins\endcsname}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Standard footnote definitions}
+%
+% \begin{macro}{\footnormal}
+% We can now define all the parameters for the five series of
+% footnotes; initially they use the ``normal'' footnote formatting,
+% which is set up by calling "\footnormal".
+% You can switch to another type of formatting by using
+% "\footparagraph", "\foottwocol", or "\footthreecol".
+%
+% Switching to a variation of ``normal''
+% formatting requires changing the
+% quantities defined in "\footnormal". The best way to
+% proceed would be to make a copy of this macro, with a different
+% name, make your desired changes in that copy, and then invoke it,
+% giving it the letter of the footnote series you wish to control.
+%
+% (We have not defined baseline skip values like
+% "\abaselineskip", since this is one of the quantities set in
+% "\notefontsetup".)
+%
+% What we want to do here is to say something like the following
+% for each footnote series. (This is an example, not part of the
+% actual "EDMAC" code.)
+% \begin{verbatim}
+% \newinsert\Afootins
+% \newcount\interAfootnotelinepenalty \interAfootnotelinepenalty=100
+% \skip\Afootins=12pt plus5pt minus5pt
+% \count\Afootins=1000
+% \dimen\Afootins=0.8\vsize
+% \let\vAfootnote=\normalvfootnote \let\Afootfmt=\normalfootfmt
+% \let\Afootstart=\normalfootstart \let\Afootgroup=\normalfootgroup
+% \let\Afootnoterule=\normalfootnoterule
+% \end{verbatim}
+% Instead of repeating ourselves, we define a "\footnormal"
+% macro that makes all these assignments for us, for any given
+% series letter. This also makes it easy to change from any
+% different system of formatting back to the "normal" setting.
+%
+% We begin by defining the five new insertion classes, and some
+% "count" registers; these are "\outer" operations that
+% can't be done inside "\footnormal".
+% \begin{macrocode}
+\newinsert\Afootins \newinsert\Bfootins
+\newinsert\Cfootins \newinsert\Dfootins
+\newinsert\Efootins
+% \end{macrocode}
+% \begin{macrocode}
+\newcount\interAfootnotelinepenalty
+\newcount\interBfootnotelinepenalty
+\newcount\interCfootnotelinepenalty
+\newcount\interDfootnotelinepenalty
+\newcount\interEfootnotelinepenalty
+% \end{macrocode}
+% Now we set up the "\footnormal" macro itself. It takes
+% one argument: the footnote series letter.
+% \begin{macrocode}
+\def\footnormal#1{%
+ \csname inter#1footnotelinepenalty\endcsname=100
+ \expandafter\let\csname #1footstart\endcsname=\normalfootstart
+ \expandafter\let\csname v#1footnote\endcsname=\normalvfootnote
+ \expandafter\let\csname #1footfmt\endcsname=\normalfootfmt
+ \expandafter\let\csname #1footgroup\endcsname=\normalfootgroup
+ \expandafter\let\csname #1footnoterule\endcsname=%
+ \normalfootnoterule
+ \count\csname #1footins\endcsname=1000
+ \dimen\csname #1footins\endcsname=0.8\vsize
+ \skip\csname #1footins\endcsname=12pt plus6pt minus6pt}
+% \end{macrocode}
+% \end{macro}
+% Some of these values deserve comment: the "\dimen"
+% setting allows 80\% of the page to be occupied by notes; the
+% "\skip" setting is deliberately flexible, since pages with
+% lots of notes attached to many of the lines can be a bit hard
+% for \TeX\ to make.
+%
+% And finally, we initialize the formatting for all the footnote series
+% to be normal.
+% \begin{macrocode}
+\footnormal{A}
+\footnormal{B}
+\footnormal{C}
+\footnormal{D}
+\footnormal{E}
+% \end{macrocode}
+%
+%
+% \subsection{Paragraphed footnotes}
+%
+% The paragraphed-footnote option
+% reformats all the footnotes of one series for a page into
+% a single paragraph; this is especially appropriate when the notes are
+% numerous and brief. The code is based
+% on {\em The \TeX book}, pp.\,398--400, with
+% alterations for our environment. This algorithm uses a considerable
+% amount of save-stack space: a \TeX\ of ordinary size may not be able
+% to handle more than about $100$ notes of this kind on a page.
+%
+% \begin{macro}{\footparagraph}
+% The "\footparagraph" macro
+% sets up everything for one series of footnotes so that
+% they'll be paragraphed; it takes the series letter as argument.
+% We include the setting of "\count\footins" to $1000$ for the
+% footnote series just in case you are switching to paragraphed
+% footnotes after having columnar ones, since they change this
+% value (see below).
+%
+% It is important to call "\footparagraph" only after
+% "\hsize" has been set for the pages that use
+% this series of notes; otherwise \TeX\ will try to put too
+% many or too few of these notes on each page. If you need to
+% change the "\hsize" within the document, call
+% "\footparagraph" again afterwards to take account of the new
+% value. The argument of "\footparagraph" is the letter
+% ("A"--"E") denoting the series of notes to be paragraphed.
+% \begin{macrocode}
+\def\footparagraph#1{%
+ \expandafter\let\csname #1footstart\endcsname=\parafootstart
+ \expandafter\let\csname v#1footnote\endcsname=\para@vfootnote
+ \expandafter\let\csname #1footfmt\endcsname=\parafootfmt
+ \expandafter\let\csname #1footgroup\endcsname=\para@footgroup
+ \count\csname #1footins\endcsname=1000
+ \para@footsetup{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\para@footsetup}
+% "\footparagraph" calls the
+% "\para@footsetup" macro to calculate a special
+% fudge factor, which is the ratio of the "\baselineskip"
+% to the "\hsize". We assume that the proper value of
+% "\baselineskip" for the footnotes (normally 9\,pt) has been set
+% already, in "\notefontsetup". The argument of the macro is
+% again the note series letter.
+% \begin{macrocode}
+\def\para@footsetup#1{{\notefontsetup
+ \dimen0=\baselineskip
+ \multiply\dimen0 by 1024
+ \divide \dimen0 by \hsize \multiply\dimen0 by 64
+ \expandafter
+ \xdef\csname #1footfudgefactor\endcsname{%
+ \expandafter\en@number\the\dimen0 }}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\en@number}
+% The "\en@number" macro extracts the numerical part from a "dimen"
+% register and strips off the ``"pt"'' (see {\em The \TeX
+% book}, p.\,375). It turns "10pt" into "10" so that you can use
+% it in arithmetic.
+% \begin{macrocode}
+{\catcode`p=12 \catcode`t=12 \gdef\en@number#1pt{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\parafootstart}
+% "\parafootstart" is the same as "\normalfootstart", but we give it
+% again to ensure that "\rightskip" and "\leftskip" are
+% zeroed (this needs to be done before "\para@footgroup" in the
+% output routine). You might have decided to change this for other
+% kinds of note, but here it should stay as it is. The size of
+% paragraphed notes is calculated using a fudge factor which in
+% turn is based on "\hsize". So the paragraph of notes needs to be
+% that wide.
+%
+% The argument of the macro is again the note series letter.
+% \begin{macrocode}
+\def\parafootstart#1{%
+ \rightskip=0pt \leftskip=0pt \parindent=0pt
+ \vskip\skip\csname #1footins\endcsname
+ \csname #1footnoterule\endcsname}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\para@vfootnote}
+% "\para@vfootnote"
+% is a version of the "\vfootnote" command that's used for
+% paragraphed notes. It gets appended to the "\inserts@list" list
+% by an outer-level footnote command like "\Afootnote". The first
+% argument is the note series letter; the second is the full text
+% of the printed note itself, including line numbers, lemmata, and
+% footnote text.
+%
+% The initial model for this insertion is, of course, the
+% "\insert\footins" definition in {\em The \TeX book}, p.\,398.
+% There, the footnotes are first collected up in hboxes, and these
+% hboxes are later unpacked and stuck together into a paragraph.
+%
+% However, Michael Downes\index{Downes, Michael} has pointed out
+% that because text in hboxes gets typeset in restricted horizontal
+% mode, there are some undesirable side-effects if you later want
+% to break such text across lines. In restricted horizontal mode,
+% where \TeX\ does not expect to have to break lines, it does not
+% insert certain items like "\discretionary"s. If you later unbox
+% these hboxes and stick them together, as the {\em \TeX book\/}
+% macros do to make these footnotes, you lose the ability to
+% hyphenate after an explicit hyphen. This can lead to overfull
+% "\hbox"es when you would not expect to find them, and to the
+% uninitiated it might be very hard to see why the problem had
+% arisen.\footnote{Michael Downes, ``Line Breaking in {\tt \bslash
+% unhbox}ed Text'', {\em TUGboat\/} {\bf 11} (1990), pp.\,605--612.}
+%
+% Wayne Sullivan\index{Sullivan, Wayne} pointed out to us another
+% subtle problem that arises from the same cause: \TeX\ also leaves
+% the "\language" whatsit nodes out of the horizontal
+% list.\footnote{See {\em The \TeX book}, p.\,455 (editions after
+% January 1990).} So changes from one language to another will not
+% invoke the proper hyphenation rules in such footnotes. Since
+% critical editions often do deal with several languages,
+% especially in footnotes, we really ought to get this bit of code
+% right.
+%
+% To get around these problems, Wayne suggested emendations to the
+% {\em \TeX book\/} versions of these macros which are broadly the
+% same as those described by Michael: the central idea (also
+% suggested by Donald Knuth in a letter to Michael) is to avoid collecting
+% the text in an "\hbox" in the first place, but instead to collect
+% it in a "\vbox" whose width is (virtually)
+% infinite.\label{hboxproblem} The text is therefore typeset in
+% unrestricted horizontal mode, as a paragraph consisting of a
+% single long line. Later, there is an extra level of unboxing to
+% be done: we have to unpack the "\vbox", as well as the hboxes
+% inside it, but that's not too hard. For details, we refer you to
+% Michael's article, where the issues are clearly
+% explained.\footnote{Wayne supplied his own macros to do this, but
+% since they were almost identical to Michael's, we have used the
+% latter's {\tt \bslash unvxh} macro since it is publicly
+% documented.} Michael's unboxing macro is called "\unvxh": unvbox,
+% extract the last line, and unhbox it.
+%
+% Doing things this way has an important
+% consequence:\label{nobreaks-detail} as Michael
+% pointed out, you really can't put an explicit line-break into a
+% note built in a "\vbox" the way we are doing.\footnote{``Line
+% Breaking'', p.\,610.} In other words, be very careful not to say
+% "\break", or "\penalty-10000", or any equivalent inside your
+% para-footnote.\label{nobreak} If you do, most of the note will
+% probably disappear. You {\em are\/} allowed to make strong
+% suggestions; in fact "\penalty-9999" will be quite okay. Just
+% don't make the break mandatory. We haven't applied any of
+% Michael's solutions here, since we feel that the problem is
+% exiguous, and "EDMAC" is quite baroque enough already. If
+% you think you are having this problem, look up Michael's
+% solutions.
+%
+% One more thing; we set "\leftskip" and "\rightskip" to zero.
+% This has the effect of neutralizing any such skips which may
+% apply to the main text (cf.\ p.\,\pageref{footskips} above).
+% We need to do this, since "footfudgefactor" is calculated on
+% the assumption that the notes are "\hsize" wide.
+%
+% So, finally, here is the modified foot-paragraph code, which
+% sets the footnote in vertical mode so that language and
+% discretionary nodes are included.
+% \begin{macrocode}
+\def\para@vfootnote#1#2{\insert\csname #1footins\endcsname
+ \bgroup
+ \notefontsetup
+ \interlinepenalty=\csname inter#1footnotelinepenalty\endcsname
+ \splittopskip=\ht\strutbox
+ \splitmaxdepth=\dp\strutbox \floatingpenalty=\@MM
+ \leftskip0pt \rightskip0pt
+ \setbox0=\vbox{\hsize=\maxdimen
+ \noindent\csname #1footfmt\endcsname#2}%
+ \setbox0=\hbox{\unvxh0}%
+ \dp0=0pt
+ \ht0=\csname #1footfudgefactor\endcsname\wd0
+% \end{macrocode}
+% Here we produce the contents of the footnote from box $0$, and
+% add a penalty of $0$ between boxes in this insert.
+% \begin{macrocode}
+ \box0
+ \penalty0
+ \egroup}
+% \end{macrocode}
+% The final penalty of $0$
+% was added here at Wayne's\index{Sullivan, Wayne}
+% suggestion to avoid a weird page-breaking problem, which occurs on
+% those occasions when \TeX\ attempts to split foot paragraphs.
+% After trying out such a split (see {\em The \TeX book}, p.\,124),
+% \TeX\ inserts a penalty of $-10000$ here, which
+% nearly always forces the break at the end of the whole footnote
+% paragraph (since individual notes can't be split) even when this
+% leads to an overfull vbox. The change above results in a penalty
+% of $0$ instead which allows, but doesn't force, such breaks. This
+% penalty of $0$ is later removed, after page breaks have been
+% decided, by the "\unpenalty" macro in "\makehboxofhboxes". So it
+% does not affect how the footnote paragraphs are typeset (the
+% notes still have a penalty of $-10$ between them, which is added
+% by "\parafootfmt").
+% \end{macro}
+%
+% \begin{macro}{\unvxh}
+% Here is Michael's\index{Downes, Michael} definition of "\unvxh",
+% used above. Michael's macro also takes care to remove some
+% unwanted penalties and glue that \TeX\ automatically attaches to
+% the end of paragraphs. When \TeX\ finishes a paragraph, it
+% throws away any remaining glue, and then tacks on the following
+% items: a "\penalty" of $10000$, a "\parfillskip" and a
+% "\rightskip" ({\em The \TeX book}, pp.\,99--100). "\unvxh"
+% cancels these unwanted paragraph-final items using "\unskip" and
+% "\unpenalty".
+% \begin{macrocode}
+\def\unvxh#1{%
+ \setbox0=\vbox{\unvbox#1%
+ \global\setbox1=\lastbox}%
+ \unhbox1
+ \unskip % remove \rightskip,
+ \unskip % remove \parfillskip,
+ \unpenalty % remove \penalty of 10000,
+ \hskip\ipn@skip} % but add the glue to go between the notes
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\interparanoteglue}
+% \begin{macro}{\ipn@skip}
+% \label{interparanoteglue}\relax
+% Close observers will notice that we snuck some glue called
+% "\ipn@skip" onto the end of the hbox produced by "\unvxh" in the
+% above macro.
+%
+% We want to be able to have some glue between our paragraphed
+% footnotes. But since we are initially setting our notes in
+% internal vertical mode, as little paragraphs, any paragraph-final
+% glue will get discarded. Since "\unvxh" is already busy fiddling
+% with glue and penalties at the end of these paragraphs, we take
+% advantage of the opportunity to provide our inter-note spacing.
+%
+% We collect the value of the inter-parafootnote glue value as the
+% parameter of a macro called---wait for it---"\interparanoteglue".
+% We put this value into the value of a glue register
+% "\ipn@skip" (inter-para-note-skip) making sure first to set the
+% current font to the value normally used in footnotes so that the value of an
+% "em" will be taken from the right font.
+% \begin{macrocode}
+\newskip\ipn@skip
+\def\interparanoteglue#1{%
+ {\notefontsetup\global\ipn@skip=#1 \relax}}
+\interparanoteglue{1em plus.4em minus.4em}
+% \end{macrocode}
+% There is a point to be careful about regarding the
+% "\interparanoteglue". Remember that in "\para@vfootnote" we do
+% some measurements on the footnote box, and use the resulting size
+% to make an estimate of how much the note will contribute to the
+% height of our final footnote paragraph. This information is used
+% by the output routine to allocate the right amount of vertical
+% space on the page for the notes ({\em The \TeX book}, pp.\,398--399).
+%
+% The length of the footnote includes the natural size of the glue
+% specified by "\interparanoteglue", but not its stretch or shrink
+% components, since at this point the note has no need to stretch
+% or shrink. Later, when the paragraph is actually composed by
+% "\parafootgroup" in the output routine, \TeX\ will almost
+% certainly do some stretching and shrinking of this glue in order
+% to make the paragraph look nice. Probably the stretching and
+% shrinking over the whole paragraph will cancel each other out.
+% But if not, the actual vertical size of the paragraph may not
+% match the size the output routine had been told to expect, and
+% you may get an overfull/underfull "\vbox" message from the output
+% routine. To minimize the risk of this, you can do two things:
+% keep the "plus" and "minus" components of "\interparanoteglue"
+% small compared with its natural glue, and keep them the same as
+% each other. As a general precaution, keep the size and
+% flexibility of the "\skip\footins" glue on the high side too:
+% because the reckoning is approximate, footnote blocks may be up
+% to a line bigger or smaller than the output routine allows for,
+% so keep some flexible space between the text and the notes.
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\parafootfmt}
+% "\parafootfmt" is
+% "\normalfootfmt" adapted to do the special stuff
+% needed for paragraphed notes---leaving out the "\endgraf" at the
+% end, sticking in special penalties and kern, and leaving out the
+% "\footstrut". The first argument is the line and page
+% number information, the second is the lemma, and the third is the
+% text of the footnote.
+% \begin{macrocode}
+\def\parafootfmt#1#2#3{%
+ \normal@pars
+ \parindent=0pt \parfillskip=0pt plus1fil
+ {\notenumfont\printlines#1|}\enspace
+ {\select@lemmafont#1|#2}\rbracket\enskip
+ #3\penalty-10 }
+% \end{macrocode}
+% Note that in the above definition, the penalty of $-10$
+% encourages a line break between notes, so that notes have a
+% slight tendency to begin on new lines.
+% \end{macro}
+%
+% \begin{macro}{\para@footgroup}
+% This "footgroup" code is modelled on the macros in {\em The
+% \TeX book}, p.\,399. The only difference is the "\unpenalty"
+% in "\makehboxofhboxes", which is there to remove the penalty of
+% $0$ which was added to the end of each footnote by
+% "\para@vfootnote".
+%
+% The call to "\notefontsetup" is to ensure that the correct
+% "\baselineskip" for the footnotes is used. The argument is the
+% note series letter.
+% \begin{macrocode}
+\def\para@footgroup#1{%
+ \unvbox\csname #1footins\endcsname \makehboxofhboxes
+ \setbox0=\hbox{\unhbox0 \removehboxes}%
+ \notefontsetup
+ \noindent\unhbox0\par}
+\def\makehboxofhboxes{\setbox0=\hbox{}%
+ \loop
+ \unpenalty
+ \setbox2=\lastbox
+ \ifhbox2
+ \setbox0=\hbox{\box2\unhbox0}
+ \repeat}
+\def\removehboxes{\setbox0=\lastbox
+ \ifhbox0{\removehboxes}\unhbox0 \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Columnar footnotes}
+%
+% \begin{macro}{\rigidbalance}
+% \begin{macro}{\dosplits}
+% \begin{macro}{\splitoff}
+% \begin{macro}{\@h}
+% \begin{macro}{\@k}
+% We will now define macros for three-column notes and two-column
+% notes. Both sets of macros will use "\rigidbalance", which splits a
+% box ("#1") into into a number ("#2") of columns, each
+% with a space ("#3") between the top baseline and the top of
+% the "\vbox". The "\rigidbalance" macro is taken from
+% {\em The \TeX book}, p.\,397, with a slight change to the syntax of
+% the arguments so that they don't depend on white space. Note also
+% the extra unboxing in "\splitoff", which allows the new "\vbox" to
+% have its natural height as it goes into the alignment.
+% \begin{macrocode}
+\newcount\@k \newdimen\@h
+\def\rigidbalance#1#2#3{\setbox0=\box#1 \@k=#2 \@h=#3
+ \line{\splittopskip=\@h \vbadness=\@M \hfilneg
+ \valign{##\vfil\cr\dosplits}}}
+\def\dosplits{\ifnum\@k>0 \noalign{\hfil}\splitoff
+ \global\advance\@k-1\cr\dosplits\fi}
+\def\splitoff{\dimen0=\ht0
+ \divide\dimen0 by\@k \advance\dimen0 by\@h
+ \setbox2 \vsplit0 to \dimen0
+ \unvbox2 }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{Three columns}
+%
+% \begin{macro}{\footthreecol}
+% You say "\footthreecol{A}" to have the "A" series of footnotes
+% typeset in three columns. It is important to call this only after
+% "\hsize" has been set for the document.
+% \begin{macrocode}
+\def\footthreecol#1{%
+ \expandafter\let\csname v#1footnote\endcsname=\threecolvfootnote
+ \expandafter\let\csname #1footfmt\endcsname=\threecolfootfmt
+ \expandafter\let\csname #1footgroup\endcsname=\threecolfootgroup
+ \threecolfootsetup{#1}}
+% \end{macrocode}
+% The "\footstart" and "\footnoterule" macros for these notes assume
+% the normal values (p.\,\pageref{normalvalues} above).
+% \end{macro}
+%
+% \begin{macro}{\threecolfootsetup}
+% The "\threecolfootsetup" macro calculates and sets some numbers
+% for three-column footnotes.
+%
+% We set the "\count" of the foot insert to $333$.
+% Each footnote can be thought of as contributing only one third of
+% its height to the page, since the footnote insertion has been
+% made as a long narrow column, which then gets trisected by the
+% "\rigidbalance" routine (inside "\threecolfootgroup").
+% These new, shorter columns are saved in a box, and then that box
+% is {\em put back\/} into the footnote insert, replacing the
+% original collection of footnotes. This new box is, therefore,
+% only about a third of the height of the original one.
+%
+% The "\dimen" value for this note series has to change in the
+% inverse way: it needs to be three times
+% the actual limit on the amount of space these notes are allowed to
+% fill on the page, because when \TeX\ is
+% accumulating material for the page
+% and checking that limit, it doesn't apply the "\count" scaling.
+% \begin{macrocode}
+\def\threecolfootsetup#1{%
+ \count\csname #1footins\endcsname 333
+ \multiply\dimen\csname #1footins\endcsname by 3 }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\threecolvfootnote}
+% "\threecolvfootnote"
+% is the "\vfootnote" command for three-column notes. The
+% call to "\notefontsetup" ensures that the
+% "\splittopskip" and "\splitmaxdepth" take their values
+% from the right "\strutbox": the one used in footnotes.
+% Note especially the importance of temporarily reducing the
+% "\hsize" to $0.3$ of its normal value. This determines the
+% widths of the individual columns. So if the normal "\hsize"
+% is, say, 10\,cm, then each column will be $0.3\times10=3$\,cm
+% wide, leaving a gap of 1\,cm spread equally between columns
+% (i.e., .5\,cm between each).
+%
+% The arguments are 1)~the note series letter and 2)~the full text
+% of the note (including numbers, lemma and text).
+% \begin{macrocode}
+\def\threecolvfootnote#1#2{%
+ \insert\csname #1footins\endcsname\bgroup
+ \notefontsetup
+ \interlinepenalty=\csname inter#1footnotelinepenalty\endcsname
+ \floatingpenalty=20000
+ \splittopskip=\ht\strutbox \splitmaxdepth=\dp\strutbox
+ \rightskip=0pt \leftskip=0pt
+ \csname #1footfmt\endcsname #2\egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\threecolfootfmt}
+% "\threecolfootfmt"
+% is the command that formats one note.
+% It uses "\raggedright", which will usually be
+% preferable with such short lines. Setting the "\parindent"
+% to zero means that, within each individual note, the lines begin
+% flush left.
+%
+% The arguments are 1)~the line numbers, 2)~the lemma and 3)~the
+% text of the "-footnote" command.
+% \begin{macrocode}
+\def\threecolfootfmt#1#2#3{%
+ \normal@pars
+ \hsize .3\hsize
+ \parindent=0pt
+ \tolerance=5000
+ \raggedright
+ \leavevmode
+ \strut{\notenumfont\printlines#1|}\enspace
+ {\select@lemmafont#1|#2}\rbracket\enskip
+ #3\strut\par\allowbreak}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\threecolfootgroup}
+% And here is the "footgroup" macro that's called within the
+% output routine to regroup the notes into three columns. Once
+% again, the call to "\notefontsetup" is there to ensure that
+% it is the right "\splittopskip"---the one used in
+% footnotes---which is used to provide the third argument for
+% "\rigidbalance". This third argument ("\@h") is the
+% "topskip" for the box containing the text of the
+% footnotes, and does the job of making sure the top lines of the
+% columns line up horizontally. In {\em The \TeX book}, p.\,398,
+% Donald Knuth suggests retrieving the ouput of "\rigidbalance",
+% putting it back into the insertion box, and then printing the
+% box. Here, we just print the "\line" which comes out of
+% "\rigidbalance" directly, without any re-boxing.
+% \begin{macrocode}
+\def\threecolfootgroup#1{{\notefontsetup
+ \splittopskip=\ht\strutbox
+ \expandafter
+ \rigidbalance\csname #1footins\endcsname 3 \splittopskip }}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Two columns}
+%
+% \begin{macro}{\foottwocol}
+% You say "\foottwocol{A}" to have the "A" series of footnotes
+% typeset in two columns. It is important to call this only after
+% "\hsize" has been set for the document.
+% \begin{macrocode}
+\def\foottwocol#1{%
+ \expandafter\let\csname v#1footnote\endcsname=\twocolvfootnote
+ \expandafter\let\csname #1footfmt\endcsname=\twocolfootfmt
+ \expandafter\let\csname #1footgroup\endcsname=\twocolfootgroup
+ \twocolfootsetup{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\twocolfootsetup}
+% \begin{macro}{\twocolvfootnote}
+% \begin{macro}{\twocolfootfmt}
+% \begin{macro}{\twocolfootgroup}
+% Here is a series of macros which are very similar to their
+% three-column counterparts. In this case,
+% each note is assumed to contribute only a half a line of text.
+% And the notes are set in columns
+% "0.45\hsize" wide, giving a gap between them of one tenth
+% of the "\hsize".
+% \begin{macrocode}
+\def\twocolfootsetup#1{%
+ \count\csname #1footins\endcsname 500
+ \multiply\dimen\csname #1footins\endcsname by 2 }
+% \end{macrocode}
+% \begin{macrocode}
+\def\twocolvfootnote#1#2{\insert\csname #1footins\endcsname\bgroup
+ \notefontsetup
+ \interlinepenalty=\csname inter#1footnotelinepenalty\endcsname
+ \floatingpenalty=20000
+ \splittopskip=\ht\strutbox \splitmaxdepth=\dp\strutbox
+ \rightskip=0pt \leftskip=0pt
+ \csname #1footfmt\endcsname #2\egroup}
+% \end{macrocode}
+% \begin{macrocode}
+\def\twocolfootfmt#1#2#3{%
+ \normal@pars
+ \hsize .45\hsize
+ \parindent=0pt
+ \tolerance=5000
+ \raggedright
+ \leavevmode
+ \strut{\notenumfont\printlines#1|}\enspace
+ {\select@lemmafont#1|#2}\rbracket\enskip
+ #3\strut\par\allowbreak}
+% \end{macrocode}
+% \begin{macrocode}
+\def\twocolfootgroup#1{{\notefontsetup
+ \splittopskip=\ht\strutbox
+ \expandafter
+ \rigidbalance\csname #1footins\endcsname 2 \splittopskip}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Output routine}
+% \label{output}\relax
+%
+% Now we begin the output routine and associated things.
+%
+% \subsection{Crop marks}
+%
+% The following are the parameters that specify the page dimensions
+% that relate to crop marks; they are set by the "\cropsetup"
+% macro.
+%
+% \begin{macro}{\crop@vsize}
+% "\crop@vsize" is the vertical distance between crop marks.
+% \begin{macrocode}
+\newdimen\crop@vsize \crop@vsize=0pt
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\crop@hsize}
+% "\crop@hsize" is the horizontal distance between crop marks.
+% \begin{macrocode}
+\newdimen\crop@hsize \crop@hsize=0pt
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\head@margin}
+% "\head@margin" is the head margin.
+% \begin{macrocode}
+\newdimen\head@margin \head@margin=0pt
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\back@margin}
+% "\back@margin" is the back margin.
+% \begin{macrocode}
+\newdimen\back@margin \back@margin=0pt
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\odd@back}
+% \begin{macro}{\even@back}
+% \begin{macro}{\@back}
+% To handle the odd/even difference in the back margin, we keep the
+% different margin sizes in two registers, "\odd@back" and
+% "\even@back", and use a token register, "\@back", to
+% hold the code that decides which to use.
+% \begin{macrocode}
+\newdimen\odd@back \odd@back=0pt
+\newdimen\even@back \even@back=0pt
+\newtoks\@back
+\@back={\ifodd\pageno \odd@back \else \even@back\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\registration@marks}
+% We store up the registration marks in a box
+% called "\registration@marks" that's reused for every
+% page, instead of regenerating them all again at each page.
+% \begin{macrocode}
+\newbox\registration@marks
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\vertical@rules}
+% \begin{macro}{\horizontal@rules}
+% The following are macros that will be used in
+% the course of making "\registration@marks".
+% \begin{macrocode}
+\def\vertical@rules{%
+ \hbox to\crop@hsize{%
+ \vrule height1pc width\cropwidth depth0pt
+ \hfil
+ \vrule width\cropwidth depth0pt}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\horizontal@rules{%
+ \hbox to\crop@hsize{%
+ \llap{\vrule width1pc height\cropwidth \kern\cropgap}%
+ \hfil
+ \rlap{\kern\cropgap \vrule width1pc height\cropwidth}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cropwidth}
+% \begin{macro}{\cropgap}
+% Set standard values for the thickness of the rules used for drawing crop
+% marks ("\cropwidth") and the gap by which crop marks don't cross
+% ("\cropgap").
+% \begin{macrocode}
+\newdimen\cropwidth \cropwidth=.4pt
+% \end{macrocode}
+% \begin{macrocode}
+\newdimen\cropgap \cropgap=5pt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\magicvskip}
+% \begin{macro}{\headlinefont}
+% \label{magic}\relax
+% Publishers usually measure the head margin for the crop marks
+% from the top of the running head.\footnote{Cf.\ Hugh Williamson,
+% {\it Methods of Book Design\/} (New Haven: Yale University Press,
+% 1983), p.\,21.\protect\index{Williamson, Hugh}}
+%
+% \PlainTeX's starting reference point for a page is not the
+% running head, but a point "\topskip" above the baseline of
+% the first line of main text on the page. (Before doing anything
+% else, \TeX\ adds a small amount of skip to the top of a new page,
+% which is calculated to bring the baseline of the top line of text
+% down to "\topskip" from the top of the page, i.e., from the
+% point where the "\vsize" is measured from: {\em The \TeX
+% book}, pp.\,113--114.) So any vertical matter we add in the output
+% routine to the start of a page will sit with its base at a point
+% "\topskip" above the baseline of the first line of the main
+% text. And if "\ht\strutbox" is the height of the header box
+% we are adding, then the distance between its top and the
+% reference point will be
+% "\topskip"$-$"\ht\strutbox"$-s$, where $s$ is the space
+% we want to put between the baselines of the header and the first
+% text line.
+%
+% In \PlainTeX, this distance is $-22.5$\,pt, a ``magic constant''
+% explained in {\em The \TeX book}, p.\,255. Rather than using this
+% figure explicitly, "EDMAC" calculates it afresh, in case
+% you have changed any of the values that go to make up this magic
+% constant. The parameters involved are the "\topskip", the
+% font of the "\headline" text (which determines the height of
+% the "\strutbox"), and the "\baselineskip" (assuming that you
+% want the header to be exactly two lines above the first line of
+% the text). This calculation is done within "\cropsetup".
+% \begin{macrocode}
+\newdimen\magicvskip \magicvskip=\topskip
+% \end{macrocode}
+%
+% If the "\headline" is going to be set at a different height
+% from the top of the text, or in a different size of font,
+% be sure to make the appropriate changes to the
+% above parameters, or the crop marks will not be in the right
+% position. We now set the standard value for "\headlinefont".
+% \begin{macrocode}
+\let\headlinefont=\rm
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cropsetup}
+% \begin{macro}{\ifcropmarks@}
+% Here at last is the "\cropsetup"
+% macro that takes the page and margin
+% dimensions you specify and calculates all the other parameters
+% from them. It should always be used after "\hsize",
+% "\makeheadline", and "\headlinefont" for the
+% document have been set, as explained above.
+% These macros use the same approach as those published by David
+% Salomon\index{Salomon, David} in {\em TUGboat\/} {\bf 11} (1990),
+% pp.\,77--78. Cf.\ also the "\setcornerrules" code in {\em The \TeX
+% book}, pp.\,416--417.
+%
+% The four arguments are as described above, on page
+% \pageref{cropsetup}.
+%
+% First, set up a conditional, "\ifcropmarks@",
+% for use in the output routine.
+% Initially, it's false. (It is set to true when you use the
+% "\cropsetup" macro.)
+% \begin{macrocode}
+\newif\ifcropmarks@
+% \end{macrocode}
+% Now the main macro to set up crop marks:
+% \begin{macrocode}
+\def\cropsetup#1#2#3#4{\cropmarks@true
+ \global\crop@vsize=#1
+ \global\crop@hsize=#2
+ \global\head@margin=#3
+ \global\back@margin=#4
+% \end{macrocode}
+% The back margin for odd pages is easy. For even pages, we take the
+% full width and subtract the text width and back margin size.
+% \begin{macrocode}
+ \global\odd@back=\back@margin
+ \global\even@back=\crop@hsize
+ \global\advance\even@back by -\hsize
+ \global\advance\even@back by -\back@margin
+% \end{macrocode}
+% \begin{macrocode}
+ \setbox\registration@marks=
+ \vbox to \crop@vsize{%
+ \offinterlineskip
+ \vbox to0pt{\vss
+ \vertical@rules
+ \kern\cropgap
+ \horizontal@rules}%
+ \vfil
+ \vbox to0pt{%
+ \horizontal@rules
+ \kern\cropgap
+ \vertical@rules\vss}}%
+% \end{macrocode}
+%
+% Set the box's size to zero.
+%
+% \begin{macrocode}
+ \ht\registration@marks=0pt
+ \wd\registration@marks=0pt
+% \end{macrocode}
+%
+% In the next lines, we set the font to "\headlinefont" so that
+% the height of the "\strutbox" will be the that of the
+% "\headlinefont" font. This makes the assumption that font
+% used for the "\headline" is invoked by "\headlinefont",
+% and that the "\headlinefont" macro defines a
+% "\strutbox" of an appropriate size for the font. (The
+% standard setting is to \PlainTeX's "\rm", and the height of a
+% "\strutbox" for this font is already set by \PlainTeX.)
+% \begin{macrocode}
+ \global\magicvskip=\topskip
+ {\headlinefont \global\advance\magicvskip by -\ht\strutbox}%
+ \global\advance\magicvskip by -2\baselineskip}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Output routine}
+%
+% \begin{macro}{\output}
+% \begin{macro}{\edmac@output}
+% \begin{macro}{\pagecontents}
+% This is a new output routine, with changes to handle printing all our
+% footnotes. Those changes have not been added directly, but are in macros
+% that get called here: that should make it easier to see what would need
+% to be taken over to a different output routine. We continue to use the
+% "\pagebody", "\makeheadline", "\makefootline", and "\dosupereject"
+% macros of \PlainTeX; for those macros, and the original version of
+% "\output", see {\em The \TeX book}, p.\,364.
+% \begin{macrocode}
+\output{\edmac@output}
+\def\edmac@output{\shipout\vbox{\normal@pars
+ \ifcropmarks@
+ \do@cropmarks
+ \else
+ \vbox{\makeheadline\pagebody\makefootline}%
+ \fi}%
+ \advancepageno
+ \ifnum\outputpenalty>-\@MM\else\dosupereject\fi}
+% \end{macrocode}
+% \begin{macrocode}
+\def\pagecontents{\page@start
+ \ifvoid\topins\else\unvbox\topins\fi
+ \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
+ \do@feet
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\do@cropmarks}
+% When crop marks are to be printed,
+% "\edmac@output" uses this macro to print them, along with the
+% text of the page.
+% \begin{macrocode}
+\def\do@cropmarks{%
+ \vbox{\offinterlineskip
+ \kern\magicvskip
+ \copy\registration@marks
+ \kern-\magicvskip}%
+ \nointerlineskip
+ \kern\head@margin
+ \moveright\the\@back\vbox{\makeheadline\pagebody\makefootline}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@feet}
+% "\do@feet" ships out all the footnotes. Standard "EDMAC" has only
+% five feet, but there is nothing in principal to prevent you
+% from creating an arachnoid or centipedal edition; straightforward
+% modifications of "EDMAC" are all that's required. However, the
+% myria\-pedal edition is ruled out by \TeX's limitations: the number
+% of insertion classes is limited to $255$.
+% \begin{macrocode}
+\def\do@feet{%
+ \ifvoid\footins\else
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins
+ \fi
+ \ifvoid\Afootins\else
+ \Afootstart{A}\Afootgroup{A}%
+ \fi
+ \ifvoid\Bfootins\else
+ \Bfootstart{B}\Bfootgroup{B}%
+ \fi
+ \ifvoid\Cfootins\else
+ \Cfootstart{C}\Cfootgroup{C}%
+ \fi
+ \ifvoid\Dfootins\else
+ \Dfootstart{D}\Dfootgroup{D}%
+ \fi
+ \ifvoid\Efootins\else
+ \Efootstart{E}\Efootgroup{E}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Cross referencing}
+% \label{xref}\relax
+%
+% You can mark a place in the text using a command of the form
+% "\label{foo}", and later refer to it using the label
+% "foo" by saying "\pageref{foo}", or "\lineref{foo}" or
+% "\sublineref{foo}". These reference commands will produce,
+% respectively, the page, line and sub-line on which the
+% "\label{foo}" command occurred.
+%
+% The reference macros warn you if a reference is made to an
+% undefined label. If "foo" has been used as a label before,
+% the "\label{foo}" command will issue a complaint; subsequent
+% "\pageref" and "\lineref" commands will refer to the
+% latest occurrence of "\label{foo}". When any of these
+% commands are used, an additional auxiliary file, called
+% \meta{filename}".aux", is created.
+%
+% \begin{macro}{\labelref@list}
+% Set up a new list, "\labelref@list", to hold the page, line and
+% sub-line numbers for each label.
+% \begin{macrocode}
+\list@create{\labelref@list}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@aux}
+% "\@aux" is the output stream number for our auxiliary file
+% that contains labeling commands.
+% \begin{macrocode}
+\newwrite\@aux
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@labelsfile}
+% The "\do@labelsfile" macro
+% opens the auxiliary labels file and executes it; the file should
+% consist of a stream of "\make@labels" commands. Then it opens
+% a new auxiliary file, and redefines itself so that it isn't called
+% again. This will be called by the first "\label" or reference
+% command that appears in the text---and not at all if there are no
+% labels or references, so we won't bother at all with an ".aux"
+% file if there's no need for it.
+% \begin{macrocode}
+\def\do@labelsfile{%
+ \openin\@inputcheck=\jobname.aux
+ \ifeof\@inputcheck \else
+ \closein\@inputcheck
+ \begingroup
+ \makeatletter \catcode`\^^M=9
+ \input\jobname.aux
+ \endgroup
+ \fi
+ \immediate\openout\@aux=\jobname.aux
+ \global\let\do@labelsfile=\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\label}
+% \begin{macro}{\zz@@@}
+% The "\label" command first writes a "\@lab" macro to
+% the "\linenum@out" file. It then checks to see that the
+% "\labelref@list" actually has something in it (if not, it
+% creates a dummy entry), and pops the next value for the current
+% label, storing it in "\label@refs". Finally it defines the
+% label to be "\empty" so that any future check will turn up
+% the fact that it has been used.\footnote{The remaining macros
+% in this section were kindly revised by Wayne
+% Sullivan,\index{Sullivan, Wayne} who
+% substantially improved their efficiency and flexibility.}
+% \begin{macrocode}
+\def\zz@@@{000|000|000} % set three counters to zero in one go
+% \end{macrocode}
+% \begin{macrocode}
+\def\label#1{\do@labelsfile
+ \write\linenum@out{\string\@lab}%
+ \ifx\labelref@list\empty
+ \xdef\label@refs{\zz@@@}%
+ \else
+ \gl@p\labelref@list\to\label@refs
+ \fi
+ \edef\next{\write\@aux{\string\make@labels\label@refs|{#1}}}%
+ \next}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\make@labels}
+% The "\make@labels" macro gets executed when the labels file is
+% read. For each label it defines a macro, whose name is made up
+% partly from the label you supplied, that contains the page, line
+% and sub-line numbers. But first it checks to see whether the
+% label has already been used (and complains if it has).
+% \begin{macrocode}
+\def\make@labels#1|#2|#3|#4{%
+ \expandafter\ifx\csname the@label#4\endcsname \relax\else
+ \edmac@warning{Duplicate definition of label `#4'
+ on page \number\pageno.}%
+ \fi
+ \expandafter\gdef\csname the@label#4\endcsname{#1|#2|#3}%
+ \ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@lab}
+% The "\@lab" command, which appears in the "\linenum@out" file,
+% appends the current values of page, line and sub-line to the
+% "\labelref@list". These values are defined by the earlier
+% "\@page", "\@l", and the "\sub@on" and "\sub@off" commands
+% appearing in the "\linenum@out" file.
+% \begin{macrocode}
+\def\@lab{\xright@appenditem
+ {\the\page@num|\the\line@num|%
+ \ifsublines@ \the\subline@num \else 0\fi}\to\labelref@list}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pageref}
+% \begin{macro}{\xpageref}
+% If the specified label exists, "\pageref" gives its page number.
+% For this reference command, as for the other two, a special
+% version with prefix "x" is provided for use in places where the
+% command is to be scanned as a number, as in "\linenum". These
+% special versions have two limitations: they don't print error
+% messages if the reference is unknown, and they can't appear as
+% the first label or reference command in the file; you must ensure
+% that a "\label" or a normal reference command appears first, or
+% these x-commands will always return zeros.
+% \begin{macrocode}
+\def\pageref#1{\ref@undefined{#1}\getref@num{1}{#1}}
+\def\xpageref#1{\getref@num{1}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lineref}
+% \begin{macro}{\xlineref}
+% If the specified label exists, "\lineref" gives its line number.
+% \begin{macrocode}
+\def\lineref#1{\ref@undefined{#1}\getref@num{2}{#1}}
+\def\xlineref#1{\getref@num{2}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sublineref}
+% \begin{macro}{\xsublineref}
+% If the specified label exists, "\sublineref" gives its sub-line number.
+% \begin{macrocode}
+\def\sublineref#1{\ref@undefined{#1}\getref@num{3}{#1}}
+\def\xsublineref#1{\getref@num{3}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ref@undefined}
+% The next three macros are used by the referencing commands above,
+% and do the job of extracting the right numbers from the label
+% macro that contains the page, line, and sub-line number. The
+% "\ref@undefined" macro is called when you refer to a label with
+% the normal referencing macros. Its argument is a label, and it
+% just checks that the labels file has indeed been opened and read (if
+% not, it does so), and that the label is defined (if not, it
+% squeals). (It is these checks which the "x-" forms of the
+% reference macros leave out.)
+% \begin{macrocode}
+\def\ref@undefined#1{\do@labelsfile
+ \expandafter\ifx\csname the@label#1\endcsname\relax
+ \edmac@warning{Reference `#1'
+ on page \the\pageno\space undefined. Using `000'.}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\getref@num}
+% Next, "\getref@num" fetches the number we want. It has two
+% arguments: the first is simply a digit, specifying whether to
+% fetch a page ("1"), line ("2") or sub-line ("3") number. (This
+% switching is done by calling "\label@parse".) The second argument
+% is the label-macro, which because of the "\@lab" macro above is
+% defined to be a string of the type "123|456|789".
+% \begin{macrocode}
+\def\getref@num#1#2{%
+ \expandafter
+ \ifx\csname the@label#2\endcsname \relax
+ 000%
+ \else
+ \expandafter\expandafter\expandafter
+ \label@parse\csname the@label#2\endcsname|#1%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\label@parse}
+% Notice that we slipped another "|" delimiter into the
+% penultimate line of "\getref@num", to
+% keep the ``switch-number'' separate from the reference numbers. This
+% "|" is used as another parameter delimiter by "\label@parse",
+% which extracts the appropriate number from its first arguments.
+% The "|"-delimited arguments consist of the expanded label-macro
+% (three reference numbers), followed by the switch-number ( "1",
+% "2", or "3") which defines which of the earlier three numbers to
+% pick out. (It was earlier given as the first argument of
+% "\getref@num".)
+% \begin{macrocode}
+\def\label@parse#1|#2|#3|#4{%
+ \ifcase #4\relax
+ \or #1%
+ \or #2%
+ \or #3%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\xxref}
+% The "\xxref" command takes two arguments, both of which are
+% labels, e.g., "\xxref{mouse}{elephant}". It first does some
+% checking to make sure that the labels do exist (if one doesn't,
+% those numbers are set to zero). Then it calls "\linenum" and sets
+% the beginning page, line, and sub-line numbers to those of the
+% place where "\label{mouse}" was placed, and the ending
+% numbers to those at "\label{elephant}". The point of this is
+% to be able to manufacture footnote line references to passages
+% which can't be specified in the normal way as the first argument
+% to "\text" for one reason or another. Using "\xxref" in the
+% second argument of "\text" lets you set things up at least
+% semi-automatically.
+% \begin{macrocode}
+\def\xxref#1#2{%
+ {\expandafter\ifx\csname the@label#1\endcsname
+ \relax \expandafter\let\csname the@label#1\endcsname\zz@@@\fi
+ \expandafter\ifx\csname the@label#2\endcsname \relax
+ \expandafter\let\csname the@label#2\endcsname\zz@@@\fi
+ \linenum{\csname the@label#1\endcsname|%
+ \csname the@label#2\endcsname}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\makelabel}
+% Sometimes the "\label" command cannot be used to specify
+% exactly the page and line desired; you can use the "\makelabel" macro
+% make your own label. For example, if you say
+% ``"\makelabel{elephant}{10|25|0}"'' you will have created a
+% new label, and a later call to "\pageref{elephant}" would
+% print ``10'' and "\lineref{elephant}" would print ``25''.
+% The sub-line number here is zero.
+% "\makelabel" takes a label, followed by a page and a line number(s)
+% as arguments.
+% \begin{macrocode}
+\def\makelabel#1#2{\expandafter\xdef\csname the@label#1\endcsname{#2}}
+% \end{macrocode}
+% (If you are only going to refer to such a label using
+% "\xxref", then you can omit entries in the same way as with
+% "\linenum" (see pp.\,\pageref{linenumdef} and
+% \pageref{linenumbers}), since "\xxref" makes a call to
+% "\linenum" in order to do its work.)
+% \end{macro}
+%
+%
+% \section{Endnotes}
+% \label{endnotes}\relax
+%
+% \begin{macro}{\@end}
+% \begin{macro}{\ifend@}
+% \begin{macro}{\end@true}
+% \begin{macro}{\end@false}
+% Endnotes of all varieties are saved up in a file, typically named
+% \meta{filename}".end".
+% "\@end" is the output stream number for
+% this file, and "\ifend@" is a flag that's "true" when the file is open.
+% \begin{macrocode}
+\newwrite\@end
+\newif\ifend@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\end@open}
+% \begin{macro}{\end@close}
+% "\end@open" and "\end@close" are the
+% macros that are used to open and close the endnote file. Note that
+% all our writing to this file is "\immediate": all page and
+% line numbers for the endnotes are generated by the same mechanism
+% we use for the footnotes, so that there's no need to defer any
+% writing to catch information from the output routine.
+% \begin{macrocode}
+\def\end@open#1{\end@true\immediate\openout\@end=#1\relax}
+\def\end@close{\end@false\immediate\closeout\@end}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\end@stuff}
+% "\end@stuff" is used by "\beginnumbering" to
+% do everything that's necessary for the endnotes at the
+% start of each section: it opens the "\@end" file, if necessary,
+% and writes the section number to the endnote file.
+% \begin{macrocode}
+\def\end@stuff{%
+ \ifend@\relax\else
+ \end@open{\jobname.end}%
+ \fi
+ \immediate\write\@end{\string\@section{\the\section@num}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Aendnote}
+% \begin{macro}{\Bendnote}
+% \begin{macro}{\Cendnote}
+% \begin{macro}{\Dendnote}
+% \begin{macro}{\Eendnote}
+% The following five macros each function to
+% write one endnote to the ".end" file. Like the footnotes, these
+% endnotes come in five series, "A" through "E". We change
+% "\newlinechar" so that in the file every space becomes the
+% start of a new line; this generally ensures that a long note doesn't
+% exceed restrictions on the length of lines in files.
+% \begin{macrocode}
+\def\Aendnote#1{{\newlinechar='40
+ \immediate\write\@end{\string\Aend%
+ {\ifnumberedpar@\@nums\fi}%
+ {\ifnumberedpar@\@tag\fi}{#1}}}\ignorespaces}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Bendnote#1{{\newlinechar='40
+ \immediate\write\@end{\string\Bend%
+ {\ifnumberedpar@\@nums\fi}%
+ {\ifnumberedpar@\@tag\fi}{#1}}}\ignorespaces}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Cendnote#1{{\newlinechar='40
+ \immediate\write\@end{\string\Cend%
+ {\ifnumberedpar@\@nums\fi}%
+ {\ifnumberedpar@\@tag\fi}{#1}}}\ignorespaces}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Dendnote#1{{\newlinechar='40
+ \immediate\write\@end{\string\Dend%
+ {\ifnumberedpar@\@nums\fi}%
+ {\ifnumberedpar@\@tag\fi}{#1}}}\ignorespaces}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Eendnote#1{{\newlinechar='40
+ \immediate\write\@end{\string\Eend%
+ {\ifnumberedpar@\@nums\fi}%
+ {\ifnumberedpar@\@tag\fi}{#1}}}\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Aend}
+% \begin{macro}{\Bend}
+% \begin{macro}{\Cend}
+% \begin{macro}{\Dend}
+% \begin{macro}{\Eend}
+% \begin{macro}{\endprint}
+% \begin{macro}{\@gobblethree}
+% \begin{macro}{\@section}
+% "\Aendnote" and the like write commands called "\Aend" and
+% so on to the endnote file; these are analogous to the various
+% "footfmt" commands above, and they take the same arguments.
+% When we process this file, we'll want to pick out the notes of one
+% series and ignore all the rest. To do that, we equate the "end"
+% command for the series we want to "\endprint", and leave the
+% rest equated to "\@gobblethree", which just skips over its three
+% arguments. The "\endprint" here is nearly identical in its
+% functioning to "\normalfootfmt".
+%
+% The endnote file also contains "\@section" commands, which
+% supply the section numbers from the main text; standard "EDMAC" does
+% nothing with this information, but it's there if you want to write
+% custom macros to do something with it.
+% \begin{macrocode}
+\def\endprint#1#2#3{{\notefontsetup{\notenumfont\printlines#1|}%
+ \enspace{\select@lemmafont#1|#2}\enskip#3\par}}
+\def\@gobblethree#1#2#3{}
+\let\Aend=\@gobblethree
+\let\Bend=\@gobblethree
+\let\Cend=\@gobblethree
+\let\Dend=\@gobblethree
+\let\Eend=\@gobblethree
+\let\@section=\@gobble
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\doendnotes}
+% "\doendnotes" is
+% the command you use to print one series of endnotes; it
+% takes one argument, the series letter of the note series you want
+% to print.
+% \begin{macrocode}
+\def\doendnotes#1{\end@close
+ \begingroup
+ \makeatletter
+ \expandafter\let\csname #1end\endcsname=\endprint
+ \input\jobname.end
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\noendnotes}
+% You can say "\noendnotes" before the first
+% "\beginnumbering" in your file if you aren't going to be using
+% any of the endnote commands: this will suppress the creation of
+% an ".end" file. If you do have some lingering endnote
+% commands in your file,
+% the notes will be written to your terminal and to the \TeX\ log file.
+% \begin{macrocode}
+\def\noendnotes{\global\let\end@stuff=\relax
+ \global\chardef\@end=16 }
+% \end{macrocode}
+% \end{macro}
+%
+% \section{The End}\label{end}
+%
+% At signs are no longer letters.
+% \begin{macrocode}
+\makeatother
+% \end{macrocode}
+%
+% \newpage
+% \appendix
+%
+% \section{Examples}\label{examples}
+%
+% In the following examples, the command "\input edmac.doc" has
+% been included for completeness. This is always safe, since
+% "EDMAC" checks to see if has been loaded before. But, as mentioned
+% above, it is usually more convenient to include the "EDMAC" macros
+% in a pre-digested \TeX\ format file, to be invoked with a command such
+% as "tex &edmac" \meta{filename}.
+%
+% \subsection{General example of features}
+% This made-up example, "features.tex", is included purely to illustrate
+% some of "EDMAC"'s main features. It is hard to find real-world
+% examples that actually use as many layers of notes as this, so we made
+% one up. The example is a bit tricky to read, but close study and
+% comparison with the output (Figure~\ref{features-out}) will be
+% illuminating.
+% \begin{figure}[p]
+% \includegraphics{features}
+% \vspace*{\textheight} ^^A supply artwork
+% \vspace*{-3\baselineskip}
+% \caption{Output from {\tt features.tex}.}
+% \label{features-out}
+% \end{figure}
+%
+% \medskip
+% \hrule
+% \medskip
+% \begin{small}
+% \begin{verbatim}
+% \input edmac.doc
+% \hsize 28pc
+% \vsize 35pc
+% \cropsetup{45pc}{35pc}{4pc}{4pc}
+% \headline{Headline \hfil \folio}
+% \footline{Footline \hfil --\folio--\hfil footline}
+%
+% \makeatletter
+% % I'd like a spaced out colon after the lemma:
+% \def\spacedcolon{{\rm\thinspace:\thinspace}}
+% \def\normalfootfmt#1#2#3{%
+% \normal@pars
+% \parindent=0pt \parfillskip=0pt plus 1fil
+% {\notenumfont\printlines#1|}\strut\enspace
+% {\select@lemmafont#1|#2}\spacedcolon\enskip#3\strut\par}
+%
+% % And I'd like the 3-col notes printed with a hanging indent:
+% \def\threecolfootfmt#1#2#3{%
+% \normal@pars
+% \hsize .3\hsize
+% \parindent=0pt
+% \tolerance=5000 % high, but not infinite
+% \raggedright
+% \hangindent1.5em \hangafter1
+% \leavevmode
+% \strut\hbox to 1.5em{\notenumfont\printlines#1|\hfil}\ignorespaces
+% {\select@lemmafont#1|#2}\rbracket\enskip
+% #3\strut\par\allowbreak}
+%
+% % And I'd like the 2-col notes printed with a double colon:
+% \def\doublecolon{{\rm\thinspace::\thinspace}}
+% \def\twocolfootfmt#1#2#3{%
+% \normal@pars
+% \hsize .45\hsize
+% \parindent=0pt
+% \tolerance=5000
+% \raggedright
+% \leavevmode
+% \strut{\notenumfont\printlines#1|}\enspace
+% {\select@lemmafont#1|#2}\doublecolon\enskip
+% #3\strut\par\allowbreak}
+%
+% % And in the paragraphed footnotes, I'd like a colon too:
+% \def\parafootfmt#1#2#3{%
+% \normal@pars
+% \parindent=0pt \parfillskip=0pt plus 1fil
+% {\notenumfont\printlines#1|}\enspace
+% {\select@lemmafont#1|#2}\spacedcolon\enskip
+% #3\penalty-10 }
+% \makeatother
+%
+% % I'd like the line numbers picked out in bold.
+% \let\notenumfont=\eightbf
+% \lineation{page}
+% \linenummargin{inner}
+% \firstlinenum=3 % just because I can
+% \linenumincrement=1
+% \foottwocol{A}
+% \footthreecol{B}
+% \footparagraph{E}
+% % I've changed \normalfootfmt, so invoke it again for C and D notes.
+% \footnormal{C}
+% \footnormal{D}
+%
+% \beginnumbering
+%
+% \pstart
+% This is an \text{example}
+% \Afootnote{eximemple C, D.}/
+% of some text with \text{variant}
+% \Afootnote{alternative, A, B.}/
+% readings recorded as `A' footnotes. From here on, \text{though}
+% \Afootnote{however $\alpha$, $\beta$}/,
+% we shall have \text{`C'}
+% \Bfootnote{B, {\it pace\/} the text}/.
+% \text{For spice, let us mark a longer passage, but give a different
+% lemma for it, so that we don't get a \text{huge}
+% \Dfootnote{vast E, F; note that this is
+% a `D' note to section of text within a longer lemma}/
+% amount of text in a note}\lemma{For spice \dots\ note}
+% \Cfootnote{The note here is type `C'}/.
+% \text{Finally}
+% \Efootnote{in the end X, Y}/,
+% \text{we}
+% \Efootnote{us K}/
+% \text{shouldn't}
+% \Efootnote{ought not to L, M}/
+% \text{forget the}
+% \Efootnote{omit to mention the \S, \P}/
+% \text{paragraphed}
+% \Efootnote{blocked M, N}/
+% \text{notes}
+% \Efootnote{variants HH, KK}/,
+% which are so \text{useful}
+% \Efootnote{truly useful L, P}/
+% when there are \text{a great number of}
+% \Efootnote{many, many (preferably)}/
+% short notes to be \text{recorded}
+% \Efootnote{noted: repetition}/.
+% \pend
+%
+% \pstart
+% This is a second paragraph, giving more {\it \text{examples}
+% \Afootnote{eximples L, M.}/}
+% of text with \text{variant}
+% \Afootnote{alternative, A, B.}/
+% readings recorded as `A' footnotes. From here on, \text{though}
+% \Bfootnote{however $\alpha$, $\beta$}/,
+% we shall have \text{`B'}
+% \Bfootnote{B, as correctly stated in the text}/ notes in the text.
+% \text{For spice, let us mark a longer passage, but give a different
+% lemma for it, so that we don't get a {\it \text{huge}
+% \Dfootnote{vast E, F; note that this is
+% a `D' note to text within a longer lemma.}/}
+% amount of text in a note}\lemma{For spice, \dots\ note}
+% \Cfootnote{This is a rogue note of type `C'.}/.
+% \text{Finally}
+% \Bfootnote{In the end X, Y}/,
+% \text{we}
+% \Bfootnote{we here K}/
+% \text{shouldn't}
+% \Bfootnote{ought not to L, M}/
+% \text{forget the}
+% \Bfootnote{omit to mention the \S, \P}/
+% \text{column}
+% \Bfootnote{blocked M, N}/
+% \text{notes}
+% \Bfootnote{variants H}/,
+% which are so \text{useful}
+% \Bfootnote{very, very useful L, P}/
+% when there are \text{many}
+% \Bfootnote{lots of Z}/
+% short notes to be \text{recorded}
+% \Bfootnote{recorded and put down: M (repetition)}/.
+% \pend
+%
+% \endnumbering
+% \bye
+% \end{verbatim}
+% \end{small}
+% \medskip
+% \hrule
+% \medskip
+%
+% \subsection{Gascoigne}
+% The first real-life example is taken from an edition of George
+% Gascoigne's\index{Gascoigne, George}
+% {\em A Hundreth Sundrie Flowres\/} that is being
+% prepared by G.~W.~Pigman III,\index{Pigman, III$^{rd}$, G. W.} at
+% the California Institute of Technology. Figure \ref{iocasta-out}
+% shows the result of setting the text with "EDMAC".
+% \begin{figure}[p]
+% \includegraphics{iocasta}
+% \vspace*{\textheight} ^^A supply artwork
+% \vspace*{-3\baselineskip}
+% \caption{Output from {\tt iocasta.tex}.}
+% \label{iocasta-out}
+% \end{figure}
+%
+% The main input file first calls for a file of initial
+% definitions, called "gg.tex". This file, shown below,
+% demonstrates how "EDMAC" macros may be customized to give
+% detailed control over the final format.
+% \medskip
+%
+% \hrule
+% \medskip
+% \begin{small}
+% \begin{verbatim}
+% % parameters for edition of Gascoigne's
+% % {\it A Hundreth Sundrie Flowres}.
+% \ifx\ggloaded\relax\endinput\else\let\ggloaded=\relax\fi
+% \noendnotes
+% \makeatletter
+% %
+% \font\poemnumfont=cmmi12 \font\titlefont=cmr12 \font\ninerm=cmr9
+% \font\nineit=cmti9 \font\eightrm=cmr8
+% \let\headfont=\eightrm
+% \font\eightit=cmti8 \let\headit=\eightit \font\sixrm=cmr6
+% \font\foliofont=cmmi8 \let\os=\foliofont
+% \let\numlabfont=\foliofont
+% %
+% \firstsublinenum=1000
+% \hoffset=1.25in \voffset=1.25in \hsize=24pc \vsize=488pt
+% %
+% \frenchspacing \parskip=0pt \hyphenpenalty=1000
+% %
+% \def\makeheadline{\vbox to 0pt{\vskip-16.5pt
+% \line{\vbox to8.5pt{}\the\headline}\vss}\nointerlineskip}
+% \nopagenumbers
+% %
+% % Say \nolinenums if you want no line numbers in the notes.
+% \newif\ifnolinenums
+% \def\nolinenums{\global\nolinenumstrue}
+% \def\linenums{\global\nolinenumsfalse}
+% % Say \nopoemnum to suppress poem number in the notes.
+% \newif\ifpoemnum
+% \def\nopoemnum{\global\poemnumfalse}
+% % Say \nodbpoemnum to suppress poem number in the notes for
+% % poems with two numbers, e.g., 64 (v).
+% \newif\ifdbpoemnum
+% \def\nodbpoemnum{\global\dbpoemnumfalse}
+% % Say \noactnum to suppress act/scene numbers in the notes.
+% \newif\ifactnum
+% \def\noactnum{\global\actnumfalse}
+% %
+% \newcount\poemnumber
+% \def\poem#1{\poemnumber=#1\poemnumtrue\parindent=0pt
+% \centerline{{\poemnumfont#1}}\vskip12pt}
+% %
+% \newcount\dbpoemnumone \newcount\dbpoemnumtwo
+% \def\dbpoem#1#2{\dbpoemnumtrue\dbpoemnumone=#1\dbpoemnumtwo=#2
+% \parindent=0pt\par
+% \centerline{{\poemnumfont#1} {\titlefont
+% (\romannumeral#2)}}\nointerlineskip \vskip12pt}
+% %
+% \newcount\actnumber \newcount\scenenumber
+% \def\act #1 #2 #3{\actnumtrue\actnumber=#1\scenenumber=#2
+% \parindent=0pt\vskip24pt plus12pt minus3pt\hrule height0pt\relax
+% \pstart\startsub\centerline{\rm#3}\pend\endsub
+% \mark{{\os#1\fullstop #2}}\nobreak \vskip 12pt plus3pt minus3pt}
+% %
+% \def\rightlinenum{\ifbypage@\ifnum\line@num<10\kern.5em\fi\else
+% \ifnum\line@num<10\kern1em\else\ifnum\line@num<100
+% \kern.5em\fi\fi\fi\kern.5em\numlabfont\the\line@num
+% \ifnum\subline@num>0:\the\subline@num\fi}
+% \def\leftlinenum{\numlabfont\the\line@num
+% \ifnum\subline@num>0:\the\subline@num\fi \kern.5em}
+% \linenummargin{outer}
+% \lineation{page}
+% \def\ggfootfmt#1#2#3{%
+% \notefontsetup
+% \let\par=\endgraf
+% \rightskip=0pt \leftskip=0pt
+% \parindent=0pt \parfillskip=0pt plus 1fil
+% \ifnolinenums\relax\else
+% \begingroup \os \panums \printlines#1|\endgroup
+% \enskip
+% \fi
+% {\rm #2\def\@tempa{#2}\ifx\@tempa\empty
+% \else]\enskip\fi#3\penalty-10 }}
+% %
+% % \panums adds the poem number or act/scene number to a
+% % line number display when necessary.
+% %
+% \def\panums{%
+% \ifpoemnum % a poem
+% \the\poemnumber:%
+% \global\poemnumfalse
+% \fi
+% \ifdbpoemnum % a poem with two numbers
+% \the\dbpoemnumone\space
+% {\rm(\romannumeral\the\dbpoemnumtwo).}%
+% \global\dbpoemnumfalse
+% \fi
+% \ifactnum % a play (act/scene)
+% \the\actnumber:\the\scenenumber:%
+% \global\actnumfalse
+% \fi}
+% %
+% % Now reset the \Afootnote parameters and macros:
+% \footparagraph{A}
+% \let\Afootfmt=\ggfootfmt
+% \dimen\Afootins=\vsize
+% \skip\Afootins=3pt plus9pt
+% \def\ggfootstart#1{\vskip\skip\Afootins}
+% \let\Afootstart=\ggfootstart
+% \def\title{\pstart\startsub\let\par=\endtitle}
+% \def\endtitle{\pend\endsub}
+% \def\verseskip{\vskip6pt plus6pt}
+% \def\speaker#1{\pstart\parindent=1em\let\par=\pend
+% {\tenit{#1}}\hbox to 1ex{}\ignorespaces}
+% \def\sen{\leavevmode\lower1ex\hbox{\tenrm''}}
+% \def\senspeak#1{\pstart\obeylines\setbox0=\hbox{\tenrm''}%
+% \leavevmode
+% \lower1ex\copy0\kern-\wd0\hskip1em{\tenit{#1}}%
+% \hbox to1ex{}\ignorespaces}
+% \def\speak#1{\pstart\obeylines\hskip1em{\tenit{#1}}%
+% \hbox to1ex{}\ignorespaces}
+% \def\nospeaker{\parindent=0em\pstart\let\par=\pend}
+% \def\nospeak{\pstart\obeylines}
+% \def\stage#1{\pstart\startsub\parindent=0pt
+% \hangindent=3em\hangafter=0
+% {\tenit#1}\let\par=\endstage}
+% \let\endstage=\endtitle
+% \def\motto#1{\pstart\startsub\centerline{{\tenit#1}}\pend\endsub}
+% \def\finis#1{\pstart\startsub\smallskip\centerline{{\tenit#1}}
+% \let\par=\endfinis}
+% \let\endfinis=\endtitle
+% \def\initials#1{\pstart\line{\hfil{\it #1}\quad}\let\par=\pend}
+% \makeatother
+% \end{verbatim}
+% \end{small}
+% \medskip
+% \hrule
+% \medskip
+%
+% With these definitions, the actual input file,
+% "iocasta.tex", is relatively simple:
+%
+% \medskip
+% \hrule
+% \medskip
+% \begin{small}
+% \begin{verbatim}
+% \input edmac.doc
+% \input gg
+% \parindent=0pt
+% \pageno=73
+% \mark{{\os2:1}}
+% \headline={\ifnum\pageno>61\ifodd\pageno
+% \rlap{\foliofont\botmark}\hfil\headfont
+% IOCASTA\hfil\llap{\foliofont\folio}%
+% \else
+% \rlap{\foliofont\folio}\hfil\headfont
+% IOCASTA\hfil\llap{\foliofont\botmark}\fi
+% \else\hfil\fi}
+%
+% \beginnumbering
+%
+% \stage{Oedipus \text{entreth}\Afootnote{{\it intrat} MS}/.}
+%
+% \nospeak
+% Or that with wrong the right and doubtlesse heire,
+% Shoulde banisht be out of his princely seate.
+% Yet thou O queene, so fyle thy sugred toung,
+% And with suche counsell decke thy mothers tale,
+% That peace may bothe the brothers heartes inflame,
+% And rancour yelde, that erst possest the same.
+% \pend
+%
+% \speak{Eteocl.} Mother, beholde, youre hestes for to obey,
+% In person nowe am I resorted hither:
+% In haste therefore, fayne woulde I knowe what cause
+% With hastie speede, so moued hath your mynde
+% To call me nowe so causelesse out of tyme,
+% When common wealth moste craues my onely ayde:
+% Fayne woulde I knowe, what queynt commoditie
+% Persuades you thus to take a truce for tyme,
+% And yelde the gates wide open to my foe,
+% The gates that myght our stately state defende,
+% And nowe are made the path of our decay.
+% \pend
+%
+% \senspeak{Ioca.}Represse deare son, those raging stormes of wrath,
+% \sen That so bedimme the eyes of thine intente,
+% \text{\sen As when \text{the}\Afootnote{thie MS}/ tongue %
+% (a redy Instrument)
+% \sen Would \text{fayne pronounce}\Afootnote{faynest tell MS}/ %
+% the meaning of \text{the minde}\Afootnote{thy minde MS}/,
+% \sen \text{It}\lemma{It \dots\ worde.}\Afootnote{Thie %
+% swelling hart puft vp with wicked ire / Can scarce pronounce %
+% one inward louing thought. MS}/ cannot speake one honest %
+% seemely worde.}\lemma{As \dots\ worde.}\Afootnote{{\it not %
+% in\/} \os73}/
+% \sen But when disdayne is shrunke, or sette asyde,
+% \sen And mynde of man with leysure can discourse
+% \sen What seemely woordes his tale may best beseeme,
+% \sen And that the toung vnfoldes without affectes
+% \sen Then may proceede an answere sage and graue,
+% \sen And euery sentence sawst with sobernesse:
+% Wherefore vnbende thyne angrie browes deare chylde,
+% And caste thy rolling eyes none other waye,
+% That here doost not \text{{\it Medusaes\/}}%
+% \Afootnote{One of the furies. {\os75}m}/ face beholde,
+% But him, euen him, thy blood and brother deare.
+% And thou beholde, my {\it Polinices\/} eke,
+% Thy brothers face, wherin when thou mayst see
+% Thine owne image, remember therwithall,
+% That what offence thou woldst to him were done,
+% \pend
+% \endnumbering
+% \bye
+% \end{verbatim}
+% \end{small}
+% \medskip
+% \hrule
+%
+% \subsection{Shakespeare}
+% The following text illustrates another input file of moderate
+% complexity, with two layers of annotation in use. The example is
+% taken from the Arden {\em Merchant of Venice}.\index{Shakespeare, William}
+% First, the file "arden.sty" contains a set of font
+% definitions and format specifications:
+%
+% \medskip
+% \hrule
+% \medskip
+% \begin{small}
+% \begin{verbatim}
+% \makeatletter
+%
+% % Macros for the edition:
+% \def\stage#1{\rlap{\hbox to \the\linenumsep{%
+% \hfil\llap{[{\it#1\/}]}}}}
+% \def\speaker#1{\pstart\hangindent2em\hangafter1
+% \leavevmode{\it#1}\enspace\ignorespaces}
+% \def\\{\hfil\break}
+% \def\exit#1{\hfill\stage{#1}}
+%
+% % EDMAC customizations:
+% \noendnotes \vsize 40pc \hsize 23pc \parindent 0pt
+% \linenumsep=.4in \rightskip\linenumsep
+% \def\interparanoteglue{1em plus.5em minus.1em}
+%
+% \catcode`\<=\active
+% \def\xtext#1#2>{\text{#1}{#2}/}
+% \let<=\xtext
+%
+% \let\numlabfont=\eighti
+% \let\sc=\fiverm
+% \let\Afootnoterule=\relax \let\Bfootnoterule=\relax
+% \footline={\hfil}
+% \def\rightlinenum{\numlabfont\llap{\the\line@num}}
+% \pageno=46
+% \headline={\eightpoint{\teni\folio}\hfil
+% THE MERCHANT OF VENICE\hfil [ACT II}
+% \cropsetup{8in}{5in}{3.5pc}{3pc}
+% \hoffset=.75in \voffset=.9375in
+% \frenchspacing
+%
+% % Footnote formats:
+% % \nonumparafootfmt is a footnote format without line numbers.
+% \def\nonumparafootfmt#1#2#3{%
+% \normal@pars
+% \rightskip=0pt
+% \parindent=0pt \parfillskip=0pt plus 1fil
+% \select@lemmafont#1|#2\rbracket\enskip
+% \it#3\penalty-10 }
+% \def\newparafootfmt#1#2#3{%
+% \normal@pars
+% \parindent=0pt \parfillskip=0pt plus 1fil
+% {\notenumfont\printlines#1|}\fullstop\enspace
+% {\select@lemmafont#1|#2}\rbracket\enskip
+% \it#3\penalty-10 }
+% \def\newtwocolfootfmt#1#2#3{%
+% \normal@pars
+% \hsize .48\hsize
+% \tolerance=5000
+% \rightskip=0pt \leftskip=0pt \parindent=5pt
+% \strut\notenumfont\printlines#1|\fullstop\enspace
+% \it#2\/\rbracket\penalty100\hskip .5em plus .5em
+% \rm#3\strut\goodbreak}
+%
+% % Footnote style selections etc. (done last):
+% \footparagraph{A}
+% \foottwocol{B}
+% \let\Afootfmt=\newparafootfmt
+% \let\Bfootfmt=\newtwocolfootfmt
+% \let\collation=\Afootnote
+% \let\note=\Bfootnote
+% \lineation{section}
+% \linenummargin{right}
+% \makeatother
+% \end{verbatim}
+% \end{small}
+% \begin{figure}[p]
+% \includegraphics{arden}
+% \vspace*{\textheight} ^^A supply artwork
+% \vspace*{-3\baselineskip}
+% \caption{Output of the Arden text.}
+% \label{arden-out}
+% \end{figure}
+% \medskip
+% \hrule
+% \medskip
+%
+% The Arden text, using the above definitions, is input as follows
+% (the output is shown in Figure \ref{arden-out}):
+%
+% \medskip
+% \hrule
+% \medskip
+% \begin{small}
+% \begin{verbatim}
+% \input edmac.doc
+% \input arden.sty
+%
+% % Initially, we don't want line numbers.
+% \let\Afootfmt=\nonumparafootfmt
+%
+% \beginnumbering
+% \pstart
+% \centerline{[<{SCENE III}
+% \lemma{Scene III}
+% \collation{Capell; om. Q, F; {\rm Scene IV} Pope.}>.---%
+% <{\it Venice}
+% \collation{om. Q, F; Shylock's house Theobald; The same.
+% A Room in Shylock's House Capell.}>.]}
+% \pend
+% \bigskip
+%
+% \pstart
+% \centerline{\it Enter\/ {\rm JESSICA} and\/
+% {\rm [<{LAUNCELOT}
+% \lemma{Launcelot}
+% \collation{Rowe; om. Q, F.}>]} the clown.} \pend \bigskip
+%
+% \let\Afootfmt=\newparafootfmt % we do want line numbers from now
+%
+% \setline{0}%
+%
+% \speaker{Jes.}<{I am}
+% \collation{Q, F; {\rm I'm} Pope.}>
+% sorry thou wilt leave my father so,\\
+% Our house is hell, and thou (a merry devil)\\
+% Didst rob it of some taste of tediousness,---\\
+% But fare thee well, there is a ducat for thee,\\
+% And Launcelot, <{soon}
+% \note{early.}>
+% at supper shalt thou see\\
+% Lorenzo, who is thy new master's guest,\\
+% Give him this letter,---do it secretly,---\\
+% And so farewell: I would not have my father\\
+% See me <{in}
+% \collation{Q; om. F.}>
+% talk with thee.
+% \pend
+%
+% \speaker{Laun.}
+% <{}\lemma{\it Laun.}\collation{Q2; Clowne. Q, F.}>%
+% <{Adieu!}
+% \collation{{\rm Adiew}, Q, F.}>
+% tears <{exhibit}
+% \note{Eccles paraphrased ``My tears serve to express what my
+% tongue should, if sorrow would permit it,'' but probably it is
+% Launce\-lot's blunder for prohibit (Halliwell) or inhibit
+% (Clarendon).}>
+% my tongue, most beautiful <{pagan}
+% \note{This may have a scurrilous undertone: cf. {\it 2 H 4,}
+% \sc II. \rm ii. 168.}>%
+% , most sweet <{Jew!}
+% \collation{{\rm Iewe}, Q, F. \quad {\rm do]} Q, F;
+% {\rm did} F2.}>%
+% ---if a Christian <{do}
+% \note{Malone upheld the reading of Qq and F by comparing \sc
+% II. \rm vi. 23: ``When you shall please to play the thieves for
+% wives''; Launcelot seems fond of hinting at what is going to
+% happen (cf. \sc II. \rm v. 22--3). If F2's ``did'' is accepted,
+% {\it get\/} is used for beget, as in \sc III. \rm v. 9.}>
+% not play the knave and get thee, I am much deceived; but <{adieu!}
+% \collation{{\rm adiew}, Q, F.}>
+% these <{foolish drops do \text{something}
+% \collation{Q; {\rm somewhat} F.}/
+% drown my manly spirit}
+% \lemma{foolish{\rm\dots}spirit}
+% \note{``tears do not become a man'' (\it AYL., \sc III. \rm
+% iv. 3); cf. also \it H 5, \sc IV. \rm vi. 28--32.}>%
+% : <{adieu!}
+% \collation{{\rm adiew}. Q, F. \quad {\rm S. D.]} Q2, F; om. Q;
+% after l. 15 Capell.}>
+% \exit{Exit.}
+% \pend
+%
+% \speaker{Jes.}
+% Farewell good Launcelot.\\
+% Alack, what heinous sin is it in me\\
+% To be ashamed to be my father's <{child!}
+% \collation{{\rm child}, Q, F; {\rm Child?} Rowe.}>
+% \pend
+% \endnumbering
+% \bye
+% \end{verbatim}
+% \end{small}
+% \medskip
+% \hrule
+%
+% \subsection{Classical text edition}
+% The next example, which was extracted from a longer file kindly
+% supplied by Wayne Sullivan,\index{Sullivan, Wayne} University
+% College, Dublin, Ireland, illustrates the use of "EDMAC" to
+% produce a Latin text edition, the {\em Periphyseon}, with Greek
+% passages.\footnote{The bibliographic details of the forthcoming book
+% are: Iohannis Scotti Erivgenae, {\it Periphyseon} ({\it De
+% Diuisione Naturae\/}) Liber Qvartvs [Scriptores Latini Hiberniae
+% vol.\,xii], (Dublin: School of Celtic Studies, Dublin Institute
+% for Advanced Studies, forthcoming 1992).} The Greek font used is
+% that prepared by Silvio Levy\index{Levy, Silvio} and described in {\em
+% TUGboat}.\footnote{{\em TUGboat\/} {\bf 9} (1988), pp.\,20--24.} The
+% output of this file is shown in Figure~\ref{periphyseon-out}.
+% Note the use of two layers of footnotes to record testimonia and
+% manuscript readings respectively.
+%
+% \begin{figure}[p]
+% \includegraphics{periph4}
+% \vspace*{\textheight} ^^A supply artwork
+% \vspace*{-3\baselineskip}
+% \caption{Output of the {\em Periphyseon, Liber IV}.}
+% \label{periphyseon-out}
+% \end{figure}
+%
+% The following "EDMAC" customizations are loaded initially, as
+% file "slhh.tex":
+%
+% \medskip
+% \hrule
+% \medskip
+% \begin{small}
+% \begin{verbatim}
+% \overfullrule0 pt
+% \hsize=25pc
+% \vsize=44pc
+% \lefthyphenmin=3
+% %\overfullrule=0pt
+% \input greekmac
+% \greekdelims
+% \input edmac.doc
+% \makeatletter
+% \newbox\lp@rbox
+% % We need an addition to \no@expands since the \active $ in greekmac
+% % causes problems:
+% \def\morenoexpands{\let$=0}
+%
+% \def\ffootnote#1{%
+% \ifnumberedpar@
+% \xright@appenditem{\noexpand\vffootnote{f}{{\@nums}{\@tag}{#1}}}%
+% \to\inserts@list
+% \global\advance\insert@count by 1
+% % \else %% may be used only in numbered text
+% % \vffootnote{f}{{0|0|0|0|0|0|0}{}{#1}}%
+% \fi\ignorespaces}
+% \def\gfootnote#1{%
+% \ifnumberedpar@
+% \xright@appenditem{\noexpand\vgfootnote{g}{#1}}%
+% \to\inserts@list
+% \global\advance\insert@count by 1
+% % \else %% may be used only in numbered text
+% % \vgfootnote{g}{#1}%
+% \fi\ignorespaces}
+% \def\raggedleft{\leftskip\z@% This is a hack; doubtless there are better ways.
+% plus5em\spaceskip.3333em\xspaceskip.5em\parfillskip\z@\relax}
+% \def\setlp@rbox#1#2#3{%
+% {\parindent\z@\hsize=2.5cm\raggedleft\eightpoint
+% \baselineskip 9pt%
+% \global\setbox\lp@rbox=\vbox to\z@{\vss#3}}}
+% \def\vffootnote#1#2{\setlp@rbox#2}
+% \def\vgfootnote#1#2{\def\rd@ta{#2}}
+% \def\do@line{%
+% {\vbadness=10000 \splittopskip=0pt
+% \gdef\rd@ta{}% for right margin paragraph->always a few characters
+% \global\setbox\one@line=\vsplit\raw@text to\baselineskip}%
+% \unvbox\one@line \global\setbox\one@line=\lastbox
+% \getline@num
+% \hbox to\hsize{\affixline@num\add@inserts\hbox to\z@% inserts added here so
+% {\hss\box\lp@rbox\kern\linenumsep}% that margin pars are
+% \hfil\hbox to\wd\one@line{\new@line\unhbox\one@line% included.
+% \hbox to\z@{\kern\linenumsep\notenumfont\rd@ta\hss}}}%
+% \add@penalties} % margin pars also included in line format
+% \def\affixline@num{%
+% \ifsublines@
+% \@tempcntb=\subline@num
+% \ifnum\subline@num>\firstsublinenum
+% \@tempcnta=\subline@num
+% \advance\@tempcnta by-\firstsublinenum
+% \divide\@tempcnta by\sublinenumincrement
+% \multiply\@tempcnta by\sublinenumincrement
+% \advance\@tempcnta by\firstsublinenum
+% \else
+% \@tempcnta=\firstsublinenum
+% \fi
+% %
+% \ifcase\sub@lock
+% \or
+% \ifnum\sublock@disp=1
+% \@tempcntb=0 \@tempcnta=1
+% \fi
+% \or
+% \ifnum\sublock@disp=2 \else
+% \@tempcntb=0 \@tempcnta=1
+% \fi
+% \or
+% \ifnum\sublock@disp=0
+% \@tempcntb=0 \@tempcnta=1
+% \fi
+% \fi
+% \else
+% \@tempcntb=\line@num
+% \ifnum\line@num>\firstlinenum
+% \@tempcnta=\line@num
+% \advance\@tempcnta by-\firstlinenum
+% \divide\@tempcnta by\linenumincrement
+% \multiply\@tempcnta by\linenumincrement
+% \advance\@tempcnta by\firstlinenum
+% \else
+% \@tempcnta=\firstlinenum
+% \fi
+% \ifcase\@lock
+% \or
+% \ifnum\lock@disp=1
+% \@tempcntb=0 \@tempcnta=1
+% \fi
+% \or
+% \ifnum\lock@disp=2 \else
+% \@tempcntb=0 \@tempcnta=1
+% \fi
+% \or
+% \ifnum\lock@disp=0
+% \@tempcntb=0 \@tempcnta=1
+% \fi
+% \fi
+% \fi
+% %
+% \ifnum\@tempcnta=\@tempcntb
+% \@tempcntb=\line@margin
+% \ifnum\@tempcntb>1
+% \advance\@tempcntb by\page@num
+% \fi
+% \ifodd\@tempcntb
+% % #1\rlap{{\rightlinenum}}%
+% \xdef\rd@ta{\the\line@num}%
+% \else
+% \llap{{\leftlinenum}}%#1%
+% \fi
+% \else
+% %#1%
+% \fi
+% \ifcase\@lock
+% \or
+% \global\@lock=2
+% \or \or
+% \global\@lock=0
+% \fi
+% \ifcase\sub@lock
+% \or
+% \global\sub@lock=2
+% \or \or
+% \global\sub@lock=0
+% \fi}
+% %
+% % We want to include a small Greek font in the definition
+% % of \eightpoint:
+% \let\oldeightpoint=\eightpoint
+% \font\eightgr=grreg8
+% \def\eightpoint{\oldeightpoint\let\tengr=\eightgr}
+% \output{\advancepageno\edmac@output} % even page numbers
+% \lineation{page}
+% \linenummargin{right}
+% \footparagraph{A}
+% \footparagraph{B}
+% \let\notenumfont=\eightrm
+% \let\notetextfont=\eightpoint
+% \let\Afootnoterule=\relax
+% \count\Afootins=825
+% \count\Bfootins=825
+% \def\Aparafootfmt#1#2#3{%
+% \normal@pars\eightpoint
+% \parindent=0pt \parfillskip=0pt plus1fil
+% \notenumfont\printlines#1|\enspace
+% % \lemmafont#1|#2\enskip
+% \notetextfont
+% #3\penalty-10\hskip 1em plus 4em minus.4em\relax}
+% \def\Bparafootfmt#1#2#3{%
+% \normal@pars\eightpoint
+% \parindent=0pt \parfillskip=0pt plus1fil
+% \notenumfont\printlines#1|\enspace
+% \select@lemmafont#1|#2\rbracket\enskip
+% \notetextfont
+% #3\penalty-10\hskip 1em plus 4em minus.4em\relax }
+% \makeatother
+% \let\Afootfmt=\Aparafootfmt
+% \let\Bfootfmt=\Bparafootfmt
+% \def\lemmafont#1|#2|#3|#4|#5|#6|#7|{\eightpoint}
+% \headline={\hfil\tenit Periphyseon, Liber IV\hfil}
+% \voffset=1in
+% \hoffset=1in
+% \parindent=1em
+% \def\lmarpar#1{\text{}\ffootnote{#1}/}
+% \def\rmarpar#1{\text{}\gfootnote{#1}/}
+% \emergencystretch40pt
+% \cropsetup{24.5cm}{15.5cm}{1.5cm}{2.1cm}
+% \end{verbatim}
+% \end{small}
+% \medskip
+% \hrule
+% \medskip
+%
+% The file "periph4.tex" then inputs the above definitions, and
+% proceeds with the main text:
+%
+% \medskip
+% \hrule
+% \medskip
+% \begin{small}
+% \begin{verbatim}
+% \input slhh
+%
+% \beginnumbering
+% \pstart
+% \rmarpar{741C}
+% \noindent \text{Incipit Quartus $PERIFUSEWN$}%
+% \lemma{incipit\ .~.~.\ $PERIFUSEWN$}\Bfootnote{{\it om.\ R},
+% incipit quartus {\it M}}/
+% \pend
+% \medskip
+%
+% \pstart
+% \noindent \text{NVTRITOR}\lemma{$ANAKEFALIOSIS$}\Bfootnote{{\it
+% FJP, lege\/} $<anakefala'iwsis$}/.\lmarpar{$ANAKEFALIOSIS$
+% NATVRARVM} Prima nostrae
+% \text{Physiologiae}\lemma{physiologiae}\Bfootnote{phisiologiae
+% {\it P}, physeologiae {\it R}}/ intentio praecipuaque mat\-e\-ria
+% erat \text{quod}\Bfootnote{{\it p}.\ natura {\it transp.\ MR}}/
+% \text{$UPEROUSIADES$}\Bfootnote{{\it codd.\ Vtrum\/}
+% $<uperousi'wdhs$ (hoc est superessentialis) natura {\it cum Gale
+% (p.160) an\/} $<uperousi'oths$ (hoc est superessentialis natura)
+% {\it cum Floss (PL 122,741C) intelligendum sit, ambigitur}}/ (hoc
+% est superessentialis) natura sit causa creatrix existentium et
+% non existentium omnium, a nullo creata, unum principium, una
+% origo, unus et uniuersalis uniuersorum fons, a nullo manans, dum
+% ab eo manant omnia, trinitas coessentialis in tribus substantiis,
+% $ANARQOS$ (hoc est sine principio), principium et finis, una
+% bonitas, deus unus, \text{$OMOUSIOS$}\Bfootnote{{\it codd.,
+% lege\/} $<omoo'usios$}/ \text{et}\lemma{{\bf et}}\Bfootnote{{\it
+% R}\math^{\rm 1}\math, {\it om.\ R}\math^{\rm 0}\math}/
+% $UPEROUSIOS$ (id est coessentialis et superessentialis). Et, ut
+% ait sanctus Epifanius, episcopus Constantiae Cypri, in
+% \text{$AGKURATW$}\Bfootnote{anchurato {\it MR}}/ sermone \text{de
+% fide}\Bfootnote{Glo\math\langle\math ssa\math\rangle\math: Ita
+% enim uocatur sermo eius de fide $AGKURATOS$, id est procuratus
+% {\it mg.\ add.\ FJP}}/: {\it Tria sancta, tria consancta, tria
+% \text{agentia}\Bfootnote{actiua {\it MR}}/, tria coagentia, tria
+% \text{formantia}\Bfootnote{formatiua {\it MR}}/, tria
+% conformantia, tria \text{operantia}\Bfootnote{operatiua {\it
+% MR}}/, tria cooperantia, tria subsistentia, tria}\rmarpar{742C}
+% {\it consubsistentia sibi inuicem coexistentia. Trinitas haec
+% sancta uocatur: tria existentia, una consonantia, una deitas
+% \text{eiusdem}\Bfootnote{eiusdemque {\it M}}/ essentiae,
+% \text{eiusdem uirtutis, eiusdem
+% \text{subsistentiae}{\Bfootnote{substantiae {\it R}}}/}%
+% \Bfootnote{{\it om.\ M}}/, similia \text{similiter}\Bfootnote{ex
+% simili {\it MR}}/ aequalitatem gratiae operantur patris et filii
+% et sancti spiritus. Quomodo autem \text{sunt}\Bfootnote{{\it om.\
+% M}}/, ipsis relinquitur docere: \text{`Nemo enim nouit patrem
+% nisi filius, neque filium nisi pater, et cuicumque filius
+% reuelauerit'}\Afootnote{Matth.\ 11, 27}/; reuelatur autem per
+% spiritum sanctum. Non ergo haec tria existentia aut ex ipso aut
+% per ipsum aut ad ipsum in unoquoque digne intelliguntur,
+% \math\mid\! R, 264^{\rm r}\!\mid\math\ sicut ipsa reuelant:\/}
+% $FWS, PUR, PNEUMA$ \text{(hoc est lux, ignis,
+% spiritus)}\Afootnote{EPIPHANIVS, {\it Ancoratus\/} 67; PG~43,
+% 137C--140A; GCS 25, p.~82, 2--12}/.
+% \pend
+%
+% \pstart
+% Haec, ut dixi, ab Epifanio tradita, ut quisquis interrogatus quae
+% tria et quid unum in sancta trinitate debeat credere, sana fide
+% \math\!\mid J, 1^{\rm v}\!\mid\math\ respondere ualeat, aut ad
+% fidem accedens\rmarpar{743A} sic erudiatur. Et mihi uidetur
+% spiritum pro calore posuisse, quasi dixisset in similitudine:
+% lux, ignis, calor. Haec enim tria unius essentiae sunt. Sed cur
+% lucem primo dixit, non est mirum. Nam et pater lux est et ignis
+% et calor; et filius est lux, ignis, calor; et \text{spiritus
+% sanctus}\Bfootnote{sanctus spiritus {\it R}}/ lux, ignis, calor.
+% Illuminat enim pater, illuminat filius, illuminat spiritus
+% sanctus: ex ipsis enim omnis scientia et sapientia donatur.
+% \pend
+% \endnumbering
+% \bye
+% \end{verbatim}
+% \end{small}
+% \medskip
+% \hrule
+%
+% \subsection{Arabic text edition}
+% Recent developments in Klaus Lagally's\index{Lagally, Klaus} Arab\TeX\
+% package have meant that
+% now Arab\TeX\ and "EDMAC" can work smoothly together.\footnote{These
+% changes are available in versions of Arab\TeX\ from 2.08,
+% March/April 1993\@. The Arab\TeX\ system is available from its author's
+% institution (by anonymous "ftp" from
+% "<URL ftp://ifi.informatik.uni-stuttgart.de/pub/arabtex/>"
+% and from many other network sites.} This will
+% be welcome news indeed to all frustrated editors of Arabic texts!
+%
+% As a taster, Klaus has kindly supplied Figure \ref{arabtex}, a test page
+% which shows off the joint capabilities of Arab\TeX\ and "EDMAC".
+%
+% \begin{figure}[p]
+% \includegraphics{arabic}
+% \vspace*{\textheight} ^^A supply artwork
+% \vspace*{-3\baselineskip}
+% \caption{Arabic edition of some instructions for using a post office.}
+% \label{arabtex}
+% \end{figure}
+%
+% \subsection{Sanskrit text edition}
+% Finally, Figure \ref{vyadi} shows an example from an edition of a
+% Sanskrit text on P\=a\d ninian grammar that uses Frans
+% Velthuis's\index{Velthuis, Frans} excellent Devan\=agar\=\i\
+% font.\footnote{Now published as Dominik Wujastyk, {\em Metarules
+% of P\=a\d{n}inian Grammar: The {\em
+% Vy\=a\d{d}\=\i ya\-paribh\=a\d{s}\=a\-v\d{r}tti\/}
+% critically edited with translation and commentary\/} 2 vols.\
+% (Groningen: Forsten, 1993).}
+%
+% I have not shown the input file for this because I almost
+% never looked at it myself. The edition records a large number of
+% variants, and there are frequent font and script changes.
+% Preparing this purely manually would have been very error-prone.
+% In fact, the text was prepared using a word processor (XyWrite
+% III+) which had the ability to fold footnotes out of sight. I
+% designed custom Indic fonts for my computer screen, so that I
+% could see all the diacritical marks on accented characters as I
+% typed.
+%
+% \begin{figure}[p]
+% \includegraphics{sanskrit}
+% \vspace*{\textheight} ^^A supply artwork
+% \vspace*{-3\baselineskip}
+% \caption{Sanskrit edition of a grammatical text.}
+% \label{vyadi}
+% \end{figure}
+%
+% Font changes were invoked visually using the standard
+% facilities of the word processor, so the perennial ``missing
+% closing brace'' hardly ever arose. A short text filter
+% program changed the word processor file into correctly tagged
+% "EDMAC" input, and another filter program (provided by
+% Velthuis) did some special processing on the Devan\=agar\=\i\
+% strings. This combination of tools proved very workable and no
+% major problems were encountered.
+%
+% The following "EDMAC" customizations are typical of the sort
+% of changes needed to use Sanskrit with the Devan\=agar\=\i\ font:
+%
+% \medskip
+% \hrule
+% \medskip
+% \begin{small}
+% \label{fam-fiddle}
+% \begin{verbatim}
+% @dolmode3 % for the Devanagari pre-processor
+% \input dnmacs.tex % special macros for Devanagari font
+% \input edmac.doc
+% %
+% \makeatletter
+% %
+% \def\notefontsetup{\eightpoint\dnsmall\dn}
+% \footparagraph{A}
+% \firstlinenum=1
+% \def\variant#1#2{\text{#1}\Afootnote{#2}/}
+% %
+% % Now we set up \select@lemmafont to recognize Sanskrit:
+% %
+% \newfam\skt % \fam 8 (plain.tex defines 0--7; TeXbook p.351.)
+% \def\san{\fam\skt \dn}
+% \def\select@lemmafont#1|#2|#3|#4|#5|#6|#7|{%
+% \ifcase#7
+% \rm \or \rm \or \rm \or \rm % fams 0--3
+% \or \it \or \sl \or \bf \or \tt % fams 4--7
+% \or \san % Devanagari for \fam 8
+% \else \rm
+% \fi}
+% %
+% \makeatother
+% %
+% % And then the text:
+% $ % for the Devanagari pre-processor
+% \beginnumbering
+% \san
+% \autopar
+%
+% aasiidraajaa \variant{nalo}{ki.mcidanyat ka, kha} naama
+% viirasenasuto balii|
+%
+% \endnumbering
+% $ % for the Devanagari pre-processor
+% \bye
+% \end{verbatim}
+% \end{small}
+% \medskip
+% \hrule
+% \medskip
+%
+% \label{multinotes}
+% You may have noticed that in the apparatus of the Sanskrit edition shown
+% in figure~\ref{vyadi}, the line numbers are printed only once, even if
+% there are several variants on a line. Multiple notes to the same line
+% are separated by a $\parallel$ sign. We mentioned on
+% p.\,\pageref{parallel} above how, in principle, this could be done. Here
+% is the modified version of "\printlines" that actually does it (the
+% original is on p.\,\pageref{printlines} above).
+%
+% \medskip
+% \hrule
+% \medskip
+% \begin{small}
+% \begin{verbatim}
+% % First, define the symbol that will print instead of a repeated line
+% % number:
+% %
+% \def\notenumsep{$\parallel$}
+% %
+% % Now the macro which prints the line numbers for a note.
+% % It is modified here so that notes to the same line do not repeat
+% % the line number, but print a "||" instead.
+% %
+% % Just a reminder that the seven parameters of the
+% % argument are the line numbers as stored in "\@nums":
+% % #1 the starting page,
+% % #2 line, and
+% % #3 subline numbers, followed by the
+% % #4 ending page,
+% % #5 line, and
+% % #6 subline numbers, and then the
+% % #7 font-family number for the lemma.
+% %
+% % Although there's no counter for the line number, because it's always
+% % printed, we define a counter that keeps track of the previously printed
+% % line number, so that we can stop line numbers being repeated in the
+% % notes if they are all the same.
+% %
+% \newcount\previous@note@number
+% %
+% % The beginning of the \printlines macro is just the same as the original
+% % defined by EDMAC (q.v. for commentary):
+% %
+% \def\printlines#1|#2|#3|#4|#5|#6|#7|{\begingroup
+% \@pnum=0 \@dash=0
+% \ifbypage@
+% \ifnum#4=#1 \else
+% \@pnum=1
+% \@dash=1
+% \fi
+% \fi
+% \@elin=\@pnum
+% \ifnum#2=#5 \else
+% \@elin=1
+% \@dash=1
+% \fi
+% \@ssub=0
+% \ifnum#3=0 \else
+% \@ssub=1
+% \fi
+% \@esl=0
+% \ifnum#6=0 \else
+% \ifnum#6=#3
+% \@esl=\@elin
+% \else
+% \@esl=1
+% \@dash=1
+% \fi
+% \fi
+% %
+% % Here come our modifications. We're ready to print the various numbers,
+% % based on our counter values, but the first thing we do is to compare the
+% % current line number (parameter #2) with the last line number to have
+% % been printed. If they are the same, we print the \notenumsep siglum; if
+% % not, we go ahead and print the actual line number. (Note that this does
+% % not cope with cases of multiple sub-line numbered notes to the same
+% % line; more checks would be needed if that situation were likely to
+% % arise.)
+%
+% \ifnum\previous@note@number = #2
+% \ifodd\@elin % there is a different ending line number
+% #2%
+% \else
+% \notenumsep
+% \fi
+% \else
+% \ifodd\@pnum #1\fullstop\fi
+% #2% The (starting) line number
+% \fi
+% \ifodd\@ssub \fullstop #3\fi
+% \ifodd\@dash \endashchar\fi
+% \ifodd\@pnum #4\fullstop\fi
+% \ifodd\@elin #5\fi
+% \ifodd\@esl \ifodd\@elin\fullstop\fi #6\fi
+% %
+% % Now we record the number that has been printed, for comparison
+% % next time \printlines is called:
+% %
+% \global\previous@note@number=#2
+% %
+% \endgroup}
+% \end{verbatim}
+% \end{small}
+% \medskip
+% \hrule
+% \medskip
+% \Finale
+% \endinput
+\endinput
+