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.sty288
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%
{%