diff options
author | Karl Berry <karl@freefriends.org> | 2018-04-30 17:03:34 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-04-30 17:03:34 +0000 |
commit | dacf576055f59aefcd2c687d90bc7145338738b9 (patch) | |
tree | e3698dba100b22a4af37d0bfc62af308e01b92b4 | |
parent | 69d6cfb227dab23c7931e9728682733b6b9a1eb7 (diff) |
polexpr (23apr18)
git-svn-id: svn://tug.org/texlive/trunk@47509 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/latex/polexpr/README.md | 11 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/polexpr/polexpr.html | 88 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/polexpr/polexpr.txt | 85 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/polexpr/polexpr.sty | 25 |
4 files changed, 145 insertions, 64 deletions
diff --git a/Master/texmf-dist/doc/latex/polexpr/README.md b/Master/texmf-dist/doc/latex/polexpr/README.md index e0508c86d3e..be224aa4af4 100644 --- a/Master/texmf-dist/doc/latex/polexpr/README.md +++ b/Master/texmf-dist/doc/latex/polexpr/README.md @@ -67,16 +67,13 @@ Releases Documentation fix. - 0.5 (2018/04/08) - new macros `\PolMakePrimitive` and `\PolIContent`. - - breaking change: `\PolToSturm` creates a chain of primitive + - main (breaking) change: `\PolToSturm` creates a chain of primitive integer coefficients polynomials. - - breaking change: polynomials created from `\PolFromCSV` or - `\PolGet` get their coefficients normalized via - [xintfrac](http://www.ctan.org/pkg/xint)'s `\xintRaw`. - - experimental change: optional argument to - `\PolSturmIsolateZeros` to localize search. +- 0.5.1 (2018/04/22) + The `'` character can be used in polynomial names. -Files of 0.5 release: +Files of 0.5.1 release: - README.md, - polexpr.sty (package file), diff --git a/Master/texmf-dist/doc/latex/polexpr/polexpr.html b/Master/texmf-dist/doc/latex/polexpr/polexpr.html index 8eeb33a3811..ce67c863193 100644 --- a/Master/texmf-dist/doc/latex/polexpr/polexpr.html +++ b/Master/texmf-dist/doc/latex/polexpr/polexpr.html @@ -362,7 +362,7 @@ ul.auto-toc { <body> <div class="document" id="package-polexpr-documentation"> <h1 class="title">Package polexpr documentation</h1> -<h2 class="subtitle" id="id1">0.5 (2018/04/08)</h2> +<h2 class="subtitle" id="id1">0.5.1 (2018/04/22)</h2> <!-- comment: -*- fill-column: 72; mode: rst; -*- --> <div class="contents topic" id="contents"> @@ -490,9 +490,25 @@ ul.auto-toc { <pre class="literal-block"> \poldef polname(x):= expression in variable x; </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> +<p>where:</p> +<ul class="simple"> +<li>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.)</li> +<li><tt class="docutils literal">polname</tt> consists of letters, digits, and the <tt class="docutils literal">_</tt> and +<tt class="docutils literal">'</tt> characters. It must start with a letter.</li> +</ul> +<div class="admonition attention"> +<p class="first admonition-title">Attention!</p> +<p class="last">The <tt class="docutils literal">'</tt> is authorized since <tt class="docutils literal">0.5.1</tt>. As a result some constructs +recognized by the <tt class="docutils literal">\xintexpr</tt> parser, such as <tt class="docutils literal">var1 'and' var2</tt> +will get misinterpreted and cause errors. However these constructs +are unlikely to be frequently needed in polynomial expressions, and +the <tt class="docutils literal">\xintexpr</tt> syntax offers alternatives, so it was deemed a +small evil. Of course the <tt class="docutils literal">\xintexpr</tt> parser is modified only +temporarily during execution of <tt class="docutils literal">\poldef</tt>.</p> +</div> +<p>One can also issue:</p> <pre class="literal-block"> \PolDef{polname}{expression in variable x} </pre> @@ -501,7 +517,8 @@ 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 +letter and may contain letters, digits, underscores and the right +tick character. 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> @@ -518,20 +535,28 @@ some non-standard catcode by some package.</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> +<dt><tt class="docutils literal"><span class="pre">\PolDiff{f}{f'}</span></tt></dt> +<dd>sets <tt class="docutils literal">f'</tt> to the derivative of <tt class="docutils literal">f</tt>. The name doesn't have to be +<tt class="docutils literal">f'</tt> (in fact the <tt class="docutils literal">'</tt> is licit only since <tt class="docutils literal">0.5.1</tt>).</dd> +</dl> +<div class="admonition important"> +<p class="first admonition-title">Important</p> +<p class="last">This is not done automatically. If some new definition needs to use +the derivative of some available polynomial, that derivative +polynomial must have been defined via <tt class="docutils literal">\PolDiff</tt>: something like +<tt class="docutils literal"><span class="pre">T'(x)^2</span></tt> will not work without a prior <tt class="docutils literal"><span class="pre">\PolDiff{T}{T'}</span></tt>.</p> +</div> +<dl class="docutils"> +<dt><tt class="docutils literal"><span class="pre">\PolDiff{f}{f''}</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> +<dt><tt class="docutils literal"><span class="pre">\PolDiff[3]{f}{f'''}</span></tt></dt> +<dd>computes the third derivative.</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 +$f'(z) = \PolTypeset[z]{f'} $\newline +$f''(z) = \PolTypeset[z]{f''} $\newline +$f'''(z)= \PolTypeset[z]{f'''} $\par </pre> <div class="admonition important"> <p class="first admonition-title">Important</p> @@ -644,16 +669,16 @@ roots: \PolEnsureIntervalLengths{f_1}{-10}% Here they are with ten digits after decimal mark: \PolPrintIntervals[W]{f_1} -\PolDiff{f_1}{f_xx} -\PolToSturm{f_xx}{f_xx} -\PolSturmIsolateZeros{f_xx} -The second derivative is \PolTypeset{f_xx}. -It has \PolSturmNbOfIsolatedZeros{f_xx} distinct real +\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_xx} +\PolPrintIntervals[X]{f''} Here is the positive one with 20 digits after decimal mark: -\PolEnsureIntervalLength{f_xx}{2}{-20}% -\[X_2 = \PolSturmIsolatedZeroLeft{f_xx}{2}\dots\] +\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> @@ -813,8 +838,9 @@ a general interval.</p> in a private structure accessible later via other package macros, under the user-chosen <tt class="docutils literal">polname</tt>. Of course the <em>expression</em> can use other previously defined polynomials. Names must start with a -letter and are constituted of letters, digits and underscore -characters. The whole <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> syntax is authorized:</p> +letter and are constituted of letters, digits, underscores and +(since <tt class="docutils literal">0.5.1</tt>) the right tick <tt class="docutils literal">'</tt>. +The whole <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> syntax is authorized:</p> <pre class="literal-block"> \poldef sin(z) := add((-1)^i z^(2i+1)/(2i+1)!, i = 0..10); </pre> @@ -2107,16 +2133,24 @@ as roots</a> for usage). It will presumably be replaced in future by an interval specification.</li> </ul> </li> -<li>new non-expandable macros:<ul> +<li>new non-expandable macro:<ul> <li><a class="reference internal" href="#polmakeprimitive">\PolMakePrimitive</a></li> </ul> </li> -<li>new expandable macros:<ul> +<li>new expandable macro:<ul> <li><a class="reference internal" href="#policontent">\PolIContent</a></li> </ul> </li> </ul> </li> +<li><p class="first">v0.5.1 (2018/04/22)</p> +<ul class="simple"> +<li>new feature:<ul> +<li>the character <tt class="docutils literal">'</tt> can be used in polynomial names.</li> +</ul> +</li> +</ul> +</li> </ul> </div> <div class="section" id="acknowledgments"> diff --git a/Master/texmf-dist/doc/latex/polexpr/polexpr.txt b/Master/texmf-dist/doc/latex/polexpr/polexpr.txt index dd2ab246900..7b792ed8ca0 100644 --- a/Master/texmf-dist/doc/latex/polexpr/polexpr.txt +++ b/Master/texmf-dist/doc/latex/polexpr/polexpr.txt @@ -4,8 +4,8 @@ Package polexpr documentation =============================== -0.5 (2018/04/08) -================ +0.5.1 (2018/04/22) +================== .. contents:: @@ -16,9 +16,26 @@ The syntax is:: \poldef polname(x):= expression in variable x; -where in place of ``x`` an arbitrary *dummy variable* is authorized -(i.e. per default any of ``[a-z|A-Z]``; more letters can be declared -under Unicode engines.) One can also issue:: +where: + +- in place of ``x`` an arbitrary *dummy variable* is authorized, + i.e. per default any of ``[a-z|A-Z]`` (more letters can be declared + under Unicode engines.) + +- ``polname`` consists of letters, digits, and the ``_`` and + ``'`` characters. It must start with a letter. + +.. attention:: + + The ``'`` is authorized since ``0.5.1``. As a result some constructs + recognized by the ``\xintexpr`` parser, such as ``var1 'and' var2`` + will get misinterpreted and cause errors. However these constructs + are unlikely to be frequently needed in polynomial expressions, and + the ``\xintexpr`` syntax offers alternatives, so it was deemed a + small evil. Of course the ``\xintexpr`` parser is modified only + temporarily during execution of ``\poldef``. + +One can also issue:: \PolDef{polname}{expression in variable x} @@ -27,7 +44,8 @@ from its default ``x``. ``\poldef f(x):= 1-x+x^2;`` defines polynomial ``f``. Polynomial names must start with a - letter and may contain letters, digits, and underscores. The + letter and may contain letters, digits, underscores and the right + tick character. The variable must be a single letter. The colon character is optional. The semi-colon at end of expression is mandatory. @@ -50,23 +68,29 @@ from its default ``x``. should now define the zero polynomial... Let's check: ``\[ k(z) = \PolTypeset[z]{k} \]`` -``\PolDiff{f}{df_dx}`` - sets ``df_dx`` to the derivative of ``f``. +``\PolDiff{f}{f'}`` + sets ``f'`` to the derivative of ``f``. The name doesn't have to be + ``f'`` (in fact the ``'`` is licit only since ``0.5.1``). -``\PolDiff{df_dx}{f_xx}`` +.. important:: + + This is not done automatically. If some new definition needs to use + the derivative of some available polynomial, that derivative + polynomial must have been defined via ``\PolDiff``: something like + ``T'(x)^2`` will not work without a prior ``\PolDiff{T}{T'}``. + +``\PolDiff{f}{f''}`` obtains second derivative. -``\PolDiff[3]{f}{d3f_dx3}`` - computes directly the third derivative. Its name does not have to be - chosen so complicated ``:)``, but the right quote ``'`` is not - allowed in polynomial names (currently). +``\PolDiff[3]{f}{f'''}`` + computes the third derivative. :: $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 + $f'(z) = \PolTypeset[z]{f'} $\newline + $f''(z) = \PolTypeset[z]{f''} $\newline + $f'''(z)= \PolTypeset[z]{f'''} $\par .. important:: @@ -184,16 +208,16 @@ was no further reduction. \PolEnsureIntervalLengths{f_1}{-10}% Here they are with ten digits after decimal mark: \PolPrintIntervals[W]{f_1} - \PolDiff{f_1}{f_xx} - \PolToSturm{f_xx}{f_xx} - \PolSturmIsolateZeros{f_xx} - The second derivative is \PolTypeset{f_xx}. - It has \PolSturmNbOfIsolatedZeros{f_xx} distinct real + \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_xx} + \PolPrintIntervals[X]{f''} Here is the positive one with 20 digits after decimal mark: - \PolEnsureIntervalLength{f_xx}{2}{-20}% - \[X_2 = \PolSturmIsolatedZeroLeft{f_xx}{2}\dots\] + \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$! @@ -367,8 +391,9 @@ Non-expandable macros in a private structure accessible later via other package macros, under the user-chosen ``polname``. Of course the *expression* can use other previously defined polynomials. Names must start with a - letter and are constituted of letters, digits and underscore - characters. The whole xintexpr_ syntax is authorized:: + letter and are constituted of letters, digits, underscores and + (since ``0.5.1``) the right tick ``'``. + The whole xintexpr_ syntax is authorized:: \poldef sin(z) := add((-1)^i z^(2i+1)/(2i+1)!, i = 0..10); @@ -1810,14 +1835,18 @@ CHANGE LOG degree 41 polynomial with -2, -1.9, -1.8, ..., 0, 0.1, ..., 1.9, 2 as roots`_ for usage). It will presumably be replaced in future by an interval specification. - * new non-expandable macros: + * new non-expandable macro: - `\\PolMakePrimitive`_ - * new expandable macros: + * new expandable macro: - `\\PolIContent`_ +- v0.5.1 (2018/04/22) + + * new feature: + - the character ``'`` can be used in polynomial names. Acknowledgments --------------- diff --git a/Master/texmf-dist/tex/latex/polexpr/polexpr.sty b/Master/texmf-dist/tex/latex/polexpr/polexpr.sty index 02d3ecdec76..e5e2acd6922 100644 --- a/Master/texmf-dist/tex/latex/polexpr/polexpr.sty +++ b/Master/texmf-dist/tex/latex/polexpr/polexpr.sty @@ -1,12 +1,30 @@ % author: Jean-François Burnol % License: LPPL 1.3c (author-maintained) \ProvidesPackage{polexpr}% - [2018/04/08 v0.5 Polynomial expressions with rational coefficients (JFB)]% + [2018/04/22 v0.5.1 Polynomial expressions with rational coefficients (JFB)]% \RequirePackage{xintexpr}[2018/03/01]% xint 1.3 \edef\POL@restorecatcodes - {\catcode`\noexpand\_ \the\catcode`\_ \catcode0 \the\catcode0\relax}% + {\catcode`\noexpand\_ \the\catcode`\_ % + \catcode`\noexpand\! \the\catcode`\! % + \catcode0 \the\catcode0\relax}% \catcode`\_ 11 \catcode0 12 +%% PATCH xintexpr TO AUTHORIZE ' IN NAMES (0.5.1) +\catcode`\! 11 +\def\POL@XINT_expr_scanfunc_b #1% +{% + \ifx !#1\xint_dothis{(_}\fi + \ifcat \relax#1\xint_dothis{(_}\fi + \if (#1\xint_dothis{\xint_firstoftwo{(`}}\fi + \if '#1\xint_dothis \XINT_expr_scanfunc_a \fi + \if @#1\xint_dothis \XINT_expr_scanfunc_a \fi + \if _#1\xint_dothis \XINT_expr_scanfunc_a \fi + \ifnum \xint_c_ix<1\string#1 \xint_dothis \XINT_expr_scanfunc_a \fi + \ifcat a#1\xint_dothis \XINT_expr_scanfunc_a \fi + \xint_orthat {(_}% + #1% +}% + %% AUXILIARIES \newcount\POL@count \newif\ifPOL@pol @@ -47,9 +65,12 @@ \POL@restoresemicolon \edef\POL@tmp{\ifxintverbose1\else0\fi}% \unless\ifxintveryverbose\xintverbosefalse\fi + \let\POL@originalXINT_expr_scanfunc_b\XINT_expr_scanfunc_b + \let\XINT_expr_scanfunc_b\POL@XINT_expr_scanfunc_b \xintdeffunc __pol(#2):=0+(#4);% force conversion to raw if a constant \if1\POL@tmp\xintverbosetrue\fi \edef\POL@polname{\xint_zapspaces #1 \xint_gobble_i}% + \let\XINT_expr_scanfunc_b\POL@originalXINT_expr_scanfunc_b \begingroup \setbox0\hbox{% \let\xintScalarAdd\xintAdd |