diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xintfrac.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintfrac.sty | 288 |
1 files changed, 215 insertions, 73 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty index 895d408430b..c4d8d8aaae5 100644 --- a/Master/texmf-dist/tex/generic/xint/xintfrac.sty +++ b/Master/texmf-dist/tex/generic/xint/xintfrac.sty @@ -22,7 +22,7 @@ %% in the same archive or directory.) %% %%---------------------------------------------------------------- -%% The xint bundle (version 1.03 of April 14, 2013) +%% The xint bundle (version 1.04 of April 25, 2013) %% xintfrac: Expandable operations on fractions %% Copyright (C) 2013 by Jean-Francois Burnol %%---------------------------------------------------------------- @@ -164,7 +164,7 @@ \fi \expandafter\x\csname ver@xintfrac.sty\endcsname \ProvidesPackage{xintfrac}% - [2013/04/14 v1.03 Expandable operations on fractions (jfB)]% + [2013/04/25 v1.04 Expandable operations on fractions (jfB)]% \def\xintLen {\romannumeral0\xintlen }% \def\xintlen #1% {% @@ -205,6 +205,26 @@ {% \expandafter\XINT@outfrac@P\expandafter {#2}{#1}% }% +\def\xintRaw {\romannumeral0\xintraw }% +\def\xintraw +{% + \expandafter\XINT@raw\romannumeral0\XINT@infrac +}% +\def\XINT@raw #1% +{% + \ifcase\XINT@Sgn {#1} + \expandafter\XINT@raw@Ba + \or + \expandafter\XINT@raw@A + \else + \expandafter\XINT@raw@Ba + \fi + {#1}% +}% +\def\XINT@raw@A #1#2#3{\xint@dsh {#2}{-#1}/#3}% +\def\XINT@raw@Ba #1#2#3{\expandafter\XINT@raw@Bb + \expandafter{\romannumeral0\xint@dsh {#3}{#1}}{#2}}% +\def\XINT@raw@Bb #1#2{ #2/#1}% \def\xintNumerator {\romannumeral0\xintnumerator }% \def\xintnumerator {% @@ -268,6 +288,30 @@ \frac {#2}{#3}#1% }% \def\XINT@@frac@E \fi #1#2#3#4{\fi \space #3\cdot }% +\def\xintSignedFrac {\romannumeral0\xintsignedfrac }% +\def\xintsignedfrac #1% +{% + \expandafter\XINT@sgnfrac@a\romannumeral0\XINT@infrac {#1}% +}% +\def\XINT@sgnfrac@a #1#2% +{% + \XINT@sgnfrac@b #2\Z {#1}% +}% +\def\XINT@sgnfrac@b #1% +{% + \xint@UDsignfork + #1\dummy \XINT@sgnfrac@N + -\dummy {\XINT@sgnfrac@P #1}% + \xint@UDkrof +}% +\def\XINT@sgnfrac@P #1\Z #2% +{% + \XINT@@frac@A {#2}{#1}% +}% +\def\XINT@sgnfrac@N +{% + \expandafter\xint@minus@andstop\romannumeral0\XINT@sgnfrac@P +}% \def\xintFwOver {\romannumeral0\xintfwover }% \def\xintfwover #1% {% @@ -283,7 +327,7 @@ \ifcase\XINT@isOne {#5} \xint@afterfi { {#4\over #5}}% \or - \xint@afterfi { #4\cdot }% + \xint@afterfi { #4}% \fi }% \def\XINT@fwover@D #1#2#3% @@ -295,38 +339,72 @@ \fi #1% }% +\def\xintSignedFwOver {\romannumeral0\xintsignedfwover }% +\def\xintsignedfwover #1% +{% + \expandafter\XINT@sgnfwover@a\romannumeral0\XINT@infrac {#1}% +}% +\def\XINT@sgnfwover@a #1#2% +{% + \XINT@sgnfwover@b #2\Z {#1}% +}% +\def\XINT@sgnfwover@b #1% +{% + \xint@UDsignfork + #1\dummy \XINT@sgnfwover@N + -\dummy {\XINT@sgnfwover@P #1}% + \xint@UDkrof +}% +\def\XINT@sgnfwover@P #1\Z #2% +{% + \XINT@fwover@A {#2}{#1}% +}% +\def\XINT@sgnfwover@N +{% + \expandafter\xint@minus@andstop\romannumeral0\XINT@sgnfwover@P +}% \def\xintSum {\romannumeral0\xintsum }% \def\xintsum #1{\xintsumexpr #1\relax }% \def\xintSumExpr {\romannumeral0\xintsumexpr }% \def\xintsumexpr {\expandafter\expandafter\expandafter\XINT@fsumexpr }% -\def\XINT@fsumexpr {\XINT@fsum@loop {0}}% -\def\XINT@fsum@loop #1#2% +\def\XINT@fsumexpr {\XINT@fsum@loop@a {0[0]}}% +\def\XINT@fsum@loop@a #1#2% +{% + \expandafter\expandafter\expandafter + \XINT@fsum@loop@b #2\Z {#1}% +}% +\def\XINT@fsum@loop@b #1% {% - \xint@relax #2\XINT@fsum@finished\relax - \expandafter\XINT@fsum@loop\expandafter - {\romannumeral0\xintadd {#1}{#2}}% + \xint@relax #1\XINT@fsum@finished\relax + \XINT@fsum@loop@c #1% }% -\def\XINT@fsum@finished #1#2#3#4#5% +\def\XINT@fsum@loop@c #1\Z #2% {% - \XINT@fsum@finished@ #5% + \expandafter\XINT@fsum@loop@a\expandafter + {\romannumeral0\xintadd {#2}{#1}}% }% -\def\XINT@fsum@finished@ #1#2#3#4#5{ #4}% +\def\XINT@fsum@finished #1\Z #2{ #2}% \def\xintPrd {\romannumeral0\xintprd }% \def\xintprd #1{\xintproductexpr #1\relax }% \def\xintProductExpr {\romannumeral0\xintproductexpr }% \def\xintproductexpr{\expandafter\expandafter\expandafter\XINT@fproductexpr }% -\def\XINT@fproductexpr {\XINT@fprod@loop {1}}% -\def\XINT@fprod@loop #1#2% +\def\XINT@fproductexpr {\XINT@fprod@loop@a {1[0]}}% +\def\XINT@fprod@loop@a #1#2% {% - \xint@relax #2\XINT@fprod@finished\relax - \expandafter\XINT@fprod@loop\expandafter - {\romannumeral0\xintmul {#2}{#1}}% + \expandafter\expandafter\expandafter + \XINT@fprod@loop@b #2\Z {#1}% }% -\def\XINT@fprod@finished #1#2#3#4#5% +\def\XINT@fprod@loop@b #1% {% - \XINT@fprod@finished@ #5% + \xint@relax #1\XINT@fprod@finished\relax + \XINT@fprod@loop@c #1% }% -\def\XINT@fprod@finished@ #1#2#3#4#5{ #5}% +\def\XINT@fprod@loop@c #1\Z #2% +{% + \expandafter\XINT@fprod@loop@a\expandafter + {\romannumeral0\xintmul {#1}{#2}}% +}% +\def\XINT@fprod@finished #1\Z #2{ #2}% \def\XINT@inFrac {\romannumeral0\XINT@infrac }% \def\XINT@infrac #1% {% @@ -556,7 +634,14 @@ {\the\numexpr #3+#4-#2}{#1}{#5}% }% \def\XINT@rez@E #1#2#3{ #3/#2[#1]}% -\def\XINT@@bts #1#2#3% +\def\xintIrr {\romannumeral0\xintirr }% +\def\xintirr +{% + \expandafter\XINT@irr@putsign + \romannumeral0\expandafter\XINT@irr + \romannumeral0\XINT@infrac +}% +\def\XINT@irr@putsign #1#2#3% {% \ifcase\XINT@isOne {#2} \xint@afterfi {#3#1/#2}% @@ -564,13 +649,6 @@ \xint@afterfi {#3#1}% \fi }% -\def\xintIrr {\romannumeral0\xintirr }% -\def\xintirr -{% - \expandafter\XINT@@bts - \romannumeral0\expandafter\XINT@irr - \romannumeral0\XINT@infrac -}% \def\XINT@irr #1% {% \ifcase\XINT@Sgn {#1} @@ -584,28 +662,25 @@ }% \def\XINT@irr@A #1#2% {% - \expandafter \XINT@irr@AC \expandafter - {\romannumeral0\xint@dsh {#2}{-#1}}% + \expandafter \XINT@irr@C + \romannumeral0\xint@dsh {#2}{-#1}\Z }% -\def\XINT@irr@AC #1#2{\XINT@irr@C #2\Z #1\Z }% \def\XINT@irr@B #1#2#3% {% - \expandafter \XINT@irr@C \romannumeral0\xint@dsh {#3}{#1}\Z #2\Z + \expandafter \XINT@irr@BC \expandafter + {\romannumeral0\xint@dsh {#3}{#1}}{#2}% }% -\def\XINT@irr@C #1#2\Z #3#4\Z +\def\XINT@irr@BC #1#2{\XINT@irr@C #2\Z {#1}}% +\def\XINT@irr@C #1#2\Z {% - \xint@UDsignsfork - #1#3\dummy \XINT@irr@minusminus - #1-\dummy \XINT@irr@minusplus - #3-\dummy \XINT@irr@plusminus - --\dummy \XINT@irr@plusplus + \xint@UDsignfork + #1\dummy \XINT@irr@negative + -\dummy {\XINT@irr@nonneg #1}% \xint@UDkrof - {#4}{#2}#3#1% + #2\Z }% -\def\XINT@irr@minusminus #1#2#3#4{\XINT@irr@D #1\Z #2\Z \space}% -\def\XINT@irr@minusplus #1#2#3#4{\XINT@irr@D #3#1\Z #2\Z \XINT@opp}% -\def\XINT@irr@plusminus #1#2#3#4{\XINT@irr@D #1\Z #4#2\Z \XINT@opp}% -\def\XINT@irr@plusplus #1#2#3#4{\XINT@irr@D #3#1\Z #4#2\Z \space}% +\def\XINT@irr@negative #1\Z #2{\XINT@irr@D #1\Z #2\Z \XINT@opp}% +\def\XINT@irr@nonneg #1\Z #2{\XINT@irr@D #1\Z #2\Z \space}% \def\XINT@irr@D #1#2\Z #3#4\Z {% \xint@UDzerosfork @@ -620,7 +695,7 @@ \space 00}% \def\XINT@irr@divisionbyzero #1#2#3#4{\expandafter\xintError:DivisionByZero \space {#2}0}% -\def\XINT@irr@zero #1#2#3#4{ 0/1}% +\def\XINT@irr@zero #1#2#3#4{ 01}% \def\XINT@irr@nonzero@checkifone #1% {% \ifcase\XINT@isOne {#1} @@ -635,9 +710,9 @@ \expandafter\XINT@irr@loop@d \romannumeral0\XINT@div@prepare {#1}{#2}{#1}% }% -\def\XINT@irr@loop@d #1#2#3% +\def\XINT@irr@loop@d #1#2% {% - \XINT@irr@loop@e #2\Z {#3}% + \XINT@irr@loop@e #2\Z }% \def\XINT@irr@loop@e #1#2\Z {% @@ -656,45 +731,42 @@ \def\xintJrr {\romannumeral0\xintjrr }% \def\xintjrr {% - \expandafter\XINT@@bts - \romannumeral0\expandafter\XINT@jrr@start - \romannumeral0\xintrez + \expandafter\XINT@irr@putsign + \romannumeral0\expandafter\XINT@jrr + \romannumeral0\XINT@infrac }% -\def\XINT@jrr@start #1/#2[#3]% +\def\XINT@jrr #1% {% - \ifcase\XINT@Sgn {#3} + \ifcase\XINT@Sgn {#1} \expandafter\XINT@jrr@B \or \expandafter\XINT@jrr@A \else \expandafter\XINT@jrr@B \fi - {#3}{#1}{#2}% + {#1}% }% \def\XINT@jrr@A #1#2% {% - \expandafter \XINT@jrr@AC \expandafter - {\romannumeral0\xint@dsh {#2}{-#1}}% + \expandafter \XINT@jrr@C + \romannumeral0\xint@dsh {#2}{-#1}\Z }% -\def\XINT@jrr@AC #1#2{\XINT@jrr@C #2\Z #1\Z }% \def\XINT@jrr@B #1#2#3% {% - \expandafter \XINT@jrr@C \romannumeral0\xint@dsh {#3}{#1}\Z #2\Z + \expandafter \XINT@jrr@BC \expandafter + {\romannumeral0\xint@dsh {#3}{#1}}{#2}% }% -\def\XINT@jrr@C #1#2\Z #3#4\Z +\def\XINT@jrr@BC #1#2{\XINT@jrr@C #2\Z {#1}}% +\def\XINT@jrr@C #1#2\Z {% - \xint@UDsignsfork - #1#3\dummy \XINT@jrr@minusminus - #1-\dummy \XINT@jrr@minusplus - #3-\dummy \XINT@jrr@plusminus - --\dummy \XINT@jrr@plusplus + \xint@UDsignfork + #1\dummy \XINT@jrr@negative + -\dummy {\XINT@jrr@nonneg #1}% \xint@UDkrof - {#4}{#2}#3#1% + #2\Z }% -\def\XINT@jrr@minusminus #1#2#3#4{\XINT@jrr@D #1\Z #2\Z \space }% -\def\XINT@jrr@minusplus #1#2#3#4{\XINT@jrr@D #3#1\Z #2\Z \XINT@opp }% -\def\XINT@jrr@plusminus #1#2#3#4{\XINT@jrr@D #1\Z #4#2\Z \XINT@opp }% -\def\XINT@jrr@plusplus #1#2#3#4{\XINT@jrr@D #3#1\Z #4#2\Z \space }% +\def\XINT@jrr@negative #1\Z #2{\XINT@jrr@D #1\Z #2\Z \XINT@opp}% +\def\XINT@jrr@nonneg #1\Z #2{\XINT@jrr@D #1\Z #2\Z \space}% \def\XINT@jrr@D #1#2\Z #3#4\Z {% \xint@UDzerosfork @@ -709,7 +781,7 @@ \space 00}% \def\XINT@jrr@divisionbyzero #1#2#3#4#5#6{\expandafter\xintError:DivisionByZero \space {#2}0}% -\def\XINT@jrr@zero #1#2#3#4#5#6{ 0/1}% +\def\XINT@jrr@zero #1#2#3#4#5#6{ 01}% \def\XINT@jrr@nonzero@checkifone #1% {% \ifcase\XINT@isOne {#1} @@ -753,11 +825,11 @@ \def\xinttrunc #1% {% \expandafter\expandafter\expandafter - \xint@trunc + \XINT@trunc \expandafter\expandafter\expandafter {#1}% }% -\def\xint@trunc #1#2% +\def\XINT@trunc #1#2% {% \expandafter\XINT@trunc@G \romannumeral0\expandafter\XINT@trunc@A @@ -766,11 +838,11 @@ \def\xintitrunc #1% {% \expandafter\expandafter\expandafter - \xint@itrunc + \XINT@itrunc \expandafter\expandafter\expandafter {#1}% }% -\def\xint@itrunc #1#2% +\def\XINT@itrunc #1#2% {% \expandafter\XINT@itrunc@G \romannumeral0\expandafter\XINT@trunc@A @@ -822,9 +894,9 @@ \def\XINT@trunc@minusplus #1#2#3{\xintquo {#1#2}{#3}\Z \xint@minus@andstop}% \def\XINT@trunc@plusminus #1#2#3{\xintquo {#2}{#1#3}\Z \xint@minus@andstop}% \def\XINT@trunc@plusplus #1#2#3#4{\xintquo {#1#3}{#2#4}\Z \space}% -\def\XINT@itrunc@G #1\Z #2#3% +\def\XINT@itrunc@G #1#2\Z #3#4% {% - \xint@zero #2\XINT@trunc@zero 0\xint@firstoftwo {#2#1}0% + \xint@zero #1\XINT@trunc@zero 0\xint@firstoftwo {#3#1#2}0% }% \def\XINT@trunc@G #1\Z #2#3% {% @@ -854,6 +926,76 @@ \expandafter #3\expandafter0\expandafter.% \romannumeral0\XINT@dsx@zeroloop {#1}\Z {}#2% }% +\def\xintRound {\romannumeral0\xintround }% +\def\xintiRound {\romannumeral0\xintiround }% +\def\xintround #1% +{% + \expandafter\expandafter\expandafter + \XINT@round + \expandafter\expandafter\expandafter + {#1}% +}% +\def\XINT@round +{% + \expandafter\XINT@trunc@G\romannumeral0\XINT@round@A +}% +\def\xintiround #1% +{% + \expandafter\expandafter\expandafter + \XINT@iround + \expandafter\expandafter\expandafter + {#1}% +}% +\def\XINT@iround +{% + \expandafter\XINT@itrunc@G\romannumeral0\XINT@round@A +}% +\def\XINT@round@A #1#2% +{% + \expandafter\XINT@round@B + \romannumeral0\expandafter\XINT@trunc@A + \romannumeral0\XINT@infrac {#2}{\the\numexpr #1+1\relax}{#1}% +}% +\def\XINT@round@B #1\Z +{% + \expandafter\XINT@round@C + \romannumeral0\XINT@rord@main {}#1% + \xint@UNDEF + \xint@undef\xint@undef\xint@undef\xint@undef + \xint@undef\xint@undef\xint@undef\xint@undef + \xint@UNDEF + \Z +}% +\def\XINT@round@C #1% +{% + \ifnum #1<5 + \expandafter\XINT@round@Daa + \else + \expandafter\XINT@round@Dba + \fi +}% +\def\XINT@round@Daa #1% +{% + \xint@z #1\XINT@round@Daz\Z \XINT@round@Da #1% +}% +\def\XINT@round@Daz\Z \XINT@round@Da \Z { 0\Z }% +\def\XINT@round@Da #1\Z +{% + \XINT@rord@main {}#1% + \xint@UNDEF + \xint@undef\xint@undef\xint@undef\xint@undef + \xint@undef\xint@undef\xint@undef\xint@undef + \xint@UNDEF \Z +}% +\def\XINT@round@Dba #1% +{% + \xint@z #1\XINT@round@Dbz\Z \XINT@round@Db #1% +}% +\def\XINT@round@Dbz\Z \XINT@round@Db \Z { 1\Z }% +\def\XINT@round@Db #1\Z +{% + \XINT@addm@A 0{}1000\W\X\Y\Z #1000\W\X\Y\Z \Z +}% \def\xintMul {\romannumeral0\xintmul }% \def\xintmul #1% {% |