%% %% This is file `siunitx.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% siunitx.dtx (with options: `package') %% --------------------------------------------------------------- %% The siunitx package --- A comprehensive (SI) units package %% Maintained by Joseph Wright %% E-mail: joseph.wright@morningstar2.co.uk %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{siunitx} [2009/02/07 v2.0alpha A comprehensive (SI) units package] \begingroup \@ifundefined{eTeXversion}{% \PackageError{siunitx}{Not running under e-TeX}{% This package requires e-TeX. Try compiling the document with \MessageBreak `elatex' instead of `latex'. When using pdfTeX, try `pdfelatex' \MessageBreak instead of `pdflatex' }% \endgroup\endinput }{% \endgroup } \begingroup \@for\@tempa:=SIunits,sistyle,siunits,SIstyle,unitsdef,fancyunits\do{% \@ifpackageloaded{\@tempa}{% \PackageError{siunitx}{Package `\@tempa' incompatible}{% The \@tempa\space package and siunitx are incompatible. \MessageBreak Use the `emulate=\@tempa' package option when loading siunitx }% }{}% } \endgroup \newcommand*{\si@catcode@restore}{} \newcommand*{\si@catcode@set}{} \newcommand*{\si@catcode@store}[2]{% \edef\si@catcode@restore{% \si@catcode@restore \catcode#1 \the\catcode#1\relax }% \catcode#1 #2\relax } \newcommand*{\si@catcode@symbols}{% \si@catcode@set{42}{12}% * \si@catcode@set{43}{12}% + \si@catcode@set{44}{12}% , \si@catcode@set{46}{12}% . \si@catcode@set{47}{12}% / \si@catcode@set{58}{12}% : \si@catcode@set{59}{12}% ; \si@catcode@set{60}{12}% < \si@catcode@set{61}{12}% = \si@catcode@set{62}{12}% > } \let\si@catcode@set\si@catcode@store \si@catcode@symbols \si@catcode@set{45}{12}% - \si@catcode@set{94}{7}% ^ \si@catcode@set{95}{8}% _ \si@catcode@set{126}{13}% ~ \renewcommand*{\si@catcode@set}[2]{\catcode#1 #2\relax} \RequirePackage{amstext,array,pgfkeys} \newcommand*{\si@encoding@ts@one}{% \@ifundefined{T@TS1}{% \DeclareFontEncoding{TS1}{}{}% \DeclareFontSubstitution{TS1}{cmr}{m}{n}% }{}% } \AtBeginDocument{% \si@encoding@ts@one } \newcommand*{\si@key@path}{} \newcommand*{\si@key@error}{% \expandafter\si@key@error@aux\pgfkeyscurrentkey\si@stop } \newcommand*{\si@key@error@aux}{} \def\si@key@error@aux/siunitx/#1\si@stop{% \si@log@error{Unknown option `#1'}{% The option `#1' is not known to siunitx. }% } \newcommand*{\si@keys@family}[1]{% \pgfkeys{ /siunitx/#1/.is family, /siunitx/#1/.unknown/.code = \si@key@error }% } \pgfkeys{ /siunitx/.is family, /siunitx/.unknown/.code = \si@key@error } \pgfkeys{ /handlers/.is siunitx switch/.code = {% \edef\si@key@path{\pgfkeyscurrentpath}% \pgfkeys{ \si@key@path/.is choice, \si@key@path/.default = true, \si@key@path/true/.code = {\si@bool@cs@true{si@#1@bool}}, \si@key@path/false/.code = {\si@bool@cs@false{si@#1@bool}}, \si@key@path/yes/.code = {\si@bool@cs@true{si@#1@bool}}, \si@key@path/no/.code = {\si@bool@cs@false{si@#1@bool}}, \si@key@path/on/.code = {\si@bool@cs@true{si@#1@bool}}, \si@key@path/off/.code = {\si@bool@cs@false{si@#1@bool}}, \si@key@path/true/.default }% } } \newcommand*{\si@false}{01} \newcommand*{\si@true}{00} \newcommand*{\si@tmp@bool}{} \newcommand*{\si@tempa}{} \newcommand*{\si@tempb}{} \newcount\si@tempcnt \newsavebox\si@tempbox \newcommand*{\si@log@error}{% \PackageError{siunitx}% } \newcommand*{\si@log@info}{% \PackageInfo{siunitx}% } \newcommand*{\si@log@warning}{% \PackageWarning{siunitx}% } \newcommand*{\si@reserved@a}{} \newcommand*{\si@reserved@b}{} \newtoks\si@reserved@toks \newcommand*{\si@add@left@N}[2]{% \def\si@reserved@a{#2}% \edef#1{% \expandafter\unexpanded\expandafter{\si@reserved@a}% \expandafter\unexpanded\expandafter{#1}% }% } \newcommand*{\si@add@left@O}[2]{% \expandafter\si@add@left@N\expandafter#1\expandafter{#2}% } \newcommand*{\si@add@left@cs@N}[1]{% \expandafter\si@add@left@N\csname #1\endcsname } \newcommand*{\si@add@left@cs@O}[1]{% \expandafter\si@add@left@O\csname #1\endcsname } \newcommand*{\si@add@right@N}[2]{% \def\si@reserved@a{#2}% \edef#1{% \expandafter\unexpanded\expandafter{#1}% \expandafter\unexpanded\expandafter{\si@reserved@a}% }% } \newcommand*{\si@add@right@O}[2]{% \expandafter\si@add@right@N\expandafter#1\expandafter{#2}% } \newcommand*{\si@add@right@cs@N}[1]{% \expandafter\si@add@right@N\csname #1\endcsname } \newcommand*{\si@add@right@cs@O}[1]{% \expandafter\si@add@right@O\csname #1\endcsname } \newcommand*{\si@bool@false}[1]{% \let#1\si@false } \newcommand*{\si@bool@new}[1]{% \newcommand*{#1}{}% \let#1\si@false } \newcommand*{\si@bool@true}[1]{% \let#1\si@true } \newcommand*{\si@bool@cs@false}[1]{% \expandafter\si@bool@false\csname #1\endcsname } \newcommand*{\si@bool@cs@new}[1]{% \expandafter\si@bool@new\csname #1\endcsname } \newcommand*{\si@bool@cs@true}[1]{% \expandafter\si@bool@true\csname #1\endcsname } \newcommand*{\si@bool@if@F}[1]{% \if#1\relax \expandafter\@gobble \else \expandafter\@firstofone \fi } \newcommand*{\si@bool@if@T}[1]{% \if#1\relax \expandafter\@firstofone \else \expandafter\@gobble \fi } \newcommand*{\si@bool@if@TF}[1]{% \if#1\relax \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \newcommand*{\si@bool@cs@if@F}[1]{% \expandafter\si@bool@if@F\csname #1\endcsname } \newcommand*{\si@bool@cs@if@T}[1]{% \expandafter\si@bool@if@T\csname #1\endcsname } \newcommand*{\si@bool@cs@if@TF}[1]{% \expandafter\si@bool@if@TF\csname #1\endcsname } \newcommand*{\si@clear@cs}[1]{% \si@let@cN{#1}\@empty } \newcommand*{\si@clear@macro}[1]{% \let#1\@empty } \newcommand*{\si@dowhile@bool@T}[2]{% #2% \si@bool@if@T#1{% \si@dowhile@bool@T#1{#2}% }% } \newcommand*{\si@empty@cs@if@F}[1]{% \expandafter\si@empty@if@F\csname #1\endcsname } \newcommand*{\si@empty@cs@if@T}[1]{% \expandafter\si@empty@if@T\csname #1\endcsname } \newcommand*{\si@empty@cs@if@TF}[1]{% \expandafter\si@empty@if@TF\csname #1\endcsname } \newcommand*{\si@empty@if@F}[1]{% \si@meaning@eq@if@F#1\@empty } \newcommand*{\si@empty@if@T}[1]{% \si@meaning@eq@if@T#1\@empty } \newcommand*{\si@empty@if@TF}[1]{% \si@meaning@eq@if@TF#1\@empty } \newcommand*{\si@empty@tlist@if@F}[1]{% \expandafter\ifx\expandafter\si@nil\detokenize{#1}\si@nil \expandafter\@gobble \else \expandafter\@firstofone \fi } \newcommand*{\si@empty@tlist@if@T}[1]{% \expandafter\ifx\expandafter\si@nil\detokenize{#1}\si@nil \expandafter\@firstofone \else \expandafter\@gobble \fi } \newcommand*{\si@empty@tlist@if@TF}[1]{% \expandafter\ifx\expandafter\si@nil\detokenize{#1}\si@nil \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \newcommand*{\si@elt@count}[1]{% \number\numexpr 0\si@loop@over@macro#1\si@elt@count@aux\relax } \newcommand*{\si@elt@count@aux}[1]{+1} \newcommand*{\si@elt@count@cs}[1]{% \expandafter\si@elt@count\csname #1\endcsname } \newcommand*{\si@expand@tlist}[2]{% \si@clear@macro#1% \def\si@reserved@b##1{% \si@add@right@O#1##1% }% \si@loop@over@macro@aux\si@reserved@b#2\si@loop@end\si@loop@stop } \newcommand*{\si@expand@tlist@cs}[1]{% \expandafter\si@expand@tlist\csname #1\endcsname } \newcommand*{\si@in@if@F}[2]{% \def\si@reserved@a##1#2##2\si@stop{% \si@no@value@if@T{##2}% }% \expandafter\si@reserved@a#1#2\si@no@value\si@stop } \newcommand*{\si@in@if@T}[2]{% \def\si@reserved@a##1#2##2\si@stop{% \si@no@value@if@F{##2}% }% \expandafter\si@reserved@a#1#2\si@no@value\si@stop } \newcommand*{\si@in@if@TF}[2]{% \def\si@reserved@a##1#2##2\si@stop{% \si@no@value@if@FT{##2}% }% \expandafter\si@reserved@a#1#2\si@no@value\si@stop } \newcommand*{\si@in@tlist@if@F}[2]{% \def\si@reserved@a##1#2##2\si@stop{% \si@no@value@if@T{##2}% }% \si@reserved@a#1#2\si@no@value\si@stop } \newcommand*{\si@in@tlist@if@T}[2]{% \def\si@reserved@a##1#2##2\si@stop{% \si@no@value@if@F{##2}% }% \si@reserved@a#1#2\si@no@value\si@stop } \newcommand*{\si@in@tlist@if@TF}[2]{% \def\si@reserved@a##1#2##2\si@stop{% \si@no@value@if@FT{##2}% }% \si@reserved@a#1#2\si@no@value\si@stop } \newcommand*{\si@in@cs@if@F}[1]{% \expandafter\si@in@if@F\csname #1\endcsname } \newcommand*{\si@in@cs@if@T}[1]{% \expandafter\si@in@if@T\csname #1\endcsname } \newcommand*{\si@in@cs@if@TF}[1]{% \expandafter\si@in@if@TF\csname #1\endcsname } \newcommand*{\si@let@cc}[2]{% \expandafter\si@let@cN\expandafter{\expandafter#1\expandafter}% \csname #2\endcsname } \newcommand*{\si@let@cN}[1]{% \expandafter\let\csname #1\endcsname } \newcommand*{\si@let@Nc}[2]{% \expandafter\let\expandafter#1\csname #2\endcsname } \newcommand*{\si@loop@over@cs}[1]{% \expandafter\si@loop@over@macro\csname #1\endcsname } \newcommand*{\si@loop@over@macro}[2]{% \expandafter\si@loop@over@macro@aux \expandafter#2#1\si@loop@end\si@loop@stop } \newcommand*{\si@loop@over@macro@aux}[2]{% \si@loop@end@if{#2}% #1{#2}% \si@loop@over@macro@aux#1% } \newcommand*{\si@loop@end@if}[1]{% \expandafter\ifx\si@loop@end@if@aux#1?\si@nil\si@loop@end\si@loop@end \expandafter\si@loop@exit \fi } \newcommand*{\si@loop@exec@end@if}[2]{% \expandafter\ifx\si@loop@end@if@aux#1?\si@nil\si@loop@end\si@loop@end \expandafter\si@loop@exit@exec \else \expandafter\@gobble \fi {#2}% } \newcommand*{\si@loop@end@if@aux}{} \def\si@loop@end@if@aux#1#2\si@nil\si@loop@end{#1} \newcommand*{\si@loop@exit}{} \def\si@loop@exit#1\si@loop@stop{} \newcommand*{\si@loop@exit@exec}{} \def\si@loop@exit@exec#1#2\si@loop@stop{#1} \newcommand*{\si@loop@end}{\si@loop@end} \newcommand*{\si@loop@stop}{\si@loop@stop} \newcommand*{\si@loop@over@three}[2]{% \expandafter\si@loop@over@three@aux \expandafter#2#1\si@loop@end\si@loop@stop } \newcommand*{\si@loop@over@three@aux}[4]{% \si@loop@end@if{#2}% #1{#2#3#4}% \si@loop@over@three@aux#1% } \newcommand*{\si@loop@over@three@cs}[1]{% \expandafter\si@loop@over@three\csname #1\endcsname } \newcommand*{\si@meaning@eq@if@F}[2]{% \ifx#1#2% \expandafter\@gobble \else \expandafter\@firstofone \fi } \newcommand*{\si@meaning@eq@if@T}[2]{% \ifx#1#2% \expandafter\@firstofone \else \expandafter\@gobble \fi } \newcommand*{\si@meaning@eq@if@TF}[2]{% \ifx#1#2% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \newcommand*{\si@meaning@eq@cs@if@F}[2]{% \expandafter\si@meaning@eq@if@F\csname #1\expandafter\endcsname \csname #2\endcsname } \newcommand*{\si@meaning@eq@cs@if@T}[2]{% \expandafter\si@meaning@eq@if@T\csname #1\expandafter\endcsname \csname #2\endcsname } \newcommand*{\si@meaning@eq@cs@if@TF}[2]{% \expandafter\si@meaning@eq@if@TF\csname #1\expandafter\endcsname \csname #2\endcsname } \newcommand*{\si@mode@maths@display@if@T}{% \ifmmode \ifinner \expandafter\expandafter\expandafter\@gobble \else \expandafter\expandafter\expandafter\@firstofone \fi \else \expandafter\@gobble \fi } \newcommand*{\si@mode@maths@inline@if@T}{% \ifmmode \ifinner \expandafter\expandafter\expandafter\@firstofone \else \expandafter\expandafter\expandafter\@gobble \fi \else \expandafter\@gobble \fi } \newcommand*{\si@mode@text@if@T}{% \ifmmode \expandafter\@gobble \else \expandafter\@firstofone \fi } \newcommand*{\si@nameedef}[1]{% \expandafter\edef\csname #1\endcsname } \newcommand*{\si@newcommand}[3]{% \@ifdefinable{#1}{% \expandafter\protected\expandafter\def\expandafter#1\expandafter{% \expandafter\@testopt\csname\string#1\endcsname{}% }% \expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#3}% }% } \newcommand*{\si@nil}{\si@nil} \newcommand*{\si@stop}{\si@stop} \newcommand*{\si@no@value}{\si@no@value} \newcommand*{\si@no@value@if@F}[1]{% \if\si@no@value@if@aux@i{#1}% \expandafter\@gobble \else \expandafter\@firstofone \fi } \newcommand*{\si@no@value@if@FT}[1]{% \if\si@no@value@if@aux@i{#1}% \expandafter\@secondoftwo \else \expandafter\@firstoftwo \fi } \newcommand*{\si@no@value@if@T}[1]{% \if\si@no@value@if@aux@i{#1}% \expandafter\@firstofone \else \expandafter\@gobble \fi } \newcommand*{\si@no@value@if@TF}[1]{% \if\si@no@value@if@aux@i{#1}% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \newcommand*{\si@no@value@if@aux@i}[1]{% \if\expandafter\si@no@value@if@aux@ii\expandafter {\string\si@no@value\space}{\detokenize{#1}}% \si@true \else \si@false \fi } \newcommand*{\si@no@value@if@aux@ii}[1]{% \if\number\si@no@value@if@aux@iii{}{}#1\relax } \newcommand*{\si@no@value@if@aux@iii}[3]{% \if#3\relax \expandafter\si@no@value@if@aux@iv \fi \si@no@value@if@aux@iii{\if#3#1}{#2\fi}% } \newcommand*{\si@no@value@if@aux@iv}{} \def\si@no@value@if@aux@iv\si@no@value@if@aux@iii#1#2#3{% #1#3\relax'#213 \si@true \else \si@false \fi } \newcommand*{\si@num@if@F}[1]{% \ifnum#1\relax \expandafter\@gobble \else \expandafter\@firstofone \fi } \newcommand*{\si@num@if@T}[1]{% \ifnum#1\relax \expandafter\@firstofone \else \expandafter\@gobble \fi } \newcommand*{\si@num@if@TF}[1]{% \ifnum#1\relax \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \newcommand*{\si@replace@all@in}[3]{% \si@reserved@toks{}% \def\si@tempa##1#2##2\si@stop{% \si@no@value@if@TF{##2}{% \si@replace@all@in@aux{##1}% }{% \si@replace@all@in@aux{##1#3}% \si@tempa\@empty##2\si@stop }% }% \@firstofone{\expandafter\si@tempa\expandafter\@empty}% #1#2\si@no@value\si@stop \edef#1{\the\si@reserved@toks}% } \newcommand*{\si@replace@all@in@aux}[1]{% \si@reserved@toks\expandafter\expandafter\expandafter{% \expandafter\the\expandafter\si@reserved@toks#1% }% } \newcommand*{\si@replace@all@in@cs}[1]{% \expandafter\si@replace@all@in\csname #1\endcsname } \newcommand*{\si@reverse@macro}[1]{% \edef#1{% \expandafter\si@reverse@tlist\expandafter{#1}% }% } \newcommand*{\si@reverse@cs}[1]{% \expandafter\si@reverse@macro\csname #1\endcsname } \newcommand*{\si@reverse@tlist}[1]{% \si@reverse@tlist@aux{}#1\si@loop@end\si@loop@stop } \newcommand*{\si@reverse@tlist@aux}[2]{% \si@loop@exec@end@if{#2}{#1}% \si@reverse@tlist@aux{#2#1}% } \newcommand*{\si@stop@if@F}[1]{% \si@meaning@eq@if@F#1\si@stop } \newcommand*{\si@stop@if@T}[1]{% \si@meaning@eq@if@T#1\si@stop } \newcommand*{\si@stop@if@TF}[1]{% \si@meaning@eq@if@TF#1\si@stop } \newcommand*{\si@whiledo@num@T}[2]{% \si@num@if@T{#1}{% #2\si@whiledo@num@T{#1}{#2}% }% } \newcommand*{\si@whiledo@empty@F}[2]{% \si@empty@if@F#1{% #2\si@whiledo@empty@F#1{#2}% }% } \newcommand*{\si@whiledo@empty@T}[2]{% \si@empty@if@T#1{% #2\si@whiledo@empty@T#1{#2}% }% } \newcommand*{\si@whiledo@empty@cs@F}[2]{% \si@empty@cs@if@F{#1}{% #2\si@whiledo@empty@cs@F{#1}{#2}% }% } \newcommand*{\si@whiledo@empty@cs@T}[2]{% \si@empty@cs@if@T{#1}{% #2\si@whiledo@empty@cs@T{#1}{#2}% }% } \newcommand*{\si@font@fam@mathsf}{} \newcommand*{\si@font@fam@mathtt}{} \newcommand*{\si@font@fam@detect@maths}[1]{% \begingroup \setbox\@tempboxa\hbox{% \ensuremath{% \csname math#1\endcsname{% \expandafter\global\expandafter\chardef \csname si@font@fam@math#1\endcsname\fam\relax }% }% }% \endgroup } \g@addto@macro{\document}{% \si@font@fam@detect@maths{sf}% \si@font@fam@detect@maths{tt}% } \newcommand*{\si@font@fam@sfdefault}{} \newcommand*{\si@font@fam@ttfamily}{} \newcommand*{\si@font@fam@detect@text}[1]{% \si@nameedef{si@font@fam@#1default}{\@nameuse{#1default}}% } \AtBeginDocument{% \si@font@fam@detect@text{sf}% \si@font@fam@detect@text{tt}% } \si@bool@new\si@font@det@b@bool \si@bool@new\si@font@det@family@bool \si@bool@new\si@font@det@maths@display@bool \si@bool@new\si@font@det@maths@inline@bool \si@bool@new\si@font@det@it@bool \si@bool@new\si@font@det@mode@bool \si@keys@family{font/detect} \pgfkeys{ /siunitx/font/detect, all/.style = { /siunitx/font/detect/bold = true, /siunitx/font/detect/family = true, /siunitx/font/detect/italic = true, /siunitx/font/detect/mode = true }, bold/.is siunitx switch = {font@det@b}, display math/.is siunitx switch = {font@det@maths@display}, display maths/.is siunitx switch = {font@det@maths@display}, family/.is siunitx switch = {font@det@family}, inline bold/.is choice, inline bold/.cd, maths/.code = {\si@bool@true\si@font@det@maths@inline@bool}, math/.code = {\si@bool@true\si@font@det@maths@inline@bool}, text/.code = {\si@bool@false\si@font@det@maths@inline@bool}, /siunitx/font/detect, italic/.is siunitx switch = {font@det@it}, mode/.is siunitx switch = {font@det@mode}, none/.style = { /siunitx/font/detect/bold = false, /siunitx/font/detect/family = false, /siunitx/font/detect/italic = false, /siunitx/font/detect/mode = false }, bold = false, display maths = true, inline bold = text, italic = false, mode = false } \si@bool@new\si@font@set@bool \newcommand*{\si@font@set@bold}{} \newcommand*{\si@font@set@family}{} \newcommand*{\si@font@set@italic}{} \si@bool@new\si@font@set@text@bool \newcommand*{\si@font@det@set}{% \si@bool@if@F\si@font@set@bool{% \si@font@det@init \si@bool@if@T\si@font@det@b@bool{% \si@font@det@bold }% \si@bool@if@T\si@font@det@family@bool{% \si@font@det@family }% \si@bool@if@T\si@font@det@it@bool{% \si@font@det@italic }% \si@bool@if@T\si@font@det@mode@bool{% \si@font@det@mode }% }% } \newcommand*{\si@font@det@init}{% \si@bool@true\si@font@set@bool \def\si@font@set@bold{\unboldmath\mdseries}% \def\si@font@set@family{rm}% \si@bool@false\si@font@set@text@bool \def\si@font@set@italic{\upshape}% } \newcommand*{\si@font@det@bold}{% \si@mode@maths@display@if@T{% \si@bool@if@TF\si@font@det@maths@display@bool{% \si@font@det@bold@maths }{% \si@font@det@bold@text }% }% \si@mode@maths@inline@if@T{% \si@bool@if@TF\si@font@det@maths@inline@bool{% \si@font@det@bold@maths }{% \si@font@det@bold@text }% }% \si@mode@text@if@T{% \si@font@det@bold@text }% } \newcommand*{\si@font@det@bold@maths}{% \def\si@tempa{bold}% \si@meaning@eq@if@T\si@tempa\math@version{% \def\si@font@set@bold{\boldmath\bfseries}% }% } \newcommand*{\si@font@det@bold@text}{% \def\si@tempa{b}% \edef\si@tempb{\expandafter\@car\f@series\@nil}% \si@meaning@eq@if@T\si@tempa\si@tempb{% \def\si@font@set@bold{\boldmath\bfseries}% }% } \newcommand*{\si@font@det@family}{% \si@font@det@fam@text \si@bool@if@T\si@font@det@maths@display@bool{% \si@mode@maths@display@if@T{% \si@font@det@fam@maths }% }% } \newcommand*{\si@font@det@fam@maths}{% \def\si@font@set@family{rm}% \si@num@if@TF{\the\fam=\si@font@fam@mathsf}{% \def\si@font@set@family{sf}% }{% \si@num@if@T{\the\fam=\si@font@fam@mathtt}{% \def\si@font@set@family{tt}% }% }% } \newcommand*{\si@font@det@fam@text}{% \si@meaning@eq@if@T\f@family\si@font@fam@sfdefault{% \def\si@font@set@family{sf}% }% \si@meaning@eq@if@T\f@family\si@font@fam@ttdefault{% \def\si@font@set@family{tt}% }% } \newcommand*{\si@font@det@italic}{% \def\si@tempa{it}% \si@meaning@eq@if@T\si@tempa\f@shape{% \def\si@font@set@italic{\itshape}% }% } \newcommand*{\si@font@det@mode}{% \ifmmode\else \si@bool@true\si@font@set@text@bool \fi } \newcommand*{\si@font@unit@maths@rm}{} \newcommand*{\si@font@unit@maths@sf}{} \newcommand*{\si@font@unit@maths@tt}{} \newcommand*{\si@font@unit@text@rm}{} \newcommand*{\si@font@unit@text@sf}{} \newcommand*{\si@font@unit@text@tt}{} \newcommand*{\si@font@num@maths@rm}{} \newcommand*{\si@font@num@maths@sf}{} \newcommand*{\si@font@num@maths@tt}{} \newcommand*{\si@font@num@text@rm}{} \newcommand*{\si@font@num@text@sf}{} \newcommand*{\si@font@num@text@tt}{} \si@bool@new\si@font@unit@textmode@bool \si@bool@new\si@font@num@textmode@bool \si@keys@family{font} \si@keys@family{font/units} \si@keys@family{font/numbers} \pgfkeys{ /siunitx/font, maths rm/.style = { /siunitx/font/units/maths rm = #1, /siunitx/font/numbers/maths rm = #1 }, maths sf/.style = { /siunitx/font/units/maths sf = #1, /siunitx/font/numbers/maths sf = #1 }, maths tt/.style = { /siunitx/font/units/maths tt = #1, /siunitx/font/numbers/maths tt = #1 }, maths rm/.style = { /siunitx/font/units/maths rm = #1, /siunitx/font/numbers/maths rm = #1 }, maths sf/.style = { /siunitx/font/units/maths sf = #1, /siunitx/font/numbers/maths sf = #1 }, maths tt/.style = { /siunitx/font/units/maths tt = #1, /siunitx/font/numbers/maths tt = #1 }, mode/.is choice, mode/.cd, maths/.style = { /siunitx/font/units/mode = maths, /siunitx/font/numbers/mode = maths }, math/.style = { /siunitx/font/units/mode = maths, /siunitx/font/numbers/mode= maths }, text/.style = { /siunitx/font/units/mode = text, /siunitx/font/numbers/mode= text }, /siunitx/font, text rm/.style = { /siunitx/font/units/text rm = #1, /siunitx/font/numbers/text rm = #1 }, text sf/.style = { /siunitx/font/units/text sf = #1, /siunitx/font/numbers/text sf = #1 }, text tt/.style = { /siunitx/font/units/text tt = #1, /siunitx/font/numbers/text tt = #1 }, /siunitx/font/units, maths rm/.store in = \si@font@unit@maths@rm, maths sf/.store in = \si@font@unit@maths@sf, maths tt/.store in = \si@font@unit@maths@tt, maths rm/.store in = \si@font@unit@maths@rm, maths sf/.store in = \si@font@unit@maths@sf, maths tt/.store in = \si@font@unit@maths@tt, mode/.is choice, mode/.cd, maths/.code = {\si@bool@false\si@font@unit@textmode@bool}, math/.code = {\si@bool@false\si@font@unit@textmode@bool}, text/.code = {\si@bool@true\si@font@unit@textmode@bool}, /siunitx/font/units, text rm/.store in = \si@font@unit@text@rm, text sf/.store in = \si@font@unit@text@sf, text tt/.store in = \si@font@unit@text@tt, /siunitx/font/numbers, maths rm/.store in = \si@font@num@maths@rm, maths sf/.store in = \si@font@num@maths@sf, maths tt/.store in = \si@font@num@maths@tt, maths rm/.store in = \si@font@num@maths@rm, maths sf/.store in = \si@font@num@maths@sf, maths tt/.store in = \si@font@num@maths@tt, mode/.is choice, mode/.cd, maths/.code = {\si@bool@false\si@font@num@textmode@bool}, math/.code = {\si@bool@false\si@font@num@textmode@bool}, text/.code = {\si@bool@true\si@font@num@textmode@bool}, /siunitx/font/numbers, text rm/.store in = \si@font@num@text@rm, text sf/.store in = \si@font@num@text@sf, text tt/.store in = \si@font@num@text@tt, /siunitx/font, maths rm = \mathrm, maths sf = \mathsf, maths tt = \mathtt, mode = maths, text rm = \rmfamily, text sf = \sffamily, text tt = \ttfamily } \newcommand*{\si@print@type}{unit} \newcommand*{\si@print}[2]{% \begingroup \si@bool@if@F\si@font@set@bool{% \si@font@det@set }% \def\si@print@type{#1}% \si@print@codes \text{\si@print@set{#2}}% \endgroup \check@mathfonts } \newcommand*{\si@print@num}{% \si@print{num}% } \newcommand*{\si@print@unit}{% \si@print{unit}% } \si@catcode@set{45}{13}% - \si@catcode@set{94}{13}% ^ \si@catcode@set{95}{13}% _ \newcommand*{\si@print@codes}{% \si@catcode@symbols \si@catcode@set{94}{13}% ^ \si@catcode@set{95}{13}% _ \endlinechar\m@ne\relax \everyeof{\noexpand}% \si@bool@if@TF\si@font@set@text@bool{% \si@catcode@set{45}{13}% - \let-\si@print@minus \let_\si@print@sb \let^\si@print@sp \let\textsubscript\si@print@sb \let\textsuperscript\si@print@sp }{% \si@catcode@set{45}{12}% - \let_\sb \let^\sp \let\textsubscript\sb \let\textsuperscript\sp }% } \si@catcode@set{45}{12}% - \si@catcode@set{94}{7}% ^ \si@catcode@set{95}{8}% _ \newcommand*{\si@print@maths}[1]{% \ensuremath{% \@nameuse{si@font@\si@print@type @maths@\si@font@set@family}{#1}% }% } \newcommand*{\si@print@text}[1]{#1} \newcommand*{\si@print@set}[1]{% \si@font@set@bold \si@font@set@italic \@nameuse{si@font@\si@print@type @text@\si@font@set@family}% \si@bool@if@TF\si@font@set@text@bool{% \si@print@text{\scantokens{#1}}% }{% \si@print@maths{\scantokens{#1}}% }% } \newcommand*{\si@print@minus}{} \DeclareTextSymbolDefault{\si@print@minus}{TS1} \DeclareTextSymbol{\si@print@minus}{TS1}{61} \newcommand*{\si@print@sb}[1]{% \ensuremath{_{\text{#1}}}% } \newcommand*{\si@print@sp}[1]{% \ensuremath{^{\text{#1}}}% } \newcommand*{\si@num@pre@product}{} \newcommand*{\si@num@pre@quotient}{} \newcommand*{\si@num@pre@tokens}{} \si@keys@family{numbers/input} \pgfkeys{ /siunitx/numbers/input, product/.store in = \si@num@pre@product, quotient/.store in = \si@num@pre@quotient, protect tokens/.store in = \si@num@pre@tokens, product = x, quotient = /, protect tokens = \mp\pi\pm } \newcommand*{\si@num@pre@arg}{} \newcommand*{\si@num@pre@arg@den}{} \newcommand*{\si@num@pre@arg@held}{} \newcommand*{\si@num@pre@arg@num}{} \si@bool@new\si@num@pre@error@bool \newcommand*{\si@num@pre@process}[1]{% \si@num@pre@init \begingroup \si@num@pre@protect@tokens \protected@edef\@tempa{#1}% \expandafter\endgroup\expandafter \def\expandafter\si@num@pre@arg\expandafter{\@tempa}% \si@num@pre@sep@prod \si@num@pre@sep@quot } \newcommand*{\si@num@pre@error}{% \si@bool@true\si@num@pre@error@bool \si@log@error } \newcommand*{\si@num@pre@init}{% \def\si@num@pre@arg{}% \def\si@num@pre@arg@den{}% \def\si@num@pre@arg@held{}% \def\si@num@pre@arg@num{}% \si@bool@false\si@num@pre@error@bool } \newcommand*{\si@num@pre@protect@tokens}{% \si@loop@over@macro\si@num@pre@tokens\si@num@pre@protect@tokens@aux } \newcommand*{\si@num@pre@protect@tokens@aux}[1]{% \let#1\relax } \newcommand*{\si@num@pre@sep@prod}{% \si@loop@over@macro\si@num@pre@product\si@num@pre@sep@prod@aux } \newcommand*{\si@num@pre@sep@prod@aux}[1]{% \si@in@if@T\si@num@pre@arg{#1}{% \def\si@tempa##1#1##2\si@stop{% \def\si@num@pre@arg{##1}% \def\si@num@pre@arg@held{##2}% }% \expandafter\si@tempa\si@num@pre@arg\si@stop \si@empty@if@T\si@num@pre@arg{% \si@num@pre@error{Misplaced product token}{% A number cannot begin with a product token. }% }% \si@empty@if@T\si@num@pre@arg@held{% \si@num@pre@error{Misplaced product token}{% A number cannot end with a product token. }% }% \si@loop@exit }% } \newcommand*{\si@num@pre@sep@quot}{% \si@loop@over@macro\si@num@pre@quotient\si@num@pre@sep@quot@aux } \newcommand*{\si@num@pre@sep@quot@aux}[1]{% \si@in@if@T\si@num@pre@arg{#1}{% \def\si@tempa##1#1##2\si@stop{% \def\si@num@pre@arg@num{##1}% \def\si@num@pre@arg@den{##2}% }% \expandafter\si@tempa\si@num@pre@arg\si@stop \si@empty@if@T\si@num@pre@arg@num{% \si@num@pre@error{Misplaced quotient token}{% A number cannot begin with a quotient token. }% }% \si@empty@if@T\si@num@pre@arg@den{% \si@num@pre@error{Misplaced quotient token}{% A number cannot end with a quotient token. }% }% \si@in@if@T\si@num@pre@arg@den{#1}{% \si@num@pre@error{Duplicate quotient token}{% Only one quotient token can appear in a single number. }% }% \si@loop@exit }% } \newcommand*{\si@num@in@uncert@close}{} \newcommand*{\si@num@in@complex}{} \newcommand*{\si@num@in@decimal}{} \newcommand*{\si@num@in@digits}{} \newcommand*{\si@num@in@exponent}{} \newcommand*{\si@num@in@signs}{} \newcommand*{\si@num@in@symbols}{} \pgfkeys{ /siunitx/numbers/input, close uncertainty/.store in = \si@num@in@uncert@close, complex roots/.store in = \si@num@in@complex, decimal markers/.store in = \si@num@in@decimal, digits/.store in = \si@num@in@digits, exponent markers/.store in = \si@num@in@exponent, ignore/.store in = \si@num@in@ignore, open uncertainty/.store in = \si@num@in@uncert@open, signs/.store in = \si@num@in@signs, symbols/.store in = \si@num@in@symbols, %( close uncertainty = ), complex roots = ij, decimal markers = {.,}, digits = 0123456789, exponent markers = dDeE, ignore = {}, open uncertainty = (, %) signs = +-\mp\pm, symbols = \pi } \newcommand*{\si@num@in@mant}{} \newcommand*{\si@num@in@mant@sign}{} \newcommand*{\si@num@in@mant@int}{} \newcommand*{\si@num@in@mant@dec}{} \newcommand*{\si@num@in@mant@uncert}{} \newcommand*{\si@num@in@mant@uncert@int}{} \newcommand*{\si@num@in@mant@uncert@dec}{} \newcommand*{\si@num@in@mant@comp}{} \newcommand*{\si@num@in@mant@comp@sign}{} \newcommand*{\si@num@in@mant@comp@int}{} \newcommand*{\si@num@in@mant@comp@dec}{} \newcommand*{\si@num@in@mant@comp@uncert}{} \newcommand*{\si@num@in@mant@comp@uncert@int}{} \newcommand*{\si@num@in@mant@comp@uncert@dec}{} \newcommand*{\si@num@in@exp}{} \newcommand*{\si@num@in@exp@sign}{} \newcommand*{\si@num@in@exp@int}{} \newcommand*{\si@num@in@exp@dec}{} \newcommand*{\si@num@in@exp@uncert}{} \newcommand*{\si@num@in@exp@uncert@int}{} \newcommand*{\si@num@in@exp@uncert@dec}{} \newcommand*{\si@num@in@exp@comp}{} \newcommand*{\si@num@in@exp@comp@sign}{} \newcommand*{\si@num@in@exp@comp@int}{} \newcommand*{\si@num@in@exp@comp@dec}{} \newcommand*{\si@num@in@exp@comp@uncert}{} \newcommand*{\si@num@in@exp@comp@uncert@int}{} \newcommand*{\si@num@in@exp@comp@uncert@dec}{} \si@bool@new\si@num@in@mant@bool \si@bool@new\si@num@in@mant@dec@bool \si@bool@new\si@num@in@mant@uncert@dec@bool \si@bool@new\si@num@in@mant@comp@bool \si@bool@new\si@num@in@mant@comp@dec@bool \si@bool@new\si@num@in@mant@comp@uncert@dec@bool \si@bool@new\si@num@in@exp@bool \si@bool@new\si@num@in@exp@dec@bool \si@bool@new\si@num@in@exp@uncert@dec@bool \si@bool@new\si@num@in@exp@comp@bool \si@bool@new\si@num@in@exp@comp@dec@bool \si@bool@new\si@num@in@exp@comp@uncert@dec@bool \si@bool@new\si@num@in@symbols@bool \newcommand*{\si@num@in@arg}{} \newcommand*{\si@num@in@error}{} \newcommand*{\si@num@in@parse}[1]{% \si@num@in@init \si@num@in@rescan{#1}% \si@empty@if@TF\si@num@in@arg{% \def\si@num@in@error{\m@ne}% }{% \si@num@in@arg@loop \si@num@in@try{\si@num@in@separate}% \si@num@in@try{\si@num@in@finalise}% }% } \newcommand*{\si@num@in@parse@O}[1]{% \expandafter\si@num@in@parse\expandafter{#1}% } \newcommand*{\si@num@in@add}[1]{% \si@add@right@cs@N{si@num@in@#1}% } \newcommand*{\si@num@in@arg@loop}{% \si@expand@tlist\si@tempa{% \si@num@in@signs \si@num@in@ignore \si@num@in@digits \si@num@in@decimal \si@num@in@exponent \si@num@in@complex \si@num@in@symbols \si@num@in@uncert@open \si@num@in@uncert@close }% \si@clear@macro\si@tempb \si@loop@over@macro\si@num@in@arg\si@num@in@arg@loop@aux \si@num@in@try{\let\si@num@in@arg\si@tempb}% } \newcommand*{\si@num@in@arg@loop@aux}[1]{% \si@in@if@F\si@tempa{#1}{% \si@num@in@throw{Invalid token `#1' in numerical input}{% Only the tokens: \MessageBreak \si@tempa \MessageBreak are valid for numerical input. }% \si@bool@true\si@num@in@error \si@loop@exit }% \si@in@if@F\si@num@in@ignore{#1}{% \si@add@right@N\si@tempb{#1}% }% \si@in@if@T\si@num@in@symbols{#1}{% \si@bool@true\si@num@in@symbols@bool }% } \newcommand*{\si@num@in@finalise}{% \si@num@in@final@check \si@num@in@try{\si@num@in@final@tidy}% } \newcommand*{\si@num@in@final@check}{% \si@bool@true\si@num@in@mant@bool \si@empty@if@T\si@num@in@mant@dec{% \si@empty@if@T\si@num@in@mant@int{% \si@bool@false\si@num@in@mant@bool \si@empty@if@F\si@num@in@mant@uncert{% \si@num@in@throw{Uncertainty but no number}{% The mantissa contains only an uncertainty. }% }% }% }% \si@bool@if@T\si@num@in@mant@comp@bool{% \si@empty@if@T\si@num@in@mant@comp@dec{% \si@empty@if@T\si@num@in@mant@comp@int{% \si@empty@if@F\si@num@in@mant@comp@uncert{% \si@num@in@throw{Uncertainty but no number}{% The complex mantissa contains only an uncertainty. }% }% }% }% }% \si@bool@true\si@num@in@exp@bool \si@empty@if@T\si@num@in@exp@dec{% \si@empty@if@T\si@num@in@exp@int{% \si@bool@false\si@num@in@exp@bool \si@empty@if@F\si@num@in@exp@uncert{% \si@num@in@throw{Uncertainty but no number}{% The exponent contains only an uncertainty. }% }% \si@empty@if@F\si@num@in@exp@sign{% \si@num@in@throw{Sign but no exponent}{% The exponent contains only a sign. }% }% }% }% \si@bool@if@T\si@num@in@exp@comp@bool{% \si@empty@if@T\si@num@in@exp@comp@dec{% \si@empty@if@T\si@num@in@exp@comp@int{% \si@empty@if@F\si@num@in@exp@comp@uncert{% \si@num@in@throw{Uncertainty but no number}{% The complex exponent contains only an uncertainty. }% }% }% }% }% \si@bool@if@F\si@num@in@mant@bool{% \si@bool@if@F\si@num@in@mant@comp@bool{% \si@bool@if@F\si@num@in@exp@bool{% \si@bool@if@F\si@num@in@exp@comp@bool{% \si@num@in@throw{Empty numerical argument}{% The given `number' contains no information. }% }% }% }% }% } \newcommand*{\si@num@in@final@tidy}{% \si@num@in@final@tidy@aux{mant}% \si@num@in@final@tidy@aux{exp}% } \newcommand*{\si@num@in@final@tidy@aux}[1]{% \si@num@in@remove@zeros{#1}% \si@num@in@remove@zeros{#1@comp}% \si@num@in@zero@sign{#1}% } \newcommand*{\si@num@in@init}{% \si@bool@false\si@num@in@error \si@bool@false\si@num@in@symbols@bool \si@loop@over@macro\si@num@in@init@names\si@num@in@init@aux \si@bool@false\si@num@in@mant@bool \si@bool@false\si@num@in@mant@dec@bool \si@bool@false\si@num@in@mant@uncert@dec@bool \si@bool@false\si@num@in@mant@comp@bool \si@bool@false\si@num@in@mant@comp@dec@bool \si@bool@false\si@num@in@mant@comp@uncert@dec@bool \si@bool@false\si@num@in@exp@bool \si@bool@false\si@num@in@exp@dec@bool \si@bool@false\si@num@in@exp@uncert@dec@bool \si@bool@false\si@num@in@exp@comp@bool \si@bool@false\si@num@in@exp@comp@dec@bool \si@bool@false\si@num@in@exp@comp@uncert@dec@bool } \newcommand*{\si@num@in@init@aux}[1]{% \si@clear@cs{si@num@in@#1}% } \newcommand*{\si@num@in@init@names}{% {mant}% {mant@sign}% {mant@int}% {mant@dec}% {mant@uncert}% {mant@uncert@int}% {mant@uncert@dec}% {mant@comp}% {mant@comp@sign}% {mant@comp@int}% {mant@comp@dec}% {mant@comp@uncert}% {mant@comp@uncert@int}% {mant@comp@uncert@dec}% {exp}% {exp@sign}% {exp@int}% {exp@dec}% {exp@uncert}% {exp@uncert@int}% {exp@uncert@dec}% {exp@comp}% {exp@comp@sign}% {exp@comp@int}% {exp@comp@dec}% {exp@comp@uncert}% {exp@comp@uncert@int}% {exp@comp@uncert@dec}% } \newcommand*{\si@num@in@protect@tokens}{} \let\si@num@in@protect@tokens\si@num@pre@protect@tokens \newcommand*{\si@num@in@remove@zeros}[1]{% \si@in@cs@if@T{si@num@in@#1@int}{0}{% \def\si@tempa##10##2\si@stop{% \si@empty@tlist@if@TF{##1}{% \si@in@tlist@if@TF{##2}{0}{% \si@tempa##2\si@stop }{% \@namedef{si@num@in@#1@int}{##2}% }% }{% \@namedef{si@num@in@#1@int}{##10##2}% }% }% \si@let@Nc\si@tempb{si@num@in@#1@int}% \expandafter\si@tempa\si@tempb\si@stop \si@empty@cs@if@T{si@num@in@#1@int}{% \@namedef{si@num@in@#1@int}{0}% }% }% } \newcommand*{\si@num@in@rescan}[1]{% \begingroup \si@catcode@symbols \si@catcode@set{9}{9}% tab ignored \si@catcode@set{32}{9}% space ignored \si@catcode@set{126}{9}% tilde ignored \everyeof{\noexpand}% \endlinechar\m@ne\relax \si@clear@macro{\,}% \si@num@in@protect@tokens \protected@edef\@tempa{\scantokens{#1}}% \expandafter\endgroup\expandafter \def\expandafter\si@num@in@arg\expandafter{\@tempa}% } \newcommand*{\si@num@in@separate}{% \si@num@in@try{\si@num@in@sep@exp}% \si@num@in@separate@aux{mant}% \si@num@in@separate@aux{exp}% } \newcommand*{\si@num@in@separate@aux}[1]{% \si@num@in@try{\si@num@in@sep@sign{#1}}% \si@num@in@try{\si@num@in@sep@comp{#1}}% \si@num@in@try{\si@num@in@sep@dec{#1}}% \si@num@in@try{\si@num@in@sep@dec@comp{#1}}% \si@num@in@try{\si@num@in@sep@uncert{#1}}% \si@num@in@try{\si@num@in@sep@uncert{#1@comp}}% } \newcommand*{\si@num@in@sep@comp}[1]{% \si@empty@cs@if@F{si@num@in@#1}{% \si@empty@if@F\si@num@in@complex{% \si@let@Nc\si@tempa{si@num@in@#1}% \si@bool@false\si@tmp@bool \si@loop@over@macro\si@num@in@complex\si@num@in@sep@comp@aux@i \si@num@in@try{\si@num@in@sep@comp@aux@ii{#1}}% \si@num@in@try{\si@num@in@sep@comp@aux@iii{#1}}% }% }% } \newcommand*{\si@num@in@sep@comp@aux@i}[1]{% \def\si@tempb##1#1##2##3\si@stop{% \si@no@value@if@F{##2}{% \si@no@value@if@TF{##3}{% \si@bool@true\si@tmp@bool \def\si@tempa{##1}% \si@loop@exit }{% \si@num@in@throw{Misplaced complex root}{% The complex root token `#1' can only come at \MessageBreak the end of a number. }% \si@loop@exit }% }% }% \expandafter\si@tempb\si@tempa#1\si@no@value\si@stop } \newcommand*{\si@num@in@sep@comp@aux@ii}[1]{% \si@let@cN{si@num@in@#1@comp@bool}\si@tmp@bool \si@let@cN{si@num@in@#1}\si@tempa \si@bool@if@T\si@tmp@bool{% \si@empty@if@F\si@tempa{% \def\si@tempb##1{% \si@in@if@TF\si@num@in@signs{##1}{% \si@bool@if@TF\si@tmp@bool{% \si@num@in@throw{Duplicate sign found}{% Only a single sign can be given \MessageBreak in the complex part of a number. }% \si@loop@exit }{% \si@num@in@add{#1@comp@sign}{##1}% \si@bool@true\si@tmp@bool }% }{% \si@bool@if@TF\si@tmp@bool{% \si@num@in@add{#1@comp}{##1}% }{% \si@num@in@add{#1}{##1}% }% }% }% \si@bool@false\si@tmp@bool \si@clear@cs{si@num@in@#1}% \si@loop@over@macro\si@tempa\si@tempb }% }% } \newcommand*{\si@num@in@sep@comp@aux@iii}[1]{% \si@bool@cs@if@TF{si@num@in@#1@comp@bool}{% \si@bool@if@F\si@tmp@bool{% \si@let@cc{si@num@in@#1@comp@sign}{si@num@in@#1@sign}% \si@clear@cs{si@num@in@#1@sign}% \si@let@cc{si@num@in@#1@comp}{si@num@in@#1}% \si@clear@cs{si@num@in@#1}% }% }{% \expandafter\si@loop@over@macro\csname si@num@in@#1\endcsname \si@num@in@sep@aux@iv }% } \newcommand*{\si@num@in@sep@aux@iv}[1]{% \si@in@if@T\si@num@in@signs{#1}{% \si@num@in@throw{Duplicate sign found}{% Only a single sign can be given \MessageBreak in the real part of a number. }% \si@loop@exit }% } \newcommand*{\si@num@in@sep@dec}[1]{% \si@empty@cs@if@F{si@num@in@#1}{% \si@num@in@sep@dec@aux@i{#1}% }% } \newcommand*{\si@num@in@sep@dec@comp}[1]{% \si@bool@cs@if@T{si@num@in@#1@comp@bool}{% \si@empty@cs@if@TF{si@num@in@#1@comp}{% \si@let@cc{si@num@in@#1@comp@int}{si@num@in@#1@comp}% \si@let@cN{si@num@in@#1@comp}% }{% \si@num@in@sep@dec@aux@i{#1@comp}% }% }% } \newcommand*{\si@num@in@sep@dec@aux@i}[1]{% \si@let@Nc\si@tempa{si@num@in@#1}% \si@clear@macro\si@tempb \si@bool@false\si@tmp@bool \si@clear@cs{si@num@in@#1}% \si@loop@over@macro\si@num@in@decimal\si@num@in@sep@dec@aux@ii \si@num@in@try{\si@let@cN{si@num@in@#1@int}\si@tempa}% \si@num@in@try{\si@let@cN{si@num@in@#1@dec}\si@tempb}% \si@num@in@try{\si@let@cN{si@num@in@#1@dec@bool}\si@tmp@bool}% } \newcommand*{\si@num@in@sep@dec@aux@ii}[1]{% \si@in@if@T\si@tempa{#1}{% \si@bool@true\si@tmp@bool \def\si@tempb##1#1##2\si@stop{% \def\si@tempa{##1}% \def\si@tempb{##2}% }% \expandafter\si@tempb\si@tempa\si@stop \si@in@if@T\si@tempb{#1}{% \si@num@in@throw{Duplicate decimal token found}{% Only a single decimal marker token can be given \MessageBreak in numerical input. }% }% \si@loop@exit }% } \newcommand*{\si@num@in@sep@exp}{% \let\si@num@in@mant\si@num@in@arg \si@loop@over@macro\si@num@in@exponent\si@num@in@sep@exp@aux } \newcommand*{\si@num@in@sep@exp@aux}[1]{% \si@in@if@T\si@num@in@arg{#1}{% \def\si@tempa##1#1##2\si@stop{% \def\si@num@in@mant{##1}% \def\si@num@in@exp{##2}% }% \expandafter\si@tempa\si@num@in@arg\si@stop \si@in@if@T\si@num@in@exp{#1}{% \si@num@in@throw{Duplicate exponent token found}{% Only a single exponent marker token can be given \MessageBreak in numerical input. }% }% \si@loop@exit }% } \newcommand*{\si@num@in@sep@sign}[1]{% \si@empty@cs@if@F{si@num@in@#1}{% \si@replace@all@in@cs{si@num@in@#1}{-+}{\mp}% \si@replace@all@in@cs{si@num@in@#1}{+-}{\pm}% \expandafter\expandafter\expandafter\si@num@in@sep@sign@aux \csname si@num@in@#1\endcsname\si@stop{#1}% }% } \newcommand*{\si@num@in@sep@sign@aux}{} \def\si@num@in@sep@sign@aux#1#2\si@stop#3{% \si@in@if@TF\si@num@in@signs{#1}{% \@namedef{si@num@in@#3@sign}{#1}% \@namedef{si@num@in@#3}{#2}% }{% \@namedef{si@num@in@#3}{#1#2}% }% } \newcommand*{\si@num@in@sep@uncert}[1]{% \si@empty@cs@if@TF{si@num@in@#1@dec}{% \si@empty@cs@if@F{si@num@in@#1@int}{% \si@num@in@sep@uncert@aux@i{#1}{int}% }% }{% \si@num@in@sep@uncert@aux@i{#1}{dec}% \si@num@in@sep@uncert@check@int{#1}% }% } \newcommand*{\si@num@in@sep@uncert@aux@i}[2]{% \si@let@Nc\si@tempa{si@num@in@#1@#2}% \si@loop@over@macro\si@num@in@uncert@close\si@num@in@sep@uncert@aux@ii \si@num@in@try{\si@num@in@sep@uncert@aux@iii{#1}{#2}}% } \newcommand*{\si@num@in@sep@uncert@aux@ii}[1]{% \def\si@tempb##1#1##2##3\si@stop{% \si@no@value@if@F{##2}{% \si@no@value@if@TF{##3}{% \si@bool@true\si@tmp@bool \def\si@tempa{##1}% \si@loop@exit }{% \si@num@in@throw{Misplaced closing uncertainty token}{% The closing uncertainty token `#1' can only \MessageBreak come at the end of a number. }% \si@loop@exit }% }% }% \si@bool@false\si@tmp@bool \expandafter\si@tempb\si@tempa#1\si@no@value\si@stop \si@bool@if@T\si@tmp@bool{% \si@loop@exit }% } \newcommand*{\si@num@in@sep@uncert@aux@iii}[2]{% \si@bool@if@TF\si@tmp@bool{% \si@bool@false\si@tmp@bool \si@loop@over@macro\si@num@in@uncert@open \si@num@in@sep@uncert@aux@iv \si@num@in@try{\si@num@in@sep@uncert@aux@v{#1}{#2}}% }{% \si@loop@over@macro\si@num@in@uncert@open \si@num@in@sep@uncert@aux@vi }% } \newcommand*{\si@num@in@sep@uncert@aux@iv}[1]{% \si@in@if@T\si@tempa{#1}{% \si@bool@true\si@tmp@bool \def\si@tempb##1#1##2\si@stop{% \def\si@tempa{##1}% \def\si@tempb{##2}% }% \expandafter\si@tempb\si@tempa\si@stop \si@in@if@T\si@tempb{#1}{% \si@num@in@throw{Duplicate opening uncertainty token found}{% Only a single opening uncertainty token can be \MessageBreak given in numerical input. }% }% \si@loop@exit }% } \newcommand*{\si@num@in@sep@uncert@aux@v}[2]{% \si@bool@if@TF\si@tmp@bool{% \si@let@cN{si@num@in@#1@#2}\si@tempa \si@let@cN{si@num@in@#1@uncert}\si@tempb \si@empty@if@T\si@tempb{% \si@num@in@throw{Empty uncertainty given}{% The number given contains an empty uncertainty. }% }% }{% \si@num@in@throw{% Closing uncertainty token without matching opening% }{% The final token of a the number is a closing \MessageBreak uncertainty token, but no opening token was found \MessageBreak in this part of the number. }% }% } \newcommand*{\si@num@in@sep@uncert@aux@vi}[1]{% \si@in@if@T\si@tempa{#1}{% \si@num@in@throw{% Opening uncertainty token without matching closing% }{% The opening uncertainty token `#1' was found with no \MessageBreak matching closing token. }% \si@loop@exit }% } \newcommand*{\si@num@in@sep@uncert@check@int}[1]{% \def\si@num@in@sep@uncert@check@int@aux##1{% \si@in@cs@if@T{si@num@in@#1@int}{##1}{% \si@num@in@throw{Uncertainty in integer part}{% The opening uncertainty token `##1' was found in the \MessageBreak integer part of the input, but a decimal part was also given. }% \si@loop@exit }% }% \si@loop@over@macro\si@num@in@uncert@open \si@num@in@sep@uncert@check@int@aux \si@loop@over@macro\si@num@in@uncert@close \si@num@in@sep@uncert@check@int@aux } \newcommand*{\si@num@in@throw}{% \let\si@num@in@error\si@true \si@log@error } \newcommand*{\si@num@in@try}{% \si@bool@if@F\si@num@in@error } \newcommand*{\si@num@in@zero@sign}[1]{% \si@bool@cs@if@TF{si@num@in@#1@bool}{% \si@num@in@zero@sign@aux@i{#1}% }{% \si@num@in@zero@sign@aux@i{#1@comp}% }% } \newcommand*{\si@num@in@zero@sign@aux@i}[1]{% \si@empty@cs@if@TF{si@num@in@#1@int}{% \si@num@in@zero@sign@aux@ii{#1}% }{% \def\si@tempa{0}% \si@meaning@eq@cs@if@T{si@tempa}{si@num@in@#1@int}{% \si@num@in@zero@sign@aux@ii{#1}% }% }% } \newcommand*{\si@num@in@zero@sign@aux@ii}[1]{% \si@empty@cs@if@TF{si@num@in@#1@dec}{% \si@clear@cs{si@num@in@#1@sign}% }{% \def\si@tempa{0}% \def\si@tempb##1{% \si@in@if@F\si@tempa{##1}{% \si@bool@false\si@tmp@bool }% }% \si@bool@true\si@tmp@bool \si@loop@over@cs{si@num@in@#1@dec}\si@tempb \si@bool@if@T\si@tmp@bool{% \si@clear@cs{si@num@in@#1@sign}% }% }% } \newcommand*{\si@num@post@sign@token}{} \si@bool@new\si@num@post@plus@bool \si@bool@new\si@num@post@rnd@figures@bool \si@bool@new\si@num@post@rnd@places@bool \si@bool@new\si@num@post@sign@bool \si@bool@new\si@num@post@zero@dec@bool \si@bool@new\si@num@post@zero@exp@bool \si@bool@new\si@num@post@zero@int@bool \newcount\si@num@post@figures \newcount\si@num@post@places \newcommand*{\si@num@post@dec}{} \newcommand*{\si@num@post@int}{} \si@bool@new\si@num@post@carry@bool \si@bool@new\si@num@post@sig@bool \newcommand*{\si@num@post@rnd@tens}{} \newcount\si@num@post@rnd@cnt \newcount\si@num@post@dec@cnt \newcount\si@num@post@uncert@cnt \newcommand*{\si@num@post@rnd@check}[2]{% \@nameuse{si@num@post@#1}#2\relax \expandafter\ifnum\csname si@num@post@#1\endcsname<\z@\relax \si@log@error{Invalid input for rounding digits}{% The input for option 'numbers/process/round #1' \MessageBreak must be a positive integer. }% \fi } \si@keys@family{numbers/process} \pgfkeys{ /siunitx/numbers/process, add zero decimal/.is siunitx switch = {num@post@zero@dec}, add zero integer/.is siunitx switch = {num@post@zero@int}, explicit sign/.store in = \si@num@post@sign@token, include explicit sign/.is siunitx switch = {num@post@sign}, retain explicit plus/.is siunitx switch = {num@post@plus}, retain zero exponent/.is siunitx switch = {num@post@zero@exp}, round mode/.is choice, round mode/.cd, figures/.code = {% \si@bool@true\si@num@post@rnd@figures@bool \si@bool@false\si@num@post@rnd@places@bool }, off/.code = {% \si@bool@false\si@num@post@rnd@figures@bool \si@bool@false\si@num@post@rnd@places@bool }, places/.code = {% \si@bool@false\si@num@post@rnd@figures@bool \si@bool@true\si@num@post@rnd@places@bool }, /siunitx/numbers/process, round figures/.code = {\si@num@post@rnd@check{figures}{#1}}, round places/.code = {\si@num@post@rnd@check{places}{#1}}, add zero decimal = true, add zero integer = true, explicit sign = +, include explicit sign = false, retain explicit plus = false, retain zero exponent = false, round mode = off, round figures = 2, round places = 2 } \newcommand*{\si@num@post@process}{% \si@bool@if@F\si@num@in@error{% \si@num@post@sign \si@num@post@zero@fill \si@num@post@exponent \si@bool@if@F\si@num@in@symbols@bool{% \si@num@post@round \si@bool@if@F\si@num@post@rnd@figures@bool{% \si@bool@if@F\si@num@post@rnd@places@bool{% \si@num@post@uncert }% }% }% }% } \newcommand*{\si@num@post@add@sign}[1]{% \si@bool@cs@if@TF{si@num@in@#1@bool}{% \si@num@post@add@sign@aux{#1}% }{% \si@bool@cs@if@T{si@num@in@#1@comp@bool}{% \si@num@post@add@sign@aux{#1@comp}% }% }% } \newcommand*{\si@num@post@add@sign@aux}[1]{% \si@empty@cs@if@T{si@num@in@#1@sign}{% \@namedef{si@num@in@#1@sign}{\si@num@post@sign@token}% }% } \newcommand*{\si@num@post@exponent}{% \si@bool@if@F\si@num@post@zero@exp@bool{% \si@expand@tlist\si@tempa{% \si@num@in@exp@int \si@num@in@exp@dec \si@num@in@exp@comp@int \si@num@in@exp@comp@dec }% \si@in@if@T\si@tempa{0}{% \def\si@tempb##10000##2\si@stop{% \si@empty@tlist@if@T{##1}{% \def\si@num@in@exp@int{}% \def\si@num@in@exp@dec{}% \def\si@num@in@exp@comp@int{}% \def\si@num@in@exp@comp@dec{}% \si@bool@false\si@num@in@exp@bool \si@bool@false\si@num@in@exp@comp@bool }% }% \expandafter\si@tempb\si@tempa0000\si@stop }% }% } \newcommand*{\si@num@post@plus}[1]{% \si@bool@cs@if@TF{si@num@in@#1@bool}{% \si@num@post@plus@aux{#1}% }{% \si@bool@cs@if@T{si@num@in@#1@comp@bool}{% \si@num@post@plus@aux{#1@comp}% }% }% } \newcommand*{\si@num@post@plus@aux}[1]{% \def\si@tempa{+}% \si@meaning@eq@cs@if@T{si@num@in@#1@sign}{si@tempa}{% \si@clear@cs{si@num@in@#1@sign}% }% } \newcommand*{\si@num@post@sign}{% \si@bool@if@F\si@num@post@plus@bool{% \si@num@post@plus{mant}% \si@num@post@plus{exp}% }% \si@bool@if@T\si@num@post@sign@bool{% \si@num@post@add@sign{mant}% \si@num@post@add@sign{exp}% }% } \newcommand*{\si@num@post@round}{% \si@num@post@round@aux{figures}% \si@num@post@round@aux{places}% } \newcommand*{\si@num@post@round@aux}[1]{% \si@bool@cs@if@T{si@num@post@rnd@#1@bool}{% \@nameuse{si@num@post@rnd@#1}{mant}% \@nameuse{si@num@post@rnd@#1}{mant@comp}% \@nameuse{si@num@post@rnd@#1}{exp}% \@nameuse{si@num@post@rnd@#1}{exp@comp}% }% } \newcommand*{\si@num@post@rnd@dec}[1]{% \si@num@if@F{\si@num@post@rnd@cnt>\@ne}{% \si@tempcnt\expandafter\@car\si@num@post@dec\@nil\relax \si@bool@if@T\si@num@post@carry@bool{% \advance\si@tempcnt\@ne\relax }% \si@bool@false\si@num@post@carry@bool \si@num@if@TF{\si@num@post@rnd@cnt=\@ne}{% \si@num@if@T{\si@tempcnt>4}{% \si@bool@true\si@num@post@carry@bool }% }{% \si@num@if@T{\si@tempcnt=10}{% \si@bool@true\si@num@post@carry@bool \si@tempcnt\z@\relax }% \si@nameedef{si@num@in@#1@dec}{% \the\si@tempcnt \@nameuse{si@num@in@#1@dec}% }% }% }% \advance\si@num@post@rnd@cnt\m@ne\relax \edef\si@num@post@dec{\expandafter\@cdr\si@num@post@dec\@nil}% } \newcommand*{\si@num@post@rnd@figures}[1]{% \si@num@post@rnd@cnt\z@\relax \si@bool@false\si@num@post@sig@bool \si@clear@macro\si@num@post@dec \si@clear@macro\si@num@post@int \si@whiledo@empty@cs@F{si@num@in@#1@int}{% \si@num@post@rnd@figures@aux@i{#1}{int}% }% \si@whiledo@empty@cs@F{si@num@in@#1@dec}{% \si@num@post@rnd@figures@aux@i{#1}{dec}% }% \si@bool@if@TF\si@num@post@sig@bool{% \si@num@if@TF{\si@num@post@rnd@cnt>\si@num@post@figures}{% \si@num@post@rnd@figures@aux@ii{#1}% }{% \si@num@post@rnd@figures@aux@iii{#1}% }% }{% \@namedef{si@num@in@#1@int}{0}% \si@clear@cs{si@num@in@#1@dec}% \si@bool@cs@false{si@num@in@#1@dec@bool}% }% } \newcommand*{\si@num@post@rnd@figures@aux@i}[2]{% \si@tempcnt\expandafter\expandafter\expandafter\@car \csname si@num@in@#1@#2\endcsname\@nil\relax \si@nameedef{si@num@post@#2}{% \the\si@tempcnt \@nameuse{si@num@post@#2}% }% \si@bool@if@F\si@num@post@sig@bool{% \si@num@if@F{\si@tempcnt=\z@}{% \si@bool@true\si@num@post@sig@bool }% }% \si@bool@if@T\si@num@post@sig@bool{% \advance\si@num@post@rnd@cnt\@ne\relax }% \si@nameedef{si@num@in@#1@#2}{% \expandafter\expandafter\expandafter\@cdr \csname si@num@in@#1@#2\endcsname\@nil }% } \newcommand*{\si@num@post@rnd@figures@aux@ii}[1]{% \advance\si@num@post@rnd@cnt-\si@num@post@figures\relax \si@whiledo@empty@F\si@num@post@dec{% \si@num@post@rnd@dec{#1}% }% \si@whiledo@empty@F\si@num@post@int{% \si@num@post@rnd@figures@int{#1} }% \si@bool@if@T\si@num@post@carry@bool{% \si@nameedef{si@num@in@#1@int}{% 1% \@nameuse{si@num@in@#1@int}% }% \si@empty@cs@if@F{si@num@in@#1@dec}{% \si@reverse@cs{si@num@in@#1@dec}% \si@nameedef{si@num@in@#1@dec}{% \expandafter\expandafter\expandafter\@cdr \csname si@num@in@#1@dec\endcsname\@nil }% \si@reverse@cs{si@num@in@#1@dec}% }% }% } \newcommand*{\si@num@post@rnd@figures@aux@iii}[1]{% \advance\si@num@post@rnd@cnt-\si@num@post@figures\relax \si@num@post@rnd@cnt-\si@num@post@rnd@cnt\relax \si@reverse@macro\si@num@post@dec \si@reverse@macro\si@num@post@int \si@let@cN{si@num@in@#1@dec}\si@num@post@dec \si@let@cN{si@num@in@#1@int}\si@num@post@int \si@num@post@rnd@pad{#1}% } \newcommand*{\si@num@post@rnd@figures@int}[1]{% \si@num@if@T{\si@num@post@rnd@cnt>\z@}{% \si@nameedef{si@num@in@#1@int}{% 0% \@nameuse{si@num@in@#1@int}% }% }% \si@num@if@F{\si@num@post@rnd@cnt>\@ne}{% \si@tempcnt\expandafter\@car\si@num@post@int\@nil\relax \si@bool@if@T\si@num@post@carry@bool{% \advance\si@tempcnt\@ne\relax }% \si@bool@false\si@num@post@carry@bool \si@num@if@TF{\si@num@post@rnd@cnt=\@ne}{% \si@num@if@T{\si@tempcnt>4}{% \si@bool@true\si@num@post@carry@bool }% }{% \si@num@if@T{\si@tempcnt=10}{% \si@bool@true\si@num@post@carry@bool \si@tempcnt\z@\relax }% \si@nameedef{si@num@in@#1@int}{% \the\si@tempcnt \@nameuse{si@num@in@#1@int}% }% }% }% \advance\si@num@post@rnd@cnt\m@ne\relax \edef\si@num@post@int{\expandafter\@cdr\si@num@post@int\@nil}% } \newcommand*{\si@num@post@rnd@pad}[1]{% \si@whiledo@num@T{\si@num@post@rnd@cnt>\z@}{% \si@nameedef{si@num@in@#1@dec}{% \@nameuse{si@num@in@#1@dec}% 0% }% \advance\si@num@post@rnd@cnt\m@ne\relax }% } \newcommand*{\si@num@post@rnd@places}[1]{% \si@num@if@TF{\si@num@post@places=\z@}{% \si@clear@cs{si@num@in@#1@dec}% \si@bool@cs@false{si@num@in@#1@dec@bool}% }{% \si@num@post@rnd@places@aux@i{#1}% }% } \newcommand*{\si@num@post@rnd@places@aux@i}[1]{% \si@empty@cs@if@T{si@num@in@#1@dec}{% \@namedef{si@num@in@#1@dec}{0}% }% \si@num@post@rnd@cnt\si@elt@count@cs{si@num@in@#1@dec}\relax \expandafter\expandafter\expandafter\ifnum \csname si@num@in@#1@dec\endcsname=\z@\relax \si@num@post@rnd@cnt\si@num@post@places\relax \si@clear@cs{si@num@in@#1@dec}% \expandafter\si@num@post@rnd@pad \else \expandafter\si@num@post@rnd@places@aux@ii \fi {#1}% } \newcommand*{\si@num@post@rnd@places@aux@ii}[1]{% \advance\si@num@post@rnd@cnt-\si@num@post@places\relax \si@num@if@TF{\si@num@post@rnd@cnt<\z@}{% \si@num@post@rnd@cnt-\si@num@post@rnd@cnt\relax \si@num@post@rnd@pad{#1}% }{% \si@num@post@rnd@places@init{#1}% \si@num@post@rnd@places@aux@iii{#1}% }% } \newcommand*{\si@num@post@rnd@places@aux@iii}[1]{% \si@empty@if@TF\si@num@post@dec{% \si@whiledo@empty@F\si@num@post@int{% \si@num@post@rnd@places@int{#1}% }% \si@bool@if@T\si@num@post@carry@bool{% \si@nameedef{si@num@in@#1@int}{% 1% \@nameuse{si@num@in@#1@int}% }% }% }{% \si@num@post@rnd@dec{#1}% \si@num@post@rnd@places@aux@iii{#1}% }% } \newcommand*{\si@num@post@rnd@places@int}[1]{% \si@tempcnt\expandafter\@car\si@num@post@int\@nil\relax \edef\si@num@post@int{\expandafter\@cdr\si@num@post@int\@nil}% \si@bool@if@T\si@num@post@carry@bool{% \advance\si@tempcnt\@ne\relax }% \si@bool@false\si@num@post@carry@bool \si@num@if@T{\si@tempcnt=10}{% \si@bool@true\si@num@post@carry@bool \si@tempcnt\z@\relax }% \si@nameedef{si@num@in@#1@int}{% \the\si@tempcnt \@nameuse{si@num@in@#1@int}% }% } \newcommand*{\si@num@post@rnd@places@init}[1]{% \si@let@Nc\si@num@post@dec{si@num@in@#1@dec}% \si@let@Nc\si@num@post@int{si@num@in@#1@int}% \si@reverse@macro\si@num@post@dec \si@reverse@macro\si@num@post@int \si@clear@cs{si@num@in@#1@dec}% \si@clear@cs{si@num@in@#1@int}% \si@bool@false\si@num@post@carry@bool } \newcommand*{\si@num@post@zero@fill}{% \si@bool@if@T\si@num@post@zero@int@bool{% \si@num@post@zero@fill@aux{mant}{int}% \si@num@post@zero@fill@aux{mant@comp}{int}% \si@num@post@zero@fill@aux{exp}{int}% \si@num@post@zero@fill@aux{exp@comp}{int}% }% \si@bool@if@T\si@num@post@zero@dec@bool{% \si@num@post@zero@fill@aux{mant}{dec}% \si@num@post@zero@fill@aux{mant@comp}{dec}% \si@num@post@zero@fill@aux{exp}{dec}% \si@num@post@zero@fill@aux{exp@comp}{dec}% }% } \newcommand*{\si@num@post@zero@fill@aux}[2]{% \si@bool@cs@if@T{si@num@in@#1@dec@bool}{% \si@empty@cs@if@T{si@num@in@#1@#2}{% \@namedef{si@num@in@#1@#2}{0}% }% }% } \newcommand*{\si@num@post@uncert}{% \si@num@post@uncert@aux@i{mant}% \si@num@post@uncert@aux@i{exp}% } \newcommand*{\si@num@post@uncert@aux@i}[1]{% \si@num@post@uncert@aux@ii{#1}% \si@num@post@uncert@aux@ii{#1@comp}% } \newcommand*{\si@num@post@uncert@aux@ii}[1]{% \si@bool@cs@if@TF{si@num@in@#1@dec@bool}{% \si@num@post@uncert@dec{#1}% }{% \si@num@post@uncert@int{#1}% }% } \newcommand*{\si@num@post@uncert@dec}[1]{% \si@empty@cs@if@F{si@num@in@#1@uncert}{% \si@bool@cs@true{si@num@in@#1@uncert@dec@bool}% \si@num@post@dec@cnt\si@elt@count@cs{si@num@in@#1@dec}\relax \si@num@post@uncert@cnt\si@elt@count@cs{si@num@in@#1@uncert}\relax \si@num@if@TF{\si@num@post@uncert@cnt>\si@num@post@dec@cnt}{% \si@num@post@uncert@dec@aux@i{#1}% }{% \si@num@post@uncert@dec@aux@ii{#1}% }% }% } \newcommand*{\si@num@post@uncert@dec@aux@i}[1]{% \def\si@tempa##1{% \si@num@if@TF{\si@num@post@uncert@cnt>\si@num@post@dec@cnt}{% \si@add@right@cs@N{si@num@in@#1@uncert@int}{##1}% }{% \si@add@right@cs@N{si@num@in@#1@uncert@dec}{##1}% }% \advance\si@num@post@uncert@cnt\m@ne\relax }% \si@loop@over@cs{si@num@in@#1@uncert}\si@tempa } \newcommand*{\si@num@post@uncert@dec@aux@ii}[1]{% \def\si@tempa{% \si@add@right@cs@N{si@num@in@#1@uncert@dec}{0}% \advance\si@num@post@uncert@cnt\@ne\relax }% \si@whiledo@num@T{\si@num@post@uncert@cnt<\si@num@post@dec@cnt}{% \si@tempa }% \def\si@tempa##1{% \si@add@right@cs@O{si@num@in@#1@uncert@dec}##1% }% \expandafter\si@tempa\expandafter {\csname si@num@in@#1@uncert\endcsname}% \si@bool@if@T\si@num@post@zero@int@bool{% \@namedef{si@num@in@#1@uncert@int}{0}% }% } \newcommand*{\si@num@post@uncert@int}[1]{% \si@let@cc{si@num@in@#1@uncert@int}{si@num@in@#1@uncert}% } \newcommand*{\si@num@out@bracket@close}{} \newcommand*{\si@num@out@bracket@open}{} \newcommand*{\si@num@out@complex@root}{} \newcommand*{\si@num@out@decimal}{} \newcommand*{\si@num@out@exp@base}{} \newcommand*{\si@num@out@exp@prod}{} \newcommand*{\si@num@out@group@sep}{} \newcommand*{\si@num@out@uncert@close}{} \newcommand*{\si@num@out@uncert@open}{} \newcommand*{\si@num@out@uncert@space}{} \si@bool@new\si@num@out@bracket@use@bool \si@bool@new\si@num@out@group@digits@bool \si@bool@new\si@num@out@group@four@bool \si@bool@new\si@num@out@tight@bool \si@bool@new\si@num@out@uncert@sep@bool \newcommand*{\si@num@out@mant}{} \newcommand*{\si@num@out@mant@sign}{} \newcommand*{\si@num@out@mant@int}{} \newcommand*{\si@num@out@mant@dec}{} \newcommand*{\si@num@out@mant@uncert}{} \newcommand*{\si@num@out@mant@uncert@dec}{} \newcommand*{\si@num@out@mant@uncert@int}{} \newcommand*{\si@num@out@mant@comp}{} \newcommand*{\si@num@out@mant@comp@sign}{} \newcommand*{\si@num@out@mant@comp@int}{} \newcommand*{\si@num@out@mant@comp@dec}{} \newcommand*{\si@num@out@mant@comp@uncert}{} \newcommand*{\si@num@out@mant@comp@uncert@dec}{} \newcommand*{\si@num@out@mant@comp@uncert@int}{} \newcommand*{\si@num@out@exp}{} \newcommand*{\si@num@out@exp@sign}{} \newcommand*{\si@num@out@exp@int}{} \newcommand*{\si@num@out@exp@dec}{} \newcommand*{\si@num@out@exp@uncert}{} \newcommand*{\si@num@out@exp@uncert@dec}{} \newcommand*{\si@num@out@exp@uncert@int}{} \newcommand*{\si@num@out@exp@comp}{} \newcommand*{\si@num@out@exp@comp@sign}{} \newcommand*{\si@num@out@exp@comp@int}{} \newcommand*{\si@num@out@exp@comp@dec}{} \newcommand*{\si@num@out@exp@comp@uncert}{} \newcommand*{\si@num@out@exp@comp@uncert@dec}{} \newcommand*{\si@num@out@exp@comp@uncert@int}{} \newcommand*{\si@num@out@result}{} \si@bool@new\si@num@out@mant@parts@bool \si@bool@new\si@num@out@mant@comp@parts@bool \si@bool@new\si@num@out@exp@parts@bool \si@bool@new\si@num@out@exp@comp@parts@bool \si@bool@new\si@num@out@mant@comp@bool \si@bool@new\si@num@out@exp@comp@bool \si@keys@family{numbers/output} \pgfkeys{ /siunitx/numbers/output, close bracket/.store in = \si@num@out@bracket@close, close uncertainty/.store in = \si@num@out@uncert@close, complex root/.store in = \si@num@out@complex@root, decimal marker/.store in = \si@num@out@decimal, exponent base/.store in = \si@num@out@exp@base, exponent product/.store in = \si@num@out@exp@prod, group digits/.is siunitx switch = {num@out@group@digits}, group four digits/.is siunitx switch = {num@out@group@four}, group separator/.store in = \si@num@out@group@sep, open bracket/.store in = \si@num@out@bracket@open, open uncertainty/.store in = \si@num@out@uncert@open, separate uncertainty/.is siunitx switch = {num@out@uncert@sep}, tight spacing/.is siunitx switch = {num@out@tight}, uncertainty space/.store in = \si@num@out@uncert@space, %( use brackets/.is siunitx switch = {num@out@bracket@use}, close bracket = ),% ( close uncertainty = ), complex root = i, decimal marker = ., exponent base = 10, exponent product = \times, group digits = true, group four digits = false, group separator = {\,}, open bracket = (, %) open uncertainty = (, %) separate uncertainty = false, tight spacing = false, use brackets = true, uncertainty space = {}, } \newcommand*{\si@num@out@process}{% \si@num@out@init \si@num@out@core \si@num@out@complex \si@num@out@sign{mant}% \si@num@out@sign{exp}% \si@num@out@exponent } \newcommand*{\si@num@out@add}[1]{% \si@add@right@cs@N{si@num@out@#1}% } \newcommand*{\si@num@out@add@C}[2]{% \expandafter\si@num@out@add@C@aux\expandafter {\csname si@num@out@#2\endcsname}{#1}% } \newcommand*{\si@num@out@add@C@aux}[2]{% \si@add@right@cs@O{si@num@out@#2}{#1}% } \newcommand*{\si@num@out@add@maths}[2]{% \si@empty@if@F#2{% \expandafter\si@num@out@add@maths@aux\expandafter{#2}{#1}% }% } \newcommand*{\si@num@out@add@maths@aux}[2]{% \si@num@out@add{#2}{\ensuremath{#1}}% } \newcommand*{\si@num@out@add@pm}[1]{% \si@bool@if@TF\si@num@out@tight@bool{% \si@num@out@add@maths{#1}{{\pm}}% }{% \def\si@tempa{\pm}% \si@num@out@add@maths{#1}{\si@tempa}% }% } \newcommand*{\si@num@out@bracket@comp}[1]{% \si@bool@cs@if@T{si@num@out@#1@comp@bool}{% \si@bool@cs@false{si@num@out@#1@parts@bool}% \si@bool@cs@false{si@num@out@#1@comp@parts@bool}% }% \si@num@out@brackets@aux@i{#1}{comp}% } \newcommand*{\si@num@out@bracket@parts}[1]{% \si@num@out@brackets@aux@i{#1}{parts}% } \newcommand*{\si@num@out@brackets@aux@i}[2]{% \si@empty@cs@if@F{si@num@out@#1}{% \si@bool@if@T\si@num@out@bracket@use@bool{% \si@bool@cs@if@T{si@num@out@#1@#2@bool}{% \si@num@out@bracket@aux@ii{#1}% \si@bool@cs@false{si@num@out@#1@#2@bool}% }% }% }% } \newcommand*{\si@num@out@bracket@aux@ii}[1]{% \si@add@left@cs@O{si@num@out@#1}\si@num@out@bracket@open \si@add@right@cs@O{si@num@out@#1}\si@num@out@bracket@close } \newcommand*{\si@num@out@complex}{% \si@num@out@complex@aux{mant}% \si@num@out@complex@aux{exp}% } \newcommand*{\si@num@out@complex@aux}[1]{% \si@num@out@bracket@parts{#1@comp}% \si@bool@cs@if@T{si@num@in@#1@comp@bool}{% \si@num@out@add@maths{#1@comp}{\si@num@out@complex@root}% \si@num@out@bracket@parts{#1}% \si@empty@cs@if@F{si@num@out@#1}{% \si@num@out@sign{#1@comp}% \si@bool@cs@true{si@num@out@#1@comp@bool}% }% }% \si@num@out@add@C{#1}{#1@comp}% } \newcommand*{\si@num@out@copy}[1]{% \expandafter\si@num@out@copy@aux\csname si@num@in@#1\endcsname{#1}% } \newcommand*{\si@num@out@copy@aux}[2]{% \si@add@right@cs@O{si@num@out@#2}{#1}% } \newcommand*{\si@num@out@copy@maths}[1]{% \expandafter\si@num@out@copy@maths@aux \csname si@num@in@#1\endcsname{#1}% } \newcommand*{\si@num@out@copy@maths@aux}[2]{% \si@num@out@add@maths{#2}#1% } \newcommand*{\si@num@out@core}{% \si@num@out@core@aux@i{mant}% \si@num@out@core@aux@i{exp}% } \newcommand*{\si@num@out@core@aux@i}[1]{% \si@num@out@core@aux@ii{#1}% \si@num@out@core@aux@ii{#1@comp}% } \newcommand*{\si@num@out@core@aux@ii}[1]{% \si@bool@cs@if@T{si@num@in@#1@bool}{% \si@num@out@group@digits{#1}% \si@empty@cs@if@F{si@num@in@#1@uncert}{% \si@num@out@uncert{#1}% }% }% } \newcommand*{\si@num@out@exponent}{% \si@empty@cs@if@F{si@num@out@mant}{% \si@empty@cs@if@F{si@num@out@exp}{% \si@num@out@bracket@comp{mant}% \si@num@out@bracket@parts{mant}% }% }% \si@num@out@add@C{result}{mant}% \si@empty@cs@if@F{si@num@out@mant}{% \si@empty@cs@if@F{si@num@out@exp}{% \si@bool@if@TF\si@num@out@tight@bool{% \expandafter\def\expandafter\si@tempa\expandafter {\expandafter{\si@num@out@exp@prod}}% \si@num@out@add@maths{result}\si@tempa }{% \si@num@out@add@maths{result}{\si@num@out@exp@prod}% }% }% }% \si@empty@cs@if@F{si@num@out@exp}{% \si@num@out@add@C{result}{exp@base}% \si@num@out@add{result}{^\bgroup}% \si@num@out@add@C{result}{exp}% \si@num@out@add{result}{\egroup}% }% } \newcommand*{\si@num@out@group@digits}[1]{% \si@num@out@copy{#1@dec}% \si@num@out@copy{#1@int}% \si@bool@if@T\si@num@out@group@digits@bool{% \si@bool@if@F\si@num@in@symbols@bool{% \si@num@out@group@digits@aux@i{#1}{dec}% \si@num@out@group@digits@aux@i{#1}{int}% }% }% \si@num@out@add@C{#1}{#1@int}% \si@bool@cs@if@T{si@num@in@#1@dec@bool}{% \si@num@out@add@maths{#1}{\si@num@out@decimal}% \si@num@out@add@C{#1}{#1@dec}% }% } \newcommand*{\si@num@out@group@digits@aux@i}[2]{% \si@empty@cs@if@F{si@num@in@#1@#2}{% \si@bool@if@TF\si@num@out@group@four@bool{% \si@num@out@group@digits@aux@ii{#1}{#2}% }{% \si@num@out@group@five@if@T{si@num@in@#1@#2}{% \si@num@out@group@digits@aux@ii{#1}{#2}% }% }% }% } \newcommand*{\si@num@out@group@digits@aux@ii}[2]{% \si@clear@cs{si@num@out@#1@#2}% \@nameuse{si@num@out@group@#2}{#1}% } \newcommand*{\si@num@out@group@dec}[1]{% \def\si@num@out@group@dec@aux##1##2##3##4{% \si@empty@tlist@if@TF{##2}{% \si@num@out@add{#1@dec}{##1}% }{% \si@empty@tlist@if@TF{##3}{% \si@num@out@add{#1@dec}{##1##2}% }{% \si@num@out@add{#1@dec}{##1##2##3}% \si@empty@tlist@if@F{##4}{% \si@num@out@add@maths{#1@dec}{\si@num@out@group@sep}% \si@num@out@group@dec@aux##4% }% }% }% }% \expandafter\expandafter\expandafter\si@num@out@group@dec@aux \csname si@num@in@#1@dec\endcsname{}{}{}% } \newcommand*{\si@num@out@group@dec@aux}{} \newcommand*{\si@num@out@group@five@if@T}[1]{% \expandafter\expandafter\expandafter\si@num@out@group@five@if@aux \csname #1\endcsname\@empty\@empty\@empty\@empty\si@stop } \newcommand*{\si@num@out@group@five@if@aux}{} \def\si@num@out@group@five@if@aux#1#2#3#4#5\si@stop{% \edef\si@tempa{#5}% \si@empty@if@F\si@tempa } \newcommand*{\si@num@out@group@int}[1]{% \def\si@num@out@group@int@aux@iii##1##2##3##4{% \si@num@out@add{#1@int}{##1##2##3}% \si@stop@if@F{##4}{% \si@num@out@add@maths{#1@int}{\si@num@out@group@sep}% \si@num@out@group@int@aux@iii##4% }% }% \expandafter\si@num@out@group@int@aux@i \csname si@num@in@#1@int\endcsname } \newcommand*{\si@num@out@group@int@aux@i}[1]{% \expandafter\si@num@out@group@int@aux@ii\expandafter {\expandafter}#1{}{}{}% } \newcommand*{\si@num@out@group@int@aux@ii}[4]{% \si@empty@tlist@if@TF{#2}{% \si@num@out@group@int@aux@iii#1\si@stop }{% \si@empty@tlist@if@TF{#3}{% \si@num@out@group@int@aux@iii{}{}#1#2\si@stop }{% \si@empty@tlist@if@TF{#4}{% \si@num@out@group@int@aux@iii{}#1#2#3\si@stop }{% \si@num@out@group@int@aux@ii{#1#2#3#4}% }% }% }% } \newcommand*{\si@num@out@group@int@aux@iii}{} \newcommand*{\si@num@out@init}{% \si@loop@over@macro\si@num@in@init@names\si@num@out@init@aux \si@clear@macro\si@num@out@result \si@bool@false\si@num@out@mant@parts@bool \si@bool@false\si@num@out@mant@comp@parts@bool \si@bool@false\si@num@out@exp@parts@bool \si@bool@false\si@num@out@exp@comp@parts@bool \si@bool@false\si@num@out@mant@comp@bool \si@bool@false\si@num@out@exp@comp@bool } \newcommand*{\si@num@out@init@aux}[1]{% \si@clear@cs{si@num@out@#1}% } \newcommand*{\si@num@out@sign}[1]{% \si@bool@if@TF\si@num@out@tight@bool{% \si@let@Nc\si@tempa{si@num@in@#1@sign}% \expandafter\def\expandafter\si@tempa\expandafter {\expandafter{\si@tempa}}% \si@num@out@add@maths{#1@sign}\si@tempa }{% \si@num@out@copy@maths{#1@sign}% }% \si@num@out@sign@aux@i{#1}% } \newcommand*{\si@num@out@sign@aux@i}[1]{% \expandafter\si@num@out@sign@aux@ii \csname si@num@out@#1@sign\endcsname{si@num@out@#1}% } \newcommand*{\si@num@out@sign@aux@ii}[2]{% \si@add@left@cs@O{#2}{#1}% } \newcommand*{\si@num@out@uncert}[1]{% \si@bool@if@TF\si@num@out@uncert@sep@bool{% \si@bool@cs@true{si@num@out@#1@parts@bool}% \si@num@out@group@digits{#1@uncert}% \si@num@out@add@pm{#1}% \si@num@out@add@C{#1}{#1@uncert}% }{% \si@num@out@add@maths{#1@uncert}{\si@num@out@uncert@open}% \si@num@out@copy{#1@uncert}% \si@num@out@add@maths{#1@uncert}{\si@num@out@uncert@close}% \si@num@out@add@maths{#1}{\si@num@out@uncert@space}% \si@num@out@add@C{#1}{#1@uncert}% }% } \newcommand*{\si@num@print}{% \expandafter\si@print@num\expandafter{\si@num@out@result}% TEMP } \edef\si@tempa{% \noexpand\NC@do S% \noexpand\NC@do s% \the\NC@list } \newcolumntype{S}{} \newcolumntype{s}{} \NC@list\expandafter{\si@tempa} \newcommand*{\si@tab@rewrite@create}[1]{% \expandafter\renewcommand\expandafter*\expandafter{% \csname NC@rewrite@#1\endcsname }[1][]{% \edef\si@tempa{% \the\@temptokena >{\noexpand\si@tab@collect@begin[\unexpanded{##1}]{#1}}% c% <{\noexpand\si@tab@print@out}% }% \@temptokena\expandafter{\si@tempa}% \NC@find }% } \AtBeginDocument{% \si@tab@rewrite@create{s}% \si@tab@rewrite@create{S}% \@ifpackageloaded{cellspace}{% \newcolumntype{C}[1]{% >{\bcolumn #1\@nil}#1<{\ecolumn}% }% }{}% } \newcommand*{\si@tab@collect@after}{} \newcommand*{\si@tab@collect@before}{} \newcommand*{\si@tab@collect@body}{} \newcommand*{\si@tab@collect@num}{} \si@bool@new\si@tab@collect@after@bool \si@bool@new\si@tab@collect@before@bool \newcommand*{\si@tab@collect@begin}[2][]{% \begingroup \pgfqkeys{/siunitx}{#1}% \def\si@tab@collect@body{}% \@nameuse{si@tab@collect@begin@#2}% \si@tab@collect@get } \newcommand*{\si@tab@collect@begin@s}{% \si@bool@false\si@tab@collect@before@bool \let\si@tab@collect@token\si@tab@collect@token@s \let\si@tab@print@out\si@tab@print@out@s \def\si@tab@collect@braced##1{% \si@add@right@N\si@tab@collect@body{{##1}}% \si@tab@collect@next }% } \newcommand*{\si@tab@collect@begin@S}{% \def\si@tab@collect@after{}% \def\si@tab@collect@before{}% \si@bool@true\si@tab@collect@before@bool \let\si@tab@collect@token\si@tab@collect@token@S \let\si@tab@print@out\si@tab@print@out@S \si@expand@tlist\si@tab@collect@num{% \si@num@in@ignore \si@num@in@signs \si@num@in@digits \si@num@in@decimal \si@num@in@exponent \si@num@in@complex \si@num@in@symbols \si@num@in@uncert@open \si@num@in@uncert@close }% \def\si@tab@collect@braced##1{% \si@bool@if@TF\si@tab@collect@before@bool{% \si@add@right@N\si@tab@collect@before{##1}% }{% \si@bool@false\si@tab@collect@before@bool \si@bool@true\si@tab@collect@after@bool \si@add@right@N\si@tab@collect@after{##1}% }% \si@tab@collect@next }% } \newcommand*{\si@tab@collect@braced}{} \newcommand*{\si@tab@collect@expand}[1]{% \edef\si@tempa{% \expandafter\si@tab@collect@expand@aux@i\meaning#1:->\si@stop }% \si@meaning@eq@if@TF\si@tempa\si@tab@collect@expand@aux@ii{% \si@tab@collect@before \def\si@tab@collect@before{}% \expandafter\def\expandafter\si@tab@collect@next\expandafter{% \expandafter\si@tab@collect@get#1% }% }{% \si@bool@if@TF\si@tab@collect@before@bool{% \si@add@right@N\si@tab@collect@before{#1}% }{% \si@bool@true\si@tab@collect@after@bool \si@bool@false\si@tab@collect@before@bool \si@add@right@N\si@tab@collect@after{#1}% }% }% } \newcommand*{\si@tab@collect@expand@aux@i}{} \def\si@tab@collect@expand@aux@i#1:->#2\si@stop{#1} \newcommand*{\si@tab@collect@expand@aux@ii}{} \edef\si@tab@collect@expand@aux@ii{% \expandafter\si@tab@collect@expand@aux@i\meaning \si@tab@collect@expand@aux@ii:->\si@stop }% \newcommand*{\si@tab@collect@get}{% \let\si@tab@collect@next\si@tab@collect@get \futurelet\si@tempa\si@tab@collect@get@aux } \newcommand*{\si@tab@collect@get@aux}{% \si@meaning@eq@if@TF\si@tempa\bgroup{% \si@tab@collect@braced }{% \si@tab@collect@unbraced }% } \newcommand*{\si@tab@collect@newline}{% \si@tab@print@out \tabularnewline } \newcommand*{\si@tab@collect@next}{} \newcommand*{\si@tab@collect@token}{} \newcommand*{\si@tab@collect@token@s}[1]{% \si@add@right@N\si@tab@collect@body{#1}% } \newcommand*{\si@tab@collect@token@S}[1]{% \si@bool@if@TF\si@tab@collect@after@bool{% \si@add@right@N\si@tab@collect@after{#1}% }{% \si@in@if@TF\si@tab@collect@num{#1}{% \si@bool@false\si@tab@collect@before@bool \si@add@right@N\si@tab@collect@body{#1}% }{% \si@tab@collect@expand{#1}% }% }% } \newcommand*{\si@tab@collect@unbraced}[1]{% \si@meaning@eq@if@F{#1}\ignorespaces{% \si@meaning@eq@if@F{#1}\unskip{% \si@tab@collect@unbraced@aux{#1}% }% }% \si@tab@collect@next } \newcommand*{\si@tab@collect@unbraced@aux}[1]{% \def\si@tempa##1{% \si@meaning@eq@if@T{#1}##1{% \let\si@tab@collect@next##1% }% }% \si@tempa\csname \si@tempa\end \si@tempa\endtabular \si@tempa\si@tab@print@out \si@tempa\relax \si@meaning@eq@if@T\si@tab@collect@next\si@tab@collect@get{% \si@meaning@eq@if@TF{#1}\tabularnewline{% \let\si@tab@collect@next\si@tab@collect@newline }{% \si@tab@collect@token{#1}% }% }% } \si@keys@family{tables} \pgfkeys{ /siunitx/tables, align exponents/.is siunitx switch = {}, align uncertainties/.is siunitx switch = {}, number position/.is choice, number position/.cd, center/.code = {}, centre/.code = {}, decimal centred/.code = {}, decimal centered/.code = {}, left/.code = {}, right/.code = {}, /siunitx/tables, number format/.code = {}, position/.is choice, position/.cd, center/.style = { /siunitx/tables/number position = center, /siunitx/tables/text position = center, /siunitx/tables/unit position = center, }, centre/.style = { /siunitx/tables/number position = centre, /siunitx/tables/text position = centre, /siunitx/tables/unit position = centre, }, left/.style = { /siunitx/tables/number position = left, /siunitx/tables/text position = left, /siunitx/tables/unit position = left, }, right/.style = { /siunitx/tables/number position = right, /siunitx/tables/text position = right, /siunitx/tables/unit position = right, }, /siunitx/tables, text position/.is choice, text position/.cd, center/.code = {}, centre/.code = {}, none/.code = {}, left/.code = {}, right/.code = {}, /siunitx/tables, unit position/.is choice, unit position/.cd, center/.code = {}, centre/.code = {}, none/.code = {}, left/.code = {}, right/.code = {}, /siunitx/tables, number position = centre, text position = centre, unit position = centre } \newcommand*{\si@tab@print@out}{} \newcommand*{\si@tab@print@out@s}{% \si@tab@collect@body \endgroup } \newcommand*{\si@tab@print@out@S}{% \si@tab@collect@before \si@tab@collect@body \si@tab@collect@after \endgroup } \newcommand*{\sisetup}{} \protected\def\sisetup#1{% \pgfqkeys{/siunitx}{#1}% } \si@newcommand{\num}{2}{% \begingroup \sisetup{#1}% \si@num@pre@process{#2}% \si@bool@if@F\si@num@pre@error@bool{% \si@num@in@parse@O{\si@num@pre@arg}% \si@num@post@process \si@num@out@process \si@num@print }% \endgroup } \si@newcommand{\SI}{3}{% TEMP \begingroup \sisetup{#1}% \num{#2}% \endgroup } \si@catcode@restore %% %% Copyright (C) 2008-2009 by %% Joseph Wright %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: %% %% http://www.latex-project.org/lppl.txt %% %% This work is "maintained" (as per LPPL maintenance status) by %% Joseph Wright. %% %% This work consists of the file siunitx.dtx %% and the derived files siunitx.pdf, %% siunitx.sty and %% siunitx.ins. %% %% %% End of file `siunitx.sty'.