texlive[61559] Master: polexpr (10jan22)

commits+karl at tug.org commits+karl at tug.org
Mon Jan 10 22:27:45 CET 2022


Revision: 61559
          http://tug.org/svn/texlive?view=revision&revision=61559
Author:   karl
Date:     2022-01-10 22:27:44 +0100 (Mon, 10 Jan 2022)
Log Message:
-----------
polexpr (10jan22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/polexpr/README.md
    trunk/Master/texmf-dist/doc/generic/polexpr/polexpr.html
    trunk/Master/texmf-dist/tex/generic/polexpr/polexpr.sty
    trunk/Master/texmf-dist/tex/generic/polexpr/polexprcore.tex
    trunk/Master/texmf-dist/tex/generic/polexpr/polexprexpr.tex
    trunk/Master/texmf-dist/tex/generic/polexpr/polexprsturm.tex
    trunk/Master/tlpkg/libexec/ctan2tds

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/generic/polexpr/polexpr-examples.pdf
    trunk/Master/texmf-dist/tex/generic/polexpr/polexpr-examples.tex

Modified: trunk/Master/texmf-dist/doc/generic/polexpr/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/generic/polexpr/README.md	2022-01-10 18:36:08 UTC (rev 61558)
+++ trunk/Master/texmf-dist/doc/generic/polexpr/README.md	2022-01-10 21:27:44 UTC (rev 61559)
@@ -95,12 +95,14 @@
 - 0.8.5 (2021/11/30)
   Bugfix: `intfrom()` was documented at `0.8` but not declared to parser.
   Track (belatedly) `xintexpr` 1.4g changes
+- 0.8.6 (2022/01/09)
+  Separate `polexpr-examples.{tex,pdf}` from the `polexpr.html` reference
 
-Files of 0.8.5 release:
-
+Files of the 0.8.6 release:
 - polexpr.sty, polexprcore.tex, polexprexpr.tex, polexprsturm.tex,
 - README.md,
-- polexpr.html (documentation)
+- polexpr.html (reference documentation),
+- polexpr-examples.pdf, polexpr-examples.tex (pdf doc and its source).
 
 Acknowledgments
 ---------------
@@ -113,7 +115,7 @@
 License
 -------
 
-Copyright (C) 2018-2021 Jean-François Burnol
+Copyright (C) 2018-2022 Jean-François Burnol
 
 See documentation of package [xintexpr](http://www.ctan.org/pkg/xint) for
 contact information.
@@ -132,4 +134,5 @@
 The Author of this Work is Jean-François Burnol.
 
 This Work consists of the package files polexpr.sty, polexprcore.tex,
-polexprexpr.tex, polexprsturm.tex, this README.md and polexpr.html.
+polexprexpr.tex, polexprsturm.tex, this README.md and documentation
+polexpr.html, polexpr-examples.tex, polexpr-examples.pdf

Added: trunk/Master/texmf-dist/doc/generic/polexpr/polexpr-examples.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/generic/polexpr/polexpr-examples.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/generic/polexpr/polexpr-examples.pdf	2022-01-10 18:36:08 UTC (rev 61558)
+++ trunk/Master/texmf-dist/doc/generic/polexpr/polexpr-examples.pdf	2022-01-10 21:27:44 UTC (rev 61559)

Property changes on: trunk/Master/texmf-dist/doc/generic/polexpr/polexpr-examples.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/generic/polexpr/polexpr.html
===================================================================
--- trunk/Master/texmf-dist/doc/generic/polexpr/polexpr.html	2022-01-10 18:36:08 UTC (rev 61558)
+++ trunk/Master/texmf-dist/doc/generic/polexpr/polexpr.html	2022-01-10 21:27:44 UTC (rev 61559)
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8"/>
 <meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
-<title>Package polexpr documentation</title>
+<title>polexpr reference documentation</title>
 <style type="text/css">
 
 /* Minimal style sheet for the HTML output of Docutils.                    */
@@ -596,16 +596,83 @@
 </style>
 </head>
 <body>
-<div class="document" id="package-polexpr-documentation">
-<h1 class="title">Package polexpr documentation</h1>
-<p class="subtitle" id="id1">0.8.5 (2021/11/30)</p>
+<div class="document" id="polexpr-reference-documentation">
+<h1 class="title">polexpr reference documentation</h1>
+<p class="subtitle" id="id1">0.8.6 (2022/01/09)</p>
 
+<div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id35">Introduction</a></h1>
+<p>This is a TeX and LaTeX macro package.</p>
+<p>To use it with Plain or formats other than LaTeX:</p>
+<pre class="literal-block">\input polexpr.sty</pre>
+<p>To use it with LaTeX:</p>
+<pre class="literal-block">\usepackage{polexpr}</pre>
+<p>The capabilities of the package are implemented via:</p>
+<ul class="simple">
+<li><p>a parser <span class="docutils literal">\poldef</span> allowing to define polynomials via the usual
+algebraic notations,</p></li>
+<li><p>many functions available for use directly in the powerful <span class="docutils literal">\poldef</span> or
+<span class="docutils literal"><span class="pre">\xintexpr/\xinteval</span></span> expandable functional syntax,</p></li>
+<li><p>and macros acting on named polynomials which may serve either as
+alternative to the functional interface or to provide further
+capabilities, such as root localization to arbitrary precision.</p></li>
+</ul>
+</div>
+<div class="section" id="examples-of-root-localization">
+<h1><a class="toc-backref" href="#id36">Examples of root localization</a></h1>
+<p>This legacy section has been moved to the
+<a class="reference external" href="polexpr-examples.pdf">polexpr-examples.pdf</a> document.
+To access it (if previous link does not work):</p>
+<pre class="literal-block">texdoc polexpr-examples</pre>
+</div>
+<div class="section" id="usage-via-xintsession">
+<h1>Usage via <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a></h1>
+<p>The simplest manner to get a feeling for the package abilities regarding
+root localization is to use it on the command line via the <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a>
+interface.  Here is an example:</p>
+<pre class="literal-block">$ rlwrap etex xintsession
+[...xintsession welcome message...]
+Starting in exact mode (floating point evaluations use 16 digits)
+>>> &pol
+pol mode (i.e. function definitions use \poldef)
+>>> f(x) := x^7 - x^6 - 2x + 1;
+f = x^7-x^6-2*x+1
+    --> &GenFloat(f) lets f become usable as function in fp mode
+    --> &ROOTS(f) (resp. &ROOTS(f,N)) finds all rational roots exactly and
+        all irrational roots with at least 10 (resp. N) fractional digits
+>>> &ROOTS(f)
+Solving for real roots of f and assigning them (please wait...)
+(mult. 1) Rootf_1 = -1.0719678841...
+(mult. 1) Rootf_2 = 0.4962386948...
+(mult. 1) Rootf_3 = 1.3151140860...
+Square-free irrational part: x^7-x^6-2*x+1
+    --> &REFINEROOTS(f,N) to extend real irr. roots to N fractional digits
+>>> &REFINEROOTS(f,40)
+Refining real roots of f to 40 digits (please wait...)
+(mult. 1) Rootf_1 = -1.0719678841080266034109100331975342338141...
+(mult. 1) Rootf_2 = 0.4962386948771497344730618510143671567979...
+(mult. 1) Rootf_3 = 1.3151140860165192656960005018679846354234...</pre>
+<p>The <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a> interface allows to define polynomial variables via its
+<span class="docutils literal">&pol</span> mode.  It also exposes <a class="reference internal" href="#polexpr08">all polynomial functions added to the
+xintexpr syntax</a> by <span class="docutils literal">polexpr</span>.  Further, as seen in the
+example above it also covers some of the <span class="docutils literal">polexpr</span> capabilities
+currently implemented via user macros.  This is to be considered a work
+in progress, the above <span class="docutils literal">&ROOTS</span> and <span class="docutils literal">&REFINEROOTS</span> may be renamed
+into something else, and may have been so already since this
+documentation was written.</p>
+<p>Any input on the command line at the <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a> <span class="docutils literal">>>></span> prompt which
+starts with a backslash is executed as TeX macros, so all macros of
+<span class="docutils literal">polexpr</span> are in fact already available, including those typesetting
+material in background of the interactive session on command line.  The
+<span class="docutils literal">&ROOTS</span> and <span class="docutils literal">&REFINEROOTS</span> direct their outputs to the
+terminal rather than to the TeX page as would the typesetting macros
+defined by <span class="docutils literal">polexpr</span> itself.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><p><a class="reference internal" href="#usage" id="id35">Usage</a></p></li>
-<li><p><a class="reference internal" href="#abstract" id="id36">Abstract</a></p></li>
-<li><p><a class="reference internal" href="#prerequisites" id="id37">Prerequisites</a></p></li>
+<li><p><a class="reference internal" href="#introduction" id="id35">Introduction</a></p></li>
+<li><p><a class="reference internal" href="#examples-of-root-localization" id="id36">Examples of root localization</a></p></li>
+<li><p><a class="reference internal" href="#usage-via-xintsession" id="id37">Usage via xintsession</a></p></li>
 <li><p><a class="reference internal" href="#quick-syntax-overview" id="id38">Quick syntax overview</a></p></li>
 <li><p><a class="reference internal" href="#the-polexpr-0-8-extensions-to-the-xintexpr-syntax" id="id39">The polexpr <span class="docutils literal">0.8</span> extensions to the <span class="docutils literal">\xintexpr</span> syntax</a></p>
 <ul>
@@ -645,261 +712,182 @@
 <li><p><a class="reference internal" href="#integral-pol-expr-p-pol-expr-a-pol-expr-b" id="id73"><span class="docutils literal"><span class="pre">integral(<pol.</span> expr. P>, [<pol. expr. a>, <pol. expr. <span class="pre">b>])</span></span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#examples-of-localization-of-roots" id="id74">Examples of localization of roots</a></p>
+<li><p><a class="reference internal" href="#non-expandable-macros" id="id74">Non-expandable macros</a></p>
 <ul>
-<li><p><a class="reference internal" href="#a-typical-example" id="id75">A typical example</a></p></li>
-<li><p><a class="reference internal" href="#a-degree-four-polynomial-with-nearby-roots" id="id76">A degree four polynomial with nearby roots</a></p></li>
-<li><p><a class="reference internal" href="#the-degree-nine-polynomial-with-0-99-0-999-0-9999-as-triple-roots" id="id77">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</a></p></li>
-<li><p><a class="reference internal" href="#a-degree-five-polynomial-with-three-rational-roots" id="id78">A degree five polynomial with three rational roots</a></p></li>
-<li><p><a class="reference internal" href="#a-mignotte-type-polynomial" id="id79">A Mignotte type polynomial</a></p></li>
-<li><p><a class="reference internal" href="#the-wilkinson-polynomial" id="id80">The Wilkinson polynomial</a></p></li>
-<li><p><a class="reference internal" href="#the-second-wilkinson-polynomial" id="id81">The second Wilkinson polynomial</a></p></li>
-<li><p><a class="reference internal" href="#the-degree-41-polynomial-with-2-1-9-1-8-0-0-1-1-9-2-as-roots" id="id82">The degree 41 polynomial with -2, -1.9, -1.8, ..., 0, 0.1, ..., 1.9, 2 as roots</a></p></li>
-<li><p><a class="reference internal" href="#roots-of-chebyshev-polynomials" id="id83">Roots of Chebyshev polynomials</a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#non-expandable-macros" id="id84">Non-expandable macros</a></p>
+<li><p><a class="reference internal" href="#poldef-polname-letter-expression-using-the-letter-as-indeterminate" id="id75"><span class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression using the letter as indeterminate;</span></a></p></li>
+<li><p><a class="reference internal" href="#poldef-letter-polname-expr-using-the-letter-as-indeterminate" id="id76"><span class="docutils literal"><span class="pre">\PolDef[<letter>]{<polname>}{<expr.</span> using the letter as indeterminate>}</span></a></p></li>
+<li><p><a class="reference internal" href="#polgenfloatvariant-polname" id="id77"><span class="docutils literal"><span class="pre">\PolGenFloatVariant{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltypeset-pol-expr" id="id78"><span class="docutils literal"><span class="pre">\PolTypeset{<pol.</span> <span class="pre">expr.>}</span></span></a></p>
 <ul>
-<li><p><a class="reference internal" href="#poldef-polname-letter-expression-using-the-letter-as-indeterminate" id="id85"><span class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression using the letter as indeterminate;</span></a></p></li>
-<li><p><a class="reference internal" href="#poldef-letter-polname-expr-using-the-letter-as-indeterminate" id="id86"><span class="docutils literal"><span class="pre">\PolDef[<letter>]{<polname>}{<expr.</span> using the letter as indeterminate>}</span></a></p></li>
-<li><p><a class="reference internal" href="#polgenfloatvariant-polname" id="id87"><span class="docutils literal"><span class="pre">\PolGenFloatVariant{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltypeset-pol-expr" id="id88"><span class="docutils literal"><span class="pre">\PolTypeset{<pol.</span> <span class="pre">expr.>}</span></span></a></p>
+<li><p><a class="reference internal" href="#poltypesetcmd-raw-coeff" id="id79"><span class="docutils literal"><span class="pre">\PolTypesetCmd{<raw_coeff>}</span></span></a></p>
 <ul>
-<li><p><a class="reference internal" href="#poltypesetcmd-raw-coeff" id="id89"><span class="docutils literal"><span class="pre">\PolTypesetCmd{<raw_coeff>}</span></span></a></p>
-<ul>
-<li><p><a class="reference internal" href="#polifcoeffisplusorminusone-t-f" id="id90"><span class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{T}{F}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polifcoeffisplusorminusone-t-f" id="id80"><span class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{T}{F}</span></span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#poltypesetone-raw-coeff" id="id91"><span class="docutils literal"><span class="pre">\PolTypesetOne{<raw_coeff>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id9" id="id92"><span class="docutils literal">\PolTypesetMonomialCmd</span></a></p></li>
-<li><p><a class="reference internal" href="#poltypesetcmdprefix-raw-coeff" id="id93"><span class="docutils literal"><span class="pre">\PolTypesetCmdPrefix{<raw_coeff>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltypesetone-raw-coeff" id="id81"><span class="docutils literal"><span class="pre">\PolTypesetOne{<raw_coeff>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#id9" id="id82"><span class="docutils literal">\PolTypesetMonomialCmd</span></a></p></li>
+<li><p><a class="reference internal" href="#poltypesetcmdprefix-raw-coeff" id="id83"><span class="docutils literal"><span class="pre">\PolTypesetCmdPrefix{<raw_coeff>}</span></span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#id11" id="id94"><span class="docutils literal"><span class="pre">\PolTypeset*{<pol.</span> <span class="pre">expr.>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#non-expandable-macros-related-to-the-root-localization-routines" id="id95">Non-expandable macros related to the root localization routines</a></p>
+<li><p><a class="reference internal" href="#id11" id="id84"><span class="docutils literal"><span class="pre">\PolTypeset*{<pol.</span> <span class="pre">expr.>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#non-expandable-macros-related-to-the-root-localization-routines" id="id85">Non-expandable macros related to the root localization routines</a></p>
 <ul>
-<li><p><a class="reference internal" href="#poltosturm-polname-sturmname" id="id96"><span class="docutils literal"><span class="pre">\PolToSturm{<polname>}{<sturmname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id13" id="id97"><span class="docutils literal"><span class="pre">\PolToSturm*{<polname>}{<sturmname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatezeros-sturmname" id="id98"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros{<sturmname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id15" id="id99"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{<sturmname>}</span></span></a></p>
+<li><p><a class="reference internal" href="#poltosturm-polname-sturmname" id="id86"><span class="docutils literal"><span class="pre">\PolToSturm{<polname>}{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#id13" id="id87"><span class="docutils literal"><span class="pre">\PolToSturm*{<polname>}{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmisolatezeros-sturmname" id="id88"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#id15" id="id89"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{<sturmname>}</span></span></a></p>
 <ul>
-<li><p><a class="reference internal" href="#polsturmisolatezerosandgetmultiplicities-sturmname" id="id100"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndGetMultiplicities{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmisolatezerosandgetmultiplicities-sturmname" id="id90"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndGetMultiplicities{<sturmname>}</span></span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#id17" id="id101"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{<sturmname>}</span></span></a></p>
+<li><p><a class="reference internal" href="#id17" id="id91"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{<sturmname>}</span></span></a></p>
 <ul>
-<li><p><a class="reference internal" href="#polsturmisolatezerosgetmultiplicitiesandrationalroots-sturmname" id="id102"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmisolatezerosgetmultiplicitiesandrationalroots-sturmname" id="id92"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{<sturmname>}</span></span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#polsturmisolatezerosandfindrationalroots-sturmname" id="id103"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndFindRationalRoots{<sturmname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polrefineinterval-sturmname-index" id="id104"><span class="docutils literal"><span class="pre">\PolRefineInterval*{<sturmname>}{<index>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polrefineinterval-n-sturmname-index" id="id105"><span class="docutils literal"><span class="pre">\PolRefineInterval[N]{<sturmname>}{<index>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polensureintervallength-sturmname-index-exponent" id="id106"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLength{<sturmname>}{<index>}{<exponent>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polensureintervallengths-sturmname-exponent" id="id107"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{<sturmname>}{<exponent>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervals-varname-sturmname" id="id108"><span class="docutils literal"><span class="pre">\PolPrintIntervals[<varname>]{<sturmname>}</span></span></a></p>
+<li><p><a class="reference internal" href="#polsturmisolatezerosandfindrationalroots-sturmname" id="id93"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndFindRationalRoots{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polrefineinterval-sturmname-index" id="id94"><span class="docutils literal"><span class="pre">\PolRefineInterval*{<sturmname>}{<index>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polrefineinterval-n-sturmname-index" id="id95"><span class="docutils literal"><span class="pre">\PolRefineInterval[N]{<sturmname>}{<index>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polensureintervallength-sturmname-index-exponent" id="id96"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLength{<sturmname>}{<index>}{<exponent>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polensureintervallengths-sturmname-exponent" id="id97"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{<sturmname>}{<exponent>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervals-varname-sturmname" id="id98"><span class="docutils literal"><span class="pre">\PolPrintIntervals[<varname>]{<sturmname>}</span></span></a></p>
 <ul>
-<li><p><a class="reference internal" href="#polprintintervalsnorealroots" id="id109"><span class="docutils literal">\PolPrintIntervalsNoRealRoots</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsbeginenv" id="id110"><span class="docutils literal">\PolPrintIntervalsBeginEnv</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsendenv" id="id111"><span class="docutils literal">\PolPrintIntervalsEndEnv</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsknownroot" id="id112"><span class="docutils literal">\PolPrintIntervalsKnownRoot</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsunknownroot" id="id113"><span class="docutils literal">\PolPrintIntervalsUnknownRoot</span></a></p></li>
-<li><p><a class="reference internal" href="#id18" id="id114"><span class="docutils literal">\PolPrintIntervalsPrintExactZero</span></a></p></li>
-<li><p><a class="reference internal" href="#id19" id="id115"><span class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</span></a></p></li>
-<li><p><a class="reference internal" href="#id20" id="id116"><span class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsnorealroots" id="id99"><span class="docutils literal">\PolPrintIntervalsNoRealRoots</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsbeginenv" id="id100"><span class="docutils literal">\PolPrintIntervalsBeginEnv</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsendenv" id="id101"><span class="docutils literal">\PolPrintIntervalsEndEnv</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsrowseparator" id="id102"><span class="docutils literal">\PolPrintIntervalsRowSeparator</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsknownroot" id="id103"><span class="docutils literal">\PolPrintIntervalsKnownRoot</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsunknownroot" id="id104"><span class="docutils literal">\PolPrintIntervalsUnknownRoot</span></a></p></li>
+<li><p><a class="reference internal" href="#id18" id="id105"><span class="docutils literal">\PolPrintIntervalsPrintExactZero</span></a></p></li>
+<li><p><a class="reference internal" href="#id19" id="id106"><span class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</span></a></p></li>
+<li><p><a class="reference internal" href="#id20" id="id107"><span class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#id22" id="id117"><span class="docutils literal"><span class="pre">\PolPrintIntervals*[<varname>]{<sturmname>}</span></span></a></p>
+<li><p><a class="reference internal" href="#id22" id="id108"><span class="docutils literal"><span class="pre">\PolPrintIntervals*[<varname>]{<sturmname>}</span></span></a></p>
 <ul>
-<li><p><a class="reference internal" href="#polprintintervalsprintmultiplicity" id="id118"><span class="docutils literal">\PolPrintIntervalsPrintMultiplicity</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsprintmultiplicity" id="id109"><span class="docutils literal">\PolPrintIntervalsPrintMultiplicity</span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#polsettosturmchainsignchangesat-foo-sturmname-value" id="id119"><span class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\foo}{<sturmname>}{<value>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsettonbofzeroswithin-foo-sturmname-value-left-value-right" id="id120"><span class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\foo}{<sturmname>}{<value_left>}{<value_right>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsettosturmchainsignchangesat-foo-sturmname-value" id="id110"><span class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\foo}{<sturmname>}{<value>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsettonbofzeroswithin-foo-sturmname-value-left-value-right" id="id111"><span class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\foo}{<sturmname>}{<value_left>}{<value_right>}</span></span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#pollet-polname-2-polname-1" id="id121"><span class="docutils literal"><span class="pre">\PolLet{<polname_2>}={<polname_1>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polgloballet-polname-2-polname-1" id="id122"><span class="docutils literal"><span class="pre">\PolGlobalLet{<polname_2>}={<polname_1>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polassign-polname-toarray-macro" id="id123"><span class="docutils literal"><span class="pre">\PolAssign{<polname>}\toarray\macro</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polget-polname-fromarray-macro" id="id124"><span class="docutils literal"><span class="pre">\PolGet{<polname>}\fromarray\macro</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polfromcsv-polname-csv" id="id125"><span class="docutils literal"><span class="pre">\PolFromCSV{<polname>}{<csv>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polmapcoeffs-macro-polname" id="id126"><span class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polreducecoeffs-polname" id="id127"><span class="docutils literal"><span class="pre">\PolReduceCoeffs{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id24" id="id128"><span class="docutils literal"><span class="pre">\PolReduceCoeffs*{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polmakemonic-polname" id="id129"><span class="docutils literal"><span class="pre">\PolMakeMonic{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polmakeprimitive-polname" id="id130"><span class="docutils literal"><span class="pre">\PolMakePrimitive{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poldiff-polname-1-polname-2" id="id131"><span class="docutils literal"><span class="pre">\PolDiff{<polname_1>}{<polname_2>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poldiff-n-polname-1-polname-2" id="id132"><span class="docutils literal"><span class="pre">\PolDiff[N]{<polname_1>}{<polname_2>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polantidiff-polname-1-polname-2" id="id133"><span class="docutils literal"><span class="pre">\PolAntiDiff{<polname_1>}{<polname_2>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polantidiff-n-polname-1-polname-2" id="id134"><span class="docutils literal"><span class="pre">\PolAntiDiff[N]{<polname_1>}{<polname_2>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poldivide-polname-1-polname-2-polname-q-polname-r" id="id135"><span class="docutils literal"><span class="pre">\PolDivide{<polname_1>}{<polname_2>}{<polname_Q>}{<polname_R>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polquo-polname-1-polname-2-polname-q" id="id136"><span class="docutils literal"><span class="pre">\PolQuo{<polname_1>}{<polname_2>}{<polname_Q>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polrem-polname-1-polname-2-polname-r" id="id137"><span class="docutils literal"><span class="pre">\PolRem{<polname_1>}{<polname_2>}{<polname_R>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polgcd-polname-1-polname-2-polname-gcd" id="id138"><span class="docutils literal"><span class="pre">\PolGCD{<polname_1>}{<polname_2>}{<polname_GCD>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#pollet-polname-2-polname-1" id="id112"><span class="docutils literal"><span class="pre">\PolLet{<polname_2>}={<polname_1>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polgloballet-polname-2-polname-1" id="id113"><span class="docutils literal"><span class="pre">\PolGlobalLet{<polname_2>}={<polname_1>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polassign-polname-toarray-macro" id="id114"><span class="docutils literal"><span class="pre">\PolAssign{<polname>}\toarray\macro</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polget-polname-fromarray-macro" id="id115"><span class="docutils literal"><span class="pre">\PolGet{<polname>}\fromarray\macro</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polfromcsv-polname-csv" id="id116"><span class="docutils literal"><span class="pre">\PolFromCSV{<polname>}{<csv>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polmapcoeffs-macro-polname" id="id117"><span class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polreducecoeffs-polname" id="id118"><span class="docutils literal"><span class="pre">\PolReduceCoeffs{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#id24" id="id119"><span class="docutils literal"><span class="pre">\PolReduceCoeffs*{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polmakemonic-polname" id="id120"><span class="docutils literal"><span class="pre">\PolMakeMonic{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polmakeprimitive-polname" id="id121"><span class="docutils literal"><span class="pre">\PolMakePrimitive{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poldiff-polname-1-polname-2" id="id122"><span class="docutils literal"><span class="pre">\PolDiff{<polname_1>}{<polname_2>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poldiff-n-polname-1-polname-2" id="id123"><span class="docutils literal"><span class="pre">\PolDiff[N]{<polname_1>}{<polname_2>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polantidiff-polname-1-polname-2" id="id124"><span class="docutils literal"><span class="pre">\PolAntiDiff{<polname_1>}{<polname_2>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polantidiff-n-polname-1-polname-2" id="id125"><span class="docutils literal"><span class="pre">\PolAntiDiff[N]{<polname_1>}{<polname_2>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poldivide-polname-1-polname-2-polname-q-polname-r" id="id126"><span class="docutils literal"><span class="pre">\PolDivide{<polname_1>}{<polname_2>}{<polname_Q>}{<polname_R>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polquo-polname-1-polname-2-polname-q" id="id127"><span class="docutils literal"><span class="pre">\PolQuo{<polname_1>}{<polname_2>}{<polname_Q>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polrem-polname-1-polname-2-polname-r" id="id128"><span class="docutils literal"><span class="pre">\PolRem{<polname_1>}{<polname_2>}{<polname_R>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polgcd-polname-1-polname-2-polname-gcd" id="id129"><span class="docutils literal"><span class="pre">\PolGCD{<polname_1>}{<polname_2>}{<polname_GCD>}</span></span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#expandable-macros" id="id139">Expandable macros</a></p>
+<li><p><a class="reference internal" href="#expandable-macros" id="id130">Expandable macros</a></p>
 <ul>
-<li><p><a class="reference internal" href="#poltoexpr-pol-expr" id="id140"><span class="docutils literal"><span class="pre">\PolToExpr{<pol.</span> <span class="pre">expr.>}</span></span></a></p>
+<li><p><a class="reference internal" href="#poltoexpr-pol-expr" id="id131"><span class="docutils literal"><span class="pre">\PolToExpr{<pol.</span> <span class="pre">expr.>}</span></span></a></p>
 <ul>
-<li><p><a class="reference internal" href="#id27" id="id141"><span class="docutils literal">\PolToExprVar</span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprinvar" id="id142"><span class="docutils literal">\PolToExprInVar</span></a></p></li>
-<li><p><a class="reference internal" href="#id28" id="id143"><span class="docutils literal">\PolToExprTimes</span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprcaret" id="id144"><span class="docutils literal">\PolToExprCaret</span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprcmd-raw-coeff" id="id145"><span class="docutils literal"><span class="pre">\PolToExprCmd{<raw_coeff>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexproneterm-raw-coeff-exponent" id="id146"><span class="docutils literal"><span class="pre">\PolToExprOneTerm{<raw_coeff>}{<exponent>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexpronetermstylea-raw-coeff-exponent" id="id147"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{<raw_coeff>}{<exponent>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexpronetermstyleb-raw-coeff-exponent" id="id148"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{<raw_coeff>}{<exponent>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprtermprefix-raw-coeff" id="id149"><span class="docutils literal"><span class="pre">\PolToExprTermPrefix{<raw_coeff>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#id27" id="id132"><span class="docutils literal">\PolToExprVar</span></a></p></li>
+<li><p><a class="reference internal" href="#poltoexprinvar" id="id133"><span class="docutils literal">\PolToExprInVar</span></a></p></li>
+<li><p><a class="reference internal" href="#id28" id="id134"><span class="docutils literal">\PolToExprTimes</span></a></p></li>
+<li><p><a class="reference internal" href="#poltoexprcaret" id="id135"><span class="docutils literal">\PolToExprCaret</span></a></p></li>
+<li><p><a class="reference internal" href="#poltoexprcmd-raw-coeff" id="id136"><span class="docutils literal"><span class="pre">\PolToExprCmd{<raw_coeff>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltoexproneterm-raw-coeff-exponent" id="id137"><span class="docutils literal"><span class="pre">\PolToExprOneTerm{<raw_coeff>}{<exponent>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltoexpronetermstylea-raw-coeff-exponent" id="id138"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{<raw_coeff>}{<exponent>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltoexpronetermstyleb-raw-coeff-exponent" id="id139"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{<raw_coeff>}{<exponent>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltoexprtermprefix-raw-coeff" id="id140"><span class="docutils literal"><span class="pre">\PolToExprTermPrefix{<raw_coeff>}</span></span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#poltofloatexpr-pol-expr" id="id150"><span class="docutils literal"><span class="pre">\PolToFloatExpr{<pol.</span> <span class="pre">expr.>}</span></span></a></p>
+<li><p><a class="reference internal" href="#poltofloatexpr-pol-expr" id="id141"><span class="docutils literal"><span class="pre">\PolToFloatExpr{<pol.</span> <span class="pre">expr.>}</span></span></a></p>
 <ul>
-<li><p><a class="reference internal" href="#poltofloatexproneterm-raw-coeff-exponent" id="id151"><span class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{<raw_coeff>}{<exponent>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltofloatexprcmd-raw-coeff" id="id152"><span class="docutils literal"><span class="pre">\PolToFloatExprCmd{<raw_coeff>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltofloatexproneterm-raw-coeff-exponent" id="id142"><span class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{<raw_coeff>}{<exponent>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltofloatexprcmd-raw-coeff" id="id143"><span class="docutils literal"><span class="pre">\PolToFloatExprCmd{<raw_coeff>}</span></span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#id30" id="id153"><span class="docutils literal"><span class="pre">\PolToExpr*{<pol.</span> <span class="pre">expr.>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id32" id="id154"><span class="docutils literal"><span class="pre">\PolToFloatExpr*{<pol.</span> <span class="pre">expr.>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polnthcoeff-polname-index" id="id155"><span class="docutils literal"><span class="pre">\PolNthCoeff{<polname>}{<index>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polleadingcoeff-polname" id="id156"><span class="docutils literal"><span class="pre">\PolLeadingCoeff{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poldegree-polname" id="id157"><span class="docutils literal"><span class="pre">\PolDegree{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#policontent-polname" id="id158"><span class="docutils literal"><span class="pre">\PolIContent{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltolist-polname" id="id159"><span class="docutils literal"><span class="pre">\PolToList{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltocsv-polname" id="id160"><span class="docutils literal"><span class="pre">\PolToCSV{<polname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poleval-polname-atexpr-num-expr" id="id161"><span class="docutils literal"><span class="pre">\PolEval{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poleval-polname-at-value" id="id162"><span class="docutils literal"><span class="pre">\PolEval{<polname>}\At{<value>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polevalreduced-polname-atexpr-num-expr" id="id163"><span class="docutils literal"><span class="pre">\PolEvalReduced{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polevalreduced-polname-at-value" id="id164"><span class="docutils literal"><span class="pre">\PolEvalReduced{<polname>}\At{<value>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polfloateval-polname-atexpr-num-expr" id="id165"><span class="docutils literal"><span class="pre">\PolFloatEval{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polfloateval-polname-at-value" id="id166"><span class="docutils literal"><span class="pre">\PolFloatEval{<polname>}\At{<value>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#expandable-macros-related-to-the-root-localization-routines" id="id167">Expandable macros related to the root localization routines</a></p>
+<li><p><a class="reference internal" href="#id30" id="id144"><span class="docutils literal"><span class="pre">\PolToExpr*{<pol.</span> <span class="pre">expr.>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#id32" id="id145"><span class="docutils literal"><span class="pre">\PolToFloatExpr*{<pol.</span> <span class="pre">expr.>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polnthcoeff-polname-index" id="id146"><span class="docutils literal"><span class="pre">\PolNthCoeff{<polname>}{<index>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polleadingcoeff-polname" id="id147"><span class="docutils literal"><span class="pre">\PolLeadingCoeff{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poldegree-polname" id="id148"><span class="docutils literal"><span class="pre">\PolDegree{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#policontent-polname" id="id149"><span class="docutils literal"><span class="pre">\PolIContent{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltolist-polname" id="id150"><span class="docutils literal"><span class="pre">\PolToList{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poltocsv-polname" id="id151"><span class="docutils literal"><span class="pre">\PolToCSV{<polname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poleval-polname-atexpr-num-expr" id="id152"><span class="docutils literal"><span class="pre">\PolEval{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#poleval-polname-at-value" id="id153"><span class="docutils literal"><span class="pre">\PolEval{<polname>}\At{<value>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polevalreduced-polname-atexpr-num-expr" id="id154"><span class="docutils literal"><span class="pre">\PolEvalReduced{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polevalreduced-polname-at-value" id="id155"><span class="docutils literal"><span class="pre">\PolEvalReduced{<polname>}\At{<value>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polfloateval-polname-atexpr-num-expr" id="id156"><span class="docutils literal"><span class="pre">\PolFloatEval{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polfloateval-polname-at-value" id="id157"><span class="docutils literal"><span class="pre">\PolFloatEval{<polname>}\At{<value>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#expandable-macros-related-to-the-root-localization-routines" id="id158">Expandable macros related to the root localization routines</a></p>
 <ul>
-<li><p><a class="reference internal" href="#polsturmchainlength-sturmname" id="id168"><span class="docutils literal"><span class="pre">\PolSturmChainLength{<sturmname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmifzeroexactlyknown-sturmname-index-t-f" id="id169"><span class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{<sturmname>}{<index>}{T}{F}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatedzeroleft-sturmname-index" id="id170"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{<sturmname>}{<index>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatedzeroright-sturmname-index" id="id171"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{<sturmname>}{<index>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index" id="id172"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{<sturmname>}{<index>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofisolatedzeros-sturmname" id="id173"><span class="docutils literal"><span class="pre">\PolSturmNbOfIsolatedZeros{<sturmname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value" id="id174"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-num-expr" id="id175"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value" id="id176"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequaltoexpr-num-expr" id="id177"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrationalroots-sturmname" id="id178"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRoots{<sturmname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrationalrootswithmultiplicities-sturmname" id="id179"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRootsWithMultiplicities{<sturmname>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmrationalroot-sturmname-k" id="id180"><span class="docutils literal"><span class="pre">\PolSturmRationalRoot{<sturmname>}{<k>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmrationalrootindex-sturmname-k" id="id181"><span class="docutils literal"><span class="pre">\PolSturmRationalRootIndex{<sturmname>}{<k>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmrationalrootmultiplicity-sturmname-k" id="id182"><span class="docutils literal"><span class="pre">\PolSturmRationalRootMultiplicity{<sturmname>}{<k>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polintervalwidth-sturmname-index" id="id183"><span class="docutils literal"><span class="pre">\PolIntervalWidth{<sturmname>}{<index>}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#expandable-macros-for-use-within-execution-of-polprintintervals" id="id184">Expandable macros for use within execution of <span class="docutils literal">\PolPrintIntervals</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthevar" id="id185"><span class="docutils literal">\PolPrintIntervalsTheVar</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalstheindex" id="id186"><span class="docutils literal">\PolPrintIntervalsTheIndex</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthesturmname" id="id187"><span class="docutils literal">\PolPrintIntervalsTheSturmName</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalstheleftendpoint" id="id188"><span class="docutils literal">\PolPrintIntervalsTheLeftEndPoint</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalstherightendpoint" id="id189"><span class="docutils literal">\PolPrintIntervalsTheRightEndPoint</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthemultiplicity" id="id190"><span class="docutils literal">\PolPrintIntervalsTheMultiplicity</span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmchainlength-sturmname" id="id159"><span class="docutils literal"><span class="pre">\PolSturmChainLength{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmifzeroexactlyknown-sturmname-index-t-f" id="id160"><span class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{<sturmname>}{<index>}{T}{F}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmisolatedzeroleft-sturmname-index" id="id161"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{<sturmname>}{<index>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmisolatedzeroright-sturmname-index" id="id162"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{<sturmname>}{<index>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index" id="id163"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{<sturmname>}{<index>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmnbofisolatedzeros-sturmname" id="id164"><span class="docutils literal"><span class="pre">\PolSturmNbOfIsolatedZeros{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value" id="id165"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-num-expr" id="id166"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value" id="id167"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequaltoexpr-num-expr" id="id168"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num.</span> <span class="pre">expr.>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmnbofrationalroots-sturmname" id="id169"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRoots{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmnbofrationalrootswithmultiplicities-sturmname" id="id170"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRootsWithMultiplicities{<sturmname>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmrationalroot-sturmname-k" id="id171"><span class="docutils literal"><span class="pre">\PolSturmRationalRoot{<sturmname>}{<k>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmrationalrootindex-sturmname-k" id="id172"><span class="docutils literal"><span class="pre">\PolSturmRationalRootIndex{<sturmname>}{<k>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polsturmrationalrootmultiplicity-sturmname-k" id="id173"><span class="docutils literal"><span class="pre">\PolSturmRationalRootMultiplicity{<sturmname>}{<k>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#polintervalwidth-sturmname-index" id="id174"><span class="docutils literal"><span class="pre">\PolIntervalWidth{<sturmname>}{<index>}</span></span></a></p></li>
+<li><p><a class="reference internal" href="#expandable-macros-for-use-within-execution-of-polprintintervals" id="id175">Expandable macros for use within execution of <span class="docutils literal">\PolPrintIntervals</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsthevar" id="id176"><span class="docutils literal">\PolPrintIntervalsTheVar</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalstheindex" id="id177"><span class="docutils literal">\PolPrintIntervalsTheIndex</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsthesturmname" id="id178"><span class="docutils literal">\PolPrintIntervalsTheSturmName</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalstheleftendpoint" id="id179"><span class="docutils literal">\PolPrintIntervalsTheLeftEndPoint</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalstherightendpoint" id="id180"><span class="docutils literal">\PolPrintIntervalsTheRightEndPoint</span></a></p></li>
+<li><p><a class="reference internal" href="#polprintintervalsthemultiplicity" id="id181"><span class="docutils literal">\PolPrintIntervalsTheMultiplicity</span></a></p></li>
 </ul>
 </li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#booleans-with-default-setting-as-indicated" id="id191">Booleans (with default setting as indicated)</a></p>
+<li><p><a class="reference internal" href="#booleans-with-default-setting-as-indicated" id="id182">Booleans (with default setting as indicated)</a></p>
 <ul>
-<li><p><a class="reference internal" href="#xintverbosefalse" id="id192"><span class="docutils literal">\xintverbosefalse</span></a></p></li>
-<li><p><a class="reference internal" href="#polnewpolverbosefalse" id="id193"><span class="docutils literal">\polnewpolverbosefalse</span></a></p></li>
-<li><p><a class="reference internal" href="#poltypesetallfalse" id="id194"><span class="docutils literal">\poltypesetallfalse</span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprallfalse" id="id195"><span class="docutils literal">\poltoexprallfalse</span></a></p></li>
+<li><p><a class="reference internal" href="#xintverbosefalse" id="id183"><span class="docutils literal">\xintverbosefalse</span></a></p></li>
+<li><p><a class="reference internal" href="#polnewpolverbosefalse" id="id184"><span class="docutils literal">\polnewpolverbosefalse</span></a></p></li>
+<li><p><a class="reference internal" href="#poltypesetallfalse" id="id185"><span class="docutils literal">\poltypesetallfalse</span></a></p></li>
+<li><p><a class="reference internal" href="#poltoexprallfalse" id="id186"><span class="docutils literal">\poltoexprallfalse</span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#utilies" id="id196">Utilies</a></p>
+<li><p><a class="reference internal" href="#utilies" id="id187">Utilies</a></p>
 <ul>
-<li><p><a class="reference internal" href="#poldectostring-decimal-number" id="id197"><span class="docutils literal">\PolDecToString{decimal number}</span></a></p></li>
-<li><p><a class="reference internal" href="#polexprsetup" id="id198"><span class="docutils literal">\polexprsetup</span></a></p></li>
+<li><p><a class="reference internal" href="#poldectostring-decimal-number" id="id188"><span class="docutils literal">\PolDecToString{decimal number}</span></a></p></li>
+<li><p><a class="reference internal" href="#polexprsetup" id="id189"><span class="docutils literal">\polexprsetup</span></a></p></li>
 </ul>
 </li>
-<li><p><a class="reference internal" href="#technicalities" id="id199">Technicalities</a></p></li>
-<li><p><a class="reference internal" href="#change-log" id="id200">CHANGE LOG</a></p></li>
-<li><p><a class="reference internal" href="#acknowledgments" id="id201">Acknowledgments</a></p></li>
+<li><p><a class="reference internal" href="#technicalities" id="id190">Technicalities</a></p></li>
+<li><p><a class="reference internal" href="#change-log" id="id191">CHANGE LOG</a></p></li>
+<li><p><a class="reference internal" href="#acknowledgments" id="id192">Acknowledgments</a></p></li>
 </ul>
 </div>
-<div class="section" id="usage">
-<h1><a class="toc-backref" href="#id35">Usage</a></h1>
-<p>The package can be used with TeX based formats incorporating the e-TeX
-primitives.  The <span class="docutils literal">\expanded</span> primitive available generally since
-TeXLive 2019 is required.</p>
-<pre class="literal-block">\input polexpr.sty</pre>
-<p>with Plain or other non-LaTeX macro formats, or:</p>
-<pre class="literal-block">\usepackage{polexpr}</pre>
-<p>with the LaTeX macro format.</p>
-<p>The package requires <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> <span class="docutils literal">1.4d</span> or later.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>Until <span class="docutils literal">0.8</span> the package only had a LaTeX interface.  As a result,
-parts of this documentation may still give examples using LaTeX syntax such
-as <span class="docutils literal">\newcommand</span>.  Please convert to the syntax appropriate to the
-TeX macro format used if needed.</p>
 </div>
-</div>
-<div class="section" id="abstract">
-<h1><a class="toc-backref" href="#id36">Abstract</a></h1>
-<p>The package provides a parser <span class="docutils literal">\poldef</span> of algebraic polynomial
-expressions.  As it is based on <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a>
-the coefficients are allowed to be arbitrary rational numbers.</p>
-<p>Once defined, a polynomial is usable by its name either as a numerical
-function in <span class="docutils literal"><span class="pre">\xintexpr/\xinteval</span></span>, or for additional polynomial
-definitions, or as argument to the package macros.  The localization of
-real roots to arbitrary precision as well as the determination of all
-rational roots is implemented via such macros.</p>
-<p>Since release <span class="docutils literal">0.8</span>, polexpr extends the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a>
-syntax to recognize
-polynomials as a new variable type (and not only as functions).
-Functionality which previously was implemented via macros such as the
-computation of a greatest common divisor is now available directly in
-<span class="docutils literal">\xintexpr</span>, <span class="docutils literal">\xinteval</span> or <span class="docutils literal">\poldef</span> via infix or functional
-syntax.</p>
-</div>
-<div class="section" id="prerequisites">
-<h1><a class="toc-backref" href="#id37">Prerequisites</a></h1>
-<ul>
-<li><p>The user must have some understanding of TeX as a macro-expansion
-based programming interface, and in particular of how <span class="docutils literal">\edef</span>
-differs from <span class="docutils literal">\def</span>:  functionalities of the package as described in
-the <a class="reference internal" href="#expandable-macros">Expandable macros</a> section are suitable for usage in <span class="docutils literal">\edef</span>,
-<span class="docutils literal">\write</span> or <span class="docutils literal">\xinteval</span> context.  At <span class="docutils literal">0.8</span> some of these
-macros have an even more convenient functional interface inside
-<span class="docutils literal">\xinteval</span>, as is described in a <a class="reference internal" href="#polexpr08">dedicated section</a>.</p>
-<p>Despite its name <span class="docutils literal">\poldef</span> is more to be seen as an <span class="docutils literal">\edef</span>
-although it does not define a TeX macro (at user level); and of course
-<span class="docutils literal">\edef</span> would do usually nothing on the typical input parsed by
-<span class="docutils literal">\poldef</span> which generally has no backslash in it: but if this input
-does contain macros, they will then be expanded fully and are supposed to
-produce recognizable syntax elements in this expansion only context.</p>
-<p>Note that the <span class="docutils literal">def</span> in <span class="docutils literal">\poldef</span> reminds us that the macro does
-some assignments hence is not usable in expandable only context.  Its
-whole point is rather to define entities which, them, can then be used
-in the expandable only <span class="docutils literal">\xinteval</span> (or <span class="docutils literal">\poldef</span>) context.</p>
-</li>
-<li><p>The user must have some familiarity with <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> and in
-particular must know what <span class="docutils literal">\xintexpr</span>, <span class="docutils literal">\xinttheexpr</span>,
-<span class="docutils literal">\xinteval</span> and <span class="docutils literal">\xintfloatexpr</span>, <span class="docutils literal">\xintthefloatexpr</span>,
-<span class="docutils literal">\xintfloateval</span> mean and what are the good practices with them.</p></li>
-<li><p>The user will become quickly aware that exact computations with
-fractions easily lead to very big ones in very few steps; see
-<a class="reference internal" href="#polreducecoeffs-polname">\PolReduceCoeffs{<polname>}</a> in this context.</p></li>
-<li><p>Finally, it is mandatory to read the entire documentation before
-starting to use the package.</p></li>
-</ul>
-</div>
 <div class="section" id="quick-syntax-overview">
 <h1><a class="toc-backref" href="#id38">Quick syntax overview</a></h1>
 <p>The syntax to define a new polynomial is:</p>
 <pre class="literal-block">\poldef polname(x):= expression in variable x;</pre>
 <p>The package is focused on exact computations, so this expression will be
-parsed by the services of <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> and accept arbitrarily big integers
+parsed by the services of <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> and accept arbitrarily big integers
 or fractions.</p>
 <p>If you are interested into numerical evaluations, for example for
 plotting, it is advisable to use the <span class="docutils literal"><span class="pre">\xintfloatexpr/\xintfloateval</span></span>
 context, as exact evaluations will quickly lead to manipulating numbers
 with dozens of digits (when the number of digits exceeds five hundreds,
-computation with <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> will become noticeably too slow, if many
+computation with <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> will become noticeably too slow, if many
 evaluations need to be done).  For the polynomial to be usable as a function in
 floating point context, an extra step beyond <span class="docutils literal">\poldef</span> is required:
 see <a class="reference internal" href="#polgenfloatvariant">\PolGenFloatVariant</a>.</p>
@@ -910,7 +898,7 @@
 context.  The <a class="reference internal" href="#polgenfloatvariant">\PolGenFloatVariant</a> must be used each time the
 polynomial gets modified or a new polynomial created out of it, if
 continuing computations in <span class="docutils literal">\xintfloatexpr</span> are to follow.  But (see
-<a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> documentation) one can always use a sub-expression such as
+<a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation) one can always use a sub-expression such as
 <span class="docutils literal">\xintexpr <span class="pre">deg(P)\relax</span></span> as sub-component inside a
 <span class="docutils literal"><span class="pre">\xintfloatexpr/\xintfloateval</span></span>.</p>
 <p>Conversely if perhaps the coefficients of your polynomial have become
@@ -950,10 +938,10 @@
 text of some other macro which is defined at a time the <span class="docutils literal">;</span> has its
 standard catcode, as is the case in LaTeX in the document preamble,
 even with babel+french loaded.</p>
-<p>The semi-colon intervenes in certain <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> syntax elements, within
+<p>The semi-colon intervenes in certain <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> syntax elements, within
 parentheses.  This (except if the inner semi-colons are hidden within
 braces: <span class="docutils literal">{;}</span>) will break <span class="docutils literal">\poldef</span> which, contrarily to
-<a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a>'s <span class="docutils literal">\xintdefvar</span>, does not balance parentheses when
+<a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>'s <span class="docutils literal">\xintdefvar</span>, does not balance parentheses when
 fetching the semi-colon delimited polynomial expression.</p>
 </li>
 </ul>
@@ -1000,7 +988,7 @@
 <span class="docutils literal"><span class="pre">(1/2)*x^2</span></span> for disambiguation: <span class="docutils literal">x - 1/2*x^2 + <span class="pre">1/3*x^3...</span></span>. It is
 simpler to move the denominator to the right: <span class="docutils literal">x - x^2/2 + x^3/3 - ...</span>.</p>
 <p>It is worth noting that <span class="docutils literal"><span class="pre">1/2(x-1)(x-2)</span></span> suffers the same issue:
-<a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a>'s tacit multiplication always "ties more", hence this
+<a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>'s tacit multiplication always "ties more", hence this
 gets interpreted as <span class="docutils literal"><span class="pre">1/(2*(x-1)*(x-2))</span></span> which gives zero by
 polynomial division. Thus, use in such cases one of
 <span class="docutils literal"><span class="pre">(1/2)(x-1)(x-2)</span></span>, <span class="docutils literal"><span class="pre">1/2*(x-1)(x-2)</span></span> or <span class="docutils literal"><span class="pre">(x-1)(x-2)/2</span></span>.</p>
@@ -1042,10 +1030,10 @@
 as a <em>function</em>, but <em>only as a variable of polynomial type</em>.
 Even worse:</p>
 <pre class="literal-block">(P)(3)%  <--- attention!</pre>
-<p>will compute <span class="docutils literal">P*3</span>, because one can not in current <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> syntax
+<p>will compute <span class="docutils literal">P*3</span>, because one can not in current <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> syntax
 enclose a function name in parentheses: consequently it is the variable
 which is used here.  There is a <em>meager possibility</em> that in future
-some internal changes to <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> would let <span class="docutils literal"><span class="pre">(P)(3)</span></span> actually
+some internal changes to <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> would let <span class="docutils literal"><span class="pre">(P)(3)</span></span> actually
 compute <span class="docutils literal">P(3)</span> and <span class="docutils literal"><span class="pre">(P+Q)(3)</span></span> compute <span class="docutils literal">P(3) + Q(3)</span>, but note
 that <span class="docutils literal"><span class="pre">(P)(P)</span></span> will then do <span class="docutils literal">P(P)</span> and not <span class="docutils literal">P*P</span>,
 the latter, current interpretation, looking more
@@ -1248,10 +1236,10 @@
 <h2><a class="toc-backref" href="#id43">Comparison operators <span class="docutils literal"><, >, <=, >=, ==, !=</span></a></h2>
 <blockquote>
 <p><strong>NOT YET IMPLEMENTED</strong></p>
-<p>As the internal representation by <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> and <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> of
+<p>As the internal representation by <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> and <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> of
 fractions does not currently require them to be in reduced terms,
 such operations would be a bit costly as they could not benefit from
-the <span class="docutils literal">\pdfstrcmp</span> engine primitive.  In fact <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> does not use
+the <span class="docutils literal">\pdfstrcmp</span> engine primitive.  In fact <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> does not use
 it yet anywhere, even for normalized pure integers, although it could
 speed up signifcantly certain aspects of core arithmetic.</p>
 <p>Equality of polynomials can currently be tested by computing the
@@ -1348,7 +1336,7 @@
 <p>If the first argument is an already declared polynomial <span class="docutils literal">P</span>, use
 rather the functional form <span class="docutils literal">P()</span> (which can accept a numerical as
 well as polynomial argument) as it is more efficient.</p>
-<p>One can also use <span class="docutils literal">subs()</span> syntax <a class="footnote-reference brackets" href="#id5" id="id4">2</a> (see <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> documentation):</p>
+<p>One can also use <span class="docutils literal">subs()</span> syntax <a class="footnote-reference brackets" href="#id5" id="id4">2</a> (see <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation):</p>
 <pre class="literal-block">\poldef K(x):= subs(-3y^3-5y+1, y = -27x^4+5x-2);</pre>
 <p>but the <span class="docutils literal">evalp()</span> will use a Horner evaluation scheme which is
 usually more efficient.</p>
@@ -1356,7 +1344,7 @@
 <dt class="label" id="id5"><span class="brackets"><a class="fn-backref" href="#id4">2</a></span></dt>
 <dd><p>by the way Maple uses the opposite, hence wrong, order
 <span class="docutils literal"><span class="pre">subs(x=...,</span> P)</span> but was written before computer science
-reached the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> heights.  However it makes validating
+reached the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> heights.  However it makes validating
 Maple results by polexpr sometimes cumbersome, but perhaps
 they will update it at some point.</p>
 </dd>
@@ -1395,7 +1383,7 @@
 <p><strong>name unstable</strong></p>
 <p>I am considering in particular using <span class="docutils literal">polcoeffs()</span> to avoid
 having to overload <span class="docutils literal">coeffs()</span> in future when matrix type
-will be added to <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a>.</p>
+will be added to <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>.</p>
 </blockquote>
 </blockquote>
 </div>
@@ -1416,7 +1404,7 @@
 <p><strong>name, syntax and output unstable</strong></p>
 <p>I am hesitating with <span class="docutils literal">coeff(n,pol)</span> syntax and also perhaps using
 <span class="docutils literal">polcoeff()</span> in order to avoid having to overload <span class="docutils literal">coeff()</span>
-when matrix type will be added to <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a>.</p>
+when matrix type will be added to <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>.</p>
 <p>The current behaviour is at odds with legacy
 <a class="reference internal" href="#polnthcoeff-polname-index">\PolNthCoeff{<polname>}{<index>}</a> regarding negative indices.
 Accessing leading or sub-leading coefficients can be done with
@@ -1431,7 +1419,7 @@
 <blockquote>
 <p>The leading coefficient. The same result can be obtained from
 <span class="docutils literal"><span class="pre">coeffs(pol)[-1]</span></span>, which shows also how to generalize to access
-sub-leading coefficients.  See the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> documentation for
+sub-leading coefficients.  See the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation for
 Python-like indexing syntax.</p>
 </blockquote>
 </div>
@@ -1443,7 +1431,7 @@
 <p><strong>unstable</strong></p>
 <p>Currently the coefficients are reduced to lowest terms (contrarily
 to legacy behaviour of <a class="reference internal" href="#polmakemonic">\PolMakeMonic</a>), and
-additionally the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> <span class="docutils literal">\xintREZ</span> macro is applied which
+additionally the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> <span class="docutils literal">\xintREZ</span> macro is applied which
 extracts powers of ten from numerator or denominator and stores
 them internally separately. This is generally beneficial to
 efficiency of multiplication.</p>
@@ -1538,7 +1526,7 @@
 <span class="docutils literal"><span class="pre">subs(last(x)/first(x),x=prem(P,Q))</span></span> syntax as it avoids
 computing <span class="docutils literal">prem(P,Q)</span> twice.  This does the trick both in
 <span class="docutils literal">\poldef</span> or in <span class="docutils literal">\xintdefvar</span>.</p>
-<p>However, as is explained in the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> documentation, using
+<p>However, as is explained in the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation, using
 such syntax in an <span class="docutils literal">\xintdeffunc</span> is (a.t.t.o.w) illusory, due to
 technicalities of how <span class="docutils literal">subs()</span> gets converted into nested
 expandable macros.  One needs an auxiliary function like this:</p>
@@ -1593,7 +1581,7 @@
 alternatively, only one argument which then must be a bracketed list
 or some expression or variable evaluating to such a "nutple" whose
 items are polynomials (see the documentation of the scalar <span class="docutils literal">gcd()</span>
-in <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a>).</p>
+in <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>).</p>
 <blockquote>
 <p>The two variable case could (and was, during development) have been
 defined at user level like this:</p>
@@ -1656,7 +1644,7 @@
 <blockquote>
 <p>This is currently implemented at high level via <span class="docutils literal">\xintdeffunc</span> and
 recursive definitions, which were copied over from a scalar example
-in the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> manual:</p>
+in the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> manual:</p>
 <pre class="literal-block">\xintdeffunc polpowmod_(P, m, Q) :=
        isone(m)?
            % m=1: return P modulo Q
@@ -1759,10 +1747,13 @@
 <h2><a class="toc-backref" href="#id73"><span class="docutils literal"><span class="pre">integral(<pol.</span> expr. P>, [<pol. expr. a>, <pol. expr. <span class="pre">b>])</span></span></a></h2>
 <blockquote>
 <p><span class="docutils literal">\int_a^b P(t)dt</span>.</p>
+<div class="admonition warning">
+<p class="admonition-title">Warning</p>
 <p>The brackets here are not denoting an optional argument
 but a <em>mandatory</em> nutple argument <span class="docutils literal">[a, b]</span> with <em>two items</em>.</p>
-<p><span class="docutils literal">a</span> and <span class="docutils literal">b</span> are not restricted to be scalars, they can be
-polynomials.</p>
+</div>
+<p><span class="docutils literal">a</span> and <span class="docutils literal">b</span> are not restricted to be scalars, they are allowed to
+be themselves polynomial variables or even polynomial expressions.</p>
 <blockquote>
 <p>To compute <span class="docutils literal"><span class="pre">\int_{x-1}^x</span> P(t)dt</span> it is more efficient to use
 <span class="docutils literal"><span class="pre">intfrom(x-1)</span></span>.</p>
@@ -1774,431 +1765,16 @@
 </blockquote>
 </div>
 </div>
-<div class="section" id="examples-of-localization-of-roots">
-<h1><a class="toc-backref" href="#id74">Examples of localization of roots</a></h1>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>As of <span class="docutils literal">0.8</span>, <span class="docutils literal">polexpr</span> is usable with Plain TeX and not only with
-LaTeX, the examples of this section have been converted to use a
-syntax which (at least at time of writing, March 2021) works in both.</p>
-<p>This is done in order for the examples to be easy to copy-paste to
-documents using either macro format.</p>
-</div>
-<p>This (slightly over-extended) section gives various examples of usage of
-the package macros such as <a class="reference internal" href="#poltosturm">\PolToSturm</a>, <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a>
-and <a class="reference internal" href="#polprintintervals">\PolPrintIntervals</a> for root localization, which exist since
-release <span class="docutils literal">0.4</span> (2018/02/16).  The capacity to find all rational roots
-exactly was added at <span class="docutils literal">0.7.2</span> (2018/12/09).</p>
-<p>The examples demonstrate that the package can find all real roots to
-arbitrary precision, find the multiplicities of real roots, and find
-exactly all rational roots.</p>
-<p>Perhaps future releases will implement other approaches, which are known
-to be generically computationally more efficient, at least in high
-degrees, than the <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm theorem</a> based approach.  This is not
-immediate priority though (perhaps support of multivariate polynomials
-would be more important feature; or localization of complex roots).</p>
-<ul>
-<li><p>To make printed decimal numbers more enjoyable than via
-<span class="docutils literal">\xintTeXsignedFrac</span> (or <span class="docutils literal">\xintTeXsignedOver</span> with Plain):</p>
-<pre class="literal-block">\def\PolTypesetOne#1{\PolDecToString{\xintREZ{#1}}}%</pre>
-<p><span class="docutils literal">\PolDecToString</span> will use decimal notation to incorporate the power
-of ten part; and the <span class="docutils literal">\xintREZ</span> will have the effect to suppress
-trailing zeros if present in raw numerator (if those digits end up
-after decimal mark.) Notice that the above are expandable macros and
-that one can also do:</p>
-<pre class="literal-block">\def\PolToExprCmd#1{\PolDecToString{\xintREZ{#1}}}%</pre>
-<p>to modify output of <a class="reference internal" href="#poltoexpr-pol-expr">\PolToExpr{<pol. expr.>}</a>.</p>
-</li>
-<li><p>For extra info in log file use <span class="docutils literal">\xintverbosetrue</span>.</p></li>
-</ul>
-<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p>Package macros related to root localization create (user-level) new
-polynomials, or numeric variables, via a naming scheme which
-postfixes a root name <span class="docutils literal"><sturmname></span> in various ways (see
-<a class="reference internal" href="#poltosturm-polname-sturmname">\PolToSturm{<polname>}{<sturmname>}</a> and
-<a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{<sturmname>}</a>).  It is thus advisable to
-keep the <span class="docutils literal"><sturmname></span> name-space separate from the one used to
-name polynomial or scalar variables.</p>
-<p>Regrettably all examples here use the condemnable
-<span class="docutils literal"><span class="pre">\PolToSturm{f}{f}</span></span> practice which fuses the name-spaces.  This can
-lead to problems if one is not aware of the consequances.</p>
-</div>
-<div class="section" id="a-typical-example">
-<h2><a class="toc-backref" href="#id75">A typical example</a></h2>
-<p>In this example the polynomial is square-free.</p>
-<pre class="literal-block">\poldef f(x) := x^7 - x^6 - 2x + 1;
-
-\PolToSturm{f}{f}
-\PolSturmIsolateZeros{f}
-The \PolTypeset{f} polynomial has \PolSturmNbOfIsolatedZeros{f} distinct real
-roots which are located in the following intervals:
-\PolPrintIntervals{f}
-Here is the second root with ten more decimal digits:
-\PolRefineInterval[10]{f}{2}
-$$\PolSturmIsolatedZeroLeft{f}{2}<Z_2<\PolSturmIsolatedZeroRight{f}{2}$$
-And here is the first root with twenty digits after decimal mark:
-\PolEnsureIntervalLength{f}{1}{-20}
-$$\PolSturmIsolatedZeroLeft{f}{1}<Z_1<\PolSturmIsolatedZeroRight{f}{1}$$
-The first element of the Sturm chain has degree $\PolDegree{f_0}$. As
-this is the original degreee $\PolDegree{f}$ we know that $f$ is square free.
-Its derivative is up to a constant \PolTypeset{f_1} (in this example
-it is identical with it).
-\PolToSturm{f_1}{f_1}\PolSturmIsolateZeros{f_1}%
-The derivative has \PolSturmNbOfIsolatedZeros{f_1} distinct real
-roots:
-\PolPrintIntervals[W]{f_1}
-\PolEnsureIntervalLengths{f_1}{-10}%
-Here they are with ten digits after decimal mark:
-\PolPrintIntervals[W]{f_1}
-\PolDiff{f_1}{f''}
-\PolToSturm{f''}{f''}
-\PolSturmIsolateZeros{f''}
-The second derivative is \PolTypeset{f''}.
-It has \PolSturmNbOfIsolatedZeros{f''} distinct real
-roots:
-\PolPrintIntervals[X]{f''}
-Here is the positive one with 20 digits after decimal mark:
-\PolEnsureIntervalLength{f''}{2}{-20}%
-$$X_2 = \PolSturmIsolatedZeroLeft{f''}{2}\dots$$
-The more mathematically advanced among our dear readers will be able
-to give the exact value for $X_2$!</pre>
-</div>
-<div class="section" id="a-degree-four-polynomial-with-nearby-roots">
-<h2><a class="toc-backref" href="#id76">A degree four polynomial with nearby roots</a></h2>
-<p>Notice that this example is a bit outdated as <span class="docutils literal">0.7</span> release has
-added <span class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{<sturmname>}</span></span> which would find exactly
-the roots. The steps here retain their interest when one is interested
-in finding isolating intervals for example to prepare some demonstration
-of dichotomy method.</p>
-<pre class="literal-block">\PolDef{Q}{(x-1.050001)(x-1.105001)(x-1.110501)(x-1.111051)}
-\PolTypeset{Q}
-\PolToSturm{Q}{Q} % it is allowed to use same prefix for Sturm chain
-\PolSturmIsolateZeros{Q}
-\PolPrintIntervals{Q}
-% reports 1.0 < Z_1 < 1.1, 1.10 < Z_2 < 1.11, 1.110 < Z_3 < 1.111, and 1.111 < Z_4 < 1.112
-% but the above bounds do not allow minimizing separation between roots
-% so we refine:
-\PolRefineInterval*{Q}{1}
-\PolRefineInterval*{Q}{2}
-\PolRefineInterval*{Q}{3}
-\PolRefineInterval*{Q}{4}
-\PolPrintIntervals{Q}
-% reports 1.05 < Z_1 < 1.06, 1.105 < Z_2 < 1.106, 1.1105 < Z_3 < 1.1106,
-% and 1.11105 < Z_4 < 1.11106.
-\PolEnsureIntervalLengths{Q}{-6}
-\PolPrintIntervals{Q}
-% of course finds here all roots exactly</pre>
-</div>
-<div class="section" id="the-degree-nine-polynomial-with-0-99-0-999-0-9999-as-triple-roots">
-<h2><a class="toc-backref" href="#id77">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</a></h2>
-<pre class="literal-block">% define a user command (xinttools is loaded automatically by polexpr)
-\def\showmultiplicities#1{% #1 = "sturmname"
-\xintFor* ##1 in {\xintSeq{1}{\PolSturmNbOfIsolatedZeros{#1}}}\do{%
-    The multiplicity is \PolSturmIsolatedZeroMultiplicity{#1}{##1}
-    \PolSturmIfZeroExactlyKnown{#1}{##1}%
-    {at the root $x=\PolSturmIsolatedZeroLeft{#1}{##1}$}
-    {for the root such that
-    $\PolSturmIsolatedZeroLeft{#1}{##1}<x<\PolSturmIsolatedZeroRight{#1}{##1}$}
-    \par
-}}%
-\PolDef{f}{(x-0.99)^3(x-0.999)^3(x-0.9999)^3}
-\def\PolTypesetOne#1{\PolDecToString{\xintREZ{#1}}}
-\PolTypeset{f}\par
-\PolToSturm{f}{f}% it is allowed to use "polname" as "sturmname" too
-\PolSturmIsolateZerosAndGetMultiplicities{f}% use the "sturmname" here
-% or \PolSturmIsolateZeros*{f} which is exactly the same, but shorter..
-
-\showmultiplicities{f}</pre>
-<p>In this example, the output will look like this (but using math mode):</p>
-<pre class="literal-block">x^9 - 8.9667x^8 + 35.73400293x^7 - 83.070418400109x^6 + 124.143648875193123x^5
-- 123.683070924326075877x^4 + 82.149260397553075617891x^3
-- 35.07602992699900159127007x^2 + 8.7364078733314648368671733x
-- 0.967100824643585986488103299
-
-The multiplicity is 3 at the root x = 0.99
-The multiplicity is 3 at the root x = 0.999
-The multiplicity is 3 at the root x = 0.9999</pre>
-<p>On first pass, these rational roots were found (due to their relative
-magnitudes, using <span class="docutils literal">\PolSturmIsolateZeros**</span> was not needed here). But
-multiplicity computation works also with (decimal) roots not yet
-identified or with non-decimal or irrational roots.</p>
-<p>It is fun to modify only a tiny bit the polynomial and see if polexpr
-survives:</p>
-<pre class="literal-block">\PolDef{g}{f(x)+1e-27}
-\PolTypeset{g}\par
-\PolToSturm{g}{g}
-\PolSturmIsolateZeros*{g}
-
-\showmultiplicities{g}</pre>
-<p>This produces:</p>
-<pre class="literal-block">x^9 - 8.9667x^8 + 35.73400293x^7 - 83.070418400109x^6 + 124.143648875193123x^5
-- 123.683070924326075877x^4 + 82.149260397553075617891x^3
-- 35.07602992699900159127007x^2 + 8.7364078733314648368671733x
-- 0.967100824643585986488103298
-
-The multiplicity is 1 for the root such that 0.98 < x < 0.99
-The multiplicity is 1 for the root such that 0.9991 < x < 0.9992
-The multiplicity is 1 for the root such that 0.9997 < x < 0.9998</pre>
-<p>Which means that the multiplicity-3 roots each became a real and a pair of
-complex ones. Let's see them better:</p>
-<pre class="literal-block">\PolEnsureIntervalLengths{g}{-10}
-
-\showmultiplicities{g}</pre>
-<p>which produces:</p>
-<pre class="literal-block">The multiplicity is 1 for the root such that 0.9899888032 < x < 0.9899888033
-The multiplicity is 1 for the root such that 0.9991447980 < x < 0.9991447981
-The multiplicity is 1 for the root such that 0.9997663986 < x < 0.9997663987</pre>
-</div>
-<div class="section" id="a-degree-five-polynomial-with-three-rational-roots">
-<h2><a class="toc-backref" href="#id78">A degree five polynomial with three rational roots</a></h2>
-<pre class="literal-block">\poldef Q(x) :=  1581755751184441 x^5
-               -14907697165025339 x^4
-               +48415668972339336 x^3
-               -63952057791306264 x^2
-               +46833913221154895 x
-               -49044360626280925;
-
-\PolToSturm{Q}{Q}
-  \def\PolTypesetCmdPrefix#1{\allowbreak\xintiiifSgn{#1}{}{+}{+}}%
-  $Q_0(x) = \PolTypeset{Q_0}$
-\PolSturmIsolateZeros**{Q}
-\PolPrintIntervals{Q}
-
-$Q_{norr}(x) = \PolTypeset{Q_norr}$</pre>
-<p>Here, all real roots are rational:</p>
-<pre class="literal-block">Z_1 = 833719/265381
-Z_2 = 165707065/52746197
-Z_3 = 355/113
-
-Q_norr(x) = x^2 + 1</pre>
-<p>And let's get their decimal expansion too:</p>
-<pre class="literal-block">% print decimal expansion of the found roots
-\def\PolPrintIntervalsPrintExactZero
-            {\xintTrunc{20}{\PolPrintIntervalsTheLeftEndPoint}\dots}
-\PolPrintIntervals{Q}
-
-Z_1 = 3.14159265358107777120...
-Z_2 = 3.14159265358979340254...
-Z_3 = 3.14159292035398230088...</pre>
-</div>
-<div class="section" id="a-mignotte-type-polynomial">
-<h2><a class="toc-backref" href="#id79">A Mignotte type polynomial</a></h2>
-<pre class="literal-block">\PolDef{P}{x^10 - (10x-1)^2}%
-\PolTypeset{P}              % prints it in expanded form
-\PolToSturm{P}{P}           % we can use same prefix for Sturm chain
-\PolSturmIsolateZeros{P}    % finds 4 real roots
-This polynomial has \PolSturmNbOfIsolatedZeros{P} distinct real roots:
-\PolPrintIntervals{P}%
-% reports  -2 < Z_1 < -1, 0.09 < Z_2 < 0.10, 0.1 < Z_3 < 0.2, 1 < Z_4 < 2
-Let us refine the second and third intervals to separate the corresponding
-roots:
-\PolRefineInterval*{P}{2}% will refine to 0.0999990 < Z_2 < 0.0999991
-\PolRefineInterval*{P}{3}% will refine to 0.100001 < Z_3 < 0.100002
-\PolPrintIntervals{P}%
-Let us now get to know all roots with 10 digits after decimal mark:
-\PolEnsureIntervalLengths{P}{-10}%
-\PolPrintIntervals{P}% now all roots are known 10 decimal digits after mark
-Finally, we display 20 digits of the second root:
-\PolEnsureIntervalLength{P}{2}{-20}% makes Z_2 known with 20 digits after mark
-$$\PolSturmIsolatedZeroLeft{P}{2}<Z_2<\PolSturmIsolatedZeroRight{P}{2}$$</pre>
-<p>The last line produces:</p>
-<pre class="literal-block">0.09999900004999650028 < Z_2 < 0.09999900004999650029</pre>
-</div>
-<div class="section" id="the-wilkinson-polynomial">
-<h2><a class="toc-backref" href="#id80">The Wilkinson polynomial</a></h2>
-<p>See <a class="reference external" href="https://en.wikipedia.org/wiki/Wilkinson%27s_polynomial">Wilkinson polynomial</a>.</p>
-<pre class="literal-block">%\xintverbosetrue % for the curious...
-
-\poldef f(x) := mul((x - i), i = 1..20);
-
-\def\PolTypesetCmdPrefix#1{\allowbreak\xintiiifSgn{#1}{}{+}{+}}%
-\def\PolTypesetOne#1{\xintDecToString{#1}}%
-
-\noindent\PolTypeset{f}
-
-\PolToSturm{f}{f}
-\PolSturmIsolateZeros{f}
-\PolPrintIntervals{f}
-
-% \vfill\eject
-
-% This page is commented out because it takes about 30s on a 2GHz CPU
-% \poldef g(x) := f(x) - 2**{-23} x**19;
-
-% \PolToSturm{g}{g}
-% \noindent\PolTypeset{g_0}% integer coefficient primitive polynomial
-
-% \PolSturmIsolateZeros{g}
-% \PolEnsureIntervalLengths{g}{-10}
-
-% \let\PolPrintIntervalsPrintMultiplicity\empty
-% \PolPrintIntervals*{g}</pre>
-<p>The first polynomial:</p>
-<pre class="literal-block">f(x) = x**20
-- 210 x**19
-+ 20615 x**18
-- 1256850 x**17
-+ 53327946 x**16
-- 1672280820 x**15
-+ 40171771630 x**14
-- 756111184500 x**13
-+ 11310276995381 x**12
-- 135585182899530 x**11
-+ 1307535010540395 x**10
-- 10142299865511450 x**9
-+ 63030812099294896 x**8
-- 311333643161390640 x**7
-+ 1206647803780373360 x**6
-- 3599979517947607200 x**5
-+ 8037811822645051776 x**4
-- 12870931245150988800 x**3
-+ 13803759753640704000 x**2
-- 8752948036761600000 x
-+ 2432902008176640000</pre>
-<p>is handled fast enough, but the modified one <span class="docutils literal">f(x) - <span class="pre">2**-23</span> <span class="pre">x**19</span></span> takes about 20x longer.</p>
-<p>The Sturm chain polynomials
-have integer coefficients with up to 321 digits, whereas (surprisingly
-perhaps) those of the Sturm chain polynomials derived from <span class="docutils literal">f</span> never
-have more than 21 digits ...</p>
-<p>Once the Sturm chain is computed and the zeros isolated, obtaining their
-decimal digits is relatively faster. Here is for the ten real roots of
-<span class="docutils literal">f(x) - <span class="pre">2**-23</span> <span class="pre">x**19</span></span> as computed by the code above:</p>
-<pre class="literal-block">Z_1 = 0.9999999999...
-Z_2 = 2.0000000000...
-Z_3 = 2.9999999999...
-Z_4 = 4.0000000002...
-Z_5 = 4.9999999275...
-Z_6 = 6.0000069439...
-Z_7 = 6.9996972339...
-Z_8 = 8.0072676034...
-Z_9 = 8.9172502485...
-Z_10 = 20.8469081014...</pre>
-</div>
-<div class="section" id="the-second-wilkinson-polynomial">
-<h2><a class="toc-backref" href="#id81">The second Wilkinson polynomial</a></h2>
-<pre class="literal-block">\poldef f(x) := mul(x - 2^-i, i = 1..20);
-
-%\PolTypeset{f}
-
-\PolToSturm{f}{f}
-\PolSturmIsolateZeros**{f}
-\PolPrintIntervals{f}</pre>
-<p>This takes more time than the polynomial with 1, 2, .., 20 as roots but
-less than the latter modified by the <span class="docutils literal"><span class="pre">2**-23</span></span> tiny change to one of its
-coefficient.</p>
-<p>Here is the output (with release 0.7.2):</p>
-<pre class="literal-block">Z_1  = 0.00000095367431640625
-Z_2  = 0.0000019073486328125
-Z_3  = 0.000003814697265625
-Z_4  = 0.00000762939453125
-Z_5  = 0.0000152587890625
-Z_6  = 0.000030517578125
-Z_7  = 0.00006103515625
-Z_8  = 0.0001220703125
-Z_9  = 1/4096
-Z_10 = 1/2048
-Z_11 = 1/1024
-Z_12 = 1/512
-Z_13 = 1/256
-Z_14 = 1/128
-Z_15 = 0.015625
-Z_16 = 0.03125
-Z_17 = 0.0625
-Z_18 = 0.125
-Z_19 = 0.25
-Z_20 = 0.5</pre>
-<p>There is some incoherence in output format which has its source in the
-fact that some roots are found in branches which can only find decimal
-roots, whereas some are found in branches which could find general
-fractions and they use <span class="docutils literal">\xintIrr</span> before storage of the found root.
-This may evolve in future.</p>
-</div>
-<div class="section" id="the-degree-41-polynomial-with-2-1-9-1-8-0-0-1-1-9-2-as-roots">
-<h2><a class="toc-backref" href="#id82">The degree 41 polynomial with -2, -1.9, -1.8, ..., 0, 0.1, ..., 1.9, 2 as roots</a></h2>
-<pre class="literal-block">\PolDef{P}{mul((x-i*1e-1), i=-20..20)}% i/10 is same but less efficient</pre>
-<p>In the defining expression we could have used <span class="docutils literal">i/10</span> but this gives
-less efficient internal form for the coefficients (the <span class="docutils literal">10</span>'s end up
-in denominators).</p>
-<p>Using <span class="docutils literal">\PolToExpr{P}</span> after having done</p>
-<pre class="literal-block">\def\PolToExprCmd#1{\PolDecToString{\xintREZ{#1}}}</pre>
-<p>we get this expanded form:</p>
-<pre class="literal-block">x^41
--28.7*x^39
-+375.7117*x^37
--2975.11006*x^35
-+15935.28150578*x^33
--61167.527674162*x^31
-+173944.259366417394*x^29
--373686.963560544648*x^27
-+613012.0665016658846445*x^25
--771182.31133138163125495*x^23
-+743263.86672885754888959569*x^21
--545609.076599482896371978698*x^19
-+301748.325708943677229642930528*x^17
--123655.8987669450434698869844544*x^15
-+36666.1782054884005855608205864192*x^13
--7607.85821367459445649518380016128*x^11
-+1053.15135918687298508885950223794176*x^9
--90.6380005918141132650786081964032*x^7
-+4.33701563847327366842552218288128*x^5
--0.0944770968420804735498178265088*x^3
-+0.00059190121813899276854174416896*x</pre>
-<p>which shows coefficients with up to 36 significant digits...</p>
-<p>Stress test: not a hard challenge to <span class="docutils literal">xint + polexpr</span>, but be a bit
-patient!</p>
-<pre class="literal-block">\PolDef{P}{mul((x-i*1e-1), i=-20..20)}%
-\PolToSturm{P}{S}           % dutifully computes S_0, ..., S_{41}
-% the [1] optional argument limits the search to interval (-10,10)
-\PolSturmIsolateZeros[1]{S} % finds *exactly* (but a bit slowly) all 41 roots!
-\PolPrintIntervals{S}       % nice, isn't it?</pre>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>Release <span class="docutils literal">0.5</span> has <em>experimental</em> addition of optional argument
-<span class="docutils literal">E</span> to <span class="docutils literal">\PolSturmIsolateZeros</span>. It instructs to search roots only
-in interval <span class="docutils literal"><span class="pre">(-10^E,</span> 10^E)</span>. Important: the extremities are
-<em>assumed to not be roots</em>. In this example, the <span class="docutils literal">[1]</span> in
-<span class="docutils literal"><span class="pre">\PolSturmIsolateZeros[1]{S}</span></span> gives some speed gain; without it, it
-turns out in this case that <span class="docutils literal">polexpr</span> would have started with
-<span class="docutils literal"><span class="pre">(-10^6,</span> 10^6)</span> interval.</p>
-<p>Please note that this will probably get replaced in future by the
-specification of a general interval. Do not rely on meaning of this
-optional argument keeping the same.</p>
-</div>
-</div>
-<div class="section" id="roots-of-chebyshev-polynomials">
-<h2><a class="toc-backref" href="#id83">Roots of Chebyshev polynomials</a></h2>
-<pre class="literal-block">\poldef T_0(x) := 1;
-\poldef T_1(x) := x;
-\catcode`@ 11
-\count@ 2
-\xintloop
-  \poldef T_\the\count@(x) :=
-          2x*T_\the\numexpr\count@-1\relax
-           - T_\the\numexpr\count@-2\relax;
-\ifnum\count@<15
-\advance\count@ 1
-\repeat
-\catcode`@ 12
-
-$$T_{15} = \PolTypeset[X]{T_15}$$
-\PolToSturm{T_15}{T_15}
-\PolSturmIsolateZeros{T_15}
-\PolEnsureIntervalLengths{T_15}{-10}
-\PolPrintIntervals{T_15}</pre>
-</div>
-</div>
 <div class="section" id="non-expandable-macros">
-<h1><a class="toc-backref" href="#id84">Non-expandable macros</a></h1>
+<h1><a class="toc-backref" href="#id74">Non-expandable macros</a></h1>
 <div class="admonition note">
 <p class="admonition-title">Note</p>
 <p>At <span class="docutils literal">0.8</span> <span class="docutils literal">polexpr</span> is usable with Plain TeX and not only with
 LaTeX.  Some examples given in this section may be using LaTeX syntax
-such as <span class="docutils literal">\renewcommand</span>.  Convert to TeX primitives as appropriate
-if testing with a non LaTeX macro format.</p>
+such as <span class="docutils literal">\renewcommand</span>.</p>
 </div>
 <div class="section" id="poldef-polname-letter-expression-using-the-letter-as-indeterminate">
-<span id="poldef"></span><h2><a class="toc-backref" href="#id85"><span class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression using the letter as indeterminate;</span></a></h2>
+<span id="poldef"></span><h2><a class="toc-backref" href="#id75"><span class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression using the letter as indeterminate;</span></a></h2>
 <blockquote>
 <p>This evaluates the <em>polynomial expression</em> and stores the
 coefficients in a private structure accessible later via other
@@ -2206,7 +1782,7 @@
 <em>expression</em> can make use of previously defined polynomials.</p>
 <p>Polynomial names must start with a letter and are constituted of
 letters, digits, underscores and the right tick <span class="docutils literal">'</span>.</p>
-<p>The whole <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> syntax is authorized, as long as the final
+<p>The whole <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> syntax is authorized, as long as the final
 result is of polynomial type:</p>
 <pre class="literal-block">\poldef polname(z) := add((-1)^i z^(2i+1)/(2i+1)!, i = 0..10);</pre>
 <p>With fractional coefficients, beware the <a class="reference internal" href="#warningtacit">tacit multiplication issue</a>.</p>
@@ -2224,7 +1800,7 @@
 only algebraic operations (and ople indexing or slicing operations)
 should work fine in <span class="docutils literal"><span class="pre">\xintexpr/\xinteval</span></span> with such polynomial
 names as argument.</p>
-<p>In the case of a constant polynomial, the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variable (not the
+<p>In the case of a constant polynomial, the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variable (not the
 internal data structure on which the package macros operate)
 associated to it is indistinguishable from a scalar, it is actually
 a scalar and has lost all traces from its origins as a polynomial
@@ -2267,7 +1843,7 @@
 </blockquote>
 </div>
 <div class="section" id="poldef-letter-polname-expr-using-the-letter-as-indeterminate">
-<span id="id8"></span><h2><a class="toc-backref" href="#id86"><span class="docutils literal"><span class="pre">\PolDef[<letter>]{<polname>}{<expr.</span> using the letter as indeterminate>}</span></a></h2>
+<span id="id8"></span><h2><a class="toc-backref" href="#id76"><span class="docutils literal"><span class="pre">\PolDef[<letter>]{<polname>}{<expr.</span> using the letter as indeterminate>}</span></a></h2>
 <blockquote>
 <p>Does the same as <a class="reference internal" href="#poldef">\poldef</a> in an undelimited macro
 format, the main interest is to avoid potential problems with the
@@ -2277,7 +1853,7 @@
 </blockquote>
 </div>
 <div class="section" id="polgenfloatvariant-polname">
-<span id="polgenfloatvariant"></span><h2><a class="toc-backref" href="#id87"><span class="docutils literal"><span class="pre">\PolGenFloatVariant{<polname>}</span></span></a></h2>
+<span id="polgenfloatvariant"></span><h2><a class="toc-backref" href="#id77"><span class="docutils literal"><span class="pre">\PolGenFloatVariant{<polname>}</span></span></a></h2>
 <blockquote>
 <p>Makes the polynomial also usable in the
 <span class="docutils literal"><span class="pre">\xintfloatexpr/\xintfloateval</span></span> parser.  It will therein evaluates
@@ -2294,7 +1870,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltypeset-pol-expr">
-<span id="poltypeset"></span><h2><a class="toc-backref" href="#id88"><span class="docutils literal"><span class="pre">\PolTypeset{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
+<span id="poltypeset"></span><h2><a class="toc-backref" href="#id78"><span class="docutils literal"><span class="pre">\PolTypeset{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
 <blockquote>
 <p>Typesets in descending powers, switching to math mode if in text
 mode, after evaluating the polynomial expression:</p>
@@ -2311,7 +1887,7 @@
 expandable, but this is not a requirement.</p>
 </blockquote>
 <div class="section" id="poltypesetcmd-raw-coeff">
-<span id="poltypesetcmd"></span><h3><a class="toc-backref" href="#id89"><span class="docutils literal"><span class="pre">\PolTypesetCmd{<raw_coeff>}</span></span></a></h3>
+<span id="poltypesetcmd"></span><h3><a class="toc-backref" href="#id79"><span class="docutils literal"><span class="pre">\PolTypesetCmd{<raw_coeff>}</span></span></a></h3>
 <blockquote>
 <p>Its package definition checks if the coefficient is <span class="docutils literal">1</span> or <span class="docutils literal"><span class="pre">-1</span></span>
 and then skips printing the <span class="docutils literal">1</span>, except for the coefficient of
@@ -2321,7 +1897,7 @@
 minus one, is handled by <a class="reference internal" href="#poltypesetone-raw-coeff">\PolTypesetOne{<raw_coeff>}</a>.</p>
 </blockquote>
 <div class="section" id="polifcoeffisplusorminusone-t-f">
-<span id="polifcoeffisplusorminusone"></span><h4><a class="toc-backref" href="#id90"><span class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{T}{F}</span></span></a></h4>
+<span id="polifcoeffisplusorminusone"></span><h4><a class="toc-backref" href="#id80"><span class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{T}{F}</span></span></a></h4>
 <blockquote>
 <p>This macro is a priori undefined.</p>
 <p>It is defined via the default <a class="reference internal" href="#poltypesetcmd-raw-coeff">\PolTypesetCmd{<raw_coeff>}</a> to be
@@ -2335,10 +1911,10 @@
 </div>
 </div>
 <div class="section" id="poltypesetone-raw-coeff">
-<span id="poltypesetone"></span><h3><a class="toc-backref" href="#id91"><span class="docutils literal"><span class="pre">\PolTypesetOne{<raw_coeff>}</span></span></a></h3>
+<span id="poltypesetone"></span><h3><a class="toc-backref" href="#id81"><span class="docutils literal"><span class="pre">\PolTypesetOne{<raw_coeff>}</span></span></a></h3>
 <blockquote>
 <p>Defaults to <span class="docutils literal">\xintTeXsignedFrac</span> (LaTeX) or <span class="docutils literal">\xintTeXsignedOver</span>
-(else).  But these <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> old legacy macros are a bit
+(else).  But these <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> old legacy macros are a bit
 annoying as they insist in exhibiting a power of ten rather than
 using simpler decimal notation.</p>
 <p>As alternative, one can do definitions such as:</p>
@@ -2350,7 +1926,7 @@
 </blockquote>
 </div>
 <div class="section" id="id9">
-<span id="poltypesetmonomialcmd"></span><h3><a class="toc-backref" href="#id92"><span class="docutils literal">\PolTypesetMonomialCmd</span></a></h3>
+<span id="poltypesetmonomialcmd"></span><h3><a class="toc-backref" href="#id82"><span class="docutils literal">\PolTypesetMonomialCmd</span></a></h3>
 <blockquote>
 <p>This decides how a monomial (in variable <span class="docutils literal">\PolVar</span> and with
 exponent <span class="docutils literal">\PolIndex</span>) is to be printed. The default does nothing
@@ -2361,7 +1937,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltypesetcmdprefix-raw-coeff">
-<span id="poltypesetcmdprefix"></span><h3><a class="toc-backref" href="#id93"><span class="docutils literal"><span class="pre">\PolTypesetCmdPrefix{<raw_coeff>}</span></span></a></h3>
+<span id="poltypesetcmdprefix"></span><h3><a class="toc-backref" href="#id83"><span class="docutils literal"><span class="pre">\PolTypesetCmdPrefix{<raw_coeff>}</span></span></a></h3>
 <blockquote>
 <p>Expands to a <span class="docutils literal">+</span> if the <span class="docutils literal">raw_coeff</span> is zero or positive, and to
 nothing if <span class="docutils literal">raw_coeff</span> is negative, as in latter case the
@@ -2373,7 +1949,7 @@
 </div>
 </div>
 <div class="section" id="id11">
-<span id="id10"></span><h2><a class="toc-backref" href="#id94"><span class="docutils literal"><span class="pre">\PolTypeset*{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
+<span id="id10"></span><h2><a class="toc-backref" href="#id84"><span class="docutils literal"><span class="pre">\PolTypeset*{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
 <blockquote>
 <p>Typesets in ascending powers. Use <span class="docutils literal">[<letter>]</span> optional argument
 (after the <span class="docutils literal">*</span>) to use another letter than <span class="docutils literal">x</span>.</p>
@@ -2383,7 +1959,7 @@
 </blockquote>
 </div>
 <div class="section" id="non-expandable-macros-related-to-the-root-localization-routines">
-<h2><a class="toc-backref" href="#id95">Non-expandable macros related to the root localization routines</a></h2>
+<h2><a class="toc-backref" href="#id85">Non-expandable macros related to the root localization routines</a></h2>
 <p>As <a class="reference internal" href="#poltosturm-polname-sturmname">\PolToSturm{<polname>}{<sturmname>}</a> and
 <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{<sturmname>}</a> and variants declare
 additional polynomial or scalar variables with names based on <span class="docutils literal"><sturmname></span> as
@@ -2390,7 +1966,7 @@
 prefix, it is advisable to keep the <span class="docutils literal"><sturmname></span> namespace separate from
 the one applying to <span class="docutils literal">\xintexpr</span> variables generally, or to polynomials.</p>
 <div class="section" id="poltosturm-polname-sturmname">
-<span id="poltosturm"></span><h3><a class="toc-backref" href="#id96"><span class="docutils literal"><span class="pre">\PolToSturm{<polname>}{<sturmname>}</span></span></a></h3>
+<span id="poltosturm"></span><h3><a class="toc-backref" href="#id86"><span class="docutils literal"><span class="pre">\PolToSturm{<polname>}{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>With <span class="docutils literal"><polname></span> being for example <span class="docutils literal">P</span>, and <span class="docutils literal"><sturmname></span> being
 for example <span class="docutils literal">S</span>, the macro starts by computing the derivative
@@ -2475,7 +2051,7 @@
 </blockquote>
 </div>
 <div class="section" id="id13">
-<span id="id12"></span><h3><a class="toc-backref" href="#id97"><span class="docutils literal"><span class="pre">\PolToSturm*{<polname>}{<sturmname>}</span></span></a></h3>
+<span id="id12"></span><h3><a class="toc-backref" href="#id87"><span class="docutils literal"><span class="pre">\PolToSturm*{<polname>}{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>Does the same as <a class="reference internal" href="#poltosturm">un-starred version</a> and additionally it
 keeps for user usage the memory of the <em>un-normalized</em> (but still
@@ -2485,7 +2061,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmisolatezeros-sturmname">
-<span id="polsturmisolatezeros"></span><h3><a class="toc-backref" href="#id98"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros{<sturmname>}</span></span></a></h3>
+<span id="polsturmisolatezeros"></span><h3><a class="toc-backref" href="#id88"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>The macro locates, using the <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm Theorem</a>, as many disjoint
 intervals as there are distinct real roots.</p>
@@ -2495,7 +2071,7 @@
 <a class="reference internal" href="#poltosturm-polname-sturmname">\PolToSturm{<polname>}{<sturmname>}</a>.</p>
 </div>
 <p>After its execution they are two types of such intervals (stored in
-memory and accessible via macros or <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variables, see below):</p>
+memory and accessible via macros or <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variables, see below):</p>
 <ul class="simple">
 <li><p>singleton <span class="docutils literal">{a}</span>: then <span class="docutils literal">a</span> is a root, (necessarily a decimal
 number, but not all such decimal numbers are exactly identified yet).</p></li>
@@ -2528,7 +2104,7 @@
 for future computations in <span class="docutils literal">\xintexpr/xinteval</span> or <span class="docutils literal">\poldef</span> as
 variables <span class="docutils literal">SL_1</span>, <span class="docutils literal">SL_2</span>, etc..., for the left end-points and
 <span class="docutils literal">SR_1</span>, <span class="docutils literal">SR_2</span>, ..., for the right end-points.</p>
-<p>Additionally, <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variable <span class="docutils literal">SZ_1_isknown</span> will have value
+<p>Additionally, <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variable <span class="docutils literal">SZ_1_isknown</span> will have value
 <span class="docutils literal">1</span> if the root in the first interval is known, and <span class="docutils literal">0</span>
 otherwise. And similarly for the other intervals.</p>
 <div class="admonition important">
@@ -2566,8 +2142,8 @@
 other localization improving macros.</p>
 <div class="admonition note">
 <p class="admonition-title">Note</p>
-<p>The current polexpr implementation defines the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variables
-and <a class="reference external" href="http://www.ctan.org/pkg/xint">xinttools</a> arrays as described above with global scope. On the
+<p>The current polexpr implementation defines the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variables
+and <a class="reference external" href="https://www.ctan.org/pkg/xint">xinttools</a> arrays as described above with global scope. On the
 other hand the Sturm sequence polynomials obey the current scope.</p>
 <p>This is perhaps a bit inconsistent and may change in future.</p>
 </div>
@@ -2585,7 +2161,7 @@
 </blockquote>
 </div>
 <div class="section" id="id15">
-<span id="id14"></span><h3><a class="toc-backref" href="#id99"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{<sturmname>}</span></span></a></h3>
+<span id="id14"></span><h3><a class="toc-backref" href="#id89"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>The macro does the same as <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{<sturmname>}</a> and
 then in addition it does the extra work to determine all
@@ -2595,7 +2171,7 @@
 to the multiplicity of the root located in the <span class="docutils literal">index</span>-th
 interval (intervals are enumerated from left to right, with index
 starting at <span class="docutils literal">1</span>).</p>
-<p>Furthermore, if for example the <span class="docutils literal"><sturmname></span> is <span class="docutils literal">S</span>, <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a>
+<p>Furthermore, if for example the <span class="docutils literal"><sturmname></span> is <span class="docutils literal">S</span>, <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>
 variables <span class="docutils literal">SM_1</span>, <span class="docutils literal">SM_2</span>... hold the multiplicities thus
 computed.</p>
 <div class="admonition note">
@@ -2606,11 +2182,10 @@
 non-square-free Sturm chain polynomials as user-level genuine
 polynomials, stores their data in private macros.</p>
 </div>
-<p>See <a class="reference internal" href="#the-degree-nine-polynomial-with-0-99-0-999-0-9999-as-triple-roots">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple
-roots</a> for an example.</p>
+<p>See <span class="docutils literal">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</span> example in <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span>.</p>
 </blockquote>
 <div class="section" id="polsturmisolatezerosandgetmultiplicities-sturmname">
-<span id="polsturmisolatezerosandgetmultiplicities"></span><h4><a class="toc-backref" href="#id100"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndGetMultiplicities{<sturmname>}</span></span></a></h4>
+<span id="polsturmisolatezerosandgetmultiplicities"></span><h4><a class="toc-backref" href="#id90"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndGetMultiplicities{<sturmname>}</span></span></a></h4>
 <blockquote>
 <p>This is another name for <a class="reference internal" href="#id15">\PolSturmIsolateZeros*{<sturmname>}</a>.</p>
 </blockquote>
@@ -2617,7 +2192,7 @@
 </div>
 </div>
 <div class="section" id="id17">
-<span id="id16"></span><h3><a class="toc-backref" href="#id101"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{<sturmname>}</span></span></a></h3>
+<span id="id16"></span><h3><a class="toc-backref" href="#id91"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>The macro does the same as <a class="reference internal" href="#id15">\PolSturmIsolateZeros*{<sturmname>}</a> and
 in addition it does the extra work to determine all the <em>rational</em>
@@ -2637,11 +2212,10 @@
 roots have been removed (see <a class="reference internal" href="#polexprsetup">\polexprsetup</a>), i.e. it contains
 the irrational roots of the original polynomial, with the same
 multiplicities.</p>
-<p>See <a class="reference internal" href="#a-degree-five-polynomial-with-three-rational-roots">A degree five polynomial with three rational
-roots</a> for an example.</p>
+<p>See <span class="docutils literal">A degree five polynomial with three rational roots</span> in <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span>.</p>
 </blockquote>
 <div class="section" id="polsturmisolatezerosgetmultiplicitiesandrationalroots-sturmname">
-<span id="polsturmisolatezerosgetmultiplicitiesandrationalroots"></span><h4><a class="toc-backref" href="#id102"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{<sturmname>}</span></span></a></h4>
+<span id="polsturmisolatezerosgetmultiplicitiesandrationalroots"></span><h4><a class="toc-backref" href="#id92"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{<sturmname>}</span></span></a></h4>
 <blockquote>
 <p>This is another name for <a class="reference internal" href="#id17">\PolSturmIsolateZeros**{<sturmname>}</a>.</p>
 </blockquote>
@@ -2648,7 +2222,7 @@
 </div>
 </div>
 <div class="section" id="polsturmisolatezerosandfindrationalroots-sturmname">
-<h3><a class="toc-backref" href="#id103"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndFindRationalRoots{<sturmname>}</span></span></a></h3>
+<h3><a class="toc-backref" href="#id93"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndFindRationalRoots{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>This works exactly like <a class="reference internal" href="#id17">\PolSturmIsolateZeros**{<sturmname>}</a>
 (inclusive of declaring the polynomials <span class="docutils literal">sturmname_sqf_norr</span> and
@@ -2661,7 +2235,7 @@
 </div>
 <div class="admonition attention">
 <p class="admonition-title">Attention!</p>
-<p>This macro does <em>not</em> define <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variables
+<p>This macro does <em>not</em> define <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variables
 <span class="docutils literal">sturmnameM_1</span>, <span class="docutils literal">sturmnameM_2</span>, ... holding the
 multiplicities and it leaves the multiplicity array (whose accessor
 is <a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index">\PolSturmIsolatedZeroMultiplicity{<sturmname>}{<index>}</a>) into
@@ -2678,7 +2252,7 @@
 </blockquote>
 </div>
 <div class="section" id="polrefineinterval-sturmname-index">
-<span id="polrefineinterval"></span><h3><a class="toc-backref" href="#id104"><span class="docutils literal"><span class="pre">\PolRefineInterval*{<sturmname>}{<index>}</span></span></a></h3>
+<span id="polrefineinterval"></span><h3><a class="toc-backref" href="#id94"><span class="docutils literal"><span class="pre">\PolRefineInterval*{<sturmname>}{<index>}</span></span></a></h3>
 <blockquote>
 <p>The <span class="docutils literal">index</span>-th interval (starting indexing at one) is further
 subdivided as many times as is necessary in order for the newer
@@ -2688,7 +2262,7 @@
 </blockquote>
 </div>
 <div class="section" id="polrefineinterval-n-sturmname-index">
-<span id="polrefineinterval-n"></span><h3><a class="toc-backref" href="#id105"><span class="docutils literal"><span class="pre">\PolRefineInterval[N]{<sturmname>}{<index>}</span></span></a></h3>
+<span id="polrefineinterval-n"></span><h3><a class="toc-backref" href="#id95"><span class="docutils literal"><span class="pre">\PolRefineInterval[N]{<sturmname>}{<index>}</span></span></a></h3>
 <blockquote>
 <p>The <span class="docutils literal">index</span>-th interval (starting count at one) is further
 subdivided once, reducing its length by a factor of 10. This is done
@@ -2696,7 +2270,7 @@
 </blockquote>
 </div>
 <div class="section" id="polensureintervallength-sturmname-index-exponent">
-<span id="polensureintervallength"></span><h3><a class="toc-backref" href="#id106"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLength{<sturmname>}{<index>}{<exponent>}</span></span></a></h3>
+<span id="polensureintervallength"></span><h3><a class="toc-backref" href="#id96"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLength{<sturmname>}{<index>}{<exponent>}</span></span></a></h3>
 <blockquote>
 <p>The <span class="docutils literal">index</span>-th interval is subdivided until its length becomes at
 most <span class="docutils literal">10^E</span>. This means (for <span class="docutils literal">E<0</span>) that the first <span class="docutils literal"><span class="pre">-E</span></span> digits
@@ -2704,7 +2278,7 @@
 </blockquote>
 </div>
 <div class="section" id="polensureintervallengths-sturmname-exponent">
-<span id="polensureintervallengths"></span><h3><a class="toc-backref" href="#id107"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{<sturmname>}{<exponent>}</span></span></a></h3>
+<span id="polensureintervallengths"></span><h3><a class="toc-backref" href="#id97"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{<sturmname>}{<exponent>}</span></span></a></h3>
 <blockquote>
 <p>The intervals as obtained from <span class="docutils literal">\PolSturmIsolateZeros</span> are (if
 necessary) subdivided further by (base 10) dichotomy in order for
@@ -2714,7 +2288,7 @@
 </blockquote>
 </div>
 <div class="section" id="polprintintervals-varname-sturmname">
-<span id="polprintintervals"></span><h3><a class="toc-backref" href="#id108"><span class="docutils literal"><span class="pre">\PolPrintIntervals[<varname>]{<sturmname>}</span></span></a></h3>
+<span id="polprintintervals"></span><h3><a class="toc-backref" href="#id98"><span class="docutils literal"><span class="pre">\PolPrintIntervals[<varname>]{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>This is a convenience macro which prints the bounds for the roots
 <span class="docutils literal">Z_1</span>, <span class="docutils literal">Z_2</span>, ... (the optional argument <span class="docutils literal">varname</span> allows to
@@ -2735,7 +2309,7 @@
 <p>See next macros which govern its output.</p>
 </blockquote>
 <div class="section" id="polprintintervalsnorealroots">
-<h4><a class="toc-backref" href="#id109"><span class="docutils literal">\PolPrintIntervalsNoRealRoots</span></a></h4>
+<h4><a class="toc-backref" href="#id99"><span class="docutils literal">\PolPrintIntervalsNoRealRoots</span></a></h4>
 <blockquote>
 <p>Executed in place of an <span class="docutils literal">array</span> environment, when there are no
 real roots. Default definition:</p>
@@ -2743,21 +2317,34 @@
 </blockquote>
 </div>
 <div class="section" id="polprintintervalsbeginenv">
-<h4><a class="toc-backref" href="#id110"><span class="docutils literal">\PolPrintIntervalsBeginEnv</span></a></h4>
+<h4><a class="toc-backref" href="#id100"><span class="docutils literal">\PolPrintIntervalsBeginEnv</span></a></h4>
 <blockquote>
-<p>Default definition:</p>
+<p>Default definition (given here for LaTeX, Plain has a variant):</p>
 <pre class="literal-block">\newcommand\PolPrintIntervalsBeginEnv{\[\begin{array}{rcccl}}</pre>
+<p>A simpler <span class="docutils literal">center</span> environment provides a straightforward way to
+obtain a display allowing pagebreaks. Of course redefinitions must
+at any rate be kept in sync with <a class="reference internal" href="#polprintintervalsknownroot">\PolPrintIntervalsKnownRoot</a> and
+<a class="reference internal" href="#polprintintervalsunknownroot">\PolPrintIntervalsUnknownRoot</a>.</p>
+<p>Prior to <span class="docutils literal">0.8.6</span> it was not possible to use here for example
+<span class="docutils literal">\begin{align}</span> due to the latter executing twice in contents.</p>
 </blockquote>
 </div>
 <div class="section" id="polprintintervalsendenv">
-<h4><a class="toc-backref" href="#id111"><span class="docutils literal">\PolPrintIntervalsEndEnv</span></a></h4>
+<h4><a class="toc-backref" href="#id101"><span class="docutils literal">\PolPrintIntervalsEndEnv</span></a></h4>
 <blockquote>
 <p>Default definition:</p>
 <pre class="literal-block">\newcommand\PolPrintIntervalsEndEnv{\end{array}\]}</pre>
 </blockquote>
 </div>
+<div class="section" id="polprintintervalsrowseparator">
+<h4><a class="toc-backref" href="#id102"><span class="docutils literal">\PolPrintIntervalsRowSeparator</span></a></h4>
+<blockquote>
+<p>Expands by default to <span class="docutils literal">\\</span> with LaTeX and to  <span class="docutils literal">\cr</span> with Plain</p>
+<p>Added at <span class="docutils literal">0.8.6</span>.</p>
+</blockquote>
+</div>
 <div class="section" id="polprintintervalsknownroot">
-<h4><a class="toc-backref" href="#id112"><span class="docutils literal">\PolPrintIntervalsKnownRoot</span></a></h4>
+<h4><a class="toc-backref" href="#id103"><span class="docutils literal">\PolPrintIntervalsKnownRoot</span></a></h4>
 <blockquote>
 <p>Default definition:</p>
 <pre class="literal-block">\newcommand\PolPrintIntervalsKnownRoot{%
@@ -2767,7 +2354,7 @@
 </blockquote>
 </div>
 <div class="section" id="polprintintervalsunknownroot">
-<h4><a class="toc-backref" href="#id113"><span class="docutils literal">\PolPrintIntervalsUnknownRoot</span></a></h4>
+<h4><a class="toc-backref" href="#id104"><span class="docutils literal">\PolPrintIntervalsUnknownRoot</span></a></h4>
 <blockquote>
 <p>Default definition:</p>
 <pre class="literal-block">\newcommand\PolPrintIntervalsUnknownRoot{%
@@ -2778,7 +2365,7 @@
 </blockquote>
 </div>
 <div class="section" id="id18">
-<span id="polprintintervalsprintexactzero"></span><h4><a class="toc-backref" href="#id114"><span class="docutils literal">\PolPrintIntervalsPrintExactZero</span></a></h4>
+<span id="polprintintervalsprintexactzero"></span><h4><a class="toc-backref" href="#id105"><span class="docutils literal">\PolPrintIntervalsPrintExactZero</span></a></h4>
 <blockquote>
 <p>Default definition:</p>
 <pre class="literal-block">\newcommand\PolPrintIntervalsPrintExactZero{\PolPrintIntervalsTheLeftEndPoint}</pre>
@@ -2785,7 +2372,7 @@
 </blockquote>
 </div>
 <div class="section" id="id19">
-<span id="polprintintervalsprintleftendpoint"></span><h4><a class="toc-backref" href="#id115"><span class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</span></a></h4>
+<span id="polprintintervalsprintleftendpoint"></span><h4><a class="toc-backref" href="#id106"><span class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</span></a></h4>
 <blockquote>
 <p>Default definition:</p>
 <pre class="literal-block">\newcommand\PolPrintIntervalsPrintLeftEndPoint{\PolPrintIntervalsTheLeftEndPoint}</pre>
@@ -2792,7 +2379,7 @@
 </blockquote>
 </div>
 <div class="section" id="id20">
-<span id="polprintintervalsprintrightendpoint"></span><h4><a class="toc-backref" href="#id116"><span class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</span></a></h4>
+<span id="polprintintervalsprintrightendpoint"></span><h4><a class="toc-backref" href="#id107"><span class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</span></a></h4>
 <blockquote>
 <p>Default definition is:</p>
 <pre class="literal-block">\newcommand\PolPrintIntervalsPrintRightEndPoint{\PolPrintIntervalsTheRightEndPoint}</pre>
@@ -2800,7 +2387,7 @@
 </div>
 </div>
 <div class="section" id="id22">
-<span id="id21"></span><h3><a class="toc-backref" href="#id117"><span class="docutils literal"><span class="pre">\PolPrintIntervals*[<varname>]{<sturmname>}</span></span></a></h3>
+<span id="id21"></span><h3><a class="toc-backref" href="#id108"><span class="docutils literal"><span class="pre">\PolPrintIntervals*[<varname>]{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>This starred variant produces an alternative output (which
 displays the root multiplicity), and is provided as an
@@ -2817,7 +2404,7 @@
 <p>Multiplicities are printed using this auxiliary macro:</p>
 </blockquote>
 <div class="section" id="polprintintervalsprintmultiplicity">
-<h4><a class="toc-backref" href="#id118"><span class="docutils literal">\PolPrintIntervalsPrintMultiplicity</span></a></h4>
+<h4><a class="toc-backref" href="#id109"><span class="docutils literal">\PolPrintIntervalsPrintMultiplicity</span></a></h4>
 <blockquote>
 <p>whose default definition is:</p>
 <pre class="literal-block">\newcommand\PolPrintIntervalsPrintMultiplicity{(\mbox{mult. }\PolPrintIntervalsTheMultiplicity)}</pre>
@@ -2825,12 +2412,12 @@
 </div>
 </div>
 <div class="section" id="polsettosturmchainsignchangesat-foo-sturmname-value">
-<span id="polsettosturmchainsignchangesat"></span><h3><a class="toc-backref" href="#id119"><span class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\foo}{<sturmname>}{<value>}</span></span></a></h3>
+<span id="polsettosturmchainsignchangesat"></span><h3><a class="toc-backref" href="#id110"><span class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\foo}{<sturmname>}{<value>}</span></span></a></h3>
 <blockquote>
 <p>Sets macro <span class="docutils literal">\foo</span> to store the number of sign changes in the
 already computed normalized Sturm chain with name prefix
 <span class="docutils literal"><sturmname></span>, at location <span class="docutils literal"><value></span> (which must be in format as
-acceptable by the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> macros.)</p>
+acceptable by the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros.)</p>
 <p>The definition is made with global scope. For local scope, use
 <span class="docutils literal">[\empty]</span> as extra optional argument.</p>
 <p>One can use this immediately after creation of the Sturm chain.</p>
@@ -2837,7 +2424,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsettonbofzeroswithin-foo-sturmname-value-left-value-right">
-<span id="polsettonbofzeroswithin"></span><h3><a class="toc-backref" href="#id120"><span class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\foo}{<sturmname>}{<value_left>}{<value_right>}</span></span></a></h3>
+<span id="polsettonbofzeroswithin"></span><h3><a class="toc-backref" href="#id111"><span class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\foo}{<sturmname>}{<value_left>}{<value_right>}</span></span></a></h3>
 <blockquote>
 <p>Sets, assuming the normalized Sturm chain has been already computed,
 macro <span class="docutils literal">\foo</span> to store the number of roots of <span class="docutils literal">sturmname_0</span> in
@@ -2861,7 +2448,7 @@
 </div>
 </div>
 <div class="section" id="pollet-polname-2-polname-1">
-<span id="pollet"></span><h2><a class="toc-backref" href="#id121"><span class="docutils literal"><span class="pre">\PolLet{<polname_2>}={<polname_1>}</span></span></a></h2>
+<span id="pollet"></span><h2><a class="toc-backref" href="#id112"><span class="docutils literal"><span class="pre">\PolLet{<polname_2>}={<polname_1>}</span></span></a></h2>
 <blockquote>
 <p>Makes a copy of the already defined polynomial <span class="docutils literal">polname_1</span> to a
 new one <span class="docutils literal">polname_2</span>. This has the same effect as
@@ -2871,13 +2458,13 @@
 </blockquote>
 </div>
 <div class="section" id="polgloballet-polname-2-polname-1">
-<span id="polgloballet"></span><h2><a class="toc-backref" href="#id122"><span class="docutils literal"><span class="pre">\PolGlobalLet{<polname_2>}={<polname_1>}</span></span></a></h2>
+<span id="polgloballet"></span><h2><a class="toc-backref" href="#id113"><span class="docutils literal"><span class="pre">\PolGlobalLet{<polname_2>}={<polname_1>}</span></span></a></h2>
 <blockquote>
 <p>Acts globally.</p>
 </blockquote>
 </div>
 <div class="section" id="polassign-polname-toarray-macro">
-<span id="polassign"></span><h2><a class="toc-backref" href="#id123"><span class="docutils literal"><span class="pre">\PolAssign{<polname>}\toarray\macro</span></span></a></h2>
+<span id="polassign"></span><h2><a class="toc-backref" href="#id114"><span class="docutils literal"><span class="pre">\PolAssign{<polname>}\toarray\macro</span></span></a></h2>
 <blockquote>
 <p>Defines a one-argument expandable macro <span class="docutils literal"><span class="pre">\macro{#1}</span></span> which expands
 to the (raw) #1th polynomial coefficient.</p>
@@ -2884,7 +2471,7 @@
 <ul class="simple">
 <li><p>Attention, coefficients here are indexed starting at 1.  This is
 an unfortunate legacy situation related to the original indexing
-convention in <a class="reference external" href="http://www.ctan.org/pkg/xint">xinttools</a> arrays.</p></li>
+convention in <a class="reference external" href="https://www.ctan.org/pkg/xint">xinttools</a> arrays.</p></li>
 <li><p>With #1=-1, -2, ..., <span class="docutils literal"><span class="pre">\macro{#1}</span></span> returns leading coefficients.</p></li>
 <li><p>With #1=0, returns the number of coefficients, i.e. <span class="docutils literal">1 + deg f</span>
 for non-zero polynomials.</p></li>
@@ -2894,12 +2481,12 @@
 </blockquote>
 </div>
 <div class="section" id="polget-polname-fromarray-macro">
-<span id="polget"></span><h2><a class="toc-backref" href="#id124"><span class="docutils literal"><span class="pre">\PolGet{<polname>}\fromarray\macro</span></span></a></h2>
+<span id="polget"></span><h2><a class="toc-backref" href="#id115"><span class="docutils literal"><span class="pre">\PolGet{<polname>}\fromarray\macro</span></span></a></h2>
 <blockquote>
 <p>Does the converse operation to
 <span class="docutils literal"><span class="pre">\PolAssign{<polname>}\toarray\macro</span></span>. Each individual
 <span class="docutils literal"><span class="pre">\macro{<value>}</span></span> gets expanded in an <span class="docutils literal">\edef</span> and then normalized
-via <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a>'s macro <span class="docutils literal">\xintRaw</span>.</p>
+via <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>'s macro <span class="docutils literal">\xintRaw</span>.</p>
 <p>The leading zeros are removed from the polynomial.</p>
 <p>(contrived) Example:</p>
 <pre class="literal-block">\xintAssignArray{1}{-2}{5}{-3}\to\foo
@@ -2908,7 +2495,7 @@
 </blockquote>
 </div>
 <div class="section" id="polfromcsv-polname-csv">
-<span id="polfromcsv"></span><h2><a class="toc-backref" href="#id125"><span class="docutils literal"><span class="pre">\PolFromCSV{<polname>}{<csv>}</span></span></a></h2>
+<span id="polfromcsv"></span><h2><a class="toc-backref" href="#id116"><span class="docutils literal"><span class="pre">\PolFromCSV{<polname>}{<csv>}</span></span></a></h2>
 <blockquote>
 <p>Defines a polynomial directly from the comma separated list of values
 (or a macro expanding to such a list) of its coefficients, the <em>first
@@ -2915,7 +2502,7 @@
 item</em> gives the constant term, the <em>last item</em> gives the leading
 coefficient, except if zero, then it is dropped (iteratively). List
 items are each expanded in an <span class="docutils literal">\edef</span> and then put into normalized
-form via <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a>'s macro <span class="docutils literal">\xintRaw</span>.</p>
+form via <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>'s macro <span class="docutils literal">\xintRaw</span>.</p>
 <p>As leading zero coefficients are removed:</p>
 <pre class="literal-block">\PolFromCSV{f}{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}</pre>
 <p>defines the zero polynomial, which holds only one coefficient.</p>
@@ -2923,7 +2510,7 @@
 </blockquote>
 </div>
 <div class="section" id="polmapcoeffs-macro-polname">
-<span id="polmapcoeffs"></span><h2><a class="toc-backref" href="#id126"><span class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{<polname>}</span></span></a></h2>
+<span id="polmapcoeffs"></span><h2><a class="toc-backref" href="#id117"><span class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{<polname>}</span></span></a></h2>
 <blockquote>
 <p>It modifies ('in-place': original coefficients get lost) each
 coefficient of the defined polynomial via the <em>expandable</em> macro
@@ -2931,9 +2518,9 @@
 coefficients vanish after the operation.</p>
 <p>In the replacement text of <span class="docutils literal">\macro</span>, <span class="docutils literal">\index</span> expands to the
 coefficient index (starting at zero for the constant term).</p>
-<p>Notice that <span class="docutils literal">\macro</span> will have to handle inputs in the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a>
+<p>Notice that <span class="docutils literal">\macro</span> will have to handle inputs in the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>
 internal format. This means that it probably will have to be
-expressed in terms of macros from the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> package.</p>
+expressed in terms of macros from the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> package.</p>
 <p>Example:</p>
 <pre class="literal-block">\def\foo#1{\xintMul{#1}{\the\numexpr\index*\index\relax}}</pre>
 <p>(or with <span class="docutils literal"><span class="pre">\xintSqr{\index}</span></span>) to replace <span class="docutils literal">n</span>-th coefficient
@@ -2941,7 +2528,7 @@
 </blockquote>
 </div>
 <div class="section" id="polreducecoeffs-polname">
-<span id="polreducecoeffs"></span><h2><a class="toc-backref" href="#id127"><span class="docutils literal"><span class="pre">\PolReduceCoeffs{<polname>}</span></span></a></h2>
+<span id="polreducecoeffs"></span><h2><a class="toc-backref" href="#id118"><span class="docutils literal"><span class="pre">\PolReduceCoeffs{<polname>}</span></span></a></h2>
 <blockquote>
 <p>Reduces the internal representations of the coefficients to
 their lowest terms.</p>
@@ -2948,13 +2535,13 @@
 </blockquote>
 </div>
 <div class="section" id="id24">
-<span id="id23"></span><h2><a class="toc-backref" href="#id128"><span class="docutils literal"><span class="pre">\PolReduceCoeffs*{<polname>}</span></span></a></h2>
+<span id="id23"></span><h2><a class="toc-backref" href="#id119"><span class="docutils literal"><span class="pre">\PolReduceCoeffs*{<polname>}</span></span></a></h2>
 <blockquote>
 <p>Reduces the internal representations of the coefficients to their
 lowest terms, but ignoring a possible separated "power of ten part".</p>
-<p>For example, <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> stores an <span class="docutils literal">30e2/50</span> input as <span class="docutils literal">30/50</span> with
+<p>For example, <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> stores an <span class="docutils literal">30e2/50</span> input as <span class="docutils literal">30/50</span> with
 a separate <span class="docutils literal">10^2</span> part.  This will thus get replaced by <span class="docutils literal">3e^2/5</span>
-(or rather whatever <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> uses for internal representation), and
+(or rather whatever <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> uses for internal representation), and
 not by <span class="docutils literal">60</span> as would result from complete reduction.</p>
 <p>Evaluations with polynomials treated by this can be much faster than
 with those handled by the non-starred variant
@@ -2963,7 +2550,7 @@
 </blockquote>
 </div>
 <div class="section" id="polmakemonic-polname">
-<span id="polmakemonic"></span><h2><a class="toc-backref" href="#id129"><span class="docutils literal"><span class="pre">\PolMakeMonic{<polname>}</span></span></a></h2>
+<span id="polmakemonic"></span><h2><a class="toc-backref" href="#id120"><span class="docutils literal"><span class="pre">\PolMakeMonic{<polname>}</span></span></a></h2>
 <blockquote>
 <p>Divides by the leading coefficient. It is recommended to execute
 <a class="reference internal" href="#id24">\PolReduceCoeffs*{<polname>}</a> immediately afterwards. This is not
@@ -2973,7 +2560,7 @@
 </blockquote>
 </div>
 <div class="section" id="polmakeprimitive-polname">
-<span id="polmakeprimitive"></span><h2><a class="toc-backref" href="#id130"><span class="docutils literal"><span class="pre">\PolMakePrimitive{<polname>}</span></span></a></h2>
+<span id="polmakeprimitive"></span><h2><a class="toc-backref" href="#id121"><span class="docutils literal"><span class="pre">\PolMakePrimitive{<polname>}</span></span></a></h2>
 <blockquote>
 <p>Divides by the integer content see (<a class="reference internal" href="#policontent">\PolIContent</a>).
 This thus produces a polynomial with integer
@@ -2982,7 +2569,7 @@
 </blockquote>
 </div>
 <div class="section" id="poldiff-polname-1-polname-2">
-<span id="poldiff"></span><h2><a class="toc-backref" href="#id131"><span class="docutils literal"><span class="pre">\PolDiff{<polname_1>}{<polname_2>}</span></span></a></h2>
+<span id="poldiff"></span><h2><a class="toc-backref" href="#id122"><span class="docutils literal"><span class="pre">\PolDiff{<polname_1>}{<polname_2>}</span></span></a></h2>
 <blockquote>
 <p>This sets <span class="docutils literal">polname_2</span> to the first derivative of <span class="docutils literal">polname_1</span>. It
 is allowed to issue <span class="docutils literal"><span class="pre">\PolDiff{f}{f}</span></span>, effectively replacing <span class="docutils literal">f</span>
@@ -2992,7 +2579,7 @@
 </blockquote>
 </div>
 <div class="section" id="poldiff-n-polname-1-polname-2">
-<span id="poldiff-n"></span><h2><a class="toc-backref" href="#id132"><span class="docutils literal"><span class="pre">\PolDiff[N]{<polname_1>}{<polname_2>}</span></span></a></h2>
+<span id="poldiff-n"></span><h2><a class="toc-backref" href="#id123"><span class="docutils literal"><span class="pre">\PolDiff[N]{<polname_1>}{<polname_2>}</span></span></a></h2>
 <blockquote>
 <p>This sets <span class="docutils literal">polname_2</span> to the <span class="docutils literal">N</span>-th derivative of <span class="docutils literal">polname_1</span>.
 Identical arguments is allowed. With <span class="docutils literal">N=0</span>, same effect as
@@ -3001,7 +2588,7 @@
 </blockquote>
 </div>
 <div class="section" id="polantidiff-polname-1-polname-2">
-<span id="polantidiff"></span><h2><a class="toc-backref" href="#id133"><span class="docutils literal"><span class="pre">\PolAntiDiff{<polname_1>}{<polname_2>}</span></span></a></h2>
+<span id="polantidiff"></span><h2><a class="toc-backref" href="#id124"><span class="docutils literal"><span class="pre">\PolAntiDiff{<polname_1>}{<polname_2>}</span></span></a></h2>
 <blockquote>
 <p>This sets <span class="docutils literal">polname_2</span> to the primitive of <span class="docutils literal">polname_1</span> vanishing
 at zero.</p>
@@ -3010,7 +2597,7 @@
 </blockquote>
 </div>
 <div class="section" id="polantidiff-n-polname-1-polname-2">
-<span id="polantidiff-n"></span><h2><a class="toc-backref" href="#id134"><span class="docutils literal"><span class="pre">\PolAntiDiff[N]{<polname_1>}{<polname_2>}</span></span></a></h2>
+<span id="polantidiff-n"></span><h2><a class="toc-backref" href="#id125"><span class="docutils literal"><span class="pre">\PolAntiDiff[N]{<polname_1>}{<polname_2>}</span></span></a></h2>
 <blockquote>
 <p>This sets <span class="docutils literal">polname_2</span> to the result of <span class="docutils literal">N</span> successive integrations on
 <span class="docutils literal">polname_1</span>. With negative <span class="docutils literal">N</span>, it switches to using <span class="docutils literal">\PolDiff</span>.</p>
@@ -3017,7 +2604,7 @@
 </blockquote>
 </div>
 <div class="section" id="poldivide-polname-1-polname-2-polname-q-polname-r">
-<span id="poldivide"></span><h2><a class="toc-backref" href="#id135"><span class="docutils literal"><span class="pre">\PolDivide{<polname_1>}{<polname_2>}{<polname_Q>}{<polname_R>}</span></span></a></h2>
+<span id="poldivide"></span><h2><a class="toc-backref" href="#id126"><span class="docutils literal"><span class="pre">\PolDivide{<polname_1>}{<polname_2>}{<polname_Q>}{<polname_R>}</span></span></a></h2>
 <blockquote>
 <p>This sets <span class="docutils literal">polname_Q</span> and <span class="docutils literal">polname_R</span> to be the quotient and
 remainder in the Euclidean division of <span class="docutils literal">polname_1</span> by
@@ -3025,7 +2612,7 @@
 </blockquote>
 </div>
 <div class="section" id="polquo-polname-1-polname-2-polname-q">
-<span id="polquo"></span><h2><a class="toc-backref" href="#id136"><span class="docutils literal"><span class="pre">\PolQuo{<polname_1>}{<polname_2>}{<polname_Q>}</span></span></a></h2>
+<span id="polquo"></span><h2><a class="toc-backref" href="#id127"><span class="docutils literal"><span class="pre">\PolQuo{<polname_1>}{<polname_2>}{<polname_Q>}</span></span></a></h2>
 <blockquote>
 <p>This sets <span class="docutils literal">polname_Q</span> to be the quotient in the Euclidean division
 of <span class="docutils literal">polname_1</span> by <span class="docutils literal">polname_2</span>.</p>
@@ -3032,7 +2619,7 @@
 </blockquote>
 </div>
 <div class="section" id="polrem-polname-1-polname-2-polname-r">
-<span id="polrem"></span><h2><a class="toc-backref" href="#id137"><span class="docutils literal"><span class="pre">\PolRem{<polname_1>}{<polname_2>}{<polname_R>}</span></span></a></h2>
+<span id="polrem"></span><h2><a class="toc-backref" href="#id128"><span class="docutils literal"><span class="pre">\PolRem{<polname_1>}{<polname_2>}{<polname_R>}</span></span></a></h2>
 <blockquote>
 <p>This sets <span class="docutils literal">polname_R</span> to be the remainder in the Euclidean division
 of <span class="docutils literal">polname_1</span> by <span class="docutils literal">polname_2</span>.</p>
@@ -3039,7 +2626,7 @@
 </blockquote>
 </div>
 <div class="section" id="polgcd-polname-1-polname-2-polname-gcd">
-<span id="polgcd"></span><h2><a class="toc-backref" href="#id138"><span class="docutils literal"><span class="pre">\PolGCD{<polname_1>}{<polname_2>}{<polname_GCD>}</span></span></a></h2>
+<span id="polgcd"></span><h2><a class="toc-backref" href="#id129"><span class="docutils literal"><span class="pre">\PolGCD{<polname_1>}{<polname_2>}{<polname_GCD>}</span></span></a></h2>
 <blockquote>
 <p>This sets <span class="docutils literal">polname_GCD</span> to be the (monic) GCD of <span class="docutils literal">polname_1</span>
 and <span class="docutils literal">polname_2</span>.  It is a unitary polynomial except if both
@@ -3049,7 +2636,7 @@
 </div>
 </div>
 <div class="section" id="expandable-macros">
-<h1><a class="toc-backref" href="#id139">Expandable macros</a></h1>
+<h1><a class="toc-backref" href="#id130">Expandable macros</a></h1>
 <div class="admonition note">
 <p class="admonition-title">Note</p>
 <p>At <span class="docutils literal">0.8</span> <span class="docutils literal">polexpr</span> is usable with Plain TeX and not only with
@@ -3061,7 +2648,7 @@
 <span class="docutils literal">\PolToFloatExpr</span> which need a <span class="docutils literal">\write</span>, <span class="docutils literal">\edef</span> or a
 <span class="docutils literal"><span class="pre">\csname...\endcsname</span></span> context.</p>
 <div class="section" id="poltoexpr-pol-expr">
-<span id="poltoexpr"></span><h2><a class="toc-backref" href="#id140"><span class="docutils literal"><span class="pre">\PolToExpr{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
+<span id="poltoexpr"></span><h2><a class="toc-backref" href="#id131"><span class="docutils literal"><span class="pre">\PolToExpr{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
 <blockquote>
 <p>Produces expandably <a class="footnote-reference brackets" href="#id26" id="id25">4</a> the string <span class="docutils literal"><span class="pre">coeff_N*x^N+...</span></span>, i.e. the
 polynomial is using descending powers.</p>
@@ -3072,19 +2659,17 @@
 </dd>
 </dl>
 <p>Since <span class="docutils literal">0.8</span> the input is not restricted to be a polynomial name but
-is allowed to be an arbitrary expression (where by default the
-letter <span class="docutils literal">x</span> is recognized as the indeterminate; see
-<a class="reference internal" href="#poltoexprinvar">\PolToExprInVar</a>).</p>
-<p>The default output (which also by default uses the letter <span class="docutils literal">x</span> and is
-completely configurable, see in particular <a class="reference internal" href="#poltoexprvar">\PolToExprVar</a>) is
-compatible with both</p>
+is allowed to be an arbitrary expression.  Then <span class="docutils literal">x</span> is expected as
+indeterminate but this can be customized via <a class="reference internal" href="#poltoexprinvar">\PolToExprInVar</a>.</p>
+<p>The output uses the letter <span class="docutils literal">x</span> by default, this is customizable
+via <a class="reference internal" href="#poltoexprvar">\PolToExprVar</a>.  The default output is compatible both with</p>
 <ul class="simple">
 <li><p>the Maple's input format,</p></li>
 <li><p>and the PSTricks <span class="docutils literal">\psplot[algebraic]</span> input format.</p></li>
 </ul>
-<p>Attention that it is not compatible with Python, but see
-<a class="reference internal" href="#poltoexprcaret">\PolToExprCaret</a> in this regard.</p>
-<p>It has the following characteristics:</p>
+<p>Attention that it is not compatible with Python, see further
+<a class="reference internal" href="#poltoexprcaret">\PolToExprCaret</a> in this context.</p>
+<p>The following applies:</p>
 <ul class="simple">
 <li><p>vanishing coefficients are skipped (issue <span class="docutils literal">\poltoexpralltrue</span> to
 override this and produce output such as <span class="docutils literal">x^3+0*x^2+0*x^1+0</span>),</p></li>
@@ -3106,15 +2691,16 @@
 redefinition must maintain the expandability property.</p>
 </blockquote>
 <div class="section" id="id27">
-<span id="poltoexprvar"></span><h3><a class="toc-backref" href="#id141"><span class="docutils literal">\PolToExprVar</span></a></h3>
+<span id="poltoexprvar"></span><h3><a class="toc-backref" href="#id132"><span class="docutils literal">\PolToExprVar</span></a></h3>
 <blockquote>
-<p>Defaults to <span class="docutils literal">x</span>. The letter used in input.</p>
+<p>Defaults to <span class="docutils literal">x</span>. The letter used in the macro output.</p>
 </blockquote>
 </div>
 <div class="section" id="poltoexprinvar">
-<h3><a class="toc-backref" href="#id142"><span class="docutils literal">\PolToExprInVar</span></a></h3>
+<h3><a class="toc-backref" href="#id133"><span class="docutils literal">\PolToExprInVar</span></a></h3>
 <blockquote>
-<p>Defaults to <span class="docutils literal">x</span>: the letter used as the polynomial indeterminate.</p>
+<p>Defaults to <span class="docutils literal">x</span>: the letter used as the polynomial indeterminate
+in the macro input.</p>
 <p>Recall that declared polynomials are more efficiently used in
 algebraic expressions without the <span class="docutils literal">(x)</span>, i.e. <span class="docutils literal">P*Q</span> is better
 than <span class="docutils literal"><span class="pre">P(x)*Q(x)</span></span>.  Thus the input, even if an expression, does not
@@ -3123,13 +2709,13 @@
 </blockquote>
 </div>
 <div class="section" id="id28">
-<span id="poltoexprtimes"></span><h3><a class="toc-backref" href="#id143"><span class="docutils literal">\PolToExprTimes</span></a></h3>
+<span id="poltoexprtimes"></span><h3><a class="toc-backref" href="#id134"><span class="docutils literal">\PolToExprTimes</span></a></h3>
 <blockquote>
 <p>Defaults to <span class="docutils literal">*</span>.</p>
 </blockquote>
 </div>
 <div class="section" id="poltoexprcaret">
-<h3><a class="toc-backref" href="#id144"><span class="docutils literal">\PolToExprCaret</span></a></h3>
+<h3><a class="toc-backref" href="#id135"><span class="docutils literal">\PolToExprCaret</span></a></h3>
 <blockquote>
 <p>Defaults to <span class="docutils literal">^</span> of catcode 12.  Set it to
 expand to  <span class="docutils literal">**</span> for Python compatible output.</p>
@@ -3137,7 +2723,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltoexprcmd-raw-coeff">
-<span id="poltoexprcmd"></span><h3><a class="toc-backref" href="#id145"><span class="docutils literal"><span class="pre">\PolToExprCmd{<raw_coeff>}</span></span></a></h3>
+<span id="poltoexprcmd"></span><h3><a class="toc-backref" href="#id136"><span class="docutils literal"><span class="pre">\PolToExprCmd{<raw_coeff>}</span></span></a></h3>
 <blockquote>
 <p>Defaults to <span class="docutils literal"><span class="pre">\xintPRaw{\xintRawWithZeros{#1}}</span></span>.</p>
 <p>This means that the coefficient value is printed-out as a fraction
@@ -3156,7 +2742,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltoexproneterm-raw-coeff-exponent">
-<span id="poltoexproneterm"></span><h3><a class="toc-backref" href="#id146"><span class="docutils literal"><span class="pre">\PolToExprOneTerm{<raw_coeff>}{<exponent>}</span></span></a></h3>
+<span id="poltoexproneterm"></span><h3><a class="toc-backref" href="#id137"><span class="docutils literal"><span class="pre">\PolToExprOneTerm{<raw_coeff>}{<exponent>}</span></span></a></h3>
 <blockquote>
 <p>This is the macro which from the coefficient and the exponent
 produces the corresponding term in output, such as <span class="docutils literal">2/3*x^7</span>.</p>
@@ -3166,13 +2752,13 @@
 </blockquote>
 </div>
 <div class="section" id="poltoexpronetermstylea-raw-coeff-exponent">
-<span id="poltoexpronetermstylea"></span><h3><a class="toc-backref" href="#id147"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{<raw_coeff>}{<exponent>}</span></span></a></h3>
+<span id="poltoexpronetermstylea"></span><h3><a class="toc-backref" href="#id138"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{<raw_coeff>}{<exponent>}</span></span></a></h3>
 <blockquote>
 <p>This holds the default package meaning of <span class="docutils literal">\PolToExprOneTerm</span>.</p>
 </blockquote>
 </div>
 <div class="section" id="poltoexpronetermstyleb-raw-coeff-exponent">
-<span id="poltoexpronetermstyleb"></span><h3><a class="toc-backref" href="#id148"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{<raw_coeff>}{<exponent>}</span></span></a></h3>
+<span id="poltoexpronetermstyleb"></span><h3><a class="toc-backref" href="#id139"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{<raw_coeff>}{<exponent>}</span></span></a></h3>
 <blockquote>
 <p>This holds an alternative meaning, which puts the fractional part of
 a coefficient after the monomial, i.e. like this:</p>
@@ -3185,7 +2771,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltoexprtermprefix-raw-coeff">
-<span id="poltoexprtermprefix"></span><h3><a class="toc-backref" href="#id149"><span class="docutils literal"><span class="pre">\PolToExprTermPrefix{<raw_coeff>}</span></span></a></h3>
+<span id="poltoexprtermprefix"></span><h3><a class="toc-backref" href="#id140"><span class="docutils literal"><span class="pre">\PolToExprTermPrefix{<raw_coeff>}</span></span></a></h3>
 <blockquote>
 <p>It receives as argument the coefficient.  Its default behaviour is
 to produce a <span class="docutils literal">+</span> if the coefficient is positive, which will thus
@@ -3196,7 +2782,7 @@
 </div>
 </div>
 <div class="section" id="poltofloatexpr-pol-expr">
-<span id="poltofloatexpr"></span><h2><a class="toc-backref" href="#id150"><span class="docutils literal"><span class="pre">\PolToFloatExpr{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
+<span id="poltofloatexpr"></span><h2><a class="toc-backref" href="#id141"><span class="docutils literal"><span class="pre">\PolToFloatExpr{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
 <blockquote>
 <p>Similar to <a class="reference internal" href="#poltoexpr-pol-expr">\PolToExpr{<pol. expr.>}</a> but using
 <a class="reference internal" href="#poltofloatexprcmd-raw-coeff">\PolToFloatExprCmd{<raw_coeff>}</a> which by default rounds and
@@ -3213,7 +2799,7 @@
 <p>Extended at <span class="docutils literal">0.8</span> to accept general expressions as input.</p>
 </blockquote>
 <div class="section" id="poltofloatexproneterm-raw-coeff-exponent">
-<span id="poltofloatexproneterm"></span><h3><a class="toc-backref" href="#id151"><span class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{<raw_coeff>}{<exponent>}</span></span></a></h3>
+<span id="poltofloatexproneterm"></span><h3><a class="toc-backref" href="#id142"><span class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{<raw_coeff>}{<exponent>}</span></span></a></h3>
 <blockquote>
 <p>Similar to <a class="reference internal" href="#poltoexproneterm-raw-coeff-exponent">\PolToExprOneTerm{<raw_coeff>}{<exponent>}</a>. But does not treat
 especially coefficients equal to plus or minus one.</p>
@@ -3220,7 +2806,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltofloatexprcmd-raw-coeff">
-<span id="poltofloatexprcmd"></span><h3><a class="toc-backref" href="#id152"><span class="docutils literal"><span class="pre">\PolToFloatExprCmd{<raw_coeff>}</span></span></a></h3>
+<span id="poltofloatexprcmd"></span><h3><a class="toc-backref" href="#id143"><span class="docutils literal"><span class="pre">\PolToFloatExprCmd{<raw_coeff>}</span></span></a></h3>
 <blockquote>
 <p>The one-argument macro used by <span class="docutils literal">\PolToFloatExprOneTerm</span>.
 It defaults to <span class="docutils literal"><span class="pre">\xintPFloat{#1}</span></span>, which trims trailing
@@ -3230,7 +2816,7 @@
 </div>
 </div>
 <div class="section" id="id30">
-<span id="id29"></span><h2><a class="toc-backref" href="#id153"><span class="docutils literal"><span class="pre">\PolToExpr*{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
+<span id="id29"></span><h2><a class="toc-backref" href="#id144"><span class="docutils literal"><span class="pre">\PolToExpr*{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
 <blockquote>
 <p>Ascending powers: <span class="docutils literal"><span class="pre">coeff_0+coeff_1*x+coeff_2*x^2+...</span></span>.</p>
 <p>Extended at <span class="docutils literal">0.8</span> to accept general expressions as input.</p>
@@ -3239,7 +2825,7 @@
 </blockquote>
 </div>
 <div class="section" id="id32">
-<span id="id31"></span><h2><a class="toc-backref" href="#id154"><span class="docutils literal"><span class="pre">\PolToFloatExpr*{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
+<span id="id31"></span><h2><a class="toc-backref" href="#id145"><span class="docutils literal"><span class="pre">\PolToFloatExpr*{<pol.</span> <span class="pre">expr.>}</span></span></a></h2>
 <blockquote>
 <p>Ascending powers.</p>
 <p>Extended at <span class="docutils literal">0.8</span> to accept general expressions as input.</p>
@@ -3246,11 +2832,11 @@
 </blockquote>
 </div>
 <div class="section" id="polnthcoeff-polname-index">
-<span id="polnthcoeff"></span><h2><a class="toc-backref" href="#id155"><span class="docutils literal"><span class="pre">\PolNthCoeff{<polname>}{<index>}</span></span></a></h2>
+<span id="polnthcoeff"></span><h2><a class="toc-backref" href="#id146"><span class="docutils literal"><span class="pre">\PolNthCoeff{<polname>}{<index>}</span></span></a></h2>
 <blockquote>
 <p>It expands to the raw <span class="docutils literal">N</span>-th coefficient (<span class="docutils literal">N=0</span> corresponds to
 the constant coefficient).  If <span class="docutils literal">N</span> is out of range, zero (in its
-default <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> format <span class="docutils literal">0/1[0]</span>) is returned.</p>
+default <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> format <span class="docutils literal">0/1[0]</span>) is returned.</p>
 <p>Negative indices <span class="docutils literal"><span class="pre">N=-1</span></span>, <span class="docutils literal"><span class="pre">-2</span></span>, ... return the leading
 coefficient, sub-leading coefficient, ..., and finally <span class="docutils literal">0/1[0]</span>
 for <span class="docutils literal"><span class="pre">N<-1-degree</span></span>.</p>
@@ -3257,13 +2843,13 @@
 </blockquote>
 </div>
 <div class="section" id="polleadingcoeff-polname">
-<span id="polleadingcoeff"></span><h2><a class="toc-backref" href="#id156"><span class="docutils literal"><span class="pre">\PolLeadingCoeff{<polname>}</span></span></a></h2>
+<span id="polleadingcoeff"></span><h2><a class="toc-backref" href="#id147"><span class="docutils literal"><span class="pre">\PolLeadingCoeff{<polname>}</span></span></a></h2>
 <blockquote>
 <p>Expands to the leading coefficient.</p>
 </blockquote>
 </div>
 <div class="section" id="poldegree-polname">
-<span id="poldegree"></span><h2><a class="toc-backref" href="#id157"><span class="docutils literal"><span class="pre">\PolDegree{<polname>}</span></span></a></h2>
+<span id="poldegree"></span><h2><a class="toc-backref" href="#id148"><span class="docutils literal"><span class="pre">\PolDegree{<polname>}</span></span></a></h2>
 <blockquote>
 <p>It expands to the degree. This is <span class="docutils literal"><span class="pre">-1</span></span> if zero polynomial but this
 may change in future. Should it then expand to <span class="docutils literal"><span class="pre">-\infty</span></span> ?</p>
@@ -3270,7 +2856,7 @@
 </blockquote>
 </div>
 <div class="section" id="policontent-polname">
-<span id="policontent"></span><h2><a class="toc-backref" href="#id158"><span class="docutils literal"><span class="pre">\PolIContent{<polname>}</span></span></a></h2>
+<span id="policontent"></span><h2><a class="toc-backref" href="#id149"><span class="docutils literal"><span class="pre">\PolIContent{<polname>}</span></span></a></h2>
 <blockquote>
 <p>It expands to the contents of the polynomial, i.e. to the positive
 fraction such that dividing by this fraction produces a polynomial
@@ -3279,7 +2865,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltolist-polname">
-<span id="poltolist"></span><h2><a class="toc-backref" href="#id159"><span class="docutils literal"><span class="pre">\PolToList{<polname>}</span></span></a></h2>
+<span id="poltolist"></span><h2><a class="toc-backref" href="#id150"><span class="docutils literal"><span class="pre">\PolToList{<polname>}</span></span></a></h2>
 <blockquote>
 <p>Expands to <span class="docutils literal"><span class="pre">{coeff_0}{coeff_1}...{coeff_N}</span></span> with <span class="docutils literal">N</span> = degree, and
 <span class="docutils literal">coeff_N</span> the leading coefficient
@@ -3288,7 +2874,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltocsv-polname">
-<span id="poltocsv"></span><h2><a class="toc-backref" href="#id160"><span class="docutils literal"><span class="pre">\PolToCSV{<polname>}</span></span></a></h2>
+<span id="poltocsv"></span><h2><a class="toc-backref" href="#id151"><span class="docutils literal"><span class="pre">\PolToCSV{<polname>}</span></span></a></h2>
 <blockquote>
 <p>Expands to <span class="docutils literal">coeff_0, coeff_1, coeff_2, <span class="pre">.....,</span> coeff_N</span>, starting
 with constant term and ending with leading coefficient. Converse
@@ -3296,7 +2882,7 @@
 </blockquote>
 </div>
 <div class="section" id="poleval-polname-atexpr-num-expr">
-<span id="polevalatexpr"></span><h2><a class="toc-backref" href="#id161"><span class="docutils literal"><span class="pre">\PolEval{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h2>
+<span id="polevalatexpr"></span><h2><a class="toc-backref" href="#id152"><span class="docutils literal"><span class="pre">\PolEval{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h2>
 <blockquote>
 <p>Same output as
 <span class="docutils literal">\xinteval{polname(numerical expression)}</span>.</p>
@@ -3303,28 +2889,28 @@
 </blockquote>
 </div>
 <div class="section" id="poleval-polname-at-value">
-<span id="polevalat"></span><h2><a class="toc-backref" href="#id162"><span class="docutils literal"><span class="pre">\PolEval{<polname>}\At{<value>}</span></span></a></h2>
+<span id="polevalat"></span><h2><a class="toc-backref" href="#id153"><span class="docutils literal"><span class="pre">\PolEval{<polname>}\At{<value>}</span></span></a></h2>
 <blockquote>
 <p>Evaluates the polynomial at the given value which must be in (or
-expand to) a format acceptable to the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> macros.</p>
+expand to) a format acceptable to the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros.</p>
 </blockquote>
 </div>
 <div class="section" id="polevalreduced-polname-atexpr-num-expr">
-<span id="polevalreducedatexpr"></span><h2><a class="toc-backref" href="#id163"><span class="docutils literal"><span class="pre">\PolEvalReduced{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h2>
+<span id="polevalreducedatexpr"></span><h2><a class="toc-backref" href="#id154"><span class="docutils literal"><span class="pre">\PolEvalReduced{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h2>
 <blockquote>
 <p>Same output as <span class="docutils literal">\xinteval{reduce(polname(numerical <span class="pre">expression))}</span></span>.</p>
 </blockquote>
 </div>
 <div class="section" id="polevalreduced-polname-at-value">
-<span id="polevalreducedat"></span><h2><a class="toc-backref" href="#id164"><span class="docutils literal"><span class="pre">\PolEvalReduced{<polname>}\At{<value>}</span></span></a></h2>
+<span id="polevalreducedat"></span><h2><a class="toc-backref" href="#id155"><span class="docutils literal"><span class="pre">\PolEvalReduced{<polname>}\At{<value>}</span></span></a></h2>
 <blockquote>
 <p>Evaluates the polynomial at the value which must be in (or expand
-to) a format acceptable to the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> macros, and outputs an
+to) a format acceptable to the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros, and outputs an
 irreducible fraction.</p>
 </blockquote>
 </div>
 <div class="section" id="polfloateval-polname-atexpr-num-expr">
-<span id="polfloatevalatexpr"></span><h2><a class="toc-backref" href="#id165"><span class="docutils literal"><span class="pre">\PolFloatEval{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h2>
+<span id="polfloatevalatexpr"></span><h2><a class="toc-backref" href="#id156"><span class="docutils literal"><span class="pre">\PolFloatEval{<polname>}\AtExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h2>
 <blockquote>
 <p>Same output as <span class="docutils literal">\xintfloateval{polname(numerical expression)}</span>.</p>
 <div class="admonition attention">
@@ -3338,22 +2924,22 @@
 <pre class="literal-block">\xintfloateval{3.27*\xintexpr f(2.53)\relax^2}</pre>
 <dl class="footnote brackets">
 <dt class="label" id="id34"><span class="brackets"><a class="fn-backref" href="#id33">5</a></span></dt>
-<dd><p>Cf. <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> documentation about nested expressions.</p>
+<dd><p>Cf. <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation about nested expressions.</p>
 </dd>
 </dl>
 </blockquote>
 </div>
 <div class="section" id="polfloateval-polname-at-value">
-<span id="polfloatevalat"></span><h2><a class="toc-backref" href="#id166"><span class="docutils literal"><span class="pre">\PolFloatEval{<polname>}\At{<value>}</span></span></a></h2>
+<span id="polfloatevalat"></span><h2><a class="toc-backref" href="#id157"><span class="docutils literal"><span class="pre">\PolFloatEval{<polname>}\At{<value>}</span></span></a></h2>
 <blockquote>
 <p>Evaluates the polynomial at the value which must be in (or expand
-to) a format acceptable to the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> macros.</p>
+to) a format acceptable to the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros.</p>
 </blockquote>
 </div>
 <div class="section" id="expandable-macros-related-to-the-root-localization-routines">
-<h2><a class="toc-backref" href="#id167">Expandable macros related to the root localization routines</a></h2>
+<h2><a class="toc-backref" href="#id158">Expandable macros related to the root localization routines</a></h2>
 <div class="section" id="polsturmchainlength-sturmname">
-<span id="polsturmchainlength"></span><h3><a class="toc-backref" href="#id168"><span class="docutils literal"><span class="pre">\PolSturmChainLength{<sturmname>}</span></span></a></h3>
+<span id="polsturmchainlength"></span><h3><a class="toc-backref" href="#id159"><span class="docutils literal"><span class="pre">\PolSturmChainLength{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>Returns the integer <span class="docutils literal">N</span> such that <span class="docutils literal">sturmname_N</span> is the last one
 in the Sturm chain <span class="docutils literal">sturmname_0</span>, <span class="docutils literal">sturmname_1</span>, ...</p>
@@ -3361,7 +2947,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmifzeroexactlyknown-sturmname-index-t-f">
-<span id="polsturmifzeroexactlyknown"></span><h3><a class="toc-backref" href="#id169"><span class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{<sturmname>}{<index>}{T}{F}</span></span></a></h3>
+<span id="polsturmifzeroexactlyknown"></span><h3><a class="toc-backref" href="#id160"><span class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{<sturmname>}{<index>}{T}{F}</span></span></a></h3>
 <blockquote>
 <p>Executes <span class="docutils literal">T</span> if the <span class="docutils literal">index</span>-th interval reduces to a singleton,
 i.e. the root is known exactly, else <span class="docutils literal">F</span>.</p>
@@ -3368,7 +2954,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmisolatedzeroleft-sturmname-index">
-<span id="polsturmisolatedzeroleft"></span><h3><a class="toc-backref" href="#id170"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{<sturmname>}{<index>}</span></span></a></h3>
+<span id="polsturmisolatedzeroleft"></span><h3><a class="toc-backref" href="#id161"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{<sturmname>}{<index>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the left end-point for the <span class="docutils literal">index</span>-th interval, as
 computed by some earlier <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{<sturmname>}</a>.</p>
@@ -3382,7 +2968,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmisolatedzeroright-sturmname-index">
-<span id="polsturmisolatedzeroright"></span><h3><a class="toc-backref" href="#id171"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{<sturmname>}{<index>}</span></span></a></h3>
+<span id="polsturmisolatedzeroright"></span><h3><a class="toc-backref" href="#id162"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{<sturmname>}{<index>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the right end-point for the <span class="docutils literal">index</span>-th interval as
 computed by some earlier <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{<sturmname>}</a> and
@@ -3391,7 +2977,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmisolatedzeromultiplicity-sturmname-index">
-<span id="polsturmisolatedzeromultiplicity"></span><h3><a class="toc-backref" href="#id172"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{<sturmname>}{<index>}</span></span></a></h3>
+<span id="polsturmisolatedzeromultiplicity"></span><h3><a class="toc-backref" href="#id163"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{<sturmname>}{<index>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the multiplicity of the unique root contained in the
 <span class="docutils literal">index</span>-th interval.</p>
@@ -3399,12 +2985,11 @@
 <p class="admonition-title">Attention!</p>
 <p>A prior execution of <a class="reference internal" href="#id15">\PolSturmIsolateZeros*{<sturmname>}</a> is mandatory.</p>
 </div>
-<p>See <a class="reference internal" href="#the-degree-nine-polynomial-with-0-99-0-999-0-9999-as-triple-roots">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple
-roots</a> for an example of use.</p>
+<p>See <span class="docutils literal">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</span> in <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span>.</p>
 </blockquote>
 </div>
 <div class="section" id="polsturmnbofisolatedzeros-sturmname">
-<span id="polsturmnbofisolatedzeros"></span><h3><a class="toc-backref" href="#id173"><span class="docutils literal"><span class="pre">\PolSturmNbOfIsolatedZeros{<sturmname>}</span></span></a></h3>
+<span id="polsturmnbofisolatedzeros"></span><h3><a class="toc-backref" href="#id164"><span class="docutils literal"><span class="pre">\PolSturmNbOfIsolatedZeros{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the number of real roots of the polynomial
 <span class="docutils literal"><sturmname>_0</span>, i.e. the number of distinct real roots of the
@@ -3421,11 +3006,11 @@
 </div>
 </div>
 <div class="section" id="polsturmnbofrootsof-sturmname-lessthanorequalto-value">
-<h3><a class="toc-backref" href="#id174"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></span></a></h3>
+<h3><a class="toc-backref" href="#id165"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the number of distinct roots (of the polynomial used to
 create the Sturm chain) less than or equal to the <span class="docutils literal">value</span> (i.e. a
-number of fraction recognizable by the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> macros).</p>
+number of fraction recognizable by the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros).</p>
 <div class="admonition attention">
 <p class="admonition-title">Attention!</p>
 <p><a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{<sturmname>}</a> must have been executed
@@ -3437,7 +3022,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-num-expr">
-<span id="polsturmnbofrootsof"></span><h3><a class="toc-backref" href="#id175"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h3>
+<span id="polsturmnbofrootsof"></span><h3><a class="toc-backref" href="#id166"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the number of distinct roots (of the polynomial
 used to create the Sturm chain) which are less than or equal to the
@@ -3450,7 +3035,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value">
-<h3><a class="toc-backref" href="#id176"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></span></a></h3>
+<h3><a class="toc-backref" href="#id167"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the number counted with multiplicities of the roots (of
 the polynomial used to create the Sturm chain) which are less than
@@ -3463,7 +3048,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmnbwithmultofrootsof-sturmname-lessthanorequaltoexpr-num-expr">
-<h3><a class="toc-backref" href="#id177"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h3>
+<h3><a class="toc-backref" href="#id168"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num.</span> <span class="pre">expr.>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the total number of roots (counted with multiplicities)
 which are less than or equal to the given <span class="docutils literal">expression</span>.</p>
@@ -3475,7 +3060,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmnbofrationalroots-sturmname">
-<h3><a class="toc-backref" href="#id178"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRoots{<sturmname>}</span></span></a></h3>
+<h3><a class="toc-backref" href="#id169"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRoots{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the number of rational roots (without multiplicities).</p>
 <div class="admonition attention">
@@ -3486,7 +3071,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmnbofrationalrootswithmultiplicities-sturmname">
-<h3><a class="toc-backref" href="#id179"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRootsWithMultiplicities{<sturmname>}</span></span></a></h3>
+<h3><a class="toc-backref" href="#id170"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRootsWithMultiplicities{<sturmname>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the number of rational roots (counted with multiplicities).</p>
 <div class="admonition attention">
@@ -3497,7 +3082,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmrationalroot-sturmname-k">
-<h3><a class="toc-backref" href="#id180"><span class="docutils literal"><span class="pre">\PolSturmRationalRoot{<sturmname>}{<k>}</span></span></a></h3>
+<h3><a class="toc-backref" href="#id171"><span class="docutils literal"><span class="pre">\PolSturmRationalRoot{<sturmname>}{<k>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the k-th rational root.  They are enumerated from left to
 right starting at index value <span class="docutils literal">1</span>.</p>
@@ -3509,7 +3094,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmrationalrootindex-sturmname-k">
-<h3><a class="toc-backref" href="#id181"><span class="docutils literal"><span class="pre">\PolSturmRationalRootIndex{<sturmname>}{<k>}</span></span></a></h3>
+<h3><a class="toc-backref" href="#id172"><span class="docutils literal"><span class="pre">\PolSturmRationalRootIndex{<sturmname>}{<k>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the index of the <span class="docutils literal">k</span>th rational root as part of the
 ordered real roots (counted without multiplicities). So
@@ -3524,7 +3109,7 @@
 </blockquote>
 </div>
 <div class="section" id="polsturmrationalrootmultiplicity-sturmname-k">
-<h3><a class="toc-backref" href="#id182"><span class="docutils literal"><span class="pre">\PolSturmRationalRootMultiplicity{<sturmname>}{<k>}</span></span></a></h3>
+<h3><a class="toc-backref" href="#id173"><span class="docutils literal"><span class="pre">\PolSturmRationalRootMultiplicity{<sturmname>}{<k>}</span></span></a></h3>
 <blockquote>
 <p>Expands to the multiplicity of the <span class="docutils literal">k</span>th rational root.</p>
 <div class="admonition attention">
@@ -3535,14 +3120,14 @@
 </blockquote>
 </div>
 <div class="section" id="polintervalwidth-sturmname-index">
-<span id="polintervalwidth"></span><h3><a class="toc-backref" href="#id183"><span class="docutils literal"><span class="pre">\PolIntervalWidth{<sturmname>}{<index>}</span></span></a></h3>
+<span id="polintervalwidth"></span><h3><a class="toc-backref" href="#id174"><span class="docutils literal"><span class="pre">\PolIntervalWidth{<sturmname>}{<index>}</span></span></a></h3>
 <blockquote>
 <p>The <span class="docutils literal">10^E</span> width of the current <span class="docutils literal">index</span>-th root localization
-interval. Output is in <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> raw <span class="docutils literal">1/1[E]</span> format (if not zero).</p>
+interval. Output is in <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> raw <span class="docutils literal">1/1[E]</span> format (if not zero).</p>
 </blockquote>
 </div>
 <div class="section" id="expandable-macros-for-use-within-execution-of-polprintintervals">
-<h3><a class="toc-backref" href="#id184">Expandable macros for use within execution of <span class="docutils literal">\PolPrintIntervals</span></a></h3>
+<h3><a class="toc-backref" href="#id175">Expandable macros for use within execution of <span class="docutils literal">\PolPrintIntervals</span></a></h3>
 <p>These macros are for usage within custom user redefinitions of
 <a class="reference internal" href="#polprintintervalsknownroot">\PolPrintIntervalsKnownRoot</a>, <a class="reference internal" href="#polprintintervalsunknownroot">\PolPrintIntervalsUnknownRoot</a>, or
 in redefinitions of <a class="reference internal" href="#polprintintervalsprintexactzero">PolPrintIntervalsPrintExactZero</a> (used in the
@@ -3551,7 +3136,7 @@
 latter).</p>
 </div>
 <div class="section" id="polprintintervalsthevar">
-<h3><a class="toc-backref" href="#id185"><span class="docutils literal">\PolPrintIntervalsTheVar</span></a></h3>
+<h3><a class="toc-backref" href="#id176"><span class="docutils literal">\PolPrintIntervalsTheVar</span></a></h3>
 <blockquote>
 <p>Expands to the name (default <span class="docutils literal">Z</span>) used for representing the roots,
 which was passed as optional argument <span class="docutils literal">varname</span> to
@@ -3559,7 +3144,7 @@
 </blockquote>
 </div>
 <div class="section" id="polprintintervalstheindex">
-<h3><a class="toc-backref" href="#id186"><span class="docutils literal">\PolPrintIntervalsTheIndex</span></a></h3>
+<h3><a class="toc-backref" href="#id177"><span class="docutils literal">\PolPrintIntervalsTheIndex</span></a></h3>
 <blockquote>
 <p>Expands to the index of the considered interval (indexing starting
 at 1 for the leftmost interval).</p>
@@ -3566,7 +3151,7 @@
 </blockquote>
 </div>
 <div class="section" id="polprintintervalsthesturmname">
-<h3><a class="toc-backref" href="#id187"><span class="docutils literal">\PolPrintIntervalsTheSturmName</span></a></h3>
+<h3><a class="toc-backref" href="#id178"><span class="docutils literal">\PolPrintIntervalsTheSturmName</span></a></h3>
 <blockquote>
 <p>Expands to the argument which was passed as <span class="docutils literal"><sturmname></span> to
 <a class="reference internal" href="#polprintintervals-varname-sturmname">\PolPrintIntervals[<varname>]{<sturmname>}</a>.</p>
@@ -3573,7 +3158,7 @@
 </blockquote>
 </div>
 <div class="section" id="polprintintervalstheleftendpoint">
-<h3><a class="toc-backref" href="#id188"><span class="docutils literal">\PolPrintIntervalsTheLeftEndPoint</span></a></h3>
+<h3><a class="toc-backref" href="#id179"><span class="docutils literal">\PolPrintIntervalsTheLeftEndPoint</span></a></h3>
 <blockquote>
 <p>The left end point of the interval, as would be produced by
 <a class="reference internal" href="#polsturmisolatedzeroleft">\PolSturmIsolatedZeroLeft</a> if it was
@@ -3583,7 +3168,7 @@
 </blockquote>
 </div>
 <div class="section" id="polprintintervalstherightendpoint">
-<h3><a class="toc-backref" href="#id189"><span class="docutils literal">\PolPrintIntervalsTheRightEndPoint</span></a></h3>
+<h3><a class="toc-backref" href="#id180"><span class="docutils literal">\PolPrintIntervalsTheRightEndPoint</span></a></h3>
 <blockquote>
 <p>The right end point of the interval, as would be produced by
 <a class="reference internal" href="#polsturmisolatedzeroright">\PolSturmIsolatedZeroRight</a> for
@@ -3591,7 +3176,7 @@
 </blockquote>
 </div>
 <div class="section" id="polprintintervalsthemultiplicity">
-<h3><a class="toc-backref" href="#id190"><span class="docutils literal">\PolPrintIntervalsTheMultiplicity</span></a></h3>
+<h3><a class="toc-backref" href="#id181"><span class="docutils literal">\PolPrintIntervalsTheMultiplicity</span></a></h3>
 <blockquote>
 <p>The multiplicity of the unique root within the interval of index
 <a class="reference internal" href="#polprintintervalstheindex">\PolPrintIntervalsTheIndex</a>. Makes sense only if the starred (or
@@ -3601,11 +3186,11 @@
 </div>
 </div>
 <div class="section" id="booleans-with-default-setting-as-indicated">
-<h1><a class="toc-backref" href="#id191">Booleans (with default setting as indicated)</a></h1>
+<h1><a class="toc-backref" href="#id182">Booleans (with default setting as indicated)</a></h1>
 <div class="section" id="xintverbosefalse">
-<h2><a class="toc-backref" href="#id192"><span class="docutils literal">\xintverbosefalse</span></a></h2>
+<h2><a class="toc-backref" href="#id183"><span class="docutils literal">\xintverbosefalse</span></a></h2>
 <blockquote>
-<p>This is actually an <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> configuration. Setting it to
+<p>This is actually an <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> configuration. Setting it to
 <span class="docutils literal">true</span> triggers the writing of information to the log when new
 polynomial or scalar variables are defined.</p>
 <div class="admonition caution">
@@ -3616,7 +3201,7 @@
 </blockquote>
 </div>
 <div class="section" id="polnewpolverbosefalse">
-<h2><a class="toc-backref" href="#id193"><span class="docutils literal">\polnewpolverbosefalse</span></a></h2>
+<h2><a class="toc-backref" href="#id184"><span class="docutils literal">\polnewpolverbosefalse</span></a></h2>
 <blockquote>
 <p>When <span class="docutils literal">\poldef</span> is used, both a variable and a function are
 defined.  The default <span class="docutils literal">\polnewpolverbosefalse</span> setting suppresses
@@ -3636,7 +3221,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltypesetallfalse">
-<h2><a class="toc-backref" href="#id194"><span class="docutils literal">\poltypesetallfalse</span></a></h2>
+<h2><a class="toc-backref" href="#id185"><span class="docutils literal">\poltypesetallfalse</span></a></h2>
 <blockquote>
 <p>If <span class="docutils literal">true</span>, <a class="reference internal" href="#poltypeset">\PolTypeset</a> will also typeset the vanishing
 coefficients.</p>
@@ -3643,7 +3228,7 @@
 </blockquote>
 </div>
 <div class="section" id="poltoexprallfalse">
-<h2><a class="toc-backref" href="#id195"><span class="docutils literal">\poltoexprallfalse</span></a></h2>
+<h2><a class="toc-backref" href="#id186"><span class="docutils literal">\poltoexprallfalse</span></a></h2>
 <blockquote>
 <p>If <span class="docutils literal">true</span>, <a class="reference internal" href="#poltoexpr-pol-expr">\PolToExpr{<pol. expr.>}</a> and <a class="reference internal" href="#poltofloatexpr-pol-expr">\PolToFloatExpr{<pol. expr.>}</a> will
 also include the vanishing coefficients in their outputs.</p>
@@ -3651,9 +3236,9 @@
 </div>
 </div>
 <div class="section" id="utilies">
-<h1><a class="toc-backref" href="#id196">Utilies</a></h1>
+<h1><a class="toc-backref" href="#id187">Utilies</a></h1>
 <div class="section" id="poldectostring-decimal-number">
-<span id="poldectostring"></span><h2><a class="toc-backref" href="#id197"><span class="docutils literal">\PolDecToString{decimal number}</span></a></h2>
+<span id="poldectostring"></span><h2><a class="toc-backref" href="#id188"><span class="docutils literal">\PolDecToString{decimal number}</span></a></h2>
 <blockquote>
 <p>This is a utility macro to print decimal numbers.  It is an alias
 for <span class="docutils literal">\xintDecToString</span>.</p>
@@ -3667,12 +3252,12 @@
 <span class="docutils literal"><span class="pre">\PolDecToString{\xintREZ{#1}}</span></span>.</p>
 <p>Attention that a.t.t.o.w. if the argument is for example <span class="docutils literal">1/5</span>, the
 macro does not identify that this is in fact a number with a finite
-decimal expansion and it outputs <span class="docutils literal">1/5</span>.  See current <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a>
+decimal expansion and it outputs <span class="docutils literal">1/5</span>.  See current <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>
 documentation.</p>
 </blockquote>
 </div>
 <div class="section" id="polexprsetup">
-<h2><a class="toc-backref" href="#id198"><span class="docutils literal">\polexprsetup</span></a></h2>
+<h2><a class="toc-backref" href="#id189"><span class="docutils literal">\polexprsetup</span></a></h2>
 <blockquote>
 <p>Serves to customize the package. Currently only two keys are
 recognized:</p>
@@ -3693,7 +3278,7 @@
 </div>
 </div>
 <div class="section" id="technicalities">
-<h1><a class="toc-backref" href="#id199">Technicalities</a></h1>
+<h1><a class="toc-backref" href="#id190">Technicalities</a></h1>
 <ul>
 <li><p>The catcode of the semi-colon is reset temporarily by <a class="reference internal" href="#poldef">\poldef</a> macro in case some other package (for example the French
 babel module) may have made it active. This will fail though if the
@@ -3700,7 +3285,7 @@
 whole thing was already part of a macro argument, in such cases one
 can use <a class="reference internal" href="#id8">\PolDef</a> rather. The colon in <span class="docutils literal">:=</span> may be
 active with no consequences.</p></li>
-<li><p>As a consequence of <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> addition and subtraction always using
+<li><p>As a consequence of <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> addition and subtraction always using
 least common multiples for the denominators, user-chosen common
 denominators survive additions and multiplications. For example, this:</p>
 <pre class="literal-block">\poldef P(x):= 1/2 + 2/2*x + 3/2*x^3 + 4/2*x^4;
@@ -3731,7 +3316,7 @@
 </ul>
 </div>
 <div class="section" id="change-log">
-<h1><a class="toc-backref" href="#id200">CHANGE LOG</a></h1>
+<h1><a class="toc-backref" href="#id191">CHANGE LOG</a></h1>
 <ul>
 <li><p>v0.1 (2018/01/11): initial release. Features:</p>
 <ul class="simple">
@@ -3910,7 +3495,7 @@
 <li><p>bug fixes:</p>
 <ul>
 <li><p><a class="reference internal" href="#polget-polname-fromarray-macro">\PolGet{<polname>}\fromarray\macro</a> crashed when <span class="docutils literal">\macro</span> was
-an <a class="reference external" href="http://www.ctan.org/pkg/xint">xinttools</a> array macro with no items. It now produces the zero
+an <a class="reference external" href="https://www.ctan.org/pkg/xint">xinttools</a> array macro with no items. It now produces the zero
 polynomial.</p></li>
 </ul>
 </li>
@@ -3922,14 +3507,13 @@
 will make available again the code producing the bona fide Sturm
 polynomials as used formerly.</p></li>
 <li><p>polynomials created from <a class="reference internal" href="#polfromcsv">\PolFromCSV</a> or <a class="reference internal" href="#polget">\PolGet</a>
-get their coefficients normalized via <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a>'s <span class="docutils literal">\xintRaw</span>.</p></li>
+get their coefficients normalized via <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>'s <span class="docutils literal">\xintRaw</span>.</p></li>
 </ul>
 </li>
 <li><p>experimental change:</p>
 <ul>
-<li><p>optional argument to <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a> (see <a class="reference internal" href="#the-degree-41-polynomial-with-2-1-9-1-8-0-0-1-1-9-2-as-roots">The
-degree 41 polynomial with -2, -1.9, -1.8, ..., 0, 0.1, ..., 1.9, 2
-as roots</a> for usage). It will presumably be replaced in future by
+<li><p>optional argument to <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a> (see <span class="docutils literal">The degree 41 polynomial with <span class="pre">-2,</span> <span class="pre">-1.9,</span> <span class="pre">-1.8,</span> <span class="pre">...,</span> 0, 0.1, <span class="pre">...,</span> 1.9, 2 as roots</span> in <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span>).
+It will presumably be replaced in future by
 an interval specification.</p></li>
 </ul>
 </li>
@@ -4124,7 +3708,7 @@
 variable.  This has allowed:</p>
 <ul>
 <li><p>to solve the reduced inter-operability problems between polexpr
-and <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> which arose as consequences to the deep <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> <span class="docutils literal">1.4</span>
+and <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> which arose as consequences to the deep <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <span class="docutils literal">1.4</span>
 evolution,</p></li>
 <li><p>to make available most of the functionality associated to
 expandable macros directly in the <span class="docutils literal">\xinteval</span> syntax as
@@ -4153,8 +3737,8 @@
 <li><p>Sadly, <span class="docutils literal">diff1()</span>, <span class="docutils literal">diff2()</span>,  <span class="docutils literal">diffn()</span> were broken
 for polynomials of degrees 8 or more, due to a typo and
 insufficient testing.</p></li>
-<li><p>The package should have (as documented) required <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> 1.4d
-but in practice it accepted to work with <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> 1.4c, whose
+<li><p>The package should have (as documented) required <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> 1.4d
+but in practice it accepted to work with <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> 1.4c, whose
 <span class="docutils literal">\xinteval</span> does not know how to "output" a polynomial.</p></li>
 <li><p>The definition of one of the two variants of <a class="reference internal" href="#polsturmnbofrootsof">\PolSturmNbOfRootsOf</a> was broken by an end-of-line space, left-over
 from mass conversion from LaTeX to TeX syntax.</p></li>
@@ -4178,7 +3762,7 @@
 </li>
 <li><p>improved:</p>
 <ul>
-<li><p>Some <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> functions such as <span class="docutils literal">rseq()</span> use the semi-colon,
+<li><p>Some <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> functions such as <span class="docutils literal">rseq()</span> use the semi-colon,
 and it was mentioned in the documentation that <a class="reference internal" href="#poldef">\poldef</a>
 will be confused by this and that inner semi-colons could be
 set within braces <span class="docutils literal">{;}</span> as a work-around.  It was not clear from
@@ -4187,12 +3771,12 @@
 not <a class="reference internal" href="#id8">\PolDef</a> needs the work-around.</p></li>
 </ul>
 </li>
-<li><p>track <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> <span class="docutils literal">1.4e</span> changes relative to powers.</p></li>
+<li><p>track <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <span class="docutils literal">1.4e</span> changes relative to powers.</p></li>
 </ul>
 </li>
 <li><p>v0.8.3 (2021/05/27)</p>
 <ul class="simple">
-<li><p>small internal update to track an <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> <span class="docutils literal">1.4h</span> change
+<li><p>small internal update to track an <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <span class="docutils literal">1.4h</span> change
 regarding handling of exceptions.  Will require this version at
 least on loading.</p></li>
 </ul>
@@ -4209,14 +3793,23 @@
 <li><p>bugfix: support for the <span class="docutils literal">intfrom()</span> function was in the code,
 but the declaration to the polynomial parser had not been done.</p></li>
 <li><p>track (belatedly) upstream deprecation of <span class="docutils literal">\xintSignedFrac</span> and
-<span class="docutils literal">\xintSignedFwOver</span> at <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> <span class="docutils literal">1.4g</span></p></li>
+<span class="docutils literal">\xintSignedFwOver</span> at <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <span class="docutils literal">1.4g</span></p></li>
 </ul>
 </li>
+<li><p>v0.8.6 (2022/01/09)</p>
+<ul class="simple">
+<li><p>separate <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span> from this reference documentation.</p></li>
+<li><p>minor improvement to the computation of a priori bounds on real roots.</p></li>
+<li><p>add <a class="reference internal" href="#polprintintervalsrowseparator">\PolPrintIntervalsRowSeparator</a> and allow usage of
+<span class="docutils literal">amsmath</span> environments in custom <a class="reference internal" href="#polprintintervalsbeginenv">\PolPrintIntervalsBeginEnv</a>
+and <a class="reference internal" href="#polprintintervalsendenv">\PolPrintIntervalsEndEnv</a>.</p></li>
 </ul>
+</li>
+</ul>
 </div>
 <div class="section" id="acknowledgments">
-<h1><a class="toc-backref" href="#id201">Acknowledgments</a></h1>
-<p>Thanks to Jürgen Gilg whose question about <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> usage for
+<h1><a class="toc-backref" href="#id192">Acknowledgments</a></h1>
+<p>Thanks to Jürgen Gilg whose question about <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> usage for
 differentiating polynomials was the initial trigger leading to this
 package, and to Jürgen Gilg and Thomas Söll for testing it on some
 concrete problems.</p>

Added: trunk/Master/texmf-dist/tex/generic/polexpr/polexpr-examples.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/polexpr/polexpr-examples.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/polexpr/polexpr-examples.tex	2022-01-10 21:27:44 UTC (rev 61559)
@@ -0,0 +1,881 @@
+% -*- sentence-end-double-space: t -*-
+\documentclass[a4paper,svgnames,dvipsnames,dvipdfmx]{article}
+\usepackage{geometry}
+\usepackage{shortvrb}
+\usepackage{xcolor}
+\usepackage{graphicx}
+\usepackage{polexpr}
+\usepackage{hyperref}
+\usepackage{bookmark}
+% \usepackage{amsmath}
+\usepackage{framed}
+\usepackage{newtxtext,newtxmath}
+\title{\pkg{polexpr} root localization examples}
+\author{Jean-François Burnol}
+\date{To access the reference documentation:\\
+% faut-il vraiment le ./ ?
+      \texttt{texdoc} \href{run:./polexpr.html}{polexpr.html}}
+%\usepackage{parskip}
+\MakeShortVerb{\|}
+
+% Note 25 juin 2021 et 8 janvier 2022 pour polexpr-examples.tex
+%
+% Ceci est extrait quasi verbatim de xint.dtx
+%
+% Le code est pour LaTeX, pas pour Plain TeX.
+% Prévu pour latex+dvipdfmx, et j'ai supprimé ajouts spécifiques pour
+% pdflatex/xetex/lualatex en ce qui concerne les couleurs et polices.
+%
+% Regarding latex+dvipdfmx, a document with many more usage
+% of everbatim* could run into color stack overflow problems
+% Refer to xint.dtx for how this problem is avoided there
+% via direct usage of \special rather than \color in the
+% \everbatimxprehook
+
+% verbatim macros and environments
+% ================================
+%
+% June 2013, then October 2014.
+% -----------------------------
+%
+\makeatletter
+\catcode`_ 11
+% some of my verbatim environments do not make the space active (\lverb e.g.). Then
+% \do at noligs must be modified, \char`#1 must be followed by a space token, else,
+% the `#1 expansion will swallow one space.
+\def\do at noligs #1{%
+  \catcode`#1\active
+  \begingroup
+     \lccode`~`#1\relax
+     \lowercase{%
+  \endgroup\def~{\leavevmode\kern\z@\char`#1 }}%
+}
+% \lowast
+% Pas forcément adapté à toutes les polices
+\def\lowast{\raisebox{-.25\height}{*}}
+\catcode`* 13
+\def\makestarlowast {\let*\lowast\catcode`\*\active}%
+\catcode`* 12
+
+
+%--- straight quotes, added (finally...) Nov 2, 2014
+%--- obsolete with use of newtxtt 1.05, late 2014
+\begingroup\makeatletter
+  \catcode`\'\active
+  \catcode`\`\active
+\@firstofone {\endgroup
+  \def\makequotesstraight{% assumes textcomp package
+% à propos textcomp est automatique avec pdflatex depuis Février 2020
+     \let`\textasciigrave
+     \let'\textquotesingle
+     \catcode39\active
+     \catcode96\active }%
+}
+
+% \verb
+% =====
+% Initially, June 2013, then Sep 9, 2014, and Oct 9-12 2014
+%
+% pour les short verb |...|
+
+\def\MicroFont{\ttfamily\makestarlowast\makequotesstraight}% default
+\def\verb
+{%
+  \relax \ifmmode\else\leavevmode\null\fi
+  \bgroup
+  \let\do\@makeother \dospecials
+  \@ifstar{\@sverb}% unused
+          {\MicroFont
+           \catcode 32 10 \endlinechar 32 % allows to fetch across line breaks
+           \frenchspacing
+           \@@jfverb}%
+}%
+% Note (Oct 12, 2014): in the improbable situation a newlinechar is
+% found in the ##1, \scantokens will convert this to an end of line in
+% its "write" phase, which will be then ignored in its "read" phase due
+% to \endlinechar-1. This also avoids possible creation of \par which
+% would defeat \@@jfverb@@. Thus it is good.
+\def\@@jfverb #1{%
+   \ifcat\noexpand#1\noexpand~\catcode`#1\active\fi
+% No problem with the EOL for the line where the short verb delimiter stands.
+   \def\next ##1#1{%
+            \@vobeyspaces\everyeof{\relax}\endlinechar\m at ne
+            \expandafter\@@jfverb_a\scantokens\expandafter{##1}}%
+% hack with \@empty to prevent brace stripping if catcodes have been
+% frozen earlier, like in footnotes.
+   \next \@empty
+}
+% We don't want a \discretionary at the very start.
+% But then an empty argument is forbidden!
+\def\@@jfverb_a #1{#1\@@jfverb_b }
+
+\def\@@jfverb_b #1{\ifx\relax #1%
+        \egroup
+      \else
+% \penalty\z@, or rather (Oct 11, 2014) but I then adjust the textwidth
+% precisely:
+      \discretionary{\copy\SoftWrapIcon}{}{}%
+        #1\expandafter\@@jfverb_b\fi
+}
+% \SoftWrapIcon box for line-breaking using discretionaries
+% =========================================================
+\DeclareFontFamily{U}{MdSymbolC}{}
+\DeclareFontShape {U}{MdSymbolC}{m}{n}{<-> MdSymbolC-Regular}{}
+\newbox\SoftWrapIcon
+% Emacs/AUCTeX uses very strange comment-like highlighting for \usefont{U}...
+\def\SetSoftWrapIcon{%
+    \global\setbox\SoftWrapIcon\hb at xt@\z@
+    {\hb at xt@\fontdimen2\font
+        {\hss{\color{verbsoftwrapiconcolor}%
+              \usefont{U}{MdSymbolC}{m}{n}\char"97}\hss}%
+     \hss}%
+   }
+\AtBeginDocument {{\ttfamily\SetSoftWrapIcon}}%
+
+\catcode`_ 8
+\makeatother
+
+% everbatim environment
+% =====================
+
+% October 13-14, 2014
+% Verbatim with an \everypar hook, mainly to have background color, followed by
+% execution of the contents (not limited by a group-scope)
+
+\makeatletter
+\catcode`_ 11
+
+\def\everbatimtop {\MacroFont\small}% default
+\let\everbatimbottom\empty
+\let\everbatimhook\empty
+
+\def\everbatim {\s at everbatim\@everbatim }
+\@namedef{everbatim*}{\s at everbatim\expandafter\@everbatimx\expandafter
+                      {\the\newlinechar}}
+\let\everbatimbgcolorcmd\empty
+\def\everbatimeverypar{\strut
+                   {\everbatimbgcolorcmd\vrule\@width\linewidth }%
+                   \kern-\linewidth
+                   \kern\everbatimindent }
+\def\everbatimindent {\z@}
+% voir plus loin atbegindocument
+
+\def\endeverbatim  {\if at newlist \leavevmode\fi\endtrivlist }
+
+\@namedef{endeverbatim*}{\endeverbatim\aftergroup\everbatimundoparskip}
+\def\everbatimundoparskip{\vbox{}\kern-\baselineskip\kern-\parskip}
+% Note 25 juin 2021
+% On ne peut pas emboîter un everbatim à l'intérieur d'un everbatim
+% ou un everbatim* à l'intérieur d'un everbatim*...
+\def\s at everbatim {%
+%     \ineverbtrue
+     \everbatimtop % put there size changes
+       \topsep    \z at skip
+       \partopsep \z at skip
+       \itemsep   \z at skip
+       \parsep    \z at skip
+       \parskip   \z at skip
+       \lineskip  \z at skip
+     \let\do\@makeother \dospecials
+     \let\do\do at noligs  \verbatim at nolig@list
+     \makestarlowast
+     \makequotesstraight
+     \everbatimhook
+     \trivlist
+       \@topsepadd \z at skip
+       \item\relax
+       \leftskip   \@totalleftmargin
+       \rightskip  \z at skip
+       \parindent  \z@
+       \parfillskip\@flushglue
+       \parskip    \z at skip
+       \@@par
+       \def\par{\leavevmode\null\@@par\pagebreak[1]}%
+       \everypar\expandafter{\the\everypar \unpenalty
+                \everbatimeverypar
+                \everypar \expandafter{\the\everypar\everbatimeverypar}%
+       }%
+       \obeylines \@vobeyspaces
+}
+
+\begingroup
+\lccode`X 13
+\catcode`X \active
+\lccode`Y `* % this is because of \makestarlowast.
+% I have to think whether this is useful: obviously if I were to provide
+% everbatim and everbatim*  in a package I wouldn't do that.
+\catcode`Y  \active
+\catcode`| 0 \catcode`[ 1 \catcode`] 2 \catcode`* 12
+\catcode`{ 12 \catcode`} 12 |catcode`\\ 12
+|lowercase[|endgroup% both freezes catcodes and converts X to active ^^M
+|def|@everbatim #1X#2\end{everbatim}%
+  [#2|end[everbatim]|everbatimbottom ]
+|def|@everbatimx #1#2X#3\end{everbatimY}]%
+  {#3\end{everbatim*}%
+     \everbatimbottom
+     \newlinechar 13
+% execution as LaTeX code of contents
+     \everbatimxprehook
+     \scantokens {#3}%
+     \newlinechar #1\relax
+     \everbatimxposthook
+}%
+
+% L'espace venant du endofline final mis par \scantokens sera inhibé si #3 se
+% termine par un % ou un \x, etc...
+
+\let\everbatimxfgcolorcmd\empty
+\def\everbatimxprehook {\colorlet{everbsavedcolor}{.}%
+                        \everbatimxfgcolorcmd
+                        \smallskip % pour polexpr-examples.tex
+                                   % à cause de problèmes avec les
+                                   % output en "display"
+                       }%
+                       
+\def\everbatimxposthook {\color{everbsavedcolor}}
+
+
+\catcode`_ 8
+\makeatother
+
+\newcommand\pkg[2][]{\if\relax\detokenize{#1}\relax
+                       \href{https://www.ctan.org/pkg/#2}{#2}%
+                     \else
+                       \href{https://www.ctan.org/pkg/#1}{#2}%
+                     \fi
+                    }
+
+% Colors for \verb and everbatim
+% \MacroFont and \MicroFont
+% font size in verbatim blocks
+
+% \verb
+%\colorlet{verbcolor}{DarkCyan}
+\colorlet{verbcolor}{black}
+\colorlet{verbsoftwrapiconcolor}{DarkBlue}
+\def\MicroFont{\ttfamily%\color{verbcolor}
+               \makestarlowast\makequotesstraight}%
+
+% everbatim/everbatim*
+\def\everbatimtop{\MacroFont\small}
+% the \small is not in \MacroFont in case of a document with macrocode (doc.sty)
+% and some customization is desired
+%\colorlet{everbatimfgcolor}{Olive}
+\colorlet{everbatimfgcolor}{DarkBlue}
+\def\MacroFont{\ttfamily\color{everbatimfgcolor}}
+
+%\colorlet{everbatimbgcolor}{WhiteSmoke}
+\colorlet{everbatimbgcolor}{Ivory}
+\def\everbatimbgcolorcmd{\color{everbatimbgcolor}}
+
+%\colorlet{everbatimxfgcolor}{MidnightBlue}
+\colorlet{everbatimxfgcolor}{OliveDrab}
+\def\everbatimxfgcolorcmd{\color{everbatimxfgcolor}}
+
+% Notice that \macrocode uses \macro at font which stores the \MacroFont meaning
+% in force at \begin{document}. But doc.sty's verbatim uses current \MacroFont
+% not the meaning at \begin{document}. Comprenne qui pourra...
+
+\begin{document}
+\maketitle
+
+
+The package provides a parser |\poldef| of algebraic polynomial
+expressions.  
+
+Once defined, a polynomial is usable by its name either as a numerical
+function in |\xintexpr/\xinteval|, or for additional polynomial
+definitions, or as argument to the package macros.
+
+%   The localization of
+% real roots to arbitrary precision as well as the determination of all
+% rational roots is implemented via such macros.
+
+% Since release |0.8|, polexpr extends the \pkg{xintexpr}
+% syntax to recognize
+% polynomials as a new variable type (and not only as functions).
+% Functionality which previously was implemented via macros such as the
+% computation of a greatest common divisor is now available directly in
+% |\xintexpr|, |\xinteval| or |\poldef| via infix or functional
+% syntax.
+
+This document illustrates root localization via usage of macros such as
+|\PolToSturm| and |\PolSturmIsolateZeros| which implement the
+\href{https://en.wikipedia.org/wiki/Sturm%27s_theorem}{Sturm theorem}:
+\begin{itemize}
+\item Root localization based on
+  \href{https://en.wikipedia.org/wiki/Sturm%27s_theorem}{Sturm theorem} was
+  added at release |0.4| (2018/02/16).
+\item Ability to find all rational roots was added at release |0.7.2|
+  (2018/12/09).
+\end{itemize}
+As of |0.8| (2021/03/29), \pkg{polexpr} is usable with Plain \TeX\ and not
+only with \LaTeX. The examples here use most of the time a syntax which works
+with both.
+
+Copying-pasting from |pdf| the example source may lose formatting.
+Formerly, they were included verbatim in the |html| documentation.  Here
+they are both rendered verbatim and got executed during the \LaTeX\ run
+which created this |pdf| file, with the output shown after the source code.
+
+% Perhaps future releases will implement other approaches, which are known
+% to be generically computationally more efficient, at least in high
+% degrees, than the \href{https://en.wikipedia.org/wiki/Sturm%27s_theorem}{Sturm theorem} based approach.  This is not
+% immediate priority though (perhaps support of multivariate polynomials
+% would be more important feature; or localization of complex roots).
+
+Regarding how polynomial coefficients are printed on the typeset page by
+|\PolTypeset|:
+\begin{itemize}\def\everbatimtop {\MacroFont}% sans le \small
+\item The default for |\PolTypesetOne| is to use |\xintTeXsignedFrac| with
+  \LaTeX, |\xintTeXsignedOver| with Plain.  See the \pkg{xintexpr}
+  documentation for a description of what these macros do.  A sensible
+  definition is: 
+\begin{everbatim}
+  \def\PolTypesetOne#1{\PolDecToString{\xintREZ{#1}}}%
+\end{everbatim}
+% le \smallskip est ennuyeux ici
+  It means to use decimal notation, with perhaps a trailing denominator if the
+  argument is a fraction, and will suppress trailing zeros after the decimal
+  mark.
+
+\item
+  As these are expandable macros, they are usable to redefine
+  |\PolToExprCmd| as well:
+\begin{everbatim}
+  \def\PolToExprCmd#1{\PolDecToString{\xintREZ{#1}}}%
+\end{everbatim}
+% le \smallskip est ennuyeux ici
+  This will customize the output of |\PolToExpr| (which a priori is
+  destined for writes to external files but may also be used on the typeset
+  page).
+\end{itemize}
+
+With |\xintverbosetrue| in the \TeX\ source extra information relative
+to the internal data manipulated by the macros will be written to the |.log|
+file.
+
+\begin{framed}
+  Package macros related to root localization create (user-level) new
+  polynomials, or numeric variables, via a naming scheme using the given
+  |<sturmname>| as prefix. It is thus advisable to keep this
+  |<sturmname>| name-space separate from the one used to name polynomial or
+  scalar variables.
+\end{framed}
+
+\begin{framed}
+  Regrettably all examples here use the condemnable |\PolToSturm{f}{f}|
+  practice which means that internally defined polynomials will use as prefix
+  the original polynomial name.  This merge of namespaces may cause
+  overwriting previously defined data and may lead to hard-to-debug problems.
+\end{framed}
+
+
+\section{A first example}
+
+
+In this example the polynomial is square-free.
+\begin{everbatim*}
+  \poldef f(x) := x^7 - x^6 - 2x + 1;
+
+  \PolToSturm{f}{f}
+  \PolSturmIsolateZeros{f}
+  The \PolTypeset{f} polynomial has \PolSturmNbOfIsolatedZeros{f} distinct real
+  roots which are located in the following intervals:
+  \PolPrintIntervals{f}
+\end{everbatim*}
+
+\begin{everbatim*}
+  Here is the second root with ten more decimal digits:
+  \PolRefineInterval[10]{f}{2}
+  $$\PolSturmIsolatedZeroLeft{f}{2}<Z_2<\PolSturmIsolatedZeroRight{f}{2}$$
+\end{everbatim*}
+
+\begin{everbatim*}
+  And here is the first root with twenty digits after decimal mark:
+  \PolEnsureIntervalLength{f}{1}{-20}
+  $$\PolSturmIsolatedZeroLeft{f}{1}<Z_1<\PolSturmIsolatedZeroRight{f}{1}$$
+\end{everbatim*}
+
+\begin{everbatim*}
+  The first element of the Sturm chain has degree $\PolDegree{f_0}$. As
+  this is the original degreee $\PolDegree{f}$ we know that $f$ is square free.
+  Its derivative is up to a constant \PolTypeset{f_1} (in this example
+  it is identical with it).
+  \PolToSturm{f_1}{f_1}\PolSturmIsolateZeros{f_1}%
+  The derivative has \PolSturmNbOfIsolatedZeros{f_1} distinct real
+  roots:
+  \PolPrintIntervals[W]{f_1}%
+  \PolEnsureIntervalLengths{f_1}{-10}%
+  Here they are with ten digits after decimal mark:
+  \PolPrintIntervals[W]{f_1}
+\end{everbatim*}
+
+\begin{everbatim*}
+  \PolDiff{f_1}{f''}
+  \PolToSturm{f''}{f''}
+  \PolSturmIsolateZeros{f''}
+  The second derivative is \PolTypeset{f''}.
+  It has \PolSturmNbOfIsolatedZeros{f''} distinct real
+  roots:
+  \PolPrintIntervals[X]{f''}%
+  Here is the positive one with 20 digits after decimal mark:
+  \PolEnsureIntervalLength{f''}{2}{-20}%
+  $$X_2 = \PolSturmIsolatedZeroLeft{f''}{2}\dots$$
+\end{everbatim*}
+%The more mathematically advanced among our dear readers will be able
+%  to give the exact value for $X_2$!
+
+\section{A degree four polynomial with nearby roots}
+
+
+Notice that this example is a bit outdated as |0.7| release has
+added |\PolSturmIsolateZeros**{<sturmname>}| which would find exactly
+the roots. The steps here retain their interest when one is interested
+in finding isolating intervals for example to prepare some demonstration
+of dichotomy method.
+
+
+\begin{everbatim*}
+  \PolDef{Q}{(x-1.050001)(x-1.105001)(x-1.110501)(x-1.111051)}
+  \PolTypeset{Q}
+  \PolToSturm{Q}{Q} % it is allowed to use same prefix for Sturm chain
+  \PolSturmIsolateZeros{Q}
+  \PolPrintIntervals{Q}
+\end{everbatim*}
+
+\begin{everbatim*}
+  \PolRefineInterval*{Q}{1}
+  \PolRefineInterval*{Q}{2}
+  \PolRefineInterval*{Q}{3}
+  \PolRefineInterval*{Q}{4}
+  \PolPrintIntervals{Q}
+\end{everbatim*}
+
+\begin{everbatim*}
+  \PolEnsureIntervalLengths{Q}{-6}
+  \PolPrintIntervals{Q}
+  % finds here all roots exactly
+\end{everbatim*}
+
+\section{The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots}
+
+Define a user command (\pkg[xint]{xinttools} is loaded automatically by
+\pkg{polexpr}):
+
+\begin{everbatim*}
+  \def\showmultiplicities#1{% #1 = "sturmname"
+  \xintFor* ##1 in {\xintSeq{1}{\PolSturmNbOfIsolatedZeros{#1}}}\do{%
+      The multiplicity is \PolSturmIsolatedZeroMultiplicity{#1}{##1}
+      \PolSturmIfZeroExactlyKnown{#1}{##1}%
+      {at the root $x=\PolSturmIsolatedZeroLeft{#1}{##1}$}
+      {for the root such that
+      $\PolSturmIsolatedZeroLeft{#1}{##1}<x<\PolSturmIsolatedZeroRight{#1}{##1}$}
+      \par
+  }}%
+\end{everbatim*}
+
+\begin{everbatim*}
+  \PolDef{f}{(x-0.99)^3(x-0.999)^3(x-0.9999)^3}
+  \def\PolTypesetOne#1{\PolDecToString{\xintREZ{#1}}}
+  \PolTypeset{f}\par
+\end{everbatim*}
+
+\begin{everbatim*}
+  \PolToSturm{f}{f}% it is allowed to use "polname" as "sturmname" too
+  \PolSturmIsolateZerosAndGetMultiplicities{f}% use the "sturmname" here
+  % or \PolSturmIsolateZeros*{f} which is exactly the same, but shorter..
+
+  \showmultiplicities{f}
+\end{everbatim*}
+% In this example, the output will look like this (but using math mode)::
+
+%   x^9 - 8.9667x^8 + 35.73400293x^7 - 83.070418400109x^6 + 124.143648875193123x^5
+%   - 123.683070924326075877x^4 + 82.149260397553075617891x^3 
+%   - 35.07602992699900159127007x^2 + 8.7364078733314648368671733x
+%   - 0.967100824643585986488103299
+
+%   The multiplicity is 3 at the root x = 0.99
+%   The multiplicity is 3 at the root x = 0.999
+%   The multiplicity is 3 at the root x = 0.9999
+
+% On first pass, these rational roots were found (due to their relative
+% magnitudes, using |\PolSturmIsolateZeros**| was not needed here). But
+% multiplicity computation works also with (decimal) roots not yet
+% identified or with non-decimal or irrational roots.
+
+It is fun to modify only a tiny bit the polynomial and see if polexpr
+survives:
+
+\begin{everbatim*}
+  \PolDef{g}{f(x)+1e-27}
+  \PolTypeset{g}\par
+  \PolToSturm{g}{g}
+  \PolSturmIsolateZeros*{g}
+
+  \showmultiplicities{g}
+\end{everbatim*}
+% This produces::
+
+%   x^9 - 8.9667x^8 + 35.73400293x^7 - 83.070418400109x^6 + 124.143648875193123x^5
+%   - 123.683070924326075877x^4 + 82.149260397553075617891x^3 
+%   - 35.07602992699900159127007x^2 + 8.7364078733314648368671733x
+%   - 0.967100824643585986488103298
+
+%   The multiplicity is 1 for the root such that 0.98 < x < 0.99
+%   The multiplicity is 1 for the root such that 0.9991 < x < 0.9992
+%   The multiplicity is 1 for the root such that 0.9997 < x < 0.9998
+
+This means that the multiplicity-3 roots each became a real and a pair of
+complex ones. Let's see them better:
+
+\begin{everbatim*}
+  \PolEnsureIntervalLengths{g}{-10}
+
+  \showmultiplicities{g}
+\end{everbatim*}
+% which produces::
+
+%   The multiplicity is 1 for the root such that 0.9899888032 < x < 0.9899888033
+%   The multiplicity is 1 for the root such that 0.9991447980 < x < 0.9991447981
+%   The multiplicity is 1 for the root such that 0.9997663986 < x < 0.9997663987
+
+\section{A degree five polynomial with three rational roots}
+
+\begin{everbatim*}
+  \poldef Q(x) :=  1581755751184441 x^5
+                 -14907697165025339 x^4
+                 +48415668972339336 x^3
+                 -63952057791306264 x^2
+                 +46833913221154895 x
+                 -49044360626280925;
+
+  \PolToSturm{Q}{Q}
+    \def\PolTypesetCmdPrefix#1{\allowbreak\xintiiifSgn{#1}{}{+}{+}}%
+    $Q_0(x) = \PolTypeset{Q_0}$
+  \PolSturmIsolateZeros**{Q}
+  \PolPrintIntervals{Q}
+
+  $Q_{norr}(x) = \PolTypeset{Q_norr}$
+\end{everbatim*}
+
+Here, all real roots are rational. Let's get their decimal expansion too:
+\begin{everbatim*}
+\begingroup
+  % print decimal expansion of the found roots
+  \def\PolPrintIntervalsPrintExactZero
+              {\xintTrunc{20}{\PolPrintIntervalsTheLeftEndPoint}\dots}
+  \PolPrintIntervals{Q}
+\endgroup % we localized the modified \PolPrintIntervalsPrintExactZero
+\end{everbatim*}
+
+
+  % Z_1 = 3.14159265358107777120...
+  % Z_2 = 3.14159265358979340254...
+  % Z_3 = 3.14159292035398230088...
+
+\section{A Mignotte type polynomial}
+
+
+\begin{everbatim*}
+  \PolDef{P}{x^10 - (10x-1)^2}%
+  \PolTypeset{P}              % prints it in expanded form
+  \PolToSturm{P}{P}           % we can use same prefix for Sturm chain
+  \PolSturmIsolateZeros{P}    % finds 4 real roots
+  This polynomial has \PolSturmNbOfIsolatedZeros{P} distinct real roots:
+  \PolPrintIntervals{P}%
+\end{everbatim*}
+Let us refine the second and third intervals to separate the corresponding
+roots:
+\begin{everbatim*}
+  \PolRefineInterval*{P}{2}% will refine to 0.0999990 < Z_2 < 0.0999991
+  \PolRefineInterval*{P}{3}% will refine to 0.100001 < Z_3 < 0.100002
+  \PolPrintIntervals{P}%
+\end{everbatim*}
+Let us now get to know all roots with 10 digits after decimal mark:
+\begin{everbatim*}
+  \PolEnsureIntervalLengths{P}{-10}%
+  \PolPrintIntervals{P}% now all roots are known 10 decimal digits after mark
+\end{everbatim*}
+Finally, we display 20 digits of the second root:
+\begin{everbatim*}
+  \PolEnsureIntervalLength{P}{2}{-20}% makes Z_2 known with 20 digits after mark
+  $$\PolSturmIsolatedZeroLeft{P}{2}<Z_2<\PolSturmIsolatedZeroRight{P}{2}$$
+\end{everbatim*}
+% The last line produces::
+
+%   0.09999900004999650028 < Z_2 < 0.09999900004999650029
+
+\section{The Wilkinson polynomial}
+
+
+See \url{https://en.wikipedia.org/wiki/Wilkinson%27s_polynomial}.
+
+
+\begin{everbatim*}
+  %\xintverbosetrue % for the curious...
+
+  \poldef f(x) := mul((x - i), i = 1..20);
+
+  \def\PolTypesetCmdPrefix#1{\allowbreak\xintiiifSgn{#1}{}{+}{+}}%
+  \def\PolTypesetOne#1{\xintDecToString{#1}}%
+
+  \noindent\PolTypeset{f}
+
+  \PolToSturm{f}{f}
+  \PolSturmIsolateZeros{f}
+  \PolPrintIntervals{f}
+  % \vfill\eject
+
+  % This page is commented out because it takes about 30s on a 2GHz CPU
+  % \poldef g(x) := f(x) - 2**{-23} x**19;
+
+  % \PolToSturm{g}{g}
+  % \noindent\PolTypeset{g_0}% integer coefficient primitive polynomial
+
+  % \PolSturmIsolateZeros{g}
+  % \PolEnsureIntervalLengths{g}{-10}
+
+  % \PolPrintIntervals*{g}
+\end{everbatim*}
+
+The first polynomial
+%
+%   f(x) = x**20
+%   - 210 x**19
+%   + 20615 x**18
+%   - 1256850 x**17
+%   + 53327946 x**16
+%   - 1672280820 x**15
+%   + 40171771630 x**14
+%   - 756111184500 x**13
+%   + 11310276995381 x**12
+%   - 135585182899530 x**11
+%   + 1307535010540395 x**10
+%   - 10142299865511450 x**9
+%   + 63030812099294896 x**8
+%   - 311333643161390640 x**7
+%   + 1206647803780373360 x**6
+%   - 3599979517947607200 x**5
+%   + 8037811822645051776 x**4
+%   - 12870931245150988800 x**3
+%   + 13803759753640704000 x**2
+%   - 8752948036761600000 x
+%   + 2432902008176640000
+%
+is handled fast enough, but the modified one |f(x) -
+2**-23 x**19| takes about 20x longer.
+
+Its Sturm chain polynomials
+have integer coefficients with up to 321 digits, whereas (surprisingly
+perhaps) those of the Sturm chain polynomials derived from |f| never
+have more than 21 digits ...
+
+Once the Sturm chain is computed and the zeros isolated, obtaining their
+decimal digits is relatively faster. Here are the ten real roots of
+|f(x) - 2**-23 x**19| which would be computed by the commented-out code above:
+\begin{everbatim}
+  Z_1 = 0.9999999999...
+  Z_2 = 2.0000000000...
+  Z_3 = 2.9999999999...
+  Z_4 = 4.0000000002...
+  Z_5 = 4.9999999275...
+  Z_6 = 6.0000069439...
+  Z_7 = 6.9996972339...
+  Z_8 = 8.0072676034...
+  Z_9 = 8.9172502485...
+  Z_10 = 20.8469081014...
+\end{everbatim}
+
+\section{The second Wilkinson polynomial}
+
+
+\begin{everbatim*}
+  \poldef f(x) := mul(x - 2^-i, i = 1..20);
+
+  %\PolTypeset{f}
+
+  \PolToSturm{f}{f}
+  \PolSturmIsolateZeros**{f}
+  \PolPrintIntervals{f}
+\end{everbatim*}
+
+This takes more time than the polynomial with 1, 2, .., 20 as roots but
+less than the latter modified by the |2**-23| tiny change to one of its
+coefficient.
+
+% Here is the output (with release 0.7.2)::
+
+%   Z_1  = 0.00000095367431640625
+%   Z_2  = 0.0000019073486328125
+%   Z_3  = 0.000003814697265625
+%   Z_4  = 0.00000762939453125
+%   Z_5  = 0.0000152587890625
+%   Z_6  = 0.000030517578125
+%   Z_7  = 0.00006103515625
+%   Z_8  = 0.0001220703125
+%   Z_9  = 1/4096
+%   Z_10 = 1/2048
+%   Z_11 = 1/1024
+%   Z_12 = 1/512
+%   Z_13 = 1/256
+%   Z_14 = 1/128
+%   Z_15 = 0.015625
+%   Z_16 = 0.03125
+%   Z_17 = 0.0625
+%   Z_18 = 0.125
+%   Z_19 = 0.25
+%   Z_20 = 0.5
+
+There is some incoherence in output format which has its source in the
+fact that some roots are found in branches which can only find decimal
+roots, whereas some are found in branches which could find general
+fractions and they use |\xintIrr| before storage of the found root.
+This may evolve in future.
+
+
+\section{The degree 41 polynomial with -2, -1.9, -1.8, ..., 0, 0.1, ..., 1.9, 2 as roots}
+
+
+
+\begin{everbatim*}
+  \PolDef{P}{mul((x-i*1e-1), i=-20..20)}% i/10 is same but less efficient
+\end{everbatim*}
+In the defining expression we could have used |i/10| but this gives
+less efficient internal form for the coefficients (the |10|'s end up
+in denominators).
+
+\begin{everbatim*}
+\begingroup
+  \def\PolToExprCmd#1{\PolDecToString{\xintREZ{#1}}}
+  \def\PolToExprTermPrefix#1{\newline\xintiiifSgn{#1}{}{+}{+}}
+  \def\PolToExprTimes{${}\cdot{}$}
+\ttfamily
+\PolToExpr{P}
+\endgroup
+\end{everbatim*}
+  % x^41
+  % -28.7*x^39
+  % +375.7117*x^37
+  % -2975.11006*x^35
+  % +15935.28150578*x^33
+  % -61167.527674162*x^31
+  % +173944.259366417394*x^29
+  % -373686.963560544648*x^27
+  % +613012.0665016658846445*x^25
+  % -771182.31133138163125495*x^23
+  % +743263.86672885754888959569*x^21
+  % -545609.076599482896371978698*x^19
+  % +301748.325708943677229642930528*x^17
+  % -123655.8987669450434698869844544*x^15
+  % +36666.1782054884005855608205864192*x^13
+  % -7607.85821367459445649518380016128*x^11
+  % +1053.15135918687298508885950223794176*x^9
+  % -90.6380005918141132650786081964032*x^7
+  % +4.33701563847327366842552218288128*x^5
+  % -0.0944770968420804735498178265088*x^3
+  % +0.00059190121813899276854174416896*x
+
+which shows coefficients with up to 36 significant digits...
+
+Stress test: not a hard challenge to \pkg{xint} + \pkg{polexpr}, but be a bit
+patient!
+
+\begin{everbatim*}
+  \PolDef{P}{mul((x-i*1e-1), i=-20..20)}%
+  \PolToSturm{P}{S}           % dutifully computes S_0, ..., S_{41}
+  % the [1] optional argument limits the search to interval (-10,10)
+  \PolSturmIsolateZeros[1]{S} % finds *exactly* (but a bit slowly) all 41 roots!
+  \PolPrintIntervals{S}       % nice, isn't it?
+% Unfortunately \PolPrintIntervals uses a non-breakable array environment
+% But see next section on how to customize \PolPrintIntervals and let it
+% allow pagebreaks
+\end{everbatim*}
+
+\begin{quote}
+  Release |0.5| has \emph{experimental} addition of optional argument |E| to
+  |\PolSturmIsolateZeros|. It instructs to search roots only in interval
+  |(-10^E, 10^E)|. Important: the extremities are \emph{assumed to not be roots}.
+  In this example, the |[1]| in |\PolSturmIsolateZeros[1]{S}| gives some speed
+  gain; without it, it turns out in this case that \pkg{polexpr} would have
+  started with |(-10^6, 10^6)| interval.
+
+  Please note that this feature may be removed or modified.
+\end{quote}
+
+\section{Roots of a Chebyshev polynomial}
+
+
+\begin{everbatim*}
+  \poldef T_0(x) := 1;
+  \poldef T_1(x) := x;
+  \catcode`@ 11
+  \count@ 2
+  \xintloop
+    \poldef T_\the\count@(x) :=
+            2x*T_\the\numexpr\count at -1\relax
+             - T_\the\numexpr\count at -2\relax;
+  \ifnum\count@<15
+  \advance\count@ 1
+  \repeat
+  \catcode`@ 12
+
+  $$T_{15} = \PolTypeset[X]{T_15}$$
+  \PolToSturm{T_15}{T_15}
+  \PolSturmIsolateZeros*{T_15}% "*" as we will want to confirm multiplicity one
+  % takes time (each next decimal digit is obtained by dichotomy)
+  \PolEnsureIntervalLengths{T_15}{-20}% ensure 20 decimal digits for each root
+\end{everbatim*}
+
+Here is now an example of customization.  Indeed
+|\PolPrintIntervals| default uses |array| and thus does not allow page breaks.
+And it uses |Left < Z < Right| as presentation of roots and we would like here
+rather |Z = decimal expansion...|.
+\begin{everbatim*}
+% 0.8.6 adds an internal patch which would allow usage of amsmath environments
+% like this:
+% \def\PolPrintIntervalsBeginEnv{\begin{align*}}
+% \def\PolPrintIntervalsEndEnv{\end{align*}}
+% (the problem was that align evaluates twice its contents so global variables
+%  need a reset at the end of first pass, which is what 0.8.6 took care of)
+%
+% Let's simply do this:
+\def\PolPrintIntervalsBeginEnv{\begingroup\leftskip3cm\relax}
+\def\PolPrintIntervalsEndEnv{\par\endgroup}
+%
+% The rows are separated by \PolPrintIntervalsRowSeparator which defaults to \\
+% with LaTeX and \cr with Plain. (prior to 0.8.6 it was hardcoded)
+\def\PolPrintIntervalsRowSeparator{\\[\jot]}
+% And we enter math mode manually at each row, copying pasting from package
+% defaults with some added mathon/mathoff:
+\def\PolPrintIntervalsKnownRoot{%
+   $\PolPrintIntervalsPrintMultiplicity\quad
+   \PolPrintIntervalsTheVar_{\PolPrintIntervalsTheIndex}=%
+   \PolPrintIntervalsPrintExactZero
+   $
+}%
+\def\PolPrintIntervalsUnknownRoot{%
+   $\PolPrintIntervalsPrintMultiplicity\quad
+   \xintifSgn{\PolPrintIntervalsTheLeftEndPoint}%
+     {\xintifSgn{\PolPrintIntervalsTheRightEndPoint}
+       {\PolPrintIntervalsTheVar_{\PolPrintIntervalsTheIndex}=%
+        \PolPrintIntervalsPrintRightEndPoint\dots}%
+      {0>\PolPrintIntervalsTheVar_{\PolPrintIntervalsTheIndex}>%
+        \PolPrintIntervalsPrintLeftEndPoint}%
+      {\impossibleA}}%
+    {\xintifSgn{\PolPrintIntervalsTheRightEndPoint}
+      {\impossibleB}%
+      {\impossibleC}%
+      {0<\PolPrintIntervalsTheVar_{\PolPrintIntervalsTheIndex}<%
+        \PolPrintIntervalsPrintRightEndPoint}}%
+    {\xintifSgn{\PolPrintIntervalsTheRightEndPoint}
+      {\impossibleD}%
+      {\impossibleE}%
+      {\PolPrintIntervalsTheVar_{\PolPrintIntervalsTheIndex}=%
+        \PolPrintIntervalsPrintLeftEndPoint\dots}}%
+   $
+}%
+\PolPrintIntervals{T_15}
+\end{everbatim*}
+\end{document}
+


Property changes on: trunk/Master/texmf-dist/tex/generic/polexpr/polexpr-examples.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/polexpr/polexpr.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/polexpr/polexpr.sty	2022-01-10 18:36:08 UTC (rev 61558)
+++ trunk/Master/texmf-dist/tex/generic/polexpr/polexpr.sty	2022-01-10 21:27:44 UTC (rev 61559)
@@ -2,7 +2,7 @@
 % License: LPPL 1.3c (author-maintained)
 % Usage: \input polexpr.sty   (Plain or other macro formats)
 %    or  \usepackage{polexpr} (LaTeX macro format)
-% Release 0.8.5 (2021/11/30) of polexpr.sty. This file inputs
+% Release 0.8.6 (2022/01/09) of polexpr.sty. This file inputs
 %   polexprcore.tex
 %   polexprexpr.tex
 %   polexprsturm.tex
@@ -54,12 +54,12 @@
 \XINTsetupcatcodes% (does \endlinechar13 in particular)
 \XINT_providespackage
 \ProvidesPackage{polexpr}%
-  [2021/05/27 v0.8.3 Polynomial expressions with rational coefficients (JFB)]%
+  [2022/01/09 v0.8.6 Polynomial expressions with rational coefficients (JFB)]%
 \begingroup
  \def\x#1/#2/#3 #4\xint:{#1#2#3}%
  \ifnum\expandafter\x\expanded{\csname ver at xintexpr.sty\endcsname}\xint:
        <20210527 % xint 1.4h
- \immediate\write128{! Package polexpr error: xintexpr too old, aborting input}%
+ \errmessage{Package polexpr error: xintexpr too old, aborting input}%
  \else\expandafter\xint_gobble_i
  \fi
 \endinput\endgroup
@@ -475,7 +475,7 @@
 }%
 %
 %% Euclidean division
-%  now based on the expandable routine from polexprcore.tex
+%  since 0.8 based on the expandable routine from polexprcore.tex
 %
 \def\PolDivide#1#2#3#4{% #3=quotient, #4=remainder of #1 by #2
     \POL at divide{#1}{#2}%

Modified: trunk/Master/texmf-dist/tex/generic/polexpr/polexprcore.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/polexpr/polexprcore.tex	2022-01-10 18:36:08 UTC (rev 61558)
+++ trunk/Master/texmf-dist/tex/generic/polexpr/polexprcore.tex	2022-01-10 21:27:44 UTC (rev 61559)
@@ -1,7 +1,9 @@
-%% This file polexprcore.tex is part of the polexpr package (0.8.5, 2021/11/30)
-%% Core routines to match infix operators +, -, *, //, /:, ^, ** and some
-%% functions
-%% The atoms representing polynomials inside \xintexpr are
+%% filename: polexprcore.tex
+%% Part of the polexpr package (0.8.6, 2022/01/09)
+%%
+%% Core routines for infix operators +, -, *, //, /:, ^, ** and functions
+%%
+%% Memo: the atoms representing polynomials inside \xintexpr are
 %% - for constants: a numeric value  (indistinguishable. from scalars)
 %% - for degree at least 1: P<degree>.{c0}{c1}....{cN} with N = degree
 %% Auxiliaries

Modified: trunk/Master/texmf-dist/tex/generic/polexpr/polexprexpr.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/polexpr/polexprexpr.tex	2022-01-10 18:36:08 UTC (rev 61558)
+++ trunk/Master/texmf-dist/tex/generic/polexpr/polexprexpr.tex	2022-01-10 21:27:44 UTC (rev 61559)
@@ -1,6 +1,8 @@
-%% This file polexprexpr.tex is part of the polexpr package (0.8.5, 2021/11/30)
-%% Extending \xintexpr syntax:
+%% filename: polexprexpr.tex
+%% Part of the polexpr package (0.8.6, 2022/01/09)
 %%
+%% Polynomial extensions to the \xintexpr syntax:
+%%
 %% 1. Authorize ' in variable and function names
 %%    This partially breaks infix operators 'and', 'or', 'xor', 'mod'
 %%    which must be replaced by &&, ||, /: and xor() syntax

Modified: trunk/Master/texmf-dist/tex/generic/polexpr/polexprsturm.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/polexpr/polexprsturm.tex	2022-01-10 18:36:08 UTC (rev 61558)
+++ trunk/Master/texmf-dist/tex/generic/polexpr/polexprsturm.tex	2022-01-10 21:27:44 UTC (rev 61559)
@@ -1,7 +1,11 @@
-%% This file polexprsturm.tex is part of the polexpr package (0.8.5, 2021/11/30)
-%% Sturm Algorithm (polexpr 0.4)
+%% filename: polexprsturm.tex
+%% Part of the polexpr package (0.8.6, 2022/01/09)
+%%
+%% Implements the Sturm localization Algorithm
+%% Added at polexpr 0.4
+%%
 %% 0.5 uses primitive polynomials for faster evaluations afterwards
-%% 0.6 corrects misuse of \@ifstar! (mumble). \PolToSturm* was broken.
+%% 0.6 corrects misuse of \@ifstar (mumble). \PolToSturm* was broken.
 %% 0.6's \PolToSturm* defines both normalized and unnormalized, the
 %%       unnormalized using two underscores, so both are available
 %%       Sole difference is that \PolToSturm* also declares them as 
@@ -9,11 +13,12 @@
 %%       holding the coefficients in memory
 %% 0.6 fixes the case of a constant polynomial P which caused division
 %%     by zero error from P'.
-%% 0.8 - fixes 0.7.5 failure to have updated to xint 1.4 format the defined
-%%     \xintexpr variables holding the localization intervals extremities
-%%     - also, it uses the prem() in computing the Sturm chain, for a 3X
-%%     speed gain in the case of the "perturbed" first Wilkinson example
-%%
+%% 0.8 - fixes 0.7.5 compatibility bug with xint 1.4 internal format
+%%       regarding the defined \xintexpr variables holding the localization
+%%       intervals extremities
+%%     - also, it uses the prem() in computing the Sturm chain, with a 3X
+%%       speed gain in the case of the "perturbed" first Wilkinson example
+%% 0.8.6 has better a priori bounds for positive and negative roots
 \newcount\POL at count
 \newif\ifPOL at tosturm@makefirstprimitive\POL at tosturm@makefirstprimitivetrue
 \newif\ifPOL at isolz@nextwillneedrefine
@@ -20,8 +25,8 @@
 %%
 \def\PolToSturm{\POL at ifstar{\PolToSturm@@}{\PolToSturm@}}%
 \def\POL at aux@toint#1{\xintREZ{\xintNum{#1}}}% for polynomials with int. coeffs!
-%% Attention that some macros rely upon this one setting \POL at sturmname
-%% and \POL at sturm@N as it does
+%% Attention that some macros rely upon this one defining \POL at sturmname
+%% and \POL at sturm@N as it currently does
 \def\PolToSturm@#1#2{%
   \edef\POL at sturmname{#2}%
   % 0.6 uses 2 underscores (one before index, one after) to keep in memory
@@ -61,11 +66,9 @@
 }%
 \def\POL at tosturm@dosturm{%
   \POL at Diff@@one{\POL at sturmname _0_}{\POL at sturmname _1_}%
-  % re-utiliser \POL at varcoeffs directement?
   \POL at makeprimitive{\POL at sturmname _1_}% does not do \POL at newpol
   \POL at count\@ne
   \xintloop
-  % prior to 0.8, code was using here \POL at divide
     \POL at getprem{\POL at sturmname _\the\numexpr\POL at count-\@ne\relax _}%
                 {\POL at sturmname _\the\POL at count _}%
     \expandafter\POL at split\POL at R;\POL at degR\POL at polR
@@ -117,7 +120,8 @@
   \POL at sturmchain@getSV at at\POL at sturmchain@X
   #1\let#2\POL at sturmchain@SV
 }%
-\def\POL at sturmchain@getSV at at#1{% ATTENTION USES \POL at count
+% attention that this modifies current \POL at count value
+\def\POL at sturmchain@getSV at at#1{%
   \def\POL at sturmchain@SV{0}%
   \edef\POL at sturmchain@sign{\xintiiSgn{\POL at eval{\POL at sturmname _0}{#1}}}%
   \let\POL at isolz@lastsign\POL at sturmchain@sign
@@ -166,7 +170,6 @@
       {\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots}%
       {\PolSturmIsolateZerosAndGetMultiplicities@}%
 }%
-% on aurait besoin de ça dans xint, mais il aurait un \xintRaw{#1} alors
 \def\POL at xintfrac@getNDE #1%
    {\expandafter\POL at xintfrac@getNDE at i\romannumeral`&&@#1}%
 \def\POL at xintfrac@getNDE at i #1/#2[#3]#4#5#6{\def#4{#1}\def#5{#2}\def#6{#3}}%
@@ -196,10 +199,6 @@
   \edef\POL at sturm@N{\@nameuse{PolSturmChainLength_\POL at sturmname}}%
   % isolate the roots (detects case of constant polynomial)
   \PolSturmIsolateZeros@{\POL at sturmname}%
-  % 0.8.4 fix: these declarations were formerly not executed in absence of roots!
-     % on ne va pas utiliser de Horner, mais des divisions par X - x, et ces
-     % choses vont évoluer, ainsi que le coefficient dominant entier
-     % (pour \POL at divide entre autres if faut des noms de user pol)
      \XINT_global
      \expandafter\let
          \csname POLuserpol@\POL at sturmname\POL at sqfnorr\expandafter\endcsname
@@ -219,7 +218,6 @@
      \begingroup\globaldefs\@ne
      \expandafter\POL at initarray\csname POL_ZM\POL at sturmname*\endcsname{1}%
      \endgroup
-     % attention formé avec\xintREZ d'où le \xintAbs pas \xintiiAbs
      % D and its exponent E will get updated along the way
      \edef\POL at findrat@D{\xintAbs{\PolLeadingCoeff{\POL at sturmname _0}}}%
      \POL at xintfrac@getNDE\POL at findrat@D\POL at findrat@Dint\POL at _\POL at findrat@Dexp
@@ -227,12 +225,10 @@
         {\let\POL at findrat@E\POL at findrat@Dexp} % aussi ok pour 1[0]
         {\edef\POL at findrat@E{\the\numexpr\xintLen{\POL at findrat@Dint}%
                                                  +\POL at findrat@Dexp}}%
-% ATTENTION QUE LA CONVENTION DE SIGNE POUR \POL at findrat@E EST OPPOSÉE À CELLE
-% POUR LE CODE PLUS ANCIEN FAISANT "REFINE"
      \POL at initarray\POL at IfMultIsKnown\xint_secondoftwo
      \let\POL at findrat@nbofirrroots\POL at isolz@NbOfRoots
      % find all rational roots, and their multiplicities,
-     % factor them out in passing from original (Sturm root) polynomial
+     % factor them out from original (Sturm root) polynomial
      \ifnum\POL at findrat@E<7 %
          \def\POL at findrat@index{1}%
          \POL at findrat@loop at secondpass@direct
@@ -252,7 +248,6 @@
      \POL at newpol{\POL at sturmname\POL at norr}% with multiplicities
 }%
 \def\POL at findrat@doRRarray#1{%
-  % il faudrait un \xintAssignArray* qui fasse même expansion que \xintFor*
   \edef\POL at temp{%
     \xintiloop[1+1]
     \romannumeral0\csname POL_ZK\POL at sturmname*\xintiloopindex\endcsname
@@ -261,8 +256,6 @@
     \ifnum\xintiloopindex<\POL at isolz@NbOfRoots\space
     \repeat }%
   \begingroup\globaldefs\@ne
-  % attention de ne surtout pas faire un \expandafter ici, car en cas d'un
-  % seul item, \xintAssignArray l'unbraces...
   \xintAssignArray\POL at temp\to#1%
   \endgroup
 }%
@@ -286,11 +279,6 @@
 }%
 \def\POL at findrat@loop at decimal{% we have an already found decimal root
   % we do not go via @storeit, as it is already stored
-  % j'ai beaucoup hésité néanmoins, car je pourrais faire \xintIrr ici,
-  % mais attention aussi à l'interaction avec le \PolDecToString. Les racines
-  % trouvées directement (qui peuvent être des nombres décimaux) sont elles
-  % stockées comme fraction irréductibles (modulo action additionnelle de 
-  % \PolDecToString). 
   \POL at xintfrac@getNDE
     {\xintIrr{\POL at xintexprGetVar{\POL at sturmname L_\POL at findrat@index}}[0]}%
     \POL at findrat@xN\POL at findrat@xD\POl at _
@@ -313,8 +301,7 @@
           \else\expandafter\xint_stop_atfirstoftwo
     \fi
 }%
-\def\POL at findrat@getE #1/1[#2]{#2}% /1 as it should be there.
-% so an error will arise if not but cf \POL at refine@getE where I did not put it
+\def\POL at findrat@getE #1/1[#2]{#2}%
 \def\POL at findrat@loop at a{%
   % attention that the width may have been already smaller than 10^{-6}
   \POL at get@IsoLeft at rawin
@@ -321,7 +308,6 @@
   \POL at get@IsoRight at rawin
   \edef\POL at findrat@localW
       {\the\numexpr-\expandafter\POL at findrat@getE
-  % do I really need the \xintREZ?
        \romannumeral0\xintrez
          {\xintSub{\POL at IsoRight@rawin}{\POL at IsoLeft@rawin}}%
       }% at least 6, maybe larger
@@ -364,9 +350,7 @@
   \xintAssign
     \xintiiDivision\POL at findrat@gcdloop at Ap\POL at findrat@gcdloop at A
   \to\POL at findrat@gcdloop at B\POL at findrat@gcdloop at An
-  % on fait de la tambouille pour n'utiliser que \numexpr par la suite
-  % le reste @An est < 2.10^9 au pire donc ok pour \numexpr
-  % we will drop integral part in our updating P
+% we will drop integral part in our updating P
   \let\POL at findrat@gcdloop at Binitial\POL at findrat@gcdloop at B
   \def\POL at findrat@gcdloop at B{0}%  do as if B1 = 0
   \def\POL at findrat@gcdloop at Pp{1}% P0
@@ -382,7 +366,6 @@
   \POL at findrat@gcdloop at body
 }%
 \def\POL at findrat@gcdloop at body{%
-    % annoying that \numexpr has no divmod... use counts? but groups annoying
     \edef\POL at findrat@gcdloop at B
         {\the\numexpr(\POL at findrat@gcdloop at Ap+\POL at findrat@gcdloop at A/2)/%
                       \POL at findrat@gcdloop at A - \@ne}%
@@ -474,7 +457,8 @@
        {\POL at xintexprGetVar{\POL at sturmname L_\POL at findrat@index}}}%
   \edef\POL at findrat@Rscaled{\xintMul{\POL at findrat@D}%
        {\POL at xintexprGetVar{\POL at sturmname R_\POL at findrat@index}}}%
-  \xintiiifNeg{\POL at findrat@Lscaled}% using ii version is an abuse
+% using ii version is an abuse
+  \xintiiifNeg{\POL at findrat@Lscaled}%
     {% negative interval (right bound possibly zero!)
      % truncate towards zero (i.e. to the right) the left bound
      \edef\POL at findrat@Num{\xintNum{\POL at findrat@Lscaled}/1[0]}%
@@ -572,13 +556,8 @@
   % first get the GCD of remaining pol with its derivative
   \POL at divide{\POL at sturmname\POL at norr}{\POL at sturmname\POL at sqfnorr}%
   \expandafter\let
-    % attention au _ (cf. grosse astuce pour \POL at isolzmult@loop)
     \csname POLuserpol@@_1\POL at sturmname _\endcsname\POL at Q
   \ifnum\PolDegree{@_1\POL at sturmname _}>\z@
-    % il reste des multiplicités (mais peut-être pour des racines complexes)
-    % (ou pour des racines en-dehors de l'intervalle optionnel)
-    % attention recyclage ici de \POL at isolzmult@loop qui dépend de
-    % la  grosse astuce avec \@gobble
     \POL at makeprimitive{@_1\POL at sturmname _}%
     \let\POL at originalsturmname\POL at sturmname
     % trick to get isolzmult at loop to define @@lastGCD to @_1sturmname_
@@ -640,7 +619,7 @@
   \fi
 }%
 \def\POL at isolzmult@defvar at M{%
-  % Attention that is used not only in ...GetMultiplicities@ but also
+  % Attention that this is used not only in ...GetMultiplicities@ but also
   % in FindRationalRoots
   \begingroup\xintglobaldefstrue
   % added at 0.7
@@ -739,7 +718,7 @@
   % #1 optional E such that roots are searched in -10^E < x < 10^E
   % both -10^E and +10^E must not be roots!
   % #2 name of Sturm chain (already pre-computed from a given polynomial)
-  % For reasons I have forgotten (no time now) this code **must** be used
+  % For reasons I have forgotten this code **must** be used
   % with a *normalized* Sturm chain.
   \edef\POL at sturmname{#2}%
   \edef\POL at sturmlength{\PolSturmChainLength{#2}}%
@@ -749,22 +728,23 @@
     \POL at isolz@getsignchanges at plusinf
     \POL at isolz@getsignchanges at minusinf
    \else
-    \edef\POL at isolz@E{\the\numexpr\xint_zapspaces #1 \xint_gobble_i\relax}%
-    \POL at sturmchain@getSV at at{1[\POL at isolz@E]}%
+    \edef\POL at isolz@E at pos{\the\numexpr\xint_zapspaces #1 \xint_gobble_i\relax}%
+    \let\POL at isolz@E at neg\POL at isolz@E at pos
+    \POL at sturmchain@getSV at at{1[\POL at isolz@E at pos]}%
     \let\POL at isolz@plusinf at SV  \POL at sturmchain@SV
     \let\POL at isolz@plusinf at sign\POL at sturmchain@sign
-    \POL at sturmchain@getSV at at{-1[\POL at isolz@E]}%
+    \POL at sturmchain@getSV at at{-1[\POL at isolz@E at neg]}%
     \let\POL at isolz@minusinf at SV  \POL at sturmchain@SV
     \let\POL at isolz@minusinf at sign\POL at sturmchain@sign
     \ifnum\POL at isolz@plusinf at sign=\z@
         \PackageError{polexpr}%
-{The polynomial #2 vanishes at set upper bound 10^\POL at isolz@E}%
-{Compile again with a bigger exponent in source. (X to abort).}%
+{The polynomial #2 vanishes at set upper bound 10^\POL at isolz@E at pos}%
+{Try again with a larger exponent. (X to abort).}%
     \fi
     \ifnum\POL at isolz@minusinf at sign=\z@
         \PackageError{polexpr}%
-{The polynomial #2 vanishes at set lower bound -10^\POL at isolz@E}%
-{Compile again with a bigger exponent in source. (X to abort).}%
+{The polynomial #2 vanishes at set lower bound -10^\POL at isolz@E at neg}%
+{Try again with a larger exponent. (X to abort).}%
     \fi
    \fi
    \edef\POL at isolz@NbOfRoots
@@ -792,7 +772,8 @@
 }%
 \def\POL at initarray#1#2{%
 % ATTENTION, if only one item, \xintAssignArray UNBRACES IT
-% so we use an \empty trick to avoid that. Maybe considered a bug of xinttools?
+% (is this to be considered as a bug of xinttools?)
+% We use an \empty trick to avoid that.
   \expandafter\xintAssignArray\expandafter\empty
     \romannumeral\xintreplicate{\POL at isolz@NbOfRoots}{{#2}}\to#1%
 }%
@@ -836,9 +817,18 @@
     \advance\POL at count\@ne
   \repeat
 }%
-% utility macro for a priori bound on root decimal exponent, via Float Rounding
-\def\POL at isolz@updateE #1e#2;%
-  {\unless\ifnum#2<\POL at isolz@E\space\edef\POL at isolz@E{\the\numexpr#2+\@ne}\fi}%
+% This utility macro bounds positive roots (strictly) by a 10^Epos
+% and negative roots strictly by some -10^Eneg.
+% (prior to 0.8.6, an E was found with -10^E < all roots < 10^E)
+% To obtain Epos, the Cauchy bound  "1 + max_j {-a_j/lc(P)|}"
+% is used, where non-negative a_j/lc(P)'s are ignored. 
+% In case the a_j's all have same sign as lc(P) or vanish, there are
+% no positive roots.  And the macro in this case outputs an E=0 exponent.
+% But if at least one non-zero a_j has opposite sign to the leading coeff,
+% the produced E will be at least 1.
+% Thus if E=0 on exit, it is proof that there are no (positive) roots.
+\def\POL at isolz@updateE #1;%
+  {\unless\ifnum#1<\POL at isolz@E\space\edef\POL at isolz@E{\the\numexpr#1+\@ne}\fi}%
 \def\POL at isolz@getaprioribound{%
   \PolAssign{\POL at sturmname _0}\toarray\POL at arrayA
   \edef\POL at isolz@leading{\POL at arrayA{\POL at arrayA{0}}}%
@@ -849,19 +839,47 @@
      \expandafter\edef\csname POL at arrayA\the\POL at count\endcsname
         {\xintDiv{\POL at arrayA\POL at count}\POL at isolz@leading}%
   \repeat
-  \def\POL at isolz@E{1}% WE SEEK SMALLEST E SUCH HAT -10^E < roots < +10^E
+% We want an E such that 0 < positive roots < +10^E
+  \def\POL at isolz@E{0}%
   \advance\POL at count\m at ne
   \xintloop
   \ifnum\POL at count>\z@
-     \expandafter\POL at isolz@updateE
-     % use floating point to get decimal exponent
-     \romannumeral0\xintfloat[4]% should I use with [2] rather? (should work)
-       {\xintAdd{1/1[0]}{\xintAbs{\POL at arrayA\POL at count}}};%
+% only those coefficients with opposite sign to the leading coefficient
+% trigger an E update
+     \xintiiifSgn{\POL at arrayA\POL at count}%
+                 {\expandafter\POL at isolz@updateE
+     \the\numexpr\xintilogten{\xintAdd{1/1[0]}{\xintiiOpp{\POL at arrayA\POL at count}}};%
+                 }{}{}%
   \advance\POL at count\m at ne
   \repeat
-  % \ifxintverbose\xintMessage{polexpr}{Info}%
-  %   {Roots a priori bounded in absolute value by 10 to the \POL at isolz@E.}%
-  % \fi
+  \let\POL at isolz@E at pos\POL at isolz@E
+% We want an E such that 0 > negative roots > -10^E
+  \def\POL at isolz@E{0}%
+  \POL at count\POL at arrayA{0}\relax
+  \advance\POL at count\m at ne
+  \xintloop
+  \ifnum\POL at count>\@ne
+     \xintiiifSgn{\xintiiOpp{\POL at arrayA\POL at count}}%
+                 {\expandafter\POL at isolz@updateE
+     \the\numexpr\xintilogten{\xintAdd{1/1[0]}{\POL at arrayA\POL at count}};%
+                 }{}{}%
+     \advance\POL at count\m at ne
+     \xintiiifSgn{\POL at arrayA\POL at count}%
+                 {\expandafter\POL at isolz@updateE
+     \the\numexpr\xintilogten{\xintAdd{1/1[0]}{\xintiiOpp{\POL at arrayA\POL at count}}};%
+                 }{}{}%
+     \advance\POL at count\m at ne
+  \repeat
+  \ifnum\POL at count=\@ne
+     \xintiiifSgn{\xintiiOpp{\POL at arrayA\POL at count}}%
+                 {\expandafter\POL at isolz@updateE
+     \the\numexpr\xintilogten{\xintAdd{1/1[0]}{\POL at arrayA\POL at count}};%
+                 }{}{}%
+  \fi
+  \let\POL at isolz@E at neg\POL at isolz@E
+  \ifxintverbose
+     \xintMessage{polexpr}{Info}{Epos=\POL at isolz@E at pos, Eneg=\POL at isolz@E at neg.}%
+  \fi
 }%
 \def\POL at IsoRight@raw{\POL at IsoRight@Int/1[\POL at isolz@E]}%
 \def\POL at IsoLeft@raw {\POL at IsoLeft@Int/1[\POL at isolz@E]}%
@@ -875,8 +893,6 @@
        {\POL at IsoLeft@Int/1[\POL at isolz@E]}%
 }%
 \def\POL at isolz@main {%
-% NOTE 2018/02/16. THIS WILL PRESUMABLY BE RE-ORGANIZED IN FUTURE TO DO
-% FIRST POSITIVE ROOTS THEN NEGATIVE ROOTS VIA CHANGE OF VARIABLE TO OPPOSITE.
   \global\POL at isolz@nextwillneedrefinefalse
   \def\POL at IsoRight@Int{0}%
   \POL at sturmchain@getSV at at\POL at IsoRight@raw
@@ -899,12 +915,13 @@
   % \POL at IsoRight@SV was modified if zero is a root
   \edef\POL at isolz@NbOfNegRoots{\the\numexpr\POL at IsoLeftSV-\POL at IsoRightSV}%
   \gdef\POL at isolz@IntervalIndex{0}%
-  \let\POL at isolz@@E\POL at isolz@E
+% 0.8.6 has separate initial E's for positive and negative roots
+  \let\POL at isolz@E\POL at isolz@E at neg
   \ifnum\POL at isolz@NbOfNegRoots>\z@
-% refactored at 0.7 to fix cases leading to an intervals with zero as end-point
+% refactored at 0.7 to fix cases leading to intervals having zero as end-point
     \POL at isolz@findroots at neg
   \fi
-  \let\POL at isolz@E\POL at isolz@@E
+  \let\POL at isolz@E\POL at isolz@E at pos
   \def\POL at IsoLeft@Int{0}%
   \let\POL at IsoLeftSV  \POL at IsoAtZeroSV  % véritable SV en zéro
   \let\POL at IsoLeftSign\POL at IsoAtZeroSign% véritable signe en zéro
@@ -973,10 +990,6 @@
   \repeat
 }%
 \def\POL at isolz@findroots at pos{%
-  % remark (2018/12/08), this needs some refactoring, I hardly understand
-  % the logic and it hides most into the recursion done by \POL at isolz@check
-  % It would probably make more sense to proceed like done for the negative
-  % but here finding the largest roots first.
   \def\POL at IsoRight@Int{1}%
   \POL at isolz@findnextzeroboundeddecade at pos
   \unless\ifnum\POL at IsoRightSV=\POL at IsoLeftSV\space
@@ -985,7 +998,7 @@
     % and none are larger
     \POL at isolz@check % will recurse inside groups if needed with modified E
   \fi
-  % we know get the roots in the last 9 decades from 10^{e-1} to 10^{e}
+  % we now get the roots in the last 9 decades from 10^{e-1} to 10^{e}
   % we should arguably do a more efficient dichotomy here
   \def\POL at IsoLeft@Int{1}%
   \let\POL at IsoLeftSV\POL at IsoRightSV
@@ -1101,14 +1114,6 @@
   \ifnum\POL at IsoRightSign=\POL@@IsoRightSign\space
   \repeat
   % now second root has been separated from the one at left end point
-% we update the storage of the root at left for it to have the same number
-% of digits in mantissa. No, I decided not to do that to avoid complications.
-  % \begingroup
-  %   \let\POL at IsoRight@Int\POL at IsoLeft@Int
-  %   \def\POL at IsoRightSign{0}%
-  %   \edef\POL at isolz@IntervalIndex{\the\numexpr\POL at isolz@IntervalIndex-\@ne}%
-  %   \POL at refine@storeleftandright
-  % \endgroup
   \edef\POL@@IsoRight at Int{\xintDSL{\xintInc{\xintDSR{\POL at IsoLeft@Int}}}}%
   \let\POL at IsoLeft@Int\POL at IsoRight@Int
   \let\POL at IsoLeftSign\POL at IsoRightSign
@@ -1128,7 +1133,7 @@
       % the IsoRightSign is now wrong but here we don't care
     \fi\fi
   \fi
-  % on exit, exact root found iff \POL at IsoRightSign is zero
+  % on exit, exact root has been found iff \POL at IsoRightSign is zero
   \POL at refine@storeleftandright
 \endgroup
 }%
@@ -1224,7 +1229,6 @@
     \fi
     \begingroup\xintglobaldefstrue
     % skip some overhead of \xintdefvar...
-    % Let me repeat: ATTENTION to change of internal format at xint 1.4
       \XINT_expr_defvar_one{\POL at sturmname L_\POL at isolz@IntervalIndex}%
          {{\POL at IsoLeft@rawout}}%
       \XINT_expr_defvar_one{\POL at sturmname R_\POL at isolz@IntervalIndex}%
@@ -1235,7 +1239,6 @@
     \endgroup
 }%
 %% \PolRefineInterval
-%% ATTENTION TO xint 1.4 INTERNAL CHANGES
 \def\POL at xintexprGetVar#1{\expandafter\expandafter\expandafter\xint_firstofone
                           \csname XINT_expr_varvalue_#1\endcsname}%
 % attention, also used by \POL at findrat@loop at a
@@ -1346,9 +1349,6 @@
 %
 %
 \def\PolIntervalWidth#1#2{%
-% le \xintRez est à cause des E positifs, car trailing zéros explicites
-% si je travaillais à partir des variables xintexpr directement ne devrait
-% pas être nécessaire, mais trop fragile par rapport à chgt internes possibles
      \romannumeral0\xintrez{\xintSub{\@nameuse{POL_ZR#1*}{#2}}%
                                     {\@nameuse{POL_ZL#1*}{#2}}}
 }%
@@ -1363,7 +1363,8 @@
 }%
 \def\POL at ensureintervallengths{%
    \POL at count\z@
-   % \POL at count used by \POL at sturmchain@getSV at at but latter not used
+   % attention that \POL at count would be modified by \POL at sturmchain@getSV at at
+   % but this latter macro not invoked by \POL at ensure@one
    \xintloop
      \advance\POL at count\@ne
      \edef\POL at isolz@IntervalIndex{\the\POL at count}%
@@ -1377,11 +1378,8 @@
    \edef\POL at sturmname{#1}%
    \edef\POL at ensure@targetE{\the\numexpr#3}%
    \edef\POL at isolz@IntervalIndex{\the\numexpr#2}%
-% peut-être autoriser -1, -2, ... ?
    \ifnum\POL at isolz@IntervalIndex>\z@
-% 0.7, add this safeguard but attention means this structure must be in place
    \ifnum\csname POL_ZL\POL at sturmname*0\endcsname>\z@
-% je ne fais pas les \expandafter mais je préfèrerais ne pas être à l'intérieur
      \POL at ensure@one
    \fi
    \fi
@@ -1438,8 +1436,9 @@
 \catcode`_ 8 %
 \catcode`& 4 %
 \def\PolPrintIntervals{\POL at ifstar{\PolPrintIntervals@@}{\PolPrintIntervals@}}%
-% As explained in the docs, this is an example of customization so is not
-% itself customizable, apart from redefining it entirely!
+% As explained in the docs, the starred version is an example of customization
+% It is itself basically not easily customizable, except for this:
+\def\PolPrintIntervals@@arraystretch{2}% (the 2 was hardcoded prior to 0.8.6)
 \def\PolPrintIntervals@@{%
  \begingroup
    \def\POL at AfterPrintIntervals{\endgroup}%
@@ -1447,14 +1446,14 @@
    \let\PolPrintIntervalsUnknownRoot\POL@@PrintIntervalsUnknownRoot
    \let\PolPrintIntervalsKnownRoot\POL@@PrintIntervalsKnownRoot
 \ifdefined\array
-   \def\arraystretch{2}%
+   \let\arraystretch\PolPrintIntervals@@arraystretch
    \def\PolPrintIntervalsBeginEnv{\[\begin{array}{cl}}%\]
    \def\PolPrintIntervalsEndEnv{\end{array}\]}%
 \else
    \def\PolPrintIntervalsBeginEnv{$$\tabskip0pt plus 1000pt minus 1000pt
         \halign to\displaywidth\bgroup
-        \hfil\vrule height 2\ht\strutbox
-                    depth  2\dp\strutbox
+        \hfil\vrule height \PolPrintIntervals@@arraystretch\ht\strutbox
+                    depth  \PolPrintIntervals@@arraystretch\dp\strutbox
                     width  \z@
         $####$\tabskip6pt&$####$\hfil
         \tabskip0pt plus 1000pt minus 1000pt\cr}%$$
@@ -1476,6 +1475,10 @@
      \begingroup\edef\POL at tmp{\endgroup
        \unexpanded\expandafter{\PolPrintIntervalsBeginEnv}%
        \unexpanded\expandafter{\POL at PrintIntervals@Loop}%
+% This is added at 0.8.6 to allow usage of amsmath environment as they typeset
+% twice: we must prepare for a second execution.  Adds slight general overhead.
+       \gdef\noexpand\PolPrintIntervalsTheIndex{1}%
+       \noexpand\POL at PrintIntervals@DoDefs
        \unexpanded\expandafter{\PolPrintIntervalsEndEnv}%
      }\POL at tmp
    \fi
@@ -1485,7 +1488,7 @@
 }%
 \let\POL at AfterPrintIntervals\empty
 \let\PolPrintIntervalsNoRealRoots\empty
-\def\PolPrintIntervalsArrayStretch{1}%
+\def\PolPrintIntervalsArrayStretch{1}%   used by non-starred version
 \ifdefined\array
     \def\PolPrintIntervalsBeginEnv{\[\begin{array}{rcccl}}%
     \def\PolPrintIntervalsEndEnv{\end{array}\]}%
@@ -1558,7 +1561,6 @@
 }%
 \catcode`& 7 %
 \catcode`_ 11 %
-\def\POL at PrintIntervals@Loop#1{%
 \def\POL at PrintIntervals@Loop{%
   \POL at SturmIfZeroExactlyKnown\PolPrintIntervalsTheSturmName
                               \PolPrintIntervalsTheIndex
@@ -1568,10 +1570,15 @@
   \unless\ifnum\PolPrintIntervalsTheIndex>
                \@nameuse{POL_ZL\PolPrintIntervalsTheSturmName*0}
      \POL at PrintIntervals@DoDefs
-     \xint_afterfi{#1\POL at PrintIntervals@Loop}%
+     \xint_afterfi{\PolPrintIntervalsRowSeparator\POL at PrintIntervals@Loop}%
   \fi
-}}%
-\ifdefined\array\POL at PrintIntervals@Loop{\\}\else\POL at PrintIntervals@Loop{\cr}\fi
+}%
+% added at 0.8.6:
+\ifdefined\array
+  \def\PolPrintIntervalsRowSeparator{\\}%
+\else
+  \def\PolPrintIntervalsRowSeparator{\cr}%
+\fi
 \def\POL at PrintIntervals@DoDefs{%
   \xdef\PolPrintIntervalsTheLeftEndPoint{%
      \csname POL_ZL\PolPrintIntervalsTheSturmName*\PolPrintIntervalsTheIndex

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2022-01-10 18:36:08 UTC (rev 61558)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2022-01-10 21:27:44 UTC (rev 61559)
@@ -2919,7 +2919,6 @@
     return "";
   }
 
-  warn "\t SPECIALINS called for $package";
   my $raw_dir = "$RAW_DIR/$packagedir";
   return if (-e "$RAW_DIR/$packagedir/TDS_READY");
   



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