From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/numprint/nbaseprt.dtx | 662 +++++++++++++++++++++++++++++
 1 file changed, 662 insertions(+)
 create mode 100644 macros/latex/contrib/numprint/nbaseprt.dtx

(limited to 'macros/latex/contrib/numprint/nbaseprt.dtx')

diff --git a/macros/latex/contrib/numprint/nbaseprt.dtx b/macros/latex/contrib/numprint/nbaseprt.dtx
new file mode 100644
index 0000000000..f8119ad208
--- /dev/null
+++ b/macros/latex/contrib/numprint/nbaseprt.dtx
@@ -0,0 +1,662 @@
+% \iffalse meta comment
+% File: nbaseprt.dtx Copyright (C) 2004 Harald Harders
+% \fi
+%
+% \iffalse
+%
+%<*driver>
+\listfiles
+\documentclass[ngerman,english,a4paper]{ltxdoc}
+\usepackage[T1]{fontenc}
+\IfFileExists{nbaseprt.sty}{%
+  \usepackage{nbaseprt}
+}{%
+  \GenericWarning{nbaseprt.dtx}{Package file nbaseprt.sty not found
+    (Documentation will be messed up!^^J^^A 
+    Generate nbaseprt.sty by (La)TeXing numprint.ins, process
+    nbaseprt.dtx again)^^J}\stop
+}
+\IfFileExists{eco.sty}{%
+  \usepackage{eco}
+  \renewcommand*\ttdefault{cmtt}
+}{%
+  \GenericWarning{nbaseprt.dtx}{Package file eco.sty not found
+    (Documentation will be less clear than possible)}
+}
+\usepackage{longtable}
+\usepackage{mathcomp}
+\usepackage{babel}
+\usepackage{url}
+\usepackage{color}
+\IfFileExists{booktabs.sty}{\usepackage{booktabs}}{%
+  \GenericWarning{nbaseprt.dtx}{Package file booktabs.sty not
+    found. Documentation formatting will be poor}%
+  \def\toprule\hline
+  \def\midrule\hline
+  \def\bottomrule\hline}
+\GetFileInfo{nbaseprt.sty}
+\title{The nbaseprt package}
+\author{Harald Harders\\\texttt{harald.harders@gmx.de}}
+\date{Version \fileversion, \filedate; printed \today}
+\newlength{\tempdima}%
+\makeatletter
+\renewenvironment{table}[1][]{%
+  \@float{table}[#1]%
+  \centering%
+  \setlength{\tempdima}{\abovecaptionskip}%
+  \setlength{\abovecaptionskip}{\belowcaptionskip}%
+  \setlength{\belowcaptionskip}{\tempdima}%
+  }{%
+\end@float
+}
+\def\meta@font@select{\normalfont\itshape}
+\makeatother
+%%
+\EnableCrossrefs
+\CodelineIndex
+\DoNotIndex{\def,\edef,\let,\newcommand,\newenvironment,\newcounter}
+\DoNotIndex{\setcounter,\space,\if,\else,\fi,\empty,\@empty,\ifx,\fi}
+\DoNotIndex{\ifnum,\fi,\expandafter,\csname,\endcsname,\the}
+\DoNotIndex{\MessageBreak,\message,\newlength,\newif,\xdef,\newcount}
+\DoNotIndex{\begingroup,\endgroup,\,,\@tempcnta,\@tempdima,\advance}
+\DoNotIndex{\ensuremath,\filedate,\fileversion,\docdate}
+\DoNotIndex{\mathit,\mathrm,\mathsf,\nprt@tmp,\nprt@tmpnum,\relax}
+\DoNotIndex{\protect,\renewcommand,\setlength,\settowidth,\stepcounter}
+\DoNotIndex{\string}
+\CodelineNumbered
+\RecordChanges
+\CheckSum{343}
+\begin{document}
+ \DocInput{nbaseprt.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \changes{0.11}{2004/12/14}{Usage of \texttt{eco.sty} in
+%   \texttt{nbaseprttest.tex} only if available}%
+% \changes{0.10}{2004/08/08}{Total new implementation}%
+%
+% \maketitle
+% \begin{abstract}
+% \noindent
+% This package prints integer numbers in different bases (octal,
+% decimal, hexadecimal, binary) similarly to the |numprint| package.
+% But here, the number of digits within one group depends on the
+% base.
+% 
+% \textbf{This version of |nbaseprt.sty| is a BETA VERSION.
+% The main command \cs{nbaseprint} will stay stable but
+% all configuration commands and the output of
+% \cs{nbaseprint} may change in future.
+% Please give me feedback what can be improved and if the
+% abbreviations for the different number bases are correct.}
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section*{Copyright}
+% Copyright 2004 Harald Harders.
+%
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt; either
+% version 1 of the License, or any later version.
+%
+%
+% \section{Load the package}
+%
+% To use this package place
+% \begin{verbatim}
+%\usepackage{nbaseprt}\end{verbatim}
+% in the preamble of your document.
+% The |nbaseprt| package calls the |numprint| package and parses all
+% package options to it.
+% Please read the documentation for the |numprint| package for
+% details.
+% If you want to use both the |numprint| and the |nbaseprt| package
+% either load |numprint| first given all options, e.g.,
+% \begin{verbatim}
+%\usepackage[autolanguage,nosepfour]{numprint}
+%\usepackage{nbaseprt}\end{verbatim}
+% or only load the |nbaseprt| package, giving it the options for
+% |numprint|:
+% \begin{verbatim}
+%\usepackage[autolanguage,nosepfour]{nbaseprt}\end{verbatim}
+%
+%
+% \section{Print numbers}
+%
+% \DescribeMacro{\nbaseprint}%
+% Numbers are printed using the \cs{nbaseprint\marg{number}} command.
+% Which number base is used is determined by parsing the
+% \meta{number}.
+%
+% The type can be given by preceding the number by ``|0x|'', ``|0o|'',
+% ``|0d|'', or ``|0b|'' (or the uppercase characters) for hexadecimal,
+% octal, decimal, or binary numbers, respectively.
+% For example,
+% \begin{verbatim}
+%$\nbaseprint{0x1A0E3F}$, $\nbaseprint{0o377377}$,
+%$\nbaseprint{0d192314}$, $\nbaseprint{0b11010110}$\end{verbatim}
+%
+% Alternatively, hexadecimal and octal numbers can be given by
+% appending ``h'', ``H'', ``o'', or ``O'':
+% \begin{verbatim}
+%$\nbaseprint{1A0E3Fh}$, $\nbaseprint{377377o}$\end{verbatim}
+%
+% If neither is given, the number defaults to decimal.
+%
+% The format of the printed numbers is similar to the possible input
+% formats.
+% By default, the numbers are preceded by ``|0x|'', ``|0o|'',
+% ``|0d|'', or ``|0b|'', e.g.
+%
+% \begin{quotation}
+%   $\nbaseprint{0x1A0E3F}$, $\nbaseprint{0o377377}$,
+%   $\nbaseprint{0d192314}$, $\nbaseprint{0b11010110}$
+% \end{quotation}
+%
+% \DescribeMacro{\nbaseposttext}%
+% You can change this by using \cs{nbaseposttext}.
+% This leads to 
+% \begin{quotation}
+%   \nbaseposttext
+%   $\nbaseprint{0x1A0E3F}$, $\nbaseprint{0o377377}$,
+%   $\nbaseprint{0d192314}$, $\nbaseprint{0b11010110}$
+% \end{quotation}
+%
+% \DescribeMacro{\nbasepretext}%
+% You can switch back to the default behaviour using \cs{nbasepretext}
+% or by using \cs{nbaseposttext} inside a group.
+%
+%
+% If you want to print negative numbers the sign may be written before
+% or after ``|0x|'', ``|0o|'', ``|0d|'', or ``|0b|''.
+% Some examples:
+% \begin{verbatim}
+%$\nbaseprint{-0x1A0E3F}$, $\nbaseprint{0o-377377}$,
+%$\nbaseprint{0d+-192314}$, $\nbaseprint{0b\pm 11010110}$\end{verbatim}
+% which lead to
+% \begin{quotation}
+% $\nbaseprint{-0x1A0E3F}$, $\nbaseprint{0o-377377}$,
+% $\nbaseprint{0d+-192314}$, $\nbaseprint{0b\pm 11010110}$
+% \end{quotation}
+% In the printout, the sign always is written after the base-specific
+% string. (is this correct?)
+%
+%
+% \section{Customization}
+%
+% \subsection{Padding a number on the left side}%
+% 
+% \DescribeMacro{\nplpadding}%
+% \DescribeMacro{\npnolpadding}%
+% Sometimes it is desireable to have a number of a fixed length with
+% the missing digits filled with a character (mostly the character
+% ``0'', so this is the default).
+% This can be achieved calling
+% \cs{nplpadding\oarg{character}\marg{digits}} borrowed from the
+% |numprint| package.
+% For example,
+% \begin{verbatim}
+%\nplpadding{6}%
+%$\nbaseprint{0xA03E}$, $\nbaseprint{0o1234}$\end{verbatim}
+% leads to \begingroup
+% ``\nplpadding{6}$\nbaseprint{0xA03E}$, $\nbaseprint{0o1234}$''
+% \endgroup
+% 
+% \cs{npnolpadding} switches padding off.
+%
+%
+% \section{International support}%
+% \label{sec:international}%
+%
+% |nbaseprt| uses the thousand separator from |numprint|.
+% Since this package uses the German ``\cs{,}'' by default |nbaseprt|
+% does this, too.
+% Using the package option |autolanguage| this can be fixed.
+% If you are using this option without the |babel| package the
+% settings are switched to English at \cs{begin\{document\}}:
+% separator ``\texttt{,}''.
+% If using |babel| the separator is changed automatically when
+% switching to a supported language.
+%
+% If you do not want to use the |autolanguage| option you may use the
+% |numprint| command \cs{npthousandsep} command to change the
+% separator.
+%
+%
+% \section{Print aligned numbers in tabulars}%
+% \label{sec:tabular}%
+%
+% Sorry, not programmed, yet.
+%
+%
+%
+% \appendix
+%
+% \section{Lists of options and commands}
+%
+% This section contains lists of all package options resp.\ available
+% commands. 
+% Items that belong together and may be exclusive are printed in
+% groups together.
+%
+% \subsection{Package options}%
+% \label{sec:package-options}%
+%
+% |nbaseprt| supports all options of the |numprint| package.
+% In this list, only the ones that are new or have a different meaning
+% are listed.
+%
+% \begingroup
+% \newcommand*\default{$^{*}$}%
+% The default values are marked by \default.
+% \begin{longtable}[l]{%
+%     @{}>{\ttfamily}p{0.30\linewidth}@{}p{0.70\linewidth}@{}}
+%   np& Define the shortcuts \cs{np} for \cs{numprint} and \cs{nbp}
+%   for \cs{nbaseprint}.
+% \end{longtable}
+% \endgroup
+%
+% \subsection{Commands}
+%
+% Commands that begin with \cs{np} are borrowed from |numprint|.
+% Here, the new commands and |numprint| commands that have a special
+% meaning for |nbaseprt| are listed here.
+%
+% \begin{longtable}[l]{%
+%     @{}>{\ttfamily \char`\\}p{0.3\linewidth}@{}p{0.7\linewidth}@{}}
+%   npaddplus& Add a plus to a number without a sign.\\
+%   npnoaddplus& Don't do that.\\[\medskipamount]
+%   nbp& Shortcut for \cs{nbaseprint} (only available with package
+%   option~\texttt{np}).\\
+%   nbaseprint& Typesets a number (the package's main
+%   command).\\[\medskipamount]
+%   npthousandsep& Change the separator between the digit
+%   groups.\\[\medskipamount]
+%   nplpadding& Declare up to how many digits the number will be padded at
+%   the lefthand side. \\
+%   npnolpadding& Switch off padding. \\[\medskipamount]
+%   nbaserpretext& Switches on to precede the number by ``0x'',
+%   ``0o'', or ``0d''. \\
+%   nbaserposttext& Switches on to append ``h'', ``o'', or nothing to
+%   the number.
+% \end{longtable}
+%
+%
+% \section{To do}
+%
+% \begin{itemize}
+% \item Add table support.
+% \item Better customization for the pre and the post text.
+% \item Parse the argument for invalid numbers.
+% \item Proof output format of numbers.
+% \end{itemize}
+%
+%
+% \StopEventually{\PrintChanges \PrintIndex}
+%
+% \section{The implementation}
+% \iffalse
+%<*package>
+% \fi
+% Heading of the package:
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{nbaseprt}
+  [2004/12/14  v0.11  Print numbers with numerical bases (HH)]
+%    \end{macrocode}
+% Warning, that this is a beta version.
+%    \begin{macrocode}
+\typeout{^^J*************************************************************}
+\PackageWarningNoLine{nbaseprt}{This version of nbaseprt.sty is a BETA
+  VERSION.\MessageBreak
+  The main command \string\nbaseprint\space will stay stable
+  but\MessageBreak
+  all configuration commands and the output of\MessageBreak
+  \string\nbaseprint\space may change in future.\MessageBreak
+  Please give me feedback what can be improved and if\MessageBreak
+  the abbreviations for the different number bases are\MessageBreak
+  correct}
+\typeout{*************************************************************^^J}
+%    \end{macrocode}
+% Pass all unknown options to |numprint.sty| to avoid conflicts when
+% loading |numprint| seperately.
+%    \begin{macrocode}
+\DeclareOption{np}{%
+  \newcommand*\nbp{\nbaseprint}%
+  \PassOptionsToPackage{np}{numprint}%
+}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{numprint}}
+\ProcessOptions\relax
+%    \end{macrocode}
+% Load package |numprint| because |nbaseprt| shares some commands with
+% it.
+%    \begin{macrocode}
+\RequirePackage{numprint}
+%    \end{macrocode}
+% Easier if-then clauses.
+%    \begin{macrocode}
+\RequirePackage{ifthen}
+%    \end{macrocode}
+% Dummy definitions to get an error in case of incompatibility with
+% other packages.
+%    \begin{macrocode}
+\newcommand*\nbprt@base{}
+\newcommand*\nbprt@number{}
+%    \end{macrocode}
+% \begin{macro}{\nbprt@testbase}
+% Test which numeric base is used in the argument of \cs{nbaseprt}.
+%    \begin{macrocode}
+\newcommand*\nbprt@testbase{}
+\def\nbprt@testbase#1#2#3\@empty{%
+%    \end{macrocode}
+% Test if number begins with ``|0x|'', ``|0X|'', or ``|"|'' which all mean
+% that it is given as hexadecimal number.
+%    \begin{macrocode}
+  \ifthenelse{\equal{#1#2}{0x}\or\equal{#1#2}{0X}\or\equal{#1}{"}}{%
+    \gdef\nbprt@base{hex}%
+%    \end{macrocode}
+% Store the rest of the argument as number in \cs{nbprt@number}.
+%    \begin{macrocode}
+    \ifthenelse{\equal{#1}{"}}{%
+      \edef\nbprt@number{#2#3}%
+    }{%
+      \edef\nbprt@number{#3}%
+    }%
+  }{%
+%    \end{macrocode}
+% Test if number begins with ``|0o|'', ``|0O|'', or ``|'|'' which all
+% mean that it is given as octal number.
+%    \begin{macrocode}
+    \ifthenelse{\equal{#1#2}{0o}\or\equal{#1#2}{0O}\or\equal{#1}{'}}{%
+      \gdef\nbprt@base{oct}%
+%    \end{macrocode}
+% Store the rest of the argument as number in \cs{nbprt@number}.
+%    \begin{macrocode}
+      \ifthenelse{\equal{#1}{'}}{%
+        \edef\nbprt@number{#2#3}%
+      }{%
+        \edef\nbprt@number{#3}%
+      }%
+    }{%
+%    \end{macrocode}
+% Test if number begins with ``|0d|'' or ``|0D|'' which means that it
+% is given as decimal number.
+%    \begin{macrocode}
+      \ifthenelse{\equal{#1#2}{0d}\or\equal{#1#2}{0D}}{%
+        \gdef\nbprt@base{dec}%
+%    \end{macrocode}
+% Store the rest of the argument as number in \cs{nbprt@number}.
+%    \begin{macrocode}
+        \edef\nbprt@number{#3}%
+      }{%
+%    \end{macrocode}
+% Test if number begins with ``|0b|'' or ``|0B|'' which means that it
+% is given as decimal number.
+%    \begin{macrocode}
+        \ifthenelse{\equal{#1#2}{0b}\or\equal{#1#2}{0B}}{%
+          \gdef\nbprt@base{bin}%
+%    \end{macrocode}
+% Store the rest of the argument as number in \cs{nbprt@number}.
+%    \begin{macrocode}
+          \edef\nbprt@number{#3}%
+        }{%
+%    \end{macrocode}
+% If none of the above is the case the number defaults to decimal.
+%    \begin{macrocode}
+          \def\nbprt@base{dec}%
+          \edef\nbprt@number{#1#2#3}%
+%    \end{macrocode}
+% But there are also other possibilities to mark the number as
+% hexadecimal or octal, by appending ``|h|'', ``|H|'', ``|o|'', or
+% ``|O|''.
+% These tests are performed by seperate macros.
+%    \begin{macrocode}
+          \nbprt@ishex#1#2#3h\@empty\@empty
+          \nbprt@isHex#1#2#3H\@empty\@empty
+          \nbprt@isoct#1#2#3o\@empty\@empty
+          \nbprt@isOct#1#2#3O\@empty\@empty
+        }%
+      }%
+    }%
+  }%
+%    \end{macrocode}
+% Test for a sign before the number.
+%    \begin{macrocode}
+  \expandafter\nbprt@testsign\nbprt@number\@empty\@empty\@empty
+%    \end{macrocode}
+% Reset \cs{nbprt@string} that holds the number in formatted form.
+%    \begin{macrocode}
+  \def\nbprt@string{}%
+%    \end{macrocode}
+% Reset the counters that help formatting the number.
+%    \begin{macrocode}
+  \@tempcnta=0
+  \@tempcntb=0
+%    \end{macrocode}
+% Parse the number, done by \cs{nbprt@parsenum}.
+%    \begin{macrocode}
+  \expandafter\nbprt@parsenum\nbprt@number\@empty
+%    \end{macrocode}
+% If left padding is switched on, add the leading characters to gain
+% the specified length.
+% See \cs{nbprt@parsenum} for explanation of the algorithm.
+%    \begin{macrocode}
+  \whiledo{\the\@tempcntb<\nprt@lpaddigits}{%
+    \ifnum\@tempcnta=\csname nbprt@digitgroup@\nbprt@base\endcsname\relax
+      \edef\nbprt@string{\nprt@separator@before\nbprt@string}%
+      \@tempcnta=0
+    \fi
+    \edef\nbprt@string{\nprt@lpadchar\nbprt@string}%
+    \advance\@tempcntb 1
+    \advance\@tempcnta 1
+  }%
+%    \end{macrocode}
+% Print the text that marks the base of the number before the number
+% itself.
+%    \begin{macrocode}
+  \ifnbprt@pretext
+    \csname nbprt@pretext@\nbprt@base\endcsname
+    \nbprt@presep
+  \fi
+%    \end{macrocode}
+% Print the sign (use routine of |numprint|).
+%    \begin{macrocode}
+  \nprt@printsign{mantissa}\nbprt@sign\@empty
+%    \end{macrocode}
+% Print the modified number with separators.
+%    \begin{macrocode}
+  \nbprt@string
+%    \end{macrocode}
+% Print the text that marks the base of the number after the number
+% itself.
+%    \begin{macrocode}
+  \ifnbprt@pretext
+  \else
+    \nbprt@postsep
+    \csname nbprt@posttext@\nbprt@base\endcsname
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nbprt@testsign}
+%    \begin{macrocode}
+\def\nbprt@testsign#1#2#3\@empty{%
+%  ``#1'', ``#2'', ``#3'':
+  \nprt@IfCharInString{#1}{\nprt@signlist}{%
+    \edef\nbprt@number{#2#3}%
+    \edef\nbprt@sign{#1}%
+    \ifx\nbprt@sign\nprt@plus@test
+      \def\nprt@tmp{#2}%
+      \ifx\nprt@tmp\nprt@minus@test
+        \edef\nbprt@sign{+-}%
+        \edef\nbprt@number{#3}%
+      \fi
+    \else
+      \ifx\nbprt@sign\nprt@plusminus@test
+        \edef\nbprt@sign{+-}%
+      \fi
+    \fi
+  }{%
+    \edef\nbprt@number{#1#2#3}%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% Test if the number is marked as hexadecimal by appending an ``|h|''.
+%    \begin{macrocode}
+\def\nbprt@ishex#1h#2\@empty{%
+%    \end{macrocode}
+% If |#2| is |h|, the number has ended with an |h| because this macro
+% has been called with an appended |h| in addition to the |h| that is
+% the last character of the number.
+%    \begin{macrocode}
+  \ifthenelse{\equal{#2}{h}}{%
+%    \end{macrocode}
+% Set the base and redefine the number.
+%    \begin{macrocode}
+    \def\nbprt@base{hex}%
+    \edef\nbprt@number{#1}%
+  }{}%
+}    
+%    \end{macrocode}
+% Test if the number is marked as hexadecimal by appending an ``|H|''.
+%    \begin{macrocode}
+\def\nbprt@isHex#1H#2\@empty{%
+  \ifthenelse{\equal{#2}{H}}{%
+    \def\nbprt@base{hex}%
+    \edef\nbprt@number{#1}%
+  }{}%
+}    
+%    \end{macrocode}
+% Test if the number is marked as octal by appending an ``|o|'' or an
+% ''|O|''.
+%    \begin{macrocode}
+\def\nbprt@isoct#1o#2\@empty{%
+  \ifthenelse{\equal{#2}{o}}{%
+    \def\nbprt@base{oct}%
+    \edef\nbprt@number{#1}%
+  }{}%
+}    
+\def\nbprt@isOct#1O#2\@empty{%
+  \ifthenelse{\equal{#2}{O}}{%
+    \def\nbprt@base{oct}%
+    \edef\nbprt@number{#1}%
+  }{}%
+}    
+%    \end{macrocode}
+% \begin{macro}{\nbprt@parsenum}
+% Parses the given number and generates the formatted string in
+% \cs{nbprt@string}, working recursively.
+% |#1| is the first character in the left number, |#2| is the rest.
+%    \begin{macrocode}
+\def\nbprt@parsenum#1#2\@empty{%
+%    \end{macrocode}
+% If |#2| is not \cs{@empty} call \cs{nbprt@parsenum} recursively to
+% parse the number backwards.
+%    \begin{macrocode}
+  \ifthenelse{\equal{#2}{\@empty}}{}{%
+    \expandafter\nbprt@parsenum#2\@empty
+  }%
+%    \end{macrocode}
+% Test if \cs{@tempcnta} has reached the number of digits that are
+% printed as group for the given number base (stored in
+% \cs{nbprt@digitgroup@}\meta{\cs{nbprt@base}}).
+%    \begin{macrocode}
+  \ifnum\@tempcnta=\csname nbprt@digitgroup@\nbprt@base\endcsname\relax
+%    \end{macrocode}
+% Precede the formatted number by the separator
+% \cs{nprt@separator@before}, taken from |numprint.sty|.
+%    \begin{macrocode}
+    \edef\nbprt@string{\nprt@separator@before\nbprt@string}%
+%    \end{macrocode}
+% Reset the number of handled characters in this group.
+%    \begin{macrocode}
+    \@tempcnta=0
+  \fi
+%    \end{macrocode}
+% Precede the formatted number by the current character while forcing
+% uppercase hexadecimal numbers.
+%    \begin{macrocode}
+  \edef\nbprt@string{%
+    \uppercase{\ifmmode\mathrm{#1}\else#1\fi}%
+    \nbprt@string}%
+%    \end{macrocode}
+% Count this digit for the current group (\cs{@tempcnta}) and for the
+% total number of digits (\cs{@tempcntb}).
+%    \begin{macrocode}
+  \advance\@tempcntb 1
+  \advance\@tempcnta 1
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nbasepretext}
+% Provide a command that switches to marking the numbers before the
+% number itself.
+%    \begin{macrocode}
+\newif\ifnbprt@pretext
+\newcommand*\nbasepretext{\nbprt@pretexttrue}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nbaseposttext}
+% Provide a command that switches to marking the numbers after the
+% number itself.
+%    \begin{macrocode}
+\newcommand*\nbaseposttext{\nbprt@pretextfalse}
+%    \end{macrocode}
+% \end{macro}
+% Provide the commands that print the text before or after the number.
+%    \begin{macrocode}
+\def\nbprt@pretext@hex{0\ifmmode\mathrm{x}\else x\fi}%
+\def\nbprt@pretext@oct{0\ifmmode\mathrm{o}\else o\fi}%
+\def\nbprt@pretext@dec{0\ifmmode\mathrm{d}\else d\fi}%
+\def\nbprt@pretext@bin{0\ifmmode\mathrm{b}\else b\fi}%
+\def\nbprt@presep{\,}%
+\def\nbprt@posttext@hex{\ifmmode\mathrm{h}\else h\fi}%
+\def\nbprt@posttext@oct{\ifmmode\mathrm{o}\else o\fi}%
+\def\nbprt@posttext@dec{\ifmmode\mathrm{d}\else d\fi}%
+\def\nbprt@posttext@bin{\ifmmode\mathrm{b}\else b\fi}%
+\def\nbprt@postsep{\,}%
+%    \end{macrocode}
+% By default, use the marker before the number.
+%    \begin{macrocode}
+\nbasepretext
+%    \end{macrocode}
+% Define how many numbers are grouped together, depending on the
+% number base.
+%    \begin{macrocode}
+\def\nbprt@digitgroup@hex{2}%
+\def\nbprt@digitgroup@oct{3}%
+\def\nbprt@digitgroup@dec{3}%
+\def\nbprt@digitgroup@bin{4}%
+%    \end{macrocode}
+% \begin{macro}{\nbaseprint}
+% Define the man command \cs{nbaseprint} which takes the printed
+% number as mandatory argument.
+%    \begin{macrocode}
+\DeclareRobustCommand*\nbaseprint[1]{%
+%    \end{macrocode}
+% First, expand the number to allow to use macros in the argument.
+%    \begin{macrocode}
+  \edef\nbprt@number{#1}%
+%    \end{macrocode}
+% Test if the number begins with a sign.
+%    \begin{macrocode}
+  \def\nbprt@sign{}%
+  \expandafter\nbprt@testsign\nbprt@number\@empty\@empty\@empty
+%    \end{macrocode}
+% Call \cs{nbprt@testbase} which tests for the number base and prints
+% the number.
+%    \begin{macrocode}
+  \expandafter\nbprt@testbase\nbprt@number\@empty\@empty\@empty
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi
+% \Finale
+
-- 
cgit v1.2.3

