summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-09-03 18:10:02 +0000
committerKarl Berry <karl@freefriends.org>2009-09-03 18:10:02 +0000
commitdaeaddcef56178dd571d9c813fbdde669ec40f34 (patch)
treebdb4801c0ab27619f47e1db59dc51fd643f05088 /Master/texmf-dist/tex
parent6fc6b33771dcc310a66db1b577203a8db6ff3388 (diff)
new latex package tablenotes (30aug09)
git-svn-id: svn://tug.org/texlive/trunk@15031 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/tablenotes/tablenotes.sty348
1 files changed, 348 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tablenotes/tablenotes.sty b/Master/texmf-dist/tex/latex/tablenotes/tablenotes.sty
new file mode 100644
index 00000000000..13a601f9a3e
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/tablenotes/tablenotes.sty
@@ -0,0 +1,348 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ****************************************
+% * TABNOTES *
+% ****************************************
+%
+% Date of this version: 28 August 2009.
+% Matthias Borck-Elsner
+%
+%% Based on endnotes.sty 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.
+%
+% Uses an extra external file, with .tne extension, to hold the
+% text of the tabnotes. 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.
+%
+%
+% To turn all the footnotes in your documents into tabnotes, say
+%
+% \let\footnote=\tabnote
+%
+% in your preamble, and then add something like
+%
+% \newpage
+% \begingroup
+% \parindent 0pt
+% \parskip 2ex
+% \def\tnotesize{\normalsize}
+% \thetabnotes
+% \endgroup
+%
+% as the last thing in your document. (But \thetabnotes all
+% by itself will work.)
+%
+
+%
+%
+% ****************************************
+% * TABNOTE COMMANDS *
+% ****************************************
+%
+%
+% \tabnote{NOTE} : User command to insert a tabnote.
+%
+% \tabnote[NUM]{NOTE} : User command to insert a tabnote numbered
+% NUM, where NUM is a number -- 1, 2,
+% etc. For example, if tabnotes are numbered
+% *, **, etc. within pages, then \tabnote[2]{...}
+% produces tabnote '**'. This command does not
+% step the tabnote counter.
+%
+% \tabnotemark[NUM] : Command to produce just the tabnote mark in
+% the text, but no tabnote. With no argument,
+% it steps the tabnote counter before generating
+% the mark.
+%
+% \tabnotetext[NUM]{TEXT} : Command to produce the tabnote but no
+% mark. \tabnote is equivalent to
+% \tabnotemark \tabnotetext .
+%
+% \addtotabnotes{TEXT} : Command to add text or commands to current
+% tabnotes file: for inserting headings,
+% pagebreaks, and the like into tabnotes
+% sections. TEXT a moving argument:
+% \protect required for fragile commands.
+%
+% ****************************************
+% * TABNOTE USER COMMANDS *
+% ****************************************
+%
+% Tabnotes use the following parameters, similar to those relating
+% to footnotes:
+%
+% \tnotesize : Size-changing command for tabnotes.
+%
+% \thetabnote : In usual LaTeX style, produces the tabnote number.
+%
+% \thetnmark : Holds the current tabnote'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 \tabnote. But you'll need
+% to use it if you define your own \maketnmark.)
+%
+% \maketnmark : A macro to generate the tabnote marker from \thetnmark
+% The default definition is \hbox{$^\thetnmark$}.
+%
+% \@makeentext{NOTE} :
+% Must produce the actual tabnote, using \thetnmark as the mark
+% of the tabnote and NOTE as the text. It is called when effectively
+% inside a \parbox, with \hsize = \columnwidth. For example, it might
+% be as simple as
+% $^{\thetnmark}$ NOTE
+%
+%
+% ****************************************
+% * TABNOTE PSEUDOCODE *
+% ****************************************
+%
+% \tabnote{NOTE} ==
+% BEGIN
+% \stepcounter{tabnote}
+% \@thetnmark :=G eval (\thetabnote)
+% \@tabnotemark
+% \@tabnotetext{NOTE}
+% END
+%
+% \tabnote[NUM]{NOTE} ==
+% BEGIN
+% begingroup
+% counter tabnote :=L NUM
+% \@thetnmark :=G eval (\thetabnote)
+% endgroup
+% \@tabnotemark
+% \@tabnotetext{NOTE}
+% END
+%
+% \@tabnotetext{NOTE} ==
+% BEGIN
+% write to \@tnotes file: "\@doantnote{TABNOTE MARK}"
+% begingroup
+% \next := NOTE
+% set \newlinechar for \write to \space
+% write to \@tnotes file: \meaning\next
+% (that is, "macro:->NOTE)
+% endgroup
+% END
+%
+% \addtotabnotes{TEXT} ==
+% BEGIN
+% open tabnotes file if not already open
+% begingroup
+% let \protect to \string
+% set \newlinechar for \write to \space
+% write TEXT to \@tnotes file
+% endgroup
+% END
+%
+% \tabnotemark ==
+% BEGIN \stepcounter{tabnote}
+% \@thetnmark :=G eval(\thetabnote)
+% \@tabnotemark
+% END
+%
+% \tabnotemark[NUM] ==
+% BEGIN
+% begingroup
+% tabnote counter :=L NUM
+% \@thetnmark :=G eval(\thetabnote)
+% endgroup
+% \@tabnotemark
+% END
+%
+% \@tabnotemark ==
+% BEGIN
+% \leavevmode
+% IF hmode THEN \@x@sf := \the\spacefactor FI
+% \maketnmark % put number in main text
+% IF hmode THEN \spacefactor := \@x@sf FI
+% END
+%
+% \tabnotetext ==
+% BEGIN \@thetnmark :=G eval (\thetabnote)
+% \@tabnotetext
+% END
+%
+% \tabnotetext[NUM] ==
+% BEGIN begingroup counter tabnote :=L NUM
+% \@thetnmark :=G eval (\thetabnote)
+% endgroup
+% \@tabnotetext
+% END
+%
+% ****************************************
+% * ENDNOTE MACROS *
+% ****************************************
+%
+
+\@definecounter{tabnote}
+\def\thetabnote{\@arabic\c@tabnote}
+
+\def\@maketnmark{\hbox{\@textsuperscript{\normalfont\@thetnmark}}}
+\def\maketnmark{\@maketnmark}
+
+\def\thetnmark{\@thetnmark}
+
+\newdimen\tabnotesep
+
+\def\tabnote{\@ifnextchar[\@xtabnote{\stepcounter{tabnote}%
+ \protected@xdef\@thetnmark{\thetabnote}%
+ \@tabnotemark\@tabnotetext}}
+
+\def\@xtabnote[#1]{%
+ \begingroup
+ \c@tabnote=#1\relax
+ \unrestored@protected@xdef\@thetnmark{\thetabnote}%
+ \endgroup
+ \@tabnotemark\@tabnotetext}
+
+% Here begins a section of tabnote code that's really different from
+% the footnote code of LaTeX.
+
+\let\@doantnote=0
+\let\@endantnote=0
+
+\newwrite\@tnotes
+\newif\if@tnotesopen \global\@tnotesopenfalse
+
+\def\@opentnotes{\immediate\openout\@tnotes=\jobname.tne\relax
+ \global\@tnotesopentrue}
+
+% 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 \@tnotes file, so that all
+% of the lines wind up being quite short.
+
+\long\def\@tabnotetext#1{%
+ \if@tnotesopen \else \@opentnotes \fi
+ \immediate\write\@tnotes{\@doantnote{\@thetnmark}}%
+ \begingroup
+ \def\next{#1}%
+ \newlinechar='40
+ \immediate\write\@tnotes{\meaning\next}%
+ \endgroup
+ \immediate\write\@tnotes{\@endantnote}}
+
+% \addtotabnotes works the way the other tabnote macros probably should
+% have, requiring the use of \protect for fragile commands.
+
+\long\def\addtotabnotes#1{%
+ \if@tnotesopen \else \@opentnotes \fi
+ \begingroup
+ \newlinechar='40
+ \let\protect\string
+ \immediate\write\@tnotes{#1}%
+ \endgroup}
+
+% End of unique tabnote code
+
+\def\tabnotemark{%
+ \@ifnextchar[\@xtabnotemark
+ {\stepcounter{tabnote}%
+ \protected@xdef\@thetnmark{\thetabnote}%
+ \@tabnotemark}}
+
+\def\@xtabnotemark[#1]{%
+ \begingroup
+ \c@tabnote #1\relax
+ \unrestored@protected@xdef\@thetnmark{\thetabnote}%
+ \endgroup
+ \@tabnotemark}
+
+\def\@tabnotemark{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \maketnmark
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax}
+
+\def\tabnotetext{%
+ \@ifnextchar [\@xtabnotenext
+ {\protected@xdef\@thetnmark{\thetabnote}%
+ \@tabnotetext}}
+
+\def\@xtabnotenext[#1]{\begingroup \c@tabnote=#1\relax
+ \xdef\@thetnmark{\thetabnote}\endgroup \@tabnotetext}
+
+\def\@xtabnotenext[#1]{%
+ \begingroup
+ \c@tabnote=#1\relax
+ \unrestored@protected@xdef\@thetnmark{\thetabnote}%
+ \endgroup
+ \@tabnotetext}
+
+
+% \thetabnotes actually prints out the tabnotes.
+
+% The user may want separate tabnotes 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 \thetabnotes wherever you want the
+% tabnotes so far to be inserted. However, you must add
+% \setcounter{tabnote}{0} after that if you want subsequent tabnotes
+% to start numbering at 1 again.
+
+% \tnoteformat is provided so user can specify some special formatting
+% for the tabnotes. It needs to set up the paragraph parameters, start
+% the paragraph, and print the label. The \mbox stuff in \tnoteheading
+% 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\tnotesname{Tablenotes}%
+\def\tnoteheading{\subsection*{\tnotesname
+ \@mkboth{\MakeUppercase{\tnotesname}}{\MakeUppercase{\tnotesname}}}%
+ \mbox{}\par\vskip-\baselineskip}
+
+\def\tnoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em
+ \leavevmode\llap{\maketnmark}}
+
+\def\tnotesize{\footnotesize}
+
+\def\thetabnotes{\immediate\closeout\@tnotes \global\@tnotesopenfalse
+ \begingroup
+ \makeatletter
+ %
+ % The machinery with \@ResetGT and > here ensures that
+ % \@doantnote works properly even if > is an active character
+ % at the point where \thetabnotes is invoked. > needs to have
+ % catcode 12 when the arguments of \@doantnote are scanned, so
+ % that the > in the string "macro:->" is matched. The actual
+ % footnote text is not an argument to \@doantnote, but just
+ % follows it in the .tne 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 \@doantnote and
+ % \@endantnote, 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\@doantnote##1##2>{\def\@thetnmark{##1}\par\begingroup
+ \@ResetGT
+ \edef\@currentlabel{\csname p@tabnote\endcsname\@thetnmark}%
+ \tnoteformat}
+ \def\@endantnote{\par\endgroup}%
+ \tnoteheading
+ \tnotesize
+ \input{\jobname.tne}%
+ \endgroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%