157 lines
5.7 KiB
TeX
157 lines
5.7 KiB
TeX
%%
|
|
%% This is file `totcount.sty',
|
|
%% generated with the docstrip utility.
|
|
%%
|
|
%% The original source files were:
|
|
%%
|
|
%% totcount.dtx (with options: `sty')
|
|
%%
|
|
%% The TotCount package, version 1.0, 2009/04/14
|
|
%%
|
|
%% Copyright (c) [2009] Vasileios Koutavas (Vasileios.Koutavas@cs.tcd.ie)
|
|
%%
|
|
%% This program may be re-distributed and/or modified under the terms of the
|
|
%% LaTeX Project Public License version 1.3c, or any later version.
|
|
%% The latest version of this license is in
|
|
%% CTAN:macros/latex/base/lppl.txt
|
|
%%
|
|
\def\totcfileversion{1.1}
|
|
\def\totcfiledate{2009/07/09}
|
|
\def\totcdocdate{9 Jul 2009}
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{totcount}
|
|
[\totcfiledate \space v\totcfileversion \space package for getting%
|
|
the total value of LaTeX counters]
|
|
%%
|
|
%% Import of the \xpackage{keyval} package \cite{keyval}:
|
|
\RequirePackage{keyval}
|
|
%%
|
|
%% Creates a new counter and registers it as a total counter. This is the
|
|
%% top-level dispatch of the macro, depending on whether there is an optional
|
|
%% argument or not.
|
|
\def\newtotcounter{%
|
|
\@ifnextchar[\newtotcounter@newaux\newtotcounter@mainaux}
|
|
%%
|
|
%% This is the version of the |\newtotcounter| macro that uses a separate
|
|
%% auxiliary file. It first creates the counter (second argument) and then
|
|
%% calls the macro |\regtotcounter|.
|
|
\def\newtotcounter@newaux[#1]#2{%
|
|
\newcounter{#2}%
|
|
\regtotcounter[#1]{#2}%
|
|
}
|
|
%%
|
|
%% This is the version of the |\newtotcounter| macro that uses the main
|
|
%% auxiliary file. It first creates the counter (argument) and then calls
|
|
%% the macro |\regtotcounter|.
|
|
\def\newtotcounter@mainaux#1{%
|
|
\newcounter{#1}%
|
|
%% Register the counter:
|
|
\regtotcounter{#1}%
|
|
}
|
|
%%
|
|
%% Registers a counter as a total counter. This is the top-level dispatch of
|
|
%% the macro, depending on whether there is an optional argument or not.
|
|
\def\regtotcounter{%
|
|
\@ifnextchar[\regtotcounter@newaux\regtotcounter@mainaux}
|
|
%%
|
|
%% The following is the definition of the |auxfile| key for specifying an
|
|
%% alternative auxiliary file when calling the macro |\regtotcounter| (see
|
|
%% \cite{keyval}).
|
|
\define@key{totcounter}{auxfile}{\def\this@auxfile{#1}}
|
|
%%
|
|
%% This is the version of the |\regtotcounter| macro that uses a separate
|
|
%% auxiliary file. The auxiliary file is passed as a first argument in the
|
|
%% form of a key--value pair |[auxfile=|\meta{file}|]|, and the counter to be
|
|
%% registered is passed as the second argument.
|
|
%% \begin{macrocode}
|
|
\def\regtotcounter@newaux[#1]#2{%
|
|
\setkeys{totcounter}{#1}%
|
|
%% Try to load the contents of the file:
|
|
\InputIfFileExists{\this@auxfile}{}{}%
|
|
%% Make sure that the auxiliary file is open; \LaTeX\ will close it at the end:
|
|
\expandafter\ifx\csname \this@auxfile @open\endcsname\relax%
|
|
\expandafter\gdef\csname \this@auxfile @open\endcsname{}%
|
|
\expandafter\newwrite\csname \this@auxfile @stream\endcsname%
|
|
\immediate\expandafter\openout%
|
|
\csname \this@auxfile @stream\endcsname=\this@auxfile%
|
|
\fi%
|
|
%% Create a new counter holding the total number of the actual counter:
|
|
\expandafter\ifx\csname c@#2@totc\endcsname\relax%
|
|
\newcounter{#2@totc}%
|
|
\setcounter{#2@totc}{-1}%
|
|
\fi%
|
|
%% At the end of the document write code in the auxiliary file to update the
|
|
%% total counter with the value of the actual counter:
|
|
\AtEndDocument{%
|
|
\def\sp{ }%
|
|
\immediate\expandafter\write%
|
|
\csname \this@auxfile @stream\endcsname{%
|
|
\string\expandafter\string\ifx%
|
|
\string\csname\sp c@#2@totc\string\endcsname\string\relax%
|
|
\string\newcounter{#2@totc}%
|
|
\string\fi%
|
|
\string\setcounter{#2@totc}{\number\value{#2}}%
|
|
}%
|
|
}%
|
|
}
|
|
%%
|
|
%% This is the version of the |\regtotcounter| macro that uses the main
|
|
%% auxiliary file. The counter to be registered is passed as the second
|
|
%% argument.
|
|
\def\regtotcounter@mainaux#1{%
|
|
%% Create a new counter holding the total number of the actual counter:
|
|
\expandafter\ifx\csname c@#1@totc\endcsname\relax%
|
|
\newcounter{#1@totc}%
|
|
\setcounter{#1@totc}{-1}%
|
|
\fi%
|
|
%% At the end of the document write code in the auxiliary file to update the
|
|
%% total counter with the value of the actual counter:
|
|
\AtEndDocument{%
|
|
\def\sp{ }%
|
|
\immediate\write\@mainaux{%
|
|
\string\expandafter\string\ifx%
|
|
\string\csname\sp c@#1@totc\string\endcsname\string\relax%
|
|
\string\newcounter{\string #1@totc}%
|
|
\string\fi%
|
|
\string\setcounter{\string #1@totc}{\number\value{#1}}%
|
|
}%
|
|
}%
|
|
}
|
|
%%
|
|
%% Prints the total value of a registered total counter that is passed as
|
|
%% argument. If the total value is yet to be computed (at the first time
|
|
%% \LaTeX\ runs on the document) then its value is |-1| and the output of the
|
|
%% command is $??$.
|
|
\newcommand\total[1]{%
|
|
\def\tmp@val{\value{#1@totc}}%
|
|
\ifnum\tmp@val=-1%
|
|
\message{Rerun to get correct total counts}%
|
|
$??$%
|
|
\else%
|
|
\number\value{#1@totc}%
|
|
\fi%
|
|
}
|
|
%%
|
|
%% Returns the numeric total value of a registered total counter that is
|
|
%% passed as argument. Note that if the counter's value is not yet computed
|
|
%% (at the first time \LaTeX\ runs on the document) this macro returns |-1|.
|
|
\newcommand\totvalue[1]{\value{#1@totc}}
|
|
%%
|
|
%% Inputs an auxiliary file that should contain total-counter
|
|
%% definitions. It outputs a warning message in the terminal if the file
|
|
%% doesn't exist. This command should be used \emph{instead} of registering a
|
|
%% counter.
|
|
\newcommand\usetotcountfile[1]{%
|
|
\InputIfFileExists{#1}{%
|
|
\message{TotCount inputs file '#1'}%
|
|
}{%
|
|
\message{TotCount Warning: File '#1' does not exist!}%
|
|
\message{\space\space\space\space\space\space\space\space\space%
|
|
\space\space\space\space\space\space\space\space\space%
|
|
Ignoring \string\usetotcountfile{#1}.}%
|
|
}%
|
|
}
|
|
\endinput
|
|
%%
|
|
%% End of file `totcount.sty'.
|