From c0fd6688c3703e0e3835fea389bccdf0fc0e6902 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 20 Oct 2015 21:19:41 +0000 Subject: xint (20oct15) git-svn-id: svn://tug.org/texlive/trunk@38680 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/generic/xint/xint.dtx | 1169 ++++++++++++++---------- 1 file changed, 710 insertions(+), 459 deletions(-) (limited to 'Master/texmf-dist/source/generic/xint/xint.dtx') diff --git a/Master/texmf-dist/source/generic/xint/xint.dtx b/Master/texmf-dist/source/generic/xint/xint.dtx index 553962e7b0a..c1254995b5a 100644 --- a/Master/texmf-dist/source/generic/xint/xint.dtx +++ b/Master/texmf-dist/source/generic/xint/xint.dtx @@ -2,24 +2,24 @@ % N.B.: this dtx file does NOT use \DocInput, only docstrip. The user manual % latex source is NOT prefixed with percent characters. %<*dtx> -\def\xintdtxtimestamp {Time-stamp: <10-10-2015 at 23:42:39 CEST>} +\def\xintdtxtimestamp {Time-stamp: <20-10-2015 00:44:07 CEST>} % %<*drv> %% --------------------------------------------------------------- -\def\xintdocdate {2015/10/10} -\def\xintbndldate{2015/10/10} -\def\xintbndlversion {1.2} +\def\xintdocdate {2015/10/19} +\def\xintbndldate{2015/10/19} +\def\xintbndlversion {1.2a} % %<*dtx> \iffalse % meta-comment % %% README %% CHANGE LOG -%% xint v1.2 -%% 2015/10/10 +%% xint v1.2a +%% 2015/10/19 %<*readme|changes> - Source: xint.dtx v1.2 2015/10/10 (doc 2015/10/10) + Source: xint.dtx v1.2a 2015/10/19 (doc 2015/10/19) Author: Jean-Francois Burnol Info: Expandable operations on big integers, decimals, fractions License: LPPL 1.3c @@ -27,7 +27,7 @@ % %<*!readme&!changes&!dohtmlsh&!dopdfsh&!makefile> %% --------------------------------------------------------------- -%% The xint bundle v1.2 2015/10/10 +%% The xint bundle v1.2a 2015/10/19 %% Copyright (C) 2013-2015 by Jean-Francois Burnol %%% xintkernel: Paraphernalia for the xint packages %%% xinttools: Expandable and non-expandable utilities @@ -237,6 +237,23 @@ pandoctpl.latex, doHTMLs.sh, doPDFs.sh, xint.dvi, xint.pdf, Makefile.mk. %-------------------------------------------------------- %<*changes>------------------------------------------------------- +`1.2a (2015/10/19)` +---- + + - bugfix in **xintexpr**: recent release `1.2` introduced a bad bug + in the parsing of decimal numbers and as a result `\xinttheexpr + 0.01\relax` expanded to `0` ! (sigh...) + + - added `\xintKeepUnbraced`, `\xintTrimUnbraced` (**xinttools**) and fixed + documentation of `\xintKeep` and `\xintTrim` regarding brace stripping. + + - added `\xintiiMaxof/\xintiiMinof` (**xint**). + + - TeX hackers only: replaced all code uses of ``\romannumeral-`0`` + by the quicker ``\romannumeral`&&@`` (`^` being used as letter, + had to find another character usable with catcode 7). + + `1.2 (2015/10/10)` ---- @@ -260,7 +277,7 @@ Makefile.mk. - new `\xintFloatFac` macro for computing the factorials of integers as floating point numbers to a given precision. The `!` postfix operator inside `\xintfloatexpr` maps to this new macro rather than to the - exact factorial as used by `\xintexpr` and `xintiiexpr`. + exact factorial as used by `\xintexpr` and `\xintiiexpr`. - the macros `\xintAdd`, `\xintSub`, ..., now require package **xintfrac**. With only **xintcore** or **xint** loaded, one _must_ @@ -2868,15 +2885,15 @@ Additional derived parsers: \begin{framed} Here is the (partial) list of recognized symbols: the comma (to separate - distinct computations or arguments to a function), the - parentheses, infix operators |+|, |-|, |*|, |/|, |^| (or |**|), branching - operators |?|, |??|, boolean operators |!|, |&&|, \verb+||+, comparison - operators |=| (or |==|), |<|, |>|, |<=|, |>=|, |!=|, factorial post-fix - operator |!|, and functions \dtt{num, reduce, abs, sgn, frac, floor, ceil, - sqr, sqrt, sqrtr, float, round, trunc, mod, quo, rem, gcd, lcm, max, min, - `+`, `*`, not, all, any, xor, if, ifsgn, even, odd, first, last, reversed, - bool, togl, add, mul, seq, subs, rseq, rrseq, iter}. And |"| may serve for - hexadecimal input (uppercase only; package \xintbinhexname required). + distinct computations or arguments to a function), the parentheses, infix + operators |+|, |-|, |*|, |/|, |^| (or |**|), branching operators |?|, |??|, + boolean operators |!|, |&&|, \verb+||+, comparison operators |=| (or |==|), + |<|, |>|, |<=|, |>=|, |!=|, factorial post-fix operator |!|, and functions + \dtt{num, reduce, abs, sgn, frac, floor, ceil, sqr, sqrt, sqrtr, float, + round, trunc, mod, quo, rem, gcd, lcm, max, min, |`+`|, |`*`|, not, all, + any, xor, if, ifsgn, even, odd, first, last, reversed, bool, togl, add, + mul, seq, subs, rseq, rrseq, iter}. And |"| may serve for hexadecimal + input (uppercase only; package \xintbinhexname required). |1.2| has added \dtt{qint, qfrac, qfloat} to tell the parser to skip its usual token by token expansion when gathering the digits of a number. @@ -3545,8 +3562,8 @@ available in September 2015, on one hand, and on the other hand my laptop) ... Karatsuba multiplication brilliantly pays off ! \item One observes the transition at the powers of two for the \liiibigint{} - algorithm, for example I observed \liiibigint{} to be |3.5x| faster at - $4000$ digits but only |3.1x| faster at $5000$ digits. + algorithm, for example I observed \liiibigint{} to be |3.5x--4x| faster at + $4000$ digits but only |3x--3.5x| faster at $5000$ digits. \end{itemize} Once one accepts a small overhead, one can on the basis of the lengths decide @@ -4212,7 +4229,7 @@ the allowed input formats for `long numbers' and `fractions' are: \item |C| and |F| will be given to |\numexpr| and can be anything recognized as such and not provoking arithmetic overflow (the lengths of |B| and |E| will also intervene to build the final exponent naturally - which must obeys the \TeX{} bound). + which must obey the \TeX{} bound). \item the |/|, |.| (numerator and/or denominator) and |e| (numerator and/or denominator) are all optional components. \item each of |A|, |B|, |C|, |D|, |E| and |F| may arise from \fexpan sion @@ -5570,41 +5587,86 @@ then |\xintNthElt| returns nothing. \subsection{\csbh{xintKeep}}\label{xintKeep} -\csa{xintKeep\x}\marg{list}\etype{\numx f} expands the list argument and returns -a new list containing only the first |x| elements. If |x<0| the -macro returns the last \verb+|x|+ elements (in the same order as in the initial +\csa{xintKeep\x}\marg{list}\etype{\numx f} expands the token list argument and +returns a new list containing only the first |x| items. If |x<0| the macro +returns the last \verb+|x|+ elements (in the same order as in the initial list). If \verb+|x|+ equals or exceeds the length of the list, the list (as -arising from expansion of the second argument) is returned. For |x=0| the empty -list is returned. +arising from expansion of the second argument) is returned. For |x=0| the +empty list is returned. + +If |x>0| the (non space) items from the original end up braced in the +output: if one later wants to remove all brace pairs (either added to a naked +token, or initially present), one may use \csbxint {ListWithSep} with an empty +separator. -Naked (non space) tokens from the original count each as one item and they end -up braced in the output (if present there): if one later wants to remove all -brace pairs (either added to a naked token, or initially present), one may use -\csbxint {ListWithSep} with an empty separator. +On the other hand, if |x<0| the macro acts by suppressing items from the head +of the list, and no brace pairs are added to the kept elements from the tail +(originally present ones are not removed).\MyMarginNote{\noindent Description + corrected in 1.2a doc} \csa{xintKeepNoExpand} does the same without first \fexpan ding its list argument. % \begin{everbatim*} -\fdef\test {\xintKeep {17}{\xintKeep {-69}{\xintSeq {1}{100}}}}\meaning\test +\fdef\test {\xintKeep {17}{\xintKeep {-69}{\xintSeq {1}{100}}}}\meaning\test\par +\noindent\fdef\test {\xintKeep {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par +\noindent\fdef\test {\xintKeep {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par +\noindent\fdef\test {\xintKeep {7}{123456789}}\meaning\test\par +\noindent\fdef\test {\xintKeep {-7}{123456789}}\meaning\test\par \end{everbatim*} % +\subsection{\csbh{xintKeepUnbraced}}\label{xintKeepUnbraced} + +Sames as \csbxint{Keep} but no brace pairs are added around the kept items +from the head of the list. Each item will lose one level of brace pairs. For +|x<0| is not different from \csbxint{Keep}.\NewWith{1.2a} + +\csa{xintKeepUnbracedNoExpand} does the same without first \fexpan ding its list +argument. +% +\begin{everbatim*} +\fdef\test {\xintKeepUnbraced {10}{\xintSeq {1}{100}}}\meaning\test\par +\noindent\fdef\test {\xintKeepUnbraced {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par +\noindent\fdef\test {\xintKeepUnbraced {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par +\noindent\fdef\test {\xintKeepUnbraced {7}{123456789}}\meaning\test\par +\noindent\fdef\test {\xintKeepUnbraced {-7}{123456789}}\meaning\test\par +\end{everbatim*} + \subsection{\csbh{xintTrim}}\label{xintTrim} \csa{xintTrim\x}\marg{list}\etype{\numx f} expands the list argument and -gobbles its first |x| elements. If |x<0| the macro gobbles the last -\verb+|x|+ elements. If \verb+|x|+ equals or exceeds -the length of the list, the empty list is returned. For |x=0| the full -list is returned. - -Naked (non space) tokens from the original count each as one item and they end -up braced in the output (if present there). +gobbles its first |x| elements. The remaining ones are left as they are (no +brace pairs added). If |x<0| the macro gobbles the last \verb+|x|+ +elements, and the kept elements from the head of the list end up braced in the +output. If \verb+|x|+ equals or exceeds the length +of the list, the empty list is returned. For |x=0| the full list is returned. \csa{xintTrimNoExpand} does the same without first \fexpan ding its list argument. \begin{everbatim*} -\fdef\test {\xintTrim {17}{\xintTrim {-69}{\xintSeq {1}{100}}}}\meaning\test +\fdef\test {\xintTrim {17}{\xintTrim {-69}{\xintSeq {1}{100}}}}\meaning\test\par +\noindent\fdef\test {\xintTrim {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par +\noindent\fdef\test {\xintTrim {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par +\noindent\fdef\test {\xintTrim {7}{123456789}}\meaning\test\par +\noindent\fdef\test {\xintTrim {-7}{123456789}}\meaning\test\par +\end{everbatim*} + +\subsection{\csbh{xintTrimUnbraced}}\label{xintTrimUnbraced} + +Same as \csbxint{Trim} but in case of a negative |x| (cutting items from +the tail), the kept items from the head are not enclosed in brace pairs. They +will lose one level of braces.\NewWith{1.2a} + +\csa{xintTrimUnbracedNoExpand} does the same without first \fexpan ding its list +argument. + +\begin{everbatim*} +\fdef\test {\xintTrimUnbraced {-90}{\xintSeq {1}{100}}}\meaning\test\par +\noindent\fdef\test {\xintTrimUnbraced {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par +\noindent\fdef\test {\xintTrimUnbraced {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par +\noindent\fdef\test {\xintTrimUnbraced {7}{123456789}}\meaning\test\par +\noindent\fdef\test {\xintTrimUnbraced {-7}{123456789}}\meaning\test\par \end{everbatim*} \subsection{\csbh{xintListWithSep}}\label{xintListWithSep} @@ -7731,7 +7793,7 @@ the complete expandability, even \fexpan dability of the macros, as discussed in \autoref{sec:expansions}. -\subsection{\csbh{xintNum}}\label{xintiNum} +\subsection{\csbh{xintNum}, \csbh{xintiNum}}\label{xintiNum} |\xintNum|\n\etype{f} removes chains of plus or minus signs, followed by zeroes. % @@ -7743,7 +7805,8 @@ All \xintname macros with a single |i| in their names, such as \csbxint{iAdd}, \csbxint{iMul} apply \csbxint{Num} to their arguments. When \xintfracname is loaded, \csbxint{Num} becomes a synonym to -\csbxint{TTrunc}. +\csbxint{TTrunc}. And \csbxint{iNum} preserved the original integer only +meaning. \subsection{\csbh{xintSgn}, \csbh{xintiiSgn}}\label{xintiiSgn} @@ -7831,7 +7894,7 @@ either the computation time or the settings of some tex memory parameters. exceeds the maximal size on input for the \xintcorename multiplication, hence any |2^N| with a higher |N| will fail. On the other hand |2^(2^16)| has \dtt{19729} digits, thus it can be squared once to obtain |2^(2^17)| or - multiplied by anything smaller, thus all exponents up and including |2^17| + multiplied by anything smaller, thus all exponents up to and including |2^17| are allowed (because the power operation works by squaring things and making products). \end{framed} @@ -7879,9 +7942,6 @@ is extended by \xintfracname to accept fractions on input, which it truncates first, and is not to be confused with the \xintfracname macro \csbxint{Div} which divides one fraction by another. -Note: |\xintDivision| was the former name of |\xintiDivision|. Its use is -deprecated since release |1.1|. - \subsection{\csbh{xintiQuo}, \csbh{xintiiQuo}}\label{xintiQuo}\label{xintiiQuo} |\xintiiQuo|\n\m\etype{ff} returns the quotient from the euclidean division. @@ -8162,20 +8222,26 @@ number if they are put on a line with positive numbers on the right): |\xintiMin The |\xintiiMin| macro skips the overhead of parsing the operands with \csbxint{Num}.\etype{ff} -\subsection{\csbh{xintiMaxof}}\label{xintiMaxof} +\subsection{\csbh{xintiMaxof}, \csbh{xintiiMaxof}}\label{xintiMaxof}\label{xintiiMaxof} %{\small New with release |1.09a|.\par} \csa{xintiMaxof}|{{a}{b}{c}...}|\etype{f{$\to$}\lowast\Numf} returns the maximum. The list argument may be a macro, it is \fexpan ded first. Each item is submitted to |\xintNum| normalization. -\subsection{\csbh{xintiMinof}}\label{xintiMinof} +\csa{xintiiMaxof} does the same, skips |\xintNum| normalization of +items.\NewWith {1.2a} + +\subsection{\csbh{xintiMinof}, \csbh{xintiiMinof}}\label{xintiMinof}\label{xintiiMinof} %{\small New with release |1.09a|.\par} \csa{xintiMinof}|{{a}{b}{c}...}|\etype{f{$\to$}\lowast\Numf} returns the minimum. The list argument may be a macro, it is \fexpan ded first. Each item is submitted to |\xintNum| normalization. +\csa{xintiiMinof} does the same, skips |\xintNum| normalization of +items.\NewWith {1.2a} + \subsection{\csbh{xintiiSum}}\label{xintiiSum} \csa{xintiiSum}\marg{braced things}\etype{{\lowast f}} after expanding its @@ -8366,7 +8432,7 @@ odd integer and in that case executes the |YES| branch. the argument is negative. \begin{framed} - The macro will limits the acceptable inputs to a maximum of $9999$. However + The macro will limit the acceptable inputs to a maximum of $9999$. However the maximal computation depends on the values of some memory parameters of the |tex| executable: with the the current default settings of TeXLive 2015, the maximal computable factorial (a.t.t.o.w. 2015/10/06) turns out to be @@ -9278,15 +9344,6 @@ scientific notation if possible. Here are the rules: \end{itemize} \end{everbatim*} -There is an important difference between (for example) |\xintFloatPower -[48]{X}{Y}| and |\xintthefloatexpr [48] X^Y \relax|: in the former case the -computation is done with |48| digits or precision (but if |X| and |Y| are -themselves floating point macros of \xintfracname, their respective -evaluations obey only the precision set optionally in the macros), whereas -with \csbxint{thefloatexpr} the evaluation of the expression proceeds with -|\xintDigits| digits of precision, but is rounded to |48| digits (thus this -example makes sense only if |48<\xintDigits|.) - \subsection{\csbh{xintAdd}}\label{xintAdd} Computes the addition\etype{\Ff\Ff} of two fractions. To keep for integers the @@ -9391,7 +9448,7 @@ factorial. $1000!\approx{}$\xintFloatFac [30]{1000} \end{everbatim*} The computation\NewWith{1.2 !} proceeds via doing explicitely the product, as -the Stirling formula cannot be used for lack so far of |exp/\log|. +the Stirling formula cannot be used for lack so far of |exp/log|. % \footnote{The computation of $100000!$ with $16$ digits of precision takes % about three or four seconds and for $1000000!$ it is about fifty seconds on % my laptop (2015/10/06).} @@ -9475,6 +9532,15 @@ final result to hopefully have the desired accuracy.% not compute exactly with all digits the product before keeping only the required digits.} +There is an important difference between (for example) |\xintFloatPower +[48]{X}{Y}| and |\xintthefloatexpr [48] X^Y \relax|: in the former case the +computation is done with |48| digits or precision (but if |X| and |Y| are +themselves floating point macros of \xintfracname, their respective +evaluations obey only the precision set optionally in the macros), whereas +with \csbxint{thefloatexpr} the evaluation of the expression proceeds with +|\xintDigits| digits of precision, but is rounded to |48| digits (thus this +example makes sense only if |48<\xintDigits|.) + \subsection{\csbh{xintFloatSqrt}}\label{xintFloatSqrt} %{\small New with |1.08|.\par} @@ -9680,7 +9746,7 @@ the only arithmetic package from the \xintname bundle which loads \end{itemize} \begin{framed} - This documentation has repetitions, is a.t.t.of.w generally speaking not + This documentation has repetitions, is a.t.t.o.w generally speaking not well structured, and mixes old explanations dating back to the first release and some more recent ones. \end{framed} @@ -9782,7 +9848,7 @@ section and the next are in need of being improved. First, there were some breaking changes: \begin{itemize}[parsep=0pt, labelwidth=\leftmarginii, - itemindent=0pt, leftmargin=\leftmarginii] + itemindent=0pt, listparindent=\leftmarginiii, leftmargin=\leftmarginii] \item in |\xintiiexpr|, |/| does \emph{rounded} division, rather than as in earlier releases the Euclidean division (for positive arguments, this is truncated division). @@ -9810,7 +9876,7 @@ First, there were some breaking changes: Let's now describle some of the numerous additional functionalities. \begin{itemize}[parsep=0pt, labelwidth=\leftmarginii, - itemindent=\leftmarginii, leftmargin=0em] + itemindent=\leftmarginii, listparindent=\leftmarginii, leftmargin=0em] \item |\xintiexpr|, |\xinttheiexpr| admit an optional argument within brackets |[d]|, it then presents the computation result (or results, if comma separated) after rounding to |d| digits after decimal mark, (the @@ -9880,7 +9946,7 @@ Let's now describle some of the numerous additional functionalities. And now some examples: \begin{itemize}[parsep=0pt, labelwidth=\leftmarginii, - itemindent=\leftmarginii, leftmargin=0em] + itemindent=\leftmarginii, listparindent=\leftmarginii, leftmargin=0em] \item One can define variables (the definition itself is a non expandable step). The allowed names are composed of letters, digits, and underscores. The variable should not start with a digit and single letters |a..z|, |A..Z| @@ -10227,7 +10293,7 @@ two |t|'s. |\xintexpr|-essions and |\xinttheexpr|-essions are completely expandable, in two steps. \begin{itemize}[parsep=0pt, labelwidth=\leftmarginii, - itemindent=0pt, leftmargin=\leftmarginii] + itemindent=0pt, listparindent=\leftmarginiii, leftmargin=\leftmarginii] \item An expression is built the standard way with opening and closing parentheses, infix operators, and (big) numbers, with possibly a fractional part, and/or scientific notation (except for \csbxint{iiexpr} which only @@ -10486,7 +10552,8 @@ operators and functions. #1\endgroup} \begin{itemize}[parsep=0pt, labelwidth=\leftmarginii, - itemindent=0pt, leftmargin=\leftmarginii] + itemindent=0pt, listparindent=\leftmarginiii, + leftmargin=\leftmarginii] \item Functions are at the same top level of priority. All functions even |?| and |!| (as prefix) require parentheses around their arguments. @@ -10995,7 +11062,7 @@ and \LaTeX{} counters should be inserted using |\value|. Release |1.2| of the |\xintexpr| parser also recognizes and prefixes with |\number| the |\ht|, |\dp|, and |\wd| \TeX{} primitives as well as the -|\fontcharht|, |\fontcharwd|, |\fontchardp| and |\fontcharit| \eTeX{} +|\fontcharht|, |\fontcharwd|, |\fontchardp| and |\fontcharic| \eTeX{} primitives. In the case of numbered registers like |\count255| or |\dimen0| (or |\ht0|), @@ -13732,6 +13799,13 @@ $1$ or $-1$. % This is \expandafter|\xintbndlversion| of \expandafter|\xintbndldate|. % % \begin{itemize} +% \item Release |1.2a| of |2015/10/19| fixes a bad bug of |1.2| in +% |xintexpr.sty|, the parsers mistook decimals |0.0x...| for zero ! Also I +% took this opportunity to replace about 350 uses of |\romannumeral-`0| +% throughout the code by a hacky |\romannumeral`&&@| (as |^| is used as +% letter in constant names, I preferred |&| which is only to be found in a +% few places, all inside |xintexpr.sty|). +% % \item Release |1.2| of |2015/10/10| has entirely rewritten the core % arithmetic routines in \xintcorenameimp. Many macros benefit indirectly % from the faster core routines. The new model is yet to be extended to @@ -13842,6 +13916,7 @@ $1$ or $-1$. \endgroup \def\XINT_restorecatcodes {% takes care of all, to allow more economical code in modules + \catcode0=\the\catcode0 % \catcode59=\the\catcode59 % ; xintexpr \catcode126=\the\catcode126 % ~ xintexpr \catcode39=\the\catcode39 % ' xintexpr @@ -13903,18 +13978,19 @@ $1$ or $-1$. \catcode47=12 % / \catcode96=12 % ` \catcode94=11 % ^ LETTER - \catcode36=3 % $ - \catcode91=12 % [ - \catcode93=12 % ] - \catcode33=12 % ! - \catcode64=11 % @ LETTER - \catcode38=12 % & - \catcode124=12 % | - \catcode63=11 % ? LETTER - \catcode34=12 % " - \catcode39=12 % ' - \catcode126=3 % ~ MATH - \catcode59=12 % ; + \catcode36=3 % $ + \catcode91=12 % [ + \catcode93=12 % ] + \catcode33=12 % ! + \catcode64=11 % @ LETTER + \catcode38=7 % & for \romannumeral`&&@ trick. + \catcode124=12 % | + \catcode63=11 % ? LETTER + \catcode34=12 % " + \catcode39=12 % ' + \catcode126=3 % ~ MATH + \catcode59=12 % ; + \catcode0=12 % for \romannumeral`&&@ trick }% \XINT_setcatcodes }% @@ -13949,7 +14025,7 @@ $1$ or $-1$. \fi \XINT_providespackage \ProvidesPackage {xintkernel}% - [2015/10/10 v1.2 Paraphernalia for the xint packages (jfB)]% + [2015/10/19 v1.2a Paraphernalia for the xint packages (jfB)]% % \end{macrocode} % \subsection{Constants} % |v1.2| decides to move them to \xintkernelnameimp from \xintcorenameimp and @@ -14105,7 +14181,7 @@ $1$ or $-1$. \expandafter\expandafter\expandafter#1% \expandafter\expandafter\expandafter }% \def\xintfdef #1#2{\expandafter\def\expandafter#1\expandafter - {\romannumeral-`0#2}}% + {\romannumeral`&&@#2}}% \ifdefined\odef\else\let\odef\xintodef\fi \ifdefined\oodef\else\let\oodef\xintoodef\fi \ifdefined\fdef\else\let\fdef\xintfdef\fi @@ -14245,7 +14321,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xinttools}% - [2015/10/10 v1.2 Expandable and non-expandable utilities (jfB)]% + [2015/10/19 v1.2a Expandable and non-expandable utilities (jfB)]% % \end{macrocode} % \lverb|\XINT_toks is used in macros such as \xintFor. It is not used % elsewhere in the xint bundle.| @@ -14272,7 +14348,7 @@ $1$ or $-1$. \long\def\xintrevwithbraces #1% {% \expandafter\XINT_revwbr_loop\expandafter{\expandafter}% - \romannumeral-`0#1\xint_relax\xint_relax\xint_relax\xint_relax + \romannumeral`&&@#1\xint_relax\xint_relax\xint_relax\xint_relax \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye }% \long\def\xintrevwithbracesnoexpand #1% @@ -14441,7 +14517,7 @@ $1$ or $-1$. \long\def\xintcsvtolistnonstripped #1% {% \expandafter\XINT_csvtol_loop_a\expandafter - {\expandafter}\romannumeral-`0#1% + {\expandafter}\romannumeral`&&@#1% ,\xint_bye,\xint_bye,\xint_bye,\xint_bye ,\xint_bye,\xint_bye,\xint_bye,\xint_bye,\Z }% @@ -14500,7 +14576,7 @@ $1$ or $-1$. \def\xintListWithSep {\romannumeral0\xintlistwithsep }% \def\xintListWithSepNoExpand {\romannumeral0\xintlistwithsepnoexpand }% \long\def\xintlistwithsep #1#2% - {\expandafter\XINT_lws\expandafter {\romannumeral-`0#2}{#1}}% + {\expandafter\XINT_lws\expandafter {\romannumeral`&&@#2}{#1}}% \long\def\XINT_lws #1#2{\XINT_lws_start {#2}#1\xint_bye }% \long\def\xintlistwithsepnoexpand #1#2{\XINT_lws_start {#1}#2\xint_bye }% \long\def\XINT_lws_start #1#2% @@ -14539,7 +14615,7 @@ $1$ or $-1$. \def\xintnthelt #1#2% {% \expandafter\XINT_nthelt_a\the\numexpr #1\expandafter.% - \expandafter{\romannumeral-`0#2}% + \expandafter{\romannumeral`&&@#2}% }% \def\xintntheltnoexpand #1% {% @@ -14597,26 +14673,31 @@ $1$ or $-1$. % \subsection{\csh{xintKeep}} % \lverb+First included in release 1.09m. % -% \xintKeep {i}{stuff f-expanding to {a}{b}...{z}} (or `tokens' abcd...z, -% but each naked token ends up braced in the output) returns (in two -% expansion steps) the first i elements from the list, which is first -% f-expanded. The i is expanded inside \numexpr. The variant +% \xintKeep {i}{stuff f-expanding to {a}{b}...{z}} (or `tokens' abcd...z, but +% each naked token ends up braced in the output, if 0\xint_c_vi + \expandafter\XINT_keepunbraced_loop_b + \else + \XINT_keepunbraced_finish + \fi + {#1}% +}% +\long\def\XINT_keepunbraced_loop_b #1#2#3#4#5#6#7#8#9% +{% + \xint_gob_til_xint_relax #9\XINT_keepunbraced_enda\xint_relax + \expandafter\XINT_keepunbraced_loop_c\expandafter + {\the\numexpr #1-\xint_c_vii}{#3}{#4}{#5}{#6}{#7}{#8}{#9}.{#2}% +}% +\long\def\XINT_keepunbraced_loop_c #1#2#3#4#5#6#7#8.#9% + {\XINT_keepunbraced_loop_a {#1}{#9#2#3#4#5#6#7#8}}% +\long\def\XINT_keepunbraced_enda\xint_relax + \expandafter\XINT_keepunbraced_loop_c\expandafter #1#2.#3#4\xint_bye +{% + \XINT_keepunbraced_endb #4\W\W\W\W\W\W\Z #2{#3}% +}% +\def\XINT_keepunbraced_endb #1#2#3#4#5#6#7\Z +{% + \xint_gob_til_W + #1\XINT_keepunbraced_endc_ + #2\XINT_keepunbraced_endc_i + #3\XINT_keepunbraced_endc_ii + #4\XINT_keepunbraced_endc_iii + #5\XINT_keepunbraced_endc_iv + #6\XINT_keepunbraced_endc_v + \W\XINT_keepunbraced_endc_vi\Z +}% +\long\def\XINT_keepunbraced_endc_ #1\Z #2#3#4#5#6#7#8#9{ #9}% +\long\def\XINT_keepunbraced_endc_i #1\Z #2#3#4#5#6#7#8#9{ #9#2}% +\long\def\XINT_keepunbraced_endc_ii #1\Z #2#3#4#5#6#7#8#9{ #9#2#3}% +\long\def\XINT_keepunbraced_endc_iii #1\Z #2#3#4#5#6#7#8#9{ #9#2#3#4}% +\long\def\XINT_keepunbraced_endc_iv #1\Z #2#3#4#5#6#7#8#9{ #9#2#3#4#5}% +\long\def\XINT_keepunbraced_endc_v #1\Z #2#3#4#5#6#7#8#9{ #9#2#3#4#5#6}% +\long\def\XINT_keepunbraced_endc_vi\Z #1#2#3#4#5#6#7#8{ #8#1#2#3#4#5#6}% +\long\def\XINT_keepunbraced_finish\fi #1#2#3#4#5#6#7#8#9\xint_bye +{% + \fi\XINT_keepunbraced_finish_loop_a {#1}{}{#3}{#4}{#5}{#6}{#7}{#8}\Z {#2}% +}% +\def\XINT_keepunbraced_finish_loop_a #1% +{% + \xint_gob_til_zero #1\XINT_keepunbraced_finish_z0% + \expandafter\XINT_keepunbraced_finish_loop_b\expandafter + {\the\numexpr #1-\xint_c_i}% +}% +\long\def\XINT_keepunbraced_finish_z0% + \expandafter\XINT_keepunbraced_finish_loop_b\expandafter #1#2#3\Z #4{ #4#2}% +\long\def\XINT_keepunbraced_finish_loop_b #1#2#3% +{% + \xint_gob_til_xint_relax #3\XINT_keepunbraced_finish_exit\xint_relax + \XINT_keepunbraced_finish_loop_c {#1}{#2}{#3}% +}% +\long\def\XINT_keepunbraced_finish_exit\xint_relax + \XINT_keepunbraced_finish_loop_c #1#2#3\Z #4{ #4#2}% +\long\def\XINT_keepunbraced_finish_loop_c #1#2#3% + {\XINT_keepunbraced_finish_loop_a {#1}{#2#3}}% +% \end{macrocode} % \subsection{\csh{xintTrim}} % \lverb+First included in release 1.09m. % -% \xintTrim {i}{stuff f-expanding to {a}{b}...{z}} (or `tokens' abcd...z, -% but each naked token ends up braced in the output) returns (in two -% expansion steps) the sequence with the first i elements omitted. The -% list is first f-expanded. The i is expanded inside \numexpr. Variant -% \xintTrimNoExpand does not expand the list argument. +% \xintTrim {i}{stuff f-expanding to {a}{b}...{z}} (or `tokens' abcd...z) +% returns (in two expansion steps) the sequence with the first i elements +% omitted. The list is first f-expanded. The i is expanded inside \numexpr. +% Variant \xintTrimNoExpand does not expand the list argument. % % With i = 0, the original (expanded) list is returned. % -% With i<0, the last |i| elements from the tail are suppressed. +% With i<0, the last |i| items are suppressed. In that case the kept elements +% (coming form the tail) will be braced on output. With i>0, the fist |i| +% items are suppressed: the remaining ones are left as is. % % With |i| equal to or bigger than the length of the (f-expanded) list, % the empty list is returned.+ @@ -14729,7 +14901,7 @@ $1$ or $-1$. \def\xinttrim #1#2% {% \expandafter\XINT_trim_a\the\numexpr #1\expandafter.% - \expandafter{\romannumeral-`0#2}% + \expandafter{\romannumeral`&&@#2}% }% \def\xinttrimnoexpand #1% {% @@ -14783,6 +14955,41 @@ $1$ or $-1$. }% \long\def\XINT_trim_finish_a #1\xint_relax #2\xint_bye {#1}% % \end{macrocode} +% \subsection{\csh{xintTrimUnbraced}} +% \lverb+1.2a+ +% \begin{macrocode} +\def\xintTrimUnbraced {\romannumeral0\xinttrimunbraced }% +\def\xintTrimUnbracedNoExpand {\romannumeral0\xinttrimunbracednoexpand }% +\def\xinttrimunbraced #1#2% +{% + \expandafter\XINT_trimunbraced_a\the\numexpr #1\expandafter.% + \expandafter{\romannumeral`&&@#2}% +}% +\def\xinttrimunbracednoexpand #1% +{% + \expandafter\XINT_trimunbraced_a\the\numexpr #1.% +}% +\def\XINT_trimunbraced_a #1#2.% +{% + \xint_UDzerominusfork + #1-{\xint_firstofone_thenstop }% + 0#1{\XINT_trimunbraced_bneg_a {#2}}% + 0-{\XINT_trim_bpos {#1#2}}% + \krof +}% +\long\def\XINT_trimunbraced_bneg_a #1#2% +{% + \expandafter\XINT_trimunbraced_bneg_b \the\numexpr \xintLength{#2}-#1.{#2}% +}% +\def\XINT_trimunbraced_bneg_b #1#2.% +{% + \xint_UDzerominusfork + #1-{\expandafter\space\xint_gobble_i }% + 0#1{\expandafter\space\xint_gobble_i }% + 0-{\XINT_keepunbraced_bpos {#1#2}}% + \krof +}% +% \end{macrocode} % \subsection{\csh{xintApply}} % \lverb|\xintApply {\macro}{{a}{b}...{z}} returns {\macro{a}}...{\macro{b}} % where each instance of \macro is f-expanded. The list itself is first @@ -14792,7 +14999,7 @@ $1$ or $-1$. \def\xintApplyNoExpand {\romannumeral0\xintapplynoexpand }% \long\def\xintapply #1#2% {% - \expandafter\XINT_apply\expandafter {\romannumeral-`0#2}% + \expandafter\XINT_apply\expandafter {\romannumeral`&&@#2}% {#1}% }% \long\def\XINT_apply #1#2{\XINT_apply_loop_a {}{#2}#1\xint_bye }% @@ -14802,7 +15009,7 @@ $1$ or $-1$. \xint_bye #3\XINT_apply_end\xint_bye \expandafter \XINT_apply_loop_b - \expandafter {\romannumeral-`0#2{#3}}{#1}{#2}% + \expandafter {\romannumeral`&&@#2{#3}}{#1}{#2}% }% \long\def\XINT_apply_loop_b #1#2{\XINT_apply_loop_a {#2{#1}}}% \long\def\XINT_apply_end\xint_bye\expandafter\XINT_apply_loop_b @@ -14819,7 +15026,7 @@ $1$ or $-1$. \def\xintApplyUnbracedNoExpand {\romannumeral0\xintapplyunbracednoexpand }% \long\def\xintapplyunbraced #1#2% {% - \expandafter\XINT_applyunbr\expandafter {\romannumeral-`0#2}% + \expandafter\XINT_applyunbr\expandafter {\romannumeral`&&@#2}% {#1}% }% \long\def\XINT_applyunbr #1#2{\XINT_applyunbr_loop_a {}{#2}#1\xint_bye }% @@ -14829,7 +15036,7 @@ $1$ or $-1$. {% \xint_bye #3\XINT_applyunbr_end\xint_bye \expandafter\XINT_applyunbr_loop_b - \expandafter {\romannumeral-`0#2{#3}}{#1}{#2}% + \expandafter {\romannumeral`&&@#2{#3}}{#1}{#2}% }% \long\def\XINT_applyunbr_loop_b #1#2{\XINT_applyunbr_loop_a {#2#1}}% \long\def\XINT_applyunbr_end\xint_bye\expandafter\XINT_applyunbr_loop_b @@ -15002,7 +15209,7 @@ $1$ or $-1$. \def\XINT_xflet_zapsp {% \expandafter\futurelet\expandafter\XINT_token - \expandafter\XINT_xflet_sp?\romannumeral-`0% + \expandafter\XINT_xflet_sp?\romannumeral`&&@% }% \def\XINT_xflet_sp? {% @@ -15014,7 +15221,7 @@ $1$ or $-1$. \def\XINT_xflet_zapspB {% \expandafter\futurelet\expandafter\XINT_tokenB - \expandafter\XINT_xflet_spB?\romannumeral-`0% + \expandafter\XINT_xflet_spB?\romannumeral`&&@% }% \def\XINT_xflet_spB? {% @@ -15229,8 +15436,8 @@ $1$ or $-1$. \def\XINT_?expr_Va #1#2% {% \expandafter\XINT_?expr_Vb\expandafter - {\romannumeral-`0\xintrawwithzeros{\xintZapSpacesB{#2}}}% - {\romannumeral-`0\xintrawwithzeros{\xintZapSpacesB{#1}}}% + {\romannumeral`&&@\xintrawwithzeros{\xintZapSpacesB{#2}}}% + {\romannumeral`&&@\xintrawwithzeros{\xintZapSpacesB{#1}}}% }% \catcode`Z 3 \def\XINT_?expr_Vb #1#2{\expandafter\XINT_?expr_Vc #2.#1.}% @@ -15277,7 +15484,7 @@ $1$ or $-1$. {% \expandafter\expandafter\expandafter \XINT_forever_opt_c\expandafter\the\expandafter\XINT_toks - \romannumeral-`0#1{#4}{#5}#3% + \romannumeral`&&@#1{#4}{#5}#3% }% \long\def\XINT_forever_opt_c #1#2#3#4#5#6{\XINT_forever_d #2{#4}{#5}#6{#3}Z}% \long\def\XINT_forever_d #1#2#3#4#5% @@ -15288,7 +15495,7 @@ $1$ or $-1$. \the\XINT_toks \csname XINT_for_right#1\endcsname }% \XINT_x \let\xintifForFirst\xint_secondoftwo - \expandafter\XINT_forever_d\expandafter #1\romannumeral-`0#4{#2}{#3}#4{#5}% + \expandafter\XINT_forever_d\expandafter #1\romannumeral`&&@#4{#2}{#3}#4{#5}% }% % \end{macrocode} % \subsection{\csh{xintForpair}, \csh{xintForthree}, \csh{xintForfour}} @@ -15400,7 +15607,7 @@ $1$ or $-1$. \long\def\XINT_assign_a #1\to {% \def\XINT_flet_macro{\XINT_assign_b}% - \expandafter\XINT_flet_zapsp\romannumeral-`0#1\xint_relax\to + \expandafter\XINT_flet_zapsp\romannumeral`&&@#1\xint_relax\to }% \long\def\XINT_assign_b {% @@ -15468,7 +15675,7 @@ $1$ or $-1$. \expandafter\def\expandafter\xint_arrayname\expandafter {\string #2}% \XINT_restoreescapechar \def\xint_itemcount {0}% - \expandafter\XINT_assignarray_loop \romannumeral-`0#1\xint_relax + \expandafter\XINT_assignarray_loop \romannumeral`&&@#1\xint_relax \csname\xint_arrayname 00\expandafter\endcsname \csname\xint_arrayname 0\expandafter\endcsname \expandafter {\xint_arrayname}#2% @@ -15602,7 +15809,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintcore}% - [2015/10/10 v1.2 Expandable arithmetic on big integers (jfB)]% + [2015/10/19 v1.2a Expandable arithmetic on big integers (jfB)]% % \end{macrocode} % \subsection{Counts for holding needed constants} % \begin{macrocode} @@ -15634,7 +15841,7 @@ $1$ or $-1$. \def\xintinum #1% {% \expandafter\XINT_num_loop - \romannumeral-`0#1\xint_relax\xint_relax\xint_relax\xint_relax + \romannumeral`&&@#1\xint_relax\xint_relax\xint_relax\xint_relax \xint_relax\xint_relax\xint_relax\xint_relax\Z }% \let\xintNum\xintiNum \let\xintnum\xintinum @@ -15834,7 +16041,7 @@ $1$ or $-1$. }% \edef\XINT_unrevbyviii_a\R\XINT_unrevbyviii #1#2\W {\noexpand\expandafter\space - \noexpand\romannumeral-`0\noexpand\xint_gob_til_Z #1}% + \noexpand\romannumeral`&&@\noexpand\xint_gob_til_Z #1}% \def\XINT_smallunrevbyviii 1#1!1#2!1#3!1#4!1#5!1#6!1#7!1#8!#9\W% {% \expandafter\XINT_cuz_small\xint_gob_til_Z #8#7#6#5#4#3#2#1% @@ -15849,7 +16056,7 @@ $1$ or $-1$. }% \def\XINT_microrevsep_end #1\W #2\expandafter #3\Z{#2!}% \def\xintReverseDigits {\romannumeral0\xintreversedigits }% -\def\xintreversedigits #1{\expandafter\XINT_reversedigits\romannumeral-`0#1\Z}% +\def\xintreversedigits #1{\expandafter\XINT_reversedigits\romannumeral`&&@#1\Z}% \def\XINT_reversedigits #1% {% \xint_UDsignfork @@ -15860,7 +16067,7 @@ $1$ or $-1$. \def\XINT_reversedigits_a #1\Z {% \expandafter\XINT_revdigits_a\the\numexpr\expandafter\XINT_microrevsep - \romannumeral-`0#1{\XINT_microrevsep_end\W}\XINT_microrevsep_end + \romannumeral`&&@#1{\XINT_microrevsep_end\W}\XINT_microrevsep_end \XINT_microrevsep_end\XINT_microrevsep_end \XINT_microrevsep_end\XINT_microrevsep_end \XINT_microrevsep_end\XINT_microrevsep_end\Z @@ -15888,7 +16095,7 @@ $1$ or $-1$. \def\xintiiSgn {\romannumeral0\xintiisgn }% \def\xintiisgn #1% {% - \expandafter\XINT_sgn \romannumeral-`0#1\Z% + \expandafter\XINT_sgn \romannumeral`&&@#1\Z% }% \def\xintSgn {\romannumeral0\xintsgn }% \def\xintsgn #1% @@ -15925,7 +16132,7 @@ $1$ or $-1$. \def\xintiiOpp {\romannumeral0\xintiiopp }% \def\xintiiopp #1% {% - \expandafter\XINT_opp \romannumeral-`0#1% + \expandafter\XINT_opp \romannumeral`&&@#1% }% \def\xintiOpp {\romannumeral0\xintiopp }% \def\xintiopp #1% @@ -15952,7 +16159,7 @@ $1$ or $-1$. \def\xintiiAbs {\romannumeral0\xintiiabs }% \def\xintiiabs #1% {% - \expandafter\XINT_abs \romannumeral-`0#1% + \expandafter\XINT_abs \romannumeral`&&@#1% }% \def\xintiAbs {\romannumeral0\xintiabs }% \def\xintiabs #1% @@ -15977,7 +16184,7 @@ $1$ or $-1$. \def\xintiiFDg {\romannumeral0\xintiifdg }% \def\xintiifdg #1% {% - \expandafter\XINT_fdg \romannumeral-`0#1\W\Z + \expandafter\XINT_fdg \romannumeral`&&@#1\W\Z }% \def\xintFDg {\romannumeral0\xintfdg }% \def\xintfdg #1% @@ -16014,7 +16221,7 @@ $1$ or $-1$. \expandafter\XINT_ldg_done\romannumeral0% \expandafter\XINT_revdigits_a\the\numexpr\expandafter\XINT_microrevsep \romannumeral0\expandafter\XINT_abs - \romannumeral-`0#1{\XINT_microrevsep_end\W}\XINT_microrevsep_end + \romannumeral`&&@#1{\XINT_microrevsep_end\W}\XINT_microrevsep_end \XINT_microrevsep_end\XINT_microrevsep_end \XINT_microrevsep_end\XINT_microrevsep_end \XINT_microrevsep_end\XINT_microrevsep_end\Z @@ -16029,7 +16236,7 @@ $1$ or $-1$. \def\xintDouble {\romannumeral0\xintdouble }% \def\xintdouble #1% {% - \expandafter\XINT_dbl\romannumeral-`0#1\Z + \expandafter\XINT_dbl\romannumeral`&&@#1\Z }% \def\XINT_dbl #1% {% @@ -16063,7 +16270,7 @@ $1$ or $-1$. \def\xintHalf {\romannumeral0\xinthalf }% \def\xinthalf #1% {% - \expandafter\XINT_half\romannumeral-`0#1\Z + \expandafter\XINT_half\romannumeral`&&@#1\Z }% \def\XINT_half #1% {% @@ -16104,7 +16311,7 @@ $1$ or $-1$. \def\xintDec {\romannumeral0\xintdec }% \def\xintdec #1% {% - \expandafter\XINT_dec\romannumeral-`0#1\Z + \expandafter\XINT_dec\romannumeral`&&@#1\Z }% \def\XINT_dec #1% {% @@ -16135,7 +16342,7 @@ $1$ or $-1$. \def\xintInc {\romannumeral0\xintinc }% \def\xintinc #1% {% - \expandafter\XINT_inc\romannumeral-`0#1\Z + \expandafter\XINT_inc\romannumeral`&&@#1\Z }% \def\XINT_inc #1% {% @@ -16180,10 +16387,10 @@ $1$ or $-1$. \def\xintiAdd {\romannumeral0\xintiadd }% \def\xintiadd #1{\expandafter\XINT_iadd\romannumeral0\xintnum{#1}\Z }% \def\xintiiAdd {\romannumeral0\xintiiadd }% -\def\xintiiadd #1{\expandafter\XINT_iiadd\romannumeral-`0#1\Z }% +\def\xintiiadd #1{\expandafter\XINT_iiadd\romannumeral`&&@#1\Z }% \def\XINT_iiadd #1#2\Z #3% {% - \expandafter\XINT_add_nfork\expandafter #1\romannumeral-`0#3\Z #2\Z + \expandafter\XINT_add_nfork\expandafter #1\romannumeral`&&@#3\Z #2\Z }% \def\XINT_iadd #1#2\Z #3% {% @@ -16358,10 +16565,10 @@ $1$ or $-1$. % \lverb|Entirely rewritten for v1.2.| % \begin{macrocode} \def\xintiiSub {\romannumeral0\xintiisub }% -\def\xintiisub #1{\expandafter\XINT_iisub\romannumeral-`0#1\Z }% +\def\xintiisub #1{\expandafter\XINT_iisub\romannumeral`&&@#1\Z }% \def\XINT_iisub #1#2\Z #3% {% - \expandafter\XINT_sub_nfork\expandafter #1\romannumeral-`0#3\Z #2\Z + \expandafter\XINT_sub_nfork\expandafter #1\romannumeral`&&@#3\Z #2\Z }% \def\xintiSub {\romannumeral0\xintisub }% \def\xintisub #1{\expandafter\XINT_isub\romannumeral0\xintnum{#1}\Z }% @@ -16576,11 +16783,11 @@ $1$ or $-1$. \def\xintiiMul {\romannumeral0\xintiimul }% \def\xintiimul #1% {% - \expandafter\XINT_iimul\romannumeral-`0#1\Z + \expandafter\XINT_iimul\romannumeral`&&@#1\Z }% \def\XINT_iimul #1#2\Z #3% {% - \expandafter\XINT_mul_nfork\expandafter #1\romannumeral-`0#3\Z #2\Z + \expandafter\XINT_mul_nfork\expandafter #1\romannumeral`&&@#3\Z #2\Z }% % \end{macrocode} % \lverb|I have changed the fork, and it complicates matters elsewhere.| @@ -16818,7 +17025,7 @@ $1$ or $-1$. \def\xintiiPow {\romannumeral0\xintiipow }% \def\xintiipow #1% {% - \expandafter\xint_pow\romannumeral-`0#1\Z% + \expandafter\xint_pow\romannumeral`&&@#1\Z% }% \def\xintiPow {\romannumeral0\xintipow }% \def\xintipow #1% @@ -17007,7 +17214,7 @@ $1$ or $-1$. \def\xintiiFac {\romannumeral0\xintiifac }% \def\xintiifac #1% {% - \expandafter\XINT_fac_fork\expandafter {\romannumeral-`0#1}% + \expandafter\XINT_fac_fork\expandafter {\romannumeral`&&@#1}% }% \let\xintFac\xintiFac \let\xintfac\xintifac \def\XINT_fac_fork #1% @@ -17145,9 +17352,9 @@ $1$ or $-1$. \def\XINT_idivision #1#2\Z #3{\expandafter\XINT_iidivision_a\expandafter #1% \romannumeral0\xintnum{#3}\Z #2\Z }% \def\xintiiDivision {\romannumeral0\xintiidivision }% -\def\xintiidivision #1{\expandafter\XINT_iidivision \romannumeral-`0#1\Z }% +\def\xintiidivision #1{\expandafter\XINT_iidivision \romannumeral`&&@#1\Z }% \def\XINT_iidivision #1#2\Z #3{\expandafter\XINT_iidivision_a\expandafter #1% - \romannumeral-`0#3\Z #2\Z }% + \romannumeral`&&@#3\Z #2\Z }% \def\XINT_iidivision_a #1#2% #1 de A, #2 de B. {% \if0#2\xint_dothis\XINT_iidivision_divbyzero\fi @@ -17324,7 +17531,7 @@ $1$ or $-1$. }% \def\XINT_div_finish {% - \expandafter\XINT_div_finish_a \romannumeral-`0\XINT_div_unsepQ + \expandafter\XINT_div_finish_a \romannumeral`&&@\XINT_div_unsepQ }% \def\XINT_div_finish_a #1\Z #2.{\XINT_div_finish_b #2.{#1}}% % \end{macrocode} @@ -17862,12 +18069,12 @@ $1$ or $-1$. \def\xintidivround #1% {\expandafter\XINT_idivround\romannumeral0\xintnum{#1}\Z }% \def\xintiiDivRound {\romannumeral0\xintiidivround }% -\def\xintiidivround #1{\expandafter\XINT_iidivround \romannumeral-`0#1\Z }% +\def\xintiidivround #1{\expandafter\XINT_iidivround \romannumeral`&&@#1\Z }% \def\XINT_idivround #1#2\Z #3% {\expandafter\XINT_iidivround_a\expandafter #1% \romannumeral0\xintnum{#3}\Z #2\Z }% \def\XINT_iidivround #1#2\Z #3% - {\expandafter\XINT_iidivround_a\expandafter #1\romannumeral-`0#3\Z #2\Z }% + {\expandafter\XINT_iidivround_a\expandafter #1\romannumeral`&&@#3\Z #2\Z }% \def\XINT_iidivround_a #1#2% #1 de A, #2 de B. {% \if0#2\xint_dothis\XINT_iidivround_divbyzero\fi @@ -17941,9 +18148,9 @@ $1$ or $-1$. \def\xintiDivTrunc {\romannumeral0\xintidivtrunc }% \def\xintidivtrunc #1{\expandafter\XINT_iidivtrunc\romannumeral0\xintnum{#1}\Z }% \def\xintiiDivTrunc {\romannumeral0\xintiidivtrunc }% -\def\xintiidivtrunc #1{\expandafter\XINT_iidivtrunc \romannumeral-`0#1\Z }% +\def\xintiidivtrunc #1{\expandafter\XINT_iidivtrunc \romannumeral`&&@#1\Z }% \def\XINT_iidivtrunc #1#2\Z #3{\expandafter\XINT_iidivtrunc_a\expandafter #1% - \romannumeral-`0#3\Z #2\Z }% + \romannumeral`&&@#3\Z #2\Z }% \def\XINT_iidivtrunc_a #1#2% #1 de A, #2 de B. {% \if0#2\xint_dothis\XINT_iidivround_divbyzero\fi @@ -17974,9 +18181,9 @@ $1$ or $-1$. \def\xintiMod {\romannumeral0\xintimod }% \def\xintimod #1{\expandafter\XINT_iimod\romannumeral0\xintnum{#1}\Z }% \def\xintiiMod {\romannumeral0\xintiimod }% -\def\xintiimod #1{\expandafter\XINT_iimod \romannumeral-`0#1\Z }% +\def\xintiimod #1{\expandafter\XINT_iimod \romannumeral`&&@#1\Z }% \def\XINT_iimod #1#2\Z #3{\expandafter\XINT_iimod_a\expandafter #1% - \romannumeral-`0#3\Z #2\Z }% + \romannumeral`&&@#3\Z #2\Z }% \def\XINT_iimod_a #1#2% #1 de A, #2 de B. {% \if0#2\xint_dothis\XINT_iidivround_divbyzero\fi @@ -18080,7 +18287,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xint}% - [2015/10/10 v1.2 Expandable operations on big integers (jfB)]% + [2015/10/19 v1.2a Expandable operations on big integers (jfB)]% % \end{macrocode} % \subsection{More token management} % \begin{macrocode} @@ -18112,7 +18319,7 @@ $1$ or $-1$. % \lverb|Added in 1.03. 1.09a defines \xintIsOne. 1.1a adds \xintiiIsOne.| % \begin{macrocode} \def\xintiiIsOne {\romannumeral0\xintiiisone }% -\def\xintiiisone #1{\expandafter\XINT_isone\romannumeral-`0#1\W\Z }% +\def\xintiiisone #1{\expandafter\XINT_isone\romannumeral`&&@#1\W\Z }% \def\xintIsOne {\romannumeral0\xintisone }% \def\xintisone #1{\expandafter\XINT_isone\romannumeral0\xintnum{#1}\W\Z }% \def\XINT_isOne #1{\romannumeral0\XINT_isone #1\W\Z }% @@ -18170,9 +18377,9 @@ $1$ or $-1$. % \subsection{\csh{xintBool}, \csh{xintToggle}} % \lverb|1.09c| % \begin{macrocode} -\def\xintBool #1{\romannumeral-`0% +\def\xintBool #1{\romannumeral`&&@% \csname if#1\endcsname\expandafter1\else\expandafter0\fi }% -\def\xintToggle #1{\romannumeral-`0\iftoggle{#1}{1}{0}}% +\def\xintToggle #1{\romannumeral`&&@\iftoggle{#1}{1}{0}}% % \end{macrocode} % \subsection{\csh{xintifSgn}, \csh{xintiiifSgn}} % \lverb|Expandable three-way fork added in 1.09a. Branches expandably @@ -18389,10 +18596,10 @@ $1$ or $-1$. \def\xintCmp {\romannumeral0\xintcmp }% \def\xintcmp #1{\expandafter\XINT_icmp\romannumeral0\xintnum{#1}\Z }% \def\xintiiCmp {\romannumeral0\xintiicmp }% -\def\xintiicmp #1{\expandafter\XINT_iicmp\romannumeral-`0#1\Z }% +\def\xintiicmp #1{\expandafter\XINT_iicmp\romannumeral`&&@#1\Z }% \def\XINT_iicmp #1#2\Z #3% {% - \expandafter\XINT_cmp_nfork\expandafter #1\romannumeral-`0#3\Z #2\Z + \expandafter\XINT_cmp_nfork\expandafter #1\romannumeral`&&@#3\Z #2\Z }% % \end{macrocode} % \lverb|New fork of 1.2 makes it less convenient here for \XINT_cmp_pre and @@ -18633,8 +18840,8 @@ $1$ or $-1$. % \lverb|New with 1.09a. \xintANDof works also with an empty list.| % \begin{macrocode} \def\xintANDof {\romannumeral0\xintandof }% -\def\xintandof #1{\expandafter\XINT_andof_a\romannumeral-`0#1\relax }% -\def\XINT_andof_a #1{\expandafter\XINT_andof_b\romannumeral-`0#1\Z }% +\def\xintandof #1{\expandafter\XINT_andof_a\romannumeral`&&@#1\relax }% +\def\XINT_andof_a #1{\expandafter\XINT_andof_b\romannumeral`&&@#1\Z }% \def\XINT_andof_b #1% {\xint_gob_til_relax #1\XINT_andof_e\relax\XINT_andof_c #1}% \def\XINT_andof_c #1\Z @@ -18646,8 +18853,8 @@ $1$ or $-1$. % \lverb|New with 1.09a. Works also with an empty list.| % \begin{macrocode} \def\xintORof {\romannumeral0\xintorof }% -\def\xintorof #1{\expandafter\XINT_orof_a\romannumeral-`0#1\relax }% -\def\XINT_orof_a #1{\expandafter\XINT_orof_b\romannumeral-`0#1\Z }% +\def\xintorof #1{\expandafter\XINT_orof_a\romannumeral`&&@#1\relax }% +\def\XINT_orof_a #1{\expandafter\XINT_orof_b\romannumeral`&&@#1\Z }% \def\XINT_orof_b #1% {\xint_gob_til_relax #1\XINT_orof_e\relax\XINT_orof_c #1}% \def\XINT_orof_c #1\Z @@ -18661,8 +18868,8 @@ $1$ or $-1$. % \begin{macrocode} \def\xintXORof {\romannumeral0\xintxorof }% \def\xintxorof #1{\expandafter\XINT_xorof_a\expandafter - 0\romannumeral-`0#1\relax }% -\def\XINT_xorof_a #1#2{\expandafter\XINT_xorof_b\romannumeral-`0#2\Z #1}% + 0\romannumeral`&&@#1\relax }% +\def\XINT_xorof_a #1#2{\expandafter\XINT_xorof_b\romannumeral`&&@#2\Z #1}% \def\XINT_xorof_b #1% {\xint_gob_til_relax #1\XINT_xorof_e\relax\XINT_xorof_c #1}% \def\XINT_xorof_c #1\Z #2% @@ -18680,10 +18887,10 @@ $1$ or $-1$. \def\xintGeq {\romannumeral0\xintgeq }% \def\xintgeq #1{\expandafter\XINT_geq\romannumeral0\xintnum{#1}\Z }% \def\xintiiGeq {\romannumeral0\xintiigeq }% -\def\xintiigeq #1{\expandafter\XINT_iigeq\romannumeral-`0#1\Z }% +\def\xintiigeq #1{\expandafter\XINT_iigeq\romannumeral`&&@#1\Z }% \def\XINT_iigeq #1#2\Z #3% {% - \expandafter\XINT_geq_fork\expandafter #1\romannumeral-`0#3\Z #2\Z + \expandafter\XINT_geq_fork\expandafter #1\romannumeral`&&@#3\Z #2\Z }% \let\XINT_geq_pre \xintiigeq % TEMPORAIRE \let\XINT_Geq \xintGeq % TEMPORAIRE ATTENTION FAIT xintNum @@ -18851,11 +19058,11 @@ $1$ or $-1$. \def\xintiiMax {\romannumeral0\xintiimax }% \def\xintiimax #1% {% - \expandafter\xint_iimax\expandafter {\romannumeral-`0#1}% + \expandafter\xint_iimax\expandafter {\romannumeral`&&@#1}% }% \def\xint_iimax #1#2% {% - \expandafter\XINT_max_pre\expandafter {\romannumeral-`0#2}{#1}% + \expandafter\XINT_max_pre\expandafter {\romannumeral`&&@#2}{#1}% }% \def\XINT_max_pre #1#2{\XINT_max_fork #1\Z #2\Z {#2}{#1}}% \def\XINT_Max #1#2{\romannumeral0\XINT_max_fork #2\Z #1\Z {#1}{#2}}% @@ -18908,19 +19115,30 @@ $1$ or $-1$. \fi }% % \end{macrocode} -% \subsection{\csh{xintiMaxof}} -% \lverb|New with 1.09a. 1.2 has NO MORE \xintMaxof, requires \xintfracname.| +% \subsection{\csh{xintiMaxof}, \csh{xintiiMaxof}} +% \lverb|New with 1.09a. 1.2 has NO MORE \xintMaxof, requires \xintfracname. +% 1.2a adds \xintiiMaxof, as \xintiiMaxof:csv is not public.| % \begin{macrocode} \def\xintiMaxof {\romannumeral0\xintimaxof }% -\def\xintimaxof #1{\expandafter\XINT_imaxof_a\romannumeral-`0#1\relax }% +\def\xintimaxof #1{\expandafter\XINT_imaxof_a\romannumeral`&&@#1\relax }% \def\XINT_imaxof_a #1{\expandafter\XINT_imaxof_b\romannumeral0\xintnum{#1}\Z }% \def\XINT_imaxof_b #1\Z #2% - {\expandafter\XINT_imaxof_c\romannumeral-`0#2\Z {#1}\Z}% + {\expandafter\XINT_imaxof_c\romannumeral`&&@#2\Z {#1}\Z}% \def\XINT_imaxof_c #1% {\xint_gob_til_relax #1\XINT_imaxof_e\relax\XINT_imaxof_d #1}% \def\XINT_imaxof_d #1\Z {\expandafter\XINT_imaxof_b\romannumeral0\xintimax {#1}}% \def\XINT_imaxof_e #1\Z #2\Z { #2}% +\def\xintiiMaxof {\romannumeral0\xintiimaxof }% +\def\xintiimaxof #1{\expandafter\XINT_iimaxof_a\romannumeral`&&@#1\relax }% +\def\XINT_iimaxof_a #1{\expandafter\XINT_iimaxof_b\romannumeral`&&@#1\Z }% +\def\XINT_iimaxof_b #1\Z #2% + {\expandafter\XINT_iimaxof_c\romannumeral`&&@#2\Z {#1}\Z}% +\def\XINT_iimaxof_c #1% + {\xint_gob_til_relax #1\XINT_iimaxof_e\relax\XINT_iimaxof_d #1}% +\def\XINT_iimaxof_d #1\Z + {\expandafter\XINT_iimaxof_b\romannumeral0\xintiimax {#1}}% +\def\XINT_iimaxof_e #1\Z #2\Z { #2}% % \end{macrocode} % \subsection{\csh{xintiMin}, \csh{xintiiMin}} % \lverb|\xintnum added New with 1.09a. I add \xintiiMin in 1.1 and mark as @@ -18939,11 +19157,11 @@ $1$ or $-1$. \def\xintiiMin {\romannumeral0\xintiimin }% \def\xintiimin #1% {% - \expandafter\xint_iimin\expandafter {\romannumeral-`0#1}% + \expandafter\xint_iimin\expandafter {\romannumeral`&&@#1}% }% \def\xint_iimin #1#2% {% - \expandafter\XINT_min_pre\expandafter {\romannumeral-`0#2}{#1}% + \expandafter\XINT_min_pre\expandafter {\romannumeral`&&@#2}{#1}% }% \def\XINT_min_pre #1#2{\XINT_min_fork #1\Z #2\Z {#2}{#1}}% \def\XINT_Min #1#2{\romannumeral0\XINT_min_fork #2\Z #1\Z {#1}{#2}}% @@ -18996,19 +19214,29 @@ $1$ or $-1$. \fi }% % \end{macrocode} -% \subsection{\csh{xintiMinof}} -% \lverb|1.09a| +% \subsection{\csh{xintiMinof}, \csh{xintiiMinof}} +% \lverb|1.09a. 1.2a adds \xintiiMinof which was lacking.| % \begin{macrocode} \def\xintiMinof {\romannumeral0\xintiminof }% -\def\xintiminof #1{\expandafter\XINT_iminof_a\romannumeral-`0#1\relax }% +\def\xintiminof #1{\expandafter\XINT_iminof_a\romannumeral`&&@#1\relax }% \def\XINT_iminof_a #1{\expandafter\XINT_iminof_b\romannumeral0\xintnum{#1}\Z }% \def\XINT_iminof_b #1\Z #2% - {\expandafter\XINT_iminof_c\romannumeral-`0#2\Z {#1}\Z}% + {\expandafter\XINT_iminof_c\romannumeral`&&@#2\Z {#1}\Z}% \def\XINT_iminof_c #1% {\xint_gob_til_relax #1\XINT_iminof_e\relax\XINT_iminof_d #1}% \def\XINT_iminof_d #1\Z {\expandafter\XINT_iminof_b\romannumeral0\xintimin {#1}}% \def\XINT_iminof_e #1\Z #2\Z { #2}% +\def\xintiiMinof {\romannumeral0\xintiiminof }% +\def\xintiiminof #1{\expandafter\XINT_iiminof_a\romannumeral`&&@#1\relax }% +\def\XINT_iiminof_a #1{\expandafter\XINT_iiminof_b\romannumeral`&&@#1\Z }% +\def\XINT_iiminof_b #1\Z #2% + {\expandafter\XINT_iiminof_c\romannumeral`&&@#2\Z {#1}\Z}% +\def\XINT_iiminof_c #1% + {\xint_gob_til_relax #1\XINT_iiminof_e\relax\XINT_iiminof_d #1}% +\def\XINT_iiminof_d #1\Z + {\expandafter\XINT_iiminof_b\romannumeral0\xintiimin {#1}}% +\def\XINT_iiminof_e #1\Z #2\Z { #2}% % \end{macrocode} % \subsection{\csh{xintiiSum}} % \lverb|& @@ -19037,10 +19265,10 @@ $1$ or $-1$. \def\xintiiSum {\romannumeral0\xintiisum }% \def\xintiisum #1{\xintiisumexpr #1\relax }% \def\xintiiSumExpr {\romannumeral0\xintiisumexpr }% -\def\xintiisumexpr {\expandafter\XINT_sumexpr\romannumeral-`0}% +\def\xintiisumexpr {\expandafter\XINT_sumexpr\romannumeral`&&@}% \def\XINT_sumexpr {\XINT_sum_loop_a 0\Z }% \def\XINT_sum_loop_a #1\Z #2% - {\expandafter\XINT_sum_loop_b \romannumeral-`0#2\Z #1\Z \Z}% + {\expandafter\XINT_sum_loop_b \romannumeral`&&@#2\Z #1\Z \Z}% \def\XINT_sum_loop_b #1% {\xint_gob_til_relax #1\XINT_sum_finished\relax\XINT_sum_loop_c #1}% \def\XINT_sum_loop_c @@ -19077,10 +19305,10 @@ $1$ or $-1$. \def\xintiiPrd {\romannumeral0\xintiiprd }% \def\xintiiprd #1{\xintiiprdexpr #1\relax }% \def\xintiiPrdExpr {\romannumeral0\xintiiprdexpr }% -\def\xintiiprdexpr {\expandafter\XINT_prdexpr\romannumeral-`0}% +\def\xintiiprdexpr {\expandafter\XINT_prdexpr\romannumeral`&&@}% \def\XINT_prdexpr {\XINT_prod_loop_a 1\Z }% \def\XINT_prod_loop_a #1\Z #2% - {\expandafter\XINT_prod_loop_b \romannumeral-`0#2\Z #1\Z \Z}% + {\expandafter\XINT_prod_loop_b \romannumeral`&&@#2\Z #1\Z \Z}% \def\XINT_prod_loop_b #1% {\xint_gob_til_relax #1\XINT_prod_finished\relax\XINT_prod_loop_c #1}% \def\XINT_prod_loop_c @@ -19188,7 +19416,7 @@ $1$ or $-1$. \def\xintDSL {\romannumeral0\xintdsl }% \def\xintdsl #1% {% - \expandafter\XINT_dsl \romannumeral-`0#1\Z + \expandafter\XINT_dsl \romannumeral`&&@#1\Z }% \def\XINT_DSL #1{\romannumeral0\XINT_dsl #1\Z }% \def\XINT_dsl #1% @@ -19208,7 +19436,7 @@ $1$ or $-1$. \def\xintDSR {\romannumeral0\xintdsr }% \def\xintdsr #1% {% - \expandafter\XINT_dsr_a\expandafter {\romannumeral-`0#1}\W\Z + \expandafter\XINT_dsr_a\expandafter {\romannumeral`&&@#1}\W\Z }% \def\XINT_DSR #1{\romannumeral0\XINT_dsr_a {#1}\W\Z }% \def\XINT_dsr_a @@ -19257,7 +19485,7 @@ $1$ or $-1$. \def\xintDSH {\romannumeral0\xintdsh }% \def\xintdsh #1#2% {% - \expandafter\xint_dsh\expandafter {\romannumeral-`0#2}{#1}% + \expandafter\xint_dsh\expandafter {\romannumeral`&&@#2}{#1}% }% \def\xint_dsh #1#2% {% @@ -19315,7 +19543,7 @@ $1$ or $-1$. \def\xintDSx {\romannumeral0\xintdsx }% \def\xintdsx #1#2% {% - \expandafter\xint_dsx\expandafter {\romannumeral-`0#2}{#1}% + \expandafter\xint_dsx\expandafter {\romannumeral`&&@#2}{#1}% }% \def\xint_dsx #1#2% {% @@ -19640,7 +19868,7 @@ $1$ or $-1$. \def\XINT_sqrtr_post #1#2{\xintiiifLt {#2}{#1}{ #1}{\XINT_dec_pos #1\Z}}% \def\xintisquareroot #1% {\expandafter\XINT_sqrt_checkin\romannumeral0\xintnum{#1}\Z }% -\def\xintiisquareroot #1{\expandafter\XINT_sqrt_checkin\romannumeral-`0#1\Z }% +\def\xintiisquareroot #1{\expandafter\XINT_sqrt_checkin\romannumeral`&&@#1\Z }% \def\XINT_sqrt_checkin #1% {% \xint_UDzerominusfork @@ -19812,7 +20040,7 @@ $1$ or $-1$. % \begin{macrocode} \def\xintiiE {\romannumeral0\xintiie }% used in \xintMod. \def\xintiie #1#2% - {\expandafter\XINT_iie\the\numexpr #2\expandafter.\expandafter{\romannumeral-`0#1}}% + {\expandafter\XINT_iie\the\numexpr #2\expandafter.\expandafter{\romannumeral`&&@#1}}% \def\XINT_iie #1.#2{\ifnum#1>\xint_c_ \xint_dothis{\xint_dsh {#2}{-#1}}\fi \xint_orthat{ #2}}% % \end{macrocode} @@ -19902,7 +20130,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintbinhex}% - [2015/10/10 v1.2 Expandable binary and hexadecimal conversions (jfB)]% + [2015/10/19 v1.2a Expandable binary and hexadecimal conversions (jfB)]% % \end{macrocode} % \subsection{Constants, etc...} % \lverb!v1.08! @@ -20043,7 +20271,7 @@ $1$ or $-1$. % \begin{macrocode} \def\xintDecToHex {\romannumeral0\xintdectohex }% \def\xintdectohex #1% - {\expandafter\XINT_dth_checkin\romannumeral-`0#1\W\W\W\W \T}% + {\expandafter\XINT_dth_checkin\romannumeral`&&@#1\W\W\W\W \T}% \def\XINT_dth_checkin #1% {% \xint_UDsignfork @@ -20052,10 +20280,10 @@ $1$ or $-1$. \krof }% \def\XINT_dth_N {\expandafter\xint_minus_thenstop\romannumeral0\XINT_dth_P }% -\def\XINT_dth_P {\expandafter\XINT_dth_III\romannumeral-`0\XINT_dtbh_I {0.}}% +\def\XINT_dth_P {\expandafter\XINT_dth_III\romannumeral`&&@\XINT_dtbh_I {0.}}% \def\xintDecToBin {\romannumeral0\xintdectobin }% \def\xintdectobin #1% - {\expandafter\XINT_dtb_checkin\romannumeral-`0#1\W\W\W\W \T }% + {\expandafter\XINT_dtb_checkin\romannumeral`&&@#1\W\W\W\W \T }% \def\XINT_dtb_checkin #1% {% \xint_UDsignfork @@ -20064,7 +20292,7 @@ $1$ or $-1$. \krof }% \def\XINT_dtb_N {\expandafter\xint_minus_thenstop\romannumeral0\XINT_dtb_P }% -\def\XINT_dtb_P {\expandafter\XINT_dtb_III\romannumeral-`0\XINT_dtbh_I {0.}}% +\def\XINT_dtb_P {\expandafter\XINT_dtb_III\romannumeral`&&@\XINT_dtbh_I {0.}}% \def\XINT_dtbh_I #1#2#3#4#5% {% \xint_gob_til_W #5\XINT_dtbh_II_a\W\XINT_dtbh_I_a {}{#2#3#4#5}#1\Z.% @@ -20137,13 +20365,13 @@ $1$ or $-1$. {% \xint_gob_til_Z #2\XINT_dth_end\Z \expandafter\XINT_dth_III\expandafter - {\romannumeral-`0\XINT_dth_small #2.#1}% + {\romannumeral`&&@\XINT_dth_small #2.#1}% }% \def\XINT_dth_small #1.% {% \expandafter\XINT_smallhex\expandafter {\the\numexpr (#1+\xint_c_ii^vii)/\xint_c_ii^viii-\xint_c_i\expandafter}% - \romannumeral-`0\expandafter\XINT_smallhex\expandafter + \romannumeral`&&@\expandafter\XINT_smallhex\expandafter {\the\numexpr #1-((#1+\xint_c_ii^vii)/\xint_c_ii^viii-\xint_c_i)*\xint_c_ii^viii}% }% @@ -20166,13 +20394,13 @@ $1$ or $-1$. {% \xint_gob_til_Z #2\XINT_dtb_end\Z \expandafter\XINT_dtb_III\expandafter - {\romannumeral-`0\XINT_dtb_small #2.#1}% + {\romannumeral`&&@\XINT_dtb_small #2.#1}% }% \def\XINT_dtb_small #1.% {% \expandafter\XINT_smallbin\expandafter {\the\numexpr (#1+\xint_c_ii^vii)/\xint_c_ii^viii-\xint_c_i\expandafter}% - \romannumeral-`0\expandafter\XINT_smallbin\expandafter + \romannumeral`&&@\expandafter\XINT_smallbin\expandafter {\the\numexpr #1-((#1+\xint_c_ii^vii)/\xint_c_ii^viii-\xint_c_i)*\xint_c_ii^viii}% }% @@ -20195,7 +20423,7 @@ $1$ or $-1$. % \begin{macrocode} \def\xintHexToDec {\romannumeral0\xinthextodec }% \def\xinthextodec #1% - {\expandafter\XINT_htd_checkin\romannumeral-`0#1\W\W\W\W \T }% + {\expandafter\XINT_htd_checkin\romannumeral`&&@#1\W\W\W\W \T }% \def\XINT_htd_checkin #1% {% \xint_UDsignfork @@ -20283,7 +20511,7 @@ $1$ or $-1$. % \begin{macrocode} \def\xintBinToDec {\romannumeral0\xintbintodec }% \def\xintbintodec #1{\expandafter\XINT_btd_checkin - \romannumeral-`0#1\W\W\W\W\W\W\W\W \T }% + \romannumeral`&&@#1\W\W\W\W\W\W\W\W \T }% \def\XINT_btd_checkin #1% {% \xint_UDsignfork @@ -20395,7 +20623,7 @@ $1$ or $-1$. {% \expandafter\XINT_bth_checkin \romannumeral0\expandafter\XINT_num_loop - \romannumeral-`0#1\xint_relax\xint_relax + \romannumeral`&&@#1\xint_relax\xint_relax \xint_relax\xint_relax \xint_relax\xint_relax\xint_relax\xint_relax\Z \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W @@ -20436,7 +20664,7 @@ $1$ or $-1$. \def\xintHexToBin {\romannumeral0\xinthextobin }% \def\xinthextobin #1% {% - \expandafter\XINT_htb_checkin\romannumeral-`0#1GGGGGGGG\T + \expandafter\XINT_htb_checkin\romannumeral`&&@#1GGGGGGGG\T }% \def\XINT_htb_checkin #1% {% @@ -20480,7 +20708,7 @@ $1$ or $-1$. \def\xintCHexToBin {\romannumeral0\xintchextobin }% \def\xintchextobin #1% {% - \expandafter\XINT_chtb_checkin\romannumeral-`0#1% + \expandafter\XINT_chtb_checkin\romannumeral`&&@#1% \R\R\R\R\R\R\R\R\Z \W\W\W\W\W\W\W\W }% \def\XINT_chtb_checkin #1% @@ -20603,7 +20831,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintgcd}% - [2015/10/10 v1.2 Euclide algorithm with xint package (jfB)]% + [2015/10/19 v1.2a Euclide algorithm with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintGCD}, \csh{xintiiGCD}} % \lverb|The macros of 1.09a benefits from the \xintnum which has been inserted @@ -21108,9 +21336,9 @@ $1$ or $-1$. % it seemed to be less efficient ...| % \begin{macrocode} \def\xintGCDof {\romannumeral0\xintgcdof }% -\def\xintgcdof #1{\expandafter\XINT_gcdof_a\romannumeral-`0#1\relax }% -\def\XINT_gcdof_a #1{\expandafter\XINT_gcdof_b\romannumeral-`0#1\Z }% -\def\XINT_gcdof_b #1\Z #2{\expandafter\XINT_gcdof_c\romannumeral-`0#2\Z {#1}\Z}% +\def\xintgcdof #1{\expandafter\XINT_gcdof_a\romannumeral`&&@#1\relax }% +\def\XINT_gcdof_a #1{\expandafter\XINT_gcdof_b\romannumeral`&&@#1\Z }% +\def\XINT_gcdof_b #1\Z #2{\expandafter\XINT_gcdof_c\romannumeral`&&@#2\Z {#1}\Z}% \def\XINT_gcdof_c #1{\xint_gob_til_relax #1\XINT_gcdof_e\relax\XINT_gcdof_d #1}% \def\XINT_gcdof_d #1\Z {\expandafter\XINT_gcdof_b\romannumeral0\xintgcd {#1}}% \def\XINT_gcdof_e #1\Z #2\Z { #2}% @@ -21119,9 +21347,9 @@ $1$ or $-1$. % \lverb|New with 1.09a| % \begin{macrocode} \def\xintLCMof {\romannumeral0\xintlcmof }% -\def\xintlcmof #1{\expandafter\XINT_lcmof_a\romannumeral-`0#1\relax }% -\def\XINT_lcmof_a #1{\expandafter\XINT_lcmof_b\romannumeral-`0#1\Z }% -\def\XINT_lcmof_b #1\Z #2{\expandafter\XINT_lcmof_c\romannumeral-`0#2\Z {#1}\Z}% +\def\xintlcmof #1{\expandafter\XINT_lcmof_a\romannumeral`&&@#1\relax }% +\def\XINT_lcmof_a #1{\expandafter\XINT_lcmof_b\romannumeral`&&@#1\Z }% +\def\XINT_lcmof_b #1\Z #2{\expandafter\XINT_lcmof_c\romannumeral`&&@#2\Z {#1}\Z}% \def\XINT_lcmof_c #1{\xint_gob_til_relax #1\XINT_lcmof_e\relax\XINT_lcmof_d #1}% \def\XINT_lcmof_d #1\Z {\expandafter\XINT_lcmof_b\romannumeral0\xintlcm {#1}}% \def\XINT_lcmof_e #1\Z #2\Z { #2}% @@ -21305,7 +21533,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintfrac}% - [2015/10/10 v1.2 Expandable operations on fractions (jfB)]% + [2015/10/19 v1.2a Expandable operations on fractions (jfB)]% % \end{macrocode} % \subsection{\csh{XINT_cntSgnFork}} % \lverb|1.09i. Used internally, #1 must expand to \m@ne, \z@, or \@ne or @@ -21335,7 +21563,7 @@ $1$ or $-1$. % \subsection{\csh{XINT_lenrord_loop}} % \begin{macrocode} \def\XINT_lenrord_loop #1#2#3#4#5#6#7#8#9% -{% faire \romannumeral-`0\XINT_lenrord_loop 0{}#1\Z\W\W\W\W\W\W\W\Z +{% faire \romannumeral`&&@\XINT_lenrord_loop 0{}#1\Z\W\W\W\W\W\W\W\Z \xint_gob_til_W #9\XINT_lenrord_W\W \expandafter\XINT_lenrord_loop\expandafter {\the\numexpr #1+7}{#9#8#7#6#5#4#3#2}% @@ -21441,7 +21669,7 @@ $1$ or $-1$. \def\XINT_inFrac {\romannumeral0\XINT_infrac }% \def\XINT_infrac #1% {% - \expandafter\XINT_infrac_fork\romannumeral-`0#1/\XINT_W[\XINT_W\XINT_T + \expandafter\XINT_infrac_fork\romannumeral`&&@#1/\XINT_W[\XINT_W\XINT_T }% \def\XINT_infrac_fork #1[#2% {% @@ -21467,7 +21695,7 @@ $1$ or $-1$. \def\XINT_infrac_res_ca #1[#2]/\XINT_W[\XINT_W\XINT_T {\expandafter{\the\numexpr 0#2}{#1}{1}}% \def\XINT_infrac_res_cb #1/#2[% - {\expandafter\XINT_infrac_res_cc\romannumeral-`0#2~#1[}% + {\expandafter\XINT_infrac_res_cc\romannumeral`&&@#2~#1[}% \def\XINT_infrac_res_cc #1~#2[#3]/\XINT_W[\XINT_W\XINT_T {\expandafter{\the\numexpr 0#3}{#2}{#1}}% % \end{macrocode} @@ -21492,7 +21720,7 @@ $1$ or $-1$. \def\XINT_frac_gen_B #1/#2/\XINT_W[%\XINT_W {% \expandafter\XINT_frac_gen_Ba - \romannumeral-`0#2ee.\XINT_W\XINT_Z #1ee.%\XINT_W + \romannumeral`&&@#2ee.\XINT_W\XINT_Z #1ee.%\XINT_W }% \def\XINT_frac_gen_Ba #1.#2% {% @@ -21506,7 +21734,7 @@ $1$ or $-1$. {\expandafter\XINT_frac_gen_C\the\numexpr 0#2~#1!}% \def\XINT_frac_gen_Bc #1.#2e% {% - \expandafter\XINT_frac_gen_Bd\romannumeral-`0#2.#1e% + \expandafter\XINT_frac_gen_Bd\romannumeral`&&@#2.#1e% }% \def\XINT_frac_gen_Bd #1.#2e#3e#4\XINT_Z {% @@ -21532,7 +21760,7 @@ $1$ or $-1$. }% \def\XINT_frac_gen_Cb #1.#2e% {% - \expandafter\XINT_frac_gen_Cc\romannumeral-`0#2.#1e% + \expandafter\XINT_frac_gen_Cc\romannumeral`&&@#2.#1e% }% \def\XINT_frac_gen_Cc #1.#2~#3!#4e#5e#6\XINT_T {% @@ -22956,7 +23184,7 @@ $1$ or $-1$. {% \expandafter\XINT_float_T\expandafter {\the\numexpr #4+\xint_c_i\expandafter}% - \romannumeral-`0\XINT_lenrord_loop 0{}#2\Z\W\W\W\W\W\W\W\Z #1{#3}{#4}% + \romannumeral`&&@\XINT_lenrord_loop 0{}#2\Z\W\W\W\W\W\W\W\Z #1{#3}{#4}% }% \def\XINT_float_T #1#2#3% {% @@ -23130,7 +23358,7 @@ $1$ or $-1$. {% \expandafter\XINT_infloat_T\expandafter {\the\numexpr #3+\xint_c_i\expandafter}% - \romannumeral-`0\XINT_lenrord_loop 0{}#1\Z\W\W\W\W\W\W\W\Z + \romannumeral`&&@\XINT_lenrord_loop 0{}#1\Z\W\W\W\W\W\W\W\Z {#2}% }% \def\XINT_infloat_T #1#2#3% @@ -23291,11 +23519,11 @@ $1$ or $-1$. \def\xintSum {\romannumeral0\xintsum }% \def\xintsum #1{\xintsumexpr #1\relax }% \def\xintSumExpr {\romannumeral0\xintsumexpr }% -\def\xintsumexpr {\expandafter\XINT_fsumexpr\romannumeral-`0}% +\def\xintsumexpr {\expandafter\XINT_fsumexpr\romannumeral`&&@}% \def\XINT_fsumexpr {\XINT_fsum_loop_a {0/1[0]}}% \def\XINT_fsum_loop_a #1#2% {% - \expandafter\XINT_fsum_loop_b \romannumeral-`0#2\Z {#1}% + \expandafter\XINT_fsum_loop_b \romannumeral`&&@#2\Z {#1}% }% \def\XINT_fsum_loop_b #1% {% @@ -23419,11 +23647,11 @@ $1$ or $-1$. \def\xintPrd {\romannumeral0\xintprd }% \def\xintprd #1{\xintprdexpr #1\relax }% \def\xintPrdExpr {\romannumeral0\xintprdexpr }% -\def\xintprdexpr {\expandafter\XINT_fprdexpr \romannumeral-`0}% +\def\xintprdexpr {\expandafter\XINT_fprdexpr \romannumeral`&&@}% \def\XINT_fprdexpr {\XINT_fprod_loop_a {1/1[0]}}% \def\XINT_fprod_loop_a #1#2% {% - \expandafter\XINT_fprod_loop_b \romannumeral-`0#2\Z {#1}% + \expandafter\XINT_fprod_loop_b \romannumeral`&&@#2\Z {#1}% }% \def\XINT_fprod_loop_b #1% {% @@ -23576,7 +23804,7 @@ $1$ or $-1$. }% \def\XINT_fgeq_D #1#2#3% {% - \expandafter\XINT_cntSgnFork\romannumeral-`0\expandafter\XINT_cntSgn + \expandafter\XINT_cntSgnFork\romannumeral`&&@\expandafter\XINT_cntSgn \the\numexpr #2+\xintLength{#3}-\xintLength{#1}\relax\Z { 0}{\XINT_fgeq_E #2\Z {#3}{#1}}{ 1}% }% @@ -23641,10 +23869,10 @@ $1$ or $-1$. % \subsection{\csh{xintMaxof}} % \begin{macrocode} \def\xintMaxof {\romannumeral0\xintmaxof }% -\def\xintmaxof #1{\expandafter\XINT_maxof_a\romannumeral-`0#1\relax }% +\def\xintmaxof #1{\expandafter\XINT_maxof_a\romannumeral`&&@#1\relax }% \def\XINT_maxof_a #1{\expandafter\XINT_maxof_b\romannumeral0\xintraw{#1}\Z }% \def\XINT_maxof_b #1\Z #2% - {\expandafter\XINT_maxof_c\romannumeral-`0#2\Z {#1}\Z}% + {\expandafter\XINT_maxof_c\romannumeral`&&@#2\Z {#1}\Z}% \def\XINT_maxof_c #1% {\xint_gob_til_relax #1\XINT_maxof_e\relax\XINT_maxof_d #1}% \def\XINT_maxof_d #1\Z @@ -23693,10 +23921,10 @@ $1$ or $-1$. % \subsection{\csh{xintMinof}} % \begin{macrocode} \def\xintMinof {\romannumeral0\xintminof }% -\def\xintminof #1{\expandafter\XINT_minof_a\romannumeral-`0#1\relax }% +\def\xintminof #1{\expandafter\XINT_minof_a\romannumeral`&&@#1\relax }% \def\XINT_minof_a #1{\expandafter\XINT_minof_b\romannumeral0\xintraw{#1}\Z }% \def\XINT_minof_b #1\Z #2% - {\expandafter\XINT_minof_c\romannumeral-`0#2\Z {#1}\Z}% + {\expandafter\XINT_minof_c\romannumeral`&&@#2\Z {#1}\Z}% \def\XINT_minof_c #1% {\xint_gob_til_relax #1\XINT_minof_e\relax\XINT_minof_d #1}% \def\XINT_minof_d #1\Z @@ -23760,7 +23988,7 @@ $1$ or $-1$. }% \def\XINT_fcmp_D #1#2#3% {% - \expandafter\XINT_cntSgnFork\romannumeral-`0\expandafter\XINT_cntSgn + \expandafter\XINT_cntSgnFork\romannumeral`&&@\expandafter\XINT_cntSgn \the\numexpr #2+\xintLength{#3}-\xintLength{#1}\relax\Z { -1}{\XINT_fcmp_E #2\Z {#3}{#1}}{ 1}% }% @@ -24694,7 +24922,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintseries}% - [2015/10/10 v1.2 Expandable partial sums with xint package (jfB)]% + [2015/10/19 v1.2a Expandable partial sums with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintSeries}} % \lverb|& @@ -24829,7 +25057,7 @@ $1$ or $-1$. \else \xint_afterfi {\expandafter\XINT_powseriesx_pre\expandafter - {\romannumeral-`0#4}{#1}{#2}{#3}% + {\romannumeral`&&@#4}{#1}{#2}{#3}% }% \fi }% @@ -24909,7 +25137,7 @@ $1$ or $-1$. \else \xint_afterfi {\expandafter\XINT_ratseriesx_pre\expandafter - {\romannumeral-`0#5}{#2}{#1}{#4}{#3}% + {\romannumeral`&&@#5}{#2}{#1}{#4}{#3}% }% \fi }% @@ -24997,7 +25225,7 @@ $1$ or $-1$. \else \xint_afterfi {\expandafter \XINT_fppowseriesx_pre \expandafter - {\romannumeral-`0#4}{#1}{#2}{#3}{#5}% + {\romannumeral`&&@#4}{#1}{#2}{#3}{#5}% }% \fi }% @@ -25109,7 +25337,7 @@ $1$ or $-1$. \else \xint_afterfi {\expandafter \XINT_flpowseriesx_pre \expandafter - {\romannumeral-`0#5}{#1}{#2}{#4}{#3}% + {\romannumeral`&&@#5}{#1}{#2}{#4}{#3}% }% \fi }% @@ -25199,7 +25427,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintcfrac}% - [2015/10/10 v1.2 Expandable continued fractions with xint package (jfB)]% + [2015/10/19 v1.2a Expandable continued fractions with xint package (jfB)]% % \end{macrocode} % \subsection{\csh{xintCFrac}} % \begin{macrocode} @@ -25308,7 +25536,7 @@ $1$ or $-1$. }% \def\XINT_gcfrac {% - \expandafter\XINT_gcfrac_enter\romannumeral-`0% + \expandafter\XINT_gcfrac_enter\romannumeral`&&@% }% \def\XINT_gcfrac_enter {\XINT_gcfrac_loop {}}% \def\XINT_gcfrac_loop #1#2+#3/% @@ -25366,7 +25594,7 @@ $1$ or $-1$. }% \def\XINT_ggcfrac {% - \expandafter\XINT_ggcfrac_enter\romannumeral-`0% + \expandafter\XINT_ggcfrac_enter\romannumeral`&&@% }% \def\XINT_ggcfrac_enter {\XINT_ggcfrac_loop {}}% \def\XINT_ggcfrac_loop #1#2+#3/% @@ -25395,7 +25623,7 @@ $1$ or $-1$. \def\xintGCtoGCx {\romannumeral0\xintgctogcx }% \def\xintgctogcx #1#2#3% {% - \expandafter\XINT_gctgcx_start\expandafter {\romannumeral-`0#3}{#1}{#2}% + \expandafter\XINT_gctgcx_start\expandafter {\romannumeral`&&@#3}{#1}{#2}% }% \def\XINT_gctgcx_start #1#2#3{\XINT_gctgcx_loop_a {}{#2}{#3}#1+\xint_relax/}% \def\XINT_gctgcx_loop_a #1#2#3#4+#5/% @@ -25641,7 +25869,7 @@ $1$ or $-1$. \def\xintCtoF {\romannumeral0\xintctof }% \def\xintctof #1% {% - \expandafter\XINT_ctf_prep \romannumeral-`0#1\xint_relax + \expandafter\XINT_ctf_prep \romannumeral`&&@#1\xint_relax }% \def\XINT_ctf_prep {% @@ -25680,7 +25908,7 @@ $1$ or $-1$. \def\xintiCstoF {\romannumeral0\xinticstof }% \def\xinticstof #1% {% - \expandafter\XINT_icstf_prep \romannumeral-`0#1,\xint_relax,% + \expandafter\XINT_icstf_prep \romannumeral`&&@#1,\xint_relax,% }% \def\XINT_icstf_prep {% @@ -25690,7 +25918,7 @@ $1$ or $-1$. {% \xint_gob_til_xint_relax #5\XINT_icstf_end\xint_relax \expandafter - \XINT_icstf_loop_b \romannumeral-`0#5.{#1}{#2}{#3}{#4}% + \XINT_icstf_loop_b \romannumeral`&&@#5.{#1}{#2}{#3}{#4}% }% \def\XINT_icstf_loop_b #1.#2#3#4#5% {% @@ -25710,7 +25938,7 @@ $1$ or $-1$. \def\xintGCtoF {\romannumeral0\xintgctof }% \def\xintgctof #1% {% - \expandafter\XINT_gctf_prep \romannumeral-`0#1+\xint_relax/% + \expandafter\XINT_gctf_prep \romannumeral`&&@#1+\xint_relax/% }% \def\XINT_gctf_prep {% @@ -25774,7 +26002,7 @@ $1$ or $-1$. \def\xintiGCtoF {\romannumeral0\xintigctof }% \def\xintigctof #1% {% - \expandafter\XINT_igctf_prep \romannumeral-`0#1+\xint_relax/% + \expandafter\XINT_igctf_prep \romannumeral`&&@#1+\xint_relax/% }% \def\XINT_igctf_prep {% @@ -25783,7 +26011,7 @@ $1$ or $-1$. \def\XINT_igctf_loop_a #1#2#3#4#5+% {% \expandafter\XINT_igctf_loop_b - \romannumeral-`0#5.{#1}{#2}{#3}{#4}% + \romannumeral`&&@#5.{#1}{#2}{#3}{#4}% }% \def\XINT_igctf_loop_b #1.#2#3#4#5% {% @@ -25800,7 +26028,7 @@ $1$ or $-1$. {% \xint_gob_til_xint_relax #4\XINT_igctf_end\xint_relax \expandafter\XINT_igctf_loop_g - \romannumeral-`0#4.{#2}{#3}#1% + \romannumeral`&&@#4.{#2}{#3}#1% }% \def\XINT_igctf_loop_g #1.#2#3% {% @@ -25832,7 +26060,7 @@ $1$ or $-1$. \def\xintCtoCv {\romannumeral0\xintctocv }% \def\xintctocv #1% {% - \expandafter\XINT_ctcv_prep\romannumeral-`0#1\xint_relax + \expandafter\XINT_ctcv_prep\romannumeral`&&@#1\xint_relax }% \def\XINT_ctcv_prep {% @@ -25877,7 +26105,7 @@ $1$ or $-1$. \def\xintiCstoCv {\romannumeral0\xinticstocv }% \def\xinticstocv #1% {% - \expandafter\XINT_icstcv_prep \romannumeral-`0#1,\xint_relax,% + \expandafter\XINT_icstcv_prep \romannumeral`&&@#1,\xint_relax,% }% \def\XINT_icstcv_prep {% @@ -25887,7 +26115,7 @@ $1$ or $-1$. {% \xint_gob_til_xint_relax #6\XINT_icstcv_end\xint_relax \expandafter - \XINT_icstcv_loop_b \romannumeral-`0#6.{#2}{#3}{#4}{#5}{#1}% + \XINT_icstcv_loop_b \romannumeral`&&@#6.{#2}{#3}{#4}{#5}{#1}% }% \def\XINT_icstcv_loop_b #1.#2#3#4#5% {% @@ -25913,7 +26141,7 @@ $1$ or $-1$. \def\xintGCtoCv {\romannumeral0\xintgctocv }% \def\xintgctocv #1% {% - \expandafter\XINT_gctcv_prep \romannumeral-`0#1+\xint_relax/% + \expandafter\XINT_gctcv_prep \romannumeral`&&@#1+\xint_relax/% }% \def\XINT_gctcv_prep {% @@ -25987,7 +26215,7 @@ $1$ or $-1$. \def\xintiGCtoCv {\romannumeral0\xintigctocv }% \def\xintigctocv #1% {% - \expandafter\XINT_igctcv_prep \romannumeral-`0#1+\xint_relax/% + \expandafter\XINT_igctcv_prep \romannumeral`&&@#1+\xint_relax/% }% \def\XINT_igctcv_prep {% @@ -25996,7 +26224,7 @@ $1$ or $-1$. \def\XINT_igctcv_loop_a #1#2#3#4#5#6+% {% \expandafter\XINT_igctcv_loop_b - \romannumeral-`0#6.{#2}{#3}{#4}{#5}{#1}% + \romannumeral`&&@#6.{#2}{#3}{#4}{#5}{#1}% }% \def\XINT_igctcv_loop_b #1.#2#3#4#5% {% @@ -26013,7 +26241,7 @@ $1$ or $-1$. {% \xint_gob_til_xint_relax #4\XINT_igctcv_end_a\xint_relax \expandafter\XINT_igctcv_loop_g - \romannumeral-`0#4.#1#2{#3}% + \romannumeral`&&@#4.#1#2{#3}% }% \def\XINT_igctcv_loop_g #1.#2#3#4#5% {% @@ -26072,11 +26300,11 @@ $1$ or $-1$. \ifnum #1>\xint_c_ \xint_afterfi {\expandafter\XINT_cntf_loop\expandafter {\the\numexpr #1-1\expandafter}\expandafter - {\romannumeral-`0#2{#1}}{#2}}% + {\romannumeral`&&@#2{#1}}{#2}}% \else \xint_afterfi {\ifnum #1=\xint_c_ - \xint_afterfi {\expandafter\space \romannumeral-`0#2{0}}% + \xint_afterfi {\expandafter\space \romannumeral`&&@#2{0}}% \else \xint_afterfi { }% 1.09m now returns nothing. \fi}% \fi @@ -26111,11 +26339,11 @@ $1$ or $-1$. \ifnum #1>\xint_c_ \xint_afterfi {\expandafter\XINT_gcntf_loop\expandafter {\the\numexpr #1-1\expandafter}\expandafter - {\romannumeral-`0#2{#1}}{#2}{#3}}% + {\romannumeral`&&@#2{#1}}{#2}{#3}}% \else \xint_afterfi {\ifnum #1=\xint_c_ - \xint_afterfi {\expandafter\space\romannumeral-`0#2{0}}% + \xint_afterfi {\expandafter\space\romannumeral`&&@#2{0}}% \else \xint_afterfi { }% 1.09m now returns nothing rather than 0/1[0] \fi}% \fi @@ -26154,7 +26382,7 @@ $1$ or $-1$. \else \xint_afterfi {\expandafter\XINT_cntcs_loop\expandafter {\the\numexpr #1-\xint_c_i\expandafter}\expandafter - {\romannumeral-`0#2{#1}}{#2}}% produced coeff not braced + {\romannumeral`&&@#2{#1}}{#2}}% produced coeff not braced \fi }% \def\XINT_cntcs_loop #1#2#3% @@ -26162,7 +26390,7 @@ $1$ or $-1$. \ifnum #1>-\xint_c_i \else \XINT_cntcs_exit \fi \expandafter\XINT_cntcs_loop\expandafter {\the\numexpr #1-\xint_c_i\expandafter}\expandafter - {\romannumeral-`0#3{#1}, #2}{#3}% space added, 1.09m + {\romannumeral`&&@#3{#1}, #2}{#3}% space added, 1.09m }% \def\XINT_cntcs_exit \fi \expandafter\XINT_cntcs_loop\expandafter @@ -26194,7 +26422,7 @@ $1$ or $-1$. \else \xint_afterfi {\expandafter\XINT_cntgc_loop\expandafter {\the\numexpr #1-\xint_c_i\expandafter}\expandafter - {\expandafter{\romannumeral-`0#2{#1}}}{#2}}% + {\expandafter{\romannumeral`&&@#2{#1}}}{#2}}% \fi }% \def\XINT_cntgc_loop #1#2#3% @@ -26202,7 +26430,7 @@ $1$ or $-1$. \ifnum #1>-\xint_c_i \else \XINT_cntgc_exit \fi \expandafter\XINT_cntgc_loop\expandafter {\the\numexpr #1-\xint_c_i\expandafter }\expandafter - {\expandafter{\romannumeral-`0#3{#1}}+1/#2}{#3}% + {\expandafter{\romannumeral`&&@#3{#1}}+1/#2}{#3}% }% \def\XINT_cntgc_exit \fi \expandafter\XINT_cntgc_loop\expandafter @@ -26229,20 +26457,20 @@ $1$ or $-1$. \else \xint_afterfi {\expandafter\XINT_gcntgc_loop\expandafter {\the\numexpr #1-\xint_c_i\expandafter}\expandafter - {\expandafter{\romannumeral-`0#2{#1}}}{#2}{#3}}% + {\expandafter{\romannumeral`&&@#2{#1}}}{#2}{#3}}% \fi }% \def\XINT_gcntgc_loop #1#2#3#4% {% \ifnum #1>-\xint_c_i \else \XINT_gcntgc_exit \fi \expandafter\XINT_gcntgc_loop_b\expandafter - {\expandafter{\romannumeral-`0#4{#1}}/#2}{#3{#1}}{#1}{#3}{#4}% + {\expandafter{\romannumeral`&&@#4{#1}}/#2}{#3{#1}}{#1}{#3}{#4}% }% \def\XINT_gcntgc_loop_b #1#2#3% {% \expandafter\XINT_gcntgc_loop\expandafter {\the\numexpr #3-\xint_c_i \expandafter}\expandafter - {\expandafter{\romannumeral-`0#2}+#1}% + {\expandafter{\romannumeral`&&@#2}+#1}% }% \def\XINT_gcntgc_exit \fi \expandafter\XINT_gcntgc_loop_b\expandafter #1#2#3#4#5% @@ -26256,7 +26484,7 @@ $1$ or $-1$. \def\xintCstoGC {\romannumeral0\xintcstogc }% \def\xintcstogc #1% {% - \expandafter\XINT_cstc_prep \romannumeral-`0#1,\xint_relax,% + \expandafter\XINT_cstc_prep \romannumeral`&&@#1,\xint_relax,% }% \def\XINT_cstc_prep #1,{\XINT_cstc_loop_a {{#1}}}% \def\XINT_cstc_loop_a #1#2,% @@ -26272,19 +26500,19 @@ $1$ or $-1$. \def\xintGCtoGC {\romannumeral0\xintgctogc }% \def\xintgctogc #1% {% - \expandafter\XINT_gctgc_start \romannumeral-`0#1+\xint_relax/% + \expandafter\XINT_gctgc_start \romannumeral`&&@#1+\xint_relax/% }% \def\XINT_gctgc_start {\XINT_gctgc_loop_a {}}% \def\XINT_gctgc_loop_a #1#2+#3/% {% \xint_gob_til_xint_relax #3\XINT_gctgc_end\xint_relax \expandafter\XINT_gctgc_loop_b\expandafter - {\romannumeral-`0#2}{#3}{#1}% + {\romannumeral`&&@#2}{#3}{#1}% }% \def\XINT_gctgc_loop_b #1#2% {% \expandafter\XINT_gctgc_loop_c\expandafter - {\romannumeral-`0#2}{#1}% + {\romannumeral`&&@#2}{#1}% }% \def\XINT_gctgc_loop_c #1#2#3% {% @@ -26328,11 +26556,11 @@ $1$ or $-1$. % Release |1.2| |[2015/10/10]| has the following changes: % \begin{description} % \item[not anymore limited to 5000 -% digits:] |1.2| replaces chains of |\romannumeral-`0| used earlier to +% digits:] |1.2| replaces chains of |\romannumeral`&&@| used earlier to % gather digits by |\csname| governed expansions. The use of % |\csname.=A/B[N]\endcsname| storage has been part of the design from the % start, hence it was very natural and not too hard to gather the number -% directly inside |\csname|. With the chains of |\romannumeral-`0| gone, +% directly inside |\csname|. With the chains of |\romannumeral`&&@| gone, % there is no more a limit at about 5000 (with the standard settings of the % maximal expansion depth at 10000) on the maximal number of digits for each % gathered number. @@ -26498,7 +26726,7 @@ $1$ or $-1$. % \item[{|1.08b [2013/06/14]|}] corrected a problem originating in the attempt % to attribute a special rôle to braces: expansion could be stopped by space % tokens, as various macros tried to expand without grabbing what came next. -% They now have a doubled |\romannumeral-`0|. +% They now have a doubled |\romannumeral`&&@|. % % \item[{|1.09a| |[2013/09/24]|}] has a better mechanism regarding |\xintthe|, % more commenting and better organization of the code, and most importantly it @@ -26624,7 +26852,7 @@ $1$ or $-1$. % \begin{macrocode} \XINT_providespackage \ProvidesPackage{xintexpr}% - [2015/10/10 v1.2 Expandable expression parser (jfB)]% + [2015/10/19 v1.2a Expandable expression parser (jfB)]% \catcode`! 11 % \end{macrocode} % \subsection{Locking and unlocking} @@ -26660,7 +26888,7 @@ $1$ or $-1$. \edef\XINT_expr_lockit #1{\noexpand\expandafter\space\noexpand\csname .=#1\endcsname }% \def\XINT_expr_unlock_hex_in #1% expanded inside \csname..\endcsname - {\expandafter\XINT_expr_inhex\romannumeral-`0\XINT_expr_unlock#1;}% + {\expandafter\XINT_expr_inhex\romannumeral`&&@\XINT_expr_unlock#1;}% \def\XINT_expr_inhex #1.#2#3;% expanded inside \csname..\endcsname {% \if#2>\xintHexToDec{#1}% @@ -26700,15 +26928,15 @@ $1$ or $-1$. \def\xintfloatexpr {\romannumeral0\xintfloateval }% \def\xintiiexpr {\romannumeral0\xintiieval }% \def\xinttheexpr - {\romannumeral-`0\expandafter\XINT_expr_print\romannumeral0\xintbareeval }% -\def\xinttheiexpr {\romannumeral-`0\xintthe\xintiexpr }% -\def\xintthefloatexpr {\romannumeral-`0\xintthe\xintfloatexpr }% + {\romannumeral`&&@\expandafter\XINT_expr_print\romannumeral0\xintbareeval }% +\def\xinttheiexpr {\romannumeral`&&@\xintthe\xintiexpr }% +\def\xintthefloatexpr {\romannumeral`&&@\xintthe\xintfloatexpr }% \def\xinttheiiexpr - {\romannumeral-`0\expandafter\XINT_iiexpr_print\romannumeral0\xintbareiieval }% + {\romannumeral`&&@\expandafter\XINT_iiexpr_print\romannumeral0\xintbareiieval }% % \end{macrocode} % \subsection{\csh{xintthe}} % \begin{macrocode} -\def\xintthe #1{\romannumeral-`0\expandafter\xint_gobble_iii\romannumeral-`0#1}% +\def\xintthe #1{\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@#1}% % \end{macrocode} % \subsection{\csh{xintthecoords}} % \lverb|1.1 Wraps up an even number of comma separated items into pairs of @@ -26726,12 +26954,12 @@ $1$ or $-1$. % could make an extra check, but one should not accustome users to too loose % requirements!| % \begin{macrocode} -\def\xintthecoords #1{\romannumeral-`0\expandafter\expandafter\expandafter +\def\xintthecoords #1{\romannumeral`&&@\expandafter\expandafter\expandafter \XINT_thecoords_a \expandafter\xint_gobble_iii\romannumeral0#1}% \def\XINT_thecoords_a #1#2% #1=print macro, indispensible for scientific notation {\expandafter\XINT_expr_unlock\csname.=\expandafter\XINT_thecoords_b - \romannumeral-`0#1#2,!,!,^\endcsname }% + \romannumeral`&&@#1#2,!,!,^\endcsname }% \def\XINT_thecoords_b #1#2,#3#4,% {\xint_gob_til_! #3\XINT_thecoords_c ! (#1#2, #3#4)\XINT_thecoords_b }% \def\XINT_thecoords_c #1^{}% @@ -26739,11 +26967,11 @@ $1$ or $-1$. % \subsection{\csh{xintbareeval}, \csh{xintbarefloateval}, \csh{xintbareiieval}} % \begin{macrocode} \def\xintbareeval - {\expandafter\XINT_expr_until_end_a\romannumeral-`0\XINT_expr_getnext }% + {\expandafter\XINT_expr_until_end_a\romannumeral`&&@\XINT_expr_getnext }% \def\xintbarefloateval - {\expandafter\XINT_flexpr_until_end_a\romannumeral-`0\XINT_expr_getnext }% + {\expandafter\XINT_flexpr_until_end_a\romannumeral`&&@\XINT_expr_getnext }% \def\xintbareiieval - {\expandafter\XINT_iiexpr_until_end_a\romannumeral-`0\XINT_expr_getnext }% + {\expandafter\XINT_iiexpr_until_end_a\romannumeral`&&@\XINT_expr_getnext }% % \end{macrocode} % \subsection{\csh{xinteval}, \csh{xintiieval}} % \begin{macrocode} @@ -26797,7 +27025,7 @@ $1$ or $-1$. \def\XINT_flexpr_print #1% {% \expandafter\xintPFloat::csv - \romannumeral-`0\expandafter\XINT_expr_unlock_sp\string #1!% + \romannumeral`&&@\expandafter\XINT_expr_unlock_sp\string #1!% }% \catcode`: 12 \def\XINT_expr_unlock_sp #1.;#2.=#3!{{#2}{#3}}% @@ -26807,7 +27035,7 @@ $1$ or $-1$. % \begin{macrocode} \def\xintboolexpr {\romannumeral0\expandafter\expandafter\expandafter \XINT_boolexpr_done \expandafter\xint_gobble_iv\romannumeral0\xinteval }% -\def\xinttheboolexpr {\romannumeral-`0\expandafter\expandafter\expandafter +\def\xinttheboolexpr {\romannumeral`&&@\expandafter\expandafter\expandafter \XINT_boolexpr_print\expandafter\xint_gobble_iv\romannumeral0\xinteval }% \def\XINT_boolexpr_done { !\XINT_expr_usethe\XINT_protectii\XINT_boolexpr_print }% % \end{macrocode} @@ -26835,9 +27063,9 @@ $1$ or $-1$. % to be able to handle comma separated inputs. I am not sure but I think I had % them just prior to releasing 1.1 but removed them foolishsly.| % \begin{macrocode} -\def\xintCSV::csv #1{\expandafter\XINT_csv::_a\romannumeral-`0#1,^,}% +\def\xintCSV::csv #1{\expandafter\XINT_csv::_a\romannumeral`&&@#1,^,}% \def\XINT_csv::_a {\XINT_csv::_b {}}% -\def\XINT_csv::_b #1#2,{\expandafter\XINT_csv::_c \romannumeral-`0#2,{#1}}% +\def\XINT_csv::_b #1#2,{\expandafter\XINT_csv::_c \romannumeral`&&@#2,{#1}}% \def\XINT_csv::_c #1{\if ^#1\expandafter\XINT_::_end\fi\XINT_csv::_d #1}% \def\XINT_csv::_d #1,#2{\XINT_csv::_b {#2, #1}}% possibly, item #1 is empty. % \end{macrocode} @@ -26851,13 +27079,13 @@ $1$ or $-1$. % Same added \romannumeral-`0 in 1.1a for \xintNewExpr purposes.| % \begin{macrocode} \def\xintSPRaw {\romannumeral0\xintspraw }% -\def\xintspraw #1{\expandafter\XINT_spraw\romannumeral-`0#1[\W]}% +\def\xintspraw #1{\expandafter\XINT_spraw\romannumeral`&&@#1[\W]}% \def\XINT_spraw #1[#2#3]{\xint_gob_til_W #2\XINT_spraw_a\W\XINT_spraw_p #1[#2#3]}% \def\XINT_spraw_a\W\XINT_spraw_p #1[\W]{ #1}% \def\XINT_spraw_p #1[\W]{\xintpraw {#1}}% -\def\xintSPRaw::csv #1{\romannumeral0\expandafter\XINT_spraw::_a\romannumeral-`0#1,^,}% +\def\xintSPRaw::csv #1{\romannumeral0\expandafter\XINT_spraw::_a\romannumeral`&&@#1,^,}% \def\XINT_spraw::_a {\XINT_spraw::_b {}}% -\def\XINT_spraw::_b #1#2,{\expandafter\XINT_spraw::_c \romannumeral-`0#2,{#1}}% +\def\XINT_spraw::_b #1#2,{\expandafter\XINT_spraw::_c \romannumeral`&&@#2,{#1}}% \def\XINT_spraw::_c #1{\if ,#1\xint_dothis\XINT_spraw::_e\fi \if ^#1\xint_dothis\XINT_::_end\fi \xint_orthat\XINT_spraw::_d #1}% @@ -26866,9 +27094,9 @@ $1$ or $-1$. % \end{macrocode} % \subsubsection{\csh{xintIsTrue::csv}} % \begin{macrocode} -\def\xintIsTrue::csv #1{\romannumeral0\expandafter\XINT_istrue::_a\romannumeral-`0#1,^,}% +\def\xintIsTrue::csv #1{\romannumeral0\expandafter\XINT_istrue::_a\romannumeral`&&@#1,^,}% \def\XINT_istrue::_a {\XINT_istrue::_b {}}% -\def\XINT_istrue::_b #1#2,{\expandafter\XINT_istrue::_c \romannumeral-`0#2,{#1}}% +\def\XINT_istrue::_b #1#2,{\expandafter\XINT_istrue::_c \romannumeral`&&@#2,{#1}}% \def\XINT_istrue::_c #1{\if ,#1\xint_dothis\XINT_istrue::_e\fi \if ^#1\xint_dothis\XINT_::_end\fi \xint_orthat\XINT_istrue::_d #1}% @@ -26883,8 +27111,8 @@ $1$ or $-1$. % \begin{macrocode} \def\XINT_:::_end #1,#2#3{\xint_gobble_i #3}% \def\xintRound::csv #1#2{\romannumeral0\expandafter\XINT_round::_b\expandafter - {\the\numexpr#1\expandafter}\expandafter{\expandafter}\romannumeral-`0#2,^,}% -\def\XINT_round::_b #1#2#3,{\expandafter\XINT_round::_c \romannumeral-`0#3,{#1}{#2}}% + {\the\numexpr#1\expandafter}\expandafter{\expandafter}\romannumeral`&&@#2,^,}% +\def\XINT_round::_b #1#2#3,{\expandafter\XINT_round::_c \romannumeral`&&@#3,{#1}{#2}}% \def\XINT_round::_c #1{\if ,#1\xint_dothis\XINT_round::_e\fi \if ^#1\xint_dothis\XINT_:::_end\fi \xint_orthat\XINT_round::_d #1}% @@ -26905,7 +27133,7 @@ $1$ or $-1$. %| % \begin{macrocode} \def\XINTinFloat::csv #1#2{\romannumeral0\expandafter\XINT_infloat::_b\expandafter - {\the\numexpr #1\expandafter}\expandafter{\expandafter}\romannumeral-`0#2,^,}% + {\the\numexpr #1\expandafter}\expandafter{\expandafter}\romannumeral`&&@#2,^,}% \def\XINT_infloat::_b #1#2#3,{\XINT_infloat::_c #3,{#1}{#2}}% \def\XINT_infloat::_c #1{\if ,#1\xint_dothis\XINT_infloat::_e\fi \if ^#1\xint_dothis\XINT_:::_end\fi @@ -26919,8 +27147,8 @@ $1$ or $-1$. % \XINTinFloat::csv. Donc c'est cette routine qui imprime. Utilise \XINT_:::_end| % \begin{macrocode} \def\xintPFloat::csv #1#2{\romannumeral0\expandafter\XINT_pfloat::_b\expandafter - {\the\numexpr #1\expandafter}\expandafter{\expandafter}\romannumeral-`0#2,^,}% -\def\XINT_pfloat::_b #1#2#3,{\expandafter\XINT_pfloat::_c \romannumeral-`0#3,{#1}{#2}}% + {\the\numexpr #1\expandafter}\expandafter{\expandafter}\romannumeral`&&@#2,^,}% +\def\XINT_pfloat::_b #1#2#3,{\expandafter\XINT_pfloat::_c \romannumeral`&&@#3,{#1}{#2}}% \def\XINT_pfloat::_c #1{\if ,#1\xint_dothis\XINT_pfloat::_e\fi \if ^#1\xint_dothis\XINT_:::_end\fi \xint_orthat\XINT_pfloat::_d #1}% @@ -26935,7 +27163,7 @@ $1$ or $-1$. % \begin{macrocode} \def\XINT_expr_getnext #1% {% - \expandafter\XINT_expr_getnext_a\romannumeral-`0#1% + \expandafter\XINT_expr_getnext_a\romannumeral`&&@#1% }% \def\XINT_expr_getnext_a #1% {% screens out sub-expressions and \count or \dimen registers/variables @@ -27028,13 +27256,13 @@ $1$ or $-1$. }% \def\XINT_expr_scanint_a #1#2% {\expandafter\XINT_expr_getop\csname.=#1% - \expandafter\XINT_expr_scanint_b\romannumeral-`0#2}% + \expandafter\XINT_expr_scanint_b\romannumeral`&&@#2}% \def\XINT_expr_gobz_a #1% {\expandafter\XINT_expr_getop\csname.=% - \expandafter\XINT_expr_gobz_scanint_b\romannumeral-`0#1}% + \expandafter\XINT_expr_gobz_scanint_b\romannumeral`&&@#1}% \def\XINT_expr_startdec #1% {\expandafter\XINT_expr_getop\csname.=% - \expandafter\XINT_expr_scandec_a\romannumeral-`0#1}% + \expandafter\XINT_expr_scandec_a\romannumeral`&&@#1}% % \end{macrocode} % \subsubsection{Integral part (skipping zeroes)} % \lverb|Sub-expressions are recognized as startaing with catcode 11 @@ -27053,7 +27281,7 @@ $1$ or $-1$. }% \def\XINT_expr_scanint_d #1% {% - \expandafter\XINT_expr_scanint_b\romannumeral-`0#1% + \expandafter\XINT_expr_scanint_b\romannumeral`&&@#1% }% \def\XINT_expr_scanint_endbycs#1#2\XINT_expr_scanint_d{\endcsname #1}% \def\XINT_expr_scanint_c\string #1\XINT_expr_scanint_d @@ -27066,7 +27294,7 @@ $1$ or $-1$. }% \def\XINT_expr_startdec_a .#1% {% - \expandafter\XINT_expr_scandec_a\romannumeral-`0#1% + \expandafter\XINT_expr_scandec_a\romannumeral`&&@#1% }% \def\XINT_expr_scandec_a #1% {% @@ -27091,11 +27319,11 @@ $1$ or $-1$. }% \def\XINT_expr_gobz_scanint_d #1% {% - \expandafter\XINT_expr_gobz_scanint_b\romannumeral-`0#1% + \expandafter\XINT_expr_gobz_scanint_b\romannumeral`&&@#1% }% \def\XINT_expr_gobz_startdec_a .#1% {% - \expandafter\XINT_expr_gobz_scandec_a\romannumeral-`0#1% + \expandafter\XINT_expr_gobz_scandec_a\romannumeral`&&@#1% }% \def\XINT_expr_gobz_scandec_a #1% {% @@ -27104,7 +27332,13 @@ $1$ or $-1$. }% % \end{macrocode} % \subsubsection{Fractional part} -% \lverb|Annoying duplication of code to allow 0. as input.| +% \lverb|Annoying duplication of code to allow 0. as input. +% +% 1.2a corrects a very bad bug in 1.2 \XINT_expr_gobz_scandec_b which should +% have stripped leading zeroes in the fractional part but didn't; as a result +% \xinttheexpr 0.01\relax returned 0 =:-((( Thanks to Kroum Tzanev who +% reported the issue. Does it improve things if I say the bug was introduced +% in 1.2, it wasn't present before ?| % \begin{macrocode} \def\XINT_expr_scandec_b #1.#2% {% @@ -27117,7 +27351,7 @@ $1$ or $-1$. \def\XINT_expr_scandec_d #1.#2% {% \expandafter\XINT_expr_scandec_b - \the\numexpr #1\expandafter.\romannumeral-`0#2% + \the\numexpr #1\expandafter.\romannumeral`&&@#2% }% \def\XINT_expr_scandec_c\string #1#2\the\numexpr#3-\xint_c_i.% {% @@ -27126,14 +27360,25 @@ $1$ or $-1$. \ifcat a#1\xint_dothis{[#3]\endcsname *#1}\fi \xint_orthat {[#3]\expandafter\endcsname \string#1}% }% -\def\XINT_expr_gobz_scandec_b 0.#1% +% \end{macrocode} +% \lverb|For bugfix release 1.2a, I only need code that works, I will think +% another day about making it perhaps more elegant/efficient.| +% \begin{macrocode} +\def\XINT_expr_gobz_scandec_b #1.#2% {% - \ifcat \relax #1\expandafter\XINT_expr_gobz_scandec_endbycs\expandafter#1\fi - \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_gobz_scandec_c\fi - \string#1\expandafter\XINT_expr_scandec_d\the\numexpr\xint_c_mone.% + \ifcat \relax #2\expandafter\XINT_expr_gobz_scandec_endbycs\expandafter#2\fi + \ifnum\xint_c_ix<1\string#2 \else\expandafter\XINT_expr_gobz_scandec_c\fi + \if0#2\expandafter\xint_firstoftwo\else\expandafter\xint_secondoftwo\fi + {\expandafter\XINT_expr_gobz_scandec_b}% + {\string#2\expandafter\XINT_expr_scandec_d}\the\numexpr#1-\xint_c_i.% }% -\def\XINT_expr_gobz_scandec_endbycs #1#2\xint_c_mone.{0[0]\endcsname #1}% -\def\XINT_expr_gobz_scandec_c\string #1#2\xint_c_mone.% +% \end{macrocode} +% \lverb|Even if number is zero leave a trace in [..] of its formation ? for +% code tracing purposes ? Finally no. But in case of exponential part, yes as +% I don't want to write extra code just to handle that case.| +% \begin{macrocode} +\def\XINT_expr_gobz_scandec_endbycs #1#2\xint_c_i.{0[0]\endcsname #1}% +\def\XINT_expr_gobz_scandec_c\if0#1#2\fi #3\xint_c_i.% {% \if e#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi \if E#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi @@ -27147,7 +27392,7 @@ $1$ or $-1$. % \begin{macrocode} \def\XINT_expr_scanexp_a #1#2% {% - #1\expandafter\XINT_expr_scanexp_b\romannumeral-`0#2% + #1\expandafter\XINT_expr_scanexp_b\romannumeral`&&@#2% }% \def\XINT_expr_scanexp_b #1% {% @@ -27158,7 +27403,7 @@ $1$ or $-1$. \def\XINT_expr_scanexpr_endbycs#1#2\XINT_expr_scanexp_d {]\endcsname #1}% \def\XINT_expr_scanexp_d #1% {% - \expandafter\XINT_expr_scanexp_bb\romannumeral-`0#1% + \expandafter\XINT_expr_scanexp_bb\romannumeral`&&@#1% }% \def\XINT_expr_scanexp_c\string #1\XINT_expr_scanexp_d {% @@ -27176,7 +27421,7 @@ $1$ or $-1$. \def\XINT_expr_scanexp_endbycs_b#1#2\XINT_expr_scanexp_db {]\endcsname #1}% \def\XINT_expr_scanexp_db #1% {% - \expandafter\XINT_expr_scanexp_bb\romannumeral-`0#1% + \expandafter\XINT_expr_scanexp_bb\romannumeral`&&@#1% }% \def\XINT_expr_scanexp_cb\string #1\XINT_expr_scanexp_db {% @@ -27218,12 +27463,12 @@ $1$ or $-1$. }% \def\XINT_expr_scanhexI_b #1#2% {% - #1\expandafter\XINT_expr_scanhexI_a\romannumeral-`0#2% + #1\expandafter\XINT_expr_scanhexI_a\romannumeral`&&@#2% }% \def\XINT_expr_scanhex_transition .#1% {% \expandafter.\expandafter.\expandafter - \XINT_expr_scanhexII_a\romannumeral-`0#1% + \XINT_expr_scanhexII_a\romannumeral`&&@#1% }% \def\XINT_expr_scanhexII_a #1% {% @@ -27246,18 +27491,18 @@ $1$ or $-1$. }% \def\XINT_expr_scanhexII_b #1#2% {% - #1\expandafter\XINT_expr_scanhexII_a\romannumeral-`0#2% + #1\expandafter\XINT_expr_scanhexII_a\romannumeral`&&@#2% }% % \end{macrocode} % \subsubsection{Function and variable names} % \begin{macrocode} \def\XINT_expr_scanfunc {% - \expandafter\XINT_expr_func\romannumeral-`0\XINT_expr_scanfunc_a + \expandafter\XINT_expr_func\romannumeral`&&@\XINT_expr_scanfunc_a }% \def\XINT_expr_scanfunc_a #1#2% {% - \expandafter #1\romannumeral-`0\expandafter\XINT_expr_scanfunc_b\romannumeral-`0#2% + \expandafter #1\romannumeral`&&@\expandafter\XINT_expr_scanfunc_b\romannumeral`&&@#2% }% \def\XINT_expr_scanfunc_b #1% {% @@ -27285,7 +27530,7 @@ $1$ or $-1$. % \begin{macrocode} \def\XINT_expr_getop #1#2% this #1 is the current locked computed value {% - \expandafter\XINT_expr_getop_a\expandafter #1\romannumeral-`0#2% + \expandafter\XINT_expr_getop_a\expandafter #1\romannumeral`&&@#2% }% \catcode`* 11 \def\XINT_expr_getop_a #1#2% @@ -27318,7 +27563,7 @@ $1$ or $-1$. \def\XINT_expr_binopwrd #1#2'{\expandafter\XINT_expr_foundop_a \csname XINT_expr_itself_\xint_zapspaces #2 \xint_gobble_i\endcsname #1}% \def\XINT_expr_scanop_a #1#2#3% - {\expandafter\XINT_expr_scanop_b\expandafter #1\expandafter #2\romannumeral-`0#3}% + {\expandafter\XINT_expr_scanop_b\expandafter #1\expandafter #2\romannumeral`&&@#3}% \def\XINT_expr_scanop_b #1#2#3% {% \ifcat#3\relax\xint_dothis{\XINT_expr_foundop_a #1#2#3}\fi @@ -27329,7 +27574,7 @@ $1$ or $-1$. }% \def\XINT_expr_scanop_c #1#2#3% {% - \expandafter\XINT_expr_scanop_d\expandafter #1\expandafter #2\romannumeral-`0#3% + \expandafter\XINT_expr_scanop_d\expandafter #1\expandafter #2\romannumeral`&&@#3% }% \def\XINT_expr_scanop_d #1#2#3% {% @@ -27360,7 +27605,7 @@ $1$ or $-1$. \def#1##1% {% \xint_UDsignfork - ##1{\expandafter#1\romannumeral-`0#3}% + ##1{\expandafter#1\romannumeral`&&@#3}% -{#2##1}% \krof }% @@ -27368,12 +27613,12 @@ $1$ or $-1$. {% \ifcase ##1\xint_afterfi {\ifx\XINT_expr_itself_^C ##2\xint_dothis - {\expandafter#1\romannumeral-`0\expandafter\XINT_expr_getnext\xint_gobble_i}\fi + {\expandafter#1\romannumeral`&&@\expandafter\XINT_expr_getnext\xint_gobble_i}\fi \xint_orthat \XINT_expr_done }% \or\xint_afterfi{\XINT_expr_extra_) - \expandafter #1\romannumeral-`0\XINT_expr_getop }% + \expandafter #1\romannumeral`&&@\XINT_expr_getop }% \else - \xint_afterfi{\expandafter#1\romannumeral-`0\csname XINT_#4_op_##2\endcsname }% + \xint_afterfi{\expandafter#1\romannumeral`&&@\csname XINT_#4_op_##2\endcsname }% \fi }% }% @@ -27387,10 +27632,10 @@ $1$ or $-1$. }% \def\XINT_tmpa #1#2#3#4#5#6% {% - \def #1##1{\expandafter #3\romannumeral-`0\XINT_expr_getnext }% - \def #2{\expandafter #3\romannumeral-`0\XINT_expr_getnext }% + \def #1##1{\expandafter #3\romannumeral`&&@\XINT_expr_getnext }% + \def #2{\expandafter #3\romannumeral`&&@\XINT_expr_getnext }% \def #3##1{\xint_UDsignfork - ##1{\expandafter #3\romannumeral-`0#5}% + ##1{\expandafter #3\romannumeral`&&@#5}% -{#4##1}% \krof }% \def #4##1##2{\ifcase ##1% @@ -27398,7 +27643,7 @@ $1$ or $-1$. \xint_orthat\XINT_expr_missing_) }% \or \csname XINT_#6_op_##2\expandafter\endcsname \else - \xint_afterfi{\expandafter #3\romannumeral-`0\csname XINT_#6_op_##2\endcsname }% + \xint_afterfi{\expandafter #3\romannumeral`&&@\csname XINT_#6_op_##2\endcsname }% \fi }% }% @@ -27434,10 +27679,12 @@ $1$ or $-1$. % \subsection{\textbar, \textbar\textbar, \&, % \&\&, <, >, =, ==, <=, >=, !=, +, \textendash, \texorpdfstring{\protect\lowast}{*}, /, \textasciicircum, \texorpdfstring{\protect\lowast\protect\lowast}{**}, //, /:, .., ..[, ].., ][, ][:, :], \textasciicircum C, and ++ operators} % \begin{macrocode} +\catcode`& 12 \xintFor* #1 in {{==}{<=}{>=}{!=}{&&}{||}{**}{//}{/:}{..}{..[}{].}{]..}% {+[}{-[}{*[}{/[}{**[}{^[}{a+}{a-}{a*}{a/}{a**}{a^}% {][}{][:}{:]}{^C}{++}{++)}} \do {\expandafter\def\csname XINT_expr_itself_#1\endcsname {#1}}% +\catcode`& 7 % \end{macrocode} % \subsubsection{The \textbar, % \&, xor, <, >, =, <=, >=, !=, //, /:, .., ..[, and ].. operators} @@ -27447,15 +27694,15 @@ $1$ or $-1$. \def #1##1% \XINT_expr_op_ ou flexpr ou iiexpr {% keep value, get next number and operator, then do until \expandafter #2\expandafter ##1% - \romannumeral-`0\expandafter\XINT_expr_getnext }% + \romannumeral`&&@\expandafter\XINT_expr_getnext }% \def #2##1##2% \XINT_expr_until__a ou flexpr ou iiexpr - {\xint_UDsignfork ##2{\expandafter #2\expandafter ##1\romannumeral-`0#4}% + {\xint_UDsignfork ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}% -{#3##1##2}% \krof }% \def #3##1##2##3##4% \XINT_expr_until__b ou flexpr ou iiexpr {% either execute next operation now, or first do next (possibly unary) \ifnum ##2>#5% - \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral-`0% + \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@% \csname XINT_#8_op_##3\endcsname {##4}}% \else \xint_afterfi {\expandafter ##2\expandafter ##3% \csname .=#6{\XINT_expr_unlock ##1}{\XINT_expr_unlock ##4}\endcsname }% @@ -27473,6 +27720,7 @@ $1$ or $-1$. \csname #2#6\expandafter\endcsname \csname XINT_expr_precedence_#3\endcsname {#1}% }% +\catcode`& 12 \xintFor #1 in {expr, flexpr} \do {% \def\XINT_tmpa ##1{\XINT_tmpb {#1}{xint}##1}% \xintApplyInline {\XINT_tmpa }{% @@ -27490,6 +27738,7 @@ $1$ or $-1$. {{/:}{vii}{vii}{Mod}}% }% }% +\catcode`& 7 \def\XINT_tmpa #1{\XINT_tmpb {expr}{xint}#1}% \xintApplyInline {\XINT_tmpa }{% {+{vi}{vi}{Add}}% @@ -27511,6 +27760,7 @@ $1$ or $-1$. {{]..}{iii}{vi}{SeqB::csv}}% }% \def\XINT_tmpa #1{\XINT_tmpb {iiexpr}{xint}#1}% +\catcode`& 12 \xintApplyInline {\XINT_tmpa }{% {|{iii}{vi}{OR}}% {&{iv}{vi}{AND}}% @@ -27532,13 +27782,14 @@ $1$ or $-1$. {{//}{vii}{vii}{iiDivTrunc}}% {{/:}{vii}{vii}{iiMod}}% }% +\catcode`& 7 % \end{macrocode} % \subsubsection{The ]+, ]\textendash, ]\texorpdfstring{\protect\lowast}{*}, ]/, ]\textasciicircum, +[, \textendash[, \texorpdfstring{\protect\lowast}{*}[, /[, and \textasciicircum[ list % operators} % \paragraph{\csh{XINT_expr_binop_inline_b}}\par % \begin{macrocode} \def\XINT_expr_binop_inline_a - {\expandafter\xint_gobble_i\romannumeral-`0\XINT_expr_binop_inline_b }% + {\expandafter\xint_gobble_i\romannumeral`&&@\XINT_expr_binop_inline_b }% \def\XINT_expr_binop_inline_b #1#2,{\XINT_expr_binop_inline_c #2,{#1}}% \def\XINT_expr_binop_inline_c #1{% \if ,#1\xint_dothis\XINT_expr_binop_inline_e\fi @@ -27552,22 +27803,22 @@ $1$ or $-1$. \def #1##1% \XINT_expr_op_ ou flexpr ou iiexpr {% keep value, get next number and operator, then do until \expandafter #2\expandafter ##1% - \romannumeral-`0\expandafter\XINT_expr_getnext }% + \romannumeral`&&@\expandafter\XINT_expr_getnext }% \def #2##1##2% \XINT_expr_until__a ou flexpr ou iiexpr - {\xint_UDsignfork ##2{\expandafter #2\expandafter ##1\romannumeral-`0#4}% + {\xint_UDsignfork ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}% -{#3##1##2}% \krof }% \def #3##1##2##3##4% \XINT_expr_until__b ou flexpr ou iiexpr {% either execute next operation now, or first do next (possibly unary) \ifnum ##2>#5% - \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral-`0% + \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@% \csname XINT_#8_op_##3\endcsname {##4}}% \else \xint_afterfi {\expandafter ##2\expandafter ##3% \csname .=\expandafter\XINT_expr_binop_inline_a\expandafter {\expandafter\expandafter\expandafter#6\expandafter \xint_exchangetwo_keepbraces\expandafter {\expandafter\XINT_expr_unlock\expandafter ##4\expandafter}\expandafter}% - \romannumeral-`0\XINT_expr_unlock ##1,^,\endcsname }% + \romannumeral`&&@\XINT_expr_unlock ##1,^,\endcsname }% \fi }% \let #7#5% }% @@ -27601,18 +27852,18 @@ $1$ or $-1$. }% \def\XINT_tmpc #1#2#3#4#5#6#7% {% - \def #1##1{\expandafter#2\expandafter##1\romannumeral-`0% - \expandafter #3\romannumeral-`0\XINT_expr_getnext }% + \def #1##1{\expandafter#2\expandafter##1\romannumeral`&&@% + \expandafter #3\romannumeral`&&@\XINT_expr_getnext }% \def #2##1##2##3##4% {% either execute next operation now, or first do next (possibly unary) \ifnum ##2>#4% - \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral-`0% + \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@% \csname XINT_#7_op_##3\endcsname {##4}}% \else \xint_afterfi {\expandafter ##2\expandafter ##3% \csname .=\expandafter\XINT_expr_binop_inline_a\expandafter {\expandafter#5\expandafter {\expandafter\XINT_expr_unlock\expandafter ##1\expandafter}\expandafter}% - \romannumeral-`0\XINT_expr_unlock ##4,^,\endcsname }% + \romannumeral`&&@\XINT_expr_unlock ##4,^,\endcsname }% \fi }% \let #6#4% }% @@ -27651,14 +27902,14 @@ $1$ or $-1$. \xintFor #1 in {and,or,xor,mod} \do {% \expandafter\def\csname XINT_expr_itself_#1\endcsname {#1}}% \expandafter\let\csname XINT_expr_precedence_and\expandafter\endcsname - \csname XINT_expr_precedence_&\endcsname + \csname XINT_expr_precedence_\string&\endcsname \expandafter\let\csname XINT_expr_precedence_or\expandafter\endcsname \csname XINT_expr_precedence_|\endcsname \expandafter\let\csname XINT_expr_precedence_mod\expandafter\endcsname \csname XINT_expr_precedence_/:\endcsname \xintFor #1 in {expr, flexpr, iiexpr} \do {% \expandafter\let\csname XINT_#1_op_and\expandafter\endcsname - \csname XINT_#1_op_&\endcsname + \csname XINT_#1_op_\string&\endcsname \expandafter\let\csname XINT_#1_op_or\expandafter\endcsname \csname XINT_#1_op_|\endcsname \expandafter\let\csname XINT_#1_op_mod\expandafter\endcsname @@ -27671,8 +27922,8 @@ $1$ or $-1$. % \begin{macrocode} \expandafter\let\csname XINT_expr_precedence_==\expandafter\endcsname \csname XINT_expr_precedence_=\endcsname -\expandafter\let\csname XINT_expr_precedence_&&\expandafter\endcsname - \csname XINT_expr_precedence_&\endcsname +\expandafter\let\csname XINT_expr_precedence_\string&\string&\expandafter\endcsname + \csname XINT_expr_precedence_\string&\endcsname \expandafter\let\csname XINT_expr_precedence_||\expandafter\endcsname \csname XINT_expr_precedence_|\endcsname \expandafter\let\csname XINT_expr_precedence_**\expandafter\endcsname @@ -27684,8 +27935,8 @@ $1$ or $-1$. \xintFor #1 in {expr, flexpr, iiexpr} \do {% \expandafter\let\csname XINT_#1_op_==\expandafter\endcsname \csname XINT_#1_op_=\endcsname - \expandafter\let\csname XINT_#1_op_&&\expandafter\endcsname - \csname XINT_#1_op_&\endcsname + \expandafter\let\csname XINT_#1_op_\string&\string&\expandafter\endcsname + \csname XINT_#1_op_\string&\endcsname \expandafter\let\csname XINT_#1_op_||\expandafter\endcsname \csname XINT_#1_op_|\endcsname \expandafter\let\csname XINT_#1_op_**\expandafter\endcsname @@ -27711,22 +27962,22 @@ $1$ or $-1$. {% \def #1##1% \XINT_expr_op_][ {% - \expandafter #2\expandafter ##1\romannumeral-`0\XINT_expr_getnext + \expandafter #2\expandafter ##1\romannumeral`&&@\XINT_expr_getnext }% \def #2##1##2% \XINT_expr_until_][_a {\xint_UDsignfork - ##2{\expandafter #2\expandafter ##1\romannumeral-`0#4}% + ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}% -{#3##1##2}% \krof }% \def #3##1##2##3##4% \XINT_expr_until_][_b {% \ifnum ##2>\xint_c_ii - \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral-`0% + \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@% \csname XINT_#6_op_##3\endcsname {##4}}% \else \xint_afterfi {\expandafter ##2\expandafter ##3\csname - .=\expandafter\xintListSel:csv \romannumeral-`0\XINT_expr_unlock ##4;% + .=\expandafter\xintListSel:csv \romannumeral`&&@\XINT_expr_unlock ##4;% \XINT_expr_unlock ##1;\endcsname % unlock for \xintNewExpr }% \fi @@ -27745,17 +27996,17 @@ $1$ or $-1$. {% \def #1##1% \XINT_expr_op_: {% - \expandafter #2\expandafter ##1\romannumeral-`0\XINT_expr_getnext + \expandafter #2\expandafter ##1\romannumeral`&&@\XINT_expr_getnext }% \def #2##1##2% \XINT_expr_until_:_a {\xint_UDsignfork - ##2{\expandafter #2\expandafter ##1\romannumeral-`0#4}% + ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}% -{#3##1##2}% \krof }% \def #3##1##2##3##4% \XINT_expr_until_:_b {% \ifnum ##2>\xint_c_iii - \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral-`0% + \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@% \csname XINT_#6_op_##3\endcsname {##4}}% \else \xint_afterfi @@ -27794,7 +28045,7 @@ $1$ or $-1$. \let\XINT_iiexpr_op_][: \XINT_expr_op_][: \catcode`[ 12 \catcode`] 12 \def\xintListSel:csv #1{% - \if ]\noexpand#1\xint_dothis{\expandafter\XINT_listsel:_s\romannumeral-`0}\fi + \if ]\noexpand#1\xint_dothis{\expandafter\XINT_listsel:_s\romannumeral`&&@}\fi \if :\noexpand#1\xint_dothis{\XINT_listsel:_:}\fi \xint_orthat {\XINT_listsel:_nth #1}% }% @@ -27933,8 +28184,8 @@ $1$ or $-1$. \def\XINT_seqa::csv #1#2{\expandafter\XINT_seqa::csv_a \romannumeral0\xintraw {#2};#1;}% \def\xintiiSeqA::csv #1#2{\XINT_iiseqa::csv #1#2}% \def\XINT_iiseqa::csv #1#2#3#4{\expandafter\XINT_seqa::csv_a - \romannumeral-`0\expandafter \XINT_expr_unlock\expandafter#4% - \expandafter;\romannumeral-`0\XINT_expr_unlock #2;}% + \romannumeral`&&@\expandafter \XINT_expr_unlock\expandafter#4% + \expandafter;\romannumeral`&&@\XINT_expr_unlock #2;}% \def\XINTinFloatSeqA::csv #1{\expandafter\XINT_flseqa::csv\expandafter {\romannumeral0\XINTinfloat [\XINTdigits]{#1}}}% \def\XINT_flseqa::csv #1#2% @@ -27949,7 +28200,7 @@ $1$ or $-1$. % \begin{macrocode} \def\xintSeqB::csv #1#2% {\expandafter\XINT_seqb::csv \expandafter{\romannumeral0\xintraw{#2}}{#1}}% -\def\XINT_seqb::csv #1#2{\expandafter\XINT_seqb::csv_a\romannumeral-`0#2#1!}% +\def\XINT_seqb::csv #1#2{\expandafter\XINT_seqb::csv_a\romannumeral`&&@#2#1!}% \def\XINT_seqb::csv_a #1#2;#3;#4!{\expandafter\XINT_expr_seq_empty? \romannumeral0\csname XINT_seqb::csv_#1\endcsname {#3}{#4}{#2}}% \def\XINT_seqb::csv_p #1#2#3% @@ -27975,10 +28226,10 @@ $1$ or $-1$. \def\xintiiSeqB::csv #1#2{\XINT_iiseqb::csv #1#2}% \def\XINT_iiseqb::csv #1#2#3#4% {\expandafter\XINT_iiseqb::csv_a - \romannumeral-`0\expandafter \XINT_expr_unlock\expandafter#2% - \romannumeral-`0\XINT_expr_unlock #4!}% + \romannumeral`&&@\expandafter \XINT_expr_unlock\expandafter#2% + \romannumeral`&&@\XINT_expr_unlock #4!}% \def\XINT_iiseqb::csv_a #1#2;#3;#4!{\expandafter\XINT_expr_seq_empty? - \romannumeral-`0\csname XINT_iiseqb::csv_#1\endcsname {#3}{#4}{#2}}% + \romannumeral`&&@\csname XINT_iiseqb::csv_#1\endcsname {#3}{#4}{#2}}% \def\XINT_iiseqb::csv_p #1#2#3% {% \xintSgnFork{\XINT_Cmp {#1}{#2}}{,#1\expandafter\XINT_iiseqb::csv_p\expandafter}% @@ -27997,9 +28248,9 @@ $1$ or $-1$. % \begin{macrocode} \def\XINTinFloatSeqB::csv #1#2{\expandafter\XINT_flseqb::csv \expandafter {\romannumeral0\XINTinfloat [\XINTdigits]{#2}}{#1}}% -\def\XINT_flseqb::csv #1#2{\expandafter\XINT_flseqb::csv_a\romannumeral-`0#2#1!}% +\def\XINT_flseqb::csv #1#2{\expandafter\XINT_flseqb::csv_a\romannumeral`&&@#2#1!}% \def\XINT_flseqb::csv_a #1#2;#3;#4!{\expandafter\XINT_expr_seq_empty? - \romannumeral-`0\csname XINT_flseqb::csv_#1\endcsname {#3}{#4}{#2}}% + \romannumeral`&&@\csname XINT_flseqb::csv_#1\endcsname {#3}{#4}{#2}}% \def\XINT_flseqb::csv_p #1#2#3% {% \xintifCmp {#1}{#2}{,#1\expandafter\XINT_flseqb::csv_p\expandafter}% @@ -28021,17 +28272,17 @@ $1$ or $-1$. {% \def #1##1% \XINT_expr_op_, {% - \expandafter #2\expandafter ##1\romannumeral-`0\XINT_expr_getnext + \expandafter #2\expandafter ##1\romannumeral`&&@\XINT_expr_getnext }% \def #2##1##2% \XINT_expr_until_,_a {\xint_UDsignfork - ##2{\expandafter #2\expandafter ##1\romannumeral-`0#4}% + ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}% -{#3##1##2}% \krof }% \def #3##1##2##3##4% \XINT_expr_until_,_b {% \ifnum ##2>\xint_c_ii - \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral-`0% + \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@% \csname XINT_#6_op_##3\endcsname {##4}}% \else \xint_afterfi @@ -28064,17 +28315,17 @@ $1$ or $-1$. {% \def #1% \XINT_expr_op_- {% get next number+operator then switch to _until macro - \expandafter #2\romannumeral-`0\XINT_expr_getnext + \expandafter #2\romannumeral`&&@\XINT_expr_getnext }% \def #2##1% \XINT_expr_until_-_a {\xint_UDsignfork - ##1{\expandafter #2\romannumeral-`0#1}% + ##1{\expandafter #2\romannumeral`&&@#1}% -{#3##1}% \krof }% \def #3##1##2##3% \XINT_expr_until_-_b {% _until tests precedence level with next op, executes now or postpones \ifnum ##1>#4% - \xint_afterfi {\expandafter #2\romannumeral-`0% + \xint_afterfi {\expandafter #2\romannumeral`&&@% \csname XINT_#5_op_##2\endcsname {##3}}% \else \xint_afterfi {\expandafter ##1\expandafter ##2% @@ -28260,9 +28511,9 @@ $1$ or $-1$. \xint_dothis{\csname XINT_expr_onlitteral_##1\endcsname}\fi \ifcsname XINT_#3_func_##1\endcsname \xint_dothis{\expandafter\expandafter - \csname XINT_#3_func_##1\endcsname\romannumeral-`0#2}\fi + \csname XINT_#3_func_##1\endcsname\romannumeral`&&@#2}\fi \xint_orthat{\XINT_expr_unknown_function {##1}% - \expandafter\XINT_expr_func_unknown\romannumeral-`0#2}% + \expandafter\XINT_expr_func_unknown\romannumeral`&&@#2}% }% }% \def\XINT_expr_unknown_function #1{\xintError:removed \xint_gobble_i {#1}}% @@ -28288,7 +28539,7 @@ $1$ or $-1$. \def\XINT_expr_func_unknown #1#2#3% {\expandafter #1\expandafter #2\csname .=0\endcsname }% \def\XINT_expr_func_break #1#2#3% - {\expandafter #1\expandafter #2\csname.=?\romannumeral-`0\XINT_expr_unlock #3\endcsname }% + {\expandafter #1\expandafter #2\csname.=?\romannumeral`&&@\XINT_expr_unlock #3\endcsname }% \let\XINT_flexpr_func_break \XINT_expr_func_break \let\XINT_iiexpr_func_break \XINT_expr_func_break % \end{macrocode} @@ -28330,7 +28581,7 @@ $1$ or $-1$. % \subsubsection{\csh{XINT_expr_onlitteral_seq}} % \begin{macrocode} \def\XINT_expr_onlitteral_seq - {\expandafter\XINT_expr_onlitteral_seq_f\romannumeral-`0\XINT_expr_onlitteral_seq_a {}}% + {\expandafter\XINT_expr_onlitteral_seq_f\romannumeral`&&@\XINT_expr_onlitteral_seq_a {}}% \def\XINT_expr_onlitteral_seq_f #1#2{\xint_c_xviii `{seqx}#2)\relax #1}% % \end{macrocode} % \subsubsection{\csh{XINT_expr_onlitteral_seq_a}} @@ -28400,7 +28651,7 @@ $1$ or $-1$. {% #3 is the Latin letter serving as dummy variable, #4 is the expression to evaluate \expandafter \XINT_expr_getop \csname .=\expandafter\XINT_expr_seq:_aa - \romannumeral-`0\XINT_expr_unlock #2!{#1#4\relax !#3},^,\endcsname + \romannumeral`&&@\XINT_expr_unlock #2!{#1#4\relax !#3},^,\endcsname }% \def\XINT_expr_seq:_aa #1{\if +#1\expandafter\XINT_expr_seq:_A\else \expandafter\XINT_expr_seq:_a\fi #1}% @@ -28419,7 +28670,7 @@ $1$ or $-1$. \if ^#1\xint_dothis\XINT_expr_seq:_end\fi \xint_orthat\XINT_expr_seq:_d #1}% \def\XINT_expr_seq:_d #1,#2{\expandafter\XINT_expr_seq:_e - \romannumeral-`0\expandafter\XINT_expr_unlock\romannumeral0#2{#1}{#2}}% + \romannumeral`&&@\expandafter\XINT_expr_unlock\romannumeral0#2{#1}{#2}}% \def\XINT_expr_seq:_e #1{\if #1^\xint_dothis\XINT_expr_seq:_abort\fi \if #1?\xint_dothis\XINT_expr_seq:_break\fi \if #1!\xint_dothis\XINT_expr_seq:_omit\fi @@ -28442,7 +28693,7 @@ $1$ or $-1$. \def\XINT_expr_seq:_A +#1!#2,^,% {\expandafter\XINT_expr_seq_empty?\romannumeral0\XINT_expr_seq:_D {#1}{#2}}% \def\XINT_expr_seq:_D #1#2{\expandafter\XINT_expr_seq:_E - \romannumeral-`0\expandafter\XINT_expr_unlock\romannumeral0#2{#1}{#2}}% + \romannumeral`&&@\expandafter\XINT_expr_unlock\romannumeral0#2{#1}{#2}}% \def\XINT_expr_seq:_E #1{\if #1^\xint_dothis\XINT_expr_seq:_Abort\fi \if #1?\xint_dothis\XINT_expr_seq:_Break\fi \if #1!\xint_dothis\XINT_expr_seq:_Omit\fi @@ -28458,10 +28709,10 @@ $1$ or $-1$. % \csh{XINT_expr_onlitteral_mul}} % \begin{macrocode} \def\XINT_expr_onlitteral_add - {\expandafter\XINT_expr_onlitteral_add_f\romannumeral-`0\XINT_expr_onlitteral_seq_a {}}% + {\expandafter\XINT_expr_onlitteral_add_f\romannumeral`&&@\XINT_expr_onlitteral_seq_a {}}% \def\XINT_expr_onlitteral_add_f #1#2{\xint_c_xviii `{opx}#2)\relax #1+}% \def\XINT_expr_onlitteral_mul - {\expandafter\XINT_expr_onlitteral_mul_f\romannumeral-`0\XINT_expr_onlitteral_seq_a {}}% + {\expandafter\XINT_expr_onlitteral_mul_f\romannumeral`&&@\XINT_expr_onlitteral_seq_a {}}% \def\XINT_expr_onlitteral_mul_f #1#2{\xint_c_xviii `{opx}#2)\relax #1*}% % \end{macrocode} % \subsubsection{\csh{XINT_expr_func_opx}, \csh{XINT_flexpr_func_opx}, @@ -28482,7 +28733,7 @@ $1$ or $-1$. {% \expandafter\XINT_expr_getop\romannumeral0\expandafter\XINT_expr_op:_a \csname XINT_expr_op:_#5\expandafter\endcsname - \romannumeral-`0\XINT_expr_unlock #2!#5#1#3{#4}% + \romannumeral`&&@\XINT_expr_unlock #2!#5#1#3{#4}% }% % \end{macrocode} % \subsubsection{\csh{XINT_expr_op:_a}, \dots} @@ -28512,7 +28763,7 @@ $1$ or $-1$. % \subsubsection{subs, \csh{XINT_expr_onlitteral_subs}} % \begin{macrocode} \def\XINT_expr_onlitteral_subs - {\expandafter\XINT_expr_onlitteral_subs_f\romannumeral-`0\XINT_expr_onlitteral_seq_a {}}% + {\expandafter\XINT_expr_onlitteral_subs_f\romannumeral`&&@\XINT_expr_onlitteral_seq_a {}}% \def\XINT_expr_onlitteral_subs_f #1#2{\xint_c_xviii `{subx}#2)\relax #1}% \def\XINT_expr_func_subx #1#2{\XINT_allexpr_subx \xintbareeval }% \def\XINT_flexpr_func_subx #1#2{\XINT_allexpr_subx \xintbarefloateval}% @@ -28521,7 +28772,7 @@ $1$ or $-1$. {% #3 is the dummy variable, #4 is the expression to evaluate \expandafter \XINT_expr_getop \csname .=\expandafter\XINT_expr_subx:_a - \romannumeral-`0\XINT_expr_unlock #2!{#1#4\relax !#3}\endcsname + \romannumeral`&&@\XINT_expr_unlock #2!{#1#4\relax !#3}\endcsname }% \def\XINT_expr_subx:_a #1!#2% {\expandafter\XINT_expr_subx:_end \romannumeral0#2{#1}}% @@ -28541,7 +28792,7 @@ $1$ or $-1$. \def\XINT_allexpr_rseq #1#2% {% \expandafter\XINT_expr_rseqx\expandafter #1\expandafter - #2\romannumeral-`0\XINT_expr_onlitteral_seq_a {}% + #2\romannumeral`&&@\XINT_expr_onlitteral_seq_a {}% }% % \end{macrocode} % \subsubsection{\csh{XINT_expr_rseqx}} @@ -28564,7 +28815,7 @@ $1$ or $-1$. \expandafter \XINT_expr_getop \csname .=\XINT_expr_unlock #2% \expandafter\XINT_expr_rseq:_aa - \romannumeral-`0\XINT_expr_unlock #1!{#5#4\relax !#3}#2,^,\endcsname + \romannumeral`&&@\XINT_expr_unlock #1!{#5#4\relax !#3}#2,^,\endcsname }% \def\XINT_expr_rseq:_aa #1{\if +#1\expandafter\XINT_expr_rseq:_A\else \expandafter\XINT_expr_rseq:_a\fi #1}% @@ -28577,7 +28828,7 @@ $1$ or $-1$. \if ^#1\xint_dothis\XINT_expr_rseq:_end\fi \xint_orthat\XINT_expr_rseq:_d #1}% \def\XINT_expr_rseq:_d #1,~#2#3{\expandafter\XINT_expr_rseq:_e - \romannumeral-`0\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2{#3}}% + \romannumeral`&&@\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2{#3}}% \def\XINT_expr_rseq:_e #1{% \if ^#1\xint_dothis\XINT_expr_rseq:_abort\fi \if ?#1\xint_dothis\XINT_expr_rseq:_break\fi @@ -28596,7 +28847,7 @@ $1$ or $-1$. % \begin{macrocode} \def\XINT_expr_rseq:_A +#1!#2#3,^,{\XINT_expr_rseq:_D {#1}#3{#2}}% \def\XINT_expr_rseq:_D #1#2#3{\expandafter\XINT_expr_rseq:_E - \romannumeral-`0\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2{#3}}% + \romannumeral`&&@\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2{#3}}% \def\XINT_expr_rseq:_E #1{\if #1^\xint_dothis\XINT_expr_rseq:_Abort\fi \if #1?\xint_dothis\XINT_expr_rseq:_Break\fi \if #1!\xint_dothis\XINT_expr_rseq:_Omit\fi @@ -28619,7 +28870,7 @@ $1$ or $-1$. \def\XINT_allexpr_rrseq #1#2% {% \expandafter\XINT_expr_rrseqx\expandafter #1\expandafter - #2\romannumeral-`0\XINT_expr_onlitteral_seq_a {}% + #2\romannumeral`&&@\XINT_expr_onlitteral_seq_a {}% }% % \end{macrocode} % \subsubsection{\csh{XINT_expr_rrseqx}} @@ -28645,7 +28896,7 @@ $1$ or $-1$. \expandafter \XINT_expr_getop \csname .=\XINT_expr_unlock #3% \expandafter\XINT_expr_rrseq:_aa - \romannumeral-`0\XINT_expr_unlock #1!{#6#5\relax !#4}{#2},^,\endcsname + \romannumeral`&&@\XINT_expr_unlock #1!{#6#5\relax !#4}{#2},^,\endcsname }% \def\XINT_expr_rrseq:_aa #1{\if +#1\expandafter\XINT_expr_rrseq:_A\else \expandafter\XINT_expr_rrseq:_a\fi #1}% @@ -28659,7 +28910,7 @@ $1$ or $-1$. \if ^#1\xint_dothis\XINT_expr_rrseq:_end\fi \xint_orthat\XINT_expr_rrseq:_d #1}% \def\XINT_expr_rrseq:_d #1,~#2?#3{\expandafter\XINT_expr_rrseq:_e - \romannumeral-`0\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2?{#3}}% + \romannumeral`&&@\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2?{#3}}% \def\XINT_expr_rrseq:_goon #1!#2#3~#4?#5{,#1\expandafter\XINT_expr_rrseq:_b\expandafter {\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}% \def\XINT_expr_rrseq:_omit #1!#2#3~{\XINT_expr_rrseq:_b }% @@ -28681,7 +28932,7 @@ $1$ or $-1$. \catcode`? 3 \def\XINT_expr_rrseq:_A +#1!#2#3,^,{\XINT_expr_rrseq:_D {#1}{#3}{#2}}% \def\XINT_expr_rrseq:_D #1#2#3{\expandafter\XINT_expr_rrseq:_E - \romannumeral-`0\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2?{#3}}% + \romannumeral`&&@\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2?{#3}}% \def\XINT_expr_rrseq:_Goon #1!#2#3~#4?#5% {,#1\expandafter\XINT_expr_rrseq:_D\expandafter{\the\numexpr #3+\xint_c_i\expandafter}% \expandafter{\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}% @@ -28703,7 +28954,7 @@ $1$ or $-1$. \def\XINT_allexpr_iter #1#2% {% \expandafter\XINT_expr_iterx\expandafter #1\expandafter - #2\romannumeral-`0\XINT_expr_onlitteral_seq_a {}% + #2\romannumeral`&&@\XINT_expr_onlitteral_seq_a {}% }% % \end{macrocode} % \subsubsection{\csh{XINT_expr_iterx}} @@ -28729,7 +28980,7 @@ $1$ or $-1$. \expandafter \XINT_expr_getop \csname .=% \expandafter\XINT_expr_iter:_aa - \romannumeral-`0\XINT_expr_unlock #1!{#6#5\relax !#4}{#2},^,\endcsname + \romannumeral`&&@\XINT_expr_unlock #1!{#6#5\relax !#4}{#2},^,\endcsname }% \def\XINT_expr_iter:_aa #1{\if +#1\expandafter\XINT_expr_iter:_A\else \expandafter\XINT_expr_iter:_a\fi #1}% @@ -28743,7 +28994,7 @@ $1$ or $-1$. \if ^#1\xint_dothis\XINT_expr_iter:_end\fi \xint_orthat\XINT_expr_iter:_d #1}% \def\XINT_expr_iter:_d #1,~#2?#3{\expandafter\XINT_expr_iter:_e - \romannumeral-`0\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2?{#3}}% + \romannumeral`&&@\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2?{#3}}% \def\XINT_expr_iter:_goon #1!#2#3~#4?#5{\expandafter\XINT_expr_iter:_b\expandafter {\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}% \def\XINT_expr_iter:_omit #1!#2#3~{\XINT_expr_iter:_b }% @@ -28772,7 +29023,7 @@ $1$ or $-1$. \catcode`? 3 \def\XINT_expr_iter:_A +#1!#2#3,^,{\XINT_expr_iter:_D {#1}{#3}{#2}}% \def\XINT_expr_iter:_D #1#2#3{\expandafter\XINT_expr_iter:_E - \romannumeral-`0\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2?{#3}}% + \romannumeral`&&@\expandafter\XINT_expr_unlock\romannumeral0#3{#1}~#2?{#3}}% \def\XINT_expr_iter:_Goon #1!#2#3~#4?#5% {\expandafter\XINT_expr_iter:_D\expandafter{\the\numexpr #3+\xint_c_i\expandafter}% \expandafter{\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}% @@ -28804,7 +29055,7 @@ $1$ or $-1$. % \lverb|1.09a. For use by \xintexpr inside \csname. 1.1, je remplace % ifTrueAelseB par iiNotZero pour des raisons d'optimisations.| % \begin{macrocode} -\def\xintANDof:csv #1{\expandafter\XINT_andof:_a\romannumeral-`0#1,,^}% +\def\xintANDof:csv #1{\expandafter\XINT_andof:_a\romannumeral`&&@#1,,^}% \def\XINT_andof:_a #1{\if ,#1\expandafter\XINT_andof:_e \else\expandafter\XINT_andof:_c\fi #1}% \def\XINT_andof:_c #1,{\xintiiifNotZero {#1}{\XINT_andof:_a}{\XINT_andof:_no}}% @@ -28814,7 +29065,7 @@ $1$ or $-1$. % \subsubsection{\csh{xintORof:csv}} % \lverb|1.09a. For use by \xintexpr.| % \begin{macrocode} -\def\xintORof:csv #1{\expandafter\XINT_orof:_a\romannumeral-`0#1,,^}% +\def\xintORof:csv #1{\expandafter\XINT_orof:_a\romannumeral`&&@#1,,^}% \def\XINT_orof:_a #1{\if ,#1\expandafter\XINT_orof:_e \else\expandafter\XINT_orof:_c\fi #1}% \def\XINT_orof:_c #1,{\xintiiifNotZero{#1}{\XINT_orof:_yes}{\XINT_orof:_a}}% @@ -28824,7 +29075,7 @@ $1$ or $-1$. % \subsubsection{\csh{xintXORof:csv}} % \lverb|1.09a. For use by \xintexpr (inside a \csname..\endcsname).| % \begin{macrocode} -\def\xintXORof:csv #1{\expandafter\XINT_xorof:_a\expandafter 0\romannumeral-`0#1,,^}% +\def\xintXORof:csv #1{\expandafter\XINT_xorof:_a\expandafter 0\romannumeral`&&@#1,,^}% \def\XINT_xorof:_a #1#2,{\XINT_xorof:_b #2,#1}% \def\XINT_xorof:_b #1{\if ,#1\expandafter\XINT_xorof:_e \else\expandafter\XINT_xorof:_c\fi #1}% @@ -28845,12 +29096,12 @@ $1$ or $-1$. \def\XINT_oncsv:_a #1#2#3% {\if ,#3\expandafter\XINT_oncsv:_empty\else\expandafter\XINT_oncsv:_b\fi #1#2#3}% \def\XINT_oncsv:_b #1#2#3,% - {\expandafter\XINT_oncsv:_c \expandafter{\romannumeral-`0#2{#3}}#1#2}% -\def\XINT_oncsv:_c #1#2#3#4,{\expandafter\XINT_oncsv:_d \romannumeral-`0#4,{#1}#2#3}% + {\expandafter\XINT_oncsv:_c \expandafter{\romannumeral`&&@#2{#3}}#1#2}% +\def\XINT_oncsv:_c #1#2#3#4,{\expandafter\XINT_oncsv:_d \romannumeral`&&@#4,{#1}#2#3}% \def\XINT_oncsv:_d #1% {\if ^#1\expandafter\XINT_oncsv:_end\else\expandafter\XINT_oncsv:_e\fi #1}% \def\XINT_oncsv:_e #1,#2#3#4% - {\expandafter\XINT_oncsv:_c\expandafter {\romannumeral-`0#3{#4{#1}}{#2}}#3#4}% + {\expandafter\XINT_oncsv:_c\expandafter {\romannumeral`&&@#3{#4{#1}}{#2}}#3#4}% % \end{macrocode} % \subsubsection{\csh{xintMaxof:csv}, \csh{xintiiMaxof:csv}} % \lverb|1.09i. Rewritten for 1.1. Compatible avec liste vide donnant valeur par @@ -28860,50 +29111,50 @@ $1$ or $-1$. % dans il faut bien sûr ne pas faire de xintNum, donc il faut un iimax.| % \begin{macrocode} \def\xintMaxof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmax - \expandafter\xint_firstofone\romannumeral-`0#1,^,{0/1[0]}}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,{0/1[0]}}% \def\xintiiMaxof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiimax - \expandafter\xint_firstofone\romannumeral-`0#1,^,0}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}% % \end{macrocode} % \subsubsection{\csh{xintMinof:csv}, \csh{xintiiMinof:csv}} % \lverb|1.09i. Rewritten for 1.1. For use by \xintiiexpr.| % \begin{macrocode} \def\xintMinof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmin - \expandafter\xint_firstofone\romannumeral-`0#1,^,{0/1[0]}}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,{0/1[0]}}% \def\xintiiMinof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiimin - \expandafter\xint_firstofone\romannumeral-`0#1,^,0}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}% % \end{macrocode} % \subsubsection{\csh{xintSum:csv}, \csh{xintiiSum:csv}} % \lverb|1.09a. Rewritten for 1.1. For use by \xintexpr.| % \begin{macrocode} \def\xintSum:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintadd - \expandafter\xint_firstofone\romannumeral-`0#1,^,{0/1[0]}}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,{0/1[0]}}% \def\xintiiSum:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiiadd - \expandafter\xint_firstofone\romannumeral-`0#1,^,0}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}% % \end{macrocode} % \subsubsection{\csh{xintPrd:csv}, \csh{xintiiPrd:csv}} % \lverb|1.09a. Rewritten for 1.1. For use by \xintexpr.| % \begin{macrocode} \def\xintPrd:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmul - \expandafter\xint_firstofone\romannumeral-`0#1,^,{1/1[0]}}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,{1/1[0]}}% \def\xintiiPrd:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiimul - \expandafter\xint_firstofone\romannumeral-`0#1,^,1}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,1}% % \end{macrocode} % \subsubsection{\csh{xintGCDof:csv}, \csh{xintLCMof:csv}} % \lverb|1.09a. Rewritten for 1.1. For use by \xintexpr. Expansion réinstaurée % pour besoins de xintNewExpr de version 1.1| % \begin{macrocode} \def\xintGCDof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintgcd - \expandafter\xint_firstofone\romannumeral-`0#1,^,1}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,1}% \def\xintLCMof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintlcm - \expandafter\xint_firstofone\romannumeral-`0#1,^,0}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}% % \end{macrocode} % \subsubsection{\csh{xintiiGCDof:csv}, \csh{xintiiLCMof:csv}} % \lverb|1.1a pour \xintiiexpr. Ces histoires de ii sont pénibles à la fin.| % \begin{macrocode} \def\xintiiGCDof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiigcd - \expandafter\xint_firstofone\romannumeral-`0#1,^,1}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,1}% \def\xintiiLCMof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiilcm - \expandafter\xint_firstofone\romannumeral-`0#1,^,0}% + \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}% % \end{macrocode} % \subsubsection{\csh{XINTinFloatdigits}, \csh{XINTinFloatSqrtdigits}} % \lverb|for \xintNewExpr matters, mainly.| @@ -28915,17 +29166,17 @@ $1$ or $-1$. % \lverb|1.09a. Rewritten for 1.1. For use by \xintfloatexpr. Name changed in 1.09h| % \begin{macrocode} \def\XINTinFloatMaxof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmax - \expandafter\XINTinFloatdigits\romannumeral-`0#1,^,{0[0]}}% + \expandafter\XINTinFloatdigits\romannumeral`&&@#1,^,{0[0]}}% \def\XINTinFloatMinof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmin - \expandafter\XINTinFloatdigits\romannumeral-`0#1,^,{0[0]}}% + \expandafter\XINTinFloatdigits\romannumeral`&&@#1,^,{0[0]}}% % \end{macrocode} % \subsubsection{\csh{XINTinFloatSum:csv}, \csh{XINTinFloatPrd:csv}} % \lverb|1.09a. Rewritten for 1.1. For use by \xintfloatexpr.| % \begin{macrocode} \def\XINTinFloatSum:csv #1{\expandafter\XINT_oncsv:_a\expandafter\XINTinfloatadd - \expandafter\XINTinFloatdigits\romannumeral-`0#1,^,{0[0]}}% + \expandafter\XINTinFloatdigits\romannumeral`&&@#1,^,{0[0]}}% \def\XINTinFloatPrd:csv #1{\expandafter\XINT_oncsv:_a\expandafter\XINTinfloatmul - \expandafter\XINTinFloatdigits\romannumeral-`0#1,^,{1[0]}}% + \expandafter\XINTinFloatdigits\romannumeral`&&@#1,^,{1[0]}}% % \end{macrocode} % \subsection{The num, reduce, abs, sgn, frac, floor, ceil, sqr, sqrt, sqrtr, float, % round, trunc, mod, quo, rem, gcd, lcm, max, min, \textasciigrave @@ -29001,7 +29252,7 @@ $1$ or $-1$. {% \expandafter #1\expandafter #2\csname .=% \expandafter\XINT_expr_argandopt - \romannumeral-`0\XINT_expr_unlock#3,,.\XINTinFloatSqrtdigits\XINTinFloatSqrt + \romannumeral`&&@\XINT_expr_unlock#3,,.\XINTinFloatSqrtdigits\XINTinFloatSqrt \endcsname }% \let\XINT_flexpr_func_sqrt\XINT_expr_func_sqrt @@ -29014,34 +29265,34 @@ $1$ or $-1$. \expandafter #1\expandafter #2\csname .=% \expandafter\XINT_expr_oneortwo \expandafter\xintiRound\expandafter\xintRound - \romannumeral-`0\XINT_expr_unlock #3,,.\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,,.\endcsname }% \let\XINT_flexpr_func_round\XINT_expr_func_round \def\XINT_iiexpr_func_round #1#2#3% {% \expandafter #1\expandafter #2\csname .=% \expandafter\XINT_iiexpr_oneortwo\expandafter\xintiRound - \romannumeral-`0\XINT_expr_unlock #3,,.\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,,.\endcsname }% \def\XINT_expr_func_trunc #1#2#3% {% \expandafter #1\expandafter #2\csname .=% \expandafter\XINT_expr_oneortwo \expandafter\xintiTrunc\expandafter\xintTrunc - \romannumeral-`0\XINT_expr_unlock #3,,.\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,,.\endcsname }% \let\XINT_flexpr_func_trunc\XINT_expr_func_trunc \def\XINT_iiexpr_func_trunc #1#2#3% {% \expandafter #1\expandafter #2\csname .=% \expandafter\XINT_iiexpr_oneortwo\expandafter\xintiTrunc - \romannumeral-`0\XINT_expr_unlock #3,,.\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,,.\endcsname }% \def\XINT_expr_func_float #1#2#3% {% \expandafter #1\expandafter #2\csname .=% \expandafter\XINT_expr_argandopt - \romannumeral-`0\XINT_expr_unlock #3,,.\XINTinFloatdigits\XINTinFloat + \romannumeral`&&@\XINT_expr_unlock #3,,.\XINTinFloatdigits\XINTinFloat \endcsname }% \let\XINT_flexpr_func_float\XINT_expr_func_float @@ -29051,28 +29302,28 @@ $1$ or $-1$. \expandafter #1\expandafter #2\csname .=% \expandafter\expandafter\expandafter\xintMod \expandafter\XINT_expr_twoargs - \romannumeral-`0\XINT_expr_unlock #3,\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,\endcsname }% \def\XINT_flexpr_func_mod #1#2#3% {% \expandafter #1\expandafter #2\csname .=% \expandafter\XINTinFloatMod - \romannumeral-`0\expandafter\XINT_expr_twoargs - \romannumeral-`0\XINT_expr_unlock #3,\endcsname + \romannumeral`&&@\expandafter\XINT_expr_twoargs + \romannumeral`&&@\XINT_expr_unlock #3,\endcsname }% \def\XINT_iiexpr_func_mod #1#2#3% {% \expandafter #1\expandafter #2\csname .=% \expandafter\expandafter\expandafter\xintiiMod \expandafter\XINT_expr_twoargs - \romannumeral-`0\XINT_expr_unlock #3,\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,\endcsname }% \def\XINT_expr_func_quo #1#2#3% {% \expandafter #1\expandafter #2\csname .=% \expandafter\expandafter\expandafter\xintiQuo \expandafter\XINT_expr_twoargs - \romannumeral-`0\XINT_expr_unlock #3,\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,\endcsname }% \let\XINT_flexpr_func_quo\XINT_expr_func_quo \def\XINT_iiexpr_func_quo #1#2#3% @@ -29080,14 +29331,14 @@ $1$ or $-1$. \expandafter #1\expandafter #2\csname .=% \expandafter\expandafter\expandafter\xintiiQuo \expandafter\XINT_expr_twoargs - \romannumeral-`0\XINT_expr_unlock #3,\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,\endcsname }% \def\XINT_expr_func_rem #1#2#3% {% \expandafter #1\expandafter #2\csname .=% \expandafter\expandafter\expandafter\xintiRem \expandafter\XINT_expr_twoargs - \romannumeral-`0\XINT_expr_unlock #3,\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,\endcsname }% \let\XINT_flexpr_func_rem\XINT_expr_func_rem \def\XINT_iiexpr_func_rem #1#2#3% @@ -29095,7 +29346,7 @@ $1$ or $-1$. \expandafter #1\expandafter #2\csname .=% \expandafter\expandafter\expandafter\xintiiRem \expandafter\XINT_expr_twoargs - \romannumeral-`0\XINT_expr_unlock #3,\endcsname + \romannumeral`&&@\XINT_expr_unlock #3,\endcsname }% \def\XINT_expr_func_gcd #1#2#3% {\expandafter #1\expandafter #2\csname @@ -29178,26 +29429,26 @@ $1$ or $-1$. \def\xintifNotZero: #1,#2,#3,{\xintiiifNotZero{#1}{#2}{#3}}% \def\XINT_expr_func_if #1#2#3% {\expandafter #1\expandafter #2\csname - .=\expandafter\xintifNotZero:\romannumeral-`0\XINT_expr_unlock #3,\endcsname }% + .=\expandafter\xintifNotZero:\romannumeral`&&@\XINT_expr_unlock #3,\endcsname }% \let\XINT_flexpr_func_if\XINT_expr_func_if \let\XINT_iiexpr_func_if\XINT_expr_func_if \def\xintifSgn: #1,#2,#3,#4,{\xintiiifSgn{#1}{#2}{#3}{#4}}% \def\XINT_expr_func_ifsgn #1#2#3% {% \expandafter #1\expandafter #2\csname - .=\expandafter\xintifSgn:\romannumeral-`0\XINT_expr_unlock #3,\endcsname + .=\expandafter\xintifSgn:\romannumeral`&&@\XINT_expr_unlock #3,\endcsname }% \let\XINT_flexpr_func_ifsgn\XINT_expr_func_ifsgn \let\XINT_iiexpr_func_ifsgn\XINT_expr_func_ifsgn \def\XINT_expr_func_first #1#2#3% {\expandafter #1\expandafter #2\csname.=\expandafter\XINT_expr_func_firsta - \romannumeral-`0\XINT_expr_unlock #3,^\endcsname }% + \romannumeral`&&@\XINT_expr_unlock #3,^\endcsname }% \def\XINT_expr_func_firsta #1,#2^{#1}% \let\XINT_flexpr_func_first\XINT_expr_func_first \let\XINT_iiexpr_func_first\XINT_expr_func_first \def\XINT_expr_func_last #1#2#3% will not work in \xintNewExpr if macro param involved {\expandafter #1\expandafter #2\csname.=\expandafter\XINT_expr_func_lasta - \romannumeral-`0\XINT_expr_unlock #3,^\endcsname }% + \romannumeral`&&@\XINT_expr_unlock #3,^\endcsname }% \def\XINT_expr_func_lasta #1,#2% {\if ^#2 #1\expandafter\xint_gobble_ii\fi \XINT_expr_func_lasta #2}% \let\XINT_flexpr_func_last\XINT_expr_func_last @@ -29234,9 +29485,9 @@ $1$ or $-1$. % \begin{macrocode} \def\xintSeqB:f:csv #1#2% {\expandafter\XINT_seqb:f:csv \expandafter{\romannumeral0\xintraw{#2}}{#1}}% -\def\XINT_seqb:f:csv #1#2{\expandafter\XINT_seqb:f:csv_a\romannumeral-`0#2#1!}% +\def\XINT_seqb:f:csv #1#2{\expandafter\XINT_seqb:f:csv_a\romannumeral`&&@#2#1!}% \def\XINT_seqb:f:csv_a #1#2;#3;#4!{% - \expandafter\xint_gobble_i\romannumeral-`0% + \expandafter\xint_gobble_i\romannumeral`&&@% \xintifCmp {#3}{#4}\XINT_seqb:f:csv_bl\XINT_seqb:f:csv_be\XINT_seqb:f:csv_bg #1{#3}{#4}{}{#2}}% \def\XINT_seqb:f:csv_be #1#2#3#4#5{,#2}% @@ -29268,10 +29519,10 @@ $1$ or $-1$. % except if start and end coincide.| % \begin{macrocode} \def\xintiiSeqb:f:csv #1#2% - {\expandafter\XINT_iiseqb:f:csv \expandafter{\romannumeral-`0#2}{#1}}% -\def\XINT_iiseqb:f:csv #1#2{\expandafter\XINT_iiseqb:f:csv_a\romannumeral-`0#2#1!}% + {\expandafter\XINT_iiseqb:f:csv \expandafter{\romannumeral`&&@#2}{#1}}% +\def\XINT_iiseqb:f:csv #1#2{\expandafter\XINT_iiseqb:f:csv_a\romannumeral`&&@#2#1!}% \def\XINT_iiseqb:f:csv_a #1#2;#3;#4!{% - \expandafter\xint_gobble_i\romannumeral-`0% + \expandafter\xint_gobble_i\romannumeral`&&@% \xintSgnFork{\XINT_Cmp {#3}{#4}}% \XINT_iiseqb:f:csv_bl\XINT_seqb:f:csv_be\XINT_iiseqb:f:csv_bg #1{#3}{#4}{}{#2}}% @@ -29302,9 +29553,9 @@ $1$ or $-1$. % \begin{macrocode} \def\XINTinFloatSeqB:f:csv #1#2{\expandafter\XINT_flseqb:f:csv \expandafter {\romannumeral0\XINTinfloat [\XINTdigits]{#2}}{#1}}% -\def\XINT_flseqb:f:csv #1#2{\expandafter\XINT_flseqb:f:csv_a\romannumeral-`0#2#1!}% +\def\XINT_flseqb:f:csv #1#2{\expandafter\XINT_flseqb:f:csv_a\romannumeral`&&@#2#1!}% \def\XINT_flseqb:f:csv_a #1#2;#3;#4!{% - \expandafter\xint_gobble_i\romannumeral-`0% + \expandafter\xint_gobble_i\romannumeral`&&@% \xintifCmp {#3}{#4}\XINT_flseqb:f:csv_bl\XINT_seqb:f:csv_be\XINT_flseqb:f:csv_bg #1{#3}{#4}{}{#2}}% \def\XINT_flseqb:f:csv_bl #1{\if #1p\expandafter\XINT_flseqb:f:csv_pa\else @@ -29335,27 +29586,27 @@ $1$ or $-1$. % late October.| % \begin{macrocode} \def\xintApply::csv #1#2% - {\expandafter\XINT_applyon::_a\expandafter {\romannumeral-`0#2}{#1}}% + {\expandafter\XINT_applyon::_a\expandafter {\romannumeral`&&@#2}{#1}}% \def\XINT_applyon::_a #1#2{\XINT_applyon::_b {#2}{}#1,,}% -\def\XINT_applyon::_b #1#2#3,{\expandafter\XINT_applyon::_c \romannumeral-`0#3,{#1}{#2}}% +\def\XINT_applyon::_b #1#2#3,{\expandafter\XINT_applyon::_c \romannumeral`&&@#3,{#1}{#2}}% \def\XINT_applyon::_c #1{\if #1,\expandafter\XINT_applyon::_end \else\expandafter\XINT_applyon::_d\fi #1}% -\def\XINT_applyon::_d #1,#2{\expandafter\XINT_applyon::_e\romannumeral-`0#2{#1},{#2}}% +\def\XINT_applyon::_d #1,#2{\expandafter\XINT_applyon::_e\romannumeral`&&@#2{#1},{#2}}% \def\XINT_applyon::_e #1,#2#3{\XINT_applyon::_b {#2}{#3, #1}}% \def\XINT_applyon::_end #1,#2#3{\xint_secondoftwo #3}% % \end{macrocode} % \subsubsection{\csh{xintApply:::csv}} % \begin{macrocode} \def\xintApply:::csv #1#2#3% - {\expandafter\XINT_applyon:::_a\expandafter{\romannumeral-`0#2}{#1}{#3}}% + {\expandafter\XINT_applyon:::_a\expandafter{\romannumeral`&&@#2}{#1}{#3}}% \def\XINT_applyon:::_a #1#2#3{\XINT_applyon:::_b {#2}{#3}{}#1,,}% \def\XINT_applyon:::_b #1#2#3#4,% - {\expandafter\XINT_applyon:::_c \romannumeral-`0#4,{#1}{#2}{#3}}% + {\expandafter\XINT_applyon:::_c \romannumeral`&&@#4,{#1}{#2}{#3}}% \def\XINT_applyon:::_c #1{\if #1,\expandafter\XINT_applyon:::_end \else\expandafter\XINT_applyon:::_d\fi #1}% \def\XINT_applyon:::_d #1,#2#3% {\expandafter\XINT_applyon:::_e\expandafter - {\romannumeral-`0\xintApply::csv {#2{#1}}{#3}},{#2}{#3}}% + {\romannumeral`&&@\xintApply::csv {#2{#1}}{#3}},{#2}{#3}}% \def\XINT_applyon:::_e #1,#2#3#4{\XINT_applyon:::_b {#2}{#3}{#4, #1}}% \def\XINT_applyon:::_end #1,#2#3#4{\xint_secondoftwo #4}% % \end{macrocode} @@ -29382,7 +29633,7 @@ $1$ or $-1$. \catcode`~ 12 % by the way, catcode is set to 3 in \XINTsetupcatcodes \catcode`$ 12 % $ \def\XINT_xptwo_getab_b #1#2!#3% - {\expandafter\XINT_xptwo_getab_c\romannumeral-`0#3!#1{#1#2}}% + {\expandafter\XINT_xptwo_getab_c\romannumeral`&&@#3!#1{#1#2}}% \def\XINT_xptwo_getab_c #1#2!#3#4#5#6{#1#3{#5}{#6}{#1#2}{#4}}% \def\xint_ddfork #1$$#2#3\krof {#2}% $$ \def\XINT_NEfork #1#2{\xint_ddfork @@ -29413,8 +29664,8 @@ $1$ or $-1$. \expandafter\let\csname xint#1NE\expandafter\endcsname\csname xint#1\expandafter \endcsname\expandafter\def\csname xint#1\endcsname ####1####2{% \expandafter\XINT_NEfork - \romannumeral-`0\expandafter\XINT_xptwo_getab_b - \romannumeral-`0####2!{####1}{~xint#1}{xint#1}}% + \romannumeral`&&@\expandafter\XINT_xptwo_getab_b + \romannumeral`&&@####2!{####1}{~xint#1}{xint#1}}% }% }% cela aurait-il un sens d'ajouter Raw et iNum (à cause de qint, qfrac, % qfloat?). Pas le temps d'y réfléchir. Je ne fais rien. @@ -29425,7 +29676,7 @@ $1$ or $-1$. \expandafter{\the\toks0% \expandafter\let\csname xint#1NE\expandafter\endcsname\csname xint#1\expandafter \endcsname\expandafter\def\csname xint#1\endcsname ####1{% - \expandafter\XINT_NEfork_one\romannumeral-`0####1!{~xint#1}{xint#1}{}{}}% + \expandafter\XINT_NEfork_one\romannumeral`&&@####1!{~xint#1}{xint#1}{}{}}% }% }% \toks0 @@ -29433,7 +29684,7 @@ $1$ or $-1$. \let\XINTinFloatFacNE\XINTinFloatFac \def\XINTinFloatFac ##1{% \expandafter\XINT_NEfork_one - \romannumeral-`0##1!{~XINTinFloatFac}{XINTinFloatFac}{}{}}% + \romannumeral`&&@##1!{~XINTinFloatFac}{XINTinFloatFac}{}{}}% }% \xintFor #1 in {Add,Sub,Mul,Div,Power,E,Mod,SeqA::csv}\do {\toks0 @@ -29442,8 +29693,8 @@ $1$ or $-1$. \csname XINTinFloat#1\expandafter\endcsname \expandafter\def\csname XINTinFloat#1\endcsname ####1####2{% \expandafter\XINT_NEfork - \romannumeral-`0\expandafter\XINT_xptwo_getab_b - \romannumeral-`0####2!{####1}{~XINTinFloat#1}{XINTinFloat#1}}% + \romannumeral`&&@\expandafter\XINT_xptwo_getab_b + \romannumeral`&&@####2!{####1}{~XINTinFloat#1}{XINTinFloat#1}}% }% }% \xintFor #1 in {XINTinFloatdigits,XINTinFloatFracdigits,XINTinFloatSqrtdigits}\do @@ -29451,7 +29702,7 @@ $1$ or $-1$. \expandafter{\the\toks0% \expandafter\let\csname #1NE\expandafter\endcsname\csname #1\expandafter \endcsname\expandafter\def\csname #1\endcsname ####1{\expandafter - \XINT_NEfork_one\romannumeral-`0####1!{~#1}{#1}{}{}}% + \XINT_NEfork_one\romannumeral`&&@####1!{~#1}{#1}{}{}}% }% }% \xintFor #1 in {xintSeq::csv,xintiiSeq::csv,XINTinFloatSeq::csv}\do @@ -29460,8 +29711,8 @@ $1$ or $-1$. \expandafter\let\csname #1NE\expandafter\endcsname\csname #1\expandafter \endcsname\expandafter\def\csname #1\endcsname ####1####2{% \expandafter\XINT_NEfork - \romannumeral-`0\expandafter\XINT_xptwo_getab_b - \romannumeral-`0####2!{####1}{$noexpand$#1}{#1}}% + \romannumeral`&&@\expandafter\XINT_xptwo_getab_b + \romannumeral`&&@####2!{####1}{$noexpand$#1}{#1}}% }% }% \xintFor #1 in {xintSeqB,xintiiSeqB,XINTinFloatSeqB}\do @@ -29470,8 +29721,8 @@ $1$ or $-1$. \expandafter\let\csname #1::csvNE\expandafter\endcsname\csname #1::csv\expandafter \endcsname\expandafter\def\csname #1::csv\endcsname ####1####2{% \expandafter\XINT_NEfork - \romannumeral-`0\expandafter\XINT_xptwo_getab_b - \romannumeral-`0####2!{####1}{$noexpand$#1:f:csv}{#1::csv}}% + \romannumeral`&&@\expandafter\XINT_xptwo_getab_b + \romannumeral`&&@####2!{####1}{$noexpand$#1:f:csv}{#1::csv}}% }% }% \toks0 @@ -29479,11 +29730,11 @@ $1$ or $-1$. \let\XINTinFloatNE\XINTinFloat \def\XINTinFloat [##1]##2{% not ultimately general, but got tired \expandafter\XINT_NEfork_one - \romannumeral-`0##2!{~XINTinFloat[##1]}{XINTinFloat}{}{[##1]}}% + \romannumeral`&&@##2!{~XINTinFloat[##1]}{XINTinFloat}{}{[##1]}}% \let\XINTinFloatSqrtNE\XINTinFloatSqrt \def\XINTinFloatSqrt [##1]##2{% \expandafter\XINT_NEfork_one - \romannumeral-`0##2!{~XINTinFloatSqrt[##1]}{XINTinFloatSqrt}{}{[##1]}}% + \romannumeral`&&@##2!{~XINTinFloatSqrt[##1]}{XINTinFloatSqrt}{}{[##1]}}% }% \xintFor #1 in {ANDof,ORof,XORof,iiMaxof,iiMinof,iiSum,iiPrd, GCDof,LCMof,Sum,Prd,Maxof,Minof}\do @@ -29503,11 +29754,11 @@ $1$ or $-1$. \def\XINT_expr_unlock_sp ##1.;##2##3.=##4!{\if -##2\expandafter\xint_firstoftwo \else\expandafter\xint_secondoftwo\fi \XINTdigits{{##2##3}}{##4}}% \def\XINT_expr_print ##1{\expandafter\xintSPRaw::csv\expandafter - {\romannumeral-`0\XINT_expr_unlock ##1}}% + {\romannumeral`&&@\XINT_expr_unlock ##1}}% \def\XINT_iiexpr_print ##1{\expandafter\xintCSV::csv\expandafter - {\romannumeral-`0\XINT_expr_unlock ##1}}% + {\romannumeral`&&@\XINT_expr_unlock ##1}}% \def\XINT_boolexpr_print ##1{\expandafter\xintIsTrue::csv\expandafter - {\romannumeral-`0\XINT_expr_unlock ##1}}% + {\romannumeral`&&@\XINT_expr_unlock ##1}}% \def\xintCSV::csv {~xintCSV::csv }% spaces to separate from possible catcode 11 \def\xintSPRaw::csv {~xintSPRaw::csv }% stuff after \def\xintPFloat::csv {~xintPFloat::csv }% @@ -29527,7 +29778,7 @@ $1$ or $-1$. \def\xintNewBoolExpr {\xint_NewExpr\xinttheboolexpr }% % \end{macrocode} % \begin{macrocode} -\def\XINT_newexpr_finish #1>{\noexpand\romannumeral-`0}% +\def\XINT_newexpr_finish #1>{\noexpand\romannumeral`&&@}% \def\xint_NewExpr #1#2[#3]% {% \begingroup @@ -29557,7 +29808,7 @@ $1$ or $-1$. \endlinechar -1 \everyeof {\noexpand }@ \edef\XINT_tmpb {\scantokens\expandafter - {\romannumeral-`0\expandafter%1\XINT_tmpa {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}\relax}@ + {\romannumeral`&&@\expandafter%1\XINT_tmpa {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}\relax}@ }@ \escapechar 92 \catcode`# 6 \catcode`$ 0 @ $ \the\toks0 @@ -29686,7 +29937,7 @@ $1$ or $-1$. Right bracket \] Circumflex \^ Underscore \_ Grave accent \` Left brace \{ Vertical bar \| Right brace \} Tilde \~} -\CheckSum {26711}% +\CheckSum {27040}% \makeatletter\check@checksum\makeatother \Finale %% End of file xint.dtx -- cgit v1.2.3