summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/polexpr/polexpr.html
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-01-15 22:20:09 +0000
committerKarl Berry <karl@freefriends.org>2018-01-15 22:20:09 +0000
commit7a4b66cc343bf7b3c01817fc4b5b0ed1934249d9 (patch)
tree25929c8dd99ea7a16a6da211b688e85af50259e8 /Master/texmf-dist/doc/latex/polexpr/polexpr.html
parent1cffeb47b775226f1d947b95055f86daac06c88a (diff)
polexpr (15jan18)
git-svn-id: svn://tug.org/texlive/trunk@46318 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/polexpr/polexpr.html')
-rw-r--r--Master/texmf-dist/doc/latex/polexpr/polexpr.html730
1 files changed, 730 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/polexpr/polexpr.html b/Master/texmf-dist/doc/latex/polexpr/polexpr.html
new file mode 100644
index 00000000000..d5f3237a0b2
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/polexpr/polexpr.html
@@ -0,0 +1,730 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.14: http://docutils.sourceforge.net/" />
+<title>Package polexpr documentation</title>
+<style type="text/css">
+body{font-size: 14pt;}
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+ border: 0 }
+
+table.borderless td, table.borderless th {
+ /* Override padding for "table.docutils td" with "! important".
+ The right padding separates the table cells. */
+ padding: 0 0.5em 0 0 ! important }
+
+.first {
+ /* Override more specific margin styles with "! important". */
+ margin-top: 0 ! important }
+
+.last, .with-subtitle {
+ margin-bottom: 0 ! important }
+
+.hidden {
+ display: none }
+
+.subscript {
+ vertical-align: sub;
+ font-size: smaller }
+
+.superscript {
+ vertical-align: super;
+ font-size: smaller }
+
+a.toc-backref {
+ text-decoration: none ;
+ color: black }
+
+blockquote.epigraph {
+ margin: 2em 5em ; }
+
+dl.docutils dd {
+ margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+ overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+ font-weight: bold }
+*/
+
+div.abstract {
+ margin: 2em 5em }
+
+div.abstract p.topic-title {
+ font-weight: bold ;
+ text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+ margin: 2em ;
+ border: medium outset ;
+ padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+ font-weight: bold ;
+ font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+ color: red ;
+ font-weight: bold ;
+ font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+ compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+ margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+ margin-top: 0.5em }
+*/
+
+div.dedication {
+ margin: 2em 5em ;
+ text-align: center ;
+ font-style: italic }
+
+div.dedication p.topic-title {
+ font-weight: bold ;
+ font-style: normal }
+
+div.figure {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+div.footer, div.header {
+ clear: both;
+ font-size: smaller }
+
+div.line-block {
+ display: block ;
+ margin-top: 1em ;
+ margin-bottom: 1em }
+
+div.line-block div.line-block {
+ margin-top: 0 ;
+ margin-bottom: 0 ;
+ margin-left: 1.5em }
+
+div.sidebar {
+ margin: 0 0 0.5em 1em ;
+ border: medium outset ;
+ padding: 1em ;
+ background-color: #ffffee ;
+ width: 40% ;
+ float: right ;
+ clear: right }
+
+div.sidebar p.rubric {
+ font-family: sans-serif ;
+ font-size: medium }
+
+div.system-messages {
+ margin: 5em }
+
+div.system-messages h1 {
+ color: red }
+
+div.system-message {
+ border: medium outset ;
+ padding: 1em }
+
+div.system-message p.system-message-title {
+ color: red ;
+ font-weight: bold }
+
+div.topic {
+ margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+ margin-top: 0.4em }
+
+h1.title {
+ text-align: center }
+
+h2.subtitle {
+ text-align: center }
+
+hr.docutils {
+ width: 75% }
+
+img.align-left, .figure.align-left, object.align-left, table.align-left {
+ clear: left ;
+ float: left ;
+ margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right, table.align-right {
+ clear: right ;
+ float: right ;
+ margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+table.align-center {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.align-left {
+ text-align: left }
+
+.align-center {
+ clear: both ;
+ text-align: center }
+
+.align-right {
+ text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+ text-align: inherit }
+
+/* div.align-center * { */
+/* text-align: left } */
+
+.align-top {
+ vertical-align: top }
+
+.align-middle {
+ vertical-align: middle }
+
+.align-bottom {
+ vertical-align: bottom }
+
+ol.simple, ul.simple {
+ margin-bottom: 1em }
+
+ol.arabic {
+ list-style: decimal }
+
+ol.loweralpha {
+ list-style: lower-alpha }
+
+ol.upperalpha {
+ list-style: upper-alpha }
+
+ol.lowerroman {
+ list-style: lower-roman }
+
+ol.upperroman {
+ list-style: upper-roman }
+
+p.attribution {
+ text-align: right ;
+ margin-left: 50% }
+
+p.caption {
+ font-style: italic }
+
+p.credits {
+ font-style: italic ;
+ font-size: smaller }
+
+p.label {
+ white-space: nowrap }
+
+p.rubric {
+ font-weight: bold ;
+ font-size: larger ;
+ color: maroon ;
+ text-align: center }
+
+p.sidebar-title {
+ font-family: sans-serif ;
+ font-weight: bold ;
+ font-size: larger }
+
+p.sidebar-subtitle {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+p.topic-title {
+ font-weight: bold }
+
+pre.address {
+ margin-bottom: 0 ;
+ margin-top: 0 ;
+ font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+ font-family: sans-serif ;
+ font-style: oblique }
+
+span.classifier-delimiter {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+span.interpreted {
+ font-family: sans-serif }
+
+span.option {
+ white-space: nowrap }
+
+span.pre {
+ white-space: pre }
+
+span.problematic {
+ color: red }
+
+span.section-subtitle {
+ /* font-size relative to parent (h1..h6 element) */
+ font-size: 80% }
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px }
+
+table.docinfo {
+ margin: 2em 4em }
+
+table.docutils {
+ margin-top: 0.5em ;
+ margin-bottom: 0.5em }
+
+table.footnote {
+ border-left: solid 1px black;
+ margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+ padding-left: 0.5em ;
+ padding-right: 0.5em ;
+ vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+ font-weight: bold ;
+ text-align: left ;
+ white-space: nowrap ;
+ padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+ border: 0px;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-collapse: collapse;
+}
+table.docutils.booktabs * {
+ border: 0px;
+}
+table.docutils.booktabs th {
+ border-bottom: thin solid;
+ text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+ font-size: 100% }
+
+ul.auto-toc {
+ list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="package-polexpr-documentation">
+<h1 class="title">Package polexpr documentation</h1>
+
+<!-- comment: -*- fill-column: 72; mode: rst; -*- -->
+<div class="section" id="first-examples">
+<h1>First Examples</h1>
+<p>The syntax is:</p>
+<pre class="literal-block">
+\poldef &lt;name&gt;(x):=&lt;expression in variable x&gt;;
+</pre>
+<p>where in place of <tt class="docutils literal">x</tt> an arbitrary <em>dummy variable</em> is authorized
+(i.e. per default any of <tt class="docutils literal"><span class="pre">[a..z|A..Z]</span></tt>; more letters can be declared
+under Unicode engines.) One can also issue:</p>
+<pre class="literal-block">
+\PolDef{name}{expression in variable x}
+</pre>
+<p>which admits an optional first argument to modify the variable letter
+from its default <tt class="docutils literal">x</tt>.</p>
+<dl class="docutils">
+<dt><tt class="docutils literal">\poldef <span class="pre">f(x):=</span> <span class="pre">1-x+x^2;</span></tt></dt>
+<dd>defines polynomial <tt class="docutils literal">f</tt>. Polynomial names must start with a letter
+and may contain letters, digits, and underscores. The variable must
+be a single letter. The colon character is optional. The semi-colon
+at end of expression is mandatory.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolDef{f}{1-x+x^2}</span></tt></dt>
+<dd>does the same as <tt class="docutils literal">\poldef <span class="pre">f(x):=</span> <span class="pre">1-x+x^2;</span></tt> To use another letter
+than <tt class="docutils literal">x</tt> in the expression, one must pass it as an extra optional
+argument to <tt class="docutils literal">\PolDef</tt>. Useful if the semi-colon has been assigned
+some non-standard catcode by some package.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolLet{g}{f}</span></tt></dt>
+<dd>saves a copy of <tt class="docutils literal">f</tt> under name <tt class="docutils literal">g</tt>.</dd>
+<dt><tt class="docutils literal">\poldef <span class="pre">f(z):=</span> <span class="pre">f(z)^2;</span></tt></dt>
+<dd>redefines <tt class="docutils literal">f</tt> in terms of itself.</dd>
+<dt><tt class="docutils literal">\poldef <span class="pre">f(T):=</span> <span class="pre">f(f(T));</span></tt></dt>
+<dd>again redefines <tt class="docutils literal">f</tt> in terms of its (new) self.</dd>
+<dt><tt class="docutils literal">\poldef <span class="pre">k(z):=</span> <span class="pre">f(z)-g(g(z)^2)^2;</span></tt></dt>
+<dd>should now define the zero polynomial... Let's check:
+<tt class="docutils literal">\[ k(z) = <span class="pre">\PolTypeset[z]{k}</span> \]</tt></dd>
+<dt><tt class="docutils literal"><span class="pre">\PolDiff{f}{df_dx}</span></tt></dt>
+<dd>sets <tt class="docutils literal">df_dx</tt> to the derivative of <tt class="docutils literal">f</tt>.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolDiff{df_dx}{f_xx}</span></tt></dt>
+<dd>obtains second derivative.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolDiff[3]{f}{d3f_dx3}</span></tt></dt>
+<dd>computes directly the third derivative. Its name does not have to be
+chosen so complicated <tt class="docutils literal">:)</tt>, but the right quote <tt class="docutils literal">'</tt> is not
+allowed in polynomial names (currently).</dd>
+</dl>
+<pre class="literal-block">
+$f(z) = \PolTypeset[z]{f} $\newline
+$f'(z) = \PolTypeset[z]{df_dx}$\newline
+$f''(z) = \PolTypeset[z]{f_xx}$\newline
+$f'''(z)= \PolTypeset[z]{d3f_dx3}$\par
+</pre>
+<div class="admonition important">
+<p class="first admonition-title">Important</p>
+<p>The package does not currently know rational functions: <tt class="docutils literal">/</tt> in
+a parsed polynomial expression does the Euclidean quotient:</p>
+<pre class="literal-block">
+(1-x^2)/(1-x)
+</pre>
+<p>does give <tt class="docutils literal">1+x</tt> but</p>
+<pre class="literal-block">
+(1/(1-x))*(1-x^2)
+</pre>
+<p>evaluates to zero. This will work as expected:</p>
+<pre class="last literal-block">
+\poldef k(x):= (x-1)(x-2)(x-3)(x-4)/(x^2-5x+4);
+</pre>
+</div>
+<div class="admonition attention">
+<p class="first admonition-title">Attention!</p>
+<p class="last"><tt class="docutils literal">1/2 x</tt> skips the space and is treated like <tt class="docutils literal"><span class="pre">1/(2x)</span></tt> because of
+the tacit multiplication rules of xintexpr. But this means it gives
+zero! Thus one must use <tt class="docutils literal">(1/2)x</tt> or <tt class="docutils literal">1/2*x</tt> or <tt class="docutils literal"><span class="pre">(1/2)*x</span></tt> for
+disambiguation: <tt class="docutils literal"><span class="pre">x-1/2*x^2+1/3*x^3...</span></tt></p>
+</div>
+<p>After:</p>
+<pre class="literal-block">
+\poldef f1(x):= 25(x-1)(x^2-2)(x-3)(x-4)(x-5);%
+\poldef f2(x):= 37(x-1)(x^2-2)(x-6)(x-7)(x-8);%
+</pre>
+<p>the macro call <tt class="docutils literal"><span class="pre">\PolGCD{f1}{f2}{k}</span></tt> sets <tt class="docutils literal">k</tt> to the (unitary) GCD of
+<tt class="docutils literal">f1</tt> and <tt class="docutils literal">f2</tt>.</p>
+<dl class="docutils">
+<dt><tt class="docutils literal">\PolToExpr{k}</tt></dt>
+<dd>will thus (expandably) give in this case <tt class="docutils literal"><span class="pre">2-2*x^1-1*x^2+1*x^3</span></tt>.
+This is useful for console or file output (the syntax is Maple- and
+PSTricks-compatible; currently the letter <tt class="docutils literal">x</tt> in output is not
+customizable, but this can easily be added if requested from author.)</dd>
+</dl>
+</div>
+<div class="section" id="non-expandable-macros">
+<h1>Non-expandable macros</h1>
+<dl class="docutils">
+<dt><tt class="docutils literal">\poldef <span class="pre">name(letter):=</span> polynomial expression using letter;</tt></dt>
+<dd><p class="first">This evaluates the polynomial expression and stores the coefficients
+in a private structure accessible later via other package macros,
+under the user-chosen <tt class="docutils literal">name</tt>. Of course previously defined
+polynomials are allowed in a new expression. Names must start with a
+letter and are constituted of letters, digits and underscore
+characters. See Examples above.</p>
+<p>As a side effect the function <tt class="docutils literal">name()</tt> is recognized as a genuine
+<tt class="docutils literal"><span class="pre">\xintexpr...\relax</span></tt> function for (exact) numerical evaluation. It
+computes values not according to the original expression but via
+the Horner scheme corresponding to the polynomial coefficients.</p>
+<p class="last">The original expression is lost after parsing, and in particular
+the package provides no way to typeset it. This has to be done
+manually, if needed.</p>
+</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolDef{name}{P(x)}</span></tt></dt>
+<dd>Does the same but the variable is assumed to be <tt class="docutils literal">x</tt>. To use
+another letter, pass it as first optional argument:
+<tt class="docutils literal"><span class="pre">\PolDef[X]{name}{P(X)}</span></tt>.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolLet{g}{f}</span></tt></dt>
+<dd>Makes a copy of already defined polynomial f to new one g. Same
+effect as <tt class="docutils literal"><span class="pre">\PolDef{g}{f(x)}</span></tt> but faster.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolAssign{f}\toarray\Array</span></tt></dt>
+<dd><p class="first">Defines a one-argument expandable macro <tt class="docutils literal"><span class="pre">\Array{#1}</span></tt> which expands
+to the (raw) #1th polynomial coefficient.</p>
+<ul class="last simple">
+<li>Attention, coefficients here are indexed starting at 1.</li>
+<li>With #1=-1, -2, ..., <tt class="docutils literal"><span class="pre">\Array{#1}</span></tt> returns leading coefficients.</li>
+<li>With #1=0, returns the number of coefficients, i.e. <tt class="docutils literal">1 + deg f</tt>
+for non-zero polynomials.</li>
+<li>Out-of-range #1's return <tt class="docutils literal">0/1[0]</tt>.</li>
+</ul>
+</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolGet{f}\fromarray\Array</span></tt></dt>
+<dd><p class="first">Does the converse operation to <tt class="docutils literal"><span class="pre">\PolAssign{f}\toarray\Array</span></tt>. No
+error checks on validity of coefficients as numbers. Each
+<tt class="docutils literal">\Array{index}</tt> is expanded in an <tt class="docutils literal">\edef</tt> before being assigned
+to a coefficient. Leading zero coefficients are removed from the
+polynomial.</p>
+<p>(contrived) Example:</p>
+<pre class="literal-block">
+\xintAssignArray{1}{-2}{5}{-3}\to\foo
+\PolGet{f}\fromarray\foo
+</pre>
+<p class="last">This will define <tt class="docutils literal">f</tt> as would have <tt class="docutils literal">\poldef <span class="pre">f(x):=1-2x+5x^2-3x^3;</span></tt>.
+However the coefficients are still in their original form (i.e.
+they were not subjected to <tt class="docutils literal">\xintRaw</tt> or similar xintfrac macro.)</p>
+</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolFromCSV{f}{comma</span> separated coefficients}</tt></dt>
+<dd><p class="first">Defines a polynomial directly from the comma separated list (or a
+macro expanding to such a list) of its coefficients, the constant
+term being the first item. No validity checks. Spaces from the list
+argument are trimmed. List items are expanded in an <tt class="docutils literal">\edef</tt>, but
+currently left in their original form like e.g. <tt class="docutils literal">1.5e3</tt> which is
+not converted to <tt class="docutils literal">15/1[2]</tt> <em>raw</em> xintfrac format (this may
+change).</p>
+<p>Leading zero coefficients are removed:</p>
+<pre class="literal-block">
+\PolFromCSV{J}{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+</pre>
+<p>defines the zero polynomial, which has only one (zero) coefficient.</p>
+<p class="last">See also expandable macro <tt class="docutils literal">\PolToCSV</tt>.</p>
+</dd>
+<dt><tt class="docutils literal">\PolTypeset{name}</tt></dt>
+<dd><p class="first">Typesets in descending powers in math mode. It uses letter <tt class="docutils literal">x</tt> but
+this can be changed via an optional argument:</p>
+<pre class="literal-block">
+\PolTypeset[z]{name}
+</pre>
+<p>By default zero coefficients are skipped (issue <tt class="docutils literal">\poltypesetalltrue</tt>
+to get all of them in output).</p>
+<p class="last">Macros <tt class="docutils literal">\PolTypesetCmd</tt>, <tt class="docutils literal">\PolTypesetPlus</tt>, <tt class="docutils literal">\PolTypesetMonomial</tt>
+can help configure the output. See the package code.</p>
+</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolTypeset*{name}</span></tt></dt>
+<dd>Typesets in ascending powers. Change the letter from its default
+<tt class="docutils literal">x</tt> by optional argument.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolDiff{f1}{f2}</span></tt></dt>
+<dd><p class="first">This sets f2 to the first derivative of <tt class="docutils literal">f1</tt>. It is allowed to
+issue <tt class="docutils literal"><span class="pre">\PolDiff{f}{f}</span></tt>, effectively replacing <tt class="docutils literal">f</tt> by <tt class="docutils literal">f'</tt>.</p>
+<p class="last">Coefficients of the result <tt class="docutils literal">f2</tt> are irreducible fractions
+(see <a class="reference internal" href="#technicalities">Technicalities</a> for the whole story.)</p>
+</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolDiff[N]{f1}{f2}</span></tt></dt>
+<dd>This sets <tt class="docutils literal">f2</tt> to the <tt class="docutils literal">N</tt>-th derivative of <tt class="docutils literal">f1</tt>. Identical
+arguments is allowed. With <tt class="docutils literal">N=0</tt>, same effect as
+<tt class="docutils literal"><span class="pre">\PolLet{f2}{f1}</span></tt>. With negative <tt class="docutils literal">N</tt>, switches to using
+<tt class="docutils literal">\PolAntiDiff</tt>.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolAntiDiff{f1}{f2}</span></tt></dt>
+<dd><p class="first">This sets <tt class="docutils literal">f2</tt> to the primitive of <tt class="docutils literal">f1</tt> vanishing at zero.</p>
+<p class="last">Coefficients of the result <tt class="docutils literal">f2</tt> are irreducible fractions
+(see <a class="reference internal" href="#technicalities">Technicalities</a> for the whole story.)</p>
+</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolAntiDiff[N]{f1}{f2}</span></tt></dt>
+<dd>This sets <tt class="docutils literal">f2</tt> to the result of <tt class="docutils literal">N</tt> successive integrations on
+<tt class="docutils literal">f1</tt>. With negative <tt class="docutils literal">N</tt>, it switches to using <tt class="docutils literal">\PolDiff</tt>.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolDivide{f1}{f2}{Q}{R}</span></tt></dt>
+<dd>This sets <tt class="docutils literal">Q</tt> and <tt class="docutils literal">R</tt> to be the quotient and remainder in the
+Euclidean division of <tt class="docutils literal">f1</tt> by <tt class="docutils literal">f2</tt>.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolGCD{f}{g}{k}</span></tt></dt>
+<dd>This sets <tt class="docutils literal">k</tt> to be the G.C.D. It is a unitary polynomial except
+if both <tt class="docutils literal">f</tt> and <tt class="docutils literal">g</tt> vanish, then <tt class="docutils literal">k</tt> is the zero polynomial.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{name}</span></tt></dt>
+<dd><p class="first">It modifies each coefficient of the defined polynomial via the
+<em>expandable</em> macro <tt class="docutils literal">\macro</tt>. The degree is adjusted as necessary
+if some leading coefficients vanish after the operation. In
+replacement text of <tt class="docutils literal">\macro</tt>, <tt class="docutils literal">\index</tt> expands to the
+coefficient index (which is defined to be zero for the constant
+term).</p>
+<p>Notice that <tt class="docutils literal">\macro</tt> will have to handle inputs of the shape
+<tt class="docutils literal">A/B[N]</tt> (xintfrac internal notation). This means that it probably
+will have to be expressed in terms of macros from xintfrac package.</p>
+<p>Example:</p>
+<pre class="literal-block">
+\def\foo#1{\xintMul{#1}{\the\numexpr\index*\index\relax}}
+</pre>
+<p class="last">(or with <tt class="docutils literal"><span class="pre">\xintSqr{\xindex}</span></tt>) to replace <tt class="docutils literal">n</tt>-th coefficient
+<tt class="docutils literal">f_n</tt> by <tt class="docutils literal">f_n*n^2</tt>.</p>
+</dd>
+<dt><tt class="docutils literal">\PolReduceCoeffs{name}</tt></dt>
+<dd>About the same as <tt class="docutils literal"><span class="pre">\PolMapCoeffs{\xintIrr}{name}</span></tt> (but adds
+<tt class="docutils literal">[0]</tt> postfix which speeds up xintfrac operations when
+evaluating.)</dd>
+</dl>
+</div>
+<div class="section" id="expandable-macros">
+<h1>Expandable macros</h1>
+<p>All these macros expand completely in two steps except <tt class="docutils literal">\PolToExpr</tt>
+which needs a <tt class="docutils literal">\write</tt>, <tt class="docutils literal">\edef</tt> or a <tt class="docutils literal"><span class="pre">\csname...\endcsname</span></tt> context.</p>
+<dl class="docutils">
+<dt><tt class="docutils literal"><span class="pre">\PolEval{name}\At{value}</span></tt></dt>
+<dd>It boils down to <tt class="docutils literal">\xinttheexpr <span class="pre">reduce(name(value))\relax</span></tt>.</dd>
+<dt><tt class="docutils literal"><span class="pre">\PolNthCoeff{name}{N}</span></tt></dt>
+<dd>It expands to the raw <tt class="docutils literal">N</tt>-th coefficient (<tt class="docutils literal">0/1[0]</tt> if index is
+out of range). With <tt class="docutils literal"><span class="pre">N=-1</span></tt>, <tt class="docutils literal"><span class="pre">-2</span></tt>, ... expands to the leading
+coefficients.</dd>
+<dt><tt class="docutils literal">\PolDegree{name}</tt></dt>
+<dd>It expands to the degree. This is <tt class="docutils literal"><span class="pre">-1</span></tt> if zero polynomial but this
+may change in future. Should it then expand to <tt class="docutils literal"><span class="pre">-\infty</span></tt> ?</dd>
+<dt><tt class="docutils literal">\PolToExpr{f}</tt></dt>
+<dd><p class="first">Expands to <tt class="docutils literal">f_0 + f_1*x + f_2*x^2 + ...</tt> (ascending powers). <a class="footnote-reference" href="#id3" id="id1">[1]</a>,
+<a class="footnote-reference" href="#id4" id="id2">[2]</a></p>
+<table class="docutils footnote" frame="void" id="id3" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>in a <tt class="docutils literal">\write</tt>, <tt class="docutils literal">\edef</tt>, or <tt class="docutils literal"><span class="pre">\csname...\endcsname</span></tt>, but
+not under <tt class="docutils literal"><span class="pre">\romannumeral-`0</span></tt>.</td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id4" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>the letter <tt class="docutils literal">x</tt> is (in this release) not customizable.</td></tr>
+</tbody>
+</table>
+<p>By default zero coefficients are skipped (issue <tt class="docutils literal">\poltoexprtrue</tt> to
+get all of them in output).</p>
+<p>No <tt class="docutils literal">+</tt> sign before negative coefficients, for compliance with Maple
+input format. This means though that parsing the result back via
+naive delimited macros is difficult, see <tt class="docutils literal">\PolToList</tt> and <tt class="docutils literal">\PolToCSV</tt>
+for more low-level formats making it easier to get expandably some
+output of one's choice, which may possibly be parsed later on by
+other macros of one's design, or from other packages.</p>
+<p>Of course <tt class="docutils literal">\PolToExpr{f}</tt> can be inserted in a poldef, as the
+latter expands token by token, hence will force complete expansion
+of <tt class="docutils literal">\PolToExpr{f}</tt>, but simply <tt class="docutils literal">f(x)</tt> will be more efficient for the
+identical result.</p>
+<p class="last"><tt class="docutils literal">\PolToExprCmd</tt> is the one-argument macro used by <tt class="docutils literal">\PolToExpr</tt> for the
+coefficients, it defaults to <tt class="docutils literal"><span class="pre">\xintPRaw{\xintRawWithZeros{#1}}</span></tt>. One
+will have to redefine it to use <tt class="docutils literal"><span class="pre">\xintIrr{#1}</span></tt> in place of
+<tt class="docutils literal"><span class="pre">\xintRawWithZeros{#1}</span></tt> to get in output reduced coefficients.</p>
+</dd>
+<dt><tt class="docutils literal">\PolToList{f}</tt></dt>
+<dd>Expands to <tt class="docutils literal"><span class="pre">{f_0}{f_1}...{f_N}</span></tt> with <tt class="docutils literal">N</tt> = degree of f (except
+zero polynomial which does give <tt class="docutils literal">{0/1[0]}</tt> and not an empty
+output.)</dd>
+<dt><tt class="docutils literal">\PolToCSV{f}</tt></dt>
+<dd>Expands to <tt class="docutils literal">f_0, f_1, f_2, <span class="pre">.....,</span> f_N</tt>. Converse to
+<tt class="docutils literal">\PolFromCSV</tt>.</dd>
+</dl>
+</div>
+<div class="section" id="technicalities">
+<h1>Technicalities</h1>
+<ul>
+<li><p class="first">The catcode of the semi-colon is reset temporarily by <tt class="docutils literal">\poldef</tt> macro in
+case some other package (for example the French babel module) may have
+made it active. This will fail though if the whole thing was already
+part of a macro argument, in such cases one can use <tt class="docutils literal">\PolDef</tt> rather.
+The colon in <tt class="docutils literal">:=</tt> may be active with no consequences.</p>
+</li>
+<li><p class="first">Beware the <tt class="docutils literal">1/2 x</tt> problem: as mentioned above, it will be give zero due
+to the tacit multiplication rules of <tt class="docutils literal">\xintexpr</tt> and to the fact that
+the package will do the Euclidean division of <tt class="docutils literal">1</tt> by polynomial <tt class="docutils literal">2x</tt>.</p>
+</li>
+<li><p class="first">During execution of polynomial operations by <tt class="docutils literal">\poldef</tt> (but not
+during the initial purely numerical parsing of the expression), the
+xintfrac macro <tt class="docutils literal">\xintAdd</tt> is temporarily patched to always express
+<tt class="docutils literal">a/b + c/d</tt> with <tt class="docutils literal"><span class="pre">l.c.m.(b,d)</span></tt> as denominator. Indeed the current
+(xint 1.2p) <tt class="docutils literal">\xintAdd</tt> uses <tt class="docutils literal"><span class="pre">(ad+bc)/bd</span></tt> formula except if <tt class="docutils literal">b</tt>
+divides <tt class="docutils literal">d</tt> or <tt class="docutils literal">d</tt> divides <tt class="docutils literal">b</tt>, which quickly leads in real life
+to big denominators.</p>
+<p>It is probable that this convention will be backported as default
+behaviour of xintfrac's <tt class="docutils literal">\xintAdd</tt> in a future xint release. When this
+change is merged, there will be an impact on coefficients computed by
+<tt class="docutils literal">\poldef</tt> because the change will apply even to the pure numerical
+evaluations arising during the initial stage of the parsing. Of course
+the coefficients are still the same rational numbers, only
+representation as fractions may change.</p>
+</li>
+<li><p class="first">As a consequence of previous rule, user-chosen common denominators
+survive addition and multiplications:</p>
+<pre class="literal-block">
+\poldef P(x):= 1/2 + 2/2*x + 3/2*x^3 + 4/2*x^4;
+\poldef Q(x):= 1/3 + (2/3)x + (3/3)x^3 + (4/3)x^4;
+\poldef PQ(x):= P(x)Q(x);
+</pre>
+<p>gives the polynomial:</p>
+<pre class="literal-block">
+1/6+4/6*x^1+4/6*x^2+6/6*x^3+20/6*x^4+16/6*x^5+9/6*x^6+24/6*x^7+16/6*x^8
+</pre>
+<p>where all coefficients have the same denominator 6 (which in this
+example is the <tt class="docutils literal">l.c.m</tt> of the denominators of the reduced coefficients.)</p>
+</li>
+<li><p class="first"><tt class="docutils literal">\PolDiff</tt> always applies <tt class="docutils literal">\xintIrr</tt> to the resulting coefficients, except
+that the <em>power of ten</em> part <tt class="docutils literal">[N]</tt> (for example an input in scientific
+notation such as <tt class="docutils literal">1.23e5</tt> gives <tt class="docutils literal">123/1[3]</tt> internally in xintfrac) is not
+taken into account in the reduction of the fraction. This is tentative
+and may change.</p>
+<p>Same remark for <tt class="docutils literal">\PolAntiDiff</tt>.</p>
+</li>
+<li><p class="first">If <tt class="docutils literal">f</tt> was created from comma separated values by macro PolFromCSV,
+then the coefficients will be in the output of <tt class="docutils literal">\PolToList</tt> and
+<tt class="docutils literal">\PolToCSV</tt> in the same format as originally in input: a <tt class="docutils literal">1.3e2</tt>
+will again be a <tt class="docutils literal">1.3e2</tt>.</p>
+<p>In contrast when such coefficients are used in a <tt class="docutils literal">\poldef</tt> (or
+<tt class="docutils literal">\PolDef</tt>) expression, they get transformed during the parsing to
+the xintfrac <em>raw</em> format. This is an unavoidable consequence of usage
+by poldef of <tt class="docutils literal">\xintdeffunc</tt> which itself is based on <tt class="docutils literal">\xintexpr.</tt>
+This <em>raw</em> format speeds up expansion of xintfrac macros for numerical
+evaluations.</p>
+</li>
+<li><p class="first">Currently, the package does not as a result of <tt class="docutils literal">\poldef</tt> add to the TeX
+memory an already pre-computed <em>array</em> structure for the polynomial
+coefficients, as would be constructed by <tt class="docutils literal"><span class="pre">\PolAssign{f}\toarray\macro</span></tt>.
+Such structures are used, but for internal calculations in temporarily
+restricted scopes. Apart from the function <tt class="docutils literal">f()</tt> known to the
+(numerical) <tt class="docutils literal">\xintexpr</tt> parser (whose meaning can be found in the log
+file after xintverbosetrue), the data is (currently) stored in a
+single other macro encapsulating the degree, and the coefficients as a
+list. This may evolve in future.</p>
+</li>
+<li><p class="first">As is to be expected internal structures of the package are barely
+documented and unstable. Don't use them.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="releases">
+<h1>RELEASES</h1>
+<ul class="simple">
+<li>0.1 (2018/01/11): initial release (files README, polexpr.sty).</li>
+<li>0.2 (2018/01/14): documentation moved to polexpr.{txt,html}.</li>
+</ul>
+<p>Files of 0.2 release:</p>
+<ul class="simple">
+<li>README.md,</li>
+<li>polexpr.sty (package file),</li>
+<li>polexpr.txt (documentation),</li>
+<li>polexpr.html (conversion via <a class="reference external" href="http://docutils.sourceforge.net/docs/index.html">DocUtils</a> rst2html.py)</li>
+</ul>
+<p>See README.md for the License and the change log.</p>
+</div>
+</div>
+</body>
+</html>