%%
%% This is file `sistyle.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% sistyle.dtx  (with options: `package')
%% 
%% Copyright (C) 2004--2008 Danie Els
%% 
%% -------------------------------------------------------------------
%%                    The SIstyle package
%%              for SI units and number typesetting
%% -------------------------------------------------------------------
%% This work may be distributed and/or modified under the conditions
%% of the LaTeX Project Public License, either version 1.3c of this
%% license or (at your option) any later version. The latest version
%% of this license is in
%%      http://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%% 
%% This work has the LPPL maintenance status 'maintained'.
%% 
%% This Current Maintainer of this work is Danie Els (dnjels@sun.ac.za)
%% 
%% This package consists of the files: sistyle.dtx
%%                                     sistyle.ins
%%              and the derived file:  sistyle.sty
%% -------------------------------------------------------------------
%% 
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{sistyle}
   [2008/07/16  v2.3a  SI units and numbers (DNJ Els)]
\RequirePackage{amstext}
\newif\ifSI@eTeX
\SI@eTeXfalse
\ifx\eTeXversion\@undefined
\else
  \ifx\eTeXversion\relax
  \else
    \ifnum\eTeXversion>\z@
      \SI@eTeXtrue
    \fi
  \fi
\fi
\begingroup
   \catcode`\Q=3
   \long\gdef\SI@ifempt#1{\SI@xifempt#1QQ\@secondoftwo\@firstoftwo\@nil}
   \long\gdef\SI@xifempt#1#2Q#3#4#5\@nil{#4}
\endgroup
 \newcommand{\GetMathFontFams}{%
    \sbox{0}{$%
       \@ifundefined{mathsf}
          {\global\chardef\SI@sffam=99}%
          {\mathsf{\global\chardef\SI@sffam=\fam}}%
       \@ifundefined{mathtt}
          {\global\chardef\SI@ttfam=99}%
          {\mathtt{\global\chardef\SI@ttfam=\fam}}%
       $}%
  }
\AtBeginDocument{\GetMathFontFams}
\newcommand{\IfTbold}[2]{%
   \if b\expandafter\@car\f@series\@nil%
      #1\else #2\fi}
\newcommand{\IfMbold}[2]{%
   \edef\temp@bm{bold}%
   \ifx\math@version\temp@bm
      #1\else #2\fi}
\newif\ifSIobeybold
\SIobeyboldfalse
\newcommand*{\SI@mathrm}{\mathrm}
\newcommand*{\SI@mathsf}{\mathsf}
\newcommand*{\SI@mathtt}{\mathtt}
\newcommand*{\SImathrm}[1]{\renewcommand*{\SI@mathrm}{#1}}
\newcommand*{\SImathsf}[1]{\renewcommand*{\SI@mathsf}{#1}}
\newcommand*{\SImathtt}[1]{\renewcommand*{\SI@mathtt}{#1}}
\newcommand*{\SI@defaultMfam}{\SI@mathrm}
\newcommand*{\SIdefaultMfam}[1]{\renewcommand*{\SI@defaultMfam}{#1}}
\newcommand*{\SI@defaultNfam}{\SI@mathrm}
\newcommand*{\SIdefaultNfam}[1]{\renewcommand*{\SI@defaultNfam}{#1}}
\newcommand*{\SI@defaultTfam}{\rmfamily}
\newcommand*{\SIdefaultTfam}[1]{\renewcommand*{\SI@defaultTfam}{#1}}
\newif\ifupmath
\upmathfalse
\newcommand*{\SIupmath}[2][\SI@defaultMfam]{%
\begingroup
   \upmathtrue
   \edef\temp@sf{\sfdefault}%
   \edef\temp@tt{\ttdefault}%
   \let\SI@bold=\relax
   \ifmmode
      \ifdim\displaywidth>0pt\relax%--- DISPLAY MATH ------------
         \ifnum\the\fam=\SI@sffam
            \let\SI@mfam=\SI@mathsf
            \let\SI@tfam=\sffamily
         \else \ifnum\the\fam=\SI@ttfam
            \let\SI@mfam=\SI@mathtt
            \let\SI@tfam=\ttfamily
         \else
            \let\SI@mfam=#1%
            \let\SI@tfam=\SI@defaultTfam
         \fi\fi
         \IfMbold{\def\SI@bold{\bfseries}}%
                 {\def\SI@bold{\mdseries}}%
      \else%--- INLINE MATH ----------
         \ifx\f@family\temp@sf
            \let\SI@mfam=\SI@mathsf
            \let\SI@tfam=\sffamily
         \else\ifx\f@family\temp@tt
            \let\SI@mfam=\SI@mathtt
            \let\SI@tfam=\ttfamily
         \else
            \let\SI@mfam=#1%
            \let\SI@tfam=\SI@defaultTfam
         \fi\fi
         \IfTbold{\def\SI@bold{\boldmath}}%
                 {\def\SI@bold{\unboldmath}}%
      \fi
   \else%----- NORMAL TEXT --------------
      \ifx\f@family\temp@sf
         \let\SI@mfam=\SI@mathsf
         \let\SI@tfam=\sffamily
      \else\ifx\f@family\temp@tt
         \let\SI@mfam=\SI@mathtt
         \let\SI@tfam=\ttfamily
      \else
         \let\SI@mfam=#1%
         \let\SI@tfam=\SI@defaultTfam
      \fi\fi
      \IfTbold{\def\SI@bold{\boldmath}}%
              {\def\SI@bold{\unboldmath}}%
   \fi%----- END OF TEST --------------
   \text{%
      \ifSIobeybold\SI@bold\else\unboldmath\mdseries\fi
      \upshape\SI@tfam
      $\SI@mfam{#2}$}%
\endgroup
\check@mathfonts}
\DeclareRobustCommand{\ensureupmath}{%
   \ifupmath
      \expandafter\@firstofone
   \else
      \expandafter\SIupmath
   \fi}
\newcommand*{\SI@decsign}{{.}}
\newcommand*{\SIdecimalsign}[1]{\renewcommand*{\SI@decsign}{{#1}}}
\newcommand*{\SI@thousandsep}{{\,}}
\newcommand*{\SIthousandsep}[1]{\renewcommand*{\SI@thousandsep}{{#1}}}
\newcommand*{\SI@prod}{\ensuremath{{}\times{}}}
\newcommand*{\SIproductsign}[1]{\renewcommand*{\SI@prod}{\ensuremath{{}#1{}}}}
\newif\ifSIgroupfour
\SIgroupfourtrue
\def\SI@num#1{%
   \SI@ifempt{#1}{}{%
      \edef\SI@tmpa{\lowercase{\noexpand\SI@@num{\zap@space#1 \@empty}}}%
      \SI@tmpa}}
\def\SI@@num#1{\SI@numsplit#1ee\SI@numexp\SI@realp\@empty}
\def\SI@numsplit#1e#2e#3#4#5{#4{#1}{#2}}
\def\SI@p@tst{+}
\def\SI@m@tst{-}
\def\SI@numexp#1#2{%
   \SI@ifempt{#1}{}{%
      \def\SI@tmpb{#1}%
      \ifx\SI@tmpb\SI@p@tst\ensuremath{+}\else
      \ifx\SI@tmpb\SI@m@tst\ensuremath{-}\else
         \SI@realp{#1}{}\SI@prod%
      \fi\fi}%
   \ifmmode
     10^{\SI@realp{#2}{}}%
   \else
     10\textsuperscript{\SI@realp{#2}{}}%
   \fi}
\def\SI@realp#1#2{\SI@realpsplit#1..\SI@realfrc\SI@realc\@empty}
\def\SI@realpsplit#1.#2.#3#4#5{#4{#1}{#2}}
\def\SI@realc#1#2{\SI@realcsplit#1,,\SI@realfrc\SI@signedint\@empty}
\def\SI@realcsplit#1,#2,#3#4#5{#4{#1}{#2}}
\def\SI@realfrc#1#2{%
   \SI@ifempt{#1}{\SI@int{0}}%
                 {\SI@signedint{#1}{}}%
   \SI@decsign\SI@dec{#2}}
\def\SI@signedint#1#2{\SI@@signedint#1 }
\def\SI@@signedint#1#2 {%
  \if +#1\ensuremath{+}%
      \SI@ifempt{#2}{\SI@int{0}}{\SI@int{#2}}%
  \else
  \if -#1\ensuremath{-}%
      \SI@ifempt{#2}{\SI@int{0}}{\SI@int{#2}}%
  \else
  \SI@int{#1#2}\fi \fi}
\def\SI@not@v#1{\SI@@not@v#1\@empty\@empty\@empty\@empty\@empty\@nil}
\def\SI@@not@v#1#2#3#4#5\@nil{%
   \ifx\@empty#5\@empty
      \expandafter\@firstoftwo
   \else
      \expandafter\@secondoftwo
   \fi}
\def\SI@int#1{%
   \ifSIgroupfour
      \SI@not@v{#1}{#1}{\SI@intfmt{}#1\@empty\@empty\@empty}%
   \else
      \SI@intfmt{}#1\@empty\@empty\@empty%
   \fi}
\def\SI@intfmt#1#2#3#4{%
  \ifx\@empty#2\@empty%
    \SI@addthousandsep#1\relax
  \else
    \ifx\@empty#3\@empty%
      \SI@addthousandsep\@empty\@empty#1#2\relax
    \else
      \ifx\@empty#4\@empty%
        \SI@addthousandsep\@empty#1#2#3\relax
      \else
        \SI@intfmtafterfi{#1#2#3#4}%
      \fi
    \fi
  \fi}
\def\SI@intfmtafterfi#1\fi\fi\fi{\fi\fi\fi\SI@intfmt{#1}}
\def\SI@addthousandsep#1#2#3#4{#1#2#3%
  \if\relax#4\relax
  \else
    \SI@thousandsep\expandafter\SI@addthousandsep\expandafter#4%
  \fi}
\def\SI@dec#1{%
   \ifSIgroupfour
      \SI@not@v{#1}{#1}{\SI@decfmt#1\@empty\@empty\@empty\@empty}%
   \else
      \SI@decfmt#1\@empty\@empty\@empty\@empty%
   \fi}
\def\SI@decfmt#1#2#3#4{#1#2#3%
  \ifx\@empty#4\@empty%
  \else
    \SI@thousandsep\expandafter\SI@decfmt\expandafter#4%
  \fi}
\newcommand*{\SInum}[1]{{%
   \let\SI@unitdot=\pnt%
   \SIupmath[\SI@defaultNfam]{\SI@num{#1}}}}
\DeclareRobustCommand*{\num}{\@ifstar{\SI@num}{\SInum}}
\ifSI@eTeX
    \DeclareRobustCommand{\ang}{%
        \begingroup
            \catcode`;=12\relax
            \catcode`@=11\relax
            \SI@ang}
    \def\SI@ang#1{%
            \scantokens{\SI@@ang#1;;;\@nil}%
        \endgroup}
    \def\SI@@ang#1;#2;#3;#4\@nil{%
        \SI@@@ang{#1}{#2}{#3}}%
\else
    \DeclareRobustCommand{\ang}[1]{%
        \@nameuse{SI@ang@\romannumeral\catcode`\;}{#1}}%
    \begingroup
        \catcode`\;=12\relax
        \gdef\SI@ang@xii#1{\SI@@ang@xii#1;;;\@nil}
        \gdef\SI@@ang@xii#1;#2;#3;#4\@nil{\SI@@@ang{#1}{#2}{#3}}
        \catcode`\;=\active\relax
        \gdef\SI@ang@xiii#1{\SI@@ang@xiii#1;;;\@nil}
        \gdef\SI@@ang@xiii#1;#2;#3;#4\@nil{\SI@@@ang{#1}{#2}{#3}}
    \endgroup
\fi
\let\SI@degs=\relax
\let\SI@mins=\relax
\let\SI@secs=\relax
\newcommand*{\SI@@@ang}[3]{{%
   \SI@ifempt{#3}{}{\def\SI@secs{\SInum{#3}\SIupmath{\arcsec}}%
                    \def\SI@mins{\SInum{0}\SIupmath{\arcmin}}%
                    \def\SI@degs{\SInum{0}\SIupmath{\arcdeg}}}%
   \SI@ifempt{#2}{}{\def\SI@mins{\SInum{#2}\SIupmath{\arcmin}}%
                    \def\SI@degs{\SInum{0}\SIupmath{\arcdeg}}}%
   \SI@ifempt{#1}{}{\def\SI@degs{\SInum{#1}\SIupmath{\arcdeg}}}%
   \SI@degs\SI@mins\SI@secs}}
\newcommand*{\SI@unitsep}{\,}
\newcommand*{\SIunitsep}[1]{\renewcommand*{\SI@unitsep}{#1}}
\newcommand*{\SI@unitspace}{\,}
\newcommand*{\SIunitspace}[1]{\renewcommand*{\SI@unitspace}{#1}}
\newcommand*{\SI@unitdot}{{\cdot}}
\newcommand*{\SIunitdot}[1]{\renewcommand*{\SI@unitdot}{#1}}
\DeclareMathSymbol{\pnt}{\mathord}{letters}{58}   %(\pnt = .)
{\catcode`\.=13 \gdef.{\SI@unitdot}}
\newcommand*{\SIunit}[1]{%
\begingroup%
    \mathcode`.="8000%
    \def~{\SI@unitspace}%
    \SIupmath{#1}%
\endgroup}
\DeclareRobustCommand*{\SI}[2]{%
   \SI@ifempt{#1}{}{\SInum{#1}\SI@unitsep}%
   \SIunit{#2}}
\AtBeginDocument{%
    \@ifpackageloaded{textcomp}{%
         \providecommand*{\micro}{\ensureupmath{\mbox{\textmu}}}%
         \providecommand*{\ohm}{\ensureupmath{\mbox{\textohm}}}%
         \providecommand*{\degC}{\ensureupmath{\mbox{\textcelsius}}}%
         \providecommand*{\degF}{\ensureupmath{\mbox{\textdegree F}}}%
         \providecommand*{\arcdeg}{\ensureupmath{\mbox{\textdegree}}}%
         \providecommand*{\angstrom}{\ensureupmath{\mbox{\capitalring{A}}}}%
    }{%
         \providecommand*{\micro}{\ensureupmath{\mu}}%
         \providecommand*{\ohm}{\ensureupmath{\Omega}}%
         \providecommand*{\degC}{%
             \ensureupmath{{}^{\circ}\kern-\scriptspace C}}%
         \providecommand*{\degF}{%
             \ensureupmath{{}^{\circ}\kern-\scriptspace F}}%
         \providecommand*{\arcdeg}{\ensureupmath{{}^{\circ}}}%
         \providecommand*{\angstrom}{\ensureupmath{\mbox{\AA}}}%
    }%
   \providecommand*{\arcmin}{\ensureupmath{{}^{\prime}}}%
   \providecommand*{\arcsec}{\ensureupmath{{}^{\prime\prime}}}%
}
\newtoks\ttoks@A
\newtoks\ttoks@B
\newcommand{\SIstyle}[1]{%
   \@ifundefined{SIstyle#1}%
      {\PackageError{SIstyle}{Style `#1' is not defined}%
                           {See SIstyle package documentation}}%
      {\@nameuse{SIstyle#1}}}
\newcommand{\AddToSIstyle}{%
   \@ifstar{\SI@s@addto@stl}{\SI@addto@stl}}
\newcommand{\SI@s@addto@stl}[1]{%
   \expandafter\let\csname SIstyle#1\endcsname\relax
   \SI@addto@stl{#1}}
\newcommand{\SI@addto@stl}[2]{%
   \expandafter\SI@addto@list\csname SIstyle#1\endcsname{#2}}
\@onlypreamble\AddToSIstyle
\newcommand*{\SIstyleToLang}[2]{%
   \expandafter\SI@addto@list
      \csname extras#1\expandafter\endcsname
      \csname SIstyle#2\endcsname}
\@onlypreamble\SIstyleToLang
\newcommand{\SI@addto@list}[2]{%
   \ttoks@A{#2}%
   \ifx#1\@undefined
      \edef#1{\the\ttoks@A}%
   \else
      \ifx#1\relax
         \edef#1{\the\ttoks@A}%
      \else
         \ttoks@B\expandafter{#1}%
         \edef#1{\the\ttoks@B\the\ttoks@A}%
      \fi
   \fi
   \ttoks@A{}\ttoks@B\ttoks@A}
\AddToSIstyle{USA}{%
  \SIdecimalsign{.}%
  \SIthousandsep{\,}%
  \SIunitsep{\,}%
  \SIunitdot{\cdot}%
  \SIunitspace{\;}%
  \SIproductsign{\times}%
  \SIobeyboldfalse
  \SIgroupfourtrue}
\AddToSIstyle{German}{%
   \SIdecimalsign{,}%
   \SIthousandsep{\,}%
   \SIproductsign{\cdot}%
   \SIunitsep{\,}%
   \SIunitspace{\,}%
   \SIunitdot{\cdot}%
   \SIobeyboldfalse
   \SIgroupfourtrue}
\AddToSIstyle{S-Africa}{%
   \SIdecimalsign{,}%
   \SIthousandsep{\,}%
   \SIproductsign{\times}%
   \SIunitsep{\,}%
   \SIunitspace{\,}%
   \SIunitdot{\cdot}%
   \SIobeyboldfalse
   \SIgroupfourtrue}
\endinput
%%
%% End of file `sistyle.sty'.
