texlive[59366] Master/texmf-dist: xint (27may21)

commits+karl at tug.org commits+karl at tug.org
Thu May 27 21:52:45 CEST 2021


Revision: 59366
          http://tug.org/svn/texlive?view=revision&revision=59366
Author:   karl
Date:     2021-05-27 21:52:44 +0200 (Thu, 27 May 2021)
Log Message:
-----------
xint (27may21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/xint/CHANGES.html
    trunk/Master/texmf-dist/doc/generic/xint/README.md
    trunk/Master/texmf-dist/doc/generic/xint/sourcexint.pdf
    trunk/Master/texmf-dist/doc/generic/xint/xint.pdf
    trunk/Master/texmf-dist/source/generic/xint/xint.dtx
    trunk/Master/texmf-dist/tex/generic/xint/xint.sty
    trunk/Master/texmf-dist/tex/generic/xint/xintbinhex.sty
    trunk/Master/texmf-dist/tex/generic/xint/xintcfrac.sty
    trunk/Master/texmf-dist/tex/generic/xint/xintcore.sty
    trunk/Master/texmf-dist/tex/generic/xint/xintexpr.sty
    trunk/Master/texmf-dist/tex/generic/xint/xintfrac.sty
    trunk/Master/texmf-dist/tex/generic/xint/xintgcd.sty
    trunk/Master/texmf-dist/tex/generic/xint/xintkernel.sty
    trunk/Master/texmf-dist/tex/generic/xint/xintlog.sty
    trunk/Master/texmf-dist/tex/generic/xint/xintseries.sty
    trunk/Master/texmf-dist/tex/generic/xint/xinttools.sty
    trunk/Master/texmf-dist/tex/generic/xint/xinttrig.sty

Modified: trunk/Master/texmf-dist/doc/generic/xint/CHANGES.html
===================================================================
--- trunk/Master/texmf-dist/doc/generic/xint/CHANGES.html	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/doc/generic/xint/CHANGES.html	2021-05-27 19:52:44 UTC (rev 59366)
@@ -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.4g" />
+  <meta name="author" content="xint 1.4h" />
   <title>CHANGE LOG</title>
   <style type="text/css">
       code{white-space: pre-wrap;}
@@ -25,66 +25,69 @@
 <body>
 <header>
 <h1 class="title">CHANGE LOG</h1>
-<p class="author">xint 1.4g</p>
-<p class="date">2021/05/25</p>
+<p class="author">xint 1.4h</p>
+<p class="date">2021/05/27</p>
 </header>
 <nav id="TOC">
 <ul>
+<li><a href="#h-20210527"><code>1.4h (2021/05/27)</code></a><ul>
+<li><a href="#bug-fixes">Bug fixes</a></li>
+</ul></li>
 <li><a href="#g-20210525"><code>1.4g (2021/05/25)</code></a><ul>
 <li><a href="#breaking-changes">Breaking changes</a></li>
 <li><a href="#deprecated">Deprecated</a></li>
-<li><a href="#bug-fixes">Bug fixes</a></li>
+<li><a href="#bug-fixes-1">Bug fixes</a></li>
 <li><a href="#new-features">New features</a></li>
 </ul></li>
 <li><a href="#f-20210510"><code>1.4f (2021/05/10)</code></a><ul>
 <li><a href="#breaking-changes-1">Breaking changes</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="#e-20210505"><code>1.4e (2021/05/05)</code></a><ul>
 <li><a href="#breaking-changes-2">Breaking changes</a></li>
 <li><a href="#new-features-1">New features</a></li>
-<li><a href="#bug-fixes-2">Bug fixes</a></li>
+<li><a href="#bug-fixes-3">Bug fixes</a></li>
 </ul></li>
 <li><a href="#d-20210329"><code>1.4d (2021/03/29)</code></a><ul>
 <li><a href="#breaking-changes-3">Breaking changes</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="#c-20210220"><code>1.4c (2021/02/20)</code></a><ul>
-<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="#b-20200225"><code>1.4b (2020/02/25)</code></a><ul>
 <li><a href="#future">Future</a></li>
 <li><a href="#new-features-2">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="#a-20200219"><code>1.4a (2020/02/19)</code></a><ul>
 <li><a href="#breaking-changes-4">Breaking changes</a></li>
 <li><a href="#new-features-3">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="#section"><code>1.4 (2020/01/31)</code></a><ul>
 <li><a href="#breaking-changes-5">Breaking changes</a></li>
 <li><a href="#improvements-and-new-features">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>
 <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-8">Bug fixes</a></li>
+<li><a href="#bug-fixes-9">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-6">Breaking changes</a></li>
 <li><a href="#improvements-and-new-features-2">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="#d-20190106"><code>1.3d (2019/01/06)</code></a><ul>
 <li><a href="#breaking-changes-7">Breaking changes</a></li>
 <li><a href="#improvements-and-new-features-3">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="#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-11">Bug fixes</a></li>
+<li><a href="#bug-fixes-12">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>
@@ -92,7 +95,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-12">Bug fixes</a></li>
+<li><a href="#bug-fixes-13">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-8">Breaking changes</a></li>
@@ -100,12 +103,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-13">Bug fixes</a></li>
+<li><a href="#bug-fixes-14">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-9">Breaking changes</a></li>
 <li><a href="#improvements-and-new-features-9">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="#o-20170829"><code>1.2o (2017/08/29)</code></a><ul>
 <li><a href="#breaking-changes-10">Breaking changes</a></li>
@@ -118,31 +121,31 @@
 <li><a href="#m-20170731"><code>1.2m (2017/07/31)</code></a><ul>
 <li><a href="#breaking-changes-12">Breaking changes</a></li>
 <li><a href="#improvements-and-new-features-11">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="#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-16">Bug fixes</a></li>
+<li><a href="#bug-fixes-17">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-13">Breaking changes</a></li>
 <li><a href="#improvements-and-new-features-13">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="#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-18">Bug fixes</a></li>
+<li><a href="#bug-fixes-19">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-14">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-19">Bug fixes</a></li>
+<li><a href="#bug-fixes-20">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-20">Bug fixes</a></li>
+<li><a href="#bug-fixes-21">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-15">Breaking changes</a></li>
@@ -151,26 +154,26 @@
 <li><a href="#f-20160312"><code>1.2f (2016/03/12)</code></a><ul>
 <li><a href="#breaking-changes-16">Breaking changes</a></li>
 <li><a href="#improvements-and-new-features-18">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="#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-22">Bug fixes</a></li>
+<li><a href="#bug-fixes-23">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-23">Bug fixes</a></li>
+<li><a href="#bug-fixes-24">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-24">Bug fixes</a></li>
+<li><a href="#bug-fixes-25">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-25">Bug fixes</a></li>
+<li><a href="#bug-fixes-26">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-26">Bug fixes</a></li>
+<li><a href="#bug-fixes-27">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>
@@ -184,7 +187,7 @@
 <li><a href="#removed-4">Removed</a></li>
 <li><a href="#deprecated-2">Deprecated</a></li>
 <li><a href="#improvements-and-new-features-24">Improvements and new features</a></li>
-<li><a href="#bug-fixes-27">Bug fixes</a></li>
+<li><a href="#bug-fixes-28">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>
@@ -212,10 +215,17 @@
 <li><a href="#section-10"><code>1.0 (2013/03/28)</code></a></li>
 </ul>
 </nav>
-<pre><code>Source:  xint.dtx 1.4g 2021/05/25 (doc 2021/05/25)
+<pre><code>Source:  xint.dtx 1.4h 2021/05/27 (doc 2021/05/27)
 Author:  Jean-Francois Burnol
 Info:    Expandable operations on big integers, decimals, fractions
 License: LPPL 1.3c</code></pre>
+<h2 id="h-20210527"><code>1.4h (2021/05/27)</code></h2>
+<h3 id="bug-fixes">Bug fixes</h3>
+<ul>
+<li><p><strong>xintexpr</strong>: the recent <code>1.4g</code> introduced a bug breaking input of the type <code><operator><space token><macro></code>.</p></li>
+<li><p><strong>xintexpr</strong>: since <code>1.4</code> (<code>2020/01/31</code>) the <code>omit</code> and <code>abort</code> keywords were broken if used inside a substitution, itself nested in a <code>seq()</code> or similar construct.</p></li>
+<li><p><strong>xintexpr</strong>: since <code>1.4c</code> the <code>\xintthespaceseparated</code> (added at <code>1.4a</code>) inserted two, not one, spaces at one specific location near the end of its output. A bit cosmetic problem, fixed nevertheless.</p></li>
+</ul>
 <h2 id="g-20210525"><code>1.4g (2021/05/25)</code></h2>
 <h3 id="breaking-changes">Breaking changes</h3>
 <ul>
@@ -226,7 +236,7 @@
 <ul>
 <li><strong>xintfrac</strong>: old typesetting macros dating back to <code>1.03</code> and <code>1.04</code> releases <code>\xintFrac</code>, <code>\xintSignedFrac</code>, <code>\xintFwOver</code>, <code>\xintSignedFwOver</code> are deprecated. Please use the new names <code>\xintTeXFrac</code>, <code>\xintTeXsignedFrac</code>, <code>\xintTeXOver</code>, <code>\xintTeXsignedOver</code>. The old names will emit warnings.</li>
 </ul>
-<h3 id="bug-fixes">Bug fixes</h3>
+<h3 id="bug-fixes-1">Bug fixes</h3>
 <ul>
 <li><p><strong>xintexpr</strong>: with <strong>xintbinhex</strong> loaded, <code>"</code> is recognized as prefix for hexadecimal input; but a bug (present ever since this support for hexadecimal input was added) caused syntax such as <code>"\macro</code> to break the parser. Also, leading zeros such as in <code>"0000A</code> where not properly trimmed since <code>1.2m</code>.</p></li>
 <li><p><strong>xintexpr</strong>: authorize <code>x! == y</code> without parentheses. Formerly the parser mis-interpreted <code>!</code> as first character of the <code>!=</code> not-equal-to comparison operator, subsequently causing breakage when finding the second <code>=</code>.</p></li>
@@ -255,7 +265,7 @@
 <li><p><strong>xintexpr</strong>: further changes in the computation of powers, see the bug fixes below.</p></li>
 <li><p><strong>xintexpr</strong>: the <code>float_()</code> function got renamed into <code>float_dgt()</code>.</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>: the documentation said <code>float_()</code> function had been renamed <code>float_dgt()</code> but actually that was not yet the case.</p></li>
 <li><p><strong>xintexpr</strong>: powers <code>a^b</code> (with exponent <code>b</code> neither integer nor half-integer) stopped being accurate regarding the last digits for <code>|b|</code> about <code>1000</code> and beyond. Except for <code>0.8<a<1.25</code> for which accuracy was maintained up to about <code>|b|=10^7</code>. Fixed via keeping the same suitable number of extra digits for internal computations of logarithms, independently of whether <code>a</code> is close to <code>1</code> or not.</p></li>
@@ -284,7 +294,7 @@
 <li><p><strong>xintfrac</strong>: <code>\xintPFloatE</code> may be redefined as a macro which fetches the scientific exponent as a mandatory argument delimited with a dot, and outputs a suitable formatted result (f-expandably), also delimited with a dot which will be removed by internal processing. The default however simply expands to the letter <code>e</code>.</p></li>
 <li><p><strong>xintfrac</strong>: <code>\xintDecToStringREZ</code> is like <code>\xintDecToString</code> but starts by removing trailing zeroes.</p></li>
 </ul>
-<h3 id="bug-fixes-2">Bug fixes</h3>
+<h3 id="bug-fixes-3">Bug fixes</h3>
 <ul>
 <li><strong>xintfrac</strong>, <strong>xintexpr</strong>: it was not possible to use <code>\xinttheDigits</code> in the right hand side of an <code>\xintDigits</code> assignment. For example: <code>\xintDigits*:=\numexpr\xinttheDigits+4;</code>. This is now allowed, and the same applies to the macro interface, for example <code>\xintSetDigits*{\xinttheDigits+4}</code>.</li>
 </ul>
@@ -295,7 +305,7 @@
 <li><p>The output of <code>gcd()</code> and <code>lcm()</code> as applied to fractions is now always in lowest terms.</p></li>
 <li><p>The log message to report a variable creation (if <code>\xintverbosetrue</code>) does not use (double) quotes anymore around the name. By the way, quotes were never used for function names.</p></li>
 </ul>
-<h3 id="bug-fixes-3">Bug fixes</h3>
+<h3 id="bug-fixes-4">Bug fixes</h3>
 <ul>
 <li><p>Ever since <code>1.3</code> the <code>quo()</code> and <code>rem()</code> functions in <code>\xintexpr</code> (not the ones in <code>\xintiiexpr</code>) were broken as their (officially deprecated) support macros had been removed! They had somewhat useless definitions anyway. They have now been officially removed from the syntax. Their siblings in <code>\xintiieval</code> were renamed to <code>iquo()</code> and <code>irem()</code>.</p></li>
 <li><p>Sadly, <code>gcd()</code> was broken in <code>\xintexpr</code> since <code>1.4</code>, if the first argument vanished. And <code>gcd()</code> was broken in <code>\xintiiexpr</code> since <code>1.3d</code> if <em>any</em> argument vanished. I did have a unit test! (which obviously was too limited …)</p>
@@ -303,7 +313,7 @@
 <li><p>The <code>first()</code> and <code>last()</code> functions, if used as arguments to numerical functions such as <code>sqr()</code> inside an <code>\xintdeffunc</code> caused the defined function to be broken.</p></li>
 </ul>
 <h2 id="c-20210220"><code>1.4c (2021/02/20)</code></h2>
-<h3 id="bug-fixes-4">Bug fixes</h3>
+<h3 id="bug-fixes-5">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>
@@ -322,7 +332,7 @@
 <li><p>Chaining of comparison operators (e.g. <code>x<y<z</code>) as in Python (but all comparisons are done even if one is found false) and l3fp.</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-5">Bug fixes</h3>
+<h3 id="bug-fixes-6">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, which moreover remained immuned to the <code>\xintFracToSciE</code> setting.</li>
 </ul>
@@ -338,7 +348,7 @@
 <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-6">Bug fixes</h3>
+<h3 id="bug-fixes-7">Bug fixes</h3>
 <ul>
 <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>
@@ -390,7 +400,7 @@
 <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-7">Bug fixes</h3>
+<h3 id="bug-fixes-8">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>
@@ -406,7 +416,7 @@
 <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-8">Bug fixes</h3>
+<h3 id="bug-fixes-9">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>
@@ -426,7 +436,7 @@
 <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-9">Bug fixes</h3>
+<h3 id="bug-fixes-10">Bug fixes</h3>
 <ul>
 <li>Some bugfixes related to user functions with no variables at all; they were dysfunctional.</li>
 </ul>
@@ -445,7 +455,7 @@
 <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-10">Bug fixes</h3>
+<h3 id="bug-fixes-11">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>
@@ -458,7 +468,7 @@
 <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-11">Bug fixes</h3>
+<h3 id="bug-fixes-12">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>
@@ -484,7 +494,7 @@
 <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-12">Bug fixes</h3>
+<h3 id="bug-fixes-13">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>
@@ -507,7 +517,7 @@
 <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-13">Bug fixes</h3>
+<h3 id="bug-fixes-14">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>
@@ -526,7 +536,7 @@
 <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-14">Bug fixes</h3>
+<h3 id="bug-fixes-15">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>
@@ -569,7 +579,7 @@
 <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-15">Bug fixes</h3>
+<h3 id="bug-fixes-16">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>
@@ -590,7 +600,7 @@
 <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-16">Bug fixes</h3>
+<h3 id="bug-fixes-17">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>
@@ -609,7 +619,7 @@
 <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-17">Bug fixes</h3>
+<h3 id="bug-fixes-18">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>
@@ -625,7 +635,7 @@
 </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-18">Bug fixes</h3>
+<h3 id="bug-fixes-19">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>
@@ -657,7 +667,7 @@
 <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-19">Bug fixes</h3>
+<h3 id="bug-fixes-20">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>
@@ -667,7 +677,7 @@
 <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-20">Bug fixes</h3>
+<h3 id="bug-fixes-21">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<0</code> or <code>x<y</code>. This was unfortunate, and it now simply evaluates to zero in such cases.</p></li>
@@ -707,7 +717,7 @@
 <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-21">Bug fixes</h3>
+<h3 id="bug-fixes-22">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>
@@ -721,7 +731,7 @@
 <li><p>a space in <code>\xintdeffunc f(x)<space>:= 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-22">Bug fixes</h3>
+<h3 id="bug-fixes-23">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>
@@ -734,7 +744,7 @@
 <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-23">Bug fixes</h3>
+<h3 id="bug-fixes-24">Bug fixes</h3>
 <ul>
 <li>in <strong>xintcore</strong>: release <code>1.2c</code> had inadvertently broken the <code>\xintiiDivRound</code> macro.</li>
 </ul>
@@ -744,12 +754,12 @@
 <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-24">Bug fixes</h3>
+<h3 id="bug-fixes-25">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-25">Bug fixes</h3>
+<h3 id="bug-fixes-26">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>
@@ -760,7 +770,7 @@
 <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`&&@</code> (<code>^</code> being used as letter, had to find another character usable with catcode 7).</p></li>
 </ul>
-<h3 id="bug-fixes-26">Bug fixes</h3>
+<h3 id="bug-fixes-27">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>
@@ -861,7 +871,7 @@
 <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-27">Bug fixes</h3>
+<h3 id="bug-fixes-28">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>

Modified: trunk/Master/texmf-dist/doc/generic/xint/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/generic/xint/README.md	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/doc/generic/xint/README.md	2021-05-27 19:52:44 UTC (rev 59366)
@@ -1,8 +1,8 @@
 % README
-% xint 1.4g
-% 2021/05/25
+% xint 1.4h
+% 2021/05/27
 
-    Source:  xint.dtx 1.4g 2021/05/25 (doc 2021/05/25)
+    Source:  xint.dtx 1.4h 2021/05/27 (doc 2021/05/27)
     Author:  Jean-Francois Burnol
     Info:    Expandable operations on big integers, decimals, fractions
     License: LPPL 1.3c

Modified: trunk/Master/texmf-dist/doc/generic/xint/sourcexint.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/xint/xint.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/generic/xint/xint.dtx
===================================================================
--- trunk/Master/texmf-dist/source/generic/xint/xint.dtx	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/source/generic/xint/xint.dtx	2021-05-27 19:52:44 UTC (rev 59366)
@@ -3,20 +3,20 @@
 % Extract all files via "etex xint.dtx" and do "make help"
 % or follow instructions from extracted README.md.
 %<*dtx>
-\def\xintdtxtimestamp {Time-stamp: <25-05-2021 at 18:36:42 CEST>}
+\def\xintdtxtimestamp {Time-stamp: <27-05-2021 at 11:42:22 CEST>}
 %</dtx>
 %<*drv>
 %% ---------------------------------------------------------------
-\def\xintdocdate {2021/05/25}
-\def\xintbndldate{2021/05/25}
-\def\xintbndlversion {1.4g}
+\def\xintdocdate {2021/05/27}
+\def\xintbndldate{2021/05/27}
+\def\xintbndlversion {1.4h}
 %</drv>
 %<readme>% README
 %<changes>% CHANGE LOG
-%<readme|changes>% xint 1.4g
-%<readme|changes>% 2021/05/25
+%<readme|changes>% xint 1.4h
+%<readme|changes>% 2021/05/27
 %<readme|changes>
-%<readme|changes>    Source:  xint.dtx 1.4g 2021/05/25 (doc 2021/05/25)
+%<readme|changes>    Source:  xint.dtx 1.4h 2021/05/27 (doc 2021/05/27)
 %<readme|changes>    Author:  Jean-Francois Burnol
 %<readme|changes>    Info:    Expandable operations on big integers, decimals, fractions
 %<readme|changes>    License: LPPL 1.3c
@@ -23,7 +23,7 @@
 %<readme|changes>
 %<*!readme&!changes&!dohtmlsh&!makefile>
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %<xintkernel>%% xintkernel: Paraphernalia for the xint packages
 %<xinttools>%% xinttools: Expandable and non-expandable utilities
@@ -152,6 +152,22 @@
 %</readme>--------------------------------------------------------
 %<*changes>-------------------------------------------------------
 
+`1.4h (2021/05/27)`
+----
+
+### Bug fixes
+
+ - **xintexpr**: the recent `1.4g` introduced a bug breaking input of
+   the type `<operator><space token><macro>`.
+
+ - **xintexpr**: since `1.4` (`2020/01/31`) the `omit` and `abort`
+   keywords were broken if used inside a substitution, itself nested in
+   a `seq()` or similar construct.
+
+ - **xintexpr**: since `1.4c` the `\xintthespaceseparated` (added at
+   `1.4a`) inserted two, not one, spaces at one specific location near
+   the end of its output.  A bit cosmetic problem, fixed nevertheless.
+
 `1.4g (2021/05/25)`
 ----
 
@@ -19011,7 +19027,7 @@
   \url{http://mirrors.ctan.org/macros/generic/xint/CHANGES.html}}
 
 \begin{itemize}
-\item Release \expandafter|\xintbndlversion| of \expandafter|\xintbndldate|:
+\item Release |1.4g| of |2021/05/25|:
   powers are now parsed in a right associative way. Removal of the
   single-character operators |&|, \verb=|=, and |=| (deprecated at |1.1|).
   Reformatted expandable error messages.
@@ -19297,7 +19313,7 @@
 \fi
 \XINT_providespackage
 \ProvidesPackage {xintkernel}%
-  [2021/05/25 v1.4g Paraphernalia for the xint packages (JFB)]%
+  [2021/05/27 v1.4h Paraphernalia for the xint packages (JFB)]%
 %    \end{macrocode}
 % \subsection{Constants}
 %    \begin{macrocode}
@@ -20257,7 +20273,7 @@
 %    \begin{macrocode}
 \XINT_providespackage
 \ProvidesPackage{xinttools}%
-  [2021/05/25 v1.4g Expandable and non-expandable utilities (JFB)]%
+  [2021/05/27 v1.4h 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.|
@@ -22601,7 +22617,7 @@
 %    \begin{macrocode}
 \XINT_providespackage
 \ProvidesPackage{xintcore}%
-  [2021/05/25 v1.4g Expandable arithmetic on big integers (JFB)]%
+  [2021/05/27 v1.4h 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
@@ -25955,7 +25971,7 @@
 %    \begin{macrocode}
 \XINT_providespackage
 \ProvidesPackage{xint}%
-  [2021/05/25 v1.4g Expandable operations on big integers (JFB)]%
+  [2021/05/27 v1.4h Expandable operations on big integers (JFB)]%
 %    \end{macrocode}
 % \subsection{More token management}
 %    \begin{macrocode}
@@ -28534,7 +28550,7 @@
 %    \begin{macrocode}
 \XINT_providespackage
 \ProvidesPackage{xintbinhex}%
-  [2021/05/25 v1.4g Expandable binary and hexadecimal conversions (JFB)]%
+  [2021/05/27 v1.4h Expandable binary and hexadecimal conversions (JFB)]%
 %    \end{macrocode}
 % \subsection{Constants, etc...}
 % \lverb|1.2n switches to \csname-governed expansion at various places.|
@@ -29206,7 +29222,7 @@
 %    \begin{macrocode}
 \XINT_providespackage
 \ProvidesPackage{xintgcd}%
-  [2021/05/25 v1.4g Euclide algorithm with xint package (JFB)]%
+  [2021/05/27 v1.4h Euclide algorithm with xint package (JFB)]%
 %    \end{macrocode}
 % \subsection{\csh{xintBezout}}
 % \lverb|&
@@ -29806,7 +29822,7 @@
 %    \begin{macrocode}
 \XINT_providespackage
 \ProvidesPackage{xintfrac}%
-  [2021/05/25 v1.4g Expandable operations on fractions (JFB)]%
+  [2021/05/27 v1.4h Expandable operations on fractions (JFB)]%
 %    \end{macrocode}
 % \subsection{\csh{XINT_cntSgnFork}}
 % \lverb|1.09i. Used internally, #1 must expand to \m at ne, \z@, or \@ne or
@@ -35274,7 +35290,7 @@
 %    \begin{macrocode}
 \XINT_providespackage
 \ProvidesPackage{xintseries}%
-  [2021/05/25 v1.4g Expandable partial sums with xint package (JFB)]%
+  [2021/05/27 v1.4h Expandable partial sums with xint package (JFB)]%
 %    \end{macrocode}
 % \subsection{\csh{xintSeries}}
 %    \begin{macrocode}
@@ -35782,7 +35798,7 @@
 %    \begin{macrocode}
 \XINT_providespackage
 \ProvidesPackage{xintcfrac}%
-  [2021/05/25 v1.4g Expandable continued fractions with xint package (JFB)]%
+  [2021/05/27 v1.4h Expandable continued fractions with xint package (JFB)]%
 %    \end{macrocode}
 % \subsection{\csh{xintCFrac}}
 %    \begin{macrocode}
@@ -37175,7 +37191,7 @@
 %    \begin{macrocode}
 \XINT_providespackage
 \ProvidesPackage{xintexpr}%
-  [2021/05/25 v1.4g Expandable expression parser (JFB)]%
+  [2021/05/27 v1.4h Expandable expression parser (JFB)]%
 \catcode`! 11
 \let\XINT_Cmp \xintiiCmp
 \def\XINTfstop{\noexpand\XINTfstop}%
@@ -37434,8 +37450,7 @@
 %
 % Usage of \xintiRound{0} for \xintiexpr without optional [D] means that
 % \xintiexpr ... \relax wrapper can be used to insert rounded-to-integers
-% values in \xintiiexpr context: no post-fix [0] which would break it.  But
-% this does not apply to the \xintiexpr [D]...\relax form with negative D.
+% values in \xintiiexpr context: no post-fix [0] which would break it.
 %
 % 1.4a add support for the optional argument [D] for \xintiexpr being negative
 % D, with same meaning as the 1.4a modified \xintRound from xintfrac.sty.
@@ -37444,6 +37459,11 @@
 % optional argument uses raw format, not fixed point format on output,
 % delegating fixed point conversion to an \XINTiexprprint now separated from
 % \XINTexprprint.
+%
+% In case of negative [D], \xintiexpr [D]...\relax internally has the [0]
+% post-fix so it can not be inserted as sub-expression in \xintiiexpr without
+% a num() or \xintiexpr ...\relax (extra) wrapper.
+%
 % |
 %    \begin{macrocode}
 \def\xintexpr       {\romannumeral0\xintexpro      }%
@@ -37765,17 +37785,31 @@
 % separately for usage with PSTricks \listplot|
 %    \begin{macrocode}
 \def\xintthespaceseparated#1%
-   {\romannumeral`&&@\expandafter\xintthespaceseparated_a\romannumeral0#1}%
+   {\expanded\expandafter\xintthespaceseparated_a\romannumeral0#1}%
 \def\xintthespaceseparated_a #1#2.#3%
-   {\expanded{\expandafter\xintthespaceseparated_b\expanded#2.{#3},!,!,!,!,!,!,!,!,!,^}}%
+   {{\expandafter\xintthespaceseparated_b\expanded#2.{#3},!,!,!,!,!,!,!,!,!,^}}%
 \def\xintthespaceseparated_b #1,#2,#3,#4,#5,#6,#7,#8,#9,%
    {\xint_gob_til_! #9\xintthespaceseparated_c !%
     #1#2#3#4#5#6#7#8#9%
     \xintthespaceseparated_b}%
 %    \end{macrocode}
-% \lverb|1.4c I add a space here to stop the \romannumeral`^^@ if #1 is empty.|
+% \lverb|1.4c I add a space here to stop the \romannumeral`$&$&@ in case of
+% empty input.
+% But this space induces an extra un-needed space token after 9, 18, 27,...
+% items before the last group of less than 9 items.
+%
+% Fix (at 1.4h) is simple because I already use \expanded anyhow: I don't need
+% at all the \romannumeral`$&$&@ which was first in \xintthespaceseparated,
+% let's move the first \expanded which was in \xintthespaceseparated_a to
+% \xintthespaceseparated, and remove the extra space here in _c.
+%
+% (alternative would have been to put the space after #1 and accept a
+% systematic trailing space, at least it is more aesthetic).
+%
+% Again, I did have a test file, but it was not incorporated in my test suite,
+% so I discovered the problem accidentally by compiling all files in an archive.|
 %    \begin{macrocode}
-\def\xintthespaceseparated_c !#1!#2^{ #1}%
+\def\xintthespaceseparated_c !#1!#2^{#1}%
 %    \end{macrocode}
 % \subsection{Hooks into the numeric parser for usage by the
 % \cshnolabel{xintdeffunc} symbolic parser}
@@ -38892,7 +38926,14 @@
 % re-written for code readability only.  Once we see that #1#2 is not a
 % candidate to be or start an operator, we need to check if single-character
 % operator #1 is really an operator and this is done via the existence of the
-% precedence token.|
+% precedence token.
+%
+% Unfortunately the 1.4g refactoring of the scanop macros had a bad bug:
+% \XINT_expr_scanop_c inserted \romannumeral`^^@ in stream but did not grab a
+% token first so a space would stop the \romannumeral and then the #2 in
+% \XINT_expr_scanop_d was not pre-expanded and ended up alone in \ifcat.  It
+% is too distant in the past the time when I wrote the core of xintexpr in
+% 2013... older and dumber now.|
 %    \begin{macrocode}
 \def\XINT_expr_scanop_b #1#2%
 {%
@@ -38902,11 +38943,11 @@
     \fi\fi
     \XINT_expr_foundop_a #1#2%
 }%
-\def\XINT_expr_scanop_c #1#2#3#4#5% #1#2=\fi\fi
+\def\XINT_expr_scanop_c #1#2#3#4#5#6% #1#2=\fi\fi
 {%
     #1#2%
     \expandafter\XINT_expr_scanop_d\csname XINT_expr_itself_#4#5\expandafter\endcsname
-    \romannumeral`&&@%
+    \romannumeral`&&@#6%
 }%
 \def\XINT_expr_scanop_d #1#2%
 {%
@@ -38922,7 +38963,7 @@
         \csname XINT_expr_precedence_#1\expandafter\endcsname
         \expandafter #1%
     \else
-        \expandafter\XINT_expr_getop_a\romannumeral`&&@%
+        \expandafter\XINT_expr_getop\romannumeral`&&@%
         \xint_afterfi{\XINT_expandableerror
         {Expected an operator but got `#1'. Ignoring.}}%
      \fi
@@ -40719,8 +40760,37 @@
 % \paragraph{The \cshn{omit} and \cshn{abort} keywords}
 % \lverb|&
 % Comments are currently undergoing reconstruction.
-% |
 %
+% The mechanism is somewhat complex.  The operator !? will fetch a dummy value
+% ! or ^ which is then recognized int the loops implementing the various seq
+% etc... construct using dummy variables and implement omit and abort.
+%
+% In May 2021 I realized that the January 2020 1.4 had broken omit and abort
+% if used inside a subs().  The definition
+%(\edef\XINT_expr_var_omit  #1\relax !{1\string !?!\relax !}%
+%)
+% conflicted with the 1.4 refactoring of «subs» and similar things 
+% which had replaced formerly clean-up macros (of ! and what's next, as in
+% now defunct
+% \def\XINT_expr_subx:_end #1!#2#3{#1} which was involved in subs mechanism,
+% and by the way would be incompatible with multi-letter dummy variables) by usage
+% of an \iffalse as in "\relax\iffalse\relax !" to delimite a sub-expression, which was
+% supposed to be clever (the "\relax !" being delimiter for dummy variables).
+%
+% This \iffalse from subs mechanism ended up being gobbled by omit/abort thus
+% inducing breakage.
+%
+% Grabbing \relax #2! would be a fix but looks a bit dangerous, as there can
+% be a subexpression after the omit or abort bringing its own \relax, although
+% this is very very unlikely.
+%
+% I considered to modify the dummy variables delimiter from \relax !  to
+% \xint_Bye ! for example but got afraid from the ramifications, as all
+% structures handling dummy variables would have needed refactoring.
+%
+% So finally things here remain unchanged and the refactoring to fix this
+% breakage was done in \XINT_allexpr_subsx (and also subsm). See there.  |
+%
 %    \begin{macrocode}
 \edef\XINT_expr_var_omit  #1\relax !{1\string !?!\relax !}%
 \edef\XINT_expr_var_abort #1\relax !{1\string !?^\relax !}%
@@ -40954,17 +41024,69 @@
 \def\XINT_iiexpr_func_subsx #1#2{\XINT_allexpr_subsx \xintbareiieval }%
 %    \end{macrocode}
 % \lverb|
-%  #2 is the value to assign to the dummy variable
-%  #3 is the dummy variable name (possibly multi-letter), #4 is the expression to evaluate
+% #2 is the value to assign to the dummy variable
+% #3 is the dummy variable name (possibly multi-letter), #4 is the expression
+% to evaluate
+%
+% 1.4 was doing something clever to get rid of the ! and tokens following it,
+% via an \iffalse...\fi which erased them and propagated the expansion to
+% trigger the getopt:
+%
+%(\expanded\bgroup\romannumeral0#1#4\relax \iffalse\relax !#3{#2}{\fi\expandafter}
+%)
+%
+% But sadly, with a delay of more than one year later (right after having
+% released 1.4g) I realized that this had broken omit and abort if inside a
+% subs.  As omit and abort would clean all up to \relax !, this meant here
+% swallowing in particular the above \iffalse, leaving a dangling \fi.  I had
+% the files which show this bug already at time of 1.4 release but did not
+% compile them, and they were not included in my test suite.
+%
+% I hesitated with modifying the delimiter from "\relax !" (catcode 11 !) to
+% "\relax \xint_Bye" for the dummy variables which would have allowed some
+% trickery with clean-up from \xint_Bye but got afraid from the breakage
+% potential of such refactoring with many induced changes.
+%
+% A variant like this:
+%( \def\XINT_allexpr_subsx #1#2#3#4%
+%: {%
+%:     \expandafter\XINT_expr_clean_and_put_op_first
+%:     \expanded
+%:     {\romannumeral0#1#4\relax !#3{#2}\xint:\expandafter}\romannumeral`$&$&\XINT_expr_getop
+%: }%
+%: \def\XINT_expr_clean_and_put_op_first #1#2\xint:#3#4{#3#4{#1}}%
+%)
+% breaks nesting: the braces make variables encountered in #4 unable to
+% match their definition.  This would work:
+%
+%( \def\XINT_allexpr_subsx #1#2#3#4%
+%: {%
+%:     \expandafter\XINT_allexpr_subsx_clean\romannumeral0#1#4\relax !#3{#2}\xint:
+%: }%
+%: \def\XINT_allexpr_subsx_clean #1#2\xint:
+%: {%
+%:     \expandafter\XINT_expr_put_op_first
+%:     \expanded{\unexpanded{{#1}}\expandafter}\romannumeral`$&$&@\XINT_expr_getop
+%: }%
+%)
+% (not tested).
+%
+% But in the end I decided to simply fix the first envisioned code above.
+% This accepts expansion of supposedly inert #3{#2}.  There is again the
+% \iffalse but it is moved to the right.  This change limits possibly hacky
+% future developments.
+%
+% No need for the \expandafter's from \XINT_expr_put_op_first in \XINT_expr_clean_and_put_op_first.
 % |
 %    \begin{macrocode}
 \def\XINT_allexpr_subsx #1#2#3#4%
 {%
-    \expandafter\XINT_expr_put_op_first
+    \expandafter\XINT_expr_clean_and_put_op_first
     \expanded
-    \bgroup\romannumeral0#1#4\relax \iffalse\relax !#3{#2}{\fi
-    \expandafter}\romannumeral`&&@\XINT_expr_getop
+    \bgroup\romannumeral0#1#4\relax !#3{#2}\xint:\iffalse{\fi\expandafter}%
+    \romannumeral`&&@\XINT_expr_getop
 }%
+\def\XINT_expr_clean_and_put_op_first #1#2\xint:#3#4{#3#4{#1}}%
 %    \end{macrocode}
 % \subsubsection{\cshn{subsm()}: simultaneous independent substitutions}
 % \lverb|New with 1.4. Globally the var1=expr1; var2=expr2; var2=expr3;...
@@ -41010,25 +41132,29 @@
 }%
 %    \end{macrocode}
 % \lverb|
-%  #1 = \xintbareeval,  or \xintbarefloateval or \xintbareiieval
-%  #2 = evaluation of last variable assignment
+%( #1 = \xintbareeval,  or \xintbarefloateval or \xintbareiieval
+%: #2 = evaluation of last variable assignment
+%)
 % |
 %    \begin{macrocode}
 \def\XINT_allexpr_subsm_done #1#2{{#2}\iffalse{{\fi}}}%
 %    \end{macrocode}
 % \lverb|
-%  #1 = \xintbareeval or \xintbarefloateval or \xintbareiieval
-%  #2 = {value1}\relax !var2{value2}....\relax !varN{valueN} (value's may be oples)
-%  #3 = {var1}
-%  #4 = the expression to evaluate
+%( #1 = \xintbareeval or \xintbarefloateval or \xintbareiieval
+%: #2 = {value1}\relax !var2{value2}....\relax !varN{valueN} (value's may be oples)
+%: #3 = {var1}
+%: #4 = the expression to evaluate
+%)
+% Refactored at 1.4h as for \XINT_allexpr_subsx, see comments there related
+% to the omit/abort conundrum.
 % |
 %    \begin{macrocode}
 \def\XINT_allexpr_subsmx #1#2#3#4%
 {%
-    \expandafter\XINT_expr_put_op_first
+    \expandafter\XINT_expr_clean_and_put_op_first
     \expanded
-    \bgroup\romannumeral0#1#4\relax \iffalse\relax !#3#2{\fi
-    \expandafter}\romannumeral`&&@\XINT_expr_getop
+    \bgroup\romannumeral0#1#4\relax !#3#2\xint:\iffalse{\fi\expandafter}%
+    \romannumeral`&&@\XINT_expr_getop
 }%
 %    \end{macrocode}
 % \subsubsection{\cshn{subsn()}: leaner syntax for nesting (possibly dependent) substitutions}
@@ -41048,6 +41174,14 @@
 %: #2 = Expression in all variables which is to evaluate
 %: #3 = all the stuff after Name1 =  and up to final parenthesis
 %)
+%
+% This one needed no reactoring at 1.4h to fix the omit/abort problem, as
+% there was no \iffalse..\fi clean-up: the clean-up is done directly via
+% \XINT_allexpr_subsnx_J.
+%
+% I only added usage of \XINT_expr_put_op_first_noexpand.  There may be other
+% locations where it could be used, but I can't afford now reviewing
+% usage. For next release after 1.4h bugfix.
 % |
 %    \begin{macrocode}
 \def\XINT_allexpr_subsn_g #1#2#3%
@@ -41106,9 +41240,10 @@
 }%
 \def\XINT_allexpr_subsnx_J #1#2^%
 {%
-    \expandafter\XINT_expr_put_op_first
+    \expandafter\XINT_expr_put_op_first_noexpand
     \expanded{\unexpanded{{#1}}\expandafter}\romannumeral`&&@\XINT_expr_getop
 }%
+\def\XINT_expr_put_op_first_noexpand#1#2#3{#2#3{#1}}%
 %    \end{macrocode}
 % \subsubsection{\cshn{seq()}: sequences from assigning values to a
 % dummy variable}
@@ -43854,10 +43989,10 @@
   \expandafter\xint_secondoftwo
 \fi
 {\immediate\write-1{Reloading xinttrig library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver at trig\endcsname{2021/05/25 v1.4g}%
+{\expandafter\gdef\csname xintlibver at trig\endcsname{2021/05/27 v1.4h}%
 \XINT_providespackage
 \ProvidesPackage{xinttrig}%
-[2021/05/25 v1.4g Trigonometrical functions for xintexpr (JFB)]%
+[2021/05/27 v1.4h Trigonometrical functions for xintexpr (JFB)]%
 }%
 %    \end{macrocode}
 % \subsection{Ensure used letters are dummy letters}
@@ -45174,10 +45309,10 @@
   \expandafter\xint_secondoftwo
 \fi
 {\immediate\write-1{Reloading xintlog library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver at log\endcsname{2021/05/25 v1.4g}%
+{\expandafter\gdef\csname xintlibver at log\endcsname{2021/05/27 v1.4h}%
 \XINT_providespackage
 \ProvidesPackage{xintlog}%
-[2021/05/25 v1.4g Logarithms and exponentials for xintexpr (JFB)]%
+[2021/05/27 v1.4h Logarithms and exponentials for xintexpr (JFB)]%
 }%
 %    \end{macrocode}
 % \subsection{\csh{xintreloadxintlog}}
@@ -47264,8 +47399,8 @@
     \TeX\strut. Version {\xintbndlversion} of {\xintbndldate}.\par
 }
 
-\CheckSum {38423}% 1.4g
-% 38212 pour 1.4f, 38813 pour 1.4e, 35184 pour 1.4d
+\CheckSum {38427}% 1.4h
+% 38423 pour 1.4g, 38212 pour 1.4f, 38813 pour 1.4e, 35184 pour 1.4d
 % 35109 pour 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,

Modified: trunk/Master/texmf-dist/tex/generic/xint/xint.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xint.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xint.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 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}%
-  [2021/05/25 v1.4g Expandable operations on big integers (JFB)]%
+  [2021/05/27 v1.4h 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}%

Modified: trunk/Master/texmf-dist/tex/generic/xint/xintbinhex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xintbinhex.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xintbinhex.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xintbinhex: Expandable binary and hexadecimal conversions
 %% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
 \XINTsetupcatcodes% defined in xintkernel.sty
 \XINT_providespackage
 \ProvidesPackage{xintbinhex}%
-  [2021/05/25 v1.4g Expandable binary and hexadecimal conversions (JFB)]%
+  [2021/05/27 v1.4h 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

Modified: trunk/Master/texmf-dist/tex/generic/xint/xintcfrac.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xintcfrac.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xintcfrac.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xintcfrac: Expandable continued fractions with xint package
 %% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
 \XINTsetupcatcodes% defined in xintkernel.sty
 \XINT_providespackage
 \ProvidesPackage{xintcfrac}%
-  [2021/05/25 v1.4g Expandable continued fractions with xint package (JFB)]%
+  [2021/05/27 v1.4h Expandable continued fractions with xint package (JFB)]%
 \def\xintCFrac {\romannumeral0\xintcfrac }%
 \def\xintcfrac #1%
 {%

Modified: trunk/Master/texmf-dist/tex/generic/xint/xintcore.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xintcore.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xintcore.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xintcore: Expandable arithmetic on big integers
 %% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
 \XINTsetupcatcodes% defined in xintkernel.sty
 \XINT_providespackage
 \ProvidesPackage{xintcore}%
-  [2021/05/25 v1.4g Expandable arithmetic on big integers (JFB)]%
+  [2021/05/27 v1.4h Expandable arithmetic on big integers (JFB)]%
 \csname XINT_Clamped_istrapped\endcsname
 \csname XINT_ConversionSyntax_istrapped\endcsname
 \csname XINT_DivisionByZero_istrapped\endcsname

Modified: trunk/Master/texmf-dist/tex/generic/xint/xintexpr.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xintexpr.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xintexpr.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xintexpr: Expandable expression parser
 %% ---------------------------------------------------------------
@@ -82,7 +82,7 @@
 \XINTsetupcatcodes%
 \XINT_providespackage
 \ProvidesPackage{xintexpr}%
-  [2021/05/25 v1.4g Expandable expression parser (JFB)]%
+  [2021/05/27 v1.4h Expandable expression parser (JFB)]%
 \catcode`! 11
 \let\XINT_Cmp \xintiiCmp
 \def\XINTfstop{\noexpand\XINTfstop}%
@@ -405,14 +405,14 @@
    {\xint_gob_til_! #3\XINT_thecoords_c ! (#1#2, #3#4)\XINT_thecoords_b }%
 \def\XINT_thecoords_c #1^{}%
 \def\xintthespaceseparated#1%
-   {\romannumeral`&&@\expandafter\xintthespaceseparated_a\romannumeral0#1}%
+   {\expanded\expandafter\xintthespaceseparated_a\romannumeral0#1}%
 \def\xintthespaceseparated_a #1#2.#3%
-   {\expanded{\expandafter\xintthespaceseparated_b\expanded#2.{#3},!,!,!,!,!,!,!,!,!,^}}%
+   {{\expandafter\xintthespaceseparated_b\expanded#2.{#3},!,!,!,!,!,!,!,!,!,^}}%
 \def\xintthespaceseparated_b #1,#2,#3,#4,#5,#6,#7,#8,#9,%
    {\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
@@ -929,11 +929,11 @@
     \fi\fi
     \XINT_expr_foundop_a #1#2%
 }%
-\def\XINT_expr_scanop_c #1#2#3#4#5% #1#2=\fi\fi
+\def\XINT_expr_scanop_c #1#2#3#4#5#6% #1#2=\fi\fi
 {%
     #1#2%
     \expandafter\XINT_expr_scanop_d\csname XINT_expr_itself_#4#5\expandafter\endcsname
-    \romannumeral`&&@%
+    \romannumeral`&&@#6%
 }%
 \def\XINT_expr_scanop_d #1#2%
 {%
@@ -949,7 +949,7 @@
         \csname XINT_expr_precedence_#1\expandafter\endcsname
         \expandafter #1%
     \else
-        \expandafter\XINT_expr_getop_a\romannumeral`&&@%
+        \expandafter\XINT_expr_getop\romannumeral`&&@%
         \xint_afterfi{\XINT_expandableerror
         {Expected an operator but got `#1'. Ignoring.}}%
      \fi
@@ -2211,11 +2211,12 @@
 \def\XINT_iiexpr_func_subsx #1#2{\XINT_allexpr_subsx \xintbareiieval }%
 \def\XINT_allexpr_subsx #1#2#3#4%
 {%
-    \expandafter\XINT_expr_put_op_first
+    \expandafter\XINT_expr_clean_and_put_op_first
     \expanded
-    \bgroup\romannumeral0#1#4\relax \iffalse\relax !#3{#2}{\fi
-    \expandafter}\romannumeral`&&@\XINT_expr_getop
+    \bgroup\romannumeral0#1#4\relax !#3{#2}\xint:\iffalse{\fi\expandafter}%
+    \romannumeral`&&@\XINT_expr_getop
 }%
+\def\XINT_expr_clean_and_put_op_first #1#2\xint:#3#4{#3#4{#1}}%
 \def\XINT_expr_onliteral_subsm
 {%
     \expandafter\XINT_allexpr_subsm_f
@@ -2253,10 +2254,10 @@
 \def\XINT_allexpr_subsm_done #1#2{{#2}\iffalse{{\fi}}}%
 \def\XINT_allexpr_subsmx #1#2#3#4%
 {%
-    \expandafter\XINT_expr_put_op_first
+    \expandafter\XINT_expr_clean_and_put_op_first
     \expanded
-    \bgroup\romannumeral0#1#4\relax \iffalse\relax !#3#2{\fi
-    \expandafter}\romannumeral`&&@\XINT_expr_getop
+    \bgroup\romannumeral0#1#4\relax !#3#2\xint:\iffalse{\fi\expandafter}%
+    \romannumeral`&&@\XINT_expr_getop
 }%
 \def\XINT_expr_onliteral_subsn
 {%
@@ -2320,9 +2321,10 @@
 }%
 \def\XINT_allexpr_subsnx_J #1#2^%
 {%
-    \expandafter\XINT_expr_put_op_first
+    \expandafter\XINT_expr_put_op_first_noexpand
     \expanded{\unexpanded{{#1}}\expandafter}\romannumeral`&&@\XINT_expr_getop
 }%
+\def\XINT_expr_put_op_first_noexpand#1#2#3{#2#3{#1}}%
 \def\XINT_allexpr_seq_f #1#2{\xint_c_ii^v `{seqx}#2)\relax #1}%
 \def\XINT_expr_onliteral_seq
  {\expandafter\XINT_allexpr_seq_f\romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}}%

Modified: trunk/Master/texmf-dist/tex/generic/xint/xintfrac.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xintfrac.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xintfrac.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xintfrac: Expandable operations on fractions
 %% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
 \XINTsetupcatcodes% defined in xintkernel.sty
 \XINT_providespackage
 \ProvidesPackage{xintfrac}%
-  [2021/05/25 v1.4g Expandable operations on fractions (JFB)]%
+  [2021/05/27 v1.4h Expandable operations on fractions (JFB)]%
 \def\XINT_cntSgnFork #1%
 {%
     \ifcase #1\expandafter\xint_secondofthree

Modified: trunk/Master/texmf-dist/tex/generic/xint/xintgcd.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xintgcd.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xintgcd.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xintgcd: Euclidean algorithm with xint package
 %% ---------------------------------------------------------------
@@ -77,7 +77,7 @@
 \XINTsetupcatcodes% defined in xintkernel.sty
 \XINT_providespackage
 \ProvidesPackage{xintgcd}%
-  [2021/05/25 v1.4g Euclide algorithm with xint package (JFB)]%
+  [2021/05/27 v1.4h Euclide algorithm with xint package (JFB)]%
 \def\xintBezout {\romannumeral0\xintbezout }%
 \def\xintbezout #1%
 {%

Modified: trunk/Master/texmf-dist/tex/generic/xint/xintkernel.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xintkernel.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xintkernel.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xintkernel: Paraphernalia for the xint packages
 %% ---------------------------------------------------------------
@@ -159,7 +159,7 @@
 \fi
 \XINT_providespackage
 \ProvidesPackage {xintkernel}%
-  [2021/05/25 v1.4g Paraphernalia for the xint packages (JFB)]%
+  [2021/05/27 v1.4h Paraphernalia for the xint packages (JFB)]%
 \chardef\xint_c_     0
 \chardef\xint_c_i    1
 \chardef\xint_c_ii   2

Modified: trunk/Master/texmf-dist/tex/generic/xint/xintlog.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xintlog.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xintlog.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xintlog: Logarithms and exponentials for xintexpr
 %% ---------------------------------------------------------------
@@ -68,10 +68,10 @@
   \expandafter\xint_secondoftwo
 \fi
 {\immediate\write-1{Reloading xintlog library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver at log\endcsname{2021/05/25 v1.4g}%
+{\expandafter\gdef\csname xintlibver at log\endcsname{2021/05/27 v1.4h}%
 \XINT_providespackage
 \ProvidesPackage{xintlog}%
-[2021/05/25 v1.4g Logarithms and exponentials for xintexpr (JFB)]%
+[2021/05/27 v1.4h Logarithms and exponentials for xintexpr (JFB)]%
 }%
 \def\xintreloadxintlog{\input xintlog.sty }%
 \xintexprSafeCatcodes\catcode`_ 11

Modified: trunk/Master/texmf-dist/tex/generic/xint/xintseries.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xintseries.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xintseries.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xintseries: Expandable partial sums with xint package
 %% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
 \XINTsetupcatcodes% defined in xintkernel.sty
 \XINT_providespackage
 \ProvidesPackage{xintseries}%
-  [2021/05/25 v1.4g Expandable partial sums with xint package (JFB)]%
+  [2021/05/27 v1.4h Expandable partial sums with xint package (JFB)]%
 \def\xintSeries {\romannumeral0\xintseries }%
 \def\xintseries #1#2%
 {%

Modified: trunk/Master/texmf-dist/tex/generic/xint/xinttools.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xinttools.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xinttools.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xinttools: Expandable and non-expandable utilities
 %% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
 \XINTsetupcatcodes% defined in xintkernel.sty
 \XINT_providespackage
 \ProvidesPackage{xinttools}%
-  [2021/05/25 v1.4g Expandable and non-expandable utilities (JFB)]%
+  [2021/05/27 v1.4h Expandable and non-expandable utilities (JFB)]%
 \newtoks\XINT_toks
 \xint_firstofone{\let\XINT_sptoken= } %<- space here!
 \def\xintgodef  {\global\xintodef }%

Modified: trunk/Master/texmf-dist/tex/generic/xint/xinttrig.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xint/xinttrig.sty	2021-05-27 19:52:26 UTC (rev 59365)
+++ trunk/Master/texmf-dist/tex/generic/xint/xinttrig.sty	2021-05-27 19:52:44 UTC (rev 59366)
@@ -21,7 +21,7 @@
 %% same distribution. (The sources need not necessarily be
 %% in the same archive or directory.)
 %% ---------------------------------------------------------------
-%% The xint bundle 1.4g 2021/05/25
+%% The xint bundle 1.4h 2021/05/27
 %% Copyright (C) 2013-2021 by Jean-Francois Burnol
 %% xinttrig: Trigonometry for the xintexpr package
 %% ---------------------------------------------------------------
@@ -69,10 +69,10 @@
   \expandafter\xint_secondoftwo
 \fi
 {\immediate\write-1{Reloading xinttrig library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver at trig\endcsname{2021/05/25 v1.4g}%
+{\expandafter\gdef\csname xintlibver at trig\endcsname{2021/05/27 v1.4h}%
 \XINT_providespackage
 \ProvidesPackage{xinttrig}%
-[2021/05/25 v1.4g Trigonometrical functions for xintexpr (JFB)]%
+[2021/05/27 v1.4h Trigonometrical functions for xintexpr (JFB)]%
 }%
 \xintFor* #1 in {iDTVtuwxyzX}\do{\xintensuredummy{#1}}%
 \def\xintreloadxinttrig{\input xinttrig.sty }%



More information about the tex-live-commits mailing list.