diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xintfrac.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintfrac.sty | 228 |
1 files changed, 150 insertions, 78 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty index d5bb34ac647..00de2592152 100644 --- a/Master/texmf-dist/tex/generic/xint/xintfrac.sty +++ b/Master/texmf-dist/tex/generic/xint/xintfrac.sty @@ -21,8 +21,8 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle 1.4j 2021/07/13 -%% Copyright (C) 2013-2021 by Jean-Francois Burnol +%% The xint bundle 1.4k 2022/05/18 +%% Copyright (C) 2013-2022 by Jean-Francois Burnol %% xintfrac: Expandable operations on fractions %% --------------------------------------------------------------- \begingroup\catcode61\catcode48\catcode32=10\relax% @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xintfrac}% - [2021/07/13 v1.4j Expandable operations on fractions (JFB)]% + [2022/05/18 v1.4k Expandable operations on fractions (JFB)]% \def\XINT_cntSgnFork #1% {% \ifcase #1\expandafter\xint_secondofthree @@ -458,37 +458,6 @@ \def\XINT_spraw #1[#2#3]{\xint_gob_til_W #2\XINT_spraw_a\W\XINT_spraw_p #1[#2#3]}% \def\XINT_spraw_a\W\XINT_spraw_p #1[\W]{ #1}% \def\XINT_spraw_p #1[\W]{\xintpraw {#1}}% -\def\xintFracToSci #1{\expandafter\XINT_FracToSci\romannumeral`&&@#1/\W[\R}% -\def\XINT_FracToSci #1/#2#3[#4% -{% - \xint_gob_til_W #2\XINT_FracToSci_noslash\W - \xint_gob_til_R #4\XINT_FracToSci_slash_noN\R - \XINT_FracToSci_slash_N #1/#2#3[#4% -}% -\def\XINT_FracToSci_noslash#1\XINT_FracToSci_slash_N #2[#3% -{% - \xint_gob_til_R #3\XINT_FracToSci_noslash_noN\R - \XINT_FracToSci_noslash_N #2[#3% -}% -\def\XINT_FracToSci_noslash_noN\R\XINT_FracToSci_noslash_N #1/\W[\R{#1}% -\def\XINT_FracToSci_noslash_N #1[#2]/\W[\R% -{% - \ifnum#2=\xint_c_ #1\else - \romannumeral0\expandafter\XINT_pfloat_fork\romannumeral0\xintrez{#1[#2]}% - \fi -}% -\def\XINT_FracToSci_slash_noN\R\XINT_FracToSci_slash_N #1#2/#3/\W[\R% -{% - #1\xint_gob_til_zero#1\expandafter\iffalse\xint_gobble_ii0\iftrue - #2\if\XINT_isOne{#3}1\else/#3\fi\fi -}% -\def\XINT_FracToSci_slash_N #1#2/#3[#4]/\W[\R% -{% - \ifnum#4=\xint_c_ #1#2\else - \romannumeral0\expandafter\XINT_pfloat_fork\romannumeral0\xintrez{#1#2[#4]}% - \fi - \if\XINT_isOne{#3}1\else\if#10\else/#3\fi\fi -}% \def\xintRawWithZeros {\romannumeral0\xintrawwithzeros }% \def\xintrawwithzeros {% @@ -2127,6 +2096,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \mathchardef\XINT_digits=\numexpr#1\relax \let\XINTdigits=\XINT_digits }% +\def\xintFloatZero{0.0e0}% 1.4k breaking change. Replaces hard-coded 0.e0 \def\xintFloat {\romannumeral0\xintfloat }% \def\xintfloat #1{\XINT_float_chkopt #1\xint:}% \def\XINT_float_chkopt #1% @@ -2157,7 +2127,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2% 0-\XINT_float_pos \krof #1% }%[ -\def\XINT_float_zero #1]#2.{ 0.e0}% +\def\XINT_float_zero #1]#2.{\expanded{ \xintFloatZero}}% \def\XINT_float_neg-{\expandafter-\romannumeral0\XINT_float_pos}% \def\XINT_float_pos #1#2[#3]#4.% {% @@ -2182,18 +2152,6 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \def\XINT_infloatS_clean #1% {\if #1!\xint_dothis\XINT_infloatS_clean_a\fi\xint_orthat{ }#1}% \def\XINT_infloatS_clean_a !#1.{ }% -\def\XINTFloatiLogTen {\the\numexpr\XINTfloatilogten}% -\def\XINTfloatilogten [#1]#2% - {\expandafter\XINT_floatilogten\romannumeral0\XINT_infloat[#1]{#2}#1.}% -\def\XINTFloatiLogTendigits{\the\numexpr\XINTfloatilogten[\XINTdigits]}% -\def\XINT_floatilogten #1{% - \if #10\xint_dothis\XINT_floatilogten_z\fi - \if #1!\xint_dothis\XINT_floatilogten_a\fi - \xint_orthat\XINT_floatilogten_b #1% -}% -\def\XINT_floatilogten_z 0[0]#1.{-"7FFF8000\relax}% -\def\XINT_floatilogten_a !#1.#2[#3]#4.{#3-#1+#4-1\relax}% -\def\XINT_floatilogten_b #1[#2]#3.{#2+#3-1\relax}% \def\XINT_infloat [#1]#2% {% \expandafter\XINT_infloat_a\the\numexpr #1\expandafter.% @@ -2377,11 +2335,89 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \expandafter\XINT_infloat_ZZ\the\numexpr#4+\xint_c_i.#3.% }% \def\XINT_infloat_ZZ #1.#2.{ 1#2[#1]}% +\def\XINTFloatiLogTen {\the\numexpr\XINTfloatilogten}% +\def\XINTfloatilogten [#1]#2% + {\expandafter\XINT_floatilogten\romannumeral0\XINT_infloat[#1]{#2}#1.}% +\def\XINTFloatiLogTendigits{\the\numexpr\XINTfloatilogten[\XINTdigits]}% +\def\XINT_floatilogten #1{% + \if #10\xint_dothis\XINT_floatilogten_z\fi + \if #1!\xint_dothis\XINT_floatilogten_a\fi + \xint_orthat\XINT_floatilogten_b #1% +}% +\def\XINT_floatilogten_z 0[0]#1.{-"7FFF8000\relax}% +\def\XINT_floatilogten_a !#1.#2[#3]#4.{#3-#1+#4-1\relax}% +\def\XINT_floatilogten_b #1[#2]#3.{#2+#3-1\relax}% +\def\xintFloatSciExp {\the\numexpr\xintfloatsciexp }% +\def\xintpfloatsciexp #1{\XINT_floatsciexp_chkopt #1\xint:}% +\def\XINT_floatsciexp_chkopt #1% +{% + \ifx [#1\expandafter\XINT_floatsciexp_opt + \else\expandafter\XINT_floatsciexp_noopt + \fi #1% +}% +\def\XINT_floatsciexp_noopt #1\xint:% +{% + \expandafter\XINT_floatsciexp\romannumeral0\XINT_infloat[\XINTdigits]{#1}% + \XINTdigits.% +}% +\def\XINT_floatsciexp_opt [\xint:#1]#2% +{% + \expandafter\XINT_floatsciexp\romannumeral0\XINT_infloat[#1]{#2}#1.% +}% +\def\XINT_floatsciexp #1{% + \if #10\xint_dothis\XINT_floatsciexp_z\fi + \if #1!\xint_dothis\XINT_floatsciexp_a\fi + \xint_orthat\XINT_floatsciexp_b #1% +}% +\def\XINT_floatsciexp_z 0[0]#1.{0\relax}% +\def\XINT_floatsciexp_a !#1.#2[#3]#4.{#3-#1+#4-1\relax}% +\def\XINT_floatsciexp_b #1[#2]#3.{#2+#3-1\relax}% +\def\xintFloatSignificand {\romannumeral0\xintfloatsignificand}% +\def\xintfloatsignificand #1{\XINT_floatsgf_chkopt #1\xint:}% +\def\XINT_floatsgf_chkopt #1% +{% + \ifx [#1\expandafter\XINT_floatsgf_opt + \else\expandafter\XINT_floatsgf_noopt + \fi #1% +}% +\def\XINT_floatsgf_noopt #1\xint:% +{% + \expandafter\XINT_floatsgf_post + \romannumeral0\XINTinfloat[\XINTdigits]{#1}\XINTdigits.% +}% +\def\XINT_floatsgf_opt [\xint:#1]% +{% + \expandafter\XINT_floatsgf_opt_a\the\numexpr #1.% +}% +\def\XINT_floatsgf_opt_a #1.#2% +{% + \expandafter\XINT_floatsgf_post + \romannumeral0\XINTinfloat[#1]{#2}#1.% +}% +\def\XINT_floatsgf_post #1% +{% + \xint_UDzerominusfork + #1-\XINT_floatsgf_zero + 0#1\XINT_floatsgf_neg + 0-\XINT_floatsgf_pos + \krof #1% +}%[ +\def\XINT_floatsgf_zero #1]#2.{\XINT_dsx_addzeros{#2};}% +\def\XINT_floatsgf_neg-{\XINT_floatsgf_pos}% +\def\XINT_floatsgf_pos #1[#2]#3.{ #1}% +\def\xintPFloatE{e}% +\def\xintPFloatNoSciEmax{\xint_c_v}% 1e6 uses sci.not. +\def\xintPFloatNoSciEmin{-\xint_c_iv}% 1e-5 uses sci.not. +\def\xintPFloatIntSuffix{}% +\def\xintPFloatLengthOneSuffix{}% +\def\xintPFloatZero{0}% +\def\xintPFloatMinTrimmed{\xint_c_iv}% \def\xintPFloat {\romannumeral0\xintpfloat }% \def\xintpfloat #1{\XINT_pfloat_chkopt #1\xint:}% -\def\xintPFloat_wopt +\def\xintPFloat_wopt[#1]#2% {% - \romannumeral0\expandafter\XINT_pfloat\romannumeral0\XINTinfloatS + \romannumeral0\expandafter\XINT_pfloat + \romannumeral0\XINTinfloatS[#1]{#2}#1.% }% \def\XINT_pfloat_chkopt #1% {% @@ -2392,10 +2428,12 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \def\XINT_pfloat_noopt #1\xint:% {% \expandafter\XINT_pfloat\romannumeral0\XINTinfloatS[\XINTdigits]{#1}% + \XINTdigits.% }% -\def\XINT_pfloat_opt [\xint:#1]% +\def\XINT_pfloat_opt [\xint:#1]#2% {% - \expandafter\XINT_pfloat\romannumeral0\XINTinfloatS[#1]% + \expandafter\XINT_pfloat\romannumeral0\XINTinfloatS[#1]{#2}% + #1.% }% \def\XINT_pfloat#1]% {% @@ -2409,13 +2447,41 @@ on input line \noexpand\the\inputlineno.&&J}}#2% 0-\XINT_pfloat_pos \krof #1% }% -\def\XINT_pfloat_zero#1]{ 0.0}% +\def\XINT_pfloat_zero#1]#2.{\expanded{ \xintPFloatZero}}% \def\XINT_pfloat_neg-{\expandafter-\romannumeral0\XINT_pfloat_pos}% -\def\XINT_pfloat_pos#1/1[#2]% +\def\XINT_pfloat_pos#1/1[#2]#3.% {% - \expandafter\XINT_pfloat_a\the\numexpr\xintLength{#1}.% - #2.#1.% + \expandafter\XINT_pfloat_aa\the\numexpr\xintLength{#1}.% + #3.#2.#1.% }% +\def\XINT_pfloat_keeptrimmed_fork#1% +{% + \xint_UDzerominusfork + #1-\XINT_pfloat_keeptrimmed_zero + 0#1\XINT_pfloat_keeptrimmed_neg + 0-\XINT_pfloat_keeptrimmed_pos + \krof #1% +}% +\def\XINT_pfloat_keeptrimmed_zero#1]{\expanded{ \xintPFloatZero}}% +\def\XINT_pfloat_keeptrimmed_neg-{\expandafter-\romannumeral0\XINT_pfloat_keeptrimmed_pos}% +\def\XINT_pfloat_keeptrimmed_pos#1/1[#2]% +{% + \expandafter\XINT_pfloat_a\the\numexpr\xintLength{#1}.#2.#1.% +}% +\def\XINT_pfloat_aa #1.#2.% +{% + \unless\ifnum\xintPFloatMinTrimmed>\numexpr#2-#1\relax + \xint_dothis\XINT_pfloat_a\fi + \ifnum#2>#1 \xint_dothis{\XINT_pfloat_i #2.}\fi + \xint_orthat\XINT_pfloat_a #1.% +}% +\def\XINT_pfloat_i #1.#2.#3.#4.% +{% + \expandafter\XINT_pfloat_j + \the\numexpr#3+#2-#1\expandafter.% + \romannumeral0\XINT_dsx_addzerosnofuss{#1-#2}#4;.#1.% +}% +\def\XINT_pfloat_j #1.#2.#3.{\XINT_pfloat_a#3.#1.#2.}% \def\XINT_pfloat_a #1.#2#3.% {% \expandafter\XINT_pfloat_b\the\numexpr#1+#2#3-\xint_c_i.% @@ -2423,8 +2489,8 @@ on input line \noexpand\the\inputlineno.&&J}}#2% }% \def\XINT_pfloat_b #1.#2% {% - \ifnum #1>\xint_c_v \xint_dothis\XINT_pfloat_sci\fi - \ifnum #1<-\xint_c_iv \xint_dothis\XINT_pfloat_sci\fi + \ifnum \xintPFloatNoSciEmax<#1 \xint_dothis\XINT_pfloat_sci\fi + \ifnum \xintPFloatNoSciEmin>#1 \xint_dothis\XINT_pfloat_sci\fi \ifnum #1<\xint_c_ \xint_dothis\XINT_pfloat_N\fi \if-#2\xint_dothis\XINT_pfloat_P\fi \xint_orthat\XINT_pfloat_Ps @@ -2436,36 +2502,42 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \expandafter\XINT_pfloat_sci_a\romannumeral`&&@\xintPFloatE #1.% }% \def\XINT_pfloat_sci_a #1.#2#3.{ #2.#3#1}% -\edef\XINT_pfloat_sci_i #1#2#3.#4.{#1\space#4.0#3}% -\def\xintPFloatE{e}% +\def\XINT_pfloat_sci_i #1#2#3.#4.{\expanded{#1 #4\xintPFloatLengthOneSuffix}#3}% \def\XINT_pfloat_N#1.#2.#3.% {% - \csname XINT_pfloat_N_\romannumeral-#1\endcsname #3% + \expandafter\XINT_pfloat_N_e\romannumeral\xintreplicate{-#1}{0}#3% }% -\def\XINT_pfloat_N_i { 0.}% -\def\XINT_pfloat_N_ii { 0.0}% -\def\XINT_pfloat_N_iii{ 0.00}% -\def\XINT_pfloat_N_iv { 0.000}% +\def\XINT_pfloat_N_e 0{ 0.}% \def\XINT_pfloat_P #1.#2.#3.% {% - \csname XINT_pfloat_P_\romannumeral#1\endcsname #3% + \expandafter\XINT_split_fromleft_a + \the\numexpr\xint_c_vii-#1.#3\xint_bye2345678\xint_bye.% }% -\def\XINT_pfloat_P_ #1{ #1.}% -\def\XINT_pfloat_P_i #1#2{ #1#2.}% -\def\XINT_pfloat_P_ii #1#2#3{ #1#2#3.}% -\def\XINT_pfloat_P_iii#1#2#3#4{ #1#2#3#4.}% -\def\XINT_pfloat_P_iv #1#2#3#4#5{ #1#2#3#4#5.}% -\def\XINT_pfloat_P_v #1#2#3#4#5#6{ #1#2#3#4#5#6.}% \def\XINT_pfloat_Ps #1.#2.#3.% {% - \csname XINT_pfloat_Ps_\romannumeral#1\endcsname #300000.% + \expanded{ #3% + \romannumeral\xintreplicate{#1+\xint_c_i-#2}{0}\xintPFloatIntSuffix}% +}% +\def\xintFloatToDecimal {\romannumeral0\xintfloattodecimal }% +\def\xintfloattodecimal #1{\XINT_floattodec_chkopt #1\xint:}% +\def\XINT_floattodec_chkopt #1% +{% + \ifx [#1\expandafter\XINT_floattodec_opt + \else\expandafter\XINT_floattodec_noopt + \fi #1% +}% +\def\XINT_floattodec_noopt #1\xint:% +{% + \expandafter\XINT_floattodec\romannumeral0\XINTinfloatS[\XINTdigits]{#1}% +}% +\def\XINT_floattodec_opt [\xint:#1]% +{% + \expandafter\XINT_floattodec\romannumeral0\XINTinfloatS[#1]% +}% +\def\XINT_floattodec#1]% +{% + \expandafter\XINT_dectostr\romannumeral0\xintrez{#1]}% }% -\def\XINT_pfloat_Ps_ #1#2.{ #1.0}% -\def\XINT_pfloat_Ps_i #1#2#3.{ #1#2.0}% -\def\XINT_pfloat_Ps_ii #1#2#3#4.{ #1#2#3.0}% -\def\XINT_pfloat_Ps_iii#1#2#3#4#5.{ #1#2#3#4.0}% -\def\XINT_pfloat_Ps_iv #1#2#3#4#5#6.{ #1#2#3#4#5.0}% -\def\XINT_pfloat_Ps_v #1#2#3#4#5#6#7.{ #1#2#3#4#5#6.0}% \def\XINTinFloatFrac {\romannumeral0\XINTinfloatfrac}% \def\XINTinfloatfrac #1% {% |