1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729
|
% \iffalse THIS IS A META-COMMENT
%<*dtx>
\ProvidesFile
%========================================================================
{SUBLABEL.DTX}
%========================================================================
%</dtx>
%% Copyright 1993-1999 Patrick W Daly
%% Max-Planck-Institut f\"ur Aeronomie
%% Max-Planck-Str. 2
%% D-37191 Katlenburg-Lindau
%% Germany
%% E-mail: daly@linmpi.mpg.de
%
% This program can be redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
% archives in directory macros/latex/base/lppl.txt; either
% version 1 of the License, or any later version.
%
% This is a contributed file to the LaTeX2e system.
% -------------------------------------------------
% This is a LaTeX package to permit figures, equations etc to be subnumbered
% as 4a, 4b, 4c etc.
% Installation:
% LaTeX this file: creates docstrip installation file sublabel.ins
% AND the (LaTeX2e) documentation
% (La)TeX sublabel.ins: creates package files sublabel.sty, and optionally
% documentation driver sublabel.drv
% (sublabel.ins may be edited as needed)
% Docstrip options available:
% package - to produce a (LaTeX2e) package .sty file
% driver - to produce a driver file to print the documentation
% 209 - (with package) for package that runs under LaTeX 2.09
% subpack - (with package) for coding included in other packages
% agu - (with package,subpack) for inclusion in aguplus package
%--------------------------------------------------------------------------
%<*!subpack>
%<package&209>\def\ProvidesPackage#1#2]
%<package&209> {\typeout{Style option `#1'#2]}}
%
% *** Identify the package file:-
%<package&!209>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
%<package>\ProvidesPackage{sublabel}
%</!subpack>
%
% *** Provide command to dislay module version
%<package&subpack>\def\ModuleVersion#1[#2]{}
%<package&subpack> \ModuleVersion{sublabel}
%
% *** Identify the driver file:-
%<driver>\NeedsTeXFormat{LaTeX2e}
%<driver>\ProvidesFile{sublabel.drv}
%
% *** The DATE, VERSION, and other INFO
%\fi
%\ProvidesFile{sublabel}
[1999/02/23 4.5 (PWD)]
% \changes{4.0}{1993 Jun 7}{Completely replacing the version based on
% art-jgr; made more general and flexible}
% \changes{4.1}{1993 July 20}{Initial release with {\tt docstrip}}
% \changes{4.1}{1993 Jul 20}{Discover bug; sub labels previously prefixed
% with `sub', but conflict with `subsection'}
% \changes{4.1}{1993 Jul 20}{\cs{stepcounter} tests if subfoo exists}
% \changes{4.2}{1993 Dec 17}{Adjust \cs{addtocounter} to step subcounter }
% \changes{4.2a}{1994 Feb 25}{Must use the old \cs{addtocounter} in
% \cs{endeqnarray}}
% \changes{4.3}{1994 May 16}{Convert to \LaTeXe}
% \changes{4.3a}{1994 Jun 22}{Update to first official release of \LaTeXe}
% \changes{4.3b}{1995 Jan 3}{Update documentation to PWD standard}
% \changes{4.3c}{1995 Sep 18}{Fix \cs{DeclareOption} for \LaTeX\ of June 1995}
% \changes{4.3d}{1997 Mar 16}{Fix copyright for subpackage and other minor
% things}
% \changes{4.4}{1997 Apr 28}{Fix so it works with other packages that change
% \texttt{eqnarray}, like \texttt{amsmath}}
% \changes{4.5}{1999 Feb 23}{Update copyright notice}
%
% \CheckSum{209}
% \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 \~}
%
% \iffalse
%<*install>
%^^A =============================================
%^^A Here is the docstrip installation file
%^^A It is written on first LaTeX run if it
%^^A does not already exist
%^^A =============================================
\begin{filecontents*}{sublabel.ins}
% File: sublabel.ins
% Copyright 1999 Patrick W. Daly
%
% This file can be redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
% archives in directory macros/latex/base/lppl.txt; either
% version 1 of the License, or any later version.
%
% It is an installation file for extracting package and driver
% files from the original source file. Simply process it under
% TeX or LaTeX.
\input docstrip
\preamble
=============================================
IMPORTANT NOTICE:
This program can be redistributed and/or modified under the terms
of the LaTeX Project Public License Distributed from CTAN
archives in directory macros/latex/base/lppl.txt; either
version 1 of the License, or any later version.
This is a generated file.
It may not be distributed without the original source file \inFileName.
Full documentation can be obtained by LaTeXing that original file.
Only a few abbreviated comments remain here to describe the usage.
=============================================
\endpreamble
\postamble
<<<<< End of generated file <<<<<<
\endpostamble
\declarepreamble\driver
============================================
This is the driver file to produce the LaTeX documentation
from the original source file \inFileName.
Make changes to it as needed. (Never change the file \inFileName!)
============================================
\endpreamble
\declarepostamble\driverq
End of documentation driver file.
\endpostamble
\keepsilent
\askforoverwritefalse
\generate{\file{sublabel.sty}{\from{sublabel.dtx}{package}}
\file{sublabel.drv}{\usepreamble\driver\usepostamble\driverq
\from{sublabel.dtx}{driver}}
}
\obeyspaces
\Msg{*******************************************}%
\Msg{* For documentation, process sublabel.dtx *}%
\Msg{* or the driver file sublabel.drv *}%
\Msg{*******************************************}
\endbatchfile
\end{filecontents*}
%</install>
%<*driver>
\documentclass{ltxdoc}
%<driver>%\documentclass[twoside]{ltxdoc}
%<driver>%\documentclass[a4paper]{ltxdoc}
%<driver>%\documentclass[twoside,a4paper]{ltxdoc}
\raggedbottom
%** To include the detailed explanation of the coding, comment out
%** the next line
\OnlyDescription
%** To produce a command index: add the following line for one run,
%** then run makeindex -s gind.ist natbib
%** and reprocess, with or without this line (much faster without)
%<driver>% \EnableCrossrefs\CodelineIndex
%** To produce a change history: add the following line for one run,
%** then run makeindex -s gglo.ist -o natbib.gls natbib.glo
%** and reprocess, with or without this line (faster without)
%<driver>% \RecordChanges
\DisableCrossrefs %May stay; zapped by \EnableCrossrefs
\CodelineNumbered %May stay
\begin{document}
\DocInput{sublabel.dtx}
\end{document}
%</driver>
%\fi
%
% \DoNotIndex{\begin,\CodelineIndex,\CodelineNumbered,\def,\DisableCrossrefs}
% \DoNotIndex{\DocInput,\documentclass,\EnableCrossrefs,\end,\GetFileInfo}
% \DoNotIndex{\NeedsTeXFormat,\OnlyDescription,\RecordChanges,\usepackage}
% \DoNotIndex{\ProvidesClass,\ProvidesPackage,\ProvidesFile,\RequirePackage}
% \DoNotIndex{\LoadClass,\PassOptionsToClass,\PassOptionsToPackage}
% \DoNotIndex{\DeclareOption,\CurrentOption,\ProcessOptions,\ExecuteOptions}
% \DoNotIndex{\AtEndOfClass,\AtEndOfPackage,\AtBeginDocument,\AtEndDocument}
% \DoNotIndex{\InputIfFileExists,\IfFileExists,\ClassError,\PackageError}
% \DoNotIndex{\ClassWarning,\PackageWarning,\ClassWarningNoLine}
% \DoNotIndex{\PackageWarningNoLine,\ClassInfo,\PackageInfo,\MessageBreak}
% \DoNotIndex{\space,\protect,\DeclareRobustCommand,\CheckCommand}
% \DoNotIndex{\newcommand,\renewcommand,\providecommand\newenvironment}
% \DoNotIndex{\renewenvironment,\newif,\newlength,\newcounter,\setlength}
% \DoNotIndex{\setcounter,\if,\ifx,\ifcase,\ifnum,\ifdim,\else,\fi}
% \DoNotIndex{\texttt,\textbf,\textrm,\textsl,\textsc}
% \DoNotIndex{\textup,\textit,\textmd,\textsf,\emph}
% \DoNotIndex{\ttfamily,\rmfamily,\sffamily,\mdseries,\bfseries,\upshape}
% \DoNotIndex{\slshape,\scshape,\itshape,\em,\LaTeX,\LaTeXe}
% \DoNotIndex{\filename,\fileversion,\filedate,\let}
% \DoNotIndex{\@@warning,\@bsphack,\@currenvir,\@eha,\@esphack,\@ifundefined}
% \DoNotIndex{\@latexerr,\@nameuse,\@tempa,\@warning,\alph,\bf,\endcsname}
% \DoNotIndex{\expandafter,\gdef,\global,\it,\newcount,\null,\relax,\thepage}
%
% \setcounter{IndexColumns}{2}
% \setlength{\IndexMin}{10cm}
% \setcounter{StandardModuleDepth}{1}
%
% \GetFileInfo{sublabel}
%
% \title{\bfseries A Package to Subnumber \LaTeX{} Counters}
%
% \author{Patrick W. Daly}
%
% \date{This paper describes package \texttt{\filename}\\
% version \fileversion{} from \filedate\\[1ex]
% \textsl{It is part of the \texttt{preprint} collection of packages}
% }
%
% \maketitle
%
% \pagestyle{myheadings}
% \markboth{P. W. Daly}{SUBNUMBERING FIGURES, TABLES, EQUATIONS}
%
%^^A In order to keep all marginal notes on the one (left) side:
%^^A (otherwise they switch sides disasterously with twoside option)
% \makeatletter \@mparswitchfalse \makeatother
%
%\begin{small}\begin{center}\textbf{Summary}\end{center}
% The stripped version of this file contains the following brief description:
%\iffalse
%<*package&!subpack>
%\fi
% \begin{verbatim}
% To change a counter foo so that it has sublabels (4a 4b 4c ...)
% give the command \sublabon{foo}... \sublaboff{foo}
%
% The style of the sublabel is given by command \substyle, which takes one
% argument, a counter. It may be redefined in the document to be whatever
% style is wanted.
%<209> % Default is {\it\alph{#1}}, ie italic lowercase numbers.
%<*!209>
% Default is {\itshape\alph{#1}}, ie italic lowercase numbers.
%
% Options for LaTeX2e:
% roman the style of sublabels is small roman letter
% italic the style is small italic letter (default)
%</!209>
% \end{verbatim}
%\iffalse
%-----------------------------------------------------------
%</package&!subpack>
%\fi
%\end{small}
%
% \section{Introduction}
% The macros in this package allow all counters to be subnumbered, as for
% example 4{\itshape a}, 4{\itshape b}, 4{\itshape c}, simply by
% bracketting the objects to be so numbered with appropriate on/off
% commands. These commands specify which counters are to be subnumbered,
% and they are of global effect. This means that they will work with any
% user-defined counters too, and that their effect goes beyond any current
% environment.
%
% \section{Invoking the Package}
% The macros in this package are included in the main document
% with the |\usepackage| command of \LaTeXe,
% \begin{quote}
% |\documentclass[..]{...}|\\
% |\usepackage[|\emph{options}|]{|\texttt{\filename}|}|
% \end{quote}
% where the possible \emph{options} are:
% \begin{description}
% \item[\tt italic] to have subnumbers as italic lowercase letters
% (default);
% \item[\tt roman] to have the subnumbers as Roman lowercase letters, as
% 4{\rmfamily a}.
% \end{description}
%
% Alternatively, the name of the package is added as an option to the
% |\documentstyle| command in \LaTeX~2.09 compatibility mode, as
% \begin{quote}
% |\documentstyle[..|\texttt{\filename}|..]{...}|
% \end{quote}
% In this case, no options are possible.
%
% \section{Usage}
% \DescribeMacro{\sublabon}
% \DescribeMacro{\sublaboff}
% In order to number equations, figures, plates, and tables automatically
% with subnumbers (e.g.\ 4{\itshape a}, 4{\itshape b}, 4{\itshape c}) use
% the commands |\sublabon| and |\sublaboff|. These commands take as
% argument the name of the counter that is to be subnumbered, i.e.
% \texttt{equation}, \texttt{figure}, or \texttt{table}. The on and off
% versions bracket the objects that are to be labelled with the same number
% but different letters. For example,
%
% \begin{quote}
% \begin{verbatim}
% \sublabon{figure}
% \begin{figure}
% \caption{Text of Fig. 4a}
% \end{figure}
% \begin{figure}
% \caption{Text of Fig. 4b}
% \end{figure}
% \sublaboff{figure}
% \end{verbatim}
% \end{quote}
%
% These commands also work for the |equation| environment in the same way.
% For the |eqnarray| environment, some care must be taken. The
% |\sublabon| command is to be given {\em in} the first equation to be
% bracketted, before the |\label| and |\\| commands, while the
% |\sublaboff| command is given after the |\\| of the last equation
% in the group. If necessary, it must come after |\end{eqnarray}|.
% \begin{quote}
% \begin{verbatim}
% \begin{eqnarray}
% x & = & a \label{eq:x}\\%--> 1
% \sublabon{equation}
% y & = & b \label{eq:y}\\%--> 2a
% z & = & c \label{eq:z}\\%--> 2b
% \sublaboff{equation}
% w & = & d \label{eq:w} %--> 3
% \end{eqnarray}
% \end{verbatim}
% \end{quote}
%
% If two groups appear adjacently, it is only necessary to give
% |\sublabon| between them.
%
% \DescribeMacro{\substyle}
% The style in which the sublabels are written is determined by a command
% |\substyle|. Its default definition is as italic lowercase
% letters.\footnote{In \LaTeXe, if the option \texttt{roman} is added to
% the \texttt{\bslash usepackage} command, then the default is upright
% lowercase letters.} If
% one wishes, this may be changed in the document itself. It must take an
% argument that is a counter. For example, to change the style of sublabels
% to be as 5--A, 5--B, 5--C, give
% \begin{quote}
% |\renewcommand{\substyle}[1]{--\Alph{#1}}|
% \end{quote}
% \section{Interference with Other Options}
% If both |sublabel| and |figcaps| packages are to be used together, then
% |sublabel| must be input first. This is because
% |figcaps| makes modifications so that the sublabelling also works on the page
% of figure captions.
%
% Other packages (like \texttt{amsmath}) also modify some of the commands
% redefined here. As of version~4.4, the redefinitions are delayed until
% after all packages are loaded, so that this conflict is avoided. For
% earlier versions, things went wrong if \texttt{amsmath} were loaded after
% \texttt{filename}.
%
% \StopEventually{\PrintIndex\PrintChanges}
%
% \section{Options with \texttt{docstrip}}
% The source \texttt{.dtx} file is meant to be processed with
% \texttt{docstrip}, for which a number of options are available:
% \begin{description}
% \item[\tt package] to produce a \texttt{.sty} package file with most
% comments removed;
% \item[\tt 209] for a package file that will also run under the older
% \LaTeX~2.09 and not just under the newer (mid-1994) \LaTeXe;
% \item[\tt subpack] (together with \texttt{package}) for coding that is to
% be included inside a larger package; even more comments are removed,
% as well as \LaTeXe{} option handling and identification;
% \item[\tt agu] (with \texttt{package,subpack}) for special coding for
% the \textsl{AGU$^{++}$} package;
% \item[\tt driver] to produce a driver \texttt{.drv} file that will print
% out the documentation under \LaTeXe. The documentation cannot be
% printed under \LaTeX~2.09.
% \end{description}
% The source file \texttt{\filename.dtx} is itself a driver file and can
% be processed directly by \LaTeXe.
%
% \section{The Coding}
% This section presents and explains the actual coding of the macros.
% It is nested between |%<*package>| and |%</package>|, which
% are indicators to \texttt{docstrip} that this coding belongs to the package
% file.
%
% The \texttt{docstrip} option |<subpack>| should only be called if the
% coding is to be included as part of another package, in which case the
% announcement text and \LaTeXe{} options are suppressed.
%
% An inferior version of this coding is provided for running as a
% style file under \LaTeX~2.09. Code lines belonging to this are
% indicated with guard |<209>|; those for LaTeXe{} only with |<!209>|.
%
% There is a problem if \texttt{\filename} is used with the package
% \texttt{figcaps}, which makes modifications to the sublabelling
% commands. Thus \texttt{\filename} must be read in \emph{before}
% \texttt{figcaps}. This is tested with the existence of the command
% |\iffigcaps|, which should not be defined at this point.
% \begin{macrocode}
%<*package>
\@ifundefined{iffigcaps}{}
%<*!209>
{\PackageWarningNoLine{sublabel}
{***********************************\MessageBreak
This package read in after `figcaps'\MessageBreak
There could be problems with sublabelled\MessageBreak
figure and table numbers.\MessageBreak
***********************************}}
%</!209>
%<*209>
{\@@warning
{^^J ********************************^^J
`sublabel' read in after `figcaps'^^J
There could be problems with sublabelled^^J
figure and table numbers.^^J
********************************}}
%</209>
% \end{macrocode}
%
% \begin{macro}{\substyle}
% \changes{4.3d}{1997 Mar 16}{Remove some superfluous lines}
% The style of the sublabel, or subnumbering, is defined by |\substyle|. A
% default definition is provided as italic lowercase letters: 4{\itshape
% a}, 4{\itshape b}, 4{\itshape b}, etc. This command may be redefined by
% the user in the document or in a calling style.
%
% For the \textsl{AGU$^{++}$} package, the default is upright letters.
%
% \begin{macrocode}
\newcommand{\substyle}{}
%<*!subpack>
%<209>\def\substyle#1{\it\alph{#1}}
% \end{macrocode}
%
% \begin{macro}{\DeclareOption}
% \changes{4.3}{1994 May 16}{Add options \texttt{roman} and \texttt{italic}.}
% \changes{4.3c}{1995 Sep 18}{Fix options \texttt{roman} and \texttt{italic}
% for kernel changes of 1995/06/01}
% In \LaTeXe, the default depends on the option in the |\usepackage| command.
%
% Prior to \LaTeX\ of 1995/06/01, one needed |##| to specify arguments in the
% |\DeclareOption| statement, but now only a single |#| is needed.
% \begin{macrocode}
%<*!209>
\DeclareOption{italic}{\def\substyle#1{\itshape\alph{#1}}}
\DeclareOption{roman}{\def\substyle#1{\alph{#1}}}
\ExecuteOptions{italic}
\ProcessOptions
%</!209>
%</!subpack>
%<subpack&!agu&209>\def\substyle#1{\it\alph{#1}}
%<subpack&!agu&!209>\def\substyle#1{\itshape\alph{#1}}
%<subpack&agu>\def\substyle#1{\alph{#1}}
% \end{macrocode}
% \end{macro}\end{macro}
%
% \begin{macro}{\sublabon}
% \changes{4.3a}{1994 Jun 22}{Use \cs{newcommand}}
% The basic principle of this macro is that when |\sublabon{|\emph{ctr}|}|
% is called, then a new counter called |sb@|\emph{ctr} is created, if it
% does not already exist. That is, its internal name is |\c@sb@|\emph{ctr},
% as is standard for \LaTeX{} counters. Its value is set to $0$ and the main
% counter \emph{ctr} is incremented. The command that formats and prints
% out the value of the main counter, |\the|\emph{ctr} is redefined to be
% \begin{quote}
% |\@ldthe|\emph{ctr}|{\substyle{sb@|\emph{ctr}|}}|
% \end{quote}
% where |\@ldthe|\emph{ctr} is the stored definition |\the|\emph{ctr} and
% |\substyle| is a command that operates on a counter to format it.
%
% First |\sublabon| tests if there really is a counter with the given
% name.
% \begin{macrocode}
\newcommand{\sublabon}[1]{\@bsphack
\@ifundefined{c@#1}{%
%<209> \@latexerr
%<!209> \PackageError{sublabel}
{\protect\sublabon\space called for a non-existent counter}{\@eha}}
% \end{macrocode}
% Now test for the subcounter |sb@|\emph{ctr} and if it does not exist,
% create it and set its value to $-1$.
% \begin{macrocode}
{\@ifundefined{c@sb@#1}{\expandafter\newcount\csname c@sb@#1\endcsname
\setcounter{sb@#1}{-1}}{}%
% \end{macrocode}
% The value $-1$ means that the subcounter has not yet been used. This
% value is set on creation, or by |\sublaboff| if the subcounter was never
% stepped. This is the trick that allows multiple calls to |\sublabon|
% without intervening |\sublaboff| calls. We have to avoid calling
% |\sublaboff| when there was no stepping. Call it only if the current
% value of the subcounter is 0 or more.
% \begin{macrocode}
\ifnum\@nameuse{c@sb@#1}<0\else\sublaboff{#1}\fi
% \end{macrocode}
% Set the counters \emph{ctr} and |sb@|\emph{ctr}.
% \begin{macrocode}
\stepcounter{#1}%
\setcounter{sb@#1}{0}%
% \end{macrocode}
% A correction must be made for the |eqnarray| environment which
% increments the |equation| counter immediately on entry and then after
% each equation. That is, the |equation| counter already holds the value of
% the \emph{next} equation. Thus we must set the two counters to the
% values that they should have for the next equation. For example, let us
% suppose the following:
% \begin{quote}
% We are outside the |eqnarray| environment, the last equation was
% number~3, so the |equation| counter has the value |3|.
%
% We enter |eqnarray|; the |equation| counter is incremented immediately to
% |4|.
%
% We write an equation; it obtains the number~4, and |equation| goes to
% |5|.
%
% We call |\sublabon{equation}|, and |equation| is set to |6| and
% |sb@equation| to |0| (so far). Since the counter is stepped only
% \emph{after} the equation in this environment, this would mean that the next
% equation would be numbered 6-0 instead of the desired 5-1.
%
% Hence the correction: decrement |equation| and set |sb@equation| to 1.
% \end{quote}
% \begin{macrocode}
\def\@tempa{eqnarray}\ifx \@tempa\@currenvir
\addtocounter{equation}{-1}\setcounter{sb@equation}{1}\fi
% \end{macrocode}
% Note that the above does not test if |#1| really is |equation|. However,
% if |\sublabon| is used within |eqnarray|, then it only makes sense to
% subnumber equations.
%
% Now save the definition of |\the|\emph{ctr} as |\@ldthe|\emph{ctr}.
% (This combination of |\expandafter| is necessary. I have experimented
% with many other variations.)
% \begin{macrocode}
\global\expandafter\let\csname @ldthe#1\expandafter\endcsname
\csname the#1\endcsname
% \end{macrocode}
% and redefine |\the|\emph{ctr} to add |\substyle| with the subcounter.
% \begin{macrocode}
\expandafter\gdef\csname the#1\endcsname{%
\@nameuse{@ldthe#1}{\substyle{sb@#1}}}
}\@esphack}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\sublaboff}
% \changes{4.3a}{1994 Jun 22}{Use \cs{newcommand}}
% The command that turns off the sublabelling tests if there is such a
% counter, and if there exists a subcounter for it. If both tests pass,
% then it checks that the subcounter has a non-negative value, for if it
% does not, then there was no corresponding |\sublabon| command. That is,
% the on/off commands are not nested properly. These tests are necessary to
% check for typing errors.
% \begin{macrocode}
\newcommand{\sublaboff}[1]{\@bsphack
\@ifundefined{c@#1}{%
%<209> \@latexerr
%<!209> \PackageError{sublabel}
{\protect\sublaboff\space called for a non-existent counter}{\@eha}}
{\@ifundefined{c@sb@#1}{%
%<209> \@warning
%<!209> \PackageWarning{sublabel}
{\protect\sublaboff{#1} called without any previous
%<209> ^^J
%<!209> \MessageBreak
\protect\sublabon{#1} command}}
{\ifnum\@nameuse{c@sb@#1}<0
%<209> \@warning
%<!209> \PackageWarning{sublabel}
{\protect\sublaboff{#1} called without a previous
%<209> ^^J
%<!209> \MessageBreak
\protect\sublabon{#1} command being active}\else
% \end{macrocode}
% However, if the subcounter has a 0 value, then |\sublabon| was indeed
% called, but the counter was never stepped with |\stepcounter|. This is
% not an error, but it means that the old value of \emph{ctr} should be
% restored. The subcounter is set to $-1$ to indicate this to the next
% call to |\sublabon|. The numbering goes on as if |\sublabon| and
% |\sublaboff| had never been given.
% \begin{macrocode}
\ifnum\@nameuse{c@sb@#1}=0\addtocounter{#1}{-1}\fi
\setcounter{sb@#1}{-1}%
% \end{macrocode}
% Re-establish the definition of |\the|\emph{ctr} stored in
% |\@ldthe|\emph{ctr}.
% \begin{macrocode}
\global\expandafter\let\csname the#1\expandafter\endcsname
\csname @ldthe#1\endcsname
% \end{macrocode}
% Finally, if |\sublaboff| is called within the |eqnarray| environment,
% then the |equation| counter must be corrected again, to hold the number
% for the next equation.
% \begin{macrocode}
\def\@tempa{eqnarray}\ifx \@tempa\@currenvir
\stepcounter{equation}\fi
\fi}}\@esphack}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ref}
% \changes{4.3}{1994 May 16}{Use definition from \LaTeXe{} for NFSS with 2.09}
% \begin{macro}{\pageref}
% \changes{4.3}{1994 May 16}{Use definition from \LaTeXe{} for NFSS with 2.09}
%
% The font command within |\substyle| means that it is transferred to the
% auxiliary file in a |\newlabel| command. This causes problems under the
% New Font Selection Scheme (NFSS) when all the tokens are expanded too
% early. This problem does not exist with \LaTeX~2.09 without NFSS, nor
% with the NFSS in \LaTeXe. To get around this, I add the revised
% definitions of |\ref| and |\pageref| from \LaTeXe, but implement them
% only for NFSS under 2.09.
% \begin{macrocode}
%<*209>
\@ifundefined{selectfont}{}{%
\def\@setref#1#2#3{%
\ifx#1\relax {\reset@font\bf ??}%
\@warning{Reference `#3' on page \thepage \space undefined}%
\else
\expandafter#2#1\null
\fi}
\def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
\def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
\@secondoftwo{#1}}
\def\@firstoftwo#1#2{#1}
\def\@secondoftwo#1#2{#2}
}
% \end{macrocode}
% \end{macro}\end{macro}
%
% \begin{macro}{\reset@font}
% For older implementations of \LaTeX~2.09 (before December, 1991) the
% |\reset@font| command does not exist. It is defined to be |\relax| under
% normal \LaTeX{}, but does more under NFSS. In case it is not defined, add
% it here.
% \begin{macrocode}
\@ifundefined{reset@font}{\def\reset@font{\relax}}{}
%</209>
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\stepcounter}
% \changes{4.3a}{1994 Jun 22}{Use \cs{renewcommand}}
% \changes{4.4}{1997 Apr 28}{Put into \cs{AtBeginDocument}}
% A very important matter has still to be done: redefine |\stepcounter| so
% that it increments the subcounter and not the main one. It is not
% necessary to redefine |\refstepcounter| since it calls |\stepcounter|
% itself. The existing definition of |\stepcounter| is saved and used in
% the new definition.
%
% This is done at the start of the document, not immediately, in case some
% other package is loaded that alters |\setcounter|. This also applies to
% |\addtocounter| and |\endeqnarray|. For example, the \texttt{amsmath}
% package makes such changes, so if it is loaded after \texttt{\filename}
% it clobbers these new definitions if they are not delayed. (This used to
% happen when \textsl{AGU$^{++}$} is used with \texttt{amsmath}.)
% Do this only for \LaTeXe.
%
% \begin{macrocode}
%<!209>\AtBeginDocument{%
\let\@ldstepcounter=\stepcounter
\renewcommand{\stepcounter}[1]
{\@ifundefined{c@sb@#1}{\@ldstepcounter{#1}}{\ifnum
\@nameuse{c@sb@#1}<0\relax
\@ldstepcounter{#1}\else \@ldstepcounter{sb@#1}\fi}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\addtocounter}
% \changes{4.2}{1993 Dec 17}{Add to allow for macros that might fiddle with
% counters}
% \changes{4.3a}{1994 Jun 22}{Use \cs{renewcommand}}
% \changes{4.4}{1997 Apr 28}{Put into \cs{AtBeginDocument}}
% A similar refinement must be done to |\addtocounter| to allow for any
% macros that fiddle with counters. (The \texttt{planotable} environment of
% the AGU styles does this, for example.) If the fiddling is done
% explicitly (by giving |\c@|\emph{ctr} a new value) then we are lost.
% It might also be necessary to refine |\setcounter|, but at the moment I
% cannot foresee any reason for using that command where sublabels might be
% used.
% \begin{macrocode}
\let\@ldaddtoctr=\addtocounter
\renewcommand{\addtocounter}[2]
{\@ifundefined{c@sb@#1}{\@ldaddtoctr{#1}{#2}}{\ifnum
\@nameuse{c@sb@#1}<0\relax
\@ldaddtoctr{#1}{#2}\else \@ldaddtoctr{sb@#1}{#2}\fi}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endeqnarray}
% Lastly, the |eqnarray| environment itself must be altered to allow for
% the case where it is ended while |\sublabon{equation}| is
% active. (The example above was for when |\sublabon| is given within the
% environment.) The normal |\endeqnarray| command explicitly decrements the
% |equation| counter (not with |\stepcounter|) so that it now points to the
% last equation, as usual. However if the subnumbering is on at this point,
% the |equation| must be re-incremented and |sb@equation| decremented
% instead.
% \changes{4.2a}{1994 Feb 25}{Use original \cs{addtocounter}}
% \changes{4.3a}{1994 Jun 22}{Use \cs{renewcommand}}
% \changes{4.4}{1997 Apr 28}{Put into \cs{AtBeginDocument}}
% \begin{macrocode}
\let\@ldendeqnarray=\endeqnarray
\renewcommand{\endeqnarray}{\@ldendeqnarray
\@ifundefined{c@sb@equation}{}{\ifnum\c@sb@equation<0\else
\@ldaddtoctr{equation}{1}\@ldaddtoctr{sb@equation}{-1}\fi}}
%<!209>}
%</package>
% \end{macrocode}
% \end{macro}
%
% \Finale
|