%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Save file as: ENDNOTES.STY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % **************************************** % * ENDNOTES * % **************************************** % % Date of this version: 24 September 1991. % % Based on the FOOTNOTES section of % LATEX.TEX (VERSION 2.09 - RELEASE OF 19 April 1986), with % "footnote" changed to "endnote" and "fn" changed to "en" (where % appropriate), with all the minipage stuff pulled out, and with % some small changes for the different operation of endnotes. % % Uses an extra external file, with .ENT extension, to hold the % text of the endnotes. This may be deleted after the run; a new % version is generated each time. % % This code does not obey \nofiles. Perhaps it should. % % John Lavagnino (lav@brandeis.bitnet), 9/23/88 % Department of English and American Literature, % Brandeis University % % To turn all the footnotes in your documents into endnotes, say % % \let\footnote=\endnote % % in your preamble, and then add something like % % \newpage % \begingroup % \parindent 0pt % \parskip 2ex % \def\enotesize{\normalsize} % \theendnotes % \endgroup % % as the last thing in your document. % % **************************************** % * CHANGE LOG * % **************************************** % % JL Modified to include \addtoendnotes. JL, 10/22/89. % % JK Modification by J"org Knappen 25. 2. 1991: % JK % JK Introduced \notesname in the spirit of international \LaTeX. % JK \notesname is set per default to be {Notes}, but can easily % JK be redifined, e.g. for german language % JK \renewcommand{\notesname}{Anmerkungen} % % DW Modification by Dominik Wujastyk, London, 19 September 1991: % DW % DW Moved the line % DW \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark} % DW out of the definition of \@endnotetext and into the definition % DW of \@doanenote so that \label and \ref commands work correctly in % DW endnotes. Otherwise, the \label just pointed to the last section % DW heading (or whatever) preceding the \theendnotes command. % % JL Revised documentation and macros. 24 Sept 1991. % % **************************************** % * ENDNOTE COMMANDS * % **************************************** % % % \endnote{NOTE} : User command to insert a endnote. % % \endnote[NUM]{NOTE} : User command to insert a endnote numbered % NUM, where NUM is a number -- 1, 2, % etc. For example, if endnotes are numbered % *, **, etc. within pages, then \endnote[2]{...} % produces endnote '**'. This command does not % step the endnote counter. % % \endnotemark[NUM] : Command to produce just the endnote mark in % the text, but no endnote. With no argument, % it steps the endnote counter before generating % the mark. % % \endnotetext[NUM]{TEXT} : Command to produce the endnote but no % mark. \endnote is equivalent to % \endnotemark \endnotetext . % % \addtoendnotes{TEXT} : Command to add text or commands to current % endnotes file: for inserting headings, % pagebreaks, and the like into endnotes % sections. TEXT a moving argument: % \protect required for fragile commands. % % **************************************** % * ENDNOTE USER COMMANDS * % **************************************** % % Endnotes use the following parameters, similar to those relating % to footnotes: % % \enotesize : Size-changing command for endnotes. % % \theendnote : In usual LaTeX style, produces the endnote number. % % \@theenmark : Holds the current endnote's mark--e.g., \dag or '1' or 'a'. % % \@makeenmark : A macro to generate the endnote marker from \@theenmark % The default definition is \hbox{$^\@theenmark$}. % % \@makeentext{NOTE} : % Must produce the actual endnote, using \@theenmark as the mark % of the endnote and NOTE as the text. It is called when effectively % inside a \parbox, with \hsize = \columnwidth. For example, it might % be as simple as % $^{\@theenmark}$ NOTE % % % **************************************** % * ENDNOTE PSEUDOCODE * % **************************************** % % \endnote{NOTE} == % BEGIN % \stepcounter{endnote} % \@theenmark :=G eval (\theendnote) % \@endnotemark % \@endnotetext{NOTE} % END % % \endnote[NUM]{NOTE} == % BEGIN % begingroup % counter endnote :=L NUM % \@theenmark :=G eval (\theendnote) % endgroup % \@endnotemark % \@endnotetext{NOTE} % END % % \@endnotetext{NOTE} == % BEGIN % write to \@enotes file: "\@doanenote{ENDNOTE MARK}" % begingroup % \next := NOTE % set \newlinechar for \write to \space % write to \@enotes file: \meaning\next % (that is, "macro:->NOTE) % endgroup % END % % \addtoendnotes{TEXT} == % BEGIN % open endnotes file if not already open % begingroup % let \protect to \string % set \newlinechar for \write to \space % write TEXT to \@enotes file % endgroup % END % % \endnotemark == % BEGIN \stepcounter{endnote} % \@theenmark :=G eval(\theendnote) % \@endnotemark % END % % \endnotemark[NUM] == % BEGIN % begingroup % endnote counter :=L NUM % \@theenmark :=G eval(\theendnote) % endgroup % \@endnotemark % END % % \@endnotemark == % BEGIN % \leavevmode % IF hmode THEN \@x@sf := \the\spacefactor FI % \@makeenmark % put number in main text % IF hmode THEN \spacefactor := \@x@sf FI % END % % \endnotetext == % BEGIN \@theenmark :=G eval (\theendnote) % \@endnotetext % END % % \endnotetext[NUM] == % BEGIN begingroup counter endnote :=L NUM % \@theenmark :=G eval (\theendnote) % endgroup % \@endnotetext % END % % **************************************** % * ENDNOTE MACROS * % **************************************** % \@definecounter{endnote} \def\theendnote{\arabic{endnote}} % Default definition \def\@makeenmark{\hbox{$^{\@theenmark}$}} \newdimen\endnotesep \def\endnote{\@ifnextchar[{\@xendnote}{\stepcounter {endnote}\xdef\@theenmark{\theendnote}\@endnotemark\@endnotetext}} \def\@xendnote[#1]{\begingroup \c@endnote=#1\relax \xdef\@theenmark{\theendnote}\endgroup \@endnotemark\@endnotetext} % Here begins endnote code that's really different from the footnote % code of LaTeX. \let\@doanenote=0 \let\@endanenote=0 \newwrite\@enotes \newif\if@enotesopen \global\@enotesopenfalse \def\@openenotes{\immediate\openout\@enotes=\jobname.ent\relax \global\@enotesopentrue} % The stuff with \next and \meaning is a trick from the TeXbook, 382, % there intended for setting verbatim text, but here used to avoid % macro expansion when the footnote text is written. \next will have % the entire text of the footnote as one long line, which might well % overflow limits on output line length; the business with \newlinechar % makes every space become a newline in the \@enotes file, so that all % of the lines wind up being quite short. \long\def\@endnotetext#1{% \if@enotesopen \else \@openenotes \fi \immediate\write\@enotes{\@doanenote{\@theenmark}}% \begingroup \def\next{#1}% \newlinechar='40 \immediate\write\@enotes{\meaning\next}% \endgroup \immediate\write\@enotes{\@endanenote}} % \addtoendnotes works the way the other endnote macros probably should % have, requiring the use of \protect for fragile commands. \long\def\addtoendnotes#1{% \if@enotesopen \else \@openenotes \fi \begingroup \newlinechar='40 \let\protect\string \immediate\write\@enotes{#1}% \endgroup} % End of unique endnote code \def\endnotemark{\@ifnextchar[{\@xendnotemark }{\stepcounter{endnote}\xdef\@theenmark{\theendnote}\@endnotemark}} \def\@xendnotemark[#1]{\begingroup \c@endnote #1\relax \xdef\@theenmark{\theendnote}\endgroup \@endnotemark} \def\@endnotemark{\leavevmode\ifhmode \edef\@x@sf{\the\spacefactor}\fi \@makeenmark \ifhmode\spacefactor\@x@sf\fi\relax} \def\endnotetext{\@ifnextchar [{\@xendnotenext}{\xdef\@theenmark{\theendnote}\@endnotetext}} \def\@xendnotenext[#1]{\begingroup \c@endnote=#1\relax \xdef\@theenmark{\theendnote}\endgroup \@endnotetext} % \theendnotes actually prints out the endnotes. % The user may want separate endnotes for each chapter, or a big % block of them at the end of the whole document. As it stands, % either will work; you just say \theendnotes wherever you want the % endnotes so far to be inserted. However, you must add % \setcounter{endnote}{0} after that if you want subsequent endnotes % to start numbering at 1 again. % \enoteformat is provided so user can specify some special formatting % for the endnotes. It needs to set up the paragraph parameters, start % the paragraph, and print the label. The \leavemode stuff is to make % and undo a dummy paragraph, to get around the games \section* % plays with paragraph indenting. \def\notesname{Notes}% <------ JK \def\enoteheading{\section*{\notesname \@mkboth{\uppercase{\notesname}}{\uppercase{\notesname}}}% \leavevmode\par\vskip-\baselineskip} \def\enoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em \leavevmode\llap{\hbox{$^{\@theenmark}$}}} \def\enotesize{\footnotesize} % The definition of \ETC. is needed only for versions of TeX prior % to 2.992. Those versions limited \meaning expansions to 1000 % characters; in 2.992 and beyond there is no limit. At Brandeis the % BIGLATEX program changed the code in the token_show procedure of % TeX to eliminate this problem, but most ``big'' versions of TeX % will not solve this problem. \def\theendnotes{\immediate\closeout\@enotes \global\@enotesopenfalse \begingroup \makeatletter \def\@doanenote##1##2>{\def\@theenmark{##1}\par\begingroup \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark} %DW \enoteformat} \def\@endanenote{\par\endgroup}% \def\ETC.{\errmessage{Some long endnotes will be truncated; % use BIGLATEX to avoid this}% \def\ETC.{\relax}} \enoteheading \enotesize \@input{\jobname.ent}% \endgroup} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%