%%
%% This is file `constants.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% constants.dtx  (with options: `package')
%%  ----------------------------------------------------------------
%%  The constants package --- Automatic labelling of constants
%%  Maintained by Antoine Lejay
%%  Based on ltxref.dtx of the Latex Kernel (Copyright the LaTeX 3 project).
%%  Released under the LaTeX Project Public License v1.3c or later
%%  See http://www.latex-project.org/lppl.txt
%%  ----------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{constants}%
  [2008/03/25 v.1 Labeling and numbering constants]
\PackageInfo{constants}
  {This package aims to label et number constants in a mathematical proof.}
\RequirePackage{keyval}
\def\@if@constant@exists#1#2#3{\@ifundefined{cst@family@#1}{#3}{#2}}
\global\@namedef{cst@family@normal}{}
\newcounter{cst@counter@normal}
\def\cst@format@normal#1{\arabic{#1}}
\def\cst@symbol@normal{C}
\newcommand{\newconstantfamily}[2]{
\@if@constant@exists{#1}{%
\PackageError{constants}{The family of constants '#1' already exists}{%
Use \protect\renewconstantfamily\space to override}}%
{%
\expandafter\def\csname cst@family@#1\endcsname{}
\expandafter\def\csname cst@format@#1\endcsname{\cst@format@normal}
\expandafter\def\csname cst@symbol@#1\endcsname{\cst@symbol@normal}
\expandafter\newcounter{cst@counter@#1}
\define@key{constants}{format}%
{\expandafter\def\csname cst@format@#1\endcsname{##1}}
\define@key{constants}{symbol}%
{\expandafter\def\csname cst@symbol@#1\endcsname{##1}}
\define@key{constants}{reset}{\@addtoreset{cst@counter@#1}{##1}}
\setkeys{constants}{#2}
}}
\newcommand{\renewconstantfamily}[2]{
\@if@constant@exists{#1}{
\define@key{constants}{format}{%
\expandafter\def\csname cst@format@#1\endcsname{##1}}
\define@key{constants}{symbol}{%
\expandafter\def\csname cst@symbol@#1\endcsname{##1}}
\define@key{constants}{reset}{\@addtoreset{cst@counter@#1}{##1}}
\setkeys{constants}{#2}
}{%
\PackageError{constants}{The family of constants '#1' already exists}{%
Use \protect\renewconstantfamily\space to override}}%
}
\@onlypreamble\newconstantfamily
\@onlypreamble\renewconstantfamily
\def\G@refundefinedconstanttrue{%
  \gdef\@refundefinedconstant{%
    \@latex@warning@no@line{%
There were undefined references to constants}}}
\let\@refundefinedconstant\relax
\def\cst@tmp@format{cst@undefined@format}
\def\cst@tmp@symbol{cst@undefined@symbol}
\long\def\@firstofthree#1#2#3{#1}
\long\def\@secondofthree#1#2#3{#2}
\long\def\@thirdofthree#1#2#3{#3}
\def\cst@undefined@format#1{}
\def\cst@undefined@symbol{%
\nfss@text{\reset@font\textrm{C\textsuperscript{st}\textbf{??}}}}
\def\@setrefconstant#1#2#3{%
  \ifx#1\relax
   \protect\G@refundefinedconstanttrue
   \nfss@text{\reset@font\bfseries ??}%
   \@latex@warning{Reference to constant `#3' on page \thepage \space
             undefined}%
  \else
   \expandafter#2#1\null
  \fi}
\def\@setfamconstant#1#2#3{%
\ifx#1\relax%
\def\cst@tmp@format{cst@undefined@format}\null
\def\cst@tmp@symbol{cst@undefined@symbol}\null
\else%
\def\cst@tmp@format{cst@format@\expandafter#2#1}\null
\def\cst@tmp@symbol{cst@symbol@\expandafter#2#1}\null
\fi}
\newcounter{cst@tmp@counter}
\def\@setcounterconstant#1#2#3{%
  \ifx#1\relax
   \protect\G@refundefinedconstanttrue
   \@latex@warning{Reference to constant `#3' on page \thepage \space
             undefined}%
  \else
    \setcounter{cst@tmp@counter}{\expandafter#2#1}\null
\fi}
\def\refconstant#1{%
\expandafter\@setrefconstant\csname cstr@#1\endcsname\@firstofthree{#1}}
\def\familyconstant#1{%
\expandafter\@setfamconstant\csname cstr@#1\endcsname\@thirdofthree{#1}}
\def\counterconstant#1{%
\expandafter\@setcounterconstant%
\csname cstr@#1\endcsname\@firstofthree{#1}}
\newcommand{\Cr}[1]{%
\counterconstant{#1}%
\familyconstant{#1}%
{\@nameuse{\cst@tmp@symbol}}_{\@nameuse{\cst@tmp@format}{cst@tmp@counter}}}
\newcommand{\C}[1][normal]{%
\@if@constant@exists{#1}{%
\expandafter\refstepcounterconstant{cst@counter@#1}%
{\@nameuse{cst@symbol@#1}}_{\@nameuse{cst@format@#1}{cst@counter@#1}}}%
{\PackageError{constants}{Family for constants '#1' not defined}{
Check the name or use \protect\newconstantfamily}}%
}
\newcommand{\Cl}[2][normal]{\C[#1]\labelconstant{#2}{\string #1}}
\def\pagerefconstant#1{%
\expandafter\@setrefconstant\csname cstr@#1\endcsname
   \@secondofthree{#1}}
\def\refstepcounterconstant#1{\stepcounter{#1}%
    \protected@edef\@currentlabelconstant
       {\csname p@#1\endcsname\csname the#1\endcsname}%
}
\def\@newl@belconstant#1#2#3{{%
  \@ifundefined{#1@#2}%
    \relax
    {\gdef \@multiplelabelsconstant {%
       \@latex@warning@no@line{%
There were multiply-defined labels for constants}}%
     \@latex@warning@no@line{Label for constant `#2' multiply defined}}%
  \global\@namedef{#1@#2}{#3}
}}
\def\@currentlabelconstant{}
\def\newlabelconstant{\@newl@belconstant{cstr}}
\@onlypreamble\@newl@belconstant
\let \@multiplelabelsconstant \relax
\def\labelconstant#1#2{\@bsphack
  \protected@write\@auxout{}%
 {\string\newlabelconstant{#1}{{\@currentlabelconstant}{\thepage}{#2}}}%
  \@esphack}
\AtEndDocument{
\clearpage
\let\@newl@belconstant\@empty
\begingroup
     \if@filesw
       \immediate\closeout\@mainaux
       \let\@setckpt\@gobbletwo
       \let\@newl@belconstant\@testdef
       \let\@newl@bel\@testdef
       \@tempswafalse
       \makeatletter \input\jobname.aux
     \fi
\@refundefinedconstant
     \if@filesw
       \ifx \@multiplelabelsconstant \relax
         \if@tempswa
           \@latex@warning@no@line{%
Label(s) for constants may have changed.
                Rerun to get cross-references right}%
         \fi
       \else
         \@multiplelabelsconstant
       \fi
     \fi
\endgroup
\deadcycles\z@\@@end
}
\newcommand{\resetconstant}[1][normal]{%
\@if@constant@exists{#1}{%
\setcounter{cst@counter@#1}{0}}{%
{\PackageError{constants}{Family for constants '#1' not defined}{%
Check the name or use \protect\newconstantfamily}}%
}}
\endinput
%%
%% End of file `constants.sty'.
