summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xint/xintfrac.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xintfrac.sty')
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintfrac.sty241
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 }%