[comp.text.tex] endnotes.sty modified for international use

POSTMASTER@DMZNAT51.BITNET (General Delivery) (02/25/91)

 
I modofied j. Lavignio's endnote.sty for international use. In the spirit
of International \LaTeX, as outlined by H. Partl, I parametrised the
sectiontitle Notes by the control word \notesname. This allows an easy
redefinition for other languages.
 
J. Knappen
knappen@dmznat51.bitnet
 
% Save file as: ENDNOTES.STY           Source: FILESERV@SHSU.BITNET
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Does not obey \nofiles.  Perhaps it should.
 
%       ****************************************
%       *              ENDNOTES                *
%       ****************************************
%
%  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.
%
%   John Lavagnino, 9/23/88.
%
%   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}
%
%  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.
%
%   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{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
%    set \@currentlabel to make \label command work right
%  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
%
 
\@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}%
     \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}}
 
% \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}
 
\def\theendnotes{\immediate\closeout\@enotes \global\@enotesopenfalse
  \begingroup
    \makeatletter
    \def\@doanenote##1##2>{\def\@theenmark{##1}\par\begingroup
        \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}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%