From 6470270a312bdbe3f58c8c38d6816a070353f45a Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 13 Apr 2011 23:04:19 +0000 Subject: siunitx 2.2 (13apr11) git-svn-id: svn://tug.org/texlive/trunk@22076 c570f23f-e606-0410-a88d-b1316a301751 --- .../latex/siunitx/config/siunitx-abbreviations.cfg | 9 +- .../tex/latex/siunitx/config/siunitx-binary.cfg | 5 +- .../tex/latex/siunitx/config/siunitx-version-1.cfg | 89 +- Master/texmf-dist/tex/latex/siunitx/siunitx.sty | 942 +++++++++++++++------ 4 files changed, 750 insertions(+), 295 deletions(-) (limited to 'Master/texmf-dist/tex/latex') diff --git a/Master/texmf-dist/tex/latex/siunitx/config/siunitx-abbreviations.cfg b/Master/texmf-dist/tex/latex/siunitx/config/siunitx-abbreviations.cfg index 12c6de9e954..8a41d284d25 100644 --- a/Master/texmf-dist/tex/latex/siunitx/config/siunitx-abbreviations.cfg +++ b/Master/texmf-dist/tex/latex/siunitx/config/siunitx-abbreviations.cfg @@ -35,6 +35,9 @@ \DeclareSIUnit \mmol { \milli \mole } \DeclareSIUnit \kmol { \kilo \mole } \DeclareSIUnit \V { \volt } +\DeclareSIUnit \pV { \pico \volt } +\DeclareSIUnit \nV { \nano \volt } +\DeclareSIUnit \uV { \micro \volt } \DeclareSIUnit \mV { \milli \volt } \DeclareSIUnit \kV { \kilo \volt } \DeclareSIUnit \l { \litre } @@ -64,8 +67,7 @@ \DeclareSIUnit \MeV { \mega \electronvolt } \DeclareSIUnit \GeV { \giga \electronvolt } \DeclareSIUnit \TeV { \tera \electronvolt } -\DeclareSIUnitWithOptions \kWh { \kilo \watt \hour } - { inter-unit-separator = } +\DeclareSIUnit [ inter-unit-product = ] \kWh { \kilo \watt \hour } \DeclareSIUnit \m { \metre } \DeclareSIUnit \pm { \pico \metre } \DeclareSIUnit \nm { \nano \metre } @@ -93,7 +95,6 @@ \DeclareSIUnit \ns { \nano \second } \DeclareSIUnit \us { \micro \second } \DeclareSIUnit \ms { \milli \second } -%% %% Copyright (C) 2008-2011 by %% Joseph Wright %% @@ -101,9 +102,7 @@ %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: -%% %% http://www.latex-project.org/lppl.txt -%% %% This work is "maintained" (as per LPPL maintenance status) by %% Joseph Wright. %% diff --git a/Master/texmf-dist/tex/latex/siunitx/config/siunitx-binary.cfg b/Master/texmf-dist/tex/latex/siunitx/config/siunitx-binary.cfg index 21745c20815..1454b87328f 100644 --- a/Master/texmf-dist/tex/latex/siunitx/config/siunitx-binary.cfg +++ b/Master/texmf-dist/tex/latex/siunitx/config/siunitx-binary.cfg @@ -13,7 +13,7 @@ %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% -\ProvidesExplFile {siunitx-binary.cfg} {2011/04/04} {2.1p} +\ProvidesExplFile {siunitx-binary.cfg} {2011/04/13} {2.2} {siunitx: Binary units} \DeclareBinaryPrefix \kibi { Ki } { 10 } \DeclareBinaryPrefix \mebi { Mi } { 20 } @@ -25,7 +25,6 @@ \DeclareBinaryPrefix \yobi { Yi } { 80 } \DeclareSIUnit \bit { bit } \DeclareSIUnit \byte { B } -%% %% Copyright (C) 2008-2011 by %% Joseph Wright %% @@ -33,9 +32,7 @@ %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: -%% %% http://www.latex-project.org/lppl.txt -%% %% This work is "maintained" (as per LPPL maintenance status) by %% Joseph Wright. %% diff --git a/Master/texmf-dist/tex/latex/siunitx/config/siunitx-version-1.cfg b/Master/texmf-dist/tex/latex/siunitx/config/siunitx-version-1.cfg index 01b5b852b83..2fea1ee48d2 100644 --- a/Master/texmf-dist/tex/latex/siunitx/config/siunitx-version-1.cfg +++ b/Master/texmf-dist/tex/latex/siunitx/config/siunitx-version-1.cfg @@ -13,7 +13,7 @@ %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% -\ProvidesExplFile {siunitx-version-1.cfg} {2011/04/04} {2.1p} +\ProvidesExplFile {siunitx-version-1.cfg} {2011/04/13} {2.2} {siunitx: Version 1 settings} \keys_set:nn { siunitx } { load-configurations = { abbreviations , binary } } @@ -519,52 +519,52 @@ unitsep .choice: , unitsep / cdot .meta:n = - { inter-unit-separator = { } \cdot { } }, + { inter-unit-product = { } \cdot { } }, unitsep / - comma .meta:n = { inter-unit-separator = { {,} } }, + comma .meta:n = { inter-unit-product = { {,} } }, unitsep / - fullstop .meta:n = { inter-unit-separator = { { . } } }, + fullstop .meta:n = { inter-unit-product = { { . } } }, unitsep / - med .meta:n = { inter-unit-separator = \: }, + med .meta:n = { inter-unit-product = \: }, unitsep / - medium .meta:n = { inter-unit-separator = \: }, + medium .meta:n = { inter-unit-product = \: }, unitsep / - none .meta:n = { inter-unit-separator = }, + none .meta:n = { inter-unit-product = }, unitsep / - period .meta:n = { inter-unit-separator = { { . } } }, + period .meta:n = { inter-unit-product = { { . } } }, unitsep / - space .meta:n = { inter-unit-separator = \text { ~ } }, + space .meta:n = { inter-unit-product = \text { ~ } }, unitsep / - stop .meta:n = { inter-unit-separator = { { . } } }, + stop .meta:n = { inter-unit-product = { { . } } }, unitsep / - thick .meta:n = { inter-unit-separator = \; }, + thick .meta:n = { inter-unit-product = \; }, unitsep / - thin .meta:n = { inter-unit-separator = \, }, + thin .meta:n = { inter-unit-product = \, }, unitsep / tightcdot .meta:n = - { inter-unit-separator = \bgroup \cdot \egroup }, + { inter-unit-product = \bgroup \cdot \egroup }, unitsep / tighttimes .meta:n = - { inter-unit-separator = \bgroup \times \egroup }, + { inter-unit-product = \bgroup \times \egroup }, unitsep / - times .meta:n = { inter-unit-separator = \times }, + times .meta:n = { inter-unit-product = \times }, unitsep / - unknown .meta:n = { inter-unit-separator = #1 }, + unknown .meta:n = { inter-unit-product = #1 }, unitspace .choice: , unitspace / - med .meta:n = { inter-unit-separator = \: }, + med .meta:n = { inter-unit-product = \: }, unitspace / - medium .meta:n = { inter-unit-separator = \: }, + medium .meta:n = { inter-unit-product = \: }, unitspace / - none .meta:n = { inter-unit-separator = }, + none .meta:n = { inter-unit-product = }, unitspace / - space .meta:n = { inter-unit-separator = \text { ~ } }, + space .meta:n = { inter-unit-product = \text { ~ } }, unitspace / - thick .meta:n = { inter-unit-separator = \; }, + thick .meta:n = { inter-unit-product = \; }, unitspace / - thin .meta:n = { inter-unit-separator = \, }, + thin .meta:n = { inter-unit-product = \, }, unitspace / - unknown .meta:n = { inter-unit-separator = #1 }, + unknown .meta:n = { inter-unit-product = #1 }, valuecolor .meta:n = { number-color = #1 }, valuecolour .meta:n = { number-color = #1 }, valuemathrm .meta:x = @@ -583,37 +583,37 @@ valuesep .choice: , valuesep / cdot .meta:n = - { number-unit-separator = { } \cdot { } }, + { number-unit-product = { } \cdot { } }, valuesep / - comma .meta:n = { number-unit-separator = { {,} } }, + comma .meta:n = { number-unit-product = { {,} } }, valuesep / - fullstop .meta:n = { number-unit-separator = { { . } } }, + fullstop .meta:n = { number-unit-product = { { . } } }, valuesep / - med .meta:n = { number-unit-separator = \: }, + med .meta:n = { number-unit-product = \: }, valuesep / - medium .meta:n = { number-unit-separator = \: }, + medium .meta:n = { number-unit-product = \: }, valuesep / - none .meta:n = { number-unit-separator = }, + none .meta:n = { number-unit-product = }, valuesep / - period .meta:n = { number-unit-separator = { { . } } }, + period .meta:n = { number-unit-product = { { . } } }, valuesep / - space .meta:n = { number-unit-separator = \text { ~ } }, + space .meta:n = { number-unit-product = \text { ~ } }, valuesep / - stop .meta:n = { number-unit-separator = { { . } } }, + stop .meta:n = { number-unit-product = { { . } } }, valuesep / - thick .meta:n = { number-unit-separator = \; }, + thick .meta:n = { number-unit-product = \; }, valuesep / - thin .meta:n = { number-unit-separator = \, }, + thin .meta:n = { number-unit-product = \, }, valuesep / tightcdot .meta:n = - { number-unit-separator = \bgroup \cdot \egroup }, + { number-unit-product = \bgroup \cdot \egroup }, valuesep / tighttimes .meta:n = - { number-unit-separator = \bgroup \times \egroup }, + { number-unit-product = \bgroup \times \egroup }, valuesep / - times .meta:n = { number-unit-separator = \times }, + times .meta:n = { number-unit-product = \times }, valuesep / - unknown .meta:n = { number-unit-separator = #1 }, + unknown .meta:n = { number-unit-product = #1 }, xspace .meta:n = { use-xspace = #1 }, xspace .default:n = { true }, } @@ -628,13 +628,9 @@ free-standing-units = true , mode = math , } -\NewDocumentCommand \newunit { o m m } { - \IfNoValueTF {#1} - { \siunitx_declare_unit:Nnn #2 {#3} { } } - { \siunitx_declare_unit:Nnn #2 {#3} {#1} } -} -\cs_new_eq:NN \renewunit \newunit -\cs_new_eq:NN \provideunit \newunit +\cs_new_eq:NN \newunit \DeclareSIUnit +\cs_new_eq:NN \renewunit \DeclareSIUnit +\cs_new_eq:NN \provideunit \DeclareSIUnit \NewDocumentCommand \newpower { o m m } { \IfNoValueTF {#1} { \DeclareSIPrePower #2 {#3} } @@ -742,7 +738,6 @@ \str_if_eq:nnT {#1} { synchem } { \keys_set:nn { siunitx } { load-configurations = chemistry } } } -%% %% Copyright (C) 2008-2011 by %% Joseph Wright %% @@ -750,9 +745,7 @@ %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: -%% %% http://www.latex-project.org/lppl.txt -%% %% This work is "maintained" (as per LPPL maintenance status) by %% Joseph Wright. %% diff --git a/Master/texmf-dist/tex/latex/siunitx/siunitx.sty b/Master/texmf-dist/tex/latex/siunitx/siunitx.sty index bbc700ec004..7bfb956c781 100644 --- a/Master/texmf-dist/tex/latex/siunitx/siunitx.sty +++ b/Master/texmf-dist/tex/latex/siunitx/siunitx.sty @@ -14,7 +14,7 @@ %% --------------------------------------------------------------- %% \RequirePackage{expl3} -\ProvidesExplPackage {siunitx} {2011/04/04} {2.1p} +\ProvidesExplPackage {siunitx} {2011/04/13} {2.2} {A comprehensive (SI) units package} \cs_if_exist:NTF \msg_set:nnnn { @@ -70,7 +70,6 @@ \int_new:N \l_siunitx_tmp_int \tl_new:N \l_siunitx_tmpa_tl \tl_new:N \l_siunitx_tmpb_tl -\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} @@ -81,6 +80,7 @@ \cs_new_protected:Npn \siunitx_error:n #1 { \siunitx_error:nxx {#1} { } { } } +\bool_new:N \l_siunitx_error_bool \AtBeginDocument { \cs_if_free:cT { T@TS1 } { @@ -94,7 +94,8 @@ \@ifpackageloaded { fontspec } { \int_const:Nn \c_siunitx_minus_int { 8722 } - \tl_set:Nn \c_siunitx_minus_tl { \char \c_siunitx_minus_int } + \tl_set:Nn \c_siunitx_minus_tl + { \tex_char:D \c_siunitx_minus_int } } { } } @@ -102,7 +103,10 @@ \DeclareTextSymbolDefault \c_siunitx_mu_tl { TS1 } \AtBeginDocument { \@ifpackageloaded { fontspec } - { \tl_set:Nx \c_siunitx_mu_tl { \char 181 } } + { + \int_const:Nn \c_siunitx_mu_int { 181 } + \tl_set:Nn \c_siunitx_mu_tl { \tex_char:D \c_siunitx_mu_int } + } { } } \tl_new:N \c_siunitx_omega_tl @@ -308,7 +312,6 @@ } } } -\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} } @@ -323,8 +326,10 @@ \clist_map_function:NN \l_siunitx_option_deactivate_clist \siunitx_option_deactivate_aux:n } +\clist_new:N \l_siunitx_option_deactivate_clist \cs_generate_variant:Nn \prop_del:Nn { c } \cs_generate_variant:Nn \prop_put:Nnn { cnV } +\cs_generate_variant:Nn \tl_if_in:NnTF { NV } \cs_generate_variant:Nn \tl_replace_all_in:Nnn { NnV } \group_begin: \tl_map_inline:nn { \M \A \C \R \O } @@ -400,17 +405,17 @@ detect-all .default:n = true, detect-all / false .meta:n = { - detect-family = false, - detect-mode = false, - detect-shape = false, - detect-weight = false + detect-family = false , + detect-mode = false , + detect-shape = false , + detect-weight = false , }, detect-all / true .meta:n = { - detect-family = true, - detect-mode = true, - detect-shape = true, - detect-weight = true + detect-family = true , + detect-mode = true , + detect-shape = true , + detect-weight = true , }, detect-display-math .bool_set:N = \l_siunitx_detect_display_math_bool, @@ -754,8 +759,12 @@ } } \AtBeginDocument { - \@ifpackageloaded { color } { } - { \cs_set_eq:NN \siunitx_print_color: \scan_stop: } + \@ifpackageloaded { color } + { \cs_new_eq:NN \siunitx_textcolor:n \textcolor } + { + \cs_set_eq:NN \siunitx_print_color: \scan_stop: + \cs_new_eq:NN \siunitx_textcolor:n \use:n + } } \group_begin: \char_set_lccode:nn { `\@ } { `\_ } @@ -766,6 +775,8 @@ \group_end: \cs_set_protected_nopar:Npn \siunitx_print_math: { + \cs_set_eq:NN \PrintSubscript @ + \cs_set_eq:NN \PrintSuperscript ^ \ensuremath { \use:c @@ -778,6 +789,8 @@ } \cs_set_protected_nopar:Npn \siunitx_print_text: { + \cs_set_eq:NN \PrintSubscript \siunitx_print_text_sub:n + \cs_set_eq:NN \PrintSuperscript \siunitx_print_text_super: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 { ! } @@ -910,18 +923,31 @@ \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 +\int_new:N \l_siunitx_number_mantissa_length_int +\tl_new:N \l_siunitx_number_uncert_tl +\int_new:N \l_siunitx_number_uncert_length_int +\tl_new:N \l_siunitx_input_uncert_sign_tl \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-comparators .tl_set:N = \l_siunitx_input_comparator_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-comparators .tl_set:N = \l_siunitx_input_comparator_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-uncertainty-signs .code:n = + { + \tl_set:Nn \l_siunitx_input_uncert_sign_tl {#1} + \tl_map_inline:nn {#1} + { + \tl_if_in:NnF \l_siunitx_input_sign_tl {##1} + { \tl_put_right:Nn \l_siunitx_input_sign_tl {##1} } + } + } , } \keys_set:nn { siunitx } { % ( input-close-uncertainty = ), @@ -934,6 +960,7 @@ input-protect-tokens = \approx\ge\geq\gg\le\leg\ll\mp\pi\pm\sim, input-signs = +-\mp\pm, input-symbols = \pi, + input-uncertainty-signs = \pm, } \cs_new_protected:Npn \siunitx_number_in_parse:n #1 { \tl_if_empty:nF {#1} @@ -1023,11 +1050,11 @@ \tl_replace_all_in:Nnn #1 { >> } { \gg } \tl_replace_all_in:Nnn #1 { >= } { \ge } } -\cs_new_protected:Npn \siunitx_number_in_parse_error:nx #1#2 { +\cs_new_protected:Npn \siunitx_number_in_parse_error:nn #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:nn { nV } \cs_new_protected:Npn \siunitx_number_in_parse_loop:N #1 { } \cs_new_protected:Npn \siunitx_number_in_parse_more:N #1 { } \cs_new_protected:Npn \siunitx_number_in_parse_relation:N #1 { @@ -1045,7 +1072,7 @@ \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:nn { restricted-number } {#1} } { @@ -1067,7 +1094,7 @@ { restricted-number } \l_siunitx_number_arg_tl } { - \siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nn { restricted-number } {#1} } } @@ -1093,7 +1120,7 @@ \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:nn { duplicate-exponent-token } { \token_to_str:N #1 } } { @@ -1116,7 +1143,7 @@ \l_siunitx_number_arg_tl } { - \siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nn { invalid-token-in-number } {#1} } } @@ -1156,14 +1183,14 @@ { \tl_if_in:NnTF \l_siunitx_input_uncert_close_tl {#1} { - \siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nn { misplaced-uncertainty-token } {#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:nn { invalid-token-in-number } {#1} } } @@ -1246,7 +1273,7 @@ \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:nn { duplicate-complex-root-token } { \token_to_str:N #1 } } { @@ -1311,8 +1338,8 @@ \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 } - { \token_to_str:N #1 } + \siunitx_number_in_parse_error:nn { duplicate-decimal-token } + {#1} } { \bool_set_true:N \l_siunitx_number_in_decimal_bool @@ -1357,7 +1384,7 @@ \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:nn { duplicate-exponent-token } { \token_to_str:N #1 } } { @@ -1380,13 +1407,13 @@ { \bool_if:NTF \l_siunitx_number_in_exponent_bool { - \siunitx_number_in_parse_error:nx { misplaced-sign-token } + \siunitx_number_in_parse_error:nn { misplaced-sign-token } {#1} } { \bool_if:NTF \l_siunitx_number_in_complex_bool { - \siunitx_number_in_parse_error:nx + \siunitx_number_in_parse_error:nn { misplaced-sign-token } {#1} } { @@ -1485,8 +1512,19 @@ { \prop_get:NnN \l_siunitx_number_in_prop { complex-sign } \l_siunitx_tmpa_tl - \siunitx_error:nx { misplaced-sign-token } - { \exp_not:V \l_siunitx_tmpa_tl } + \tl_if_in:NVTF \l_siunitx_input_uncert_sign_tl \l_siunitx_tmpa_tl + { + \prop_if_in:NnTF \l_siunitx_number_in_prop { uncertainty } + { + \siunitx_error:nx { misplaced-sign-token } + { \exp_not:n {#1} } + } + { \siunitx_number_in_complex_to_uncert:n {#1} } + } + { + \siunitx_error:nx { misplaced-sign-token } + { \exp_not:n {#1} } + } } \prop_get:NnN \l_siunitx_number_in_prop { mantissa-sign } \l_siunitx_tmpa_tl @@ -1500,6 +1538,128 @@ } } } +\cs_new_protected_nopar:Npn \siunitx_number_in_complex_to_uncert:n #1 { + \prop_del:Nn \l_siunitx_number_in_prop { complex } + \prop_del:Nn \l_siunitx_number_in_prop { complex-decimal-marker } + \prop_del:Nn \l_siunitx_number_in_prop { complex-sign } + \prop_put:Nnn \l_siunitx_number_in_prop { uncertainty } { true } + \prop_get:NnN \l_siunitx_number_in_prop { complex-integer } + \l_siunitx_number_uncert_tl + \quark_if_no_value:NTF \l_siunitx_number_uncert_tl + { \siunitx_number_in_complex_to_uncert_dec:n {#1} } + { + \tl_if_single:NTF \l_siunitx_number_uncert_tl + { + \int_compare:nNnTF + { \l_siunitx_number_uncert_tl } = { \c_zero } + { \siunitx_number_in_complex_to_uncert_dec:n {#1} } + { \siunitx_number_in_complex_to_uncert_int: } + } + { \siunitx_number_in_complex_to_uncert_int: } + } + \prop_del:Nn \l_siunitx_number_in_prop { complex-integer } + \prop_del:Nn \l_siunitx_number_in_prop { complex-decimal } +} +\cs_new_protected_nopar:Npn \siunitx_number_in_complex_to_uncert_int: { + \prop_get:NnN \l_siunitx_number_in_prop { complex-decimal } + \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_clear:N \l_siunitx_tmpa_tl } + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-decimal } + \l_siunitx_tmpb_tl + \quark_if_no_value:NT \l_siunitx_tmpb_tl + { \tl_clear:N \l_siunitx_tmpb_tl } + \siunitx_number_in_complex_to_uncert_pad: +} +\cs_new_protected_nopar:Npn \siunitx_number_in_complex_to_uncert_dec:n + #1 + { + \tl_clear:N \l_siunitx_number_uncert_tl + \prop_get:NnN \l_siunitx_number_in_prop { complex-decimal } + \l_siunitx_tmpa_tl + \quark_if_no_value:NTF \l_siunitx_tmpa_tl + { + \siunitx_error:nx { misplaced-sign-token } + { \exp_not:n {#1} } + } + { + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-decimal } + \l_siunitx_tmpb_tl + \quark_if_no_value:NT \l_siunitx_tmpb_tl + { \tl_clear:N \l_siunitx_tmpb_tl } + \tl_map_function:NN + \l_siunitx_tmpa_tl + \siunitx_number_in_complex_to_uncert_dec_loop:N + \siunitx_number_in_complex_to_uncert_pad: + } + } +\cs_new_protected_nopar:Npn + \siunitx_number_in_complex_to_uncert_dec_loop:N #1 + { + \str_if_eq:nnTF {#1} { 0 } + { + \tl_set:Nf \l_siunitx_tmpa_tl + { \tl_tail:V \l_siunitx_tmpa_tl } + \tl_if_empty:NF \l_siunitx_tmpb_tl + { + \tl_set:Nf \l_siunitx_tmpb_tl + { \tl_tail:V \l_siunitx_tmpb_tl } + } + } + { \tl_map_break: } + } +\cs_new_protected_nopar:Npn \siunitx_number_in_complex_to_uncert_pad: + { + \int_set:Nn \l_siunitx_number_uncert_length_int + { \tl_elt_count:N \l_siunitx_tmpa_tl } + \int_set:Nn \l_siunitx_number_mantissa_length_int + { \tl_elt_count:N \l_siunitx_tmpb_tl } + \int_compare:nNnTF + { \l_siunitx_number_mantissa_length_int } + > { \l_siunitx_number_uncert_length_int } + { + \tl_set:Nx \l_siunitx_tmpa_tl + { + \exp_not:V \l_siunitx_tmpa_tl + \prg_replicate:nn + { + \l_siunitx_number_mantissa_length_int + - \l_siunitx_number_uncert_length_int + } + { 0 } + } + } + { + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-decimal } + \l_siunitx_tmpb_tl + \quark_if_no_value:NT \l_siunitx_tmpb_tl + { \tl_clear:N \l_siunitx_tmpb_tl } + \tl_set:Nx \l_siunitx_tmpb_tl + { + \exp_not:V \l_siunitx_tmpb_tl + \prg_replicate:nn + { + \l_siunitx_number_uncert_length_int + - \l_siunitx_number_mantissa_length_int + } + { 0 } + } + \tl_if_empty:NF \l_siunitx_tmpb_tl + { + \prop_put:NnV \l_siunitx_number_in_prop { mantissa-decimal } + \l_siunitx_tmpb_tl + \prop_if_in:NnF \l_siunitx_number_in_prop + { mantissa-decimal-marker } + { + \prop_put:Nnn \l_siunitx_number_in_prop + { mantissa-decimal-marker } { . } + } + } + } + \tl_put_right:NV \l_siunitx_number_uncert_tl \l_siunitx_tmpa_tl + \prop_put:NnV \l_siunitx_number_in_prop { mantissa-uncertainty } + \l_siunitx_number_uncert_tl + } \int_new:N \l_siunitx_round_int \tl_new:N \l_siunitx_round_tl \bool_new:N \l_siunitx_round_bool @@ -1512,12 +1672,15 @@ \tl_new:N \l_siunitx_uncertainty_decimal_tl \tl_new:N \l_siunitx_uncertainty_integer_tl \bool_new:N \l_siunitx_process_fixed_bool +\bool_new:N \l_siunitx_process_engineering_bool \bool_new:N \l_siunitx_process_scientific_bool \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, fixed-exponent .int_set:N = \l_siunitx_process_fixed_int, + minimum-integer-digits .int_set:N = + \l_siunitx_process_integer_min_int, retain-explicit-plus .bool_set:N = \l_siunitx_process_plus_tl, retain-unity-mantissa .bool_set:N = \l_siunitx_process_unity_mantissa_bool, @@ -1538,19 +1701,29 @@ / false .code:n = { \bool_set_false:N \l_siunitx_process_fixed_bool + \bool_set_false:N \l_siunitx_process_engineering_bool \bool_set_false:N \l_siunitx_process_scientific_bool }, + scientific-notation + / engineering .code:n = + { + \bool_set_false:N \l_siunitx_process_fixed_bool + \bool_set_true:N \l_siunitx_process_engineering_bool + \bool_set_true:N \l_siunitx_process_scientific_bool + }, scientific-notation / fixed .code:n = { \bool_set_true:N \l_siunitx_process_fixed_bool + \bool_set_false:N \l_siunitx_process_engineering_bool \bool_set_false:N \l_siunitx_process_scientific_bool }, scientific-notation / true .code:n = { \bool_set_false:N \l_siunitx_process_fixed_bool - \bool_set_true:N \l_siunitx_process_scientific_bool + \bool_set_false:N \l_siunitx_process_engineering_bool + \bool_set_true:N \l_siunitx_process_scientific_bool }, } \keys_set:nn { siunitx } { @@ -1576,6 +1749,7 @@ \prop_if_in:NnF \l_siunitx_number_in_prop { uncertainty } { \siunitx_number_process_round: } } + \siunitx_number_process_integer_digits: } \cs_new_protected_nopar:Npn \siunitx_number_process_exponent: { \bool_if:NF \l_siunitx_process_zero_exponent_bool @@ -1894,8 +2068,32 @@ } \cs_new_protected_nopar:Npn \siunitx_number_process_fixed_small_aux:w { } -\tl_new:N \c_siunitx_unity_tl -\tl_set:Nn \c_siunitx_unity_tl { 1 } +\cs_new_protected_nopar:Npn \siunitx_number_process_integer_digits: { + \int_compare:nNnT + { \l_siunitx_process_integer_min_int } > { \c_zero } + { + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-integer } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl + { + \int_set:Nn \l_siunitx_tmp_int + { + \l_siunitx_process_integer_min_int + - \tl_elt_count:N \l_siunitx_tmpa_tl + } + \int_compare:nNnT { \l_siunitx_tmp_int } > { \c_zero } + { + \tl_set:Nx \l_siunitx_tmpa_tl + { + \prg_replicate:nn { \l_siunitx_tmp_int } { 0 } + \exp_not:V \l_siunitx_tmpa_tl + } + \prop_put:NnV \l_siunitx_number_in_prop + { mantissa-integer } \l_siunitx_tmpa_tl + } + } + } +} \cs_new_protected_nopar:Npn \siunitx_number_process_mantissa: { \bool_if:NF \l_siunitx_process_unity_mantissa_bool { @@ -1920,6 +2118,8 @@ } } } +\tl_new:N \c_siunitx_unity_tl +\tl_set:Nn \c_siunitx_unity_tl { 1 } \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 @@ -2180,6 +2380,13 @@ \l_siunitx_tmpb_tl \quark_if_no_value:NT \l_siunitx_tmpb_tl { \tl_set:Nn \l_siunitx_tmpb_tl { 0 } } + \group_begin: + \prop_get:NnN \l_siunitx_number_in_prop { exponent-sign } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl + { \tl_put_left:NV \l_siunitx_tmpb_tl \l_siunitx_tmpa_tl } + \exp_args:NNNV \group_end: + \tl_set:Nn \l_siunitx_tmpb_tl \l_siunitx_tmpb_tl \tl_set:Nx \l_siunitx_tmpa_tl { \l_siunitx_tmpa_tl { \l_siunitx_tmpb_tl } } \exp_last_unbraced:NV \siunitx_number_process_scientific_aux_i:nnn @@ -2198,34 +2405,10 @@ { \int_compare:nNnTF {#1} > { 0 } { - \prop_put:Nnn \l_siunitx_number_in_prop - { mantissa-integer } {#1} - - \tl_if_empty:nTF {#2} - { - \prop_del:Nn \l_siunitx_number_in_prop - { mantissa-decimal } - \prop_del:Nn \l_siunitx_number_in_prop - { mantissa-decimal-marker } - } - { - \prop_put:Nnn \l_siunitx_number_in_prop - { mantissa-decimal } {#2} - \prop_if_in:NnF \l_siunitx_number_in_prop - { mantissa-decimal-marker } - { - \prop_put:Nnn \l_siunitx_number_in_prop - { mantissa-decimal-marker } { . } - } - } - \int_compare:nNnF {#3} = { 0 } - { - \int_set:Nn \l_siunitx_tmp_int {#3} - \prop_put:Nnn \l_siunitx_number_in_prop { exponent } - { true } - \prop_put:NnV \l_siunitx_number_in_prop - { exponent-integer } \l_siunitx_tmp_int - } + \bool_if:NTF \l_siunitx_process_engineering_bool + { \siunitx_number_process_scientific_engineering:nnn } + { \siunitx_number_process_scientific_store:nnn } + {#1} {#2} {#3} } { \siunitx_number_process_scientific_small:wn @@ -2247,9 +2430,132 @@ \l_siunitx_tmpa_tl } \cs_new_protected_nopar:Npn - \siunitx_number_process_scientific_small:wn #1#2 \q_stop #3 { - \siunitx_number_process_scientific_aux_ii:nnn {#1} {#2} { #3 - 1 } -} + \siunitx_number_process_scientific_small:wn #1#2 \q_stop #3 + { \siunitx_number_process_scientific_aux_ii:nnn {#1} {#2} { #3 - 1 } } +\cs_new_protected_nopar:Npn + \siunitx_number_process_scientific_store:nnn #1#2#3 + { + \prop_put:Nnn \l_siunitx_number_in_prop { mantissa-integer } {#1} + \tl_if_empty:nTF {#2} + { + \prop_del:Nn \l_siunitx_number_in_prop { mantissa-decimal } + \prop_del:Nn \l_siunitx_number_in_prop + { mantissa-decimal-marker } + } + { + \prop_put:Nnn \l_siunitx_number_in_prop + { mantissa-decimal } {#2} + \prop_if_in:NnF \l_siunitx_number_in_prop + { mantissa-decimal-marker } + { + \prop_put:Nnn \l_siunitx_number_in_prop + { mantissa-decimal-marker } { . } + } + } + \int_compare:nNnTF {#3} = { 0 } + { + \prop_del:Nn \l_siunitx_number_in_prop { exponent } + \prop_del:Nn \l_siunitx_number_in_prop { exponent-sign } + \prop_del:Nn \l_siunitx_number_in_prop { exponent-integer } + } + { + \prop_put:Nnn \l_siunitx_number_in_prop { exponent } { true } + \int_compare:nNnTF {#3} > { 0 } + { + \int_set:Nn \l_siunitx_tmp_int {#3} + \prop_put:NnV \l_siunitx_number_in_prop + { exponent-integer } \l_siunitx_tmp_int + \prop_del:Nn \l_siunitx_number_in_prop { exponent-sign } + } + { + \int_set:Nn \l_siunitx_tmp_int { 0 - (#3) } + \prop_put:NnV \l_siunitx_number_in_prop + { exponent-integer } \l_siunitx_tmp_int + \prop_put:Nnn \l_siunitx_number_in_prop { exponent-sign } + { - } + } + } + } +\cs_new_protected_nopar:Npn + \siunitx_number_process_scientific_engineering:nnn #1#2#3 + { + \use:c + { + siunitx_number_process_scientific_engineering_ + \int_compare:nNnTF {#3} < { 0 } + { + \prg_case_int:nnn { \int_mod:nn { 0 - (#3) } { 3 } } + { + { 1 } { 2 } + { 2 } { 1 } + } + { 0 } + } + { \int_mod:nn {#3} { 3 } } + :nnn + } + {#1} {#2} {#3} + } +\cs_new_eq:cN + { siunitx_number_process_scientific_engineering_0:nnn } + \siunitx_number_process_scientific_store:nnn +\cs_new_protected_nopar:cpn + { siunitx_number_process_scientific_engineering_1:nnn } #1#2#3 + { + \tl_if_empty:nTF {#2} + { + \siunitx_number_process_scientific_store:nnn { #1 0 } { } + { #3 - 1 } + } + { + \use:c + { siunitx_number_process_scientific_engineering_1:nw } + {#1} #2 \q_stop {#3} + } + } +\cs_new_protected_nopar:cpn + { siunitx_number_process_scientific_engineering_1:nw } + #1#2#3 \q_stop #4 + { + \siunitx_number_process_scientific_store:nnn + {#1#2} {#3} { #4 - 1 } + } +\cs_new_protected_nopar:cpn + { siunitx_number_process_scientific_engineering_2:nnn } #1#2#3 + { + \tl_if_empty:nTF {#2} + { + \siunitx_number_process_scientific_store:nnn { #1 00 } { } + { #3 - 2 } + } + { + \use:c + { siunitx_number_process_scientific_engineering_2_i:nw } + {#1} #2 \q_stop {#3} + } + } +\cs_new_protected_nopar:cpn + { siunitx_number_process_scientific_engineering_2_i:nw } + #1#2#3 \q_stop #4 + { + \tl_if_empty:nTF {#3} + { + \siunitx_number_process_scientific_store:nnn { #1#2 0 } { } + { #4 - 2 } + } + { + \use:c + { siunitx_number_process_scientific_engineering_2_ii:nw } + {#1#2} #3 \q_stop {#4} + } + } +\cs_new_protected_nopar:cpn + { siunitx_number_process_scientific_engineering_2_ii:nw } + #1#2#3 \q_stop #4 + { + \siunitx_number_process_scientific_store:nnn { #1#2 } {#3} + { #4 - 2 } + } \cs_new_protected_nopar:Npn \siunitx_number_process_sign: { \bool_if:NF \l_siunitx_process_plus_tl { @@ -2296,8 +2602,6 @@ } } } -\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 @@ -2307,6 +2611,8 @@ \prop_put:Nnn \l_siunitx_number_in_prop { #1 -had-sign } { true } } } +\tl_new:N \c_siunitx_plus_tl +\tl_set:Nn \c_siunitx_plus_tl { + } \cs_new_protected_nopar:Npn \siunitx_number_process_uncertainty: { \clist_map_function:nN { mantissa , complex } \siunitx_number_process_uncertainty_aux:n @@ -2408,6 +2714,8 @@ \tl_new:N \l_siunitx_output_decimal_tl \bool_new:N \l_siunitx_complex_after_bool \keys_define:nn { siunitx } { + bracket-negative-numbers .bool_set:N = + \l_siunitx_negative_bracket_bool , bracket-numbers .bool_set:N = \l_siunitx_brackets_bool, close-bracket .tl_set:N = \l_siunitx_bracket_close_tl, complex-root-position .choice:, @@ -2447,6 +2755,7 @@ { \tl_set:Nn \l_siunitx_output_decimal_tl { {#1} } }, + output-exponent-marker .tl_set:N = \l_siunitx_output_exponent_tl, output-open-uncertainty .tl_set:N = \l_siunitx_output_uncert_open_tl, separate-uncertainty .bool_set:N = \l_siunitx_uncert_sep_bool, @@ -2637,17 +2946,20 @@ \siunitx_number_format_brackets:n { mantissa } \prop_get:NnN \l_siunitx_number_out_prop { mantissa-result } \l_siunitx_tmpa_tl - \bool_if:NTF \l_siunitx_tight_bool + \tl_if_empty:NT \l_siunitx_output_exponent_tl { - \tl_set:Nx \l_siunitx_tmpb_tl - { { \exp_not:V \l_siunitx_exponent_product_tl } } - } - { - \tl_set:Nx \l_siunitx_tmpb_tl - { { } \exp_not:V \l_siunitx_exponent_product_tl { } } + \bool_if:NTF \l_siunitx_tight_bool + { + \tl_set:Nx \l_siunitx_tmpb_tl + { { \exp_not:V \l_siunitx_exponent_product_tl } } + } + { + \tl_set:Nx \l_siunitx_tmpb_tl + { { } \exp_not:V \l_siunitx_exponent_product_tl { } } + } + \siunitx_tl_put_right_math:NV \l_siunitx_tmpa_tl + \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 @@ -2659,9 +2971,15 @@ \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 + \tl_if_empty:NTF \l_siunitx_output_exponent_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 + } + { + \tl_put_left:NV \l_siunitx_tmpa_tl \l_siunitx_output_exponent_tl + } \prop_put:NnV \l_siunitx_number_out_prop { exponent-result } \l_siunitx_tmpa_tl } @@ -2916,32 +3234,54 @@ \l_siunitx_tmpa_tl \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \bool_if:NT \l_siunitx_tight_bool - { - \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 + \bool_if:NTF \l_siunitx_negative_bracket_bool { - \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 + \str_if_eq:VnTF \l_siunitx_tmpa_tl { - } + { \siunitx_number_format_sign_negative_brackets:n {#1} } + { \siunitx_number_format_sign_aux:n {#1} } } - } + { \siunitx_number_format_sign_aux:n {#1} } + } } } +\cs_new_protected_nopar:Npn \siunitx_number_format_sign_aux:n #1 { + \bool_if:NT \l_siunitx_tight_bool + { + \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_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_new_protected_nopar:Npn + \siunitx_number_format_sign_negative_brackets:n #1 + { + \siunitx_number_format_brackets_aux:n {#1} + \prop_get:NnN \l_siunitx_number_out_prop { #1 } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \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 + \prop_put:NnV \l_siunitx_number_out_prop { #1 } + \l_siunitx_tmpa_tl + } + } \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 } @@ -3311,7 +3651,7 @@ \cs_new_protected_nopar:Npn \siunitx_number_output_single_aux: { \siunitx_unit_output_pre_print: \quark_if_no_value:NTF \l_siunitx_number_out_tl - { \tl_clear:N \l_siunitx_number_unit_separator_tl } + { \tl_clear:N \l_siunitx_number_unit_product_tl } { \siunitx_print:nV { number } \l_siunitx_number_out_tl } \siunitx_unit_output_print: } @@ -3335,8 +3675,10 @@ \l_siunitx_angle_astronomy_bool , arc-separator .tl_set:N = \l_siunitx_angle_arc_separator_tl , + number-angle-product .tl_set:N = + \l_siunitx_angle_unit_product_tl , number-angle-separator .tl_set:N = - \l_siunitx_angle_unit_separator_tl , + \l_siunitx_angle_unit_product_tl , } \cs_new_protected:Npn \siunitx_angle_output:nnn #1#2#3 { \siunitx_angle_init: @@ -3368,8 +3710,8 @@ \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 + \tl_set_eq:NN \l_siunitx_number_unit_product_tl + \l_siunitx_angle_unit_product_tl \cs_set_eq:NN \siunitx_number_in_parse_more:N \siunitx_number_in_parse_restricted:N } @@ -3381,7 +3723,6 @@ { \siunitx_angle_direct_aux_i:nnn { } } } { \siunitx_angle_direct_aux_i:nnn {#1} } - } \cs_new_protected:Npn \siunitx_angle_direct_aux_i:nnn #1#2 { \tl_if_empty:nTF {#2} @@ -3391,7 +3732,6 @@ { \siunitx_angle_direct_aux_ii:nnn {#1} { } } } { \siunitx_angle_direct_aux_ii:nnn {#1} {#2} } - } \cs_new_protected:Npn \siunitx_angle_direct_aux_ii:nnn #1#2#3 { \tl_if_empty:nTF {#3} @@ -3648,7 +3988,8 @@ } } \tl_new:N \l_siunitx_declare_list_tl -\tl_set:Nn \l_siunitx_declare_list_tl { \of \per \raiseto \tothe } +\tl_set:Nn \l_siunitx_declare_list_tl + { \of \highlight \per \raiseto \tothe } \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 } @@ -3680,6 +4021,13 @@ \cs_set:cpn { siunitx_ \token_to_str:N #1 _function:w } { \siunitx_unit_parse_qualifier:n {#2} } } +\cs_new_protected:Npn \siunitx_declare_special: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 + { #2 {##1} } + \cs_set:cpn { siunitx_ \token_to_str:N #1 _function:w } + { \siunitx_unit_parse_special:n {#2} } +} \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} @@ -3731,20 +4079,35 @@ \cs_new_protected:cpn { siunitx_ \token_to_str:N \of _function:w } #1 { \siunitx_unit_parse_qualifier:n {#1} } +\AtBeginDocument { + \cs_if_exist:NT \cancel + { + \cs_set_eq:NN \siunitx_cancel:n \cancel + \tl_put_right:Nn \l_siunitx_declare_list_tl { \cancel } + \cs_new_protected:cpn + { siunitx_ \token_to_str:N \cancel _function:w } + { \siunitx_unit_parse_special:n { \siunitx_cancel:n } } + } +} +\cs_new_protected:cpn + { siunitx_ \token_to_str:N \highlight _literal:w } #1 + { \siunitx_textcolor:n {#1} } +\cs_new_protected:cpn + { siunitx_ \token_to_str:N \highlight _function:w } #1 + { \siunitx_unit_parse_special:n { \siunitx_textcolor:n {#1} } } \keys_define:nn { siunitx } { - 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 + 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 , } \siunitx_option_deactivate:n { - free-standing-units, - overwrite-functions, - space-before-unit, - unit-optional-argument, - use-xspace + free-standing-units , + overwrite-functions , + space-before-unit , + unit-optional-argument , + use-xspace , } \AtBeginDocument { \bool_if:NTF \l_siunitx_create_free_bool @@ -3795,7 +4158,7 @@ \exp_not:n { \siunitx_ensuremath:n - { \l_siunitx_number_unit_separator_tl } + { \l_siunitx_number_unit_product_tl } } } \exp_not:n { \siunitx_unit_output:nn {#1} { } } @@ -3832,7 +4195,7 @@ \exp_not:n { \siunitx_ensuremath:n - { \l_siunitx_number_unit_separator_tl } + { \l_siunitx_number_unit_product_tl } } } \exp_not:n { \siunitx_unit_output:nn {#1} { } } @@ -3903,6 +4266,7 @@ \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 \highlight \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} @@ -3991,6 +4355,11 @@ { qualifier- \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_special:n #1 { + \tl_set:Nx \l_siunitx_tmpa_tl + { special- \int_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_unit:Nn #1#2 { \tl_set:Nx \l_siunitx_tmpa_tl { prefix- \int_use:N \l_siunitx_unit_int } @@ -4044,7 +4413,8 @@ \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 , + inter-unit-product .tl_set:N = \l_siunitx_unit_product_tl , + inter-unit-separator .tl_set:N = \l_siunitx_unit_product_tl , per-mode .choice:, per-mode / fraction .code:n = { @@ -4109,7 +4479,7 @@ } \keys_set:nn { siunitx } { bracket-unit-denominator = true, - inter-unit-separator = \,, + inter-unit-product = \,, per-mode = reciprocal, per-symbol = /, power-font = number, @@ -4117,14 +4487,6 @@ } \cs_new_protected_nopar:Npn \siunitx_unit_format: { \siunitx_unit_format_init: - \int_compare:nNnT { \l_siunitx_unit_int } = { 1 } - { - \str_if_eq:VnT \l_siunitx_per_mode_tl { symbol } - { - \prop_if_in:NnT \l_siunitx_unit_prop { per-1 } - { \bool_set_true:N \l_siunitx_omit_unit_space_bool } - } - } \int_while_do:nNnn { \l_siunitx_unit_int } > { 0 } { \siunitx_unit_format_prefix: @@ -4169,17 +4531,37 @@ \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 + \l_siunitx_unit_product_tl } } { \siunitx_tl_put_right_math:NV \l_siunitx_unit_current_tl - \l_siunitx_unit_separator_tl + \l_siunitx_unit_product_tl } } - \tl_put_left:cV { l_siunitx_unit #1 _tl } \l_siunitx_unit_current_tl + \tl_set:Nx \l_siunitx_tmpa_tl + { special- \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_put_left:cV { l_siunitx_unit #1 _tl } + \l_siunitx_unit_current_tl + } + { + \tl_put_left:cx { l_siunitx_unit #1 _tl } + { + \exp_not:V \l_siunitx_tmpa_tl + { \exp_not:V \l_siunitx_unit_current_tl } + } + } } \cs_new_protected_nopar:Npn \siunitx_unit_format_fraction: { + \int_compare:nNnT { \l_siunitx_unit_numerator_int } = { 0 } + { + \str_if_eq:VnT \l_siunitx_per_mode_tl { symbol } + { \bool_set_true:N \l_siunitx_omit_unit_space_bool } + } \int_compare:nNnTF { \l_siunitx_unit_denominator_int } > { 0 } { \bool_if:NTF \l_siunitx_per_auto_bool @@ -4288,7 +4670,7 @@ \tl_set:Nx \l_siunitx_tmpa_tl { \exp_not:N \siunitx_ensuremath:n - { \exp_not:V \l_siunitx_unit_separator_tl } + { \exp_not:V \l_siunitx_unit_product_tl } } \tl_replace_all_in:NnV \l_siunitx_unit_tl { . } \l_siunitx_tmpa_tl @@ -4364,7 +4746,7 @@ \siunitx_unit_format_power_brackets: \tl_put_right:Nx \l_siunitx_unit_current_tl { - ^ + \exp_not:N \PrintSuperscript { \siunitx_unit_format_power_aux:n { \exp_not:V \l_siunitx_tmpa_tl } @@ -4528,28 +4910,21 @@ \prop_put:NVn \l_siunitx_unit_prop \l_siunitx_tmpa_tl { true } } \char_make_space:N \~ -\group_begin: - \char_set_lccode:nn { `\@ } { `\_ } - \char_make_math_subscript:N \@ -\tl_to_lowercase:n { - \group_end: - \cs_set_protected_nopar:Npn \siunitx_unit_format_qualifier_subscript: - { - \tl_put_right:Nx \l_siunitx_unit_current_tl - { @ { \exp_not:V \l_siunitx_tmpa_tl } } - } +\cs_new_protected_nopar:Npn \siunitx_unit_format_qualifier_subscript: { + \tl_put_right:Nx \l_siunitx_unit_current_tl + { \exp_not:N \PrintSubscript { \exp_not:V \l_siunitx_tmpa_tl } } } \cs_new_protected_nopar:Npn \siunitx_unit_format_qualifier_text: { \tl_put_right:NV \l_siunitx_unit_current_tl \l_siunitx_tmpa_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:NTF \l_siunitx_unit_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 + \l_siunitx_unit_product_tl } } \tl_put_right:NV \l_siunitx_unit_tl \l_siunitx_unit_denominator_tl @@ -4605,8 +4980,10 @@ \bool_set_false:N \l_siunitx_multi_brackets_bool \bool_set_false:N \l_siunitx_multi_repeat_bool }, + number-unit-product .tl_set:N = + \l_siunitx_number_unit_product_tl, number-unit-separator .tl_set:N = - \l_siunitx_number_unit_separator_tl, + \l_siunitx_number_unit_product_tl, product-units .choice:, product-units / brackets .code:n = @@ -4645,9 +5022,9 @@ }, } \keys_set:nn { siunitx } { - multi-part-units = brackets, - number-unit-separator = \,, - product-units = repeat, + multi-part-units = brackets, + number-unit-product = \,, + product-units = repeat, } \cs_new_protected:Npn \siunitx_unit_output:nn #1#2 { \cs_set_eq:NN \siunitx_unit_format_symbol_aux: @@ -4655,12 +5032,20 @@ \cs_set_eq:NN \siunitx_unit_format_fraction_symbol_aux_ii: \siunitx_unit_format_fraction_symbol_aux_alt: \siunitx_unit_in:nn {#1} {#2} - \int_compare:nNnF { \l_siunitx_unit_prefix_int } = { 0 } + \int_compare:nNnTF { \l_siunitx_unit_prefix_int } = { 0 } + { + \str_if_eq:VnT \l_siunitx_per_mode_tl { symbol } + { + \int_compare:nNnT { \l_siunitx_unit_numerator_int } = { 0 } + { \siunitx_print:nn { unit } { 1 } } + } + } { \tl_set:Nx \l_siunitx_tmpa_tl { \int_use:N \l_siunitx_unit_prefix_base_int - ^ { \int_use:N \l_siunitx_unit_prefix_int } + \exp_not:N \PrintSuperscript + { \int_use:N \l_siunitx_unit_prefix_int } } \siunitx_print:nV { number } \l_siunitx_tmpa_tl \siunitx_unit_output_number_sep: @@ -4678,7 +5063,7 @@ \ensuremath { \tex_mathchoice:D - { \l_siunitx_number_unit_separator_tl } + { \l_siunitx_number_unit_product_tl } { \siunitx_unit_output_number_sep_aux: } { \siunitx_unit_output_number_sep_aux: } { \siunitx_unit_output_number_sep_aux: } @@ -4690,7 +5075,7 @@ } \cs_new_protected_nopar:Npn \siunitx_unit_output_number_sep_aux: { \bool_if:NF \l_siunitx_omit_unit_space_bool - { \siunitx_ensuremath:n { \l_siunitx_number_unit_separator_tl } } + { \siunitx_ensuremath:n { \l_siunitx_number_unit_product_tl } } } \cs_new_protected_nopar:Npn \siunitx_unit_output_pre_print: { \tl_if_empty:NF \l_siunitx_pre_unit_tl @@ -4724,6 +5109,9 @@ \siunitx_print:nV { unit } \l_siunitx_unit_tl } } +\keys_define:nn { siunitx } { + preunit .tl_set:N = \l_siunitx_preunit_tl , +} \tl_new:N \l_siunitx_pre_unit_tl \int_new:N \l_siunitx_number_product_int \cs_new_protected:Npn \siunitx_combined:nnnn #1#2#3#4 { @@ -5118,7 +5506,7 @@ { \cs_set_eq:NN \siunitx_table_collect_next: ##1 } } \tl_map_function:nN - { \cs:w \end \endtabular \scan_stop: \siunitx_table_print: } + { \cs:w \end \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: @@ -5150,22 +5538,20 @@ } \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_table_correction_skip \AtBeginDocument { \@ifpackageloaded { colortbl } { - \skip_set:Nn \c_siunitx_table_correction_skip - { \c_zero_skip plus -0.5 fill } + \cs_new_protected_nopar:Npn \siunitx_table_colortbl_correction: + { + \skip_horizontal:n { \c_zero_skip plus -0.5 fill } + \tex_kern:D \c_zero_skip + } } { - \skip_set:Nn \c_siunitx_table_correction_skip - { \c_zero_skip } + \cs_new_protected_nopar:Npn \siunitx_table_colortbl_correction: + { } } } -\cs_new_protected_nopar:Npn \siunitx_table_colortbl_correction: { - \skip_horizontal:n { \c_siunitx_table_correction_skip } - \tex_kern:D \c_zero_skip -} \cs_new_protected_nopar:Npn \siunitx_table_align_left:n #1 { \siunitx_table_colortbl_correction: \skip_horizontal:n {#1} @@ -5176,6 +5562,37 @@ \tex_kern:D \c_zero_skip \siunitx_table_colortbl_correction: } +\cs_new_eq:NN \siunitx_table_column_begin:n \siunitx_table_align_left:n +\cs_new_eq:NN \siunitx_table_column_end:n \siunitx_table_align_right:n +\keys_define:nn { siunitx } { + table-column-width .code:n = + { + \dim_compare:nNnTF {#1} = { \c_zero_dim } + { + \cs_new_eq:NN \siunitx_table_column_begin:n + \siunitx_table_align_left:n + \cs_new_eq:NN \siunitx_table_column_end:n + \siunitx_table_align_right:n + } + { + \cs_set_protected_nopar:Npn \siunitx_table_column_begin:n ##1 + { + \siunitx_table_colortbl_correction: + \tex_hbox:D to \dim_eval:n {#1} + \c_group_begin_token + \skip_horizontal:n {##1} + \tex_kern:D \c_zero_skip + } + \cs_set_protected_nopar:Npn \siunitx_table_column_end:n ##1 + { + \skip_horizontal:n { \c_siunitx_one_fill_skip - ##1 } + \tex_kern:D \c_zero_skip + \hbox_set_inline_end: + \siunitx_table_colortbl_correction: + } + } + } +} \skip_new:N \l_siunitx_table_unit_align_skip \keys_define:nn { siunitx } { table-unit-alignment .choice:, @@ -5199,9 +5616,9 @@ table-unit-alignment = center } \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 } + \siunitx_table_column_begin:n { \l_siunitx_table_unit_align_skip } + \siunitx_unit_output:Vn \l_siunitx_table_collect_tl { } + \siunitx_table_column_end:n { \l_siunitx_table_unit_align_skip } } \bool_new:N \l_siunitx_table_center_decimal_bool \box_new:N \l_siunitx_table_fill_box @@ -5223,6 +5640,8 @@ \skip_new:N \l_siunitx_table_number_align_skip \skip_new:N \l_siunitx_table_text_align_skip \keys_define:nn { siunitx } { + table-align-comparator .bool_set:N + = \l_siunitx_table_align_comparator_bool, table-align-exponent .bool_set:N = \l_siunitx_table_align_exp_bool, table-align-text-post .bool_set:N @@ -5298,6 +5717,7 @@ \l_siunitx_table_sign_mantissa_bool } \keys_set:nn { siunitx } { + table-align-comparator = true, table-align-exponent = true, table-align-text-post = true, table-align-uncertainty = true, @@ -5348,20 +5768,20 @@ \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 + \siunitx_table_column_begin:n + { \l_siunitx_table_text_align_skip } + \tl_use:N \l_siunitx_table_collect_pre_tl + \siunitx_table_column_end:n { \l_siunitx_table_text_align_skip } } { - \siunitx_table_align_left:n + \siunitx_table_column_begin:n { \l_siunitx_table_number_align_skip } - \siunitx_table_print_S_aux: - \siunitx_table_align_right:n + \siunitx_table_print_S_aux: + \siunitx_table_column_end:n { \l_siunitx_table_number_align_skip } } } - \cs_new_protected_nopar:Npn \siunitx_table_print_S_aux: { \bool_if:NTF \l_siunitx_table_parse_only_bool { @@ -5507,7 +5927,10 @@ } \siunitx_table_print_S_parse: \bool_if:NTF \l_siunitx_table_comparator_bool - { \siunitx_table_print_S_reserved_comparator: } + { + \bool_if:NT \l_siunitx_table_align_comparator_bool + { \siunitx_table_print_S_reserved_comparator: } + } { \prop_if_in:NnT \l_siunitx_number_out_prop { comparator } { @@ -5676,10 +6099,19 @@ } \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} + \bool_if:NTF \l_siunitx_table_align_comparator_bool + { + \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} + } + { + \siunitx_table_print_S_measure_comparator_integer:N + \l_siunitx_table_model_prop + \siunitx_table_print_S_measure_comparator_integer_get:N + \l_siunitx_number_out_prop + } \box_clear:N \l_siunitx_tmp_box \tl_if_empty:NF \l_siunitx_tmpa_tl { @@ -5755,14 +6187,18 @@ \hbox_set_to_wd:Nnn \l_siunitx_table_result_box { \box_wd:N \l_siunitx_table_result_box } { \tex_hfil:D } } - \bool_if:NF \l_siunitx_table_align_uncert_bool { \tex_hskip:D -\l_siunitx_table_space_dim } \box_use:N \l_siunitx_table_result_box } \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: + \tl_if_empty:NTF \l_siunitx_output_exponent_tl + { \siunitx_table_print_S_reserved_exponent_product: } + { + \bool_if:NF \l_siunitx_table_align_exp_bool + { \tex_hskip:D -\l_siunitx_table_space_dim } + } \siunitx_table_print_S_measure:Nnn \l_siunitx_table_model_prop { exponent } { } \siunitx_table_print_S_get_exponent:Nn @@ -5817,7 +6253,6 @@ } } { \siunitx_table_print_S_reserved_exponent_product_aux_ii: } - } \cs_new_protected_nopar:Npn \siunitx_table_print_S_reserved_exponent_product_aux_ii: { @@ -5868,6 +6303,12 @@ \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 } + \bool_if:NF \l_siunitx_table_align_comparator_bool + { + \prop_get:NnN #1 { comparator } \l_siunitx_tmpb_tl + \quark_if_no_value:NF \l_siunitx_tmpb_tl + { \tl_put_left:NV \l_siunitx_tmpa_tl \l_siunitx_tmpb_tl } + } } \cs_new_protected_nopar:Npn \siunitx_table_print_S_get_marker:Nn #1#2 { \tl_set:Nx \l_siunitx_tmpa_tl @@ -5888,6 +6329,19 @@ } \cs_new_protected_nopar:Npn \siunitx_table_print_S_measure_comparator_integer:N #1 + { + \siunitx_table_print_S_measure_comparator_integer_get:N #1 + \tl_if_empty:NTF \l_siunitx_tmpa_tl + { \dim_set:Nn \l_siunitx_table_integer_dim { \c_zero_skip } } + { + \hbox_set:Nn \l_siunitx_tmp_box + { \siunitx_print:nV { number } \l_siunitx_tmpa_tl } + \dim_set:Nn \l_siunitx_table_integer_dim + { \box_wd:N \l_siunitx_tmp_box } + } + } +\cs_new_protected_nopar:Npn + \siunitx_table_print_S_measure_comparator_integer_get:N #1 { \prop_get:NnN #1 { comparator } \l_siunitx_tmpa_tl \quark_if_no_value:NT \l_siunitx_tmpa_tl @@ -5899,14 +6353,6 @@ \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 - \tl_if_empty:NTF \l_siunitx_tmpa_tl - { \dim_set:Nn \l_siunitx_table_integer_dim { \c_zero_skip } } - { - \hbox_set:Nn \l_siunitx_tmp_box - { \siunitx_print:nV { number } \l_siunitx_tmpa_tl } - \dim_set:Nn \l_siunitx_table_integer_dim - { \box_wd:N \l_siunitx_tmp_box } - } } \cs_new_protected_nopar:Npn \siunitx_table_direct: { \m@th @@ -6194,7 +6640,7 @@ { Only~one~complex~root~token~can~appear~in~a~single~number. } \msg_set:nnnn { siunitx } { duplicate-decimal-token } { Duplicate~decimal~marker~token~'#1'~in~input. } - { Only one decimal marker token can appear in a single number. } + { Only~one~decimal~marker~token~can~appear~in~a~single~number. } \msg_set:nnnn { siunitx } { duplicate-exponent-token } { Duplicate~exponent~marker~token~'#1'~in~input. } { Only~one~exponent~marker~token~can~appear~in~a~single~number. } @@ -6336,25 +6782,25 @@ \token_to_str:N { siunitx \token_to_str:N } \\ in~the~preamble~to~load~the~appropriate~code. } -\cs_new_protected_nopar:Npn \DeclareBinaryPrefix #1#2#3 { +\NewDocumentCommand \DeclareBinaryPrefix { m m m } { \siunitx_declare_prefix:Nnnn #1 {#2} { 2 } {#3} } -\cs_new_protected_nopar:Npn \DeclareSIPostPower #1#2 { +\NewDocumentCommand \DeclareSIPostPower { m m } { \siunitx_declare_power_after:Nn #1 {#2} } -\cs_new_protected_nopar:Npn \DeclareSIPrefix #1#2#3 { +\NewDocumentCommand \DeclareSIPrefix { m m m } { \siunitx_declare_prefix:Nnnn #1 {#2} { 10 } {#3} } -\cs_new_protected_nopar:Npn \DeclareSIPrePower #1#2 { +\NewDocumentCommand \DeclareSIPrePower { m m } { \siunitx_declare_power_before:Nn #1 {#2} } -\cs_new_protected_nopar:Npn \DeclareSIQualifier #1#2 { +\NewDocumentCommand \DeclareSIQualifier { m m } { \siunitx_declare_qualifier:Nn #1 {#2} } -\cs_new_protected_nopar:Npn \DeclareSIUnit #1#2 { - \siunitx_declare_unit:Nnn #1 {#2} { } +\NewDocumentCommand \DeclareSIUnit { O { } m m } { + \siunitx_declare_unit:Nnn #2 {#3} {#1} } -\cs_new_protected_nopar:Npn \DeclareSIUnitWithOptions #1#2#3 { +\NewDocumentCommand \DeclareSIUnitWithOptions { m m m } { \siunitx_declare_unit:Nnn #1 {#2} {#3} } \@onlypreamble \DeclareBinaryPrefix @@ -6393,16 +6839,6 @@ \siunitx_range_numbers:nn {#2} {#3} \group_end: } -\NewDocumentCommand \si { o m } { - \group_begin: - \IfNoValueTF {#1} - { \siunitx_unit_output:nn {#2} { } } - { - \keys_set:nn { siunitx } {#1} - \siunitx_unit_output:nn {#2} {#1} - } - \group_end: -} \NewDocumentCommand \SIlist { o > { \SplitList { ; } } m m } { \group_begin: \IfNoValueTF {#1} @@ -6436,6 +6872,23 @@ \NewDocumentCommand \sisetup { m } { \keys_set:nn { siunitx } {#1} } +\NewDocumentCommand \tablenum { o m } { + \IfNoValueF {#1} + { \keys_set:nn { siunitx } {#1} } + \tl_set:Nn \l_siunitx_table_collect_tl {#2} + \bool_set_false:N \l_siunitx_table_collect_pre_bool + \siunitx_table_print_S: +} +\NewDocumentCommand \si { o m } { + \group_begin: + \IfNoValueTF {#1} + { \siunitx_unit_output:nn {#2} { } } + { + \keys_set:nn { siunitx } {#1} + \siunitx_unit_output:nn {#2} {#1} + } + \group_end: +} \AtBeginDocument { \cs_set:Npn \addtocontents #1#2 { @@ -6463,6 +6916,7 @@ \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 \si \siunitx_bookmark_si:w \cs_set_nopar:Npn \SIUnitSymbolAngstrom { \AA } \cs_set_nopar:Npn \SIUnitSymbolArcminute { ' } \cs_set_nopar:Npn \SIUnitSymbolArcsecond { '' } @@ -6474,11 +6928,28 @@ \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_SIlist:w + { o m m } { \siunitx_bookmark_SIlist_map:nn {#1} {#2} } \DeclareExpandableDocumentCommand \siunitx_bookmark_SIrange:w { o m m m } { #2 ~ #4 \l_siunitx_range_phrase_tl #3 ~ #4 } +\DeclareExpandableDocumentCommand \siunitx_bookmark_si:w { o m } {#2} +\cs_new:Npn \siunitx_bookmark_SIlist_map:nn #1#2 { + \siunitx_bookmark_SIlist_map_aux:nw {#2} #1 ; \q_recursion_tail ; + \q_recursion_tail ; \q_recursion_stop +} +\cs_new:Npn \siunitx_bookmark_SIlist_map_aux:nw #1#2 ; #3 ; #4 { + #2 ~ #1 + \quark_if_recursion_tail_stop:n {#3} + \quark_if_recursion_tail_stop_do:nn {#4} + { + \l_siunitx_list_separator_final_tl + #3 ~ #1 + } + \l_siunitx_list_separator_tl + \siunitx_bookmark_SIlist_map_aux:nw {#1} #3 ; #4 +} \AtBeginDocument { \@ifpackageloaded { hyperref } { \pdfstringdefDisableCommands { \siunitx_contents_bookmarks: } } @@ -6537,15 +7008,13 @@ \DeclareSIUnit \volt { V } \DeclareSIUnit \watt { W } \DeclareSIUnit \weber { Wb } -\DeclareSIUnitWithOptions \arcmin { \arcminute } - { number-unit-separator = } -\DeclareSIUnitWithOptions \arcminute { \SIUnitSymbolArcminute } - { number-unit-separator = } -\DeclareSIUnitWithOptions \arcsecond { \SIUnitSymbolArcsecond } - { number-unit-separator = } +\DeclareSIUnit [ number-unit-product = ] \arcmin { \arcminute } +\DeclareSIUnit [ number-unit-product = ] + \arcminute { \SIUnitSymbolArcminute } +\DeclareSIUnit [ number-unit-product = ] + \arcsecond { \SIUnitSymbolArcsecond } \DeclareSIUnit \day { d } -\DeclareSIUnitWithOptions \degree { \SIUnitSymbolDegree } - { number-unit-separator = } +\DeclareSIUnit[ number-unit-product = ] \degree { \SIUnitSymbolDegree } \DeclareSIUnit \hectare { ha } \DeclareSIUnit \hour { h } \DeclareSIUnit \litre { l } @@ -6643,21 +7112,21 @@ DE .meta:n = { exponent-product = \cdot , - inter-unit-separator = { \, } , + inter-unit-product = { \, } , output-decimal-marker = { , } , }, locale / FR .meta:n = { exponent-product = \times , - inter-unit-separator = { \, } , + inter-unit-product = { \, } , output-decimal-marker = { , } , }, locale / UK .meta:n = { exponent-product = \times , - inter-unit-separator = \, , + inter-unit-product = \, , output-decimal-marker = . , }, locale / @@ -6668,7 +7137,7 @@ ZA .meta:n = { exponent-product = \times , - inter-unit-separator = \cdot , + inter-unit-product = \cdot , output-decimal-marker = { , } , }, } @@ -6721,7 +7190,6 @@ \c_siunitx_configuration_ext_tl } \ProcessKeysOptions { siunitx } -%% %% Copyright (C) 2008-2011 by %% Joseph Wright %% @@ -6729,9 +7197,7 @@ %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: -%% %% http://www.latex-project.org/lppl.txt -%% %% This work is "maintained" (as per LPPL maintenance status) by %% Joseph Wright. %% -- cgit v1.2.3