summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/bnumexpr/bnumexpr.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/bnumexpr/bnumexpr.dtx')
-rw-r--r--macros/latex/contrib/bnumexpr/bnumexpr.dtx277
1 files changed, 178 insertions, 99 deletions
diff --git a/macros/latex/contrib/bnumexpr/bnumexpr.dtx b/macros/latex/contrib/bnumexpr/bnumexpr.dtx
index 83e0ab6c38..23ead1e2e1 100644
--- a/macros/latex/contrib/bnumexpr/bnumexpr.dtx
+++ b/macros/latex/contrib/bnumexpr/bnumexpr.dtx
@@ -1,17 +1,17 @@
% -*- coding: utf-8-unix; time-stamp-format: "%02d-%02m-%:y %02H:%02M:%02S %Z"; sentence-end-double-space: t; -*-
%<*dtx>
-\def\bnedtxtimestamp {Time-stamp: <12-05-2021 22:05:26 CEST>}
+\def\bnedtxtimestamp {Time-stamp: <13-05-2021 12:37:08 CEST>}
\iffalse
%</dtx>
%<*drv>
%% ---------------------------------------------------------------
-\def\bnedocdate {2021/05/12}% package bnumexpr documentation date
-\def\bnepackdate{2021/05/12}% package bnumexpr date
-\def\bneversion {1.4} % package bnumexpr version
+\def\bnedocdate {2021/05/13}% package bnumexpr documentation date
+\def\bnepackdate{2021/05/13}% package bnumexpr date
+\def\bneversion {1.4a} % package bnumexpr version
%</drv>
%<*readme>--------------------------------------------------------
| Source: bnumexpr.dtx
-| Version: v1.4, 2021/05/12 (doc: 2021/05/12)
+| Version: v1.4a, 2021/05/13 (doc: 2021/05/13)
| Author: Jean-Francois Burnol
| Info: Expressions with big integers
| License: LPPL 1.3c
@@ -47,13 +47,6 @@ the syntax elements to macros from an alternative big integer
expandable engine of the user own choosing,
and then [xintcore](http://ctan.org/pkg/xint) is not loaded.
-Note; the possibility not to use the xintcore macros might be
-removed in the future: perhaps a future release will maintain during
-computations a private internal representation (especially tailored
-either for the xintcore macros or new ones which would be included
-within `bnumexpr.sty` itself) and the constraints this implies may
-render optional use of other macros impossible.
-
Installation
============
@@ -129,6 +122,17 @@ and the derived files
%%
%</!readme>
%<*changes>-------------------------------------------------------
+\item[1.4a (2021/05/13)]
+ \begin{itemize}
+ \item fix undefined control sequences errors encountered by the parser in
+ case of either extra or missing closing parenthesis (due to a problem
+ in technology transfer at |1.4| from upstream \xintexprname).
+ \item fix |\BNE_Op_opp| must now be f-expandable (also caused as a
+ collateral to the technology transfer).
+ \item fix user documentation regarding the constraints applying to the user
+ replacement macros for the core algebra, as they have changed at |1.4|.
+ \end{itemize}
+
\item[1.4 (2021/05/12)]
\begin{itemize}
\item technology transfer from \xintexprname |1.4| of
@@ -300,7 +304,7 @@ and the derived files
\PassOptionsToPackage{dvipdfm}{geometry}
\PassOptionsToPackage{bookmarks=true}{hyperref}
\PassOptionsToPackage{dvipdfmx-outline-open}{hyperref}
- \PassOptionsToPackage{dvipdfmx-outline-open}{bookmark}
+ %\PassOptionsToPackage{dvipdfmx-outline-open}{bookmark}
%
\def\pgfsysdriver{pgfsys-dvipdfm.def}
\else
@@ -476,12 +480,14 @@ pdfpagemode=UseOutlines}
{bnumexpr}%
\xspace }%
+\def\xintkernelname
+ {\href{http://www.ctan.org/pkg/xint}{xintkernel}\xspace }%
\def\xintname
{\href{http://www.ctan.org/pkg/xint}{xint}\xspace }%
\def\xintcorename
{\href{http://www.ctan.org/pkg/xint}{xintcore}\xspace }%
\def\xintexprname
- {\href{http://www.ctan.org/pkg/xint}{xintexpr}\xspace }%
+ {\href{http://www.ctan.org/pkg/xintexpr}{xintexpr}\xspace }%
\def\xintbinhexname
{\href{http://www.ctan.org/pkg/xint}{xintbinhex}\xspace }%
@@ -546,15 +552,10 @@ pdfpagemode=UseOutlines}
\etocsetnexttocdepth{section}
\tableofcontents
-\section{\csh{thebnumexpr}, \csh{bnumeval}, \csh{evaltohex}}
+\section{\csh{bnumeval} (\csh{thebnumexpr}), \csh{evaltohex}}
\label{sec:bnumexpr}
-\LaTeX\ Package \bnumname provides |\thebnumexpr|\meta{expression}|\relax|:%
-%
-\footnote{Since |1.4|, one can use |\bnumexpr...\relax| directly in
- typesetting context, it is not mandatory to prefix it with |\bnethe| or to
- use |\thebnumexpr|.}
-%
+\LaTeX\ Package \bnumname provides |\thebnumexpr|\meta{expression}|\relax|:
it is analogous to
|\the\numexpr|\meta{expression}|\relax|, with these extensions:
\begin{itemize}
@@ -569,11 +570,20 @@ it is analogous to
separator,
\item comma separated expressions are allowed.
\end{itemize}
-There is also an alternative interface |\bnumeval|\marg{expression}, where the
-expression is fetched as braced argument. And there is
-|\evaltohex|\marg{expression} which does the same as
-|\bnumeval|\marg{expression} but with a conversion to hexadecimal notation of
-the (possibly comma separated) output. Hexadecimal input uses the |"| prefix.
+There is also a more core-level |\bnumexpr...\relax| construct%
+\footnote{Since |1.4|, one can use |\bnumexpr...\relax| directly in
+ typesetting context, it is not mandatory to prefix it with |\bnethe| or to
+ use |\thebnumexpr|.}%
+, which expands
+to a self-contained unit, rather than to explicit digit tokens (and commas).
+See \autoref{sec:differences} for some related information.
+
+There is also the alternative interface |\bnumeval|\marg{expression}, where the
+expression is fetched as braced argument.
+
+And there is |\evaltohex|\marg{expression} which does the same as |\bnumeval|
+but with a conversion to hexadecimal notation of the (possibly comma
+separated) output. Hexadecimal input uses the |"| prefix.
This package parser is a scaled-down variant of |\xintiiexpr| from package
\xintexprname, dropping support for nested structures, functions, variables,
@@ -594,32 +604,27 @@ possible to replace them by expandable macros of a custom origin.
\noindent\bneshow {---1 208 637 867 * (2 187 917 891 - 3 109 197 072)}%
\bneshoweval {(13_8089_1090-300_1890_2902)*(1083_1908_3901-109_8290_3890)}%
-\bneshow{(92_874_927_979**5-31_9792_7979**6)/30!}%
+\bneshoweval {(92_874_927_979**5-31_9792_7979**6)/30!}%
\bneshoweval {30!/20!/21/22/23/24/25/(26*27*28*29)}%
-\bneshow {13^50//12^50, 13^50/:12^50}%
+\bneshoweval {13^50//12^50, 13^50/:12^50}%
\bneshoweval {13^50/12^50, 12^50}%
-\bneshow {(1^10+2^10+3^10+4^10+5^10+6^10+7^10+8^10+9^10)^3}%
+\bneshoweval {(1^10+2^10+3^10+4^10+5^10+6^10+7^10+8^10+9^10)^3}%
\bneshoweval {100!/36^100}%
\bneshoweval {"10*"100*"1000*"A0000, 16^(1+2+3+4)*10}%
\bneshowevaltohex{"7FFFFFFF+1, "400^3, "ABCDEF*"FEDCBA}%
\section{Differences from \csh{numexpr}}
+\label{sec:differences}
Apart from the extension to big integers (i.e. exceeding the \TeX{} limit at
\number"7FFFFFFF), and the added operators, there are a number of important
differences between |\bnumexpr| and |\numexpr|:
\begin{enumerate}
-\item one may embed directly |\bnumexpr...\relax| in another one (or in
- a |\xintexpr...\relax|), but not in a |\numexpr...\relax|: it must
- then be using |\thebnumexpr...| or |\bnethe\bnumexpr...| syntax; on
- the other hand a |\numexpr...\relax| does not need to be prefixed by
- |\the| or |\number| inside |\bnumexpr...\relax|.
-
\item contrarily to |\numexpr|, the |\bnumexpr| parser stops only after having
- found (and swallowed) a mandatory ending |\relax| token,
+ found (and swallowed) a mandatory ending |\relax| token (it can arise from expansion),
-\item in particular spaces between digits do not stop |\bnumexpr|, in contrast
+\item in particular note that spaces between digits do not stop |\bnumexpr|, in contrast
with |\numexpr|:
|\the\numexpr 3 5+79\relax| expands (in one step) to \expandafter|\the\numexpr 3 5+79\relax|
@@ -627,15 +632,23 @@ differences between |\bnumexpr| and |\numexpr|:
|\thebnumexpr 3 5+79\relax| expands (in two steps) to
\expandafter\expandafter\expandafter|\thebnumexpr 3 5+79\relax|
-\item one may do |\edef\variable{\bnumexpr 1+2\relax}|, and then either use
- |\variable| in another |\bnumexpr...\relax|, or print it via
- |\bnethe\variable| (or directly since |1.4|). The computation is done at the time of the |\edef|
- (and two expansion steps suffice). This is again in contrast with
- |\numexpr...\relax| which, without |\the| (or |\number| or
- |\romannumeral|) as prefix would not expand inside an |\edef|,
+\item with |\edef\myVar{\thebnumexpr1+2\relax}|, the computation is of course
+ done at time of the |\edef|. But one is also allowed to do
+ |\edef\myVar{\bnumexpr1+2\relax}| which prepares |\myVar| as a macro which
+ can be inserted in other \bnumname expressions and behave there as a
+ self-contained pre-computed unit triggering tacit multiplication, or be
+ typeset directly if inserted in the typesetting stream.%
+%
+\footnote{Prior to |1.4|, one would have had to use |\bnethe\myVar| for
+ typesetting, or |\bnumeval{\myVar}|.}
+%
+ There is no analog with |\numexpr| as |\edef\myVar{\numexpr1+2\relax}| does
+ not pre-compute anything and furthermore |\the\numexpr2\myVar\relax| in
+ typesetting flow then triggers the |You can't use `\numexpr' in horizontal
+ mode| error.
\item expressions may be comma separated. On input, spaces are ignored,
- naturally, and on output the values are comma separated with a space after
+ and on output the values are comma separated with a space after
each comma,
\item |\bnumexpr -(1+1)\relax| is legal contrarily to |\numexpr -(1+1)\relax|
@@ -644,9 +657,6 @@ differences between |\bnumexpr| and |\numexpr|:
\item |\numexpr 2\cnta\relax| is illegal (with |\cnta| a |\count|-variable.)
But |\bnumexpr 2\cnta\relax| is perfectly legal and will do the tacit
multiplication,
-% \newcount\cnta
-% \cnta 1111
-% \thebnumexpr 2\cnta\relax
\item more generally, tacit multiplication applies in front of parenthesized
sub-expressions, or sub |\bnumexpr...\relax| (or |\numexpr...\relax|), or
@@ -657,13 +667,34 @@ differences between |\bnumexpr| and |\numexpr|:
\end{enumerate}
+As hinted above |\bnumexpr...\relax| differs from |\thebnumexpr...\relax| as
+the latter expands to explicit digit tokens, but the former expands to a
+private self-contained format which can serve as sub-unit in other
+expressions, or be used inside |\edef|. Since |1.4| the former idiom can also
+be inserted directly inside the typesetting stream, or be written out to an
+external file where it will expand to some control sequences, braces, and
+character tokens, all with their standard catcodes.
+
+One can use |\numexpr...\relax| as a sub-unit in |\bnumexpr...\relax| but the
+reverse does not apply: it would either cause an error or an
+anticipated end to the |\numexpr| which will think having hit a |\relax|.
+
An important thing to keep in mind is that if one has a calculation
whose result is a small integer, acceptable by \TeX{} in |\ifnum| or
count assignments, this integer produced by |\thebnumexpr| is not
self-delimiting, contrarily to a |\numexpr...\relax| construct: the
situation is exactly as with a |\the\numexpr...\relax|, thus one may
need to terminate the number to avoid premature expansion of following
-tokens; for example with the |\space| token.
+tokens; for example with the |\space| control sequence. When using |\bnumeval{...}|
+syntax as in
+\begin{verbatim}
+\ifnum\bnumeval{...}
+...
+\fi
+\end{verbatim}
+the end of line will insert a terminating space token. Again, here
+|\bnumeval{...}| must produce an integer acceptable to \TeX, i.e. at most
+{\number"7FFFFFFF} in absolute value.
\section{Printing big numbers}
@@ -737,7 +768,8 @@ the following way:
\usepackage{xintcore}
\bnumexprsetup{add=\xintiiAdd, sub=\xintiiSub, mul=\xintiiMul,
divround=\xintiiDivRound, div=\xintiiDivFloor,
- mod=\xintiiMod, pow=\xintiiPow, fac=\xintiiFac}
+ mod=\xintiiMod, pow=\xintiiPow, fac=\xintiiFac,
+ opp=\xintiiOpp}%
\end{verbatim}
If
@@ -748,27 +780,22 @@ multiplication will be changed.
Naturally it is up to the user to load the appropriate package for
the alternative macros.
-As per the macros which are the key values, they must have the
-following properties:
-\begin{enumerate}
-\item they must be completely expandable (in the sense of an |\edef|
- or a |\csname...\endcsname|.)
-\item they must fully expand their arguments first (in the sense of
- |\romannumeral-`0|.)
-\item they must output a number with no leading zeros, at most one
- minus sign and no plus sign.
-\end{enumerate}
-The first two items are truly mandatory, the last one may be not
-obeyed if the extra key |opp| is used with \csa{bnumexprsetup} to
-specify a suitable macro for the opposite of a number. This macro will
-be presented not with a braced argument but directly with a sequence
-of digits (either as gathered by the parser which skips leading
-zeros, or as produced by the other arithmetic macros and then there
-could be a minus, or even a plus if macros others than the ones from
-\xintcorename have been used).
-Thus, |opp| could identify a plus sign |+| upfront and then act
-adequately.\footnote{see \csa{BNE_Op_opp} in the code for the
- default.}
+The macros serving as custom user replacements must be \emph{f}-expandable.%
+%
+\footnote{Prior to |1.4|, only \emph{x}-expandability was required. The author
+ could relax again the constraint, if asked to do so. Or perhaps simply add
+ an option for it.}
+%
+(except for the computation of factorials, which only has to be
+\emph{x}-expandable).
+
+They will by default receive arguments composed of explicit digit tokens, with
+no leading zeros, with at most one leading minus sign and no plus sign.
+
+The format of these arguments may depend on what the |opp=\foo| replacement
+macro does. If the custom |\foo| inserts a |+| when taking the opposite of a
+negative number, then the custom macros for arithmetic (and the |\foo| macro
+itself) must be able to handle arguments starting optionally with such a |+|.
Macro |\bnumexprsetup| can be used multiple times in the same document, thus
allowing to switch math engines or to remap operators to some other arithmetic
@@ -792,6 +819,8 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\noindent\kern\parindent\input README.md
\endgroup }\x
+%\clearpage
+
\section{Changes}
%\small
\begin{description}
@@ -816,29 +845,65 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
% \label{sec:bnumexprcode}
% \etocdefaultlines
% \localtableofcontents
+% \etocmarkbothnouc{Package \bnumnameimp implementation}
%
% Comments are sparse. Actually at |1.4|, there are simply no comments. I
% transferred from \xintexprname its |\expanded| based infra-structure from
-% its own |1.4| release of January 2020. It is a possibility that, even
-% though I did remove very large chunks of unneeded macros, in the end, some
-% more simplifications could have been considered here.
+% its own |1.4| release of January 2020.
%
% Error handling by the parser is kept to a minimum; if something goes wrong,
% the offensive token gets discarded, and it is not even always the case that
% some expandable error message is issued.
%
+% A few comments at |1.4a|:
+% \begin{itemize}
+% \item It looked a bit costly and probably would have been mostly useless to
+% end users to integrate in \bnumname support for nested structures via
+% square brackets [, ], which is in \xintexprname since its January 2020
+% |1.4| release. But some underlying related architecture remains here; we
+% could make some micro-gains probably but diverging from upstream code
+% would make maintenance a nightmare.
+% \item The |\bnumexpr\relax| syntax creating an empty ople is by itself now
+% legal, and can be injected (comma separated) in an expression, keeping it
+% invariant, however |\bnumeval{}| ends in a |File ended while scanning use
+% of \BNE_print_c| error because |\BNEprint| makes the tacit requirement
+% that the 1D ople to output has at least one item.
+% \item Formerly, the |\csname...\endcsname| encapsulation technique had the
+% after-effect to allow the macros supporting the infix operators to be only
+% x-expandable. At |1.4|, I could have still allowed only x-expandable
+% macros, but, keeping in sync with upstream, I have used only a
+% |\romannumeral| trigger and did not insert an |\expanded|, so now the
+% support macros must be f-expandable. The |1.4a| release fixes the related
+% user documentation of |\bnumexprsetup| which was not updated at |1.4|.
+% The support macro for the factorial however needs only be x-expandable.
+% \item Also, I simply do not understand why the legacy user documentation
+% said that the support macros were supposed to f-expand their arguments, as
+% they are used only with arguments being explicit digit tokens (and
+% optional minus sign).
+% \item I hesitated a bit about making the decimal to hexadecimal and
+% hexadecimal to decimal support macros customizable, but dropped the
+% idea. Loading \xintbinhexname unconditionally has also the advantage to
+% not have to define some \xintkernelname provided helper macros; and it
+% still does not load \xintcorename, so is keeping dependencies somewhat low
+% and the |custom| option significant.
+% \item I had fleetingly consider a parser |\hexexpr| where input is
+% hexadecimal with no |"| prefix, but implementing this basically means
+% duplicating with new names a large chunk of the parser code to have parser
+% specific |"getnext"| macros for example. Not worth it.
+% \end{itemize}
+%
% \subsection{Package identification and catcode setup}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}%
-\ProvidesPackage{bnumexpr}[2021/05/12 v1.4 Expressions with big integers (JFB)]%
+\ProvidesPackage{bnumexpr}[2021/05/13 v1.4a Expressions with big integers (JFB)]%
% \end{macrocode}
% \subsection{Load unconditionally xintbinhex}
% Newly done at |1.4|. Formerly, \bnumname had no dependency if loaded
% with option |custom|. But for |1.4| release I have decided to add
% unconditional support for hexadecimal notation.
%
-% Let's require the most recent xint date at time of
-% writing. We should check for availability of \string\expanded\space but well.
+% Let's require the most recent \xintname date at time of
+% writing. We should check for availability of |\expanded| but well.
%
% \begin{macrocode}
\RequirePackage{xintbinhex}[2021/05/10]%
@@ -858,6 +923,9 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
}%
% \end{macrocode}
% \subsection{Package options}
+% The keys should have been |Add|, |Sub|, \dots, not |add|, |sub|, \dots, so
+% internally macros |\BNE_Op_Add| etc\dots\ macro names would be used, but well,
+% let's simply leave with this.
% \begin{macrocode}
\def\BNEtmpa {0}%
\DeclareOption {custom}{\def\BNEtmpa {1}}%
@@ -869,7 +937,8 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\RequirePackage{xintcore}[2021/05/10]%
\bnumexprsetup{add=\xintiiAdd, sub=\xintiiSub, mul=\xintiiMul,
divround=\xintiiDivRound, div=\xintiiDivFloor,
- mod=\xintiiMod, pow=\xintiiPow, fac=\xintiiFac}%
+ mod=\xintiiMod, pow=\xintiiPow, fac=\xintiiFac,
+ opp=\xintiiOpp}%
}%
% \end{macrocode}
% Strangely those three are not defined in xintkernel.sty, but only in xint.sty
@@ -1148,12 +1217,17 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
}%
}%
\let\BNE_done\space
+\def\BNE_getop_legacy #1%
+{%
+ \expanded{\unexpanded{{#1}}\expandafter}\romannumeral`&&@\BNE_getop
+}%
\expandafter\BNE_tmpa
\csname BNE_start\expandafter\endcsname
\csname BNE_check\expandafter\endcsname
\csname BNE_checkp\expandafter\endcsname
\csname BNE_op_-xii\expandafter\endcsname
\csname BNE_extra_)\endcsname
+\catcode`) 11
\def\BNE_tmpa #1#2#3#4#5#6%
{%
\def #1##1% op_(
@@ -1191,7 +1265,6 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\csname BNE_check-_)\expandafter\endcsname
\csname BNE_checkp_)\expandafter\endcsname
\csname BNE_op_-xii\endcsname
-\catcode`) 11
\let\BNE_precedence_)\xint_c_i
\def\BNE_missing_)
{\XINT_expandableerror{Sorry to report a missing ) at the end of this journey.}%
@@ -1199,6 +1272,11 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\catcode`) 12
% \end{macrocode}
% \subsection{The comma as binary operator}
+% At |1.4|, it is simply a union operator for 1D oples. Inserting directly
+% here a |<space><comma>| separator (as in earlier releases) in accumulated
+% result would avoid having to do it on output but to the cost of diverging
+% from \xintexprname upstream code, and to have to let the |\evaltohex| output
+% routine handle comma separated values rather than braced values.
% \begin{macrocode}
\def\BNE_tmpa #1#2#3#4#5%
{%
@@ -1234,6 +1312,15 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\expandafter\let\csname BNE_precedence_,\endcsname\xint_c_iii
% \end{macrocode}
% \subsection{The minus as prefix operator of variable precedence level}
+% This |\BNE_Op_opp| causes trouble as at |1.4| it must be f-expandable,
+% whereas earlier it expanded inside |\csname...\endcsname| context, so I
+% could define it as {\catcode`\#12 |\if-#1\else\if0#10\else-#1\fi\fi|} where
+% {\catcode`\#12 |#1|} was the
+% first token of unbraced argument but this meant at |1.4| an added
+% |\xint_firstofone| here. Well let's return to sanity at |1.4a| and not add
+% the |\xint_firstofone| and simply default |\BNE_Op_opp| to |\xintiiOpp|,
+% which it should have been all along! And on this occasion let's trim user
+% documentation of irrelevant complications.
% \begin{macrocode}
\def\BNE_tmpb #1#2#3#4#5%
{%
@@ -1245,7 +1332,7 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\def #2##1##2##3% \BNE_exec_-<level>
{%
\expandafter ##1\expandafter ##2\expandafter
- {\expandafter{\romannumeral`&&@\expandafter\BNE_Op_opp\xint_firstofone##3}}%
+ {\expandafter{\romannumeral`&&@\BNE_Op_opp##3}}%
}%
\def #3##1% \BNE_check-_-<level>
{%
@@ -1277,9 +1364,15 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\BNE_tmpa {xiv}%
\BNE_tmpa {xvi}%
\BNE_tmpa {xviii}%
-\def\BNE_Op_opp #1{\if-#1\else\if0#10\else-#1\fi\fi }%
% \end{macrocode}
% \subsection{The infix operators.}
+% I could have at the |1.4| refactoring injected usage of |\expanded| here,
+% but kept in sync with upstream \xintexprname code.
+%
+% Macro names are somewhat bad and there is much risk of confusion in future
+% maintenance of |\BNE_Op_| prefix (used for |\BNE_Op_add| etc...; besides
+% this should have been |\BNE_Op_Add|) and |\BNE_op_| prefix (used for
+% {\catcode`+ 11 |\BNE_op_+|} etc...).
% \begin{macrocode}
\def\BNE_defbin_c #1#2#3#4#5#6#7%
{%
@@ -1337,6 +1430,7 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\expandafter\let\csname BNE_precedence_***\endcsname \xint_c_xvi
% \end{macrocode}
% \subsection{! as postfix factorial operator}
+% This one uses |\expanded|.
% \begin{macrocode}
\catcode`! 11
\let\BNE_precedence_! \xint_c_xx
@@ -1354,23 +1448,8 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
% \MakePercentComment
%</package>
%<*dtx>
-\DeleteShortVerb{\|}
-\CharacterTable
- {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
- Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
- Digits \0\1\2\3\4\5\6\7\8\9
- Exclamation \! Double quote \" Hash (number) \#
- Dollar \$ Percent \% Ampersand \&
- Acute accent \' Left paren \( Right paren \)
- Asterisk \* Plus \+ Comma \,
- Minus \- Point \. Solidus \/
- Colon \: Semicolon \; Less than \<
- Equals \= Greater than \> Question mark \?
- Commercial at \@ Left bracket \[ Backslash \\
- Right bracket \] Circumflex \^ Underscore \_
- Grave accent \` Left brace \{ Vertical bar \|
- Right brace \} Tilde \~}
-\CheckSum {949}
-\makeatletter\check@checksum\makeatother
-\Finale
+\DeleteShortVerb{\|}%
+\CheckSum {947}%
+\makeatletter\check@checksum\makeatother%
+\Finale%
%% End of file xint.dtx