summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/endnotes
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/endnotes
Initial commit
Diffstat (limited to 'macros/latex/contrib/endnotes')
-rw-r--r--macros/latex/contrib/endnotes/endnotes.pdfbin0 -> 267875 bytes
-rw-r--r--macros/latex/contrib/endnotes/endnotes.sty417
-rw-r--r--macros/latex/contrib/endnotes/endnotes.tex290
3 files changed, 707 insertions, 0 deletions
diff --git a/macros/latex/contrib/endnotes/endnotes.pdf b/macros/latex/contrib/endnotes/endnotes.pdf
new file mode 100644
index 0000000000..cf5f5cecaf
--- /dev/null
+++ b/macros/latex/contrib/endnotes/endnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/endnotes/endnotes.sty b/macros/latex/contrib/endnotes/endnotes.sty
new file mode 100644
index 0000000000..d3ef6514ba
--- /dev/null
+++ b/macros/latex/contrib/endnotes/endnotes.sty
@@ -0,0 +1,417 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ****************************************
+% * ENDNOTES *
+% ****************************************
+%
+% Date of this version: 15 January 2003.
+%
+%% Copyright 2002 John Lavagnino
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.2
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%
+% 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.
+% Subsequently updated to follow the code for
+% LaTeX2e <2000/06/01>.
+%
+% 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--it doesn't require information
+% collected from the previous run.
+%
+% This code does not obey \nofiles. Perhaps it should.
+%
+% John Lavagnino (John.Lavagnino@kcl.ac.uk)
+% Centre for Computing in the Humanities, King's College London
+%
+% 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. (But \theendnotes all
+% by itself will work.)
+%
+% ****************************************
+% * 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.
+%
+% 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 \@doanenote).
+% 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).
+%
+% John Lavagnino, 12 January 2003: a number of small updates:
+%
+% JL Incorporate change suggested by Frank Mittelbach to
+% JL \enoteheading, so that first note has paragraph indentation.
+% JL Frank's note:
+% the idea of this code is to fix the problem that without it
+% the first endnote after the heading will not be indented thus looking
+% somewhat strange. Problem however is that since there is no
+% indentation \leavemode\par will make an absolutely empty pargraph so
+% that no baseline calculation is done. therefore \vskip-\baselineskip
+% will put the first endnote directly below the heading without the
+% usual spaccing. using \mbox insead will cure this defect.
+%
+% JL Also incorporated Frank's suggestion to define
+% JL \makeenmark and \theenmark, so that users can change more of the
+% JL layout without using \makeatletter. \makeenmark defaults to
+% JL \@makeenmark, so old code is still supported; and \theenmark is
+% JL just syntactic sugar for \@theenmark, which is still the real
+% JL value (and shouldn't be directly modified by user code).
+%
+% JL Definition of \ETC. also dropped: surely nobody is still
+% JL using TeX 2.992. (If you are, you need to upgrade it or
+% JL endnotes longer than 1000 characters will be truncated.)
+%
+% JL Update much of the code to track the current LaTeX2e code more
+% JL closely. Clean up \theendnotes.
+%
+% John Lavagnino, 15 January 2003: fix my garbled version of
+% Frank's updates.
+%
+%
+% ****************************************
+% * 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'.
+% (You don't want to set this yourself, as it comes
+% either from the autonumbering of notes or from
+% the optional argument to \endnote. But you'll need
+% to use it if you define your own \makeenmark.)
+%
+% \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\c@endnote}
+
+\def\@makeenmark{\hbox{\@textsuperscript{\normalfont\@theenmark}}}
+\def\makeenmark{\@makeenmark}
+
+\def\theenmark{\@theenmark}
+
+\newdimen\endnotesep
+
+\def\endnote{\@ifnextchar[\@xendnote{\stepcounter{endnote}%
+ \protected@xdef\@theenmark{\theendnote}%
+ \@endnotemark\@endnotetext}}
+
+\def\@xendnote[#1]{%
+ \begingroup
+ \c@endnote=#1\relax
+ \unrestored@protected@xdef\@theenmark{\theendnote}%
+ \endgroup
+ \@endnotemark\@endnotetext}
+
+% Here begins a section of 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}%
+ \protected@xdef\@theenmark{\theendnote}%
+ \@endnotemark}}
+
+\def\@xendnotemark[#1]{%
+ \begingroup
+ \c@endnote #1\relax
+ \unrestored@protected@xdef\@theenmark{\theendnote}%
+ \endgroup
+ \@endnotemark}
+
+\def\@endnotemark{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \makeenmark
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax}
+
+\def\endnotetext{%
+ \@ifnextchar [\@xendnotenext
+ {\protected@xdef\@theenmark{\theendnote}%
+ \@endnotetext}}
+
+\def\@xendnotenext[#1]{\begingroup \c@endnote=#1\relax
+ \xdef\@theenmark{\theendnote}\endgroup \@endnotetext}
+
+\def\@xendnotenext[#1]{%
+ \begingroup
+ \c@endnote=#1\relax
+ \unrestored@protected@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 \mbox stuff in \enoteheading
+% is to make and undo a dummy paragraph, to get around the games \section*
+% plays with paragraph indenting and instead give us uniform
+% indenting for all notes.
+
+\def\notesname{Notes}%
+\def\enoteheading{\section*{\notesname
+ \@mkboth{\MakeUppercase{\notesname}}{\MakeUppercase{\notesname}}}%
+ \mbox{}\par\vskip-\baselineskip}
+
+\def\enoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em
+ \leavevmode\llap{\makeenmark}}
+
+\def\enotesize{\footnotesize}
+
+\def\theendnotes{\immediate\closeout\@enotes \global\@enotesopenfalse
+ \begingroup
+ \makeatletter
+ %
+ % The machinery with \@ResetGT and > here ensures that
+ % \@doanenote works properly even if > is an active character
+ % at the point where \theendnotes is invoked. > needs to have
+ % catcode 12 when the arguments of \@doanenote are scanned, so
+ % that the > in the string "macro:->" is matched. The actual
+ % footnote text is not an argument to \@doanenote, but just
+ % follows it in the .ent file; so \@ResetGT can reset the
+ % category code for > that should be used when processing
+ % that text. That resetting takes place within a
+ % \begingroup-\endgroup block set up by \@doanenote and
+ % \@endanenote, so the catcode for > is back to 12 for the
+ % next note.
+ %
+ \edef\@tempa{`\string >}%
+ \ifnum\catcode\@tempa=12%
+ \let\@ResetGT\relax
+ \else
+ \edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}%
+ \@makeother\>%
+ \fi
+ \def\@doanenote##1##2>{\def\@theenmark{##1}\par\begingroup
+ \@ResetGT
+ \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}%
+ \enoteformat}
+ \def\@endanenote{\par\endgroup}%
+ \enoteheading
+ \enotesize
+ \input{\jobname.ent}%
+ \endgroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/endnotes/endnotes.tex b/macros/latex/contrib/endnotes/endnotes.tex
new file mode 100644
index 0000000000..a2ded227a1
--- /dev/null
+++ b/macros/latex/contrib/endnotes/endnotes.tex
@@ -0,0 +1,290 @@
+\documentclass[pagesize=auto]{scrartcl}
+
+\usepackage{fixltx2e}
+\usepackage{etex}
+\usepackage{lmodern}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp}
+\usepackage[utf8]{inputenc}
+\usepackage{microtype}
+\usepackage{hyperref}
+
+\newcommand*{\mail}[1]{\href{mailto:#1}{\texttt{#1}}}
+\newcommand*{\pkg}[1]{\textsf{#1}}
+\newcommand*{\cs}[1]{\texttt{\textbackslash#1}}
+\makeatletter
+\newcommand*{\cmd}[1]{\cs{\expandafter\@gobble\string#1}}
+\makeatother
+\newcommand*{\env}[1]{\texttt{#1}}
+\newcommand*{\meta}[1]{\textlangle\textsl{#1}\textrangle}
+\newcommand*{\marg}[1]{\texttt{\{}\meta{#1}\texttt{\}}}
+\newcommand*{\oarg}[1]{\texttt{[}\meta{#1}\texttt{]}}
+
+\addtokomafont{title}{\rmfamily}
+
+\title{The \pkg{endnotes} package}
+\author{John Lavagnino\thanks{Centre for Computing in the Humanities, King's College London}~~(\mail{John.Lavagnino@kcl.ac.uk})}
+\date{15 January 2003}
+
+
+\begin{document}
+
+\maketitle
+
+\noindent
+Based on the \textsc{footnotes} section of
+\texttt{LATEX.TEX} (version~2.09 -- release of 19 April 1986), with
+``\texttt{footnote}'' changed to ``\texttt{endnote}'' and ``\texttt{fn}'' changed to ``\texttt{en}'' (where
+appropriate), with all the \env{minipage} stuff pulled out, and with
+some small changes for the different operation of endnotes.
+Subsequently updated to follow the code for
+\LaTeXe\ \textlangle 2000/06/01\textrangle.
+
+Uses an extra external file, with \texttt{.ent} extension, to hold the
+text of the endnotes. This may be deleted after the run; a new
+version is generated each time---it doesn't require information
+collected from the previous run.
+
+This code does not obey \cmd{\nofiles}. Perhaps it should.
+
+\bigskip
+
+To turn all the footnotes in your documents into endnotes, say
+%
+\begin{verbatim}
+\let\footnote=\endnote
+\end{verbatim}
+%
+in your preamble, and then add something like
+%
+\begin{verbatim}
+\newpage
+\begingroup
+\parindent 0pt
+\parskip 2ex
+\def\enotesize{\normalsize}
+\theendnotes
+\endgroup
+\end{verbatim}
+%
+as the last thing in your document. (But \cmd{\theendnotes} all
+by itself will work.)
+
+
+\section{Change log}
+
+\renewcommand*{\labelenumi}{\theenumi)}
+
+\begin{labeling}[~--]{DW}
+\item[JL] Modified to include \cmd{\addtoendnotes}. JL, 10/22/89.
+
+\item[JK] Modification by Jörg Knappen 25.\,2.\,1991:
+
+ Introduced \cmd{\notesname} in the spirit of international \LaTeX.
+ \cmd{\notesname} is set per default to be \verb+{Notes}+, but can easily
+ be redifined, e.\,g.\ for german language\\
+ \verb+\renewcommand{\notesname}{Anmerkungen}+
+
+\item[DW] Modification by Dominik Wujastyk, London, 19 September 1991:
+
+ Moved the line\\
+ \verb+\edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}+\\
+ out of the definition of \cmd{\@endnotetext} and into the definition
+ of \cmd{\@doanenote} so that \cmd{\label} and \cmd{\ref} commands work correctly in
+ endnotes. Otherwise, the \cmd{\label} just pointed to the last section
+ heading (or whatever) preceding the \cmd{\theendnotes} command.
+
+\item[JL] Revised documentation and macros. 24 Sept 1991.
+
+\item[\null]
+ \begingroup
+ \setlength{\leftmarginii}{25mm}%
+ \begin{enumerate}
+ \item[\rlap{\hspace{-\labelwidth}modified by \texttt{-\null-bg} (B.\,Gaulle) 09/14/94 for:}]
+ \item replace \verb+»+ (why a 8bit char here?) by \verb+^+ as a default.
+ \item force \cmd{\catcode} of \verb+>+ to be 12 (implied by \cmd{\@doanenote}).
+ \item[\rlap{\hspace{-\labelwidth}\phantom{modified} by \texttt{-\null-bg} again 03/22/95 for:}]
+ \item reseting appropriate \texttt{catcode} of \verb+>+ in case it were
+ used as an active char before \cmd{\@endanenote} (was
+ pointed by Ch.\ Pallier).
+ \end{enumerate}
+ \endgroup
+
+\item[JL] John Lavagnino, 12 January 2003: a number of small updates:
+
+ Incorporate change suggested by Frank Mittelbach to
+ \cmd{\enoteheading}, so that first note has paragraph indentation.
+ Frank's note:
+ %
+ \begin{quote}
+ the idea of this code is to fix the problem that without it
+ the first endnote after the heading will not be indented thus looking
+ somewhat strange. Problem however is that since there is no
+ indentation \verb+\leavemode\par+ will make an absolutely empty pargraph so
+ that no baseline calculation is done. therefore \verb+\vskip-\baselineskip+
+ will put the first endnote directly below the heading without the
+ usual spaccing. using \cmd{\mbox} insead will cure this defect.
+ \end{quote}
+
+ Also incorporated Frank's suggestion to define
+ \cmd{\makeenmark} and \cmd{\theenmark}, so that users can change more of the
+ layout without using \cmd{\makeatletter}. \cmd{\makeenmark} defaults to
+ \cmd{\@makeenmark}, so old code is still supported; and \cmd{\theenmark} is
+ just syntactic sugar for \cmd{\@theenmark}, which is still the real
+ value (and shouldn't be directly modified by user code).
+
+ Definition of \cmd{\ETC}.\ also dropped: surely nobody is still
+ using \TeX~2.992. (If you are, you need to upgrade it or
+ endnotes longer than 1000~characters will be truncated.)
+
+ Update much of the code to track the current \LaTeXe\ code more
+ closely. Clean up \cmd{\theendnotes}.
+
+\item[JL] John Lavagnino, 15 January 2003: fix my garbled version of
+ Frank's updates.
+
+\end{labeling}
+
+
+\section{Endnote commands}
+
+\addtokomafont{labelinglabel}{\small}
+
+\begin{labeling}[~:]{\cmd{\endnotetext}\oarg{num}\marg{text}}
+ \item[\cmd{\endnote}\marg{note}] User command to insert a endnote.
+
+ \item[\cmd{\endnote}\oarg{num}\marg{note}] User command to insert a endnote numbered
+ \meta{num}, where \meta{num} is a number -- 1, 2,
+ etc. For example, if endnotes are numbered
+ *, **, etc. within pages, then \verb+\endnote[2]{...}+
+ produces endnote `**'. This command does not
+ step the endnote counter.
+
+ \item[\cmd{\endnotemark}\oarg{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.
+
+ \item[\cmd{\endnotetext}\oarg{num}\marg{text}] Command to produce the endnote but no
+ mark. \cmd{\endnote} is equivalent to
+ \cmd{\endnotemark}\cmd{\endnotetext}.
+
+ \item[\cmd{\addtoendnotes}\marg{text}] Command to add text or commands to current
+ endnotes file: for inserting headings,
+ pagebreaks, and the like into endnotes
+ sections. \meta{text} a moving argument:
+ \cmd{\protect} required for fragile commands.
+
+\end{labeling}
+
+
+\section{Endnote user commands}
+
+Endnotes use the following parameters, similar to those relating
+to footnotes:
+%
+\begin{labeling}[~:]{\cmd{\@makeentext}\marg{note}}
+ \item[\cmd{\enotesize}] Size-changing command for endnotes.
+
+ \item[\cmd{\theendnote}] In usual \LaTeX\ style, produces the endnote number.
+
+ \item[\cmd{\theenmark}] Holds the current endnote's mark---e.\,g., \dag\ or `1' or `a'.
+ (You don't want to set this yourself, as it comes
+ either from the autonumbering of notes or from
+ the optional argument to \cmd{\endnote}. But you'll need
+ to use it if you define your own \cmd{\makeenmark}.)
+
+ \item[\cmd{\makeenmark}] A macro to generate the endnote marker from \cmd{\theenmark}.
+ The default definition is \verb+\hbox{$^\theenmark$}+.
+
+ \item[\cmd{\@makeentext}\marg{note}]
+ Must produce the actual endnote, using \cmd{\theenmark} as the mark
+ of the endnote and \meta{note} as the text. It is called when effectively
+ inside a \cmd{\parbox}, with $\cmd{\hsize} = \cmd{\columnwidth}$. For example, it might
+ be as simple as
+ \verb*+$^{\theenmark}$ +\meta{note}
+
+\end{labeling}
+
+
+\pagebreak[2]
+
+\section{Endnote pseudocode}
+
+\begin{verbatim}
+\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
+\end{verbatim}
+
+\end{document}