diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/revnum |
Initial commit
Diffstat (limited to 'macros/latex/contrib/revnum')
-rw-r--r-- | macros/latex/contrib/revnum/readme.txt | 6 | ||||
-rw-r--r-- | macros/latex/contrib/revnum/revnum.dtx | 307 | ||||
-rw-r--r-- | macros/latex/contrib/revnum/revnum.pdf | bin | 0 -> 70916 bytes |
3 files changed, 313 insertions, 0 deletions
diff --git a/macros/latex/contrib/revnum/readme.txt b/macros/latex/contrib/revnum/readme.txt new file mode 100644 index 0000000000..46b3073578 --- /dev/null +++ b/macros/latex/contrib/revnum/readme.txt @@ -0,0 +1,6 @@ +revnum.dtx provides an enumerate environment that counts backwards. Most +options of the enumerate environment (re-defining \theenumi etc.) are still +allowed, it is not necessary to know the number of entries in the list. + +Joern Wilms +wilms@astro.uni-tuebingen.de diff --git a/macros/latex/contrib/revnum/revnum.dtx b/macros/latex/contrib/revnum/revnum.dtx new file mode 100644 index 0000000000..d31a2d307c --- /dev/null +++ b/macros/latex/contrib/revnum/revnum.dtx @@ -0,0 +1,307 @@ +% \iffalse +%% File: revnum.dtx, Copyright (C) 1996 Joern Wilms +%% wilms@astro.uni-tuebingen.de +% +% This file contains the LaTeX-environment revnumerate and its +% documentation. To obtain the style-file revnum.sty, do a +% latex docstrip with infileext=dtx, outfileext=sty, no options, and +% filename=revnum. To obtain the documentation do a +% latex revnum.dtx +% makeindex -s gglo.ist -o revnum.gls revnum.glo +% latex revnum.dtx +% TWO latex-runs are necessary to produce a correct output, if you do +% not want the list of changes you can omit the makeindex-run. +% +%<*dtx> +\ProvidesFile{revnum.dtx}[1997/05/10 v1.0 reverse enumerate, jw] +%</dtx> +% \fi +% +% +% \iffalse +%<*driver> +\documentclass{ltxdoc} +\usepackage{doc} +\usepackage{revnum} +\RecordChanges +\CodelineIndex +\setlength{\parindent}{0pt} +\begin{document} +\DocInput{revnum.dtx} +\PrintChanges +\end{document} +%</driver> +% \fi +% +% \CheckSum{114} +% \changes{v1.0}{10 May 1997}{First Release} +% +% \GlossaryPrologue{\section*{Changes}} +% +% \MakeShortVerb{\|} +% +% \GetFileInfo{revnum.dtx} +% +% \title{\texttt{revnumerate} --- a reverse +% \texttt{enumerate}-environment\thanks{This file has version number +% \fileversion, last revised \filedate.}} +% \author{J\"orn Wilms\thanks{Universit\"at T\"ubingen, Institut f\"ur +% Astronomie und Astrophysik, Abt.\ Astronomie, Wald\-h\"auser Str.~64, +% D-72076 T\"ubingen, Germany, \textsf{email:} +% \texttt{wilms@astro.uni-tuebingen.de}}} +% \maketitle +% +% \section{Introduction} +% While writing on a style-file for the list of references section of my CV +% I realized that there is no environment in \LaTeX\ that enumerates items +% in reverse order. In my case I needed such an environment to present my +% list of publications in descending temporal order, while keeping them +% numbered in ascending temporal order. In other words, the first publication +% should be labeled with ``1.'' while still being the last in the list, since +% the most recent publications should be presented first. +% +% While this +% problem is easily stated at first, a solution of it was more +% difficult: Since the number of items in the list is not known at the +% beginning, they need to be counted first, then the number of items +% in the environment needs to be written in \LaTeX{}s |aux|-File, to +% be used in the next \LaTeX-run. In addition, the environment should +% fit smoothly into the already existing environments of \LaTeX\ and +% the interface should just behave like the normal +% |enumerate|-environment, so that style-changes to +% |enumi|\ldots|enumvi| would also affect the |revnumerate| +% environment. +% +% My solution to the problem is documented below, if you have +% comments, if you have found bugs, or if you have extensions to the +% environment, send me email at |wilms@astro.uni-tuebingen.de|. +% +% \section{The User-Interface} +% \DescribeEnv{revnumerate} +% The user-interface to the |revnumerate|-environment is very +% simple. For example, +% \begin{verbatim} +% \begin{revnumerate} +% \item Point three is the most important, +% \item Point two is not as nice, +% \item and Point one is uninteresting. +% \end{revnumerate} +% \end{verbatim} +% and running \LaTeX\ twice gives +% \begin{quote} +% \begin{revnumerate} +% \item Point three is the most important, +% \item Point two is not as nice, +% \item and Point one is uninteresting. +% \end{revnumerate} +% \end{quote} +% The |revnumerate|-environment has an optional argument that gives +% the starting number: +% \begin{verbatim} +% \begin{revnumerate}[10] +% \item One +% \item Two +% \item Three +% \item Four +% \end{revnumerate} +% \end{verbatim} +% results in +% \begin{quote} +% \begin{revnumerate}[10] +% \item One +% \item Two +% \item Three +% \item Four +% \end{revnumerate} +% \end{quote} +% It is possible to nest the environment with the other +% \LaTeX-environments without any problems, as well as using the +% normal redefinition of |\theenumi| to |\theenumiv| to get a different +% behaviour of the output: +% \begin{verbatim} +% \renewcommand{\labelenumi}{\S\theenumi.} +% \renewcommand{\theenumii}{\roman{enumii}} +% \begin{enumerate} +% \item This is point one +% \item This section has two subpoints: +% \begin{revnumerate} +% \item Subpoint two\label{pt22} +% \item Subpoint one +% \end{revnumerate} +% \item and Point three. +% \end{enumerate} +% Where point~\ref{pt22}\ldots +% \end{verbatim} +% The above text gives +% \begin{quote} +% \renewcommand{\labelenumi}{\S\theenumi.} +% \renewcommand{\theenumii}{\roman{enumii}} +% \begin{enumerate} +% \item This is point one +% \item This section has two subpoints: +% \begin{revnumerate} +% \item Subpoint two\label{pt22} +% \item Subpoint one +% \end{revnumerate} +% \item and Point three. +% \end{enumerate} +% Where point~\ref{pt22}\ldots +% \end{quote} +% Pretty nice, isn't it? +% +% \StopEventually +% +% \section{The Code} +% First we identify the style-file. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{revnum}[1997/05/10 v1.0 reverse enumerate, jw] +% \end{macrocode} +% Next, we need to create four new counters, |rev@cnti| to +% |rev@cntiv|. These counters are used in the environment to count +% the number of |revnumerate|-environments present at each possible +% level. Since we need to keep track on how many +% entries each environment contains, we need a way to create +% counters such that they uniquely define each environment. The +% solution to this is to use an ``index'', provided by |rev@cnti| +% to |rev@cntiv| that gets appended to the counter for each +% environment. If that confuses you, see below. +% \begin{macrocode} +\newcounter{rev@cnti} \def\therev@cnti{i\arabic{rev@cnti}} +\newcounter{rev@cntii} \def\therev@cntii{ii\arabic{rev@cntii}} +\newcounter{rev@cntiii} \def\therev@cntiii{iii\arabic{rev@cntiii}} +\newcounter{rev@cntiv} \def\therev@cntiv{vi\arabic{rev@cntiv}} +% \end{macrocode} +% +%% \begin{environment}{revnumerate} +% Now let's start with the |revnumerate|-environment. We have one +% option, the start number. If it is not given we initialize the +% start-number to $-1$, to indicate to the code that we want to use +% the value from the |.aux|-file. +% \begin{macrocode} +\newenvironment{revnumerate}[1][-1]% +{% +% \end{macrocode} +% As in the case of generic \LaTeX-environments, only four nestings +% are possible. The current depth is given by the counter |\@enumdepth|, +% and if it is larger than three we need to output an error-message. If +% not, we increase the nesting-depth by one. +% \begin{macrocode} +\ifnum\@enumdepth >\thr@@\@toodeep\else + \advance\@enumdepth\@ne +% \end{macrocode} +% As the generic environments, we use one of the counters |enumi| +% to |enumiv| as the counter for our environment. This way, all +% changes made to the counters |\theenumi|\ldots|\theenumiv| will +% also affect the |revnumerate| environment. +% \begin{macrocode} + \edef\@enumctr{enum\romannumeral\the\@enumdepth} +% \end{macrocode} +% To count uniquely identify the current |revnumerate|-environment, +% we use one of the counters |rev@cnti| to |rev@cntiv|. We first +% define, which counter to use, call it |\@revcnt| and then +% increase it by one to get the number of the current environment. +% \begin{macrocode} + \edef\@revcnt{rev@cnt\romannumeral\the\@enumdepth} + \stepcounter{\@revcnt} +% \end{macrocode} +% The number of items in the current list will be counted with a +% counter called something like |revi1|, |revii1|, |revii2|, +% etc. The name of this counter is created by appending the value +% of |rev@cnti| to |rev@cntiv| to the string |rev|. +% \begin{macrocode} + \edef\the@revcnt{rev\csname the\@revcnt\endcsname} +% \end{macrocode} +% If the current counter is {\em not} known yet, i.e.\ if the +% counter has not been defined in the |.aux|-file, then we need to +% define it with |\newcounter| and initialize it. Just using +% |\newcounter| is not enough, since that will initialize the +% counter to 0. Since the |revnumerate|-environment counts the +% counter backwards, this would give negative counter-values, which +% would result in bogus error-messages if the counter is output, +% e.g. in alphabetical manner. We therefore initialize it to 26, +% which should give positive numbers for all +% |revnumerate|-environments where alphabetical output is desired. +% The strange |\ifx|\ldots|\relax| sequence is an +% |\if@undefined|. I don't know why I didn't use |\if@undefined| +% directly\ldots +% \begin{macrocode} + \expandafter\ifx\csname c@\the@revcnt\endcsname\relax% + \newcounter{\the@revcnt} + \setcounter{\the@revcnt}{26} + \fi +% \end{macrocode} +% In the next step we need to initialize |\@enumctr|, which will +% produce the labels to be output, to its starting value. This +% value is either the value given by the counter |\the@revcnt|, or +% it is the argument of the environment. In the default-case, when +% the argument did not have an argument, |#1| gets set to $-1$. +% \begin{macrocode} + \ifnum #1 <0 + \setcounter{\@enumctr}{\value{\the@revcnt}} + \else + \setcounter{\@enumctr}{#1} + \fi +% \end{macrocode} +% Since we need to add $-1$ to |\@enumctr| before we output the +% label. Only in this case the |\label|-command will work +% correctly. I don't know why, but at least the current implementation +% works. In addition we need to reset the |\the@revcnt|-counter +% back to zero to count the number of items in the current +% environment. +% \begin{macrocode} + \stepcounter{\@enumctr}% + \setcounter{\the@revcnt}{0}% +% \end{macrocode} +% The |revnumerate|-environment is defined via the +% |list|-environment, thus making it easily changeable. For outputting +% the label we first reduce the environment-counter |\@enumctr| by one +% and then add one to |\the@revcnt|. Then the +% ``variable'' |\@currentlabel|, which +% contains the way the current position in the text will be referenced +% with |\ref| gets set to something like |\p@enumi \the@enumi|. The +% commands |\p@enumi| to |\p@enumiv| are usually defined in the class +% and are used to make labels more meaningful. For example, a +% reference to subpoint ``b'' of item number 3 will result in a +% ``3b'', and not just ``b''. Finally, the label is output using one +% of the commands |\labelenumi| to |\labelenumiv|. +% \begin{macrocode} + \begin{list}% + {\addtocounter{\@enumctr}{-1}% + \stepcounter{\the@revcnt}% + \global\edef\@currentlabel + {\csname p@\@enumctr\endcsname\csname the\@enumctr\endcsname}% + \csname label\@enumctr\endcsname% + }{}% +\fi +}{% +% \end{macrocode} +% At the end of the environment, we need to write the number of +% items in the current environment to the |aux|-file. Since the +% |aux|-file is read twice during the processing of a \LaTeX-file, +% once at the beginning and once at the end of the document, it is +% not sufficient to just output a |\newcounter| and a +% |\setcounter|. Instead, we have to output the +% |\if@undefined|-sequence to only do a |\newcounter| if necessary +% (i.e. during the first read on the |aux|-file). +% What I have not figured out yet is how to warn the user that the +% file needs to be processed twice. This could be done using a +% label, but that seems unelegant. So far, we'll just hope that +% everybody is \TeX{}ing the file at least twice\ldots +% \begin{macrocode} +\end{list} +\protected@write\@auxout{}{% + \string\expandafter% + \string\ifx\string\csname\space c@\the@revcnt\string\endcsname\relax% + \string\newcounter {\the@revcnt}\string\fi +} +\protected@write\@auxout{}{% + \string\setcounter {\the@revcnt}% + {\number\csname c@\the@revcnt\endcsname} + } +} +% \end{macrocode} +%% \end{environment} +% +% \Finale +\endinput diff --git a/macros/latex/contrib/revnum/revnum.pdf b/macros/latex/contrib/revnum/revnum.pdf Binary files differnew file mode 100644 index 0000000000..a719c815c1 --- /dev/null +++ b/macros/latex/contrib/revnum/revnum.pdf |