%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Save file as: ENDNOTES.STY
% modified by --bg (B.Gaulle) 09/14/94 for:
%               1) replace » (why a 8bit char here?) by ^ as a default. 
%               2) force \catcode of > to be 12 (implied by \@doanenot).
%          by --bg again 03/22/95 for:
%               3) reseting appropriate catcode of > in case it were
%                  used as an active char before \@endanenote (was
%                  pointed by Ch. Pallier).
%%%% free to distribute by John_Lavagnino@Brown.edu on Thu, 23 Mar 1995 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%       ****************************************
%       *              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
% the following is to save catcode of ``>'' and restore it in \@endanenote
\edef\@tempa{`\string >}%
\ifnum\catcode\@tempa=11\let\@ResetGT\relax% accepts also that > were active
  \else\edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}%
\fi%
    \catcode`>=12% char > will be read as char so force it to \catcode 12 --bg\edef\GOfrench{`\string @}% temp def futher correctly defined
    \def\@doanenote##1##2>{\def\@theenmark{##1}\par\begingroup
        \@ResetGT%\catcode`>=13
        \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}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
