From 227ddc990601089b65fc3b3ca07220d09c1d116e Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 22 Apr 2008 23:43:31 +0000 Subject: edmargin 1.0 (22apr08) git-svn-id: svn://tug.org/texlive/trunk@7606 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/source/latex/edmargin/edmargin.dtx | 1374 ++++++++++++++++++++ .../texmf-dist/source/latex/edmargin/edmargin.ins | 36 + 2 files changed, 1410 insertions(+) create mode 100644 Master/texmf-dist/source/latex/edmargin/edmargin.dtx create mode 100644 Master/texmf-dist/source/latex/edmargin/edmargin.ins (limited to 'Master/texmf-dist/source/latex/edmargin') diff --git a/Master/texmf-dist/source/latex/edmargin/edmargin.dtx b/Master/texmf-dist/source/latex/edmargin/edmargin.dtx new file mode 100644 index 00000000000..e826ce04282 --- /dev/null +++ b/Master/texmf-dist/source/latex/edmargin/edmargin.dtx @@ -0,0 +1,1374 @@ +% \iffalse meta-comment +% +% Copyright (C) 2008 by John Burt +% -------------------------------------------------- +% +% 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. +% +% \fi +% +% \iffalse +%\NeedsTeXFormat{LaTeX2e}[1997/12/01] +%\ProvidesPackage{edmargin} +% [2008/04/14 v1 edmargin file] +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{makeidx,multicol,keyval,ifthen} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{edmargin.dtx} +\end{document} +% +% \fi +% +% \CheckSum{1955} +% +% \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 \~} +% +% +% \changes{v1.0}{2008/04/21}{Initial version} + +% \GetFileInfo{edmargin.sty} +% +% \DoNotIndex{\newcommand,\newenvironment,\def,\edef,\else,\renewcommand,\makeatletter,\makeatother} +% \DoNotIndex{\abovedisplayskip,\belowdisplayskip,\abovedisplayshortskip,\belowdisplayshortskip} +% \DoNotIndex{\newcommand, \section, \subsection, \subsubsection, +% \fileversion,} \DoNotIndex{\filedate, \docdate, \leavevmode, +% \vspace, \small, \normalsize, \fontsize,} \DoNotIndex{\newcommand, +% \section, \subsection, \subsubsection, \fileversion} +% \DoNotIndex{\filedate, \docdate, \leavevmode, \vspace, \small, +% \normalsize, \fontsize} \DoNotIndex{\selectfont, \abovedisplayskip, +% \belowdisplayskip, \setlength, \item} \DoNotIndex{\global, \input, +% \def, \edef, \texttt, \textsf, \setcounter} +% \DoNotIndex{\pagenumbering, \oddsidemargin, \evensidemargin, +% \newdimen, \renewcommand} \DoNotIndex{\makeatletter, \let, \@listi, +% \@listl, \z@, \@xpt, \@xipt, \p@ , \@plus2} \DoNotIndex{\@minus5, +% \@minus3, \@plus3, \makeatother, \@minus4, \relax, \pagestyle} +% \DoNotIndex{\fancyhead, \fancyfoot, \thepage, \@ixp} +% \DoNotIndex{\begin \botmark, \botmark, \catcode, \croppadbot, +% \croppadtop} \DoNotIndex{\croppagewidth, \endverse, \equal, +% \fancyfoot, \fancyhead, \fancyhf} \DoNotIndex{\fancypagestyle, +% \firstmark, \footrulewidth, \hbox, \hbox, \headrulewidth} +% \DoNotIndex{\hfil, \hspace, \ifthenelse, \immediate, \itemindent, +% \listparindent} \DoNotIndex{\makeatletter, \nolinebreak, \openout, +% \raggedbottom, \setcounter, \textrm} \DoNotIndex{\value, \vspace, +% \write} +% \DoNotIndex{\afterpoemtitleskip, \addtocounter, \advance, +% \begin, \bf, \bigskip} +% \DoNotIndex{\bigskipamount, \fi, \@fulltitle, \label, \large, \leftheader} +% \DoNotIndex{\leftheadervalue, \leftmargin, \leftmargini} +% \DoNotIndex{\medskip, \newcounter, \nobreak, \par, \textbf} +% \DoNotIndex{\closeout,\em,\emph,\expandafter,\Huge,\it,\jobname,\kern,\newif, +% \newwrite,\p@,\pageref,\renewenvironment,\rm,\scriptsize,\string, +% \textsc, \unskip} +% \setcounter{IndexColumns}{2} +% \MakeShortVerb{|} +% \def\fileversion{1} +% \def\filedate{21 April 2008} +% \def\docdate{21 April 2008} +% \title{\textsf{Edmargin:} A Simple Design for Critical Editions with Multiple Endnote Series\thanks{This document +% corresponds to \textsf{edmargin}~\fileversion, dated \filedate.}} +% \author{John Burt \\ \texttt{burt@brandeis.edu}} +% \date{April 21, 2008} +% \maketitle +% \begin{abstract} +% \textsf{edmargin} provides multiple endnotes sections with running +% headers of the form ``Notes to pp.~xx--yy'' for critical editions. +% Rather than having endnote marks in the text, \textsf{edmargin} +% puts markers in the margins referring to the page in the endnotes +% sections to which the note refers. +% \end{abstract} +% \tableofcontents +% \hfuzz=50pt + +% \section{Introduction} \textsf{edmargin} provides a simple scheme +% for making critical editions. All critical editions provide several +% series of notes, such as notes about emendations, explanatory notes, +% and notes about the text. It is a common practice to tie these +% notes to line numbers in the text, whether typographical lines in +% prose text or verse lines in poetry. Some editions of prose works +% enumerate sentences and paragraphs rather than lines, as the Bible +% does. All of these systems involve considerable amounts of +% laborious markup. And attaching line numbers to prose involves +% doing things which might make other tasks in \LaTeX\ more +% difficult, such as writing the text to a box and peeling off one +% line at a time. \textsf{edmargin} provides a different system of +% annotation which minimizes markup, and also minimizes the +% possibilities of conflicts among commands. In the text, instead of +% placing a marker, or remembering the line or sentence number, +% \textsf{edmargin} simply places a mark in the margin (as for +% instance ``c'' for a commentary, ``t'' for a textual note, or ``e'' +% for an emendation) followed by the page number in the relevant +% endnotes section to which the note refers. So, for instance, if on +% page 42 of my text I have the anchor for a textual note which +% appears on page 563 of the endnotes section for textual notes, +% \textsf{edmargin} would put \emph{c: p.~563} in the margin on page +% 42 of the line where that note occurs, and the text of the note +% would appear on p.~563, with a reference to the page in the text to +% which it occurs and a lemma drawn from that text. \textsf{edmargin} +% comes with three built in categories of endnotes (emendations, +% explanatory notes, textual notes), and facilities for easily +% constructing other categories of endnote. All of the endnote +% sections will have running headers of the form ``Textual Notes to +% pp.~xx--yy.'' +% +% This scheme for a critical edition, while considerably simpler than +% the traditional schemes, does provide the information a critical +% edition requires, and should be easy for readers to use, provided +% that there are not many notes on every line. The scheme is modelled +% on that used by David Erdman and Harold Bloom in their edition of +% the Collected Poetry and Prose of William Blake. \textsf{edmargin} +% can also make notes with markers in the text, in the traditional +% fashion. +% +% \textsf{edmargin} requires the following packages to work correctly: +% with the standard document classes, or the komascript classes: +% \textsf{fancyhdr}, +% \textsf{ifthen} (for comparing page numbers), \textsf{needspace} (to +% prevent widowed chapter titles in notes sections when resetting +% notes by chapter using either |\notesbychapter| or +% |\resetendnotes|), and \textsf{titleref} (to send the chapter titles +% to the notes section). Because the marginal references are set with +% |\marginpar| you should also call \textsf{mparhack} if you are +% setting with the ``twoside'' option. \textsf{edmargin} sets very +% narrow margin references (only 2em wide). If you are using +% marginpars for any other purpose, you may need to adjust the width, +% and monkey with the other parameters to make the marginal +% references on both sides look symmetrical. To change the width of +% the marginpars to 4em, issue |\setlength{\marginparwidth}{4em}|. +% +% With \textsf{memoir} class, \textsf{edmargin} requires fewer +% packages, since many of the package functions are built into +% \textsf{memoir} and some, \textsf{fancyhdr} most especially, +% conflict with it. Minimally, you will need \textsf{endnotes} and +% \textsf{ifthen}. You might wish to call \textsf{memoir} with the +% oldfontcommands option. +% +% \section{Setup} \DescribeMacro{\setupendnoteheaders} +% |\setupendnoteheaders| opens an external file to receive each of the +% three preset kinds of endnote. \textsf{edmargin} opens external +% files for emendations, textual collations, and explanatory notes +% (with extensions .emd, .ent, and .enx respectively). Then it sets +% the first page of each notes section to the |empty| pagestyle, since +% you normally don't have running headers on the first page of a +% section. And it changes the pagestyle for subsequent pages to have +% a running header of the form ``Notes to pages xx--yy.'' This text +% will appear in the center of each header. It also writes +% information to the external file which will send information to the +% table of contents when the external file is read back into your +% document. Each note written to the file increments a counter that +% keeps track of all the endnotes (even if you are resetting the +% number by chapter). \textsf{edmargin} creates two labels and two +% pagerefs for every note, a label and a pageref for each page in the +% main text \emph{from} which a note comes, and a label and a pageref +% for each page in the notes sections \emph{upon} which the note is +% written. Finally \textsf{edmargin} writes on the external file for +% the endnotes a command to set the |\mark| for that page of the +% endnotes using the |\pageref| to the label in the main text it has +% just defined. +% +% \DescribeMacro{\makeemendations} \DescribeMacro{\maketextnotes} +% \DescribeMacro{\makeexplanatorynotes} You can use these commands +% individually to set up the predefined classes of endnote, rather +% than using |\setupendnoteheaders| to have \textsf{edmargin} put all of the +% emendations, textual collations, and explanatory notes in the +% backmatter of your volume. (This would be useful if you are not +% intending to make use of all three classes of note.) + +% \DescribeMacro{\putemendations} \DescribeMacro{\puttextnotes} +% \DescribeMacro{\putexplanatory} |\puttextnotes|, |\putexplanatory|, +% or |\putemendation| read the external files back into your document +% at the place you specify. Remember that these commands change the +% running header, so if any sections follow these (the bibliography, +% for instance) be sure to restore your prevailing headings style by +% issuing, for example, |\pagestyle{headings}| +% |\thispagestyle{empty}|. +% +% +% \DescribeMacro{\notesbychapter} |\notesbychapter| +% % resets all the note +% % counter every time you issue a |\chapter| command, and it +% puts a centered line reading ``Chapter \textless\emph{chapter +% number}\textgreater ~ \textless\emph{chapter title}\textgreater'' in +% each of the three predefined sections of the the notes whenever +% |\chapter| is issued. If you want only the chapter number, not its +% title, issue |\titleinnotesfalse| in your preamble. Please note +% that with the standard classes \textsf{edmargin} modifies +% |\@chapter|, adding a few lines on to the end of the command. If +% some other package does the same, you may need to reconcile them. +% With \textsf{memoir} class, |\chapter| is modified only if +% |\notesbychapter| is issued. +% +% \begin{sloppypar} +% \DescribeMacro{\setstyleforchapternotebegin} +% \DescribeMacro{\setstyleforchapternoteend} +% |\setstyleforchapternotebegin| and |\setstyleforchapternoteend| +% allows you to customize the appearance of the line that separates +% chapters in the endnotes. If, for instance, rather having a +% centered line in the small font size, you want a flushleft line in +% the large fontsize, issue +% |\setstyleforchapternotebegin{\begin{flushleft}\large}| and +% |\setstyleforchapternoteend{\end{flushleft}}| in your preamble. +% To set these lines in italic or bold, issue +% |\setstyleforchapternotebegin{\em}| or +% |\setstyleforchapternotebegin{\bf}| in your preamble. (It's safe, +% indeed required, to use the old style font commands here, since the +% chapter title line in the notes is confined to a group, which +% restricts the scope of the font style command to the line. If you are +% using \textsf{memoir} class, you should use the oldfontcommands option if you +% plan on issuing |\setstyleforchapternotebegin| and |\setstyleforchapternoteend|.) +% Remember that if you open an environment with +% |\setstyleforchapternotebegin| you must close it in +% |\setstyleforchapternoteend|. So, for instance, if you wish the +% chapter line to be set flushleft, in boldface, in normal font size, +% you would issue +% |\setstyleforchapternotebegin{\begin{flushleft}\begin{bf}\normalsize}| and +% |\setstyleforchapternoteend{\end{bf}\end{flushleft}}| in your +% preamble. +% \end{sloppypar} +% +% \DescribeMacro{\resetendnotes} Conceivably you might wish to do what +% |\notesbychapter| does for each chapter individually. For instance, +% there may be a chapter without endnotes, in which case +% |\notesbychapter| would issue the centered line for that chapter, +% but no notes would follow, which is ugly. Also, since the +% Bibliography is, as far as \LaTeX\ is concerned, a chapter, you must +% use |\resetendnotes| before each chapter rather issuing +% |\notesbychapter| in the preamble if you have a bibliography, or odd +% results will follow. +% +% \DescribeMacro{\resettextnotes} \DescribeMacro{\resetemendations} +% \DescribeMacro{\resetexplanatory} These commands do what +% |\resetendnotes| does, but only for the named section, not for all +% three predefined endnote sections. +% +% \section{Predefined Endnote Sections} +% \textsf{edmargin} comes with three predefined endnotes sections and +% three predefined kinds of endnote, |\textnote{}|, |\emendation{}|, +% and |\explanatory{}|. The argument of each note can be whatever you +% wish, but for clarity it is a good idea to use as a lemma from the +% text, since that will make the passage the note refers to clear. +% For example: |\textnote{lemma] comment}|. +% +% \DescribeMacro{\notesincontents} If you do not wish to include a +% line for the endnotes in the table of contents, issue +% |\notesincontentsonfalse| (This is the default). To include a line +% for the endnotes in the table of contents, issue |\notesincontents| +% or (toggling the boolean) |\notesincontentsontrue|. If you wish to +% rethink how to present the notes in the table of contents, include +% an |\addtocontents| line just before you issue |\theendnotes|, the +% command which will read all of your endnotes into your document at +% that point. For instance, I set the word ``Textual Notes'' in the +% table of contents flush with the left margin, just where the numbers +% in the preceding chapters are. You might, however, wish to indent +% that word just a bit, so that it will be flush with the chapter +% titles above, rather than with the chapter numbers. If you wish to +% do this, just before issuing |\theendnotes|, issue +% |\addcontentsline{toc}{chapter}{\protect\numberline{}\the\textnotescontentsname}|. +% +% \DescribeMacro{\textnote} \DescribeMacro{\explanatory} +% \DescribeMacro{\emendation} Use |\textnote| and its siblings as you +% would use an ordinary |\endnote|. If you are using a lemma, you +% must include it in the text of +% the note: |\textnote{lemma text] comment}|. +% +% \DescribeMacro{\literaltextnote} \DescribeMacro{\literalemendation} +% \DescribeMacro{\literalexplanatory} |\literaltextnote| and its +% siblings are useful for sending information directly to the +% endnotes section to which the command refers. All of these commands +% send unexpanded text to the endnote sections, so you can feel free +% to send this way to the endnote sections commands this way to the +% endnote sections which will be executed when the endnote section is +% read back into your document. You can send expanded text using +% |\immediate\write\textnotes| and its siblings. +% +% \section{Creating New Endnote Sections} +% \DescribeMacro{\definenewnotetype} You can create as many new kinds +% of endnote sections as you wish, using the |\definenewnotetype| +% command. This macro will +% \begin{enumerate} +% \item Open a new output stream and create a new external file to hold the +% notes. +% \item Define a ``literalwrite'' command, on the model of +% |\literaltextnote| for writing literal text directly to that external file. +% \item Send information to that file to set the page style and the +% running header +% \item Send information to that file to set the title of the endnotes +% section, and formatting information for the note text. +% \item Sets up an entry for the table of contents for the note section +% \item Defines a new ``note'' command, and a new marginal marker for +% that note +% \item Defines a new ``reset'' command for setting notes by chapter, +% and modifies |\resetendnotes| and |\notesbychapter| to include that +% new reset command when those two commands are issued +% \item Defines a new ``put'' command (on the model of +% |\puttextnotes|) +% for closing the external file and reading it into the text. +% \end{enumerate} +% +% This monster command takes \emph{six} arguments, which are used for +% setting the names of the various files and commands it creates, and +% for defining such things as the title of the new notes section and +% the marginal mark it places in the main text. These arguments, in +% order, specify +% \begin{enumerate} +% \item The base name used to construct all the commands. +% \item The extension used for the external file +% \item The section title in the running headers of the note section +% \item The section title at the beginning of the note section +% \item The name of the section in the table of contents section +% \item The marginal mark placed by the note command in the text +% \end{enumerate} +% +% So, for instance,\begin{verbatim} +% \definenewnotetype{xyznote}{xyz}{Xyznotes to}{XYZNOTES}{Xyznotes}{x} +% \end{verbatim} creates a note command |\xyznote{}|, and a command +% for sending literal text to the new note section |\literalxyznote|, +% both of which write to an external file |\jobname.xyz|, sets running +% headers for the notes sections of the form ``Xyznotes to +% pp.~52-60,'' write a title line in the endnotes section giving the +% title as XYZNOTES, writes an entry in the table of contents for +% Xyznotes, and sets the marginal mark set by an |\xyznote| to be +% ``x''. You can read in the xyznotes section into your document with +% the command |\putxyznote|. And |\resetendnotes| and +% |\notesbychapter| will put chapter titles in the xyznotes section, +% just as they do for the textual notes, the explanatory notes, and +% the emendations sections. Finally, you can use |\resetxyznotes| to +% set a chapter title in only the xyznotes section. +% +% A trivial use of this commmand would be to make traditional +% endnotes, in which case \textsf{edmargin} would merely be a +% replacement (with a slightly different command set) for +% \textsf{endnote} and \textsf{endheads}. The command for doing this +% would be \begin{verbatim} \definenewnotetype{endnote}{enn}{Endnotes +% to}{ENDNOTES}{Endnotes}{\relax} \end{verbatim} +% +% \section{Using \textsf{edmargin} in a Multilingual World} +% +% By default, \textsf{edmargin} uses English language running +% headers, but these are easily changed. +% +% \begin{sloppypar} \DescribeMacro{\changetextnotesname} To change the +% title in the text for the endnote section for textual notes (the +% default is TEXTUAL NOTES), issue |\changetextnotesname{yourversion}|. To change the running header (by default ``Textual Notes +% to'') issue |\changetextnotesheader{your version}|. To change the +% name of the textual notes section in the table of contents (the +% default is ``Textual Notes'') issue |\changetextnotescontentsname.| +% Equivalent commands for emendations are |\changeemendationsname| +% |\changeemendationsheadername| and |\changeemendationscontentsname|. +% Equivalent commands for explanatory notes are +% |\changeexplanationsname| |\changeexplanationsheader| and +% |\changeexplanationscontentsname|. \end{sloppypar} +% +% +% \begin{sloppypar} +% \DescribeMacro{\changesinglepageabbrev} +% \DescribeMacro{\changemultiplepageabbrev} Running headers refer to +% single pages with the English abbreviation ``p.'' and to multiple +% pages with the English abbreviation ``pp.'' To change these issue +% |\changesinglepageabbrev{new abbrev}| or +% |\changemultiplepageabbrev{new abbrev}| respectively. The ultimate +% outcome is to translate a header of the form ``Notes to +% pp.~xx-yy'' to the form appropriate for your +% language. \end{sloppypar} +% +% \begin{sloppypar} +% \DescribeMacro{\changechapternotesline}If you are using |\resetendnotes| +% or |\setnotesbychapter| you may also want to +% change the text of the line those commands add to the endnotes so as to use some +% other word than ``Chapter.'' To change this, +% issue |\changechapternotesline{your version}|.\end{sloppypar} +% +% \DescribeMacro{\backmattertextfont} |\edmargin| sets the endnote +% text in the |\small| size. To change it to |\normalsize| issue +% |\renewcommand{\backmattertextfont}{\normalsize}|. +% +% \section{Customization} +% \DescribeMacro{\notemarkinmargin} +% \DescribeMacro{\notemarkintext} +% Rather than using marginal references, +% \textsf{edmargin} can be set to put regular endnote markers in the +% text and in the endnote sections. The different series of endnotes +% will be distinguished by using the same abbrevations that were used +% I the case in which marginal references were used. So, for +% instance, the third textual note will have a mark that looks +% ``t:3'' both in the text and in the textual notes section, and the +% fifth explanatory note will have a mark that ``c:5'' both in the +% text and in the textual notes section. You can put the endnote +% markers in the main text rather than in the margins by issuing +% |\notemarkintext| in your preamble. Putting the endnote +% markers in the margin is the default, but you can make sure that +% they go there by issuing |\notemarkinmargin|. +% +% \DescribeMacro{\textnotesparamode} +% \DescribeMacro{\emendationsparamode} +% \DescribeMacro{\explanationsparamode} If you wish to print your +% endnotes as block paragraphs, rather than giving a paragraph to +% each note, issue |\textnotesparamode|, |\emendationsparamode|, or +% |\explanationsparamode|, as the case may require. If you have used +% |\definenewnotetype| to define a note type called |\xyznote|, you +% can set these notes in block paragraphs by issuing +% |\xyznotesparamode|. You might consider setting your notes in block +% paragraphs if you have very many very short notes. +% +% \section{Known Issues} Because the marginal references are set with +% |\marginpar| some of them will appear on the wrong side in +% two-sided printing, unless you include \textsf{mparhack} in your +% list of packages. Also, if you have more than one reference on a +% line, the second reference will be moved down a line (marginpars +% are floats). This may not be an issue if the lemma in the second note +% makes it clear what in the text it refers to. This problem can be +% remedied by substituting the \textsf{marn} package and using the +% |\marn| command in place of |\marginpar|. +% +% Using |\definenewnotetype| with |\notesbychapter| or +% |\resetendnotes| causes a complaint that an |\iftrue| has been left +% open whenever a |\chapter| command is written. The origin is +% probably a problem with |\appendtomacro|. But the error is +% harmless, it turns out, so I haven't tracked it down. +% +% \StopEventually{\PrintChanges\PrintIndex} +% \section{Implementation} +% \subsection{General Purpose Routines} +% Essentially these routines are code posted by Heiko Oberdiek to +% comp.text.tex. If you set a counter from a |\pageref|, that +% |\pageref| is undefined on the first run, and \TeX\ will not only +% complain about the undefined reference, but give a ``missing +% number'' error if you try to do anything with that reference, such +% as compare one page number to another. These commands enable one to +% use the |\pageref| without generating the missing number error on +% the first run. +% \begin{macrocode} +\providecommand*{\ifrefundefined}[1]{% + \expandafter\ifx\csname r@#1\endcsname\relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} +\providecommand*{\@extract@ref}[2]{% + \expandafter\expandafter\expandafter#1\csname +r@#2\endcsname{}{}\@nil +} + +\providecommand*{\@extractref}{% + \@extract@ref\@car +} + +\providecommand*{\@extractpageref}{% + \@extract@ref\@secondcar +} + +\long\def\@secondcar#1#2#3\@nil{#2} + +\providecommand*{\setcounterfromref}[2]{% + \ifrefundefined{#2}{% + \protect\G@refundefinedtrue + \@latex@warning{Reference `#2' on page \thepage \space + undefined}% + \setcounter{#1}{0}% + }{% + \setcounter{#1}{\@extractref{#2}}% + }% +} +\providecommand*{\setcounterfrompageref}[2]{% + \ifrefundefined{#2}{% + \protect\G@refundefinedtrue + \@latex@warning{Reference `#2' on page \thepage \space + undefined}% + \setcounter{#1}{0}% + }{% + \setcounter{#1}{\@extractpageref{#2}}% + }% +} +\long\def\appendtomacro#1#2{% +\begingroup + \toks@\expandafter{#1#2}% + \xdef#1{\the\toks@}% + \endgroup} +% \end{macrocode} +% \subsection{Building Blocks} +% First, define some counters: +% \begin{macrocode} +\newcounter{allendnotes} +\setcounter{allendnotes}{1} +\newcounter{notepageholder} \setcounter{notepageholder}{1} +% \end{macrocode} +% \begin{macro}{\mymarks} +% A command to set the marks. This will be called by the page style. +% Notice that there is a test to see whether \textsf{memoir} class is being +% loaded, so that marks will be set using \textsf{memoir} commands if +% they are available. +% \begin{macrocode} +\newtoks{\singlepageabbrev} +\singlepageabbrev={p.} +\newcommand{\changesinglepageabbrev}[1]{\singlepageabbrev={#1}} +\newtoks{\multiplepageabbrev} +\newcommand{\changemultiplepageabbrev}[1]{\multiplepageabbrev={#1}} +\newtoks{\chapternoteslinename} +\chapternoteslinename={Chapter} +\newcommand{\changechapternotesline}[1]{\chapternoteslinename={#1}} +\multiplepageabbrev{pp.} +\@ifclassloaded{memoir}{\newcommand{\mymarks}{% + \ifthenelse{\equal{\rightmark}{\leftmark}}% + {\unskip ~\the\singlepageabbrev~\rightmark}% if equal + {\unskip ~\the\multiplepageabbrev~\rightmark--\leftmark}}%if not equal +} +{\newcommand{\mymarks}{% + \ifthenelse{\equal{\firstmark}{\botmark}}% + {\unskip ~\the\singlepageabbrev~\firstmark}% if equal + {\unskip ~\the\multiplepageabbrev~\firstmark--\botmark}}%if not equal +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\endnotespagestyle} +% A command to set the page style in \textsf{fancyhdr}. You might +% want to change some aspects of this, such as where to put the page +% number, to make it consistent with the rest of your document. +% Notice that there is a test to see whether \textsf{memoir} class is being +% loaded, so that the header commands built in to \textsf{memoir} are +% used if they are available, and the header commands from +% \textsf{fancyhdr} are used if they are not. +% \begin{macrocode} +\@ifclassloaded{memoir}{\makepagestyle{plain} +\makeevenhead{plain}{}{}{{\small\textrm{\thepage}}} +\makeoddhead{plain}{{\small\textrm{\thepage}}}{}{} +\makeevenfoot{plain}{}{}{} +\makeoddfoot{plain}{}{}{} +\makepagestyle{endnotesstyle} +\makeevenhead{endnotesstyle}{{\small\textrm{\thepage}}} +{{\small{\em \the\notesheadername~\mymarks}}}{} +\makeoddhead{endnotesstyle}{}{{\small{\em \the\notesheadername~\mymarks}}} +{{\small\textrm{\thepage}}} +\makeevenfoot{}{}{} +\makeoddfoot{}{}{} +}{\fancypagestyle{plain}{% +\fancyhf{} +\fancyhead[RO,LE]{{\small\textrm{\thepage}}} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} +} +\fancypagestyle{endnotesstyle}{% +\fancyhf{} +\fancyhead[CO]{{\small{\em \the\notesheadername~\mymarks}}} +\fancyhead[CE]{{\small{\em \the\notesheadername~\mymarks}}} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} +\fancyhead[RO,LE]{{\small\textrm{\thepage}}} +} +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\checknoteheaders} +% This macro sets the counter notepageholder to the value given by the +% pageref of the note that is being output. All that strange business +% with |\string| is there because I want to use the |\immediate\write| +% mechanism to control what gets expanded and what doesn't get +% expanded on the external files for the endnotes, |\jobname.ent| and +% its friends. Everything except the actual number of the endnote is +% written to the external file as unexpanded tokens. When, after you +% call |\theendnotes|, you read in the external file for the endnotes, +% for example |\jobname.ent|, all these tokens become a command to set +% the |\mark|. Notice that there are two forms of this command, one +% for the standard document classes, one for memoir class. +% \textsf{edmargin} chooses which form depending upon which class is +% loaded. +% \begin{macrocode} +\@ifclassloaded{memoir}{\newcommand{\checknoteheaders}{% +\string\setcounterfrompageref\string{notepageholder\string}% +\string{notl\theallendnotes\string}% +\string\markboth\string{\string\thenotepageholder +\string}\string{\string\thenotepageholder\string}% +} +}{\newcommand{\checknoteheaders}{% +\string\setcounterfrompageref\string{notepageholder\string}% +\string{notl\theallendnotes\string}% +\string\mark\string{\string\thenotepageholder\string}% +} +} + +% \end{macrocode} +% \end{macro} +% \subsection{User Code} +% \begin{macro}{\notesincontents} +% This command just sets a boolean. Later, that boolean will be used +% to determine whether you use the default line for the table of +% contents for each endnote class, or whether you define one for +% yourself using |\addtocontents|. +% \begin{macrocode} +\newif\ifnotesincontentson \notesincontentsonfalse +\newcommand{\notesincontents}{\notesincontentsontrue} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maketextnotes} +% Next, setting up the textual collations: |\maketextnotes| opens an +% external file with the extension .ent. And it sends formatting +% information for the first page of the section, as well as +% information to send to the table of contents. Also, it sets a label +% for sending the page number of the textual notes to the table of +% contents. +% \begin{macrocode} +% Extra white space at the top of the first page +\newcommand{\backmatterafterheadersink}{\leavevmode\vspace{11pt}} +% Set notes in small type +\newcommand{\backmattertextfont}{\small} +% writes unexpanded text on the specified external file +\def\strip#1>{} +\newcommand{\literaltextnote}[1]{ + \begingroup + \def\next{#1}% + \newlinechar='40 + \immediate\write\textnotes{\expandafter\strip\meaning\next}% + \endgroup + } +\newcommand{\literalemend}[1]{ + \begingroup + \def\next{#1}% + \newlinechar='40 + \immediate\write\emendations{\expandafter\strip\meaning\next}% + \endgroup +} +\newcommand{\literalexplain}[1]{ + \begingroup + \def\next{#1}% + \newlinechar='40 + \immediate\write\explanations{\expandafter\strip\meaning\next}% + \endgroup +} +% Nothing happens to textual notes unless you say you want to collect +% them. +\newif\iftextnoteson \textnotesonfalse +\newif\ifexplanon \explanonfalse +\newif\ifemendationson \emendationsonfalse +% Use tokens rather than hard coded names to make multilingual use easier +\newtoks{\notesheadername} +\newtoks{\edmrgnotesname} +\edmrgnotesname={TEXTUAL NOTES} +\newcommand{\changetextnotesname}[1]{\edmrgnotesname={#1}} +\newtoks{\textnotesheadername} +\notesheadername={Textual Notes to} +\newcommand{\changetextnotesheader}[1]{\textnotesheadername={#1}} +\newtoks{\textnotescontentsname} +\textnotescontentsname={Textual Notes} +\newcommand{\changetextnotescontentsname}[1]{\textnotescontentsname={#1}} +% font size for endnote section titles +\newcommand{\backmatterheadingfont}{\fontsize{16}{20}\selectfont} +% setting up an empty page +\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} +% white space at top of back matter sections +\newcommand{\backmattersink}{\leavevmode\vspace{21.5pt}} +% set up the external file for textual notes +\newcommand{\maketextnotes}{\global\textnotesontrue + \newwrite\textnotes + \immediate\openout\textnotes=\jobname.ent + \literaltextnote{{\par\clearpage + {\pagestyle{empty}\cleardoublepage} +\thispagestyle{empty}} +\notesheadername={\the\textnotesheadername} +\pagestyle{endnotesstyle} +% \fancyhead{} +% \fancyfoot{} +% \fancyhead[RO,LE]{{\small\textrm{\thepage}}} +% \fancyhead[CO]{{\small{\em \the\textnotesheadername~\mymarks}}} +% \fancyhead[CE]{{\small{\em \the\textnotesheadername~\mymarks}}} +% \fancyfoot[C]{} +\mark{3} +\backmattersink +\begin{center}{\normalfont \backmatterheadingfont \the\edmrgnotesname}\end{center} +\label{textualnotes} +% \lefthyphenmin=2\backmatterafterheadersink\tolerance=500\language=0 +\normalfont \backmattertextfont} +\immediate\write\textnotes{\string\ifnotesincontentson}% +\immediate\write\textnotes{\string\addcontentsline\string{toc\string} +\string{chapter\string}\string{\string\the\string\textnotescontentsname\string}}% +%\immediate\write\@enotes{\string{\string\notescontentsname\string}}% +%\string{\string\protect\string\numberline +%\string{\string} \string\notescontentsname \string} +\immediate\write\textnotes{\string\fi} +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\makeemendations} +% Next, the emendations section: +% \begin{macrocode} +\newtoks{\emendationsname} +\emendationsname={EMENDATIONS} +\newcommand{\changeemendationsname}[1]{\emendationsname={#1}} +\newtoks{\emendationsheadername} +\emendationsheadername={Emendations to} +\newcommand{\changeemendationsheader}[1]{\emendationsheadername={#1}} +\newtoks{\emendationscontentsname} +\emendationscontentsname={Emendations} +\newcommand{\changeemendationscontentsname}[1]{% +\emendationscontentsname={#1}} +\newcommand{\makeemendations}{\global\emendationsontrue + \newwrite\emendations + \immediate\openout\emendations=\jobname.emd + \literalemend{{\par\clearpage + {\pagestyle{empty}\cleardoublepage} +\thispagestyle{empty}} +\notesheadername={\the\emendationsheadername} +\pagestyle{endnotesstyle} +% \fancyhead{} +% \fancyhead[RO,LE]{{\small\textrm{\thepage}}} +% \fancyhead[CO]{{\small{\em \the\emendationsheadername~\mymarks}}} +% \fancyhead[CE]{{\small{\em \the\emendationsheadername~\mymarks}}} +% \fancyfoot{} +\mark{3} +\backmattersink +\begin{center}{\normalfont \backmatterheadingfont + \the\emendationsname}\end{center} +\label{emendationnotes} +% \lefthyphenmin=2\backmatterafterheadersink\tolerance=500\language=0 +\normalfont \backmattertextfont} +\immediate\write\emendations{\string\ifnotesincontentson}% +\immediate\write\emendations{\string\addcontentsline\string{toc\string} +\string{chapter\string}\string{\string\the\string\emendationscontentsname\string}}% +%\immediate\write\@enotes{\string{\string\notescontentsname\string}}% +%\string{\string\protect\string\numberline +%\string{\string} \string\notescontentsname \string} +\immediate\write\emendations{\string\fi} +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\makeexplanatorynotes} +% And the explanatory notes: +% \begin{macrocode} +\newtoks{\explanationsname} +\explanationsname={EXPLANATORY NOTES} +\newcommand{\changeexplanationsname}[1]{\explanationsname={#1}} +\newtoks{\explanationsheadername} +\explanationsheadername={Explanatory Notes to} +\newcommand{\changeexplanationsheader}[1]{\explanationsheadername={#1}} +\newtoks{\explanationscontentsname} +\explanationscontentsname={Explanatory Notes} +\newcommand{\changeexplanationscontentsname}[1]{% +\explanationscontentsname={#1}} +\newcommand{\makeexplanatorynotes}{\global\explanontrue + \newwrite\explanations + \immediate\openout\explanations=\jobname.enx + \literalexplain{{\par\clearpage + {\pagestyle{empty}\cleardoublepage} +\thispagestyle{empty}} +\notesheadername={\the\explanationsheadername} +\pagestyle{endnotesstyle} +% \fancyhead[RO,LE]{{\small\textrm{\thepage}}} +% \fancyhead[CO]{{\small{\em \the\explanationsheadername~\mymarks}}} +% \fancyhead[CE]{{\small{\em \the\explanationsheadername~\mymarks}}} +% \fancyfoot{} +\mark{3} +\backmattersink +\begin{center}{\normalfont \backmatterheadingfont + \the\explanationsname}\end{center} +\label{explanatorynotes} +% \lefthyphenmin=2\backmatterafterheadersink\tolerance=500\language=0 +\normalfont \backmattertextfont } +\immediate\write\explanations{\string\ifnotesincontentson}% +\immediate\write\explanations{\string\addcontentsline\string{toc\string} +\string{chapter\string}\string{\string\the\string\explanationscontentsname\string}}% +%\immediate\write\@enotes{\string{\string\notescontentsname\string}}% +%\string{\string\protect\string\numberline +%\string{\string} \string\notescontentsname \string} +\immediate\write\explanations{\string\fi} +} +% \end{macrocode} +% \end{macro} + +% Auxiliary commands for note and title sections +% \begin{macrocode} +% +\newcommand{\argpageref}[1]{\pageref{#1}} +\newcommand{\@pagemarktotextnotes}[1]{% +\immediate\write\textnotes{\string\setcounterfrompageref\string{notepageholdertitle\string}% +\string{#1\string}\string\unskip}% +\immediate\write\textnotes{\string\mark% +\string{\string\thenotepageholdertitle\string}}% +} +\newcommand{\@poempagetotextnotes}[1]{% +\immediate\write\textnotes{\string\par\string\argpageref\string{#1\string}\string\unskip}% +\@pagemarktotextnotes{#1}} +\newcommand{\@poemtitletotextnotes}[1]{\literaltextnote{\textbf{#1}}} +% \end{macrocode} +% \begin{macro}{\setupendnoteheaders} +% |\setupendnoteheaders| turns on processing of running headers. +% \begin{macrocode} +\newif\ifendnoteheaderson \endnoteheadersonfalse +\newcommand{\setupendnoteheaders}{% +\endnoteheadersontrue +\maketextnotes +\makeexplanatorynotes +\makeemendations +} +% \newcommand{\setupendnoteheaders}{% +% \endnoteheadersontrue +% \if@enotesopen \else \@openenotes \fi +% \immediate\write\@enotes{% +% \string\thispagestyle\string{empty\string} +% \string\pagestyle\string{endnotesstyle\string}} +% \immediate\write\@enotes{\string\ifnotesincontentson}% +% \immediate\write\@enotes{\string\addcontentsline\string{toc\string} +% \string{chapter\string}\string{\string\the\string\notescontentsname\string}}% +% %\immediate\write\@enotes{\string{\string\notescontentsname\string}}% +% %\string{\string\protect\string\numberline +% %\string{\string} \string\notescontentsname \string} +% \immediate\write\@enotes{\string\fi} +% \def\endnote{\@ifnextchar[\@xendnote{\stepcounter{endnote}% +% % my addition begins +% \stepcounter{allendnotes}\label{notl\theallendnotes}% +% \immediate\write\@enotes{\checknoteheaders}% +% % my addition ends +% \protected@xdef\@theenmark{\theendnote}% +% \@endnotemark\@endnotetext}} +% \let\oldtheendnotes=\theendnotes +% \renewcommand{\theendnotes}{% +% \immediate\write\@enotes{\string\thispagestyle\string{endnotesstyle\string}} +% \oldtheendnotes} +% } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\putemendations} This macro closes external file for emendations, +% reads it in, and puts an entry for the emendations into the table of contents +% file. The macro tests to see whether there is an .aux file from a previous run +% before doing this, and complains in the .log file if the .aux file does not +% exist. +% +% \begin{macrocode} +% \newcommand{\hyphenationforsmall}{\small\bf \hyphenchar\font=45 +% \small\it \hyphenchar\font=45 +% \small\rm \hyphenchar\font=45 +% } +\newcommand{\putemendations}{ +\ifemendationson + \clearemptydoublepage +% \hyphenationforsmall + \immediate\closeout\emendations + \input \jobname.emd +% \ifpoemcontentson +% \ifemendationson +% \immediate\write\poemcontents{\string\contentspoemtitlefont\ \the\emendationscontentsname} +% \immediate\write +% \poemcontents{\string~ \string\contentsleaders \string~\ +% \string\pageref{emendationnotes} \string\par} +% \immediate\write\poemcontents{\string\par \string\smallskip} +% \fi +%\fi +\else + \relax +\fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\putexplanatory} Does the same for explanatory notes. +% +% \begin{macrocode} +\newcommand{\putexplanatory}{ +\ifexplanon + \clearemptydoublepage +% \hyphenationforsmall + \immediate\closeout\explanations + \input \jobname.enx +% \ifpoemcontentson +% \ifexplanon +% \immediate\write\poemcontents{\string\contentspoemtitlefont\ \the\explanationscontentsname} +% \immediate\write +% \poemcontents{\string~ \string\contentsleaders \string~\ +% \string\pageref{explanatorynotes} \string\par} +% \immediate\write\poemcontents{\string\par \string\smallskip} +% \fi +% \fi +\else + \relax +\fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\puttextnotes} Does the same for textual notes. +% +% \begin{macrocode} +\newcommand{\puttextnotes}{ +\iftextnoteson + \clearemptydoublepage +% \hyphenationforsmall + \immediate\closeout\textnotes + \input \jobname.ent +% \ifpoemcontentson +% \iftextnoteson +% \immediate\write\poemcontents{\string\contentspoemtitlefont\ \the\textnotescontentsname} +% \immediate\write +% \poemcontents{\string~ \string\contentsleaders \string~\ +% \string\pageref{textualnotes} \string\par} +% \immediate\write\poemcontents{\string\par \string\smallskip} +% \fi +% \fi +\else + \relax +\fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\margreftextnote} Macros to set marginal page +% references showing where in the apparatus a comment upon the +% marked line is to be found. |\margrefspecial{}| is for occasions +% when you might need to set the label by hand. For instance, suppose +% you have several textnotes on a line, and the note you wish to draw +% attention to is on a different page from the other notes. +% |\margreftextnote| under those circumstances will point only to the +% first note. Use |\margrefspecial| to point to the other note, +% giving |\margrefspecial| a unique argument, and opening that note +% with a \label{} command using the same argument. +% +% \begin{macrocode} +\setlength{\marginparwidth}{2em} +\newcounter{margrefnumber} +\setcounter{margrefnumber}{1} +\newtoks{\margrefmarker} +\margrefmarker={\dag} +\newcommand{\setmargrefmarker}[1]{\margrefmarker={#1}}% +\newcommand{\makemargreflabel}{\string\label\string{margref\themargrefnumber\string}} +\newcommand{\setmargref}{% +\marginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}% +} +\newcommand{\margreftextnote}{% +\iftextnoteson\addtocounter{margrefnumber}{1}% +\immediate\write\textnotes{\makemargreflabel}% +\setmargref\else\relax\fi% +} +\newcommand{\margrefexplanatory}{% +\ifexplanon\addtocounter{margrefnumber}{1}% +\immediate\write\explanations{\makemargreflabel}% +\setmargref\else\relax\fi% +} +\newcommand{\margrefemendation}{% +\ifemendationson\addtocounter{margrefnumber}{1}% +\immediate\write\emendations{\makemargreflabel}% +\setmargref\else\relax\fi% +} +\newcommand{\margrefspecial}[1]{% +\marginpar{\scriptsize {\the\margrefmarker~p.~\pageref{#1}}} +} +% or, perhaps the note marker should be in the text rather than in +% the margin +\newif\ifn@temarkinmargin% +\n@temarkinmargintrue% +\newif\ifn@temarkintext% +\n@temarkintexttrue% +\newcommand{\notemarkinmargin}{\n@temarkinmargintrue\n@temarkintextfalse} +\newcommand{\notemarkintext}{\n@temarkinmarginfalse\n@temarkintexttrue} +%\newif\ifnotemarkinmargin \notemarkinmargintrue% +\newcounter{enmrnotescratchcount}% +\setcounter{enmrnotescratchcount}{0} +\newtoks{\enmrendnotemarker}% +\newcommand{\makeenmrendnotemarker}{% +\enmrendnotemarker={\the\margrefmarker\theenmrnotescratchcount}}% +\newcommand{\putenmrnotemarkerintext}{% +\hbox\textsuperscript{\scriptsize{\the\enmrendnotemarker}}}% +% To set notes in as a block paragraph, rather than individually +\newif{\iftextnotespara}{\textnotesparafalse} +\newcommand{\textnotesparamode}{\textnotesparatrue} +\newif{\ifemendationspara}{\emendationsparafalse} +\newcommand{\emendationsparamode}{\emendationsparatrue} +\newif{\ifexplanationspara}{\explanationsparafalse} +\newcommand{\explanationsparamode}{\explanationsparatrue} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\textnote} +% \begin{macrocode} +% \newcommand{\textnote}[1]{% +% \iftextnoteson% +% \margrefmarker={t:}% +% \stepcounter{allendnotes}\label{notl\theallendnotes}% +% \immediate\write\textnotes{\checknoteheaders}% +% \immediate\write\textnotes{\string\par\string{\string\textbf\string{p.\ +% \string\pageref\string{notl\theallendnotes\string}\string}\string}}% +% \literaltextnote{~#1}% +% \margreftextnote% +% \fi +% } +\newcounter{enmrtextnotecount} +\newcommand{\textnote}[1]{% +\iftextnoteson% +\margrefmarker={t:}% +\ifn@temarkinmargin%n@temarkinmargin +\margreftextnote% +\else% +\stepcounter{enmrtextnotecount}% +\setcounter{enmrnotescratchcount}{\value{enmrtextnotecount}}% +\makeenmrendnotemarker% +\putenmrnotemarkerintext% +\fi% +\stepcounter{allendnotes}\label{notl\theallendnotes}% +\immediate\write\textnotes{\checknoteheaders}% +\ifn@temarkinmargin% +\iftextnotespara\relax\else% +\immediate\write\textnotes{\string\par}\fi% +\immediate\write\textnotes{\string{\string\textbf\string{p.\ +\string\pageref\string{notl\theallendnotes\string}\string}\string}}% +\else +\iftextnotespara\relax\else% +\immediate\write\textnotes{\string\par}\fi% +\immediate\write\textnotes{\string\textsuperscript\string{\theenmrnotescratchcount\string}% +}% +\fi +\literaltextnote{~#1}% +\fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\explanatory} +% \begin{macrocode} +\newcounter{enmrexplanatorycount} +\newcommand{\explanatory}[1]{% +\ifexplanon% +\margrefmarker={c:}% +\ifn@temarkinmargin% +\margrefexplanatory% +\else% +\stepcounter{enmrexplanatorycount}% +\setcounter{enmrnotescratchcount}{\value{enmrexplanatorycount}}% +\makeenmrendnotemarker% +\putenmrnotemarkerintext% +\fi% +\stepcounter{allendnotes}\label{notl\theallendnotes}% +\immediate\write\explanations{\checknoteheaders}% +\ifn@temarkinmargin% +\ifexplanationspara\relax\else% +\immediate\write\explanations{\string\par}\fi% +\immediate\write\explanations{\string{\string\textbf\string{p.\ +\string\pageref\string{notl\theallendnotes\string}\string}\string}}% +\else% +\ifexplanationspara\relax\else% +\immediate\write\explanations{\string\par}\fi% +\immediate\write\explanations{\string% +\textsuperscript\string{\theenmrnotescratchcount\string}% +}% +\fi +\literalexplain{~#1}% +\fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\emendation} +% \begin{macrocode} +\newcounter{enmremendationcount} +\newcommand{\emendation}[1]{% +\ifemendationson% +\margrefmarker={e:}% +\ifn@temarkinmargin% +\margrefemendation% +\else% +\stepcounter{enmremendationcount}% +\setcounter{enmrnotescratchcount}{\value{enmremendationcount}}% +\makeenmrendnotemarker% +\putenmrnotemarkerintext% +\fi% +\stepcounter{allendnotes}\label{notl\theallendnotes}% +\immediate\write\emendations{\checknoteheaders}% +\ifn@temarkinmargin% +\ifemendationspara\relax\else% +\immediate\write\emendations{\string\par}\fi% +\immediate\write\emendations{\string{\string\textbf\string{p.\ +\string\pageref\string{notl\theallendnotes\string}\string}\string}}% +\else% +\ifemendationspara\relax\else% +\immediate\write\emendations{\string\par}\fi% +\immediate\write\emendations{\string\textsuperscript\string{\theenmrnotescratchcount\string}% +}% +\fi +\literalemend{~#1}% +\fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\setstyleforchapternotebegin} +% \begin{macrocode} +\newif\iftitleinnotes \titleinnotestrue% +\newcommand{\styleforchapternotebegin}{% +} +\newcommand{\styleforchapternoteend}{% +} +\newcommand{\setstyleforchapternotebegin}[1]{% +\renewcommand{\styleforchapternotebegin}{#1}} +\newcommand{\setstyleforchapternoteend}[1]{% +\renewcommand{\styleforchapternoteend}{#1}}% +\setstyleforchapternotebegin{\begin{center}} +\setstyleforchapternoteend{\end{center}} +\newcommand{\resettextnotes}{% +% \label{chapter\thechapter}% +\immediate\write\textnotes{\string\begingroup}% +\immediate\write\textnotes{\string\goodbreak}% +\immediate\write\textnotes{\string\Needspace\string{5\string\baselineskip\string}}% +\immediate\write\textnotes{\string\styleforchapternotebegin}% +\immediate\write\textnotes{\the\chapternoteslinename\string\ \thechapter\string~}% +\iftitleinnotes% +\immediate\write\textnotes{\string\titleref\string{chapter\thechapter\string}}% +\fi% +%\immediate\write\textnotes{\string}} +\immediate\write\textnotes{\string\styleforchapternoteend}% +% \immediate\write\textnotes{\string\end\string{center\string}} +\immediate\write\textnotes{\string\nopagebreak}% +\immediate\write\textnotes{\string\endgroup}% +} +\newcommand{\resetemendations}{% +% \label{chapter\thechapter}% +\immediate\write\emendations{\string\begingroup}% +\immediate\write\emendations{\string\goodbreak}% +\immediate\write\emendations{\string\Needspace\string{5\string\baselineskip\string}}% +\immediate\write\emendations{\string\styleforchapternotebegin}% +\immediate\write\emendations{\the\chapternoteslinename\string\ \thechapter\string~}% +\iftitleinnotes% +\immediate\write\emendations{\string\titleref\string{chapter\thechapter\string}}% +\fi% +\immediate\write\emendations{\string\styleforchapternoteend}% +\immediate\write\emendations{\string\nopagebreak}% +\immediate\write\emendations{\string\endgroup}% +} +\newcommand{\resetexplanatory}{% +% \label{chapter\thechapter}% +\immediate\write\explanations{\string\begingroup}% +\immediate\write\explanations{\string\goodbreak}% +\immediate\write\explanations{\string\Needspace\string{5\string\baselineskip\string}}% +\immediate\write\explanations{\string\styleforchapternotebegin}% +\immediate\write\explanations{\the\chapternoteslinename\string\ \thechapter\string~}% +\iftitleinnotes% +\immediate\write\explanations{\string\titleref\string{chapter\thechapter\string}}% +\fi% +\immediate\write\explanations{\string\styleforchapternoteend}% +\immediate\write\explanations{\string\nopagebreak}% +\immediate\write\explanations{\string\endgroup}% +} +\newcommand{\resetendnotes}{% +\resettextnotes% +\resetemendations% +\resetexplanatory} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\notesbychapter} +% \begin{macrocode} +\newif\ifnotesbychapteron \notesbychapteronfalse +\@ifclassloaded{memoir}{\newcommand{\notesbychapter}{\notesbychapterontrue +\addtoiargdef{\chapter}{}{ \iftitleinnotes% + \label{chapter\thechapter}% + \fi% + \ifnotesbychapteron% + \relax% + \resetendnotes% + \fi}} +}{\newcommand{\notesbychapter}{\notesbychapterontrue} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi + \iftitleinnotes% + \label{chapter\thechapter}% + \fi% + \ifnotesbychapteron% + \relax% + \resetendnotes% + \fi} +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\definenewnotetype} +% \begin{macrocode} +% first, some building block commands +% make some new ifs (Thanks to Igor Pechtchanski and Ulrich Schwarz) +\newcommand{\m@kenewnoteif}[1]{% +\expandafter\newif\csname if#1son\endcsname% +\global\csname #1sontrue\endcsname% +\expandafter\newif\csname ifno#1yet\endcsname% +\csname no#1yettrue\endcsname% +} +% make a new output stream +\newcommand{\n@woutputstream}[2]{% +\expandafter\newwrite\csname #1s\endcsname% +\immediate\expandafter\openout\csname #1s\endcsname=\expandafter\jobname .#2% +} +% set up a new literalwrite command +\newcommand{\n@wliteralwrite}[1]{% +\expandafter\newcommand\csname literal#1\endcsname[1]{% +\begingroup% +\def\next{##1}% +\newlinechar='40 +\immediate\write\expandafter\csname #1s\endcsname{\expandafter\strip\meaning\next}% +\endgroup} +} +% heading material for new notes, label, font, par mode default +\newcommand{\n@wnoteheadingmaterial}[3]{% +\csname literal#1\endcsname{% +\par\clearpage% +{\pagestyle{empty}\cleardoublepage}% +\thispagestyle{empty}% +} +\immediate\write\csname #1s\endcsname{% +\string\notesheadername=\string{#2\string}% +\string\pagestyle\string{endnotesstyle\string}% +} +\immediate\write\csname #1s\endcsname{% +\string\mark\string{3\string}% +\string\backmattersink% +\string\begin\string{center\string}% +\string{\string\normalfont \string% +\backmatterheadingfont\ #3\string}\string\end\string{center\string}% +} +\immediate\write\csname #1s\endcsname{\string\label\string{#3\string}}% +\immediate\write\csname #1s\endcsname{\string\normalfont\string\backmattertextfont}% +\immediate\write\csname #1s\endcsname{\string\paramodefalse}% +} +% new entry for table of contents +\newcommand{\n@wentryfortoc}[2]{% +\immediate\write\csname #1s\endcsname{\string\ifnotesincontentson}% +\immediate\write\csname #1s\endcsname{\string\addcontentsline\string{toc\string}% +\string{chapter\string}\string{#2\string}}% +\immediate\write\csname #1s\endcsname{\string\fi}% +} +% new marginal reference kind +\newcommand{\n@wmargrefkind}[1]{% +\expandafter\newcommand\csname margref#1\endcsname[1]{% +\addtocounter{margrefnumber}{1}% +\immediate\write\csname #1s\endcsname{\makemargreflabel}% +\setmargref% +} +} +% new note counter +\newcommand{\n@wnotecounter}[1]{% +\expandafter\newcounter{enmr#1count}% +} +\newcommand{\n@wparaboolean}[1]{% +\expandafter\newif\csname if#1spara\endcsname}% +\newcommand{\n@wputmargref}[1]{% +\expandafter\csname margref#1\endcsname% +} +\newcommand{\n@wputnotenum}[1]{% +\expandafter\stepcounter{enmr#1count}% +\setcounter{enmrnotescratchcount}{\expandafter\value{enmr#1count}}% +\makeenmrendnotemarker% +\putenmrnotemarkerintext% +} +\newif\ifparamode \paramodefalse% +\newcommand{\n@wsetparamode}[1]{% +\expandafter\newcommand\csname #1sparamode\endcsname{% +%\csname #1sparatrue\endcsname +\immediate\write\expandafter\csname #1s\endcsname{\string\paramodetrue}% +} +} +\newcommand{\enmrconditionalpar}{% +\ifparamode% +% \if#1spara +\relax% +\else% +\par% +\fi% +} +\newcommand{\n@wnotecommand}[2]{% +\expandafter\newcommand\csname #1\endcsname[1]{% +\margrefmarker={#2:}% +\ifn@temarkinmargin% +\n@wputmargref{#1}% +\else% +\n@wputnotenum{#1}% +\fi% +\stepcounter{allendnotes}\label{notl\theallendnotes}% +\immediate\write\expandafter\csname #1s\endcsname{\checknoteheaders}% +\ifn@temarkinmargin% +\immediate\write\expandafter\csname #1s\endcsname{\string\enmrconditionalpar}% +%\immediate\write\expandafter\csname #1s\endcsname{\string\par} +\immediate\write\expandafter\csname #1s\endcsname{\string{\string\textbf\string{p.\ +\string\pageref\string{notl\theallendnotes\string}\string}\string}}% +\else% +% \immediate\write\csname #1s\endcsname{\string\par} +\immediate\write\expandafter\csname #1s\endcsname{\string\enmrconditionalpar}% +\immediate\write\csname #1s\endcsname{% +\string\textsuperscript\string{\theenmrnotescratchcount\string}% +}% +\fi +\expandafter\csname literal#1\endcsname{~##1}% +}} +%%%%%%%%%%%%%% +\newcommand{\definenewnotetype}[6]{% +% 1. make new ifs +\m@kenewnoteif{#1}% +% 2 # new output stream and external file +\n@woutputstream{#1}{#2}% +% 4. set up a literalwrite command +\n@wliteralwrite{#1}% +% 5. First a blank page than a page in the empty pagestyle +% set the page style and running header +\n@wnoteheadingmaterial{#1}{#3}{#4}% +% 6. set up entry for table of contents +\n@wentryfortoc{#1}{#5}% +% % 7. set up a command to write the note +\n@wmargrefkind{#1}% +% % then a counter for the note kind +\n@wnotecounter{#1} +% % then a boolean for setting the notes in paragraph format +\n@wparaboolean{#1} +\n@wsetparamode{#1} +% % then the note command +\n@wnotecommand{#1}{#6} +% 8. make a reset command for setting by chapter +\expandafter\newcommand\csname reset#1s\endcsname[1]{% +\immediate\write\csname #1s\endcsname{\string\begingroup}% +\immediate\write\csname #1s\endcsname{\string\goodbreak}% +\immediate\write\csname #1s\endcsname{\string\Needspace\string{5\string\baselineskip\string}}% +\immediate\write\csname #1s\endcsname{\string\styleforchapternotebegin}% +\immediate\write\csname #1s\endcsname{\the\chapternoteslinename\string\ \thechapter\string~}% +\iftitleinnotes% +\immediate\write\csname #1s\endcsname{\string\titleref\string{chapter\thechapter\string}}% +\fi% +\immediate\write\csname #1s\endcsname{\string\styleforchapternoteend}% +\immediate\write\csname #1s\endcsname{\string\nopagebreak}% +\immediate\write\csname #1s\endcsname{\string\endgroup}% +} +% 9. add this to resetchapter and setbychapter +%\appendtomacro{\notesbychapter}{\expandafter\csname reset#1s\endcsname} +\appendtomacro{\resetendnotes}{\expandafter\csname reset#1s\endcsname}% +% 10. command for closing the file and reading in the endnotes section +\expandafter\newcommand\csname put#1s\endcsname{% +\immediate\expandafter\closeout\csname #1s\endcsname% +\expandafter\input \jobname.#2% +}% +} +% \end{macrocode} +% \end{macro} +% \Finale +\endinput \ No newline at end of file diff --git a/Master/texmf-dist/source/latex/edmargin/edmargin.ins b/Master/texmf-dist/source/latex/edmargin/edmargin.ins new file mode 100644 index 00000000000..e55d625ce12 --- /dev/null +++ b/Master/texmf-dist/source/latex/edmargin/edmargin.ins @@ -0,0 +1,36 @@ +%% +%% Copyright (C) 2008 by John Burt +%% +%% This file may be distributed and/or modified under the conditions +%% of the LateX Project Public License, either verison 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. +%% + +\input docstrip.tex +\keepsilent + +\generate{\file {edmargin.sty} {\from {edmargin.dtx}{package}}} + +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation, please move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space edmargin.sty} +\Msg{*} +\Msg{* To produce the documentation, run LaTeX on the file:} +\Msg{*} +\Msg{* \space\space endheads.dtx} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{***********************************************************} + +\endbatchfile + + \ No newline at end of file -- cgit v1.2.3