diff options
19 files changed, 978 insertions, 832 deletions
diff --git a/Master/texmf-dist/doc/generic/xint/CHANGES.html b/Master/texmf-dist/doc/generic/xint/CHANGES.html index b79fab4fb7b..60167b904dc 100644 --- a/Master/texmf-dist/doc/generic/xint/CHANGES.html +++ b/Master/texmf-dist/doc/generic/xint/CHANGES.html @@ -4,7 +4,7 @@ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta name="generator" content="pandoc" /> - <meta name="author" content="xint v1.1a" /> + <meta name="author" content="xint v1.1b" /> <title>CHANGE LOG</title> <style type="text/css">code{white-space: pre;}</style> <style type="text/css"> @@ -17,11 +17,12 @@ <body> <div id="header"> <h1 class="title">CHANGE LOG</h1> -<h2 class="author">xint v1.1a</h2> -<h3 class="date">2014/11/07 (doc 2015/03/07)</h3> +<h2 class="author">xint v1.1b</h2> +<h3 class="date">2015/08/31 (doc 2015/08/31)</h3> </div> <div id="TOC"> <ul> +<li><a href="#b-20150831"><code>1.1b (2015/08/31)</code></a></li> <li><a href="#a-20141107"><code>1.1a (2014/11/07)</code></a></li> <li><a href="#section"><code>1.1 (2014/10/28)</code></a></li> <li><a href="#n-20140401"><code>1.09n (2014/04/01)</code></a></li> @@ -50,10 +51,15 @@ <li><a href="#section-7"><code>1.0 (2013/03/28)</code></a></li> </ul> </div> -<pre><code>Source: xint.dtx (v1.1a 2014/11/07, doc of 2015/03/07) +<pre><code>Source: xint.dtx (v1.1b 2015/08/31, doc of 2015/08/31) Author: Jean-Francois Burnol Info: Expandable operations on big integers, decimals, fractions License: LPPL 1.3c or later</code></pre> +<h2 id="b-20150831"><code>1.1b (2015/08/31)</code></h2> +<ul> +<li><p>bugfix: some macros needed by the integer division routine from <strong>xintcore</strong> had been left in <strong>xint.sty</strong> since release <code>1.1</code>. This for example broke the <code>\xintGCD</code> from <strong>xintgcd</strong> if package <strong>xint</strong> was not loaded.</p></li> +<li><p>Slight enhancements to the documentation, particularly in the <code>Read this first</code> section.</p></li> +</ul> <h2 id="a-20141107"><code>1.1a (2014/11/07)</code></h2> <ul> <li><p>fixed a bug which prevented <code>\xintNewExpr</code> from producing correctly working macros from a comma separated replacement text.</p></li> @@ -83,11 +89,11 @@ License: LPPL 1.3c or later</code></pre> <li><p>the <code>add</code> and <code>mul</code> have a new syntax, old syntax is with <code>`+`</code> and <code>`*`</code> (left quotes mandatory), <code>sum</code> and <code>prd</code> are gone,</p></li> <li><p>no more special treatment for encountered brace pairs <code>{..}</code> by the number scanner, <code>a/b[N]</code> notation can be used without use of braces (the <code>N</code> will end up as is in a <code>\numexpr</code>, it is not parsed by the <code>\xintexpr</code>-ession scanner),</p></li> <li><p>although <code>&</code> and <code>|</code> are still available as Boolean operators the use of <code>&&</code> and <code>||</code> is strongly recommended. The single letter operators might be assigned some other meaning in later releases (bitwise operations, perhaps). Do not use them.</p></li> -<li><p>[this missing item added 2015/03/07] place holders for <code>\xintNewExpr</code> could be denoted <code>#1</code>, <code>#2</code>, ... or also, for special purposes <code>$1</code>, <code>$2</code>, ... Only the first form is now accepted and the special cases previously treated via the second form are now managed via a <code>protect(...)</code> function.</p></li> +<li><p>in earlier releases, place holders for <code>\xintNewExpr</code> could either be denoted <code>#1</code>, <code>#2</code>, ... or also <code>$1</code>, <code>$2</code>, ... Only the usual <code>#</code> form is now accepted and the special cases previously treated via the second form are now managed via a <code>protect(...)</code> function.</p></li> </ul> </dd> </dl> -<p>There are many novelties, most to be found in package <strong>xintexpr</strong>. But first the other changes.</p> +<p><strong>novelties :</strong></p> <ul> <li><p>new package <strong>xintcore</strong> has been split off <strong>xint</strong>. It contains the core arithmetic macros. It is loaded by package <strong>bnumexpr</strong>,</p></li> <li><p>neither <strong>xint</strong> nor <strong>xintfrac</strong> load <strong>xinttools</strong>. Only <strong>xintexpr</strong> does,</p></li> @@ -121,14 +127,12 @@ License: LPPL 1.3c or later</code></pre> <li><p>inside <code>seq</code>, <code>rseq</code>, <code>rrseq</code>, <code>iter</code>, possibility to use <code>omit</code>, <code>abort</code> and <code>break</code> to control termination,</p></li> <li><p><code>n++</code> potentially infinite index generation for <code>seq</code>, <code>rseq</code>, <code>rrseq</code>, and <code>iter</code>, it is advised to use <code>abort</code> or <code>break(..)</code> at some point,</p></li> <li><p>the <code>add</code>, <code>mul</code>, <code>seq</code>, ... are nestable,</p></li> -<li><p><code>\xintthecoords</code> converts a comma separated list of an even number of items to the format expected by the <code>TikZ</code> <code>coordinates</code> syntax,</p> -<ul> -<li>completely new version <code>\xintNewExpr</code>, <code>protect</code> function to handle external macros. The dollar sign <code>$</code> for place holders is not accepted anymore, only the standard macro parameter <code>#</code>. Not all constructs are compatible with <code>\xintNewExpr</code>.</li> -</ul></li> +<li><p><code>\xintthecoords</code> converts a comma separated list of an even number of items to the format expected by the <code>TikZ</code> <code>coordinates</code> syntax,</p></li> +<li><p>completely new version <code>\xintNewExpr</code>, <code>protect</code> function to handle external macros. The dollar sign <code>$</code> for place holders is not accepted anymore, only the standard macro parameter <code>#</code>. Not all constructs are compatible with <code>\xintNewExpr</code>.</p></li> </ul> <h2 id="n-20140401"><code>1.09n (2014/04/01)</code></h2> <ul> -<li><p>the user manual does not include by default the source code anymore: the <code>\NoSourceCode</code> toggle in file <code>xint.tex</code> has to be set to 0 before compilation to get source code inclusion.</p></li> +<li><p>the user manual does not include by default the source code anymore: the <code>\NoSourceCode</code> toggle in file <code>xint.tex</code> has to be set to 0 before compilation to get source code inclusion (later release <code>1.1</code> made source code available as <code>sourcexint.pdf</code>).</p></li> <li><p>bug fix (<strong>xinttools</strong>) in <code>\XINT_nthelt_finish</code> (this bug was introduced in <code>1.09i</code> of <code>2013/12/18</code> and showed up when the index <code>N</code> was larger than the number of elements of the list).</p></li> </ul> <h2 id="m-20140226"><code>1.09m (2014/02/26)</code></h2> diff --git a/Master/texmf-dist/doc/generic/xint/CHANGES.pdf b/Master/texmf-dist/doc/generic/xint/CHANGES.pdf Binary files differindex b122bcfe21a..966e9055f3c 100644 --- a/Master/texmf-dist/doc/generic/xint/CHANGES.pdf +++ b/Master/texmf-dist/doc/generic/xint/CHANGES.pdf diff --git a/Master/texmf-dist/doc/generic/xint/README b/Master/texmf-dist/doc/generic/xint/README index 2d425bfd7c5..59418b762cd 100644 --- a/Master/texmf-dist/doc/generic/xint/README +++ b/Master/texmf-dist/doc/generic/xint/README @@ -1,4 +1,4 @@ - Source: xint.dtx (v1.1a 2014/11/07, doc of 2015/03/07) + Source: xint.dtx (v1.1b 2015/08/31, doc of 2015/08/31) Author: Jean-Francois Burnol Info: Expandable operations on big integers, decimals, fractions License: LPPL 1.3c or later diff --git a/Master/texmf-dist/doc/generic/xint/README.html b/Master/texmf-dist/doc/generic/xint/README.html index efed4bfe899..0034daef4b0 100644 --- a/Master/texmf-dist/doc/generic/xint/README.html +++ b/Master/texmf-dist/doc/generic/xint/README.html @@ -4,7 +4,7 @@ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta name="generator" content="pandoc" /> - <meta name="author" content="xint v1.1a" /> + <meta name="author" content="xint v1.1b" /> <title>README</title> <style type="text/css">code{white-space: pre;}</style> <style type="text/css"> @@ -17,8 +17,8 @@ <body> <div id="header"> <h1 class="title">README</h1> -<h2 class="author">xint v1.1a</h2> -<h3 class="date">2014/11/07 (doc 2015/03/07)</h3> +<h2 class="author">xint v1.1b</h2> +<h3 class="date">2015/08/31 (doc 2015/08/31)</h3> </div> <div id="TOC"> <ul> @@ -35,7 +35,7 @@ <li><a href="#license">License</a></li> </ul> </div> -<pre><code>Source: xint.dtx (v1.1a 2014/11/07, doc of 2015/03/07) +<pre><code>Source: xint.dtx (v1.1b 2015/08/31, doc of 2015/08/31) Author: Jean-Francois Burnol Info: Expandable operations on big integers, decimals, fractions License: LPPL 1.3c or later</code></pre> diff --git a/Master/texmf-dist/doc/generic/xint/README.pdf b/Master/texmf-dist/doc/generic/xint/README.pdf Binary files differindex 850955643c4..2efbcf3ca87 100644 --- a/Master/texmf-dist/doc/generic/xint/README.pdf +++ b/Master/texmf-dist/doc/generic/xint/README.pdf diff --git a/Master/texmf-dist/doc/generic/xint/sourcexint.pdf b/Master/texmf-dist/doc/generic/xint/sourcexint.pdf Binary files differindex c2a7f84e198..542d590bb90 100644 --- a/Master/texmf-dist/doc/generic/xint/sourcexint.pdf +++ b/Master/texmf-dist/doc/generic/xint/sourcexint.pdf diff --git a/Master/texmf-dist/doc/generic/xint/xint.pdf b/Master/texmf-dist/doc/generic/xint/xint.pdf Binary files differindex ab9fb388df3..3531128c122 100644 --- a/Master/texmf-dist/doc/generic/xint/xint.pdf +++ b/Master/texmf-dist/doc/generic/xint/xint.pdf diff --git a/Master/texmf-dist/source/generic/xint/xint.dtx b/Master/texmf-dist/source/generic/xint/xint.dtx index c890a72993b..eded65650c4 100644 --- a/Master/texmf-dist/source/generic/xint/xint.dtx +++ b/Master/texmf-dist/source/generic/xint/xint.dtx @@ -1,23 +1,23 @@ % -*- coding: iso-latin-1; time-stamp-format: "%02d-%02m-%:y at %02H:%02M:%02S %Z" -*- %<*dtx> -\def\xintdtxtimestamp {Time-stamp: <07-03-2015 at 20:06:50 CET>} +\def\xintdtxtimestamp {Time-stamp: <31-08-2015 at 11:53:55 CEST>} %</dtx> %<*drv> %% --------------------------------------------------------------- -\def\xintdocdate {2015/03/07} -\def\xintbndldate{2014/11/07} -\def\xintbndlversion {1.1a} +\def\xintdocdate {2015/08/31} +\def\xintbndldate{2015/08/31} +\def\xintbndlversion {1.1b} %</drv> %<*dtx> \iffalse %</dtx> %<readme>% README %<changes>% CHANGE LOG -%<readme|changes>% xint v1.1a -%<readme|changes>% 2014/11/07 (doc 2015/03/07) +%<readme|changes>% xint v1.1b +%<readme|changes>% 2015/08/31 (doc 2015/08/31) %<*readme|changes> - Source: xint.dtx (v1.1a 2014/11/07, doc of 2015/03/07) + Source: xint.dtx (v1.1b 2015/08/31, doc of 2015/08/31) Author: Jean-Francois Burnol Info: Expandable operations on big integers, decimals, fractions License: LPPL 1.3c or later @@ -25,7 +25,7 @@ %</readme|changes> %<*!readme&!changes&!dohtmlsh&!dopdfsh&!makefile> %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %<xintkernel>%% xintkernel: Paraphernalia for the xint packages %<xinttools>%% xinttools: Expandable and non-expandable utilities @@ -204,6 +204,18 @@ pandoctpl.latex, doHTMLs.sh, doPDFs.sh, xint.dvi, xint.pdf, Makefile.mk.</div> %</readme>-------------------------------------------------------- %<*changes>------------------------------------------------------- +`1.1b (2015/08/31)` +---- + + - bugfix: some macros needed by the integer division routine from + **xintcore** had been left in **xint.sty** since release `1.1`. This + for example broke the `\xintGCD` from **xintgcd** if package **xint** + was not loaded. + + - Slight enhancements to the documentation, particularly in the + `Read this first` section. + + `1.1a (2014/11/07)` ---- @@ -276,13 +288,12 @@ breaking changes letter operators might be assigned some other meaning in later releases (bitwise operations, perhaps). Do not use them. - - [this missing item added 2015/03/07] place holders for `\xintNewExpr` - could be denoted `#1`, `#2`, ... or also, for special purposes `$1`, `$2`, - ... Only the first form is now accepted and the special cases previously + - in earlier releases, place holders for `\xintNewExpr` could either + be denoted `#1`, `#2`, ... or also `$1`, `$2`, ... + Only the usual `#` form is now accepted and the special cases previously treated via the second form are now managed via a `protect(...)` function. -There are many novelties, most to be found in package **xintexpr**. -But first the other changes. +**novelties :** * new package **xintcore** has been split off **xint**. It contains the core arithmetic macros. It is loaded by package **bnumexpr**, @@ -294,15 +305,16 @@ But first the other changes. the `\xint_dothis` and `\xint_orthat` pair of macros for expandably branching, - * these tiny helpful macros, and a few others are in package **xintkernel** - which contains also the catcode and loading order management code, - initially inspired by code found in Heiko Oberdiek's packages, + * these tiny helpful macros, and a few others are in package + **xintkernel** which contains also the catcode and loading order + management code, initially inspired by code found in Heiko Oberdiek's + packages, - * the source code, which was suppressed from `xint.pdf` in release `1.09n`, is - now compiled into a separate file `sourcexint.pdf`, + * the source code, which was suppressed from `xint.pdf` in release + `1.09n`, is now compiled into a separate file `sourcexint.pdf`, * faster handling by `\xintAdd`, `\xintSub`, `\xintMul`, ... of the case - where one of the arguments is zero, + where one of the arguments is zero, * the `\xintAdd` and `\xintSub` macros from package **xintfrac** check if one of the denominators is a multiple of the other, and only if this is @@ -323,33 +335,33 @@ But first the other changes. fractional numbers, * `\xintiexpr`, `\xinttheiexpr` admit an optional argument within brackets - `[d]`, they round the computation result (or results, if comma separated) - to `d` digits after decimal mark, (the whole computation is done exactly, - as in `xintexpr`), + `[d]`, they round the computation result (or results, if comma separated) + to `d` digits after decimal mark, (the whole computation is done exactly, + as in `xintexpr`), * `\xintfloatexpr`, `\xintthefloatexpr` similarly admit an optional - argument which serves to keep only `d` digits of precision, getting rid - of cumulated uncertainties in the last digits (the whole computation is - done according to the precision set via `\xintDigits`), + argument which serves to keep only `d` digits of precision, getting rid + of cumulated uncertainties in the last digits (the whole computation is + done according to the precision set via `\xintDigits`), - * `\xinttheexpr` and `\xintthefloatexpr` _pretty-print_ if possible, - the former removing unit denominator or `[0]` brackets, the latter - avoiding scientific notation if decimal notation is practical, + * `\xinttheexpr` and `\xintthefloatexpr` _pretty-print_ if possible, the + former removing unit denominator or `[0]` brackets, the latter avoiding + scientific notation if decimal notation is practical, * the `//` does truncated division and `/:` is the associated modulo, * multi-character operators `&&`, `||`, `==`, `<=`, `>=`, `!=`, - `**`, + `**`, * multi-letter infix binary words `'and'`, `'or'`, `'xor'`, `'mod'` - (straight quotes mandatory), + (straight quotes mandatory), * functions `even`, `odd`, * `\xintdefvar A3:=3.1415;` for variable definitions (non expandable, naturally), usable in subsequent expressions; variable names may contain - letters, digits, underscores. They should not start with a digit, the - `@` is reserved, and single lowercase and uppercase Latin letters are + letters, digits, underscores. They should not start with a digit, the `@` + is reserved, and single lowercase and uppercase Latin letters are predefined to work as dummy variables (see next), * generation of comma separated lists `a..b`, `a..[d]..b`, @@ -366,9 +378,11 @@ But first the other changes. * `add` and `mul` must use a dummy variable: `add(x(x+1)(x-1), x=-10..10)`, - * variable substitutions with `subs`: `subs(subs(add(x^2+y^2,x=1..y),y=t),t=20)`, + * variable substitutions with `subs`: + `subs(subs(add(x^2+y^2,x=1..y),y=t),t=20)`, - * sequence generation using `seq` with a dummy variable: `seq(x^3, x=-10..10)`, + * sequence generation using `seq` with a dummy variable: `seq(x^3, + x=-10..10)`, * simple recursive lists with `rseq`, with `@` given the last value, `rseq(1;2@+1,i=1..10)`, @@ -392,7 +406,7 @@ But first the other changes. * `\xintthecoords` converts a comma separated list of an even number of items to the format expected by the `TikZ` `coordinates` syntax, - * completely new version `\xintNewExpr`, `protect` function to handle + * completely new version `\xintNewExpr`, `protect` function to handle external macros. The dollar sign `$` for place holders is not accepted anymore, only the standard macro parameter `#`. Not all constructs are compatible with `\xintNewExpr`. @@ -402,7 +416,8 @@ But first the other changes. * the user manual does not include by default the source code anymore: the `\NoSourceCode` toggle in file `xint.tex` has to - be set to 0 before compilation to get source code inclusion. + be set to 0 before compilation to get source code inclusion + (later release `1.1` made source code available as `sourcexint.pdf`). * bug fix (**xinttools**) in `\XINT_nthelt_finish` (this bug was introduced in `1.09i` of `2013/12/18` and showed up when the index @@ -1017,7 +1032,7 @@ helpless: @printf '$(subst $(newline),\n,$(helptext))' | less # RM = rm -f -JF_tmpdir = jfbu_tmp +JF_tmpdir := $(shell mktemp -d jfbu_XXX) TEXMF_local = $(shell kpsewhich -var-value TEXMFLOCAL) TEXMF_home = $(shell kpsewhich -var-value TEXMFHOME) packages = xintkernel.sty xintcore.sty xint.sty xintfrac.sty xintexpr.sty\ @@ -2516,50 +2531,7 @@ This section provides recommended reading on first discovering the package. {\etocdefaultlines\etocsettocstyle{}{}\localtableofcontents} \fi -\subsection{Installation instructions} -\label{ssec:install} - -\xintname is made available under the -\href{http://www.latex-project.org/lppl/lppl-1-3c.txt}{LaTeX Project Public - License 1.3c} (or any later version). It is included in the major \TeX\ -distributions, thus there is probably no need for a custom install: just use -the package manager to update if necessary \xintname to the latest version -available. - -After installation, issuing in terminal |texdoc --list xint|, on installations -with a |"texdoc"| or similar utility, will offer the choice to display one of -the documentation files: |xint.pdf| (this file), |sourcexint.pdf| (source -code), |README|, |README.pdf|, |README.html|, |CHANGES.pdf|, and -|CHANGES.html|. - -For manual installation, follow the instructions from the |README| file which -is to be found on \href{http://www.ctan.org/pkg/xint}{CTAN}; it is also -available there in PDF and HTML formats. The simplest method proposed is to -use the archive file \href{http://www.ctan.org/pkg/xint}{xint.tds.zip}, -downloadable from the same location. - -The next simplest one is to make use of the |Makefile|, which is also -downloadable from \href{http://www.ctan.org/pkg/xint}{CTAN}. This is -for GNU/Linux systems and Mac OS X, and necessitates use of the command -line. If for some reason you have |xint.dtx| but no internet access, -you can recreate |Makefile| as a file with this name and the following -contents: - -{\def\everbatimindent {0pt }% -\begin{everbatim} -include Makefile.mk -Makefile.mk: xint.dtx ; etex xint.dtx -\end{everbatim}} - -Then run |make| in a working repertory where there is |xint.dtx| and the file -named |Makefile| and having only the two lines above. The |make| will extract -the package files from |xint.dtx| and display some further instructions. - -If you have |xint.dtx|, no internet access and can not use the Makefile method -: |etex xint.dtx| extracts all files and among them the |README| as a file -with name |README.md|. Further help and options will be found therein. - -\subsection{Presentation of the packages} +\subsection{The packages of the \xintname bundle} The components of the \xintname bundle provide macros dedicated to \emph{expandable} computations on numbers exceeding the \TeX{} (and \eTeX{}) @@ -2581,8 +2553,10 @@ options. % \csa{@ne}, and \csa{m@ne} should have the same meaning as in Plain and % \LaTeX.}} % -Each package automatically loads those not already loaded -it depends on.\smallskip +Each package automatically loads those not already loaded it depends on (but +in a few rare cases there are some extra dependencies, for example the |gcd| +function in \xintexprname expressions requires explicit loading of package +\xintgcdname for its activation).\smallskip %% \pdfbookmark[1]{Abstract}{ABSTRACT} @@ -2641,50 +2615,296 @@ Further modules: \end{description} \end{addmargin} +\subsection{About this manual and a quick first overview} + +This documentation was build via successive layers; a complete re-write +would be needed for a more user-friendly access. I will try to add here a +quick expos\'e of the package abilities, starting from the arithmetic +expressions handled by package \xintexprname. + +Here is an example of a computation: +\begin{everbatim*} +\xinttheexpr (31.567^2 - 21.56*52)^3/13.52^5\relax +\end{everbatim*} + +The result is a bit frightening but illustrates that |\xinttheexpr..\relax| +does its computations \emph{exactly}. There is a variant which emulates +floating point computations: +\begin{everbatim*} +\xintthefloatexpr (31.567^2 - 21.56*52)^3/13.52^5\relax +\end{everbatim*} + +Such ``floating-point'' computations are done by default with 16 digits of +precision (this can be increased via a prior assignment such as +|\xintDigits:=24;|). \xintname has very few typesetting macros. \LaTeX{} users +can do: +\begin{everbatim*} +\[\xintFrac{\xintthefloatexpr (31.567^2 - 21.56*52)^3/13.52^5\relax }\] +\end{everbatim*} +but it probably is better to use packages dedicated to the typesetting of +numbers in scientific format (but the output of |\xinttheexpr| will +typically be in |A/B[N]| format which is unlikely to be understood by your +favorite number formatting package). + +The computations are done expandably: you can put them in an |\edef| or a +|\write| or even force complete expansion via |\romannumeral-`0| (if you don't +understand the latter sentence, this doesn't matter; this manual should +contain a description of expandability in \TeX, but this is yet to arise.) +Let's just say that such expandable macros are maximally usable in almost all +locations of \TeX{} code (but \TeX{} will choke on fractions |A/B| or integers +with more than ten digits). However, the implementation is also maximally +complicated as many functionalities of the \TeX{} macro language can not be +used in the source code of \xintname by the poor author of the package. +Besides, there is a speed impact, and although algebraic computations with +numbers of up to one hundred digits are fine, my current implementation of +multiplication needs of the order of the second for inputs with thousand +digits. Macro \csbxint{XTrunc} is however able to compute and ouput tens of +thousands of digits of a decimal expansion in reasonable time, still +expandably, but it does not expand completely via |\romannumeral-`0|. As the +|\xinttheexpr..\relax| mechanism only needs this weaker expandability of the +underlying macros, perhaps some speed gains could be achieved via a complete +rewrite of all basic macros of the package (but nesting of the macros would +not be possible; only the |\xintexpr...\relax| and variants interface would be +functional). + +This brings me to my second point here: the underlying macros are provided by +packages \xintcorename, \xintname for integers and \xintfracname for +fractions. For example to do |21+32*43|, the syntax would be (only +\xintcorename needed): +\begin{everbatim*} +\xintiiAdd{21}{\xintiiMul{32}{43}} +\end{everbatim*} + +Needless to say this quickly becomes a bit painful. One more example (needs \xintfracname): +\begin{everbatim*} +\xintIrr {\xintiiPrd{{128}{81}{125}}/\xintiiPrd{{32}{729}{100}}} +\end{everbatim*} + +This shows that package \xintfracname knows natively how to handle fractions +|A/B|, and has a command to reduce to smallest terms (in an +|\xintexpr..\relax| this would be the |reduce| function). + +Again, all computations done by |\xintexpr..\relax| are completely exact. +Thus, very quickly very big numbers are created (and computation times +explode). To compute something like |1.23456789^10000| you will have to opt +for the floating point version: +\begin{everbatim*} +{\xintDigits:=24; \xintthefloatexpr 1.23456789123456789^123456789\relax } +\end{everbatim*} +(notice the size of the power of ten: this surely largely exceeds your pocket +calculator abilities). + +Braces limit the scope of the assignment to |\xintDigits|. It is also possible +to do some computer algebra like evaluations (only numerically though): +\begin{everbatim*} +\xinttheiiexpr add(i^5, i=100..150)\relax +\end{everbatim*} + +Further examples are to be found in \autoref{sec:expr11} and \autoref{sec:expr}. +Make sure to read \autoref{ssec:userinterface}. + + \subsection {Changes} -See file -\href{http://mirrors.ctan.org/macros/generic/xint/CHANGES.html}{CHANGES.html} -for the cumulative change log since the initial release. +On |TeXLive| (and presumably |MikTeX|), type |texdoc --list xint| to get +access to the +various included documentation files, among them |CHANGES.html| provides +the cumulative change log since the initial release. + +It is also available on internet via +\href{http://mirrors.ctan.org/macros/generic/xint/CHANGES.html}{this link}. + +Here is a brief review of recent changes: -Release of |2015/03/07| only improves a few things in the documentation. The -version number is kept unchanged at |1.1a|. +\subsubsection{\unexpanded{\unexpanded{Changes from |1.1a 2014/11/07| to +|1.1b 2015/08/31|}}} -\subsubsection{\unexpanded{\unexpanded{Changes from |1.1| to |1.1a|}}} +This is a bug-fix release to move from |xint.sty| to |xintcore.sty| some +macros which are used by the division routines included in \xintcorename (as +package \xintgcdname loads only \xintcorename, this dependency on macros which +had been left in |xint.sty| broke \csbxint{GCD} for example). -Bug fix in \csbxint{NewExpr} which should have accepted comma separated -replacement text. +Slight enhancements to the |Read this first| section of the documentation. -New \csbxint{iiSqrtR} for rounded integer square root, the -already provided \csbxint{iiSqrt} computing truncated integral square root. +\subsubsection{\unexpanded{\unexpanded{Changes from |1.1 2014/10/28| to +|1.1a 2014/11/07|}}} Numerous small fixes to the documentation. -\subsubsection{\unexpanded{\unexpanded{Changes from |1.09n| to |1.1|}}} +Bug fix in \csbxint{NewExpr} to get it to correctly accept comma separated +inputs. A new macro \csbxint{iiSqrtR} computes rounded integer square roots, +the earlier \csbxint{iiSqrt} computing truncated integer square roots. -|1.1| brings many extensions, particularly to \xintexprname, among them the -evaluation of expressions with dummy variables, possibly iteratively, in a -nestable way. See \autoref{sec:expr11} for these changes. +Later release of |2015/03/07| only improved a few things in the documentation +and the package version number was kept unchanged at |1.1a|. -Apart from that, the two main other changes are that |\xintiiexpr...\relax| -now maps |/| to the \emph{rounded} division (the |//| operator does -\emph{truncated} division) to be in synchrony with the habits of |\numexpr|, -and that the \xintfracname macro \csbxint{Add} (corresponding naturally to |+| -in expressions) does not anymore blindly multiply denominators but at least -checks if one is a multiple of the other. However doing systematic reduction -to smallest terms, or only computing always the |LCM| of the denominators -would be too costly. +\subsubsection{\unexpanded{\unexpanded{Changes from |1.09n 2014/04/01| to +|1.1 2014/10/28|}}} -Also worth mentioning is the fact that \xintname does not load \xinttoolsname +|1.1| brought many additions, most of them to package \xintexprname, for example +the evaluation of expressions with dummy variables, possibly iteratively, +and with allowed nesting. See \autoref{sec:expr11} for a description of these +changes. + +Apart from that, the two main other changes were: +\begin{enumerate} +\item |\xintiiexpr...\relax| now associates |/| with the \emph{rounded} + division (the |//| operator being provided for the \emph{truncated} + division) to be in synchrony with the habits of |\numexpr|, +\item the \xintfracname macro \csbxint{Add} (corresponding to |+| in + expressions) does not anymore blindly multiply denominators but first checks + if one is a multiple of the other. However doing systematic reduction to + smallest terms, or systematically computing the |LCM| of the denominators + would be too costly (I think). +\end{enumerate} +Also worth mentioning is that \xintname does not load \xinttoolsname anymore (only \xintexprname does) and that the core arithmetic macros have been moved to a new package \xintcorename which is loaded automatically by \xintname. -The further package by the author -\href{http://www.ctan.org/pkg/bnumexpr}{bnumexpr} (\LaTeX{} only) now loads -only \xintcorename. +Package \href{http://www.ctan.org/pkg/bnumexpr}{bnumexpr} (which is \LaTeX{} +only) now also loads only \xintcorename. + +\subsection{Installation instructions} +\label{ssec:install} + +\xintname is made available under the +\href{http://www.latex-project.org/lppl/lppl-1-3c.txt}{LaTeX Project Public + License 1.3c} (or any later version). It is included in the major \TeX\ +distributions, thus there is probably no need for a custom install: just use +the package manager to update if necessary \xintname to the latest version +available. + +After installation, issuing in terminal |texdoc --list xint|, on installations +with a |"texdoc"| or similar utility, will offer the choice to display one of +the documentation files: |xint.pdf| (this file), |sourcexint.pdf| (source +code), |README|, |README.pdf|, |README.html|, |CHANGES.pdf|, and +|CHANGES.html|. + +For manual installation, follow the instructions from the |README| file which +is to be found on \href{http://www.ctan.org/pkg/xint}{CTAN}; it is also +available there in PDF and HTML formats. The simplest method proposed is to +use the archive file \href{http://www.ctan.org/pkg/xint}{xint.tds.zip}, +downloadable from the same location. + +The next simplest one is to make use of the |Makefile|, which is also +downloadable from \href{http://www.ctan.org/pkg/xint}{CTAN}. This is +for GNU/Linux systems and Mac OS X, and necessitates use of the command +line. If for some reason you have |xint.dtx| but no internet access, +you can recreate |Makefile| as a file with this name and the following +contents: + +{\def\everbatimindent {0pt }% +\begin{everbatim} +include Makefile.mk +Makefile.mk: xint.dtx ; etex xint.dtx +\end{everbatim}} + +Then run |make| in a working repertory where there is |xint.dtx| and the file +named |Makefile| and having only the two lines above. The |make| will extract +the package files from |xint.dtx| and display some further instructions. + +If you have |xint.dtx|, no internet access and can not use the Makefile method +: |etex xint.dtx| extracts all files and among them the |README| as a file +with name |README.md|. Further help and options will be found therein. + +\subsection{FAQ} + +We are honoured to present here this interview with the author, dating back to +late March 2014. +\begin{description} +\item[Will \xintexprname implement \texttt{exp}, \texttt{log}, + \texttt{cos}, \texttt{sin} \dots at some point?] +I guess so. + +\item[\xintseriesname already provides generic tools.] Right, although the + casual user of the \xintname bundle will not quite know how to do variable + reduction expandably in order to use some series or Pad\'e approximants. + Besides I wrote the code at the beginning of the project and perhaps I could + do it better now (I have not looked at it for a while). Anyhow, generic things + do not help much if one wants to optimize. + +\item[Optimizing? isn't \TeX's macro expansion mechanism intrinsically slow?] + Intensive use of \csa{numexpr} and some token manipulation algorithms + exploiting to the best I could \TeX{} macros with parameters grant \xintname a + significant speed up in expandable arithmetic on big integers compared to + previously available implementations. You can do some comparisons with + multiplication on numbers with $100$ digits or division of one of $100$ digits + by another of $50$ digits, for example. However expandability is antagonist of + speed, and I agree it is not very exciting to optimize slow things. And I was + disappointed last year to realize the slowness of \TeX's mouth when it has to + keep hundreds of tokens in cheek to mix them later with new aliments. Believe + me, I try not to think too much about the fact that the whole enterprise is + made irrelevant by Lua\LaTeX's ability to access external libraries. + +\item[Well, why isn't this \texttt{log} etc\dots thing done yet?] +I have to decide on the maximal precision to achieve: $24$, $32$, $48$, +$64$,\dots ; to settle that I would need to implement some initial versions and +benchmark them. + +\item[Fair enough. That's the common lot. So why not yet?] I am a bit + overworked. It is also an opportunity to think over + the basic underlying mathematics, and will need devoted thinking for some not + insignificant amount of time. So far I didn't find the time, or rather I found + out good means to waste it sillily. I also anticipate that originality could + very + well not pay off at all, so small is the window for the precision. + +\item[Any chance this could be done in time for TL2014?] No, + sorry.\newline Release |1.09m| of |[2014/02/26]| was the end of a cycle, and + this |1.09n| of |[2014/04/01]| is only for a bug fix and inclusion of this + |FAQ| in the documentation. + +\footnotesize + +\item[and in time for TL2015?] ... (indistinct mumbles, something like + \emph{too tired}, \emph{I need a life}, \emph{get yourself a calculator}, + \emph{we'll see}\dots) +\end{description} + +\section{Introduction via examples} + +The main goal is to allow expandable computations with integers and +fractions of arbitrary sizes. + +\subsection{Printing big numbers on the page}\label{ssec:printnumber} + +When producing very long numbers there is the question of printing them on + the page, without going beyond the page limits. In this document, I have most + of the time made use of these macros (not provided by the package:) + +% +\everb|@ +\def\allowsplits #1{\ifx #1\relax \else #1\hskip 0pt plus 1pt\relax + \expandafter\allowsplits\fi}% +\def\printnumber #1{\expandafter\allowsplits \romannumeral-`0#1\relax }% +% \printnumber thus first ``fully'' expands its argument. +| + +It may be used like this: +% +\leftedline{|\printnumber {\xintiiQuo{\xintiiPow {2}{1000}}{\xintiFac{100}}}|} +% +or as |\printnumber\mybiginteger| or |\printnumber{\mybiginteger}| if +|\mybiginteger| was previously defined via a |\newcommand|, a |\def| or +an |\edef|. + +An alternative is to suitably configure the thousand +separator with the \href{http://ctan.org/pkg/numprint}{numprint} package +(see \autoref{fn:np}. This will not allow linebreaks when used in math +mode; I also tried \href{http://ctan.org/pkg/siunitx}{siunitx} but even +in text mode could not get it to break numbers accross lines). Recently +I became aware of the \href{http://ctan.org/pkg/seqsplit}{seqsplit} +package% +% +\footnote{\url{http://ctan.org/pkg/seqsplit}} +% +which can be used to achieve this splitting accross lines, and does work +in inline math mode (however it doesn't allow to separate digits by +groups of three, for example).\par \subsection{User interface} +\label{ssec:userinterface} The user interface for executing operations on numbers is via macros such as \csbxint{Add} or \csbxint{Mul} which have two arguments, or via expressions @@ -2864,101 +3084,6 @@ via the \csbxint{Irr} macro or the |reduce| function within simplifications which could be obvious to (some) human beings. -\subsection{FAQ} - -We are honoured to present here this interview with the author, dating back to -late March 2014. -\begin{description} -\item[Will \xintexprname implement \texttt{exp}, \texttt{log}, - \texttt{cos}, \texttt{sin} \dots at some point?] -I guess so. - -\item[\xintseriesname already provides generic tools.] Right, although the - casual user of the \xintname bundle will not quite know how to do variable - reduction expandably in order to use some series or Pad\'e approximants. - Besides I wrote the code at the beginning of the project and perhaps I could - do it better now (I have not looked at it for a while). Anyhow, generic things - do not help much if one wants to optimize. - -\item[Optimizing? isn't \TeX's macro expansion mechanism intrinsically slow?] - Intensive use of \csa{numexpr} and some token manipulation algorithms - exploiting to the best I could \TeX{} macros with parameters grant \xintname a - significant speed up in expandable arithmetic on big integers compared to - previously available implementations. You can do some comparisons with - multiplication on numbers with $100$ digits or division of one of $100$ digits - by another of $50$ digits, for example. However expandability is antagonist of - speed, and I agree it is not very exciting to optimize slow things. And I was - disappointed last year to realize the slowness of \TeX's mouth when it has to - keep hundreds of tokens in cheek to mix them later with new aliments. Believe - me, I try not to think too much about the fact that the whole enterprise is - made irrelevant by Lua\LaTeX's ability to access external libraries. - -\item[Well, why isn't this \texttt{log} etc\dots thing done yet?] -I have to decide on the maximal precision to achieve: $24$, $32$, $48$, -$64$,\dots ; to settle that I would need to implement some initial versions and -benchmark them. - -\item[Fair enough. That's the common lot. So why not yet?] I am a bit - overworked. It is also an opportunity to think over - the basic underlying mathematics, and will need devoted thinking for some not - insignificant amount of time. So far I didn't find the time, or rather I found - out good means to waste it sillily. I also anticipate that originality could - very - well not pay off at all, so small is the window for the precision. - -\item[Any chance this could be done in time for TL2014?] No, - sorry.\newline Release |1.09m| of |[2014/02/26]| was the end of a cycle, and - this |1.09n| of |[2014/04/01]| is only for a bug fix and inclusion of this - |FAQ| in the documentation. - -\footnotesize - -\item[and in time for TL2015?] ... (indistinct mumbles, something like - \emph{too tired}, \emph{I need a life}, \emph{get yourself a calculator}, - \emph{we'll see}\dots) -\end{description} - -\section{Introduction via examples} - -The main goal is to allow expandable computations with integers and -fractions of arbitrary sizes. - -\subsection{Printing big numbers on the page}\label{ssec:printnumber} - -When producing very long numbers there is the question of printing them on - the page, without going beyond the page limits. In this document, I have most - of the time made use of these macros (not provided by the package:) - -% -\everb|@ -\def\allowsplits #1{\ifx #1\relax \else #1\hskip 0pt plus 1pt\relax - \expandafter\allowsplits\fi}% -\def\printnumber #1{\expandafter\allowsplits \romannumeral-`0#1\relax }% -% \printnumber thus first ``fully'' expands its argument. -| - -It may be used like this: -% -\leftedline{|\printnumber {\xintiiQuo{\xintiiPow {2}{1000}}{\xintiFac{100}}}|} -% -or as |\printnumber\mybiginteger| or |\printnumber{\mybiginteger}| if -|\mybiginteger| was previously defined via a |\newcommand|, a |\def| or -an |\edef|. - -An alternative is to suitably configure the thousand -separator with the \href{http://ctan.org/pkg/numprint}{numprint} package -(see \autoref{fn:np}. This will not allow linebreaks when used in math -mode; I also tried \href{http://ctan.org/pkg/siunitx}{siunitx} but even -in text mode could not get it to break numbers accross lines). Recently -I became aware of the \href{http://ctan.org/pkg/seqsplit}{seqsplit} -package% -% -\footnote{\url{http://ctan.org/pkg/seqsplit}} -% -which can be used to achieve this splitting accross lines, and does work -in inline math mode (however it doesn't allow to separate digits by -groups of three, for example).\par - \subsection{Randomly chosen examples} Here are some examples of use of the package macros. The first one uses only @@ -4603,13 +4728,12 @@ expandability. Check it out (\autoref{xintiloop}). \section{New features of the \xintexprname package} \label{sec:expr11} -Release |1.1| has brought many changes to \xintexprname. This chapter is +Release |1.1| brought many changes to \xintexprname. This chapter is for people already familiar with earlier versions. A more systematic -item per item syntax description is provided in \autoref{sec:expr}. +item per item syntax description is provided in \autoref{sec:expr}. But be +sure to come back here as the latter chapter has not been compeletely updated. -\subsection{\texorpdfstring{\unexpanded{\unexpanded{|1.1|}}}{1.1} brought some breaking changes and quite a few novelties} - -First, there are some breaking changes: +First, there were some breaking changes: \begin{itemize} \item in |\xintiiexpr|, |/| does \emph{rounded} division, rather than as in earlier releases the @@ -4635,7 +4759,7 @@ First, there are some breaking changes: treated via the second form are now managed via a |protect(...)| function. \end{itemize} -The novelties are numerous. +Let's now describle some of the numerous additional functionalities. \begin{itemize}[parsep=0pt] \item |\xintiexpr|, |\xinttheiexpr| admit an optional argument within @@ -4700,7 +4824,9 @@ The novelties are numerous. |\xintNewExpr|. \end{itemize} -\subsection{Examples with the \texorpdfstring{\unexpanded{\unexpanded{|v1.1|}}}{v1.1} \csh{xintexpr}} +% \subsection{Examples with the \texorpdfstring{\unexpanded{\unexpanded{|v1.1|}}}{v1.1} \csh{xintexpr}} + +And now some examples: \begin{itemize}[parsep=0pt, listparindent=.5\leftmargini] \item One can define variables (the definition itself is a non expandable @@ -7654,6 +7780,37 @@ the \csbxint{Num} overhead.\etype{f} \csbxint{Abs} is a synonym but gets modified by \xintfracname. \csa{xintiiAbs} skips the \csbxint{Num} overhead.\etype{f} +\subsection{\csbh{xintiiFDg}}\label{xintFDg}\label{xintiiFDg} + +|\xintiiFDg|\n\etype{f} returns the first digit (most significant) of the +decimal expansion. It skips the overhead of parsing via \csbxint{Num}. The +variant \csa{xintFDg}\etype{\Numf} uses |\xintNum| and gets extended by +\xintfracname. + +\subsection{\csbh{xintiiLDg}}\label{xintLDg}\label{xintiiLDg} + +|\xintiiLDg|\n\etype{f} returns the least significant digit. When the number +is positive, this is the same as the remainder in the euclidean division by +ten. It skips the overhead of parsing via \csbxint{Num}. The variant +\csa{xintLDg}\etype{\Numf} uses |\xintNum| and gets extended by \xintfracname. + +\subsection{\csbh{xintDouble}, \csbh{xintHalf}} +\label{xintDouble} +\label{xintHalf} +%{\small New with |1.08|.\par} + +|\xintDouble|\n\etype{f} returns |2N| and |\xintHalf|\n is |N/2| rounded +towards zero. These macros remain integer-only, even with \xintfracname loaded. + +\subsection{\csbh{xintInc}, \csbh{xintDec}} +\label{xintInc} +\label{xintDec} +%{\small New with |1.08|.\par} + +|\xintInc|\n\etype{f} is |N+1| and |\xintDec|\n{} is |N-1|. These macros +remain integer-only, even with \xintfracname loaded. They skip the overhead +of parsing via \csbxint{Num}. + \subsection{\csbh{xintiAdd}, \csbh{xintiiAdd}}\label{xintiAdd}\label{xintiiAdd} |\xintiAdd|\n\m\etype{\Numf\Numf} returns the sum of the two numbers. @@ -7805,16 +7962,6 @@ $\xintiiRem {1000}{-57}, \xintiiMod {1000}{-57}, |\xintiMod|\etype{\Numf\Numf} submits first its arguments to \csbxint{Num}. -\subsection{\csbh{xintInc}, \csbh{xintDec}} -\label{xintInc} -\label{xintDec} -%{\small New with |1.08|.\par} - -|\xintInc|\n\etype{f} is |N+1| and |\xintDec|\n{} is |N-1|. These macros -remain integer-only, even with \xintfracname loaded. They skip the overhead -of parsing via \csbxint{Num}. - - \section{Commands of the \xintname package} \label{sec:xint} @@ -8262,20 +8409,6 @@ loaded, accepting a fraction on input (but it truncates it first). % digits). Not to mention $100000!$ which, from the Stirling formula, % should have 456574 digits. -\subsection{\csbh{xintiiFDg}}\label{xintFDg}\label{xintiiFDg} - -|\xintiiFDg|\n\etype{f} returns the first digit (most significant) of the -decimal expansion. It skips the overhead of parsing via \csbxint{Num}. The -variant \csa{xintFDg}\etype{\Numf} uses |\xintNum| and gets extended by -\xintfracname. - -\subsection{\csbh{xintiiLDg}}\label{xintLDg}\label{xintiiLDg} - -|\xintiiLDg|\n\etype{f} returns the least significant digit. When the number -is positive, this is the same as the remainder in the euclidean division by -ten. It skips the overhead of parsing via \csbxint{Num}. The variant -\csa{xintLDg}\etype{\Numf} uses |\xintNum| and gets extended by \xintfracname. - \subsection{\csbh{xintiiMON}, \csbh{xintiiMMON}} \label{xintMON}\label{xintMMON}\label{xintiiMON}\label{xintiiMMON} %{\small New in version |1.03|.\par} @@ -8343,14 +8476,6 @@ roots of floating point numbers. usable with fractions, even with \xintfracname loaded. \end{framed} -\subsection{\csbh{xintDouble}, \csbh{xintHalf}} -\label{xintDouble} -\label{xintHalf} -%{\small New with |1.08|.\par} - -|\xintDouble|\n\etype{f} returns |2N| and |\xintHalf|\n is |N/2| rounded -towards zero. These macros remain integer-only, even with \xintfracname loaded. - \subsection{\csbh{xintDSL}}\label{xintDSL} |\xintDSL|\n\etype{f} is decimal shift left, \emph{i.e.} multiplication by @@ -10477,8 +10602,9 @@ The command is used as: \footnote{there is some use for \csa{xintNewExpr}|[0]| compared to an \csa{edef} as \csa{xintNewExpr} has some built-in catcode protection.}) % -\item the placeholders |#1|, |#2|, ..., |#n| are used inside \meta{stuff} - in their usual r\^ole. +\item the placeholders |#1|, |#2|, ..., |#n| are used inside \meta{stuff} in + their usual r\^ole.\footnote{such \#'s may be of category code other or have + their usual catcode.} \end{itemize} The macro |\myformula| is defined without checking if it @@ -13241,7 +13367,7 @@ $1$ or $-1$. \fi \XINT_providespackage \ProvidesPackage {xintkernel}% - [2014/11/07 v1.1a Paraphernalia for the xint packages (jfB)]% + [2015/08/31 v1.1b Paraphernalia for the xint packages (jfB)]% % \end{macrocode} % \subsection{Token management utilities} % \begin{macrocode} @@ -13471,7 +13597,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xinttools}% - [2014/11/07 v1.1a Expandable and non-expandable utilities (jfB)]% + [2015/08/31 v1.1b Expandable and non-expandable utilities (jfB)]% % \end{macrocode} % \lverb|\XINT_toks is used in macros such as \xintFor. It is not used % elsewhere in the xint bundle.| @@ -13519,14 +13645,14 @@ $1$ or $-1$. \def\XINT_revwbr_finish_b #1#2#3#4#5#6#7#8\Z {% \xint_gob_til_R - #1\XINT_revwbr_finish_c 8% - #2\XINT_revwbr_finish_c 7% - #3\XINT_revwbr_finish_c 6% - #4\XINT_revwbr_finish_c 5% - #5\XINT_revwbr_finish_c 4% - #6\XINT_revwbr_finish_c 3% - #7\XINT_revwbr_finish_c 2% - \R\XINT_revwbr_finish_c 1\Z + #1\XINT_revwbr_finish_c \xint_c_viii + #2\XINT_revwbr_finish_c \xint_c_vii + #3\XINT_revwbr_finish_c \xint_c_vi + #4\XINT_revwbr_finish_c \xint_c_v + #5\XINT_revwbr_finish_c \xint_c_iv + #6\XINT_revwbr_finish_c \xint_c_iii + #7\XINT_revwbr_finish_c \xint_c_ii + \R\XINT_revwbr_finish_c \xint_c_i\Z }% \def\XINT_revwbr_finish_c #1#2\Z {% @@ -13692,14 +13818,14 @@ $1$ or $-1$. \def\XINT_csvtol_finish_b #1,#2,#3,#4,#5,#6,#7,#8\Z {% \xint_gob_til_R - #1\XINT_csvtol_finish_c 8% - #2\XINT_csvtol_finish_c 7% - #3\XINT_csvtol_finish_c 6% - #4\XINT_csvtol_finish_c 5% - #5\XINT_csvtol_finish_c 4% - #6\XINT_csvtol_finish_c 3% - #7\XINT_csvtol_finish_c 2% - \R\XINT_csvtol_finish_c 1\Z + #1\XINT_csvtol_finish_c \xint_c_viii + #2\XINT_csvtol_finish_c \xint_c_vii + #3\XINT_csvtol_finish_c \xint_c_vi + #4\XINT_csvtol_finish_c \xint_c_v + #5\XINT_csvtol_finish_c \xint_c_iv + #6\XINT_csvtol_finish_c \xint_c_iii + #7\XINT_csvtol_finish_c \xint_c_ii + \R\XINT_csvtol_finish_c \xint_c_i\Z }% \def\XINT_csvtol_finish_c #1#2\Z {% @@ -14735,14 +14861,17 @@ $1$ or $-1$. % % \localtableofcontents % -% Got split off from \xintnameimp with release |1.1|. Adds -% |\xintiiDivRound|. Does not load \xinttoolsnameimp. +% Got split off from \xintnameimp with release |1.1| (macros |\XINT_SQ|, +% |\xintLDg|, |\xintHalf| which are dependencies of |\XINT_div_prepare| were +% forgotten and they were added to the package only later with |1.1b|). +% Release |1.1| also added the new macro |\xintiiDivRound|. The package does +% not load \xinttoolsnameimp. % -% Since release |xint 1.09a| these macros doing arithmetic operations +% Since release |xint 1.09a| the macros doing arithmetic operations % apply systematically |\xintnum| to their arguments; this adds a little % overhead but this is more convenient for using count registers even % with infix notation; also this is what |xintfrac.sty| did all along. -% Simplifies the discussion in the documentation too. +% It simplifies the discussion in the documentation too. % % \subsection{Catcodes, \protect\eTeX{} and reload detection} % @@ -14801,7 +14930,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintcore}% - [2014/11/07 v1.1a Expandable arithmetic on big integers (jfB)]% + [2015/08/31 v1.1b Expandable arithmetic on big integers (jfB)]% % \end{macrocode} % \subsection{More token management, constants} % \begin{macrocode} @@ -14898,6 +15027,36 @@ $1$ or $-1$. \def\XINT_OQ_end_ii #1\Z #2#3#4#5#6#7#8#9\Z { #3#4#5#6#7#8#900}% \def\XINT_OQ_end_i \Z #1#2#3#4#5#6#7#8\Z { #1#2#3#4#5#6#7#80}% % \end{macrocode} +% \subsection{\csh{XINT_SQ}} +% \begin{macrocode} +\def\XINT_SQ #1#2#3#4#5#6#7#8% +{% + \xint_gob_til_R #8\XINT_SQ_end_a\R\XINT_SQ {#8#7#6#5#4#3#2#1}% +}% +\def\XINT_SQ_end_a\R\XINT_SQ #1#2\Z +{% + \XINT_SQ_end_b #1\Z +}% +\def\XINT_SQ_end_b #1#2#3#4#5#6#7% +{% + \xint_gob_til_R + #7\XINT_SQ_end_vii + #6\XINT_SQ_end_vi + #5\XINT_SQ_end_v + #4\XINT_SQ_end_iv + #3\XINT_SQ_end_iii + #2\XINT_SQ_end_ii + \R\XINT_SQ_end_i + \Z #2#3#4#5#6#7% +}% +\def\XINT_SQ_end_vii #1\Z #2#3#4#5#6#7#8\Z { #8}% +\def\XINT_SQ_end_vi #1\Z #2#3#4#5#6#7#8\Z { #7#8000000}% +\def\XINT_SQ_end_v #1\Z #2#3#4#5#6#7#8\Z { #6#7#800000}% +\def\XINT_SQ_end_iv #1\Z #2#3#4#5#6#7#8\Z { #5#6#7#80000}% +\def\XINT_SQ_end_iii #1\Z #2#3#4#5#6#7#8\Z { #4#5#6#7#8000}% +\def\XINT_SQ_end_ii #1\Z #2#3#4#5#6#7#8\Z { #3#4#5#6#7#800}% +\def\XINT_SQ_end_i \Z #1#2#3#4#5#6#7\Z { #1#2#3#4#5#6#70}% +% \end{macrocode} % \subsection{\csh{XINT_cuz}} % \begin{macrocode} \edef\xint_cleanupzeros_andstop #1#2#3#4% @@ -15108,6 +15267,250 @@ $1$ or $-1$. \krof }% % \end{macrocode} +% \subsection{\csh{xintFDg}, \csh{xintiiFDg}} +% \lverb|& +% FIRST DIGIT. Code simplified in 1.05. +% And prepared for redefinition by xintfrac to parse through \xintNum. Version +% 1.09a inserts the \xintnum already here.| +% \begin{macrocode} +\def\xintiiFDg {\romannumeral0\xintiifdg }% +\def\xintiifdg #1% +{% + \expandafter\XINT_fdg \romannumeral-`0#1\W\Z +}% +\def\xintFDg {\romannumeral0\xintfdg }% +\def\xintfdg #1% +{% + \expandafter\XINT_fdg \romannumeral0\xintnum{#1}\W\Z +}% +\def\XINT_FDg #1{\romannumeral0\XINT_fdg #1\W\Z }% +\def\XINT_fdg #1#2#3\Z +{% + \xint_UDzerominusfork + #1-{ 0}% zero + 0#1{ #2}% negative + 0-{ #1}% positive + \krof +}% +% \end{macrocode} +% \subsection{\csh{xintLDg}, \csh{xintiiLDg}} +% \lverb|& +% LAST DIGIT. Simplified in 1.05. And prepared for extension by xintfrac +% to parse through \xintNum. Release 1.09a adds the \xintnum already here, +% and this propagates to \xintOdd, etc... 1.09e The \xintiiLDg is for +% defining \xintiiOdd which is used once (currently) elsewhere . +% +% bug fix (1.1b): \xintiiLDg is needed by the division macros next, thus +% it needs to be in the xintcore.sty| +% \begin{macrocode} +\def\xintiiLDg {\romannumeral0\xintiildg }% +\def\xintiildg #1% +{% + \expandafter\XINT_ldg\expandafter {\romannumeral-`0#1}% +}% +\def\xintLDg {\romannumeral0\xintldg }% +\def\xintldg #1% +{% + \expandafter\XINT_ldg\expandafter {\romannumeral0\xintnum{#1}}% +}% +\def\XINT_LDg #1{\romannumeral0\XINT_ldg {#1}}% +\def\XINT_ldg #1% +{% + \expandafter\XINT_ldg_\romannumeral0\xintreverseorder {#1}\Z +}% +\def\XINT_ldg_ #1#2\Z{ #1}% +% \end{macrocode} +% \subsection{\csh{xintDouble}} +% \lverb|v1.08| +% \begin{macrocode} +\def\xintDouble {\romannumeral0\xintdouble }% +\def\xintdouble #1% +{% + \expandafter\XINT_dbl\romannumeral-`0#1% + \R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W +}% +\def\XINT_dbl #1% +{% + \xint_UDzerominusfork + #1-\XINT_dbl_zero + 0#1\XINT_dbl_neg + 0-{\XINT_dbl_pos #1}% + \krof +}% +\def\XINT_dbl_zero #1\Z \W\W\W\W\W\W\W { 0}% +\def\XINT_dbl_neg + {\expandafter\xint_minus_thenstop\romannumeral0\XINT_dbl_pos }% +\def\XINT_dbl_pos +{% + \expandafter\XINT_dbl_a \expandafter{\expandafter}\expandafter 0% + \romannumeral0\XINT_SQ {}% +}% +\def\XINT_dbl_a #1#2#3#4#5#6#7#8#9% +{% + \xint_gob_til_W #9\XINT_dbl_end_a\W + \expandafter\XINT_dbl_b + \the\numexpr \xint_c_x^viii+#2+\xint_c_ii*#9#8#7#6#5#4#3\relax {#1}% +}% +\def\XINT_dbl_b 1#1#2#3#4#5#6#7#8#9% +{% + \XINT_dbl_a {#2#3#4#5#6#7#8#9}{#1}% +}% +\def\XINT_dbl_end_a #1+#2+#3\relax #4% +{% + \expandafter\XINT_dbl_end_b #2#4% +}% +\edef\XINT_dbl_end_b #1#2#3#4#5#6#7#8% +{% + \noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7#8\relax +}% +% \end{macrocode} +% \subsection{\csh{xintHalf}} +% \lverb|v1.08. Relase 1.1 left it in xint.sty, but it is needed by the +% division routines included in xintcore.sty. Thus moved here for bugfix +% release 1.1b. +% Also \XINT_SQ which it uses. Moved here \xintDouble as well by sympathy.| +% \begin{macrocode} +\def\xintHalf {\romannumeral0\xinthalf }% +\def\xinthalf #1% +{% + \expandafter\XINT_half\romannumeral-`0#1% + \R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W +}% +\def\XINT_half #1% +{% + \xint_UDzerominusfork + #1-\XINT_half_zero + 0#1\XINT_half_neg + 0-{\XINT_half_pos #1}% + \krof +}% +\def\XINT_half_zero #1\Z \W\W\W\W\W\W\W { 0}% +\def\XINT_half_neg {\expandafter\XINT_opp\romannumeral0\XINT_half_pos }% +\def\XINT_half_pos {\expandafter\XINT_half_a\romannumeral0\XINT_SQ {}}% +\def\XINT_half_a #1#2#3#4#5#6#7#8% +{% + \xint_gob_til_W #8\XINT_half_dont\W + \expandafter\XINT_half_b + \the\numexpr \xint_c_x^viii+\xint_c_v*#7#6#5#4#3#2#1\relax #8% +}% +\edef\XINT_half_dont\W\expandafter\XINT_half_b + \the\numexpr \xint_c_x^viii+\xint_c_v*#1#2#3#4#5#6#7\relax \W\W\W\W\W\W\W +{% + \noexpand\expandafter\space + \noexpand\the\numexpr (#1#2#3#4#5#6#7+\xint_c_i)/\xint_c_ii-\xint_c_i \relax +}% +\def\XINT_half_b 1#1#2#3#4#5#6#7#8% +{% + \XINT_half_c {#2#3#4#5#6#7}{#1}% +}% +\def\XINT_half_c #1#2#3#4#5#6#7#8#9% +{% + \xint_gob_til_W #3\XINT_half_end_a #2\W + \expandafter\XINT_half_d + \the\numexpr \xint_c_x^viii+\xint_c_v*#9#8#7#6#5#4#3+#2\relax {#1}% +}% +\def\XINT_half_d 1#1#2#3#4#5#6#7#8#9% +{% + \XINT_half_c {#2#3#4#5#6#7#8#9}{#1}% +}% +\def\XINT_half_end_a #1\W #2\relax #3% +{% + \xint_gob_til_zero #1\XINT_half_end_b 0\space #1#3% +}% +\edef\XINT_half_end_b 0\space 0#1#2#3#4#5#6#7% +{% + \noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7\relax +}% +% \end{macrocode} +% \subsection{\csh{xintDec}} +% \lverb!v1.08! +% \begin{macrocode} +\def\xintDec {\romannumeral0\xintdec }% +\def\xintdec #1% +{% + \expandafter\XINT_dec\romannumeral-`0#1% + \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W +}% +\def\XINT_dec #1% +{% + \xint_UDzerominusfork + #1-\XINT_dec_zero + 0#1\XINT_dec_neg + 0-{\XINT_dec_pos #1}% + \krof +}% +\def\XINT_dec_zero #1\W\W\W\W\W\W\W\W { -1}% +\def\XINT_dec_neg + {\expandafter\xint_minus_thenstop\romannumeral0\XINT_inc_pos }% +\def\XINT_dec_pos +{% + \expandafter\XINT_dec_a \expandafter{\expandafter}% + \romannumeral0\XINT_OQ {}% +}% +\def\XINT_dec_a #1#2#3#4#5#6#7#8#9% +{% + \expandafter\XINT_dec_b + \the\numexpr 11#9#8#7#6#5#4#3#2-\xint_c_i\relax {#1}% +}% +\def\XINT_dec_b 1#1% +{% + \xint_gob_til_one #1\XINT_dec_A 1\XINT_dec_c +}% +\def\XINT_dec_c #1#2#3#4#5#6#7#8#9{\XINT_dec_a {#1#2#3#4#5#6#7#8#9}}% +\def\XINT_dec_A 1\XINT_dec_c #1#2#3#4#5#6#7#8#9% + {\XINT_dec_B {#1#2#3#4#5#6#7#8#9}}% +\def\XINT_dec_B #1#2\W\W\W\W\W\W\W\W +{% + \expandafter\XINT_dec_cleanup + \romannumeral0\XINT_rord_main {}#2% + \xint_relax + \xint_bye\xint_bye\xint_bye\xint_bye + \xint_bye\xint_bye\xint_bye\xint_bye + \xint_relax + #1% +}% +\edef\XINT_dec_cleanup #1#2#3#4#5#6#7#8% + {\noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7#8\relax }% +% \end{macrocode} +% \subsection{\csh{xintInc}} +% \lverb!v1.08! +% \begin{macrocode} +\def\xintInc {\romannumeral0\xintinc }% +\def\xintinc #1% +{% + \expandafter\XINT_inc\romannumeral-`0#1% + \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W +}% +\def\XINT_inc #1% +{% + \xint_UDzerominusfork + #1-\XINT_inc_zero + 0#1\XINT_inc_neg + 0-{\XINT_inc_pos #1}% + \krof +}% +\def\XINT_inc_zero #1\W\W\W\W\W\W\W\W { 1}% +\def\XINT_inc_neg {\expandafter\XINT_opp\romannumeral0\XINT_dec_pos }% +\def\XINT_inc_pos +{% + \expandafter\XINT_inc_a \expandafter{\expandafter}% + \romannumeral0\XINT_OQ {}% +}% +\def\XINT_inc_a #1#2#3#4#5#6#7#8#9% +{% + \xint_gob_til_W #9\XINT_inc_end\W + \expandafter\XINT_inc_b + \the\numexpr 10#9#8#7#6#5#4#3#2+\xint_c_i\relax {#1}% +}% +\def\XINT_inc_b 1#1% +{% + \xint_gob_til_zero #1\XINT_inc_A 0\XINT_inc_c +}% +\def\XINT_inc_c #1#2#3#4#5#6#7#8#9{\XINT_inc_a {#1#2#3#4#5#6#7#8#9}}% +\def\XINT_inc_A 0\XINT_inc_c #1#2#3#4#5#6#7#8#9% + {\XINT_dec_B {#1#2#3#4#5#6#7#8#9}}% +\def\XINT_inc_end\W #1\relax #2{ 1#2}% +% \end{macrocode} % \lverb|& % -----------------------------------------------------------------$\ % -----------------------------------------------------------------$\ @@ -17378,95 +17781,6 @@ $1$ or $-1$. }% \def\XINT_iimod_pos #1#2\Z #3\Z% {\expandafter\xint_secondoftwo_thenstop\romannumeral0\XINT_div_prepare {#2}{#1#3}}% -% \end{macrocode} -% \subsection{\csh{xintDec}} -% \lverb!v1.08! -% \begin{macrocode} -\def\xintDec {\romannumeral0\xintdec }% -\def\xintdec #1% -{% - \expandafter\XINT_dec\romannumeral-`0#1% - \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W -}% -\def\XINT_dec #1% -{% - \xint_UDzerominusfork - #1-\XINT_dec_zero - 0#1\XINT_dec_neg - 0-{\XINT_dec_pos #1}% - \krof -}% -\def\XINT_dec_zero #1\W\W\W\W\W\W\W\W { -1}% -\def\XINT_dec_neg - {\expandafter\xint_minus_thenstop\romannumeral0\XINT_inc_pos }% -\def\XINT_dec_pos -{% - \expandafter\XINT_dec_a \expandafter{\expandafter}% - \romannumeral0\XINT_OQ {}% -}% -\def\XINT_dec_a #1#2#3#4#5#6#7#8#9% -{% - \expandafter\XINT_dec_b - \the\numexpr 11#9#8#7#6#5#4#3#2-\xint_c_i\relax {#1}% -}% -\def\XINT_dec_b 1#1% -{% - \xint_gob_til_one #1\XINT_dec_A 1\XINT_dec_c -}% -\def\XINT_dec_c #1#2#3#4#5#6#7#8#9{\XINT_dec_a {#1#2#3#4#5#6#7#8#9}}% -\def\XINT_dec_A 1\XINT_dec_c #1#2#3#4#5#6#7#8#9% - {\XINT_dec_B {#1#2#3#4#5#6#7#8#9}}% -\def\XINT_dec_B #1#2\W\W\W\W\W\W\W\W -{% - \expandafter\XINT_dec_cleanup - \romannumeral0\XINT_rord_main {}#2% - \xint_relax - \xint_bye\xint_bye\xint_bye\xint_bye - \xint_bye\xint_bye\xint_bye\xint_bye - \xint_relax - #1% -}% -\edef\XINT_dec_cleanup #1#2#3#4#5#6#7#8% - {\noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7#8\relax }% -% \end{macrocode} -% \subsection{\csh{xintInc}} -% \lverb!v1.08! -% \begin{macrocode} -\def\xintInc {\romannumeral0\xintinc }% -\def\xintinc #1% -{% - \expandafter\XINT_inc\romannumeral-`0#1% - \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W -}% -\def\XINT_inc #1% -{% - \xint_UDzerominusfork - #1-\XINT_inc_zero - 0#1\XINT_inc_neg - 0-{\XINT_inc_pos #1}% - \krof -}% -\def\XINT_inc_zero #1\W\W\W\W\W\W\W\W { 1}% -\def\XINT_inc_neg {\expandafter\XINT_opp\romannumeral0\XINT_dec_pos }% -\def\XINT_inc_pos -{% - \expandafter\XINT_inc_a \expandafter{\expandafter}% - \romannumeral0\XINT_OQ {}% -}% -\def\XINT_inc_a #1#2#3#4#5#6#7#8#9% -{% - \xint_gob_til_W #9\XINT_inc_end\W - \expandafter\XINT_inc_b - \the\numexpr 10#9#8#7#6#5#4#3#2+\xint_c_i\relax {#1}% -}% -\def\XINT_inc_b 1#1% -{% - \xint_gob_til_zero #1\XINT_inc_A 0\XINT_inc_c -}% -\def\XINT_inc_c #1#2#3#4#5#6#7#8#9{\XINT_inc_a {#1#2#3#4#5#6#7#8#9}}% -\def\XINT_inc_A 0\XINT_inc_c #1#2#3#4#5#6#7#8#9% - {\XINT_dec_B {#1#2#3#4#5#6#7#8#9}}% -\def\XINT_inc_end\W #1\relax #2{ 1#2}% \XINT_restorecatcodes_endinput% % \end{macrocode} %\catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 @@ -17533,7 +17847,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xint}% - [2014/11/07 v1.1a Expandable operations on big integers (jfB)]% + [2015/08/31 v1.1b Expandable operations on big integers (jfB)]% % \end{macrocode} % \subsection{More token management} % \begin{macrocode} @@ -17577,36 +17891,6 @@ $1$ or $-1$. }% \def\XINT_isone_yes #1\Z { 1}% % \end{macrocode} -% \subsection{\csh{XINT_SQ}} -% \begin{macrocode} -\def\XINT_SQ #1#2#3#4#5#6#7#8% -{% - \xint_gob_til_R #8\XINT_SQ_end_a\R\XINT_SQ {#8#7#6#5#4#3#2#1}% -}% -\def\XINT_SQ_end_a\R\XINT_SQ #1#2\Z -{% - \XINT_SQ_end_b #1\Z -}% -\def\XINT_SQ_end_b #1#2#3#4#5#6#7% -{% - \xint_gob_til_R - #7\XINT_SQ_end_vii - #6\XINT_SQ_end_vi - #5\XINT_SQ_end_v - #4\XINT_SQ_end_iv - #3\XINT_SQ_end_iii - #2\XINT_SQ_end_ii - \R\XINT_SQ_end_i - \Z #2#3#4#5#6#7% -}% -\def\XINT_SQ_end_vii #1\Z #2#3#4#5#6#7#8\Z { #8}% -\def\XINT_SQ_end_vi #1\Z #2#3#4#5#6#7#8\Z { #7#8000000}% -\def\XINT_SQ_end_v #1\Z #2#3#4#5#6#7#8\Z { #6#7#800000}% -\def\XINT_SQ_end_iv #1\Z #2#3#4#5#6#7#8\Z { #5#6#7#80000}% -\def\XINT_SQ_end_iii #1\Z #2#3#4#5#6#7#8\Z { #4#5#6#7#8000}% -\def\XINT_SQ_end_ii #1\Z #2#3#4#5#6#7#8\Z { #3#4#5#6#7#800}% -\def\XINT_SQ_end_i \Z #1#2#3#4#5#6#7\Z { #1#2#3#4#5#6#70}% -% \end{macrocode} % \subsection{\csh{xintRev}} % \lverb|& % \xintRev: expands fully its argument \romannumeral-`0, and checks the sign. @@ -18607,59 +18891,11 @@ $1$ or $-1$. % & % -----------------------------------------------------------------$\ % -----------------------------------------------------------------$\ -% DECIMAL OPERATIONS: FIRST DIGIT, LASTDIGIT, ODDNESS, +% DECIMAL OPERATIONS: FIRST DIGIT, LASTDIGIT, (<- moved to xintcore +% because xintiiLDg need by division macros) +% ODDNESS, % MULTIPLICATION BY TEN, QUOTIENT BY TEN, QUOTIENT OR % MULTIPLICATION BY POWER OF TEN, SPLIT OPERATION.| -% \subsection{\csh{xintFDg}, \csh{xintiiFDg}} -% \lverb|& -% FIRST DIGIT. Code simplified in 1.05. -% And prepared for redefinition by xintfrac to parse through \xintNum. Version -% 1.09a inserts the \xintnum already here.| -% \begin{macrocode} -\def\xintiiFDg {\romannumeral0\xintiifdg }% -\def\xintiifdg #1% -{% - \expandafter\XINT_fdg \romannumeral-`0#1\W\Z -}% -\def\xintFDg {\romannumeral0\xintfdg }% -\def\xintfdg #1% -{% - \expandafter\XINT_fdg \romannumeral0\xintnum{#1}\W\Z -}% -\def\XINT_FDg #1{\romannumeral0\XINT_fdg #1\W\Z }% -\def\XINT_fdg #1#2#3\Z -{% - \xint_UDzerominusfork - #1-{ 0}% zero - 0#1{ #2}% negative - 0-{ #1}% positive - \krof -}% -% \end{macrocode} -% \subsection{\csh{xintLDg}, \csh{xintiiLDg}} -% \lverb|& -% LAST DIGIT. Simplified in 1.05. And prepared for extension by xintfrac -% to parse through \xintNum. Release 1.09a adds the \xintnum already here, -% and this propagates to \xintOdd, etc... 1.09e The \xintiiLDg is for -% defining \xintiiOdd which is used once (currently) elsewhere .| -% \begin{macrocode} -\def\xintiiLDg {\romannumeral0\xintiildg }% -\def\xintiildg #1% -{% - \expandafter\XINT_ldg\expandafter {\romannumeral-`0#1}% -}% -\def\xintLDg {\romannumeral0\xintldg }% -\def\xintldg #1% -{% - \expandafter\XINT_ldg\expandafter {\romannumeral0\xintnum{#1}}% -}% -\def\XINT_LDg #1{\romannumeral0\XINT_ldg {#1}}% -\def\XINT_ldg #1% -{% - \expandafter\XINT_ldg_\romannumeral0\xintreverseorder {#1}\Z -}% -\def\XINT_ldg_ #1#2\Z{ #1}% -% \end{macrocode} % \subsection{\csh{xintMON}, \csh{xintMMON}, \csh{xintiiMON}, \csh{xintiiMMON}} % \lverb|& % MINUS ONE TO THE POWER N and (-1)^{N-1}| @@ -19172,105 +19408,6 @@ $1$ or $-1$. \def\XINT_split_fromright_wenttoofar\W\XINT_split_fromright_endsplit_ #1\Z #2% { {}{#2}}% % \end{macrocode} -% \subsection{\csh{xintDouble}} -% \lverb|v1.08| -% \begin{macrocode} -\def\xintDouble {\romannumeral0\xintdouble }% -\def\xintdouble #1% -{% - \expandafter\XINT_dbl\romannumeral-`0#1% - \R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W -}% -\def\XINT_dbl #1% -{% - \xint_UDzerominusfork - #1-\XINT_dbl_zero - 0#1\XINT_dbl_neg - 0-{\XINT_dbl_pos #1}% - \krof -}% -\def\XINT_dbl_zero #1\Z \W\W\W\W\W\W\W { 0}% -\def\XINT_dbl_neg - {\expandafter\xint_minus_thenstop\romannumeral0\XINT_dbl_pos }% -\def\XINT_dbl_pos -{% - \expandafter\XINT_dbl_a \expandafter{\expandafter}\expandafter 0% - \romannumeral0\XINT_SQ {}% -}% -\def\XINT_dbl_a #1#2#3#4#5#6#7#8#9% -{% - \xint_gob_til_W #9\XINT_dbl_end_a\W - \expandafter\XINT_dbl_b - \the\numexpr \xint_c_x^viii+#2+\xint_c_ii*#9#8#7#6#5#4#3\relax {#1}% -}% -\def\XINT_dbl_b 1#1#2#3#4#5#6#7#8#9% -{% - \XINT_dbl_a {#2#3#4#5#6#7#8#9}{#1}% -}% -\def\XINT_dbl_end_a #1+#2+#3\relax #4% -{% - \expandafter\XINT_dbl_end_b #2#4% -}% -\edef\XINT_dbl_end_b #1#2#3#4#5#6#7#8% -{% - \noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7#8\relax -}% -% \end{macrocode} -% \subsection{\csh{xintHalf}} -% \lverb!v1.08! -% \begin{macrocode} -\def\xintHalf {\romannumeral0\xinthalf }% -\def\xinthalf #1% -{% - \expandafter\XINT_half\romannumeral-`0#1% - \R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W -}% -\def\XINT_half #1% -{% - \xint_UDzerominusfork - #1-\XINT_half_zero - 0#1\XINT_half_neg - 0-{\XINT_half_pos #1}% - \krof -}% -\def\XINT_half_zero #1\Z \W\W\W\W\W\W\W { 0}% -\def\XINT_half_neg {\expandafter\XINT_opp\romannumeral0\XINT_half_pos }% -\def\XINT_half_pos {\expandafter\XINT_half_a\romannumeral0\XINT_SQ {}}% -\def\XINT_half_a #1#2#3#4#5#6#7#8% -{% - \xint_gob_til_W #8\XINT_half_dont\W - \expandafter\XINT_half_b - \the\numexpr \xint_c_x^viii+\xint_c_v*#7#6#5#4#3#2#1\relax #8% -}% -\edef\XINT_half_dont\W\expandafter\XINT_half_b - \the\numexpr \xint_c_x^viii+\xint_c_v*#1#2#3#4#5#6#7\relax \W\W\W\W\W\W\W -{% - \noexpand\expandafter\space - \noexpand\the\numexpr (#1#2#3#4#5#6#7+\xint_c_i)/\xint_c_ii-\xint_c_i \relax -}% -\def\XINT_half_b 1#1#2#3#4#5#6#7#8% -{% - \XINT_half_c {#2#3#4#5#6#7}{#1}% -}% -\def\XINT_half_c #1#2#3#4#5#6#7#8#9% -{% - \xint_gob_til_W #3\XINT_half_end_a #2\W - \expandafter\XINT_half_d - \the\numexpr \xint_c_x^viii+\xint_c_v*#9#8#7#6#5#4#3+#2\relax {#1}% -}% -\def\XINT_half_d 1#1#2#3#4#5#6#7#8#9% -{% - \XINT_half_c {#2#3#4#5#6#7#8#9}{#1}% -}% -\def\XINT_half_end_a #1\W #2\relax #3% -{% - \xint_gob_til_zero #1\XINT_half_end_b 0\space #1#3% -}% -\edef\XINT_half_end_b 0\space 0#1#2#3#4#5#6#7% -{% - \noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7\relax -}% -% \end{macrocode} % \subsection{\csh{xintiiSqrt}, \csh{xintiiSqrtR}, \csh{xintiiSquareRoot}} % \lverb|v1.08. 1.09a uses \xintnum. % @@ -19553,7 +19690,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintbinhex}% - [2014/11/07 v1.1a Expandable binary and hexadecimal conversions (jfB)]% + [2015/08/31 v1.1b Expandable binary and hexadecimal conversions (jfB)]% % \end{macrocode} % \subsection{Constants, etc...} % \lverb!v1.08! @@ -20165,6 +20302,11 @@ $1$ or $-1$. % particular. And they use the \xinttoolsnameimp |\xintloop| rather than the % Plain \TeX{} or \LaTeX{}'s |\loop|. % +% Since |1.1| the package only loads \xintcorenameimp, not \xintnameimp. And +% for the |\xintTypesetEuclideAlgorithm| and |\xintTypesetBezoutAlgorithm| +% macros to be functional the package \xinttoolsnameimp needs to be loaded +% explicitely by the user. +% % \subsection{Catcodes, \protect\eTeX{} and reload detection} % % The code for reload detection was initially copied from \textsc{Heiko @@ -20222,7 +20364,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintgcd}% - [2014/11/07 v1.1a Euclide algorithm with xint package (jfB)]% + [2015/08/31 v1.1b Euclide algorithm with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintGCD}, \csh{xintiiGCD}} % \lverb|The macros of 1.09a benefits from the \xintnum which has been inserted @@ -20924,7 +21066,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintfrac}% - [2014/11/07 v1.1a Expandable operations on fractions (jfB)]% + [2015/08/31 v1.1b Expandable operations on fractions (jfB)]% \chardef\xint_c_xviii 18 % \end{macrocode} % \subsection{\csh{XINT_cntSgnFork}} @@ -23940,7 +24082,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintseries}% - [2014/11/07 v1.1a Expandable partial sums with xint package (jfB)]% + [2015/08/31 v1.1b Expandable partial sums with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintSeries}} % \lverb|& @@ -24445,7 +24587,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintcfrac}% - [2014/11/07 v1.1a Expandable continued fractions with xint package (jfB)]% + [2015/08/31 v1.1b Expandable continued fractions with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintCFrac}} % \begin{macrocode} @@ -25844,7 +25986,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintexpr}% - [2014/11/07 v1.1a Expandable expression parser (jfB)]% + [2015/08/31 v1.1b Expandable expression parser (jfB)]% % \end{macrocode} % \subsection{Locking and unlocking} % je dois réfléchir si je dois bloquer expansion après |unlock_a|, à @@ -28726,7 +28868,7 @@ $1$ or $-1$. Right bracket \] Circumflex \^ Underscore \_ Grave accent \` Left brace \{ Vertical bar \| Right brace \} Tilde \~} -\CheckSum {25558} +\CheckSum {25574} \makeatletter\check@checksum\makeatother \Finale %% End of file xint.dtx diff --git a/Master/texmf-dist/source/generic/xint/xint.ins b/Master/texmf-dist/source/generic/xint/xint.ins index 91163c2649b..252b3344e82 100644 --- a/Master/texmf-dist/source/generic/xint/xint.ins +++ b/Master/texmf-dist/source/generic/xint/xint.ins @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% --------------------------------------------------------------- %% diff --git a/Master/texmf-dist/tex/generic/xint/xint.sty b/Master/texmf-dist/tex/generic/xint/xint.sty index acb7b78dea7..d67777bee4b 100644 --- a/Master/texmf-dist/tex/generic/xint/xint.sty +++ b/Master/texmf-dist/tex/generic/xint/xint.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xint: Expandable operations on big integers %% --------------------------------------------------------------- @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty (loaded by xintcore.sty) \XINT_providespackage \ProvidesPackage{xint}% - [2014/11/07 v1.1a Expandable operations on big integers (jfB)]% + [2015/08/31 v1.1b Expandable operations on big integers (jfB)]% \long\def\xint_firstofthree #1#2#3{#1}% \long\def\xint_secondofthree #1#2#3{#2}% \long\def\xint_thirdofthree #1#2#3{#3}% @@ -101,33 +101,6 @@ \expandafter\space\expandafter 0\xint_gob_til_Z }% \def\XINT_isone_yes #1\Z { 1}% -\def\XINT_SQ #1#2#3#4#5#6#7#8% -{% - \xint_gob_til_R #8\XINT_SQ_end_a\R\XINT_SQ {#8#7#6#5#4#3#2#1}% -}% -\def\XINT_SQ_end_a\R\XINT_SQ #1#2\Z -{% - \XINT_SQ_end_b #1\Z -}% -\def\XINT_SQ_end_b #1#2#3#4#5#6#7% -{% - \xint_gob_til_R - #7\XINT_SQ_end_vii - #6\XINT_SQ_end_vi - #5\XINT_SQ_end_v - #4\XINT_SQ_end_iv - #3\XINT_SQ_end_iii - #2\XINT_SQ_end_ii - \R\XINT_SQ_end_i - \Z #2#3#4#5#6#7% -}% -\def\XINT_SQ_end_vii #1\Z #2#3#4#5#6#7#8\Z { #8}% -\def\XINT_SQ_end_vi #1\Z #2#3#4#5#6#7#8\Z { #7#8000000}% -\def\XINT_SQ_end_v #1\Z #2#3#4#5#6#7#8\Z { #6#7#800000}% -\def\XINT_SQ_end_iv #1\Z #2#3#4#5#6#7#8\Z { #5#6#7#80000}% -\def\XINT_SQ_end_iii #1\Z #2#3#4#5#6#7#8\Z { #4#5#6#7#8000}% -\def\XINT_SQ_end_ii #1\Z #2#3#4#5#6#7#8\Z { #3#4#5#6#7#800}% -\def\XINT_SQ_end_i \Z #1#2#3#4#5#6#7\Z { #1#2#3#4#5#6#70}% \def\xintRev {\romannumeral0\xintrev }% \def\xintrev #1% {% @@ -860,41 +833,6 @@ {% \XINT_mul_M }% -\def\xintiiFDg {\romannumeral0\xintiifdg }% -\def\xintiifdg #1% -{% - \expandafter\XINT_fdg \romannumeral-`0#1\W\Z -}% -\def\xintFDg {\romannumeral0\xintfdg }% -\def\xintfdg #1% -{% - \expandafter\XINT_fdg \romannumeral0\xintnum{#1}\W\Z -}% -\def\XINT_FDg #1{\romannumeral0\XINT_fdg #1\W\Z }% -\def\XINT_fdg #1#2#3\Z -{% - \xint_UDzerominusfork - #1-{ 0}% zero - 0#1{ #2}% negative - 0-{ #1}% positive - \krof -}% -\def\xintiiLDg {\romannumeral0\xintiildg }% -\def\xintiildg #1% -{% - \expandafter\XINT_ldg\expandafter {\romannumeral-`0#1}% -}% -\def\xintLDg {\romannumeral0\xintldg }% -\def\xintldg #1% -{% - \expandafter\XINT_ldg\expandafter {\romannumeral0\xintnum{#1}}% -}% -\def\XINT_LDg #1{\romannumeral0\XINT_ldg {#1}}% -\def\XINT_ldg #1% -{% - \expandafter\XINT_ldg_\romannumeral0\xintreverseorder {#1}\Z -}% -\def\XINT_ldg_ #1#2\Z{ #1}% \def\xintiiMON {\romannumeral0\xintiimon }% \def\xintiimon #1% {% @@ -1305,97 +1243,6 @@ }% \def\XINT_split_fromright_wenttoofar\W\XINT_split_fromright_endsplit_ #1\Z #2% { {}{#2}}% -\def\xintDouble {\romannumeral0\xintdouble }% -\def\xintdouble #1% -{% - \expandafter\XINT_dbl\romannumeral-`0#1% - \R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W -}% -\def\XINT_dbl #1% -{% - \xint_UDzerominusfork - #1-\XINT_dbl_zero - 0#1\XINT_dbl_neg - 0-{\XINT_dbl_pos #1}% - \krof -}% -\def\XINT_dbl_zero #1\Z \W\W\W\W\W\W\W { 0}% -\def\XINT_dbl_neg - {\expandafter\xint_minus_thenstop\romannumeral0\XINT_dbl_pos }% -\def\XINT_dbl_pos -{% - \expandafter\XINT_dbl_a \expandafter{\expandafter}\expandafter 0% - \romannumeral0\XINT_SQ {}% -}% -\def\XINT_dbl_a #1#2#3#4#5#6#7#8#9% -{% - \xint_gob_til_W #9\XINT_dbl_end_a\W - \expandafter\XINT_dbl_b - \the\numexpr \xint_c_x^viii+#2+\xint_c_ii*#9#8#7#6#5#4#3\relax {#1}% -}% -\def\XINT_dbl_b 1#1#2#3#4#5#6#7#8#9% -{% - \XINT_dbl_a {#2#3#4#5#6#7#8#9}{#1}% -}% -\def\XINT_dbl_end_a #1+#2+#3\relax #4% -{% - \expandafter\XINT_dbl_end_b #2#4% -}% -\edef\XINT_dbl_end_b #1#2#3#4#5#6#7#8% -{% - \noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7#8\relax -}% -\def\xintHalf {\romannumeral0\xinthalf }% -\def\xinthalf #1% -{% - \expandafter\XINT_half\romannumeral-`0#1% - \R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W -}% -\def\XINT_half #1% -{% - \xint_UDzerominusfork - #1-\XINT_half_zero - 0#1\XINT_half_neg - 0-{\XINT_half_pos #1}% - \krof -}% -\def\XINT_half_zero #1\Z \W\W\W\W\W\W\W { 0}% -\def\XINT_half_neg {\expandafter\XINT_opp\romannumeral0\XINT_half_pos }% -\def\XINT_half_pos {\expandafter\XINT_half_a\romannumeral0\XINT_SQ {}}% -\def\XINT_half_a #1#2#3#4#5#6#7#8% -{% - \xint_gob_til_W #8\XINT_half_dont\W - \expandafter\XINT_half_b - \the\numexpr \xint_c_x^viii+\xint_c_v*#7#6#5#4#3#2#1\relax #8% -}% -\edef\XINT_half_dont\W\expandafter\XINT_half_b - \the\numexpr \xint_c_x^viii+\xint_c_v*#1#2#3#4#5#6#7\relax \W\W\W\W\W\W\W -{% - \noexpand\expandafter\space - \noexpand\the\numexpr (#1#2#3#4#5#6#7+\xint_c_i)/\xint_c_ii-\xint_c_i \relax -}% -\def\XINT_half_b 1#1#2#3#4#5#6#7#8% -{% - \XINT_half_c {#2#3#4#5#6#7}{#1}% -}% -\def\XINT_half_c #1#2#3#4#5#6#7#8#9% -{% - \xint_gob_til_W #3\XINT_half_end_a #2\W - \expandafter\XINT_half_d - \the\numexpr \xint_c_x^viii+\xint_c_v*#9#8#7#6#5#4#3+#2\relax {#1}% -}% -\def\XINT_half_d 1#1#2#3#4#5#6#7#8#9% -{% - \XINT_half_c {#2#3#4#5#6#7#8#9}{#1}% -}% -\def\XINT_half_end_a #1\W #2\relax #3% -{% - \xint_gob_til_zero #1\XINT_half_end_b 0\space #1#3% -}% -\edef\XINT_half_end_b 0\space 0#1#2#3#4#5#6#7% -{% - \noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7\relax -}% \def\xintiiSqrt {\romannumeral0\xintiisqrt }% \def\xintiiSqrtR {\romannumeral0\xintiisqrtr }% \def\xintiiSquareRoot {\romannumeral0\xintiisquareroot }% diff --git a/Master/texmf-dist/tex/generic/xint/xintbinhex.sty b/Master/texmf-dist/tex/generic/xint/xintbinhex.sty index 0cb0ade9276..1ce6367d2c8 100644 --- a/Master/texmf-dist/tex/generic/xint/xintbinhex.sty +++ b/Master/texmf-dist/tex/generic/xint/xintbinhex.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xintbinhex: Expandable binary and hexadecimal conversions %% --------------------------------------------------------------- @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xintbinhex}% - [2014/11/07 v1.1a Expandable binary and hexadecimal conversions (jfB)]% + [2015/08/31 v1.1b Expandable binary and hexadecimal conversions (jfB)]% \chardef\xint_c_xvi 16 \chardef\xint_c_ii^vii 128 \mathchardef\xint_c_ii^viii 256 diff --git a/Master/texmf-dist/tex/generic/xint/xintcfrac.sty b/Master/texmf-dist/tex/generic/xint/xintcfrac.sty index 98bbffb57ec..b5dfdf05712 100644 --- a/Master/texmf-dist/tex/generic/xint/xintcfrac.sty +++ b/Master/texmf-dist/tex/generic/xint/xintcfrac.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xintcfrac: Expandable continued fractions with xint package %% --------------------------------------------------------------- @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xintcfrac}% - [2014/11/07 v1.1a Expandable continued fractions with xint package (jfB)]% + [2015/08/31 v1.1b Expandable continued fractions with xint package (jfB)]% \def\xintCFrac {\romannumeral0\xintcfrac }% \def\xintcfrac #1% {% diff --git a/Master/texmf-dist/tex/generic/xint/xintcore.sty b/Master/texmf-dist/tex/generic/xint/xintcore.sty index dd3b2c75034..52a531a431f 100644 --- a/Master/texmf-dist/tex/generic/xint/xintcore.sty +++ b/Master/texmf-dist/tex/generic/xint/xintcore.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xintcore: Expandable arithmetic on big integers %% --------------------------------------------------------------- @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xintcore}% - [2014/11/07 v1.1a Expandable arithmetic on big integers (jfB)]% + [2015/08/31 v1.1b Expandable arithmetic on big integers (jfB)]% \def\xint_minus_thenstop { -}% \def\xint_gob_til_zeros_iii #1000{}% \def\xint_gob_til_zeros_iv #10000{}% @@ -151,6 +151,33 @@ \def\XINT_OQ_end_iii #1\Z #2#3#4#5#6#7#8#9\Z { #4#5#6#7#8#9000}% \def\XINT_OQ_end_ii #1\Z #2#3#4#5#6#7#8#9\Z { #3#4#5#6#7#8#900}% \def\XINT_OQ_end_i \Z #1#2#3#4#5#6#7#8\Z { #1#2#3#4#5#6#7#80}% +\def\XINT_SQ #1#2#3#4#5#6#7#8% +{% + \xint_gob_til_R #8\XINT_SQ_end_a\R\XINT_SQ {#8#7#6#5#4#3#2#1}% +}% +\def\XINT_SQ_end_a\R\XINT_SQ #1#2\Z +{% + \XINT_SQ_end_b #1\Z +}% +\def\XINT_SQ_end_b #1#2#3#4#5#6#7% +{% + \xint_gob_til_R + #7\XINT_SQ_end_vii + #6\XINT_SQ_end_vi + #5\XINT_SQ_end_v + #4\XINT_SQ_end_iv + #3\XINT_SQ_end_iii + #2\XINT_SQ_end_ii + \R\XINT_SQ_end_i + \Z #2#3#4#5#6#7% +}% +\def\XINT_SQ_end_vii #1\Z #2#3#4#5#6#7#8\Z { #8}% +\def\XINT_SQ_end_vi #1\Z #2#3#4#5#6#7#8\Z { #7#8000000}% +\def\XINT_SQ_end_v #1\Z #2#3#4#5#6#7#8\Z { #6#7#800000}% +\def\XINT_SQ_end_iv #1\Z #2#3#4#5#6#7#8\Z { #5#6#7#80000}% +\def\XINT_SQ_end_iii #1\Z #2#3#4#5#6#7#8\Z { #4#5#6#7#8000}% +\def\XINT_SQ_end_ii #1\Z #2#3#4#5#6#7#8\Z { #3#4#5#6#7#800}% +\def\XINT_SQ_end_i \Z #1#2#3#4#5#6#7\Z { #1#2#3#4#5#6#70}% \edef\xint_cleanupzeros_andstop #1#2#3#4% {% \noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4\relax @@ -309,6 +336,213 @@ -{ #1}% \krof }% +\def\xintiiFDg {\romannumeral0\xintiifdg }% +\def\xintiifdg #1% +{% + \expandafter\XINT_fdg \romannumeral-`0#1\W\Z +}% +\def\xintFDg {\romannumeral0\xintfdg }% +\def\xintfdg #1% +{% + \expandafter\XINT_fdg \romannumeral0\xintnum{#1}\W\Z +}% +\def\XINT_FDg #1{\romannumeral0\XINT_fdg #1\W\Z }% +\def\XINT_fdg #1#2#3\Z +{% + \xint_UDzerominusfork + #1-{ 0}% zero + 0#1{ #2}% negative + 0-{ #1}% positive + \krof +}% +\def\xintiiLDg {\romannumeral0\xintiildg }% +\def\xintiildg #1% +{% + \expandafter\XINT_ldg\expandafter {\romannumeral-`0#1}% +}% +\def\xintLDg {\romannumeral0\xintldg }% +\def\xintldg #1% +{% + \expandafter\XINT_ldg\expandafter {\romannumeral0\xintnum{#1}}% +}% +\def\XINT_LDg #1{\romannumeral0\XINT_ldg {#1}}% +\def\XINT_ldg #1% +{% + \expandafter\XINT_ldg_\romannumeral0\xintreverseorder {#1}\Z +}% +\def\XINT_ldg_ #1#2\Z{ #1}% +\def\xintDouble {\romannumeral0\xintdouble }% +\def\xintdouble #1% +{% + \expandafter\XINT_dbl\romannumeral-`0#1% + \R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W +}% +\def\XINT_dbl #1% +{% + \xint_UDzerominusfork + #1-\XINT_dbl_zero + 0#1\XINT_dbl_neg + 0-{\XINT_dbl_pos #1}% + \krof +}% +\def\XINT_dbl_zero #1\Z \W\W\W\W\W\W\W { 0}% +\def\XINT_dbl_neg + {\expandafter\xint_minus_thenstop\romannumeral0\XINT_dbl_pos }% +\def\XINT_dbl_pos +{% + \expandafter\XINT_dbl_a \expandafter{\expandafter}\expandafter 0% + \romannumeral0\XINT_SQ {}% +}% +\def\XINT_dbl_a #1#2#3#4#5#6#7#8#9% +{% + \xint_gob_til_W #9\XINT_dbl_end_a\W + \expandafter\XINT_dbl_b + \the\numexpr \xint_c_x^viii+#2+\xint_c_ii*#9#8#7#6#5#4#3\relax {#1}% +}% +\def\XINT_dbl_b 1#1#2#3#4#5#6#7#8#9% +{% + \XINT_dbl_a {#2#3#4#5#6#7#8#9}{#1}% +}% +\def\XINT_dbl_end_a #1+#2+#3\relax #4% +{% + \expandafter\XINT_dbl_end_b #2#4% +}% +\edef\XINT_dbl_end_b #1#2#3#4#5#6#7#8% +{% + \noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7#8\relax +}% +\def\xintHalf {\romannumeral0\xinthalf }% +\def\xinthalf #1% +{% + \expandafter\XINT_half\romannumeral-`0#1% + \R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W +}% +\def\XINT_half #1% +{% + \xint_UDzerominusfork + #1-\XINT_half_zero + 0#1\XINT_half_neg + 0-{\XINT_half_pos #1}% + \krof +}% +\def\XINT_half_zero #1\Z \W\W\W\W\W\W\W { 0}% +\def\XINT_half_neg {\expandafter\XINT_opp\romannumeral0\XINT_half_pos }% +\def\XINT_half_pos {\expandafter\XINT_half_a\romannumeral0\XINT_SQ {}}% +\def\XINT_half_a #1#2#3#4#5#6#7#8% +{% + \xint_gob_til_W #8\XINT_half_dont\W + \expandafter\XINT_half_b + \the\numexpr \xint_c_x^viii+\xint_c_v*#7#6#5#4#3#2#1\relax #8% +}% +\edef\XINT_half_dont\W\expandafter\XINT_half_b + \the\numexpr \xint_c_x^viii+\xint_c_v*#1#2#3#4#5#6#7\relax \W\W\W\W\W\W\W +{% + \noexpand\expandafter\space + \noexpand\the\numexpr (#1#2#3#4#5#6#7+\xint_c_i)/\xint_c_ii-\xint_c_i \relax +}% +\def\XINT_half_b 1#1#2#3#4#5#6#7#8% +{% + \XINT_half_c {#2#3#4#5#6#7}{#1}% +}% +\def\XINT_half_c #1#2#3#4#5#6#7#8#9% +{% + \xint_gob_til_W #3\XINT_half_end_a #2\W + \expandafter\XINT_half_d + \the\numexpr \xint_c_x^viii+\xint_c_v*#9#8#7#6#5#4#3+#2\relax {#1}% +}% +\def\XINT_half_d 1#1#2#3#4#5#6#7#8#9% +{% + \XINT_half_c {#2#3#4#5#6#7#8#9}{#1}% +}% +\def\XINT_half_end_a #1\W #2\relax #3% +{% + \xint_gob_til_zero #1\XINT_half_end_b 0\space #1#3% +}% +\edef\XINT_half_end_b 0\space 0#1#2#3#4#5#6#7% +{% + \noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7\relax +}% +\def\xintDec {\romannumeral0\xintdec }% +\def\xintdec #1% +{% + \expandafter\XINT_dec\romannumeral-`0#1% + \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W +}% +\def\XINT_dec #1% +{% + \xint_UDzerominusfork + #1-\XINT_dec_zero + 0#1\XINT_dec_neg + 0-{\XINT_dec_pos #1}% + \krof +}% +\def\XINT_dec_zero #1\W\W\W\W\W\W\W\W { -1}% +\def\XINT_dec_neg + {\expandafter\xint_minus_thenstop\romannumeral0\XINT_inc_pos }% +\def\XINT_dec_pos +{% + \expandafter\XINT_dec_a \expandafter{\expandafter}% + \romannumeral0\XINT_OQ {}% +}% +\def\XINT_dec_a #1#2#3#4#5#6#7#8#9% +{% + \expandafter\XINT_dec_b + \the\numexpr 11#9#8#7#6#5#4#3#2-\xint_c_i\relax {#1}% +}% +\def\XINT_dec_b 1#1% +{% + \xint_gob_til_one #1\XINT_dec_A 1\XINT_dec_c +}% +\def\XINT_dec_c #1#2#3#4#5#6#7#8#9{\XINT_dec_a {#1#2#3#4#5#6#7#8#9}}% +\def\XINT_dec_A 1\XINT_dec_c #1#2#3#4#5#6#7#8#9% + {\XINT_dec_B {#1#2#3#4#5#6#7#8#9}}% +\def\XINT_dec_B #1#2\W\W\W\W\W\W\W\W +{% + \expandafter\XINT_dec_cleanup + \romannumeral0\XINT_rord_main {}#2% + \xint_relax + \xint_bye\xint_bye\xint_bye\xint_bye + \xint_bye\xint_bye\xint_bye\xint_bye + \xint_relax + #1% +}% +\edef\XINT_dec_cleanup #1#2#3#4#5#6#7#8% + {\noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7#8\relax }% +\def\xintInc {\romannumeral0\xintinc }% +\def\xintinc #1% +{% + \expandafter\XINT_inc\romannumeral-`0#1% + \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W +}% +\def\XINT_inc #1% +{% + \xint_UDzerominusfork + #1-\XINT_inc_zero + 0#1\XINT_inc_neg + 0-{\XINT_inc_pos #1}% + \krof +}% +\def\XINT_inc_zero #1\W\W\W\W\W\W\W\W { 1}% +\def\XINT_inc_neg {\expandafter\XINT_opp\romannumeral0\XINT_dec_pos }% +\def\XINT_inc_pos +{% + \expandafter\XINT_inc_a \expandafter{\expandafter}% + \romannumeral0\XINT_OQ {}% +}% +\def\XINT_inc_a #1#2#3#4#5#6#7#8#9% +{% + \xint_gob_til_W #9\XINT_inc_end\W + \expandafter\XINT_inc_b + \the\numexpr 10#9#8#7#6#5#4#3#2+\xint_c_i\relax {#1}% +}% +\def\XINT_inc_b 1#1% +{% + \xint_gob_til_zero #1\XINT_inc_A 0\XINT_inc_c +}% +\def\XINT_inc_c #1#2#3#4#5#6#7#8#9{\XINT_inc_a {#1#2#3#4#5#6#7#8#9}}% +\def\XINT_inc_A 0\XINT_inc_c #1#2#3#4#5#6#7#8#9% + {\XINT_dec_B {#1#2#3#4#5#6#7#8#9}}% +\def\XINT_inc_end\W #1\relax #2{ 1#2}% \def\XINT_add_A #1#2#3#4#5#6% {% \xint_gob_til_W #3\xint_add_az\W @@ -2017,87 +2251,6 @@ }% \def\XINT_iimod_pos #1#2\Z #3\Z% {\expandafter\xint_secondoftwo_thenstop\romannumeral0\XINT_div_prepare {#2}{#1#3}}% -\def\xintDec {\romannumeral0\xintdec }% -\def\xintdec #1% -{% - \expandafter\XINT_dec\romannumeral-`0#1% - \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W -}% -\def\XINT_dec #1% -{% - \xint_UDzerominusfork - #1-\XINT_dec_zero - 0#1\XINT_dec_neg - 0-{\XINT_dec_pos #1}% - \krof -}% -\def\XINT_dec_zero #1\W\W\W\W\W\W\W\W { -1}% -\def\XINT_dec_neg - {\expandafter\xint_minus_thenstop\romannumeral0\XINT_inc_pos }% -\def\XINT_dec_pos -{% - \expandafter\XINT_dec_a \expandafter{\expandafter}% - \romannumeral0\XINT_OQ {}% -}% -\def\XINT_dec_a #1#2#3#4#5#6#7#8#9% -{% - \expandafter\XINT_dec_b - \the\numexpr 11#9#8#7#6#5#4#3#2-\xint_c_i\relax {#1}% -}% -\def\XINT_dec_b 1#1% -{% - \xint_gob_til_one #1\XINT_dec_A 1\XINT_dec_c -}% -\def\XINT_dec_c #1#2#3#4#5#6#7#8#9{\XINT_dec_a {#1#2#3#4#5#6#7#8#9}}% -\def\XINT_dec_A 1\XINT_dec_c #1#2#3#4#5#6#7#8#9% - {\XINT_dec_B {#1#2#3#4#5#6#7#8#9}}% -\def\XINT_dec_B #1#2\W\W\W\W\W\W\W\W -{% - \expandafter\XINT_dec_cleanup - \romannumeral0\XINT_rord_main {}#2% - \xint_relax - \xint_bye\xint_bye\xint_bye\xint_bye - \xint_bye\xint_bye\xint_bye\xint_bye - \xint_relax - #1% -}% -\edef\XINT_dec_cleanup #1#2#3#4#5#6#7#8% - {\noexpand\expandafter\space\noexpand\the\numexpr #1#2#3#4#5#6#7#8\relax }% -\def\xintInc {\romannumeral0\xintinc }% -\def\xintinc #1% -{% - \expandafter\XINT_inc\romannumeral-`0#1% - \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W -}% -\def\XINT_inc #1% -{% - \xint_UDzerominusfork - #1-\XINT_inc_zero - 0#1\XINT_inc_neg - 0-{\XINT_inc_pos #1}% - \krof -}% -\def\XINT_inc_zero #1\W\W\W\W\W\W\W\W { 1}% -\def\XINT_inc_neg {\expandafter\XINT_opp\romannumeral0\XINT_dec_pos }% -\def\XINT_inc_pos -{% - \expandafter\XINT_inc_a \expandafter{\expandafter}% - \romannumeral0\XINT_OQ {}% -}% -\def\XINT_inc_a #1#2#3#4#5#6#7#8#9% -{% - \xint_gob_til_W #9\XINT_inc_end\W - \expandafter\XINT_inc_b - \the\numexpr 10#9#8#7#6#5#4#3#2+\xint_c_i\relax {#1}% -}% -\def\XINT_inc_b 1#1% -{% - \xint_gob_til_zero #1\XINT_inc_A 0\XINT_inc_c -}% -\def\XINT_inc_c #1#2#3#4#5#6#7#8#9{\XINT_inc_a {#1#2#3#4#5#6#7#8#9}}% -\def\XINT_inc_A 0\XINT_inc_c #1#2#3#4#5#6#7#8#9% - {\XINT_dec_B {#1#2#3#4#5#6#7#8#9}}% -\def\XINT_inc_end\W #1\relax #2{ 1#2}% \XINT_restorecatcodes_endinput% \endinput %% diff --git a/Master/texmf-dist/tex/generic/xint/xintexpr.sty b/Master/texmf-dist/tex/generic/xint/xintexpr.sty index ebeff50164a..af29c4a9b0e 100644 --- a/Master/texmf-dist/tex/generic/xint/xintexpr.sty +++ b/Master/texmf-dist/tex/generic/xint/xintexpr.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xintexpr: Expandable expression parser %% --------------------------------------------------------------- @@ -81,7 +81,7 @@ \XINTsetupcatcodes% \XINT_providespackage \ProvidesPackage{xintexpr}% - [2014/11/07 v1.1a Expandable expression parser (jfB)]% + [2015/08/31 v1.1b Expandable expression parser (jfB)]% \def\xint_gob_til_! #1!{}% this ! has catcode 11 \edef\XINT_expr_lockscan#1!{\noexpand\expandafter\space\noexpand\csname .=#1\endcsname }% \edef\XINT_expr_lockit #1{\noexpand\expandafter\space\noexpand\csname .=#1\endcsname }% diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty index e8028c6d5d6..29258f75d8d 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 v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xintfrac: Expandable operations on fractions %% --------------------------------------------------------------- @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xintfrac}% - [2014/11/07 v1.1a Expandable operations on fractions (jfB)]% + [2015/08/31 v1.1b Expandable operations on fractions (jfB)]% \chardef\xint_c_xviii 18 \def\XINT_cntSgnFork #1% {% diff --git a/Master/texmf-dist/tex/generic/xint/xintgcd.sty b/Master/texmf-dist/tex/generic/xint/xintgcd.sty index 1cc569484d2..f87f9686603 100644 --- a/Master/texmf-dist/tex/generic/xint/xintgcd.sty +++ b/Master/texmf-dist/tex/generic/xint/xintgcd.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xintgcd: Euclidean algorithm with xint package %% --------------------------------------------------------------- @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xintgcd}% - [2014/11/07 v1.1a Euclide algorithm with xint package (jfB)]% + [2015/08/31 v1.1b Euclide algorithm with xint package (jfB)]% \def\xintGCD {\romannumeral0\xintgcd }% \def\xintgcd #1% {% diff --git a/Master/texmf-dist/tex/generic/xint/xintkernel.sty b/Master/texmf-dist/tex/generic/xint/xintkernel.sty index d9fcfb6881f..4ee08194d2e 100644 --- a/Master/texmf-dist/tex/generic/xint/xintkernel.sty +++ b/Master/texmf-dist/tex/generic/xint/xintkernel.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xintkernel: Paraphernalia for the xint packages %% --------------------------------------------------------------- @@ -152,7 +152,7 @@ \fi \XINT_providespackage \ProvidesPackage {xintkernel}% - [2014/11/07 v1.1a Paraphernalia for the xint packages (jfB)]% + [2015/08/31 v1.1b Paraphernalia for the xint packages (jfB)]% \long\def\xint_gobble_ {}% \long\def\xint_gobble_i #1{}% \long\def\xint_gobble_ii #1#2{}% diff --git a/Master/texmf-dist/tex/generic/xint/xintseries.sty b/Master/texmf-dist/tex/generic/xint/xintseries.sty index c2940a1adbe..4245ce90a0c 100644 --- a/Master/texmf-dist/tex/generic/xint/xintseries.sty +++ b/Master/texmf-dist/tex/generic/xint/xintseries.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xintseries: Expandable partial sums with xint package %% --------------------------------------------------------------- @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xintseries}% - [2014/11/07 v1.1a Expandable partial sums with xint package (jfB)]% + [2015/08/31 v1.1b Expandable partial sums with xint package (jfB)]% \def\xintSeries {\romannumeral0\xintseries }% \def\xintseries #1#2% {% diff --git a/Master/texmf-dist/tex/generic/xint/xinttools.sty b/Master/texmf-dist/tex/generic/xint/xinttools.sty index 4d8eb804d17..103667e53fe 100644 --- a/Master/texmf-dist/tex/generic/xint/xinttools.sty +++ b/Master/texmf-dist/tex/generic/xint/xinttools.sty @@ -21,7 +21,7 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle v1.1a (2014/11/07; doc: 2015/03/07) +%% The xint bundle v1.1b (2015/08/31; doc: 2015/08/31) %% Copyright (C) 2013-2015 by Jean-Francois Burnol %% xinttools: Expandable and non-expandable utilities %% --------------------------------------------------------------- @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xinttools}% - [2014/11/07 v1.1a Expandable and non-expandable utilities (jfB)]% + [2015/08/31 v1.1b Expandable and non-expandable utilities (jfB)]% \newtoks\XINT_toks \xint_firstofone{\let\XINT_sptoken= } %<- space here! \def\xintgodef {\global\xintodef }% @@ -102,14 +102,14 @@ \def\XINT_revwbr_finish_b #1#2#3#4#5#6#7#8\Z {% \xint_gob_til_R - #1\XINT_revwbr_finish_c 8% - #2\XINT_revwbr_finish_c 7% - #3\XINT_revwbr_finish_c 6% - #4\XINT_revwbr_finish_c 5% - #5\XINT_revwbr_finish_c 4% - #6\XINT_revwbr_finish_c 3% - #7\XINT_revwbr_finish_c 2% - \R\XINT_revwbr_finish_c 1\Z + #1\XINT_revwbr_finish_c \xint_c_viii + #2\XINT_revwbr_finish_c \xint_c_vii + #3\XINT_revwbr_finish_c \xint_c_vi + #4\XINT_revwbr_finish_c \xint_c_v + #5\XINT_revwbr_finish_c \xint_c_iv + #6\XINT_revwbr_finish_c \xint_c_iii + #7\XINT_revwbr_finish_c \xint_c_ii + \R\XINT_revwbr_finish_c \xint_c_i\Z }% \def\XINT_revwbr_finish_c #1#2\Z {% @@ -196,14 +196,14 @@ \def\XINT_csvtol_finish_b #1,#2,#3,#4,#5,#6,#7,#8\Z {% \xint_gob_til_R - #1\XINT_csvtol_finish_c 8% - #2\XINT_csvtol_finish_c 7% - #3\XINT_csvtol_finish_c 6% - #4\XINT_csvtol_finish_c 5% - #5\XINT_csvtol_finish_c 4% - #6\XINT_csvtol_finish_c 3% - #7\XINT_csvtol_finish_c 2% - \R\XINT_csvtol_finish_c 1\Z + #1\XINT_csvtol_finish_c \xint_c_viii + #2\XINT_csvtol_finish_c \xint_c_vii + #3\XINT_csvtol_finish_c \xint_c_vi + #4\XINT_csvtol_finish_c \xint_c_v + #5\XINT_csvtol_finish_c \xint_c_iv + #6\XINT_csvtol_finish_c \xint_c_iii + #7\XINT_csvtol_finish_c \xint_c_ii + \R\XINT_csvtol_finish_c \xint_c_i\Z }% \def\XINT_csvtol_finish_c #1#2\Z {% |