373 lines
12 KiB
TeX
373 lines
12 KiB
TeX
%%
|
|
%% 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'.
|