ltcounts.dtx

Johannes Braams  David Carlisle  Alan Jeffrey
Leslie Lamport  Frank Mittelbach  Chris Rowley

Rainer Schöpf

1995/05/20

1 Counters and Lengths

Commands for defining and using counters. This file defines:

\newcounter To define a new counter. \setcounter To set the value of counters.

\addtotcounter Increase the counter #1 by the number #2. \steptcounter Increase a counter by one.

\refsteptcounter Increase a counter by one, also setting the value used by \label.

\value For accessing the value of the counter as a TEX number (as opposed to

\the⟨counter⟩ which expands to the printed representation of ⟨counter⟩)

\arabic \arabic{⟨counter⟩}: 1, 2, 3, … \roman \roman{⟨counter⟩}: i, ii, ii, … \Roman \Roman{⟨counter⟩}: I, II, II, … \alph \alph{⟨counter⟩}: a, b, c, … \Alph \Alph{⟨counter⟩}: A, B, C, …

\fnsymbol      \fnsymbol{⟨counter⟩}: ∗, †, ‡, . . .

1 ⟨∗2ekernel⟩

         2 \message{env. counters,}

\subsection{Environment Counter Macros}

An environment foo has an associated counter defined by the following control sequences:

\c@foo : Contains the counter’s numerical value.

                       It is defined by \newcount\foocounter.

\thefoo : Macro that expands to the printed value of \foocounter. For example, if sections are numbered within chapters, and section headings look like

Section II-3. The Nature of Counters then \thesection might be defined by:

                        \def\thesection
                           {\@Roman{\c@chapter}-\@arabic{\c@section}}

\p@foo : Macro that expands to a printed ’reference prefix’ of counter foo. Any \ref to a value created by counter foo will produce the expansion of \p@foo\thefoo when the the \label command is executed.

NOTE: \thefoo and \p@foo MUST BE DEFINED IN SUCH A WAY THAT

\edef\bar{\thefoo} OR \edef\bar{\p@foo}

DEFINES \bar SO THAT IT WILL EVALUATE TO THE COUNTER VALUE AT THE TIME OF THE \edef, EVEN AFTER \foocounter AND ANY OTHER COUNTERS HAVE BEEN CHANGED. THIS WILL HAPPEN IF YOU USE THE STANDARD

COMMANDS \@arabic,
\@Roman, ETC.

\cl@foo : List of counters to be reset when foo stepped.

Has format \@elt{countera}\@elt{counterb}\@elt{counterc}.

The following commands are used to define and modify counters. \setcounter{FOO}{VAL} : Globally sets \foocounter equal to VAL.

\addtocounter{FOO}{VAL}: Globally increments \foocounter by

VAL.

\newcounter{NEWCTR}[OLDCTR] :

Defines NEWCTR to be a counter, which is reset when

counter OLDCTR is stepped. If NEWCTR already defined produces ’c@NEWCTR already defined’ error.

\value{CTR} :

produces the value of counter CTR, for use with

       a \setcounter or \addtocounter command.

\stepcounter{FOO} : Globally increments counter \c@FOO

and resets all subsidiary counters.

\refstepcounter{FOO} : Same a \stepcounter, but it also defines
                         \@currentreference so that a subsequent

\label{bar} command causes \ref{bar} to generate the current value of counter foo.

\@definecounter{FOO} :

Initializes counter FOO (with empty reset list), defines \p@FOO and \theFOO to be null. Also adds FOO to \cl@@ckpt

– the reset list of a dummy counter @ckpt used for taking checkpoints.

\@addtoreset{FOO}{BAR} :

Adds counter FOO to the list of counters \cl@BAR to be reset when counter bar is stepped.

NUMBERING MACROS:

\arabic{COUNTER} :

Representation of COUNTER as arabic numerals.

Changed 29 Apr 86 to make it print the obvious thing it COUNTER not positive.

\roman{COUNTER} : Representation of COUNTER as lower-case

Roman numerals.

\Roman{COUNTER} : Representation of COUNTER as upper-case

Roman numerals.

\alph{COUNTER} : Representation of COUNTER as a lower-case

letter: 1 = a, 2 = b, etc.

\Alph{COUNTER} : Representation of COUNTER as an upper-case

letter: 1 = A, 2 = B, etc.

\fnsymbol{COUNTER} : Representation of COUNTER as a footnote symbol: 1 = *, 2 = \dagger, etc.

THE ABOVE ARE IMPLEMENTED IN TERMS OF THE FOLLOWING:

\@arabic\FOOcounter :

Representation of \FOOcounter as arabic numerals.

\@roman\FOOcounter :

Representation of \FOOcounter as lower-case

Roman numerals.

\@Roman\FOOcounter :

Representation of \FOOcounter as upper-case Roman numerals.

\@alph\FOOcounter :

Representation of \FOOcounter as a lower-case letter: 1 = a, 2 = b, etc.

\@Alph\FOOcounter :

Representation of \FOOcounter as an upper-case letter: 1 = A, 2 = B, etc.

\@fnsymbol\FOOcounter :

Representation of \FOOcounter as a footnote symbol.

3 \def\setcounter#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}%
4 {\global\csname c@#1\endcsname#2\relax}}
5 \def\addtocounter#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}%
6 {\global\advance\csname c@#1\endcsname #2\relax}}

 7 \def\newcounter#1{\expandafter\@ifdefinable \csname c@#1\endcsname
 8  {\@definecounter{#1}}\@ifnextchar[{\@newctr{#1}}{}}
 9 \def\value#1{\csname c@#1\endcsname}
10 \def\@newctr#1[#2]{%
11 \@ifundefined{c@#2}{\@nocounterr{#2}}{\@addtoreset{#1}{#2}}}
12 \def\stepcounter#1{\addtocounter{#1}\@ne
13  \begingroup\let\@elt\@stpelt \csname cl@#1\endcsname\endgroup}
14 \def\@stpelt#1{\global\csname c@#1\endcsname \z@}
15 \def\cl@@ckpt{\@elt{page}}
\@definecounter
16 \def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname
17  \setcounter{#1}\z@
18  \global\expandafter\let\csname cl@#1\endcsname\@empty
19  \@addtoreset{#1}{@ckpt}%
20  \global\expandafter\let\csname p@#1\endcsname\@empty
21  \expandafter
22  \gdef\csname the#1\expandafter\endcsname\expandafter
23  {\expandafter\@arabic\csname c@#1\endcsname}}
24 \def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}}
\arabic \roman \Roman \alph \Alph \fnsymbol Numbering commands for definitions of \theCOUNTER and \list arguments.

\fnsymbol produces the standard footnoting symbols: asterisk, dagger, etc. All commands can now be used in text and math mode.

25 \def\arabic#1{\expandafter\@arabic\csname c@#1\endcsname}
26 \def\roman#1{\expandafter\@roman\csname c@#1\endcsname}
27 \def\Roman#1{\expandafter\@Roman\csname c@#1\endcsname}
28 \def\alph#1{\expandafter\@alph\csname c@#1\endcsname}
29 \def\Alph#1{\expandafter\@Alph\csname c@#1\endcsname}
30 \def\fnsymbol#1{\expandafter\@fnsymbol\csname c@#1\endcsname}

\@arabic \@roman \@Roman \@alph \@Alph Internal implementation of the above commands.

31 \def\@arabic#1{\number #1}  %% changed 29 Apr 86
32 \def\@roman#1{\romannumeral #1}
33 \def\@Roman#1{\expandafter\uppercase\expandafter{\romannumeral #1}}
34 \def\@alph#1{%
35 \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
36 k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or
37  y\or z\else\@ctrerr\fi}
38 \def\@Alph#1{%
39 \ifcase#1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
40 K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or
41  Y\or Z\else\@ctrerr\fi}

\@fnsymbol Typesetting old fashioned footnote symbols. This can be done both in text or math mode now.

42 \def\@fnsymbol#1{\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or
43 \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
44 \or \ddagger\ddagger \else\@ctrerr\fi}}

45 ⟨/2ekernel⟩