summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-21 22:15:40 +0000
committerKarl Berry <karl@freefriends.org>2021-02-21 22:15:40 +0000
commit55349b823b85a84a670fd885ac6fa8035893ebf2 (patch)
tree67fc48d51516d8341af748ddcf6d4091a2303ea6
parent037b5617dc1197da3c4065d8784e9e6887caab2a (diff)
xint (21feb21)
git-svn-id: svn://tug.org/texlive/trunk@57832 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/generic/xint/CHANGES.html123
-rw-r--r--Master/texmf-dist/doc/generic/xint/README.md19
-rw-r--r--Master/texmf-dist/doc/generic/xint/sourcexint.pdfbin997928 -> 1026778 bytes
-rw-r--r--Master/texmf-dist/doc/generic/xint/xint.pdfbin993300 -> 1006708 bytes
-rw-r--r--Master/texmf-dist/source/generic/xint/xint.dtx222
-rw-r--r--Master/texmf-dist/tex/generic/xint/xint.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintbinhex.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintcfrac.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintcore.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintexpr.sty16
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintfrac.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintgcd.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintkernel.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintlog.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintseries.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xinttools.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xinttrig.sty6
17 files changed, 250 insertions, 176 deletions
diff --git a/Master/texmf-dist/doc/generic/xint/CHANGES.html b/Master/texmf-dist/doc/generic/xint/CHANGES.html
index ea5747f29b5..32fcfbe4eeb 100644
--- a/Master/texmf-dist/doc/generic/xint/CHANGES.html
+++ b/Master/texmf-dist/doc/generic/xint/CHANGES.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
- <meta name="author" content="xint 1.4b" />
+ <meta name="author" content="xint 1.4c" />
<title>CHANGE LOG</title>
<style type="text/css">
code{white-space: pre-wrap;}
@@ -25,44 +25,47 @@
<body>
<header>
<h1 class="title">CHANGE LOG</h1>
-<p class="author">xint 1.4b</p>
-<p class="date">2020/02/25</p>
+<p class="author">xint 1.4c</p>
+<p class="date">2021/02/20</p>
</header>
<nav id="TOC">
<ul>
+<li><a href="#c-20210220"><code>1.4c (2021/02/20)</code></a><ul>
+<li><a href="#bug-fixes">Bug fixes</a></li>
+</ul></li>
<li><a href="#b-20200225"><code>1.4b (2020/02/25)</code></a><ul>
<li><a href="#future">Future</a></li>
<li><a href="#new-features">New features</a></li>
-<li><a href="#bug-fixes">Bug fixes</a></li>
+<li><a href="#bug-fixes-1">Bug fixes</a></li>
</ul></li>
<li><a href="#a-20200219"><code>1.4a (2020/02/19)</code></a><ul>
<li><a href="#breaking-changes">Breaking changes</a></li>
<li><a href="#new-features-1">New features</a></li>
-<li><a href="#bug-fixes-1">Bug fixes</a></li>
+<li><a href="#bug-fixes-2">Bug fixes</a></li>
</ul></li>
<li><a href="#section"><code>1.4 (2020/01/31)</code></a><ul>
<li><a href="#breaking-changes-1">Breaking changes</a></li>
<li><a href="#improvements-and-new-features">Improvements and new features</a></li>
-<li><a href="#bug-fixes-2">Bug fixes</a></li>
+<li><a href="#bug-fixes-3">Bug fixes</a></li>
<li><a href="#todo">TODO</a></li>
</ul></li>
<li><a href="#f-20190910"><code>1.3f (2019/09/10)</code></a><ul>
<li><a href="#improvements-and-new-features-1">Improvements and new features</a></li>
-<li><a href="#bug-fixes-3">Bug fixes</a></li>
+<li><a href="#bug-fixes-4">Bug fixes</a></li>
</ul></li>
<li><a href="#e-20190405"><code>1.3e (2019/04/05)</code></a><ul>
<li><a href="#breaking-changes-2">Breaking changes</a></li>
<li><a href="#improvements-and-new-features-2">Improvements and new features</a></li>
-<li><a href="#bug-fixes-4">Bug fixes</a></li>
+<li><a href="#bug-fixes-5">Bug fixes</a></li>
</ul></li>
<li><a href="#d-20190106"><code>1.3d (2019/01/06)</code></a><ul>
<li><a href="#breaking-changes-3">Breaking changes</a></li>
<li><a href="#improvements-and-new-features-3">Improvements and new features</a></li>
-<li><a href="#bug-fixes-5">Bug fixes</a></li>
+<li><a href="#bug-fixes-6">Bug fixes</a></li>
</ul></li>
<li><a href="#c-20180617"><code>1.3c (2018/06/17)</code></a><ul>
<li><a href="#improvements-and-new-features-4">Improvements and new features</a></li>
-<li><a href="#bug-fixes-6">Bug fixes</a></li>
+<li><a href="#bug-fixes-7">Bug fixes</a></li>
</ul></li>
<li><a href="#b-20180518"><code>1.3b (2018/05/18)</code></a><ul>
<li><a href="#improvements-and-new-features-5">Improvements and new features</a></li>
@@ -70,7 +73,7 @@
<li><a href="#a-20180307"><code>1.3a (2018/03/07)</code></a><ul>
<li><a href="#removed">Removed</a></li>
<li><a href="#improvements-and-new-features-6">Improvements and new features</a></li>
-<li><a href="#bug-fixes-7">Bug fixes</a></li>
+<li><a href="#bug-fixes-8">Bug fixes</a></li>
</ul></li>
<li><a href="#section-1"><code>1.3 (2018/03/01)</code></a><ul>
<li><a href="#breaking-changes-4">Breaking changes</a></li>
@@ -78,12 +81,12 @@
</ul></li>
<li><a href="#q-20180206"><code>1.2q (2018/02/06)</code></a><ul>
<li><a href="#improvements-and-new-features-8">Improvements and new features</a></li>
-<li><a href="#bug-fixes-8">Bug fixes</a></li>
+<li><a href="#bug-fixes-9">Bug fixes</a></li>
</ul></li>
<li><a href="#p-20171205"><code>1.2p (2017/12/05)</code></a><ul>
<li><a href="#breaking-changes-5">Breaking changes</a></li>
<li><a href="#improvements-and-new-features-9">Improvements and new features</a></li>
-<li><a href="#bug-fixes-9">Bug fixes</a></li>
+<li><a href="#bug-fixes-10">Bug fixes</a></li>
</ul></li>
<li><a href="#o-20170829"><code>1.2o (2017/08/29)</code></a><ul>
<li><a href="#breaking-changes-6">Breaking changes</a></li>
@@ -96,31 +99,31 @@
<li><a href="#m-20170731"><code>1.2m (2017/07/31)</code></a><ul>
<li><a href="#breaking-changes-8">Breaking changes</a></li>
<li><a href="#improvements-and-new-features-11">Improvements and new features</a></li>
-<li><a href="#bug-fixes-10">Bug fixes</a></li>
+<li><a href="#bug-fixes-11">Bug fixes</a></li>
</ul></li>
<li><a href="#l-20170726"><code>1.2l (2017/07/26)</code></a><ul>
<li><a href="#removed-1">Removed</a></li>
<li><a href="#improvements-and-new-features-12">Improvements and new features</a></li>
-<li><a href="#bug-fixes-11">Bug fixes</a></li>
+<li><a href="#bug-fixes-12">Bug fixes</a></li>
</ul></li>
<li><a href="#k-20170106"><code>1.2k (2017/01/06)</code></a><ul>
<li><a href="#breaking-changes-9">Breaking changes</a></li>
<li><a href="#improvements-and-new-features-13">Improvements and new features</a></li>
-<li><a href="#bug-fixes-12">Bug fixes</a></li>
+<li><a href="#bug-fixes-13">Bug fixes</a></li>
</ul></li>
<li><a href="#j-20161222"><code>1.2j (2016/12/22)</code></a><ul>
<li><a href="#improvements-and-new-features-14">Improvements and new features</a></li>
-<li><a href="#bug-fixes-13">Bug fixes</a></li>
+<li><a href="#bug-fixes-14">Bug fixes</a></li>
</ul></li>
<li><a href="#i-20161213"><code>1.2i (2016/12/13)</code></a><ul>
<li><a href="#breaking-changes-10">Breaking changes</a></li>
<li><a href="#removed-2">Removed</a></li>
<li><a href="#improvements-and-new-features-15">Improvements and new features</a></li>
-<li><a href="#bug-fixes-14">Bug fixes</a></li>
+<li><a href="#bug-fixes-15">Bug fixes</a></li>
</ul></li>
<li><a href="#h-20161120"><code>1.2h (2016/11/20)</code></a><ul>
<li><a href="#improvements-and-new-features-16">Improvements and new features</a></li>
-<li><a href="#bug-fixes-15">Bug fixes</a></li>
+<li><a href="#bug-fixes-16">Bug fixes</a></li>
</ul></li>
<li><a href="#g-20160319"><code>1.2g (2016/03/19)</code></a><ul>
<li><a href="#breaking-changes-11">Breaking changes</a></li>
@@ -129,26 +132,26 @@
<li><a href="#f-20160312"><code>1.2f (2016/03/12)</code></a><ul>
<li><a href="#breaking-changes-12">Breaking changes</a></li>
<li><a href="#improvements-and-new-features-18">Improvements and new features</a></li>
-<li><a href="#bug-fixes-16">Bug fixes</a></li>
+<li><a href="#bug-fixes-17">Bug fixes</a></li>
</ul></li>
<li><a href="#e-20151122"><code>1.2e (2015/11/22)</code></a><ul>
<li><a href="#improvements-and-new-features-19">Improvements and new features</a></li>
-<li><a href="#bug-fixes-17">Bug fixes</a></li>
+<li><a href="#bug-fixes-18">Bug fixes</a></li>
</ul></li>
<li><a href="#d-20151118"><code>1.2d (2015/11/18)</code></a><ul>
<li><a href="#improvements-and-new-features-20">Improvements and new features</a></li>
-<li><a href="#bug-fixes-18">Bug fixes</a></li>
+<li><a href="#bug-fixes-19">Bug fixes</a></li>
</ul></li>
<li><a href="#c-20151116"><code>1.2c (2015/11/16)</code></a><ul>
<li><a href="#improvements-and-new-features-21">Improvements and new features</a></li>
-<li><a href="#bug-fixes-19">Bug fixes</a></li>
+<li><a href="#bug-fixes-20">Bug fixes</a></li>
</ul></li>
<li><a href="#b-20151029"><code>1.2b (2015/10/29)</code></a><ul>
-<li><a href="#bug-fixes-20">Bug fixes</a></li>
+<li><a href="#bug-fixes-21">Bug fixes</a></li>
</ul></li>
<li><a href="#a-20151019"><code>1.2a (2015/10/19)</code></a><ul>
<li><a href="#improvements-and-new-features-22">Improvements and new features</a></li>
-<li><a href="#bug-fixes-21">Bug fixes</a></li>
+<li><a href="#bug-fixes-22">Bug fixes</a></li>
</ul></li>
<li><a href="#section-2"><code>1.2 (2015/10/10)</code></a><ul>
<li><a href="#removed-3">Removed</a></li>
@@ -162,7 +165,7 @@
<li><a href="#removed-4">Removed</a></li>
<li><a href="#deprecated-1">Deprecated</a></li>
<li><a href="#improvements-and-new-features-24">Improvements and new features</a></li>
-<li><a href="#bug-fixes-22">Bug fixes</a></li>
+<li><a href="#bug-fixes-23">Bug fixes</a></li>
</ul></li>
<li><a href="#n-20140401"><code>1.09n (2014/04/01)</code></a></li>
<li><a href="#m-20140226"><code>1.09m (2014/02/26)</code></a></li>
@@ -190,10 +193,15 @@
<li><a href="#section-10"><code>1.0 (2013/03/28)</code></a></li>
</ul>
</nav>
-<pre><code>Source: xint.dtx 1.4b 2020/02/25 (doc 2020/02/25)
+<pre><code>Source: xint.dtx 1.4c 2021/02/20 (doc 2021/02/20)
Author: Jean-Francois Burnol
Info: Expandable operations on big integers, decimals, fractions
License: LPPL 1.3c</code></pre>
+<h2 id="c-20210220"><code>1.4c (2021/02/20)</code></h2>
+<h3 id="bug-fixes">Bug fixes</h3>
+<ul>
+<li>Fix <code>1.4</code> regression which broke syntax <code>varname(...)</code> which supposedly is allowed and inserts a tacit multiplication.</li>
+</ul>
<h2 id="b-20200225"><code>1.4b (2020/02/25)</code></h2>
<p>All changes regard the <strong>xintexpr</strong> module.</p>
<h3 id="future">Future</h3>
@@ -207,27 +215,28 @@ License: LPPL 1.3c</code></pre>
<li><p>Function <code>zip()</code> is modeled on Python’s function of the same name.</p></li>
<li><p>Function <code>flat()</code> removes all nesting to produce a “one-dimensional” list having the exact same leaves (some possibly empty) as the original (in the same order).</p></li>
<li><p>Chaining of comparison operators (e.g. <code>x&lt;y&lt;z</code>) as in Python (but all comparisons are done even if one is found false) and l3fp.</p></li>
-<li><p>Strangely, it was possible since <code>1.4</code>’s <code>\xintFracToSciE</code> to configure the separator between mantissas and exponents in the output of <code>\xinteval</code> but this did not modify the output of <code>\xintfloateval</code>. This is now fixed via the added <code>\xintPFloatE</code>.</p></li>
+<li><p>It was possible since <code>1.4</code>’s <code>\xintFracToSciE</code> to configure the separator between mantissas and exponents in the output of <code>\xinteval</code> but strangely there was no way to customize the output of <code>\xintfloateval</code>. The added <code>\xintPFloatE</code> fixes this.</p></li>
</ul>
-<h3 id="bug-fixes">Bug fixes</h3>
+<h3 id="bug-fixes-1">Bug fixes</h3>
<ul>
-<li><code>\xintieval{[D]...}</code> with a negative <code>D</code> (a feature added at <code>1.4a</code>) used erroneously a catcode 12 <code>e</code> in output. And its customization via <code>\xintFracToSciE</code> remained without effect.</li>
+<li><code>\xintieval{[D]...}</code> with a negative <code>D</code> (a feature added at <code>1.4a</code>) used erroneously a catcode 12 <code>e</code> in output, which moreover remained immuned to the <code>\xintFracToSciE</code> setting.</li>
</ul>
<h2 id="a-20200219"><code>1.4a (2020/02/19)</code></h2>
+<p>All changes regard the <strong>xintexpr</strong> module.</p>
<h3 id="breaking-changes">Breaking changes</h3>
<ul>
-<li><strong>xintexpr</strong>: the macros implementing customization of <code>\xintthealign</code> have modified meanings and names.</li>
+<li>The macros implementing customization of <code>\xintthealign</code> have modified meanings and names.</li>
</ul>
<h3 id="new-features-1">New features</h3>
<ul>
-<li><p><strong>xintexpr</strong>: <code>\xintthespaceseparated</code> (serves to provide suitable input to PS-Tricks <code>\listplot</code>).</p></li>
-<li><p><strong>xintexpr</strong>: the optional argument <code>[D]</code> to <code>\xintieval/\xintiexpr</code> can be negative, with the same meaning as the non-negative case, i.e. rounding to an integer multiple of <code>10^(-D)</code>.</p>
+<li><p><code>\xintthespaceseparated</code> (serves to provide suitable input to PS-Tricks <code>\listplot</code>).</p></li>
+<li><p>The optional argument <code>[D]</code> to <code>\xintieval/\xintiexpr</code> can be negative, with the same meaning as the non-negative case, i.e. rounding to an integer multiple of <code>10^(-D)</code>.</p>
<p>The same applies to the functions <code>trunc()</code> and <code>round()</code>. And to the <code>\xintTrunc</code>, <code>\xintRound</code>, <code>\xintiTrunc</code>, and <code>\xintiRound</code> macros of <strong>xintfrac</strong>.</p></li>
</ul>
-<h3 id="bug-fixes-1">Bug fixes</h3>
+<h3 id="bug-fixes-2">Bug fixes</h3>
<ul>
-<li><p><strong>xintexpr</strong>: usage of <code>round()</code> and <code>trunc()</code> within <code>\xintdeffunc</code> got broken at <code>1.4</code>.</p></li>
-<li><p><strong>xintexpr</strong>: <code>add()</code> and <code>mul()</code> were supposedly accepting the <code>omit</code>, <code>abort</code> and <code>break()</code> keywords since <code>1.4</code> but this was broken.</p></li>
+<li><p>Usage of <code>round()</code> and <code>trunc()</code> within <code>\xintdeffunc</code> got broken at <code>1.4</code>.</p></li>
+<li><p><code>add()</code> and <code>mul()</code> were supposedly accepting the <code>omit</code>, <code>abort</code> and <code>break()</code> keywords since <code>1.4</code> but this was broken.</p></li>
</ul>
<h2 id="section"><code>1.4 (2020/01/31)</code></h2>
<h3 id="breaking-changes-1">Breaking changes</h3>
@@ -276,7 +285,7 @@ License: LPPL 1.3c</code></pre>
<li><p>Function declarations are able to parse a much wider part of the syntax, but some severe limitations remain. Refer to the user manual for related information.</p></li>
<li><p>We have made an effort on some error messages, and when working interactively in a shell it may even be sometimes possible to insert for example a correct variable or function name in place of the not recognized one. But don’t expect miracles when trying to intervene in the midst of a purely expandable expansion…</p></li>
</ul>
-<h3 id="bug-fixes-2">Bug fixes</h3>
+<h3 id="bug-fixes-3">Bug fixes</h3>
<p>Bugs? Those identified in <code>1.3f</code> were almost features. As per <code>1.4</code> the code base of <strong>xintexpr</strong> received multiple successive core refactorings and added numerous new features, and our test suite although significantly enlarged is not yet extensive enough. Please report bugs by mail.</p>
<h3 id="todo">TODO</h3>
<ul>
@@ -292,7 +301,7 @@ License: LPPL 1.3c</code></pre>
<li><p><strong>xintexpr</strong>: add starred variants <code>\xintDigits*</code> and <code>\xintSetDigits*</code> which execute <code>\xintreloadxinttrig</code>.</p>
<p>Revert 1.3e ban on usage of <code>\xinteval</code> et al. inside expressions by <code>\xintdeffunc</code>. And make them usable also inside macro definitions via <code>\xintNewExpr</code>.</p></li>
</ul>
-<h3 id="bug-fixes-3">Bug fixes</h3>
+<h3 id="bug-fixes-4">Bug fixes</h3>
<ul>
<li><p><strong>xintexpr</strong>: fix bug preventing usage of <code>\xintdefefunc</code> to define a function without variables.</p>
<p>Fix some issue with <code>\xintfloatexpr[D]..\relax</code> if used inside an expression parsed by <code>\xintdeffunc</code> et al.</p></li>
@@ -312,7 +321,7 @@ License: LPPL 1.3c</code></pre>
<li><p><strong>xintexpr</strong>: <code>\xintensuredummy</code>, <code>\xintrestorelettervar</code>.</p></li>
<li><p>The optional argument of <code>\xintfloatexpr</code> or <code>\xintfloateval</code> (it must be at start of braced argument) can be negative; it then means to trim (and round) from the output at float precision that many least significant digits.</p></li>
</ul>
-<h3 id="bug-fixes-4">Bug fixes</h3>
+<h3 id="bug-fixes-5">Bug fixes</h3>
<ul>
<li>Some bugfixes related to user functions with no variables at all; they were dysfunctional.</li>
</ul>
@@ -331,7 +340,7 @@ License: LPPL 1.3c</code></pre>
<li><p><strong>xintexpr</strong>: functions <code>isone()</code> and <code>isint()</code>.</p></li>
<li><p><strong>xintexpr</strong>: <code>\xinteval</code>, <code>\xintieval</code>, <code>\xintiieval</code>, and <code>\xintfloateval</code> as synonyms to <code>\xinttheexpr...\relax</code> etc…, but with the (comma-separated) expression as a usual braced macro argument.</p></li>
</ul>
-<h3 id="bug-fixes-5">Bug fixes</h3>
+<h3 id="bug-fixes-6">Bug fixes</h3>
<ul>
<li><strong>xintcore</strong>, <strong>xintexpr</strong> : division in <code>\xintiiexpr</code> was broken for a zero dividend and a one-digit divisor (e.g. <code>0//7</code>) since <code>1.2p</code> due to a bug in <code>\xintiiDivMod</code> for such arguments. The bug was signaled (thanks to Kpym for report) and fixed shortly after <code>1.3c</code> release but I then completely forgot to upload a bugfix release to CTAN at that time, apologies for that.</li>
</ul>
@@ -344,7 +353,7 @@ License: LPPL 1.3c</code></pre>
<li><p><strong>xintexpr</strong>: <code>\xintdefvar</code>, <code>\xintdeffunc</code> and their variants try to set the catcode of the semi-colon which delimits their arguments; of course this will not work if that catcode is already frozen.</p></li>
<li><p><code>\xintUniformDeviate</code> is better documented and <code>sourcexint.pdf</code> is better hyperlinked and includes indices for the macros defined by each package.</p></li>
</ul>
-<h3 id="bug-fixes-6">Bug fixes</h3>
+<h3 id="bug-fixes-7">Bug fixes</h3>
<ul>
<li><strong>xintfrac</strong>: since <code>1.3</code> release, it loaded <strong>xintgcd</strong> in contradiction to what the documentation says (hence also <strong>xintexpr</strong> loaded <strong>xintgcd</strong> automatically). There is no actual dependency so the loading is removed for now.</li>
</ul>
@@ -370,7 +379,7 @@ License: LPPL 1.3c</code></pre>
<li><p><strong>xintfrac</strong>: <code>\xintREZ</code> is faster on inputs having one hundred digits or more.</p></li>
<li><p>Added to the user manual mention of macros such as <code>\xintDivFloor</code>, <code>\xintMod</code>, <code>\xintModTrunc</code>, which had been left out so far.</p></li>
</ul>
-<h3 id="bug-fixes-7">Bug fixes</h3>
+<h3 id="bug-fixes-8">Bug fixes</h3>
<ul>
<li><strong>xintexpr</strong>: the mechanism for adjunction to the expression parsers of user defined functions was refactored and improved at previous release <code>1.3</code>: in particular recursive definitions became possible. But an oversight made these recursive functions quite inefficient (to remain polite.) This release fixes the problem.</li>
</ul>
@@ -393,7 +402,7 @@ License: LPPL 1.3c</code></pre>
<ul>
<li><strong>xintexpr</strong>: tacit multiplication extended to cases such as <code>3!4!5!</code> or <code>(1+2)3</code>.</li>
</ul>
-<h3 id="bug-fixes-8">Bug fixes</h3>
+<h3 id="bug-fixes-9">Bug fixes</h3>
<ul>
<li><strong>xintcore</strong>: sadly, refactoring at <code>1.2l</code> of subtraction left an extra character in an inner macro causing breakage in some rare circumstances. This should not have escaped our test suite!</li>
</ul>
@@ -412,7 +421,7 @@ License: LPPL 1.3c</code></pre>
<li><p><strong>xintexpr</strong>: <code>\xintdefvar</code>’s syntax is extended to allow simultaneous assignments. Examples: <code>\xintdefvar x1, x2, x3 := 1, 3**10, 3**20;</code> or <code>\xintdefiivar A, B := B, A 'mod' B;</code> for already defined variables <code>A</code> and <code>B</code>.</p></li>
<li><p><strong>xintexpr</strong>: added <code>divmod()</code> to the built-in functions. It is associated with floored division, like the Python language <code>divmod()</code>. Related support macros added to <strong>xintcore</strong>, and <strong>xintfrac</strong>.</p></li>
</ul>
-<h3 id="bug-fixes-9">Bug fixes</h3>
+<h3 id="bug-fixes-10">Bug fixes</h3>
<ul>
<li><p><strong>xintgcd</strong>: <code>\xintBezout{6}{3}</code> (for example) expanded to <code>{6}{3}{-0}{-1}{3}</code>, but the <code>-0</code> should have been <code>0</code>.</p></li>
<li><p><strong>xintgcd</strong>: it still used macro <code>\xintiAbs</code> although the latter had been deprecated from <strong>xintcore</strong>.</p></li>
@@ -455,7 +464,7 @@ License: LPPL 1.3c</code></pre>
<ul>
<li><strong>xintbinhex</strong>: all macros have been rewritten using techniques from the 1.2 release (they had remained unmodified since <code>1.08</code> of <code>2013/06/07</code>.) The new macros are faster but limited to a few thousand digits. The <code>1.08</code> routines could handle tens of thousands of digits, but not in a reasonable time.</li>
</ul>
-<h3 id="bug-fixes-10">Bug fixes</h3>
+<h3 id="bug-fixes-11">Bug fixes</h3>
<ul>
<li><p>user manual: the <code>Changes</code> section wrongly stated at <code>1.2l</code> that the macros of <strong>xintbinhex</strong> had been made robust against non terminated input such as <code>\number\mathcode`\-</code>. Unfortunately the author fell into the trap of believing his own documentation and he forgot to actually implement the change. Now done.</p></li>
<li><p>user manual: the PDF bookmarks were messed up.</p></li>
@@ -476,7 +485,7 @@ License: LPPL 1.3c</code></pre>
<p>The situation with expressions is unchanged: syntax such as <code>\xintexpr \numexpr1+2\relax</code> is illegal as the ending <code>\relax</code> token will get swallowed by the <code>\numexpr</code>; but it is needed by the <code>xintexpr</code>-ession parser, hence the parser will expand forward and presumably end with in an “illegal token” error, or provoke some low-level TeX error (N.B.: a closing brace <code>}</code> for example can not terminate an <code>xintexpr</code>-ession, the parser must find a <code>\relax</code> token at some point). Thus there must be in this example a second <code>\relax</code>.</p></li>
<li><p>experimental code for error conditions; there is no complete user interface yet, it is done in preparation for next major release and is completely unstable and undocumented.</p></li>
</ul>
-<h3 id="bug-fixes-11">Bug fixes</h3>
+<h3 id="bug-fixes-12">Bug fixes</h3>
<ul>
<li><p><strong>xintbinhex</strong>: since <code>1.2 (2015/10/10)</code>, <code>\xintHexToDec</code> was broken due to an undefined macro (it was in <code>xint.sty</code>, but the module by itself is supposedly dependent only upon <code>xintcore.sty</code>).</p></li>
<li><p><strong>xintgcd</strong>: macro <code>\xintBezout</code> produced partially wrong output if one of its two arguments was zero.</p></li>
@@ -495,7 +504,7 @@ License: LPPL 1.3c</code></pre>
<li><p>added <code>\xintiSqrtR</code>, there was only <code>\xintiiSqrtR</code> alongside <code>\xintiSqrt</code> and <code>\xintiiSqrt</code> (<strong>xint</strong>).</p></li>
<li><p>added non public <code>\xintLastItem:f:csv</code> to <strong>xinttools</strong> for faster <code>last()</code> function, and improved <code>\xintNewExpr</code> compatibility. Also <code>\xintFirstItem:f:csv</code>.</p></li>
</ul>
-<h3 id="bug-fixes-12">Bug fixes</h3>
+<h3 id="bug-fixes-13">Bug fixes</h3>
<ul>
<li><p>the <code>1.2f</code> half-integer powers computed within <code>\xintfloatexpr</code> had a silly rounding to the target precision just <em>before</em> the final square-root extraction, thus possibly losing some precision. The <code>1.2k</code> implementation keeps guard digits for this final square root extraction. As for integer exponents, it is guaranteed that the computed value differs from the exact one by less than <code>0.52 ulp</code> (for inputs having at most <code>\xinttheDigits</code> digits.)</p></li>
<li><p>more regressions from <code>1.2i</code> were fixed: <code>\xintLen</code> (<strong>xint</strong>, <strong>xintfrac</strong>) and <code>\xintDouble</code> (<strong>xintcore</strong>) had forgotten that their argument was allowed to be negative. A regression test suite is now in place and is being slowly expanded to cover more macros.</p></li>
@@ -511,7 +520,7 @@ License: LPPL 1.3c</code></pre>
</ol></li>
<li><p>significant documentations tweaks (inclusive of suppressing things!), and among them two beautiful hyperlinked tables with both horizontal and vertical rules which bring the documentation of the <strong>xintexpr</strong> syntax to a kind of awe-inspiring perfection… except that implementation of some math functions is still lacking.</p></li>
</ul>
-<h3 id="bug-fixes-13">Bug fixes</h3>
+<h3 id="bug-fixes-14">Bug fixes</h3>
<ul>
<li>fix two <code>1.2i</code> regressions caused by undefined macros (<code>\xintNthElt</code> in certain branches and <code>[list][N]</code> item extraction in certain cases.) The test files existed but were not executed prior to release. Automation in progress.</li>
</ul>
@@ -543,7 +552,7 @@ License: LPPL 1.3c</code></pre>
<li><p>the documentation has again been (slightly) re-organized; it has a new sub-section on the Miller-Rabin primality test, to illustrate some use of <code>\xintNewFunction</code> for recursive definitions.</p></li>
<li><p>the documentation has dropped the LaTeX “command” terminology (which had been used initially in 2013 for some forgotten reasons and should have been removed long ago) and uses only the more apt “macro”, as after all, all of <strong>xint</strong> is about expansion of macros (plus the use of <code>\numexpr</code>).</p></li>
</ul>
-<h3 id="bug-fixes-14">Bug fixes</h3>
+<h3 id="bug-fixes-15">Bug fixes</h3>
<ul>
<li><code>\xintDecSplitL</code> and <code>\xintDecSplitR</code> from <strong>xint</strong> produced their output in a spurious brace pair (bug introduced in <code>1.2f</code>).</li>
</ul>
@@ -553,7 +562,7 @@ License: LPPL 1.3c</code></pre>
<li><p>new macro <code>\xintNewFunction</code> in <strong>xintexpr</strong> which allows to extend the parser syntax with functions in situations where <code>\xintdeffunc</code> is not usable (typically, because dummy variables are used over a not yet determined range of values because it depends on the variables).</p></li>
<li><p>after three years of strict obedience to <code>xint</code> prefix, now <code>\thexintexpr</code>, <code>\thexintiexpr</code>, <code>\thexintfloatexpr</code>, and <code>\thexintiiexpr</code> are provided as synonyms to <code>\xinttheexpr</code>, etc…</p></li>
</ul>
-<h3 id="bug-fixes-15">Bug fixes</h3>
+<h3 id="bug-fixes-16">Bug fixes</h3>
<ul>
<li><p>the <code>(cond)?{foo}{bar}</code> operator from <strong>xintexpr</strong> mis-behaved in certain circumstances (such as an empty <code>foo</code>).</p></li>
<li><p>the <strong>xintexpr</strong> <code>1.2f</code> <code>binomial</code> function (which uses <code>\xintiiBinomial</code> from <strong>xint.sty</strong> or <code>\xintFloatBinomial</code> from <strong>xintfrac.sty</strong>) deliberately raised an error for <code>binomial(x,y)</code> with <code>y&lt;0</code> or <code>x&lt;y</code>. This was unfortunate, and it now simply evaluates to zero in such cases.</p></li>
@@ -593,7 +602,7 @@ License: LPPL 1.3c</code></pre>
<li><p>(TeXperts only) the macros defined (internally) from <code>\xintdeffunc</code> et al. constructs do not incorporate an initial <code>\romannumeral</code> anymore.</p></li>
<li><p>renewed desperate efforts at improving the documentation by random shuffling of sections and well thought additions; cuts were considered and even performed.</p></li>
</ul>
-<h3 id="bug-fixes-16">Bug fixes</h3>
+<h3 id="bug-fixes-17">Bug fixes</h3>
<ul>
<li><p>squaring macro <code>\xintSqr</code> from <strong>xintfrac.sty</strong> was broken due to a misspelled sub-macro name. Dates back to <code>1.1</code> release of <code>2014/10/28</code> <code>:-((</code>.</p></li>
<li><p><code>1.2c</code>’s fix to the subtraction bug from <code>1.2</code> introduced another bug, which in some cases could create leading zeroes in the output, or even worse. This could invalidate other routines using subtractions, like <code>\xintiiSquareRoot</code>.</p></li>
@@ -607,7 +616,7 @@ License: LPPL 1.3c</code></pre>
<li><p>a space in <code>\xintdeffunc f(x)&lt;space&gt;:= expression ;</code> is now accepted.</p></li>
<li><p>documentation enhancements: the <em>Quick Sort</em> section with its included code samples has been entirely re-written; the <em>Commands of the xintexpr package</em> section has been extended and reviewed entirely.</p></li>
</ul>
-<h3 id="bug-fixes-17">Bug fixes</h3>
+<h3 id="bug-fixes-18">Bug fixes</h3>
<ul>
<li><p>in <strong>xintfrac</strong>: the <code>\xintFloatFac</code> from release <code>1.2</code> parsed its argument only through <code>\numexpr</code> but it should have used <code>\xintNum</code>.</p></li>
<li><p>in <strong>xintexpr</strong>: release <code>1.2d</code> had broken the recognition of sub-expressions immediately after variable names (with tacit multiplication).</p></li>
@@ -620,7 +629,7 @@ License: LPPL 1.3c</code></pre>
<li><p>tacit multiplication applies to more cases, for example (x+y)z, and always ties more than standard * infix operator, e.g. x/2y is like x/(2*y).</p></li>
<li><p>some documentation enhancements, particularly in the chapter on xintexpr.sty, and also in the code source comments.</p></li>
</ul>
-<h3 id="bug-fixes-18">Bug fixes</h3>
+<h3 id="bug-fixes-19">Bug fixes</h3>
<ul>
<li>in <strong>xintcore</strong>: release <code>1.2c</code> had inadvertently broken the <code>\xintiiDivRound</code> macro.</li>
</ul>
@@ -630,12 +639,12 @@ License: LPPL 1.3c</code></pre>
<li><p>macros <code>\xintdeffunc</code>, <code>\xintdefiifunc</code>, <code>\xintdeffloatfunc</code> and boolean <code>\ifxintverbose</code>.</p></li>
<li><p>on-going code improvements and documentation enhancements, but stopped in order to issue this bugfix release.</p></li>
</ul>
-<h3 id="bug-fixes-19">Bug fixes</h3>
+<h3 id="bug-fixes-20">Bug fixes</h3>
<ul>
<li>in <strong>xintcore</strong>: recent release <code>1.2</code> introduced a bug in the subtraction (happened when 00000001 was found under certain circumstances at certain mod 8 locations).</li>
</ul>
<h2 id="b-20151029"><code>1.2b (2015/10/29)</code></h2>
-<h3 id="bug-fixes-20">Bug fixes</h3>
+<h3 id="bug-fixes-21">Bug fixes</h3>
<ul>
<li>in <strong>xintcore</strong>: recent release <code>1.2</code> introduced a bug in the division macros, causing a crash when the divisor started with 99999999 (it was attempted to use with 1+99999999 a subroutine expecting only 8-digits numbers).</li>
</ul>
@@ -646,7 +655,7 @@ License: LPPL 1.3c</code></pre>
<li><p>added <code>\xintiiMaxof/\xintiiMinof</code> (<strong>xint</strong>).</p></li>
<li><p>TeX hackers only: replaced all code uses of <code>\romannumeral-`0</code> by the quicker <code>\romannumeral`&amp;&amp;@</code> (<code>^</code> being used as letter, had to find another character usable with catcode 7).</p></li>
</ul>
-<h3 id="bug-fixes-21">Bug fixes</h3>
+<h3 id="bug-fixes-22">Bug fixes</h3>
<ul>
<li>in <strong>xintexpr</strong>: recent release <code>1.2</code> introduced a bad bug in the parsing of decimal numbers and as a result <code>\xinttheexpr 0.01\relax</code> expanded to <code>0</code> ! (sigh…)</li>
</ul>
@@ -747,7 +756,7 @@ License: LPPL 1.3c</code></pre>
<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>
-<h3 id="bug-fixes-22">Bug fixes</h3>
+<h3 id="bug-fixes-23">Bug fixes</h3>
<ul>
<li><p><code>\xintZapFirstSpaces</code> hence also <code>\xintZapSpaces</code> from package <strong>xinttools</strong> were buggy when used with an argument either empty or containing only space tokens.</p></li>
<li><p><code>\xintiiexpr</code> did not strip leading zeroes, hence <code>\xinttheiiexpr 001+1\relax</code> did not obtain the expected result …</p></li>
diff --git a/Master/texmf-dist/doc/generic/xint/README.md b/Master/texmf-dist/doc/generic/xint/README.md
index 9146c736669..bb01bbb277a 100644
--- a/Master/texmf-dist/doc/generic/xint/README.md
+++ b/Master/texmf-dist/doc/generic/xint/README.md
@@ -1,8 +1,8 @@
% README
-% xint 1.4b
-% 2020/02/25
+% xint 1.4c
+% 2021/02/20
- Source: xint.dtx 1.4b 2020/02/25 (doc 2020/02/25)
+ Source: xint.dtx 1.4c 2021/02/20 (doc 2021/02/20)
Author: Jean-Francois Burnol
Info: Expandable operations on big integers, decimals, fractions
License: LPPL 1.3c
@@ -13,7 +13,7 @@ Aim and usage
It is possible to use the package both with Plain (`\input xintexpr.sty`)
or with the LaTeX macro format (`\usepackage{xintexpr}`).
-The basic aim is provide *expandable* computations on (arbitrily big)
+The basic aim is provide *expandable* computations on (arbitrarily big)
integers, fractions, and floating point numbers (at a user chosen
precision). The four operations and the square-root extraction achieve
so-called *correct rounding* for the given arbitrary precision.
@@ -36,18 +36,15 @@ expands to:
0.6018150231520482799179770004414898414256377098
-The [-2] means to round the result to 2 digits less than float precision:
-currently trigonometrical functions are mostly implemented at high level
-via the user interface for declaring functions and variables and have no
-way to use guard digits, hence the last two digits are often not
-accurate.
+The [-2] at start of the `\xintfloateval` argument means to round the
+result to 2 digits less than the float precision.
Release `1.4` adds support for nested structures. For example:
\xintthealign\xintexpr ndseq(1/(i+j), i=1..5; j=1..5)\relax
-will print on the page (this is customizable, e.g. to use a pmatrix
-environnement rather):
+will print on the page (this is customizable, e.g. to use a `pmatrix`
+environment):
[[ 1/2, 1/3, 1/4, 1/5, 1/6 ],
[ 1/3, 1/4, 1/5, 1/6, 1/7 ],
diff --git a/Master/texmf-dist/doc/generic/xint/sourcexint.pdf b/Master/texmf-dist/doc/generic/xint/sourcexint.pdf
index b45bfc7ca82..6c9a354b0bf 100644
--- a/Master/texmf-dist/doc/generic/xint/sourcexint.pdf
+++ b/Master/texmf-dist/doc/generic/xint/sourcexint.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/generic/xint/xint.pdf b/Master/texmf-dist/doc/generic/xint/xint.pdf
index bbfcbe7f35d..5be576e57e5 100644
--- a/Master/texmf-dist/doc/generic/xint/xint.pdf
+++ b/Master/texmf-dist/doc/generic/xint/xint.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/generic/xint/xint.dtx b/Master/texmf-dist/source/generic/xint/xint.dtx
index dabb98f21c2..8a6a882ba83 100644
--- a/Master/texmf-dist/source/generic/xint/xint.dtx
+++ b/Master/texmf-dist/source/generic/xint/xint.dtx
@@ -3,27 +3,27 @@
% Extract all files via "etex xint.dtx" and do "make help"
% or follow instructions from extracted README.md.
%<*dtx>
-\def\xintdtxtimestamp {Time-stamp: <25-02-2020 at 23:06:44 CET>}
+\def\xintdtxtimestamp {Time-stamp: <20-02-2021 at 20:47:06 CET>}
%</dtx>
%<*drv>
%% ---------------------------------------------------------------
-\def\xintdocdate {2020/02/25}
-\def\xintbndldate{2020/02/25}
-\def\xintbndlversion {1.4b}
+\def\xintdocdate {2021/02/20}
+\def\xintbndldate{2021/02/20}
+\def\xintbndlversion {1.4c}
%</drv>
%<readme>% README
%<changes>% CHANGE LOG
-%<readme|changes>% xint 1.4b
-%<readme|changes>% 2020/02/25
+%<readme|changes>% xint 1.4c
+%<readme|changes>% 2021/02/20
%<readme|changes>
-%<readme|changes> Source: xint.dtx 1.4b 2020/02/25 (doc 2020/02/25)
+%<readme|changes> Source: xint.dtx 1.4c 2021/02/20 (doc 2021/02/20)
%<readme|changes> Author: Jean-Francois Burnol
%<readme|changes> Info: Expandable operations on big integers, decimals, fractions
%<readme|changes> License: LPPL 1.3c
%<readme|changes>
%<*!readme&!changes&!dohtmlsh&!makefile>
%% ---------------------------------------------------------------
-%% The xint bundle 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%<xintkernel>%% xintkernel: Paraphernalia for the xint packages
%<xinttools>%% xinttools: Expandable and non-expandable utilities
@@ -49,7 +49,7 @@ Aim and usage
It is possible to use the package both with Plain (`\input xintexpr.sty`)
or with the LaTeX macro format (`\usepackage{xintexpr}`).
-The basic aim is provide *expandable* computations on (arbitrily big)
+The basic aim is provide *expandable* computations on (arbitrarily big)
integers, fractions, and floating point numbers (at a user chosen
precision). The four operations and the square-root extraction achieve
so-called *correct rounding* for the given arbitrary precision.
@@ -72,18 +72,15 @@ expands to:
0.6018150231520482799179770004414898414256377098
-The [-2] means to round the result to 2 digits less than float precision:
-currently trigonometrical functions are mostly implemented at high level
-via the user interface for declaring functions and variables and have no
-way to use guard digits, hence the last two digits are often not
-accurate.
+The [-2] at start of the `\xintfloateval` argument means to round the
+result to 2 digits less than the float precision.
Release `1.4` adds support for nested structures. For example:
\xintthealign\xintexpr ndseq(1/(i+j), i=1..5; j=1..5)\relax
-will print on the page (this is customizable, e.g. to use a pmatrix
-environnement rather):
+will print on the page (this is customizable, e.g. to use a `pmatrix`
+environment):
[[ 1/2, 1/3, 1/4, 1/5, 1/6 ],
[ 1/3, 1/4, 1/5, 1/6, 1/7 ],
@@ -164,6 +161,14 @@ See `xint.pdf` for contact information.
%</readme>--------------------------------------------------------
%<*changes>-------------------------------------------------------
+`1.4c (2021/02/20)`
+----
+
+### Bug fixes
+
+ - Fix `1.4` regression which broke syntax `varname(...)` which supposedly
+ is allowed and inserts a tacit multiplication.
+
`1.4b (2020/02/25)`
----
@@ -196,31 +201,33 @@ All changes regard the **xintexpr** module.
- Chaining of comparison operators (e.g. `x<y<z`) as in Python (but all
comparisons are done even if one is found false) and l3fp.
- - Strangely, it was possible since `1.4`'s `\xintFracToSciE` to
- configure the separator between mantissas and exponents in the output
- of `\xinteval` but this did not modify the output of
- `\xintfloateval`. This is now fixed via the added `\xintPFloatE`.
+ - It was possible since `1.4`'s `\xintFracToSciE` to configure the
+ separator between mantissas and exponents in the output of
+ `\xinteval` but strangely there was no way to customize the output of
+ `\xintfloateval`. The added `\xintPFloatE` fixes this.
### Bug fixes
- `\xintieval{[D]...}` with a negative `D` (a feature added at `1.4a`)
- used erroneously a catcode 12 `e` in output. And its customization
- via `\xintFracToSciE` remained without effect.
+ used erroneously a catcode 12 `e` in output, which moreover remained
+ immuned to the `\xintFracToSciE` setting.
`1.4a (2020/02/19)`
----
+All changes regard the **xintexpr** module.
+
### Breaking changes
- - **xintexpr**: the macros implementing customization of
+ - The macros implementing customization of
`\xintthealign` have modified meanings and names.
### New features
- - **xintexpr**: `\xintthespaceseparated` (serves to provide
+ - `\xintthespaceseparated` (serves to provide
suitable input to PS-Tricks `\listplot`).
- - **xintexpr**: the optional argument `[D]` to `\xintieval/\xintiexpr`
+ - The optional argument `[D]` to `\xintieval/\xintiexpr`
can be negative, with the same meaning as the non-negative case, i.e.
rounding to an integer multiple of `10^(-D)`.
@@ -230,10 +237,10 @@ All changes regard the **xintexpr** module.
### Bug fixes
- - **xintexpr**: usage of `round()` and `trunc()` within `\xintdeffunc`
+ - Usage of `round()` and `trunc()` within `\xintdeffunc`
got broken at `1.4`.
- - **xintexpr**: `add()` and `mul()` were supposedly accepting the
+ - `add()` and `mul()` were supposedly accepting the
`omit`, `abort` and `break()` keywords since `1.4` but this was
broken.
@@ -4447,7 +4454,7 @@ Two derived parsers:
\begin{itemize}
\item \csbxint{ieval}\marg{expression} does all computations like \csbxint{eval}
but rounds the result to the nearest integer. If there is an optional
- positive argument |[D]|, the rounding is to:
+ argument |[D]|, the rounding is to:
\begin{itemize}
\item if |D>0|: the nearest fixed point number with |D| digits after the
decimal mark,
@@ -4479,9 +4486,15 @@ This core syntax can be used directly in typesetting flow.\NewWith{1.4} In an
|\edef| they expand to some braced nested data (all computations having been
done) prefixed with some |\protected| «typesetter» macros. When using
\csbxint{eval} (in contrast to \csbxint{expr}), the protection of the
-«typesetter» is removed and its action gives (expandably, in two steps)
+«typesetter» is by-passed and its action gives (expandably)
explicit digits and other characters such as those of scientific notation or
-brackets.
+brackets.%
+%
+\footnote{\csbxint{eval} and \csbxint{expr} both expand completely in exactly
+ two steps. And \csbxint{expr} expands fully under \fexpan sion (of the
+ |\romannumeral0| or |-`0| type). As per \csbxint{eval} attention that it may
+ expand to nothing, then naturally \fexpan sion propagates to tokens
+ following up in the input stream.}
It is possible to use the core syntax\NewWith{1.4}
\csbxint{expr}\meta{expression}|\relax| also in so-called moving arguments,
@@ -4511,24 +4524,31 @@ terms). Thus most probably what you want is \csbxint{floateval} and
As mentioned already, the parsers are compatible with expansion-only
context.
-Also, they expand the expression piece by piece:
-the normal mode of operation of the parsers is to unveil the parsed material
-token by token. Unveiling is a process combining brace removal (one level
-generally) and \fexpan sion.
-
-For example a closing parenthesis does not have generally to be immediately
-visible, it may arise later from expansion. Even the ending |\relax| may
-arise from expansion. Even though the \csbxint{eval} user interface means that
-the package has at some point the entire expression in its hands, it
-immediately re-inserts it into token stream with an additional postfixed
-|\relax| and from this point on has lost any ways to manipulate formally again
-the whole thing; it can only re-discover it piece per piece.
-
-This general behaviour has significative exceptions mostly related to
+Also, they expand the expression piece by piece: the normal mode of operation
+of the parsers is to unveil the parsed material token by token. Unveiling is
+a process combining space swallowing, brace removal (one level generally), and
+\fexpan sion.
+
+For example a closing parenthesis after some function arguments does not have
+to be immediately visible, it and the arguments themselves may arise from
+\fexpan sion (applied before grabbing each successive token). Even the ending
+|\relax| may arise from expansion. Even though the \csbxint{eval} user
+interface means that the package has at some point the entire expression in
+its hands, it immediately re-inserts it into token stream with an additional
+postfixed |\relax| and from this point on has lost any ways (a simple-minded
+delimited macro won't do because the expression is allowed to contain
+sub-\csbxint{expr}essions, even nested) to manipulate formally again the whole
+thing; it can only re-discover it one token at a time.
+
+This general behaviour (which allows much more freedom in assembling
+expressions than is usually the case with familiar programming languages such
+as Python, although admittedly that freedom will prove useful only to
+power-\TeX users and possibly does not have that many significant use cases)
+has significative exceptions. These exceptions are mostly related to
«pseudo»-functions. A «pseudo»-function will grab some of its arguments via
delimited macros. For example |subs(expr1,x=expr2)| needs to see the comma,
equal sign and closing parenthesis. But it has mechanisms to allow |expr1| and
-|expr2| to possess their own commas and parentheses.
+|expr2| to possess their own commas and parentheses.
Inner semi-colons on the other hand currently always can originate from expansion.
Defining functions or variables requires a visible semi-colon acting as
@@ -4592,7 +4612,7 @@ example with a matrix environment, where |\noexpand| rather than |\protected|
is used.
\begin{everbatim}
\protected\def\xintexpralignbegin {\halign\bgroup\tabskip2ex\hfil##&&##\hfil\cr}%
-\protected\def\xintexpralignend {\crcr\egroup}%
+\def\xintexpralignend {\crcr\egroup}% removed \protected at 1.4c
\protected\def\xintexpralignlinesep {,\cr}% separates "lines"
\protected\def\xintexpralignleftsep {&}% at left of first item in a "line" (after brackets)
\protected\def\xintexpraligninnersep {,&}% at the left of non-first items
@@ -18318,7 +18338,7 @@ math shift catcode.
\fi
\XINT_providespackage
\ProvidesPackage {xintkernel}%
- [2020/02/25 v1.4b Paraphernalia for the xint packages (JFB)]%
+ [2021/02/20 v1.4c Paraphernalia for the xint packages (JFB)]%
% \end{macrocode}
% \subsection{Constants}
% \begin{macrocode}
@@ -19104,7 +19124,7 @@ math shift catcode.
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xinttools}%
- [2020/02/25 v1.4b Expandable and non-expandable utilities (JFB)]%
+ [2021/02/20 v1.4c 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.|
@@ -20056,6 +20076,21 @@ math shift catcode.
\xint_bye #8\XINT_ziptwo_e \xint_bye {{#3}#8}%
\xint_bye #4\XINT_ziptwo_e \xint_bye
\xint_bye #9\XINT_ziptwo_e \xint_bye {{#4}#9}%
+% \end{macrocode}
+% \lverb|Attention here that #6 can very well deliver no tokens at all. But
+% the \ifx will then do the expected thing. Only mentioning!
+%
+% By the way, the \xint_bye method means TeX needs to look into tokens
+% but skipping braced groups. A conditional based method lets TeX look only
+% at the start but then it has to find \else or \fi so here also it must looks
+% at tokens, and actually goes into braced groups. But (written 2020/02/26) I
+% never did serious testing comparing the two, and in xint I have usually
+% preferred \xint_bye/\xint_gob_til_foo types of methods (they proved superior
+% than \ifnum to check for 0000 in numerical core context for example, at the
+% early days when xint used blocks of 4 digits, not 8), or usage of \if/\ifx
+% only on single tokens, combined with some \xint_dothis/\xint_orthat syntax.
+% |
+% \begin{macrocode}
\ifx \empty#6\expandafter\XINT_zipone_a\fi
\XINT_ziptwo_b #5\xint:
}%
@@ -21433,7 +21468,7 @@ math shift catcode.
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintcore}%
- [2020/02/25 v1.4b Expandable arithmetic on big integers (JFB)]%
+ [2021/02/20 v1.4c Expandable arithmetic on big integers (JFB)]%
% \end{macrocode}
% \subsection{(WIP!) Error conditions and exceptions}
% \lverb|As per the Mike Cowlishaw/IBM's General Decimal Arithmetic Specification
@@ -24735,7 +24770,7 @@ math shift catcode.
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xint}%
- [2020/02/25 v1.4b Expandable operations on big integers (JFB)]%
+ [2021/02/20 v1.4c Expandable operations on big integers (JFB)]%
% \end{macrocode}
% \subsection{More token management}
% \begin{macrocode}
@@ -27301,7 +27336,7 @@ math shift catcode.
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintbinhex}%
- [2020/02/25 v1.4b Expandable binary and hexadecimal conversions (JFB)]%
+ [2021/02/20 v1.4c Expandable binary and hexadecimal conversions (JFB)]%
% \end{macrocode}
% \subsection{Constants, etc...}
% \lverb|1.2n switches to \csname-governed expansion at various places.|
@@ -27973,7 +28008,7 @@ math shift catcode.
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintgcd}%
- [2020/02/25 v1.4b Euclide algorithm with xint package (JFB)]%
+ [2021/02/20 v1.4c Euclide algorithm with xint package (JFB)]%
% \end{macrocode}
% \subsection{\csh{xintBezout}}
% \lverb|&
@@ -28573,7 +28608,7 @@ math shift catcode.
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintfrac}%
- [2020/02/25 v1.4b Expandable operations on fractions (JFB)]%
+ [2021/02/20 v1.4c Expandable operations on fractions (JFB)]%
% \end{macrocode}
% \subsection{\csh{XINT_cntSgnFork}}
% \lverb|1.09i. Used internally, #1 must expand to \m@ne, \z@, or \@ne or
@@ -33762,7 +33797,7 @@ math shift catcode.
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintseries}%
- [2020/02/25 v1.4b Expandable partial sums with xint package (JFB)]%
+ [2021/02/20 v1.4c Expandable partial sums with xint package (JFB)]%
% \end{macrocode}
% \subsection{\csh{xintSeries}}
% \begin{macrocode}
@@ -34263,7 +34298,7 @@ math shift catcode.
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintcfrac}%
- [2020/02/25 v1.4b Expandable continued fractions with xint package (JFB)]%
+ [2021/02/20 v1.4c Expandable continued fractions with xint package (JFB)]%
% \end{macrocode}
% \subsection{\csh{xintCFrac}}
% \begin{macrocode}
@@ -35655,7 +35690,7 @@ math shift catcode.
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintexpr}%
- [2020/02/25 v1.4b Expandable expression parser (JFB)]%
+ [2021/02/20 v1.4c Expandable expression parser (JFB)]%
\catcode`! 11
\let\XINT_Cmp \xintiiCmp
\def\XINTfstop{\noexpand\XINTfstop}%
@@ -35756,11 +35791,15 @@ math shift catcode.
% Breaking change at 1.4a as helper macros were renamed and their meanings
% refactored: no more \xintexpraligntab nor \xintexpraligninnercomma or
% \xintexpralignoutercomma but \xintexpraligninnersep, etc...
+%
+% At 1.4c I remove the \protected from \xintexpralignend. I had made note a
+% year ago that it served nothing. Let's trust myself on this one (risky one
+% year later!)
% .|
% \begin{macrocode}
\catcode`& 4
\protected\def\xintexpralignbegin {\halign\bgroup\tabskip2ex\hfil##&&##\hfil\cr}%
-\protected\def\xintexpralignend {\crcr\egroup}%
+\def\xintexpralignend {\crcr\egroup}%
\protected\def\xintexpralignlinesep {,\cr}%
\protected\def\xintexpralignleftbracket {[}%
\protected\def\xintexpralignrightbracket{]}%
@@ -35821,7 +35860,7 @@ math shift catcode.
% with an xintfrac macro such as \xintiRound{0} one needs first to define
% a wrapper which will expand it into braces :
%
-% \def\foo#1{{\xintiRound{0){#1}}%
+% \def\foo#1{{\xintiRound{0}{#1}}%
%
% As the things will expand inside expanded, propagating expansion is not an
% issue.
@@ -35876,7 +35915,7 @@ math shift catcode.
%
%
% The 1.4a version of optional argument [D] for \xintiexpr accepts a negative
-% D, with same meaning as \xintTrunc from xintfrac.sty.
+% D, with same meaning as the 1.4a \xintRound from xintfrac.sty.
% |
% \begin{macrocode}
\def\xintexpr {\romannumeral0\xintexpro }%
@@ -35961,14 +36000,8 @@ math shift catcode.
%
% Comments currently under reconstruction.
%
-% 1.4: The reason for \expanded is to ensure \xintthe mechanism does expand
-% completely in two steps, now that the print helper macros are not f-expandable
-% anymore.
-%
-% It is possible that the expression gave an empty object (e.g. \xintexpr
-% [4][1]\relax). Thus we do not use \romannumeral`^^@ trigger else
-% twice expansion of \xinttheexpr will propagate beyond empty expression.
-% Thus \romannumeral ended via a chardef zero token.
+% 1.4: attention that this now requires \expanded context as the «printer»
+% macros are not f-expandable but only e-expandable.
%
% |
% \begin{macrocode}
@@ -36013,7 +36046,11 @@ math shift catcode.
% serves to achieve this support of *sub* \xinteval, it serves nothing for
% the actual produced macros. For \xintdeffunc, things are simpler, but still
% we support the [N] optional argument of \xintiexpr and \xintfloatexpr, which
-% required some work...|
+% required some work...
+%
+% The \expanded upfront ensures \xintthe mechanism does expand
+% completely in two steps.
+% |
% \begin{macrocode}
\def\xintthe #1{\expanded\expandafter\xint_gobble_i\romannumeral`&&@#1}%
\def\xintthealign #1{\expandafter\xintexpralignbegin
@@ -36058,7 +36095,17 @@ math shift catcode.
\def\xintthebarefloateval {\romannumeral0\expandafter\xint_stop_atfirstofone\romannumeral0\xintbarefloateval}%
\def\xintthebareiieval {\romannumeral0\expandafter\xint_stop_atfirstofone\romannumeral0\xintbareiieval}%
% \end{macrocode}
-% \subsubsection{\csh{xinteval}, \csh{xintieval}, \csh{xintfloateval}, \csh{xintiieval}}
+% \subsubsection{\csh{xinteval}, \csh{xintieval}, \csh{xintfloateval},
+% \csh{xintiieval}}
+% \lverb|Refactored at 1.4.
+%
+% The \expanded upfront ensures \xinteval still expands
+% completely in two steps. No \romannumeral trigger here, in relation to the
+% fact that \XINTexprprint is no f-expandable, only e-expandable.
+%
+% (and attention that \xintexpr\relax is now legal, and an empty ople can be
+% produced in output also from \xintexpr [17][1]\relax for example)
+% |
% \begin{macrocode}
\def\xinteval #1%
{\expanded\expandafter\XINTexprprint\expandafter.\romannumeral0\xintbareeval#1\relax}%
@@ -36172,7 +36219,10 @@ math shift catcode.
{\xint_gob_til_! #9\xintthespaceseparated_c !%
#1#2#3#4#5#6#7#8#9%
\xintthespaceseparated_b}%
-\def\xintthespaceseparated_c !#1!#2^{#1}%
+% \end{macrocode}
+% \lverb|1.4c I add a space here to stop the \romannumeral`^^@ if #1 is empty.|
+% \begin{macrocode}
+\def\xintthespaceseparated_c !#1!#2^{ #1}%
% \end{macrocode}
% \subsection{Hooks into the numeric parser for usage by the
% \cshnolabel{xintdeffunc} symbolic parser}
@@ -38329,6 +38379,20 @@ math shift catcode.
% adapted. However in future it could be that variables holding large data
% will be managed much faster.
%
+% |1.4c| |2021/02/20|. One year later I realized I had broken tacit
+% multiplication for situations such as |variable(1+2)|. As hinted at in
+% comments above before |1.4| release I had been doing some deep refactoring
+% here, which I cancelled almost completely in the end... but not quite, and
+% as a result there was a problem that some macro holding braced contents was
+% expanded to late, once it was in old core routines of xintfrac not expecting
+% other things than digits. I do an emergency bugfix here with some
+% |\expandafter|'s but I don't have the code in my brain at this time, and
+% don't have the luxury now to invest into it. Let's hope this does not induce
+% breakage elsewhere, and that the February 2020 |1.4| did not break something
+% else.
+%
+%
+%
% \begin{macrocode}
\catcode`* 11
\def\XINT_expr_defvar_one #1#2%
@@ -38344,9 +38408,11 @@ math shift catcode.
{{\expandafter\noexpand\csname XINT_expr_varvalue_#1\endcsname}}%
\XINT_global
\expandafter\edef\csname XINT_expr_onliteral_#1\endcsname
- {\noexpand\expandafter\XINT_expr_precedence_***
- \noexpand\expandafter *\expandafter
- \noexpand\csname XINT_expr_var_#1\endcsname(}%
+ {\unexpanded{\expandafter\expandafter\expandafter}%
+ \XINT_expr_precedence_***
+ \unexpanded{\expandafter\expandafter\expandafter}%
+ *\unexpanded{\expandafter\expandafter}%
+ \expandafter\noexpand\csname XINT_expr_var_#1\endcsname(}%
\ifxintverbose\xintMessage{xintexpr}{Info}
{Variable "#1" \ifxintglobaldefs globally \fi
defined with value \csname XINT_expr_varvalue_#1\endcsname.}%
@@ -41803,10 +41869,10 @@ math shift catcode.
\expandafter\xint_secondoftwo
\fi
{\immediate\write-1{Reloading xinttrig library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver@trig\endcsname{2020/02/25 v1.4b}%
+{\expandafter\gdef\csname xintlibver@trig\endcsname{2021/02/20 v1.4c}%
\XINT_providespackage
\ProvidesPackage{xinttrig}%
-[2020/02/25 v1.4b Trigonometrical functions for xintexpr (JFB)]%
+[2021/02/20 v1.4c Trigonometrical functions for xintexpr (JFB)]%
}%
% \end{macrocode}
% \subsection{Ensure used letters are dummy letters}
@@ -42802,7 +42868,7 @@ math shift catcode.
\xintexprSafeCatcodes\catcode`_ 11
\XINT_providespackage
\ProvidesPackage{xintlog}%
-[2020/02/25 v1.4b Logarithms and exponentials for xintexpr (JFB)]%
+[2021/02/20 v1.4c Logarithms and exponentials for xintexpr (JFB)]%
% \end{macrocode}
% \subsection{Loading of \cshn{poormanlog} package}
% \lverb|Attention to catcode regime when loading poormanlog. It matters less
@@ -43050,8 +43116,8 @@ xinttrig.sty:32
\TeX\strut. Version {\xintbndlversion} of {\xintbndldate}.\par
}
-\CheckSum {35103}% 1.4b
-% 34648 pour 1.4a, 34575 pour 1.4
+\CheckSum {35109}% 1.4c
+% 35103 pour 1.4b, 34648 pour 1.4a, 34575 pour 1.4
% 33497 pour 1.3f, 33274 pour 1.3e, 31601 pour 1.3d, 31122 pour 1.3c
% 31069 pour 1.3b, 30482 pour 1.3a, 30621 pour 1.3, 30988 pour 1.2q,
% 30982 pour 1.2p, 30524 pour 1.2o, 30303 pour 1.2h, 30403 pour 1.2i,
diff --git a/Master/texmf-dist/tex/generic/xint/xint.sty b/Master/texmf-dist/tex/generic/xint/xint.sty
index 17115294aac..a1e07297eb9 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 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 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}%
- [2020/02/25 v1.4b Expandable operations on big integers (JFB)]%
+ [2021/02/20 v1.4c 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}%
diff --git a/Master/texmf-dist/tex/generic/xint/xintbinhex.sty b/Master/texmf-dist/tex/generic/xint/xintbinhex.sty
index 22aac49ae40..b8b1f06cca3 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 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintbinhex: Expandable binary and hexadecimal conversions
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintbinhex}%
- [2020/02/25 v1.4b Expandable binary and hexadecimal conversions (JFB)]%
+ [2021/02/20 v1.4c Expandable binary and hexadecimal conversions (JFB)]%
\newcount\xint_c_ii^xv \xint_c_ii^xv 32768
\newcount\xint_c_ii^xvi \xint_c_ii^xvi 65536
\def\XINT_tmpa #1{\ifx\relax#1\else
diff --git a/Master/texmf-dist/tex/generic/xint/xintcfrac.sty b/Master/texmf-dist/tex/generic/xint/xintcfrac.sty
index 4be57daef06..17e67f6563b 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 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintcfrac: Expandable continued fractions with xint package
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintcfrac}%
- [2020/02/25 v1.4b Expandable continued fractions with xint package (JFB)]%
+ [2021/02/20 v1.4c 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 59aa7106101..133d760a1b8 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 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintcore: Expandable arithmetic on big integers
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintcore}%
- [2020/02/25 v1.4b Expandable arithmetic on big integers (JFB)]%
+ [2021/02/20 v1.4c Expandable arithmetic on big integers (JFB)]%
\csname XINT_Clamped_istrapped\endcsname
\csname XINT_ConversionSyntax_istrapped\endcsname
\csname XINT_DivisionByZero_istrapped\endcsname
diff --git a/Master/texmf-dist/tex/generic/xint/xintexpr.sty b/Master/texmf-dist/tex/generic/xint/xintexpr.sty
index 889e3e521b9..8df9da27a74 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 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintexpr: Expandable expression parser
%% ---------------------------------------------------------------
@@ -82,7 +82,7 @@
\XINTsetupcatcodes%
\XINT_providespackage
\ProvidesPackage{xintexpr}%
- [2020/02/25 v1.4b Expandable expression parser (JFB)]%
+ [2021/02/20 v1.4c Expandable expression parser (JFB)]%
\catcode`! 11
\let\XINT_Cmp \xintiiCmp
\def\XINTfstop{\noexpand\XINTfstop}%
@@ -151,7 +151,7 @@
>% back to normal catcodes
\catcode`& 4
\protected\def\xintexpralignbegin {\halign\bgroup\tabskip2ex\hfil##&&##\hfil\cr}%
-\protected\def\xintexpralignend {\crcr\egroup}%
+\def\xintexpralignend {\crcr\egroup}%
\protected\def\xintexpralignlinesep {,\cr}%
\protected\def\xintexpralignleftbracket {[}%
\protected\def\xintexpralignrightbracket{]}%
@@ -382,7 +382,7 @@
{\xint_gob_til_! #9\xintthespaceseparated_c !%
#1#2#3#4#5#6#7#8#9%
\xintthespaceseparated_b}%
-\def\xintthespaceseparated_c !#1!#2^{#1}%
+\def\xintthespaceseparated_c !#1!#2^{ #1}%
\let\XINT:NEhook:f:one:from:one\expandafter
\let\XINT:NEhook:f:one:from:one:direct\empty
\let\XINT:NEhook:f:one:from:two\expandafter
@@ -1835,9 +1835,11 @@
{{\expandafter\noexpand\csname XINT_expr_varvalue_#1\endcsname}}%
\XINT_global
\expandafter\edef\csname XINT_expr_onliteral_#1\endcsname
- {\noexpand\expandafter\XINT_expr_precedence_***
- \noexpand\expandafter *\expandafter
- \noexpand\csname XINT_expr_var_#1\endcsname(}%
+ {\unexpanded{\expandafter\expandafter\expandafter}%
+ \XINT_expr_precedence_***
+ \unexpanded{\expandafter\expandafter\expandafter}%
+ *\unexpanded{\expandafter\expandafter}%
+ \expandafter\noexpand\csname XINT_expr_var_#1\endcsname(}%
\ifxintverbose\xintMessage{xintexpr}{Info}
{Variable "#1" \ifxintglobaldefs globally \fi
defined with value \csname XINT_expr_varvalue_#1\endcsname.}%
diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty
index a9218952fd0..62c5d924cd9 100644
--- a/Master/texmf-dist/tex/generic/xint/xintfrac.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintfrac.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintfrac: Expandable operations on fractions
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintfrac}%
- [2020/02/25 v1.4b Expandable operations on fractions (JFB)]%
+ [2021/02/20 v1.4c Expandable operations on fractions (JFB)]%
\def\XINT_cntSgnFork #1%
{%
\ifcase #1\expandafter\xint_secondofthree
diff --git a/Master/texmf-dist/tex/generic/xint/xintgcd.sty b/Master/texmf-dist/tex/generic/xint/xintgcd.sty
index e80299dd21a..db70bd2c3bf 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 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintgcd: Euclidean algorithm with xint package
%% ---------------------------------------------------------------
@@ -77,7 +77,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintgcd}%
- [2020/02/25 v1.4b Euclide algorithm with xint package (JFB)]%
+ [2021/02/20 v1.4c Euclide algorithm with xint package (JFB)]%
\def\xintBezout {\romannumeral0\xintbezout }%
\def\xintbezout #1%
{%
diff --git a/Master/texmf-dist/tex/generic/xint/xintkernel.sty b/Master/texmf-dist/tex/generic/xint/xintkernel.sty
index 29a8b3a05f2..26d63e55dc5 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 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintkernel: Paraphernalia for the xint packages
%% ---------------------------------------------------------------
@@ -157,7 +157,7 @@
\fi
\XINT_providespackage
\ProvidesPackage {xintkernel}%
- [2020/02/25 v1.4b Paraphernalia for the xint packages (JFB)]%
+ [2021/02/20 v1.4c Paraphernalia for the xint packages (JFB)]%
\chardef\xint_c_ 0
\chardef\xint_c_i 1
\chardef\xint_c_ii 2
diff --git a/Master/texmf-dist/tex/generic/xint/xintlog.sty b/Master/texmf-dist/tex/generic/xint/xintlog.sty
index ddf209338a4..cf8d886adc5 100644
--- a/Master/texmf-dist/tex/generic/xint/xintlog.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintlog.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintlog: Logarithms and exponentials for xintexpr
%% ---------------------------------------------------------------
@@ -74,7 +74,7 @@
\xintexprSafeCatcodes\catcode`_ 11
\XINT_providespackage
\ProvidesPackage{xintlog}%
-[2020/02/25 v1.4b Logarithms and exponentials for xintexpr (JFB)]%
+[2021/02/20 v1.4c Logarithms and exponentials for xintexpr (JFB)]%
\ifdefined\RequirePackage
\RequirePackage{poormanlog}%
\else
diff --git a/Master/texmf-dist/tex/generic/xint/xintseries.sty b/Master/texmf-dist/tex/generic/xint/xintseries.sty
index 76608a2239b..66499a5f4b8 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 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintseries: Expandable partial sums with xint package
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintseries}%
- [2020/02/25 v1.4b Expandable partial sums with xint package (JFB)]%
+ [2021/02/20 v1.4c 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 0aeffe17888..d4330e4ad99 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 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xinttools: Expandable and non-expandable utilities
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xinttools}%
- [2020/02/25 v1.4b Expandable and non-expandable utilities (JFB)]%
+ [2021/02/20 v1.4c Expandable and non-expandable utilities (JFB)]%
\newtoks\XINT_toks
\xint_firstofone{\let\XINT_sptoken= } %<- space here!
\def\xintgodef {\global\xintodef }%
diff --git a/Master/texmf-dist/tex/generic/xint/xinttrig.sty b/Master/texmf-dist/tex/generic/xint/xinttrig.sty
index 8eacf2dce04..61d705f1d9f 100644
--- a/Master/texmf-dist/tex/generic/xint/xinttrig.sty
+++ b/Master/texmf-dist/tex/generic/xint/xinttrig.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.4b 2020/02/25
+%% The xint bundle 1.4c 2021/02/20
%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xinttrig: Trigonometry for the xintexpr package
%% ---------------------------------------------------------------
@@ -68,10 +68,10 @@
\expandafter\xint_secondoftwo
\fi
{\immediate\write-1{Reloading xinttrig library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver@trig\endcsname{2020/02/25 v1.4b}%
+{\expandafter\gdef\csname xintlibver@trig\endcsname{2021/02/20 v1.4c}%
\XINT_providespackage
\ProvidesPackage{xinttrig}%
-[2020/02/25 v1.4b Trigonometrical functions for xintexpr (JFB)]%
+[2021/02/20 v1.4c Trigonometrical functions for xintexpr (JFB)]%
}%
\xintFor* #1 in {iDTVtuwxyzX}\do{\xintensuredummy{#1}}%
\def\xintreloadxinttrig