dotfiles/texmf/tex/latex/frank_tex/sistyle.sty

374 lines
12 KiB
Plaintext
Raw Normal View History

2013-12-09 20:56:04 +00:00
%%
%% 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'.