diff options
author | Karl Berry <karl@freefriends.org> | 2010-11-01 00:02:20 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-11-01 00:02:20 +0000 |
commit | 5f16bf7e779d75e8acf303b2d542b104eb8f83df (patch) | |
tree | 058702a1ed93a4d80e873666dfea22307b36415d /Master/texmf-dist/tex | |
parent | 0542243ac8be1fa821f15b496dcfa945b9c2acb3 (diff) |
siunitx 2.1 (31oct10)
git-svn-id: svn://tug.org/texlive/trunk@20277 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
4 files changed, 527 insertions, 87 deletions
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 dd0cdc46abc..369783744d3 100644 --- a/Master/texmf-dist/tex/latex/siunitx/config/siunitx-abbreviations.cfg +++ b/Master/texmf-dist/tex/latex/siunitx/config/siunitx-abbreviations.cfg @@ -73,7 +73,7 @@ \DeclareSIUnit \cm { \centi \metre } \DeclareSIUnit \dm { \deci \metre } \DeclareSIUnit \km { \kilo \metre } -\DeclareSIUnit \k { \kelvin } +\DeclareSIUnit \K { \kelvin } \DeclareSIUnit \N { \newton } \DeclareSIUnit \mN { \milli \newton } \DeclareSIUnit \kN { \kilo \newton } 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 503ec10cef0..06828426a32 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} {2010/10/09} {2.0y} +\ProvidesExplFile {siunitx-binary.cfg} {2010/10/27} {2.1} {siunitx: Binary units} \DeclareBinaryPrefix \kibi { Ki } { 10 } \DeclareBinaryPrefix \mebi { Mi } { 20 } 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 b6139ad5bf0..6231a3024ca 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} {2010/10/09} {2.0y} +\ProvidesExplFile {siunitx-version-1.cfg} {2010/10/27} {2.1} {siunitx: Version 1 settings} \keys_set:nn { siunitx } { load-configurations = { abbreviations , binary } } @@ -423,9 +423,10 @@ { \keys_set:nn { siunitx } { table-alignment = center } } { \keys_set:nn { siunitx } { table-alignment = #1 } } }, - tabalignexp .code:n = , + tabalignexp .code:n = { table-align-exponent = #1 }, tabautofit .meta:n = { table-auto-round = #1 }, tabautofit .default:n = { true }, + tabexpalign .code:n = { table-align-exponent = #1 }, tabformat .meta:n = { table-format = #1 }, tabnumalign .code:n = { diff --git a/Master/texmf-dist/tex/latex/siunitx/siunitx.sty b/Master/texmf-dist/tex/latex/siunitx/siunitx.sty index e6d41de20d5..35bc7ed9ae9 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} {2010/10/09} {2.0y} +\ProvidesExplPackage {siunitx} {2010/10/27} {2.1} {A comprehensive (SI) units package} \msg_set:nnnn { siunitx } { incompatible-package } { Package~'#1'~incompatible. } @@ -182,6 +182,7 @@ \siunitx_tmp:w { tabalign } \siunitx_tmp:w { tabalignexp } \siunitx_tmp:w { tabautofit } +\siunitx_tmp:w { tabexpalign } \siunitx_tmp:w { tabformat } \siunitx_tmp:w { tabnumalign } \siunitx_tmp:w { tabparseonly } @@ -496,9 +497,9 @@ } \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 } + \int_compare:nNnT { \fam } = { \c_siunitx_mathsf_int } { \tl_set:Nn \l_siunitx_font_family_tl { sf } } - \intexpr_compare:nNnT { \fam } = { \c_siunitx_mathtt_int } + \int_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_text: { @@ -845,6 +846,7 @@ \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, @@ -857,11 +859,12 @@ \keys_set:nn { siunitx } { % ( input-close-uncertainty = ), input-complex-roots = ij, + input-comparators = {<=>\approx\ge\geq\gg\le\leq\ll\sim}, input-decimal-markers = {.,}, input-digits = 0123456789, input-exponent-markers = dDeE, input-open-uncertainty = (, % ) - input-protect-tokens = \mp\pi\pm, + input-protect-tokens = \approx\ge\geq\gg\le\leg\ll\mp\pi\pm\sim, input-signs = +-\mp\pm, input-symbols = \pi, } @@ -886,6 +889,7 @@ } {#1} \siunitx_number_in_sign_replace:N \l_siunitx_number_arg_tl + \siunitx_number_in_parse_relation: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 @@ -947,6 +951,10 @@ \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 } + \tl_replace_all_in:Nnn #1 { << } { \ll } + \tl_replace_all_in:Nnn #1 { <= } { \le } + \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 { \siunitx_error:nx {#1} { \exp_not:n {#2} } @@ -955,6 +963,17 @@ \cs_generate_variant:Nn \siunitx_number_in_parse_error:nx { 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 { + \exp_after:wN \siunitx_number_in_parse_relation:w #1 \q_stop #1 +} +\cs_new_protected:Npn \siunitx_number_in_parse_relation:w + #1#2 \q_stop #3 { + \tl_if_in:NnT \l_siunitx_input_comparator_tl {#1} + { + \prop_put:Nnn \l_siunitx_number_in_prop { comparator } {#1} + \tl_set:Nn #3 {#2} + } +} \cs_new_protected:Npn \siunitx_number_in_parse_restricted:N #1 { \tl_if_in:NnTF \l_siunitx_input_exponent_tl {#1} { @@ -1423,15 +1442,21 @@ \int_new:N \l_siunitx_process_uncertainty_int \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_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, retain-explicit-plus .bool_set:N = \l_siunitx_process_plus_tl, retain-unity-mantissa .bool_set:N = \l_siunitx_process_unity_mantissa_bool, retain-zero-exponent .bool_set:N = \l_siunitx_process_zero_exponent_bool, + round-integer-to-decimal .bool_set:N = + \l_siunitx_process_int_to_dec_bool, + round-minimum .tl_set:N = \l_siunitx_process_round_min_tl, round-mode .choice: , round-mode / figures .code:n = { \tl_set:Nn \l_siunitx_round_tl { figures } }, @@ -1439,6 +1464,25 @@ round-mode / places .code:n = { \tl_set:Nn \l_siunitx_round_tl { places } }, round-precision .int_set:N = \l_siunitx_process_precision_int, + scientific-notation .choice: , + scientific-notation + / false .code:n = + { + \bool_set_false:N \l_siunitx_process_fixed_bool + \bool_set_false: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_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 + }, } \keys_set:nn { siunitx } { add-decimal-zero = true, @@ -1453,6 +1497,12 @@ \prop_if_in:NnF \l_siunitx_number_in_prop { symbolic } { \siunitx_number_process_exponent: + \bool_if:NTF \l_siunitx_process_fixed_bool + { \siunitx_number_process_fixed: } + { + \bool_if:NT \l_siunitx_process_scientific_bool + { \siunitx_number_process_scientific: } + } \siunitx_number_process_uncertainty: \prop_if_in:NnF \l_siunitx_number_in_prop { uncertainty } { \siunitx_number_process_round: } @@ -1483,7 +1533,7 @@ \l_siunitx_tmpa_tl \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \intexpr_compare:nNnF { \l_siunitx_tmpa_tl } = { 0 } + \int_compare:nNnF { \l_siunitx_tmpa_tl } = { 0 } { \bool_set_true:N \l_siunitx_tmp_bool } } } @@ -1498,7 +1548,7 @@ \bool_if:NTF \l_siunitx_round_bool { \bool_set_false:N \l_siunitx_round_bool - \intexpr_compare:nNnTF + \int_compare:nNnTF { \l_siunitx_round_int } > { \l_siunitx_process_precision_int } { @@ -1543,7 +1593,7 @@ \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 } + \int_compare:nNnF { \l_siunitx_tmp_int } = { 0 } { \bool_set_true:N \l_siunitx_round_bool } } \bool_if:NT \l_siunitx_round_bool @@ -1582,22 +1632,22 @@ { \siunitx_number_process_figures_round_loop: } } \cs_new_protected_nopar:Npn \siunitx_number_process_figures_integer: { - \intexpr_compare:nNnT { \l_siunitx_round_int } > { 0 } + \int_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_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 } + \int_compare:nNnTF { \l_siunitx_round_int } = { 1 } { - \intexpr_compare:nNnT { \l_siunitx_tmp_int } > { 4 } + \int_compare:nNnT { \l_siunitx_tmp_int } > { 4 } { \bool_set_true:N \l_siunitx_round_bool } } { - \intexpr_compare:nNnT { \l_siunitx_tmp_int } > { 10 } + \int_compare:nNnT { \l_siunitx_tmp_int } > { 10 } { \bool_set_true:N \l_siunitx_round_bool \int_zero:N \l_siunitx_tmp_int @@ -1621,6 +1671,130 @@ { \l_siunitx_process_precision_int - \l_siunitx_round_int } \siunitx_number_process_pad:n {#1} } +\cs_new_protected_nopar:Npn \siunitx_number_process_fixed: { + \prop_if_in:NnF \l_siunitx_number_in_prop { complex } + { + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-integer } + \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_set:Nn \l_siunitx_tmpa_tl { 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_tmpa_tl + { { \l_siunitx_tmpa_tl } { \l_siunitx_tmpb_tl } } + \prop_get:NnN \l_siunitx_number_in_prop { exponent-integer } + \l_siunitx_tmpb_tl + \quark_if_no_value:NT \l_siunitx_tmpb_tl + { \tl_set:Nn \l_siunitx_tmpb_tl { 0 } } + \tl_set:Nx \l_siunitx_tmpa_tl + { \l_siunitx_tmpa_tl { \l_siunitx_tmpb_tl } } + \exp_after:wN \siunitx_number_process_fixed_aux_i:nnn + \l_siunitx_tmpa_tl + } +} +\cs_new_protected_nopar:Npn + \siunitx_number_process_fixed_aux_i:nnn #1#2#3 { + \prop_put:Nnn \l_siunitx_number_in_prop { exponent } + { true } + \prop_put:NnV \l_siunitx_number_in_prop + { exponent-integer } \l_siunitx_process_fixed_int + \int_compare:nNnF { #1 + 0 #2 } = { 0 } + { \siunitx_number_process_fixed_aux_ii:nnn {#1} {#2} {#3} } +} +\cs_new_protected_nopar:Npn + \siunitx_number_process_fixed_aux_ii:nnn #1#2#3 { + \int_compare:nNnTF {#3} > { \l_siunitx_process_fixed_int } + { \siunitx_number_process_fixed_large:nnn {#1} {#2} {#3} } + { + \int_compare:nNnTF {#3} < { \l_siunitx_process_fixed_int } + { \siunitx_number_process_fixed_small: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 } { . } + } + } + } + } +} +\cs_new_protected_nopar:Npn + \siunitx_number_process_fixed_large:nnn #1#2#3 { + \cs_set_protected_nopar:Npn + \siunitx_number_process_fixed_large_aux:w ##1##2 \q_stop + { + \tl_if_empty:nTF {##2} + { + \int_compare:nNnTF + { #3 - 1 } = { \l_siunitx_process_fixed_int } + { + \siunitx_number_process_fixed_aux_ii:nnn { #1 ##1 } + { } { #3 - 1 } + } + { + \siunitx_number_process_fixed_aux_ii:nnn { #1 ##1 } + { 0 } { #3 - 1 } + } + } + { + \int_compare:nNnTF {#1} = { 0 } + { + \siunitx_number_process_fixed_aux_ii:nnn {##1} {##2} + { #3 - 1 } + } + { + \siunitx_number_process_fixed_aux_ii:nnn { #1 ##1 } + {##2} { #3 - 1 } + } + } + } + \tl_if_empty:nTF {#2} + { \siunitx_number_process_fixed_aux_ii:nnn { #1 0 } { } { #3 - 1 } } + { \siunitx_number_process_fixed_large_aux:w #2 \q_stop } +} +\cs_new_protected_nopar:Npn \siunitx_number_process_fixed_large_aux:w + { } +\cs_new_protected_nopar:Npn + \siunitx_number_process_fixed_small:nnn #1#2#3 { + \cs_set_protected_nopar:Npn + \siunitx_number_process_fixed_small_aux:w ##1##2 \q_stop ##3 + { + \tl_if_empty:nTF {##2} + { + \tl_if_empty:nTF {##3} + { + \siunitx_number_process_fixed_aux_ii:nnn { 0 } + { ##1 #2 } { #3 + 1 } + } + { + \siunitx_number_process_fixed_aux_ii:nnn {##3} + { ##1 #2 } { #3 + 1 } + } + } + { + \siunitx_number_process_fixed_small_aux:w ##2 \q_stop + { ##3 ##1 } + } + } + \siunitx_number_process_fixed_small_aux:w #1 \q_stop { } +} +\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_mantissa: { @@ -1652,7 +1826,7 @@ \l_siunitx_tmpa_tl \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \intexpr_while_do:nNnn { \l_siunitx_round_int } > { 0 } + \int_while_do:nNnn { \l_siunitx_round_int } > { 0 } { \tl_put_right:Nn \l_siunitx_tmpa_tl { 0 } \int_decr:N \l_siunitx_round_int @@ -1669,13 +1843,13 @@ } } \cs_new_protected_nopar:Npn \siunitx_number_process_places_aux_i:n #1 { - \intexpr_compare:nNnTF { \l_siunitx_process_precision_int } = { 0 } + \int_compare:nNnTF { \l_siunitx_process_precision_int } = { 0 } { \prop_get:NnN \l_siunitx_number_in_prop { #1 -decimal } \l_siunitx_tmpa_tl \quark_if_no_value:NF \l_siunitx_tmpa_tl { - \intexpr_compare:nNnT + \int_compare:nNnT { \exp_args:NV \tl_head:n \l_siunitx_tmpa_tl } > { 4 } { \prop_get:NnN \l_siunitx_number_in_prop { #1 -integer } @@ -1687,7 +1861,7 @@ } { \tl_set:Nx \l_siunitx_tmpa_tl - { \intexpr_eval:n { \l_siunitx_tmpa_tl + 1 } } + { \int_eval:n { \l_siunitx_tmpa_tl + 1 } } \prop_put:NnV \l_siunitx_number_in_prop { #1 -integer } \l_siunitx_tmpa_tl } @@ -1703,7 +1877,7 @@ { \tl_if_empty:NT \l_siunitx_tmpa_tl { \tl_set:Nn \l_siunitx_tmpa_tl { 0 } } - \intexpr_compare:nNnTF { \l_siunitx_tmpa_tl } = { 0 } + \int_compare:nNnTF { \l_siunitx_tmpa_tl } = { 0 } { \prop_put:Nnn \l_siunitx_number_in_prop { #1 -decimal } { } @@ -1723,7 +1897,7 @@ \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_compare:nNnTF { \l_siunitx_round_int } < { 0 } { \int_set:Nn \l_siunitx_round_int { - \l_siunitx_round_int } \siunitx_number_process_pad:n {#1} @@ -1775,7 +1949,7 @@ \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_compare:nNnT { \l_siunitx_tmp_int } = { 10 } { \int_zero:N \l_siunitx_tmp_int \bool_set_true:N \l_siunitx_round_bool @@ -1785,6 +1959,21 @@ \cs_new_protected_nopar:Npn \siunitx_number_process_round: { \tl_if_empty:NF \l_siunitx_round_tl { + \bool_if:NT \l_siunitx_process_int_to_dec_bool + { + \prop_if_in:NnF \l_siunitx_number_in_prop + { mantissa-decimal } + { + \prop_put:Nnn \l_siunitx_number_in_prop + { mantissa-decimal } { 0 } + } + \prop_if_in:NnF \l_siunitx_number_in_prop + { mantissa-decimal-marker } + { + \prop_put:Nnn \l_siunitx_number_in_prop + { mantissa-decimal-marker } { . } + } + } \cs_set_nopar:Npx \siunitx_tmp:w { \exp_not:N \clist_map_function:nN @@ -1796,7 +1985,7 @@ } } \cs_new_protected_nopar:Npn \siunitx_number_process_round_decimal: { - \intexpr_compare:nNnF { \l_siunitx_round_int } > { 1 } + \int_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 } @@ -1809,13 +1998,13 @@ \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 } + \int_compare:nNnTF { \l_siunitx_round_int } = { 1 } { - \intexpr_compare:nNnT { \l_siunitx_tmp_int } > { 4 } + \int_compare:nNnT { \l_siunitx_tmp_int } > { 4 } { \bool_set_true:N \l_siunitx_round_bool } } { - \intexpr_compare:nNnT { \l_siunitx_tmp_int } = { 10 } + \int_compare:nNnT { \l_siunitx_tmp_int } = { 10 } { \bool_set_true:N \l_siunitx_round_bool \int_zero:N \l_siunitx_tmp_int @@ -1825,10 +2014,132 @@ } } \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 + \int_compare:nNnTF + { + 0 \l_siunitx_round_integer_out_tl + + 0 \l_siunitx_round_decimal_out_tl + } + = { 0 } + { + \fp_compare:nNnTF { \l_siunitx_process_round_min_tl } = { 0 } + { + \prop_put:Nnn \l_siunitx_number_in_prop { #1 -integer } { 0 } + \prop_put:NnV \l_siunitx_number_in_prop { #1 -decimal } + \l_siunitx_round_decimal_out_tl + } + { + \exp_last_unbraced:NV \siunitx_number_process_round_tidy_aux:w + \l_siunitx_process_round_min_tl . . \q_stop {#1} + } + } + { + \prop_put:NnV \l_siunitx_number_in_prop { #1 -integer } + \l_siunitx_round_integer_out_tl + \tl_if_empty:NTF \l_siunitx_round_decimal_out_tl + { + \prop_del:Nn \l_siunitx_number_in_prop { #1 -decimal } + \prop_del:Nn \l_siunitx_number_in_prop { #1 -decimal-marker } + } + { + \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_aux:w #1 . #2 . #3 \q_stop #4 { + \prop_put:Nnn \l_siunitx_number_in_prop { comparator } { < } + \prop_put:Nnn \l_siunitx_number_in_prop { #4 -integer } {#1} + \tl_if_empty:nTF {#2} + { \prop_del:Nn \l_siunitx_number_in_prop { #4 -decimal } } + { \prop_put:Nnn \l_siunitx_number_in_prop { #4 -decimal } {#2} } +} +\cs_new_protected_nopar:Npn \siunitx_number_process_scientific: { + \prop_if_in:NnF \l_siunitx_number_in_prop { complex } + { + \prop_get:NnN \l_siunitx_number_in_prop { mantissa-integer } + \l_siunitx_tmpa_tl + \quark_if_no_value:NT \l_siunitx_tmpa_tl + { \tl_set:Nn \l_siunitx_tmpa_tl { 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_tmpa_tl + { { \l_siunitx_tmpa_tl } { \l_siunitx_tmpb_tl } } + \prop_get:NnN \l_siunitx_number_in_prop { exponent-integer } + \l_siunitx_tmpb_tl + \quark_if_no_value:NT \l_siunitx_tmpb_tl + { \tl_set:Nn \l_siunitx_tmpb_tl { 0 } } + \tl_set:Nx \l_siunitx_tmpa_tl + { \l_siunitx_tmpa_tl { \l_siunitx_tmpb_tl } } + \exp_after:wN \siunitx_number_process_scientific_aux_i:nnn + \l_siunitx_tmpa_tl + } +} +\cs_new_protected_nopar:Npn + \siunitx_number_process_scientific_aux_i:nnn #1#2#3 { + \int_compare:nNnF { #1 + 0 #2 } = { 0 } + { \siunitx_number_process_scientific_aux_ii:nnn {#1} {#2} {#3} } +} +\cs_new_protected_nopar:Npn + \siunitx_number_process_scientific_aux_ii:nnn #1#2#3 { + \int_compare:nNnTF {#1} > { 9 } + { \siunitx_number_process_scientific_large:nnn {#1} {#2} {#3} } + { + \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 + } + } + { + \siunitx_number_process_scientific_small:wn + #2 \q_stop {#3} + } + } +} +\cs_new_protected_nopar:Npn + \siunitx_number_process_scientific_large:nnn #1#2#3 { + \int_set:Nn \l_siunitx_tmp_int { \int_div_truncate:nn {#1} { 10 } } + \tl_set:Nx \l_siunitx_tmpa_tl { \int_use:N \l_siunitx_tmp_int } + \int_set:Nn \l_siunitx_tmp_int { #1 - 10 * \l_siunitx_tmp_int } + \tl_set:Nx \l_siunitx_tmpa_tl + { + { \l_siunitx_tmpa_tl } { \int_use:N \l_siunitx_tmp_int #2 } + { #3 + 1 } + } + \exp_last_unbraced:NV \siunitx_number_process_scientific_aux_ii:nnn + \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 } } \cs_new_protected_nopar:Npn \siunitx_number_process_sign: { \bool_if:NF \l_siunitx_process_plus_tl @@ -1906,7 +2217,7 @@ \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 + \int_compare:nNnTF { \l_siunitx_process_uncertainty_int } > { \l_siunitx_process_decimal_int } { \siunitx_number_process_uncertainty_separate: } @@ -1932,7 +2243,7 @@ { \tl_elt_count:N \l_siunitx_tmpa_tl } } \cs_new_protected_nopar:Npn \siunitx_number_process_uncertainty_pad: { - \intexpr_while_do:nNnn + \int_while_do:nNnn { \l_siunitx_process_uncertainty_int } < { \l_siunitx_process_decimal_int } { @@ -1949,7 +2260,7 @@ } \cs_new_protected:Npn \siunitx_number_process_uncertainty_separate_aux:N #1 { - \intexpr_compare:nNnTF + \int_compare:nNnTF { \l_siunitx_process_uncertainty_int } > { \l_siunitx_process_decimal_int } { \tl_put_right:Nn \l_siunitx_uncertainty_integer_tl {#1} } @@ -1997,6 +2308,8 @@ complex-root-position / before-number .code:n = { \bool_set_false:N \l_siunitx_complex_after_bool } , + copy-complex-root .bool_set:N = + \l_siunitx_output_complex_copy_bool, copy-decimal-marker .bool_set:N = \l_siunitx_output_decimal_copy_bool, exponent-base .tl_set:N = \l_siunitx_exponent_base_tl, @@ -2020,17 +2333,7 @@ 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 .code:n = - { - \tl_set:Nn \l_siunitx_output_complex_tl - { - \use:c - { - siunitx_ \l_siunitx_print_type_tl _ - math \l_siunitx_font_family_tl :n - } {#1} - } - }, + 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} } @@ -2065,6 +2368,7 @@ \siunitx_number_format_complex: \siunitx_number_format_sign:n { mantissa } \siunitx_number_format_sign:n { exponent } + \siunitx_number_format_relation: \siunitx_number_format_color: \siunitx_number_format_final: } @@ -2134,27 +2438,48 @@ \tl_set:Nx \l_siunitx_tmpa_tl { \exp_not:N \siunitx_ensuremath:n - { \exp_not:V \l_siunitx_output_complex_tl } + { \exp_not:V \l_siunitx_tmpa_tl } } \prop_put:NnV \l_siunitx_number_out_prop { complex } \l_siunitx_tmpa_tl } - \siunitx_number_format_join_complex: } } \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 + \siunitx_number_format_complex_aux: + \prop_get:NnN \l_siunitx_number_out_prop {#1} \l_siunitx_tmpb_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_tmpb_tl + \l_siunitx_tmpa_tl } { - \siunitx_tl_put_left_math:NV \l_siunitx_tmpa_tl - \l_siunitx_output_complex_tl + \siunitx_tl_put_left_math: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_complex_aux: { + \tl_set:Nn \l_siunitx_tmpa_tl + { + \use:c + { + siunitx_ \l_siunitx_print_type_tl _ + math \l_siunitx_font_family_tl :n + } + } + \bool_if:NTF \l_siunitx_output_complex_copy_bool + { + \prop_get:NnN \l_siunitx_number_in_prop { complex-root } + \l_siunitx_tmpb_tl + \tl_put_right:Nx \l_siunitx_tmpa_tl + { { \exp_not:V \l_siunitx_tmpb_tl } } + } + { + \tl_put_right:Nx \l_siunitx_tmpa_tl + { { \exp_not:V \l_siunitx_output_complex_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 @@ -2187,6 +2512,17 @@ { true } \prop_del:Nn \l_siunitx_number_out_prop { mantissa-bracket } } + \prop_if_in:NnT \l_siunitx_number_out_prop { comparator } + { + \siunitx_number_format_brackets:n { result } + \prop_get:NnN \l_siunitx_number_out_prop { comparator } + \l_siunitx_tmpa_tl + \prop_get:NnN \l_siunitx_number_out_prop { result } + \l_siunitx_tmpb_tl + \tl_put_right:No \l_siunitx_tmpa_tl { \l_siunitx_tmpb_tl } + \prop_put:NnV \l_siunitx_number_out_prop { result } + \l_siunitx_tmpa_tl + } } \cs_new_protected_nopar:Npn \siunitx_number_format_final_combined: { \siunitx_number_format_brackets:n { mantissa } @@ -2448,6 +2784,20 @@ \prop_if_in:NnT \l_siunitx_number_in_prop { exponent } { \siunitx_number_format_group:n { exponent } } } +\cs_new_protected_nopar:Npn \siunitx_number_format_relation: { + \prop_get:NnN \l_siunitx_number_in_prop { comparator } + \l_siunitx_tmpa_tl + \quark_if_no_value:NF \l_siunitx_tmpa_tl + { + \tl_set:Nx \l_siunitx_tmpa_tl + { + \exp_not:N \ensuremath + { { \exp_not:V \l_siunitx_tmpa_tl } } + } + \prop_put:NnV \l_siunitx_number_out_prop { comparator } + \l_siunitx_tmpa_tl + } +} \cs_new_protected_nopar:Npn \siunitx_number_format_sign:n #1 { \prop_if_in:NnT \l_siunitx_number_out_prop {#1} { @@ -3480,7 +3830,7 @@ } \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 } } + { power- \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_power_after:n #1 { @@ -3502,7 +3852,7 @@ } \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 } } + { per- \int_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: } @@ -3565,6 +3915,7 @@ \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_power_number_bool \bool_new:N \l_siunitx_two_parts_bool \tl_new:N \l_siunitx_qualifier_mode_tl \keys_define:nn { siunitx } { @@ -3617,6 +3968,11 @@ \bool_set_true:N \l_siunitx_per_two_parts_bool }, per-symbol .tl_set:N = \l_siunitx_per_symbol_tl, + power-font .choice:, + power-font / number .code:n = + { \bool_set_true:N \l_siunitx_power_number_bool }, + power-font / unit .code:n = + { \bool_set_false:N \l_siunitx_power_number_bool }, qualifier-mode .choice:, qualifier-mode / brackets .code:n = { \tl_set:Nn \l_siunitx_qualifier_mode_tl { brackets } }, @@ -3630,11 +3986,12 @@ inter-unit-separator = \,, per-mode = reciprocal, per-symbol = /, + power-font = number, qualifier-mode = subscript } \cs_new_protected_nopar:Npn \siunitx_unit_format: { \siunitx_unit_format_init: - \intexpr_compare:nNnT { \l_siunitx_unit_int } = { 1 } + \int_compare:nNnT { \l_siunitx_unit_int } = { 1 } { \str_if_eq:VnT \l_siunitx_per_mode_tl { symbol } { @@ -3642,7 +3999,7 @@ { \tl_clear:N \l_siunitx_number_unit_separator_tl } } } - \intexpr_while_do:nNnn { \l_siunitx_unit_int } > { 0 } + \int_while_do:nNnn { \l_siunitx_unit_int } > { 0 } { \siunitx_unit_format_prefix: \siunitx_unit_format_symbol: @@ -3682,7 +4039,7 @@ \str_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 } } + { per- \int_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 @@ -3697,7 +4054,7 @@ \tl_put_left:cV { l_siunitx_unit #1 _tl } \l_siunitx_unit_current_tl } \cs_new_protected_nopar:Npn \siunitx_unit_format_fraction: { - \intexpr_compare:nNnTF { \l_siunitx_unit_denominator_int } > { 0 } + \int_compare:nNnTF { \l_siunitx_unit_denominator_int } > { 0 } { \use:c { siunitx_unit_format_fraction_ \l_siunitx_per_mode_tl : } @@ -3727,7 +4084,7 @@ } \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 } + \int_compare:nNnT { \l_siunitx_unit_denominator_int } > { 1 } { \bool_if:NT \l_siunitx_unit_denominator_bracket_bool { @@ -3853,13 +4210,18 @@ } } \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} } + \bool_if:NTF \l_siunitx_power_number_bool + { \siunitx_unit_format_power_aux:nn { number } {#1} } + { \siunitx_unit_format_power_aux:nn { unit } {#1} } +} +\cs_new_protected:Npn \siunitx_unit_format_power_aux:nn #1#2 { + \bool_if:cTF { l_siunitx_ #1 _math_mode_bool } + { \siunitx_print:nn {#1} {#2} } { - \tl_set:Nn \l_siunitx_tmpa_tl {#1} + \tl_set:Nn \l_siunitx_tmpa_tl {#2} \tl_replace_all_in:Nnn \l_siunitx_tmpa_tl { - } { \text { \c_siunitx_minus_tl } } - \siunitx_print:nV { number } \l_siunitx_tmpa_tl + \siunitx_print:nV {#1} \l_siunitx_tmpa_tl } } \cs_new_protected_nopar:Npn \siunitx_unit_format_power_brackets: { @@ -3916,12 +4278,12 @@ { 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_compare:nNnT { \l_siunitx_unit_prefix_base_int } = { 0 } { \int_set:Nn \l_siunitx_unit_prefix_base_int { \l_siunitx_tmpa_tl } } - \intexpr_compare:nNnTF + \int_compare:nNnTF { \l_siunitx_unit_prefix_base_int } = { \l_siunitx_tmpa_tl } { \siunitx_unit_format_prefix_number_calc: } { \msg_error:nn { siunitx } { prefix-base-mismatch } } @@ -3940,14 +4302,14 @@ \str_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 } } + { \int_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 + \int_eval:n { \l_siunitx_unit_prefix_current_tl * \l_siunitx_tmpa_tl } } \tl_set:Nx \l_siunitx_tmpa_tl @@ -4040,7 +4402,7 @@ \msg_error:nn { siunitx } { prefix-only } } \cs_new_protected_nopar:Npn \siunitx_unit_format_symbol_aux_alt: { - \intexpr_compare:nNnTF { \l_siunitx_unit_int } = { 1 } + \int_compare:nNnTF { \l_siunitx_unit_int } = { 1 } { \prop_del:Nn \l_siunitx_unit_prop { prefix-1 } \prop_del:Nn \l_siunitx_unit_prop { prefix-base-1 } @@ -4126,7 +4488,7 @@ \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 } + \int_compare:nNnF { \l_siunitx_unit_prefix_int } = { 0 } { \tl_set:Nx \l_siunitx_tmpa_tl { @@ -4152,7 +4514,7 @@ } } \cs_new_protected_nopar:Npn \siunitx_unit_output_print: { - \intexpr_compare:nNnF { \l_siunitx_unit_prefix_int } = { 0 } + \int_compare:nNnF { \l_siunitx_unit_prefix_int } = { 0 } { \tl_set:Nx \l_siunitx_tmpa_tl { @@ -4201,7 +4563,7 @@ \bool_if:NTF \l_siunitx_product_power_bool { \siunitx_combined_product_count:n {#1} - \intexpr_compare:nNnTF { \l_siunitx_number_product_int } > { 0 } + \int_compare:nNnTF { \l_siunitx_number_product_int } > { 0 } { \int_incr:N \l_siunitx_number_product_int \tl_set:Nn \l_siunitx_tmpa_tl {#2} @@ -4506,6 +4868,7 @@ \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_comparator_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 @@ -4635,6 +4998,7 @@ \box_new:N \l_siunitx_table_pre_box \box_new:N \l_siunitx_table_post_box \box_new:N \l_siunitx_table_result_box +\dim_new:N \l_siunitx_table_comparator_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 @@ -4644,11 +5008,16 @@ \dim_new:N \l_siunitx_table_uncert_dim \dim_new:N \l_siunitx_table_gap_dim \prop_new:N \l_siunitx_table_model_prop +\dim_new:N \l_siunitx_table_space_dim \skip_new:N \l_siunitx_table_number_align_skip \skip_new:N \l_siunitx_table_text_align_skip \keys_define:nn { siunitx } { + table-align-exponent .bool_set:N + = \l_siunitx_table_align_exp_bool, table-align-text-post .bool_set:N = \l_siunitx_table_align_post_bool, + table-align-uncertainty .bool_set:N + = \l_siunitx_table_align_uncert_bool, table-number-alignment .choice:, table-number-alignment / center .code:n = @@ -4678,6 +5047,7 @@ { \c_zero_skip plus 1 fill } \bool_set_false:N \l_siunitx_table_center_decimal_bool }, + table-omit-exponent .bool_set:N = \l_siunitx_table_omit_exp_bool , table-text-alignment .choice:, table-text-alignment / center .code:n = @@ -4698,6 +5068,8 @@ { \c_zero_skip plus 1 fill } }, table-auto-round .bool_set:N = \l_siunitx_table_auto_bool, + table-comparator .bool_set:N = + \l_siunitx_table_comparator_bool, table-figures-decimal .int_set:N = \l_siunitx_table_decimal_int, table-figures-exponent .int_set:N = \l_siunitx_table_exponent_int, @@ -4715,11 +5087,13 @@ \l_siunitx_table_sign_mantissa_bool } \keys_set:nn { siunitx } { - table-align-text-post = true, - table-number-alignment = center-decimal-marker, - table-text-alignment = center, - table-figures-decimal = 2, - table-figures-integer = 3 + table-align-exponent = true, + table-align-text-post = true, + table-align-uncertainty = true, + table-number-alignment = center-decimal-marker, + table-text-alignment = center, + table-figures-decimal = 2, + table-figures-integer = 3 } \keys_define:nn { siunitx } { table-alignment .meta:n = @@ -4748,6 +5122,9 @@ { uncert } \siunitx_table_format_convert:nn { exponent-integer } { exponent } + \prop_if_in:NnTF \l_siunitx_number_in_prop { comparator } + { \bool_set_true:N \l_siunitx_table_comparator_bool } + { \bool_set_false:N \l_siunitx_table_comparator_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 } @@ -4792,7 +5169,14 @@ \siunitx_number_in_parse:V \l_siunitx_table_collect_tl \bool_if:NF \l_siunitx_error_bool { + \bool_if:NT \l_siunitx_table_omit_exp_bool + { \bool_set_true:N \l_siunitx_process_fixed_bool } \siunitx_number_process: + \bool_if:NT \l_siunitx_table_omit_exp_bool + { + \prop_del:Nn \l_siunitx_number_in_prop { exponent } + \prop_del:Nn \l_siunitx_number_in_prop { exponent-integer } + } \siunitx_number_format: \siunitx_number_output_color: } @@ -4876,6 +5260,7 @@ } \cs_new_protected_nopar:Npn \siunitx_table_print_S_reserved: { \dim_zero:N \l_siunitx_table_gap_dim + \dim_zero:N \l_siunitx_table_space_dim \siunitx_table_print_S_reserved_ends: \dim_compare:nNnTF { \box_wd:N \l_siunitx_table_pre_box } = { \c_zero_skip } @@ -4889,7 +5274,16 @@ \tl_set:Nn \l_siunitx_round_tl { places } } \siunitx_table_print_S_parse: - \intexpr_compare:nNnTF + \bool_if:NTF \l_siunitx_table_comparator_bool + { \siunitx_table_print_S_reserved_comparator: } + { + \prop_if_in:NnT \l_siunitx_number_out_prop { comparator } + { + \msg_error:nnx { siunitx } { table-partial-number } + { a~comparator } + } + } + \int_compare:nNnTF { \l_siunitx_table_integer_int + \l_siunitx_table_decimal_int } > { 0 } { \siunitx_table_print_S_reserved_mantissa: } @@ -4905,7 +5299,7 @@ \msg_error:nnx { siunitx } { table-partial-number } { a~complex } } - \intexpr_compare:nNnTF { \l_siunitx_table_exponent_int } > { 0 } + \int_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 } @@ -4945,19 +5339,21 @@ } \cs_new_protected_nopar:Npn \siunitx_table_print_S_model_create: { \prop_clear:N \l_siunitx_number_in_prop + \bool_if:NT \l_siunitx_table_comparator_bool + { \prop_put:Nnn \l_siunitx_number_in_prop { comparator } { \ll } } \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 } - \intexpr_compare:nNnF + \int_compare:nNnF { \l_siunitx_table_integer_int + \l_siunitx_table_decimal_int } = { 0 } { \prop_put:Nnn \l_siunitx_number_in_prop { mantissa } { true } } - \intexpr_compare:nNnT { \l_siunitx_table_decimal_int } > { 0 } + \int_compare:nNnT { \l_siunitx_table_decimal_int } > { 0 } { \prop_put:NnV \l_siunitx_number_in_prop { mantissa-decimal-marker } @@ -4965,7 +5361,7 @@ } \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 } + \int_compare:nNnT { \l_siunitx_table_exponent_int } > { 0 } { \bool_if:NT \l_siunitx_table_sign_exponent_bool { @@ -4973,7 +5369,11 @@ { - } } } - \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_uncertainty: } \siunitx_number_format: \prop_set_eq:NN \l_siunitx_table_model_prop \l_siunitx_number_out_prop @@ -4990,17 +5390,38 @@ \prop_put:Nnn \l_siunitx_number_in_prop {#1} { true } } } +\cs_new_protected_nopar:Npn \siunitx_table_print_S_reserved_comparator: + { + \siunitx_table_print_S_measure:Nnn \l_siunitx_table_model_prop + { comparator } { } + \siunitx_table_print_S_get_comparator:Nn + \l_siunitx_number_out_prop { } + \hbox_set_to_wd:Nnn \l_siunitx_table_result_box + { \l_siunitx_table_comparator_dim } + { + \siunitx_print:nV { number } \l_siunitx_tmpa_tl + \tex_hfil:D + } + \box_use:N \l_siunitx_table_result_box +} \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 } + \dim_set:Nn \l_siunitx_table_space_dim { \l_siunitx_table_mantissa_dim } + \hbox_set:Nn \l_siunitx_table_result_box { \box_use:N \l_siunitx_table_fill_box \siunitx_print:nV { number } \l_siunitx_tmpa_tl + } + \dim_sub:Nn \l_siunitx_table_space_dim + { \box_wd:N \l_siunitx_table_result_box } + \hbox_set_to_wd:Nnn \l_siunitx_table_result_box + { \l_siunitx_table_mantissa_dim } + { + \box_use:N \l_siunitx_table_result_box \tex_hfil:D } \box_use:N \l_siunitx_table_result_box @@ -5041,7 +5462,7 @@ \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 } + \int_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 @@ -5068,6 +5489,11 @@ \tex_hfil:D } \box_use:N \l_siunitx_table_result_box + \bool_if:NF \l_siunitx_table_align_uncert_bool + { + \tex_hskip:D \l_siunitx_table_space_dim + \dim_zero:N \l_siunitx_table_space_dim + } } \cs_new_protected_nopar:Npn \siunitx_table_print_S_reserved_uncert_pm:n #1 { @@ -5082,6 +5508,9 @@ \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: { @@ -5098,6 +5527,8 @@ \tex_hfil:D } \box_use:N \l_siunitx_table_result_box + \bool_if:NF \l_siunitx_table_align_exp_bool + { \tex_hskip:D \l_siunitx_table_space_dim } } \cs_new_protected_nopar:Npn \siunitx_table_print_S_reserved_exponent_product: { @@ -5109,7 +5540,9 @@ \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 + \bool_if:NF \l_siunitx_table_align_exp_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_product_aux_i: { @@ -5156,6 +5589,12 @@ } } \cs_new_protected_nopar:Npn + \siunitx_table_print_S_get_comparator:Nn #1#2 { + \prop_get:NnN #1 { comparator } \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 |