diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xintfrac.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintfrac.sty | 241 |
1 files changed, 125 insertions, 116 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty index 00de2592152..d94affd6304 100644 --- a/Master/texmf-dist/tex/generic/xint/xintfrac.sty +++ b/Master/texmf-dist/tex/generic/xint/xintfrac.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle 1.4k 2022/05/18 +%% The xint bundle 1.4l 2022/05/29 %% Copyright (C) 2013-2022 by Jean-Francois Burnol %% xintfrac: Expandable operations on fractions %% --------------------------------------------------------------- @@ -31,38 +31,36 @@ \catcode123=1 % { \catcode125=2 % } \catcode64=11 % @ - \catcode35=6 % # \catcode44=12 % , - \catcode45=12 % - \catcode46=12 % . \catcode58=12 % : - \let\z\endgroup + \catcode94=7 % ^ + \def\empty{}\def\space{ }\newlinechar10 + \def\z{\endgroup}% \expandafter\let\expandafter\x\csname ver@xintfrac.sty\endcsname \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname - \expandafter - \ifx\csname PackageInfo\endcsname\relax - \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}% + \expandafter\ifx\csname numexpr\endcsname\relax + \expandafter\ifx\csname PackageWarning\endcsname\relax + \immediate\write128{^^JPackage xintfrac Warning:^^J% + \space\space\space\space + \numexpr not available, aborting input.^^J}% \else - \def\y#1#2{\PackageInfo{#1}{#2}}% + \PackageWarningNoLine{xintfrac}{\numexpr not available, aborting input}% \fi - \expandafter - \ifx\csname numexpr\endcsname\relax - \y{xintfrac}{\numexpr not available, aborting input}% - \aftergroup\endinput + \def\z{\endgroup\endinput}% \else \ifx\x\relax % plain-TeX, first loading of xintfrac.sty \ifx\w\relax % but xint.sty not yet loaded. \def\z{\endgroup\input xint.sty\relax}% \fi \else - \def\empty {}% \ifx\x\empty % LaTeX, first loading, % variable is initialized, but \ProvidesPackage not yet seen \ifx\w\relax % xint.sty not yet loaded. \def\z{\endgroup\RequirePackage{xint}}% \fi \else - \aftergroup\endinput % xintfrac already loaded. + \def\z{\endgroup\endinput}% xintfrac already loaded. \fi \fi \fi @@ -70,7 +68,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xintfrac}% - [2022/05/18 v1.4k Expandable operations on fractions (JFB)]% + [2022/05/29 v1.4l Expandable operations on fractions (JFB)]% \def\XINT_cntSgnFork #1% {% \ifcase #1\expandafter\xint_secondofthree @@ -121,8 +119,8 @@ {% \expandafter\XINT_outfrac_P\expandafter {#2}{#1}% }% -\def\XINT_inFrac {\romannumeral0\XINT_infrac }% -\def\XINT_infrac #1% +\def\XINT_inFrac {\romannumeral0\XINT_infrac }% this one deprecated +\def\XINT_infrac #1% this one is core xintfrac macro {% \expandafter\XINT_infrac_fork\romannumeral`&&@#1\xint:/\XINT_W[\XINT_W\XINT_T }% @@ -397,6 +395,8 @@ \expandafter\XINT_raw\romannumeral0\XINT_infrac }% \def\XINT_raw #1#2#3{ #2/#3[#1]}% +\def\xintRawBraced {\romannumeral0\xintrawbraced }% +\let\xintrawbraced \XINT_infrac \def\xintiLogTen {\the\numexpr\xintilogten}% \def\xintilogten {% @@ -458,6 +458,22 @@ \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{\romannumeral0\xintfractosci}% +\def\xintfractosci#1{\expandafter\XINT_fractosci\romannumeral0\xintraw{#1}}% +\def\XINT_fractosci#1#2/#3[#4]{\expanded{ % + \ifnum#4=\xint_c_ #1#2\else + \romannumeral0\expandafter\XINT_pfloat_a_fork\romannumeral0\xintrez{#1#2[#4]}% + \fi + \if\XINT_isOne{#3}1\else\if#10\else/#3\fi\fi}% +}% +\def\xintFracToDecimal{\romannumeral0\xintfractodecimal}% +\def\xintfractodecimal#1{\expandafter\XINT_fractodecimal\romannumeral0\xintraw{#1}}% +\def\XINT_fractodecimal #1#2/#3[#4]{\expanded{ % + \ifnum#4=\xint_c_ #1#2\else + \romannumeral0\expandafter\XINT_dectostr\romannumeral0\xintrez{#1#2[#4]}% + \fi + \if\XINT_isOne{#3}1\else\if#10\else/#3\fi\fi}% +}% \def\xintRawWithZeros {\romannumeral0\xintrawwithzeros }% \def\xintrawwithzeros {% @@ -606,15 +622,16 @@ on input line \noexpand\the\inputlineno.&&J}}#2% {% \expandafter-\romannumeral0\XINT_sgnfrac_P }% -\def\xintTeXfromSci#1% +\def\xintTeXfromSci{\xintfracTeXDeprecation\xintTeXfromSci\xintTeXFromSci}% +\def\xintTeXFromSci#1% {% - \expanded{\expandafter\XINT_texfromsci\expanded{#1}/\relax/\xint:}% + \expandafter\XINT_texfromsci\expanded{#1}/\relax/\xint: }% \def\XINT_texfromsci #1/#2#3/#4\xint: {% \XINT_texfromsci_a #1e\relax e\xint: {\ifx\relax#2\xint_dothis\xint_firstofone\fi - \xint_orthat{\XINT_texfromsci_frac{#2#3}}}% + \xint_orthat{\xintTeXFromScifracmacro{#2#3}}}% {\unless\ifx\relax#2\cdot{#2#3}^{-1}\fi}% }% \def\XINT_texfromsci_a #1e#2#3e#4\xint:#5#6% @@ -622,9 +639,9 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \ifx\relax#2#5{#1}\else#1\cdot10^{#2#3}#6\fi }% \ifdefined\frac - \def\XINT_texfromsci_frac#1#2{\noexpand\frac{#2}{#1}}% + \protected\def\xintTeXFromScifracmacro#1#2{\frac{#2}{#1}}% \else - \def\XINT_texfromsci_frac#1#2{{#2\over#1}}% + \protected\def\xintTeXFromScifracmacro#1#2{{#2\over#1}}% \fi \def\xintFwOver {\xintfracTeXDeprecation\xintFwOver\xintTeXOver}% \def\xintTeXOver{\romannumeral0\xintfwover }% @@ -1940,6 +1957,16 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \def\XINT_inv_b #1.#2{ #2[#1]}% \def\xintSgn {\romannumeral0\xintsgn }% \def\xintsgn #1{\expandafter\XINT_sgn\romannumeral0\xintraw {#1}\xint:}% +\def\xintSignBit {\romannumeral0\xintsignbit }% +\def\xintsignbit #1{\expandafter\XINT_signbit\romannumeral0\xintraw {#1}\xint:}% +\def\XINT_signbit #1#2\xint: +{% + \xint_UDzerominusfork + #1-{ 0}% + 0#1{ 1}% + 0-{ 0}% + \krof +}% \def\xintGCD {\romannumeral0\xintgcd}% \def\xintgcd #1% {% @@ -2110,11 +2137,11 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \expandafter\XINT_float_post \romannumeral0\XINTinfloat[\XINTdigits]{#1}\XINTdigits.% }% -\def\XINT_float_opt [\xint:#1]% +\def\XINT_float_opt [\xint: {% - \expandafter\XINT_float_opt_a\the\numexpr #1.% + \expandafter\XINT_float_opt_a\the\numexpr }% -\def\XINT_float_opt_a #1.#2% +\def\XINT_float_opt_a #1]#2% {% \expandafter\XINT_float_post \romannumeral0\XINTinfloat[#1]{#2}#1.% @@ -2134,6 +2161,43 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \expandafter\XINT_float_pos_done\the\numexpr#3+#4-\xint_c_i.#1.#2;% }% \def\XINT_float_pos_done #1.#2;{ #2e#1}% +\def\xintFloatBraced{\romannumeral0\xintfloatbraced }% +\def\xintfloatbraced#1{\XINT_floatbr_chkopt #1\xint:}% +\def\XINT_floatbr_chkopt #1% +{% + \ifx [#1\expandafter\XINT_floatbr_opt + \else\expandafter\XINT_floatbr_noopt + \fi #1% +}% +\def\XINT_floatbr_noopt #1\xint:% +{% + \expandafter\XINT_floatbr_post + \romannumeral0\XINTinfloat[\XINTdigits]{#1}\XINTdigits.% +}% +\def\XINT_floatbr_opt [\xint: +{% + \expandafter\XINT_floatbr_opt_a\the\numexpr +}% +\def\XINT_floatbr_opt_a #1]#2% +{% + \expandafter\XINT_floatbr_post + \romannumeral0\XINTinfloat[#1]{#2}#1.% +}% +\def\XINT_floatbr_post #1% +{% + \xint_UDzerominusfork + #1-\XINT_floatbr_zero + 0#1\XINT_floatbr_neg + 0-\XINT_floatbr_pos + \krof #1% +}% +\def\XINT_floatbr_zero #1]#2.{\expanded{{0}{0}{0.\xintReplicate{#2-\xint_c_i}0}}}% +\def\XINT_floatbr_neg-{\expandafter\XINT_floatbr_neg_a\romannumeral0\XINT_floatbr_pos}% +\def\XINT_floatbr_neg_a#1{{1}}% +\def\XINT_floatbr_pos #1#2[#3]#4.% +{% + \expanded{{0}{\the\numexpr#3+#4-\xint_c_i}}{#1.#2}% +}% \def\XINTinFloat {\romannumeral0\XINTinfloat }% \def\XINTinfloat {\expandafter\XINT_infloat_clean\romannumeral0\XINT_infloat}% @@ -2152,10 +2216,10 @@ 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\XINT_infloat [#1]#2% +\def\XINT_infloat [#1]%#2% {% \expandafter\XINT_infloat_a\the\numexpr #1\expandafter.% - \romannumeral0\XINT_infrac {#2}% + \romannumeral0\XINT_infrac% {#2}% }% \def\XINT_infloat_a #1.#2#3#4% {% @@ -2345,66 +2409,8 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \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\XINT_floatilogten_a !#1.#2[#3]#4.{#3-#1+#4-\xint_c_i\relax}% +\def\XINT_floatilogten_b #1[#2]#3.{#2+#3-\xint_c_i\relax}% \def\xintPFloatE{e}% \def\xintPFloatNoSciEmax{\xint_c_v}% 1e6 uses sci.not. \def\xintPFloatNoSciEmin{-\xint_c_iv}% 1e-5 uses sci.not. @@ -2430,7 +2436,8 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \expandafter\XINT_pfloat\romannumeral0\XINTinfloatS[\XINTdigits]{#1}% \XINTdigits.% }% -\def\XINT_pfloat_opt [\xint:#1]#2% +\def\XINT_pfloat_opt [\xint:{\expandafter\XINT_pfloat_opt_a\the\numexpr}% +\def\XINT_pfloat_opt_a #1]#2% {% \expandafter\XINT_pfloat\romannumeral0\XINTinfloatS[#1]{#2}% #1.% @@ -2454,40 +2461,42 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \expandafter\XINT_pfloat_aa\the\numexpr\xintLength{#1}.% #3.#2.#1.% }% -\def\XINT_pfloat_keeptrimmed_fork#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_a_fork#1% {% \xint_UDzerominusfork - #1-\XINT_pfloat_keeptrimmed_zero - 0#1\XINT_pfloat_keeptrimmed_neg - 0-\XINT_pfloat_keeptrimmed_pos + #1-\XINT_pfloat_a_zero + 0#1\XINT_pfloat_a_neg + 0-\XINT_pfloat_a_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]% +\def\XINT_pfloat_a_zero#1]{\expanded{ \xintPFloatZero}}% +\def\XINT_pfloat_a_neg-{\expandafter-\romannumeral0\XINT_pfloat_a_pos}% +\def\XINT_pfloat_a_pos#1/1[#2]% {% \expandafter\XINT_pfloat_a\the\numexpr\xintLength{#1}.#2.#1.% }% -\def\XINT_pfloat_aa #1.#2.% +\def\XINT_pfloat_i #1.#2.%#3.#4.% {% - \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.% + \expandafter\XINT_pfloat_j\romannumeral\xintreplicate{#1-#2}0.#2.% }% -\def\XINT_pfloat_i #1.#2.#3.#4.% +\def\XINT_pfloat_j #1.#2.#3#4.%#5. {% - \expandafter\XINT_pfloat_j - \the\numexpr#3+#2-#1\expandafter.% - \romannumeral0\XINT_dsx_addzerosnofuss{#1-#2}#4;.#1.% + \expandafter\XINT_pfloat_b\the\numexpr#2+#3#4-\xint_c_i.% + #3#2.#1.% }% -\def\XINT_pfloat_j #1.#2.#3.{\XINT_pfloat_a#3.#1.#2.}% -\def\XINT_pfloat_a #1.#2#3.% +\def\XINT_pfloat_a #1.#2#3.%#4. {% \expandafter\XINT_pfloat_b\the\numexpr#1+#2#3-\xint_c_i.% - #2#1.% + #2#1..% }% -\def\XINT_pfloat_b #1.#2% +\def\XINT_pfloat_b #1.#2%#3.#4.#5. {% \ifnum \xintPFloatNoSciEmax<#1 \xint_dothis\XINT_pfloat_sci\fi \ifnum \xintPFloatNoSciEmin>#1 \xint_dothis\XINT_pfloat_sci\fi @@ -2501,21 +2510,21 @@ on input line \noexpand\the\inputlineno.&&J}}#2% \ifnum#2=\xint_c_i\expandafter\XINT_pfloat_sci_i\expandafter\fi \expandafter\XINT_pfloat_sci_a\romannumeral`&&@\xintPFloatE #1.% }% -\def\XINT_pfloat_sci_a #1.#2#3.{ #2.#3#1}% -\def\XINT_pfloat_sci_i #1#2#3.#4.{\expanded{#1 #4\xintPFloatLengthOneSuffix}#3}% -\def\XINT_pfloat_N#1.#2.#3.% +\def\XINT_pfloat_sci_a #1.#2.#3#4.{ #3.#4#2#1}% +\def\XINT_pfloat_sci_i #1#2#3.#4.#5.{\expanded{#1 #5\xintPFloatLengthOneSuffix}#3}% +\def\XINT_pfloat_N#1.#2.#3.#4.% {% - \expandafter\XINT_pfloat_N_e\romannumeral\xintreplicate{-#1}{0}#3% + \expandafter\XINT_pfloat_N_e\romannumeral\xintreplicate{-#1}{0}#4#3% }% \def\XINT_pfloat_N_e 0{ 0.}% -\def\XINT_pfloat_P #1.#2.#3.% +\def\XINT_pfloat_P #1.#2.#3.#4.% {% \expandafter\XINT_split_fromleft_a - \the\numexpr\xint_c_vii-#1.#3\xint_bye2345678\xint_bye.% + \the\numexpr\xint_c_vii-#1.#4\xint_bye2345678\xint_bye.#3% }% -\def\XINT_pfloat_Ps #1.#2.#3.% +\def\XINT_pfloat_Ps #1.#2.#3.#4.% {% - \expanded{ #3% + \expanded{ #4% \romannumeral\xintreplicate{#1+\xint_c_i-#2}{0}\xintPFloatIntSuffix}% }% \def\xintFloatToDecimal {\romannumeral0\xintfloattodecimal }% |