summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/siunitx/siunitx.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/siunitx/siunitx.sty')
-rw-r--r--Master/texmf-dist/tex/latex/siunitx/siunitx.sty173
1 files changed, 110 insertions, 63 deletions
diff --git a/Master/texmf-dist/tex/latex/siunitx/siunitx.sty b/Master/texmf-dist/tex/latex/siunitx/siunitx.sty
index eec160df3fc..1c97adf20a1 100644
--- a/Master/texmf-dist/tex/latex/siunitx/siunitx.sty
+++ b/Master/texmf-dist/tex/latex/siunitx/siunitx.sty
@@ -41,7 +41,7 @@
}%
\endinput
}%
-\ProvidesExplPackage {siunitx} {2024-06-24} {3.3.19}
+\ProvidesExplPackage {siunitx} {2024-08-20} {3.3.21}
{A comprehensive (SI) units package}
\msg_new:nnnn { siunitx } { incompatible-package }
{ Package~'#1'~incompatible. }
@@ -1479,7 +1479,13 @@
\str_case:nnF {#1}
{
{ down } { \use_i:nn }
- { up } { \use_ii:nn }
+ { up }
+ {
+ \str_if_eq:eeTF
+ {#2} { \prg_replicate:nn { \tl_count:n {#2} } { 0 } }
+ { \use_i:nn }
+ { \use_ii:nn }
+ }
}
{
\bool_lazy_or:nnTF
@@ -2983,23 +2989,26 @@
{
\siunitx_angle:eee
{ \fp_eval:n { trunc(#1,0) } }
- { \fp_eval:n { trunc((#1 - trunc(#1,0)) * 60,0) } }
+ { \fp_eval:n { abs(trunc((#1 - trunc(#1,0)) * 60,0)) } }
{
\fp_eval:n
{
- (
- (#1 - trunc(#1,0)) * 60
- - trunc((#1 - trunc(#1,0)) * 60,0)
- )
+ abs
+ (
+ (#1 - trunc(#1,0)) * 60
+ - trunc((#1 - trunc(#1,0)) * 60,0)
+ )
* 60
}
}
}
\cs_generate_variant:Nn \__siunitx_angle_arc_convert:n { e }
+\clist_const:Nn \c__siunitx_angle_parts_tl { degrees , minutes , seconds }
\tl_new:N \l__siunitx_angle_degrees_tl
\tl_new:N \l__siunitx_angle_minutes_tl
\tl_new:N \l__siunitx_angle_seconds_tl
\tl_new:N \l__siunitx_angle_sign_tl
+\tl_new:N \l__siunitx_angle_signed_bool
\keys_precompile:nnN
{ siunitx }
{
@@ -3013,49 +3022,32 @@
{ \exp_not:V \l__siunitx_angle_tmp_tl }
\keys_precompile:nnN
{ siunitx }
- { input-comparators = , input-signs = }
+ { input-comparators = }
\l__siunitx_angle_tmp_tl
-\cs_set_protected:Npx \__siunitx_angle_suppress_comp_sign:
+\cs_set_protected:Npx \__siunitx_angle_suppress_comp:
{ \exp_not:V \l__siunitx_angle_tmp_tl }
\cs_new_protected:Npn \__siunitx_angle_arc_sign:nnn #1#2#3
{
\group_begin:
\__siunitx_angle_suppress_exp_uncert:
\tl_clear:N \l__siunitx_angle_sign_tl
- \__siunitx_angle_arc_sign:nn {#1} { degrees }
+ \bool_set_false:N \l__siunitx_angle_signed_bool
+ \str_if_eq:nnTF {#1} { -0 }
+ {
+ \__siunitx_angle_arc_sign:nn { } { degrees }
+ \__siunitx_angle_suppress_comp:
+ \tl_set:Nn \l__siunitx_angle_sign_tl { - }
+ \bool_set_true:N \l__siunitx_angle_signed_bool
+ }
+ { \__siunitx_angle_arc_sign:nn {#1} { degrees } }
\__siunitx_angle_arc_sign:nn {#2} { minutes }
\__siunitx_angle_arc_sign:nn {#3} { seconds }
\tl_if_empty:NF \l__siunitx_angle_sign_tl
{
- \clist_map_inline:nn { degrees , minutes , seconds }
- {
- \tl_if_empty:cF { l__siunitx_angle_ ##1 _tl }
- {
- \tl_set:cx { l__siunitx_angle_ ##1 _tl }
- {
- { }
- { \exp_not:V \l__siunitx_angle_sign_tl }
- \exp_after:wN \exp_after:wN \exp_after:wN
- \__siunitx_angle_sign:nnnnnnn
- \cs:w l__siunitx_angle_ ##1 _tl \cs_end:
- }
- \clist_map_break:
- }
- }
- }
- \clist_map_inline:nn { degrees , minutes , seconds }
- {
- \tl_if_empty:cF { l__siunitx_angle_ ##1 _tl }
- {
- \siunitx_number_process:cc
- { l__siunitx_angle_ ##1 _tl } { l__siunitx_angle_ ##1 _tl }
- \tl_set:cx { l__siunitx_angle_ ##1 _tl }
- {
- \siunitx_number_output:cN
- { l__siunitx_angle_ ##1 _tl } \q_nil
- }
- }
+ \clist_map_function:NN \c__siunitx_angle_parts_tl
+ \__siunitx_angle_arc_sign_auxi:n
}
+ \clist_map_function:NN \c__siunitx_angle_parts_tl \__siunitx_angle_arc_sign_auxii:n
\__siunitx_angle_arc_print:VVV
\l__siunitx_angle_degrees_tl
\l__siunitx_angle_minutes_tl
@@ -3076,6 +3068,40 @@
{
\siunitx_number_parse:nN {#1} \l__siunitx_angle_tmp_tl
\exp_after:wN \__siunitx_angle_extract_sign:nnnnnnnn \l__siunitx_angle_tmp_tl {#2}
+ \bool_set_true:N \l__siunitx_angle_signed_bool
+ }
+ }
+\cs_new_protected:Npn \__siunitx_angle_arc_sign_auxi:n #1
+ {
+ \tl_if_empty:cF { l__siunitx_angle_ #1 _tl }
+ {
+ \tl_set:cx { l__siunitx_angle_ #1 _tl }
+ {
+ { }
+ { \exp_not:V \l__siunitx_angle_sign_tl }
+ \exp_after:wN \exp_after:wN \exp_after:wN
+ \__siunitx_angle_sign:nnnnnnn
+ \cs:w l__siunitx_angle_ #1 _tl \cs_end:
+ }
+ \clist_map_break:
+ }
+ }
+\cs_new_protected:Npn \__siunitx_angle_arc_sign_auxii:n #1
+ {
+ \tl_if_empty:cF { l__siunitx_angle_ #1 _tl }
+ {
+ \bool_lazy_and:nnF
+ { \l__siunitx_angle_force_arc_bool }
+ { ! \str_if_eq_p:nn {#1} { seconds } }
+ {
+ \siunitx_number_process:cc
+ { l__siunitx_angle_ #1 _tl } { l__siunitx_angle_ #1 _tl }
+ }
+ \tl_set:cx { l__siunitx_angle_ #1 _tl }
+ {
+ \siunitx_number_output:cN
+ { l__siunitx_angle_ #1 _tl } \q_nil
+ }
}
}
\cs_new_protected:Npn \__siunitx_angle_extract_sign:nnnnnnnn #1#2#3#4#5#6#7#8
@@ -3083,10 +3109,12 @@
\tl_if_blank:nTF {#2}
{ \tl_set_eq:cN { l__siunitx_angle_ #8 _tl } \l__siunitx_angle_tmp_tl }
{
+ \bool_if:NTF \l__siunitx_angle_signed_bool
+ { \msg_error:nnn { siunitx } { arc-multi-sign } }
+ { \tl_set:Nn \l__siunitx_angle_sign_tl {#2} }
\tl_set:cn { l__siunitx_angle_ #8 _tl }
{ {#1} { } {#3} {#4} {#5} {#6} {#7} }
- \tl_set:Nn \l__siunitx_angle_sign_tl {#2}
- \__siunitx_angle_suppress_comp_sign:
+ \__siunitx_angle_suppress_comp:
}
}
\cs_new:Npn \__siunitx_angle_sign:nnnnnnn #1#2#3#4#5#6#7
@@ -3206,6 +3234,12 @@
\siunitx_unit_format:nN {#1} \l__siunitx_angle_tmp_tl
\siunitx_print_unit:V \l__siunitx_angle_tmp_tl
}
+\msg_new:nnnn { siunitx } { arc-multi-sign }
+ { Multiple~signs~given~for~arc~angle! }
+ {
+ An~angle~given~as~an~arc~should~have~at~most~one~sign:~
+ only~the~first~sign~will~be~used.
+ }
\keys_set:nn { siunitx }
{
angle-mode = input ,
@@ -3871,10 +3905,10 @@
\bool_lazy_or:nnTF
{ \str_if_eq_p:nn {#2} { i } }
{ \str_if_eq_p:nn {#2#3} { +i } }
- { \__siunitx_complex_convert_polar_auxvi:nnn { } { 1 } {#1} }
+ { \__siunitx_complex_convert_polar_auxvii:nnn { } { 1 } {#1} }
{
\str_if_eq:nnTF {#2#3} { -i }
- { \__siunitx_complex_convert_polar_auxvi:nnn { } { -1 } {#1} }
+ { \__siunitx_complex_convert_polar_auxvii:nnn { } { -1 } {#1} }
{ \__siunitx_complex_convert_polar_auxiii:nnw {#1} {#2} #3 + + \q_stop }
}
}
@@ -3884,7 +3918,7 @@
{ \__siunitx_complex_convert_polar_auxiv:nnw {#1} {#2} #3 - - \q_stop }
{
\str_if_eq:nnTF {#4} { i }
- { \__siunitx_complex_convert_polar_auxvi:nnn {#2#3} { 1 } {#1} }
+ { \__siunitx_complex_convert_polar_auxvii:nnn {#2#3} { 1 } {#1} }
{ \__siunitx_complex_convert_polar_auxv:nnw {#2#3} {#1} #4 i \q_nil i \q_stop }
}
}
@@ -3894,35 +3928,45 @@
{ \__siunitx_complex_convert_polar_auxv:nnw { } {#1} #2#3 i \q_nil i \q_stop }
{
\str_if_eq:nnTF {#4} { i }
- { \__siunitx_complex_convert_polar_auxvi:nnn { } { -1 } {#1} }
+ { \__siunitx_complex_convert_polar_auxvii:nnn { } { -1 } {#1} }
{ \__siunitx_complex_convert_polar_auxv:nnw {#2#3} {#1} -#4 i \q_nil i \q_stop }
}
}
\cs_new:Npn \__siunitx_complex_convert_polar_auxv:nnw #1#2#3 i #4 i #5 \q_stop
{
\quark_if_nil:nTF {#4}
- { { #3 \tl_if_blank:nF {#2} { e#2 } } { 0 } }
- { \__siunitx_complex_convert_polar_auxvi:nnn {#1} {#3} {#2} }
+ {
+ \tl_if_head_eq_meaning:nNTF {#3} -
+ { \__siunitx_complex_convert_polar_auxvi:enn { \use_none:n #3 } { 180 } }
+ { \__siunitx_complex_convert_polar_auxvi:nnn {#3} { 0 } }
+ {#2}
+ }
+ { \__siunitx_complex_convert_polar_auxvii:nnn {#1} {#3} {#2} }
}
\cs_new:Npn \__siunitx_complex_convert_polar_auxvi:nnn #1#2#3
{
- \__siunitx_complex_convert_polar_auxvii:eee
+ { #1 \tl_if_blank:nF {#3} { e#3 } } {#2}
+ }
+\cs_generate_variant:Nn \__siunitx_complex_convert_polar_auxvi:nnn { e }
+\cs_new:Npn \__siunitx_complex_convert_polar_auxvii:nnn #1#2#3
+ {
+ \__siunitx_complex_convert_polar_auxviii:eee
{ \tl_if_blank:nTF {#1} { 0 } {#1} }
{ \tl_if_blank:nTF {#2} { 0 } {#2} }
{ \tl_if_blank:nF {#3} { e#3 } }
}
-\cs_new:Npn \__siunitx_complex_convert_polar_auxvii:nnn #1#2#3
+\cs_new:Npn \__siunitx_complex_convert_polar_auxviii:nnn #1#2#3
{
- \__siunitx_complex_format_polar_auxviii:ee
+ \__siunitx_complex_format_polar_auxix:ee
{ \fp_eval:n { sqrt ( (#1#3)^2 + (#2#3)^2 ) } }
{
\fp_eval:n
{ atan \bool_if:NT \l__siunitx_complex_polar_degree_bool { d } (#2 , #1) }
}
}
-\cs_generate_variant:Nn \__siunitx_complex_convert_polar_auxvii:nnn { eee }
-\cs_new:Npn \__siunitx_complex_format_polar_auxviii:nn #1#2 { {#1} {#2} }
-\cs_generate_variant:Nn \__siunitx_complex_format_polar_auxviii:nn { ee }
+\cs_generate_variant:Nn \__siunitx_complex_convert_polar_auxviii:nnn { eee }
+\cs_new:Npn \__siunitx_complex_format_polar_auxix:nn #1#2 { {#1} {#2} }
+\cs_generate_variant:Nn \__siunitx_complex_format_polar_auxix:nn { ee }
\msg_new:nnnn { siunitx } { invalid-polar-form }
{ Invalid~polar~form~"#1:#2". }
{
@@ -5308,13 +5352,6 @@
{
\group_begin:
\tl_clear:N \l__siunitx_table_collect_tl
- \if_false: { \fi:
- \cs_set_protected:Npn \cr
- {
- \__siunitx_table_collect_loop:
- \tex_cr:D
- }
- \if_false: } \fi:
\__siunitx_table_collect_begin:w
}
\cs_new_protected:Npn \__siunitx_table_collect_begin:w #1 \ignorespaces
@@ -5339,9 +5376,9 @@
{
\unskip { \__siunitx_table_collect_loop: }
\textonly@unskip { \__siunitx_table_collect_loop: }
- \end { \tabularnewline \end }
+ \end { \__siunitx_table_collect_pre_cr: \tabularnewline \end }
\relax { \__siunitx_table_collect_relax:N #1 }
- \tabularnewline { \tabularnewline }
+ \tabularnewline { \__siunitx_table_collect_pre_cr: \tabularnewline }
\siunitx_cell_end: { \siunitx_cell_end: }
}
{ \__siunitx_table_collect_token_aux:N #1 }
@@ -5368,9 +5405,9 @@
\@maybe@unskip { \__siunitx_table_collect_loop: }
\tab@setcr { \__siunitx_table_collect_loop: }
\unskip { \__siunitx_table_collect_loop: }
- \end { \tabularnewline \end }
+ \end { \__siunitx_table_collect_pre_cr: \tabularnewline \end }
\relax { \__siunitx_table_collect_relax:N #1 }
- \tabularnewline { \tabularnewline }
+ \tabularnewline { \__siunitx_table_collect_pre_cr: \tabularnewline }
\siunitx_cell_end: { \siunitx_cell_end: }
}
{ \__siunitx_table_collect_token_aux:N #1 }
@@ -5391,6 +5428,16 @@
{ \use_i_delimit_by_q_stop:nw {#3} }
{ \__siunitx_table_collect_search_aux:NNn #1 }
}
+\cs_new_protected:Npn \__siunitx_table_collect_pre_cr:
+ {
+ \if_false: { \fi:
+ \cs_set_protected:Npn \cr
+ {
+ \__siunitx_table_collect_loop:
+ \tex_cr:D
+ }
+ \if_false: } \fi:
+ }
\tl_new:N \l__siunitx_table_before_tl
\tl_new:N \l__siunitx_table_number_tl
\tl_new:N \l__siunitx_table_after_tl