diff options
author | Karl Berry <karl@freefriends.org> | 2018-03-01 23:29:17 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-03-01 23:29:17 +0000 |
commit | 493a842303af8f78cfdf49c540923b69782df718 (patch) | |
tree | 088a42c3823e194afb55622efa69f3517f74ef08 /Master/texmf-dist/tex/generic/xint/xintfrac.sty | |
parent | a5fb18d1900916f93730e03f6a4d5274b57b53f5 (diff) |
xint (1mar18)
git-svn-id: svn://tug.org/texlive/trunk@46774 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xintfrac.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintfrac.sty | 269 |
1 files changed, 196 insertions, 73 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty index e7181fc048a..8a5fec10550 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.2q 2018/02/06 +%% The xint bundle 1.3 2018/03/01 %% Copyright (C) 2013-2018 by Jean-Francois Burnol %% xintfrac: Expandable operations on fractions %% --------------------------------------------------------------- @@ -39,6 +39,7 @@ \let\z\endgroup \expandafter\let\expandafter\x\csname ver@xintfrac.sty\endcsname \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname + \expandafter\let\expandafter\ww\csname ver@xintgcd.sty\endcsname \expandafter \ifx\csname PackageInfo\endcsname\relax \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}% @@ -52,14 +53,18 @@ \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}% + \def\z{\endgroup\input xint.sty\relax\input xintgcd.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}}% + \def\z{\endgroup\RequirePackage{xint}\RequirePackage{xintgcd}}% + \else + \ifx\ww\relax + \def\z{\endgroup\RequirePackage{xintgcd}}% + \fi \fi \else \aftergroup\endinput % xintfrac already loaded. @@ -70,31 +75,119 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xintfrac}% - [2018/02/06 1.2q Expandable operations on fractions (JFB)]% -\def\xintSgn {\romannumeral0\xintsgn }% deprecated from xintcore -\def\xintCmp {\romannumeral0\xintcmp }% deprecated from xintcore -\def\xintEq {\romannumeral0\xinteq }% deprecated from xint -\def\xintNeq #1#2% renamed into \xintNotEq - {\romannumeral0\XINT_signaldeprecated{xintfrac}{xintNeq}\xintifeq {#1}{#2}{0}{1}}% -\def\xintNotEq #1#2{\romannumeral0\xintifeq {#1}{#2}{0}{1}}% -\def\xintGt {\romannumeral0\xintgt }% + [2018/03/01 1.3 Expandable operations on fractions (JFB)]% +\def\xintEq {\romannumeral0\xinteq }% +\def\xinteq #1#2{\xintifeq{#1}{#2}{1}{0}}% +\def\xintNotEq#1#2{\romannumeral0\xintifeq {#1}{#2}{0}{1}}% +\def\xintGt {\romannumeral0\xintgt }% +\def\xintgt #1#2{\xintifgt{#1}{#2}{1}{0}}% \def\xintLt {\romannumeral0\xintlt }% +\def\xintlt #1#2{\xintiflt{#1}{#2}{1}{0}}% \def\xintGtorEq #1#2{\romannumeral0\xintiflt {#1}{#2}{0}{1}}% \def\xintLtorEq #1#2{\romannumeral0\xintifgt {#1}{#2}{0}{1}}% \def\xintIsZero {\romannumeral0\xintiszero }% +\def\xintiszero #1{\if0\xintSgn{#1}\xint_afterfi{ 1}\else\xint_afterfi{ 0}\fi}% \def\xintIsNotZero{\romannumeral0\xintisnotzero }% +\def\xintisnotzero + #1{\if0\xintSgn{#1}\xint_afterfi{ 0}\else\xint_afterfi{ 1}\fi}% \def\xintIsOne {\romannumeral0\xintisone }% +\def\xintisone #1{\expandafter\XINT_isone\romannumeral0\xintnum{#1}XY}% \def\xintOdd {\romannumeral0\xintodd }% +\def\xintodd #1% +{% + \ifodd\xintLDg{\xintNum{#1}} %<- intentional space + \xint_afterfi{ 1}% + \else + \xint_afterfi{ 0}% + \fi +}% \def\xintEven {\romannumeral0\xinteven }% +\def\xinteven #1% +{% + \ifodd\xintLDg{\xintNum{#1}} %<- intentional space + \xint_afterfi{ 0}% + \else + \xint_afterfi{ 1}% + \fi +}% \def\xintifSgn{\romannumeral0\xintifsgn }% +\def\xintifsgn #1% +{% + \ifcase \xintSgn{#1} + \expandafter\xint_secondofthree_thenstop + \or\expandafter\xint_thirdofthree_thenstop + \else\expandafter\xint_firstofthree_thenstop + \fi +}% \def\xintifCmp{\romannumeral0\xintifcmp }% +\def\xintifcmp #1#2% +{% + \ifcase\xintCmp {#1}{#2} + \expandafter\xint_secondofthree_thenstop + \or\expandafter\xint_thirdofthree_thenstop + \else\expandafter\xint_firstofthree_thenstop + \fi +}% \def\xintifEq {\romannumeral0\xintifeq }% +\def\xintifeq #1#2% +{% + \if0\xintCmp{#1}{#2}% + \expandafter\xint_firstoftwo_thenstop + \else\expandafter\xint_secondoftwo_thenstop + \fi +}% \def\xintifGt {\romannumeral0\xintifgt }% +\def\xintifgt #1#2% +{% + \if1\xintCmp{#1}{#2}% + \expandafter\xint_firstoftwo_thenstop + \else\expandafter\xint_secondoftwo_thenstop + \fi +}% \def\xintifLt {\romannumeral0\xintiflt }% +\def\xintiflt #1#2% +{% + \ifnum\xintCmp{#1}{#2}<\xint_c_ + \expandafter\xint_firstoftwo_thenstop + \else \expandafter\xint_secondoftwo_thenstop + \fi +}% \def\xintifZero {\romannumeral0\xintifzero }% +\def\xintifzero #1% +{% + \if0\xintSgn{#1}% + \expandafter\xint_firstoftwo_thenstop + \else + \expandafter\xint_secondoftwo_thenstop + \fi +}% \def\xintifNotZero{\romannumeral0\xintifnotzero }% +\def\xintifnotzero #1% +{% + \if0\xintSgn{#1}% + \expandafter\xint_secondoftwo_thenstop + \else + \expandafter\xint_firstoftwo_thenstop + \fi +}% \def\xintifOne {\romannumeral0\xintifone }% +\def\xintifone #1% +{% + \if1\xintIsOne{#1}% + \expandafter\xint_firstoftwo_thenstop + \else + \expandafter\xint_secondoftwo_thenstop + \fi +}% \def\xintifOdd {\romannumeral0\xintifodd }% +\def\xintifodd #1% +{% + \if\xintOdd{#1}1% + \expandafter\xint_firstoftwo_thenstop + \else + \expandafter\xint_secondoftwo_thenstop + \fi +}% \def\XINT_cntSgnFork #1% {% \ifcase #1\expandafter\xint_secondofthree @@ -412,6 +505,24 @@ \def\XINT_rawz_Ba -#1.#2#3{\expandafter\XINT_rawz_Bb \expandafter{\romannumeral0\XINT_dsx_addzeros{#1}#3;}{#2}}% \def\XINT_rawz_Bb #1#2{ #2/#1}% +\def\xintDecToString{\romannumeral0\xintdectostring}% +\def\xintdectostring#1{\expandafter\XINT_dectostr\romannumeral0\xintraw{#1}}% +\def\XINT_dectostr #1/#2[#3]{\xintiiifZero {#1}% + \XINT_dectostr_z + {\if1\XINT_isOne{#2}\expandafter\XINT_dectostr_a + \else\expandafter\XINT_dectostr_b + \fi}% + #1/#2[#3]% +}% +\def\XINT_dectostr_z#1[#2]{ 0}% +\def\XINT_dectostr_a#1/#2[#3]{% + \ifnum#3<\xint_c_\xint_dothis{\xinttrunc{-#3}{#1[#3]}}\fi + \xint_orthat{\xintiie{#1}{#3}}% +}% +\def\XINT_dectostr_b#1/#2[#3]{% just to handle this somehow + \ifnum#3<\xint_c_\xint_dothis{\xinttrunc{-#3}{#1[#3]}/#2}\fi + \xint_orthat{\xintiie{#1}{#3}/#2}% +}% \def\xintFloor {\romannumeral0\xintfloor }% \def\xintfloor #1% devrais-je faire \xintREZ? {\expandafter\XINT_ifloor \romannumeral0\xintrawwithzeros {#1}./1[0]}% @@ -599,10 +710,15 @@ }% \def\XINT_e_end #1.#2#3{ #2/#3[#1]}% \def\xintIrr {\romannumeral0\xintirr }% +\def\xintPIrr{\romannumeral0\xintpirr }% \def\xintirr #1% {% \expandafter\XINT_irr_start\romannumeral0\xintrawwithzeros {#1}\Z }% +\def\xintpirr #1% +{% + \expandafter\XINT_pirr_start\romannumeral0\xintraw{#1}% +}% \def\XINT_irr_start #1#2/#3\Z {% \if0\XINT_isOne {#3}% @@ -616,6 +732,19 @@ \fi #2\Z {#3}% }% +\def\XINT_pirr_start #1#2/#3[% +{% + \if0\XINT_isOne {#3}% + \xint_afterfi + {\xint_UDsignfork + #1\XINT_irr_negative + -{\XINT_irr_nonneg #1}% + \krof}% + \else + \xint_afterfi{\XINT_irr_denomisone #1}% + \fi + #2\Z {#3}[% +}% \def\XINT_irr_denomisone #1\Z #2{ #1/1}% changed in 1.08 \def\XINT_irr_negative #1\Z #2{\XINT_irr_D #1\Z #2\Z -}% \def\XINT_irr_nonneg #1\Z #2{\XINT_irr_D #1\Z #2\Z \space}% @@ -1201,65 +1330,40 @@ {\romannumeral0\XINT_dsx_addzeros {#1}#4;}% {#5}{#7}{#6}[#3]% }% +\def\XINT_fadd_iszero #1[#2]{ 0/1[0]}% ou [#2] originel? \def\XINT_fadd_C #1#2#3% {% - \ifcase\romannumeral0\xintiicmp {#2}{#3} %<- intentional space here. - \expandafter\XINT_fadd_eq - \or\expandafter\XINT_fadd_D - \else\expandafter\XINT_fadd_Da - \fi {#2}{#3}{#1}% -}% -\def\XINT_fadd_eq #1#2#3#4%#5% -{% - \expandafter\XINT_fadd_G - \romannumeral0\xintiiadd {#3}{#4}/#1%[#5]% -}% -\def\XINT_fadd_D #1#2% -{% - \expandafter\XINT_fadd_E\romannumeral0\XINT_div_prepare {#2}{#1}{#1}{#2}% + \expandafter\XINT_fadd_D_b + \romannumeral0\XINT_div_prepare{#2}{#3}{#2}{#2}{#3}{#1}% }% -\def\XINT_fadd_E #1#2% +\def\XINT_fadd_D_a #1#2% {% - \if0\XINT_Sgn #2\xint: - \expandafter\XINT_fadd_F - \else\expandafter\XINT_fadd_K - \fi {#1}% + \expandafter\XINT_fadd_D_b + \romannumeral0\XINT_div_prepare {#1}{#2}{#1}% }% -\def\XINT_fadd_F #1#2#3#4#5%#6% +\def\XINT_fadd_D_b #1#2{\XINT_fadd_D_c #2\Z}% +\def\XINT_fadd_D_c #1#2\Z {% - \expandafter\XINT_fadd_G - \romannumeral0\xintiiadd {\xintiiMul {#5}{#1}}{#4}/#2%[#6]% + \xint_gob_til_zero #1\XINT_fadd_D_exit0\XINT_fadd_D_a {#1#2}% }% -\def\XINT_fadd_Da #1#2% +\def\XINT_fadd_D_exit0\XINT_fadd_D_a #1#2#3% {% - \expandafter\XINT_fadd_Ea\romannumeral0\XINT_div_prepare {#1}{#2}{#1}{#2}% + \expandafter\XINT_fadd_E + \romannumeral0\xintiiquo {#3}{#2}.{#2}% }% -\def\XINT_fadd_Ea #1#2% +\def\XINT_fadd_E #1.#2#3% {% - \if0\XINT_Sgn #2\xint: - \expandafter\XINT_fadd_Fa - \else\expandafter\XINT_fadd_K - \fi {#1}% + \expandafter\XINT_fadd_F + \romannumeral0\xintiimul{#1}{#3}.{\xintiiQuo{#3}{#2}}{#1}% }% -\def\XINT_fadd_Fa #1#2#3#4#5%#6% +\def\XINT_fadd_F #1.#2#3#4#5% {% - \expandafter\XINT_fadd_G - \romannumeral0\xintiiadd {\xintiiMul {#4}{#1}}{#5}/#3%[#6]% + \expandafter\XINT_fadd_G + \romannumeral0\xintiiadd{\xintiiMul{#2}{#4}}{\xintiiMul{#3}{#5}}/#1% }% \def\XINT_fadd_G #1{% \def\XINT_fadd_G ##1{\if0##1\expandafter\XINT_fadd_iszero\fi#1##1}% }\XINT_fadd_G{ }% -\def\XINT_fadd_K #1#2#3#4#5% -{% - \expandafter\XINT_fadd_L - \romannumeral0\xintiiadd {\xintiiMul {#2}{#5}}{\xintiiMul {#3}{#4}}.% - {{#2}{#3}}% -}% -\def\XINT_fadd_L #1{\if0#1\expandafter\XINT_fadd_iszero\fi\XINT_fadd_M #1}% -\def\XINT_fadd_M #1.#2{\expandafter\XINT_fadd_N \expandafter - {\romannumeral0\xintiimul #2}{#1}}% -\def\XINT_fadd_N #1#2{ #2/#1}% -\def\XINT_fadd_iszero #1[#2]{ 0/1[0]}% ou [#2] originel? \def\xintSub {\romannumeral0\xintsub }% \def\xintsub #1{\expandafter\XINT_fsub\romannumeral0\xintraw {#1}}% \def\XINT_fsub #1{\xint_gob_til_zero #1\XINT_fsub_Azero 0\XINT_fsub_a #1}% @@ -1361,14 +1465,8 @@ \expandafter\XINT_fpow_pos_B\expandafter {#3}{#1}{#2}% }% \def\XINT_fpow_pos_B #1#2{\XINT_outfrac {#2}{#1}}% -\def\xintifac #1{\expandafter\XINT_fac_fork\the\numexpr\xintNum{#1}.}% \def\xintFac {\romannumeral0\xintfac}% \def\xintfac #1{\expandafter\XINT_fac_fork\the\numexpr\xintNum{#1}.[0]}% -\def\xintibinomial #1#2% -{% - \expandafter\XINT_binom_pre - \the\numexpr\xintNum{#1}\expandafter.\the\numexpr\xintNum{#2}.% -}% \def\xintBinomial {\romannumeral0\xintbinomial}% \def\xintbinomial #1#2% {% @@ -1461,10 +1559,10 @@ \def\XINT_modtrunc_pos #1#2/#3[#4]#5/#6[#7].% {% \expandafter\XINT_modtrunc_pos_a - \the\numexpr\ifnum#7>#4 #4\else #7\fi\expandafter.\expandafter - {\romannumeral0\xintiimul {#6}{#3}}% - {\xintiiE{\xintiiMul {#1#5}{#3}}{#7-#4}}% - {\xintiiE{\xintiiMul {#2}{#6}}{#4-#7}}% + \the\numexpr\ifnum#7>#4 #4\else #7\fi\expandafter.% + \romannumeral0\expandafter\XINT_mod_D_b + \romannumeral0\XINT_div_prepare{#3}{#6}{#3}{#3}{#6}% + {#1#5}{#7-#4}{#2}{#4-#7}% }% \def\XINT_modtrunc_pos_a #1.#2#3#4{\xintiirem {#3}{#4}/#2[#1]}% \def\xintDivMod {\romannumeral0\xintdivmod }% @@ -1500,10 +1598,10 @@ \def\XINT_divmod_bpos #1#2/#3[#4]#5/#6[#7].% {% \expandafter\XINT_divmod_bpos_a - \the\numexpr\ifnum#7>#4 #4\else #7\fi\expandafter.\expandafter - {\romannumeral0\xintiimul {#6}{#3}}% - {\xintiiE{\xintiiMul {#1#5}{#3}}{#7-#4}}% - {\xintiiE{\xintiiMul {#2}{#6}}{#4-#7}}% + \the\numexpr\ifnum#7>#4 #4\else #7\fi\expandafter.% + \romannumeral0\expandafter\XINT_mod_D_b + \romannumeral0\XINT_div_prepare{#3}{#6}{#3}{#3}{#6}% + {#1#5}{#7-#4}{#2}{#4-#7}% }% \def\XINT_divmod_bpos_a #1.#2#3#4% {% @@ -1534,10 +1632,35 @@ \def\XINT_mod_bpos #1#2/#3[#4]#5/#6[#7].% {% \expandafter\XINT_mod_bpos_a - \the\numexpr\ifnum#7>#4 #4\else #7\fi\expandafter.\expandafter - {\romannumeral0\xintiimul {#6}{#3}}% - {\xintiiE{\xintiiMul {#1#5}{#3}}{#7-#4}}% - {\xintiiE{\xintiiMul {#2}{#6}}{#4-#7}}% + \the\numexpr\ifnum#7>#4 #4\else #7\fi\expandafter.% + \romannumeral0\expandafter\XINT_mod_D_b + \romannumeral0\XINT_div_prepare{#3}{#6}{#3}{#3}{#6}% + {#1#5}{#7-#4}{#2}{#4-#7}% +}% +\def\XINT_mod_D_a #1#2% +{% + \expandafter\XINT_mod_D_b + \romannumeral0\XINT_div_prepare {#1}{#2}{#1}% +}% +\def\XINT_mod_D_b #1#2{\XINT_mod_D_c #2\Z}% +\def\XINT_mod_D_c #1#2\Z +{% + \xint_gob_til_zero #1\XINT_mod_D_exit0\XINT_mod_D_a {#1#2}% +}% +\def\XINT_mod_D_exit0\XINT_mod_D_a #1#2#3% +{% + \expandafter\XINT_mod_E + \romannumeral0\xintiiquo {#3}{#2}.{#2}% +}% +\def\XINT_mod_E #1.#2#3% +{% + \expandafter\XINT_mod_F + \romannumeral0\xintiimul{#1}{#3}.{\xintiiQuo{#3}{#2}}{#1}% +}% +\def\XINT_mod_F #1.#2#3#4#5#6#7% +{% + {#1}{\xintiiE{\xintiiMul{#4}{#3}}{#5}}% + {\xintiiE{\xintiiMul{#6}{#2}}{#7}}% }% \def\XINT_mod_bpos_a #1.#2#3#4{\xintiirem {#3}{#4}/#2[#1]}% \def\xintIsOne {\romannumeral0\xintisone }% @@ -3160,7 +3283,7 @@ {Usage of deprecated macros!} {This deprecated macro from xintfrac.sty has been detected:\MessageBreak \string\xintNeq\space(use \string\xintNotEq\space or xint's \string\xintiiNotEq!)\MessageBreak -It will get removed at some future release.}}% +This is impossible as it has been removed at 1.3!}}% {% no deprecated macro used (at top level...) }% }\fi\fi |