diff options
author | Karl Berry <karl@freefriends.org> | 2010-06-11 00:31:14 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-06-11 00:31:14 +0000 |
commit | e4f3b3ac68f64ab7c9de5f2b4b712bd5edf716b0 (patch) | |
tree | b226750531102a0e4477beeb3afd9f08bd3dc41e /Master/texmf-dist/source/latex | |
parent | 7e1403e5adf2df821d55ab025c9dfac07a8e4704 (diff) |
siunitx 2.0d (10jun10)
git-svn-id: svn://tug.org/texlive/trunk@18878 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r-- | Master/texmf-dist/source/latex/siunitx/siunitx.dtx | 7612 |
1 files changed, 3827 insertions, 3785 deletions
diff --git a/Master/texmf-dist/source/latex/siunitx/siunitx.dtx b/Master/texmf-dist/source/latex/siunitx/siunitx.dtx index 472b3fd4e15..d974ea351be 100644 --- a/Master/texmf-dist/source/latex/siunitx/siunitx.dtx +++ b/Master/texmf-dist/source/latex/siunitx/siunitx.dtx @@ -418,6 +418,10 @@ This work consists of the file siunitx.dtx % configuration file} %\changes{v2.0c}{2010/06/07}{Mixed literal and macro units now print % more reliably} +%\changes{v2.0d}{2010/06/10}{Document special case situations for last +% cell in table row} +%\changes{v2.0d}{2010/06/10}{Fix error in \opt{table-format} option +% concerning exponent signs} % %\begin{abstract} % Typesetting values with units requires care to ensure that the @@ -3360,6 +3364,44 @@ This work consists of the file siunitx.dtx % \si[sticky-per]{\candela\per\kWh} %\end{LaTeXdemo} % +%\subsection{Adding items after the last column of a tabular} +% +% When using the \pkg{array} package \enquote{\texttt{<}} construct +% to insert material after an \texttt{S} or \texttt{s} column, the +% spacing will be wrong. This is due to the way that LaTeX constructs +% tables at a low level. The incorrect spacing can be avoided by using +% the TeX \cs{cr} primitive to end the table rows instead +% (\cref{tab:cr}). +%\begin{LaTeXdemo}[code and float] +% \begin{table} +% \caption{Correcting spacing in last \texttt{S} column} +% \label{tab:cr} +% \hfil +% \begin{tabular}{S<{\,\si{\kg}}S<{\,\si{\kg}}} +% \toprule +% \multicolumn{1}{c}{Long header} & +% \multicolumn{1}{c}{Long header} \\ +% \midrule +% 1.23 & 1.23 \\ +% 4.56 & 4.56 \\ +% 7.8 & 7.8 \\ +% \bottomrule +% \end{tabular} +% \hfil +% \begin{tabular}{S<{\,\si{\kg}}S<{\,\si{\kg}}} +% \toprule +% \multicolumn{1}{c}{Long header} & +% \multicolumn{1}{c}{Long header} \\ +% \midrule +% 1.23 & 1.23 \cr +% 4.56 & 4.56 \cr +% 7.8 & 7.8 \cr +% \bottomrule +% \end{tabular} +% \hfil +% \end{table} +%\end{LaTeXdemo} +% %\section{Information for those upgrading from version 1} % % The key--value control system of \pkg{siunitx} has been completely @@ -3877,11 +3919,11 @@ This work consists of the file siunitx.dtx % % The usual preliminaries. % \begin{macrocode} -\ProvidesExplPackage {siunitx} {2010/06/07} {2.0c} +\ProvidesExplPackage {siunitx} {2010/06/10} {2.0d} {A comprehensive (SI) units package} % \end{macrocode} % -%\begin{macro}{\_siunitx_load_check:} +%\begin{macro}{\siunitx_load_check:} % There are also a number of packages that are incompatible with % \pkg{siunitx}. These are all checked for next. Some of the % incompatible packages will not raise an error if loaded after @@ -3892,7 +3934,7 @@ This work consists of the file siunitx.dtx \msg_set:nnnn { siunitx } { incompatible-package } { Package~'#1'~incompatible. } { The~#1~package~and~siunitx~are~incompatible. } -\cs_set_protected_nopar:Npn \_siunitx_load_check:n #1 { +\cs_new_protected_nopar:Npn \siunitx_load_check:n #1 { \group_begin: \@ifpackageloaded {#1} { \msg_error:nnx { siunitx } { incompatible-package } {#1} } @@ -3901,10 +3943,10 @@ This work consists of the file siunitx.dtx } \clist_map_function:nN { SIunits , sistyle , siunits , SIstyle , unitsdef , fancyunits } - \_siunitx_load_check:n + \siunitx_load_check:n \AtBeginDocument { \clist_map_function:nN { SIunits , sistyle , siunits , SIstyle } - \_siunitx_load_check:n + \siunitx_load_check:n } % \end{macrocode} %\end{macro} @@ -3914,20 +3956,20 @@ This work consists of the file siunitx.dtx \RequirePackage{ amstext , array , l3keys2e } % \end{macrocode} % -%\begin{macro}{\_siunitx_tmp:w} -%\begin{macro}{\_l_siunitx_tmp_bool} -%\begin{macro}{\_l_siunitx_tmp_box} -%\begin{macro}{\_l_siunitx_tmp_int} -%\begin{macro}{\_l_siunitx_tmpa_tl} -%\begin{macro}{\_l_siunitx_tmpb_tl} +%\begin{macro}{\siunitx_tmp:w} +%\begin{macro}{\l_siunitx_tmp_bool} +%\begin{macro}{\l_siunitx_tmp_box} +%\begin{macro}{\l_siunitx_tmp_int} +%\begin{macro}{\l_siunitx_tmpa_tl} +%\begin{macro}{\l_siunitx_tmpb_tl} % Scratch items. % \begin{macrocode} -\cs_set:Npn \_siunitx_tmp:w { } -\bool_new:N \_l_siunitx_tmp_bool -\box_new:N \_l_siunitx_tmp_box -\int_new:N \_l_siunitx_tmp_int -\tl_new:N \_l_siunitx_tmpa_tl -\tl_new:N \_l_siunitx_tmpb_tl +\cs_new:Npn \siunitx_tmp:w { } +\bool_new:N \l_siunitx_tmp_bool +\box_new:N \l_siunitx_tmp_box +\int_new:N \l_siunitx_tmp_int +\tl_new:N \l_siunitx_tmpa_tl +\tl_new:N \l_siunitx_tmpb_tl % \end{macrocode} %\end{macro} %\end{macro} @@ -3936,25 +3978,25 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_error_bool} -%\begin{macro}{\_siunitx_error:nxx} -%\begin{macro}{\_siunitx_error:nx} -%\begin{macro}{\_siunitx_error:n} -%\begin{macro}{\_siunitx_error:nV} +%\begin{macro}{\l_siunitx_error_bool} +%\begin{macro}{\siunitx_error:nxx} +%\begin{macro}{\siunitx_error:nx} +%\begin{macro}{\siunitx_error:n} +%\begin{macro}{\siunitx_error:nV} % General-purpose functions for throwing errors. % \begin{macrocode} -\bool_new:N \_l_siunitx_error_bool -\cs_set_protected:Npn \_siunitx_error:nxx #1#2#3 { - \bool_set_true:N \_l_siunitx_error_bool +\bool_new:N \l_siunitx_error_bool +\cs_new_protected:Npn \siunitx_error:nxx #1#2#3 { + \bool_set_true:N \l_siunitx_error_bool \msg_error:nnxx { siunitx } {#1} {#2} {#3} } -\cs_set_protected:Npn \_siunitx_error:nx #1#2 { - \_siunitx_error:nxx {#1} {#2} { } +\cs_new_protected:Npn \siunitx_error:nx #1#2 { + \siunitx_error:nxx {#1} {#2} { } } -\cs_set_protected:Npn \_siunitx_error:n #1 { - \_siunitx_error:nxx {#1} { } { } +\cs_new_protected:Npn \siunitx_error:n #1 { + \siunitx_error:nxx {#1} { } { } } -\cs_generate_variant:Nn \_siunitx_error:nx { nV } +\cs_generate_variant:Nn \siunitx_error:nx { nV } % \end{macrocode} %\end{macro} %\end{macro} @@ -3975,52 +4017,52 @@ This work consists of the file siunitx.dtx } % \end{macrocode} % -%\begin{macro}{\_c_siunitx_minus_tl} +%\begin{macro}{\c_siunitx_minus_tl} % To allow the correct symbol to appear in text mode: this is the same % as \cs{textminus} from \pkg{textcomp}. % \begin{macrocode} -\DeclareTextSymbolDefault \_c_siunitx_minus_tl { TS1 } -\DeclareTextSymbol \_c_siunitx_minus_tl { TS1 } { 61 } +\DeclareTextSymbolDefault \c_siunitx_minus_tl { TS1 } +\DeclareTextSymbol \c_siunitx_minus_tl { TS1 } { 61 } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_c_siunitx_mu_tl} +%\begin{macro}{\c_siunitx_mu_tl} % The lack of an upright mu has to be sorted out. % \begin{macrocode} -\DeclareTextSymbol \_c_siunitx_mu_tl { TS1 } { 181 } -\DeclareTextSymbolDefault \_c_siunitx_mu_tl { TS1 } +\DeclareTextSymbol \c_siunitx_mu_tl { TS1 } { 181 } +\DeclareTextSymbolDefault \c_siunitx_mu_tl { TS1 } % \end{macrocode} %\end{macro} % % Some package redefine \cs{Omega} to be slanted and move the original % symbol to \cs{upOmega}. This is handled here. % \begin{macrocode} -\tl_new:N \_c_siunitx_omega_tl -\tl_set:Nn \_c_siunitx_omega_tl { \Omega } +\tl_new:N \c_siunitx_omega_tl +\tl_set:Nn \c_siunitx_omega_tl { \Omega } \AtBeginDocument { \cs_if_exist:NT \upOmega - { \tl_set:Nn \_c_siunitx_omega_tl { \upOmega } } + { \tl_set:Nn \c_siunitx_omega_tl { \upOmega } } } % \end{macrocode} % -%\begin{macro}{\_siunitx_tl_put_left_math:Nn} -%\begin{macro}{\_siunitx_tl_put_left_math:NV} -%\begin{macro}{\_siunitx_tl_put_left_math:cV} -%\begin{macro}{\_siunitx_tl_put_right_math:Nn} -%\begin{macro}{\_siunitx_tl_put_right_math:NV} -%\begin{macro}{\_siunitx_tl_put_right_math:cV} +%\begin{macro}{\siunitx_tl_put_left_math:Nn} +%\begin{macro}{\siunitx_tl_put_left_math:NV} +%\begin{macro}{\siunitx_tl_put_left_math:cV} +%\begin{macro}{\siunitx_tl_put_right_math:Nn} +%\begin{macro}{\siunitx_tl_put_right_math:NV} +%\begin{macro}{\siunitx_tl_put_right_math:cV} % To add stuff in math mode. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_tl_put_left_math:Nn #1#2 { - \tl_put_left:Nn #1 { \_siunitx_ensuremath:n {#2} } +\cs_new_protected:Npn \siunitx_tl_put_left_math:Nn #1#2 { + \tl_put_left:Nn #1 { \siunitx_ensuremath:n {#2} } } -\cs_generate_variant:Nn \_siunitx_tl_put_left_math:Nn { NV } -\cs_generate_variant:Nn \_siunitx_tl_put_left_math:Nn { cV } -\cs_set_protected:Npn \_siunitx_tl_put_right_math:Nn #1#2 { - \tl_put_right:Nn #1 { \_siunitx_ensuremath:n {#2} } +\cs_generate_variant:Nn \siunitx_tl_put_left_math:Nn { NV } +\cs_generate_variant:Nn \siunitx_tl_put_left_math:Nn { cV } +\cs_new_protected:Npn \siunitx_tl_put_right_math:Nn #1#2 { + \tl_put_right:Nn #1 { \siunitx_ensuremath:n {#2} } } -\cs_generate_variant:Nn \_siunitx_tl_put_right_math:Nn { NV } -\cs_generate_variant:Nn \_siunitx_tl_put_right_math:Nn { cV } +\cs_generate_variant:Nn \siunitx_tl_put_right_math:Nn { NV } +\cs_generate_variant:Nn \siunitx_tl_put_right_math:Nn { cV } % \end{macrocode} %\end{macro} %\end{macro} @@ -4029,170 +4071,170 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_c_siunitx_old_options_seq} +%\begin{macro}{\c_siunitx_old_options_seq} % To pick up old options, all of the names need to be known. % \begin{macrocode} -\seq_new:N \_c_siunitx_old_options_seq -\cs_set_protected_nopar:Npn \_siunitx_tmp:w #1 { - \seq_put_right:Nx \_c_siunitx_old_options_seq { \tl_to_str:n {#1} } -} -\_siunitx_tmp:w { addsign } -\_siunitx_tmp:w { allowlitunits } -\_siunitx_tmp:w { allowoptarg } -\_siunitx_tmp:w { allowzeroexp } -\_siunitx_tmp:w { alsoload } -\_siunitx_tmp:w { angformat } -\_siunitx_tmp:w { anglesep } -\_siunitx_tmp:w { astroang } -\_siunitx_tmp:w { closeerr } -\_siunitx_tmp:w { closrfrac } -\_siunitx_tmp:w { closerange } -\_siunitx_tmp:w { colour } -\_siunitx_tmp:w { colorall } -\_siunitx_tmp:w { colourall } -\_siunitx_tmp:w { colorneg } -\_siunitx_tmp:w { colourneg } -\_siunitx_tmp:w { colourunits } -\_siunitx_tmp:w { colourunits } -\_siunitx_tmp:w { colorvalues } -\_siunitx_tmp:w { colourvalues } -\_siunitx_tmp:w { decimalsymbol } -\_siunitx_tmp:w { debug } -\_siunitx_tmp:w { detectdisplay } -\_siunitx_tmp:w { digitsep } -\_siunitx_tmp:w { dp } -\_siunitx_tmp:w { emulate } -\_siunitx_tmp:w { errspace } -\_siunitx_tmp:w { eVcorra } -\_siunitx_tmp:w { eVcorrb } -\_siunitx_tmp:w { expbase } -\_siunitx_tmp:w { expproduct } -\_siunitx_tmp:w { fixdp } -\_siunitx_tmp:w { fixsf } -\_siunitx_tmp:w { fraction } -\_siunitx_tmp:w { inlinebold } -\_siunitx_tmp:w { locale } -\_siunitx_tmp:w { loctolang } -\_siunitx_tmp:w { log } -\_siunitx_tmp:w { load } -\_siunitx_tmp:w { mathOmega } -\_siunitx_tmp:w { mathcelsius } -\_siunitx_tmp:w { mathdegree } -\_siunitx_tmp:w { mathminute } -\_siunitx_tmp:w { mathmu } -\_siunitx_tmp:w { mathringA } -\_siunitx_tmp:w { mathrm } -\_siunitx_tmp:w { mathsOmega } -\_siunitx_tmp:w { mathscelsius } -\_siunitx_tmp:w { mathsdegree } -\_siunitx_tmp:w { mathsecond } -\_siunitx_tmp:w { mathsf } -\_siunitx_tmp:w { mathsminute } -\_siunitx_tmp:w { mathsmu } -\_siunitx_tmp:w { mathsringA } -\_siunitx_tmp:w { mathsrm } -\_siunitx_tmp:w { mathssecond } -\_siunitx_tmp:w { mathssf } -\_siunitx_tmp:w { mathstt } -\_siunitx_tmp:w { mathtt } -\_siunitx_tmp:w { negcolor } -\_siunitx_tmp:w { negcolour } -\_siunitx_tmp:w { noload } -\_siunitx_tmp:w { numaddn } -\_siunitx_tmp:w { numcloseerr } -\_siunitx_tmp:w { numdecimal } -\_siunitx_tmp:w { numdigits } -\_siunitx_tmp:w { numdiv } -\_siunitx_tmp:w { numexp } -\_siunitx_tmp:w { numgobble } -\_siunitx_tmp:w { numopenerr } -\_siunitx_tmp:w { numprod } -\_siunitx_tmp:w { numsign } -\_siunitx_tmp:w { obeyall } -\_siunitx_tmp:w { obeybold } -\_siunitx_tmp:w { obeyfamily } -\_siunitx_tmp:w { obeymode } -\_siunitx_tmp:w { obeyitalic } -\_siunitx_tmp:w { openerr } -\_siunitx_tmp:w { openfrac } -\_siunitx_tmp:w { openrange } -\_siunitx_tmp:w { padangle } -\_siunitx_tmp:w { padnumber } -\_siunitx_tmp:w { per } -\_siunitx_tmp:w { prefixbase } -\_siunitx_tmp:w { prefixproduct } -\_siunitx_tmp:w { prefixsymbolic } -\_siunitx_tmp:w { prespace } -\_siunitx_tmp:w { redefsymbols } -\_siunitx_tmp:w { repeatunits } -\_siunitx_tmp:w { retainplus } -\_siunitx_tmp:w { seperr } -\_siunitx_tmp:w { sepfour } -\_siunitx_tmp:w { sf } -\_siunitx_tmp:w { sign } -\_siunitx_tmp:w { slash } -\_siunitx_tmp:w { stickyper } -\_siunitx_tmp:w { stricarc } -\_siunitx_tmp:w { tabalign } -\_siunitx_tmp:w { tabalignexp } -\_siunitx_tmp:w { tabautofit } -\_siunitx_tmp:w { tabformat } -\_siunitx_tmp:w { tabnumalign } -\_siunitx_tmp:w { tabparseonly } -\_siunitx_tmp:w { tabtextalign } -\_siunitx_tmp:w { textOmega } -\_siunitx_tmp:w { textcelsius } -\_siunitx_tmp:w { textdegree } -\_siunitx_tmp:w { textminute } -\_siunitx_tmp:w { textmode } -\_siunitx_tmp:w { textmu } -\_siunitx_tmp:w { textringA } -\_siunitx_tmp:w { textrm } -\_siunitx_tmp:w { textsecond } -\_siunitx_tmp:w { textsf } -\_siunitx_tmp:w { texttt } -\_siunitx_tmp:w { tightpm } -\_siunitx_tmp:w { tophrase } -\_siunitx_tmp:w { trapamigerr } -\_siunitx_tmp:w { trapambigfrac } -\_siunitx_tmp:w { trapambigrange } -\_siunitx_tmp:w { unitcolor } -\_siunitx_tmp:w { unitcolour } -\_siunitx_tmp:w { unitmathrm } -\_siunitx_tmp:w { unitmathsf } -\_siunitx_tmp:w { unitmathsrm } -\_siunitx_tmp:w { unitmathssf } -\_siunitx_tmp:w { unitmathstt } -\_siunitx_tmp:w { unitmathtt } -\_siunitx_tmp:w { unitmode } -\_siunitx_tmp:w { unitsep } -\_siunitx_tmp:w { unitspace } -\_siunitx_tmp:w { valuecolor } -\_siunitx_tmp:w { valuecolour } -\_siunitx_tmp:w { valuemathrm } -\_siunitx_tmp:w { valuemathsf } -\_siunitx_tmp:w { valuemathsrm } -\_siunitx_tmp:w { valuemathssf } -\_siunitx_tmp:w { valuemathstt } -\_siunitx_tmp:w { valuemathtt } -\_siunitx_tmp:w { valuemode } -\_siunitx_tmp:w { valuesep } -\_siunitx_tmp:w { xpace } +\seq_new:N \c_siunitx_old_options_seq +\cs_set_protected_nopar:Npn \siunitx_tmp:w #1 { + \seq_put_right:Nx \c_siunitx_old_options_seq { \tl_to_str:n {#1} } +} +\siunitx_tmp:w { addsign } +\siunitx_tmp:w { allowlitunits } +\siunitx_tmp:w { allowoptarg } +\siunitx_tmp:w { allowzeroexp } +\siunitx_tmp:w { alsoload } +\siunitx_tmp:w { angformat } +\siunitx_tmp:w { anglesep } +\siunitx_tmp:w { astroang } +\siunitx_tmp:w { closeerr } +\siunitx_tmp:w { closrfrac } +\siunitx_tmp:w { closerange } +\siunitx_tmp:w { colour } +\siunitx_tmp:w { colorall } +\siunitx_tmp:w { colourall } +\siunitx_tmp:w { colorneg } +\siunitx_tmp:w { colourneg } +\siunitx_tmp:w { colourunits } +\siunitx_tmp:w { colourunits } +\siunitx_tmp:w { colorvalues } +\siunitx_tmp:w { colourvalues } +\siunitx_tmp:w { decimalsymbol } +\siunitx_tmp:w { debug } +\siunitx_tmp:w { detectdisplay } +\siunitx_tmp:w { digitsep } +\siunitx_tmp:w { dp } +\siunitx_tmp:w { emulate } +\siunitx_tmp:w { errspace } +\siunitx_tmp:w { eVcorra } +\siunitx_tmp:w { eVcorrb } +\siunitx_tmp:w { expbase } +\siunitx_tmp:w { expproduct } +\siunitx_tmp:w { fixdp } +\siunitx_tmp:w { fixsf } +\siunitx_tmp:w { fraction } +\siunitx_tmp:w { inlinebold } +\siunitx_tmp:w { locale } +\siunitx_tmp:w { loctolang } +\siunitx_tmp:w { log } +\siunitx_tmp:w { load } +\siunitx_tmp:w { mathOmega } +\siunitx_tmp:w { mathcelsius } +\siunitx_tmp:w { mathdegree } +\siunitx_tmp:w { mathminute } +\siunitx_tmp:w { mathmu } +\siunitx_tmp:w { mathringA } +\siunitx_tmp:w { mathrm } +\siunitx_tmp:w { mathsOmega } +\siunitx_tmp:w { mathscelsius } +\siunitx_tmp:w { mathsdegree } +\siunitx_tmp:w { mathsecond } +\siunitx_tmp:w { mathsf } +\siunitx_tmp:w { mathsminute } +\siunitx_tmp:w { mathsmu } +\siunitx_tmp:w { mathsringA } +\siunitx_tmp:w { mathsrm } +\siunitx_tmp:w { mathssecond } +\siunitx_tmp:w { mathssf } +\siunitx_tmp:w { mathstt } +\siunitx_tmp:w { mathtt } +\siunitx_tmp:w { negcolor } +\siunitx_tmp:w { negcolour } +\siunitx_tmp:w { noload } +\siunitx_tmp:w { numaddn } +\siunitx_tmp:w { numcloseerr } +\siunitx_tmp:w { numdecimal } +\siunitx_tmp:w { numdigits } +\siunitx_tmp:w { numdiv } +\siunitx_tmp:w { numexp } +\siunitx_tmp:w { numgobble } +\siunitx_tmp:w { numopenerr } +\siunitx_tmp:w { numprod } +\siunitx_tmp:w { numsign } +\siunitx_tmp:w { obeyall } +\siunitx_tmp:w { obeybold } +\siunitx_tmp:w { obeyfamily } +\siunitx_tmp:w { obeymode } +\siunitx_tmp:w { obeyitalic } +\siunitx_tmp:w { openerr } +\siunitx_tmp:w { openfrac } +\siunitx_tmp:w { openrange } +\siunitx_tmp:w { padangle } +\siunitx_tmp:w { padnumber } +\siunitx_tmp:w { per } +\siunitx_tmp:w { prefixbase } +\siunitx_tmp:w { prefixproduct } +\siunitx_tmp:w { prefixsymbolic } +\siunitx_tmp:w { prespace } +\siunitx_tmp:w { redefsymbols } +\siunitx_tmp:w { repeatunits } +\siunitx_tmp:w { retainplus } +\siunitx_tmp:w { seperr } +\siunitx_tmp:w { sepfour } +\siunitx_tmp:w { sf } +\siunitx_tmp:w { sign } +\siunitx_tmp:w { slash } +\siunitx_tmp:w { stickyper } +\siunitx_tmp:w { stricarc } +\siunitx_tmp:w { tabalign } +\siunitx_tmp:w { tabalignexp } +\siunitx_tmp:w { tabautofit } +\siunitx_tmp:w { tabformat } +\siunitx_tmp:w { tabnumalign } +\siunitx_tmp:w { tabparseonly } +\siunitx_tmp:w { tabtextalign } +\siunitx_tmp:w { textOmega } +\siunitx_tmp:w { textcelsius } +\siunitx_tmp:w { textdegree } +\siunitx_tmp:w { textminute } +\siunitx_tmp:w { textmode } +\siunitx_tmp:w { textmu } +\siunitx_tmp:w { textringA } +\siunitx_tmp:w { textrm } +\siunitx_tmp:w { textsecond } +\siunitx_tmp:w { textsf } +\siunitx_tmp:w { texttt } +\siunitx_tmp:w { tightpm } +\siunitx_tmp:w { tophrase } +\siunitx_tmp:w { trapamigerr } +\siunitx_tmp:w { trapambigfrac } +\siunitx_tmp:w { trapambigrange } +\siunitx_tmp:w { unitcolor } +\siunitx_tmp:w { unitcolour } +\siunitx_tmp:w { unitmathrm } +\siunitx_tmp:w { unitmathsf } +\siunitx_tmp:w { unitmathsrm } +\siunitx_tmp:w { unitmathssf } +\siunitx_tmp:w { unitmathstt } +\siunitx_tmp:w { unitmathtt } +\siunitx_tmp:w { unitmode } +\siunitx_tmp:w { unitsep } +\siunitx_tmp:w { unitspace } +\siunitx_tmp:w { valuecolor } +\siunitx_tmp:w { valuecolour } +\siunitx_tmp:w { valuemathrm } +\siunitx_tmp:w { valuemathsf } +\siunitx_tmp:w { valuemathsrm } +\siunitx_tmp:w { valuemathssf } +\siunitx_tmp:w { valuemathstt } +\siunitx_tmp:w { valuemathtt } +\siunitx_tmp:w { valuemode } +\siunitx_tmp:w { valuesep } +\siunitx_tmp:w { xpace } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_key_tl} +%\begin{macro}{\l_siunitx_key_tl} % Unknown options should raise an \pkg{siunitx}-specific error message. % \begin{macrocode} \tl_new:N \l_siunitx_key_tl \keys_define:nn { siunitx } { unknown .code:n = { - \seq_if_in:NVTF \_c_siunitx_old_options_seq \l_keys_key_tl + \seq_if_in:NVTF \c_siunitx_old_options_seq \l_keys_key_tl { \msg_warning:nnx { siunitx } { version-1-option } { \exp_not:V \l_keys_key_tl } - \tl_set:Nx \_l_siunitx_key_tl + \tl_set:Nx \l_siunitx_key_tl { \keys_set:nn { siunitx } { @@ -4201,7 +4243,7 @@ This work consists of the file siunitx.dtx } } \keys_set:nn { siunitx } { load-configurations = version-1 } - \tl_use:N \_l_siunitx_key_tl + \tl_use:N \l_siunitx_key_tl } { \msg_error:nnx { siunitx } { unknown-option } @@ -4213,7 +4255,7 @@ This work consists of the file siunitx.dtx \keys_define:nn { siunitx } { unknown .code:n = { - \seq_if_in:NVTF \_c_siunitx_old_options_seq \l_keys_key_tl + \seq_if_in:NVTF \c_siunitx_old_options_seq \l_keys_key_tl { \msg_error:nnx { siunitx } { version-1-option } { \exp_not:V \l_keys_key_tl } @@ -4228,16 +4270,16 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_option_deactivate_clist} -%\begin{macro}{\_siunitx_option_deactivate:n} -%\begin{macro}[aux]{\_siunitx_option_deactivate_aux:n} +%\begin{macro}{\l_siunitx_option_deactivate_clist} +%\begin{macro}{\siunitx_option_deactivate:n} +%\begin{macro}[aux]{\siunitx_option_deactivate_aux:n} % Some options need to be deactivated at the start of the document. % \begin{macrocode} -\clist_new:N \_l_siunitx_option_deactivate_clist -\cs_set_protected_nopar:Npn \_siunitx_option_deactivate:n #1 { - \clist_put_right:Nn \_l_siunitx_option_deactivate_clist {#1} +\clist_new:N \l_siunitx_option_deactivate_clist +\cs_new_protected_nopar:Npn \siunitx_option_deactivate:n #1 { + \clist_put_right:Nn \l_siunitx_option_deactivate_clist {#1} } -\cs_set_protected_nopar:Npn \_siunitx_option_deactivate_aux:n #1 { +\cs_new_protected_nopar:Npn \siunitx_option_deactivate_aux:n #1 { \keys_define:nn { siunitx } { #1 .code:n = @@ -4245,8 +4287,8 @@ This work consists of the file siunitx.dtx } } \AtBeginDocument { - \clist_map_function:NN \_l_siunitx_option_deactivate_clist - \_siunitx_option_deactivate_aux:n + \clist_map_function:NN \l_siunitx_option_deactivate_clist + \siunitx_option_deactivate_aux:n } % \end{macrocode} %\end{macro} @@ -4266,11 +4308,11 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_cs_if_tl_p:N} -%\begin{macro}[TF]{\_siunitx_cs_if_tl:N} -%\begin{macro}[aux]{\_siunitx_cs_if_tl_aux:w} -%\begin{macro}{\_siunitx_cs_if_macro_p:N} -%\begin{macro}[TF]{\_siunitx_cs_if_macro:NT} +%\begin{macro}{\siunitx_cs_if_tl_p:N} +%\begin{macro}[TF]{\siunitx_cs_if_tl:N} +%\begin{macro}[aux]{\siunitx_cs_if_tl_aux:w} +%\begin{macro}{\siunitx_cs_if_macro_p:N} +%\begin{macro}[TF]{\siunitx_cs_if_macro:NT} % This is basically a re-hash of stuff from \pkg{expl3}, but to test for % short macros only. The second test (with the \cs{cs_to_str:N} part) % is checking for LaTeX2e robust commands. @@ -4282,9 +4324,9 @@ This work consists of the file siunitx.dtx { \char_set_lccode:nn { `#1 } { `#1 } } \tl_to_lowercase:n { \group_end: - \prg_set_conditional:Npnn \_siunitx_cs_if_tl:N #1 { T , F, TF , p } + \prg_new_conditional:Npnn \siunitx_cs_if_tl:N #1 { T , F, TF , p } { - \exp_after:wN \_siunitx_cs_if_tl_aux:w + \exp_after:wN \siunitx_cs_if_tl_aux:w \token_to_meaning:N #1 MACRO \q_nil { \cs_if_exist:cTF { \cs_to_str:N #1 ~ } @@ -4293,12 +4335,12 @@ This work consists of the file siunitx.dtx } { \prg_return_false: } } - \cs_set_nopar:Npn \_siunitx_cs_if_tl_aux:w #1 MACRO #2 \q_nil + \cs_new_nopar:Npn \siunitx_cs_if_tl_aux:w #1 MACRO #2 \q_nil { \tl_if_empty:nTF {#1} } - \prg_set_conditional:Npnn \_siunitx_cs_if_macro:N #1 + \prg_new_conditional:Npnn \siunitx_cs_if_macro:N #1 { T , F , TF , p } { - \exp_after:wN \_siunitx_cs_if_tl_aux:w + \exp_after:wN \siunitx_cs_if_tl_aux:w \token_to_meaning:N #1 MACRO \q_nil { \prg_return_true: } { \prg_return_false: } @@ -4311,16 +4353,16 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_ensuremath:n} +%\begin{macro}{\siunitx_ensuremath:n} % A copy is made of \cs{ensuremath}: if \pkg{tex4ht} is in use, it % is possible to deactivate this to give nicer looking conversion to % other formats. % \begin{macrocode} -\cs_set_eq:NN \_siunitx_ensuremath:n \ensuremath +\cs_new_eq:NN \siunitx_ensuremath:n \ensuremath \AtBeginDocument { \@ifpackageloaded { tex4ht } { - \cs_set_eq:NN \_siunitx_ensuremath:n \use:n + \cs_set_eq:NN \siunitx_ensuremath:n \use:n \keys_set:nn { siunitx } { mode = text } } { } @@ -4336,9 +4378,9 @@ This work consists of the file siunitx.dtx % package. By carrying out the changes outside math mode, bold can % reliably be applied to math output. % -%\begin{macro}{\_c_siunitx_mathsf_int} -%\begin{macro}{\_c_siunitx_mathtt_int} -%\begin{macro}{\_siunitx_set_math_fam:n} +%\begin{macro}{\c_siunitx_mathsf_int} +%\begin{macro}{\c_siunitx_mathtt_int} +%\begin{macro}{\siunitx_set_math_fam:n} % The detection routine needs some basic data about the sans serif and % monospaced fonts in use. This is collected up at the start of the % document. The families used can change between here and the start of @@ -4346,64 +4388,64 @@ This work consists of the file siunitx.dtx % using \cs{AtBeginDocument} as it has to come after anything that % \pkg{fontspec} does (nasty errors arise otherwise). % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_set_math_fam:n #1 { - \int_new:c { _c_siunitx_math #1 _int } +\cs_new_protected_nopar:Npn \siunitx_set_math_fam:n #1 { + \int_new:c { c_siunitx_math #1 _int } \group_begin: - \hbox_set:Nn \_l_siunitx_tmp_box + \hbox_set:Nn \l_siunitx_tmp_box { \ensuremath { \use:c { math #1 } { - \int_gset:cn { _c_siunitx_math #1 _int } { \fam } + \int_gset:cn { c_siunitx_math #1 _int } { \fam } } } } \group_end: } \tl_put_right:Nn \document { - \_siunitx_set_math_fam:n { sf } - \_siunitx_set_math_fam:n { tt } + \siunitx_set_math_fam:n { sf } + \siunitx_set_math_fam:n { tt } } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_font_set_text_fam:n} -%\begin{macro}{\_c_siunitx_textsf_tl} -%\begin{macro}{\_c_siunitx_texttt_tl} +%\begin{macro}{\siunitx_font_set_text_fam:n} +%\begin{macro}{\c_siunitx_textsf_tl} +%\begin{macro}{\c_siunitx_texttt_tl} % The text families are done in a somewhat different manner: there are % no issues with \cs{AtBeginDocument}, luckily. The need to define % new macros here arises as \cs{sfdefault} and \cs{ttdefault} are % \cs{long}, whereas \cs{f@family} is not. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_set_text_fam:n #1 { - \tl_new:c { _c_siunitx_text #1 _tl } - \tl_set:cx { _c_siunitx_text #1 _tl } { \use:c { #1 default } } +\cs_new_protected_nopar:Npn \siunitx_set_text_fam:n #1 { + \tl_new:c { c_siunitx_text #1 _tl } + \tl_set:cx { c_siunitx_text #1 _tl } { \use:c { #1 default } } } \AtBeginDocument { - \_siunitx_set_text_fam:n { sf } - \_siunitx_set_text_fam:n { tt } + \siunitx_set_text_fam:n { sf } + \siunitx_set_text_fam:n { tt } } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_detect_inline_weight_tl} +%\begin{macro}{\l_siunitx_detect_inline_weight_tl} % Used by the keys, but needs to be created here. % \begin{macrocode} -\tl_new:N \_l_siunitx_detect_inline_weight_tl +\tl_new:N \l_siunitx_detect_inline_weight_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_detect_display_math_bool} -%\begin{macro}{\_l_siunitx_detect_family_bool} -%\begin{macro}{\_l_siunitx_detect_inline_weight_bool} -%\begin{macro}{\_l_siunitx_detect_italic_bool} -%\begin{macro}{\_l_siunitx_detect_mode_bool} -%\begin{macro}{\_l_siunitx_detect_weight_bool} +%\begin{macro}{\l_siunitx_detect_display_math_bool} +%\begin{macro}{\l_siunitx_detect_family_bool} +%\begin{macro}{\l_siunitx_detect_inline_weight_bool} +%\begin{macro}{\l_siunitx_detect_italic_bool} +%\begin{macro}{\l_siunitx_detect_mode_bool} +%\begin{macro}{\l_siunitx_detect_weight_bool} % Font detection is all about creating switches, with just a little % gloss for \texttt{detect-all} and \texttt{detect-none}. % \begin{macrocode} @@ -4425,21 +4467,21 @@ This work consists of the file siunitx.dtx detect-weight = true }, detect-display-math .bool_set:N = - \_l_siunitx_detect_display_math_bool, - detect-family .bool_set:N = \_l_siunitx_detect_family_bool, + \l_siunitx_detect_display_math_bool, + detect-family .bool_set:N = \l_siunitx_detect_family_bool, detect-inline-weight .choice:, detect-inline-weight .value_required:, detect-inline-weight / combined .code:n = - { \tl_set:Nn \_l_siunitx_detect_inline_weight_tl { combined } }, + { \tl_set:Nn \l_siunitx_detect_inline_weight_tl { combined } }, detect-inline-weight / math .code:n = - { \tl_set:Nn \_l_siunitx_detect_inline_weight_tl { math } }, + { \tl_set:Nn \l_siunitx_detect_inline_weight_tl { math } }, detect-inline-weight / text .code:n = - { \tl_set:Nn \_l_siunitx_detect_inline_weight_tl { text } }, - detect-italic .bool_set:N = \_l_siunitx_detect_italic_bool, - detect-mode .bool_set:N = \_l_siunitx_detect_mode_bool, + { \tl_set:Nn \l_siunitx_detect_inline_weight_tl { text } }, + detect-italic .bool_set:N = \l_siunitx_detect_italic_bool, + detect-mode .bool_set:N = \l_siunitx_detect_mode_bool, detect-none .choice:, detect-none .default:n = true, detect-none / false .meta:n = @@ -4456,7 +4498,7 @@ This work consists of the file siunitx.dtx detect-mode = false, detect-weight = false }, - detect-weight .bool_set:N = \_l_siunitx_detect_weight_bool + detect-weight .bool_set:N = \l_siunitx_detect_weight_bool } % \end{macrocode} %\end{macro} @@ -4466,114 +4508,114 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_font_set_bool} -%\begin{macro}{\_l_siunitx_font_math_mode_bool} +%\begin{macro}{\l_siunitx_font_set_bool} +%\begin{macro}{\l_siunitx_font_math_mode_bool} % The internals of the package need a number of switches to track what % is happening. % \begin{macrocode} -\bool_new:N \_l_siunitx_font_set_bool -\bool_new:N \_l_siunitx_font_math_mode_bool +\bool_new:N \l_siunitx_font_set_bool +\bool_new:N \l_siunitx_font_math_mode_bool % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_font_family_tl} +%\begin{macro}{\l_siunitx_font_family_tl} % Also some token storage. % \begin{macrocode} -\tl_new:N \_l_siunitx_font_family_tl +\tl_new:N \l_siunitx_font_family_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_font_italic:} -%\begin{macro}{\_siunitx_font_weight:} +%\begin{macro}{\siunitx_font_italic:} +%\begin{macro}{\siunitx_font_weight:} % These could be token lists or functions! % \begin{macrocode} -\cs_set_nopar:Npn \_siunitx_font_italic: { } -\cs_set_nopar:Npn \_siunitx_font_weight: { } +\cs_new_nopar:Npn \siunitx_font_italic: { } +\cs_new_nopar:Npn \siunitx_font_weight: { } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_detect_font:} +%\begin{macro}{\siunitx_detect_font:} % The main font-setting macro is a control point for the other % functions. Nesting font-control should not happen, so the first % test is to ensure this is not happening. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_detect_font: { - \bool_if:NF \_l_siunitx_font_set_bool +\cs_new_protected_nopar:Npn \siunitx_detect_font: { + \bool_if:NF \l_siunitx_font_set_bool { - \_siunitx_detect_font_init: - \bool_if:NT \_l_siunitx_detect_weight_bool - { \_siunitx_detect_font_weight: } - \bool_if:NT \_l_siunitx_detect_family_bool - { \_siunitx_detect_font_family: } - \bool_if:NT \_l_siunitx_detect_italic_bool - { \_siunitx_detect_font_italic: } - \bool_if:NT \_l_siunitx_detect_mode_bool - { \_siunitx_detect_font_mode: } + \siunitx_detect_font_init: + \bool_if:NT \l_siunitx_detect_weight_bool + { \siunitx_detect_font_weight: } + \bool_if:NT \l_siunitx_detect_family_bool + { \siunitx_detect_font_family: } + \bool_if:NT \l_siunitx_detect_italic_bool + { \siunitx_detect_font_italic: } + \bool_if:NT \l_siunitx_detect_mode_bool + { \siunitx_detect_font_mode: } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_detect_font_init:} +%\begin{macro}{\siunitx_detect_font_init:} % Set up the basic macros on the assumption nothing happens. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_detect_font_init: { - \bool_set_true:N \_l_siunitx_font_set_bool - \cs_set:Npn \_siunitx_font_weight: +\cs_new_protected_nopar:Npn \siunitx_detect_font_init: { + \bool_set_true:N \l_siunitx_font_set_bool + \cs_set:Npn \siunitx_font_weight: { \unboldmath \mdseries } - \cs_set:Npn \_siunitx_font_italic: { \upshape } - \tl_set:Nn \_l_siunitx_font_family_tl { rm } - \bool_set_true:N \_l_siunitx_font_math_mode_bool + \cs_set:Npn \siunitx_font_italic: { \upshape } + \tl_set:Nn \l_siunitx_font_family_tl { rm } + \bool_set_true:N \l_siunitx_font_math_mode_bool } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_detect_font_weight:} +%\begin{macro}{\siunitx_detect_font_weight:} % The font weight detection code depends on whether the current text is % math or text, and also the type of math (if appropriate). For % inline math, there is a choice of what test to apply. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_detect_font_weight: { +\cs_new_protected_nopar:Npn \siunitx_detect_font_weight: { \mode_if_math:TF { \mode_if_inner:TF { \use:c { - _siunitx_detect_font_weight_ - \_l_siunitx_detect_inline_weight_tl + siunitx_detect_font_weight_ + \l_siunitx_detect_inline_weight_tl : } } { - \bool_if:NTF \_l_siunitx_detect_display_math_bool - { \_siunitx_detect_font_weight_math: } - { \_siunitx_detect_font_weight_text: } + \bool_if:NTF \l_siunitx_detect_display_math_bool + { \siunitx_detect_font_weight_math: } + { \siunitx_detect_font_weight_text: } } } - { \_siunitx_detect_font_weight_text: } + { \siunitx_detect_font_weight_text: } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_detect_font_weight_combined:} -%\begin{macro}{\_siunitx_detect_font_weight_math:} -%\begin{macro}{\_siunitx_detect_font_weight_text:} +%\begin{macro}{\siunitx_detect_font_weight_combined:} +%\begin{macro}{\siunitx_detect_font_weight_math:} +%\begin{macro}{\siunitx_detect_font_weight_text:} % The tests for font weight depend on whether the module is testing % text or math content. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_detect_font_weight_combined: { - \_siunitx_detect_font_weight_math: - \_siunitx_detect_font_weight_text: +\cs_new_protected_nopar:Npn \siunitx_detect_font_weight_combined: { + \siunitx_detect_font_weight_math: + \siunitx_detect_font_weight_text: } -\cs_set_protected_nopar:Npn \_siunitx_detect_font_weight_math: { +\cs_new_protected_nopar:Npn \siunitx_detect_font_weight_math: { \tl_if_eq:nVT { bold } \math@version { - \cs_set:Npn \_siunitx_font_weight: + \cs_set:Npn \siunitx_font_weight: { \boldmath \bfseries @@ -4581,23 +4623,23 @@ This work consists of the file siunitx.dtx } \tl_if_eq:nVT { light } \math@version { - \cs_set:Npn \_siunitx_font_weight: + \cs_set:Npn \siunitx_font_weight: { \lseries } } } -\cs_set_protected_nopar:Npn \_siunitx_detect_font_weight_text: { - \tl_set:Nx \_l_siunitx_tmpa_tl { \exp_args:NV \tl_head:n \f@series } - \tl_if_eq:nVT { b } \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_detect_font_weight_text: { + \tl_set:Nx \l_siunitx_tmpa_tl { \exp_args:NV \tl_head:n \f@series } + \tl_if_eq:nVT { b } \l_siunitx_tmpa_tl { - \cs_set:Npn \_siunitx_font_weight: + \cs_set:Npn \siunitx_font_weight: { \boldmath \bfseries } } - \tl_if_eq:nVT { l } \_l_siunitx_tmpa_tl + \tl_if_eq:nVT { l } \l_siunitx_tmpa_tl { - \cs_set:Npn \_siunitx_font_weight: + \cs_set:Npn \siunitx_font_weight: { \lseries } } } @@ -4606,62 +4648,62 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_detect_font_family:} +%\begin{macro}{\siunitx_detect_font_family:} % Family detection usually picks up the surrounding text. However, for % display math there are two options, and so a second test may be made. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_detect_font_family: { - \_siunitx_detect_font_family_text: - \bool_if:NT \_l_siunitx_detect_display_math_bool +\cs_new_protected_nopar:Npn \siunitx_detect_font_family: { + \siunitx_detect_font_family_text: + \bool_if:NT \l_siunitx_detect_display_math_bool { \mode_if_math:T - { \mode_if_inner:F { \_siunitx_detect_font_family_math: } } + { \mode_if_inner:F { \siunitx_detect_font_family_math: } } } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_detect_font_family_math:} -%\begin{macro}{\_siunitx_detect_font_family_text:} +%\begin{macro}{\siunitx_detect_font_family_math:} +%\begin{macro}{\siunitx_detect_font_family_text:} % The two detections routines check if the current font is sans serif or % monospaced. The method used depends on whether the current math or % text font is of interest. The math detection routine re-applies the % default (\texttt{rm}), as the text function is always called and may % have changed things. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_detect_font_family_math: { - \tl_set:Nn \_l_siunitx_font_family_tl { rm } - \intexpr_compare:nNnT { \fam } = { \_c_siunitx_mathsf_int } - { \tl_set:Nn \_l_siunitx_font_family_tl { sf } } - \intexpr_compare:nNnT { \fam } = { \_c_siunitx_mathtt_int } - { \tl_set:Nn \_l_siunitx_font_family_tl { tt } } +\cs_new_protected_nopar:Npn \siunitx_detect_font_family_math: { + \tl_set:Nn \l_siunitx_font_family_tl { rm } + \intexpr_compare:nNnT { \fam } = { \c_siunitx_mathsf_int } + { \tl_set:Nn \l_siunitx_font_family_tl { sf } } + \intexpr_compare:nNnT { \fam } = { \c_siunitx_mathtt_int } + { \tl_set:Nn \l_siunitx_font_family_tl { tt } } } -\cs_set_protected_nopar:Npn \_siunitx_detect_font_family_text: { - \tl_if_eq:NNT \f@family \_c_siunitx_textsf_tl - { \tl_set:Nn \_l_siunitx_font_family_tl { sf } } - \tl_if_eq:NNT \f@family \_c_siunitx_texttt_tl - { \tl_set:Nn \_l_siunitx_font_family_tl { tt } } +\cs_new_protected_nopar:Npn \siunitx_detect_font_family_text: { + \tl_if_eq:NNT \f@family \c_siunitx_textsf_tl + { \tl_set:Nn \l_siunitx_font_family_tl { sf } } + \tl_if_eq:NNT \f@family \c_siunitx_texttt_tl + { \tl_set:Nn \l_siunitx_font_family_tl { tt } } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_detect_font_italic:} +%\begin{macro}{\siunitx_detect_font_italic:} % The italic test uses \cs{f@shape} as a handy indicator. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_detect_font_italic: { +\cs_new_protected_nopar:Npn \siunitx_detect_font_italic: { \tl_if_eq:nVT { it } \f@shape - { \cs_set_nopar:Npn \_siunitx_font_italic: { \itshape } } + { \cs_set_nopar:Npn \siunitx_font_italic: { \itshape } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_detect_font_mode:} +%\begin{macro}{\siunitx_detect_font_mode:} % The mode switch works from the fact that math mode output it the % standard. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_detect_font_mode: { +\cs_new_protected_nopar:Npn \siunitx_detect_font_mode: { \mode_if_math:F - { \bool_set_false:N \_l_siunitx_font_math_mode_bool } + { \bool_set_false:N \l_siunitx_font_math_mode_bool } } % \end{macrocode} %\end{macro} @@ -4674,51 +4716,51 @@ This work consists of the file siunitx.dtx % by name, based on output type (\texttt{unit} or \texttt{value}) and % the family selected by the detector. % -%\begin{macro}{\_l_siunitx_number_math_mode_bool} -%\begin{macro}{\_l_siunitx_unit_math_mode_bool} +%\begin{macro}{\l_siunitx_number_math_mode_bool} +%\begin{macro}{\l_siunitx_unit_math_mode_bool} % Most of the variables are created by the keys system: these are not. % \begin{macrocode} -\bool_new:N \_l_siunitx_number_math_mode_bool -\bool_new:N \_l_siunitx_unit_math_mode_bool +\bool_new:N \l_siunitx_number_math_mode_bool +\bool_new:N \l_siunitx_unit_math_mode_bool % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_color_tl} -%\begin{macro}{\_siunitx_number_mathrm:n} -%\begin{macro}{\_siunitx_number_mathsf:n} -%\begin{macro}{\_siunitx_number_mathtt:n} -%\begin{macro}{\_siunitx_number_textrm:} -%\begin{macro}{\_siunitx_number_textsf:} -%\begin{macro}{\_siunitx_number_texttt:} +%\begin{macro}{\l_siunitx_number_color_tl} +%\begin{macro}{\siunitx_number_mathrm:n} +%\begin{macro}{\siunitx_number_mathsf:n} +%\begin{macro}{\siunitx_number_mathtt:n} +%\begin{macro}{\siunitx_number_textrm:} +%\begin{macro}{\siunitx_number_textsf:} +%\begin{macro}{\siunitx_number_texttt:} % The settings are actually created separately for numbers and units: % numbers first. % \begin{macrocode} -\cs_set:Npn \_siunitx_number_mathrm:n #1 { } -\cs_set:Npn \_siunitx_number_mathsf:n #1 { } -\cs_set:Npn \_siunitx_number_mathtt:n #1 { } -\cs_set_nopar:Npn \_siunitx_number_textrm: { } -\cs_set_nopar:Npn \_siunitx_number_textsf: { } -\cs_set_nopar:Npn \_siunitx_number_texttt: { } +\cs_new:Npn \siunitx_number_mathrm:n #1 { } +\cs_new:Npn \siunitx_number_mathsf:n #1 { } +\cs_new:Npn \siunitx_number_mathtt:n #1 { } +\cs_new_nopar:Npn \siunitx_number_textrm: { } +\cs_new_nopar:Npn \siunitx_number_textsf: { } +\cs_new_nopar:Npn \siunitx_number_texttt: { } \keys_define:nn { siunitx } { - number-color .tl_set:N = \_l_siunitx_number_color_tl, + number-color .tl_set:N = \l_siunitx_number_color_tl, number-math-rm .code:n = - { \cs_set_nopar:Npn \_siunitx_number_mathrm:n ##1 { #1 {##1} } }, + { \cs_set_nopar:Npn \siunitx_number_mathrm:n ##1 { #1 {##1} } }, number-math-sf .code:n = - { \cs_set_nopar:Npn \_siunitx_number_mathsf:n ##1 { #1 {##1} } }, + { \cs_set_nopar:Npn \siunitx_number_mathsf:n ##1 { #1 {##1} } }, number-math-tt .code:n = - { \cs_set_nopar:Npn \_siunitx_number_mathtt:n ##1 { #1 {##1} } }, + { \cs_set_nopar:Npn \siunitx_number_mathtt:n ##1 { #1 {##1} } }, number-mode .choice:, number-mode / math .code:n = - { \bool_set_true:N \_l_siunitx_number_math_mode_bool }, + { \bool_set_true:N \l_siunitx_number_math_mode_bool }, number-mode / text .code:n = - { \bool_set_false:N \_l_siunitx_number_math_mode_bool }, + { \bool_set_false:N \l_siunitx_number_math_mode_bool }, number-text-rm .code:n = - { \cs_set_nopar:Npn \_siunitx_number_textrm: {#1} }, + { \cs_set_nopar:Npn \siunitx_number_textrm: {#1} }, number-text-sf .code:n = - { \cs_set_nopar:Npn \_siunitx_number_textsf: {#1} }, + { \cs_set_nopar:Npn \siunitx_number_textsf: {#1} }, number-text-tt .code:n = - { \cs_set_nopar:Npn \_siunitx_number_texttt: {#1} } + { \cs_set_nopar:Npn \siunitx_number_texttt: {#1} } } % \end{macrocode} %\end{macro} @@ -4729,40 +4771,40 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_unit_color_tl} -%\begin{macro}{\_siunitx_unit_mathrm:n} -%\begin{macro}{\_siunitx_unit_mathsf:n} -%\begin{macro}{\_siunitx_unit_mathtt:n} -%\begin{macro}{\_siunitx_unit_textrm:} -%\begin{macro}{\_siunitx_unit_textsf:} -%\begin{macro}{\_siunitx_unit_texttt:} +%\begin{macro}{\l_siunitx_unit_color_tl} +%\begin{macro}{\siunitx_unit_mathrm:n} +%\begin{macro}{\siunitx_unit_mathsf:n} +%\begin{macro}{\siunitx_unit_mathtt:n} +%\begin{macro}{\siunitx_unit_textrm:} +%\begin{macro}{\siunitx_unit_textsf:} +%\begin{macro}{\siunitx_unit_texttt:} % Units look exactly the same. % \begin{macrocode} -\cs_set_nopar:Npn \_siunitx_unit_mathrm: { } -\cs_set_nopar:Npn \_siunitx_unit_mathsf: { } -\cs_set_nopar:Npn \_siunitx_unit_mathtt: { } -\cs_set_nopar:Npn \_siunitx_unit_textrm: { } -\cs_set_nopar:Npn \_siunitx_unit_textsf: { } -\cs_set_nopar:Npn \_siunitx_unit_texttt: { } +\cs_new_nopar:Npn \siunitx_unit_mathrm: { } +\cs_new_nopar:Npn \siunitx_unit_mathsf: { } +\cs_new_nopar:Npn \siunitx_unit_mathtt: { } +\cs_new_nopar:Npn \siunitx_unit_textrm: { } +\cs_new_nopar:Npn \siunitx_unit_textsf: { } +\cs_new_nopar:Npn \siunitx_unit_texttt: { } \keys_define:nn { siunitx } { - unit-color .tl_set:N = \_l_siunitx_unit_color_tl, + unit-color .tl_set:N = \l_siunitx_unit_color_tl, unit-math-rm .code:n = - { \cs_set_nopar:Npn \_siunitx_unit_mathrm:n ##1 { #1 {##1} } }, + { \cs_set_nopar:Npn \siunitx_unit_mathrm:n ##1 { #1 {##1} } }, unit-math-sf .code:n = - { \cs_set_nopar:Npn \_siunitx_unit_mathsf:n ##1 { #1 {##1} } }, + { \cs_set_nopar:Npn \siunitx_unit_mathsf:n ##1 { #1 {##1} } }, unit-math-tt .code:n = - { \cs_set_nopar:Npn \_siunitx_unit_mathtt:n ##1 { #1 {##1} } }, + { \cs_set_nopar:Npn \siunitx_unit_mathtt:n ##1 { #1 {##1} } }, unit-mode .choice:, unit-mode / math .code:n = - { \bool_set_true:N \_l_siunitx_unit_math_mode_bool }, + { \bool_set_true:N \l_siunitx_unit_math_mode_bool }, unit-mode / text .code:n = - { \bool_set_false:N \_l_siunitx_unit_math_mode_bool }, + { \bool_set_false:N \l_siunitx_unit_math_mode_bool }, unit-text-rm .code:n = - { \cs_set_nopar:Npn \_siunitx_unit_textrm: {#1} }, + { \cs_set_nopar:Npn \siunitx_unit_textrm: {#1} }, unit-text-sf .code:n = - { \cs_set_nopar:Npn \_siunitx_unit_textsf: {#1} }, + { \cs_set_nopar:Npn \siunitx_unit_textsf: {#1} }, unit-text-tt .code:n = - { \cs_set_nopar:Npn \_siunitx_unit_texttt: {#1} } + { \cs_set_nopar:Npn \siunitx_unit_texttt: {#1} } } % \end{macrocode} %\end{macro} @@ -4841,14 +4883,14 @@ This work consists of the file siunitx.dtx % all round. % \begin{macrocode} \AtBeginDocument { - \tl_set:Nx \_l_siunitx_tmpa_tl { \familydefault } - \tl_if_eq:NNT \_l_siunitx_tmpa_tl \_c_siunitx_textsf_tl + \tl_set:Nx \l_siunitx_tmpa_tl { \familydefault } + \tl_if_eq:NNT \l_siunitx_tmpa_tl \c_siunitx_textsf_tl { \@ifpackageloaded { cmbright } { } { \keys_set:nn { siunitx } { math-rm = \mathsf } } \keys_set:nn { siunitx } { text-rm = \sffamily } } - \tl_if_eq:NNT \_l_siunitx_tmpa_tl \_c_siunitx_texttt_tl + \tl_if_eq:NNT \l_siunitx_tmpa_tl \c_siunitx_texttt_tl { \keys_set:nn { siunitx } { @@ -4867,93 +4909,93 @@ This work consists of the file siunitx.dtx % to have taken some steps first (this is to allow line breaks in the % appropriate places). % -%\begin{macro}{\_l_siunitx_print_arg_tl} +%\begin{macro}{\l_siunitx_print_arg_tl} % The text to print. % \begin{macrocode} -\tl_new:N \_l_siunitx_print_arg_tl +\tl_new:N \l_siunitx_print_arg_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_print_type_tl} +%\begin{macro}{\l_siunitx_print_type_tl} % The type of output (\texttt{number} or \texttt{unit}) is always % needed. % \begin{macrocode} -\tl_new:N \_l_siunitx_print_type_tl +\tl_new:N \l_siunitx_print_type_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_print:nn} -%\begin{macro}{\_siunitx_print:nV} +%\begin{macro}{\siunitx_print:nn} +%\begin{macro}{\siunitx_print:nV} % The main printing function does everything inside a group, as % there are category code and definition changes to make. First, set % the fonts. Then move on to printing mode, before moving to actual % printing. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_print:nn #1#2 { +\cs_new_protected:Npn \siunitx_print:nn #1#2 { \group_begin: - \tl_set:Nn \_l_siunitx_print_type_tl {#1} - \tl_set:Nn \_l_siunitx_print_arg_tl {#2} - \_siunitx_detect_font: - \bool_if:NF \_l_siunitx_detect_mode_bool + \tl_set:Nn \l_siunitx_print_type_tl {#1} + \tl_set:Nn \l_siunitx_print_arg_tl {#2} + \siunitx_detect_font: + \bool_if:NF \l_siunitx_detect_mode_bool { - \bool_if:cTF { _l_siunitx_ #1 _math_mode_bool } - { \bool_set_true:N \_l_siunitx_font_math_mode_bool } - { \bool_set_false:N \_l_siunitx_font_math_mode_bool } + \bool_if:cTF { l_siunitx_ #1 _math_mode_bool } + { \bool_set_true:N \l_siunitx_font_math_mode_bool } + { \bool_set_false:N \l_siunitx_font_math_mode_bool } } - \_siunitx_print_aux: + \siunitx_print_aux: \group_end: } -\cs_generate_variant:Nn \_siunitx_print:nn { nV } +\cs_generate_variant:Nn \siunitx_print:nn { nV } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}[aux]{\_siunitx_print_aux:} +%\begin{macro}[aux]{\siunitx_print_aux:} % The various font changes are set up, then the correct printing % function is called. Everything is inside \cs{text} as this allows % proper setting of the various mode settings. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_print_aux: { +\cs_new_protected_nopar:Npn \siunitx_print_aux: { \text { - \_siunitx_print_color: - \_siunitx_font_weight: - \_siunitx_font_italic: + \siunitx_print_color: + \siunitx_font_weight: + \siunitx_font_italic: \use:c { - _siunitx_ \_l_siunitx_print_type_tl _ - text \_l_siunitx_font_family_tl : + siunitx_ \l_siunitx_print_type_tl _ + text \l_siunitx_font_family_tl : } - \bool_if:NTF \_l_siunitx_font_math_mode_bool - { \_siunitx_print_math: } - { \_siunitx_print_text: } + \bool_if:NTF \l_siunitx_font_math_mode_bool + { \siunitx_print_math: } + { \siunitx_print_text: } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_print_color:} +%\begin{macro}{\siunitx_print_color:} % The colour system checks if \pkg{color} is loaded, and only does % anything if it is. This will change when LaTeX3 proper is available: % there will be colour out of the box! % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_print_color: { - \tl_if_empty:cF { _l_siunitx_ \_l_siunitx_print_type_tl _color_tl } +\cs_new_protected_nopar:Npn \siunitx_print_color: { + \tl_if_empty:cF { l_siunitx_ \l_siunitx_print_type_tl _color_tl } { \color { - \tl_use:c { _l_siunitx_ \_l_siunitx_print_type_tl _color_tl } + \tl_use:c { l_siunitx_ \l_siunitx_print_type_tl _color_tl } } } } \AtBeginDocument { \@ifpackageloaded { color } { } - { \cs_set_eq:NN \_siunitx_print_color: \scan_stop: } + { \cs_set_eq:NN \siunitx_print_color: \scan_stop: } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_print_math:} -%\begin{macro}{\_siunitx_print_text:} +%\begin{macro}{\siunitx_print_math:} +%\begin{macro}{\siunitx_print_text:} % Printing the text means replacing any awkward characters, which is % dependent on the output mode. The rest of the package uses "_" and % "^" to represent sub- and superscripts, respectively. In this way, @@ -4968,36 +5010,36 @@ This work consists of the file siunitx.dtx \char_make_active:N \! \tl_to_lowercase:n { \group_end: - \cs_set_protected_nopar:Npn \_siunitx_print_math: + \cs_set_protected_nopar:Npn \siunitx_print_math: { \ensuremath { \use:c { - _siunitx_ \_l_siunitx_print_type_tl _ - math \_l_siunitx_font_family_tl :n + siunitx_ \l_siunitx_print_type_tl _ + math \l_siunitx_font_family_tl :n } - { \_l_siunitx_print_arg_tl } + { \l_siunitx_print_arg_tl } } } - \cs_set_protected_nopar:Npn \_siunitx_print_text: + \cs_set_protected_nopar:Npn \siunitx_print_text: { - \tl_replace_all_in:Nnn \_l_siunitx_print_arg_tl { @ } - { \_siunitx_print_text_sub:n } - \tl_replace_all_in:Nnn \_l_siunitx_print_arg_tl { ! } - { \_siunitx_print_text_sub:n } - \tl_replace_all_in:Nnn \_l_siunitx_print_arg_tl { ^ } - { \_siunitx_print_text_super:n } - \_l_siunitx_print_arg_tl + \tl_replace_all_in:Nnn \l_siunitx_print_arg_tl { @ } + { \siunitx_print_text_sub:n } + \tl_replace_all_in:Nnn \l_siunitx_print_arg_tl { ! } + { \siunitx_print_text_sub:n } + \tl_replace_all_in:Nnn \l_siunitx_print_arg_tl { ^ } + { \siunitx_print_text_super:n } + \l_siunitx_print_arg_tl } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_print_text_sub:n} -%\begin{macro}[aux]{\_siunitx_print_text_sub_super:n} -%\begin{macro}{\_siunitx_print_text_super:n} +%\begin{macro}{\siunitx_print_text_sub:n} +%\begin{macro}[aux]{\siunitx_print_text_sub_super:n} +%\begin{macro}{\siunitx_print_text_super:n} % The appropriate macros for sub- and superscript in text mode ensure % the appearance is the same as math mode. As "_" is a letter, there % is the need to do a category-code juggle. The search and replace @@ -5009,9 +5051,9 @@ This work consists of the file siunitx.dtx \char_make_math_subscript:N \@ \tl_to_lowercase:n { \group_end: - \cs_set_protected:Npn \_siunitx_print_text_sub:n #1 + \cs_set_protected:Npn \siunitx_print_text_sub:n #1 { - \cs_set:Npn \_siunitx_print_text_sub_super:n ##1 + \cs_set:Npn \siunitx_print_text_sub_super:n ##1 { \ensuremath { @@ -5019,24 +5061,24 @@ This work consists of the file siunitx.dtx ^ { \text {##1} } } } - \peek_meaning_remove:NTF \_siunitx_print_text_super:n - { \_siunitx_print_text_sub_super:n } + \peek_meaning_remove:NTF \siunitx_print_text_super:n + { \siunitx_print_text_sub_super:n } { \ensuremath { @ { \text {#1} } } } } } -\cs_set_protected:Npn \_siunitx_print_text_sub_super:n { } -\cs_set_protected:Npn \_siunitx_print_text_super:n #1 { - \tl_set:Nn \_l_siunitx_tmpa_tl {#1} - \tl_replace_all_in:Nnn \_l_siunitx_tmpa_tl { - } - { \_c_siunitx_minus_tl } - \tl_set:Nx \_l_siunitx_tmpa_tl +\cs_new_protected:Npn \siunitx_print_text_sub_super:n { } +\cs_new_protected:Npn \siunitx_print_text_super:n #1 { + \tl_set:Nn \l_siunitx_tmpa_tl {#1} + \tl_replace_all_in:Nnn \l_siunitx_tmpa_tl { - } + { \c_siunitx_minus_tl } + \tl_set:Nx \l_siunitx_tmpa_tl { \exp_not:N \ensuremath { - ^ { \exp_not:N \text { \exp_not:V \_l_siunitx_tmpa_tl } } + ^ { \exp_not:N \text { \exp_not:V \l_siunitx_tmpa_tl } } } } - \_l_siunitx_tmpa_tl + \l_siunitx_tmpa_tl } % \end{macrocode} %\end{macro} @@ -5049,14 +5091,14 @@ This work consists of the file siunitx.dtx % pre-process the input. The possibility that the data in can contain % more than one number needs to be handled. % -%\begin{macro}{\_l_siunitx_input_product_tl} -%\begin{macro}{\_l_siunitx_input_quotient_tl} +%\begin{macro}{\l_siunitx_input_product_tl} +%\begin{macro}{\l_siunitx_input_quotient_tl} % There are a couple of settings which are created here as they are used % only for pre-processing. % \begin{macrocode} \keys_define:nn { siunitx } { - input-product .tl_set:N = \_l_siunitx_input_product_tl, - input-quotient .tl_set:N = \_l_siunitx_input_quotient_tl, + input-product .tl_set:N = \l_siunitx_input_product_tl, + input-quotient .tl_set:N = \l_siunitx_input_quotient_tl, } \keys_set:nn { siunitx } { input-product = x, @@ -5066,85 +5108,85 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_arg_tl} -%\begin{macro}{\_l_siunitx_number_next_tl} +%\begin{macro}{\l_siunitx_number_arg_tl} +%\begin{macro}{\l_siunitx_number_next_tl} % Storage for the pre-parsed material. The \texttt{arg} variable % contains the current argument, the \texttt{next} variable contains % anything held-over for the next round. % \begin{macrocode} -\tl_new:N \_l_siunitx_number_arg_tl -\tl_new:N \_l_siunitx_number_next_tl +\tl_new:N \l_siunitx_number_arg_tl +\tl_new:N \l_siunitx_number_next_tl % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_multi_tl} +%\begin{macro}{\l_siunitx_number_multi_tl} % For products and quotients, a way of feeding information back. % \begin{macrocode} -\tl_new:N \_l_siunitx_number_multi_tl +\tl_new:N \l_siunitx_number_multi_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_denominator_tl} -%\begin{macro}{\_l_siunitx_number_numerator_tl} +%\begin{macro}{\l_siunitx_number_denominator_tl} +%\begin{macro}{\l_siunitx_number_numerator_tl} % When searching for quotients, some more storage is needed. % \begin{macrocode} -\tl_new:N \_l_siunitx_number_denominator_tl -\tl_new:N \_l_siunitx_number_numerator_tl +\tl_new:N \l_siunitx_number_denominator_tl +\tl_new:N \l_siunitx_number_numerator_tl % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_preprocess:n} -%\begin{macro}{\_siunitx_number_preprocess:V} +%\begin{macro}{\siunitx_number_preprocess:n} +%\begin{macro}{\siunitx_number_preprocess:V} % The pre-processor starts with the obvious: the most likely outcome is % that all of the argument is passed through unchanged. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_preprocess:n #1 { - \_siunitx_number_preprocess_init: - \tl_set:Nn \_l_siunitx_number_arg_tl {#1} - \_siunitx_number_preprocess_product: - \tl_if_empty:NT \_l_siunitx_number_multi_tl - { \_siunitx_number_preprocess_quotient: } +\cs_new_protected:Npn \siunitx_number_preprocess:n #1 { + \siunitx_number_preprocess_init: + \tl_set:Nn \l_siunitx_number_arg_tl {#1} + \siunitx_number_preprocess_product: + \tl_if_empty:NT \l_siunitx_number_multi_tl + { \siunitx_number_preprocess_quotient: } } -\cs_generate_variant:Nn \_siunitx_number_preprocess:n { V } +\cs_generate_variant:Nn \siunitx_number_preprocess:n { V } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_preprocess_init:} +%\begin{macro}{\siunitx_number_preprocess_init:} % A little initialisation as normal. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_preprocess_init: { - \bool_set_false:N \_l_siunitx_error_bool - \tl_clear:N \_l_siunitx_number_multi_tl +\cs_new_protected_nopar:Npn \siunitx_number_preprocess_init: { + \bool_set_false:N \l_siunitx_error_bool + \tl_clear:N \l_siunitx_number_multi_tl } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_preprocess_product:} -%\begin{macro}[aux]{\_siunitx_number_preprocess_product_aux:N} +%\begin{macro}{\siunitx_number_preprocess_product:} +%\begin{macro}[aux]{\siunitx_number_preprocess_product_aux:N} % Rather than search through the entire argument, we use the % delimited-argument trick. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_preprocess_product: { - \tl_map_function:NN \_l_siunitx_input_product_tl - \_siunitx_number_preprocess_product_aux:N +\cs_new_protected_nopar:Npn \siunitx_number_preprocess_product: { + \tl_map_function:NN \l_siunitx_input_product_tl + \siunitx_number_preprocess_product_aux:N } -\cs_set_protected:Npn \_siunitx_number_preprocess_product_aux:N #1 { - \tl_if_in:NnT \_l_siunitx_number_arg_tl {#1} +\cs_new_protected:Npn \siunitx_number_preprocess_product_aux:N #1 { + \tl_if_in:NnT \l_siunitx_number_arg_tl {#1} { - \cs_set:Npn \_siunitx_tmp:w ##1 #1 ##2 \q_stop + \cs_set:Npn \siunitx_tmp:w ##1 #1 ##2 \q_stop { - \tl_set:Nn \_l_siunitx_number_arg_tl {##1} - \tl_set:Nn \_l_siunitx_number_next_tl {##2} - \tl_set:Nn \_l_siunitx_number_multi_tl { product } + \tl_set:Nn \l_siunitx_number_arg_tl {##1} + \tl_set:Nn \l_siunitx_number_next_tl {##2} + \tl_set:Nn \l_siunitx_number_multi_tl { product } } - \exp_after:wN \_siunitx_tmp:w \_l_siunitx_number_arg_tl \q_stop - \tl_if_empty:NT \_l_siunitx_number_arg_tl - { \_siunitx_error:n { starting-product-token } } - \tl_if_empty:NT \_l_siunitx_number_next_tl - { \_siunitx_error:n { ending-product-token } } + \exp_after:wN \siunitx_tmp:w \l_siunitx_number_arg_tl \q_stop + \tl_if_empty:NT \l_siunitx_number_arg_tl + { \siunitx_error:n { starting-product-token } } + \tl_if_empty:NT \l_siunitx_number_next_tl + { \siunitx_error:n { ending-product-token } } \tl_map_break: } } @@ -5152,31 +5194,31 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_preprocess_quotient:} -%\begin{macro}[aux]{\_siunitx_number_preprocess_quotient_aux:N} +%\begin{macro}{\siunitx_number_preprocess_quotient:} +%\begin{macro}[aux]{\siunitx_number_preprocess_quotient_aux:N} % For the quotient, only one token can appear in each part. So there % is an additional error check. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_preprocess_quotient: { - \tl_map_function:NN \_l_siunitx_input_quotient_tl - \_siunitx_number_preprocess_quotient_aux:N +\cs_new_protected_nopar:Npn \siunitx_number_preprocess_quotient: { + \tl_map_function:NN \l_siunitx_input_quotient_tl + \siunitx_number_preprocess_quotient_aux:N } -\cs_set_protected:Npn \_siunitx_number_preprocess_quotient_aux:N #1 { - \tl_if_in:NnT \_l_siunitx_number_arg_tl {#1} +\cs_new_protected:Npn \siunitx_number_preprocess_quotient_aux:N #1 { + \tl_if_in:NnT \l_siunitx_number_arg_tl {#1} { - \cs_set:Npn \_siunitx_tmp:w ##1 #1 ##2 \q_stop + \cs_set:Npn \siunitx_tmp:w ##1 #1 ##2 \q_stop { - \tl_set:Nn \_l_siunitx_number_numerator_tl {##1} - \tl_set:Nn \_l_siunitx_number_denominator_tl {##2} - \tl_set:Nn \_l_siunitx_number_multi_tl { quotient } + \tl_set:Nn \l_siunitx_number_numerator_tl {##1} + \tl_set:Nn \l_siunitx_number_denominator_tl {##2} + \tl_set:Nn \l_siunitx_number_multi_tl { quotient } } - \exp_after:wN \_siunitx_tmp:w \_l_siunitx_number_arg_tl \q_stop - \tl_if_empty:NT \_l_siunitx_number_numerator_tl - { \_siunitx_error:n { starting-quotient-token } } - \tl_if_empty:NT \_l_siunitx_number_denominator_tl - { \_siunitx_error:n { ending-quotient-token } } - \tl_if_in:NnT \_l_siunitx_number_denominator_tl {#1} - { \_siunitx_error:n { duplicate-quotient-token } } + \exp_after:wN \siunitx_tmp:w \l_siunitx_number_arg_tl \q_stop + \tl_if_empty:NT \l_siunitx_number_numerator_tl + { \siunitx_error:n { starting-quotient-token } } + \tl_if_empty:NT \l_siunitx_number_denominator_tl + { \siunitx_error:n { ending-quotient-token } } + \tl_if_in:NnT \l_siunitx_number_denominator_tl {#1} + { \siunitx_error:n { duplicate-quotient-token } } \tl_map_break: } } @@ -5192,33 +5234,33 @@ This work consists of the file siunitx.dtx % quickly. For most documents, this gain more than offsets any slight % losses with more complicated numbers. % -%\begin{macro}{\_c_siunitx_number_part_complex_tl} +%\begin{macro}{\c_siunitx_number_part_complex_tl} % A couple of the comparisons needed for checking complex numbers % are done using stored text. To make them a little quicker, a % pre-stored version of the text is stored here. % \begin{macrocode} -\tl_new:N \_c_siunitx_number_part_complex_tl -\tl_set:Nn \_c_siunitx_number_part_complex_tl { complex } +\tl_new:N \c_siunitx_number_part_complex_tl +\tl_set:Nn \c_siunitx_number_part_complex_tl { complex } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_in_complex_bool} -%\begin{macro}{\_l_siunitx_number_in_complex_root_bool} -%\begin{macro}{\_l_siunitx_number_in_decimal_bool} -%\begin{macro}{\_l_siunitx_number_in_exponent_bool} -%\begin{macro}{\_l_siunitx_number_in_first_bool} -%\begin{macro}{\_l_siunitx_number_in_sign_bool} -%\begin{macro}{\_l_siunitx_number_in_uncert_bool} -%\begin{macro}{\_l_siunitx_number_in_value_bool} +%\begin{macro}{\l_siunitx_number_in_complex_bool} +%\begin{macro}{\l_siunitx_number_in_complex_root_bool} +%\begin{macro}{\l_siunitx_number_in_decimal_bool} +%\begin{macro}{\l_siunitx_number_in_exponent_bool} +%\begin{macro}{\l_siunitx_number_in_first_bool} +%\begin{macro}{\l_siunitx_number_in_sign_bool} +%\begin{macro}{\l_siunitx_number_in_uncert_bool} +%\begin{macro}{\l_siunitx_number_in_value_bool} % \begin{macrocode} -\bool_new:N \_l_siunitx_number_in_complex_bool -\bool_new:N \_l_siunitx_number_in_complex_root_bool -\bool_new:N \_l_siunitx_number_in_decimal_bool -\bool_new:N \_l_siunitx_number_in_exponent_bool -\bool_new:N \_l_siunitx_number_in_first_bool -\bool_new:N \_l_siunitx_number_in_sign_bool -\bool_new:N \_l_siunitx_number_in_uncert_bool -\bool_new:N \_l_siunitx_number_in_value_bool +\bool_new:N \l_siunitx_number_in_complex_bool +\bool_new:N \l_siunitx_number_in_complex_root_bool +\bool_new:N \l_siunitx_number_in_decimal_bool +\bool_new:N \l_siunitx_number_in_exponent_bool +\bool_new:N \l_siunitx_number_in_first_bool +\bool_new:N \l_siunitx_number_in_sign_bool +\bool_new:N \l_siunitx_number_in_uncert_bool +\bool_new:N \l_siunitx_number_in_value_bool % \end{macrocode} %\end{macro} %\end{macro} @@ -5229,37 +5271,37 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_in_prop} +%\begin{macro}{\l_siunitx_number_in_prop} % The parsed number is stored in a property list as its constituent % parts. % \begin{macrocode} -\prop_new:N \_l_siunitx_number_in_prop +\prop_new:N \l_siunitx_number_in_prop % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_parsed_tl} +%\begin{macro}{\l_siunitx_number_parsed_tl} % Each part of the number parsed has to be built up in a token list. % \begin{macrocode} -\tl_new:N \_l_siunitx_number_parsed_tl +\tl_new:N \l_siunitx_number_parsed_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_part_tl} -%\begin{macro}{\_l_siunitx_number_part_decimal_tl} -%\begin{macro}{\_l_siunitx_number_part_decimal_marker_tl} -%\begin{macro}{\_l_siunitx_number_part_integer_tl} -%\begin{macro}{\_l_siunitx_number_part_sign_tl} -%\begin{macro}{\_l_siunitx_number_part_uncert_tl} +%\begin{macro}{\l_siunitx_number_part_tl} +%\begin{macro}{\l_siunitx_number_part_decimal_tl} +%\begin{macro}{\l_siunitx_number_part_decimal_marker_tl} +%\begin{macro}{\l_siunitx_number_part_integer_tl} +%\begin{macro}{\l_siunitx_number_part_sign_tl} +%\begin{macro}{\l_siunitx_number_part_uncert_tl} % The names of various parts of a number are set up as stored values. % This lets some code be used for different parts of a number, while % pre-storing everything brings a performance (and clarity) benefit. % \begin{macrocode} -\tl_new:N \_l_siunitx_number_part_tl -\tl_new:N \_l_siunitx_number_part_decimal_tl -\tl_new:N \_l_siunitx_number_part_decimal_marker_tl -\tl_new:N \_l_siunitx_number_part_integer_tl -\tl_new:N \_l_siunitx_number_part_sign_tl -\tl_new:N \_l_siunitx_number_part_uncert_tl +\tl_new:N \l_siunitx_number_part_tl +\tl_new:N \l_siunitx_number_part_decimal_tl +\tl_new:N \l_siunitx_number_part_decimal_marker_tl +\tl_new:N \l_siunitx_number_part_integer_tl +\tl_new:N \l_siunitx_number_part_sign_tl +\tl_new:N \l_siunitx_number_part_uncert_tl % \end{macrocode} %\end{macro} %\end{macro} @@ -5268,31 +5310,31 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_input_uncert_close_tl} -%\begin{macro}{\_l_siunitx_input_complex_tl} -%\begin{macro}{\_l_siunitx_input_decimal_tl} -%\begin{macro}{\_l_siunitx_input_digit_tl} -%\begin{macro}{\_l_siunitx_input_exponent_tl} -%\begin{macro}{\_l_siunitx_input_ignore_tl} -%\begin{macro}{\_l_siunitx_input_uncert_open_tl} -%\begin{macro}{\_l_siunitx_input_protect_tl} -%\begin{macro}{\_l_siunitx_input_sign_tl} -%\begin{macro}{\_l_siunitx_input_symbol_tl} +%\begin{macro}{\l_siunitx_input_uncert_close_tl} +%\begin{macro}{\l_siunitx_input_complex_tl} +%\begin{macro}{\l_siunitx_input_decimal_tl} +%\begin{macro}{\l_siunitx_input_digit_tl} +%\begin{macro}{\l_siunitx_input_exponent_tl} +%\begin{macro}{\l_siunitx_input_ignore_tl} +%\begin{macro}{\l_siunitx_input_uncert_open_tl} +%\begin{macro}{\l_siunitx_input_protect_tl} +%\begin{macro}{\l_siunitx_input_sign_tl} +%\begin{macro}{\l_siunitx_input_symbol_tl} % The various tokens to check against when parsing are all set up here. % These are valid inside a single number: the pre-processor has already % set up the appropriate things for products and quotients. % \begin{macrocode} \keys_define:nn { siunitx } { - input-close-uncertainty .tl_set:N = \_l_siunitx_input_uncert_close_tl, - input-complex-roots .tl_set:N = \_l_siunitx_input_complex_tl, - input-decimal-markers .tl_set:N = \_l_siunitx_input_decimal_tl, - input-digits .tl_set:N = \_l_siunitx_input_digit_tl, - input-exponent-markers .tl_set:N = \_l_siunitx_input_exponent_tl, - input-ignore .tl_set:N = \_l_siunitx_input_ignore_tl, - input-open-uncertainty .tl_set:N = \_l_siunitx_input_uncert_open_tl, - input-protect-tokens .tl_set:N = \_l_siunitx_input_protect_tl, - input-signs .tl_set:N = \_l_siunitx_input_sign_tl, - input-symbols .tl_set:N = \_l_siunitx_input_symbol_tl, + input-close-uncertainty .tl_set:N = \l_siunitx_input_uncert_close_tl, + input-complex-roots .tl_set:N = \l_siunitx_input_complex_tl, + input-decimal-markers .tl_set:N = \l_siunitx_input_decimal_tl, + input-digits .tl_set:N = \l_siunitx_input_digit_tl, + input-exponent-markers .tl_set:N = \l_siunitx_input_exponent_tl, + input-ignore .tl_set:N = \l_siunitx_input_ignore_tl, + input-open-uncertainty .tl_set:N = \l_siunitx_input_uncert_open_tl, + input-protect-tokens .tl_set:N = \l_siunitx_input_protect_tl, + input-signs .tl_set:N = \l_siunitx_input_sign_tl, + input-symbols .tl_set:N = \l_siunitx_input_symbol_tl, } \keys_set:nn { siunitx } { % ( input-close-uncertainty = ), @@ -5317,187 +5359,187 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_parse:n} -%\begin{macro}{\_siunitx_number_in_parse:V} -%\begin{macro}[aux]{\_siunitx_number_in_parse_aux:n} +%\begin{macro}{\siunitx_number_in_parse:n} +%\begin{macro}{\siunitx_number_in_parse:V} +%\begin{macro}[aux]{\siunitx_number_in_parse_aux:n} % The parsing routine starts by replacing any formatting in the input % using \cs{tl_set_rescan:Nnx}. Next, there is a quick routine to % ensure that all signs are single tokens. The main loop then takes % place, which will parse the input into the property list and also % set up the flags. There are then some checks and possible corrections. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_parse:n #1 { +\cs_new_protected:Npn \siunitx_number_in_parse:n #1 { \tl_if_empty:nF {#1} { - \_siunitx_number_in_init: - \cs_set_eq:NN \_siunitx_number_in_parse_more:N - \_siunitx_number_in_parse_mantissa_aux:N - \_siunitx_number_in_parse_aux:n {#1} + \siunitx_number_in_init: + \cs_set_eq:NN \siunitx_number_in_parse_more:N + \siunitx_number_in_parse_mantissa_aux:N + \siunitx_number_in_parse_aux:n {#1} } } -\cs_generate_variant:Nn \_siunitx_number_in_parse:n { V } -\cs_set_protected:Npn \_siunitx_number_in_parse_aux:n #1 { - \tl_set_rescan:Nnx \_l_siunitx_number_arg_tl +\cs_generate_variant:Nn \siunitx_number_in_parse:n { V } +\cs_new_protected:Npn \siunitx_number_in_parse_aux:n #1 { + \tl_set_rescan:Nnx \l_siunitx_number_arg_tl { - \_siunitx_number_in_protect: + \siunitx_number_in_protect: \char_make_ignore:N \~ \char_make_other:N \, \char_make_other:N \. \cs_set_eq:NN \, \prg_do_nothing: } {#1} - \_siunitx_number_in_sign_replace:N \_l_siunitx_number_arg_tl - \tl_map_function:NN \_l_siunitx_number_arg_tl - \_siunitx_number_in_parse_loop:N - \tl_if_empty:NF \_l_siunitx_number_parsed_tl + \siunitx_number_in_sign_replace:N \l_siunitx_number_arg_tl + \tl_map_function:NN \l_siunitx_number_arg_tl + \siunitx_number_in_parse_loop:N + \tl_if_empty:NF \l_siunitx_number_parsed_tl { - \bool_if:NTF \_l_siunitx_number_in_uncert_bool - { \_siunitx_error:nx { invalid-number } {#1} } + \bool_if:NTF \l_siunitx_number_in_uncert_bool + { \siunitx_error:nx { invalid-number } {#1} } { - \prop_put:NVn \_l_siunitx_number_in_prop - \_l_siunitx_number_part_tl { true } - \bool_if:NTF \_l_siunitx_number_in_decimal_bool + \prop_put:NVn \l_siunitx_number_in_prop + \l_siunitx_number_part_tl { true } + \bool_if:NTF \l_siunitx_number_in_decimal_bool { - \prop_put:NVV \_l_siunitx_number_in_prop - \_l_siunitx_number_part_decimal_tl - \_l_siunitx_number_parsed_tl + \prop_put:NVV \l_siunitx_number_in_prop + \l_siunitx_number_part_decimal_tl + \l_siunitx_number_parsed_tl } { - \prop_put:NVV \_l_siunitx_number_in_prop - \_l_siunitx_number_part_integer_tl - \_l_siunitx_number_parsed_tl + \prop_put:NVV \l_siunitx_number_in_prop + \l_siunitx_number_part_integer_tl + \l_siunitx_number_parsed_tl } } } - \_siunitx_number_in_check:n {#1} + \siunitx_number_in_check:n {#1} } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_init:} -%\begin{macro}{\_siunitx_number_in_init_part:n} +%\begin{macro}{\siunitx_number_in_init:} +%\begin{macro}{\siunitx_number_in_init_part:n} % The set up code is divided into to parts. First, code only needed % once to start the entire parser. Then a second group, which is % carried out at the start of each part of a number, and so is called % from a few places. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_in_init: { - \cs_set_eq:NN \_siunitx_number_in_parse_loop:N - \_siunitx_number_in_parse_mantissa:N - \cs_set_eq:NN \_siunitx_number_in_check:n - \_siunitx_number_in_check_short:n - \tl_clear:N \_l_siunitx_number_parsed_tl - \prop_clear:N \_l_siunitx_number_in_prop - \bool_set_false:N \_l_siunitx_error_bool - \bool_set_false:N \_l_siunitx_number_in_complex_bool - \bool_set_false:N \_l_siunitx_number_in_complex_root_bool - \bool_set_false:N \_l_siunitx_number_in_exponent_bool - \bool_set_false:N \_l_siunitx_number_in_uncert_bool - \_siunitx_number_in_init_part:n { mantissa } -} -\cs_set_protected_nopar:Npn \_siunitx_number_in_init_part:n #1 { - \bool_set_false:N \_l_siunitx_number_in_decimal_bool - \bool_set_true:N \_l_siunitx_number_in_first_bool - \bool_set_false:N \_l_siunitx_number_in_sign_bool - \bool_set_false:N \_l_siunitx_number_in_value_bool - \tl_set:Nn \_l_siunitx_number_part_tl {#1} - \tl_set:Nn \_l_siunitx_number_part_decimal_tl { #1 -decimal } - \tl_set:Nn \_l_siunitx_number_part_decimal_marker_tl +\cs_new_protected_nopar:Npn \siunitx_number_in_init: { + \cs_set_eq:NN \siunitx_number_in_parse_loop:N + \siunitx_number_in_parse_mantissa:N + \cs_set_eq:NN \siunitx_number_in_check:n + \siunitx_number_in_check_short:n + \tl_clear:N \l_siunitx_number_parsed_tl + \prop_clear:N \l_siunitx_number_in_prop + \bool_set_false:N \l_siunitx_error_bool + \bool_set_false:N \l_siunitx_number_in_complex_bool + \bool_set_false:N \l_siunitx_number_in_complex_root_bool + \bool_set_false:N \l_siunitx_number_in_exponent_bool + \bool_set_false:N \l_siunitx_number_in_uncert_bool + \siunitx_number_in_init_part:n { mantissa } +} +\cs_new_protected_nopar:Npn \siunitx_number_in_init_part:n #1 { + \bool_set_false:N \l_siunitx_number_in_decimal_bool + \bool_set_true:N \l_siunitx_number_in_first_bool + \bool_set_false:N \l_siunitx_number_in_sign_bool + \bool_set_false:N \l_siunitx_number_in_value_bool + \tl_set:Nn \l_siunitx_number_part_tl {#1} + \tl_set:Nn \l_siunitx_number_part_decimal_tl { #1 -decimal } + \tl_set:Nn \l_siunitx_number_part_decimal_marker_tl { #1 -decimal-marker } - \tl_set:Nn \_l_siunitx_number_part_integer_tl { #1 -integer } - \tl_set:Nn \_l_siunitx_number_part_sign_tl { #1 -sign } - \tl_set:Nn \_l_siunitx_number_part_uncert_tl { #1 -uncertainty } + \tl_set:Nn \l_siunitx_number_part_integer_tl { #1 -integer } + \tl_set:Nn \l_siunitx_number_part_sign_tl { #1 -sign } + \tl_set:Nn \l_siunitx_number_part_uncert_tl { #1 -uncertainty } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_protect:} -%\begin{macro}[aux]{\_siunitx_number_in_protect_aux:N} +%\begin{macro}{\siunitx_number_in_protect:} +%\begin{macro}[aux]{\siunitx_number_in_protect_aux:N} % Under some circumstances (for example when loading \pkg{breqn}) % some tokens do not behave safely under \texttt{x} expansion (at the % moment). To get round this, they are redefined here. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_in_protect: { - \tl_map_function:NN \_l_siunitx_input_protect_tl - \_siunitx_number_in_protect_aux:N +\cs_new_protected_nopar:Npn \siunitx_number_in_protect: { + \tl_map_function:NN \l_siunitx_input_protect_tl + \siunitx_number_in_protect_aux:N } -\cs_set_protected:Npn \_siunitx_number_in_protect_aux:N #1 { +\cs_new_protected:Npn \siunitx_number_in_protect_aux:N #1 { \cs_set_eq:NN #1 \scan_stop: } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_sign_replace:N} +%\begin{macro}{\siunitx_number_in_sign_replace:N} % A short spin-out to keep the replacement of tokens clear. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_in_sign_replace:N #1 { +\cs_new_protected_nopar:Npn \siunitx_number_in_sign_replace:N #1 { \tl_replace_all_in:Nnn #1 { -+ } { \mp } \tl_replace_all_in:Nnn #1 { +- } { \pm } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_parse_error:nx} -%\begin{macro}{\_siunitx_number_in_parse_error:nV} +%\begin{macro}{\siunitx_number_in_parse_error:nx} +%\begin{macro}{\siunitx_number_in_parse_error:nV} % There are lots of rather similar errors in the parser, all of which % require a \cs{tl_map_break:}. To keep life simple, this is set up % here. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_parse_error:nx #1#2 { - \_siunitx_error:nx {#1} { \exp_not:n {#2} } +\cs_new_protected:Npn \siunitx_number_in_parse_error:nx #1#2 { + \siunitx_error:nx {#1} { \exp_not:n {#2} } \tl_map_break: } -\cs_generate_variant:Nn \_siunitx_number_in_parse_error:nx { nV } +\cs_generate_variant:Nn \siunitx_number_in_parse_error:nx { nV } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_parse_loop:N} -%\begin{macro}{\_siunitx_number_in_parse_more:N} +%\begin{macro}{\siunitx_number_in_parse_loop:N} +%\begin{macro}{\siunitx_number_in_parse_more:N} % The main loop is set up as a place holder, as the definition is % varied to keep things fast. There is also a place holder for the % extended routing for normal mantissas. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_parse_loop:N #1 { } -\cs_set_protected:Npn \_siunitx_number_in_parse_more:N #1 { } +\cs_new_protected:Npn \siunitx_number_in_parse_loop:N #1 { } +\cs_new_protected:Npn \siunitx_number_in_parse_more:N #1 { } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_parse_restricted:N} +%\begin{macro}{\siunitx_number_in_parse_restricted:N} % When parsing numbers for the \cs{ang} function, no extended input % is permitted at all. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_parse_restricted:N #1 { - \tl_if_in:NnTF \_l_siunitx_input_exponent_tl {#1} +\cs_new_protected:Npn \siunitx_number_in_parse_restricted:N #1 { + \tl_if_in:NnTF \l_siunitx_input_exponent_tl {#1} { - \_siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nx { restricted-number } {#1} } { - \tl_if_in:NnTF \_l_siunitx_input_uncert_open_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_uncert_open_tl {#1} { - \_siunitx_number_in_parse_error:nV - { restricted-number } \_l_siunitx_number_arg_tl + \siunitx_number_in_parse_error:nV + { restricted-number } \l_siunitx_number_arg_tl } { - \tl_if_in:NnTF \_l_siunitx_input_uncert_close_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_uncert_close_tl {#1} { - \_siunitx_number_in_parse_error:nV - { restricted-number } \_l_siunitx_number_arg_tl + \siunitx_number_in_parse_error:nV + { restricted-number } \l_siunitx_number_arg_tl } { - \tl_if_in:NnTF \_l_siunitx_input_complex_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_complex_tl {#1} { - \_siunitx_number_in_parse_error:nV - { restricted-number } \_l_siunitx_number_arg_tl + \siunitx_number_in_parse_error:nV + { restricted-number } \l_siunitx_number_arg_tl } { - \_siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nx { restricted-number } {#1} } } @@ -5507,62 +5549,62 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_parse_complex:N} +%\begin{macro}{\siunitx_number_in_parse_complex:N} % After a complex root when the root is \emph{after} the number, there % are a very limited range of legitimate tokens. Thus most cases can be % trapped with a modified parser. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_parse_complex:N #1 { - \tl_if_in:NnTF \_l_siunitx_input_exponent_tl {#1} +\cs_new_protected:Npn \siunitx_number_in_parse_complex:N #1 { + \tl_if_in:NnTF \l_siunitx_input_exponent_tl {#1} { - \cs_set_eq:NN \_siunitx_number_in_parse_loop:N - \_siunitx_number_in_parse_mantissa:N - \_siunitx_number_in_exponent:N #1 + \cs_set_eq:NN \siunitx_number_in_parse_loop:N + \siunitx_number_in_parse_mantissa:N + \siunitx_number_in_exponent:N #1 } { - \tl_if_in:NnF \_l_siunitx_input_ignore_tl {#1} + \tl_if_in:NnF \l_siunitx_input_ignore_tl {#1} { - \_siunitx_number_in_parse_error:nV + \siunitx_number_in_parse_error:nV { misplaced-complex-root-token } - \_l_siunitx_number_arg_tl + \l_siunitx_number_arg_tl } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_parse_exponent:N} +%\begin{macro}{\siunitx_number_in_parse_exponent:N} % When processing an exponent, the \enquote{extended} part of the % number which is valid in a mantissa is no longer needed. So the % auxiliary function is pointed to a series of errors instead. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_parse_exponent:N #1 { - \tl_if_in:NnTF \_l_siunitx_input_exponent_tl {#1} +\cs_new_protected:Npn \siunitx_number_in_parse_exponent:N #1 { + \tl_if_in:NnTF \l_siunitx_input_exponent_tl {#1} { - \_siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nx { duplicate-exponent-token } { \token_to_str:N #1 } } { - \tl_if_in:NnTF \_l_siunitx_input_uncert_open_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_uncert_open_tl {#1} { - \_siunitx_number_in_parse_error:nV - { invalid-token-in-exponent } \_l_siunitx_number_arg_tl + \siunitx_number_in_parse_error:nV + { invalid-token-in-exponent } \l_siunitx_number_arg_tl } { - \tl_if_in:NnTF \_l_siunitx_input_uncert_close_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_uncert_close_tl {#1} { - \_siunitx_number_in_parse_error:nV - { invalid-token-in-exponent } \_l_siunitx_number_arg_tl + \siunitx_number_in_parse_error:nV + { invalid-token-in-exponent } \l_siunitx_number_arg_tl } { - \tl_if_in:NnTF \_l_siunitx_input_complex_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_complex_tl {#1} { - \_siunitx_number_in_parse_error:nV + \siunitx_number_in_parse_error:nV { invalid-token-in-exponent } - \_l_siunitx_number_arg_tl + \l_siunitx_number_arg_tl } { - \_siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nx { invalid-token-in-number } {#1} } } @@ -5572,55 +5614,55 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_parse_mantissa:N} -%\begin{macro}{\_siunitx_number_in_parse_mantissa_aux:N} +%\begin{macro}{\siunitx_number_in_parse_mantissa:N} +%\begin{macro}{\siunitx_number_in_parse_mantissa_aux:N} % For the mantissa, most things are valid. The procedure is split % into two parts, with the simple symbols handled here and the more % complex ones in a second part(which needs to be varied). Essentially % everything here is a comparison, done so that the code is a fast as % possible. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_parse_mantissa:N #1 { - \tl_if_in:NnTF \_l_siunitx_input_digit_tl {#1} - { \_siunitx_number_in_digit:N #1 } +\cs_new_protected:Npn \siunitx_number_in_parse_mantissa:N #1 { + \tl_if_in:NnTF \l_siunitx_input_digit_tl {#1} + { \siunitx_number_in_digit:N #1 } { - \tl_if_in:NnTF \_l_siunitx_input_decimal_tl {#1} - { \_siunitx_number_in_decimal:N #1 } + \tl_if_in:NnTF \l_siunitx_input_decimal_tl {#1} + { \siunitx_number_in_decimal:N #1 } { - \tl_if_in:NnTF \_l_siunitx_input_sign_tl {#1} - { \_siunitx_number_in_sign:N #1 } + \tl_if_in:NnTF \l_siunitx_input_sign_tl {#1} + { \siunitx_number_in_sign:N #1 } { - \tl_if_in:NnTF \_l_siunitx_input_symbol_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_symbol_tl {#1} { - \prop_put:Nnn \_l_siunitx_number_in_prop { symbolic } + \prop_put:Nnn \l_siunitx_number_in_prop { symbolic } { true } - \_siunitx_number_in_digit:N #1 + \siunitx_number_in_digit:N #1 } { - \tl_if_in:NnF \_l_siunitx_input_ignore_tl {#1} - { \_siunitx_number_in_parse_more:N #1 } + \tl_if_in:NnF \l_siunitx_input_ignore_tl {#1} + { \siunitx_number_in_parse_more:N #1 } } } } } } -\cs_set_protected:Npn \_siunitx_number_in_parse_mantissa_aux:N #1 { - \tl_if_in:NnTF \_l_siunitx_input_exponent_tl {#1} - { \_siunitx_number_in_exponent:N #1 } +\cs_new_protected:Npn \siunitx_number_in_parse_mantissa_aux:N #1 { + \tl_if_in:NnTF \l_siunitx_input_exponent_tl {#1} + { \siunitx_number_in_exponent:N #1 } { - \tl_if_in:NnTF \_l_siunitx_input_uncert_open_tl {#1} - { \_siunitx_number_in_uncert_open:N #1 } + \tl_if_in:NnTF \l_siunitx_input_uncert_open_tl {#1} + { \siunitx_number_in_uncert_open:N #1 } { - \tl_if_in:NnTF \_l_siunitx_input_uncert_close_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_uncert_close_tl {#1} { - \_siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nx { misplaced-uncertainty-token } {#1} } { - \tl_if_in:NnTF \_l_siunitx_input_complex_tl {#1} - { \_siunitx_number_in_complex:N #1 } + \tl_if_in:NnTF \l_siunitx_input_complex_tl {#1} + { \siunitx_number_in_complex:N #1 } { - \_siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nx { invalid-token-in-number } {#1} } } @@ -5631,44 +5673,44 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_parse_uncert:N} +%\begin{macro}{\siunitx_number_in_parse_uncert:N} % Within uncertainties, the range of tokens is limited. An alternative % parsing system can therefore be used. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_parse_uncert:N #1 { - \tl_if_in:NnTF \_l_siunitx_input_digit_tl {#1} - { \_siunitx_number_in_digit:N #1 } +\cs_new_protected:Npn \siunitx_number_in_parse_uncert:N #1 { + \tl_if_in:NnTF \l_siunitx_input_digit_tl {#1} + { \siunitx_number_in_digit:N #1 } { - \tl_if_in:NnTF \_l_siunitx_input_decimal_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_decimal_tl {#1} { - \_siunitx_number_in_parse_error:nV + \siunitx_number_in_parse_error:nV { invalid-token-in-uncertainty } - \_l_siunitx_number_arg_tl + \l_siunitx_number_arg_tl } { - \tl_if_in:NnTF \_l_siunitx_input_sign_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_sign_tl {#1} { - \_siunitx_number_in_parse_error:nV + \siunitx_number_in_parse_error:nV { invalid-token-in-uncertainty } - \_l_siunitx_number_arg_tl + \l_siunitx_number_arg_tl } { - \tl_if_in:NnTF \_l_siunitx_input_symbol_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_symbol_tl {#1} { - \prop_put:Nnn \_l_siunitx_number_in_prop { symbolic } + \prop_put:Nnn \l_siunitx_number_in_prop { symbolic } { true } - \_siunitx_number_in_digit:N #1 + \siunitx_number_in_digit:N #1 } { - \tl_if_in:NnF \_l_siunitx_input_ignore_tl {#1} + \tl_if_in:NnF \l_siunitx_input_ignore_tl {#1} { - \tl_if_in:NnTF \_l_siunitx_input_uncert_close_tl + \tl_if_in:NnTF \l_siunitx_input_uncert_close_tl {#1} - { \_siunitx_number_in_uncert_close:N #1 } + { \siunitx_number_in_uncert_close:N #1 } { - \_siunitx_number_in_parse_error:nV + \siunitx_number_in_parse_error:nV { invalid-token-in-uncertainty } - \_l_siunitx_number_arg_tl + \l_siunitx_number_arg_tl } } } @@ -5679,36 +5721,36 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_parse_uncert_after:N} +%\begin{macro}{\siunitx_number_in_parse_uncert_after:N} % After an uncertainty, there is once again a very limited range of % tokens that can be present in a valid number. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_parse_uncert_after:N #1 { - \tl_if_in:NnTF \_l_siunitx_input_exponent_tl {#1} +\cs_new_protected:Npn \siunitx_number_in_parse_uncert_after:N #1 { + \tl_if_in:NnTF \l_siunitx_input_exponent_tl {#1} { - \cs_set_eq:NN \_siunitx_number_in_parse_loop:N - \_siunitx_number_in_parse_mantissa:N - \_siunitx_number_in_exponent:N #1 + \cs_set_eq:NN \siunitx_number_in_parse_loop:N + \siunitx_number_in_parse_mantissa:N + \siunitx_number_in_exponent:N #1 } { - \tl_if_in:NnTF \_l_siunitx_input_sign_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_sign_tl {#1} { - \cs_set_eq:NN \_siunitx_number_in_parse_loop:N - \_siunitx_number_in_parse_mantissa:N - \_siunitx_number_in_sign:N #1 + \cs_set_eq:NN \siunitx_number_in_parse_loop:N + \siunitx_number_in_parse_mantissa:N + \siunitx_number_in_sign:N #1 } { - \tl_if_in:NnF \_l_siunitx_input_ignore_tl {#1} + \tl_if_in:NnF \l_siunitx_input_ignore_tl {#1} { - \tl_if_in:NnTF \_l_siunitx_input_complex_tl {#1} + \tl_if_in:NnTF \l_siunitx_input_complex_tl {#1} { - \cs_set_eq:NN \_siunitx_number_in_parse_loop:N - \_siunitx_number_in_parse_mantissa:N - \_siunitx_number_in_complex:N #1 + \cs_set_eq:NN \siunitx_number_in_parse_loop:N + \siunitx_number_in_parse_mantissa:N + \siunitx_number_in_complex:N #1 } { - \_siunitx_number_in_parse_error:nV { invalid-number } - \_l_siunitx_number_arg_tl + \siunitx_number_in_parse_error:nV { invalid-number } + \l_siunitx_number_arg_tl } } } @@ -5717,8 +5759,8 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_complex:N} -%\begin{macro}[aux]{\_siunitx_number_in_complex_aux:nn} +%\begin{macro}{\siunitx_number_in_complex:N} +%\begin{macro}[aux]{\siunitx_number_in_complex_aux:nn} % Only one complex root token can be give, hence the initial test. % More tests are needed for complex numbers than other systems, so % the additional ones are turned on, followed by some flag setting. @@ -5726,199 +5768,199 @@ This work consists of the file siunitx.dtx % root is at the end of the number: if it is, prevent any more tokens % being added. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_complex:N #1 { - \bool_set_false:N \_l_siunitx_number_in_first_bool - \bool_if:NTF \_l_siunitx_number_in_complex_root_bool +\cs_new_protected:Npn \siunitx_number_in_complex:N #1 { + \bool_set_false:N \l_siunitx_number_in_first_bool + \bool_if:NTF \l_siunitx_number_in_complex_root_bool { - \_siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nx { duplicate-complex-root-token } { \token_to_str:N #1 } } { - \cs_set_eq:NN \_siunitx_number_in_check:n - \_siunitx_number_in_check_full:n - \bool_set_true:N \_l_siunitx_number_in_complex_root_bool - \prop_put:Nnn \_l_siunitx_number_in_prop { complex-root } {#1} - \tl_if_empty:NF \_l_siunitx_number_parsed_tl + \cs_set_eq:NN \siunitx_number_in_check:n + \siunitx_number_in_check_full:n + \bool_set_true:N \l_siunitx_number_in_complex_root_bool + \prop_put:Nnn \l_siunitx_number_in_prop { complex-root } {#1} + \tl_if_empty:NF \l_siunitx_number_parsed_tl { - \cs_set_eq:NN \_siunitx_number_in_parse_loop:N - \_siunitx_number_in_parse_complex:N + \cs_set_eq:NN \siunitx_number_in_parse_loop:N + \siunitx_number_in_parse_complex:N } - \bool_if:NT \_l_siunitx_number_in_decimal_bool + \bool_if:NT \l_siunitx_number_in_decimal_bool { - \bool_if:NF \_l_siunitx_number_in_complex_bool + \bool_if:NF \l_siunitx_number_in_complex_bool { - \prop_if_in:NnT \_l_siunitx_number_in_prop + \prop_if_in:NnT \l_siunitx_number_in_prop { mantissa-uncertainty } { - \_siunitx_number_in_complex_aux:nn + \siunitx_number_in_complex_aux:nn { mantissa-decimal } { complex-decimal } - \_siunitx_number_in_complex_aux:nn + \siunitx_number_in_complex_aux:nn { mantissa-uncertainty } { complex-uncertainty } } - \_siunitx_number_in_complex_aux:nn { mantissa-integer } + \siunitx_number_in_complex_aux:nn { mantissa-integer } { complex-integer } - \_siunitx_number_in_complex_aux:nn + \siunitx_number_in_complex_aux:nn { mantissa-decimal-marker } { complex-decimal-marker } - \prop_del:Nn \_l_siunitx_number_in_prop { mantissa } - \prop_put:Nnn \_l_siunitx_number_in_prop { complex } + \prop_del:Nn \l_siunitx_number_in_prop { mantissa } + \prop_put:Nnn \l_siunitx_number_in_prop { complex } { true } } } - \prop_if_in:NnF \_l_siunitx_number_in_prop { mantissa } + \prop_if_in:NnF \l_siunitx_number_in_prop { mantissa } { - \prop_if_in:NnT \_l_siunitx_number_in_prop { mantissa-sign } + \prop_if_in:NnT \l_siunitx_number_in_prop { mantissa-sign } { - \_siunitx_number_in_complex_aux:nn { mantissa-sign } + \siunitx_number_in_complex_aux:nn { mantissa-sign } { complex-sign } } } - \bool_set_true:N \_l_siunitx_number_in_complex_bool - \bool_set_false:N \_l_siunitx_number_in_first_bool - \_siunitx_number_in_init_part:n { complex } - \prop_if_in:NnT \_l_siunitx_number_in_prop + \bool_set_true:N \l_siunitx_number_in_complex_bool + \bool_set_false:N \l_siunitx_number_in_first_bool + \siunitx_number_in_init_part:n { complex } + \prop_if_in:NnT \l_siunitx_number_in_prop { complex-decimal-marker } - { \bool_set_true:N \_l_siunitx_number_in_decimal_bool } - \prop_if_in:NnT \_l_siunitx_number_in_prop + { \bool_set_true:N \l_siunitx_number_in_decimal_bool } + \prop_if_in:NnT \l_siunitx_number_in_prop { complex-sign } - { \bool_set_true:N \_l_siunitx_number_in_sign_bool } + { \bool_set_true:N \l_siunitx_number_in_sign_bool } } } -\cs_set_protected_nopar:Npn \_siunitx_number_in_complex_aux:nn #1#2 { - \prop_get:NnN \_l_siunitx_number_in_prop {#1} \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_in_complex_aux:nn #1#2 { + \prop_get:NnN \l_siunitx_number_in_prop {#1} \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \prop_del:Nn \_l_siunitx_number_in_prop {#1} - \prop_put:NnV \_l_siunitx_number_in_prop {#2} \_l_siunitx_tmpa_tl + \prop_del:Nn \l_siunitx_number_in_prop {#1} + \prop_put:NnV \l_siunitx_number_in_prop {#2} \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_decimal:N} +%\begin{macro}{\siunitx_number_in_decimal:N} % Only one decimal marker allowed, so a test for this. If an integer % part has been found, it is saved. The flag for the number being % found is not set unless there is an integer, to watch for the case % of invalid numbers. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_decimal:N #1 { - \bool_set_false:N \_l_siunitx_number_in_first_bool - \bool_if:NTF \_l_siunitx_number_in_decimal_bool +\cs_new_protected:Npn \siunitx_number_in_decimal:N #1 { + \bool_set_false:N \l_siunitx_number_in_first_bool + \bool_if:NTF \l_siunitx_number_in_decimal_bool { - \_siunitx_number_in_parse_error:nx { duplicate-decimal-token } + \siunitx_number_in_parse_error:nx { duplicate-decimal-token } { \token_to_str:N #1 } } { - \bool_set_true:N \_l_siunitx_number_in_decimal_bool - \tl_if_empty:NF \_l_siunitx_number_parsed_tl + \bool_set_true:N \l_siunitx_number_in_decimal_bool + \tl_if_empty:NF \l_siunitx_number_parsed_tl { - \prop_put:NVn \_l_siunitx_number_in_prop - \_l_siunitx_number_part_tl { true } - \prop_put:NVV \_l_siunitx_number_in_prop - \_l_siunitx_number_part_integer_tl - \_l_siunitx_number_parsed_tl - \tl_clear:N \_l_siunitx_number_parsed_tl + \prop_put:NVn \l_siunitx_number_in_prop + \l_siunitx_number_part_tl { true } + \prop_put:NVV \l_siunitx_number_in_prop + \l_siunitx_number_part_integer_tl + \l_siunitx_number_parsed_tl + \tl_clear:N \l_siunitx_number_parsed_tl } - \prop_put:NVn \_l_siunitx_number_in_prop - \_l_siunitx_number_part_decimal_marker_tl {#1} + \prop_put:NVn \l_siunitx_number_in_prop + \l_siunitx_number_part_decimal_marker_tl {#1} } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_digit:N} +%\begin{macro}{\siunitx_number_in_digit:N} % For digits, only in an uncertainty can the value be stored % directly. Otherwise, there is a need to see if the value is non-zero. % This is used to drop leading zeros and to validate any sign (as zero % is unsigned). % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_digit:N #1 { - \bool_set_false:N \_l_siunitx_number_in_first_bool - \bool_if:NTF \_l_siunitx_number_in_uncert_bool - { \tl_put_right:Nn \_l_siunitx_number_parsed_tl {#1} } +\cs_new_protected:Npn \siunitx_number_in_digit:N #1 { + \bool_set_false:N \l_siunitx_number_in_first_bool + \bool_if:NTF \l_siunitx_number_in_uncert_bool + { \tl_put_right:Nn \l_siunitx_number_parsed_tl {#1} } { - \bool_if:NTF \_l_siunitx_number_in_decimal_bool + \bool_if:NTF \l_siunitx_number_in_decimal_bool { - \tl_put_right:Nn \_l_siunitx_number_parsed_tl {#1} + \tl_put_right:Nn \l_siunitx_number_parsed_tl {#1} \tl_if_eq:nnF {#1} { 0 } - { \bool_set_true:N \_l_siunitx_number_in_value_bool } + { \bool_set_true:N \l_siunitx_number_in_value_bool } } { \tl_if_eq:nnTF {#1} { 0 } { - \prop_put:NVn \_l_siunitx_number_in_prop - \_l_siunitx_number_part_tl { true } - \prop_put:NVn \_l_siunitx_number_in_prop - \_l_siunitx_number_part_integer_tl { 0 } + \prop_put:NVn \l_siunitx_number_in_prop + \l_siunitx_number_part_tl { true } + \prop_put:NVn \l_siunitx_number_in_prop + \l_siunitx_number_part_integer_tl { 0 } } - { \bool_set_true:N \_l_siunitx_number_in_value_bool } - \bool_if:NT \_l_siunitx_number_in_value_bool - { \tl_put_right:Nn \_l_siunitx_number_parsed_tl {#1} } + { \bool_set_true:N \l_siunitx_number_in_value_bool } + \bool_if:NT \l_siunitx_number_in_value_bool + { \tl_put_right:Nn \l_siunitx_number_parsed_tl {#1} } } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_exponent:N} +%\begin{macro}{\siunitx_number_in_exponent:N} % A duplicate token test starts off the code, which if passed % leads to some simple storage manipulation. As exponents are % more simple than the mantissa, the extra processing is swapped for % some that only raises errors. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_exponent:N #1 { - \bool_if:NTF \_l_siunitx_number_in_exponent_bool +\cs_new_protected:Npn \siunitx_number_in_exponent:N #1 { + \bool_if:NTF \l_siunitx_number_in_exponent_bool { - \_siunitx_number_in_parse_error:nx { duplicate-exponent-token } + \siunitx_number_in_parse_error:nx { duplicate-exponent-token } { \token_to_str:N #1 } } { - \cs_set_eq:NN \_siunitx_number_in_parse_more:N - \_siunitx_number_in_parse_exponent:N - \tl_if_empty:NF \_l_siunitx_number_parsed_tl - { \_siunitx_number_in_store: } - \bool_set_true:N \_l_siunitx_number_in_exponent_bool - \_siunitx_number_in_init_part:n { exponent } + \cs_set_eq:NN \siunitx_number_in_parse_more:N + \siunitx_number_in_parse_exponent:N + \tl_if_empty:NF \l_siunitx_number_parsed_tl + { \siunitx_number_in_store: } + \bool_set_true:N \l_siunitx_number_in_exponent_bool + \siunitx_number_in_init_part:n { exponent } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_sign:N} +%\begin{macro}{\siunitx_number_in_sign:N} % The code for signs is complicated by complex numbers. A sign token % must be the fist thing in a number, but after the real part of the % mantissa a second sign token can appear to start a complex number. % So most of the code here is to detect that case. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_sign:N #1 { - \bool_if:NTF \_l_siunitx_number_in_first_bool +\cs_new_protected:Npn \siunitx_number_in_sign:N #1 { + \bool_if:NTF \l_siunitx_number_in_first_bool { - \bool_set_false:N \_l_siunitx_number_in_first_bool - \bool_set_true:N \_l_siunitx_number_in_sign_bool - \prop_put:NVn \_l_siunitx_number_in_prop - \_l_siunitx_number_part_sign_tl {#1} + \bool_set_false:N \l_siunitx_number_in_first_bool + \bool_set_true:N \l_siunitx_number_in_sign_bool + \prop_put:NVn \l_siunitx_number_in_prop + \l_siunitx_number_part_sign_tl {#1} } { - \bool_if:NTF \_l_siunitx_number_in_exponent_bool + \bool_if:NTF \l_siunitx_number_in_exponent_bool { - \_siunitx_number_in_parse_error:nx { misplaced-sign-token } + \siunitx_number_in_parse_error:nx { misplaced-sign-token } {#1} } { - \bool_if:NTF \_l_siunitx_number_in_complex_bool + \bool_if:NTF \l_siunitx_number_in_complex_bool { - \_siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nx { misplaced-sign-token } {#1} } { - \tl_if_empty:NF \_l_siunitx_number_parsed_tl - { \_siunitx_number_in_store: } - \cs_set_eq:NN \_siunitx_number_in_check:n - \_siunitx_number_in_check_full:n - \_siunitx_number_in_init_part:n { complex } - \prop_put:Nnn \_l_siunitx_number_in_prop + \tl_if_empty:NF \l_siunitx_number_parsed_tl + { \siunitx_number_in_store: } + \cs_set_eq:NN \siunitx_number_in_check:n + \siunitx_number_in_check_full:n + \siunitx_number_in_init_part:n { complex } + \prop_put:Nnn \l_siunitx_number_in_prop { complex-sign } {#1} - \bool_set_true:N \_l_siunitx_number_in_complex_bool + \bool_set_true:N \l_siunitx_number_in_complex_bool } } } @@ -5926,128 +5968,128 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_uncert_open:N} -%\begin{macro}{\_siunitx_number_in_uncert_close:N} +%\begin{macro}{\siunitx_number_in_uncert_open:N} +%\begin{macro}{\siunitx_number_in_uncert_close:N} % Opening and closing uncertainty tokens are handled separately. For % opening tokens, a check is made that there is something else to the % number before collecting material up. For the closing token, the % uncertainty must contain some numbers. A special loop function is then % set up to prevent any additional digits after the closing token. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_in_uncert_open:N #1 { - \bool_set_false:N \_l_siunitx_number_in_first_bool - \cs_set_eq:NN \_siunitx_number_in_parse_loop:N - \_siunitx_number_in_parse_uncert:N - \bool_set_true:N \_l_siunitx_number_in_uncert_bool - \tl_if_empty:NTF \_l_siunitx_number_parsed_tl +\cs_new_protected:Npn \siunitx_number_in_uncert_open:N #1 { + \bool_set_false:N \l_siunitx_number_in_first_bool + \cs_set_eq:NN \siunitx_number_in_parse_loop:N + \siunitx_number_in_parse_uncert:N + \bool_set_true:N \l_siunitx_number_in_uncert_bool + \tl_if_empty:NTF \l_siunitx_number_parsed_tl { - \prop_if_in:NVF \_l_siunitx_number_in_prop - \_l_siunitx_number_part_integer_tl + \prop_if_in:NVF \l_siunitx_number_in_prop + \l_siunitx_number_part_integer_tl { - \_siunitx_number_in_parse_error:nV { invalid-number } - \_l_siunitx_number_arg_tl + \siunitx_number_in_parse_error:nV { invalid-number } + \l_siunitx_number_arg_tl } } - { \_siunitx_number_in_store: } + { \siunitx_number_in_store: } } -\cs_set_protected:Npn \_siunitx_number_in_uncert_close:N #1 { - \bool_set_false:N \_l_siunitx_number_in_uncert_bool - \tl_if_empty:NTF \_l_siunitx_number_parsed_tl +\cs_new_protected:Npn \siunitx_number_in_uncert_close:N #1 { + \bool_set_false:N \l_siunitx_number_in_uncert_bool + \tl_if_empty:NTF \l_siunitx_number_parsed_tl { - \_siunitx_number_in_parse_error:nV { empty-uncertainty } - \_l_siunitx_number_arg_tl + \siunitx_number_in_parse_error:nV { empty-uncertainty } + \l_siunitx_number_arg_tl } { - \prop_put:NVV \_l_siunitx_number_in_prop - \_l_siunitx_number_part_uncert_tl \_l_siunitx_number_parsed_tl - \prop_put:Nnn \_l_siunitx_number_in_prop + \prop_put:NVV \l_siunitx_number_in_prop + \l_siunitx_number_part_uncert_tl \l_siunitx_number_parsed_tl + \prop_put:Nnn \l_siunitx_number_in_prop { uncertainty } { true } - \tl_clear:N \_l_siunitx_number_parsed_tl - \cs_set_eq:NN \_siunitx_number_in_parse_loop:N - \_siunitx_number_in_parse_uncert_after:N + \tl_clear:N \l_siunitx_number_parsed_tl + \cs_set_eq:NN \siunitx_number_in_parse_loop:N + \siunitx_number_in_parse_uncert_after:N } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_store:} +%\begin{macro}{\siunitx_number_in_store:} % A short auxiliary function needed in various places for storing % either the integer or decimal part of a number, as appropriate. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_in_store: { - \prop_put:NVn \_l_siunitx_number_in_prop \_l_siunitx_number_part_tl +\cs_new_protected_nopar:Npn \siunitx_number_in_store: { + \prop_put:NVn \l_siunitx_number_in_prop \l_siunitx_number_part_tl { true } - \bool_if:NTF \_l_siunitx_number_in_decimal_bool + \bool_if:NTF \l_siunitx_number_in_decimal_bool { - \prop_put:NVV \_l_siunitx_number_in_prop - \_l_siunitx_number_part_decimal_tl \_l_siunitx_number_parsed_tl + \prop_put:NVV \l_siunitx_number_in_prop + \l_siunitx_number_part_decimal_tl \l_siunitx_number_parsed_tl } { - \prop_put:NVV \_l_siunitx_number_in_prop - \_l_siunitx_number_part_integer_tl \_l_siunitx_number_parsed_tl + \prop_put:NVV \l_siunitx_number_in_prop + \l_siunitx_number_part_integer_tl \l_siunitx_number_parsed_tl } - \tl_clear:N \_l_siunitx_number_parsed_tl + \tl_clear:N \l_siunitx_number_parsed_tl } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_in_check:n} -%\begin{macro}{\_siunitx_number_in_check_short:n} -%\begin{macro}{\_siunitx_number_in_check_full:n} +%\begin{macro}{\siunitx_number_in_check:n} +%\begin{macro}{\siunitx_number_in_check_short:n} +%\begin{macro}{\siunitx_number_in_check_full:n} % The checks needed for a number depend on whether there is a complex % part. In all cases, there must be some digits, as well as a sign or % decimal marker. There is also a check for a zero-valued input, which % has any sign deleted. For complex numbers, the check is needed in % case there was no real part. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_in_check:n #1 { } -\cs_set_protected_nopar:Npn \_siunitx_number_in_check_short:n #1 { - \prop_if_in:NVF \_l_siunitx_number_in_prop - \_l_siunitx_number_part_integer_tl +\cs_new_protected_nopar:Npn \siunitx_number_in_check:n #1 { } +\cs_new_protected_nopar:Npn \siunitx_number_in_check_short:n #1 { + \prop_if_in:NVF \l_siunitx_number_in_prop + \l_siunitx_number_part_integer_tl { - \prop_if_in:NVF \_l_siunitx_number_in_prop - \_l_siunitx_number_part_decimal_tl - { \_siunitx_error:nx { invalid-number } {#1} } + \prop_if_in:NVF \l_siunitx_number_in_prop + \l_siunitx_number_part_decimal_tl + { \siunitx_error:nx { invalid-number } {#1} } } - \bool_if:NF \_l_siunitx_number_in_value_bool + \bool_if:NF \l_siunitx_number_in_value_bool { - \tl_if_eq:NNF \_l_siunitx_number_part_tl - \_c_siunitx_number_part_complex_tl + \tl_if_eq:NNF \l_siunitx_number_part_tl + \c_siunitx_number_part_complex_tl { - \prop_get:NVN \_l_siunitx_number_in_prop - \_l_siunitx_number_part_sign_tl \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \prop_get:NVN \l_siunitx_number_in_prop + \l_siunitx_number_part_sign_tl \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \tl_set:Nx \_l_siunitx_tmpb_tl - { \_l_siunitx_number_part_sign_tl -deleted } - \prop_put:NVV \_l_siunitx_number_in_prop - \_l_siunitx_tmpb_tl \_l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpb_tl + { \l_siunitx_number_part_sign_tl -deleted } + \prop_put:NVV \l_siunitx_number_in_prop + \l_siunitx_tmpb_tl \l_siunitx_tmpa_tl } - \prop_del:NV \_l_siunitx_number_in_prop - \_l_siunitx_number_part_sign_tl + \prop_del:NV \l_siunitx_number_in_prop + \l_siunitx_number_part_sign_tl } } } -\cs_set_protected_nopar:Npn \_siunitx_number_in_check_full:n #1 { - \tl_if_eq:NNF \_l_siunitx_number_part_tl - \_c_siunitx_number_part_complex_tl - { \_siunitx_number_in_check_short:n {#1} } - \bool_if:NF \_l_siunitx_number_in_complex_root_bool +\cs_new_protected_nopar:Npn \siunitx_number_in_check_full:n #1 { + \tl_if_eq:NNF \l_siunitx_number_part_tl + \c_siunitx_number_part_complex_tl + { \siunitx_number_in_check_short:n {#1} } + \bool_if:NF \l_siunitx_number_in_complex_root_bool { - \prop_get:NnN \_l_siunitx_number_in_prop { complex-sign } - \_l_siunitx_tmpa_tl - \_siunitx_error:nV { misplaced-sign-token } \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_in_prop { complex-sign } + \l_siunitx_tmpa_tl + \siunitx_error:nV { misplaced-sign-token } \l_siunitx_tmpa_tl } - \prop_get:NnN \_l_siunitx_number_in_prop { mantissa-sign } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-sign } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \prop_if_in:NnF \_l_siunitx_number_in_prop { mantissa } + \prop_if_in:NnF \l_siunitx_number_in_prop { mantissa } { - \prop_del:Nn \_l_siunitx_number_in_prop { mantissa-sign } - \prop_put:NnV \_l_siunitx_number_in_prop { complex-sign } - \_l_siunitx_tmpa_tl + \prop_del:Nn \l_siunitx_number_in_prop { mantissa-sign } + \prop_put:NnV \l_siunitx_number_in_prop { complex-sign } + \l_siunitx_tmpa_tl } } } @@ -6064,22 +6106,22 @@ This work consists of the file siunitx.dtx % for \enquote{formatting}: this is left for the output part of the % system. % -%\begin{macro}{\_l_siunitx_round_int} -%\begin{macro}{\_l_siunitx_round_tl} -%\begin{macro}{\_l_siunitx_round_bool} -%\begin{macro}{\_l_siunitx_round_decimal_in_tl} -%\begin{macro}{\_l_siunitx_round_decimal_out_tl} -%\begin{macro}{\_l_siunitx_round_integer_in_tl} -%\begin{macro}{\_l_siunitx_round_integer_out_tl} +%\begin{macro}{\l_siunitx_round_int} +%\begin{macro}{\l_siunitx_round_tl} +%\begin{macro}{\l_siunitx_round_bool} +%\begin{macro}{\l_siunitx_round_decimal_in_tl} +%\begin{macro}{\l_siunitx_round_decimal_out_tl} +%\begin{macro}{\l_siunitx_round_integer_in_tl} +%\begin{macro}{\l_siunitx_round_integer_out_tl} % The rounding system needs a number of variables. % \begin{macrocode} -\int_new:N \_l_siunitx_round_int -\tl_new:N \_l_siunitx_round_tl -\bool_new:N \_l_siunitx_round_bool -\tl_new:N \_l_siunitx_round_decimal_in_tl -\tl_new:N \_l_siunitx_round_decimal_out_tl -\tl_new:N \_l_siunitx_round_integer_in_tl -\tl_new:N \_l_siunitx_round_integer_out_tl +\int_new:N \l_siunitx_round_int +\tl_new:N \l_siunitx_round_tl +\bool_new:N \l_siunitx_round_bool +\tl_new:N \l_siunitx_round_decimal_in_tl +\tl_new:N \l_siunitx_round_decimal_out_tl +\tl_new:N \l_siunitx_round_integer_in_tl +\tl_new:N \l_siunitx_round_integer_out_tl % \end{macrocode} %\end{macro} %\end{macro} @@ -6089,48 +6131,48 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_process_decimal_int} -%\begin{macro}{\_l_siunitx_process_uncertainty_int} -%\begin{macro}{\_l_siunitx_uncertainty_decimal_tl} -%\begin{macro}{\_l_siunitx_uncertainty_integer_tl} +%\begin{macro}{\l_siunitx_process_decimal_int} +%\begin{macro}{\l_siunitx_process_uncertainty_int} +%\begin{macro}{\l_siunitx_uncertainty_decimal_tl} +%\begin{macro}{\l_siunitx_uncertainty_integer_tl} % The code to expand uncertainties needs to know numbers of digits, and % to store various data. % \begin{macrocode} -\int_new:N \_l_siunitx_process_decimal_int -\int_new:N \_l_siunitx_process_uncertainty_int -\tl_new:N \_l_siunitx_uncertainty_decimal_tl -\tl_new:N \_l_siunitx_uncertainty_integer_tl +\int_new:N \l_siunitx_process_decimal_int +\int_new:N \l_siunitx_process_uncertainty_int +\tl_new:N \l_siunitx_uncertainty_decimal_tl +\tl_new:N \l_siunitx_uncertainty_integer_tl % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_process_decimal_zero_bool} -%\begin{macro}{\_l_siunitx_process_integer_zero_bool} -%\begin{macro}{\_l_siunitx_process_sign_tl} -%\begin{macro}{\_l_siunitx_process_plus_tl} -%\begin{macro}{\_l_siunitx_unity_mantissa_tl} -%\begin{macro}{\_l_siunitx_process_zero_exponent_bool} -%\begin{macro}{\_l_siunitx_process_precision_int} +%\begin{macro}{\l_siunitx_process_decimal_zero_bool} +%\begin{macro}{\l_siunitx_process_integer_zero_bool} +%\begin{macro}{\l_siunitx_process_sign_tl} +%\begin{macro}{\l_siunitx_process_plus_tl} +%\begin{macro}{\l_siunitx_unity_mantissa_tl} +%\begin{macro}{\l_siunitx_process_zero_exponent_bool} +%\begin{macro}{\l_siunitx_process_precision_int} % First, the options are set up. % \begin{macrocode} \keys_define:nn { siunitx } { - add-decimal-zero .bool_set:N = \_l_siunitx_process_decimal_zero_bool, - add-integer-zero .bool_set:N = \_l_siunitx_process_integer_zero_bool, - explicit-sign .tl_set:N = \_l_siunitx_process_sign_tl, - retain-explicit-plus .bool_set:N = \_l_siunitx_process_plus_tl, + add-decimal-zero .bool_set:N = \l_siunitx_process_decimal_zero_bool, + add-integer-zero .bool_set:N = \l_siunitx_process_integer_zero_bool, + explicit-sign .tl_set:N = \l_siunitx_process_sign_tl, + retain-explicit-plus .bool_set:N = \l_siunitx_process_plus_tl, retain-unity-mantissa .bool_set:N = - \_l_siunitx_process_unity_mantissa_bool, + \l_siunitx_process_unity_mantissa_bool, retain-zero-exponent .bool_set:N = - \_l_siunitx_process_zero_exponent_bool, + \l_siunitx_process_zero_exponent_bool, round-mode .choice: , round-mode / figures .code:n = - { \tl_set:Nn \_l_siunitx_round_tl { figures } }, - round-mode / off .code:n = { \tl_clear:N \_l_siunitx_round_tl }, + { \tl_set:Nn \l_siunitx_round_tl { figures } }, + round-mode / off .code:n = { \tl_clear:N \l_siunitx_round_tl }, round-mode / places .code:n = - { \tl_set:Nn \_l_siunitx_round_tl { places } }, - round-precision .int_set:N = \_l_siunitx_process_precision_int, + { \tl_set:Nn \l_siunitx_round_tl { places } }, + round-precision .int_set:N = \l_siunitx_process_precision_int, } \keys_set:nn { siunitx } { add-decimal-zero = true, @@ -6147,260 +6189,260 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_process:} +%\begin{macro}{\siunitx_number_process:} % Post-processing is a series of small tasks. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process: { - \_siunitx_number_process_sign: - \_siunitx_number_process_zero_fill: - \_siunitx_number_process_mantissa: - \prop_if_in:NnF \_l_siunitx_number_in_prop { symbolic } +\cs_new_protected_nopar:Npn \siunitx_number_process: { + \siunitx_number_process_sign: + \siunitx_number_process_zero_fill: + \siunitx_number_process_mantissa: + \prop_if_in:NnF \l_siunitx_number_in_prop { symbolic } { - \_siunitx_number_process_exponent: - \_siunitx_number_process_uncertainty: - \prop_if_in:NnF \_l_siunitx_number_in_prop { uncertainty } - { \_siunitx_number_process_round: } + \siunitx_number_process_exponent: + \siunitx_number_process_uncertainty: + \prop_if_in:NnF \l_siunitx_number_in_prop { uncertainty } + { \siunitx_number_process_round: } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_process_exponent:} -%\begin{macro}[aux]{\_siunitx_number_process_exponent_aux:n} +%\begin{macro}{\siunitx_number_process_exponent:} +%\begin{macro}[aux]{\siunitx_number_process_exponent_aux:n} % To check for a totally zero exponent, the possibility that one or more % of the exponent storage areas is zero needs to be considered. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_exponent: { - \bool_if:NF \_l_siunitx_process_zero_exponent_bool +\cs_new_protected_nopar:Npn \siunitx_number_process_exponent: { + \bool_if:NF \l_siunitx_process_zero_exponent_bool { - \prop_if_in:NnT \_l_siunitx_number_in_prop { exponent } + \prop_if_in:NnT \l_siunitx_number_in_prop { exponent } { - \bool_set_false:N \_l_siunitx_tmp_bool - \_siunitx_number_process_exponent_aux:n { integer } - \bool_if:NF \_l_siunitx_tmp_bool - { \_siunitx_number_process_exponent_aux:n { decimal } } - \bool_if:NF \_l_siunitx_tmp_bool + \bool_set_false:N \l_siunitx_tmp_bool + \siunitx_number_process_exponent_aux:n { integer } + \bool_if:NF \l_siunitx_tmp_bool + { \siunitx_number_process_exponent_aux:n { decimal } } + \bool_if:NF \l_siunitx_tmp_bool { - \prop_del:Nn \_l_siunitx_number_in_prop { exponent } - \prop_del:Nn \_l_siunitx_number_in_prop + \prop_del:Nn \l_siunitx_number_in_prop { exponent } + \prop_del:Nn \l_siunitx_number_in_prop { exponent-integer } - \prop_del:Nn \_l_siunitx_number_in_prop + \prop_del:Nn \l_siunitx_number_in_prop { exponent-decimal } } } } } -\cs_set_protected_nopar:Npn \_siunitx_number_process_exponent_aux:n #1 { - \prop_get:NnN \_l_siunitx_number_in_prop { exponent- #1 } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_process_exponent_aux:n #1 { + \prop_get:NnN \l_siunitx_number_in_prop { exponent- #1 } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \intexpr_compare:nNnF { \_l_siunitx_tmpa_tl } = { 0 } - { \bool_set_true:N \_l_siunitx_tmp_bool } + \intexpr_compare:nNnF { \l_siunitx_tmpa_tl } = { 0 } + { \bool_set_true:N \l_siunitx_tmp_bool } } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_process_figures:n} -%\begin{macro}[aux]{\_siunitx_number_process_figures_aux:n} -%\begin{macro}[aux]{\_siunitx_number_process_figures_init:n} +%\begin{macro}{\siunitx_number_process_figures:n} +%\begin{macro}[aux]{\siunitx_number_process_figures_aux:n} +%\begin{macro}[aux]{\siunitx_number_process_figures_init:n} % Rather than count figures to start with, a completely different % approach is used here. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_figures:n #1 { - \prop_if_in:NnT \_l_siunitx_number_in_prop {#1} - { \_siunitx_number_process_figures_aux:n {#1} } +\cs_new_protected_nopar:Npn \siunitx_number_process_figures:n #1 { + \prop_if_in:NnT \l_siunitx_number_in_prop {#1} + { \siunitx_number_process_figures_aux:n {#1} } } -\cs_set_protected_nopar:Npn \_siunitx_number_process_figures_aux:n #1 { - \_siunitx_number_process_figures_init:n {#1} - \_siunitx_number_process_figures_count:n { integer } - \_siunitx_number_process_figures_count:n { decimal } - \bool_if:NTF \_l_siunitx_round_bool +\cs_new_protected_nopar:Npn \siunitx_number_process_figures_aux:n #1 { + \siunitx_number_process_figures_init:n {#1} + \siunitx_number_process_figures_count:n { integer } + \siunitx_number_process_figures_count:n { decimal } + \bool_if:NTF \l_siunitx_round_bool { - \bool_set_false:N \_l_siunitx_round_bool + \bool_set_false:N \l_siunitx_round_bool \intexpr_compare:nNnTF - { \_l_siunitx_round_int } > - { \_l_siunitx_process_precision_int } + { \l_siunitx_round_int } > + { \l_siunitx_process_precision_int } { - \_siunitx_number_process_figures_round: - \_siunitx_number_process_round_tidy:n {#1} + \siunitx_number_process_figures_round: + \siunitx_number_process_round_tidy:n {#1} } - { \_siunitx_number_process_figures_pad:n {#1} } + { \siunitx_number_process_figures_pad:n {#1} } } { - \prop_put:Nnn \_l_siunitx_number_in_prop { #1 -integer } { 0 } - \prop_del:Nn \_l_siunitx_number_in_prop { #1 -decimal } + \prop_put:Nnn \l_siunitx_number_in_prop { #1 -integer } { 0 } + \prop_del:Nn \l_siunitx_number_in_prop { #1 -decimal } } } -\cs_set_protected_nopar:Npn \_siunitx_number_process_figures_init:n #1 { - \int_zero:N \_l_siunitx_round_int - \bool_set_false:N \_l_siunitx_round_bool - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -decimal } - \_l_siunitx_round_decimal_in_tl - \quark_if_no_value:NT \_l_siunitx_round_decimal_in_tl - { \tl_clear:N \_l_siunitx_round_decimal_in_tl } - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -integer } - \_l_siunitx_round_integer_in_tl - \quark_if_no_value:NT \_l_siunitx_round_integer_in_tl - { \tl_clear:N \_l_siunitx_round_integer_in_tl } - \tl_clear:N \_l_siunitx_round_decimal_out_tl - \tl_clear:N \_l_siunitx_round_integer_out_tl +\cs_new_protected_nopar:Npn \siunitx_number_process_figures_init:n #1 { + \int_zero:N \l_siunitx_round_int + \bool_set_false:N \l_siunitx_round_bool + \prop_get:NnN \l_siunitx_number_in_prop { #1 -decimal } + \l_siunitx_round_decimal_in_tl + \quark_if_no_value:NT \l_siunitx_round_decimal_in_tl + { \tl_clear:N \l_siunitx_round_decimal_in_tl } + \prop_get:NnN \l_siunitx_number_in_prop { #1 -integer } + \l_siunitx_round_integer_in_tl + \quark_if_no_value:NT \l_siunitx_round_integer_in_tl + { \tl_clear:N \l_siunitx_round_integer_in_tl } + \tl_clear:N \l_siunitx_round_decimal_out_tl + \tl_clear:N \l_siunitx_round_integer_out_tl } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_process_figures_count:n} -%\begin{macro}[aux]{\_siunitx_number_process_figures_count_aux:n} +%\begin{macro}{\siunitx_number_process_figures_count:n} +%\begin{macro}[aux]{\siunitx_number_process_figures_count_aux:n} % The counting code has to check that characters are actually % significant. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_number_process_figures_count:n #1 { - \tl_if_empty:cF { _l_siunitx_round_ #1 _in_tl } +\cs_new_protected_nopar:Npn + \siunitx_number_process_figures_count:n #1 { + \tl_if_empty:cF { l_siunitx_round_ #1 _in_tl } { - \prop_if_in:NnF \_l_siunitx_number_in_prop { #1 -uncertainty } - { \_siunitx_number_process_figures_count_aux:n {#1} } + \prop_if_in:NnF \l_siunitx_number_in_prop { #1 -uncertainty } + { \siunitx_number_process_figures_count_aux:n {#1} } } } -\cs_set_protected_nopar:Npn - \_siunitx_number_process_figures_count_aux:n #1 { - \int_set:Nn \_l_siunitx_tmp_int - { \exp_args:Nv \tl_head:n { _l_siunitx_round_ #1 _in_tl } } - \tl_set:cx { _l_siunitx_round_ #1 _in_tl } - { \exp_args:Nv \tl_tail:n { _l_siunitx_round_ #1 _in_tl } } - \tl_put_left:cV { _l_siunitx_round_ #1 _out_tl } \_l_siunitx_tmp_int - \bool_if:NF \_l_siunitx_round_bool +\cs_new_protected_nopar:Npn + \siunitx_number_process_figures_count_aux:n #1 { + \int_set:Nn \l_siunitx_tmp_int + { \exp_args:Nv \tl_head:n { l_siunitx_round_ #1 _in_tl } } + \tl_set:cx { l_siunitx_round_ #1 _in_tl } + { \exp_args:Nv \tl_tail:n { l_siunitx_round_ #1 _in_tl } } + \tl_put_left:cV { l_siunitx_round_ #1 _out_tl } \l_siunitx_tmp_int + \bool_if:NF \l_siunitx_round_bool { - \intexpr_compare:nNnF { \_l_siunitx_tmp_int } = { 0 } - { \bool_set_true:N \_l_siunitx_round_bool } + \intexpr_compare:nNnF { \l_siunitx_tmp_int } = { 0 } + { \bool_set_true:N \l_siunitx_round_bool } } - \bool_if:NT \_l_siunitx_round_bool - { \int_incr:N \_l_siunitx_round_int } - \tl_if_empty:cTF { _l_siunitx_round_ #1 _in_tl } + \bool_if:NT \l_siunitx_round_bool + { \int_incr:N \l_siunitx_round_int } + \tl_if_empty:cTF { l_siunitx_round_ #1 _in_tl } { - \tl_set_eq:cc { _l_siunitx_round_ #1 _in_tl } - { _l_siunitx_round_ #1 _out_tl } - \tl_clear:c { _l_siunitx_round_ #1 _out_tl } + \tl_set_eq:cc { l_siunitx_round_ #1 _in_tl } + { l_siunitx_round_ #1 _out_tl } + \tl_clear:c { l_siunitx_round_ #1 _out_tl } } - { \_siunitx_number_process_figures_count_aux:n {#1} } + { \siunitx_number_process_figures_count_aux:n {#1} } } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_process_figures_round:} -%\begin{macro}[aux]{\_siunitx_number_process_figures_round_loop:} +%\begin{macro}{\siunitx_number_process_figures_round:} +%\begin{macro}[aux]{\siunitx_number_process_figures_round_loop:} % The control macro for rounding to figures does the decimal part % then the integer part as loops. There is then some tidying up if a % digit is carried at the end. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_figures_round: { - \int_set:Nn \_l_siunitx_round_int - { \_l_siunitx_round_int - \_l_siunitx_process_precision_int } - \tl_if_empty:NF \_l_siunitx_round_decimal_in_tl - { \_siunitx_number_process_figures_round_loop: } - \tl_if_empty:NF \_l_siunitx_round_integer_in_tl - { \_siunitx_number_process_figures_integer: } - \bool_if:NT \_l_siunitx_round_bool - { - \tl_put_left:Nn \_l_siunitx_round_integer_out_tl { 1 } - \tl_if_empty:NF \_l_siunitx_round_decimal_out_tl +\cs_new_protected_nopar:Npn \siunitx_number_process_figures_round: { + \int_set:Nn \l_siunitx_round_int + { \l_siunitx_round_int - \l_siunitx_process_precision_int } + \tl_if_empty:NF \l_siunitx_round_decimal_in_tl + { \siunitx_number_process_figures_round_loop: } + \tl_if_empty:NF \l_siunitx_round_integer_in_tl + { \siunitx_number_process_figures_integer: } + \bool_if:NT \l_siunitx_round_bool + { + \tl_put_left:Nn \l_siunitx_round_integer_out_tl { 1 } + \tl_if_empty:NF \l_siunitx_round_decimal_out_tl { - \tl_reverse:N \_l_siunitx_round_decimal_out_tl - \tl_set:Nx \_l_siunitx_round_decimal_out_tl - { \tl_tail:n \_l_siunitx_round_decimal_out_tl } - \tl_reverse:N \_l_siunitx_round_decimal_out_tl + \tl_reverse:N \l_siunitx_round_decimal_out_tl + \tl_set:Nx \l_siunitx_round_decimal_out_tl + { \tl_tail:n \l_siunitx_round_decimal_out_tl } + \tl_reverse:N \l_siunitx_round_decimal_out_tl } } } -\cs_set_protected_nopar:Npn - \_siunitx_number_process_figures_round_loop: { - \_siunitx_number_process_round_decimal: - \tl_if_empty:NF \_l_siunitx_round_decimal_in_tl - { \_siunitx_number_process_figures_round_loop: } +\cs_new_protected_nopar:Npn + \siunitx_number_process_figures_round_loop: { + \siunitx_number_process_round_decimal: + \tl_if_empty:NF \l_siunitx_round_decimal_in_tl + { \siunitx_number_process_figures_round_loop: } } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_process_figures_integer:} +%\begin{macro}{\siunitx_number_process_figures_integer:} % For figures, the integer part is a little complicated as zeros need % to be included. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_figures_integer: { - \intexpr_compare:nNnT { \_l_siunitx_round_int } > { 0 } - { \tl_put_left:Nn \_l_siunitx_round_integer_out_tl { 0 } } - \intexpr_compare:nNnF { \_l_siunitx_round_int } > { 1 } - { - \int_set:Nn \_l_siunitx_tmp_int - { \exp_args:NV \tl_head:n \_l_siunitx_round_integer_in_tl } - \bool_if:NT \_l_siunitx_round_bool - { \int_incr:N \_l_siunitx_tmp_int } - \bool_set_false:N \_l_siunitx_round_bool - \intexpr_compare:nNnTF { \_l_siunitx_round_int } = { 1 } +\cs_new_protected_nopar:Npn \siunitx_number_process_figures_integer: { + \intexpr_compare:nNnT { \l_siunitx_round_int } > { 0 } + { \tl_put_left:Nn \l_siunitx_round_integer_out_tl { 0 } } + \intexpr_compare:nNnF { \l_siunitx_round_int } > { 1 } + { + \int_set:Nn \l_siunitx_tmp_int + { \exp_args:NV \tl_head:n \l_siunitx_round_integer_in_tl } + \bool_if:NT \l_siunitx_round_bool + { \int_incr:N \l_siunitx_tmp_int } + \bool_set_false:N \l_siunitx_round_bool + \intexpr_compare:nNnTF { \l_siunitx_round_int } = { 1 } { - \intexpr_compare:nNnT { \_l_siunitx_tmp_int } > { 4 } - { \bool_set_true:N \_l_siunitx_round_bool } + \intexpr_compare:nNnT { \l_siunitx_tmp_int } > { 4 } + { \bool_set_true:N \l_siunitx_round_bool } } { - \intexpr_compare:nNnT { \_l_siunitx_tmp_int } > { 10 } + \intexpr_compare:nNnT { \l_siunitx_tmp_int } > { 10 } { - \bool_set_true:N \_l_siunitx_round_bool - \int_zero:N \_l_siunitx_tmp_int + \bool_set_true:N \l_siunitx_round_bool + \int_zero:N \l_siunitx_tmp_int } - \tl_put_left:NV \_l_siunitx_round_integer_out_tl - \_l_siunitx_tmp_int + \tl_put_left:NV \l_siunitx_round_integer_out_tl + \l_siunitx_tmp_int } } - \int_decr:N \_l_siunitx_round_int - \tl_set:Nx \_l_siunitx_round_integer_in_tl - { \exp_args:NV \tl_tail:n \_l_siunitx_round_integer_in_tl } - \tl_if_empty:NF \_l_siunitx_round_integer_in_tl - { \_siunitx_number_process_figures_integer: } + \int_decr:N \l_siunitx_round_int + \tl_set:Nx \l_siunitx_round_integer_in_tl + { \exp_args:NV \tl_tail:n \l_siunitx_round_integer_in_tl } + \tl_if_empty:NF \l_siunitx_round_integer_in_tl + { \siunitx_number_process_figures_integer: } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_number_process_figures_pad:n} +%\begin{macro}{\siunitx_number_process_figures_pad:n} % If the number is too short, then the reversal is undone and the % padding routine is called. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_figures_pad:n #1 { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -integer } - \_l_siunitx_round_integer_in_tl - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -decimal } - \_l_siunitx_round_decimal_in_tl - \int_set:Nn \_l_siunitx_round_int - { \_l_siunitx_process_precision_int - \_l_siunitx_round_int } - \_siunitx_number_process_pad:n {#1} +\cs_new_protected_nopar:Npn \siunitx_number_process_figures_pad:n #1 { + \prop_get:NnN \l_siunitx_number_in_prop { #1 -integer } + \l_siunitx_round_integer_in_tl + \prop_get:NnN \l_siunitx_number_in_prop { #1 -decimal } + \l_siunitx_round_decimal_in_tl + \int_set:Nn \l_siunitx_round_int + { \l_siunitx_process_precision_int - \l_siunitx_round_int } + \siunitx_number_process_pad:n {#1} } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_c_siunitx_unity_tl} -%\begin{macro}{\_siunitx_number_process_mantissa:} +%\begin{macro}{\c_siunitx_unity_tl} +%\begin{macro}{\siunitx_number_process_mantissa:} % A check for the mantissa consisting only of the token \texttt{1}, when % an exponent is also available. % \begin{macrocode} -\tl_new:N \_c_siunitx_unity_tl -\tl_set:Nn \_c_siunitx_unity_tl { 1 } -\cs_set_protected_nopar:Npn \_siunitx_number_process_mantissa: { - \bool_if:NF \_l_siunitx_process_unity_mantissa_bool +\tl_new:N \c_siunitx_unity_tl +\tl_set:Nn \c_siunitx_unity_tl { 1 } +\cs_new_protected_nopar:Npn \siunitx_number_process_mantissa: { + \bool_if:NF \l_siunitx_process_unity_mantissa_bool { - \prop_if_in:NnT \_l_siunitx_number_in_prop { exponent } + \prop_if_in:NnT \l_siunitx_number_in_prop { exponent } { - \prop_get:NnN \_l_siunitx_number_in_prop { mantissa-integer } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-integer } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \tl_if_eq:NNT \_c_siunitx_unity_tl \_l_siunitx_tmpa_tl + \tl_if_eq:NNT \c_siunitx_unity_tl \l_siunitx_tmpa_tl { - \prop_if_in:NnF \_l_siunitx_number_in_prop + \prop_if_in:NnF \l_siunitx_number_in_prop { mantissa-decimal-marker } { - \prop_del:Nn \_l_siunitx_number_in_prop + \prop_del:Nn \l_siunitx_number_in_prop { mantissa } - \prop_del:Nn \_l_siunitx_number_in_prop + \prop_del:Nn \l_siunitx_number_in_prop { mantissa-integer } } } @@ -6412,63 +6454,63 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_process_pad:n} +%\begin{macro}{\siunitx_number_process_pad:n} % For padding a number by adding zero to the end repeatedly. This can % happen if the input was zero or if the number is too short. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_pad:n #1 { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -decimal } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_process_pad:n #1 { + \prop_get:NnN \l_siunitx_number_in_prop { #1 -decimal } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \intexpr_while_do:nNnn { \_l_siunitx_round_int } > { 0 } + \intexpr_while_do:nNnn { \l_siunitx_round_int } > { 0 } { - \tl_put_right:Nn \_l_siunitx_tmpa_tl { 0 } - \int_decr:N \_l_siunitx_round_int + \tl_put_right:Nn \l_siunitx_tmpa_tl { 0 } + \int_decr:N \l_siunitx_round_int } - \prop_put:NnV \_l_siunitx_number_in_prop { #1 -decimal } - \_l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_in_prop { #1 -decimal } + \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_process_places:n} -%\begin{macro}[aux]{\_siunitx_number_process_places_aux_i:n} +%\begin{macro}{\siunitx_number_process_places:n} +%\begin{macro}[aux]{\siunitx_number_process_places_aux_i:n} % For rounding to a fixed number of places, a check is made to see if % the decimal part is exactly zero. If it is, just create the % appropriate number of zeros in the padding routine. Otherwise, do the % real work. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_places:n #1 { - \prop_if_in:NnT \_l_siunitx_number_in_prop {#1} +\cs_new_protected_nopar:Npn \siunitx_number_process_places:n #1 { + \prop_if_in:NnT \l_siunitx_number_in_prop {#1} { - \prop_if_in:NnF \_l_siunitx_number_in_prop { #1 -uncertainty } - { \_siunitx_number_process_places_aux_i:n {#1} } + \prop_if_in:NnF \l_siunitx_number_in_prop { #1 -uncertainty } + { \siunitx_number_process_places_aux_i:n {#1} } } } -\cs_set_protected_nopar:Npn \_siunitx_number_process_places_aux_i:n #1 { - \intexpr_compare:nNnTF { \_l_siunitx_process_precision_int } = { 0 } - { \prop_del:Nn \_l_siunitx_number_in_prop { #1 -decimal } } +\cs_new_protected_nopar:Npn \siunitx_number_process_places_aux_i:n #1 { + \intexpr_compare:nNnTF { \l_siunitx_process_precision_int } = { 0 } + { \prop_del:Nn \l_siunitx_number_in_prop { #1 -decimal } } { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -decimal } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_in_prop { #1 -decimal } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \tl_if_empty:NT \_l_siunitx_tmpa_tl - { \tl_set:Nn \_l_siunitx_tmpa_tl { 0 } } - \intexpr_compare:nNnTF { \_l_siunitx_tmpa_tl } = { 0 } + \tl_if_empty:NT \l_siunitx_tmpa_tl + { \tl_set:Nn \l_siunitx_tmpa_tl { 0 } } + \intexpr_compare:nNnTF { \l_siunitx_tmpa_tl } = { 0 } { - \prop_put:Nnn \_l_siunitx_number_in_prop { #1 -decimal } + \prop_put:Nnn \l_siunitx_number_in_prop { #1 -decimal } { } - \int_set:Nn \_l_siunitx_round_int - { \_l_siunitx_process_precision_int } - \_siunitx_number_process_pad:n {#1} + \int_set:Nn \l_siunitx_round_int + { \l_siunitx_process_precision_int } + \siunitx_number_process_pad:n {#1} } { - \int_set:Nn \_l_siunitx_round_int - { \tl_elt_count:N \_l_siunitx_tmpa_tl } - \_siunitx_number_process_places_aux_ii:n {#1} + \int_set:Nn \l_siunitx_round_int + { \tl_elt_count:N \l_siunitx_tmpa_tl } + \siunitx_number_process_places_aux_ii:n {#1} } } } @@ -6476,379 +6518,379 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}[aux]{\_siunitx_number_process_places_aux_ii:n} +%\begin{macro}[aux]{\siunitx_number_process_places_aux_ii:n} % For rounding to a fixed number of places, the package finds the % difference in length between what is present and what is required. % If the number is too short, there is some simple padding to do. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_number_process_places_aux_ii:n #1 { - \int_sub:Nn \_l_siunitx_round_int - { \_l_siunitx_process_precision_int } - \intexpr_compare:nNnTF { \_l_siunitx_round_int } < { 0 } +\cs_new_protected_nopar:Npn + \siunitx_number_process_places_aux_ii:n #1 { + \int_sub:Nn \l_siunitx_round_int + { \l_siunitx_process_precision_int } + \intexpr_compare:nNnTF { \l_siunitx_round_int } < { 0 } { - \int_set:Nn \_l_siunitx_round_int { - \_l_siunitx_round_int } - \_siunitx_number_process_pad:n {#1} + \int_set:Nn \l_siunitx_round_int { - \l_siunitx_round_int } + \siunitx_number_process_pad:n {#1} } { - \_siunitx_number_process_places_init:n {#1} - \_siunitx_number_process_places_loop:n {#1} - \_siunitx_number_process_round_tidy:n {#1} + \siunitx_number_process_places_init:n {#1} + \siunitx_number_process_places_loop:n {#1} + \siunitx_number_process_round_tidy:n {#1} } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_number_process_places_init:n} +%\begin{macro}{\siunitx_number_process_places_init:n} % To keep the code a little clearer. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_places_init:n #1 { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -integer } - \_l_siunitx_round_integer_in_tl - \quark_if_no_value:NT \_l_siunitx_round_integer_in_tl - { \tl_clear:N \_l_siunitx_round_integer_in_tl } - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -decimal } - \_l_siunitx_round_decimal_in_tl - \tl_reverse:N \_l_siunitx_round_integer_in_tl - \tl_reverse:N \_l_siunitx_round_decimal_in_tl - \tl_clear:N \_l_siunitx_round_integer_out_tl - \tl_clear:N \_l_siunitx_round_decimal_out_tl - \bool_set_false:N \_l_siunitx_round_bool +\cs_new_protected_nopar:Npn \siunitx_number_process_places_init:n #1 { + \prop_get:NnN \l_siunitx_number_in_prop { #1 -integer } + \l_siunitx_round_integer_in_tl + \quark_if_no_value:NT \l_siunitx_round_integer_in_tl + { \tl_clear:N \l_siunitx_round_integer_in_tl } + \prop_get:NnN \l_siunitx_number_in_prop { #1 -decimal } + \l_siunitx_round_decimal_in_tl + \tl_reverse:N \l_siunitx_round_integer_in_tl + \tl_reverse:N \l_siunitx_round_decimal_in_tl + \tl_clear:N \l_siunitx_round_integer_out_tl + \tl_clear:N \l_siunitx_round_decimal_out_tl + \bool_set_false:N \l_siunitx_round_bool } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_number_process_places_loop:n} +%\begin{macro}[aux]{\siunitx_number_process_places_loop:n} % If there is a decimal, do the decimal processing then come back here. % If there is an integer, do the same. Only if both are empty does the % loop stop. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_places_loop:n #1 { - \tl_if_empty:NTF \_l_siunitx_round_decimal_in_tl +\cs_new_protected_nopar:Npn \siunitx_number_process_places_loop:n #1 { + \tl_if_empty:NTF \l_siunitx_round_decimal_in_tl { - \tl_if_empty:NF \_l_siunitx_round_integer_in_tl + \tl_if_empty:NF \l_siunitx_round_integer_in_tl { - \_siunitx_number_process_places_integer:n {#1} - \_siunitx_number_process_places_loop:n {#1} + \siunitx_number_process_places_integer:n {#1} + \siunitx_number_process_places_loop:n {#1} } - \bool_if:NT \_l_siunitx_round_bool + \bool_if:NT \l_siunitx_round_bool { - \tl_put_left:Nn \_l_siunitx_round_integer_out_tl { 1 } - \bool_set_false:N \_l_siunitx_round_bool + \tl_put_left:Nn \l_siunitx_round_integer_out_tl { 1 } + \bool_set_false:N \l_siunitx_round_bool } } { - \_siunitx_number_process_round_decimal: - \_siunitx_number_process_places_loop:n {#1} + \siunitx_number_process_round_decimal: + \siunitx_number_process_places_loop:n {#1} } } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_number_process_places_integer:n} +%\begin{macro}[aux]{\siunitx_number_process_places_integer:n} % Rounding for integers is just a case of carrying digits. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_number_process_places_integer:n #1 { - \int_set:Nn \_l_siunitx_tmp_int - { \exp_args:NV \tl_head:n \_l_siunitx_round_integer_in_tl } - \tl_set:Nx \_l_siunitx_round_integer_in_tl - { \exp_args:NV \tl_tail:n \_l_siunitx_round_integer_in_tl } - \bool_if:NT \_l_siunitx_round_bool - { \int_incr:N \_l_siunitx_tmp_int } - \bool_set_false:N \_l_siunitx_round_bool - \intexpr_compare:nNnT { \_l_siunitx_tmp_int } = { 10 } +\cs_new_protected_nopar:Npn + \siunitx_number_process_places_integer:n #1 { + \int_set:Nn \l_siunitx_tmp_int + { \exp_args:NV \tl_head:n \l_siunitx_round_integer_in_tl } + \tl_set:Nx \l_siunitx_round_integer_in_tl + { \exp_args:NV \tl_tail:n \l_siunitx_round_integer_in_tl } + \bool_if:NT \l_siunitx_round_bool + { \int_incr:N \l_siunitx_tmp_int } + \bool_set_false:N \l_siunitx_round_bool + \intexpr_compare:nNnT { \l_siunitx_tmp_int } = { 10 } { - \int_zero:N \_l_siunitx_tmp_int - \bool_set_true:N \_l_siunitx_round_bool + \int_zero:N \l_siunitx_tmp_int + \bool_set_true:N \l_siunitx_round_bool } - \tl_put_left:NV \_l_siunitx_round_integer_out_tl \_l_siunitx_tmp_int + \tl_put_left:NV \l_siunitx_round_integer_out_tl \l_siunitx_tmp_int } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_process_round:} +%\begin{macro}{\siunitx_number_process_round:} % The lead-off for rounding is the same for decimal places and % significant figures. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_round: { - \tl_if_empty:NF \_l_siunitx_round_tl +\cs_new_protected_nopar:Npn \siunitx_number_process_round: { + \tl_if_empty:NF \l_siunitx_round_tl { - \cs_set_nopar:Npx \_siunitx_tmp:w + \cs_set_nopar:Npx \siunitx_tmp:w { \exp_not:N \clist_map_function:nN { mantissa , complex } \exp_not:c - { _siunitx_number_process_ \_l_siunitx_round_tl :n } + { siunitx_number_process_ \l_siunitx_round_tl :n } } - \_siunitx_tmp:w + \siunitx_tmp:w } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_number_process_round_decimal:} -%\begin{macro}[aux]{\_siunitx_number_process_round_decimal_aux:} +%\begin{macro}{\siunitx_number_process_round_decimal:} +%\begin{macro}[aux]{\siunitx_number_process_round_decimal_aux:} % The rounding routine for decimals is the same for figures and places, % so there is a generalised function here. Unfortunately, it is also % complicated! % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_round_decimal: { - \intexpr_compare:nNnF { \_l_siunitx_round_int } > { 1 } - { \_siunitx_number_process_round_decimal_aux: } - \tl_set:Nx \_l_siunitx_round_decimal_in_tl - { \exp_args:NV \tl_tail:n \_l_siunitx_round_decimal_in_tl } +\cs_new_protected_nopar:Npn \siunitx_number_process_round_decimal: { + \intexpr_compare:nNnF { \l_siunitx_round_int } > { 1 } + { \siunitx_number_process_round_decimal_aux: } + \tl_set:Nx \l_siunitx_round_decimal_in_tl + { \exp_args:NV \tl_tail:n \l_siunitx_round_decimal_in_tl } - \int_decr:N \_l_siunitx_round_int + \int_decr:N \l_siunitx_round_int } -\cs_set_protected_nopar:Npn - \_siunitx_number_process_round_decimal_aux: { - \int_set:Nn \_l_siunitx_tmp_int - { \exp_args:NV \tl_head:n \_l_siunitx_round_decimal_in_tl } - \bool_if:NT \_l_siunitx_round_bool - { \int_incr:N \_l_siunitx_tmp_int } - \bool_set_false:N \_l_siunitx_round_bool - \intexpr_compare:nNnTF { \_l_siunitx_round_int } = { 1 } +\cs_new_protected_nopar:Npn + \siunitx_number_process_round_decimal_aux: { + \int_set:Nn \l_siunitx_tmp_int + { \exp_args:NV \tl_head:n \l_siunitx_round_decimal_in_tl } + \bool_if:NT \l_siunitx_round_bool + { \int_incr:N \l_siunitx_tmp_int } + \bool_set_false:N \l_siunitx_round_bool + \intexpr_compare:nNnTF { \l_siunitx_round_int } = { 1 } { - \intexpr_compare:nNnT { \_l_siunitx_tmp_int } > { 4 } - { \bool_set_true:N \_l_siunitx_round_bool } + \intexpr_compare:nNnT { \l_siunitx_tmp_int } > { 4 } + { \bool_set_true:N \l_siunitx_round_bool } } { - \intexpr_compare:nNnT { \_l_siunitx_tmp_int } = { 10 } + \intexpr_compare:nNnT { \l_siunitx_tmp_int } = { 10 } { - \bool_set_true:N \_l_siunitx_round_bool - \int_zero:N \_l_siunitx_tmp_int + \bool_set_true:N \l_siunitx_round_bool + \int_zero:N \l_siunitx_tmp_int } - \tl_put_left:NV \_l_siunitx_round_decimal_out_tl - \_l_siunitx_tmp_int + \tl_put_left:NV \l_siunitx_round_decimal_out_tl + \l_siunitx_tmp_int } } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_process_round_tidy:n} +%\begin{macro}{\siunitx_number_process_round_tidy:n} % To put data back again. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_round_tidy:n #1 { - \prop_put:NnV \_l_siunitx_number_in_prop { #1 -integer } - \_l_siunitx_round_integer_out_tl - \prop_put:NnV \_l_siunitx_number_in_prop { #1 -decimal } - \_l_siunitx_round_decimal_out_tl +\cs_new_protected_nopar:Npn \siunitx_number_process_round_tidy:n #1 { + \prop_put:NnV \l_siunitx_number_in_prop { #1 -integer } + \l_siunitx_round_integer_out_tl + \prop_put:NnV \l_siunitx_number_in_prop { #1 -decimal } + \l_siunitx_round_decimal_out_tl } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_process_sign:} +%\begin{macro}{\siunitx_number_process_sign:} % Sorting out signs consists of two parts: retaining a plus if necessary % and adding an explicit sign. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_sign: { - \bool_if:NF \_l_siunitx_process_plus_tl +\cs_new_protected_nopar:Npn \siunitx_number_process_sign: { + \bool_if:NF \l_siunitx_process_plus_tl { - \prop_if_in:NnTF \_l_siunitx_number_in_prop { mantissa-sign } - { \_siunitx_number_process_sign_plus:n { mantissa } } + \prop_if_in:NnTF \l_siunitx_number_in_prop { mantissa-sign } + { \siunitx_number_process_sign_plus:n { mantissa } } { - \prop_if_in:NnT \_l_siunitx_number_in_prop { complex-sign } + \prop_if_in:NnT \l_siunitx_number_in_prop { complex-sign } { - \prop_if_in:NnF \_l_siunitx_number_in_prop { mantissa } - { \_siunitx_number_process_sign_plus:n { complex } } + \prop_if_in:NnF \l_siunitx_number_in_prop { mantissa } + { \siunitx_number_process_sign_plus:n { complex } } } } - \prop_if_in:NnT \_l_siunitx_number_in_prop { exponent-sign } - { \_siunitx_number_process_sign_plus:n { exponent } } + \prop_if_in:NnT \l_siunitx_number_in_prop { exponent-sign } + { \siunitx_number_process_sign_plus:n { exponent } } } - \tl_if_empty:NF \_l_siunitx_process_sign_tl + \tl_if_empty:NF \l_siunitx_process_sign_tl { - \prop_if_in:NnTF \_l_siunitx_number_in_prop { mantissa } - { \_siunitx_number_process_sign_add:n { mantissa } } + \prop_if_in:NnTF \l_siunitx_number_in_prop { mantissa } + { \siunitx_number_process_sign_add:n { mantissa } } { - \prop_if_in:NnT \_l_siunitx_number_in_prop { complex } - { \_siunitx_number_process_sign_add:n { complex } } + \prop_if_in:NnT \l_siunitx_number_in_prop { complex } + { \siunitx_number_process_sign_add:n { complex } } } - \prop_if_in:NnT \_l_siunitx_number_in_prop { exponent } - { \_siunitx_number_process_sign_add:n { exponent } } + \prop_if_in:NnT \l_siunitx_number_in_prop { exponent } + { \siunitx_number_process_sign_add:n { exponent } } } } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_number_process_sign_add:n} +%\begin{macro}[aux]{\siunitx_number_process_sign_add:n} % Adding a sign to an existing number needs a couple of to make sure % there is a number to add to, and to see if there is a sign already. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_sign_add:n #1 { - \prop_if_in:NnF \_l_siunitx_number_in_prop { #1 -sign } +\cs_new_protected_nopar:Npn \siunitx_number_process_sign_add:n #1 { + \prop_if_in:NnF \l_siunitx_number_in_prop { #1 -sign } { - \prop_if_in:NnF \_l_siunitx_number_in_prop { #1 -had-sign } + \prop_if_in:NnF \l_siunitx_number_in_prop { #1 -had-sign } { - \prop_get:NnN \_l_siunitx_number_in_prop {#1} - \_l_siunitx_tmpa_tl - \tl_if_empty:NTF \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_in_prop {#1} + \l_siunitx_tmpa_tl + \tl_if_empty:NTF \l_siunitx_tmpa_tl { - \prop_put:NnV \_l_siunitx_number_in_prop { sign } - \_l_siunitx_process_sign_tl + \prop_put:NnV \l_siunitx_number_in_prop { sign } + \l_siunitx_process_sign_tl } { - \prop_put:NnV \_l_siunitx_number_in_prop { #1 -sign } - \_l_siunitx_process_sign_tl + \prop_put:NnV \l_siunitx_number_in_prop { #1 -sign } + \l_siunitx_process_sign_tl } } } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_c_siunitx_plus_tl} -%\begin{macro}[aux]{\_siunitx_number_process_sign_plus:n} +%\begin{macro}{\c_siunitx_plus_tl} +%\begin{macro}[aux]{\siunitx_number_process_sign_plus:n} % Holding onto a plus works very much in the same way as adding a sign: % some quick tests and an assignment. Using a pre-defined token list is % a speed-related choice: very slightly faster comparison. % \begin{macrocode} -\tl_new:N \_c_siunitx_plus_tl -\tl_set:Nn \_c_siunitx_plus_tl { + } -\cs_set_protected_nopar:Npn \_siunitx_number_process_sign_plus:n #1 { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -sign } - \_l_siunitx_tmpa_tl - \tl_if_eq:NNT \_c_siunitx_plus_tl \_l_siunitx_tmpa_tl +\tl_new:N \c_siunitx_plus_tl +\tl_set:Nn \c_siunitx_plus_tl { + } +\cs_new_protected_nopar:Npn \siunitx_number_process_sign_plus:n #1 { + \prop_get:NnN \l_siunitx_number_in_prop { #1 -sign } + \l_siunitx_tmpa_tl + \tl_if_eq:NNT \c_siunitx_plus_tl \l_siunitx_tmpa_tl { - \prop_del:Nn \_l_siunitx_number_in_prop { #1 -sign } - \prop_put:Nnn \_l_siunitx_number_in_prop { #1 -had-sign } { true } + \prop_del:Nn \l_siunitx_number_in_prop { #1 -sign } + \prop_put:Nnn \l_siunitx_number_in_prop { #1 -had-sign } { true } } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_process_uncertainty:} -%\begin{macro}[aux]{\_siunitx_number_process_uncertainty_aux:n} +%\begin{macro}{\siunitx_number_process_uncertainty:} +%\begin{macro}[aux]{\siunitx_number_process_uncertainty_aux:n} % There may be a need to expand uncertainties into a decimal and integer % part. This is done here so that the core \texttt{in} code is faster. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_uncertainty: { +\cs_new_protected_nopar:Npn \siunitx_number_process_uncertainty: { \clist_map_function:nN { mantissa , complex } - \_siunitx_number_process_uncertainty_aux:n + \siunitx_number_process_uncertainty_aux:n } -\cs_set_protected_nopar:Npn - \_siunitx_number_process_uncertainty_aux:n #1 { - \prop_if_in:NnT \_l_siunitx_number_in_prop { #1 -uncertainty } +\cs_new_protected_nopar:Npn + \siunitx_number_process_uncertainty_aux:n #1 { + \prop_if_in:NnT \l_siunitx_number_in_prop { #1 -uncertainty } { - \prop_if_in:NnTF \_l_siunitx_number_in_prop { #1 -decimal-marker } - { \_siunitx_number_process_uncertainty_decimal:n {#1} } - { \_siunitx_number_process_uncertainty_integer:n {#1} } + \prop_if_in:NnTF \l_siunitx_number_in_prop { #1 -decimal-marker } + { \siunitx_number_process_uncertainty_decimal:n {#1} } + { \siunitx_number_process_uncertainty_integer:n {#1} } } } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_process_uncertainty_decimal:n} -%\begin{macro}[aux]{\_siunitx_number_process_uncertainty_count:nn} +%\begin{macro}{\siunitx_number_process_uncertainty_decimal:n} +%\begin{macro}[aux]{\siunitx_number_process_uncertainty_count:nn} % To deal with an error in the decimal part, care needs to be taken to % correctly pad with zeros and also to allow for the possibility that % the error crosses the decimal--integer boundary. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_number_process_uncertainty_decimal:n #1 { - \_siunitx_number_process_uncertainty_count:nn {#1} { decimal } - \_siunitx_number_process_uncertainty_count:nn {#1} { uncertainty } - \tl_clear:N \_l_siunitx_uncertainty_decimal_tl - \tl_clear:N \_l_siunitx_uncertainty_integer_tl +\cs_new_protected_nopar:Npn + \siunitx_number_process_uncertainty_decimal:n #1 { + \siunitx_number_process_uncertainty_count:nn {#1} { decimal } + \siunitx_number_process_uncertainty_count:nn {#1} { uncertainty } + \tl_clear:N \l_siunitx_uncertainty_decimal_tl + \tl_clear:N \l_siunitx_uncertainty_integer_tl \intexpr_compare:nNnTF - { \_l_siunitx_process_uncertainty_int } > - { \_l_siunitx_process_decimal_int } - { \_siunitx_number_process_uncertainty_separate: } - { \_siunitx_number_process_uncertainty_pad: } - \tl_if_empty:NF \_l_siunitx_uncertainty_integer_tl + { \l_siunitx_process_uncertainty_int } > + { \l_siunitx_process_decimal_int } + { \siunitx_number_process_uncertainty_separate: } + { \siunitx_number_process_uncertainty_pad: } + \tl_if_empty:NF \l_siunitx_uncertainty_integer_tl { - \prop_put:NnV \_l_siunitx_number_in_prop + \prop_put:NnV \l_siunitx_number_in_prop { #1 -uncertainty-integer } - \_l_siunitx_uncertainty_integer_tl + \l_siunitx_uncertainty_integer_tl } - \prop_put:NnV \_l_siunitx_number_in_prop { #1 -uncertainty-decimal } - \_l_siunitx_uncertainty_decimal_tl - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -decimal-marker } - \_l_siunitx_tmpa_tl - \prop_put:NnV \_l_siunitx_number_in_prop - { #1 -uncertainty-decimal-marker } \_l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_in_prop { #1 -uncertainty-decimal } + \l_siunitx_uncertainty_decimal_tl + \prop_get:NnN \l_siunitx_number_in_prop { #1 -decimal-marker } + \l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_in_prop + { #1 -uncertainty-decimal-marker } \l_siunitx_tmpa_tl } -\cs_set_protected_nopar:Npn - \_siunitx_number_process_uncertainty_count:nn #1#2 { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 - #2 } - \_l_siunitx_tmpa_tl - \int_set:cn { _l_siunitx_process_ #2 _int } - { \tl_elt_count:N \_l_siunitx_tmpa_tl } +\cs_new_protected_nopar:Npn + \siunitx_number_process_uncertainty_count:nn #1#2 { + \prop_get:NnN \l_siunitx_number_in_prop { #1 - #2 } + \l_siunitx_tmpa_tl + \int_set:cn { l_siunitx_process_ #2 _int } + { \tl_elt_count:N \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_process_uncertainty_pad:} +%\begin{macro}{\siunitx_number_process_uncertainty_pad:} % Uncertainty is short: add zeros. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_uncertainty_pad: { +\cs_new_protected_nopar:Npn \siunitx_number_process_uncertainty_pad: { \intexpr_while_do:nNnn - { \_l_siunitx_process_uncertainty_int } < - { \_l_siunitx_process_decimal_int } + { \l_siunitx_process_uncertainty_int } < + { \l_siunitx_process_decimal_int } { - \tl_put_right:Nn \_l_siunitx_uncertainty_decimal_tl {0} - \int_incr:N \_l_siunitx_process_uncertainty_int + \tl_put_right:Nn \l_siunitx_uncertainty_decimal_tl {0} + \int_incr:N \l_siunitx_process_uncertainty_int } - \tl_put_right:NV \_l_siunitx_uncertainty_decimal_tl - \_l_siunitx_tmpa_tl + \tl_put_right:NV \l_siunitx_uncertainty_decimal_tl + \l_siunitx_tmpa_tl } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_number_process_uncertainty_separate:} -%\begin{macro}{\_siunitx_number_process_uncertainty_separate_aux:N} +%\begin{macro}{\siunitx_number_process_uncertainty_separate:} +%\begin{macro}{\siunitx_number_process_uncertainty_separate_aux:N} % Find the integer--decimal boundary and work appropriately. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_number_process_uncertainty_separate: { - \tl_map_function:NN \_l_siunitx_tmpa_tl - \_siunitx_number_process_uncertainty_separate_aux:N +\cs_new_protected_nopar:Npn + \siunitx_number_process_uncertainty_separate: { + \tl_map_function:NN \l_siunitx_tmpa_tl + \siunitx_number_process_uncertainty_separate_aux:N } -\cs_set_protected:Npn - \_siunitx_number_process_uncertainty_separate_aux:N #1 { +\cs_new_protected:Npn + \siunitx_number_process_uncertainty_separate_aux:N #1 { \intexpr_compare:nNnTF - { \_l_siunitx_process_uncertainty_int } > - { \_l_siunitx_process_decimal_int } - { \tl_put_right:Nn \_l_siunitx_uncertainty_integer_tl {#1} } - { \tl_put_right:Nn \_l_siunitx_uncertainty_decimal_tl {#1} } - \int_decr:N \_l_siunitx_process_uncertainty_int + { \l_siunitx_process_uncertainty_int } > + { \l_siunitx_process_decimal_int } + { \tl_put_right:Nn \l_siunitx_uncertainty_integer_tl {#1} } + { \tl_put_right:Nn \l_siunitx_uncertainty_decimal_tl {#1} } + \int_decr:N \l_siunitx_process_uncertainty_int } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_process_uncertainty_integer:n} +%\begin{macro}{\siunitx_number_process_uncertainty_integer:n} % Relatively easy: the uncertainty is in the integer part of the number, % and so there is no need to generate zeros. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_number_process_uncertainty_integer:n #1 { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -uncertainty } - \_l_siunitx_tmpa_tl - \prop_put:NnV \_l_siunitx_number_in_prop { #1 -uncertainty-integer } - \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn + \siunitx_number_process_uncertainty_integer:n #1 { + \prop_get:NnN \l_siunitx_number_in_prop { #1 -uncertainty } + \l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_in_prop { #1 -uncertainty-integer } + \l_siunitx_tmpa_tl } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_process_zero_fill:} -%\begin{macro}[aux]{\_siunitx_number_process_zero_fill_aux:n} -%\begin{macro}[aux]{\_siunitx_number_process_zero_fill_aux:nn} +%\begin{macro}{\siunitx_number_process_zero_fill:} +%\begin{macro}[aux]{\siunitx_number_process_zero_fill_aux:n} +%\begin{macro}[aux]{\siunitx_number_process_zero_fill_aux:nn} % Checks for adding zeros to each component are carried out. The nesting % here makes checking the appropriate flag a little more efficient. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_process_zero_fill: { - \_siunitx_number_process_zero_fill_aux:n { integer } - \_siunitx_number_process_zero_fill_aux:n { decimal } +\cs_new_protected_nopar:Npn \siunitx_number_process_zero_fill: { + \siunitx_number_process_zero_fill_aux:n { integer } + \siunitx_number_process_zero_fill_aux:n { decimal } } -\cs_set_nopar:Npn \_siunitx_number_process_zero_fill_aux:n #1 { - \bool_if:cT { _l_siunitx_process_ #1 _zero_bool } +\cs_new_nopar:Npn \siunitx_number_process_zero_fill_aux:n #1 { + \bool_if:cT { l_siunitx_process_ #1 _zero_bool } { - \_siunitx_number_process_zero_fill_aux:nn { mantissa } {#1} - \_siunitx_number_process_zero_fill_aux:nn { complex } {#1} - \_siunitx_number_process_zero_fill_aux:nn { exponent } {#1} + \siunitx_number_process_zero_fill_aux:nn { mantissa } {#1} + \siunitx_number_process_zero_fill_aux:nn { complex } {#1} + \siunitx_number_process_zero_fill_aux:nn { exponent } {#1} } } -\cs_set_protected_nopar:Npn - \_siunitx_number_process_zero_fill_aux:nn #1#2 { - \prop_if_in:NnT \_l_siunitx_number_in_prop { #1 -decimal-marker } +\cs_new_protected_nopar:Npn + \siunitx_number_process_zero_fill_aux:nn #1#2 { + \prop_if_in:NnT \l_siunitx_number_in_prop { #1 -decimal-marker } { - \prop_if_in:NnF \_l_siunitx_number_in_prop { #1 - #2 } - { \prop_put:Nnn \_l_siunitx_number_in_prop { #1 - #2 } { 0 } } + \prop_if_in:NnF \l_siunitx_number_in_prop { #1 - #2 } + { \prop_put:Nnn \l_siunitx_number_in_prop { #1 - #2 } { 0 } } } } % \end{macrocode} @@ -6865,92 +6907,92 @@ This work consists of the file siunitx.dtx % \texttt{out} store is that the later can include formatting such as % hard spaces. % -%\begin{macro}{\_l_siunitx_number_out_prop} +%\begin{macro}{\l_siunitx_number_out_prop} % Like the \texttt{in} version! % \begin{macrocode} -\prop_new:N \_l_siunitx_number_out_prop +\prop_new:N \l_siunitx_number_out_prop % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_group_sep_tl} -%\begin{macro}{\_l_siunitx_output_decimal_tl} +%\begin{macro}{\l_siunitx_group_sep_tl} +%\begin{macro}{\l_siunitx_output_decimal_tl} % A couple of variables are declared here, as they need a little more % work than just storage. % \begin{macrocode} -\tl_new:N \_l_siunitx_group_sep_tl -\tl_new:N \_l_siunitx_output_decimal_tl +\tl_new:N \l_siunitx_group_sep_tl +\tl_new:N \l_siunitx_output_decimal_tl % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_complex_after_bool} +%\begin{macro}{\l_siunitx_complex_after_bool} % A setting for where complex numbers go. % \begin{macrocode} -\bool_new:N \_l_siunitx_complex_after_bool -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\_l_siunitx_brackets_bool} -%\begin{macro}{\_l_siunitx_bracket_close_tl} -%\begin{macro}{\_l_siunitx_output_decimal_copy_bool} -%\begin{macro}{\_l_siunitx_exponent_base_tl} -%\begin{macro}{\_l_siunitx_exponent_product_tl} -%\begin{macro}{\_l_siunitx_group_decimal_bool} -%\begin{macro}{\_l_siunitx_group_four_bool} -%\begin{macro}{\_l_siunitx_group_integer_bool} -%\begin{macro}{\_l_siunitx_negative_color_tl} -%\begin{macro}{\_l_siunitx_bracket_open_tl} -%\begin{macro}{\_l_siunitx_output_uncert_close_tl} -%\begin{macro}{\_l_siunitx_output_complex_tl} -%\begin{macro}{\_l_siunitx_output_uncert_open_tl} -%\begin{macro}{\_l_siunitx_uncert_sep_bool} -%\begin{macro}{\_l_siunitx_tight_bool} -%\begin{macro}{\_l_siunitx_uncert_sep_tl} +\bool_new:N \l_siunitx_complex_after_bool +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\l_siunitx_brackets_bool} +%\begin{macro}{\l_siunitx_bracket_close_tl} +%\begin{macro}{\l_siunitx_output_decimal_copy_bool} +%\begin{macro}{\l_siunitx_exponent_base_tl} +%\begin{macro}{\l_siunitx_exponent_product_tl} +%\begin{macro}{\l_siunitx_group_decimal_bool} +%\begin{macro}{\l_siunitx_group_four_bool} +%\begin{macro}{\l_siunitx_group_integer_bool} +%\begin{macro}{\l_siunitx_negative_color_tl} +%\begin{macro}{\l_siunitx_bracket_open_tl} +%\begin{macro}{\l_siunitx_output_uncert_close_tl} +%\begin{macro}{\l_siunitx_output_complex_tl} +%\begin{macro}{\l_siunitx_output_uncert_open_tl} +%\begin{macro}{\l_siunitx_uncert_sep_bool} +%\begin{macro}{\l_siunitx_tight_bool} +%\begin{macro}{\l_siunitx_uncert_sep_tl} % Lots of settings, some used only for numbers, some more widely. % \begin{macrocode} \keys_define:nn { siunitx } { - bracket-numbers .bool_set:N = \_l_siunitx_brackets_bool, - close-bracket .tl_set:N = \_l_siunitx_bracket_close_tl, + bracket-numbers .bool_set:N = \l_siunitx_brackets_bool, + close-bracket .tl_set:N = \l_siunitx_bracket_close_tl, complex-root-position .choice:, complex-root-position / after-number .code:n = - { \bool_set_true:N \_l_siunitx_complex_after_bool } , + { \bool_set_true:N \l_siunitx_complex_after_bool } , complex-root-position / before-number .code:n = - { \bool_set_false:N \_l_siunitx_complex_after_bool } , + { \bool_set_false:N \l_siunitx_complex_after_bool } , copy-decimal-marker .bool_set:N = - \_l_siunitx_output_decimal_copy_bool, - exponent-base .tl_set:N = \_l_siunitx_exponent_base_tl, + \l_siunitx_output_decimal_copy_bool, + exponent-base .tl_set:N = \l_siunitx_exponent_base_tl, exponent-product .tl_set:N = - \_l_siunitx_exponent_product_tl, + \l_siunitx_exponent_product_tl, group-decimal-digits .bool_set:N = - \_l_siunitx_group_decimal_bool, + \l_siunitx_group_decimal_bool, group-digits .meta:n = { group-decimal-digits = #1, group-integer-digits = #1 }, - group-four-digits .bool_set:N = \_l_siunitx_group_four_bool, + group-four-digits .bool_set:N = \l_siunitx_group_four_bool, group-integer-digits .bool_set:N = - \_l_siunitx_group_integer_bool, + \l_siunitx_group_integer_bool, group-separator .code:n = { - \tl_set:Nn \_l_siunitx_group_sep_tl { {#1} } + \tl_set:Nn \l_siunitx_group_sep_tl { {#1} } }, - negative-color .tl_set:N = \_l_siunitx_negative_color_tl, - open-bracket .tl_set:N = \_l_siunitx_bracket_open_tl, + negative-color .tl_set:N = \l_siunitx_negative_color_tl, + open-bracket .tl_set:N = \l_siunitx_bracket_open_tl, output-close-uncertainty .tl_set:N = - \_l_siunitx_output_uncert_close_tl, - output-complex-root .tl_set:N = \_l_siunitx_output_complex_tl, + \l_siunitx_output_uncert_close_tl, + output-complex-root .tl_set:N = \l_siunitx_output_complex_tl, output-decimal-marker .code:n = { - \tl_set:Nn \_l_siunitx_output_decimal_tl { {#1} } + \tl_set:Nn \l_siunitx_output_decimal_tl { {#1} } }, output-open-uncertainty .tl_set:N = - \_l_siunitx_output_uncert_open_tl, - separate-uncertainty .bool_set:N = \_l_siunitx_uncert_sep_bool, - tight-spacing .bool_set:N = \_l_siunitx_tight_bool, - uncertainty-separator .tl_set:N = \_l_siunitx_uncert_sep_tl, + \l_siunitx_output_uncert_open_tl, + separate-uncertainty .bool_set:N = \l_siunitx_uncert_sep_bool, + tight-spacing .bool_set:N = \l_siunitx_tight_bool, + uncertainty-separator .tl_set:N = \l_siunitx_uncert_sep_tl, } \keys_set:nn { siunitx } { bracket-numbers = true, % ( @@ -6986,82 +7028,82 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_format:} +%\begin{macro}{\siunitx_number_format:} % The master control function for formatting output: the usual set up. % The number is put back together in stages. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format: { - \prop_if_empty:NF \_l_siunitx_number_in_prop +\cs_new_protected_nopar:Npn \siunitx_number_format: { + \prop_if_empty:NF \l_siunitx_number_in_prop { - \prop_clear:N \_l_siunitx_number_out_prop - \_siunitx_number_format_reassemble: - \_siunitx_number_format_complex: - \_siunitx_number_format_sign:n { mantissa } - \_siunitx_number_format_sign:n { exponent } - \_siunitx_number_format_color: - \_siunitx_number_format_final: + \prop_clear:N \l_siunitx_number_out_prop + \siunitx_number_format_reassemble: + \siunitx_number_format_complex: + \siunitx_number_format_sign:n { mantissa } + \siunitx_number_format_sign:n { exponent } + \siunitx_number_format_color: + \siunitx_number_format_final: } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_brackets:n} -%\begin{macro}{\_siunitx_number_format_brackets_aux:n} +%\begin{macro}{\siunitx_number_format_brackets:n} +%\begin{macro}{\siunitx_number_format_brackets_aux:n} % There are various points at which brackets might be added to % avoid ambiguity. The function here adds the appropriate tokens % around whatever is in the supplied named store. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_brackets:n #1 { - \bool_if:NT \_l_siunitx_brackets_bool +\cs_new_protected_nopar:Npn \siunitx_number_format_brackets:n #1 { + \bool_if:NT \l_siunitx_brackets_bool { - \prop_if_in:NnT \_l_siunitx_number_out_prop { #1 -bracket } + \prop_if_in:NnT \l_siunitx_number_out_prop { #1 -bracket } { - \_siunitx_number_format_brackets_aux:n {#1} - \prop_del:Nn \_l_siunitx_number_out_prop { #1 -bracket } + \siunitx_number_format_brackets_aux:n {#1} + \prop_del:Nn \l_siunitx_number_out_prop { #1 -bracket } } } } -\cs_set_protected_nopar:Npn \_siunitx_number_format_brackets_aux:n #1 { - \prop_get:NnN \_l_siunitx_number_out_prop { #1 -result } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NT \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_format_brackets_aux:n #1 { + \prop_get:NnN \l_siunitx_number_out_prop { #1 -result } + \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl { - \prop_get:NnN \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_out_prop {#1} \l_siunitx_tmpa_tl } - \_siunitx_tl_put_left_math:NV \_l_siunitx_tmpa_tl - \_l_siunitx_bracket_open_tl - \_siunitx_tl_put_right_math:NV \_l_siunitx_tmpa_tl - \_l_siunitx_bracket_close_tl + \siunitx_tl_put_left_math:NV \l_siunitx_tmpa_tl + \l_siunitx_bracket_open_tl + \siunitx_tl_put_right_math:NV \l_siunitx_tmpa_tl + \l_siunitx_bracket_close_tl \tl_if_eq:nnTF {#1} { result } - { \prop_put:NnV \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpa_tl } + { \prop_put:NnV \l_siunitx_number_out_prop {#1} \l_siunitx_tmpa_tl } { - \prop_put:NnV \_l_siunitx_number_out_prop { #1 -result } - \_l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_out_prop { #1 -result } + \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_color:} -%\begin{macro}{\_siunitx_number_format_color_aux:n} +%\begin{macro}{\siunitx_number_format_color:} +%\begin{macro}{\siunitx_number_format_color_aux:n} % If the mantissa is negative, then any colour for output might change. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_color: { - \tl_if_empty:NF \_l_siunitx_negative_color_tl +\cs_new_protected_nopar:Npn \siunitx_number_format_color: { + \tl_if_empty:NF \l_siunitx_negative_color_tl { - \_siunitx_number_format_color_aux:n { mantissa-sign } - \_siunitx_number_format_color_aux:n { sign } + \siunitx_number_format_color_aux:n { mantissa-sign } + \siunitx_number_format_color_aux:n { sign } } } -\cs_set_protected_nopar:Npn \_siunitx_number_format_color_aux:n #1 { - \prop_get:NnN \_l_siunitx_number_in_prop {#1} \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_format_color_aux:n #1 { + \prop_get:NnN \l_siunitx_number_in_prop {#1} \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \tl_if_eq:nVT { - } \_l_siunitx_tmpa_tl + \tl_if_eq:nVT { - } \l_siunitx_tmpa_tl { - \prop_put:NnV \_l_siunitx_number_out_prop { color } - \_l_siunitx_negative_color_tl + \prop_put:NnV \l_siunitx_number_out_prop { color } + \l_siunitx_negative_color_tl } } } @@ -7069,72 +7111,72 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_complex:} -%\begin{macro}[aux]{\_siunitx_number_format_complex_aux:n} +%\begin{macro}{\siunitx_number_format_complex:} +%\begin{macro}[aux]{\siunitx_number_format_complex_aux:n} % The real and complex parts of each number are reassembled, with % brackets if needed. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_complex: { - \prop_if_in:NnT \_l_siunitx_number_in_prop { complex-root } +\cs_new_protected_nopar:Npn \siunitx_number_format_complex: { + \prop_if_in:NnT \l_siunitx_number_in_prop { complex-root } { - \prop_if_in:NnTF \_l_siunitx_number_out_prop { complex } + \prop_if_in:NnTF \l_siunitx_number_out_prop { complex } { - \_siunitx_number_format_brackets:n { complex } - \_siunitx_number_format_complex_aux:n { complex } - \_siunitx_number_format_complex_aux:n { complex-result } - \prop_if_in:NnT \_l_siunitx_number_out_prop + \siunitx_number_format_brackets:n { complex } + \siunitx_number_format_complex_aux:n { complex } + \siunitx_number_format_complex_aux:n { complex-result } + \prop_if_in:NnT \l_siunitx_number_out_prop { complex-uncertainty } { - \_siunitx_number_format_complex_aux:n + \siunitx_number_format_complex_aux:n { complex-uncertainty } } } { - \tl_set:Nx \_l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl { - \exp_not:N \_siunitx_ensuremath:n - { \exp_not:V \_l_siunitx_output_complex_tl } + \exp_not:N \siunitx_ensuremath:n + { \exp_not:V \l_siunitx_output_complex_tl } } - \prop_put:NnV \_l_siunitx_number_out_prop { complex } - \_l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_out_prop { complex } + \l_siunitx_tmpa_tl } - \_siunitx_number_format_join_complex: + \siunitx_number_format_join_complex: } } -\cs_set_protected_nopar:Npn \_siunitx_number_format_complex_aux:n #1 { - \prop_get:NnN \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpa_tl - \bool_if:NTF \_l_siunitx_complex_after_bool +\cs_new_protected_nopar:Npn \siunitx_number_format_complex_aux:n #1 { + \prop_get:NnN \l_siunitx_number_out_prop {#1} \l_siunitx_tmpa_tl + \bool_if:NTF \l_siunitx_complex_after_bool { - \_siunitx_tl_put_right_math:NV \_l_siunitx_tmpa_tl - \_l_siunitx_output_complex_tl + \siunitx_tl_put_right_math:NV \l_siunitx_tmpa_tl + \l_siunitx_output_complex_tl } { - \_siunitx_tl_put_left_math:NV \_l_siunitx_tmpa_tl - \_l_siunitx_output_complex_tl + \siunitx_tl_put_left_math:NV \l_siunitx_tmpa_tl + \l_siunitx_output_complex_tl } - \prop_put:NnV \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_out_prop {#1} \l_siunitx_tmpa_tl } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_copy:n} -%\begin{macro}{\_siunitx_number_format_copy:nn} +%\begin{macro}{\siunitx_number_format_copy:n} +%\begin{macro}{\siunitx_number_format_copy:nn} % Just copy across. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_copy:n #1 { - \prop_get:NnN \_l_siunitx_number_in_prop {#1} \_l_siunitx_tmpa_tl - \prop_put:NnV \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_format_copy:n #1 { + \prop_get:NnN \l_siunitx_number_in_prop {#1} \l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_out_prop {#1} \l_siunitx_tmpa_tl } -\cs_set_protected_nopar:Npn \_siunitx_number_format_copy:nn #1#2 { - \prop_get:NnN \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpa_tl - \prop_put:NnV \_l_siunitx_number_out_prop {#2} \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_format_copy:nn #1#2 { + \prop_get:NnN \l_siunitx_number_out_prop {#1} \l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_out_prop {#2} \l_siunitx_tmpa_tl } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_final:} +%\begin{macro}{\siunitx_number_format_final:} % For numbers which do not contain an exponent, the mantissa result is % simply copied to the final output position. On the other hand, for % exponents there are further checks, which are handed off to dedicated @@ -7142,218 +7184,218 @@ This work consists of the file siunitx.dtx % part, which needs to be \enquote{copied} to the standard result % slot. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_final: { - \prop_if_in:NnT \_l_siunitx_number_out_prop { complex } +\cs_new_protected_nopar:Npn \siunitx_number_format_final: { + \prop_if_in:NnT \l_siunitx_number_out_prop { complex } { - \prop_if_in:NnF \_l_siunitx_number_out_prop { mantissa-result } + \prop_if_in:NnF \l_siunitx_number_out_prop { mantissa-result } { - \_siunitx_number_format_copy:nn { complex } + \siunitx_number_format_copy:nn { complex } { mantissa-result } } } - \prop_if_in:NnTF \_l_siunitx_number_out_prop { exponent } + \prop_if_in:NnTF \l_siunitx_number_out_prop { exponent } { - \_siunitx_number_format_final_exponent: - \prop_if_in:NnTF \_l_siunitx_number_out_prop { mantissa-result } - { \_siunitx_number_format_final_combined: } - { \_siunitx_number_format_final_exponent_only: } + \siunitx_number_format_final_exponent: + \prop_if_in:NnTF \l_siunitx_number_out_prop { mantissa-result } + { \siunitx_number_format_final_combined: } + { \siunitx_number_format_final_exponent_only: } } - { \_siunitx_number_format_copy:nn { mantissa-result } { result } } - \prop_if_in:NnT \_l_siunitx_number_out_prop { mantissa-bracket } + { \siunitx_number_format_copy:nn { mantissa-result } { result } } + \prop_if_in:NnT \l_siunitx_number_out_prop { mantissa-bracket } { - \prop_put:Nnn \_l_siunitx_number_out_prop { result-bracket } + \prop_put:Nnn \l_siunitx_number_out_prop { result-bracket } { true } - \prop_del:Nn \_l_siunitx_number_out_prop { mantissa-bracket } + \prop_del:Nn \l_siunitx_number_out_prop { mantissa-bracket } } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_number_format_final_combined:} +%\begin{macro}{\siunitx_number_format_final_combined:} % When there is both a mantissa and an exponent, the mantissa is % combined with the product sign before adding the exponent part on. % The combined result is then stored. The marker % \texttt{result-bracket-exponent} indicates that the number needs % brackets due to the exponent part, but not in other cases. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_final_combined: { - \_siunitx_number_format_brackets:n { mantissa } - \prop_get:NnN \_l_siunitx_number_out_prop { mantissa-result } - \_l_siunitx_tmpa_tl - \tl_set_eq:NN \_l_siunitx_tmpb_tl \_l_siunitx_exponent_product_tl - \bool_if:NT \_l_siunitx_tight_bool +\cs_new_protected_nopar:Npn \siunitx_number_format_final_combined: { + \siunitx_number_format_brackets:n { mantissa } + \prop_get:NnN \l_siunitx_number_out_prop { mantissa-result } + \l_siunitx_tmpa_tl + \tl_set_eq:NN \l_siunitx_tmpb_tl \l_siunitx_exponent_product_tl + \bool_if:NT \l_siunitx_tight_bool { - \tl_set:Nx \_l_siunitx_tmpb_tl - { { \exp_not:V \_l_siunitx_tmpb_tl } } - } - \_siunitx_tl_put_right_math:NV \_l_siunitx_tmpa_tl - \_l_siunitx_tmpb_tl - \prop_get:NnN \_l_siunitx_number_out_prop { exponent-result } - \_l_siunitx_tmpb_tl - \tl_put_right:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl - \prop_put:NnV \_l_siunitx_number_out_prop { result } - \_l_siunitx_tmpa_tl - \prop_put:Nnn \_l_siunitx_number_out_prop + \tl_set:Nx \l_siunitx_tmpb_tl + { { \exp_not:V \l_siunitx_tmpb_tl } } + } + \siunitx_tl_put_right_math:NV \l_siunitx_tmpa_tl + \l_siunitx_tmpb_tl + \prop_get:NnN \l_siunitx_number_out_prop { exponent-result } + \l_siunitx_tmpb_tl + \tl_put_right:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl + \prop_put:NnV \l_siunitx_number_out_prop { result } + \l_siunitx_tmpa_tl + \prop_put:Nnn \l_siunitx_number_out_prop { result-bracket-exponent } { true } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_number_format_final_exponent:} +%\begin{macro}{\siunitx_number_format_final_exponent:} % When there is an exponent, the base always needs to be added to the % front of the number itself. The number must be superscripted, of % course. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_final_exponent: { - \prop_get:NnN \_l_siunitx_number_out_prop { exponent } - \_l_siunitx_tmpa_tl - \tl_set:Nx \_l_siunitx_tmpa_tl - { ^ { \exp_not:V \_l_siunitx_tmpa_tl } } - \tl_put_left:NV \_l_siunitx_tmpa_tl \_l_siunitx_exponent_base_tl - \prop_put:NnV \_l_siunitx_number_out_prop { exponent-result } - \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_format_final_exponent: { + \prop_get:NnN \l_siunitx_number_out_prop { exponent } + \l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl + { ^ { \exp_not:V \l_siunitx_tmpa_tl } } + \tl_put_left:NV \l_siunitx_tmpa_tl \l_siunitx_exponent_base_tl + \prop_put:NnV \l_siunitx_number_out_prop { exponent-result } + \l_siunitx_tmpa_tl } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_number_format_final_exponent_only:} +%\begin{macro}{\siunitx_number_format_final_exponent_only:} % When there is only an exponent, a check must be made for a % sign in the mantissa part. If there is one, it is copied across. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_number_format_final_exponent_only: { - \prop_get:NnN \_l_siunitx_number_in_prop { mantissa-sign } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn + \siunitx_number_format_final_exponent_only: { + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-sign } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \bool_if:NT \_l_siunitx_tight_bool + \bool_if:NT \l_siunitx_tight_bool { - \tl_set:Nx \_l_siunitx_tmpa_tl - { { \exp_not:V \_l_siunitx_tmpa_tl } } + \tl_set:Nx \l_siunitx_tmpa_tl + { { \exp_not:V \l_siunitx_tmpa_tl } } } - \prop_get:NnN \_l_siunitx_number_out_prop { exponent-result } - \_l_siunitx_tmpb_tl - \_siunitx_tl_put_left_math:NV \_l_siunitx_tmpb_tl - \_l_siunitx_tmpa_tl - \prop_put:NnV \_l_siunitx_number_out_prop { exponent-result } - \_l_siunitx_tmpb_tl + \prop_get:NnN \l_siunitx_number_out_prop { exponent-result } + \l_siunitx_tmpb_tl + \siunitx_tl_put_left_math:NV \l_siunitx_tmpb_tl + \l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_out_prop { exponent-result } + \l_siunitx_tmpb_tl } - \_siunitx_number_format_copy:nn { exponent-result } { result } + \siunitx_number_format_copy:nn { exponent-result } { result } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_group:n} -%\begin{macro}[aux]{\_siunitx_number_format_group_aux:nn} +%\begin{macro}{\siunitx_number_format_group:n} +%\begin{macro}[aux]{\siunitx_number_format_group_aux:nn} % Grouping digits only happens if there are no symbols in the input, and % of course if grouping has been requested. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_group:n #1 { - \_siunitx_number_format_group_aux:nn {#1} { integer } - \_siunitx_number_format_group_aux:nn {#1} { decimal } - \prop_if_in:NnTF \_l_siunitx_number_out_prop { #1 -integer } - { \_siunitx_number_format_copy:nn { #1 -integer } {#1} } - { \tl_clear:N \_l_siunitx_tmpa_tl } - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -decimal-marker } - \_l_siunitx_tmpb_tl - \quark_if_no_value:NF \_l_siunitx_tmpb_tl - { - \bool_if:NTF \_l_siunitx_output_decimal_copy_bool - { \tl_set:Nx \_l_siunitx_tmpb_tl { { \_l_siunitx_tmpb_tl } } } +\cs_new_protected_nopar:Npn \siunitx_number_format_group:n #1 { + \siunitx_number_format_group_aux:nn {#1} { integer } + \siunitx_number_format_group_aux:nn {#1} { decimal } + \prop_if_in:NnTF \l_siunitx_number_out_prop { #1 -integer } + { \siunitx_number_format_copy:nn { #1 -integer } {#1} } + { \tl_clear:N \l_siunitx_tmpa_tl } + \prop_get:NnN \l_siunitx_number_in_prop { #1 -decimal-marker } + \l_siunitx_tmpb_tl + \quark_if_no_value:NF \l_siunitx_tmpb_tl + { + \bool_if:NTF \l_siunitx_output_decimal_copy_bool + { \tl_set:Nx \l_siunitx_tmpb_tl { { \l_siunitx_tmpb_tl } } } { - \tl_set_eq:NN \_l_siunitx_tmpb_tl - \_l_siunitx_output_decimal_tl + \tl_set_eq:NN \l_siunitx_tmpb_tl + \l_siunitx_output_decimal_tl } - \tl_set:Nx \_l_siunitx_tmpb_tl + \tl_set:Nx \l_siunitx_tmpb_tl { - \exp_not:N \_siunitx_ensuremath:n - { \exp_not:V \_l_siunitx_tmpb_tl } + \exp_not:N \siunitx_ensuremath:n + { \exp_not:V \l_siunitx_tmpb_tl } } - \tl_put_right:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl - \prop_put:NnV \_l_siunitx_number_out_prop { #1 -decimal-marker } - \_l_siunitx_tmpb_tl - \prop_get:NnN \_l_siunitx_number_out_prop { #1 -decimal } - \_l_siunitx_tmpb_tl - \quark_if_no_value:NT \_l_siunitx_tmpb_tl - { \tl_clear:N \_l_siunitx_tmpb_tl } - \tl_put_right:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl - \prop_put:NnV \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpa_tl - } -} -\cs_set_protected_nopar:Npn \_siunitx_number_format_group_aux:nn #1#2 { - \prop_if_in:NnT \_l_siunitx_number_in_prop { #1 - #2 } - { - \prop_if_in:NnTF \_l_siunitx_number_in_prop { symbolic } - { \_siunitx_number_format_copy:n { #1 - #2 } } + \tl_put_right:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl + \prop_put:NnV \l_siunitx_number_out_prop { #1 -decimal-marker } + \l_siunitx_tmpb_tl + \prop_get:NnN \l_siunitx_number_out_prop { #1 -decimal } + \l_siunitx_tmpb_tl + \quark_if_no_value:NT \l_siunitx_tmpb_tl + { \tl_clear:N \l_siunitx_tmpb_tl } + \tl_put_right:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl + \prop_put:NnV \l_siunitx_number_out_prop {#1} \l_siunitx_tmpa_tl + } +} +\cs_new_protected_nopar:Npn \siunitx_number_format_group_aux:nn #1#2 { + \prop_if_in:NnT \l_siunitx_number_in_prop { #1 - #2 } + { + \prop_if_in:NnTF \l_siunitx_number_in_prop { symbolic } + { \siunitx_number_format_copy:n { #1 - #2 } } { - \bool_if:cTF { _l_siunitx_group_ #2 _bool } - { \_siunitx_number_format_group_four:nn {#1} {#2} } - { \_siunitx_number_format_copy:n { #1 - #2 } } + \bool_if:cTF { l_siunitx_group_ #2 _bool } + { \siunitx_number_format_group_four:nn {#1} {#2} } + { \siunitx_number_format_copy:n { #1 - #2 } } } } } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_format_group_four:nn} -%\begin{macro}[aux]{\_siunitx_number_format_group_four_aux:NNNNNNw} -%\begin{macro}[aux]{\_siunitx_number_format_group_four_aux:nn} +%\begin{macro}{\siunitx_number_format_group_four:nn} +%\begin{macro}[aux]{\siunitx_number_format_group_four_aux:NNNNNNw} +%\begin{macro}[aux]{\siunitx_number_format_group_four_aux:nn} % The idea here is that grouping is only needed for items with at % least four tokens in them, and perhaps five if the grouping of % four-digit numbers is turned off. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_group_four:nn #1#2 { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 - #2 } - \_l_siunitx_tmpa_tl - \bool_if:NTF \_l_siunitx_group_four_bool - { \_siunitx_number_format_group_four_aux:nn {#1} {#2} } +\cs_new_protected_nopar:Npn \siunitx_number_format_group_four:nn #1#2 { + \prop_get:NnN \l_siunitx_number_in_prop { #1 - #2 } + \l_siunitx_tmpa_tl + \bool_if:NTF \l_siunitx_group_four_bool + { \siunitx_number_format_group_four_aux:nn {#1} {#2} } { - \exp_after:wN \_siunitx_number_format_group_four_aux:NNNNNNw - \_l_siunitx_tmpa_tl \q_no_value \q_no_value \q_no_value + \exp_after:wN \siunitx_number_format_group_four_aux:NNNNNNw + \l_siunitx_tmpa_tl \q_no_value \q_no_value \q_no_value \q_no_value \q_no_value \q_nil - { \_siunitx_number_format_copy:n {#1 - #2} } - { \_siunitx_number_format_group_four_aux:nn {#1} {#2} } + { \siunitx_number_format_copy:n {#1 - #2} } + { \siunitx_number_format_group_four_aux:nn {#1} {#2} } } } -\cs_set_protected:Npn \_siunitx_number_format_group_four_aux:NNNNNNw +\cs_new_protected:Npn \siunitx_number_format_group_four_aux:NNNNNNw #1#2#3#4#5#6 \q_nil { \quark_if_no_value:NTF #5 } -\cs_set_protected_nopar:Npn \_siunitx_number_format_group_four_aux:nn +\cs_new_protected_nopar:Npn \siunitx_number_format_group_four_aux:nn #1#2 { - \tl_clear:N \_l_siunitx_tmpb_tl - \use:c { _siunitx_number_format_group_ #2 : } - \prop_put:NnV \_l_siunitx_number_out_prop { #1 - #2 } - \_l_siunitx_tmpb_tl + \tl_clear:N \l_siunitx_tmpb_tl + \use:c { siunitx_number_format_group_ #2 : } + \prop_put:NnV \l_siunitx_number_out_prop { #1 - #2 } + \l_siunitx_tmpb_tl } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_format_group_decimal:} -%\begin{macro}[aux]{\_siunitx_number_format_group_decimal_aux:} +%\begin{macro}{\siunitx_number_format_group_decimal:} +%\begin{macro}[aux]{\siunitx_number_format_group_decimal_aux:} % Using the \enquote{keep everything on the stack} approach, relatively % simple recursion is needed. This trick is taken more or less directly % from \pkg{numprint}. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_group_decimal: { - \tl_if_empty:NF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_format_group_decimal: { + \tl_if_empty:NF \l_siunitx_tmpa_tl { - \exp_after:wN \_siunitx_number_format_group_decimal_aux:NNNN - \_l_siunitx_tmpa_tl { } { } { } + \exp_after:wN \siunitx_number_format_group_decimal_aux:NNNN + \l_siunitx_tmpa_tl { } { } { } } } -\cs_set_protected:Npn \_siunitx_number_format_group_decimal_aux:NNNN +\cs_new_protected:Npn \siunitx_number_format_group_decimal_aux:NNNN #1#2#3#4 { \tl_if_empty:nTF {#2} - { \tl_put_right:Nn \_l_siunitx_tmpb_tl {#1} } + { \tl_put_right:Nn \l_siunitx_tmpb_tl {#1} } { \tl_if_empty:nTF {#3} - { \tl_put_right:Nn \_l_siunitx_tmpb_tl { #1 #2 } } + { \tl_put_right:Nn \l_siunitx_tmpb_tl { #1 #2 } } { - \tl_put_right:Nn \_l_siunitx_tmpb_tl { #1 #2 #3 } + \tl_put_right:Nn \l_siunitx_tmpb_tl { #1 #2 #3 } \tl_if_empty:nF {#4} { - \_siunitx_tl_put_right_math:NV \_l_siunitx_tmpb_tl - \_l_siunitx_group_sep_tl - \_siunitx_number_format_group_decimal_aux:NNNN #4 + \siunitx_tl_put_right_math:NV \l_siunitx_tmpb_tl + \l_siunitx_group_sep_tl + \siunitx_number_format_group_decimal_aux:NNNN #4 } } } @@ -7361,57 +7403,57 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_number_format_group_integer:} -%\begin{macro}[aux]{\_siunitx_number_format_group_integer_setup:n} -%\begin{macro}[aux]{\_siunitx_number_format_group_integer_setup:V} -%\begin{macro}[aux]{\_siunitx_number_format_group_integer_setup_aux:NNNN} -%\begin{macro}[aux]{\_siunitx_number_format_group_integer_aux:NNNN} +%\begin{macro}{\siunitx_number_format_group_integer:} +%\begin{macro}[aux]{\siunitx_number_format_group_integer_setup:n} +%\begin{macro}[aux]{\siunitx_number_format_group_integer_setup:V} +%\begin{macro}[aux]{\siunitx_number_format_group_integer_setup_aux:NNNN} +%\begin{macro}[aux]{\siunitx_number_format_group_integer_aux:NNNN} % By keeping everything on the stack, recursion can occur quite % efficiently here. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_group_integer: { - \tl_if_empty:NF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_format_group_integer: { + \tl_if_empty:NF \l_siunitx_tmpa_tl { - \_siunitx_number_format_group_integer_setup:V \_l_siunitx_tmpa_tl + \siunitx_number_format_group_integer_setup:V \l_siunitx_tmpa_tl } } -\cs_set_protected:Npn \_siunitx_number_format_group_integer_setup:n #1 { - \_siunitx_number_format_group_integer_setup_aux:NNNN +\cs_new_protected:Npn \siunitx_number_format_group_integer_setup:n #1 { + \siunitx_number_format_group_integer_setup_aux:NNNN { } #1 { } { } { } } -\cs_generate_variant:Nn \_siunitx_number_format_group_integer_setup:n +\cs_generate_variant:Nn \siunitx_number_format_group_integer_setup:n { V } -\cs_set_protected:Npn - \_siunitx_number_format_group_integer_setup_aux:NNNN #1#2#3#4 { +\cs_new_protected:Npn + \siunitx_number_format_group_integer_setup_aux:NNNN #1#2#3#4 { \tl_if_empty:nTF {#2} - { \_siunitx_number_format_group_integer_aux:NNNN #1 \q_nil } + { \siunitx_number_format_group_integer_aux:NNNN #1 \q_nil } { \tl_if_empty:nTF {#3} { - \_siunitx_number_format_group_integer_aux:NNNN { } { } #1#2 + \siunitx_number_format_group_integer_aux:NNNN { } { } #1#2 \q_nil } { \tl_if_empty:nTF {#4} { - \_siunitx_number_format_group_integer_aux:NNNN { } #1#2#3 + \siunitx_number_format_group_integer_aux:NNNN { } #1#2#3 \q_nil } { - \_siunitx_number_format_group_integer_setup_aux:NNNN + \siunitx_number_format_group_integer_setup_aux:NNNN {#1#2#3#4} } } } } -\cs_set_protected:Npn - \_siunitx_number_format_group_integer_aux:NNNN #1#2#3#4 { - \tl_put_right:Nn \_l_siunitx_tmpb_tl {#1#2#3} +\cs_new_protected:Npn + \siunitx_number_format_group_integer_aux:NNNN #1#2#3#4 { + \tl_put_right:Nn \l_siunitx_tmpb_tl {#1#2#3} \quark_if_nil:nF {#4} { - \_siunitx_tl_put_right_math:NV \_l_siunitx_tmpb_tl - \_l_siunitx_group_sep_tl - \_siunitx_number_format_group_integer_aux:NNNN #4 + \siunitx_tl_put_right_math:NV \l_siunitx_tmpb_tl + \l_siunitx_group_sep_tl + \siunitx_number_format_group_integer_aux:NNNN #4 } } % \end{macrocode} @@ -7421,71 +7463,71 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_join_complex:} +%\begin{macro}{\siunitx_number_format_join_complex:} % For adding the complex part to the main part of a number. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_join_complex: { - \_siunitx_number_format_sign_complex: - \prop_if_in:NnT \_l_siunitx_number_out_prop { mantissa } +\cs_new_protected_nopar:Npn \siunitx_number_format_join_complex: { + \siunitx_number_format_sign_complex: + \prop_if_in:NnT \l_siunitx_number_out_prop { mantissa } { - \_siunitx_number_format_brackets:n { mantissa } - \prop_get:NnN \_l_siunitx_number_out_prop { mantissa-result } - \_l_siunitx_tmpa_tl - \prop_get:NnN \_l_siunitx_number_out_prop { complex-result } - \_l_siunitx_tmpb_tl - \quark_if_no_value:NT \_l_siunitx_tmpb_tl + \siunitx_number_format_brackets:n { mantissa } + \prop_get:NnN \l_siunitx_number_out_prop { mantissa-result } + \l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_out_prop { complex-result } + \l_siunitx_tmpb_tl + \quark_if_no_value:NT \l_siunitx_tmpb_tl { - \prop_get:NnN \_l_siunitx_number_out_prop { complex } - \_l_siunitx_tmpb_tl + \prop_get:NnN \l_siunitx_number_out_prop { complex } + \l_siunitx_tmpb_tl } - \tl_put_right:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl - \prop_put:NnV \_l_siunitx_number_out_prop { mantissa-result } - \_l_siunitx_tmpa_tl - \prop_put:Nnn \_l_siunitx_number_out_prop { mantissa-bracket } + \tl_put_right:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl + \prop_put:NnV \l_siunitx_number_out_prop { mantissa-result } + \l_siunitx_tmpa_tl + \prop_put:Nnn \l_siunitx_number_out_prop { mantissa-bracket } { true } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_join_uncert:} -%\begin{macro}{\_siunitx_number_format_join_uncert:n} -%\begin{macro}[aux]{\_siunitx_number_format_join_uncert_pm:} +%\begin{macro}{\siunitx_number_format_join_uncert:} +%\begin{macro}{\siunitx_number_format_join_uncert:n} +%\begin{macro}[aux]{\siunitx_number_format_join_uncert_pm:} % For adding separated uncertainties to the main part of a number. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_join_uncert: { - \_siunitx_number_format_join_uncert:n { mantissa } - \_siunitx_number_format_join_uncert:n { complex } +\cs_new_protected_nopar:Npn \siunitx_number_format_join_uncert: { + \siunitx_number_format_join_uncert:n { mantissa } + \siunitx_number_format_join_uncert:n { complex } } -\cs_set_protected_nopar:Npn \_siunitx_number_format_join_uncert:n #1 { - \prop_get:NnN \_l_siunitx_number_out_prop {#1} - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_number_format_join_uncert:n #1 { + \prop_get:NnN \l_siunitx_number_out_prop {#1} + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \prop_get:NnN \_l_siunitx_number_out_prop { #1 -uncertainty } - \_l_siunitx_tmpb_tl - \quark_if_no_value:NTF \_l_siunitx_tmpb_tl - { \_siunitx_number_format_copy:nn {#1} { #1 -result } } + \prop_get:NnN \l_siunitx_number_out_prop { #1 -uncertainty } + \l_siunitx_tmpb_tl + \quark_if_no_value:NTF \l_siunitx_tmpb_tl + { \siunitx_number_format_copy:nn {#1} { #1 -result } } { - \bool_if:NT \_l_siunitx_uncert_sep_bool - { \_siunitx_number_format_join_uncert_pm: } - \tl_put_right:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl - \prop_put:NnV \_l_siunitx_number_out_prop { #1 -result } - \_l_siunitx_tmpa_tl - \prop_put:Nnn \_l_siunitx_number_out_prop { #1 -bracket } + \bool_if:NT \l_siunitx_uncert_sep_bool + { \siunitx_number_format_join_uncert_pm: } + \tl_put_right:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl + \prop_put:NnV \l_siunitx_number_out_prop { #1 -result } + \l_siunitx_tmpa_tl + \prop_put:Nnn \l_siunitx_number_out_prop { #1 -bracket } { true } } } } -\cs_set_protected_nopar:Npn \_siunitx_number_format_join_uncert_pm: { - \bool_if:NTF \_l_siunitx_tight_bool +\cs_new_protected_nopar:Npn \siunitx_number_format_join_uncert_pm: { + \bool_if:NTF \l_siunitx_tight_bool { - \tl_put_left:Nn \_l_siunitx_tmpb_tl - { \_siunitx_ensuremath:n { { \pm } } } + \tl_put_left:Nn \l_siunitx_tmpb_tl + { \siunitx_ensuremath:n { { \pm } } } } { - \tl_put_left:Nn \_l_siunitx_tmpb_tl - { \_siunitx_ensuremath:n { { } \pm { } } } + \tl_put_left:Nn \l_siunitx_tmpb_tl + { \siunitx_ensuremath:n { { } \pm { } } } } } % \end{macrocode} @@ -7493,104 +7535,104 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_reassemble:} +%\begin{macro}{\siunitx_number_format_reassemble:} % The integer, decimal and any non-separated uncertainty parts are % put back together. This gives a \enquote{minimal} unit which cannot % need any brackets or repeated units (if applicable). If the % uncertainty is separate, it is stored at this stage pending later % re-attachment. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_reassemble: { - \prop_if_in:NnT \_l_siunitx_number_in_prop { mantissa } +\cs_new_protected_nopar:Npn \siunitx_number_format_reassemble: { + \prop_if_in:NnT \l_siunitx_number_in_prop { mantissa } { - \_siunitx_number_format_group:n { mantissa } - \_siunitx_number_format_uncertainty:n { mantissa } + \siunitx_number_format_group:n { mantissa } + \siunitx_number_format_uncertainty:n { mantissa } } - \prop_if_in:NnT \_l_siunitx_number_in_prop { complex } + \prop_if_in:NnT \l_siunitx_number_in_prop { complex } { - \_siunitx_number_format_group:n { complex } - \_siunitx_number_format_uncertainty:n { complex } + \siunitx_number_format_group:n { complex } + \siunitx_number_format_uncertainty:n { complex } } - \prop_if_in:NnT \_l_siunitx_number_in_prop { exponent } - { \_siunitx_number_format_group:n { exponent } } + \prop_if_in:NnT \l_siunitx_number_in_prop { exponent } + { \siunitx_number_format_group:n { exponent } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_sign:n} -%\begin{macro}{\_siunitx_number_format_sign_complex:} -%\begin{macro}[aux]{\_siunitx_number_format_sign_complex:n} +%\begin{macro}{\siunitx_number_format_sign:n} +%\begin{macro}{\siunitx_number_format_sign_complex:} +%\begin{macro}[aux]{\siunitx_number_format_sign_complex:n} % Some simple sign manipulation: for tight signs, a little shuffling. % In the complex number case, there is a need for a correction to get % the right formatting in text mode. For speed reasons, this is done in % a separate function. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_sign:n #1 { - \prop_if_in:NnT \_l_siunitx_number_out_prop {#1} +\cs_new_protected_nopar:Npn \siunitx_number_format_sign:n #1 { + \prop_if_in:NnT \l_siunitx_number_out_prop {#1} { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -sign } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_in_prop { #1 -sign } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \bool_if:NT \_l_siunitx_tight_bool + \bool_if:NT \l_siunitx_tight_bool { - \tl_set:Nx \_l_siunitx_tmpa_tl - { { \exp_not:V \_l_siunitx_tmpa_tl } } + \tl_set:Nx \l_siunitx_tmpa_tl + { { \exp_not:V \l_siunitx_tmpa_tl } } } - \tl_clear:N \_l_siunitx_tmpb_tl - \_siunitx_tl_put_left_math:NV \_l_siunitx_tmpb_tl - \_l_siunitx_tmpa_tl - \prop_put:NnV \_l_siunitx_number_out_prop { #1 -sign } - \_l_siunitx_tmpb_tl - \prop_get:NnN \_l_siunitx_number_out_prop {#1} - \_l_siunitx_tmpa_tl - \tl_put_left:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl - \prop_put:NnV \_l_siunitx_number_out_prop {#1} - \_l_siunitx_tmpa_tl - \prop_get:NnN \_l_siunitx_number_out_prop { #1 -result } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \tl_clear:N \l_siunitx_tmpb_tl + \siunitx_tl_put_left_math:NV \l_siunitx_tmpb_tl + \l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_out_prop { #1 -sign } + \l_siunitx_tmpb_tl + \prop_get:NnN \l_siunitx_number_out_prop {#1} + \l_siunitx_tmpa_tl + \tl_put_left:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl + \prop_put:NnV \l_siunitx_number_out_prop {#1} + \l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_out_prop { #1 -result } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \tl_put_left:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl - \prop_put:NnV \_l_siunitx_number_out_prop { #1 -result } - \_l_siunitx_tmpa_tl + \tl_put_left:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl + \prop_put:NnV \l_siunitx_number_out_prop { #1 -result } + \l_siunitx_tmpa_tl } } } } -\cs_set_protected_nopar:Npn \_siunitx_number_format_sign_complex: { - \_siunitx_number_format_sign_complex:n { complex } - \_siunitx_number_format_sign_complex:n { complex-result } +\cs_new_protected_nopar:Npn \siunitx_number_format_sign_complex: { + \siunitx_number_format_sign_complex:n { complex } + \siunitx_number_format_sign_complex:n { complex-result } } -\cs_set_protected_nopar:Npn \_siunitx_number_format_sign_complex:n #1 { - \prop_if_in:NnT \_l_siunitx_number_out_prop {#1} +\cs_new_protected_nopar:Npn \siunitx_number_format_sign_complex:n #1 { + \prop_if_in:NnT \l_siunitx_number_out_prop {#1} { - \prop_get:NnN \_l_siunitx_number_in_prop { complex-sign } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_in_prop { complex-sign } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \bool_if:NTF \_l_siunitx_tight_bool + \bool_if:NTF \l_siunitx_tight_bool { - \tl_set:Nx \_l_siunitx_tmpa_tl - { { \exp_not:V \_l_siunitx_tmpa_tl } } + \tl_set:Nx \l_siunitx_tmpa_tl + { { \exp_not:V \l_siunitx_tmpa_tl } } } { - \prop_if_in:NnT \_l_siunitx_number_out_prop { mantissa } + \prop_if_in:NnT \l_siunitx_number_out_prop { mantissa } { - \tl_set:Nx \_l_siunitx_tmpa_tl - { { } \exp_not:V \_l_siunitx_tmpa_tl { } } + \tl_set:Nx \l_siunitx_tmpa_tl + { { } \exp_not:V \l_siunitx_tmpa_tl { } } } } - \tl_clear:N \_l_siunitx_tmpb_tl - \_siunitx_tl_put_left_math:NV \_l_siunitx_tmpb_tl - \_l_siunitx_tmpa_tl - \prop_put:NnV \_l_siunitx_number_out_prop { complex-sign } - \_l_siunitx_tmpb_tl - \prop_get:NnN \_l_siunitx_number_out_prop {#1} - \_l_siunitx_tmpa_tl - \tl_put_left:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl - \prop_put:NnV \_l_siunitx_number_out_prop {#1} - \_l_siunitx_tmpa_tl + \tl_clear:N \l_siunitx_tmpb_tl + \siunitx_tl_put_left_math:NV \l_siunitx_tmpb_tl + \l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_out_prop { complex-sign } + \l_siunitx_tmpb_tl + \prop_get:NnN \l_siunitx_number_out_prop {#1} + \l_siunitx_tmpa_tl + \tl_put_left:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl + \prop_put:NnV \l_siunitx_number_out_prop {#1} + \l_siunitx_tmpa_tl } } } @@ -7599,51 +7641,51 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_format_uncertainty:n} -%\begin{macro}{\_siunitx_number_format_uncertainty_joined:n} -%\begin{macro}{\_siunitx_number_format_uncertainty_sep:n} +%\begin{macro}{\siunitx_number_format_uncertainty:n} +%\begin{macro}{\siunitx_number_format_uncertainty_joined:n} +%\begin{macro}{\siunitx_number_format_uncertainty_sep:n} % Uncertainty output varies depending on whether there is a need to % separate the error form the number in the output. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_format_uncertainty:n #1 { - \prop_if_in:NnTF \_l_siunitx_number_in_prop { #1 -uncertainty } - { - \bool_if:NTF \_l_siunitx_uncert_sep_bool - { \_siunitx_number_format_uncertainty_sep:n {#1} } - { \_siunitx_number_format_uncertainty_joined:n {#1} } - \_siunitx_number_format_join_uncert: - } - { \_siunitx_number_format_copy:nn {#1} { #1 -result } } -} -\cs_set_protected_nopar:Npn - \_siunitx_number_format_uncertainty_joined:n #1 { - \prop_get:NnN \_l_siunitx_number_in_prop { #1 -uncertainty } - \_l_siunitx_tmpa_tl - \prop_del:Nn \_l_siunitx_number_in_prop { #1 -uncertainty } - \_siunitx_tl_put_left_math:NV \_l_siunitx_tmpa_tl - \_l_siunitx_output_uncert_open_tl - \_siunitx_tl_put_left_math:NV \_l_siunitx_tmpa_tl - \_l_siunitx_uncert_sep_tl - \_siunitx_tl_put_right_math:NV \_l_siunitx_tmpa_tl - \_l_siunitx_output_uncert_close_tl - \prop_get:NnN \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpb_tl - \tl_put_right:NV \_l_siunitx_tmpb_tl \_l_siunitx_tmpa_tl - \prop_put:NnV \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpb_tl -} -\cs_set_protected_nopar:Npn - \_siunitx_number_format_uncertainty_sep:n #1 { - \prop_if_in:NnT \_l_siunitx_number_out_prop { #1 -integer } - { - \prop_if_in:NnF \_l_siunitx_number_out_prop +\cs_new_protected_nopar:Npn \siunitx_number_format_uncertainty:n #1 { + \prop_if_in:NnTF \l_siunitx_number_in_prop { #1 -uncertainty } + { + \bool_if:NTF \l_siunitx_uncert_sep_bool + { \siunitx_number_format_uncertainty_sep:n {#1} } + { \siunitx_number_format_uncertainty_joined:n {#1} } + \siunitx_number_format_join_uncert: + } + { \siunitx_number_format_copy:nn {#1} { #1 -result } } +} +\cs_new_protected_nopar:Npn + \siunitx_number_format_uncertainty_joined:n #1 { + \prop_get:NnN \l_siunitx_number_in_prop { #1 -uncertainty } + \l_siunitx_tmpa_tl + \prop_del:Nn \l_siunitx_number_in_prop { #1 -uncertainty } + \siunitx_tl_put_left_math:NV \l_siunitx_tmpa_tl + \l_siunitx_output_uncert_open_tl + \siunitx_tl_put_left_math:NV \l_siunitx_tmpa_tl + \l_siunitx_uncert_sep_tl + \siunitx_tl_put_right_math:NV \l_siunitx_tmpa_tl + \l_siunitx_output_uncert_close_tl + \prop_get:NnN \l_siunitx_number_out_prop {#1} \l_siunitx_tmpb_tl + \tl_put_right:NV \l_siunitx_tmpb_tl \l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_out_prop {#1} \l_siunitx_tmpb_tl +} +\cs_new_protected_nopar:Npn + \siunitx_number_format_uncertainty_sep:n #1 { + \prop_if_in:NnT \l_siunitx_number_out_prop { #1 -integer } + { + \prop_if_in:NnF \l_siunitx_number_out_prop { #1 -uncertainty-integer } { - \prop_put:Nnn \_l_siunitx_number_out_prop + \prop_put:Nnn \l_siunitx_number_out_prop { #1 -uncertainty-integer } { 0 } } } - \_siunitx_number_format_group:n { #1 -uncertainty } - \prop_put:NnV \_l_siunitx_number_out_prop { #1 -uncertainty } - \_l_siunitx_tmpa_tl + \siunitx_number_format_group:n { #1 -uncertainty } + \prop_put:NnV \l_siunitx_number_out_prop { #1 -uncertainty } + \l_siunitx_tmpa_tl } % \end{macrocode} %\end{macro} @@ -7654,60 +7696,60 @@ This work consists of the file siunitx.dtx % % The outer level of number processing for actually printing things. % -%\begin{macro}{\_l_siunitx_number_out_tl} -%\begin{macro}{\_l_siunitx_number_out_saved_tl} +%\begin{macro}{\l_siunitx_number_out_tl} +%\begin{macro}{\l_siunitx_number_out_saved_tl} % The final result, plus a version for loops. % \begin{macrocode} -\tl_new:N \_l_siunitx_number_out_tl -\tl_new:N \_l_siunitx_number_out_saved_tl +\tl_new:N \l_siunitx_number_out_tl +\tl_new:N \l_siunitx_number_out_saved_tl % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_fraction_tl} +%\begin{macro}{\l_siunitx_number_fraction_tl} % Fractions need to be build separately, so that there is no problem % with stack order. % \begin{macrocode} -\tl_new:N \_l_siunitx_number_fraction_tl +\tl_new:N \l_siunitx_number_fraction_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_compound_bool} +%\begin{macro}{\l_siunitx_number_compound_bool} % To help with brackets. % \begin{macrocode} -\bool_new:N \_l_siunitx_number_compound_bool +\bool_new:N \l_siunitx_number_compound_bool % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_quotient_mode_tl} +%\begin{macro}{\l_siunitx_quotient_mode_tl} % The action for quotients is stored as a token list variable. % \begin{macrocode} -\tl_new:N \_l_siunitx_quotient_mode_tl +\tl_new:N \l_siunitx_quotient_mode_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_fraction:nn} +%\begin{macro}{\siunitx_fraction:nn} % The function used for fractions should be stored here. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_fraction:nn { } +\cs_new_protected:Npn \siunitx_fraction:nn { } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_output_quotient_tl} +%\begin{macro}{\l_siunitx_output_quotient_tl} %\begin{macro}{\l_siunix_number_parse_bool} % Some options related to numbers at the output stage. % \begin{macrocode} \keys_define:nn { siunitx } { fraction-function .code:n = - { \cs_set_eq:NN \_siunitx_fraction:nn #1 }, - output-product .tl_set:N = \_l_siunitx_output_product_tl, - output-quotient .tl_set:N = \_l_siunitx_output_quotient_tl, - parse-numbers .bool_set:N = \_l_siunitx_number_parse_bool, + { \cs_set_eq:NN \siunitx_fraction:nn #1 }, + output-product .tl_set:N = \l_siunitx_output_product_tl, + output-quotient .tl_set:N = \l_siunitx_output_quotient_tl, + parse-numbers .bool_set:N = \l_siunitx_number_parse_bool, quotient-mode .choice:, quotient-mode / fraction .code:n = - { \tl_set:Nn \_l_siunitx_quotient_mode_tl { fraction } }, + { \tl_set:Nn \l_siunitx_quotient_mode_tl { fraction } }, quotient-mode / symbol .code:n = - { \tl_set:Nn \_l_siunitx_quotient_mode_tl { symbol } }, + { \tl_set:Nn \l_siunitx_quotient_mode_tl { symbol } }, } \keys_set:nn { siunitx } { fraction-function = \frac, @@ -7720,67 +7762,67 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_output:n} -%\begin{macro}{\_siunitx_number_output:V} +%\begin{macro}{\siunitx_number_output:n} +%\begin{macro}{\siunitx_number_output:V} % The number output system simply sets up for the combined number and % unit system. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_output:n #1 { - \tl_clear:N \_l_siunitx_unit_tl - \tl_clear:N \_l_siunitx_preunit_tl - \_siunitx_combined_output:n {#1} +\cs_new_protected:Npn \siunitx_number_output:n #1 { + \tl_clear:N \l_siunitx_unit_tl + \tl_clear:N \l_siunitx_preunit_tl + \siunitx_combined_output:n {#1} } -\cs_generate_variant:Nn \_siunitx_number_output:n { V } +\cs_generate_variant:Nn \siunitx_number_output:n { V } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_output_bracket:} +%\begin{macro}{\siunitx_number_output_bracket:} % Compound numbers may need brackets adding. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_bracket: { - \bool_if:NF \_l_siunitx_error_bool +\cs_new_protected_nopar:Npn \siunitx_number_output_bracket: { + \bool_if:NF \l_siunitx_error_bool { - \bool_if:NT \_l_siunitx_number_compound_bool - { \_siunitx_number_format_brackets:n { result } } + \bool_if:NT \l_siunitx_number_compound_bool + { \siunitx_number_format_brackets:n { result } } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_output_color:} +%\begin{macro}{\siunitx_number_output_color:} % If a colour needs to be set, it is recovered here and put into the % appropriate place. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_color: { - \prop_if_in:NnT \_l_siunitx_number_out_prop { color } +\cs_new_protected_nopar:Npn \siunitx_number_output_color: { + \prop_if_in:NnT \l_siunitx_number_out_prop { color } { - \prop_get:NnN \_l_siunitx_number_out_prop { color } - \_l_siunitx_number_color_tl + \prop_get:NnN \l_siunitx_number_out_prop { color } + \l_siunitx_number_color_tl } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_output_parse:n} -%\begin{macro}{\_siunitx_number_output_parse:V} -%\begin{macro}[aux]{\_siunitx_number_output_parse_aux:} +%\begin{macro}{\siunitx_number_output_parse:n} +%\begin{macro}{\siunitx_number_output_parse:V} +%\begin{macro}[aux]{\siunitx_number_output_parse_aux:} % The parsing system just has to check if there are multiple parts to % worry about. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_number_output_parse:n #1 { - \_siunitx_number_preprocess:n {#1} - \bool_if:NF \_l_siunitx_error_bool +\cs_new_protected:Npn \siunitx_number_output_parse:n #1 { + \siunitx_number_preprocess:n {#1} + \bool_if:NF \l_siunitx_error_bool { - \tl_if_empty:NTF \_l_siunitx_number_multi_tl - { \_siunitx_number_output_parse_aux: } + \tl_if_empty:NTF \l_siunitx_number_multi_tl + { \siunitx_number_output_parse_aux: } { \use:c - { _siunitx_number_output_ \_l_siunitx_number_multi_tl : } + { siunitx_number_output_ \l_siunitx_number_multi_tl : } } } } -\cs_generate_variant:Nn \_siunitx_number_output_parse:n { V } +\cs_generate_variant:Nn \siunitx_number_output_parse:n { V } % \end{macrocode} % There are a few additional tests for printing partwise, as this is % only needed if there are brackets to add and these are not due to @@ -7788,22 +7830,22 @@ This work consists of the file siunitx.dtx % the units to come at the end of the number, and there then have to % be brackets in the output if there are any separate parts. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_parse_aux: { - \_siunitx_number_in_parse:V \_l_siunitx_number_arg_tl - \bool_if:NF \_l_siunitx_error_bool - { - \_siunitx_number_process: - \prop_if_in:NnT \_l_siunitx_number_in_prop { exponent } - { \bool_set_true:N \_l_siunitx_brackets_bool } - \_siunitx_number_format: - \_siunitx_number_output_color: - \bool_if:NTF \_l_siunitx_brackets_bool - { \_siunitx_number_output_single: } +\cs_new_protected_nopar:Npn \siunitx_number_output_parse_aux: { + \siunitx_number_in_parse:V \l_siunitx_number_arg_tl + \bool_if:NF \l_siunitx_error_bool + { + \siunitx_number_process: + \prop_if_in:NnT \l_siunitx_number_in_prop { exponent } + { \bool_set_true:N \l_siunitx_brackets_bool } + \siunitx_number_format: + \siunitx_number_output_color: + \bool_if:NTF \l_siunitx_brackets_bool + { \siunitx_number_output_single: } { - \prop_if_in:NnTF \_l_siunitx_number_out_prop + \prop_if_in:NnTF \l_siunitx_number_out_prop { result-bracket } - { \_siunitx_number_output_parts: } - { \_siunitx_number_output_single: } + { \siunitx_number_output_parts: } + { \siunitx_number_output_single: } } } } @@ -7812,76 +7854,76 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_output_parts:} -%\begin{macro}[aux]{\_siunitx_number_output_parts_aux:} -%\begin{macro}[aux]{\_siunitx_number_output_parts_aux:n} -%\begin{macro}[aux]{\_siunitx_number_output_parts_print:n} +%\begin{macro}{\siunitx_number_output_parts:} +%\begin{macro}[aux]{\siunitx_number_output_parts_aux:} +%\begin{macro}[aux]{\siunitx_number_output_parts_aux:n} +%\begin{macro}[aux]{\siunitx_number_output_parts_print:n} % Printing numbers by parts is necessary when there are units to % repeat. That means doing things that have already been done by the % number formatter again. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_parts: { +\cs_new_protected_nopar:Npn \siunitx_number_output_parts: { \bool_if:nTF { - \tl_if_empty_p:N \_l_siunitx_pre_unit_tl && - \tl_if_empty_p:N \_l_siunitx_unit_tl + \tl_if_empty_p:N \l_siunitx_pre_unit_tl && + \tl_if_empty_p:N \l_siunitx_unit_tl } - { \_siunitx_number_output_single: } - { \_siunitx_number_output_parts_aux: } + { \siunitx_number_output_single: } + { \siunitx_number_output_parts_aux: } } -\cs_set_protected_nopar:Npn \_siunitx_number_output_parts_aux: { - \bool_if:NTF \_l_siunitx_multi_repeat_bool +\cs_new_protected_nopar:Npn \siunitx_number_output_parts_aux: { + \bool_if:NTF \l_siunitx_multi_repeat_bool { - \prop_if_in:NnT \_l_siunitx_number_out_prop { mantissa-result } + \prop_if_in:NnT \l_siunitx_number_out_prop { mantissa-result } { - \_siunitx_number_output_parts_aux:n { mantissa } - \_siunitx_number_output_parts_aux:n { complex } + \siunitx_number_output_parts_aux:n { mantissa } + \siunitx_number_output_parts_aux:n { complex } } - \prop_get:NnN \_l_siunitx_number_out_prop { exponent-result } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_out_prop { exponent-result } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \prop_if_in:NnT \_l_siunitx_number_out_prop { mantissa-result } + \prop_if_in:NnT \l_siunitx_number_out_prop { mantissa-result } { - \tl_set_eq:NN \_l_siunitx_tmpb_tl - \_l_siunitx_exponent_product_tl - \bool_if:NT \_l_siunitx_tight_bool + \tl_set_eq:NN \l_siunitx_tmpb_tl + \l_siunitx_exponent_product_tl + \bool_if:NT \l_siunitx_tight_bool { - \tl_set:Nx \_l_siunitx_tmpb_tl - { { \exp_not:V \_l_siunitx_tmpb_tl } } + \tl_set:Nx \l_siunitx_tmpb_tl + { { \exp_not:V \l_siunitx_tmpb_tl } } } - \_siunitx_tl_put_left_math:NV \_l_siunitx_tmpa_tl - \_l_siunitx_tmpb_tl - \prop_put:NnV \_l_siunitx_number_out_prop { exponent } - \_l_siunitx_tmpa_tl + \siunitx_tl_put_left_math:NV \l_siunitx_tmpa_tl + \l_siunitx_tmpb_tl + \prop_put:NnV \l_siunitx_number_out_prop { exponent } + \l_siunitx_tmpa_tl } - \_siunitx_number_output_parts_print:n { exponent } + \siunitx_number_output_parts_print:n { exponent } } } - { \_siunitx_number_output_single: } + { \siunitx_number_output_single: } } -\cs_set_protected_nopar:Npn \_siunitx_number_output_parts_aux:n #1 { - \prop_if_in:NnT \_l_siunitx_number_out_prop {#1} - { \_siunitx_number_output_parts_print:n {#1} } - \prop_if_in:NnT \_l_siunitx_number_out_prop { #1 -uncertainty } +\cs_new_protected_nopar:Npn \siunitx_number_output_parts_aux:n #1 { + \prop_if_in:NnT \l_siunitx_number_out_prop {#1} + { \siunitx_number_output_parts_print:n {#1} } + \prop_if_in:NnT \l_siunitx_number_out_prop { #1 -uncertainty } { - \bool_if:NTF \_l_siunitx_tight_bool + \bool_if:NTF \l_siunitx_tight_bool { - \_siunitx_print:nn { number } - { \_siunitx_ensuremath:n { { \pm } } } + \siunitx_print:nn { number } + { \siunitx_ensuremath:n { { \pm } } } } { - \_siunitx_print:nn { number } - { \_siunitx_ensuremath:n { { } \pm { } } } + \siunitx_print:nn { number } + { \siunitx_ensuremath:n { { } \pm { } } } } - \_siunitx_number_output_parts_print:n { #1 -uncertainty } + \siunitx_number_output_parts_print:n { #1 -uncertainty } } } -\cs_set_protected_nopar:Npn \_siunitx_number_output_parts_print:n #1 { - \_siunitx_unit_output_pre_print: - \prop_get:NnN \_l_siunitx_number_out_prop {#1} \_l_siunitx_tmpa_tl - \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl - \_siunitx_unit_output_print: +\cs_new_protected_nopar:Npn \siunitx_number_output_parts_print:n #1 { + \siunitx_unit_output_pre_print: + \prop_get:NnN \l_siunitx_number_out_prop {#1} \l_siunitx_tmpa_tl + \siunitx_print:nV { number } \l_siunitx_tmpa_tl + \siunitx_unit_output_print: } % \end{macrocode} %\end{macro} @@ -7889,177 +7931,177 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_output_product:} +%\begin{macro}{\siunitx_number_output_product:} % For products, there may need to be the addition of brackets if there % are units about. When not repeating units, some work has to be done to % print everything correctly. The extra group here is necessary % otherwise looping will delete the units entirely! % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_product: { - \bool_if:NTF \_l_siunitx_product_brackets_bool +\cs_new_protected_nopar:Npn \siunitx_number_output_product: { + \bool_if:NTF \l_siunitx_product_brackets_bool { \bool_if:nTF { - \tl_if_empty_p:N \_l_siunitx_pre_unit_tl && - \tl_if_empty_p:N \_l_siunitx_unit_tl + \tl_if_empty_p:N \l_siunitx_pre_unit_tl && + \tl_if_empty_p:N \l_siunitx_unit_tl } - { \_siunitx_number_output_product_aux: } - { \_siunitx_number_output_product_brackets: } + { \siunitx_number_output_product_aux: } + { \siunitx_number_output_product_brackets: } } { - \bool_if:NTF \_l_siunitx_product_repeat_bool - { \_siunitx_number_output_product_aux: } + \bool_if:NTF \l_siunitx_product_repeat_bool + { \siunitx_number_output_product_aux: } { - \_siunitx_unit_output_pre_print: - \tl_set_eq:NN \_l_siunitx_unit_saved_tl \_l_siunitx_unit_tl - \tl_clear:N \_l_siunitx_pre_unit_tl - \tl_clear:N \_l_siunitx_unit_tl + \siunitx_unit_output_pre_print: + \tl_set_eq:NN \l_siunitx_unit_saved_tl \l_siunitx_unit_tl + \tl_clear:N \l_siunitx_pre_unit_tl + \tl_clear:N \l_siunitx_unit_tl \group_begin: - \_siunitx_number_output_product_aux: + \siunitx_number_output_product_aux: \group_end: - \tl_set_eq:NN \_l_siunitx_unit_tl \_l_siunitx_unit_saved_tl - \_siunitx_unit_output_print: + \tl_set_eq:NN \l_siunitx_unit_tl \l_siunitx_unit_saved_tl + \siunitx_unit_output_print: } } } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_number_output_product_brackets:} +%\begin{macro}[aux]{\siunitx_number_output_product_brackets:} % When printing products that have to be bracketed, there is a need to % shuffle the units about a bit. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_product_brackets: { - \_siunitx_unit_output_pre_print: - \_siunitx_print:nn { number } - { \_siunitx_ensuremath:n { \_l_siunitx_bracket_open_tl } } +\cs_new_protected_nopar:Npn \siunitx_number_output_product_brackets: { + \siunitx_unit_output_pre_print: + \siunitx_print:nn { number } + { \siunitx_ensuremath:n { \l_siunitx_bracket_open_tl } } \nobreak - \tl_set_eq:NN \_l_siunitx_unit_saved_tl \_l_siunitx_unit_tl - \tl_clear:N \_l_siunitx_pre_unit_tl - \tl_clear:N \_l_siunitx_unit_tl - \_siunitx_number_output_product_aux: + \tl_set_eq:NN \l_siunitx_unit_saved_tl \l_siunitx_unit_tl + \tl_clear:N \l_siunitx_pre_unit_tl + \tl_clear:N \l_siunitx_unit_tl + \siunitx_number_output_product_aux: \nobreak - \tl_set_eq:NN \_l_siunitx_unit_tl \_l_siunitx_unit_saved_tl - \_siunitx_print:nn { number } - { \_siunitx_ensuremath:n { \_l_siunitx_bracket_close_tl } } - \_siunitx_unit_output_print: + \tl_set_eq:NN \l_siunitx_unit_tl \l_siunitx_unit_saved_tl + \siunitx_print:nn { number } + { \siunitx_ensuremath:n { \l_siunitx_bracket_close_tl } } + \siunitx_unit_output_print: } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_number_output_product_aux:} +%\begin{macro}[aux]{\siunitx_number_output_product_aux:} % Printing the products needs a looping function. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_product_aux: { - \bool_set_true:N \_l_siunitx_number_compound_bool - \_siunitx_number_preprocess:V \_l_siunitx_number_arg_tl - \bool_if:NF \_l_siunitx_error_bool +\cs_new_protected_nopar:Npn \siunitx_number_output_product_aux: { + \bool_set_true:N \l_siunitx_number_compound_bool + \siunitx_number_preprocess:V \l_siunitx_number_arg_tl + \bool_if:NF \l_siunitx_error_bool { - \tl_if_empty:NTF \_l_siunitx_number_multi_tl - { \_siunitx_number_output_parse_aux: } - { \_siunitx_number_output_quotient: } - \tl_if_empty:NF \_l_siunitx_number_next_tl + \tl_if_empty:NTF \l_siunitx_number_multi_tl + { \siunitx_number_output_parse_aux: } + { \siunitx_number_output_quotient: } + \tl_if_empty:NF \l_siunitx_number_next_tl { - \bool_if:NTF \_l_siunitx_tight_bool + \bool_if:NTF \l_siunitx_tight_bool { - \_siunitx_print:nn { number } + \siunitx_print:nn { number } { - \_siunitx_ensuremath:n - { \_l_siunitx_output_product_tl } + \siunitx_ensuremath:n + { \l_siunitx_output_product_tl } } } { - \_siunitx_print:nn { number } + \siunitx_print:nn { number } { - \_siunitx_ensuremath:n - { { } \_l_siunitx_output_product_tl { } } + \siunitx_ensuremath:n + { { } \l_siunitx_output_product_tl { } } } } - \_siunitx_number_output_parse:V \_l_siunitx_number_next_tl + \siunitx_number_output_parse:V \l_siunitx_number_next_tl } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_number_output_quotient:} +%\begin{macro}{\siunitx_number_output_quotient:} % For quotients, there are two options. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_quotient: { +\cs_new_protected_nopar:Npn \siunitx_number_output_quotient: { \use:c - { _siunitx_number_output_quotient_ \_l_siunitx_quotient_mode_tl : } + { siunitx_number_output_quotient_ \l_siunitx_quotient_mode_tl : } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_number_output_quotient_fraction:} +%\begin{macro}{\siunitx_number_output_quotient_fraction:} % For fraction output, there are quite a lot of braces to construct, % unfortunately. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_quotient_fraction: { - \bool_set_false:N \_l_siunitx_number_compound_bool - \_siunitx_number_output_quotient_aux_i: - \tl_set:Nx \_l_siunitx_number_out_tl - { { \exp_not:V \_l_siunitx_number_numerator_tl } } - \tl_set:Nx \_l_siunitx_tmpa_tl - { { \exp_not:V \_l_siunitx_number_denominator_tl } } - \tl_put_right:NV \_l_siunitx_number_out_tl \_l_siunitx_tmpa_tl - \tl_put_left:Nn \_l_siunitx_number_out_tl { \_siunitx_fraction:nn } - \tl_set:Nx \_l_siunitx_number_out_tl +\cs_new_protected_nopar:Npn \siunitx_number_output_quotient_fraction: { + \bool_set_false:N \l_siunitx_number_compound_bool + \siunitx_number_output_quotient_aux_i: + \tl_set:Nx \l_siunitx_number_out_tl + { { \exp_not:V \l_siunitx_number_numerator_tl } } + \tl_set:Nx \l_siunitx_tmpa_tl + { { \exp_not:V \l_siunitx_number_denominator_tl } } + \tl_put_right:NV \l_siunitx_number_out_tl \l_siunitx_tmpa_tl + \tl_put_left:Nn \l_siunitx_number_out_tl { \siunitx_fraction:nn } + \tl_set:Nx \l_siunitx_number_out_tl { \exp_not:N \ensuremath - { \exp_not:V \_l_siunitx_number_out_tl } + { \exp_not:V \l_siunitx_number_out_tl } } - \_siunitx_number_output_single_aux: + \siunitx_number_output_single_aux: } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_number_output_quotient_symbol:} +%\begin{macro}{\siunitx_number_output_quotient_symbol:} % If a symbol is used for the division, the build process is less % complex. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_quotient_symbol: { - \bool_set_true:N \_l_siunitx_number_compound_bool - \_siunitx_number_output_quotient_aux_i: - \tl_set_eq:NN \_l_siunitx_number_out_tl - \_l_siunitx_number_numerator_tl - \_siunitx_tl_put_right_math:NV \_l_siunitx_number_out_tl - \_l_siunitx_output_quotient_tl - \tl_put_right:NV \_l_siunitx_number_out_tl - \_l_siunitx_number_denominator_tl - \_siunitx_number_output_single_aux: +\cs_new_protected_nopar:Npn \siunitx_number_output_quotient_symbol: { + \bool_set_true:N \l_siunitx_number_compound_bool + \siunitx_number_output_quotient_aux_i: + \tl_set_eq:NN \l_siunitx_number_out_tl + \l_siunitx_number_numerator_tl + \siunitx_tl_put_right_math:NV \l_siunitx_number_out_tl + \l_siunitx_output_quotient_tl + \tl_put_right:NV \l_siunitx_number_out_tl + \l_siunitx_number_denominator_tl + \siunitx_number_output_single_aux: } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_number_output_quotient_aux_i:} -%\begin{macro}[aux]{\_siunitx_number_output_quotient_aux_ii:} +%\begin{macro}[aux]{\siunitx_number_output_quotient_aux_i:} +%\begin{macro}[aux]{\siunitx_number_output_quotient_aux_ii:} % The two parts of the number are parsed and formatted. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_quotient_aux_i: { - \_siunitx_number_in_parse:V \_l_siunitx_number_numerator_tl - \_siunitx_number_output_quotient_aux_ii: - \_siunitx_number_output_color: - \prop_get:NnN \_l_siunitx_number_out_prop { result } - \_l_siunitx_number_numerator_tl - \_siunitx_number_in_parse:V \_l_siunitx_number_denominator_tl - \_siunitx_number_output_quotient_aux_ii: - \prop_if_in:NnT \_l_siunitx_number_out_prop +\cs_new_protected_nopar:Npn \siunitx_number_output_quotient_aux_i: { + \siunitx_number_in_parse:V \l_siunitx_number_numerator_tl + \siunitx_number_output_quotient_aux_ii: + \siunitx_number_output_color: + \prop_get:NnN \l_siunitx_number_out_prop { result } + \l_siunitx_number_numerator_tl + \siunitx_number_in_parse:V \l_siunitx_number_denominator_tl + \siunitx_number_output_quotient_aux_ii: + \prop_if_in:NnT \l_siunitx_number_out_prop { result-bracket-exponent } { - \prop_put:Nnn \_l_siunitx_number_out_prop { result-bracket } + \prop_put:Nnn \l_siunitx_number_out_prop { result-bracket } { true } } - \_siunitx_number_output_bracket: - \prop_get:NnN \_l_siunitx_number_out_prop { result } - \_l_siunitx_number_denominator_tl + \siunitx_number_output_bracket: + \prop_get:NnN \l_siunitx_number_out_prop { result } + \l_siunitx_number_denominator_tl } -\cs_set_protected_nopar:Npn \_siunitx_number_output_quotient_aux_ii: { - \_siunitx_number_process: - \_siunitx_number_format: +\cs_new_protected_nopar:Npn \siunitx_number_output_quotient_aux_ii: { + \siunitx_number_process: + \siunitx_number_format: } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_number_output_single:} -%\begin{macro}[aux]{\_siunitx_number_output_single_aux:} +%\begin{macro}{\siunitx_number_output_single:} +%\begin{macro}[aux]{\siunitx_number_output_single_aux:} % Printing a number with no multiple parts is easy. There is a check for % any units, which if present may force the number to have brackets % added. there is then simply a short run to print the units and number. @@ -8067,25 +8109,25 @@ This work consists of the file siunitx.dtx % exponent: if there is, any other parts will already be bracketed and % mathematically there is no need for brackets at this point. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_number_output_single: { +\cs_new_protected_nopar:Npn \siunitx_number_output_single: { \bool_if:nF { - \tl_if_empty_p:N \_l_siunitx_pre_unit_tl && - \tl_if_empty_p:N \_l_siunitx_unit_tl + \tl_if_empty_p:N \l_siunitx_pre_unit_tl && + \tl_if_empty_p:N \l_siunitx_unit_tl } { - \prop_if_in:NnF \_l_siunitx_number_out_prop { exponent } - { \_siunitx_number_format_brackets:n { result } } + \prop_if_in:NnF \l_siunitx_number_out_prop { exponent } + { \siunitx_number_format_brackets:n { result } } } - \_siunitx_number_output_bracket: - \prop_get:NnN \_l_siunitx_number_out_prop { result } - \_l_siunitx_number_out_tl - \_siunitx_number_output_single_aux: + \siunitx_number_output_bracket: + \prop_get:NnN \l_siunitx_number_out_prop { result } + \l_siunitx_number_out_tl + \siunitx_number_output_single_aux: } -\cs_set_protected_nopar:Npn \_siunitx_number_output_single_aux: { - \_siunitx_unit_output_pre_print: - \_siunitx_print:nV { number } \_l_siunitx_number_out_tl - \_siunitx_unit_output_print: +\cs_new_protected_nopar:Npn \siunitx_number_output_single_aux: { + \siunitx_unit_output_pre_print: + \siunitx_print:nV { number } \l_siunitx_number_out_tl + \siunitx_unit_output_print: } % \end{macrocode} %\end{macro} @@ -8098,71 +8140,71 @@ This work consists of the file siunitx.dtx % possible input syntaxes, "\ang{1.23}" and "\ang{1;2;3}". Both need % to be handled correctly. % -%\begin{macro}{\_l_siunitx_angle_degree_space_bool} -%\begin{macro}{\_l_siunitx_angle_minute_space_bool} +%\begin{macro}{\l_siunitx_angle_degree_space_bool} +%\begin{macro}{\l_siunitx_angle_minute_space_bool} % The need for spaces between parts of an arc needs to be accommodated: % this is achieved by flagging up the need for such spaces using two % switches. % \begin{macrocode} -\bool_new:N \_l_siunitx_angle_degree_space_bool -\bool_new:N \_l_siunitx_angle_minute_space_bool +\bool_new:N \l_siunitx_angle_degree_space_bool +\bool_new:N \l_siunitx_angle_minute_space_bool % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_angle_marker_box} -%\begin{macro}{\_l_siunitx_angle_unit_box} -%\begin{macro}{\_l_siunitx_angle_marker_dim} -%\begin{macro}{\_l_siunitx_angle_unit_dim} +%\begin{macro}{\l_siunitx_angle_marker_box} +%\begin{macro}{\l_siunitx_angle_unit_box} +%\begin{macro}{\l_siunitx_angle_marker_dim} +%\begin{macro}{\l_siunitx_angle_unit_dim} % When creating astronomy-style angles, the decimal marker and angle % symbol have to be boxed up and measured. % \begin{macrocode} -\box_new:N \_l_siunitx_angle_marker_box -\box_new:N \_l_siunitx_angle_unit_box -\dim_new:N \_l_siunitx_angle_marker_dim -\dim_new:N \_l_siunitx_angle_unit_dim +\box_new:N \l_siunitx_angle_marker_box +\box_new:N \l_siunitx_angle_unit_box +\dim_new:N \l_siunitx_angle_marker_dim +\dim_new:N \l_siunitx_angle_unit_dim % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_angle_degree_prop} -%\begin{macro}{\_l_siunitx_angle_minute_prop} -%\begin{macro}{\_l_siunitx_angle_second_prop} +%\begin{macro}{\l_siunitx_angle_degree_prop} +%\begin{macro}{\l_siunitx_angle_minute_prop} +%\begin{macro}{\l_siunitx_angle_second_prop} % As there are potentially three numbers to parse, three properly lists % are made available to hold the results. This allows the code to be % generalised, with only the name of the storage area varying. % \begin{macrocode} -\prop_new:N \_l_siunitx_angle_degree_prop -\prop_new:N \_l_siunitx_angle_minute_prop -\prop_new:N \_l_siunitx_angle_second_prop +\prop_new:N \l_siunitx_angle_degree_prop +\prop_new:N \l_siunitx_angle_minute_prop +\prop_new:N \l_siunitx_angle_second_prop % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_angle_degree_zero_bool} -%\begin{macro}{\_l_siunitx_angle_minute_zero_bool} -%\begin{macro}{\_l_siunitx_angle_second_zero_bool} -%\begin{macro}{\_l_siunitx_angle_arc_separator_tl} -%\begin{macro}{\_l_siunitx_angle_astronomy_bool} -%\begin{macro}{\_l_siunitx_angle_unit_separator_tl} +%\begin{macro}{\l_siunitx_angle_degree_zero_bool} +%\begin{macro}{\l_siunitx_angle_minute_zero_bool} +%\begin{macro}{\l_siunitx_angle_second_zero_bool} +%\begin{macro}{\l_siunitx_angle_arc_separator_tl} +%\begin{macro}{\l_siunitx_angle_astronomy_bool} +%\begin{macro}{\l_siunitx_angle_unit_separator_tl} % The angle-specific options are created here. % \begin{macrocode} \keys_define:nn { siunitx } { add-arc-degree-zero .bool_set:N = - \_l_siunitx_angle_degree_zero_bool , + \l_siunitx_angle_degree_zero_bool , add-arc-minute-zero .bool_set:N = - \_l_siunitx_angle_minute_zero_bool , + \l_siunitx_angle_minute_zero_bool , add-arc-second-zero .bool_set:N = - \_l_siunitx_angle_second_zero_bool , + \l_siunitx_angle_second_zero_bool , angle-symbol-over-decimal .bool_set:N = - \_l_siunitx_angle_astronomy_bool , + \l_siunitx_angle_astronomy_bool , arc-separator .tl_set:N = - \_l_siunitx_angle_arc_separator_tl , + \l_siunitx_angle_arc_separator_tl , number-angle-separator .tl_set:N = - \_l_siunitx_angle_unit_separator_tl , + \l_siunitx_angle_unit_separator_tl , } % \end{macrocode} %\end{macro} @@ -8172,108 +8214,108 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_angle_output:nnn} -%\begin{macro}[aux]{\_siunitx_angle_output_aux:nnn} +%\begin{macro}{\siunitx_angle_output:nnn} +%\begin{macro}[aux]{\siunitx_angle_output_aux:nnn} % The input will have been split up by \pkg{xparse}, and so the various % possible inputs can be picked up. To keep to a minimal route through % the code, a decimal angle is simply treated like an arc, but with % any zero-filling disabled. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_angle_output:nnn #1#2#3 { - \_siunitx_angle_init: +\cs_new_protected:Npn \siunitx_angle_output:nnn #1#2#3 { + \siunitx_angle_init: \IfNoValueTF {#2} { - \bool_set_false:N \_l_siunitx_angle_minute_zero_bool - \bool_set_false:N \_l_siunitx_angle_second_zero_bool - \_siunitx_angle_output_aux:nnn {#1} { } { } + \bool_set_false:N \l_siunitx_angle_minute_zero_bool + \bool_set_false:N \l_siunitx_angle_second_zero_bool + \siunitx_angle_output_aux:nnn {#1} { } { } } { \IfNoValueTF {#3} - { \_siunitx_error:nx { invalid-arc-format } { #1 ; #2 } } - { \_siunitx_angle_output_aux:nnn {#1} {#2} {#3} } + { \siunitx_error:nx { invalid-arc-format } { #1 ; #2 } } + { \siunitx_angle_output_aux:nnn {#1} {#2} {#3} } } } -\cs_set_protected:Npn \_siunitx_angle_output_aux:nnn #1#2#3 { +\cs_new_protected:Npn \siunitx_angle_output_aux:nnn #1#2#3 { \tl_if_empty:nTF { #1#2#3 } - { \_siunitx_error:n { empty-arc } } + { \siunitx_error:n { empty-arc } } { - \bool_if:NTF \_l_siunitx_number_parse_bool - { \_siunitx_angle_parse:nnn {#1} {#2} {#3} } - { \_siunitx_angle_direct:nnn {#1} {#2} {#3} } + \bool_if:NTF \l_siunitx_number_parse_bool + { \siunitx_angle_parse:nnn {#1} {#2} {#3} } + { \siunitx_angle_direct:nnn {#1} {#2} {#3} } } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_angle_init:} +%\begin{macro}{\siunitx_angle_init:} % The usual separation of initial storage resets. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_angle_init: { - \bool_set_false:N \_l_siunitx_angle_degree_space_bool - \bool_set_false:N \_l_siunitx_angle_minute_space_bool - \prop_clear:N \_l_siunitx_angle_degree_prop - \prop_clear:N \_l_siunitx_angle_minute_prop - \prop_clear:N \_l_siunitx_angle_second_prop - \tl_clear:N \_l_siunitx_preunit_tl - \tl_set_eq:NN \_l_siunitx_number_unit_separator_tl - \_l_siunitx_angle_unit_separator_tl - \cs_set_eq:NN \_siunitx_number_in_parse_more:N - \_siunitx_number_in_parse_restricted:N +\cs_new_protected_nopar:Npn \siunitx_angle_init: { + \bool_set_false:N \l_siunitx_angle_degree_space_bool + \bool_set_false:N \l_siunitx_angle_minute_space_bool + \prop_clear:N \l_siunitx_angle_degree_prop + \prop_clear:N \l_siunitx_angle_minute_prop + \prop_clear:N \l_siunitx_angle_second_prop + \tl_clear:N \l_siunitx_preunit_tl + \tl_set_eq:NN \l_siunitx_number_unit_separator_tl + \l_siunitx_angle_unit_separator_tl + \cs_set_eq:NN \siunitx_number_in_parse_more:N + \siunitx_number_in_parse_restricted:N } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_angle_direct:nnn} -%\begin{macro}[aux]{\_siunitx_angle_direct_aux_i:nnn} -%\begin{macro}[aux]{\_siunitx_angle_direct_aux_ii:nnn} -%\begin{macro}[aux]{\_siunitx_angle_direct_aux_iii:nnn} +%\begin{macro}{\siunitx_angle_direct:nnn} +%\begin{macro}[aux]{\siunitx_angle_direct_aux_i:nnn} +%\begin{macro}[aux]{\siunitx_angle_direct_aux_ii:nnn} +%\begin{macro}[aux]{\siunitx_angle_direct_aux_iii:nnn} % When printing an arc directly, there is still the need to fill in % any zero values required and to check the spacing is correct. That % is done using a chain approach, which is easy to implement and % reasonably clear. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_angle_direct:nnn #1 { +\cs_new_protected:Npn \siunitx_angle_direct:nnn #1 { \tl_if_empty:nTF {#1} { - \bool_if:NTF \_l_siunitx_angle_degree_zero_bool - { \_siunitx_angle_direct_aux_i:nnn { 0 } } - { \_siunitx_angle_direct_aux_i:nnn { } } + \bool_if:NTF \l_siunitx_angle_degree_zero_bool + { \siunitx_angle_direct_aux_i:nnn { 0 } } + { \siunitx_angle_direct_aux_i:nnn { } } } - { \_siunitx_angle_direct_aux_i:nnn {#1} } + { \siunitx_angle_direct_aux_i:nnn {#1} } } -\cs_set_protected:Npn \_siunitx_angle_direct_aux_i:nnn #1#2 { +\cs_new_protected:Npn \siunitx_angle_direct_aux_i:nnn #1#2 { \tl_if_empty:nTF {#2} { - \bool_if:NTF \_l_siunitx_angle_minte_zero_bool - { \_siunitx_angle_direct_aux_ii:nnn {#1} { 0 } } - { \_siunitx_angle_direct_aux_ii:nnn {#1} { } } + \bool_if:NTF \l_siunitx_angle_minte_zero_bool + { \siunitx_angle_direct_aux_ii:nnn {#1} { 0 } } + { \siunitx_angle_direct_aux_ii:nnn {#1} { } } } - { \_siunitx_angle_direct_aux_ii:nnn {#1} {#2} } + { \siunitx_angle_direct_aux_ii:nnn {#1} {#2} } } -\cs_set_protected:Npn \_siunitx_angle_direct_aux_ii:nnn #1#2#3 { +\cs_new_protected:Npn \siunitx_angle_direct_aux_ii:nnn #1#2#3 { \tl_if_empty:nTF {#3} { - \bool_if:NTF \_l_siunitx_angle_second_zero_bool - { \_siunitx_angle_direct_aux_iii:nnn {#1} {#2} { 0 } } - { \_siunitx_angle_direct_aux_iii:nnn {#1} {#2} { } } + \bool_if:NTF \l_siunitx_angle_second_zero_bool + { \siunitx_angle_direct_aux_iii:nnn {#1} {#2} { 0 } } + { \siunitx_angle_direct_aux_iii:nnn {#1} {#2} { } } } - { \_siunitx_angle_direct_aux_iii:nnn {#1} {#2} {#3} } + { \siunitx_angle_direct_aux_iii:nnn {#1} {#2} {#3} } } -\cs_set_protected:Npn \_siunitx_angle_direct_aux_iii:nnn #1#2#3 { +\cs_new_protected:Npn \siunitx_angle_direct_aux_iii:nnn #1#2#3 { \tl_if_empty:nF {#1} { \tl_if_empty:nF {#2#3} - { \bool_set_true:N \_l_siunitx_angle_degree_space_bool } + { \bool_set_true:N \l_siunitx_angle_degree_space_bool } } \tl_if_empty:nF {#2} { \tl_if_empty:nF {#3} - { \bool_set_true:N \_l_siunitx_angle_minute_space_bool } + { \bool_set_true:N \l_siunitx_angle_minute_space_bool } } - \_siunitx_angle_print_direct:nnn {#1} {#2} {#3} + \siunitx_angle_print_direct:nnn {#1} {#2} {#3} } % \end{macrocode} %\end{macro} @@ -8281,13 +8323,13 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_angle_parse:nnn} -%\begin{macro}[aux]{\_siunitx_angle_parse_aux:nnn} -%\begin{macro}{\_siunitx_angle_check_sign:} -%\begin{macro}[aux]{\_siunitx_angle_check_sign:n} -%\begin{macro}{\_siunitx_angle_zero_fill:} -%\begin{macro}{\_siunitx_angle_sign_shuffle:nn} -%\begin{macro}[aux]{\_siunitx_angle_sign_shuffle_aux:nnn} +%\begin{macro}{\siunitx_angle_parse:nnn} +%\begin{macro}[aux]{\siunitx_angle_parse_aux:nnn} +%\begin{macro}{\siunitx_angle_check_sign:} +%\begin{macro}[aux]{\siunitx_angle_check_sign:n} +%\begin{macro}{\siunitx_angle_zero_fill:} +%\begin{macro}{\siunitx_angle_sign_shuffle:nn} +%\begin{macro}[aux]{\siunitx_angle_sign_shuffle_aux:nnn} % Parsing an arc requires a number of stages. First, there is the % basic conversion of the input numbers into three property lists, % which will contain the data required. There is then a zero-filling @@ -8295,65 +8337,65 @@ This work consists of the file siunitx.dtx % After that, a check to make sure there is only one sign for an arc % before setting up the inter-part spacing and actually printing. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_angle_parse:nnn #1#2#3 { - \_siunitx_angle_parse_aux:nn {#1} { degree } - \_siunitx_angle_parse_aux:nn {#2} { minute } - \_siunitx_angle_parse_aux:nn {#3} { second } - \_siunitx_angle_check_sign: - \_siunitx_angle_zero_fill: - \prop_if_empty:NF \_l_siunitx_angle_degree_prop +\cs_new_protected:Npn \siunitx_angle_parse:nnn #1#2#3 { + \siunitx_angle_parse_aux:nn {#1} { degree } + \siunitx_angle_parse_aux:nn {#2} { minute } + \siunitx_angle_parse_aux:nn {#3} { second } + \siunitx_angle_check_sign: + \siunitx_angle_zero_fill: + \prop_if_empty:NF \l_siunitx_angle_degree_prop { - \prop_if_empty:NF \_l_siunitx_angle_minute_prop - { \bool_set_true:N \_l_siunitx_angle_degree_space_bool } - \prop_if_empty:NF \_l_siunitx_angle_second_prop - { \bool_set_true:N \_l_siunitx_angle_degree_space_bool } + \prop_if_empty:NF \l_siunitx_angle_minute_prop + { \bool_set_true:N \l_siunitx_angle_degree_space_bool } + \prop_if_empty:NF \l_siunitx_angle_second_prop + { \bool_set_true:N \l_siunitx_angle_degree_space_bool } } - \prop_if_empty:NF \_l_siunitx_angle_minute_prop + \prop_if_empty:NF \l_siunitx_angle_minute_prop { - \prop_if_empty:NF \_l_siunitx_angle_second_prop - { \bool_set_true:N \_l_siunitx_angle_minute_space_bool } + \prop_if_empty:NF \l_siunitx_angle_second_prop + { \bool_set_true:N \l_siunitx_angle_minute_space_bool } } - \_siunitx_angle_print: + \siunitx_angle_print: } -\cs_set_protected:Npn \_siunitx_angle_parse_aux:nn #1#2 { - \prop_clear:N \_l_siunitx_number_in_prop +\cs_new_protected:Npn \siunitx_angle_parse_aux:nn #1#2 { + \prop_clear:N \l_siunitx_number_in_prop \tl_if_empty:nF {#1} { - \_siunitx_number_in_init: - \_siunitx_number_in_parse_aux:n {#1} + \siunitx_number_in_init: + \siunitx_number_in_parse_aux:n {#1} } - \prop_get:NnN \_l_siunitx_number_in_prop { mantissa-sign-deleted } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-sign-deleted } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \prop_put:NnV \_l_siunitx_number_in_prop { mantissa-sign } - \_l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_in_prop { mantissa-sign } + \l_siunitx_tmpa_tl } - \_siunitx_number_process: - \prop_set_eq:cN { _l_siunitx_angle_ #2 _prop } - \_l_siunitx_number_in_prop + \siunitx_number_process: + \prop_set_eq:cN { l_siunitx_angle_ #2 _prop } + \l_siunitx_number_in_prop } % \end{macrocode} % Only the highest-order part of an arc can have a sign. This is checked % now so that the shuffling code is easier to write. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_angle_check_sign: { - \prop_if_empty:NTF \_l_siunitx_angle_degree_prop +\cs_new_protected_nopar:Npn \siunitx_angle_check_sign: { + \prop_if_empty:NTF \l_siunitx_angle_degree_prop { - \prop_if_empty:NF \_l_siunitx_angle_minute_prop - { \_siunitx_angle_check_sign_aux:n { second } } + \prop_if_empty:NF \l_siunitx_angle_minute_prop + { \siunitx_angle_check_sign_aux:n { second } } } { - \_siunitx_angle_check_sign_aux:n { minute } - \_siunitx_angle_check_sign_aux:n { second } + \siunitx_angle_check_sign_aux:n { minute } + \siunitx_angle_check_sign_aux:n { second } } } -\cs_set_protected_nopar:Npn \_siunitx_angle_check_sign_aux:n #1 { - \prop_if_in:cnTF { _l_siunitx_angle_ #1 _prop } +\cs_new_protected_nopar:Npn \siunitx_angle_check_sign_aux:n #1 { + \prop_if_in:cnTF { l_siunitx_angle_ #1 _prop } { mantissa-sign } { \msg_error:nn { siunitx } { bad-arc-sign } } { - \prop_if_in:cnT { _l_siunitx_angle_ #1 _prop } + \prop_if_in:cnT { l_siunitx_angle_ #1 _prop } { mantissa-sign-deleted } { \msg_error:nn { siunitx } { bad-arc-sign } } } @@ -8363,57 +8405,57 @@ This work consists of the file siunitx.dtx % to worry about. There is therefore a shuffle to move them into the % correct places. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_angle_zero_fill: { +\cs_new_protected_nopar:Npn \siunitx_angle_zero_fill: { \bool_if:nT { - \prop_if_empty_p:N \_l_siunitx_angle_second_prop && - \_l_siunitx_angle_second_zero_bool + \prop_if_empty_p:N \l_siunitx_angle_second_prop && + \l_siunitx_angle_second_zero_bool } { - \prop_put:Nnn \_l_siunitx_angle_second_prop { mantissa } + \prop_put:Nnn \l_siunitx_angle_second_prop { mantissa } { true } - \prop_put:Nnn \_l_siunitx_angle_second_prop { mantissa-integer } + \prop_put:Nnn \l_siunitx_angle_second_prop { mantissa-integer } { 0 } } \bool_if:nT { - \prop_if_empty_p:N \_l_siunitx_angle_minute_prop && - \_l_siunitx_angle_minute_zero_bool + \prop_if_empty_p:N \l_siunitx_angle_minute_prop && + \l_siunitx_angle_minute_zero_bool } { - \prop_put:Nnn \_l_siunitx_angle_minute_prop { mantissa } + \prop_put:Nnn \l_siunitx_angle_minute_prop { mantissa } { true } - \prop_put:Nnn \_l_siunitx_angle_minute_prop { mantissa-integer } + \prop_put:Nnn \l_siunitx_angle_minute_prop { mantissa-integer } { 0 } - \_siunitx_angle_sign_shuffle:nn { second } { minute } + \siunitx_angle_sign_shuffle:nn { second } { minute } } \bool_if:nT { - \prop_if_empty_p:N \_l_siunitx_angle_degree_prop && - \_l_siunitx_angle_degree_zero_bool + \prop_if_empty_p:N \l_siunitx_angle_degree_prop && + \l_siunitx_angle_degree_zero_bool } { - \prop_put:Nnn \_l_siunitx_angle_degree_prop { mantissa } + \prop_put:Nnn \l_siunitx_angle_degree_prop { mantissa } { true } - \prop_put:Nnn \_l_siunitx_angle_degree_prop { mantissa-integer } + \prop_put:Nnn \l_siunitx_angle_degree_prop { mantissa-integer } { 0 } - \_siunitx_angle_sign_shuffle:nn { second } { degree } - \_siunitx_angle_sign_shuffle:nn { minute } { degree } + \siunitx_angle_sign_shuffle:nn { second } { degree } + \siunitx_angle_sign_shuffle:nn { minute } { degree } } } -\cs_set_protected_nopar:Npn \_siunitx_angle_sign_shuffle:nn #1#2 { - \_siunitx_angle_sign_shuffle_aux:nnn {#1} {#2} { } - \_siunitx_angle_sign_shuffle_aux:nnn {#1} {#2} { -deleted } +\cs_new_protected_nopar:Npn \siunitx_angle_sign_shuffle:nn #1#2 { + \siunitx_angle_sign_shuffle_aux:nnn {#1} {#2} { } + \siunitx_angle_sign_shuffle_aux:nnn {#1} {#2} { -deleted } } -\cs_set_protected_nopar:Npn \_siunitx_angle_sign_shuffle_aux:nnn +\cs_new_protected_nopar:Npn \siunitx_angle_sign_shuffle_aux:nnn #1#2#3 { - \prop_get:cnN { _l_siunitx_angle_ #1 _prop } { mantissa-sign #3 } - \_l_siunitx_tmpa_tl - \prop_del:cn { _l_siunitx_angle_ #1 _prop } { mantissa-sign #3 } - \quark_if_no_value:NF \_l_siunitx_tmpa_tl + \prop_get:cnN { l_siunitx_angle_ #1 _prop } { mantissa-sign #3 } + \l_siunitx_tmpa_tl + \prop_del:cn { l_siunitx_angle_ #1 _prop } { mantissa-sign #3 } + \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \prop_put:cnV { _l_siunitx_angle_ #2 _prop } { mantissa-sign #3 } - \_l_siunitx_tmpa_tl + \prop_put:cnV { l_siunitx_angle_ #2 _prop } { mantissa-sign #3 } + \l_siunitx_tmpa_tl } } % \end{macrocode} @@ -8425,50 +8467,50 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_angle_print:} -%\begin{macro}[aux]{\_siunitx_angle_print:nn} +%\begin{macro}{\siunitx_angle_print:} +%\begin{macro}[aux]{\siunitx_angle_print:nn} % The standard printing routine examines each part of the arc in turn % and either does a standard format or calls the special astronomy-style % routine. There may also be some spaces to add. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_angle_print: { - \_siunitx_angle_print_aux:nn { degree } { \SIUnitSymbolDegree } - \bool_if:NT \_l_siunitx_angle_degree_space_bool +\cs_new_protected_nopar:Npn \siunitx_angle_print: { + \siunitx_angle_print_aux:nn { degree } { \SIUnitSymbolDegree } + \bool_if:NT \l_siunitx_angle_degree_space_bool { \nobreak - \_siunitx_ensuremath:n { \_l_siunitx_angle_arc_separator_tl } + \siunitx_ensuremath:n { \l_siunitx_angle_arc_separator_tl } } - \_siunitx_angle_print_aux:nn { minute } { \SIUnitSymbolArcminute } - \bool_if:NT \_l_siunitx_angle_minute_space_bool + \siunitx_angle_print_aux:nn { minute } { \SIUnitSymbolArcminute } + \bool_if:NT \l_siunitx_angle_minute_space_bool { \nobreak - \_siunitx_ensuremath:n { \_l_siunitx_angle_arc_separator_tl } + \siunitx_ensuremath:n { \l_siunitx_angle_arc_separator_tl } } - \_siunitx_angle_print_aux:nn { second } { \SIUnitSymbolArcsecond } + \siunitx_angle_print_aux:nn { second } { \SIUnitSymbolArcsecond } } -\cs_set_protected_nopar:Npn \_siunitx_angle_print_aux:nn #1#2 { - \prop_if_empty:cF { _l_siunitx_angle_ #1 _prop } +\cs_new_protected_nopar:Npn \siunitx_angle_print_aux:nn #1#2 { + \prop_if_empty:cF { l_siunitx_angle_ #1 _prop } { - \prop_set_eq:Nc \_l_siunitx_number_in_prop - { _l_siunitx_angle_ #1 _prop } - \tl_set:Nn \_l_siunitx_unit_tl {#2} - \tl_clear:N \_l_siunitx_number_out_tl - \_siunitx_number_format: - \_siunitx_number_output_color: - \bool_if:NTF \_l_siunitx_angle_astronomy_bool - { \_siunitx_angle_print_astronomy: } - { \_siunitx_number_output_single: } + \prop_set_eq:Nc \l_siunitx_number_in_prop + { l_siunitx_angle_ #1 _prop } + \tl_set:Nn \l_siunitx_unit_tl {#2} + \tl_clear:N \l_siunitx_number_out_tl + \siunitx_number_format: + \siunitx_number_output_color: + \bool_if:NTF \l_siunitx_angle_astronomy_bool + { \siunitx_angle_print_astronomy: } + { \siunitx_number_output_single: } } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_angle_print_astronomy:} -%\begin{macro}[aux]{\_siunitx_angle_print_astronomy_aux:} -%\begin{macro}[aux]{\_siunitx_angle_print_astronomy_aux:n} -%\begin{macro}[aux]{\_siunitx_angle_print_astronomy_marker:} -%\begin{macro}[aux]{\_siunitx_angle_print_astronomy_unit:} +%\begin{macro}{\siunitx_angle_print_astronomy:} +%\begin{macro}[aux]{\siunitx_angle_print_astronomy_aux:} +%\begin{macro}[aux]{\siunitx_angle_print_astronomy_aux:n} +%\begin{macro}[aux]{\siunitx_angle_print_astronomy_marker:} +%\begin{macro}[aux]{\siunitx_angle_print_astronomy_unit:} % The first check for astronomy-style angles is that there is a decimal % marker in the current input: if not, the standard method can be used. % The method for the astronomy-style angle is not straight-forward, so @@ -8483,72 +8525,72 @@ This work consists of the file siunitx.dtx % added in after superscripts, which otherwise messes up the % calculation. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_angle_print_astronomy: { - \prop_if_in:NnTF \_l_siunitx_number_in_prop +\cs_new_protected_nopar:Npn \siunitx_angle_print_astronomy: { + \prop_if_in:NnTF \l_siunitx_number_in_prop { mantissa-decimal-marker } - { \_siunitx_angle_print_astronomy_aux: } - { \_siunitx_number_output_single: } + { \siunitx_angle_print_astronomy_aux: } + { \siunitx_number_output_single: } } -\cs_set_protected_nopar:Npn \_siunitx_angle_print_astronomy_aux: { - \prop_get:NnN \_l_siunitx_number_out_prop { mantissa-integer } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl - { \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl } - \hbox_set:Nn \_l_siunitx_angle_marker_box +\cs_new_protected_nopar:Npn \siunitx_angle_print_astronomy_aux: { + \prop_get:NnN \l_siunitx_number_out_prop { mantissa-integer } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl + { \siunitx_print:nV { number } \l_siunitx_tmpa_tl } + \hbox_set:Nn \l_siunitx_angle_marker_box { - \_siunitx_print:nn { number } - { \_siunitx_ensuremath:n { { \_l_siunitx_output_decimal_tl } } } + \siunitx_print:nn { number } + { \siunitx_ensuremath:n { { \l_siunitx_output_decimal_tl } } } } - \hbox_set:Nn \_l_siunitx_angle_unit_box + \hbox_set:Nn \l_siunitx_angle_unit_box { - \_siunitx_print:nV { unit } \_l_siunitx_unit_tl + \siunitx_print:nV { unit } \l_siunitx_unit_tl \skip_horizontal:n { -\scriptspace } } - \_siunitx_angle_print_astronomy_aux:n { marker } - \_siunitx_angle_print_astronomy_aux:n { unit } - \hbox_set:Nn \_l_siunitx_angle_marker_box + \siunitx_angle_print_astronomy_aux:n { marker } + \siunitx_angle_print_astronomy_aux:n { unit } + \hbox_set:Nn \l_siunitx_angle_marker_box { - \box_use:N \_l_siunitx_angle_marker_box - \box_use:N \_l_siunitx_angle_unit_box + \box_use:N \l_siunitx_angle_marker_box + \box_use:N \l_siunitx_angle_unit_box } \dim_compare:nNnTF - { \_l_siunitx_angle_marker_dim } > { \_l_siunitx_angle_unit_dim } - { \_siunitx_angle_print_astronomy_marker: } - { \_siunitx_angle_print_astronomy_unit: } - \prop_get:NnN \_l_siunitx_number_out_prop { mantissa-decimal } - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl - { \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl } -} -\cs_set_protected_nopar:Npn \_siunitx_angle_print_astronomy_aux:n #1 { - \dim_set:cn { _l_siunitx_angle_ #1 _dim } - { \box_wd:c { _l_siunitx_angle_ #1 _box } } - \hbox_set_to_wd:cnn { _l_siunitx_angle_ #1 _box } { \c_zero_skip } + { \l_siunitx_angle_marker_dim } > { \l_siunitx_angle_unit_dim } + { \siunitx_angle_print_astronomy_marker: } + { \siunitx_angle_print_astronomy_unit: } + \prop_get:NnN \l_siunitx_number_out_prop { mantissa-decimal } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl + { \siunitx_print:nV { number } \l_siunitx_tmpa_tl } +} +\cs_new_protected_nopar:Npn \siunitx_angle_print_astronomy_aux:n #1 { + \dim_set:cn { l_siunitx_angle_ #1 _dim } + { \box_wd:c { l_siunitx_angle_ #1 _box } } + \hbox_set_to_wd:cnn { l_siunitx_angle_ #1 _box } { \c_zero_skip } { \tex_hss:D - \hbox_unpack:c { _l_siunitx_angle_ #1_box } + \hbox_unpack:c { l_siunitx_angle_ #1_box } \tex_hss:D } } -\cs_set_protected_nopar:Npn \_siunitx_angle_print_astronomy_marker: { - \hbox_set_to_wd:Nnn \_l_siunitx_angle_marker_box - { \_l_siunitx_angle_marker_dim } +\cs_new_protected_nopar:Npn \siunitx_angle_print_astronomy_marker: { + \hbox_set_to_wd:Nnn \l_siunitx_angle_marker_box + { \l_siunitx_angle_marker_dim } { \tex_hss:D - \hbox_unpack:N \_l_siunitx_angle_marker_box + \hbox_unpack:N \l_siunitx_angle_marker_box \tex_hss:D } - \box_use:N \_l_siunitx_angle_marker_box + \box_use:N \l_siunitx_angle_marker_box } -\cs_set_protected_nopar:Npn \_siunitx_angle_print_astronomy_unit: { - \hbox_set_to_wd:Nnn \_l_siunitx_angle_marker_box - { \_l_siunitx_angle_unit_dim } +\cs_new_protected_nopar:Npn \siunitx_angle_print_astronomy_unit: { + \hbox_set_to_wd:Nnn \l_siunitx_angle_marker_box + { \l_siunitx_angle_unit_dim } { \tex_hss:D - \hbox_unpack:N \_l_siunitx_angle_marker_box + \hbox_unpack:N \l_siunitx_angle_marker_box \tex_hss:D } - \box_use:N \_l_siunitx_angle_marker_box + \box_use:N \l_siunitx_angle_marker_box \skip_horizontal:N \scriptspace } % \end{macrocode} @@ -8558,32 +8600,32 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_angle_print_direct:nnn} -%\begin{macro}[aux]{\_siunitx_angle_print_direct_aux:nn} +%\begin{macro}{\siunitx_angle_print_direct:nnn} +%\begin{macro}[aux]{\siunitx_angle_print_direct_aux:nn} % The direct printing routine is rather similar to the standard % one, with just a modified final step. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_angle_print_direct:nnn #1#2#3 { - \_siunitx_angle_print_direct_aux:nn {#1} { \SIUnitSymbolDegree } - \bool_if:NT \_l_siunitx_angle_degree_space_bool +\cs_new_protected:Npn \siunitx_angle_print_direct:nnn #1#2#3 { + \siunitx_angle_print_direct_aux:nn {#1} { \SIUnitSymbolDegree } + \bool_if:NT \l_siunitx_angle_degree_space_bool { \nobreak - \_siunitx_ensuremath:n { \_l_siunitx_angle_arc_separator_tl } + \siunitx_ensuremath:n { \l_siunitx_angle_arc_separator_tl } } - \_siunitx_angle_print_direct_aux:nn {#2} { \SIUnitSymbolArcminute } - \bool_if:NT \_l_siunitx_angle_minute_space_bool + \siunitx_angle_print_direct_aux:nn {#2} { \SIUnitSymbolArcminute } + \bool_if:NT \l_siunitx_angle_minute_space_bool { \nobreak - \_siunitx_ensuremath:n { \_l_siunitx_angle_arc_separator_tl } + \siunitx_ensuremath:n { \l_siunitx_angle_arc_separator_tl } } - \_siunitx_angle_print_direct_aux:nn {#3} { \SIUnitSymbolArcsecond } + \siunitx_angle_print_direct_aux:nn {#3} { \SIUnitSymbolArcsecond } } -\cs_set_protected_nopar:Npn \_siunitx_angle_print_direct_aux:nn #1#2 { +\cs_new_protected_nopar:Npn \siunitx_angle_print_direct_aux:nn #1#2 { \tl_if_empty:nF {#1} { - \tl_set:Nn \_l_siunitx_unit_tl {#2} - \_siunitx_print:nn { number } { \_siunitx_ensuremath:n {#1} } - \_siunitx_unit_output_print: + \tl_set:Nn \l_siunitx_unit_tl {#2} + \siunitx_print:nn { number } { \siunitx_ensuremath:n {#1} } + \siunitx_unit_output_print: } } % \end{macrocode} @@ -8597,95 +8639,95 @@ This work consists of the file siunitx.dtx % method only makes these available inside the unit-processing functions % (\cs{SI}, \cs{si} and the \texttt{S} column). % -%\begin{macro}{\_l_siunitx_declare_list_tl} +%\begin{macro}{\l_siunitx_declare_list_tl} % A list of all unit and related functions. % \begin{macrocode} -\tl_new:N \_l_siunitx_declare_list_tl -\tl_set:Nn \_l_siunitx_declare_list_tl { \of \per \raiseto \tothe } +\tl_new:N \l_siunitx_declare_list_tl +\tl_set:Nn \l_siunitx_declare_list_tl { \of \per \raiseto \tothe } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_declare_power_after:Nn} -%\begin{macro}{\_siunitx_declare_power_before:Nn} +%\begin{macro}{\siunitx_declare_power_after:Nn} +%\begin{macro}{\siunitx_declare_power_before:Nn} % Creating powers is all about storing values. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_declare_power_after:Nn #1#2 { - \tl_put_right:Nn \_l_siunitx_declare_list_tl {#1} - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _literal:w } +\cs_new_protected:Npn \siunitx_declare_power_after:Nn #1#2 { + \tl_put_right:Nn \l_siunitx_declare_list_tl {#1} + \cs_set:cpn { siunitx_ \token_to_str:N #1 _literal:w } { \textsuperscript {#2} } - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _function:w } - { \_siunitx_unit_parse_power_after:n {#2} } + \cs_set:cpn { siunitx_ \token_to_str:N #1 _function:w } + { \siunitx_unit_parse_power_after:n {#2} } } -\cs_set_protected:Npn \_siunitx_declare_power_before:Nn #1#2 { - \tl_put_right:Nn \_l_siunitx_declare_list_tl {#1} - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _literal:w } ##1 +\cs_new_protected:Npn \siunitx_declare_power_before:Nn #1#2 { + \tl_put_right:Nn \l_siunitx_declare_list_tl {#1} + \cs_set:cpn { siunitx_ \token_to_str:N #1 _literal:w } ##1 { ##1 \textsuperscript {#2} } - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _function:w } - { \_siunitx_unit_parse_power_before:n {#2} } + \cs_set:cpn { siunitx_ \token_to_str:N #1 _function:w } + { \siunitx_unit_parse_power_before:n {#2} } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_declare_prefix:Nnnn} +%\begin{macro}{\siunitx_declare_prefix:Nnnn} % Prefixes need to store both the symbol and the power they represent. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_declare_prefix:Nnnn #1#2#3#4 { - \tl_put_right:Nn \_l_siunitx_declare_list_tl {#1} - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _literal:w } {#2} - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _function:w } +\cs_new_protected:Npn \siunitx_declare_prefix:Nnnn #1#2#3#4 { + \tl_put_right:Nn \l_siunitx_declare_list_tl {#1} + \cs_set:cpn { siunitx_ \token_to_str:N #1 _literal:w } {#2} + \cs_set:cpn { siunitx_ \token_to_str:N #1 _function:w } { - \bool_if:NTF \_l_siunitx_prefix_symbols_bool - { \_siunitx_unit_parse_prefix:n {#2} } - { \_siunitx_unit_parse_prefix:nn {#3} {#4} } + \bool_if:NTF \l_siunitx_prefix_symbols_bool + { \siunitx_unit_parse_prefix:n {#2} } + { \siunitx_unit_parse_prefix:nn {#3} {#4} } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_declare_qualifier:Nn} +%\begin{macro}{\siunitx_declare_qualifier:Nn} % Qualifiers just need storing. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_declare_qualifier:Nn #1#2 { - \tl_put_right:Nn \_l_siunitx_declare_list_tl {#1} - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _literal:w } +\cs_new_protected:Npn \siunitx_declare_qualifier:Nn #1#2 { + \tl_put_right:Nn \l_siunitx_declare_list_tl {#1} + \cs_set:cpn { siunitx_ \token_to_str:N #1 _literal:w } { \text { ~ } ( #2 ) } - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _function:w } - { \_siunitx_unit_parse_qualifier:n {#2} } + \cs_set:cpn { siunitx_ \token_to_str:N #1 _function:w } + { \siunitx_unit_parse_qualifier:n {#2} } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_declare_unit:Nnn} -%\begin{macro}[aux]{\_siunitx_unit_first_token:n} +%\begin{macro}{\siunitx_declare_unit:Nnn} +%\begin{macro}[aux]{\siunitx_unit_first_token:n} % Creating units requires various things to be stored. This is done % with several storage bins to keep the code clear. For the % \texttt{macro} definition, the test occurs at use so that there is no % problem with the creation order for units. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_declare_unit:Nnn #1#2#3 { - \tl_put_right:Nn \_l_siunitx_declare_list_tl {#1} - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _literal:w } {#2} - \cs_set:cpn { _siunitx_ \token_to_str:N #1 _function:w } +\cs_new_protected:Npn \siunitx_declare_unit:Nnn #1#2#3 { + \tl_put_right:Nn \l_siunitx_declare_list_tl {#1} + \cs_set:cpn { siunitx_ \token_to_str:N #1 _literal:w } {#2} + \cs_set:cpn { siunitx_ \token_to_str:N #1 _function:w } { - \_siunitx_unit_if_literal:nTF {#2} - { \_siunitx_unit_parse_unit:Nn #1 {#2} } + \siunitx_unit_if_literal:nTF {#2} + { \siunitx_unit_parse_unit:Nn #1 {#2} } {#2} } \tl_if_empty:nTF {#3} { - \cs_if_free:cF { _l_siunitx_ \token_to_str:N #1 _options_tl } + \cs_if_free:cF { l_siunitx_ \token_to_str:N #1 _options_tl } { - \cs_gundefine:c { _l_siunitx_ \token_to_str:N #1 _options_tl } + \cs_gundefine:c { l_siunitx_ \token_to_str:N #1 _options_tl } } } { - \cs_if_free:cT { _l_siunitx_ \token_to_str:N #1 _options_tl } - { \tl_new:c { _l_siunitx_ \token_to_str:N #1 _options_tl } } - \tl_set:cn { _l_siunitx_ \token_to_str:N #1 _options_tl } {#3} + \cs_if_free:cT { l_siunitx_ \token_to_str:N #1 _options_tl } + { \tl_new:c { l_siunitx_ \token_to_str:N #1 _options_tl } } + \tl_set:cn { l_siunitx_ \token_to_str:N #1 _options_tl } {#3} } } -\cs_set_protected:Npn \_siunitx_unit_first_token:n #1 { +\cs_new_protected:Npn \siunitx_unit_first_token:n #1 { \exp_after:wN \token_to_str:N \tl_head_i:w #1 \q_nil } % \end{macrocode} @@ -8695,10 +8737,10 @@ This work consists of the file siunitx.dtx %\begin{macro}{\per} % The \cs{per} function is pretty simple. % \begin{macrocode} -\cs_set:cpn { _siunitx_ \token_to_str:N \per _literal:w } { / } -\cs_set_protected:cpn { _siunitx_ \token_to_str:N \per _function:w } { - \bool_set_true:N \_l_siunitx_per_bool - \_siunitx_unit_parse_per: +\cs_new:cpn { siunitx_ \token_to_str:N \per _literal:w } { / } +\cs_new_protected:cpn { siunitx_ \token_to_str:N \per _function:w } { + \bool_set_true:N \l_siunitx_per_bool + \siunitx_unit_parse_per: } % \end{macrocode} %\end{macro} @@ -8707,20 +8749,20 @@ This work consists of the file siunitx.dtx %\begin{macro}{\tothe} % Generic versions of the pre-set powers. % \begin{macrocode} -\cs_set:cpn { _siunitx_ \token_to_str:N \raiseto _literal:w } #1#2 { +\cs_new:cpn { siunitx_ \token_to_str:N \raiseto _literal:w } #1#2 { #2 \textsuperscript {#1} } -\cs_set_protected:cpn { _siunitx_ \token_to_str:N \raiseto _function:w } +\cs_new_protected:cpn { siunitx_ \token_to_str:N \raiseto _function:w } #1 { - \_siunitx_unit_parse_power_before:n {#1} + \siunitx_unit_parse_power_before:n {#1} } -\cs_set:cpn { _siunitx_ \token_to_str:N \tothe _literal:w } #1 { +\cs_new:cpn { siunitx_ \token_to_str:N \tothe _literal:w } #1 { \textsuperscript {#1} } -\cs_set_protected:cpn { _siunitx_ \token_to_str:N \tothe _function:w } +\cs_new_protected:cpn { siunitx_ \token_to_str:N \tothe _function:w } #1 { - \_siunitx_unit_parse_power_after:n {#1} + \siunitx_unit_parse_power_after:n {#1} } % \end{macrocode} %\end{macro} @@ -8729,11 +8771,11 @@ This work consists of the file siunitx.dtx %\begin{macro}{\of} % A flexible qualifier as well. % \begin{macrocode} -\cs_set_protected:cpn { _siunitx_ \token_to_str:N \of _literal:w } #1 { +\cs_new_protected:cpn { siunitx_ \token_to_str:N \of _literal:w } #1 { \text { ~ } ( #1 ) } -\cs_set_protected:cpn { _siunitx_ \token_to_str:N \of _function:w } #1 { - \_siunitx_unit_parse_qualifier:n {#1} +\cs_new_protected:cpn { siunitx_ \token_to_str:N \of _function:w } #1 { + \siunitx_unit_parse_qualifier:n {#1} } % \end{macrocode} %\end{macro} @@ -8744,23 +8786,23 @@ This work consists of the file siunitx.dtx % document body. If so, then these are created at the start of the % document body. % -%\begin{macro}{\_l_siunitx_create_free_bool} -%\begin{macro}{\_l_siunitx_create_overwrite_bool} -%\begin{macro}{\_l_siunitx_create_prespace_bool} -%\begin{macro}{\_l_siunitx_create_optional_bool} -%\begin{macro}{\_l_siunitx_create_xspace_bool} +%\begin{macro}{\l_siunitx_create_free_bool} +%\begin{macro}{\l_siunitx_create_overwrite_bool} +%\begin{macro}{\l_siunitx_create_prespace_bool} +%\begin{macro}{\l_siunitx_create_optional_bool} +%\begin{macro}{\l_siunitx_create_xspace_bool} % There are a few options which control this behaviour: these are all % preamble-only. % \begin{macrocode} \keys_define:nn { siunitx } { - free-standing-units .bool_set:N = \_l_siunitx_create_free_bool, + free-standing-units .bool_set:N = \l_siunitx_create_free_bool, overwrite-functions .bool_set:N = - \_l_siunitx_create_overwrite_bool, - space-before-unit .bool_set:N = \_l_siunitx_create_prespace_bool, - unit-optional-argument .bool_set:N = \_l_siunitx_create_optional_bool, - use-xspace .bool_set:N = \_l_siunitx_create_xspace_bool + \l_siunitx_create_overwrite_bool, + space-before-unit .bool_set:N = \l_siunitx_create_prespace_bool, + unit-optional-argument .bool_set:N = \l_siunitx_create_optional_bool, + use-xspace .bool_set:N = \l_siunitx_create_xspace_bool } -\_siunitx_option_deactivate:n { +\siunitx_option_deactivate:n { free-standing-units, overwrite-functions, space-before-unit, @@ -8777,110 +8819,110 @@ This work consists of the file siunitx.dtx % The master control macro which occurs at the start of the document. % \begin{macrocode} \AtBeginDocument { - \bool_if:NTF \_l_siunitx_create_free_bool - { \_siunitx_unit_create_functions: } - { \_siunitx_unit_create_empty_functions: } + \bool_if:NTF \l_siunitx_create_free_bool + { \siunitx_unit_create_functions: } + { \siunitx_unit_create_empty_functions: } } % \end{macrocode} % -%\begin{macro}{\_siunitx_unit_create_empty_functions:} -%\begin{macro}[aux]{\_siunitx_unit_create_empty_functions_aux:N} +%\begin{macro}{\siunitx_unit_create_empty_functions:} +%\begin{macro}[aux]{\siunitx_unit_create_empty_functions_aux:N} % Without this, horrible things happen with \pkg{memoir} and % \pkg{hyperref}. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_create_empty_functions: { - \tl_map_function:NN \_l_siunitx_declare_list_tl - \_siunitx_unit_create_empty_functions_aux:N +\cs_new_protected_nopar:Npn \siunitx_unit_create_empty_functions: { + \tl_map_function:NN \l_siunitx_declare_list_tl + \siunitx_unit_create_empty_functions_aux:N } -\cs_set_protected_nopar:Npn - \_siunitx_unit_create_empty_functions_aux:N #1 { +\cs_new_protected_nopar:Npn + \siunitx_unit_create_empty_functions_aux:N #1 { \cs_if_free:NT #1 { \cs_set_protected_nopar:Npn #1 { \ERROR } } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_create_functions:} +%\begin{macro}{\siunitx_unit_create_functions:} % Creation of macros essentially involves picking up a couple of loops. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_create_functions: { - \bool_if:NT \_l_siunitx_create_overwrite_bool - { \tl_map_function:NN \_l_siunitx_declare_list_tl \cs_gundefine:N } - \bool_if:NTF \_l_siunitx_create_optional_bool +\cs_new_protected_nopar:Npn \siunitx_unit_create_functions: { + \bool_if:NT \l_siunitx_create_overwrite_bool + { \tl_map_function:NN \l_siunitx_declare_list_tl \cs_gundefine:N } + \bool_if:NTF \l_siunitx_create_optional_bool { - \tl_map_function:NN \_l_siunitx_declare_list_tl - \_siunitx_unit_create_with_arg:N + \tl_map_function:NN \l_siunitx_declare_list_tl + \siunitx_unit_create_with_arg:N } { - \tl_map_function:NN \_l_siunitx_declare_list_tl - \_siunitx_unit_create:N + \tl_map_function:NN \l_siunitx_declare_list_tl + \siunitx_unit_create:N } - \bool_if:NT \_l_siunitx_create_xspace_bool + \bool_if:NT \l_siunitx_create_xspace_bool { \RequirePackage { xspace } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_unit_create:N} -%\begin{macro}{\_siunitx_unit_create_with_arg:N} +%\begin{macro}{\siunitx_unit_create:N} +%\begin{macro}{\siunitx_unit_create_with_arg:N} % The creation functions expand everything as far as possible so that % there is less to do in the document. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_create:N #1 { +\cs_new_protected:Npn \siunitx_unit_create:N #1 { \cs_if_free:NT #1 { - \cs_set:Npx \_siunitx_tmp:w + \cs_set:Npx \siunitx_tmp:w { \ProvideDocumentCommand \exp_not:N #1 { } { - \bool_if:NT \_l_siunitx_create_prespace_bool + \bool_if:NT \l_siunitx_create_prespace_bool { \exp_not:n { - \_siunitx_ensuremath:n - { \_l_siunitx_number_unit_sep_tl } + \siunitx_ensuremath:n + { \l_siunitx_number_unit_sep_tl } } } - \exp_not:n { \_siunitx_unit_output:nn {#1} { } } - \bool_if:NT \_l_siunitx_create_xspace_bool + \exp_not:n { \siunitx_unit_output:nn {#1} { } } + \bool_if:NT \l_siunitx_create_xspace_bool { \exp_not:N \xspace } } } - \_siunitx_tmp:w + \siunitx_tmp:w } } -\cs_set_protected:Npn \_siunitx_unit_create_with_arg:N #1 { +\cs_new_protected:Npn \siunitx_unit_create_with_arg:N #1 { \cs_if_free:NT #1 { - \cs_set:Npx \_siunitx_tmp:w + \cs_set:Npx \siunitx_tmp:w { \ProvideDocumentCommand \exp_not:N #1 { o } { \exp_not:N \IfNoValueTF {####1} - { \exp_not:n { \_siunitx_unit_output:nn {#1} { } } } + { \exp_not:n { \siunitx_unit_output:nn {#1} { } } } { - \bool_if:NT \_l_siunitx_create_prespace_bool + \bool_if:NT \l_siunitx_create_prespace_bool { \exp_not:n { - \_siunitx_ensuremath:n - { \_l_siunitx_number_unit_sep_tl } + \siunitx_ensuremath:n + { \l_siunitx_number_unit_sep_tl } } } \SI {####1} { \exp_not:N #1 } } - \bool_if:NT \_l_siunitx_create_xspace_bool + \bool_if:NT \l_siunitx_create_xspace_bool { \exp_not:N \xspace } } } - \_siunitx_tmp:w + \siunitx_tmp:w } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_protect_symbols:N} +%\begin{macro}{\siunitx_protect_symbols:N} % There are a few unit names which may be defined by other parts of % LaTeX. They need to be unexpandable, as in an \texttt{s} column % TeX will look for \cs{omit} \emph{before} starting the internal @@ -8890,12 +8932,12 @@ This work consists of the file siunitx.dtx % \begin{macrocode} \AtBeginDocument { \tl_map_function:nN { \bar \color \ng \pm } - \_siunitx_protect_symbols:N + \siunitx_protect_symbols:N } -\cs_set_protected_nopar:Npn \_siunitx_protect_symbols:N #1 { +\cs_new_protected_nopar:Npn \siunitx_protect_symbols:N #1 { \cs_if_exist:NT #1 { - \_siunitx_cs_if_macro:NT #1 + \siunitx_cs_if_macro:NT #1 { \cs_set_protected_nopar:Npx #1 { \exp_not:V #1 } } } } @@ -8908,14 +8950,14 @@ This work consists of the file siunitx.dtx % or may contain literal input) into formatted text for output. The % input part of the process is used to sort out parsed or literal units. % -%\begin{macro}{\_l_siunitx_unit_forbid_literal_bool} -%\begin{macro}{\_l_siunitx_unit_parse_bool} +%\begin{macro}{\l_siunitx_unit_forbid_literal_bool} +%\begin{macro}{\l_siunitx_unit_parse_bool} % One option is related to how units are pre-processed. % \begin{macrocode} \keys_define:nn { siunitx } { forbid-literal-units .bool_set:N = - \_l_siunitx_unit_forbid_literal_bool, - parse-units .bool_set:N = \_l_siunitx_unit_parse_bool + \l_siunitx_unit_forbid_literal_bool, + parse-units .bool_set:N = \l_siunitx_unit_parse_bool } \keys_set:nn { siunitx } { forbid-literal-units = false, @@ -8925,66 +8967,66 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_in:nn} -%\begin{macro}{\_siunitx_unit_in:Vn} +%\begin{macro}{\siunitx_unit_in:nn} +%\begin{macro}{\siunitx_unit_in:Vn} % The master function does a very simple checks then hands off. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_in:nn #1#2 { - \bool_if:NTF \_l_siunitx_unit_parse_bool +\cs_new_protected:Npn \siunitx_unit_in:nn #1#2 { + \bool_if:NTF \l_siunitx_unit_parse_bool { \tl_if_empty:nF {#1} { - \_siunitx_unit_if_literal:nTF {#1} + \siunitx_unit_if_literal:nTF {#1} { - \bool_if:NTF \_l_siunitx_unit_forbid_literal_bool + \bool_if:NTF \l_siunitx_unit_forbid_literal_bool { \msg_error:nnx { siunitx } { literal-unit } {#1} } - { \_siunitx_unit_format_literal:n {#1} } + { \siunitx_unit_format_literal:n {#1} } } { - \bool_if:NT \_l_siunitx_per_auto_bool + \bool_if:NT \l_siunitx_per_auto_bool { - \tl_set:Nn \_l_siunitx_per_mode_tl { symbol } + \tl_set:Nn \l_siunitx_per_mode_tl { symbol } \mode_if_inner:F { \mode_if_math:T { - \tl_set:Nn \_l_siunitx_per_mode_tl + \tl_set:Nn \l_siunitx_per_mode_tl { fraction } } } } - \_siunitx_unit_parse:nn {#1} {#2} - \_siunitx_unit_format: + \siunitx_unit_parse:nn {#1} {#2} + \siunitx_unit_format: } } } - { \_siunitx_unit_format_literal:n {#1} } + { \siunitx_unit_format_literal:n {#1} } } -\cs_generate_variant:Nn \_siunitx_unit_in:nn { V } +\cs_generate_variant:Nn \siunitx_unit_in:nn { V } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_if_literal:nTF} -%\begin{macro}[aux]{\_siunitx_unit_if_literal_aux:N} +%\begin{macro}{\siunitx_unit_if_literal:nTF} +%\begin{macro}[aux]{\siunitx_unit_if_literal_aux:N} % A test is needed to see if the input only contains unit macros. This % is done by altering setting all of the unit macros to expand to % nothing at all. Thus there will only be anything left if there is % a literal in the unit. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_if_literal:nTF #1#2#3 { +\cs_new_protected:Npn \siunitx_unit_if_literal:nTF #1#2#3 { \group_begin: - \tl_map_function:NN \_l_siunitx_declare_list_tl - \_siunitx_unit_if_literal_aux:N + \tl_map_function:NN \l_siunitx_declare_list_tl + \siunitx_unit_if_literal_aux:N \cs_set_eq:NN \of \use_none:n \cs_set_eq:NN \raiseto \use_none:n \cs_set_eq:NN \tothe \use_none:n - \protected@edef \_l_siunitx_tmpa_tl {#1} + \protected@edef \l_siunitx_tmpa_tl {#1} \exp_args:NNNV \group_end: - \tl_set:Nn \_l_siunitx_tmpa_tl \_l_siunitx_tmpa_tl - \tl_if_empty:NTF \_l_siunitx_tmpa_tl {#3} {#2} + \tl_set:Nn \l_siunitx_tmpa_tl \l_siunitx_tmpa_tl + \tl_if_empty:NTF \l_siunitx_tmpa_tl {#3} {#2} } -\cs_set_protected:Npn \_siunitx_unit_if_literal_aux:N #1 { +\cs_new_protected:Npn \siunitx_unit_if_literal_aux:N #1 { \cs_set_eq:NN #1 \prg_do_nothing: } % \end{macrocode} @@ -8998,32 +9040,32 @@ This work consists of the file siunitx.dtx % input to collect up the units, before re-combining everything into % a single block at the end of the process. % -%\begin{macro}{\_l_siunitx_unit_int} -%\begin{macro}{\_l_siunitx_unit_prop} +%\begin{macro}{\l_siunitx_unit_int} +%\begin{macro}{\l_siunitx_unit_prop} % Parsed units are stored in a property list, to keep things compact. % An integer is also needed to count up units. % \begin{macrocode} -\int_new:N \_l_siunitx_unit_int -\prop_new:N \_l_siunitx_unit_prop +\int_new:N \l_siunitx_unit_int +\prop_new:N \l_siunitx_unit_prop % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_per_bool} +%\begin{macro}{\l_siunitx_per_bool} % To allow \cs{per} to be \enquote{sticky}. % \begin{macrocode} -\bool_new:N \_l_siunitx_per_bool +\bool_new:N \l_siunitx_per_bool % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_prefix_symbols_bool} -%\begin{macro}{\_l_siunitx_sticky_per_bool} +%\begin{macro}{\l_siunitx_prefix_symbols_bool} +%\begin{macro}{\l_siunitx_sticky_per_bool} % Some options are directly related to how units are handled at this % stage, so need be created before the reconstruction part of the code. % \begin{macrocode} \keys_define:nn { siunitx } { - prefixes-as-symbols .bool_set:N = \_l_siunitx_prefix_symbols_bool, - sticky-per .bool_set:N = \_l_siunitx_sticky_per_bool, + prefixes-as-symbols .bool_set:N = \l_siunitx_prefix_symbols_bool, + sticky-per .bool_set:N = \l_siunitx_sticky_per_bool, } \keys_set:nn { siunitx } { prefixes-as-symbols = true @@ -9032,57 +9074,57 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_parse:nn} +%\begin{macro}{\siunitx_unit_parse:nn} % The unit to be parsed is received here along with any options given. % The later are needed so that the user can override any saved options % on a one-off basis. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_parse:nn #1#2 { - \_siunitx_unit_parse_init: - \_siunitx_unit_parse_options:nn {#1} {#2} +\cs_new_protected:Npn \siunitx_unit_parse:nn #1#2 { + \siunitx_unit_parse_init: + \siunitx_unit_parse_options:nn {#1} {#2} #1 - \cs_set_eq:NN \pm \_siunitx_pm: + \cs_set_eq:NN \pm \siunitx_pm: } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_unit_parse_init:} -%\begin{macro}[aux]{\_siunitx_unit_parse_init_aux:N} -%\begin{macro}{\_siunitx_pm:} +%\begin{macro}{\siunitx_unit_parse_init:} +%\begin{macro}[aux]{\siunitx_unit_parse_init_aux:N} +%\begin{macro}{\siunitx_pm:} % As always, the initialisation is a separate routine to make life a % little clearer. The definition of \cs{pm} is saved here as it % is used by units and numbers. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_parse_init: { - \prop_clear:N \_l_siunitx_unit_prop - \int_zero:N \_l_siunitx_unit_int - \bool_set_false:N \_l_siunitx_per_bool - \cs_set_eq:NN \_siunitx_pm: \pm - \tl_map_function:NN \_l_siunitx_declare_list_tl - \_siunitx_unit_parse_init_aux:N +\cs_new_protected_nopar:Npn \siunitx_unit_parse_init: { + \prop_clear:N \l_siunitx_unit_prop + \int_zero:N \l_siunitx_unit_int + \bool_set_false:N \l_siunitx_per_bool + \cs_set_eq:NN \siunitx_pm: \pm + \tl_map_function:NN \l_siunitx_declare_list_tl + \siunitx_unit_parse_init_aux:N } -\cs_set_protected:Npn \_siunitx_unit_parse_init_aux:N #1 { - \cs_set_eq:Nc #1 { _siunitx_ \token_to_str:N #1 _function:w } +\cs_new_protected:Npn \siunitx_unit_parse_init_aux:N #1 { + \cs_set_eq:Nc #1 { siunitx_ \token_to_str:N #1 _function:w } } -\cs_set_protected_nopar:Npn \_siunitx_pm: { } +\cs_new_protected_nopar:Npn \siunitx_pm: { } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_parse_options:n} +%\begin{macro}{\siunitx_unit_parse_options:n} % Any unit-specific options are loaded, followed by re-applying any % options given for this particular macro. The second call to % \cs{keys_set:nn} is needed to allow the local overriding of settings. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_parse_options:nn #1#2 { +\cs_new_protected:Npn \siunitx_unit_parse_options:nn #1#2 { \tl_if_single:nT {#1} { \cs_if_free:cF - { _l_siunitx_ \_siunitx_unit_first_token:n {#1} _options_tl } + { l_siunitx_ \siunitx_unit_first_token:n {#1} _options_tl } { \keys_set:nv { siunitx } - { _l_siunitx_ \_siunitx_unit_first_token:n {#1} _options_tl } + { l_siunitx_ \siunitx_unit_first_token:n {#1} _options_tl } \keys_set:nn { siunitx } {#2} } } @@ -9090,112 +9132,112 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_unit_parse_power_before:n} -%\begin{macro}{\_siunitx_unit_parse_power_after:n} +%\begin{macro}{\siunitx_unit_parse_power_before:n} +%\begin{macro}{\siunitx_unit_parse_power_after:n} % Storing powers depends on whether they are given before or after % the unit. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_parse_power_before:n #1 { - \tl_set:Nx \_l_siunitx_tmpa_tl - { power- \intexpr_eval:n { \_l_siunitx_unit_int + 1 } } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl {#1} +\cs_new_protected:Npn \siunitx_unit_parse_power_before:n #1 { + \tl_set:Nx \l_siunitx_tmpa_tl + { power- \intexpr_eval:n { \l_siunitx_unit_int + 1 } } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl {#1} } -\cs_set_protected:Npn \_siunitx_unit_parse_power_after:n #1 { - \tl_set:Nx \_l_siunitx_tmpa_tl - { power- \int_use:N \_l_siunitx_unit_int } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl {#1} +\cs_new_protected:Npn \siunitx_unit_parse_power_after:n #1 { + \tl_set:Nx \l_siunitx_tmpa_tl + { power- \int_use:N \l_siunitx_unit_int } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl {#1} } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_parse_prefix:n} -%\begin{macro}{\_siunitx_unit_parse_prefix:nn} +%\begin{macro}{\siunitx_unit_parse_prefix:n} +%\begin{macro}{\siunitx_unit_parse_prefix:nn} % Saving prefixes always increments the counter. For non-symbolic % mode, the base needs to be saved along with the power. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_parse_prefix:n #1 { - \int_incr:N \_l_siunitx_unit_int - \tl_set:Nx \_l_siunitx_tmpa_tl - { prefix- \int_use:N \_l_siunitx_unit_int } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl {#1} +\cs_new_protected:Npn \siunitx_unit_parse_prefix:n #1 { + \int_incr:N \l_siunitx_unit_int + \tl_set:Nx \l_siunitx_tmpa_tl + { prefix- \int_use:N \l_siunitx_unit_int } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl {#1} } -\cs_set_protected:Npn \_siunitx_unit_parse_prefix:nn #1#2 { - \_siunitx_unit_parse_prefix:n {#2} - \tl_set:Nx \_l_siunitx_tmpa_tl - { prefix-base- \int_use:N \_l_siunitx_unit_int } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl {#1} +\cs_new_protected:Npn \siunitx_unit_parse_prefix:nn #1#2 { + \siunitx_unit_parse_prefix:n {#2} + \tl_set:Nx \l_siunitx_tmpa_tl + { prefix-base- \int_use:N \l_siunitx_unit_int } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl {#1} } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_parse_per:} +%\begin{macro}{\siunitx_unit_parse_per:} % The \cs{per} function always applies to the next unit seen, so % the counter has to be advanced by one. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_parse_per: { - \tl_set:Nx \_l_siunitx_tmpa_tl - { per- \intexpr_eval:n { \_l_siunitx_unit_int + 1 } } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl { true } - \bool_if:NT \_l_siunitx_sticky_per_bool - { \cs_set_eq:NN \per \_siunitx_unit_parse_per_error: } +\cs_new_protected_nopar:Npn \siunitx_unit_parse_per: { + \tl_set:Nx \l_siunitx_tmpa_tl + { per- \intexpr_eval:n { \l_siunitx_unit_int + 1 } } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl { true } + \bool_if:NT \l_siunitx_sticky_per_bool + { \cs_set_eq:NN \per \siunitx_unit_parse_per_error: } } -\cs_set_protected_nopar:Npn \_siunitx_unit_parse_per_error: { +\cs_new_protected_nopar:Npn \siunitx_unit_parse_per_error: { \msg_error:nn { siunitx } { duplicate-sticky-per } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_unit_parse_qualifier:n} +%\begin{macro}{\siunitx_unit_parse_qualifier:n} % Qualifiers never alter the number of units. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_parse_qualifier:n #1 { - \tl_set:Nx \_l_siunitx_tmpa_tl - { symbol- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVF \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl +\cs_new_protected:Npn \siunitx_unit_parse_qualifier:n #1 { + \tl_set:Nx \l_siunitx_tmpa_tl + { symbol- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVF \l_siunitx_unit_prop \l_siunitx_tmpa_tl { \msg_error:nn { siunitx } { qualifier-before-unit } } - \tl_set:Nx \_l_siunitx_tmpa_tl - { qualifier- \int_use:N \_l_siunitx_unit_int } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl {#1} + \tl_set:Nx \l_siunitx_tmpa_tl + { qualifier- \int_use:N \l_siunitx_unit_int } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl {#1} } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_unit_parse_unit:Nn} -%\begin{macro}[aux]{\_siunitx_unit_parse_unit_per:} +%\begin{macro}{\siunitx_unit_parse_unit:Nn} +%\begin{macro}[aux]{\siunitx_unit_parse_unit_per:} % For units, there is a check in case a prefix is present (which will % have incremented the counter). With the counter correct, simply add % the literal to the property list. There is also a check to see if % there is a \enquote{sticky} \cs{per} to think about. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_parse_unit:Nn #1#2 { - \tl_set:Nx \_l_siunitx_tmpa_tl - { prefix- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVTF \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl - { - \tl_set:Nx \_l_siunitx_tmpa_tl - { symbol- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVT \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl - { \int_incr:N \_l_siunitx_unit_int } - } - { \int_incr:N \_l_siunitx_unit_int } - \tl_set:Nx \_l_siunitx_tmpa_tl - { unit- \int_use:N \_l_siunitx_unit_int } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl {#1} - \tl_set:Nx \_l_siunitx_tmpa_tl - { symbol- \int_use:N \_l_siunitx_unit_int } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl {#2} - \_siunitx_unit_parse_unit_per: -} -\cs_set_protected_nopar:Npn \_siunitx_unit_parse_unit_per: { - \bool_if:NT \_l_siunitx_sticky_per_bool - { - \bool_if:NT \_l_siunitx_per_bool +\cs_new_protected:Npn \siunitx_unit_parse_unit:Nn #1#2 { + \tl_set:Nx \l_siunitx_tmpa_tl + { prefix- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVTF \l_siunitx_unit_prop \l_siunitx_tmpa_tl + { + \tl_set:Nx \l_siunitx_tmpa_tl + { symbol- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVT \l_siunitx_unit_prop \l_siunitx_tmpa_tl + { \int_incr:N \l_siunitx_unit_int } + } + { \int_incr:N \l_siunitx_unit_int } + \tl_set:Nx \l_siunitx_tmpa_tl + { unit- \int_use:N \l_siunitx_unit_int } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl {#1} + \tl_set:Nx \l_siunitx_tmpa_tl + { symbol- \int_use:N \l_siunitx_unit_int } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl {#2} + \siunitx_unit_parse_unit_per: +} +\cs_new_protected_nopar:Npn \siunitx_unit_parse_unit_per: { + \bool_if:NT \l_siunitx_sticky_per_bool + { + \bool_if:NT \l_siunitx_per_bool { - \tl_set:Nx \_l_siunitx_tmpa_tl - { per- \int_use:N \_l_siunitx_unit_int } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl + { per- \int_use:N \l_siunitx_unit_int } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl { true } } } @@ -9206,20 +9248,20 @@ This work consists of the file siunitx.dtx % %\subsection{Unit formatting} % -%\begin{macro}{\_l_siunitx_preunit_tl} -%\begin{macro}{\_l_siunitx_unit_tl} -%\begin{macro}{\_l_siunitx_unit_current_tl} -%\begin{macro}{\_l_siunitx_unit_denominator_tl} -%\begin{macro}{\_l_siunitx_unit_numerator_tl} -%\begin{macro}{\_l_siunitx_unit_saved_tl} +%\begin{macro}{\l_siunitx_preunit_tl} +%\begin{macro}{\l_siunitx_unit_tl} +%\begin{macro}{\l_siunitx_unit_current_tl} +%\begin{macro}{\l_siunitx_unit_denominator_tl} +%\begin{macro}{\l_siunitx_unit_numerator_tl} +%\begin{macro}{\l_siunitx_unit_saved_tl} % Storage space for creating unit output. % \begin{macrocode} -\tl_new:N \_l_siunitx_preunit_tl -\tl_new:N \_l_siunitx_unit_tl -\tl_new:N \_l_siunitx_unit_current_tl -\tl_new:N \_l_siunitx_unit_denominator_tl -\tl_new:N \_l_siunitx_unit_numerator_tl -\tl_new:N \_l_siunitx_unit_saved_tl +\tl_new:N \l_siunitx_preunit_tl +\tl_new:N \l_siunitx_unit_tl +\tl_new:N \l_siunitx_unit_current_tl +\tl_new:N \l_siunitx_unit_denominator_tl +\tl_new:N \l_siunitx_unit_numerator_tl +\tl_new:N \l_siunitx_unit_saved_tl % \end{macrocode} %\end{macro} %\end{macro} @@ -9228,49 +9270,49 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_unit_denominator_int} -%\begin{macro}{\_l_siunitx_unit_numerator_int} +%\begin{macro}{\l_siunitx_unit_denominator_int} +%\begin{macro}{\l_siunitx_unit_numerator_int} % For tracking in case brackets are needed. % \begin{macrocode} -\int_new:N \_l_siunitx_unit_denominator_int -\int_new:N \_l_siunitx_unit_numerator_int +\int_new:N \l_siunitx_unit_denominator_int +\int_new:N \l_siunitx_unit_numerator_int % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_unit_prefix_int} -%\begin{macro}{\_l_siunitx_unit_prefix_base_int} -%\begin{macro}{\_l_siunitx_unit_prefix_current_tl} +%\begin{macro}{\l_siunitx_unit_prefix_int} +%\begin{macro}{\l_siunitx_unit_prefix_base_int} +%\begin{macro}{\l_siunitx_unit_prefix_current_tl} % Used to calculate the overall prefix value. % \begin{macrocode} -\int_new:N \_l_siunitx_unit_prefix_int -\int_new:N \_l_siunitx_unit_prefix_base_int -\tl_new:N \_l_siunitx_unit_prefix_current_tl +\int_new:N \l_siunitx_unit_prefix_int +\int_new:N \l_siunitx_unit_prefix_base_int +\tl_new:N \l_siunitx_unit_prefix_current_tl % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_unit_prefix_gram_int} +%\begin{macro}{\l_siunitx_unit_prefix_gram_int} % Formatting units is complicated by the fact that the kilogram is a % base unit, making conversions a little more awkward. % \begin{macrocode} -\int_new:N \_l_siunitx_unit_prefix_gram_int +\int_new:N \l_siunitx_unit_prefix_gram_int % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_per_auto_bool} -%\begin{macro}{\_l_siunitx_per_fraction_bool} -%\begin{macro}{\_l_siunitx_per_mode_tl} -%\begin{macro}{\_l_siunitx_qualifier_mode_tl} -%\begin{macro}{\_l_siunitx_per_two_parts_bool} +%\begin{macro}{\l_siunitx_per_auto_bool} +%\begin{macro}{\l_siunitx_per_fraction_bool} +%\begin{macro}{\l_siunitx_per_mode_tl} +%\begin{macro}{\l_siunitx_qualifier_mode_tl} +%\begin{macro}{\l_siunitx_per_two_parts_bool} % For saving settings. % \begin{macrocode} -\bool_new:N \_l_siunitx_per_auto_bool -\bool_new:N \_l_siunitx_per_fraction_bool -\tl_new:N \_l_siunitx_per_mode_tl -\bool_new:N \_l_siunitx_two_parts_bool -\tl_new:N \_l_siunitx_qualifier_mode_tl +\bool_new:N \l_siunitx_per_auto_bool +\bool_new:N \l_siunitx_per_fraction_bool +\tl_new:N \l_siunitx_per_mode_tl +\bool_new:N \l_siunitx_two_parts_bool +\tl_new:N \l_siunitx_qualifier_mode_tl % \end{macrocode} %\end{macro} %\end{macro} @@ -9278,68 +9320,68 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_unit_denominator_bracket_bool} -%\begin{macro}{\_l_siunitx_unit_separator_tl} -%\begin{macro}{\_l_siunitx_per_symbol_tl} +%\begin{macro}{\l_siunitx_unit_denominator_bracket_bool} +%\begin{macro}{\l_siunitx_unit_separator_tl} +%\begin{macro}{\l_siunitx_per_symbol_tl} % At this stage, output formatting options are created. % \begin{macrocode} \keys_define:nn { siunitx } { bracket-unit-denominator .bool_set:N - = \_l_siunitx_unit_denominator_bracket_bool, - inter-unit-separator .tl_set:N = \_l_siunitx_unit_separator_tl , + = \l_siunitx_unit_denominator_bracket_bool, + inter-unit-separator .tl_set:N = \l_siunitx_unit_separator_tl , per-mode .choice:, per-mode / fraction .code:n = { - \bool_set_false:N \_l_siunitx_per_auto_bool - \bool_set_true:N \_l_siunitx_per_fraction_bool - \bool_set_true:N \_l_siunitx_per_two_parts_bool - \tl_set:Nn \_l_siunitx_per_mode_tl { fraction } + \bool_set_false:N \l_siunitx_per_auto_bool + \bool_set_true:N \l_siunitx_per_fraction_bool + \bool_set_true:N \l_siunitx_per_two_parts_bool + \tl_set:Nn \l_siunitx_per_mode_tl { fraction } }, per-mode / power .meta:n = { per-mode = reciprocal } , per-mode / power-positive-first .meta:n = { per-mode = reciprocal-positive-first } , per-mode / reciprocal .code:n = { - \bool_set_false:N \_l_siunitx_per_auto_bool - \bool_set_false:N \_l_siunitx_per_fraction_bool - \bool_set_false:N \_l_siunitx_per_two_parts_bool - \tl_clear:N \_l_siunitx_per_mode_tl + \bool_set_false:N \l_siunitx_per_auto_bool + \bool_set_false:N \l_siunitx_per_fraction_bool + \bool_set_false:N \l_siunitx_per_two_parts_bool + \tl_clear:N \l_siunitx_per_mode_tl }, per-mode / reciprocal-positive-first .code:n = { - \bool_set_false:N \_l_siunitx_per_auto_bool - \bool_set_false:N \_l_siunitx_per_fraction_bool - \bool_set_true:N \_l_siunitx_per_two_parts_bool - \tl_clear:N \_l_siunitx_per_mode_tl + \bool_set_false:N \l_siunitx_per_auto_bool + \bool_set_false:N \l_siunitx_per_fraction_bool + \bool_set_true:N \l_siunitx_per_two_parts_bool + \tl_clear:N \l_siunitx_per_mode_tl }, per-mode / repeated-symbol .code:n = { - \bool_set_false:N \_l_siunitx_per_auto_bool - \bool_set_false:N \_l_siunitx_per_fraction_bool - \bool_set_false:N \_l_siunitx_per_two_parts_bool - \tl_set:Nn \_l_siunitx_per_mode_tl { repeat } + \bool_set_false:N \l_siunitx_per_auto_bool + \bool_set_false:N \l_siunitx_per_fraction_bool + \bool_set_false:N \l_siunitx_per_two_parts_bool + \tl_set:Nn \l_siunitx_per_mode_tl { repeat } }, per-mode / symbol .code:n = { - \bool_set_false:N \_l_siunitx_per_auto_bool - \bool_set_true:N \_l_siunitx_per_fraction_bool - \bool_set_true:N \_l_siunitx_per_two_parts_bool - \tl_set:Nn \_l_siunitx_per_mode_tl { symbol } + \bool_set_false:N \l_siunitx_per_auto_bool + \bool_set_true:N \l_siunitx_per_fraction_bool + \bool_set_true:N \l_siunitx_per_two_parts_bool + \tl_set:Nn \l_siunitx_per_mode_tl { symbol } }, per-mode / symbol-or-fraction .code:n = { - \bool_set_true:N \_l_siunitx_per_auto_bool - \bool_set_true:N \_l_siunitx_per_fraction_bool - \bool_set_true:N \_l_siunitx_per_two_parts_bool + \bool_set_true:N \l_siunitx_per_auto_bool + \bool_set_true:N \l_siunitx_per_fraction_bool + \bool_set_true:N \l_siunitx_per_two_parts_bool }, - per-symbol .tl_set:N = \_l_siunitx_per_symbol_tl, + per-symbol .tl_set:N = \l_siunitx_per_symbol_tl, qualifier-mode .choice:, qualifier-mode / brackets .code:n = - { \tl_set:Nn \_l_siunitx_qualifier_mode_tl { brackets } }, + { \tl_set:Nn \l_siunitx_qualifier_mode_tl { brackets } }, qualifier-mode / space .code:n = - { \tl_set:Nn \_l_siunitx_qualifier_mode_tl { space } }, + { \tl_set:Nn \l_siunitx_qualifier_mode_tl { space } }, qualifier-mode / subscript .code:n = - { \tl_set:Nn \_l_siunitx_qualifier_mode_tl { subscript } }, + { \tl_set:Nn \l_siunitx_qualifier_mode_tl { subscript } }, } \keys_set:nn { siunitx } { bracket-unit-denominator = true, @@ -9353,151 +9395,151 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format:} +%\begin{macro}{\siunitx_unit_format:} % Most of the work is done by the loop, with a little tidying up for % fraction-like output. Before starting the loop, there is a check for % the case of a single reciprocal unit when per is set up to create a % symbol. In that special case, the space between a number and a unit % has to be removed. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format: { - \_siunitx_unit_format_init: - \intexpr_compare:nNnT { \_l_siunitx_unit_int } = { 1 } +\cs_new_protected_nopar:Npn \siunitx_unit_format: { + \siunitx_unit_format_init: + \intexpr_compare:nNnT { \l_siunitx_unit_int } = { 1 } { - \tl_if_eq:VnT \_l_siunitx_per_mode_tl { symbol } + \tl_if_eq:VnT \l_siunitx_per_mode_tl { symbol } { - \prop_if_in:NnT \_l_siunitx_unit_prop { per-1 } - { \tl_clear:N \_l_siunitx_number_unit_separator_tl } + \prop_if_in:NnT \l_siunitx_unit_prop { per-1 } + { \tl_clear:N \l_siunitx_number_unit_separator_tl } } } - \intexpr_while_do:nNnn { \_l_siunitx_unit_int } > { 0 } + \intexpr_while_do:nNnn { \l_siunitx_unit_int } > { 0 } { - \_siunitx_unit_format_prefix: - \_siunitx_unit_format_symbol: - \_siunitx_unit_format_qualifier: - \_siunitx_unit_format_power: - \_siunitx_unit_format_add: - \int_decr:N \_l_siunitx_unit_int + \siunitx_unit_format_prefix: + \siunitx_unit_format_symbol: + \siunitx_unit_format_qualifier: + \siunitx_unit_format_power: + \siunitx_unit_format_add: + \int_decr:N \l_siunitx_unit_int } - \bool_if:NT \_l_siunitx_per_two_parts_bool + \bool_if:NT \l_siunitx_per_two_parts_bool { - \bool_if:NTF \_l_siunitx_per_fraction_bool - { \_siunitx_unit_format_fraction: } - { \_siunitx_unit_format_sorted: } + \bool_if:NTF \l_siunitx_per_fraction_bool + { \siunitx_unit_format_fraction: } + { \siunitx_unit_format_sorted: } } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_add:} -%\begin{macro}[aux]{\_siunitx_unit_format_add_aux:n} +%\begin{macro}{\siunitx_unit_format_add:} +%\begin{macro}[aux]{\siunitx_unit_format_add_aux:n} % Adding the current unit to the output means checking where it goes. % The odd code when adding a space is to pick up repeated per symbols, % which need to suppress the space. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_add: { - \bool_if:NTF \_l_siunitx_per_two_parts_bool +\cs_new_protected_nopar:Npn \siunitx_unit_format_add: { + \bool_if:NTF \l_siunitx_per_two_parts_bool { - \tl_set:Nx \_l_siunitx_tmpb_tl - { per- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVTF \_l_siunitx_unit_prop \_l_siunitx_tmpb_tl + \tl_set:Nx \l_siunitx_tmpb_tl + { per- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVTF \l_siunitx_unit_prop \l_siunitx_tmpb_tl { - \_siunitx_unit_format_add_aux:n { _denominator } - \int_incr:N \_l_siunitx_unit_denominator_int + \siunitx_unit_format_add_aux:n { _denominator } + \int_incr:N \l_siunitx_unit_denominator_int } { - \_siunitx_unit_format_add_aux:n { _numerator } - \int_incr:N \_l_siunitx_unit_numerator_int + \siunitx_unit_format_add_aux:n { _numerator } + \int_incr:N \l_siunitx_unit_numerator_int } } - { \_siunitx_unit_format_add_aux:n { } } - \tl_clear:N \_l_siunitx_unit_current_tl + { \siunitx_unit_format_add_aux:n { } } + \tl_clear:N \l_siunitx_unit_current_tl } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_add_aux:n #1 { - \tl_if_empty:cF { _l_siunitx_unit #1 _tl } +\cs_new_protected_nopar:Npn \siunitx_unit_format_add_aux:n #1 { + \tl_if_empty:cF { l_siunitx_unit #1 _tl } { - \tl_if_eq:nVTF { repeat } \_l_siunitx_per_mode_tl + \tl_if_eq:nVTF { repeat } \l_siunitx_per_mode_tl { - \tl_set:Nx \_l_siunitx_tmpa_tl - { per- \intexpr_eval:n { \_l_siunitx_unit_int + 1 } } - \prop_if_in:NVF \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl + { per- \intexpr_eval:n { \l_siunitx_unit_int + 1 } } + \prop_if_in:NVF \l_siunitx_unit_prop \l_siunitx_tmpa_tl { - \_siunitx_tl_put_right_math:NV \_l_siunitx_unit_current_tl - \_l_siunitx_unit_separator_tl + \siunitx_tl_put_right_math:NV \l_siunitx_unit_current_tl + \l_siunitx_unit_separator_tl } } { - \_siunitx_tl_put_right_math:NV \_l_siunitx_unit_current_tl - \_l_siunitx_unit_separator_tl + \siunitx_tl_put_right_math:NV \l_siunitx_unit_current_tl + \l_siunitx_unit_separator_tl } } - \tl_put_left:cV { _l_siunitx_unit #1 _tl } \_l_siunitx_unit_current_tl + \tl_put_left:cV { l_siunitx_unit #1 _tl } \l_siunitx_unit_current_tl } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_fraction:} -%\begin{macro}[aux]{\_siunitx_unit_format_fraction:} -%\begin{macro}[aux]{\_siunitx_unit_format_symbol:} -%\begin{macro}[aux]{\_siunitx_unit_format_symbol_aux:} -%\begin{macro}[aux]{\_siunitx_unit_format_symbol_aux_alt:} +%\begin{macro}{\siunitx_unit_format_fraction:} +%\begin{macro}[aux]{\siunitx_unit_format_fraction:} +%\begin{macro}[aux]{\siunitx_unit_format_symbol:} +%\begin{macro}[aux]{\siunitx_unit_format_symbol_aux:} +%\begin{macro}[aux]{\siunitx_unit_format_symbol_aux_alt:} % When making (\emph{psuedo}-)fractions there is a check to place a % \( 1 \) in the numerator is it's blank. For symbol mode, this is % only done if there is no number. Then some construction work. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_fraction: { - \intexpr_compare:nNnTF { \_l_siunitx_unit_denominator_int } > { 0 } +\cs_new_protected_nopar:Npn \siunitx_unit_format_fraction: { + \intexpr_compare:nNnTF { \l_siunitx_unit_denominator_int } > { 0 } { \use:c - { _siunitx_unit_format_fraction_ \_l_siunitx_per_mode_tl : } + { siunitx_unit_format_fraction_ \l_siunitx_per_mode_tl : } } - { \tl_set_eq:NN \_l_siunitx_unit_tl \_l_siunitx_unit_numerator_tl } + { \tl_set_eq:NN \l_siunitx_unit_tl \l_siunitx_unit_numerator_tl } } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_fraction_fraction: { - \tl_if_empty:NT \_l_siunitx_unit_numerator_tl - { \tl_set:Nn \_l_siunitx_unit_numerator_tl { 1 } } - \tl_set:Nx \_l_siunitx_unit_numerator_tl - { { \exp_not:V \_l_siunitx_unit_numerator_tl } } - \tl_put_left:Nn \_l_siunitx_unit_numerator_tl - { \_siunitx_print:nn { unit } } - \tl_set:Nx \_l_siunitx_unit_numerator_tl - { { \exp_not:V \_l_siunitx_unit_numerator_tl } } - \tl_set:Nx \_l_siunitx_unit_denominator_tl - { { \exp_not:V \_l_siunitx_unit_denominator_tl } } - \tl_put_left:Nn \_l_siunitx_unit_denominator_tl - { \_siunitx_print:nn { unit } } - \tl_set:Nx \_l_siunitx_unit_denominator_tl - { { \exp_not:V \_l_siunitx_unit_denominator_tl } } - \tl_set:Nn \_l_siunitx_unit_tl { \_siunitx_fraction:nn } - \tl_put_right:NV \_l_siunitx_unit_tl \_l_siunitx_unit_numerator_tl - \tl_put_right:NV \_l_siunitx_unit_tl \_l_siunitx_unit_denominator_tl - \tl_set:Nx \_l_siunitx_unit_tl - { \exp_not:N \ensuremath { \exp_not:V \_l_siunitx_unit_tl } } +\cs_new_protected_nopar:Npn \siunitx_unit_format_fraction_fraction: { + \tl_if_empty:NT \l_siunitx_unit_numerator_tl + { \tl_set:Nn \l_siunitx_unit_numerator_tl { 1 } } + \tl_set:Nx \l_siunitx_unit_numerator_tl + { { \exp_not:V \l_siunitx_unit_numerator_tl } } + \tl_put_left:Nn \l_siunitx_unit_numerator_tl + { \siunitx_print:nn { unit } } + \tl_set:Nx \l_siunitx_unit_numerator_tl + { { \exp_not:V \l_siunitx_unit_numerator_tl } } + \tl_set:Nx \l_siunitx_unit_denominator_tl + { { \exp_not:V \l_siunitx_unit_denominator_tl } } + \tl_put_left:Nn \l_siunitx_unit_denominator_tl + { \siunitx_print:nn { unit } } + \tl_set:Nx \l_siunitx_unit_denominator_tl + { { \exp_not:V \l_siunitx_unit_denominator_tl } } + \tl_set:Nn \l_siunitx_unit_tl { \siunitx_fraction:nn } + \tl_put_right:NV \l_siunitx_unit_tl \l_siunitx_unit_numerator_tl + \tl_put_right:NV \l_siunitx_unit_tl \l_siunitx_unit_denominator_tl + \tl_set:Nx \l_siunitx_unit_tl + { \exp_not:N \ensuremath { \exp_not:V \l_siunitx_unit_tl } } } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_fraction_symbol: { - \_siunitx_unit_format_fraction_symbol_aux: - \intexpr_compare:nNnT { \_l_siunitx_unit_denominator_int } > { 1 } +\cs_new_protected_nopar:Npn \siunitx_unit_format_fraction_symbol: { + \siunitx_unit_format_fraction_symbol_aux: + \intexpr_compare:nNnT { \l_siunitx_unit_denominator_int } > { 1 } { - \bool_if:NT \_l_siunitx_unit_denominator_bracket_bool + \bool_if:NT \l_siunitx_unit_denominator_bracket_bool { - \_siunitx_tl_put_left_math:NV \_l_siunitx_unit_denominator_tl - \_l_siunitx_bracket_open_tl - \_siunitx_tl_put_right_math:NV \_l_siunitx_unit_denominator_tl - \_l_siunitx_bracket_close_tl + \siunitx_tl_put_left_math:NV \l_siunitx_unit_denominator_tl + \l_siunitx_bracket_open_tl + \siunitx_tl_put_right_math:NV \l_siunitx_unit_denominator_tl + \l_siunitx_bracket_close_tl } } - \tl_set_eq:NN \_l_siunitx_unit_tl \_l_siunitx_unit_numerator_tl - \_siunitx_tl_put_right_math:NV \_l_siunitx_unit_tl - \_l_siunitx_per_symbol_tl - \tl_put_right:NV \_l_siunitx_unit_tl \_l_siunitx_unit_denominator_tl + \tl_set_eq:NN \l_siunitx_unit_tl \l_siunitx_unit_numerator_tl + \siunitx_tl_put_right_math:NV \l_siunitx_unit_tl + \l_siunitx_per_symbol_tl + \tl_put_right:NV \l_siunitx_unit_tl \l_siunitx_unit_denominator_tl } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_fraction_symbol_aux: { +\cs_new_protected_nopar:Npn \siunitx_unit_format_fraction_symbol_aux: { } -\cs_set_protected_nopar:Npn - \_siunitx_unit_format_fraction_symbol_aux_alt: { - \tl_if_empty:NT \_l_siunitx_unit_numerator_tl - { \tl_set:Nn \_l_siunitx_unit_numerator_tl { 1 } } +\cs_new_protected_nopar:Npn + \siunitx_unit_format_fraction_symbol_aux_alt: { + \tl_if_empty:NT \l_siunitx_unit_numerator_tl + { \tl_set:Nn \l_siunitx_unit_numerator_tl { 1 } } } % \end{macrocode} %\end{macro} @@ -9506,78 +9548,78 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_init:} +%\begin{macro}{\siunitx_unit_format_init:} % The normal initialisation stuff. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_init: { - \tl_clear:N \_l_siunitx_unit_tl - \tl_clear:N \_l_siunitx_unit_current_tl - \tl_clear:N \_l_siunitx_unit_denominator_tl - \int_zero:N \_l_siunitx_unit_prefix_gram_int - \tl_clear:N \_l_siunitx_unit_numerator_tl - \int_zero:N \_l_siunitx_unit_prefix_base_int - \int_zero:N \_l_siunitx_unit_prefix_int - \int_zero:N \_l_siunitx_unit_denominator_int - \int_zero:N \_l_siunitx_unit_numerator_int - \tl_map_function:NN \_l_siunitx_declare_list_tl - \_siunitx_unit_print_literal_aux:N +\cs_new_protected_nopar:Npn \siunitx_unit_format_init: { + \tl_clear:N \l_siunitx_unit_tl + \tl_clear:N \l_siunitx_unit_current_tl + \tl_clear:N \l_siunitx_unit_denominator_tl + \int_zero:N \l_siunitx_unit_prefix_gram_int + \tl_clear:N \l_siunitx_unit_numerator_tl + \int_zero:N \l_siunitx_unit_prefix_base_int + \int_zero:N \l_siunitx_unit_prefix_int + \int_zero:N \l_siunitx_unit_denominator_int + \int_zero:N \l_siunitx_unit_numerator_int + \tl_map_function:NN \l_siunitx_declare_list_tl + \siunitx_unit_print_literal_aux:N } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_literal:n} -%\begin{macro}{\_siunitx_unit_format_literal_aux:N} +%\begin{macro}{\siunitx_unit_format_literal:n} +%\begin{macro}{\siunitx_unit_format_literal_aux:N} % If the unit given contains anything which is not a unit macro, then % any unit macros that are there simply dump literal meanings. There is % then a little work to do sorting out "~" and \texttt{.} characters at % the outer level. % \begin{macrocode} \char_make_active:N \~ -\cs_set_protected:Npn \_siunitx_unit_format_literal:n #1 { - \int_zero:N \_l_siunitx_unit_prefix_int - \tl_map_function:NN \_l_siunitx_declare_list_tl - \_siunitx_unit_print_literal_aux:N - \tl_set:Nn \_l_siunitx_unit_tl {#1} - \tl_set:Nx \_l_siunitx_tmpa_tl - { - \exp_not:N \_siunitx_ensuremath:n - { \exp_not:V \_l_siunitx_unit_separator_tl } - } - \tl_replace_all_in:NnV \_l_siunitx_unit_tl { . } - \_l_siunitx_tmpa_tl - \tl_replace_all_in:NnV \_l_siunitx_unit_tl { ~ } - \_l_siunitx_tmpa_tl - \_siunitx_unit_format_literal_extras: -} -\cs_set_protected:Npn \_siunitx_unit_print_literal_aux:N #1 { - \cs_set_eq:Nc #1 { _siunitx_ \token_to_str:N #1 _literal:w } +\cs_new_protected:Npn \siunitx_unit_format_literal:n #1 { + \int_zero:N \l_siunitx_unit_prefix_int + \tl_map_function:NN \l_siunitx_declare_list_tl + \siunitx_unit_print_literal_aux:N + \tl_set:Nn \l_siunitx_unit_tl {#1} + \tl_set:Nx \l_siunitx_tmpa_tl + { + \exp_not:N \siunitx_ensuremath:n + { \exp_not:V \l_siunitx_unit_separator_tl } + } + \tl_replace_all_in:NnV \l_siunitx_unit_tl { . } + \l_siunitx_tmpa_tl + \tl_replace_all_in:NnV \l_siunitx_unit_tl { ~ } + \l_siunitx_tmpa_tl + \siunitx_unit_format_literal_extras: +} +\cs_new_protected:Npn \siunitx_unit_print_literal_aux:N #1 { + \cs_set_eq:Nc #1 { siunitx_ \token_to_str:N #1 _literal:w } } \char_make_space:N \~ % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_literal_extras:} -%\begin{macro}[aux]{\_siunitx_unit_format_literal_extras_aux:nN} +%\begin{macro}{\siunitx_unit_format_literal_extras:} +%\begin{macro}[aux]{\siunitx_unit_format_literal_extras_aux:nN} % The code here deals with characters outside the normal range that % can appear in units in UTF-8 and related encodings. The idea is to % do a search and replace, thus avoiding any active characters. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_literal_extras: { - \_siunitx_unit_format_literal_extras_aux:nN { 176 } +\cs_new_protected_nopar:Npn \siunitx_unit_format_literal_extras: { + \siunitx_unit_format_literal_extras_aux:nN { 176 } \SIUnitSymbolDegree - \_siunitx_unit_format_literal_extras_aux:nN { 181 } + \siunitx_unit_format_literal_extras_aux:nN { 181 } \SIUnitSymbolMicro - \_siunitx_unit_format_literal_extras_aux:nN { 197 } + \siunitx_unit_format_literal_extras_aux:nN { 197 } \SIUnitSymbolAngstrom } -\cs_set_protected_nopar:Npn - \_siunitx_unit_format_literal_extras_aux:nN #1#2 { +\cs_new_protected_nopar:Npn + \siunitx_unit_format_literal_extras_aux:nN #1#2 { \char_set_lccode:nn { `\@ } {#1} \tl_to_lowercase:n { - \tl_replace_all_in:NnV \_l_siunitx_unit_tl { @ } - \_l_siunitx_unit_tl + \tl_replace_all_in:NnV \l_siunitx_unit_tl { @ } + \l_siunitx_unit_tl } } \xetex_if_engine:F { @@ -9585,15 +9627,15 @@ This work consists of the file siunitx.dtx { \@ifpackageloaded { inputenc } { - \tl_set:Nn \_l_siunitx_tmpa_tl { latin1 , latin5 , latin9 } - \clist_if_in:NVF \_l_siunitx_tmpa_tl \inputencodingname + \tl_set:Nn \l_siunitx_tmpa_tl { latin1 , latin5 , latin9 } + \clist_if_in:NVF \l_siunitx_tmpa_tl \inputencodingname { - \cs_set_eq:NN \_siunitx_unit_format_literal_extras: + \cs_set_eq:NN \siunitx_unit_format_literal_extras: \scan_stop: } } { - \cs_set_eq:NN \_siunitx_unit_format_literal_extras: + \cs_set_eq:NN \siunitx_unit_format_literal_extras: \scan_stop: } } @@ -9602,153 +9644,153 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_power:} +%\begin{macro}{\siunitx_unit_format_power:} % To format powers, there are a few issues: are brackets needed, is % the power reciprocal and is fraction-formatting in operation. Repeated % per symbols make life a little more complex, as they have to be % handled here as well. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_power: { - \tl_set:Nx \_l_siunitx_tmpa_tl - { power- \int_use:N \_l_siunitx_unit_int } - \prop_get:NVN \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl - \_l_siunitx_tmpa_tl - \quark_if_no_value:NTF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_power: { + \tl_set:Nx \l_siunitx_tmpa_tl + { power- \int_use:N \l_siunitx_unit_int } + \prop_get:NVN \l_siunitx_unit_prop \l_siunitx_tmpa_tl + \l_siunitx_tmpa_tl + \quark_if_no_value:NTF \l_siunitx_tmpa_tl { - \tl_set:Nx \_l_siunitx_tmpa_tl - { per- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVT \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl + { per- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVT \l_siunitx_unit_prop \l_siunitx_tmpa_tl { - \tl_set:Nn \_l_siunitx_tmpa_tl { 1 } - \_siunitx_unit_format_power_aux: + \tl_set:Nn \l_siunitx_tmpa_tl { 1 } + \siunitx_unit_format_power_aux: } } - { \_siunitx_unit_format_power_aux: } + { \siunitx_unit_format_power_aux: } } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_unit_format_power_aux:} -%\begin{macro}[aux]{\_siunitx_unit_format_power_aux:n} +%\begin{macro}[aux]{\siunitx_unit_format_power_aux:} +%\begin{macro}[aux]{\siunitx_unit_format_power_aux:n} % The auxiliary function needs to make sure that the printing routine % prints the power as a number, not as text: the two modes may be % different. A search and replace function is needed for superscripts % in text mode so that negative signs get printed correctly. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_power_aux: { - \tl_if_eq:nVTF { repeat } \_l_siunitx_per_mode_tl - { \_siunitx_unit_format_power_repeat: } - { \_siunitx_unit_format_power_per: } - \tl_if_eq:nVF { 1 } \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_power_aux: { + \tl_if_eq:nVTF { repeat } \l_siunitx_per_mode_tl + { \siunitx_unit_format_power_repeat: } + { \siunitx_unit_format_power_per: } + \tl_if_eq:nVF { 1 } \l_siunitx_tmpa_tl { - \_siunitx_unit_format_power_brackets: - \tl_put_right:Nx \_l_siunitx_unit_current_tl + \siunitx_unit_format_power_brackets: + \tl_put_right:Nx \l_siunitx_unit_current_tl { ^ { - \_siunitx_unit_format_power_aux:n - { \exp_not:V \_l_siunitx_tmpa_tl } + \siunitx_unit_format_power_aux:n + { \exp_not:V \l_siunitx_tmpa_tl } } } } } -\cs_set_protected:Npn \_siunitx_unit_format_power_aux:n #1 { - \bool_if:NTF \_l_siunitx_number_math_mode_bool - { \_siunitx_print:nn { number } {#1} } +\cs_new_protected:Npn \siunitx_unit_format_power_aux:n #1 { + \bool_if:NTF \l_siunitx_number_math_mode_bool + { \siunitx_print:nn { number } {#1} } { - \tl_set:Nn \_l_siunitx_tmpa_tl {#1} - \tl_replace_all_in:Nnn \_l_siunitx_tmpa_tl { - } - { \text { \_c_siunitx_minus_tl } } - \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl + \tl_set:Nn \l_siunitx_tmpa_tl {#1} + \tl_replace_all_in:Nnn \l_siunitx_tmpa_tl { - } + { \text { \c_siunitx_minus_tl } } + \siunitx_print:nV { number } \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}[aux]{\_siunitx_unit_format_power_brackets:} +%\begin{macro}[aux]{\siunitx_unit_format_power_brackets:} % A check is made for a qualifier with a space, which needs brackets % if there is also a power. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_power_brackets: { - \tl_set:Nx \_l_siunitx_tmpb_tl - { bracket- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVT \_l_siunitx_unit_prop \_l_siunitx_tmpb_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_power_brackets: { + \tl_set:Nx \l_siunitx_tmpb_tl + { bracket- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVT \l_siunitx_unit_prop \l_siunitx_tmpb_tl { - \_siunitx_tl_put_left_math:NV \_l_siunitx_unit_current_tl - \_l_siunitx_bracket_open_tl - \_siunitx_tl_put_right_math:NV \_l_siunitx_unit_current_tl - \_l_siunitx_bracket_close_tl + \siunitx_tl_put_left_math:NV \l_siunitx_unit_current_tl + \l_siunitx_bracket_open_tl + \siunitx_tl_put_right_math:NV \l_siunitx_unit_current_tl + \l_siunitx_bracket_close_tl } } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_unit_format_power_per:} -%\begin{macro}[aux]{\_siunitx_unit_format_power_repeat:} +%\begin{macro}[aux]{\siunitx_unit_format_power_per:} +%\begin{macro}[aux]{\siunitx_unit_format_power_repeat:} % For dealing with \cs{per} and repeated \cs{per} symbols. The sign % change does not use any numbers, as this makes life easier with % non-integer values. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_power_per: { - \tl_set:Nx \_l_siunitx_tmpb_tl - { per- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVT \_l_siunitx_unit_prop \_l_siunitx_tmpb_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_power_per: { + \tl_set:Nx \l_siunitx_tmpb_tl + { per- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVT \l_siunitx_unit_prop \l_siunitx_tmpb_tl { - \bool_if:NF \_l_siunitx_per_fraction_bool + \bool_if:NF \l_siunitx_per_fraction_bool { - \tl_if_in:NnTF \_l_siunitx_tmpa_tl { - } + \tl_if_in:NnTF \l_siunitx_tmpa_tl { - } { - \cs_set:Npn \_siunitx_tmp:w ##1 - ##2 \q_stop - { \tl_set:Nn \_l_siunitx_tmpa_tl {##2} } - \exp_afer:wN \_siunitx_tmp:w \_l_siunitx_tmpa_tl \q_stop + \cs_set:Npn \siunitx_tmp:w ##1 - ##2 \q_stop + { \tl_set:Nn \l_siunitx_tmpa_tl {##2} } + \exp_afer:wN \siunitx_tmp:w \l_siunitx_tmpa_tl \q_stop } - { \tl_put_left:Nn \_l_siunitx_tmpa_tl { - } } + { \tl_put_left:Nn \l_siunitx_tmpa_tl { - } } } } } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_power_repeat: { - \tl_set:Nx \_l_siunitx_tmpb_tl - { per- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVT \_l_siunitx_unit_prop \_l_siunitx_tmpb_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_power_repeat: { + \tl_set:Nx \l_siunitx_tmpb_tl + { per- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVT \l_siunitx_unit_prop \l_siunitx_tmpb_tl { - \_siunitx_tl_put_left_math:NV \_l_siunitx_unit_current_tl - \_l_siunitx_per_symbol_tl + \siunitx_tl_put_left_math:NV \l_siunitx_unit_current_tl + \l_siunitx_per_symbol_tl } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_prefix:} -%\begin{macro}[aux]{\_siunitx_unit_format_prefix_number:} -%\begin{macro}[aux]{\_siunitx_unit_format_prefix_number_calc:} -%\begin{macro}[aux]{\_siunitx_unit_format_prefix_symbol:} +%\begin{macro}{\siunitx_unit_format_prefix:} +%\begin{macro}[aux]{\siunitx_unit_format_prefix_number:} +%\begin{macro}[aux]{\siunitx_unit_format_prefix_number_calc:} +%\begin{macro}[aux]{\siunitx_unit_format_prefix_symbol:} % If there is a prefix, it is added to the output. When using numerical % output, some conversion is needed instead. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_prefix: { - \tl_set:Nx \_l_siunitx_tmpa_tl - { prefix- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVT \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_prefix: { + \tl_set:Nx \l_siunitx_tmpa_tl + { prefix- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVT \l_siunitx_unit_prop \l_siunitx_tmpa_tl { - \prop_get:NVN \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl - \_l_siunitx_unit_prefix_current_tl - \bool_if:NTF \_l_siunitx_prefix_symbols_bool - { \_siunitx_unit_format_prefix_symbol: } - { \_siunitx_unit_format_prefix_number: } + \prop_get:NVN \l_siunitx_unit_prop \l_siunitx_tmpa_tl + \l_siunitx_unit_prefix_current_tl + \bool_if:NTF \l_siunitx_prefix_symbols_bool + { \siunitx_unit_format_prefix_symbol: } + { \siunitx_unit_format_prefix_number: } } } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_prefix_number: { - \tl_set:Nx \_l_siunitx_tmpa_tl - { prefix-base- \int_use:N \_l_siunitx_unit_int } - \prop_get:NVN \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl - \_l_siunitx_tmpa_tl - \intexpr_compare:nNnT { \_l_siunitx_unit_prefix_base_int } = { 0 } +\cs_new_protected_nopar:Npn \siunitx_unit_format_prefix_number: { + \tl_set:Nx \l_siunitx_tmpa_tl + { prefix-base- \int_use:N \l_siunitx_unit_int } + \prop_get:NVN \l_siunitx_unit_prop \l_siunitx_tmpa_tl + \l_siunitx_tmpa_tl + \intexpr_compare:nNnT { \l_siunitx_unit_prefix_base_int } = { 0 } { - \int_set:Nn \_l_siunitx_unit_prefix_base_int - { \_l_siunitx_tmpa_tl } + \int_set:Nn \l_siunitx_unit_prefix_base_int + { \l_siunitx_tmpa_tl } } \intexpr_compare:nNnTF - { \_l_siunitx_unit_prefix_base_int } = { \_l_siunitx_tmpa_tl } - { \_siunitx_unit_format_prefix_number_calc: } + { \l_siunitx_unit_prefix_base_int } = { \l_siunitx_tmpa_tl } + { \siunitx_unit_format_prefix_number_calc: } { \msg_error:nn { siunitx } { prefix-base-mismatch } } } % \end{macrocode} @@ -9757,51 +9799,51 @@ This work consists of the file siunitx.dtx % is the kilogram and so there is some code to convert the number % back correctly. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_prefix_number_calc: { - \tl_set:Nx \_l_siunitx_tmpa_tl - { power- \int_use:N \_l_siunitx_unit_int } - \prop_get:NVN \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl - \_l_siunitx_tmpa_tl - \quark_if_no_value:NT \_l_siunitx_tmpa_tl - { \tl_set:Nn \_l_siunitx_tmpa_tl { 1 } } - \tl_set:Nx \_l_siunitx_tmpb_tl - { unit- \int_use:N \_l_siunitx_unit_int } - \prop_get:NVN \_l_siunitx_unit_prop \_l_siunitx_tmpb_tl - \_l_siunitx_tmpb_tl - \tl_if_eq:nVT { \gram } \_l_siunitx_tmpb_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_prefix_number_calc: { + \tl_set:Nx \l_siunitx_tmpa_tl + { power- \int_use:N \l_siunitx_unit_int } + \prop_get:NVN \l_siunitx_unit_prop \l_siunitx_tmpa_tl + \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_set:Nn \l_siunitx_tmpa_tl { 1 } } + \tl_set:Nx \l_siunitx_tmpb_tl + { unit- \int_use:N \l_siunitx_unit_int } + \prop_get:NVN \l_siunitx_unit_prop \l_siunitx_tmpb_tl + \l_siunitx_tmpb_tl + \tl_if_eq:nVT { \gram } \l_siunitx_tmpb_tl { - \tl_set:Nx \_l_siunitx_unit_prefix_current_tl - { \intexpr_eval:n { \_l_siunitx_unit_prefix_current_tl - 3 } } - \tl_set:Nx \_l_siunitx_tmpb_tl - { symbol- \int_use:N \_l_siunitx_unit_int } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpb_tl { kg } + \tl_set:Nx \l_siunitx_unit_prefix_current_tl + { \intexpr_eval:n { \l_siunitx_unit_prefix_current_tl - 3 } } + \tl_set:Nx \l_siunitx_tmpb_tl + { symbol- \int_use:N \l_siunitx_unit_int } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpb_tl { kg } } - \tl_set:Nx \_l_siunitx_unit_prefix_current_tl + \tl_set:Nx \l_siunitx_unit_prefix_current_tl { \intexpr_eval:n - { \_l_siunitx_unit_prefix_current_tl * \_l_siunitx_tmpa_tl } + { \l_siunitx_unit_prefix_current_tl * \l_siunitx_tmpa_tl } } - \tl_set:Nx \_l_siunitx_tmpa_tl - { per- \int_use:N \_l_siunitx_unit_int } - \prop_if_in:NVTF \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl + { per- \int_use:N \l_siunitx_unit_int } + \prop_if_in:NVTF \l_siunitx_unit_prop \l_siunitx_tmpa_tl { - \int_set:Nn \_l_siunitx_unit_prefix_int + \int_set:Nn \l_siunitx_unit_prefix_int { - \_l_siunitx_unit_prefix_int - - \_l_siunitx_unit_prefix_current_tl + \l_siunitx_unit_prefix_int + - \l_siunitx_unit_prefix_current_tl } } { - \int_set:Nn \_l_siunitx_unit_prefix_int + \int_set:Nn \l_siunitx_unit_prefix_int { - \_l_siunitx_unit_prefix_int - + \_l_siunitx_unit_prefix_current_tl + \l_siunitx_unit_prefix_int + + \l_siunitx_unit_prefix_current_tl } } } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_prefix_symbol: { - \tl_set_eq:NN \_l_siunitx_unit_current_tl - \_l_siunitx_unit_prefix_current_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_prefix_symbol: { + \tl_set_eq:NN \l_siunitx_unit_current_tl + \l_siunitx_unit_prefix_current_tl } % \end{macrocode} %\end{macro} @@ -9809,42 +9851,42 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_qualifier:} -%\begin{macro}{\_siunitx_unit_format_qualifier_brackets:} -%\begin{macro}{\_siunitx_unit_format_qualifier_space:} -%\begin{macro}{\_siunitx_unit_format_qualifier_subscript:} +%\begin{macro}{\siunitx_unit_format_qualifier:} +%\begin{macro}{\siunitx_unit_format_qualifier_brackets:} +%\begin{macro}{\siunitx_unit_format_qualifier_space:} +%\begin{macro}{\siunitx_unit_format_qualifier_subscript:} % Three methods for showing qualifiers, each with its own sub-function. % For the \texttt{space} methods, a warning is set in the property list % as if there is a power then some brackets will be needed. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_qualifier: { - \tl_set:Nx \_l_siunitx_tmpa_tl - { qualifier- \int_use:N \_l_siunitx_unit_int } - \prop_get:NVN \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl - \_l_siunitx_tmpa_tl - \quark_if_no_value:NF \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_qualifier: { + \tl_set:Nx \l_siunitx_tmpa_tl + { qualifier- \int_use:N \l_siunitx_unit_int } + \prop_get:NVN \l_siunitx_unit_prop \l_siunitx_tmpa_tl + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl { \use:c { _siunitx_unit_format_qualifier_ - \_l_siunitx_qualifier_mode_tl : + \l_siunitx_qualifier_mode_tl : } } } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_qualifier_brackets: { - \_siunitx_tl_put_right_math:NV \_l_siunitx_unit_current_tl - \_l_siunitx_bracket_open_tl - \tl_put_right:NV \_l_siunitx_unit_current_tl \_l_siunitx_tmpa_tl - \_siunitx_tl_put_right_math:NV \_l_siunitx_unit_current_tl - \_l_siunitx_bracket_close_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_qualifier_brackets: { + \siunitx_tl_put_right_math:NV \l_siunitx_unit_current_tl + \l_siunitx_bracket_open_tl + \tl_put_right:NV \l_siunitx_unit_current_tl \l_siunitx_tmpa_tl + \siunitx_tl_put_right_math:NV \l_siunitx_unit_current_tl + \l_siunitx_bracket_close_tl } \char_make_active:N \~ -\cs_set_protected_nopar:Npn \_siunitx_unit_format_qualifier_space: { - \tl_put_right:Nn \_l_siunitx_unit_current_tl { \text { ~ } } - \tl_put_right:NV \_l_siunitx_unit_current_tl \_l_siunitx_tmpa_tl - \tl_set:Nx \_l_siunitx_tmpa_tl - { bracket- \int_use:N \_l_siunitx_unit_int } - \prop_put:NVn \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl { true } +\cs_new_protected_nopar:Npn \siunitx_unit_format_qualifier_space: { + \tl_put_right:Nn \l_siunitx_unit_current_tl { \text { ~ } } + \tl_put_right:NV \l_siunitx_unit_current_tl \l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl + { bracket- \int_use:N \l_siunitx_unit_int } + \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl { true } } \char_make_space:N \~ \group_begin: @@ -9852,10 +9894,10 @@ This work consists of the file siunitx.dtx \char_make_math_subscript:N \@ \tl_to_lowercase:n { \group_end: - \cs_set_protected_nopar:Npn \_siunitx_unit_format_qualifier_subscript: + \cs_set_protected_nopar:Npn \siunitx_unit_format_qualifier_subscript: { - \tl_put_right:No \_l_siunitx_unit_current_tl - { \exp_after:wN @ \exp_after:wN { \_l_siunitx_tmpa_tl } } + \tl_put_right:No \l_siunitx_unit_current_tl + { \exp_after:wN @ \exp_after:wN { \l_siunitx_tmpa_tl } } } } % \end{macrocode} @@ -9864,52 +9906,52 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_sorted:} +%\begin{macro}{\siunitx_unit_format_sorted:} % For when the powers are sorted with the positive ones first. The only % slight issue is making sure that the additional space is included % between the two units, if needed. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_sorted: { - \tl_set_eq:NN \_l_siunitx_unit_tl \_l_siunitx_unit_numerator_tl - \tl_if_empty:NF \_l_siunitx_unit_tl +\cs_new_protected_nopar:Npn \siunitx_unit_format_sorted: { + \tl_set_eq:NN \l_siunitx_unit_tl \l_siunitx_unit_numerator_tl + \tl_if_empty:NF \l_siunitx_unit_tl { - \tl_if_empty:NF \_l_siunitx_unit_denominator_tl + \tl_if_empty:NF \l_siunitx_unit_denominator_tl { - \_siunitx_tl_put_right_math:NV \_l_siunitx_unit_tl - \_l_siunitx_unit_separator_tl + \siunitx_tl_put_right_math:NV \l_siunitx_unit_tl + \l_siunitx_unit_separator_tl } } - \tl_put_right:NV \_l_siunitx_unit_tl \_l_siunitx_unit_denominator_tl + \tl_put_right:NV \l_siunitx_unit_tl \l_siunitx_unit_denominator_tl } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_unit_format_symbol:} -%\begin{macro}[aux]{\_siunitx_unit_format_symbol_aux:} -%\begin{macro}[aux]{\_siunitx_unit_format_symbol_aux_alt:} +%\begin{macro}{\siunitx_unit_format_symbol:} +%\begin{macro}[aux]{\siunitx_unit_format_symbol_aux:} +%\begin{macro}[aux]{\siunitx_unit_format_symbol_aux_alt:} % If there is no symbol, something is wrong! The only exception is % when the code is inside the \cs{si} function (or similar) and there % is only a prefix with nothing else present at all. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_format_symbol: { - \tl_set:Nx \_l_siunitx_tmpa_tl - { symbol- \int_use:N \_l_siunitx_unit_int } - \prop_get:NVN \_l_siunitx_unit_prop \_l_siunitx_tmpa_tl - \_l_siunitx_tmpa_tl - \quark_if_no_value:NTF \_l_siunitx_tmpa_tl - { \_siunitx_unit_format_symbol_aux: } +\cs_new_protected_nopar:Npn \siunitx_unit_format_symbol: { + \tl_set:Nx \l_siunitx_tmpa_tl + { symbol- \int_use:N \l_siunitx_unit_int } + \prop_get:NVN \l_siunitx_unit_prop \l_siunitx_tmpa_tl + \l_siunitx_tmpa_tl + \quark_if_no_value:NTF \l_siunitx_tmpa_tl + { \siunitx_unit_format_symbol_aux: } { - \tl_put_right:NV \_l_siunitx_unit_current_tl \_l_siunitx_tmpa_tl + \tl_put_right:NV \l_siunitx_unit_current_tl \l_siunitx_tmpa_tl } } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_symbol_aux: { +\cs_new_protected_nopar:Npn \siunitx_unit_format_symbol_aux: { \msg_error:nn { siunitx } { prefix-only } } -\cs_set_protected_nopar:Npn \_siunitx_unit_format_symbol_aux_alt: { - \intexpr_compare:nNnTF { \_l_siunitx_unit_int } = { 1 } +\cs_new_protected_nopar:Npn \siunitx_unit_format_symbol_aux_alt: { + \intexpr_compare:nNnTF { \l_siunitx_unit_int } = { 1 } { - \prop_del:Nn \_l_siunitx_unit_prop { prefix-1 } - \prop_if_empty:NF \_l_siunitx_unit_prop + \prop_del:Nn \l_siunitx_unit_prop { prefix-1 } + \prop_if_empty:NF \l_siunitx_unit_prop { \msg_error:nn { siunitx } { prefix-only } } } { \msg_error:nn { siunitx } { prefix-only } } @@ -9923,92 +9965,92 @@ This work consists of the file siunitx.dtx % % A collection of the internal parts of various user functions. % -%\begin{macro}{\_l_siunitx_multi_brackets_bool} -%\begin{macro}{\_l_siunitx_multi_repeat_bool} +%\begin{macro}{\l_siunitx_multi_brackets_bool} +%\begin{macro}{\l_siunitx_multi_repeat_bool} % Flags for multi-part numbers. % \begin{macrocode} -\bool_new:N \_l_siunitx_multi_brackets_bool -\bool_new:N \_l_siunitx_multi_repeat_bool +\bool_new:N \l_siunitx_multi_brackets_bool +\bool_new:N \l_siunitx_multi_repeat_bool % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_product_brackets_bool} -%\begin{macro}{\_l_siunitx_product_power_bool} -%\begin{macro}{\_l_siunitx_number_unit_repeat_bool} +%\begin{macro}{\l_siunitx_product_brackets_bool} +%\begin{macro}{\l_siunitx_product_power_bool} +%\begin{macro}{\l_siunitx_number_unit_repeat_bool} % Flags for product units. % \begin{macrocode} -\bool_new:N \_l_siunitx_product_brackets_bool -\bool_new:N \_l_siunitx_product_power_bool -\bool_new:N \_l_siunitx_number_unit_repeat_bool +\bool_new:N \l_siunitx_product_brackets_bool +\bool_new:N \l_siunitx_product_power_bool +\bool_new:N \l_siunitx_number_unit_repeat_bool % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_unit_breaks_bool} -%\begin{macro}{\_l_siunitx_number_unit_separator_tl} +%\begin{macro}{\l_siunitx_number_unit_breaks_bool} +%\begin{macro}{\l_siunitx_number_unit_separator_tl} % Options for printing units or units with numbers. % \begin{macrocode} \keys_define:nn { siunitx } { allow-number-unit-breaks .bool_set:N = - \_l_siunitx_number_unit_breaks_bool, + \l_siunitx_number_unit_breaks_bool, multi-part-units .choice:, multi-part-units / brackets .code:n = { - \bool_set_true:N \_l_siunitx_multi_brackets_bool - \bool_set_false:N \_l_siunitx_multi_repeat_bool + \bool_set_true:N \l_siunitx_multi_brackets_bool + \bool_set_false:N \l_siunitx_multi_repeat_bool }, multi-part-units / repeat .code:n = { - \bool_set_false:N \_l_siunitx_multi_brackets_bool - \bool_set_true:N \_l_siunitx_multi_repeat_bool + \bool_set_false:N \l_siunitx_multi_brackets_bool + \bool_set_true:N \l_siunitx_multi_repeat_bool }, multi-part-units / single .code:n = { - \bool_set_false:N \_l_siunitx_multi_brackets_bool - \bool_set_false:N \_l_siunitx_multi_repeat_bool + \bool_set_false:N \l_siunitx_multi_brackets_bool + \bool_set_false:N \l_siunitx_multi_repeat_bool }, number-unit-separator .tl_set:N = - \_l_siunitx_number_unit_separator_tl, + \l_siunitx_number_unit_separator_tl, product-units .choice:, product-units / brackets .code:n = { - \bool_set_true:N \_l_siunitx_product_brackets_bool - \bool_set_false:N \_l_siunitx_product_power_bool - \bool_set_false:N \_l_siunitx_product_repeat_bool + \bool_set_true:N \l_siunitx_product_brackets_bool + \bool_set_false:N \l_siunitx_product_power_bool + \bool_set_false:N \l_siunitx_product_repeat_bool }, product-units / brackets-power .code:n = { - \bool_set_true:N \_l_siunitx_product_brackets_bool - \bool_set_true:N \_l_siunitx_product_power_bool - \bool_set_false:N \_l_siunitx_product_repeat_bool + \bool_set_true:N \l_siunitx_product_brackets_bool + \bool_set_true:N \l_siunitx_product_power_bool + \bool_set_false:N \l_siunitx_product_repeat_bool }, product-units / power .code:n = { - \bool_set_false:N \_l_siunitx_product_brackets_bool - \bool_set_true:N \_l_siunitx_product_power_bool - \bool_set_false:N \_l_siunitx_product_repeat_bool + \bool_set_false:N \l_siunitx_product_brackets_bool + \bool_set_true:N \l_siunitx_product_power_bool + \bool_set_false:N \l_siunitx_product_repeat_bool }, product-units / repeat .code:n = { - \bool_set_false:N \_l_siunitx_product_brackets_bool - \bool_set_false:N \_l_siunitx_product_power_bool - \bool_set_true:N \_l_siunitx_product_repeat_bool + \bool_set_false:N \l_siunitx_product_brackets_bool + \bool_set_false:N \l_siunitx_product_power_bool + \bool_set_true:N \l_siunitx_product_repeat_bool }, product-units / single .code:n = { - \bool_set_false:N \_l_siunitx_product_brackets_bool - \bool_set_false:N \_l_siunitx_product_power_bool - \bool_set_false:N \_l_siunitx_product_repeat_bool + \bool_set_false:N \l_siunitx_product_brackets_bool + \bool_set_false:N \l_siunitx_product_power_bool + \bool_set_false:N \l_siunitx_product_repeat_bool }, } \keys_set:nn { siunitx } { @@ -10020,74 +10062,74 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_output:nn} -%\begin{macro}{\_siunitx_unit_output:Vn} +%\begin{macro}{\siunitx_unit_output:nn} +%\begin{macro}{\siunitx_unit_output:Vn} % For typesetting a unit directly: used by \cs{si} and the \texttt{s} % column. The second argument is any options to set locally. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_unit_output:nn #1#2 { - \cs_set_eq:NN \_siunitx_unit_format_symbol_aux: - \_siunitx_unit_format_symbol_aux_alt: - \cs_set_eq:NN \_siunitx_unit_format_fraction_symbol_aux: - \_siunitx_unit_format_fraction_symbol_aux_alt: - \_siunitx_unit_in:nn {#1} {#2} - \intexpr_compare:nNnF { \_l_siunitx_unit_prefix_int } = { 0 } +\cs_new_protected:Npn \siunitx_unit_output:nn #1#2 { + \cs_set_eq:NN \siunitx_unit_format_symbol_aux: + \siunitx_unit_format_symbol_aux_alt: + \cs_set_eq:NN \siunitx_unit_format_fraction_symbol_aux: + \siunitx_unit_format_fraction_symbol_aux_alt: + \siunitx_unit_in:nn {#1} {#2} + \intexpr_compare:nNnF { \l_siunitx_unit_prefix_int } = { 0 } { - \tl_set:Nx \_l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl { - \int_use:N \_l_siunitx_unit_prefix_base_int - ^ { \int_use:N \_l_siunitx_unit_prefix_int } + \int_use:N \l_siunitx_unit_prefix_base_int + ^ { \int_use:N \l_siunitx_unit_prefix_int } } - \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl - \_siunitx_unit_output_number_sep: + \siunitx_print:nV { number } \l_siunitx_tmpa_tl + \siunitx_unit_output_number_sep: } - \_siunitx_print:nV { unit } \_l_siunitx_unit_tl + \siunitx_print:nV { unit } \l_siunitx_unit_tl } -\cs_generate_variant:Nn \_siunitx_unit_output:nn { V } +\cs_generate_variant:Nn \siunitx_unit_output:nn { V } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_unit_output_number_sep:} +%\begin{macro}{\siunitx_unit_output_number_sep:} % For printing the number separator. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_output_number_sep: { - \bool_if:NTF \_l_siunitx_number_unit_breaks_bool +\cs_new_protected_nopar:Npn \siunitx_unit_output_number_sep: { + \bool_if:NTF \l_siunitx_number_unit_breaks_bool { \allowbreak } { \nobreak } - \_siunitx_ensuremath:n { \_l_siunitx_number_unit_separator_tl } + \siunitx_ensuremath:n { \l_siunitx_number_unit_separator_tl } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_unit_output_pre_print:} -%\begin{macro}{\_siunitx_unit_output_print:} +%\begin{macro}{\siunitx_unit_output_pre_print:} +%\begin{macro}{\siunitx_unit_output_print:} % The printing functions for units do some simple tests then % actually print there output. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_unit_output_pre_print: { - \tl_if_empty:NF \_l_siunitx_pre_unit_tl +\cs_new_protected_nopar:Npn \siunitx_unit_output_pre_print: { + \tl_if_empty:NF \l_siunitx_pre_unit_tl { \nobreak - \_siunitx_print:nV { unit } \_l_siunitx_pre_unit_tl + \siunitx_print:nV { unit } \l_siunitx_pre_unit_tl } } -\cs_set_protected_nopar:Npn \_siunitx_unit_output_print: { - \intexpr_compare:nNnF { \_l_siunitx_unit_prefix_int } = { 0 } +\cs_new_protected_nopar:Npn \siunitx_unit_output_print: { + \intexpr_compare:nNnF { \l_siunitx_unit_prefix_int } = { 0 } { - \tl_set:Nx \_l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl { - \bool_if:NTF \_l_siunitx_tight_bool - { { \exp_not:V \_l_siunitx_exponent_product_tl } } - { { } \exp_not:V \_l_siunitx_exponent_product_tl { } } - \int_use:N \_l_siunitx_unit_prefix_base_int - ^ { \int_use:N \_l_siunitx_unit_prefix_int } + \bool_if:NTF \l_siunitx_tight_bool + { { \exp_not:V \l_siunitx_exponent_product_tl } } + { { } \exp_not:V \l_siunitx_exponent_product_tl { } } + \int_use:N \l_siunitx_unit_prefix_base_int + ^ { \int_use:N \l_siunitx_unit_prefix_int } } - \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl + \siunitx_print:nV { number } \l_siunitx_tmpa_tl } - \tl_if_empty:NF \_l_siunitx_unit_tl + \tl_if_empty:NF \l_siunitx_unit_tl { - \_siunitx_unit_output_number_sep: - \_siunitx_print:nV { unit } \_l_siunitx_unit_tl + \siunitx_unit_output_number_sep: + \siunitx_print:nV { unit } \l_siunitx_unit_tl } } % \end{macrocode} @@ -10099,104 +10141,104 @@ This work consists of the file siunitx.dtx % Numbers with units have to be formatted in a more complex way than % simply sticking the two together. % -%\begin{macro}{\_l_siunitx_pre_unit_tl} +%\begin{macro}{\l_siunitx_pre_unit_tl} % When there is a pre-unit, it gets stored here. % \begin{macrocode} -\tl_new:N \_l_siunitx_pre_unit_tl +\tl_new:N \l_siunitx_pre_unit_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_product_int} +%\begin{macro}{\l_siunitx_number_product_int} % Used to count up the number of product tokens in a number. % \begin{macrocode} -\int_new:N \_l_siunitx_number_product_int +\int_new:N \l_siunitx_number_product_int % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_combined:nnnn} +%\begin{macro}{\siunitx_combined:nnnn} % Printing numbers and units means first processing the units, then % handing off this information to the combined number and unit % processor. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_combined:nnnn #1#2#3#4 { +\cs_new_protected:Npn \siunitx_combined:nnnn #1#2#3#4 { \IfNoValueTF {#3} - { \tl_clear:N \_l_siunitx_pre_unit_tl } + { \tl_clear:N \l_siunitx_pre_unit_tl } { - \_siunitx_unit_in:nn {#3} {#1} - \cs_set_eq:NN \_l_siunitx_pre_unit_tl \_l_siunitx_unit_tl + \siunitx_unit_in:nn {#3} {#1} + \cs_set_eq:NN \l_siunitx_pre_unit_tl \l_siunitx_unit_tl } - \cs_set_eq:NN \_l_siunitx_brackets_bool - \_l_siunitx_multi_brackets_bool - \_siunitx_combined_unit:nnn {#2} {#4} {#1} - \_siunitx_combined_output:n {#2} + \cs_set_eq:NN \l_siunitx_brackets_bool + \l_siunitx_multi_brackets_bool + \siunitx_combined_unit:nnn {#2} {#4} {#1} + \siunitx_combined_output:n {#2} } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_combined_output:n} +%\begin{macro}{\siunitx_combined_output:n} % Printing the combination of a number and a unit means checking for % parsing then parsing the number part. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_combined_output:n #1 { - \bool_if:NTF \_l_siunitx_number_parse_bool +\cs_new_protected:Npn \siunitx_combined_output:n #1 { + \bool_if:NTF \l_siunitx_number_parse_bool { - \tl_clear:N \_l_siunitx_number_out_tl - \bool_set_false:N \_l_siunitx_number_compound_bool - \_siunitx_number_output_parse:n {#1} + \tl_clear:N \l_siunitx_number_out_tl + \bool_set_false:N \l_siunitx_number_compound_bool + \siunitx_number_output_parse:n {#1} } { - \_siunitx_unit_output_pre_print: - \_siunitx_print:nn { number } { \_siunitx_ensuremath:n {#1} } - \_siunitx_unit_output_print: + \siunitx_unit_output_pre_print: + \siunitx_print:nn { number } { \siunitx_ensuremath:n {#1} } + \siunitx_unit_output_print: } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_combined_unit:nnn} +%\begin{macro}{\siunitx_combined_unit:nnn} % In most cases, sorting out the main unit is easy: simply set up for % printing using \cs{siunitx_unit_in:nn}. However, if there are multiple % parts to the number, and they are to be combined into the unit, then % there is more work to do. In either case, the result is the -% correctly-prepared unit stored in \cs{_l_siunitx_unit_tl}. +% correctly-prepared unit stored in \cs{l_siunitx_unit_tl}. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_combined_unit:nnn #1#2#3 { - \bool_if:NTF \_l_siunitx_product_power_bool +\cs_new_protected:Npn \siunitx_combined_unit:nnn #1#2#3 { + \bool_if:NTF \l_siunitx_product_power_bool { - \_siunitx_combined_product_count:n {#1} - \intexpr_compare:nNnTF { \_l_siunitx_number_product_int } > { 0 } + \siunitx_combined_product_count:n {#1} + \intexpr_compare:nNnTF { \l_siunitx_number_product_int } > { 0 } { - \int_incr:N \_l_siunitx_number_product_int - \tl_set:Nn \_l_siunitx_tmpa_tl {#2} - \tl_set:Nx \_l_siunitx_tmpb_tl - { \tothe { \exp_not:V \_l_siunitx_number_product_int } } - \tl_put_right:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl - \_siunitx_unit_in:Vn \_l_siunitx_tmpa_tl {#3} + \int_incr:N \l_siunitx_number_product_int + \tl_set:Nn \l_siunitx_tmpa_tl {#2} + \tl_set:Nx \l_siunitx_tmpb_tl + { \tothe { \exp_not:V \l_siunitx_number_product_int } } + \tl_put_right:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl + \siunitx_unit_in:Vn \l_siunitx_tmpa_tl {#3} } - { \_siunitx_unit_in:nn {#2} {#3} } + { \siunitx_unit_in:nn {#2} {#3} } } - { \_siunitx_unit_in:nn {#2} {#3} } + { \siunitx_unit_in:nn {#2} {#3} } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_combined_product_count:n} -%\begin{macro}[aux]{\_siunitx_combined_product_count_aux:n} +%\begin{macro}{\siunitx_combined_product_count:n} +%\begin{macro}[aux]{\siunitx_combined_product_count_aux:n} % For counting how many products are in a number, so that the unit % can be adjusted if needed. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_combined_product_count:n #1 { - \int_zero:N \_l_siunitx_number_product_int - \tl_set:Nn \_l_siunitx_tmpa_tl {#1} - \tl_map_function:NN \_l_siunitx_input_product_tl - \_siunitx_combined_product_count_aux:N +\cs_new_protected:Npn \siunitx_combined_product_count:n #1 { + \int_zero:N \l_siunitx_number_product_int + \tl_set:Nn \l_siunitx_tmpa_tl {#1} + \tl_map_function:NN \l_siunitx_input_product_tl + \siunitx_combined_product_count_aux:N } -\cs_set_protected:Npn \_siunitx_combined_product_count_aux:N #1 { - \tl_if_in:NnT \_l_siunitx_tmpa_tl {#1} +\cs_new_protected:Npn \siunitx_combined_product_count_aux:N #1 { + \tl_if_in:NnT \l_siunitx_tmpa_tl {#1} { - \int_incr:N \_l_siunitx_number_product_int - \tl_remove_in:Nn \_l_siunitx_tmpa_tl {#1} - \_siunitx_combined_product_count_aux:N #1 + \int_incr:N \l_siunitx_number_product_int + \tl_remove_in:Nn \l_siunitx_tmpa_tl {#1} + \siunitx_combined_product_count_aux:N #1 } } % \end{macrocode} @@ -10205,51 +10247,51 @@ This work consists of the file siunitx.dtx % %\subsection{Lists of numbers} % -%\begin{macro}{\_l_siunitx_list_brackets_bool} -%\begin{macro}{\_l_siunitx_list_repeat_bool} +%\begin{macro}{\l_siunitx_list_brackets_bool} +%\begin{macro}{\l_siunitx_list_repeat_bool} % For storing the behaviour of list items with respect to units. % \begin{macrocode} -\bool_new:N \_l_siunitx_list_brackets_bool -\bool_new:N \_l_siunitx_list_repeat_bool +\bool_new:N \l_siunitx_list_brackets_bool +\bool_new:N \l_siunitx_list_repeat_bool % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_list_current_tl} -%\begin{macro}{\_l_siunitx_list_tl} +%\begin{macro}{\l_siunitx_list_current_tl} +%\begin{macro}{\l_siunitx_list_tl} % Two token list variables used to store the list for output. % \begin{macrocode} -\tl_new:N \_l_siunitx_list_current_tl -\tl_new:N \_l_siunitx_list_tl +\tl_new:N \l_siunitx_list_current_tl +\tl_new:N \l_siunitx_list_tl % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_list_separator_tl} -%\begin{macro}{\_l_siunitx_list_separator_final_tl} +%\begin{macro}{\l_siunitx_list_separator_tl} +%\begin{macro}{\l_siunitx_list_separator_final_tl} % Settings for lists. % \begin{macrocode} \keys_define:nn { siunitx } { - list-final-separator .tl_set:N = \_l_siunitx_list_separator_final_tl, - list-separator .tl_set:N = \_l_siunitx_list_separator_tl, + list-final-separator .tl_set:N = \l_siunitx_list_separator_final_tl, + list-separator .tl_set:N = \l_siunitx_list_separator_tl, list-units .choice:, list-units / brackets .code:n = { - \bool_set_true:N \_l_siunitx_list_brackets_bool - \bool_set_false:N \_l_siunitx_list_repeat_bool + \bool_set_true:N \l_siunitx_list_brackets_bool + \bool_set_false:N \l_siunitx_list_repeat_bool }, list-units / repeat .code:n = { - \bool_set_false:N \_l_siunitx_list_brackets_bool - \bool_set_true:N \_l_siunitx_list_repeat_bool + \bool_set_false:N \l_siunitx_list_brackets_bool + \bool_set_true:N \l_siunitx_list_repeat_bool }, list-units / single .code:n = { - \bool_set_false:N \_l_siunitx_list_brackets_bool - \bool_set_false:N \_l_siunitx_list_repeat_bool + \bool_set_false:N \l_siunitx_list_brackets_bool + \bool_set_false:N \l_siunitx_list_repeat_bool }, } \keys_set:nn { siunitx } { @@ -10261,71 +10303,71 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_list_numbers:n} -%\begin{macro}{\_siunitx_list_numbers_aux_i:n} -%\begin{macro}{\_siunitx_list_numbers_aux_ii:n} +%\begin{macro}{\siunitx_list_numbers:n} +%\begin{macro}{\siunitx_list_numbers_aux_i:n} +%\begin{macro}{\siunitx_list_numbers_aux_ii:n} % Lists of numbers are handled in a very simple fashion. The input % list is traversed, and the items are simply placed on a list for % output. This uses the internal function \cs{_siunitx_number_output:n} % for speed, but does not make any other optimisation. The output list % also adds the relevant separators. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_list_numbers:n #1 { - \tl_clear:N \_l_siunitx_unit_tl - \tl_clear:N \_l_siunitx_preunit_tl - \_siunitx_list_numbers_aux_i:n {#1} -} -\cs_set_protected:Npn \_siunitx_list_numbers_aux_i:n #1 { - \tl_clear:N \_l_siunitx_list_tl - \tl_clear:N \_l_siunitx_list_current_tl - \tl_map_function:nN {#1} \_siunitx_list_numbers_aux_ii:n - \tl_put_right:NV \_l_siunitx_list_tl - \_l_siunitx_list_separator_final_tl - \tl_put_right:NV \_l_siunitx_list_tl \_l_siunitx_list_current_tl - \tl_use:N \_l_siunitx_list_tl -} -\cs_set_protected:Npn \_siunitx_list_numbers_aux_ii:n #1 { - \tl_if_empty:NTF \_l_siunitx_list_tl - { \tl_set_eq:NN \_l_siunitx_list_tl \_l_siunitx_list_current_tl } +\cs_new_protected:Npn \siunitx_list_numbers:n #1 { + \tl_clear:N \l_siunitx_unit_tl + \tl_clear:N \l_siunitx_preunit_tl + \siunitx_list_numbers_aux_i:n {#1} +} +\cs_new_protected:Npn \siunitx_list_numbers_aux_i:n #1 { + \tl_clear:N \l_siunitx_list_tl + \tl_clear:N \l_siunitx_list_current_tl + \tl_map_function:nN {#1} \siunitx_list_numbers_aux_ii:n + \tl_put_right:NV \l_siunitx_list_tl + \l_siunitx_list_separator_final_tl + \tl_put_right:NV \l_siunitx_list_tl \l_siunitx_list_current_tl + \tl_use:N \l_siunitx_list_tl +} +\cs_new_protected:Npn \siunitx_list_numbers_aux_ii:n #1 { + \tl_if_empty:NTF \l_siunitx_list_tl + { \tl_set_eq:NN \l_siunitx_list_tl \l_siunitx_list_current_tl } { - \tl_put_right:NV \_l_siunitx_list_tl - \_l_siunitx_list_separator_tl - \tl_put_right:NV \_l_siunitx_list_tl \_l_siunitx_list_current_tl + \tl_put_right:NV \l_siunitx_list_tl + \l_siunitx_list_separator_tl + \tl_put_right:NV \l_siunitx_list_tl \l_siunitx_list_current_tl } - \tl_set:Nn \_l_siunitx_list_current_tl - { \_siunitx_combined_output:n {#1} } + \tl_set:Nn \l_siunitx_list_current_tl + { \siunitx_combined_output:n {#1} } } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_list_units:nnn} +%\begin{macro}{\siunitx_list_units:nnn} % For a list of items with units, the method is to first parse the % unit when repeating (to save time), then to use the number loop above % for the actual work. On the other hand, when the unit is only printed % once life is easier as the normal unit printer can operate. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_list_units:nnn #1#2#3 { - \bool_if:NTF \_l_siunitx_list_repeat_bool +\cs_new_protected:Npn \siunitx_list_units:nnn #1#2#3 { + \bool_if:NTF \l_siunitx_list_repeat_bool { - \_siunitx_unit_in:nn {#2} {#3} - \_siunitx_list_numbers_aux_i:n {#1} + \siunitx_unit_in:nn {#2} {#3} + \siunitx_list_numbers_aux_i:n {#1} } { - \bool_if:NT \_l_siunitx_list_brackets_bool + \bool_if:NT \l_siunitx_list_brackets_bool { - \_siunitx_print:nn { number } - { \_siunitx_ensuremath:n { \_l_siunitx_bracket_open_tl } } + \siunitx_print:nn { number } + { \siunitx_ensuremath:n { \l_siunitx_bracket_open_tl } } } - \_siunitx_list_numbers:n {#1} - \bool_if:NT \_l_siunitx_list_brackets_bool + \siunitx_list_numbers:n {#1} + \bool_if:NT \l_siunitx_list_brackets_bool { - \_siunitx_print:nn { number } - { \_siunitx_ensuremath:n { \_l_siunitx_bracket_close_tl } } + \siunitx_print:nn { number } + { \siunitx_ensuremath:n { \l_siunitx_bracket_close_tl } } } - \_siunitx_unit_output_number_sep: - \_siunitx_unit_output:nn {#2} {#3} + \siunitx_unit_output_number_sep: + \siunitx_unit_output:nn {#2} {#3} } } % \end{macrocode} @@ -10333,39 +10375,39 @@ This work consists of the file siunitx.dtx % %\subsection{Ranges} % -%\begin{macro}{\_l_siunitx_range_brackets_bool} -%\begin{macro}{\_l_siunitx_range_repeat_bool} +%\begin{macro}{\l_siunitx_range_brackets_bool} +%\begin{macro}{\l_siunitx_range_repeat_bool} % Settings for ranges with units. % \begin{macrocode} -\bool_new:N \_l_siunitx_range_brackets_bool -\bool_new:N \_l_siunitx_range_repeat_bool +\bool_new:N \l_siunitx_range_brackets_bool +\bool_new:N \l_siunitx_range_repeat_bool % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_range_phrase_tl} +%\begin{macro}{\l_siunitx_range_phrase_tl} % Simple settings for ranges. % \begin{macrocode} \keys_define:nn { siunitx } { - range-phrase .tl_set:N = \_l_siunitx_range_phrase_tl, + range-phrase .tl_set:N = \l_siunitx_range_phrase_tl, range-units .choice:, range-units / brackets .code:n = { - \bool_set_true:N \_l_siunitx_range_brackets_bool - \bool_set_false:N \_l_siunitx_range_repeat_bool + \bool_set_true:N \l_siunitx_range_brackets_bool + \bool_set_false:N \l_siunitx_range_repeat_bool }, range-units / repeat .code:n = { - \bool_set_false:N \_l_siunitx_range_brackets_bool - \bool_set_true:N \_l_siunitx_range_repeat_bool + \bool_set_false:N \l_siunitx_range_brackets_bool + \bool_set_true:N \l_siunitx_range_repeat_bool }, range-units / single .code:n = { - \bool_set_false:N \_l_siunitx_range_brackets_bool - \bool_set_false:N \_l_siunitx_range_repeat_bool + \bool_set_false:N \l_siunitx_range_brackets_bool + \bool_set_false:N \l_siunitx_range_repeat_bool }, } \keys_set:nn { siunitx } { @@ -10375,61 +10417,61 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_range_numbers:nn} -%\begin{macro}{\_siunitx_range_numbers_aux:n} +%\begin{macro}{\siunitx_range_numbers:nn} +%\begin{macro}{\siunitx_range_numbers_aux:n} % A range of numbers. This is more restrictive than the \cs{num} % function: nothing compound. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_range_numbers:nn #1#2 { - \_siunitx_range_numbers_aux:n {#1} - \text { \_l_siunitx_range_phrase_tl } - \_siunitx_range_numbers_aux:n {#2} +\cs_new_protected:Npn \siunitx_range_numbers:nn #1#2 { + \siunitx_range_numbers_aux:n {#1} + \text { \l_siunitx_range_phrase_tl } + \siunitx_range_numbers_aux:n {#2} } -\cs_set_protected:Npn \_siunitx_range_numbers_aux:n #1 { - \bool_if:NTF \_l_siunitx_number_parse_bool +\cs_new_protected:Npn \siunitx_range_numbers_aux:n #1 { + \bool_if:NTF \l_siunitx_number_parse_bool { - \tl_clear:N \_l_siunitx_number_out_tl - \tl_clear:N \_l_siunitx_number_out_saved_tl - \bool_set_false:N \_l_siunitx_number_compound_bool - \_siunitx_number_output_parse:n {#1} - \bool_if:NT \_l_siunitx_number_compound_bool + \tl_clear:N \l_siunitx_number_out_tl + \tl_clear:N \l_siunitx_number_out_saved_tl + \bool_set_false:N \l_siunitx_number_compound_bool + \siunitx_number_output_parse:n {#1} + \bool_if:NT \l_siunitx_number_compound_bool { \msg_error:nnx { siunitx } { multi-part-range } {#1} } } { - \_siunitx_unit_output_pre_print: - \_siunitx_print:nn { number } {#1} - \_siunitx_unit_output_print: + \siunitx_unit_output_pre_print: + \siunitx_print:nn { number } {#1} + \siunitx_unit_output_print: } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_range_unit:nnnn} +%\begin{macro}{\siunitx_range_unit:nnnn} % Unit printing is also simple: basically a past-up job. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_range_unit:nnnn #1#2#3#4 { - \bool_if:NTF \_l_siunitx_range_repeat_bool +\cs_new_protected:Npn \siunitx_range_unit:nnnn #1#2#3#4 { + \bool_if:NTF \l_siunitx_range_repeat_bool { - \_siunitx_unit_in:nn {#1} {#2} - \_siunitx_range_numbers_aux:n {#3} - \text { \_l_siunitx_range_phrase_tl } - \_siunitx_range_numbers_aux:n {#4} + \siunitx_unit_in:nn {#1} {#2} + \siunitx_range_numbers_aux:n {#3} + \text { \l_siunitx_range_phrase_tl } + \siunitx_range_numbers_aux:n {#4} } { - \bool_if:NT \_l_siunitx_range_brackets_bool + \bool_if:NT \l_siunitx_range_brackets_bool { - \_siunitx_print:nn { number } - { \_siunitx_ensuremath:n { \_l_siunitx_bracket_open_tl } } + \siunitx_print:nn { number } + { \siunitx_ensuremath:n { \l_siunitx_bracket_open_tl } } } - \_siunitx_range_numbers:nn {#3} {#4} - \bool_if:NT \_l_siunitx_range_brackets_bool + \siunitx_range_numbers:nn {#3} {#4} + \bool_if:NT \l_siunitx_range_brackets_bool { - \_siunitx_print:nn { number } - { \_siunitx_ensuremath:n { \_l_siunitx_bracket_close_tl } } + \siunitx_print:nn { number } + { \siunitx_ensuremath:n { \l_siunitx_bracket_close_tl } } } - \_siunitx_unit_output_number_sep: - \_siunitx_unit_output:nn {#1} {#2} + \siunitx_unit_output_number_sep: + \siunitx_unit_output:nn {#1} {#2} } } % \end{macrocode} @@ -10449,16 +10491,16 @@ This work consists of the file siunitx.dtx { \newcolumntype { C } [1] { > { \bcolumn #1 \@nil } #1 < { \ecolumn } } - \cs_set:Npn \_siunitx_tmp:w #1 \NC@do S #2 \q_stop + \cs_set:Npn \siunitx_tmp:w #1 \NC@do S #2 \q_stop { \toks_set:Nn \NC@list { #1 #2 } } - \exp_last_unbraced:NV \_siunitx_tmp:w \NC@list \q_stop + \exp_last_unbraced:NV \siunitx_tmp:w \NC@list \q_stop \cs_gundefine:N \NC@find@S } { } } % \end{macrocode} % -%\begin{macro}{\_siunitx_table_rewrite_create:N} +%\begin{macro}{\siunitx_table_rewrite_create:N} % The \texttt{s} and \texttt{S} column types are both created using % the \pkg{array} package, but with the internal macros redefined % to work with optional argument. First, there is a need to do a @@ -10467,24 +10509,24 @@ This work consists of the file siunitx.dtx % arguments do not work correctly. So they are added \enquote{by hand} % to the appropriate macro. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_rewrite_create:N #1 { - \tl_set:Nn \_l_siunitx_tmpa_tl { \NC@do #1 } - \tl_put_right:NV \_l_siunitx_tmpa_tl \NC@list +\cs_new_protected_nopar:Npn \siunitx_table_rewrite_create:N #1 { + \tl_set:Nn \l_siunitx_tmpa_tl { \NC@do #1 } + \tl_put_right:NV \l_siunitx_tmpa_tl \NC@list \newcolumntype {#1} { } - \toks_set:NV \NC@list \_l_siunitx_tmpa_tl + \toks_set:NV \NC@list \l_siunitx_tmpa_tl \exp_args:NNc \renewcommand * { NC@rewrite@ #1 } [1] [ ] { \toks_put_right:Nn \@temptokena { - > { \_siunitx_table_collect_begin:Nn #1 {##1} } + > { \siunitx_table_collect_begin:Nn #1 {##1} } c - < { \_siunitx_table_print: } + < { \siunitx_table_print: } } \NC@find } } -\AtBeginDocument { \_siunitx_table_rewrite_create:N s } -\AtBeginDocument { \_siunitx_table_rewrite_create:N S } +\AtBeginDocument { \siunitx_table_rewrite_create:N s } +\AtBeginDocument { \siunitx_table_rewrite_create:N S } % \end{macrocode} %\end{macro} % @@ -10494,112 +10536,112 @@ This work consists of the file siunitx.dtx % the result. The collection routine tries to ensure that the % typesetting part only receives real cell contents. % -%\begin{macro}{\_l_siunitx_table_collect_tl} -%\begin{macro}{\_l_siunitx_table_collect_pre_tl} -%\begin{macro}{\_l_siunitx_table_collect_post_tl} +%\begin{macro}{\l_siunitx_table_collect_tl} +%\begin{macro}{\l_siunitx_table_collect_pre_tl} +%\begin{macro}{\l_siunitx_table_collect_post_tl} % Three storage areas. % \begin{macrocode} -\tl_new:N \_l_siunitx_table_collect_tl -\tl_new:N \_l_siunitx_table_collect_pre_tl -\tl_new:N \_l_siunitx_table_collect_post_tl +\tl_new:N \l_siunitx_table_collect_tl +\tl_new:N \l_siunitx_table_collect_pre_tl +\tl_new:N \l_siunitx_table_collect_post_tl % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_number_valid_tl} +%\begin{macro}{\l_siunitx_number_valid_tl} % As the \texttt{S} column has to make a judgement about tokens which % can be part of a number, there is a need to have a list of valid % tokens. % \begin{macrocode} -\tl_new:N \_l_siunitx_number_valid_tl +\tl_new:N \l_siunitx_number_valid_tl % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_collect_pre_bool} -%\begin{macro}{\_l_siunitx_table_collect_post_bool} +%\begin{macro}{\l_siunitx_table_collect_pre_bool} +%\begin{macro}{\l_siunitx_table_collect_post_bool} % Flags for having found a number in an \texttt{S} column. % \begin{macrocode} -\bool_new:N \_l_siunitx_table_collect_pre_bool -\bool_new:N \_l_siunitx_table_collect_post_bool +\bool_new:N \l_siunitx_table_collect_pre_bool +\bool_new:N \l_siunitx_table_collect_post_bool % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_collect_begin:Nn} -%\begin{macro}[aux]{\_siunitx_table_collect_begin_s:} -%\begin{macro}[aux]{\_siunitx_table_collect_begin_S:} +%\begin{macro}{\siunitx_table_collect_begin:Nn} +%\begin{macro}[aux]{\siunitx_table_collect_begin_s:} +%\begin{macro}[aux]{\siunitx_table_collect_begin_S:} % The collector starts by setting up local options, then clears and % initialises the storage and testing system. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_table_collect_begin:Nn #1#2 { +\cs_new_protected:Npn \siunitx_table_collect_begin:Nn #1#2 { \keys_set:nn { siunitx } {#2} - \use:c { _siunitx_table_collect_begin_ #1 : } + \use:c { siunitx_table_collect_begin_ #1 : } } -\cs_set_protected_nopar:Npn \_siunitx_table_collect_begin_s: { - \cs_set_eq:NN \_siunitx_table_collect_token:N - \_siunitx_table_collect_token_s:N - \cs_set_eq:NN \_siunitx_table_print: \_siunitx_table_print_s: - \_siunitx_table_collect_init_s: - \_siunitx_table_collect_get: +\cs_new_protected_nopar:Npn \siunitx_table_collect_begin_s: { + \cs_set_eq:NN \siunitx_table_collect_token:N + \siunitx_table_collect_token_s:N + \cs_set_eq:NN \siunitx_table_print: \siunitx_table_print_s: + \siunitx_table_collect_init_s: + \siunitx_table_collect_get: } -\cs_set_protected_nopar:Npn \_siunitx_table_collect_begin_S: { - \cs_set_eq:NN \_siunitx_table_collect_token:N - \_siunitx_table_collect_token_S:N - \cs_set_eq:NN \_siunitx_table_print: \_siunitx_table_print_S: - \_siunitx_table_collect_init_S: - \bool_if:NTF \_l_siunitx_number_parse_bool - { \_siunitx_table_collect_get: } - { \_siunitx_table_direct: } +\cs_new_protected_nopar:Npn \siunitx_table_collect_begin_S: { + \cs_set_eq:NN \siunitx_table_collect_token:N + \siunitx_table_collect_token_S:N + \cs_set_eq:NN \siunitx_table_print: \siunitx_table_print_S: + \siunitx_table_collect_init_S: + \bool_if:NTF \l_siunitx_number_parse_bool + { \siunitx_table_collect_get: } + { \siunitx_table_direct: } } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_collect_braced:n} +%\begin{macro}{\siunitx_table_collect_braced:n} % The collection of braced items depends on the column type. So we % start of with an empty definition. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_table_collect_braced:n #1 { } +\cs_new_protected:Npn \siunitx_table_collect_braced:n #1 { } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_table_collect_expand:N} +%\begin{macro}{\siunitx_table_collect_expand:N} % The idea here is to expand content if possible. There are a few % things to note. Only macros which are not long or protected are % expanded. There is the possibility that the macro may need the % contents of the pre-numeral part to be executed, for example see % \cref{tab:xmpl:calc} in the user part of the documentation. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_table_collect_expand:N #1 { +\cs_new_protected:Npn \siunitx_table_collect_expand:N #1 { \cs_if_eq:NNTF #1 \color { - \bool_if:NTF \_l_siunitx_table_collect_pre_bool + \bool_if:NTF \l_siunitx_table_collect_pre_bool { - \tl_clear:N \_l_siunitx_number_color_tl - \tl_clear:N \_l_siunitx_unit_color_tl - \tl_put_right:Nn \_l_siunitx_table_collect_pre_tl {#1} + \tl_clear:N \l_siunitx_number_color_tl + \tl_clear:N \l_siunitx_unit_color_tl + \tl_put_right:Nn \l_siunitx_table_collect_pre_tl {#1} } { - \bool_set_true:N \_l_siunitx_table_collect_post_bool - \tl_put_right:Nn \_l_siunitx_table_collect_post_tl {#1} + \bool_set_true:N \l_siunitx_table_collect_post_bool + \tl_put_right:Nn \l_siunitx_table_collect_post_tl {#1} } } { - \_siunitx_cs_if_tl:NTF #1 + \siunitx_cs_if_tl:NTF #1 { - \tl_use:N \_l_siunitx_table_collect_pre_tl - \tl_clear:N \_l_siunitx_table_collect_pre_tl - \cs_set_nopar:Npx \_siunitx_table_collect_next: - { \exp_not:N \_siunitx_table_collect_get: \exp_not:V #1 } + \tl_use:N \l_siunitx_table_collect_pre_tl + \tl_clear:N \l_siunitx_table_collect_pre_tl + \cs_set_nopar:Npx \siunitx_table_collect_next: + { \exp_not:N \siunitx_table_collect_get: \exp_not:V #1 } } { - \bool_if:NTF \_l_siunitx_table_collect_pre_bool - { \tl_put_right:Nn \_l_siunitx_table_collect_pre_tl {#1} } + \bool_if:NTF \l_siunitx_table_collect_pre_bool + { \tl_put_right:Nn \l_siunitx_table_collect_pre_tl {#1} } { - \bool_set_true:N \_l_siunitx_table_collect_post_bool - \tl_put_right:Nn \_l_siunitx_table_collect_post_tl {#1} + \bool_set_true:N \l_siunitx_table_collect_post_bool + \tl_put_right:Nn \l_siunitx_table_collect_post_tl {#1} } } } @@ -10607,8 +10649,8 @@ This work consists of the file siunitx.dtx % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_table_collect_get:} -%\begin{macro}{\_siunitx_table_collect_get_aux:} +%\begin{macro}{\siunitx_table_collect_get:} +%\begin{macro}{\siunitx_table_collect_get_aux:} % The token collection system first has to check that the next argument % does not start with an opening-brace character. If it does, the % testing is skipped and the braced token is stored. Otherwise, a check @@ -10616,15 +10658,15 @@ This work consists of the file siunitx.dtx % broken with \pkg{expl3}'s \cs{peek_catcode_ignore_spaces:NTF}, so % everything is done by hand. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_collect_get: { - \cs_set_eq:NN \_siunitx_table_collect_next: - \_siunitx_table_collect_get: +\cs_new_protected_nopar:Npn \siunitx_table_collect_get: { + \cs_set_eq:NN \siunitx_table_collect_next: + \siunitx_table_collect_get: \cs_set_nopar:Npn \peek_execute_branches: { \if_catcode:w \exp_not:N \l_peek_token \c_group_begin_token - \exp_after:wN \_siunitx_table_collect_braced:n + \exp_after:wN \siunitx_table_collect_braced:n \else: - \exp_after:wN \_siunitx_table_collect_not_braced:N + \exp_after:wN \siunitx_table_collect_not_braced:N \fi: } \peek_after:NN \peek_ignore_spaces_execute_branches: @@ -10633,153 +10675,153 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_collect_init:} +%\begin{macro}{\siunitx_table_collect_init:} % The usual spin-out of basics. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_collect_init: { - \tl_clear:N \_l_siunitx_table_collect_tl - \tl_clear:N \_l_siunitx_table_collect_pre_tl - \tl_clear:N \_l_siunitx_table_collect_post_tl - \bool_set_false:N \_l_siunitx_table_collect_post_bool +\cs_new_protected_nopar:Npn \siunitx_table_collect_init: { + \tl_clear:N \l_siunitx_table_collect_tl + \tl_clear:N \l_siunitx_table_collect_pre_tl + \tl_clear:N \l_siunitx_table_collect_post_tl + \bool_set_false:N \l_siunitx_table_collect_post_bool } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_collect_init_s:} -%\begin{macro}{\_siunitx_table_collect_init_S:} +%\begin{macro}{\siunitx_table_collect_init_s:} +%\begin{macro}{\siunitx_table_collect_init_S:} % Some type-specific definitions. In the \texttt{S} case, the % initialisation function for numbers is used to set -% \cs{_l_siunitx_number_valid_tl} correctly. +% \cs{l_siunitx_number_valid_tl} correctly. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_collect_init_s: { - \_siunitx_table_collect_init: - \bool_set_false:N \_l_siunitx_table_collect_pre_bool - \cs_set:Npn \_siunitx_table_collect_braced:n ##1 +\cs_new_protected_nopar:Npn \siunitx_table_collect_init_s: { + \siunitx_table_collect_init: + \bool_set_false:N \l_siunitx_table_collect_pre_bool + \cs_set:Npn \siunitx_table_collect_braced:n ##1 { - \tl_put_right:Nn \_l_siunitx_table_collect_tl { {##1} } - \_siunitx_table_collect_next: + \tl_put_right:Nn \l_siunitx_table_collect_tl { {##1} } + \siunitx_table_collect_next: } } -\cs_set_protected_nopar:Npn \_siunitx_table_collect_init_S: { - \_siunitx_number_in_init: - \tl_set:Nx \_l_siunitx_number_valid_tl +\cs_new_protected_nopar:Npn \siunitx_table_collect_init_S: { + \siunitx_number_in_init: + \tl_set:Nx \l_siunitx_number_valid_tl { - \exp_not:V \_l_siunitx_input_complex_tl - \exp_not:V \_l_siunitx_input_decimal_tl - \exp_not:V \_l_siunitx_input_digit_tl - \exp_not:V \_l_siunitx_input_exponent_tl - \exp_not:V \_l_siunitx_input_ignore_tl - \exp_not:V \_l_siunitx_input_uncert_close_tl - \exp_not:V \_l_siunitx_input_uncert_open_tl - \exp_not:V \_l_siunitx_input_sign_tl - \exp_not:V \_l_siunitx_input_symbol_tl + \exp_not:V \l_siunitx_input_complex_tl + \exp_not:V \l_siunitx_input_decimal_tl + \exp_not:V \l_siunitx_input_digit_tl + \exp_not:V \l_siunitx_input_exponent_tl + \exp_not:V \l_siunitx_input_ignore_tl + \exp_not:V \l_siunitx_input_uncert_close_tl + \exp_not:V \l_siunitx_input_uncert_open_tl + \exp_not:V \l_siunitx_input_sign_tl + \exp_not:V \l_siunitx_input_symbol_tl } - \bool_set_true:N \_l_siunitx_table_collect_pre_bool - \cs_set:Npn \_siunitx_table_collect_braced:n ##1 + \bool_set_true:N \l_siunitx_table_collect_pre_bool + \cs_set:Npn \siunitx_table_collect_braced:n ##1 { - \bool_if:NTF \_l_siunitx_table_collect_pre_bool - { \tl_put_right:Nn \_l_siunitx_table_collect_pre_tl { {##1} } } + \bool_if:NTF \l_siunitx_table_collect_pre_bool + { \tl_put_right:Nn \l_siunitx_table_collect_pre_tl { {##1} } } { - \bool_set_true:N \_l_siunitx_table_collect_post_bool - \tl_put_right:Nn \_l_siunitx_table_collect_post_tl { {##1} } + \bool_set_true:N \l_siunitx_table_collect_post_bool + \tl_put_right:Nn \l_siunitx_table_collect_post_tl { {##1} } } - \_siunitx_table_collect_next: + \siunitx_table_collect_next: } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_collect_next:} +%\begin{macro}{\siunitx_table_collect_next:} % A holder for the next thing to do. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_collect_next: { } +\cs_new_protected_nopar:Npn \siunitx_table_collect_next: { } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_table_collect_newline:} +%\begin{macro}{\siunitx_table_collect_newline:} % The end macro needs to come before the new line is called. The % print function is redefined so that it only actually does stuff once. % As each cell is a group anyway, there is no need to save the % definition of \cs{siunitx_table_print:}, as it will re-appear on its % own. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_collect_newline: { - \_siunitx_table_print: - \cs_set_eq:NN \_siunitx_table_print: \prg_do_nothing: +\cs_new_protected_nopar:Npn \siunitx_table_collect_newline: { + \siunitx_table_print: + \cs_set_eq:NN \siunitx_table_print: \prg_do_nothing: \tabularnewline } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_table_collect_not_braced:N} -%\begin{macro}[aux]{\_siunitx_table_collect_not_braced_aux_i:N} -%\begin{macro}[aux]{\_siunitx_table_collect_not_braced_aux_ii:N} +%\begin{macro}{\siunitx_table_collect_not_braced:N} +%\begin{macro}[aux]{\siunitx_table_collect_not_braced_aux_i:N} +%\begin{macro}[aux]{\siunitx_table_collect_not_braced_aux_ii:N} % A few macros are simply passed through to be executed; this is mainly % so that the table actually works. The newline function needs its own % function, which is picked up by hand. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_table_collect_not_braced:N #1 { +\cs_new_protected:Npn \siunitx_table_collect_not_braced:N #1 { \token_if_eq_meaning:NNF #1 \tex_ignorespaces:D { \token_if_eq_meaning:NNF #1 \tex_unskip:D - { \_siunitx_table_collect_not_braced_aux_i:N #1 } + { \siunitx_table_collect_not_braced_aux_i:N #1 } } - \_siunitx_table_collect_next: + \siunitx_table_collect_next: } -\cs_set_protected:Npn \_siunitx_table_collect_not_braced_aux_i:N #1 { - \cs_set:Npn \_siunitx_table_collect_not_braced_aux_ii:N ##1 +\cs_new_protected:Npn \siunitx_table_collect_not_braced_aux_i:N #1 { + \cs_set:Npn \siunitx_table_collect_not_braced_aux_ii:N ##1 { \token_if_eq_meaning:NNT #1 ##1 - { \cs_set_eq:NN \_siunitx_table_collect_next: ##1 } + { \cs_set_eq:NN \siunitx_table_collect_next: ##1 } } \tl_map_function:nN - { \cs:w \end \endtabular \scan_stop: \_siunitx_table_print: } - \_siunitx_table_collect_not_braced_aux_ii:N - \token_if_eq_meaning:NNT \_siunitx_table_collect_next: - \_siunitx_table_collect_get: + { \cs:w \end \endtabular \scan_stop: \siunitx_table_print: } + \siunitx_table_collect_not_braced_aux_ii:N + \token_if_eq_meaning:NNT \siunitx_table_collect_next: + \siunitx_table_collect_get: { \token_if_eq_meaning:NNTF #1 \tabularnewline { - \cs_set_eq:NN \_siunitx_table_collect_next: - \_siunitx_table_collect_newline: + \cs_set_eq:NN \siunitx_table_collect_next: + \siunitx_table_collect_newline: } - { \_siunitx_table_collect_token:N #1 } + { \siunitx_table_collect_token:N #1 } } } -\cs_set_protected:Npn \_siunitx_table_collect_not_braced_aux_ii:N #1 { } +\cs_new_protected:Npn \siunitx_table_collect_not_braced_aux_ii:N #1 { } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_collect_token:N} -%\begin{macro}{\_siunitx_table_collect_token_s:N} +%\begin{macro}{\siunitx_table_collect_token:N} +%\begin{macro}{\siunitx_table_collect_token_s:N} % For the \texttt{s} column, every token is added to the same storage % area, so life is simple. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_table_collect_token:N #1 { } -\cs_set_protected:Npn \_siunitx_table_collect_token_s:N #1 { - \tl_put_right:Nn \_l_siunitx_table_collect_tl {#1} +\cs_new_protected:Npn \siunitx_table_collect_token:N #1 { } +\cs_new_protected:Npn \siunitx_table_collect_token_s:N #1 { + \tl_put_right:Nn \l_siunitx_table_collect_tl {#1} } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_table_collect_token_S:N} +%\begin{macro}{\siunitx_table_collect_token_S:N} % Not so easy for the \texttt{S} column type. If the content is after % a number, things are easy. On the other hand, if the token might be % a number, then a check is made. It the token is still unmatched, then % it is passed on to the expansion handler. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_table_collect_token_S:N #1 { - \bool_if:NTF \_l_siunitx_table_collect_post_bool - { \tl_put_right:Nn \_l_siunitx_table_collect_post_tl {#1} } +\cs_new_protected:Npn \siunitx_table_collect_token_S:N #1 { + \bool_if:NTF \l_siunitx_table_collect_post_bool + { \tl_put_right:Nn \l_siunitx_table_collect_post_tl {#1} } { - \tl_if_in:NnTF \_l_siunitx_number_valid_tl {#1} + \tl_if_in:NnTF \l_siunitx_number_valid_tl {#1} { - \bool_set_false:N \_l_siunitx_table_collect_pre_bool - \tl_put_right:Nn \_l_siunitx_table_collect_tl {#1} + \bool_set_false:N \l_siunitx_table_collect_pre_bool + \tl_put_right:Nn \l_siunitx_table_collect_tl {#1} } - { \_siunitx_table_collect_expand:N #1 } + { \siunitx_table_collect_expand:N #1 } } } % \end{macrocode} @@ -10787,55 +10829,55 @@ This work consists of the file siunitx.dtx % %\subsection{Table printing: general code} % -%\begin{macro}{\_c_siunitx_one_fill_skip} +%\begin{macro}{\c_siunitx_one_fill_skip} % A fixed skip of one \texttt{fill}. % \begin{macrocode} -\skip_new:N \_c_siunitx_one_fill_skip -\skip_set:Nn \_c_siunitx_one_fill_skip { \c_zero_skip plus 1 fill } +\skip_new:N \c_siunitx_one_fill_skip +\skip_set:Nn \c_siunitx_one_fill_skip { \c_zero_skip plus 1 fill } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_c_siunitx_table_correction_skip} -%\begin{macro}{\_siunitx_table_colortbl_correction:} +%\begin{macro}{\c_siunitx_table_correction_skip} +%\begin{macro}{\siunitx_table_colortbl_correction:} % If the package \pkg{colortbl} is loaded, there is a need to allow % that it changes how centring is carried out. % \begin{macrocode} -\skip_new:N \_c_siunitx_table_correction_skip +\skip_new:N \c_siunitx_table_correction_skip \AtBeginDocument { \@ifpackageloaded { colortbl } { - \skip_set:Nn \_c_siunitx_table_correction_skip + \skip_set:Nn \c_siunitx_table_correction_skip { \c_zero_skip plus -0.5 fill } } { - \skip_set:Nn \_c_siunitx_table_correction_skip + \skip_set:Nn \c_siunitx_table_correction_skip { \c_zero_skip } } } -\cs_set_protected_nopar:Npn \_siunitx_table_colortbl_correction: { - \skip_horizontal:n { \_c_siunitx_table_correction_skip } +\cs_new_protected_nopar:Npn \siunitx_table_colortbl_correction: { + \skip_horizontal:n { \c_siunitx_table_correction_skip } \tex_kern:D \c_zero_skip } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_align_left:n} -%\begin{macro}{\_siunitx_table_align_right:n} +%\begin{macro}{\siunitx_table_align_left:n} +%\begin{macro}{\siunitx_table_align_right:n} % These are simple shortcuts to keep life clearer in the rest of the % code. The idea is that the kern acts as a \enquote{stop} for the % horizontal skip. The correction for \pkg{colortbl} is separate as the % spacing needs to be explicitly deleted. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_align_left:n #1 { - \_siunitx_table_colortbl_correction: +\cs_new_protected_nopar:Npn \siunitx_table_align_left:n #1 { + \siunitx_table_colortbl_correction: \skip_horizontal:n {#1} \tex_kern:D \c_zero_skip } -\cs_set_protected_nopar:Npn \_siunitx_table_align_right:n #1 { - \skip_horizontal:n { \_c_siunitx_one_fill_skip - #1 } +\cs_new_protected_nopar:Npn \siunitx_table_align_right:n #1 { + \skip_horizontal:n { \c_siunitx_one_fill_skip - #1 } \tex_kern:D \c_zero_skip - \_siunitx_table_colortbl_correction: + \siunitx_table_colortbl_correction: } % \end{macrocode} %\end{macro} @@ -10848,10 +10890,10 @@ This work consists of the file siunitx.dtx % collected input as the argument to the internal part of an \cs{si} % function. % -%\begin{macro}{\_l_siunitx_table_unit_align_skip} +%\begin{macro}{\l_siunitx_table_unit_align_skip} % The spacing used is stored as a skip, which needs to be set up first. % \begin{macrocode} -\skip_new:N \_l_siunitx_table_unit_align_skip +\skip_new:N \l_siunitx_table_unit_align_skip % \end{macrocode} %\end{macro} % @@ -10860,17 +10902,17 @@ This work consists of the file siunitx.dtx table-unit-alignment .choice:, table-unit-alignment / center .code:n = { - \skip_set:Nn \_l_siunitx_table_unit_align_skip + \skip_set:Nn \l_siunitx_table_unit_align_skip { \c_zero_skip plus 0.5 fill } }, table-unit-alignment / left .code:n = { - \skip_set:Nn \_l_siunitx_table_unit_align_skip + \skip_set:Nn \l_siunitx_table_unit_align_skip { \c_zero_skip } }, table-unit-alignment / right .code:n = { - \skip_set:Nn \_l_siunitx_table_unit_align_skip + \skip_set:Nn \l_siunitx_table_unit_align_skip { \c_zero_skip plus 1 fill } }, } @@ -10879,15 +10921,15 @@ This work consists of the file siunitx.dtx } % \end{macrocode} % -%\begin{macro}{\_siunitx_table_print_s:} +%\begin{macro}{\siunitx_table_print_s:} % Actually printing an \texttt{s} column is not very complex. There is % some spacing to do at each side, with the main part of the job being % to print the material using the internal version of \cs{si}. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_s: { - \_siunitx_table_align_left:n { \_l_siunitx_table_unit_align_skip } - \_siunitx_unit_output:Vn \_l_siunitx_table_collect_tl { } - \_siunitx_table_align_right:n { \_l_siunitx_table_unit_align_skip } +\cs_new_protected_nopar:Npn \siunitx_table_print_s: { + \siunitx_table_align_left:n { \l_siunitx_table_unit_align_skip } + \siunitx_unit_output:Vn \l_siunitx_table_collect_tl { } + \siunitx_table_align_right:n { \l_siunitx_table_unit_align_skip } } % \end{macrocode} %\end{macro} @@ -10898,63 +10940,63 @@ This work consists of the file siunitx.dtx % output then print it. Most of the formatting is done elsewhere, so % most of the work here is in printing. % -%\begin{macro}{\_l_siunitx_table_center_decimal_bool} +%\begin{macro}{\l_siunitx_table_center_decimal_bool} % A switch for the basic \enquote{decimal marker in the middle} % mode. % \begin{macrocode} -\bool_new:N \_l_siunitx_table_center_decimal_bool +\bool_new:N \l_siunitx_table_center_decimal_bool % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_fill_box} +%\begin{macro}{\l_siunitx_table_fill_box} % A box which is only ever filled with \texttt{fil} glue, for padding % out numbers. % \begin{macrocode} -\box_new:N \_l_siunitx_table_fill_box +\box_new:N \l_siunitx_table_fill_box % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_fill_dim} +%\begin{macro}{\l_siunitx_table_fill_dim} % Calculating the fill needed can be a bit complicated, so is best % done using a dedicated dimension. % \begin{macrocode} -\dim_new:N \_l_siunitx_table_fill_dim +\dim_new:N \l_siunitx_table_fill_dim % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_pre_box} -%\begin{macro}{\_l_siunitx_table_post_box} +%\begin{macro}{\l_siunitx_table_pre_box} +%\begin{macro}{\l_siunitx_table_post_box} % Boxes for the content before and after the numerical part. % \begin{macrocode} -\box_new:N \_l_siunitx_table_pre_box -\box_new:N \_l_siunitx_table_post_box +\box_new:N \l_siunitx_table_pre_box +\box_new:N \l_siunitx_table_post_box % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_result_box} +%\begin{macro}{\l_siunitx_table_result_box} % The box which is actually needed for printing. % \begin{macrocode} -\box_new:N \_l_siunitx_table_result_box +\box_new:N \l_siunitx_table_result_box % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_decimal_dim} -%\begin{macro}{\_l_siunitx_table_exponent_dim} -%\begin{macro}{\_l_siunitx_table_integer_dim} -%\begin{macro}{\_l_siunitx_table_mantissa_dim} -%\begin{macro}{\_l_siunitx_table_marker_dim} -%\begin{macro}{\_l_siunitx_table_result_dim} -%\begin{macro}{\_l_siunitx_table_uncert_dim} +%\begin{macro}{\l_siunitx_table_decimal_dim} +%\begin{macro}{\l_siunitx_table_exponent_dim} +%\begin{macro}{\l_siunitx_table_integer_dim} +%\begin{macro}{\l_siunitx_table_mantissa_dim} +%\begin{macro}{\l_siunitx_table_marker_dim} +%\begin{macro}{\l_siunitx_table_result_dim} +%\begin{macro}{\l_siunitx_table_uncert_dim} % Dimensions for the various model measurements. % \begin{macrocode} -\dim_new:N \_l_siunitx_table_decimal_dim -\dim_new:N \_l_siunitx_table_exponent_dim -\dim_new:N \_l_siunitx_table_integer_dim -\dim_new:N \_l_siunitx_table_mantissa_dim -\dim_new:N \_l_siunitx_table_marker_dim -\dim_new:N \_l_siunitx_table_result_dim -\dim_new:N \_l_siunitx_table_uncert_dim +\dim_new:N \l_siunitx_table_decimal_dim +\dim_new:N \l_siunitx_table_exponent_dim +\dim_new:N \l_siunitx_table_integer_dim +\dim_new:N \l_siunitx_table_mantissa_dim +\dim_new:N \l_siunitx_table_marker_dim +\dim_new:N \l_siunitx_table_result_dim +\dim_new:N \l_siunitx_table_uncert_dim % \end{macrocode} %\end{macro} %\end{macro} @@ -10964,111 +11006,111 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_gap_dim} +%\begin{macro}{\l_siunitx_table_gap_dim} % This is used to work out the potential gap between a number and % any following material. % \begin{macrocode} -\dim_new:N \_l_siunitx_table_gap_dim +\dim_new:N \l_siunitx_table_gap_dim % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_model_prop} +%\begin{macro}{\l_siunitx_table_model_prop} % To store the model version of a number, used when reserving space. % \begin{macrocode} -\prop_new:N \_l_siunitx_table_model_prop +\prop_new:N \l_siunitx_table_model_prop % \end{macrocode} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_text_align_skip} -%\begin{macro}{\_l_siunitx_table_number_align_skip} +%\begin{macro}{\l_siunitx_table_text_align_skip} +%\begin{macro}{\l_siunitx_table_number_align_skip} % Skips for aligning text and numbers. % \begin{macrocode} -\skip_new:N \_l_siunitx_table_number_align_skip -\skip_new:N \_l_siunitx_table_text_align_skip +\skip_new:N \l_siunitx_table_number_align_skip +\skip_new:N \l_siunitx_table_text_align_skip % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_l_siunitx_table_align_post_bool} -%\begin{macro}{\_l_siunitx_table_auto_bool} -%\begin{macro}{\_l_siunitx_table_decimal_int} -%\begin{macro}{\_l_siunitx_table_exponent_int} -%\begin{macro}{\_l_siunitx_table_integer_int} -%\begin{macro}{\_l_siunitx_table_uncert_int} -%\begin{macro}{\_l_siunitx_table_parse_only_bool} -%\begin{macro}{\_l_siunitx_table_pre_tl} -%\begin{macro}{\_l_siunitx_table_post_tl} -%\begin{macro}{\_l_siunitx_table_sign_exponent_bool} -%\begin{macro}{\_l_siunitx_table_sign_manitssa_bool} +%\begin{macro}{\l_siunitx_table_align_post_bool} +%\begin{macro}{\l_siunitx_table_auto_bool} +%\begin{macro}{\l_siunitx_table_decimal_int} +%\begin{macro}{\l_siunitx_table_exponent_int} +%\begin{macro}{\l_siunitx_table_integer_int} +%\begin{macro}{\l_siunitx_table_uncert_int} +%\begin{macro}{\l_siunitx_table_parse_only_bool} +%\begin{macro}{\l_siunitx_table_pre_tl} +%\begin{macro}{\l_siunitx_table_post_tl} +%\begin{macro}{\l_siunitx_table_sign_exponent_bool} +%\begin{macro}{\l_siunitx_table_sign_manitssa_bool} % As usual, set up the options. % \begin{macrocode} \keys_define:nn { siunitx } { table-align-text-post .bool_set:N - = \_l_siunitx_table_align_post_bool, + = \l_siunitx_table_align_post_bool, table-number-alignment .choice:, table-number-alignment / center .code:n = { - \skip_set:Nn \_l_siunitx_table_number_align_skip + \skip_set:Nn \l_siunitx_table_number_align_skip { \c_zero_skip plus 0.5 fill } - \bool_set_false:N \_l_siunitx_table_center_decimal_bool + \bool_set_false:N \l_siunitx_table_center_decimal_bool }, table-number-alignment / center-decimal-marker .code:n = { - \skip_set:Nn \_l_siunitx_table_number_align_skip + \skip_set:Nn \l_siunitx_table_number_align_skip { \c_zero_skip plus 0.5 fill } - \bool_set_true:N \_l_siunitx_table_center_decimal_bool + \bool_set_true:N \l_siunitx_table_center_decimal_bool }, table-number-alignment / left .code:n = { - \skip_set:Nn \_l_siunitx_table_number_align_skip + \skip_set:Nn \l_siunitx_table_number_align_skip { \c_zero_skip } - \bool_set_false:N \_l_siunitx_table_center_decimal_bool + \bool_set_false:N \l_siunitx_table_center_decimal_bool }, table-number-alignment / right .code:n = { - \skip_set:Nn \_l_siunitx_table_number_align_skip + \skip_set:Nn \l_siunitx_table_number_align_skip { \c_zero_skip plus 1 fill } - \bool_set_false:N \_l_siunitx_table_center_decimal_bool + \bool_set_false:N \l_siunitx_table_center_decimal_bool }, table-text-alignment .choice:, table-text-alignment / center .code:n = { - \skip_set:Nn \_l_siunitx_table_text_align_skip + \skip_set:Nn \l_siunitx_table_text_align_skip { \c_zero_skip plus 0.5 fill } }, table-text-alignment / left .code:n = { - \skip_set:Nn \_l_siunitx_table_text_align_skip + \skip_set:Nn \l_siunitx_table_text_align_skip { \c_zero_skip } }, table-text-alignment / right .code:n = { - \skip_set:Nn \_l_siunitx_table_text_align_skip + \skip_set:Nn \l_siunitx_table_text_align_skip { \c_zero_skip plus 1 fill } }, - table-auto-round .bool_set:N = \_l_siunitx_table_auto_bool, - table-figures-decimal .int_set:N = \_l_siunitx_table_decimal_int, + table-auto-round .bool_set:N = \l_siunitx_table_auto_bool, + table-figures-decimal .int_set:N = \l_siunitx_table_decimal_int, table-figures-exponent .int_set:N = - \_l_siunitx_table_exponent_int, - table-figures-integer .int_set:N = \_l_siunitx_table_integer_int, - table-figures-uncertainty .int_set:N = \_l_siunitx_table_uncert_int , + \l_siunitx_table_exponent_int, + table-figures-integer .int_set:N = \l_siunitx_table_integer_int, + table-figures-uncertainty .int_set:N = \l_siunitx_table_uncert_int , table-parse-only .bool_set:N = - \_l_siunitx_table_parse_only_bool, + \l_siunitx_table_parse_only_bool, table-space-text-pre .tl_set:N = - \_l_siunitx_table_pre_tl, + \l_siunitx_table_pre_tl, table-space-text-post .tl_set:N = - \_l_siunitx_table_post_tl, + \l_siunitx_table_post_tl, table-sign-exponent .bool_set:N = - \_l_siunitx_table_sign_exponent_bool, + \l_siunitx_table_sign_exponent_bool, table-sign-mantissa .bool_set:N = - \_l_siunitx_table_sign_mantissa_bool + \l_siunitx_table_sign_mantissa_bool } \keys_set:nn { siunitx } { table-align-text-post = true, @@ -11102,105 +11144,105 @@ This work consists of the file siunitx.dtx } % \end{macrocode} % -%\begin{macro}{\_siunitx_table_format_convert:nn} +%\begin{macro}{\siunitx_table_format_convert:nn} % Another special option. This converts a number format in compacted % form into the various internal settings needed. The function is used % for the conversion to keep code down. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_format_convert:nn #1#2 { - \prop_get:NnN \_l_siunitx_number_in_prop {#1} \_l_siunitx_tmpa_tl - \quark_if_no_value:NTF \_l_siunitx_tmpa_tl - { \int_set:cn { _l_siunitx_table_ #2 _int } { 0 } } +\cs_new_protected_nopar:Npn \siunitx_table_format_convert:nn #1#2 { + \prop_get:NnN \l_siunitx_number_in_prop {#1} \l_siunitx_tmpa_tl + \quark_if_no_value:NTF \l_siunitx_tmpa_tl + { \int_set:cn { l_siunitx_table_ #2 _int } { 0 } } { - \prop_get:NnN \_l_siunitx_number_in_prop {#1} \_l_siunitx_tmpa_tl - \int_set:cn { _l_siunitx_table_ #2 _int } { \_l_siunitx_tmpa_tl } + \prop_get:NnN \l_siunitx_number_in_prop {#1} \l_siunitx_tmpa_tl + \int_set:cn { l_siunitx_table_ #2 _int } { \l_siunitx_tmpa_tl } } } \keys_define:nn { siunitx } { table-format .code:n = { - \_siunitx_number_in_parse:n {#1} - \_siunitx_table_format_convert:nn { mantissa-integer } { integer } - \_siunitx_table_format_convert:nn { mantissa-decimal } { decimal } - \_siunitx_table_format_convert:nn { mantissa-uncertainty } + \siunitx_number_in_parse:n {#1} + \siunitx_table_format_convert:nn { mantissa-integer } { integer } + \siunitx_table_format_convert:nn { mantissa-decimal } { decimal } + \siunitx_table_format_convert:nn { mantissa-uncertainty } { uncert } - \_siunitx_table_format_convert:nn { exponent-integer } + \siunitx_table_format_convert:nn { exponent-integer } { exponent } - \prop_if_in:NnTF \_l_siunitx_number_in_prop { mantissa-sign } - { \bool_set_true:N \_l_siunitx_table_sign_mantissa_bool } - { \bool_set_false:N \_l_siunitx_table_sign_mantissa_bool } - \prop_if_in:NnTF \_l_siunitx_number_in_prop { exponent-sign } - { \bool_set_true:N \_l_siunitx_table_sign_mantissa_bool } - { \bool_set_false:N \_l_siunitx_table_sign_mantissa_bool } + \prop_if_in:NnTF \l_siunitx_number_in_prop { mantissa-sign } + { \bool_set_true:N \l_siunitx_table_sign_mantissa_bool } + { \bool_set_false:N \l_siunitx_table_sign_mantissa_bool } + \prop_if_in:NnTF \l_siunitx_number_in_prop { exponent-sign } + { \bool_set_true:N \l_siunitx_table_sign_exponent_bool } + { \bool_set_false:N \l_siunitx_table_sign_exponent_bool } \keys_set:nn { siunitx } { table-number-alignment = center } }, } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_table_print_S:} +%\begin{macro}{\siunitx_table_print_S:} % The main printing function does a simple test: was there anything % found that counts as a number. If there was, most of the detail % is handled elsewhere. If there is only test (such as a heading) % then it can be printed. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S: { - \bool_if:NTF \_l_siunitx_table_collect_pre_bool +\cs_new_protected_nopar:Npn \siunitx_table_print_S: { + \bool_if:NTF \l_siunitx_table_collect_pre_bool { - \_siunitx_table_align_left:n { \_l_siunitx_table_text_align_skip } - \tl_use:N \_l_siunitx_table_collect_pre_tl - \_siunitx_table_align_right:n - { \_l_siunitx_table_text_align_skip } + \siunitx_table_align_left:n { \l_siunitx_table_text_align_skip } + \tl_use:N \l_siunitx_table_collect_pre_tl + \siunitx_table_align_right:n + { \l_siunitx_table_text_align_skip } } { - \_siunitx_table_align_left:n - { \_l_siunitx_table_number_align_skip } - \_siunitx_table_print_S_aux: - \_siunitx_table_align_right:n - { \_l_siunitx_table_number_align_skip } + \siunitx_table_align_left:n + { \l_siunitx_table_number_align_skip } + \siunitx_table_print_S_aux: + \siunitx_table_align_right:n + { \l_siunitx_table_number_align_skip } } } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_table_print_S_aux:} +%\begin{macro}[aux]{\siunitx_table_print_S_aux:} % The auxiliary function now splits the path. If the number is only % being parsed, then it is printed with no more fuss. Otherwise, there % is a second choice based on the alignment approach. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_aux: { - \bool_if:NTF \_l_siunitx_table_parse_only_bool +\cs_new_protected_nopar:Npn \siunitx_table_print_S_aux: { + \bool_if:NTF \l_siunitx_table_parse_only_bool { - \tl_use:N \_l_siunitx_table_collect_pre_tl - \_siunitx_number_output:V \_l_siunitx_table_collect_tl - \tl_use:N \_l_siunitx_table_collect_post_tl + \tl_use:N \l_siunitx_table_collect_pre_tl + \siunitx_number_output:V \l_siunitx_table_collect_tl + \tl_use:N \l_siunitx_table_collect_post_tl } { - \bool_if:NTF \_l_siunitx_table_center_decimal_bool - { \_siunitx_table_print_S_centered: } - { \_siunitx_table_print_S_reserved: } + \bool_if:NTF \l_siunitx_table_center_decimal_bool + { \siunitx_table_print_S_centered: } + { \siunitx_table_print_S_reserved: } } } % \end{macrocode} %\end{macro} % -%\begin{macro}[aux]{\_siunitx_table_print_S_parse:} +%\begin{macro}[aux]{\siunitx_table_print_S_parse:} % A modified version of the number parser for tables. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_parse: { - \bool_set_false:N \_l_siunitx_error_bool - \_siunitx_number_in_parse:V \_l_siunitx_table_collect_tl - \bool_if:NF \_l_siunitx_error_bool +\cs_new_protected_nopar:Npn \siunitx_table_print_S_parse: { + \bool_set_false:N \l_siunitx_error_bool + \siunitx_number_in_parse:V \l_siunitx_table_collect_tl + \bool_if:NF \l_siunitx_error_bool { - \_siunitx_number_process: - \_siunitx_number_format: - \_siunitx_number_output_color: + \siunitx_number_process: + \siunitx_number_format: + \siunitx_number_output_color: } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_table_print_S_centered:} +%\begin{macro}{\siunitx_table_print_S_centered:} % When centring the decimal marker, the logic is relatively simple. % First, box up the integer part of the number, the entire number and % the decimal marker itself. There is then a measurement to see @@ -11210,312 +11252,312 @@ This work consists of the file siunitx.dtx % space needed will be equal to the correction required to place notes, % \emph{etc}.~flush with the number. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_centered: { - \_siunitx_table_print_S_centered_ends: +\cs_new_protected_nopar:Npn \siunitx_table_print_S_centered: { + \siunitx_table_print_S_centered_ends: \dim_compare:nNnTF - { \box_wd:N \_l_siunitx_table_pre_box } = { \c_zero_skip } - { \tl_use:N \_l_siunitx_table_collect_pre_tl } - { \box_use:N \_l_siunitx_table_pre_box } - \_siunitx_table_print_S_parse: - \_siunitx_table_print_S_measure:Nnn \_l_siunitx_number_out_prop + { \box_wd:N \l_siunitx_table_pre_box } = { \c_zero_skip } + { \tl_use:N \l_siunitx_table_collect_pre_tl } + { \box_use:N \l_siunitx_table_pre_box } + \siunitx_table_print_S_parse: + \siunitx_table_print_S_measure:Nnn \l_siunitx_number_out_prop { integer } { mantissa } - \_siunitx_table_print_S_measure:Nnn \_l_siunitx_number_out_prop + \siunitx_table_print_S_measure:Nnn \l_siunitx_number_out_prop { marker } { mantissa } - \_siunitx_table_print_S_measure:Nnn \_l_siunitx_number_out_prop + \siunitx_table_print_S_measure:Nnn \l_siunitx_number_out_prop { result } { } - \box_set_eq:NN \_l_siunitx_table_result_box \_l_siunitx_tmp_box - \dim_set:Nn \_l_siunitx_table_fill_dim - { \_l_siunitx_table_result_dim - \_l_siunitx_table_integer_dim } - \prop_if_in:NnT \_l_siunitx_number_out_prop + \box_set_eq:NN \l_siunitx_table_result_box \l_siunitx_tmp_box + \dim_set:Nn \l_siunitx_table_fill_dim + { \l_siunitx_table_result_dim - \l_siunitx_table_integer_dim } + \prop_if_in:NnT \l_siunitx_number_out_prop { mantissa-decimal-marker } { - \dim_set:Nn \_l_siunitx_table_fill_dim - { \_l_siunitx_table_fill_dim - \_l_siunitx_table_marker_dim } + \dim_set:Nn \l_siunitx_table_fill_dim + { \l_siunitx_table_fill_dim - \l_siunitx_table_marker_dim } } \dim_compare:nNnTF - { \_l_siunitx_table_integer_dim } > { \_l_siunitx_table_fill_dim } - { \_siunitx_table_print_S_centered_integer: } - { \_siunitx_table_print_S_centered_decimal: } - \bool_if:NTF \_l_siunitx_table_align_post_bool - { \box_use:N \_l_siunitx_table_post_box } + { \l_siunitx_table_integer_dim } > { \l_siunitx_table_fill_dim } + { \siunitx_table_print_S_centered_integer: } + { \siunitx_table_print_S_centered_decimal: } + \bool_if:NTF \l_siunitx_table_align_post_bool + { \box_use:N \l_siunitx_table_post_box } { - \dim_set:Nn \_l_siunitx_table_fill_dim - { - \dim_use:N \_l_siunitx_table_fill_dim } - \skip_horizontal:N \_l_siunitx_table_fill_dim - \box_use:N \_l_siunitx_table_post_box - \box_use:N \_l_siunitx_table_fill_box + \dim_set:Nn \l_siunitx_table_fill_dim + { - \dim_use:N \l_siunitx_table_fill_dim } + \skip_horizontal:N \l_siunitx_table_fill_dim + \box_use:N \l_siunitx_table_post_box + \box_use:N \l_siunitx_table_fill_box } } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_table_print_S_centered_ends:} +%\begin{macro}[aux]{\siunitx_table_print_S_centered_ends:} % Here, the material before and after the numerical content is boxed up. % The shorter one is then re-boxed so that both sides are the same % length: this stops the alignment going out. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_centered_ends: { - \hbox_set:Nn \_l_siunitx_table_pre_box - { { \tl_use:N \_l_siunitx_table_collect_pre_tl } } - \hbox_set:Nn \_l_siunitx_table_post_box - { \tl_use:N \_l_siunitx_table_collect_post_tl } +\cs_new_protected_nopar:Npn \siunitx_table_print_S_centered_ends: { + \hbox_set:Nn \l_siunitx_table_pre_box + { { \tl_use:N \l_siunitx_table_collect_pre_tl } } + \hbox_set:Nn \l_siunitx_table_post_box + { \tl_use:N \l_siunitx_table_collect_post_tl } \dim_compare:nNnTF - { \box_wd:N \_l_siunitx_table_pre_box } > - { \box_wd:N \_l_siunitx_table_post_box } + { \box_wd:N \l_siunitx_table_pre_box } > + { \box_wd:N \l_siunitx_table_post_box } { - \hbox_set_to_wd:Nnn \_l_siunitx_table_post_box - { \box_wd:N \_l_siunitx_table_pre_box } + \hbox_set_to_wd:Nnn \l_siunitx_table_post_box + { \box_wd:N \l_siunitx_table_pre_box } { - \hbox_unpack:N \_l_siunitx_table_post_box + \hbox_unpack:N \l_siunitx_table_post_box \tex_hfil:D } } { - \hbox_set_to_wd:Nnn \_l_siunitx_table_pre_box - { \box_wd:N \_l_siunitx_table_post_box } + \hbox_set_to_wd:Nnn \l_siunitx_table_pre_box + { \box_wd:N \l_siunitx_table_post_box } { \tex_hfil:D - \hbox_unpack:N \_l_siunitx_table_pre_box + \hbox_unpack:N \l_siunitx_table_pre_box } } } % \end{macrocode} %\end{macro} -%\begin{macro}[aux]{\_siunitx_table_print_S_centered_integer:} -%\begin{macro}[aux]{\_siunitx_table_print_S_centered_decimal:} +%\begin{macro}[aux]{\siunitx_table_print_S_centered_integer:} +%\begin{macro}[aux]{\siunitx_table_print_S_centered_decimal:} % Actually printing the content is a case of calculating a suitable % filler box, then printing it and the content. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_centered_integer: { - \dim_set:Nn \_l_siunitx_table_fill_dim - { \_l_siunitx_table_integer_dim - \_l_siunitx_table_fill_dim } - \hbox_set_to_wd:Nnn \_l_siunitx_table_fill_box - { \_l_siunitx_table_fill_dim } { \tex_hfil:D } - \box_use:N \_l_siunitx_table_result_box - \box_use:N \_l_siunitx_table_fill_box +\cs_new_protected_nopar:Npn \siunitx_table_print_S_centered_integer: { + \dim_set:Nn \l_siunitx_table_fill_dim + { \l_siunitx_table_integer_dim - \l_siunitx_table_fill_dim } + \hbox_set_to_wd:Nnn \l_siunitx_table_fill_box + { \l_siunitx_table_fill_dim } { \tex_hfil:D } + \box_use:N \l_siunitx_table_result_box + \box_use:N \l_siunitx_table_fill_box } -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_centered_decimal: { - \dim_set:Nn \_l_siunitx_table_fill_dim - { \_l_siunitx_table_fill_dim - \_l_siunitx_table_integer_dim } - \hbox_set_to_wd:Nnn \_l_siunitx_table_fill_box - { \_l_siunitx_table_fill_dim } { \tex_hfil:D } - \box_use:N \_l_siunitx_table_fill_box - \box_use:N \_l_siunitx_table_result_box +\cs_new_protected_nopar:Npn \siunitx_table_print_S_centered_decimal: { + \dim_set:Nn \l_siunitx_table_fill_dim + { \l_siunitx_table_fill_dim - \l_siunitx_table_integer_dim } + \hbox_set_to_wd:Nnn \l_siunitx_table_fill_box + { \l_siunitx_table_fill_dim } { \tex_hfil:D } + \box_use:N \l_siunitx_table_fill_box + \box_use:N \l_siunitx_table_result_box } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_print_S_reserved:} +%\begin{macro}{\siunitx_table_print_S_reserved:} % Sorting out a number with reserved space means checking each part % in turn. After sorting out the ends, a model number is constructed, % and this is then used by the various sub-routines to get the spacing % correct. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_reserved: { - \dim_zero:N \_l_siunitx_table_gap_dim - \_siunitx_table_print_S_reserved_ends: +\cs_new_protected_nopar:Npn \siunitx_table_print_S_reserved: { + \dim_zero:N \l_siunitx_table_gap_dim + \siunitx_table_print_S_reserved_ends: \dim_compare:nNnTF - { \box_wd:N \_l_siunitx_table_pre_box } = { \c_zero_skip } - { \tl_use:N \_l_siunitx_table_collect_pre_tl } - { \box_use:N \_l_siunitx_table_pre_box } - \_siunitx_table_print_S_model_create: - \bool_if:NT \_l_siunitx_table_auto_bool + { \box_wd:N \l_siunitx_table_pre_box } = { \c_zero_skip } + { \tl_use:N \l_siunitx_table_collect_pre_tl } + { \box_use:N \l_siunitx_table_pre_box } + \siunitx_table_print_S_model_create: + \bool_if:NT \l_siunitx_table_auto_bool { - \int_set:Nn \_l_siunitx_process_precision_int - { \_l_siunitx_table_decimal_int } - \tl_set:Nn \_l_siunitx_round_tl { places } + \int_set:Nn \l_siunitx_process_precision_int + { \l_siunitx_table_decimal_int } + \tl_set:Nn \l_siunitx_round_tl { places } } - \_siunitx_table_print_S_parse: + \siunitx_table_print_S_parse: \intexpr_compare:nNnTF - { \_l_siunitx_table_integer_int + \_l_siunitx_table_decimal_int } > + { \l_siunitx_table_integer_int + \l_siunitx_table_decimal_int } > { 0 } - { \_siunitx_table_print_S_reserved_mantissa: } + { \siunitx_table_print_S_reserved_mantissa: } { - \prop_if_in:NnT \_l_siunitx_number_out_prop { mantissa-result } + \prop_if_in:NnT \l_siunitx_number_out_prop { mantissa-result } { \msg_error:nnx { siunitx } { table-partial-number } { a~mantissa } } } - \prop_if_in:NnT \_l_siunitx_number_out_prop { complex-result } + \prop_if_in:NnT \l_siunitx_number_out_prop { complex-result } { \msg_error:nnx { siunitx } { table-partial-number } { a~complex } } - \intexpr_compare:nNnTF { \_l_siunitx_table_exponent_int } > { 0 } - { \_siunitx_table_print_S_reserved_exponent: } + \intexpr_compare:nNnTF { \l_siunitx_table_exponent_int } > { 0 } + { \siunitx_table_print_S_reserved_exponent: } { - \prop_if_in:NnT \_l_siunitx_number_out_prop { exponent-result } + \prop_if_in:NnT \l_siunitx_number_out_prop { exponent-result } { \msg_error:nnx { siunitx } { table-partial-number } { an~exponent } } } - \bool_if:NTF \_l_siunitx_table_align_post_bool - { \box_use:N \_l_siunitx_table_post_box } + \bool_if:NTF \l_siunitx_table_align_post_bool + { \box_use:N \l_siunitx_table_post_box } { - \hbox_set_to_wd:Nnn \_l_siunitx_table_fill_box - { \dim_use:N \_l_siunitx_table_gap_dim } + \hbox_set_to_wd:Nnn \l_siunitx_table_fill_box + { \dim_use:N \l_siunitx_table_gap_dim } { \tex_hfil:D } - \dim_set:Nn \_l_siunitx_table_gap_dim - { - \dim_use:N \_l_siunitx_table_gap_dim } - \skip_horizontal:N \_l_siunitx_table_gap_dim - \box_use:N \_l_siunitx_table_post_box - \box_use:N \_l_siunitx_table_fill_box + \dim_set:Nn \l_siunitx_table_gap_dim + { - \dim_use:N \l_siunitx_table_gap_dim } + \skip_horizontal:N \l_siunitx_table_gap_dim + \box_use:N \l_siunitx_table_post_box + \box_use:N \l_siunitx_table_fill_box } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_reserved_ends:} +%\begin{macro}{\siunitx_table_print_S_reserved_ends:} % For the reserved case, the two ends are simply boxed up in correctly % created spaces. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_reserved_ends: { - \hbox_set:Nn \_l_siunitx_tmp_box { \_l_siunitx_table_pre_tl } - \hbox_set_to_wd:Nnn \_l_siunitx_table_pre_box - { \box_wd:N \_l_siunitx_tmp_box } +\cs_new_protected_nopar:Npn \siunitx_table_print_S_reserved_ends: { + \hbox_set:Nn \l_siunitx_tmp_box { \l_siunitx_table_pre_tl } + \hbox_set_to_wd:Nnn \l_siunitx_table_pre_box + { \box_wd:N \l_siunitx_tmp_box } { \tex_hfil:D - { \tl_use:N \_l_siunitx_table_collect_pre_tl } + { \tl_use:N \l_siunitx_table_collect_pre_tl } } - \hbox_set:Nn \_l_siunitx_tmp_box { \_l_siunitx_table_post_tl } - \hbox_set_to_wd:Nnn \_l_siunitx_table_post_box - { \box_wd:N \_l_siunitx_tmp_box } + \hbox_set:Nn \l_siunitx_tmp_box { \l_siunitx_table_post_tl } + \hbox_set_to_wd:Nnn \l_siunitx_table_post_box + { \box_wd:N \l_siunitx_tmp_box } { - \tl_use:N \_l_siunitx_table_collect_post_tl + \tl_use:N \l_siunitx_table_collect_post_tl \tex_hfil:D } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_model_create:} -%\begin{macro}[aux]{\_siunitx_table_print_S_model_aux:nn} +%\begin{macro}{\siunitx_table_print_S_model_create:} +%\begin{macro}[aux]{\siunitx_table_print_S_model_aux:nn} % A model value is created from the various numbers set up as % options. The main formatting routine is used to get everything sorted % out, so that there is no code copying here. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_model_create: { - \prop_clear:N \_l_siunitx_number_in_prop - \_siunitx_table_print_S_model_aux:nn { integer } { mantissa-integer } - \_siunitx_table_print_S_model_aux:nn { decimal } { mantissa-decimal } - \_siunitx_table_print_S_model_aux:nn { uncert } +\cs_new_protected_nopar:Npn \siunitx_table_print_S_model_create: { + \prop_clear:N \l_siunitx_number_in_prop + \siunitx_table_print_S_model_aux:nn { integer } { mantissa-integer } + \siunitx_table_print_S_model_aux:nn { decimal } { mantissa-decimal } + \siunitx_table_print_S_model_aux:nn { uncert } { mantissa-uncertainty } - \_siunitx_table_print_S_model_aux:nn { exponent } { exponent-integer } + \siunitx_table_print_S_model_aux:nn { exponent } { exponent-integer } \intexpr_compare:nNnF - { \_l_siunitx_table_integer_int + \_l_siunitx_table_decimal_int } = + { \l_siunitx_table_integer_int + \l_siunitx_table_decimal_int } = { 0 } { - \prop_put:Nnn \_l_siunitx_number_in_prop { mantissa } + \prop_put:Nnn \l_siunitx_number_in_prop { mantissa } { true } } - \intexpr_compare:nNnT { \_l_siunitx_table_decimal_int } > { 0 } + \intexpr_compare:nNnT { \l_siunitx_table_decimal_int } > { 0 } { - \prop_put:NnV \_l_siunitx_number_in_prop + \prop_put:NnV \l_siunitx_number_in_prop { mantissa-decimal-marker } - \_l_siunitx_output_decimal_tl + \l_siunitx_output_decimal_tl } - \bool_if:NT \_l_siunitx_table_sign_mantissa_bool - { \prop_put:Nnn \_l_siunitx_number_in_prop { mantissa-sign } { - } } - \intexpr_compare:nNnT { \_l_siunitx_table_exponent_int } > { 0 } + \bool_if:NT \l_siunitx_table_sign_mantissa_bool + { \prop_put:Nnn \l_siunitx_number_in_prop { mantissa-sign } { - } } + \intexpr_compare:nNnT { \l_siunitx_table_exponent_int } > { 0 } { - \bool_if:NT \_l_siunitx_table_sign_exponent_bool + \bool_if:NT \l_siunitx_table_sign_exponent_bool { - \prop_put:Nnn \_l_siunitx_number_in_prop { exponent-sign } + \prop_put:Nnn \l_siunitx_number_in_prop { exponent-sign } { - } } } - \_siunitx_number_process: - \_siunitx_number_format: - \prop_set_eq:NN \_l_siunitx_table_model_prop - \_l_siunitx_number_out_prop + \siunitx_number_process: + \siunitx_number_format: + \prop_set_eq:NN \l_siunitx_table_model_prop + \l_siunitx_number_out_prop } -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_model_aux:nn #1#2 { - \tl_set:Nx \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_table_print_S_model_aux:nn #1#2 { + \tl_set:Nx \l_siunitx_tmpa_tl { - \prg_replicate:nn { \int_use:c { _l_siunitx_table_ #1 _int } } + \prg_replicate:nn { \int_use:c { l_siunitx_table_ #1 _int } } { 8 } } - \tl_if_empty:NF \_l_siunitx_tmpa_tl + \tl_if_empty:NF \l_siunitx_tmpa_tl { - \prop_put:NnV \_l_siunitx_number_in_prop {#2} \_l_siunitx_tmpa_tl - \prop_put:Nnn \_l_siunitx_number_in_prop {#1} { true } + \prop_put:NnV \l_siunitx_number_in_prop {#2} \l_siunitx_tmpa_tl + \prop_put:Nnn \l_siunitx_number_in_prop {#1} { true } } } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_reserved_mantissa:} -%\begin{macro}[aux]{\_siunitx_table_print_S_reserved_mantissa_aux:n} +%\begin{macro}{\siunitx_table_print_S_reserved_mantissa:} +%\begin{macro}[aux]{\siunitx_table_print_S_reserved_mantissa_aux:n} % Printing the mantissa is done by measuring the integer part of the % model and the real number, and padding out if necessary. Everything % else is straight forward. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_reserved_mantissa: { - \_siunitx_table_print_S_reserved_mantissa_aux:n { mantissa } - \_siunitx_table_print_S_measure:Nnn \_l_siunitx_table_model_prop +\cs_new_protected_nopar:Npn \siunitx_table_print_S_reserved_mantissa: { + \siunitx_table_print_S_reserved_mantissa_aux:n { mantissa } + \siunitx_table_print_S_measure:Nnn \l_siunitx_table_model_prop { mantissa } { } - \_siunitx_table_print_S_get_mantissa:Nn - \_l_siunitx_number_out_prop { } - \hbox_set_to_wd:Nnn \_l_siunitx_table_result_box - { \_l_siunitx_table_mantissa_dim } + \siunitx_table_print_S_get_mantissa:Nn + \l_siunitx_number_out_prop { } + \hbox_set_to_wd:Nnn \l_siunitx_table_result_box + { \l_siunitx_table_mantissa_dim } { - \box_use:N \_l_siunitx_table_fill_box - \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl + \box_use:N \l_siunitx_table_fill_box + \siunitx_print:nV { number } \l_siunitx_tmpa_tl \tex_hfil:D } - \box_use:N \_l_siunitx_table_result_box - \_siunitx_table_print_S_reserved_uncert:n { mantissa } + \box_use:N \l_siunitx_table_result_box + \siunitx_table_print_S_reserved_uncert:n { mantissa } } -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_reserved_mantissa_aux:n #1 { - \_siunitx_table_print_S_measure:Nnn \_l_siunitx_table_model_prop +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_reserved_mantissa_aux:n #1 { + \siunitx_table_print_S_measure:Nnn \l_siunitx_table_model_prop { integer } {#1} - \_siunitx_table_print_S_get_integer:Nn - \_l_siunitx_number_out_prop {#1} - \box_clear:N \_l_siunitx_tmp_box - \tl_if_empty:NF \_l_siunitx_tmpa_tl + \siunitx_table_print_S_get_integer:Nn + \l_siunitx_number_out_prop {#1} + \box_clear:N \l_siunitx_tmp_box + \tl_if_empty:NF \l_siunitx_tmpa_tl { - \hbox_set:Nn \_l_siunitx_tmp_box - { \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl } + \hbox_set:Nn \l_siunitx_tmp_box + { \siunitx_print:nV { number } \l_siunitx_tmpa_tl } } - \hbox_set_to_wd:Nnn \_l_siunitx_table_fill_box - { \_l_siunitx_table_integer_dim - \box_wd:N \_l_siunitx_tmp_box } + \hbox_set_to_wd:Nnn \l_siunitx_table_fill_box + { \l_siunitx_table_integer_dim - \box_wd:N \l_siunitx_tmp_box } { \tex_hfil:D } - \_siunitx_table_print_S_measure:Nnn \_l_siunitx_table_model_prop + \siunitx_table_print_S_measure:Nnn \l_siunitx_table_model_prop { decimal } {#1} - \box_clear:N \_l_siunitx_tmp_box - \_siunitx_table_print_S_get_decimal:Nn - \_l_siunitx_number_out_prop {#1} - \tl_if_empty:NF \_l_siunitx_tmpa_tl + \box_clear:N \l_siunitx_tmp_box + \siunitx_table_print_S_get_decimal:Nn + \l_siunitx_number_out_prop {#1} + \tl_if_empty:NF \l_siunitx_tmpa_tl { - \hbox_set:Nn \_l_siunitx_tmp_box - { \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl } + \hbox_set:Nn \l_siunitx_tmp_box + { \siunitx_print:nV { number } \l_siunitx_tmpa_tl } } - \dim_set:Nn \_l_siunitx_table_gap_dim + \dim_set:Nn \l_siunitx_table_gap_dim { - \dim_use:N \_l_siunitx_table_decimal_dim - - \box_wd:N \_l_siunitx_tmp_box + \dim_use:N \l_siunitx_table_decimal_dim - + \box_wd:N \l_siunitx_tmp_box } } % \end{macrocode} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_print_S_reserved_uncert:n} -%\begin{macro}[aux]{\_siunitx_table_print_S_reserved_uncert_aux:n} +%\begin{macro}{\siunitx_table_print_S_reserved_uncert:n} +%\begin{macro}[aux]{\siunitx_table_print_S_reserved_uncert_aux:n} % The uncertainty code is generalised for both real and complex parts. % A lot of the logic is similar to the exponent part (the \cs{pm} % symbol) or the mantissa (the number measuring). So some of the % code is shared. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_reserved_uncert:n #1 { - \bool_if:NT \_l_siunitx_uncert_sep_bool +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_reserved_uncert:n #1 { + \bool_if:NT \l_siunitx_uncert_sep_bool { - \intexpr_compare:nNnTF { \_l_siunitx_table_uncert_int } > { 0 } - { \_siunitx_table_print_S_reserved_uncert_aux:n {#1} } + \intexpr_compare:nNnTF { \l_siunitx_table_uncert_int } > { 0 } + { \siunitx_table_print_S_reserved_uncert_aux:n {#1} } { - \prop_if_in:NnT \_l_siunitx_number_out_prop + \prop_if_in:NnT \l_siunitx_number_out_prop { #1 -uncertainty } { \msg_error:nn { siunitx } { table-partial-number } @@ -11524,109 +11566,109 @@ This work consists of the file siunitx.dtx } } } -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_reserved_uncert_aux:n #1 { - \_siunitx_table_print_S_reserved_uncert_pm:n {#1} - \_siunitx_table_print_S_reserved_mantissa_aux:n { #1 -uncertainty } - \_siunitx_table_print_S_measure:Nnn \_l_siunitx_table_model_prop +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_reserved_uncert_aux:n #1 { + \siunitx_table_print_S_reserved_uncert_pm:n {#1} + \siunitx_table_print_S_reserved_mantissa_aux:n { #1 -uncertainty } + \siunitx_table_print_S_measure:Nnn \l_siunitx_table_model_prop { uncert } {#1} - \_siunitx_table_print_S_get_uncert:Nn \_l_siunitx_number_out_prop {#1} - \hbox_set_to_wd:Nnn \_l_siunitx_table_result_box - { \_l_siunitx_table_uncert_dim } + \siunitx_table_print_S_get_uncert:Nn \l_siunitx_number_out_prop {#1} + \hbox_set_to_wd:Nnn \l_siunitx_table_result_box + { \l_siunitx_table_uncert_dim } { - \box_use:N \_l_siunitx_table_fill_box - \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl + \box_use:N \l_siunitx_table_fill_box + \siunitx_print:nV { number } \l_siunitx_tmpa_tl \tex_hfil:D } - \box_use:N \_l_siunitx_table_result_box + \box_use:N \l_siunitx_table_result_box } -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_reserved_uncert_pm:n #1 { - \tl_clear:N \_l_siunitx_tmpb_tl - \_siunitx_number_format_join_uncert_pm: - \tl_set:Nx \_l_siunitx_tmpb_tl - { { } \exp_not:V \_l_siunitx_tmpb_tl { } } - \hbox_set:Nn \_l_siunitx_table_result_box - { \_siunitx_print:nV { number } \_l_siunitx_tmpb_tl } - \prop_if_in:NnF \_l_siunitx_number_out_prop { #1 -uncertainty } +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_reserved_uncert_pm:n #1 { + \tl_clear:N \l_siunitx_tmpb_tl + \siunitx_number_format_join_uncert_pm: + \tl_set:Nx \l_siunitx_tmpb_tl + { { } \exp_not:V \l_siunitx_tmpb_tl { } } + \hbox_set:Nn \l_siunitx_table_result_box + { \siunitx_print:nV { number } \l_siunitx_tmpb_tl } + \prop_if_in:NnF \l_siunitx_number_out_prop { #1 -uncertainty } { - \hbox_set_to_wd:Nnn \_l_siunitx_table_result_box - { \box_wd:N \_l_siunitx_table_result_box } { \tex_hfil:D } + \hbox_set_to_wd:Nnn \l_siunitx_table_result_box + { \box_wd:N \l_siunitx_table_result_box } { \tex_hfil:D } } - \box_use:N \_l_siunitx_table_result_box + \box_use:N \l_siunitx_table_result_box } % \end{macrocode} %\end{macro} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_reserved_exponent:} -%\begin{macro}[aux]{\_siunitx_table_print_S_reserved_exponent_product:} +%\begin{macro}{\siunitx_table_print_S_reserved_exponent:} +%\begin{macro}[aux]{\siunitx_table_print_S_reserved_exponent_product:} %\begin{macro}[aux] -% {\_siunitx_table_print_S_reserved_exponent_product_aux_i:} +% {\siunitx_table_print_S_reserved_exponent_product_aux_i:} %\begin{macro}[aux] -% {\_siunitx_table_print_S_reserved_exponent_product_aux_ii:} +% {\siunitx_table_print_S_reserved_exponent_product_aux_ii:} % Most of the code for the exponent is concerned with getting the % product sign correct.Other than that, the exponent result is quite % easy to handle: just print it with some filling. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_reserved_exponent: { - \dim_zero:N \_l_siunitx_table_gap_dim - \_siunitx_table_print_S_reserved_exponent_product: - \_siunitx_table_print_S_measure:Nnn \_l_siunitx_table_model_prop +\cs_new_protected_nopar:Npn \siunitx_table_print_S_reserved_exponent: { + \dim_zero:N \l_siunitx_table_gap_dim + \siunitx_table_print_S_reserved_exponent_product: + \siunitx_table_print_S_measure:Nnn \l_siunitx_table_model_prop { exponent } { } - \_siunitx_table_print_S_get_exponent:Nn - \_l_siunitx_number_out_prop { } - \hbox_set_to_wd:Nnn \_l_siunitx_table_result_box - { \_l_siunitx_table_exponent_dim } + \siunitx_table_print_S_get_exponent:Nn + \l_siunitx_number_out_prop { } + \hbox_set_to_wd:Nnn \l_siunitx_table_result_box + { \l_siunitx_table_exponent_dim } { - \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl + \siunitx_print:nV { number } \l_siunitx_tmpa_tl \tex_hfil:D } - \box_use:N \_l_siunitx_table_result_box + \box_use:N \l_siunitx_table_result_box } -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_reserved_exponent_product: { - \tl_clear:N \_l_siunitx_tmpa_tl - \box_clear:N \_l_siunitx_table_result_box - \prop_if_in:NnTF \_l_siunitx_table_model_prop { mantissa-result } - { \_siunitx_table_print_S_reserved_exponent_product_aux_i: } +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_reserved_exponent_product: { + \tl_clear:N \l_siunitx_tmpa_tl + \box_clear:N \l_siunitx_table_result_box + \prop_if_in:NnTF \l_siunitx_table_model_prop { mantissa-result } + { \siunitx_table_print_S_reserved_exponent_product_aux_i: } { - \prop_if_in:NnT \_l_siunitx_table_model_prop { complex-result } - { \_siunitx_table_print_S_reserved_exponent_product_aux_i: } + \prop_if_in:NnT \l_siunitx_table_model_prop { complex-result } + { \siunitx_table_print_S_reserved_exponent_product_aux_i: } } - \box_use:N \_l_siunitx_table_result_box + \box_use:N \l_siunitx_table_result_box } -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_reserved_exponent_product_aux_i: { - \tl_set_eq:NN \_l_siunitx_tmpa_tl \_l_siunitx_exponent_product_tl - \bool_if:NT \_l_siunitx_tight_bool +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_reserved_exponent_product_aux_i: { + \tl_set_eq:NN \l_siunitx_tmpa_tl \l_siunitx_exponent_product_tl + \bool_if:NT \l_siunitx_tight_bool { - \tl_set:Nx \_l_siunitx_tmpa_tl - { { \exp_not:V \_l_siunitx_tmpa_tl } } + \tl_set:Nx \l_siunitx_tmpa_tl + { { \exp_not:V \l_siunitx_tmpa_tl } } } - \tl_set:Nx \_l_siunitx_tmpa_tl + \tl_set:Nx \l_siunitx_tmpa_tl { - \exp_not:N \_siunitx_ensuremath:n - { { } \exp_not:V \_l_siunitx_tmpa_tl { } } + \exp_not:N \siunitx_ensuremath:n + { { } \exp_not:V \l_siunitx_tmpa_tl { } } } - \hbox_set:Nn \_l_siunitx_table_result_box - { \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl } - \prop_if_in:NnTF \_l_siunitx_number_out_prop { exponent-result } + \hbox_set:Nn \l_siunitx_table_result_box + { \siunitx_print:nV { number } \l_siunitx_tmpa_tl } + \prop_if_in:NnTF \l_siunitx_number_out_prop { exponent-result } { - \prop_if_in:NnF \_l_siunitx_number_out_prop { mantissa-result } + \prop_if_in:NnF \l_siunitx_number_out_prop { mantissa-result } { - \prop_if_in:NnF \_l_siunitx_number_out_prop { complex-result } + \prop_if_in:NnF \l_siunitx_number_out_prop { complex-result } { - \_siunitx_table_print_S_reserved_exponent_product_aux_ii: + \siunitx_table_print_S_reserved_exponent_product_aux_ii: } } } - { \_siunitx_table_print_S_reserved_exponent_product_aux_ii: } + { \siunitx_table_print_S_reserved_exponent_product_aux_ii: } } -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_reserved_exponent_product_aux_ii: { - \hbox_set_to_wd:Nnn \_l_siunitx_table_result_box - { \box_wd:N \_l_siunitx_table_result_box } { \tex_hfil:D } +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_reserved_exponent_product_aux_ii: { + \hbox_set_to_wd:Nnn \l_siunitx_table_result_box + { \box_wd:N \l_siunitx_table_result_box } { \tex_hfil:D } } % \end{macrocode} %\end{macro} @@ -11634,106 +11676,106 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_print_S_measure:Nnn} +%\begin{macro}{\siunitx_table_print_S_measure:Nnn} % The measuring code recovers whatever is needed into -% \cs{_l_siunitx_tmpa_tl} (as this is internal code, that is okay). +% \cs{l_siunitx_tmpa_tl} (as this is internal code, that is okay). % The content is then boxed up and measured: if there is nothing to do, % a bit of time can be saved by not boxing up at all. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_measure:Nnn #1#2#3 { - \use:c { _siunitx_table_print_S_get_ #2 :Nn } #1 {#3} - \tl_if_empty:NTF \_l_siunitx_tmpa_tl - { \dim_set:cn { _l_siunitx_table_ #2 _dim } { \c_zero_skip } } +\cs_new_protected_nopar:Npn \siunitx_table_print_S_measure:Nnn #1#2#3 { + \use:c { siunitx_table_print_S_get_ #2 :Nn } #1 {#3} + \tl_if_empty:NTF \l_siunitx_tmpa_tl + { \dim_set:cn { l_siunitx_table_ #2 _dim } { \c_zero_skip } } { - \hbox_set:Nn \_l_siunitx_tmp_box - { \_siunitx_print:nV { number } \_l_siunitx_tmpa_tl } - \dim_set:cn { _l_siunitx_table_ #2 _dim } - { \box_wd:N \_l_siunitx_tmp_box } + \hbox_set:Nn \l_siunitx_tmp_box + { \siunitx_print:nV { number } \l_siunitx_tmpa_tl } + \dim_set:cn { l_siunitx_table_ #2 _dim } + { \box_wd:N \l_siunitx_tmp_box } } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_get_decimal:Nn} +%\begin{macro}{\siunitx_table_print_S_get_decimal:Nn} % Grabbing the decimal part is a simple operation. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_get_decimal:Nn #1#2 { - \prop_get:NnN #1 { #2 -decimal } \_l_siunitx_tmpa_tl - \quark_if_no_value:NT \_l_siunitx_tmpa_tl - { \tl_clear:N \_l_siunitx_tmpa_tl } +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_get_decimal:Nn #1#2 { + \prop_get:NnN #1 { #2 -decimal } \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_clear:N \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_get_exponent:Nn} +%\begin{macro}{\siunitx_table_print_S_get_exponent:Nn} % Getting the exponent part is quite easy. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_get_exponent:Nn #1#2 { - \prop_get:NnN #1 { exponent-result } \_l_siunitx_tmpa_tl - \quark_if_no_value:NT \_l_siunitx_tmpa_tl - { \tl_clear:N \_l_siunitx_tmpa_tl } +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_get_exponent:Nn #1#2 { + \prop_get:NnN #1 { exponent-result } \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_clear:N \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_get_integer:Nn} +%\begin{macro}{\siunitx_table_print_S_get_integer:Nn} % Getting the integer part of a number means that the sign also has be % considered, even if there is no actual integer. This leas to a % slightly odd approach here. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_get_integer:Nn #1#2 { - \prop_get:NnN #1 { #2 -sign } \_l_siunitx_tmpa_tl - \quark_if_no_value:NT \_l_siunitx_tmpa_tl - { \tl_clear:N \_l_siunitx_tmpa_tl } - \prop_get:NnN #1 { #2 -integer } \_l_siunitx_tmpb_tl - \quark_if_no_value:NT \_l_siunitx_tmpb_tl - { \tl_clear:N \_l_siunitx_tmpb_tl } - \tl_put_right:NV \_l_siunitx_tmpa_tl \_l_siunitx_tmpb_tl +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_get_integer:Nn #1#2 { + \prop_get:NnN #1 { #2 -sign } \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_clear:N \l_siunitx_tmpa_tl } + \prop_get:NnN #1 { #2 -integer } \l_siunitx_tmpb_tl + \quark_if_no_value:NT \l_siunitx_tmpb_tl + { \tl_clear:N \l_siunitx_tmpb_tl } + \tl_put_right:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_get_mantissa:Nn} +%\begin{macro}{\siunitx_table_print_S_get_mantissa:Nn} % The mantissa without any uncertainty is needed by the reserved % space routine. % \begin{macrocode} -\cs_set_protected_nopar:Npn - \_siunitx_table_print_S_get_mantissa:Nn #1#2 { - \prop_get:NnN #1 { mantissa } \_l_siunitx_tmpa_tl - \quark_if_no_value:NT \_l_siunitx_tmpa_tl - { \tl_clear:N \_l_siunitx_tmpa_tl } +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_get_mantissa:Nn #1#2 { + \prop_get:NnN #1 { mantissa } \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_clear:N \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_get_marker:Nn} +%\begin{macro}{\siunitx_table_print_S_get_marker:Nn} % The decimal marker is always going to be boxed up using the % standard version, not any possible copied value. So the code can be % kept quite clear. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_get_marker:Nn #1#2 { - \tl_set:Nx \_l_siunitx_tmpa_tl +\cs_new_protected_nopar:Npn \siunitx_table_print_S_get_marker:Nn #1#2 { + \tl_set:Nx \l_siunitx_tmpa_tl { - \exp_not:N \_siunitx_ensuremath:n - { \exp_not:V \_l_siunitx_output_decimal_tl } + \exp_not:N \siunitx_ensuremath:n + { \exp_not:V \l_siunitx_output_decimal_tl } } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_get_result:Nn} +%\begin{macro}{\siunitx_table_print_S_get_result:Nn} % Getting the result values is easy. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_get_result:Nn #1#2 { - \prop_get:NnN #1 { result } \_l_siunitx_tmpa_tl - \quark_if_no_value:NT \_l_siunitx_tmpa_tl - { \tl_clear:N \_l_siunitx_tmpa_tl } +\cs_new_protected_nopar:Npn \siunitx_table_print_S_get_result:Nn #1#2 { + \prop_get:NnN #1 { result } \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_clear:N \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_table_print_S_get_uncert:Nn} +%\begin{macro}{\siunitx_table_print_S_get_uncert:Nn} % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_print_S_get_uncert:Nn #1#2 { - \prop_get:NnN #1 { #2 -uncertainty } \_l_siunitx_tmpa_tl - \quark_if_no_value:NT \_l_siunitx_tmpa_tl - { \tl_clear:N \_l_siunitx_tmpa_tl } +\cs_new_protected_nopar:Npn \siunitx_table_print_S_get_uncert:Nn #1#2 { + \prop_get:NnN #1 { #2 -uncertainty } \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_clear:N \l_siunitx_tmpa_tl } } % \end{macrocode} %\end{macro} @@ -11745,154 +11787,154 @@ This work consists of the file siunitx.dtx % \pkg{dcolumn} can be applied, which requires the decimal marker to % be made active in math mode. % -%\begin{macro}{\_siunitx_table_direct:} +%\begin{macro}{\siunitx_table_direct:} % The main part of the system simply makes a choice about the % methods to use. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_table_direct: { +\cs_new_protected_nopar:Npn \siunitx_table_direct: { \m@th - \bool_if:NTF \_l_siunitx_table_center_decimal_bool - { \_siunitx_table_direct_centered: } - { \_siunitx_table_direct_reserved: } + \bool_if:NTF \l_siunitx_table_center_decimal_bool + { \siunitx_table_direct_centered: } + { \siunitx_table_direct_reserved: } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_table_direct_centered:} -%\begin{macro}[aux]{\_siunitx_table_direct_centered_aux:N} -%\begin{macro}{\_siunitx_table_direct_centered_end:} +%\begin{macro}{\siunitx_table_direct_centered:} +%\begin{macro}[aux]{\siunitx_table_direct_centered_aux:N} +%\begin{macro}{\siunitx_table_direct_centered_end:} % When centring the content about a decimal marker, the trick is % to collect everything into two boxes and then compare the sizes. % In that sense this is very similar to the normal method, except that % it will work with non-numerical input. % \begin{macrocode} \char_make_active:N \@ -\cs_set_protected_nopar:Npn \_siunitx_table_direct_centered: { - \cs_set_eq:NN \_siunitx_table_print: - \_siunitx_table_direct_centered_end: - \hbox_set:Nn \_l_siunitx_tmp_box - { \_siunitx_ensuremath:n { \_l_siunitx_output_decimal_tl } } - \hbox_set_to_wd:Nnn \_l_siunitx_table_post_box - { \box_wd:N \_l_siunitx_tmp_box } +\cs_new_protected_nopar:Npn \siunitx_table_direct_centered: { + \cs_set_eq:NN \siunitx_table_print: + \siunitx_table_direct_centered_end: + \hbox_set:Nn \l_siunitx_tmp_box + { \siunitx_ensuremath:n { \l_siunitx_output_decimal_tl } } + \hbox_set_to_wd:Nnn \l_siunitx_table_post_box + { \box_wd:N \l_siunitx_tmp_box } { \tex_hfil:D } - \hbox_set:Nn \_l_siunitx_table_pre_box + \hbox_set:Nn \l_siunitx_table_pre_box \c_group_begin_token \c_math_shift_token - \tl_map_function:NN \_l_siunitx_input_decimal_tl - \_siunitx_table_direct_centered_aux:N + \tl_map_function:NN \l_siunitx_input_decimal_tl + \siunitx_table_direct_centered_aux:N } -\cs_set_protected_nopar:Npn \_siunitx_table_direct_centered_aux:N #1 { +\cs_new_protected_nopar:Npn \siunitx_table_direct_centered_aux:N #1 { \char_set_lccode:nn { `\@ } { `#1 } \char_set_mathcode:nn { `#1 } { 32768 } \tl_to_lowercase:n { \cs_set_nopar:Npn @ } { \c_math_shift_token \c_group_end_token - \hbox_set:Nn \_l_siunitx_table_post_box + \hbox_set:Nn \l_siunitx_table_post_box \c_group_begin_token \c_math_shift_token - \_l_siunitx_output_decimal_tl + \l_siunitx_output_decimal_tl } } \char_make_letter:N \@ -\cs_set_protected_nopar:Npn \_siunitx_table_direct_centered_end: { +\cs_new_protected_nopar:Npn \siunitx_table_direct_centered_end: { \c_math_shift_token \c_group_end_token \dim_compare:nNnTF - { \box_wd:N \_l_siunitx_table_pre_box } > - { \box_wd:N \_l_siunitx_table_post_box } + { \box_wd:N \l_siunitx_table_pre_box } > + { \box_wd:N \l_siunitx_table_post_box } { - \hbox_set_to_wd:Nnn \_l_siunitx_table_post_box - { \box_wd:N \_l_siunitx_table_pre_box } + \hbox_set_to_wd:Nnn \l_siunitx_table_post_box + { \box_wd:N \l_siunitx_table_pre_box } { - \hbox_unpack:N \_l_siunitx_table_post_box + \hbox_unpack:N \l_siunitx_table_post_box \tex_hfil:D } } { - \hbox_set_to_wd:Nnn \_l_siunitx_table_pre_box - { \box_wd:N \_l_siunitx_table_post_box } + \hbox_set_to_wd:Nnn \l_siunitx_table_pre_box + { \box_wd:N \l_siunitx_table_post_box } { \tex_hfil:D - \hbox_unpack:N \_l_siunitx_table_pre_box + \hbox_unpack:N \l_siunitx_table_pre_box } } - \box_use:N \_l_siunitx_table_pre_box - \box_use:N \_l_siunitx_table_post_box + \box_use:N \l_siunitx_table_pre_box + \box_use:N \l_siunitx_table_post_box } % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_table_direct_reserved:} -%\begin{macro}[aux]{\_siunitx_table_direct_reserved_aux:N} -%\begin{macro}{\_siunitx_table_direct_reserved_end:} +%\begin{macro}{\siunitx_table_direct_reserved:} +%\begin{macro}[aux]{\siunitx_table_direct_reserved_aux:N} +%\begin{macro}{\siunitx_table_direct_reserved_end:} % The plan here is to box up the entire number using the information % available about the size of the two parts. Relatively easy, % but needs a bit of measuring. The first box here does need to use % \cs{tex_hill:D} as \texttt{fil} glue will not work. % \begin{macrocode} \char_make_active:N \@ -\cs_set_protected_nopar:Npn \_siunitx_table_direct_reserved: { - \cs_set_eq:NN \_siunitx_table_print: - \_siunitx_table_direct_reserved_end: - \tl_set:Nx \_l_siunitx_tmpa_tl - { \prg_replicate:nn { \_l_siunitx_table_integer_int } { 8 } } - \hbox_set:Nn \_l_siunitx_tmp_box +\cs_new_protected_nopar:Npn \siunitx_table_direct_reserved: { + \cs_set_eq:NN \siunitx_table_print: + \siunitx_table_direct_reserved_end: + \tl_set:Nx \l_siunitx_tmpa_tl + { \prg_replicate:nn { \l_siunitx_table_integer_int } { 8 } } + \hbox_set:Nn \l_siunitx_tmp_box { - \_siunitx_ensuremath:n + \siunitx_ensuremath:n { - \bool_if:NT \_l_siunitx_table_sign_mantissa_bool { - } - \_l_siunitx_tmpa_tl + \bool_if:NT \l_siunitx_table_sign_mantissa_bool { - } + \l_siunitx_tmpa_tl } } - \dim_set:Nn \_l_siunitx_table_integer_dim - { \box_wd:N \_l_siunitx_tmp_box } - \tl_set:Nx \_l_siunitx_tmpa_tl - { \prg_replicate:nn { \_l_siunitx_table_decimal_int } { 8 } } - \hbox_set:Nn \_l_siunitx_tmp_box + \dim_set:Nn \l_siunitx_table_integer_dim + { \box_wd:N \l_siunitx_tmp_box } + \tl_set:Nx \l_siunitx_tmpa_tl + { \prg_replicate:nn { \l_siunitx_table_decimal_int } { 8 } } + \hbox_set:Nn \l_siunitx_tmp_box { - \_siunitx_ensuremath:n + \siunitx_ensuremath:n { - \_l_siunitx_output_decimal_tl - \_l_siunitx_tmpa_tl + \l_siunitx_output_decimal_tl + \l_siunitx_tmpa_tl } } - \hbox_set_to_wd:Nnn \_l_siunitx_table_post_box - { \box_wd:N \_l_siunitx_tmp_box } + \hbox_set_to_wd:Nnn \l_siunitx_table_post_box + { \box_wd:N \l_siunitx_tmp_box } { \tex_hfil:D } - \hbox_set_to_wd:Nnn \_l_siunitx_table_pre_box - { \_l_siunitx_table_integer_dim } + \hbox_set_to_wd:Nnn \l_siunitx_table_pre_box + { \l_siunitx_table_integer_dim } \c_group_begin_token \c_math_shift_token - \tl_map_function:NN \_l_siunitx_input_decimal_tl - \_siunitx_table_direct_reserved_aux:N + \tl_map_function:NN \l_siunitx_input_decimal_tl + \siunitx_table_direct_reserved_aux:N \tex_hfill:D } -\cs_set_protected_nopar:Npn \_siunitx_table_direct_reserved_aux:N #1 { +\cs_new_protected_nopar:Npn \siunitx_table_direct_reserved_aux:N #1 { \char_set_lccode:nn { `\@ } { `#1 } \char_set_mathcode:nn { `#1 } { 32768 } \tl_to_lowercase:n { \cs_set_nopar:Npn @ } { \c_math_shift_token \c_group_end_token - \hbox_set_to_wd:Nnn \_l_siunitx_table_post_box - { \box_wd:N \_l_siunitx_tmp_box } + \hbox_set_to_wd:Nnn \l_siunitx_table_post_box + { \box_wd:N \l_siunitx_tmp_box } \c_group_begin_token \c_math_shift_token - \_l_siunitx_output_decimal_tl + \l_siunitx_output_decimal_tl } } \char_make_letter:N \@ -\cs_set_protected_nopar:Npn \_siunitx_table_direct_reserved_end: { +\cs_new_protected_nopar:Npn \siunitx_table_direct_reserved_end: { \c_math_shift_token \tex_hfil:D \c_group_end_token - \_siunitx_table_align_left:n { \_l_siunitx_table_number_align_skip } - \box_use:N \_l_siunitx_table_pre_box - \box_use:N \_l_siunitx_table_post_box - \_siunitx_table_align_right:n { \_l_siunitx_table_number_align_skip } + \siunitx_table_align_left:n { \l_siunitx_table_number_align_skip } + \box_use:N \l_siunitx_table_pre_box + \box_use:N \l_siunitx_table_post_box + \siunitx_table_align_right:n { \l_siunitx_table_number_align_skip } } % \end{macrocode} %\end{macro} @@ -11905,11 +11947,11 @@ This work consists of the file siunitx.dtx % problems. First, the symbols need to work in math and in text mode. % Second, the user needs to be able to adjust each symbol. % -%\begin{macro}{\_l_siunitx_redefine_symbols_bool} +%\begin{macro}{\l_siunitx_redefine_symbols_bool} % Only one setting applies here! % \begin{macrocode} \keys_define:nn { siunitx } { - redefine-symbols .bool_set:N = \_l_siunitx_redefine_symbols_bool, + redefine-symbols .bool_set:N = \l_siunitx_redefine_symbols_bool, } \keys_set:nn { siunitx } { redefine-symbols = true @@ -11921,7 +11963,7 @@ This work consists of the file siunitx.dtx % that there are no clashes. % \begin{macrocode} \AtBeginDocument { - \bool_if:NT \_l_siunitx_redefine_symbols_bool + \bool_if:NT \l_siunitx_redefine_symbols_bool { \@ifpackageloaded { textcomp } { @@ -11954,13 +11996,13 @@ This work consists of the file siunitx.dtx } % \end{macrocode} % -%\begin{macro}{\_l_siunitx_angstrom_math_tl} -%\begin{macro}{\_l_siunitx_arcminute_math_tl} -%\begin{macro}{\_l_siunitx_arcsecond_math_tl} -%\begin{macro}{\_l_siunitx_celsius_math_tl} -%\begin{macro}{\_l_siunitx_degree_math_tl} -%\begin{macro}{\_l_siunitx_micro_math_tl} -%\begin{macro}{\_l_siunitx_ohm_math_tl} +%\begin{macro}{\l_siunitx_angstrom_math_tl} +%\begin{macro}{\l_siunitx_arcminute_math_tl} +%\begin{macro}{\l_siunitx_arcsecond_math_tl} +%\begin{macro}{\l_siunitx_celsius_math_tl} +%\begin{macro}{\l_siunitx_degree_math_tl} +%\begin{macro}{\l_siunitx_micro_math_tl} +%\begin{macro}{\l_siunitx_ohm_math_tl} % The symbol storage macros are created separately for math and text % mode, although this is all pretty similar. The default definitions use % what is generally available, except for those for micro, where @@ -11969,13 +12011,13 @@ This work consists of the file siunitx.dtx % deals with the case where \cs{mathnormal} has the wrong symbol. % \begin{macrocode} \keys_define:nn { siunitx } { - math-angstrom .tl_set:N = \_l_siunitx_angstrom_math_tl, - math-arcminute .tl_set:N = \_l_siunitx_arcminute_math_tl, - math-arcsecond .tl_set:N = \_l_siunitx_arcsecond_math_tl, - math-celsius .tl_set:N = \_l_siunitx_celsius_math_tl, - math-degree .tl_set:N = \_l_siunitx_degree_math_tl, - math-micro .tl_set:N = \_l_siunitx_micro_math_tl, - math-ohm .tl_set:N = \_l_siunitx_ohm_math_tl + math-angstrom .tl_set:N = \l_siunitx_angstrom_math_tl, + math-arcminute .tl_set:N = \l_siunitx_arcminute_math_tl, + math-arcsecond .tl_set:N = \l_siunitx_arcsecond_math_tl, + math-celsius .tl_set:N = \l_siunitx_celsius_math_tl, + math-degree .tl_set:N = \l_siunitx_degree_math_tl, + math-micro .tl_set:N = \l_siunitx_micro_math_tl, + math-ohm .tl_set:N = \l_siunitx_ohm_math_tl } \keys_set:nn { siunitx } { math-angstrom = \text { \AA }, @@ -11983,8 +12025,8 @@ This work consists of the file siunitx.dtx math-arcsecond = { } ^ { \prime \prime }, math-celsius = { } ^ { \circ } \kern - \scriptspace \mathrm { C }, math-degree = { } ^ { \circ }, - math-micro = \text { \_c_siunitx_mu_tl }, - math-ohm = \text { \ensuremath { \_c_siunitx_omega_tl } }, + math-micro = \text { \c_siunitx_mu_tl }, + math-ohm = \text { \ensuremath { \c_siunitx_omega_tl } }, } % \end{macrocode} %\end{macro} @@ -11994,23 +12036,23 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} %\end{macro} -%\begin{macro}{\_l_siunitx_angstrom_text_tl} -%\begin{macro}{\_l_siunitx_arcminute_text_tl} -%\begin{macro}{\_l_siunitx_arcsecond_text_tl} -%\begin{macro}{\_l_siunitx_celsius_text_tl} -%\begin{macro}{\_l_siunitx_degree_text_tl} -%\begin{macro}{\_l_siunitx_micro_text_tl} -%\begin{macro}{\_l_siunitx_ohm_text_tl} +%\begin{macro}{\l_siunitx_angstrom_text_tl} +%\begin{macro}{\l_siunitx_arcminute_text_tl} +%\begin{macro}{\l_siunitx_arcsecond_text_tl} +%\begin{macro}{\l_siunitx_celsius_text_tl} +%\begin{macro}{\l_siunitx_degree_text_tl} +%\begin{macro}{\l_siunitx_micro_text_tl} +%\begin{macro}{\l_siunitx_ohm_text_tl} % Text versions are similar. % \begin{macrocode} \keys_define:nn { siunitx } { - text-angstrom .tl_set:N = \_l_siunitx_angstrom_text_tl, - text-arcminute .tl_set:N = \_l_siunitx_arcminute_text_tl, - text-arcsecond .tl_set:N = \_l_siunitx_arcsecond_text_tl, - text-celsius .tl_set:N = \_l_siunitx_celsius_text_tl, - text-degree .tl_set:N = \_l_siunitx_degree_text_tl, - text-micro .tl_set:N = \_l_siunitx_micro_text_tl, - text-ohm .tl_set:N = \_l_siunitx_ohm_text_tl, + text-angstrom .tl_set:N = \l_siunitx_angstrom_text_tl, + text-arcminute .tl_set:N = \l_siunitx_arcminute_text_tl, + text-arcsecond .tl_set:N = \l_siunitx_arcsecond_text_tl, + text-celsius .tl_set:N = \l_siunitx_celsius_text_tl, + text-degree .tl_set:N = \l_siunitx_degree_text_tl, + text-micro .tl_set:N = \l_siunitx_micro_text_tl, + text-ohm .tl_set:N = \l_siunitx_ohm_text_tl, } \keys_set:nn { siunitx } { text-angstrom = \AA, @@ -12019,8 +12061,8 @@ This work consists of the file siunitx.dtx text-celsius = \ensuremath { { } ^ { \circ } \kern - \scriptspace \text { C } }, text-degree = \ensuremath { { } ^ { \circ } }, - text-micro = \_c_siunitx_mu_tl , - text-ohm = \ensuremath { \_c_siunitx_omega_tl }, + text-micro = \c_siunitx_mu_tl , + text-ohm = \ensuremath { \c_siunitx_omega_tl }, } % \end{macrocode} %\end{macro} @@ -12031,15 +12073,15 @@ This work consists of the file siunitx.dtx %\end{macro} %\end{macro} % -%\begin{macro}{\_siunitx_symbol_new:n} +%\begin{macro}{\siunitx_symbol_new:n} % For creating the outer symbol macro. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_symbol_new:n #1 { +\cs_new_protected:Npn \siunitx_symbol_new:n #1 { \cs_set_protected_nopar:cpn { SIUnitSymbol #1 } { \mode_if_math:TF - { \tl_to_lowercase:n { \use:c { _l_siunitx_ #1 _math_tl } } } - { \tl_to_lowercase:n { \use:c { _l_siunitx_ #1 _text_tl } } } + { \tl_to_lowercase:n { \use:c { l_siunitx_ #1 _math_tl } } } + { \tl_to_lowercase:n { \use:c { l_siunitx_ #1 _text_tl } } } } } % \end{macrocode} @@ -12054,13 +12096,13 @@ This work consists of the file siunitx.dtx %\begin{macro}{\SIUnitSymbolOhm} % The wrapper macros are created. % \begin{macrocode} -\_siunitx_symbol_new:n { Angstrom } -\_siunitx_symbol_new:n { Arcminute } -\_siunitx_symbol_new:n { Arcsecond } -\_siunitx_symbol_new:n { Celsius } -\_siunitx_symbol_new:n { Degree } -\_siunitx_symbol_new:n { Micro } -\_siunitx_symbol_new:n { Ohm } +\siunitx_symbol_new:n { Angstrom } +\siunitx_symbol_new:n { Arcminute } +\siunitx_symbol_new:n { Arcsecond } +\siunitx_symbol_new:n { Celsius } +\siunitx_symbol_new:n { Degree } +\siunitx_symbol_new:n { Micro } +\siunitx_symbol_new:n { Ohm } % \end{macrocode} %\end{macro} %\end{macro} @@ -12072,78 +12114,78 @@ This work consists of the file siunitx.dtx % %\subsection{Working with other packages} % -%\begin{macro}{\_l_siunitx_pgf_link_clist} -%\begin{macro}{\_siunitx_pgf_link:} +%\begin{macro}{\l_siunitx_pgf_link_clist} +%\begin{macro}{\siunitx_pgf_link:} % Here, the settings used by \pkg{siunitx} are translated into those for % \pkg{pgf}. Things could be done more efficiently, but the logic would % be more difficult to follow. % \begin{macrocode} -\clist_new:N \_l_siunitx_pgf_link_clist -\cs_set_protected_nopar:Npn \_siunitx_pgf_link: { - \clist_clear:N \_l_siunitx_pgf_link_clist - \tl_if_eq:VnT \_l_siunitx_round_tl { figure } +\clist_new:N \l_siunitx_pgf_link_clist +\cs_new_protected_nopar:Npn \siunitx_pgf_link: { + \clist_clear:N \l_siunitx_pgf_link_clist + \tl_if_eq:VnT \l_siunitx_round_tl { figure } { - \clist_put_right:Nn \_l_siunitx_pgf_link_clist { fixed } - \clist_put_right:Nn \_l_siunitx_pgf_link_clist + \clist_put_right:Nn \l_siunitx_pgf_link_clist { fixed } + \clist_put_right:Nn \l_siunitx_pgf_link_clist { fixed~zerofill = true } } - \clist_put_right:Nx \_l_siunitx_pgf_link_clist - { precision = \int_use:N \_l_siunitx_process_precision_int } - \clist_put_right:Nx \_l_siunitx_pgf_link_clist + \clist_put_right:Nx \l_siunitx_pgf_link_clist + { precision = \int_use:N \l_siunitx_process_precision_int } + \clist_put_right:Nx \l_siunitx_pgf_link_clist { set~decimal~separator = - { { \exp_not:V \_l_siunitx_output_decimal_tl } } + { { \exp_not:V \l_siunitx_output_decimal_tl } } } - \clist_put_right:Nx \_l_siunitx_pgf_link_clist + \clist_put_right:Nx \l_siunitx_pgf_link_clist { set~thousands~separator = - { \exp_not:V \_l_siunitx_group_sep_tl } + { \exp_not:V \l_siunitx_group_sep_tl } } - \bool_if:NTF \_l_siunitx_group_four_bool + \bool_if:NTF \l_siunitx_group_four_bool { - \clist_put_right:Nn \_l_siunitx_pgf_link_clist + \clist_put_right:Nn \l_siunitx_pgf_link_clist { min~exponent~for~1000~sep = 3 } } { - \clist_put_right:Nn \_l_siunitx_pgf_link_clist + \clist_put_right:Nn \l_siunitx_pgf_link_clist { min~exponent~for~1000~sep = 4 } } \bool_if:nF { - \_l_siunitx_group_decimal_bool || - \_l_siunitx_group_integer_bool + \l_siunitx_group_decimal_bool || + \l_siunitx_group_integer_bool } { - \clist_put_right:Nn \_l_siunitx_pgf_link_clist + \clist_put_right:Nn \l_siunitx_pgf_link_clist { min~exponent~for~1000~sep = 999 } } - \bool_if:NTF \_l_siunitx_process_integer_zero_bool + \bool_if:NTF \l_siunitx_process_integer_zero_bool { - \clist_put_right:Nn \_l_siunitx_pgf_link_clist + \clist_put_right:Nn \l_siunitx_pgf_link_clist { skip~0. = false } } { - \clist_put_right:Nn \_l_siunitx_pgf_link_clist + \clist_put_right:Nn \l_siunitx_pgf_link_clist { skip~0. = true } } - \tl_if_eq:VnTF \_l_siunitx_process_sign_tl { + } + \tl_if_eq:VnTF \l_siunitx_process_sign_tl { + } { - \clist_put_right:Nn \_l_siunitx_pgf_link_clist + \clist_put_right:Nn \l_siunitx_pgf_link_clist { showpos = true } } { - \clist_put_right:Nn \_l_siunitx_pgf_link_clist + \clist_put_right:Nn \l_siunitx_pgf_link_clist { showpos = false } } \group_begin: - \cs_set_nopar:Npx \_siunitx_tmp:w + \cs_set_nopar:Npx \siunitx_tmp:w { \group_end: \exp_not:N \pgfqkeys { /pgf/number~format } - { \exp_not:V \_l_siunitx_pgf_link_clist } + { \exp_not:V \l_siunitx_pgf_link_clist } } - \_siunitx_tmp:w + \siunitx_tmp:w } % \end{macrocode} %\end{macro} @@ -12318,26 +12360,26 @@ This work consists of the file siunitx.dtx % The macros for creating units and so on are in design name space. % Basically, a set of shuffles for arguments. % \begin{macrocode} -\cs_set_protected_nopar:Npn \DeclareBinaryPrefix #1#2#3 { - \_siunitx_declare_prefix:Nnnn #1 {#2} { 2 } {#3} +\cs_new_protected_nopar:Npn \DeclareBinaryPrefix #1#2#3 { + \siunitx_declare_prefix:Nnnn #1 {#2} { 2 } {#3} } -\cs_set_protected_nopar:Npn \DeclareSIPostPower #1#2 { - \_siunitx_declare_power_after:Nn #1 {#2} +\cs_new_protected_nopar:Npn \DeclareSIPostPower #1#2 { + \siunitx_declare_power_after:Nn #1 {#2} } -\cs_set_protected_nopar:Npn \DeclareSIPrefix #1#2#3 { - \_siunitx_declare_prefix:Nnnn #1 {#2} { 10 } {#3} +\cs_new_protected_nopar:Npn \DeclareSIPrefix #1#2#3 { + \siunitx_declare_prefix:Nnnn #1 {#2} { 10 } {#3} } -\cs_set_protected_nopar:Npn \DeclareSIPrePower #1#2 { - \_siunitx_declare_power_before:Nn #1 {#2} +\cs_new_protected_nopar:Npn \DeclareSIPrePower #1#2 { + \siunitx_declare_power_before:Nn #1 {#2} } -\cs_set_protected_nopar:Npn \DeclareSIQualifier #1#2 { - \_siunitx_declare_qualifier:Nn #1 {#2} +\cs_new_protected_nopar:Npn \DeclareSIQualifier #1#2 { + \siunitx_declare_qualifier:Nn #1 {#2} } -\cs_set_protected_nopar:Npn \DeclareSIUnit #1#2 { - \_siunitx_declare_unit:Nnn #1 {#2} { } +\cs_new_protected_nopar:Npn \DeclareSIUnit #1#2 { + \siunitx_declare_unit:Nnn #1 {#2} { } } -\cs_set_protected_nopar:Npn \DeclareSIUnitWithOptions #1#2#3 { - \_siunitx_declare_unit:Nnn #1 {#2} {#3} +\cs_new_protected_nopar:Npn \DeclareSIUnitWithOptions #1#2#3 { + \siunitx_declare_unit:Nnn #1 {#2} {#3} } % \end{macrocode} %\end{macro} @@ -12362,7 +12404,7 @@ This work consists of the file siunitx.dtx %\begin{macro}{\SendSettingsToPgf} % A settings transfer function. % \begin{macrocode} -\cs_set_protected_nopar:Npn \SendSettingsToPgf { \_siunitx_pgf_link: } +\cs_new_protected_nopar:Npn \SendSettingsToPgf { \siunitx_pgf_link: } % \end{macrocode} %\end{macro} % @@ -12378,7 +12420,7 @@ This work consists of the file siunitx.dtx \group_begin: \IfNoValueF {#1} { \keys_set:nn { siunitx } {#1} } - \_siunitx_angle_output:nnn #2 + \siunitx_angle_output:nnn #2 \group_end: } % \end{macrocode} @@ -12392,7 +12434,7 @@ This work consists of the file siunitx.dtx \group_begin: \IfNoValueF {#1} { \keys_set:nn { siunitx } {#1} } - \_siunitx_number_output:n {#2} + \siunitx_number_output:n {#2} \group_end: } % \end{macrocode} @@ -12405,7 +12447,7 @@ This work consists of the file siunitx.dtx \group_begin: \IfNoValueF {#1} { \keys_set:nn { siunitx } {#1} } - \_siunitx_list_numbers:n {#2} + \siunitx_list_numbers:n {#2} \group_end: } % \end{macrocode} @@ -12419,7 +12461,7 @@ This work consists of the file siunitx.dtx \group_begin: \IfNoValueF {#1} { \keys_set:nn { siunitx } {#1} } - \_siunitx_range_numbers:nn {#2} {#3} + \siunitx_range_numbers:nn {#2} {#3} \group_end: } % \end{macrocode} @@ -12433,10 +12475,10 @@ This work consists of the file siunitx.dtx \NewDocumentCommand \si { o m } { \group_begin: \IfNoValueTF {#1} - { \_siunitx_unit_output:nn {#2} { } } + { \siunitx_unit_output:nn {#2} { } } { \keys_set:nn { siunitx } {#1} - \_siunitx_unit_output:nn {#2} {#1} + \siunitx_unit_output:nn {#2} {#1} } \group_end: } @@ -12453,20 +12495,20 @@ This work consists of the file siunitx.dtx \NewDocumentCommand \SIlist { o > { \SplitList { ; } } m m } { \group_begin: \IfNoValueTF {#1} - { \_siunitx_list_units:nnn {#2} {#3} { } } + { \siunitx_list_units:nnn {#2} {#3} { } } { \keys_set:nn { siunitx } {#1} - \_siunitx_list_units:nnn {#2} {#3} {#1} + \siunitx_list_units:nnn {#2} {#3} {#1} } \group_end: } \NewDocumentCommand \SIrange { o m m m } { \group_begin: \IfNoValueTF {#1} - { \_siunitx_range_unit:nnnn {#4} { } {#2} {#3} } + { \siunitx_range_unit:nnnn {#4} { } {#2} {#3} } { \keys_set:nn { siunitx } {#1} - \_siunitx_range_unit:nnnn {#4} {#1} {#2} {#3} + \siunitx_range_unit:nnnn {#4} {#1} {#2} {#3} } \group_end: } @@ -12481,10 +12523,10 @@ This work consists of the file siunitx.dtx \NewDocumentCommand \SI { o m o m } { \group_begin: \IfNoValueTF {#1} - { \_siunitx_combined:nnnn { } {#2} {#3} {#4} } + { \siunitx_combined:nnnn { } {#2} {#3} {#4} } { \keys_set:nn { siunitx } {#1} - \_siunitx_combined:nnnn {#1} {#2} {#3} {#4} + \siunitx_combined:nnnn {#1} {#2} {#3} {#4} } \group_end: } @@ -12509,7 +12551,7 @@ This work consists of the file siunitx.dtx % \pkg{hyperref}, and ensure that everything works cleanly and with % no unnecessary warnings. % -%\begin{macro}{\_siunitx_contents_add:N} +%\begin{macro}{\siunitx_contents_add:N} % An updated version of \cs{addtocontents} which will ensure that % everything works properly. Using \cs{token_to_str:N} means that % there is no problem with the asynchronous nature of TeX's writing @@ -12523,19 +12565,19 @@ This work consists of the file siunitx.dtx \cs_set_eq:NN \label \use_none:n \cs_set_eq:NN \index \use_none:n \cs_set_eq:NN \glossary\use_none:n - \tl_map_function:NN \_l_siunitx_declare_list_tl - \_siunitx_contents_add:N + \tl_map_function:NN \l_siunitx_declare_list_tl + \siunitx_contents_add:N } { \token_to_str:N \@writefile {#1} {#2} } } } -\cs_set_protected_nopar:Npn \_siunitx_contents_add:N #1 { +\cs_new_protected_nopar:Npn \siunitx_contents_add:N #1 { \cs_set_nopar:Npn #1 { \token_to_str:N #1 } } % \end{macrocode} %\end{macro} % -%\begin{macro}{\_siunitx_contents_bookmarks:} +%\begin{macro}{\siunitx_contents_bookmarks:} % The idea here is two-fold. First, all of the unit macros are set % up to simply print their literal interpretation: this is hopefully % good enough for most bookmark situations. Secondly, the document @@ -12543,16 +12585,16 @@ This work consists of the file siunitx.dtx % of the input, removes any set up options (which are being ignored) % and stops \pkg{hyperref} issuing a warning. % \begin{macrocode} -\cs_set_protected_nopar:Npn \_siunitx_contents_bookmarks: { - \tl_map_function:NN \_l_siunitx_declare_list_tl - \_siunitx_unit_print_literal_aux:N +\cs_new_protected_nopar:Npn \siunitx_contents_bookmarks: { + \tl_map_function:NN \l_siunitx_declare_list_tl + \siunitx_unit_print_literal_aux:N \msg_redirect_name:nnn { LaTeX / xparse } { redefine-command } { none } - \cs_set_eq:NN \num \_siunitx_bookmark_num:w - \cs_set_eq:NN \numrange \_siunitx_bookmark_numrange:w - \cs_set_eq:NN \si \_siunitx_bookmark_si:w - \cs_set_eq:NN \SI \_siunitx_bookmark_SI:w - \cs_set_eq:NN \SIrange \_siunitx_bookmark_SIrange:w + \cs_set_eq:NN \num \siunitx_bookmark_num:w + \cs_set_eq:NN \numrange \siunitx_bookmark_numrange:w + \cs_set_eq:NN \si \siunitx_bookmark_si:w + \cs_set_eq:NN \SI \siunitx_bookmark_SI:w + \cs_set_eq:NN \SIrange \siunitx_bookmark_SIrange:w \cs_set_nopar:Npn \SIUnitSymbolAngstrom { \AA } \cs_set_nopar:Npn \SIUnitSymbolArcminute { ' } \cs_set_nopar:Npn \SIUnitSymbolArcsecond { '' } @@ -12563,23 +12605,23 @@ This work consists of the file siunitx.dtx } % \end{macrocode} %\end{macro} -%\begin{macro}{\_siunitx_bookmark_num:w} -%\begin{macro}{\_siunitx_bookmark_numrange:w} -%\begin{macro}{\_siunitx_bookmark_si:w} -%\begin{macro}{\_siunitx_bookmark_SI:w} -%\begin{macro}{\_siunitx_bookmark_SIrange:w} +%\begin{macro}{\siunitx_bookmark_num:w} +%\begin{macro}{\siunitx_bookmark_numrange:w} +%\begin{macro}{\siunitx_bookmark_si:w} +%\begin{macro}{\siunitx_bookmark_SI:w} +%\begin{macro}{\siunitx_bookmark_SIrange:w} % To keep things fast, expandable versions of the document commands % are created only once. These are then used if necessary to remove % and re-order arguments in an expandable fashion. % \begin{macrocode} -\DeclareExpandableDocumentCommand \_siunitx_bookmark_num:w { o m } {#2} -\DeclareExpandableDocumentCommand \_siunitx_bookmark_numrange:w { o m m } - { #2 \_l_siunitx_range_phrase_tl #3 } -\DeclareExpandableDocumentCommand \_siunitx_bookmark_si:w { o m } {#2} -\DeclareExpandableDocumentCommand \_siunitx_bookmark_SI:w { o m o m } +\DeclareExpandableDocumentCommand \siunitx_bookmark_num:w { o m } {#2} +\DeclareExpandableDocumentCommand \siunitx_bookmark_numrange:w { o m m } + { #2 \l_siunitx_range_phrase_tl #3 } +\DeclareExpandableDocumentCommand \siunitx_bookmark_si:w { o m } {#2} +\DeclareExpandableDocumentCommand \siunitx_bookmark_SI:w { o m o m } { \IfNoValueF {#3} {#3} #2 ~ #4 } -\DeclareExpandableDocumentCommand \_siunitx_bookmark_SIrange:w - { o m m m } { #2 ~ #4 \_l_siunitx_range_phrase_tl #3 ~ #4 } +\DeclareExpandableDocumentCommand \siunitx_bookmark_SIrange:w + { o m m m } { #2 ~ #4 \l_siunitx_range_phrase_tl #3 ~ #4 } % \end{macrocode} %\end{macro} %\end{macro} @@ -12591,7 +12633,7 @@ This work consists of the file siunitx.dtx % \begin{macrocode} \AtBeginDocument { \@ifpackageloaded { hyperref } - { \pdfstringdefDisableCommands { \_siunitx_contents_bookmarks: } } + { \pdfstringdefDisableCommands { \siunitx_contents_bookmarks: } } { } } % \end{macrocode} @@ -12927,8 +12969,8 @@ This work consists of the file siunitx.dtx % %\subsection{Strict application of the rules} % -%\begin{macro}{\_siunitx_strict_option:n} -%\begin{macro}[aux]{\_siunitx_strict_option_aux:n} +%\begin{macro}{\siunitx_strict_option:n} +%\begin{macro}[aux]{\siunitx_strict_option_aux:n} % When sticking to the rules closely, a few options are not available. % \begin{macrocode} \keys_define:nn { siunitx } { @@ -12945,7 +12987,7 @@ This work consists of the file siunitx.dtx parse-units = true, product-units = repeat, } - \_siunitx_strict_option:n + \siunitx_strict_option:n { bracket-numbers , detect-italic , @@ -12966,14 +13008,14 @@ This work consists of the file siunitx.dtx } } } -\_siunitx_option_deactivate:n { strict } -\cs_set_protected_nopar:Npn \_siunitx_strict_option:n #1 { - \clist_map_function:nN {#1} \_siunitx_strict_option_aux:n +\siunitx_option_deactivate:n { strict } +\cs_new_protected_nopar:Npn \siunitx_strict_option:n #1 { + \clist_map_function:nN {#1} \siunitx_strict_option_aux:n } -\cs_set_protected_nopar:Npn \_siunitx_strict_option_aux:n #1 { +\cs_new_protected_nopar:Npn \siunitx_strict_option_aux:n #1 { \keys_define:nn { siunitx } { #1 .code:n = - { \msg_warning:nnx { _siunitx} { option-not-available } {#1} } + { \msg_warning:nnx { siunitx } { option-not-available } {#1} } } } % \end{macrocode} @@ -12986,41 +13028,41 @@ This work consists of the file siunitx.dtx % \begin{macrocode} \keys_define:nn { siunitx } { load-configurations .code:n = - { \_siunitx_load_configuration:n {#1} } + { \siunitx_load_configuration:n {#1} } } % \end{macrocode} % -%\begin{macro}{\_siunitx_load_configuration:n} -%\begin{macro}[aux]{\_siunitx_load_configuration_aux:n} -%\begin{macro}{\_c_siunitx_configuration_ext_tl} +%\begin{macro}{\siunitx_load_configuration:n} +%\begin{macro}[aux]{\siunitx_load_configuration_aux:n} +%\begin{macro}{\c_siunitx_configuration_ext_tl} % Loading configuration files is made slightly complex by the need % to remove spaces in the file names (none of the files contain any at % all, so this is easy). Secondly, the LaTeX2e \cs{@onefilewithoptions} % function is used for file loading, as LaTeX3 currently needs the % LaTeX2e category code stack to keep things sane. % \begin{macrocode} -\cs_set_protected:Npn \_siunitx_load_configuration:n #1 { - \tl_set_rescan:Nnn \_l_siunitx_tmpa_tl +\cs_new_protected:Npn \siunitx_load_configuration:n #1 { + \tl_set_rescan:Nnn \l_siunitx_tmpa_tl { \char_make_ignore:N \ } {#1} - \clist_map_function:NN \_l_siunitx_tmpa_tl - \_siunitx_load_configuration_aux:n + \clist_map_function:NN \l_siunitx_tmpa_tl + \siunitx_load_configuration_aux:n } -\cs_set_protected:Npn \_siunitx_load_configuration_aux:n #1 { +\cs_new_protected:Npn \siunitx_load_configuration_aux:n #1 { \tl_if_empty:nF {#1} { \file_if_exist:nTF - { siunitx- #1 . \_c_siunitx_configuration_ext_tl } + { siunitx- #1 . \c_siunitx_configuration_ext_tl } { \@onefilewithoptions { siunitx- #1 } [ ] [ ] - \_c_siunitx_configuration_ext_tl + \c_siunitx_configuration_ext_tl } { \msg_error:nnx { siunitx } { unknown-configuration-file } {#1} } } } -\tl_new:N \_c_siunitx_configuration_ext_tl -\tl_set:Nn \_c_siunitx_configuration_ext_tl { cfg } +\tl_new:N \c_siunitx_configuration_ext_tl +\tl_set:Nn \c_siunitx_configuration_ext_tl { cfg } % \end{macrocode} %\end{macro} %\end{macro} @@ -13028,10 +13070,10 @@ This work consists of the file siunitx.dtx % % Load any local configuration file. % \begin{macrocode} -\file_if_exist:nT { siunitx . \_c_siunitx_configuration_ext_tl } +\file_if_exist:nT { siunitx . \c_siunitx_configuration_ext_tl } { \@onefilewithoptions { siunitx } [ ] [ ] - \_c_siunitx_configuration_ext_tl + \c_siunitx_configuration_ext_tl } % \end{macrocode} % @@ -13051,7 +13093,7 @@ This work consists of the file siunitx.dtx % \end{macrocode} % % \begin{macrocode} -\ProvidesExplFile {siunitx-version-1.cfg} {2010/06/07} {2.0c} +\ProvidesExplFile {siunitx-version-1.cfg} {2010/06/10} {2.0d} {siunitx: Version 1 settings} % \end{macrocode} % @@ -13694,11 +13736,11 @@ This work consists of the file siunitx.dtx % \begin{macrocode} \NewDocumentCommand \newunit { o m m } { \IfNoValueTF {#1} - { \_siunitx_declare_unit:Nnn #2 {#3} { } } - { \_siunitx_declare_unit:Nnn #2 {#3} {#1} } + { \siunitx_declare_unit:Nnn #2 {#3} { } } + { \siunitx_declare_unit:Nnn #2 {#3} {#1} } } -\cs_set_eq:NN \renewunit \newunit -\cs_set_eq:NN \provideunit \newunit +\cs_new_eq:NN \renewunit \newunit +\cs_new_eq:NN \provideunit \newunit % \end{macrocode} %\end{macro} %\end{macro} @@ -13764,10 +13806,10 @@ This work consists of the file siunitx.dtx % The functions for creating qualifiers are easy to create again. % \begin{macrocode} \NewDocumentCommand \newqualifier { m m } { - \_siunitx_declare_qualifier:Nn #1 {#2} + \siunitx_declare_qualifier:Nn #1 {#2} } -\cs_set_eq:NN \renewqualifier \newqualifier -\cs_set_eq:NN \providequalifier \newqualifier +\cs_new_eq:NN \renewqualifier \newqualifier +\cs_new_eq:NN \providequalifier \newqualifier % \end{macrocode} %\end{macro} %\end{macro} @@ -14014,15 +14056,15 @@ This work consists of the file siunitx.dtx %\end{macro} % %\begin{macro}{\requiresiconfigs} -%\begin{macro}{\_siunitx_requireconfig:n} +%\begin{macro}{\siunitx_requireconfig:n} % Version one provides this, and it might pop up so should not % cause errors. % \begin{macrocode} \NewDocumentCommand \requiresiconfigs { m } { \keys_set:nn { siunitx } { load-configurations = version-1 } - \clist_map_function:nN {#1} \_siunitx_requireconfig:n + \clist_map_function:nN {#1} \siunitx_requireconfig:n } -\cs_set_protected_nopar:Npn \_siunitx_requireconfig:n #1 { +\cs_new_protected_nopar:Npn \siunitx_requireconfig:n #1 { \tl_if_eq:nnT {#1} { synchem } { \keys_set:nn { siunitx } { load-configurations = chemistry } } } @@ -14041,7 +14083,7 @@ This work consists of the file siunitx.dtx % \end{macrocode} % % \begin{macrocode} -\ProvidesExplFile {siunitx-abbreviations.cfg} {2010/06/07} {2.0c} +\ProvidesExplFile {siunitx-abbreviations.cfg} {2010/06/10} {2.0d} {siunitx: Abbreviated units} % \end{macrocode} % @@ -14249,7 +14291,7 @@ This work consists of the file siunitx.dtx % \end{macrocode} % % \begin{macrocode} -\ProvidesExplFile {siunitx-binary.cfg} {2010/06/07} {2.0c} +\ProvidesExplFile {siunitx-binary.cfg} {2010/06/10} {2.0d} {siunitx: Binary units} % \end{macrocode} % |