summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/regstats/regstats.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/regstats/regstats.dtx')
-rw-r--r--macros/latex/contrib/regstats/regstats.dtx1625
1 files changed, 923 insertions, 702 deletions
diff --git a/macros/latex/contrib/regstats/regstats.dtx b/macros/latex/contrib/regstats/regstats.dtx
index 903f08ab3d..737df53ea9 100644
--- a/macros/latex/contrib/regstats/regstats.dtx
+++ b/macros/latex/contrib/regstats/regstats.dtx
@@ -1,24 +1,25 @@
% \iffalse meta-comment
%
% File: regstats.dtx
-% Version: 2012/01/07 v1.0h
+% Version: 2023-04-04 v1.1a
+% Info: Counting used registers
%
-% Copyright (C) 2011 - 2012 by
-% H.-Martin M"unch <Martin dot Muench at Uni-Bonn dot de>
+% Copyright © 2011 - 2023 by
+% H.-Martin Münch <Martin dot Muench at Uni-Bonn dot de>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any later
% version. This version of this license is in
-% http://www.latex-project.org/lppl/lppl-1-3c.txt
+% https://www.latex-project.org/lppl/lppl-1-3c.txt
% and the latest version of this license is in
-% http://www.latex-project.org/lppl.txt
+% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of
-% LaTeX version 2005/12/01 or later.
+% LaTeX version 2005-12-01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
-% The Current Maintainer of this work is H.-Martin Muench.
+% The Current Maintainer of this work is H.-Martin Münch.
%
% This work consists of the main source file regstats.dtx,
% the README, and the derived files
@@ -27,49 +28,12 @@
% regstats-example.tex, regstats-example.pdf,
% regstats-example.log.
%
-% Distribution:
-% CTAN:macros/latex/contrib/regstats/regstats.dtx
-% CTAN:macros/latex/contrib/regstats/regstats.pdf
-% CTAN:install/macros/latex/contrib/regstats.tds.zip
-%
-% Cf. http://ctan.org/pkg/regstats and
-% http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/regstats.html
-%
-% Unpacking:
-% (a) If regstats.ins is present:
-% tex regstats.ins
-% (b) Without regstats.ins:
-% tex regstats.dtx
-% (c) If you insist on using LaTeX
-% latex \let\install=y\input{regstats.dtx}
-% (quote the arguments according to the demands of your shell)
-%
-% Documentation:
-% (a) If regstats.drv is present:
-% (pdf)latex regstats.drv
-% makeindex -s gind.ist regstats.idx
-% (pdf)latex regstats.drv
-% makeindex -s gind.ist regstats.idx
-% (pdf)latex regstats.drv
-% (b) Without regstats.drv:
-% (pdf)latex regstats.dtx
-% makeindex -s gind.ist regstats.idx
-% (pdf)latex regstats.dtx
-% makeindex -s gind.ist regstats.idx
-% (pdf)latex regstats.dtx
-%
-% The class ltxdoc loads the configuration file ltxdoc.cfg
-% if available. Here you can specify further options, e.g.
-% use DIN A4 as paper format:
-% \PassOptionsToClass{a4paper}{article}
-%
-% Installation:
-% TDS:tex/latex/regstats/regstats.sty
-% TDS:doc/latex/regstats/regstats.pdf
-% TDS:doc/latex/regstats/regstats-example.tex
-% TDS:doc/latex/regstats/regstats-example.pdf
-% TDS:doc/latex/regstats/regstats-example.log
-% TDS:source/latex/regstats/regstats.dtx
+% "regstats" is available on CTAN:
+% https://ctan.org/pkg/regstats
+%
+% Also a TDS.ZIP file is provided that contains all the files
+% already sorted in a TDS tree:
+% https://mirror.ctan.org/install/macros/latex/contrib/regstats.tds.zip
%
%<*ignore>
\begingroup
@@ -84,10 +48,10 @@
%</ignore>
%<*install>
\input docstrip.tex
-\Msg{********************************************************************}
-\Msg{* Installation *}
-\Msg{* Package: regstats 2012/01/07 v1.0h Counting used registers (HMM) *}
-\Msg{********************************************************************}
+\Msg{*******************************************************************}
+\Msg{* Installation *}
+\Msg{* Package: regstats 2023-04-04 v1.1a Counting used registers (HMM)*}
+\Msg{*******************************************************************}
\keepsilent
\askforoverwritefalse
@@ -98,25 +62,21 @@
This is a generated file.
Project: regstats
-Version: 2012/01/07 v1.0h
-
-Copyright (C) 2011 - 2012 by
- H.-Martin M"unch <Martin dot Muench at Uni-Bonn dot de>
+Version: 2023-04-04 v1.1a
+Info: Counting used registers
-The usual disclaimer applies:
-If it doesn't work right that's your problem.
-(Nevertheless, send an e-mail to the maintainer
- when you find an error in this package.)
+Copyright (C) 2011 - 2023 by
+ H.-Martin Muench <Martin dot Muench at Uni-Bonn dot de>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
version 1.3c of this license or (at your option) any later
version. This version of this license is in
- http://www.latex-project.org/lppl/lppl-1-3c.txt
+ https://www.latex-project.org/lppl/lppl-1-3c.txt
and the latest version of this license is in
- http://www.latex-project.org/lppl.txt
+ https://www.latex-project.org/lppl.txt
and version 1.3c or later is part of all distributions of
-LaTeX version 2005/12/01 or later.
+LaTeX version 2005-12-01 or later.
This work has the LPPL maintenance status "maintained".
@@ -129,6 +89,11 @@ the README, and the derived files
regstats-example.tex, regstats-example.pdf,
regstats-example.log.
+In memoriam
+ Claudia Simone Barth + 1996-01-30
+ Tommy Muench + 2014-01-02
+ Hans-Klaus Muench + 2014-08-24
+
\endpreamble
\let\MetaPrefix\DoubleperCent
@@ -148,7 +113,7 @@ the README, and the derived files
\Msg{* To finish the installation you have to move the following}
\Msg{* file into a directory searched by TeX:}
\Msg{*}
-\Msg{* regstats.sty}
+\Msg{* regstats.sty}
\Msg{*}
\Msg{* To produce the documentation run the file `regstats.drv'}
\Msg{* through (pdf)LaTeX, e.g.}
@@ -174,7 +139,7 @@ the README, and the derived files
% \section{The documentation driver file}
%
% The next bit of code contains the documentation driver file for
-% \TeX{}, i.\,e., the file that will produce the documentation you
+% \TeX, i.\,e., the file that will produce the documentation you
% are currently reading. It will be extracted from this file by the
% \texttt{docstrip} programme. That is, run \LaTeX{} on \texttt{docstrip}
% and specify the \texttt{driver} option when \texttt{docstrip}
@@ -182,20 +147,15 @@ the README, and the derived files
%
% \begin{macrocode}
%<*driver>
-\NeedsTeXFormat{LaTeX2e}[2011/06/27]
-\ProvidesFile{regstats.drv}%
- [2012/01/07 v1.0h Counting used registers (HMM)]
-\documentclass{ltxdoc}[2007/11/11]% v2.0u
-\usepackage{pdflscape}[2008/08/11]% v0.10
-\usepackage{holtxdoc}[2011/02/04]% v0.21
-%% regstats may work with earlier versions of LaTeX2e and those
-%% class and packages, but this was not tested.
-%% Please consider updating your LaTeX, class, and packages
-%% to the most recent version (if they are not already the most
-%% recent version).
+\NeedsTeXFormat{LaTeX2e}[2022-11-01]
+\ProvidesFile{regstats.drv}[2023-04-04 v1.1a Counting used registers (HMM)]
+\documentclass[landscape]{ltxdoc}[2022/06/22]% v2.1i Standard LaTeX documentation class
+\usepackage{geometry}[2020/01/02]% v5.9 Page Geometry
+\usepackage{holtxdoc}[2019/12/09]% v0.30 Private additional ltxdoc support (HO)
+\usepackage[T1]{fontenc}[2021/04/29]% v2.0v Standard LaTeX package
\hypersetup{%
pdfsubject={Information about used number of TeX registers (HMM)},%
- pdfkeywords={LaTeX, regstats, registers, read, write, language, box, dimen, counter, toks, skip, muskip, math family, insertion, H.-Martin Muench},%
+ pdfkeywords={LaTeX, regstats, registers, read, write, language, box, dimen, counter, toks, skip, muskip, math family, insertion},%
pdfencoding=auto,%
pdflang={en},%
breaklinks=true,%
@@ -211,38 +171,17 @@ the README, and the derived files
pdfnewwindow=true%
}
\CodelineIndex
-\hyphenation{printing docu-ment}
-\gdef\unit#1{\mathord{\thinspace\mathrm{#1}}}%
+\hyphenation{docu-ment}
\makeatletter
-\@ifundefined{eTeX}{\gdef\eTeX{$\m@th \varepsilon $-\TeX }}{% else \relax
-}
+\@ifundefined{eTeX}{\gdef\eTeX{\hbox{$\m@th \varepsilon $-\TeX}}}{}
\makeatother
\begin{document}
- \DocInput{regstats.dtx}%
+ \DocInput{regstats.dtx}%
\end{document}
%</driver>
% \end{macrocode}
-%
% \fi
%
-% \CheckSum{578}
-%
-% \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 \~}
-%
% \GetFileInfo{regstats.drv}
%
% \begingroup
@@ -260,76 +199,63 @@ the README, and the derived files
% }%^^A
% \expandafter\endgroup\x
%
-% \DoNotIndex{\\}
-% \DoNotIndex{\documentclass,\usepackage,\ProvidesPackage,\begin,\end}
-% \DoNotIndex{\message,\MessageBreak}
-% \DoNotIndex{\NeedsTeXFormat,\DoNotIndex,\verb}
-% \DoNotIndex{\def,\edef,\gdef,\global}
-% \DoNotIndex{\ifx,\listfiles,\mathord,\mathrm}
-% \DoNotIndex{\kvoptions,\SetupKeyvalOptions,\ProcessKeyvalOptions}
-% \DoNotIndex{\bigskip,\space,\thinspace,\ldots}
-% \DoNotIndex{\indent,\noindent,\newline,\linebreak,\pagebreak, \newpage}
-% \DoNotIndex{\textbf,\textit,\textsf,\texttt,\textquotedblleft,\textquotedblright}
-% \DoNotIndex{\plainTeX,\TeX,\LaTeX,\pdfLaTeX}
-% \DoNotIndex{\chapter,\section,\the,\csname,\endscname}
-% \DoNotIndex{\value,\setcounter,\addtocounter,\arabic}
-% \DoNotIndex{\regstats@test}
+% \DoNotIndex{\\,\@gobble,\@ifclassloaded,\@ifl@t@r,\@ifpackagelater,\@ifpackageloaded,\@ifundefined,\@whilenum,\@percentchar}
+% \DoNotIndex{\@tempcnta,\@tempcntb,\AddToHook,\advance,\AfterLastShipout,\Alternative,\arabic,\AtBeginDocument,\AtEndAfterFileList}
+% \DoNotIndex{\AtEndDocument,\atveryend,\AtVeryEndDocument,\AtVeryVeryEnd,\begin,\count,\DeclareBoolOption,\divide}
+% \DoNotIndex{\csname,\endcsname,\do,\setcounter,\stepcounter,\thenumberreg,\value}
+% \DoNotIndex{\documentclass,\end,\eTeX,\fmtversion,\gdef,\hbox,\hologo,\holtxdoc,\hyperref,\ifetex,\IfFileExists}
+% \DoNotIndex{\IfFormatAtLeastTF,\ifnum,\IfPackageLoadedTF,\ifpdf,\ifregstats@left,\ifregstats@proof,\ifregstats@timer}
+% \DoNotIndex{\iftex,\ifx,\intcalc,\intcalcMod,\jobname,\kvoptions,\left,\listfiles,\luatexfalse,\m@th}
+% \DoNotIndex{\makeatletter,\makeatother,\message,\MessageBreak,\multiply,\NeedsTeXFormat}
+% \DoNotIndex{\newcommand,\newif,\newline,\options,\PackageError,\PackageInfo,\PackageWarning,\PackageWarningNoLine}
+% \DoNotIndex{\pagenumbering,\par,\ProcessKeyvalOptions,\proof,\providecommand,\ProvidesPackage}
+% \DoNotIndex{\regcount,\regstats-example.tex,\regstats.dtx,\regstats.sty,\renewcommand,\RequirePackage}
+% \DoNotIndex{\regst@tsNoeTeX,\regs@tsmw,\regs@wmst,\regst@ts@st@tistics,\regst@ts@statistics,\regst@ts@timer}
+% \DoNotIndex{\regstats@box,\regstats@counter,\regstats@dimen,\regstats@fam,\regstats@firstofone,\regstats@free}
+% \DoNotIndex{\regstats@insert,\regstats@language,\regstats@left,\regstats@lft,\regstats@max,\regstats@message}
+% \DoNotIndex{\regstats@muskip,\regstats@pl,\regstats@read,\regstats@regstatA,\regstats@regstatB,\regstats@skip}
+% \DoNotIndex{\regstats@timerfalse,\regstats@toks,\regstats@used,\regstats@write}
+% \DoNotIndex{\section,\SetupKeyvalOptions,\space,\TeX,\textsf,\texttt,\the,\usepackage,\varepsilon}
%
% \title{The \xpackage{regstats} package}
-% \date{2012/01/07 v1.0h}
-% \author{H.-Martin M\"{u}nch\\\xemail{Martin.Muench at Uni-Bonn.de}}
+% \date{2023-04-04 v1.1a}
+% \author{H.-Martin Münch\\\xemail{Martin.Muench at Uni-Bonn.de}}
%
% \maketitle
%
% \begin{abstract}
-% This \LaTeX{} package allows to count the number of used registers
-% (counter, dimen, skip, muskip, box, token, input, output,
-% math families, languages, insertions)
-% and compare these to the maximum available number of such registers.
-% The time needed for a compilation run can be announced.
+% \noindent This \LaTeX{} package allows to count the number of used registers
+% (counter, dimen, skip, muskip, box, token, input, output,
+% math families, languages, insertions)
+% and compare these to the maximum available number of such registers.
+% The time needed for a compilation run can be announced.
% \end{abstract}
%
% \bigskip
%
% \noindent Disclaimer for web links: The author is not responsible for any contents
-% referred to in this work unless he has full knowledge of illegal contents.
-% If any damage occurs by the use of information presented there, only the
-% author of the respective pages might be liable, not the one who has referred
-% to these pages.
-%
-% \bigskip
-%
-% \noindent {\color{green} Save per page about $200\unit{ml}$ water,
-% $2\unit{g}$ CO$_{2}$ and $2\unit{g}$ wood:\\
-% Therefore please print only if this is really necessary.}
-%
-% \pagebreak
+% referred to in this work unless having full knowledge of illegal contents.
+% If any damage occurs by the use of information presented there,
+% only the author of the respective pages might be liable,
+% not the one who has referred to those pages.
%
% \tableofcontents
%
-% \pagebreak
-%
% \section{Introduction}
-%
% \indent This \LaTeX{} package allows to count the number of used registers
% (counter, dimen, skip, muskip, box, token, input, output,
% math families, languages, insertions).
% Therefore the according |\count| is read. While |\count10| should be the number
-% of the counters, |\count11| the one of the dimens, and so on, it is possible to use
-% option |proof|, in which case a new one of each register is used and looked at
-% |\the\allocationnumber|, and this is compared to the number determined by reading
-% the |\count|. The result for each register is compared to the maximum available
-% number of the respective register
-% (comparison independent of usage of option |proof|).
+% of the counters, |\count11| the one of the dimens, and so on, if there is enough
+% room for another register of that type, then a new one of that register is used
+% and looked at |\the\allocationnumber|. The result for each register is compared
+% to the maximum available number of the respective register.\newline
% With option |left| additionally the number of remaining registers of each type
% is given, and with option |timer| the time needed for the compilation run (when
-% either |pdf(la)tex| or |lua(la)tex| with |\directlua{starttime = os.clock()}|
-% before |\documentclass| is used).
-%
-% \bigskip
+% either \hologo{LuaLaTeX} with |\directlua{starttime = os.clock()}| before
+% |\documentclass| or |pdf(la)tex| is used).
%
% \section{Usage}
-%
% \indent Just load the package placing
% \begin{quote}
% |\usepackage[<|\textit{options}|>]{regstats}|
@@ -337,142 +263,244 @@ the README, and the derived files
% \noindent at the end of the preamble of your \LaTeXe{} source file. When you
% load packages |\AtBeginDocument|, \xpackage{regstats} should be the last one
% of those packages. The resulting message will be presented at the end of the
-% compilation messages at the screen and in the \xfile{log} file.\\
+% compilation messages at the screen and in the \xfile{log} file.
+% \bigskip
+%
+% The examplefile provides (commented out) |\stressCounter|, |\stressDimen|,
+% \dots, and |\stressInsert| to try out how many counters, dimens, \dots, and
+% inserts your system can handle.
+% \pagebreak
%
% \subsection{Options}
% \DescribeMacro{options}
% \indent The \xpackage{regstats} package takes the following options:
%
-% \subsubsection{proof\label{sss:proof}}
-% \DescribeMacro{proof}
-% \indent When option \texttt{proof} (or \texttt{proof=true}) is chosen,
-% a new one of each register is used and looked at |\the\allocationnumber|,
-% and this is compared to the number determined by reading the |\count|.
-% The default is \texttt{proof=false}.
-%
-% \subsubsection{left\label{sss:left}}
+% \subsubsection{left}
% \DescribeMacro{left}
% \indent When option \texttt{left} (or \texttt{left=true}) is chosen,
% also the number of remaining registers of each type is given. The default
% is \texttt{left=false}.
%
-% \subsubsection{timer\label{sss:timer}}
+% \subsubsection{timer}
% \DescribeMacro{timer}
% \indent When option \texttt{timer} (or \texttt{timer=true}) is chosen,
% also the time needed for the compilation run is given. The default
% is \texttt{timer=false}. The used |\pdfelapsedtime| is not available,
-% when |lua(la)tex| is used instead of |pdf(la)tex| to compile the document.
+% when \hologo{LuaLaTeX} is used instead of |pdf(la)tex| to compile the document.
% In that case at the very beginning of your \xfile{tex} file say\\
% \verb|\directlua{starttime = os.clock()}|\\
-% (even before |\documentclass|!), and the \texttt{timer} option can also
-% be used with |lua(la)tex|. When neither |lua(la)tex| nor |pdf(la)tex| is used
+% (even before |\documentclass|!), and then the \texttt{timer} option can also
+% be used with \hologo{LuaLaTeX}. When neither \hologo{LuaLaTeX} nor \hologo{pdfLaTeX} is used
% to compile the document, the \texttt{timer}(-option) does not work.
%
-% \section{Alternatives\label{sec:Alternatives}}
+% \subsubsection{proof}
+% \DescribeMacro{proof}
+% \indent Option \texttt{proof} is \textbf{obsolete} and should no longer be used.
%
+% \section{Alternatives\label{sec:Alternatives}}
% \begin{description}
-% \item[-] \xpackage{regcount}, 1999/08/03, v1.0, by \textsc{Jean-Pierre F. Drucbert},
+% \item[-] \xpackage{regcount}, 1999/08/03, v1.0, by \textsc{Jean-Pierre F. Drucbert}~(\textdied),
% provides the command |\rgcounts|, which can write the numbers of used registers
% into the \xfile{log} file anywhere (not only at the end) and does this automatically
-% |\AtBeginDocument| and |\AtEndDocument| (but not |\AtVeryVeryEnd|). The number of
-% allocated insertions is \emph{wrong} in my opinion, because these are not numbered
-% $1, 2,\ldots$, but start at a high number, which is then decreased. The package is
-% compatible with the \xpackage{regstats} package (i.\,e.~you can use both packages
-% at the same time in one document) and available at
-% \url{http://www.ctan.org/pkg/regcount}.
+% |\AtBeginDocument| and |\AtEndDocument|. The given number of allocated insertions is
+% \emph{wrong}, because these are not numbered $0$, $1$, $2$\ldots,
+% but start at a high number, which is then decreased (and additionally there are jumps,
+% see \hbox{p. \pageref{insertions}).} The package is compatible with the \xpackage{regstats} package
+% (i.\,e.~you can use both packages at the same time in one document) and available at
+% \url{https://ctan.org/pkg/regcount}.
%
% \item[-] One can manually search for the last appearance of
% |\count|, |\dimen|, |\skip|, |\muskip|, |\box|, |\toks|, |\read| (input),
-% |\write| (output), |\mathgroup| (math family), |\language|, and |\insert|,
-% and find the according number there. (This does not provide any information
-% about the number of remaining registers, of course.)
+% |\write| (output), |\mathgroup| (math family), and |\language|,
+% and find the according number there. This does not provide any information
+% about the number of remaining registers, of course. And it does not work for
+% |\insert|, see \hbox{p. \pageref{insertions}).}
% \end{description}
%
% \bigskip
%
-% \noindent (You programmed or found another alternative,
-% which is available at \CTAN{}?\\
-% OK, send an e-mail to me with the name, location at \CTAN{},
-% and a short notice, and I will probably include it in
-% the list above.)
+% \noindent You programmed or found another alternative,
+% which is available at \url{https://www.CTAN.org/}?
+% OK, send an e-mail to me with the name, location at CTAN,
+% and a short notice, and I will probably include it in the list above.
%
% \newpage
%
% \section{Example}
-%
% \begin{macrocode}
%<*example>
-%% When compiling with lua(la)tex (and wanting to use option timer=true,
+%% When compiling with LuaLaTeX (and wanting to use option timer=true),
%% the following line must be uncommented (i.e. remove the "%% ").
%% \directlua{starttime = os.clock()}
-\documentclass[british]{article}[2007/10/19]% v1.4h
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% \usepackage{etex}[1998/03/26]% v2.0
-%% Uncomment the preceding line, if you want to use the eTeX-package
-%% (which requires eTeX, of course).
-\usepackage[%
- extension=pdf,%
- plainpages=false,%
- pdfpagelabels=true,%
- hyperindex=false,%
- pdflang={en},%
- pdftitle={regstats package example},%
- pdfauthor={H.-Martin Muench},%
- pdfsubject={Example for the regstats package},%
- pdfkeywords={LaTeX, registers, read, write, language, box, dimen,%
- count, toks, muskip, skip, counter, regstats, H.-Martin Muench},%
- pdfview=Fit,%
- pdfstartview=Fit,%
- pdfpagelayout=SinglePage%
-]{hyperref}[2011/12/04]% v6.82m
-\usepackage[proof=false,left=true,timer=true]{regstats}[2012/01/07]%
-%% v1.0h
-\gdef\unit#1{\mathord{\thinspace\mathrm{#1}}}%
-\makeatletter
-\@ifundefined{eTeX}{\gdef\eTeX{$\m@th \varepsilon $-\TeX }}{%
-%% else \relax
+\documentclass[british]{article}
+\usepackage[left=true,timer=true]{regstats}[2023/04/04]% v1.1a Counting used registers (HMM)
+\ifpdf\ifluatex\else
+\pdfinfo{
+ /Author (H.-Martin Muench)
+ /Title (regstats package example)
+ /Subject (Example for the regstats package)
+ /Keywords (LaTeX;registers;read;write;language;box;dimen;count;toks;muskip;skip;counter;regstats)
}
+\fi\fi
+%% If you use the hyperref package, use the options of that package
+%% to set the pdf information.
+%% Do NOT use \pdfinfo AND the hyperref package!
+
+%%\usepackage{etex}
+%%\usepackage{morewrites}
+
+\makeatletter
+\newcommand{\stressCounter}[1]{%
+ \ifnum\the\count10<#1\relax\else\message{Already \the\count10 \space counters used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count10<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \newcounter{TestCounter\the\@tempcnta} \message{counter \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressDimen}[1]{%
+ \ifnum\the\count11<#1\relax\else\message{Already \the\count11 \space dimens used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count11<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newdimen\csname TestDimen\the\@tempcnta\endcsname \message{dimen \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressSkip}[1]{\%
+ \ifnum\the\count12<#1\relax\else\message{Already \the\count11 \space skips used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count12<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newskip\csname TestSkip\the\@tempcnta\endcsname \message{skip \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressMuskip}[1]{%
+ \ifnum\the\count13<#1\relax\else\message{Already \the\count11 \space muskips used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count13<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newmuskip\csname TestMuskip\the\@tempcnta\endcsname \message{muskip \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressBox}[1]{%
+ \ifnum\the\count14<#1\relax\else\message{Already \the\count11 \space boxes used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count14<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newbox\csname TestBox\the\@tempcnta\endcsname \message{box \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressToks}[1]{%
+ \ifnum\the\count15<#1\relax\else\message{Already \the\count11 \space toks used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count15<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newtoks\csname TestToks\the\@tempcnta\endcsname \message{toks \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressRead}[1]{%
+ \ifnum\the\count16<#1\relax\else\message{Already \the\count11 \space reads used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count16<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newread\csname TestRead\the\@tempcnta\endcsname \message{read \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressWrite}[1]{%
+ \ifnum\the\count17<#1\relax\else\message{Already \the\count11 \space writes used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count17<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newwrite\csname TestWrite\the\@tempcnta\endcsname \message{write \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressFam}[1]{%
+ \ifnum\the\count18<#1\relax\else\message{Already \the\count11 \space fams used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count18<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newfam\csname TestFam\the\@tempcnta\endcsname \message{fam \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressLanguage}[1]{%
+ \ifnum\the\count19<#1\relax\else\message{Already \the\count11 \space languages used.} \fi%
+ \@tempcnta=0\relax%
+ \@whilenum\the\count19<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newlanguage\csname TestLanguage\the\@tempcnta\endcsname \message{language \the\allocationnumber ^^J}%
+ }%
+ }
+
+\newcommand{\stressInsert}[1]{%
+ \message{Declaring #1\space ADDITIONAL inserts:}%
+ \@tempcnta=0\relax%
+ \@whilenum\the\@tempcnta<#1\do%
+ {\advance\@tempcnta +1\relax%
+ \expandafter\newinsert\csname TestInsert\the\@tempcnta\endcsname%
+ \message{insert \the\@tempcnta: \the\allocationnumber^^J}%
+ }%
+ }
\makeatother
+
\listfiles
\begin{document}
\pagenumbering{arabic}
\section*{Example for regstats}
This example demonstrates the use of package\newline
-\textsf{regstats}, v1.0h as of 2012/01/07 (HMM).\newline
-The used options were \texttt{proof=false,left=true,timer=true}.\newline
-\texttt{proof=false} is the default, but neither \texttt{left=true}
-nor \texttt{timer=true} are defaults (\texttt{left=false,timer=false}
-would be the defaults).\newline
+\textsf{regstats}, v1.1a as of 2023-04-04.\newline
+The used options were \texttt{left=true,timer=true}.\par
+\texttt{left=false,timer=false} would be the defaults.\newline
-If \eTeX{} is available with your \LaTeX{}-distribution
-and you want to use it, uncomment the\newline
-\verb|%% \usepackage{etex}[1998/03/26]% v2.0|\newline
-line in the preamble of this document.\newline
+Regarding the use of
+\makeatletter%
+\ \@ifundefined{eTeX}{\hbox{$\m@th \varepsilon $-\TeX}}{\eTeX}, %
+\makeatother%
+the \texttt{morewrite} package, the reservation of \texttt{insert}s,
+and using more \texttt{math families} please see the documentation!\newline
-For more details please see the documentation!\newline
+For the resulting message, please compile \texttt{regstats-example.tex}
+and have a look at the end of its \texttt{.log}-file.\newline
-\noindent Save per page about $200\unit{ml}$ water,
-$2\unit{g}$ CO$_{2}$ and $2\unit{g}$ wood:\newline
-Therefore please print only if this is really necessary.\newline
+Because the compilation time for this example is usually quite short,
+option \texttt{timer} is not demonstrated very spectacular.\newline
-For the resulting message, please compile regstats-example.tex and
-have a look at the end of the log-file.
+To test a register type for the number of available registers,
+uncomment the respective line below and set the number to an interesting value.
-Because the compilation time for this example is usually quite short,
-option \texttt{timer} is not demonstrated very spectacular.
+
+\makeatletter
+%%\stressCounter{233}
+%%\stressDimen{233}
+%%\stressSkip{233}
+%%\stressMuskip{255}
+%%\stressBox{233}
+%%\stressToks{255}
+%%\stressRead{15}
+%%\stressWrite{14}
+%%\stressFam{15}
+%%\stressLanguage{255}
+%%\stressInsert{20}
+\makeatother
\end{document}
%</example>
% \end{macrocode}
%
% \StopEventually{}
-%
% \newpage
%
% \section{The implementation}
-%
-% We start off by checking that we are loading into \LaTeXe\ and
+% We start off by checking that we are loading into \LaTeXe{} and
% announcing the name and version of this package.
%
% \begin{macrocode}
@@ -480,9 +508,8 @@ option \texttt{timer} is not demonstrated very spectacular.
% \end{macrocode}
%
% \begin{macrocode}
-\NeedsTeXFormat{LaTeX2e}[2011/06/27]
-\ProvidesPackage{regstats}[2012/01/07 v1.0h
- Counting used registers (HMM)]
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{regstats}[2023/04/04 v1.1a Counting used registers (HMM)]
% \end{macrocode}
%
@@ -496,73 +523,89 @@ option \texttt{timer} is not demonstrated very spectacular.
% \end{macrocode}
%
-% We need the \xpackage{kvoptions}, \xpackage{atveryend}, and
-% \xpackage{ltxcmds} packages by \textsc{Heiko Oberdiek}:
+% We need the \xpackage{kvoptions} package:
%
% \begin{macrocode}
-\RequirePackage{kvoptions}[2010/12/23]% v3.10
-\RequirePackage{atveryend}[2011/06/30]% v1.8
-\RequirePackage{ltxcmds}[2011/04/18]% v1.20
+\RequirePackage{kvoptions}% Key value format for package options (HO)
% \end{macrocode}
%
-% A last information for the user:
-%
-% \begin{macrocode}
-%% regstats may work with earlier versions of LaTeX and these
-%% packages, but this was not tested. Please consider updating
-%% your LaTeX and packages to the most recent version
-%% (if they are not already the most recent version).
-
-% \end{macrocode}
-%
-% \indent See subsection~\ref{ss:Downloads} about how to get them.\\
-%
% We process the options:
%
% \begin{macrocode}
\SetupKeyvalOptions{family=regstats,prefix=regstats@}
-\DeclareBoolOption{proof}% \regstats@proof
-\DeclareBoolOption{left}
+\DeclareBoolOption{left}% \regstats@left
\DeclareBoolOption{timer}
+\DeclareBoolOption{proof}% OBSOLETE
\ProcessKeyvalOptions*
+% \end{macrocode}
+%
+% Option |proof| is \textbf{obsolete}:
+%
+% \begin{macrocode}
\ifregstats@proof
- \PackageInfo{regstats}{%
- This package will use one of each kind of register itself!%
- \MessageBreak%
- (And other packages used by this package\MessageBreak%
- probably use additional resources,\MessageBreak%
- if those packages are not used anyway.)\MessageBreak%
- }
+ \PackageWarningNoLine{regstats}{Option proof is obsolete. Please do not use it\MessageBreak%
+ when loading the regstats package}
\else
- \PackageInfo{regstats}{%
- This package will not use registers itself,\MessageBreak%
- but packages used by this package\MessageBreak%
- (and packages loaded by those packages)\MessageBreak%
- use additional resources,\MessageBreak%
- if those packages are not used anyway.\MessageBreak%
- }
+ \PackageInfo{regstats}{Option proof is obsolete.\MessageBreak%
+ If you used proof=false, please remove this\@gobble}
\fi
% \end{macrocode}
%
-% The different kinds of registers used with option |proof=true|
-% are used not before |\AtVeryVeryEnd|, therefore even if it is
-% the one used register too much, it should not interfere
-% with the creation of the document.\\
+% We need the \pkg{iftex} package (or its predecessors \pkg{ifpdf},
+% \pkg{ifetex}, and \pkg{ifluatex}):
+%
+% \begin{macrocode}
+\IfFileExists{iftex.sty}{\RequirePackage{iftex}}{
+ \RequirePackage{ifpdf}
+ \RequirePackage{ifetex}
+ \RequirePackage{ifluatex}
+ }
+
+% \end{macrocode}
+% \pagebreak
+% \begin{macrocode}
+\@ifundefined{ifluatex}{\newif\ifluatex \luatexfalse}{\relax}
+\@ifundefined{ifetex}{\newif\ifetex \etexfalse}{\relax}
+
+% \end{macrocode}
+%
+% Yes, if \hologo{LuaLaTeX} is used without defining |\ifluatex|,
+% then we fail safe with assuming \hologo{LuaLaTeX} is not used.
+% Otherwise everything (|\else|s and |\fi|s) gets mixed up,
+% but \hologo{LuaLaTeX} without |\ifluatex| is really broken.
+% Also if |\ifetex| is unknown, we assume that there is no
+% \hologo{eTeX} available.
+%
+% \medskip
+%
+% Option timer requires some condition:
%
% \begin{macrocode}
\ifregstats@timer
- \RequirePackage{intcalc}[2007/09/27]% v1.1
- \RequirePackage{ifluatex}[2010/03/01]% v1.3
- \RequirePackage{ifpdf}[2011/01/30]% v2.3
+ \ifpdf \RequirePackage{intcalc}
+ \else \PackageError{regstats}{Option timer only works with pdf(la)tex\MessageBreak%
+ and with lua(la)tex}{Neither appears to be used here.}
+ \regstats@timerfalse
+ \fi
\fi
-\newcommand{\regst@ts@timer}{%
- \message{^^J}
- \ifluatex
+% \end{macrocode}
+%
+% The timer:
+%
+% \begin{macrocode}
+\newcommand{\regst@ts@timer}{\message{^^J}%
+ \@tempcnta=0%
+% \end{macrocode}
+%
+% For \hologo{LuaLaTeX}:
+%
+% \begin{macrocode}
+ \ifluatex%
\@tempcnta=%
\directlua{
if starttime then
@@ -570,380 +613,555 @@ option \texttt{timer} is not demonstrated very spectacular.
else
tex.sprint(0)
end
- }\relax
- \ifnum \the\@tempcnta = 0
+ }\relax%
+% \end{macrocode}
+%
+% and for pdf\LaTeX:
+%
+% \begin{macrocode}
+ \else \ifpdf \@tempcnta=\the\pdfelapsedtime\relax\fi%
+ \fi%
+% \end{macrocode}
+%
+% Checking the result:
+%
+% \begin{macrocode}
+ \ifnum \the\@tempcnta = 0%
+ \ifluatex%
\PackageError{regstats}{Did you forget to start the timer?}{%
- Before \string\documentclass\space you need to say%
- \MessageBreak%
- \string\directlua{starttime = os.clock()} \MessageBreak%
- }
- \fi
- \else
- \ifpdf
- \@tempcnta=\the\pdfelapsedtime\relax
- \else
- \PackageError{regstats}{Option timer only works with pdf(la)tex%
- \MessageBreak%
- and with lua(la)tex}{%
- Neither appear to be used here. Announced compilation time %
- will be zero.
- }
- \@tempcnta=0\relax
- \fi
- \fi
- \edef\regstatselapsedtime{\the\@tempcnta}
- \divide \@tempcnta by 65536% scaledseconds -> seconds
- \edef\regstatsseconds{\the\@tempcnta}
- \ifnum \regstatsseconds > 59
- \edef\regstatsseconds{\intcalcMod{\the\@tempcnta}{60}}
- \divide \@tempcnta by 60% seconds -> minutes
- \else
- \@tempcnta=0\relax% minutes = 0
- \fi
- \ifnum \regstatsseconds < 10
- \message{Time elapsed for the last compiler run:^^J%
- about \the\@tempcnta:0\regstatsseconds\space%
- (m:ss; \regstatselapsedtime /65536 s).^^J}
- \else
+ Before \string\documentclass\space you need to say\MessageBreak%
+ \string\directlua{starttime = os.clock()}}%
+ \fi%
+ \PackageError{regstats}{Could not determine the time used for compilation}{Reason is unknown.}%
+ \else%
% \end{macrocode}
%
+% It worked!
% \pagebreak
%
% \begin{macrocode}
- \message{Time elapsed for the last compiler run:^^J%
- about \the\@tempcnta:\regstatsseconds \space%
- (m:ss; \regstatselapsedtime /65536 s).^^J}
- \fi
+ \xdef\regstatselapsedtime{\the\@tempcnta}%
+ \divide \@tempcnta by 65536% scaled-seconds -> seconds
+ \xdef\regstatsseconds{\the\@tempcnta}%
+ \ifnum \regstatsseconds > 59%
+ \xdef\regstatsseconds{\intcalcMod{\the\@tempcnta}{60}}%
+ \divide \@tempcnta by 60% seconds -> minutes
+ \else%
+ \@tempcnta=0% minutes = 0
+ \fi%
+ \ifnum \regstatsseconds < 10%
+ \message{Time elapsed for the last compiler run:^^J%
+ about \the\@tempcnta:0\regstatsseconds\space%
+ (m:ss; \regstatselapsedtime /65536 s).^^J}%
+ \else%
+ \message{Time elapsed for the last compiler run:^^J%
+ about \the\@tempcnta:\regstatsseconds \space%
+ (m:ss; \regstatselapsedtime /65536 s).^^J}%
+ \fi%
+ \fi%
}
-\ifregstats@timer
-\else
-\renewcommand{\regst@ts@timer}{\relax}
-\fi
+% \end{macrocode}
+%
+% If the |timer|-option was not used, we do not use the timer:
+%
+% \begin{macrocode}
+\ifregstats@timer\else\renewcommand{\regst@ts@timer}{\relax}\fi
-\let\regst@ts@statistics\AtVeryVeryEnd%
+% \end{macrocode}
+%
+% Initialisation of some commands:
+%
+% \begin{macrocode}
+\long\def\regstats@firstofone#1{#1}
+
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+
+\let\regst@tsNoeTeX\relax
+
+\xdef\regstats@lft{}
% \end{macrocode}
%
-% \LaTeXe{} 2011/06/27 changed the |\enddocument| command and thus
-% broke the \xpackage{atveryend} package, which was then fixed.
+% \LaTeXe{} 2011-06-27 changed the |\enddocument| command and thus
+% broke the \pkg{atveryend} package, which was then fixed.
% If new \LaTeXe{} and old \xpackage{atveryend} are combined,
% |\AtVeryVeryEnd| will never be called.
-% |\@ifl@t@r\fmtversion| is from |\@needsf@rmat| as in\\
-% \texttt{File L: ltclass.dtx Date: 2007/08/05 Version v1.1h}, line~259,\\
-% of The \LaTeXe{} Sources\\
-% by \textsc{Johannes Braams, David Carlisle, Alan Jeffrey, Leslie Lamport,%
-% Frank Mittelbach, Chris Rowley, and Rainer Sch\"{o}pf},\\
-% as of 2011/06/27, p.~464.
+% \LaTeXe{} 2020-10-01 introduced a new hook management.
+% For \LaTeXe-format 2022-11-01 and newer we use hooks instead of
+% loading the \pkg{atveryend} package.
%
% \begin{macrocode}
-\@ifl@t@r\fmtversion{2011/06/27}% or possibly even newer
-{\@ifpackagelater{atveryend}{2011/06/29}%
- {% 2011/06/30, v1.8, or even more recent: OK
- }{% else: older package version, no \AtVeryVeryEnd
- \let\regst@ts@statistics\ltx@firstofone%
- }
-}{% else: older fmtversion: OK
+\IfFormatAtLeastTF{2022/11/01}{
+ \let\regst@ts@statistics\regstats@firstofone% We do not use \AtVeryVeryEnd.
+ \newcommand{\regst@ts@st@tistics}[1]{\AddToHook{begindocument}{%
% \end{macrocode}
%
-% In this case the used \TeX{} format is outdated, but when\\
-% |\NeedsTeXFormat{LaTeX2e}[2011/06/27]|\\
-% is executed at the beginning of \xpackage{regstats} package,
-% the appropriate warning message is issued automatically.
-% (And \xpackage{regstats} should also work with older versions,
-% I~used it with a 2003/12/01 version myself.)
+% The \pkg{morewrites} package allows for more writes (see \hbox{p. \pageref{write}):}
%
% \begin{macrocode}
-}
-
-\AtBeginDocument{%
- \AtEndDocument{%
- \BeforeClearDocument{%
- \AfterLastShipout{%
- \AtVeryEndDocument{%
- \AtEndAfterFileList{%
+ \AddToHook{begindocument/end}{\IfPackageLoadedTF{morewrites}{\def\regs@tsmw{65250}}{%
+ \ifluatex\def\regs@tsmw{124}\else\def\regs@tsmw{16}\fi}%
+ \AddToHook{enddocument}{\AddToHook{enddocument/afterlastpage}{\AddToHook{enddocument/afteraux}{%
+ \AddToHook{enddocument/info}{\AddToHook{enddocument/end}{#1}}}}}}}}
+ }{\RequirePackage{atveryend}
+ \let\regst@ts@statistics\AtVeryVeryEnd
+ \IfFormatAtLeastTF{2011/06/27}{
+ \@ifpackagelater{atveryend}{2011/06/29}{% 2011/06/30, v1.8, or even more recent: OK
+ }{% else: older package version, no \AtVeryVeryEnd
+ \let\regst@ts@statistics\regstats@firstofone
+ }
+ }{% else: older fmtversion: also OK
+ }
+ \newcommand{\regst@ts@st@tistics}[1]{\AtBeginDocument{\AtEndDocument{\AfterLastShipout{\AtVeryEndDocument{%
+ \AtEndAfterFileList{#1}}}}}}
+% \end{macrocode}
+%
+% With the |seminar| class or the \pkg{slidesec} package |\AtVeryVeryEnd| must not be used:
+%
+% \begin{macrocode}
+ \AtBeginDocument{%
+ \@ifclassloaded{seminar}{% no \AtVeryVeryEnd
+ \let\regst@ts@statistics\regstats@firstofone}{\relax}
+ \@ifpackageloaded{slidesec}{% no \AtVeryVeryEnd
+ \let\regst@ts@statistics\regstats@firstofone}{\relax}
% \end{macrocode}
%
-% The \xpackage{regstats} package uses the \xpackage{atveryend} package,
-% which is not compatible with the \xclass{seminar} class nor the
-% \xpackage{slidesec} package. |\AtVeryVeryEnd| cannot be used with that
-% class or package.\\
-% |\ltx@ifclassloaded| and |\ltx@ifpackageloaded| from the \xpackage{ltxcmds}
-% package can be used after |\AtBeginDocument| (in contrast to
-% |\@ifclassloaded| and |\@ifpackageloaded|).
+% The \pkg{morewrites} package allows for more writes (see \hbox{p. \pageref{write}):}
%
% \begin{macrocode}
- \ltx@ifclassloaded{seminar}{% no \AtVeryVeryEnd
- \let\regst@ts@statistics\ltx@firstofone%
- }{% else
- \ltx@ifpackageloaded{slidesec}{% no \AtVeryVeryEnd
- \let\regst@ts@statistics\ltx@firstofone%
- }{% else: OK
+ \@ifpackageloaded{morewrites}{\def\regs@tsmw{32767}}{\ifluatex\def\regs@tsmw{124}\else\def\regs@tsmw{15}\fi}%
+% \end{macrocode}
+%
+% If neither \eTeX{} is available nor the \pkg{etex} package loaded,
+% the number of available registers is drastically reduced:
+%
+% \begin{macrocode}
+ \ifetex\else%
+ \@ifpackageloaded{etex}{\relax}{% else
+ \gdef\regst@tsNoeTeX{%
+ \PackageWarning{regstats}{Neither eTeX nor the e-TeX-package found.\MessageBreak%
+ That can mean that e-TeX was disabled or\MessageBreak%
+ that your distribution of TeX does not contain e-TeX\MessageBreak%
+ or that you simply forgot to say \string\usepackage{etex}\MessageBreak%
+ in the preamble of \jobname.tex.\MessageBreak%
+ The number of available counter, dimen, skip,\MessageBreak%
+ muskip, box, and toks registers as well as the\MessageBreak%
+ number of insertions would be larger when using\MessageBreak%
+ eTeX or the e-TeX-package;%
}%
+ }%
}%
+ \fi%
+ }
+ }
+
+% \end{macrocode}
+% \pagebreak
+% \begin{macrocode}
+\regst@ts@st@tistics{%
+\regst@ts@statistics{%
+ \xdef\regstats@message{\relax}%
% \end{macrocode}
%
-% |\AtEndAfterFileList| we write to |\AtVeryVeryEnd| (if available) via\linebreak
-% |\regst@ts@statistics|, thus the code will be executed quite late during
-% the compilation. (Please load \xpackage{regstats} as very last package!)\\
+% |\regstats@regstatA| uses three arguments: 1.~the used number of registers
+% of some type, 2.~the \textquotedblleft regular\textquotedblright number
+% of available registers of that type, 3.~that number in case of extended
+% register range (\eTeX). Maximum available minus used registers gives
+% the number of free/currently available registers.
%
% \begin{macrocode}
- \regst@ts@statistics{%
+ \newcommand{\regstats@regstatA}[3]{%
+ \ifx\regst@tsNoeTeX\relax \xdef\regstats@max{#3}\else\xdef\regstats@max{#2}\fi%
+ \@tempcnta=\regstats@max \relax%
+ \advance\@tempcnta by -#1\relax%
+ \xdef\regstats@free{\the\@tempcnta}%
+ }%
% \end{macrocode}
%
-% We try to determine, whether the \xpackage{etex}-package was loaded by the user
-% (which requires \eTeX{} being available in the \LaTeX{} distribution
-% used to compile the document).
+% |\regstats@regstatB| gives the singular (2nd~argument) or plural (3rd~argument)
+% of the name of that register type (1st~argument):
%
% \begin{macrocode}
- \ltx@ifpackageloaded{etex}{%
- \PackageInfo{regstats}{e-TeX-package found.}
- }{% else
- \PackageWarning{regstats}{Could not find the e-TeX-package.%
- \MessageBreak%
- That can mean that e-TeX was disabled or\MessageBreak%
- that your distribution of TeX does not contain e-TeX%
- \MessageBreak%
- or that you simply forgot to say \string\usepackage{etex}%
- \MessageBreak%
- in the preamble of \jobname.tex.\MessageBreak%
- The number of available counter, dimen, skip,\MessageBreak%
- muskip, box, and toks registers as well as the\MessageBreak%
- number of insertions would be larger when using%
- \MessageBreak%
- the e-TeX-package.%
- }
- }
+ \newcommand{\regstats@regstatB}[3]{%
+ \@tempcnta=\regstats@max\relax%
+ \advance\@tempcnta by -#1\relax%
+ \xdef\regstats@free{\the\@tempcnta}%
+ \@tempcnta=#1\relax%
+ \ifnum \the\@tempcnta = 0%
+ \@tempcnta=2\relax% zero: same as plural
+ \fi%
+ \ifnum \the\@tempcnta > 1%
+ \gdef\regstats@pl{#3}% plural
+ \else%
+ \gdef\regstats@pl{#2}% singular
+ \fi%
% \end{macrocode}
%
-% We define a new command to determine the singular/plural form,
-% maximum of available registers, and (if option |left| was chosen)
-% the number of remaining registers of that type.
+% The number of used registers is given as per cent of the available
+% registers of that type:
%
% \begin{macrocode}
- \def\regstats@lft{}%
- \newcommand{\regstats@regstat}[5]{%
+ \@tempcnta=#1\relax%
+ \multiply\@tempcnta by 100\relax%
+ \@tempcntb=\regstats@max\relax%
+ \divide\@tempcnta by\@tempcntb\relax%
+ \xdef\regstats@used{\space(\the\@tempcnta\@percentchar\space used)}%
% \end{macrocode}
%
-% The five parameters are: number of used registers of that type,
-% singular ending, plural ending, number of available registers without
-% \eTeX{}, number of available registers with \eTeX{} (in this order).
+% If option |left| was chosen, the number of remaining registers of that type is announced:
%
% \begin{macrocode}
- \@tempcnta=#1 \relax
- \ifnum \the\@tempcnta = 0
- \@tempcnta=2 \relax
- \fi
- \ifnum \the\@tempcnta > 1
- \gdef\regstats@pl{#3}
- \else
- \gdef\regstats@pl{#2}
- \fi
- \ltx@ifpackageloaded{etex}{\edef\regstats@max{#5}}{%
- \edef\regstats@max{#4}}
- \ifregstats@left
- \@tempcnta=\regstats@max \relax
- \advance\@tempcnta by -#1%
- \ifnum \the\@tempcnta > 0
- \edef\regstats@lft{, left: \the\@tempcnta}
- \else
- \ifnum \the\@tempcnta = 0
- \edef\regstats@lft{, left: \the\@tempcnta !!!}
- \else% \the\@tempcnta < 0
- \edef\regstats@lft{, left: \the\@tempcnta **********}
- \fi
- \fi
+ \ifregstats@left%
+ \ifnum \regstats@free > 0\relax%
+ \xdef\regstats@lft{, left: \regstats@free}%
+ \else%
+ \ifnum \regstats@free = 0\relax%
+ \xdef\regstats@lft{, left: \regstats@free !!!}%
+ \else% \regstats@free < 0
+ \xdef\regstats@lft{, left: \regstats@free ??? **********}%
+ \fi%
+ \fi%
+ \fi%
+ }%
% \end{macrocode}
%
-% | \else| |\regstats@lft| will stay |\empty|.
+% We now just take the current numbers of the various |count|s:
%
% \begin{macrocode}
- \fi
- }
+ \xdef\regstats@counter{\the\count10}%
+ \xdef\regstats@dimen{\the\count11}%
+ \xdef\regstats@skip{\the\count12}%
+ \xdef\regstats@muskip{\the\count13}%
+ \xdef\regstats@box{\the\count14}%
+ \xdef\regstats@toks{\the\count15}%
+ \xdef\regstats@read{\the\count16}%
+ \xdef\regstats@write{\the\count17}%
+ \xdef\regstats@fam{\the\count18}%
+ \xdef\regstats@language{\the\count19}%
+ \xdef\regstats@insert{\the\count20}%
% \end{macrocode}
%
-% When option |proof| was chosen, one new register of each named type
-% is used and its number compared with the according |count| number.
-% We give a warning about the use of additional registers.
+% |\countdef\insc@unt=20| is a synonym for the insertion counter.\par
+% |\countdef\allocationnumber=21| is a synonym for the allocation counter
+% |\count21|, which contains the most recently allocated number.
+% For example, if |\newdimen{\regstatsdimen}| allocated a new dimen,
+% and that dimen uses the $48\textsuperscript{th}$~dimen register, then
+% |\count21| contains the $48$.\par
+% |\count22| contains $-1$.
+% \medskip
+%
+% We build the |\regstats@message|:
%
% \begin{macrocode}
- \ifregstats@proof
- \PackageWarning{regstats}{%
- Package regstats loaded with option 'proof'.\MessageBreak%
- This package itself will now use\MessageBreak%
- one of each register for testing!\MessageBreak%
- }%
- \def\regstats@proof{1}
- \newcounter{regstatscount}
- \edef\regstats@counter{\the\allocationnumber}
- \edef\regstats@test{\the\count10}
- \ifx\regstats@counter\regstats@test
- \else
- \message{Discrepancy when counting count registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newdimen{\regstatsdimen}
- \edef\regstats@dimen{\the\allocationnumber}
- \edef\regstats@test{\the\count11}
- \ifx\regstats@dimen\regstats@test
- \else
- \message{Discrepancy when counting dimen registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newskip\regstatsskip
- \edef\regstats@skip{\the\allocationnumber}
- \edef\regstats@test{\the\count12}
- \ifx\regstats@skip\regstats@test
- \else
- \message{Discrepancy when counting skip registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newmuskip\regstatsmuskip
- \edef\regstats@muskip{\the\allocationnumber}
- \edef\regstats@test{\the\count13}
- \ifx\regstats@muskip\regstats@test
- \else
- \message{Discrepancy when counting muskip registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newbox\regstatsbox
- \edef\regstats@box{\the\allocationnumber}
- \edef\regstats@test{\the\count14}
- \ifx\regstats@box\regstats@test
- \else
- \message{Discrepancy when counting box registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newtoks\regstatstoks
- \edef\regstats@toks{\the\allocationnumber}
- \edef\regstats@test{\the\count15}
- \ifx\regstats@toks\regstats@test
- \else
- \message{Discrepancy when counting toks registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newread\regstatsread
- \edef\regstats@read{\the\allocationnumber}
- \edef\regstats@test{\the\count16}
- \ifx\regstats@read\regstats@test
- \else
- \message{Discrepancy when counting read registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newwrite\regstatswrite
- \edef\regstats@write{\the\allocationnumber}
- \edef\regstats@test{\the\count17}
- \ifx\regstats@write\regstats@test
- \else
- \message{Discrepancy when counting write registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newfam\regstatsfam
- \edef\regstats@fam{\the\allocationnumber}
- \edef\regstats@test{\the\count18}
- \ifx\regstats@fam\regstats@test
- \else
- \message{Discrepancy when counting fam registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newlanguage\regstatslanguage
- \edef\regstats@language{\the\allocationnumber}
- \edef\regstats@test{\the\count19}
- \ifx\regstats@language\regstats@test
- \else
- \message{Discrepancy when counting language registers.^^J}
- \def\regstats@proof{0}
- \fi
- \newinsert\regstatsinsert
- \edef\regstats@insert{\the\allocationnumber}
- \edef\regstats@test{\the\count20}
- \ifx\regstats@insert\regstats@test
- \else
- \message{Discrepancy when counting insert registers.^^J}
- \def\regstats@proof{0}
- \fi
+ \xdef\regstats@message{\regstats@message\message{^^J}}%
+ \xdef\regstats@message{\regstats@message\message{Here is how much of TeX's registers you used^^J}}%
+ \xdef\regstats@message{\regstats@message\message{\space (numbers of available registers are estimated!):^^J}}%
% \end{macrocode}
%
-% When there was a discrepancy somewhere, we give the according message.
+% While |\xdef\regstats@...{\the\count...}| was used above,
+% if \eTeX{} is available we use another register of that type
+% and look at the register number it received.\par
+% Classic \TeX{} has $2^{8}=256$~registers,
+% \eTeX{} and \XeTeX{} have $2^{15}=32\,768$~registers,
+% and \hologo{LuaLaTeX} has even $2^{15}=65\,536$~registers
+% (for |\count|, |\dimen|, |\skip|, |\muskip|, |\box|, and |\toks|).
+% There are only 16~|\read|s available.
+% |\write|s and |\fam|s were traditionally also 16,
+% see page~\pageref{write} (write) and page~\pageref{families} (families) about using more.
+% |\lang|s are only 256 available.
+% |\insert|s are complicated (see \hbox{p. \pageref{insertions}). --}\ %
+% Each |\newlength| needs a skip register.
+%
+% \medskip
+%
+% \textbf{The counter registers:}
%
% \begin{macrocode}
- \edef\regstats@test{0}
- \ifx\regstats@proof\regstats@test
- \message{Regstats test for register numbers failed.^^J}
- \message{Therefore option 'proof' is necessary to get the %
- right numbers.^^J}
- \fi
- \else
+ \regstats@regstatA{\regstats@counter}{255}{32767}%
+ \ifetex\newcounter{regstatscount}\xdef\regstats@counter{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@counter}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@counter\space counter register\regstats@pl\space%
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
% \end{macrocode}
-%
% \pagebreak
%
-% Without option |proof|, we just take the values of the various |count|s.
+% \textbf{The dimen registers:}
%
% \begin{macrocode}
- \edef\regstats@counter{\the\count10}
- \edef\regstats@dimen{\the\count11}
- \edef\regstats@skip{\the\count12}
- \edef\regstats@muskip{\the\count13}
- \edef\regstats@box{\the\count14}
- \edef\regstats@toks{\the\count15}
- \edef\regstats@read{\the\count16}
- \edef\regstats@write{\the\count17}
- \edef\regstats@fam{\the\count18}
- \edef\regstats@language{\the\count19}
- \edef\regstats@insert{\the\count20}
- \fi
+ \regstats@regstatA{\regstats@dimen}{255}{32767}%
+ \ifetex\newdimen{\regstatsdimen}\xdef\regstats@dimen{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@dimen}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@dimen\space dimen register\regstats@pl\space%
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
% \end{macrocode}
%
-% |insert|s are used starting with a high number and moving downward.
+% \textbf{The skip registers:}
%
% \begin{macrocode}
- \@tempcnta = 233 \relax
- \advance\@tempcnta by -\regstats@insert%
- \advance\@tempcnta by +1%
- \edef\regstats@insert{\the\@tempcnta}
+ \regstats@regstatA{\regstats@skip}{255}{32767}%
+ \ifetex\newskip\regstatsskip\xdef\regstats@skip{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@skip}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@skip\space skip register\regstats@pl\space%
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
% \end{macrocode}
%
-% \newpage
-% \begin{landscape}
+% \textbf{The muskip registers:}
+%
+% \begin{macrocode}
+ \regstats@regstatA{\regstats@muskip}{255}{32767}%
+ \ifetex\newmuskip\regstatsmuskip\xdef\regstats@muskip{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@muskip}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@muskip\space muskip register\regstats@pl\space%
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
+% \end{macrocode}
+%
+% \textbf{The box registers:}
+%
+% \begin{macrocode}
+ \regstats@regstatA{\regstats@box}{255}{32767}%
+ \ifetex\newbox\regstatsbox\xdef\regstats@box{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@box}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@box\space box register\regstats@pl\space%
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
+% \end{macrocode}
+%
+% \textbf{The toks registers:}
+%
+% \begin{macrocode}
+ \regstats@regstatA{\regstats@toks}{255}{32767}%
+ \ifetex\newtoks\regstatstoks\xdef\regstats@toks{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@toks}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@toks\space toks register\regstats@pl\space%
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
+% \end{macrocode}
+%
+% \textbf{The \textquotedblleft read registers\textquotedblright, i.\,e. input streams:}
+%
+% \begin{macrocode}
+ \regstats@regstatA{\regstats@read}{15}{15}%
+ \ifnum \regstats@free > 0\relax\newread\regstatsread\xdef\regstats@read{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@read}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@read\space input stream\regstats@pl\space (read) %
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
+% \end{macrocode}
+%
+% \phantomsection\label{write}
+% \textbf{The \textquotedblleft write registers\textquotedblright, i.\,e. output streams:}\newline
+% Traditionally, there are $16$~available output streams. Lua\TeX{} increases
+% this to $124$, and the \pkg{morewrites} package even to $65\,250$ for \LaTeX,
+% but not for \hologo{LuaLaTeX}. After write $32\,749\textsuperscript{th}$~write
+% on |\write32767|, morewrites additionally uses one count register
+% for each new write. And after the $65\,250\textsuperscript{th}$~write
+% uses |\count32766|, there is no room for another |\count|,
+% and therefore opening further writes fails.
+%
+% \begin{macrocode}
+ \regstats@regstatA{\regstats@write}{15}{\regs@tsmw}%
+ \ifnum \regstats@free > 0\relax\newwrite\regstatswrite\xdef\regstats@write{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@write}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@write\space output stream\regstats@pl\space (write) %
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
+% \end{macrocode}
+%
+% \phantomsection\label{families}
+% \textbf{The \textquotedblleft fam registers\textquotedblright, i.\,e. math families:}\newline
+% Traditionally, there are $16$~available math families. \hologo{LuaLaTeX} and \XeLaTeX{}
+% increase this to $256$ (at least since the 2015 release of \LaTeXe).
+%
+% \begin{quotation}
+% \TeX{}, or more exactly the 8-bit versions of \TeX, such as \pdfTeX{},
+% have a hard limit of~16 on the number of different math font groups
+% (\cs{fam} or \cs{mathgroup}) that can be used in a single formula. For each symbol font
+% declared (by a package or in the preamble) an extra math group is allocated,
+% and the same happens for each math alphabet, (such as \cs{mathbf}) once it
+% gets used anywhere in the document. Up to now, these math
+% alphabet allocations were permanent, even if they were used only once;
+% the result was that in complex documents you
+% could easily run out of available math font groups.
+% The only remedy for this was to
+% define your own math version, which is a complicated and cumbersome process.
+%
+% This situation has now been improved by the introduction of a new counter
+% \texttt{localmathalphabets}: this counter governs how many of
+% the math group slots are assigned locally when a new math
+% alphabet (and a new math group) is needed.
+%
+% Once the current formula is finished, every such further (local)
+% allocation is undone, giving you a fighting chance of being
+% able to use different new math alphabets in the next formula.
+%
+% The default value of \texttt{localmathalphabets} is 2,
+% but if you need more local alphabets because of the complexity of your
+% document, you can set this to a higher value such as 4 or~5.
+% Setting it even higher is possible, but this would seldom
+% be useful because many group slots will be taken up by
+% symbol fonts and such slots are always permanently allocated,
+% whether used or not.\par
+% \hfill{}(Undo math alphabet allocations if necessary, in:
+% \LaTeX{} News, Issue 34, 2021-11-15)
+% \end{quotation}
+%
+% So the number of math family groups should have become less relevant.\newline
+% |\setcounter{localmathalphabets}{| something larger than 2 |}|
+% might help in case of issues. (|\stressFam| in the example file
+% still does not find more than 15 (or 255 with \hologo{LuaLaTeX})
+% |\fam|s available, because it (intentionally) does not use anything local.
+%
+% \begin{macrocode}
+ \regstats@regstatA{\regstats@fam}{15}{\ifluatex 255 \else 15\fi}%
+ \ifnum \regstats@free > 0\relax\newfam\regstatsfam\xdef\regstats@fam{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@fam}{y}{ies}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@fam\space math famil\regstats@pl\space (fam) %
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
+% \end{macrocode}
+% \pagebreak
%
-% The number of used registers of each type and the number of available ones
-% (estimated, probably dependent on distribution and its version, here just
-% distinguished according to availability of \eTeX{}) is written
-% to screen and \xfile{log} file. (Additional spaces are just for increased ease
-% of readability of the code and will appear neither at the scree output nor
-% in the \xfile{log}~file.)
+% \textbf{The \textquotedblleft language registers\textquotedblright, i.\,e. language codes:}
%
% \begin{macrocode}
- \message{^^J}
- \message{Here is how much of TeX's registers you used^^J}%
- \message{\space (numbers of available registers are estimated!):^^J}%
- \regstats@regstat{\regstats@counter}{}{s}{233}{32767}
- \message{ \regstats@counter\space counter register\regstats@pl\space out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@dimen}{}{s}{233}{32767}
- \message{ \regstats@dimen\space dimen register\regstats@pl\space out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@skip}{}{s}{233}{32767}
- \message{ \regstats@skip\space skip register\regstats@pl\space out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@muskip}{}{s}{255}{32767}
- \message{ \regstats@muskip\space muskip register\regstats@pl\space out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@box}{}{s}{233}{32767}
- \message{ \regstats@box\space box register\regstats@pl\space out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@toks}{}{s}{255}{32767}
- \message{ \regstats@toks\space toks register\regstats@pl\space out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@read}{}{s}{15}{15}
- \message{ \regstats@read\space input stream\regstats@pl\space (read) out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@write}{}{s}{15}{15}
- \message{ \regstats@write\space output stream\regstats@pl\space (write) out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@fam}{y}{ies}{15}{15}
- \message{ \regstats@fam\space math famil\regstats@pl\space (fam) out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@language}{}{s}{255}{255}
- \message{ \regstats@language\space language code\regstats@pl\space out of \regstats@max \regstats@lft ^^J}
- \regstats@regstat{\regstats@insert}{}{s}{101}{124}
- \message{ \regstats@insert\space insertion\regstats@pl\space out of \regstats@max \regstats@lft ^^J}
+ \regstats@regstatA{\regstats@language}{255}{255}%
+ \ifnum \regstats@free > 0\relax\newlanguage\regstatslanguage\xdef\regstats@language{\the\allocationnumber}\fi%
+ \regstats@regstatB{\regstats@language}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@language\space language code\regstats@pl\space%
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ %
% \end{macrocode}
%
+% \phantomsection\label{insertions}%
+% \textbf{The \textquotedblleft insert registers\textquotedblright, i.\,e. insertions:}\newline
+% \textquotedblleft Inserts are given numbers $254$, $253$, etc.,
+% since they require a |\count|, |\dimen|, |\skip|, and |\box|
+% all with the same number\textquotedblright{} (source2e.pdf,
+% File~b: ltplain.dtx Date:~2022-01-25 Version~v2.3h, has bugs, are fixed in dev 2023-04-04 v2.3h (i?)).\newline
+% Because counter, dimen, skip, and box registers are also used independently
+% from inserts, it can be expected to have no room for a new insert long before
+% the 255 inserts are used.\medskip
+%
+% When testing, the first |\newinsert| registered into |\insert199|,
+% followed by |\insert198|, \ldots, |\insert194|, and then apparently some
+% |\count|, |\dimen|, |\skip|, or |\box| register was not available for
+% |\insert193|. Therefore the |\newinsert| registered into |\insert252|,
+% followed by |\insert251|, \ldots, |\insert201|, and then the already
+% used insert registers were reached and there was
+% |! No room for a new \insert|.\medskip
+%
+% With \hologo{LuaLaTeX} after |\insert192| the next |\newinsert| registered
+% into |\insert252|, followed by |\insert251|, \ldots, |\insert201|,
+% and then the next |\newinsert| registered into |\insert65534|,
+% followed by |\insert65533|, \ldots, |\insert244|, and then there was
+% |! No room for a new \count| -- mark it: |\count|, not |insert|.
+% The inserts |\insert252| to |\insert244| seem to have been use twice
+% and the inserts |\insert243|ff. not used twice only because no |\count|
+% was available for them.\medskip
+%
+% Historic versions of \LaTeX{} were limited to less registers,
+% therefore it was possible to |\usepackage{etex} \reserveinserts{17}|,
+% in order to reserve room for up to 17 (or another number given)
+% additional insertion classes, that will not be taken away by
+% |\newcount|, |\newdimen|, |\newskip|, or |\newbox|.
+% For resent \LaTeX-versions this is neither necessary nor recommendable:
+% do not use the etex-package.\medskip
+%
+% When the inserts are needed for floats, the
+% \href{https://ctan.org/pkg/morefloats}{morefloats} package can be used
+% to \textquotedblleft increased the number of inserts available
+% to the float mechanism\textquotedblright{} (\url{https://texfaq.org/FAQ-noroom}%
+% \ at 2023-04-02). At the last given url \textquotedblleft No room for a new
+% \guillemetright thing\guillemetleft\textquotedblright{} is treated.
+%
+% \begin{macrocode}
+ \ifx\regst@tsNoeTeX\relax%
+ \newinsert\regstatsinsert%
+ \xdef\regstats@insert{\the\allocationnumber}%
+ \xdef\regstats@max{200}%
+ \ifnum \regstats@insert < \regstats@max\relax%
+ \xdef\regstats@free{\regstats@insert}%
+ \@tempcnta=200\relax%
+ \advance\@tempcnta by -\regstats@insert\relax%
+ \xdef\regstats@insert{\the\@tempcnta}%
+ \regstats@regstatB{\regstats@insert}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@insert\space insertion\regstats@pl\space%
+ out of \regstats@max\regstats@used\regstats@lft ^^J}}%
+ \else%
+ \ifnum \regstats@insert = 200\relax%
+ \xdef\regstats@message{\regstats@message\message{Number of insertions could not be calculated. ^^J}}%
+ \else%
+ \ifnum % \regstats@insert > 200 AND %
+ \regstats@insert < 253\relax%
+ \@tempcnta=253\relax%
+ \advance\@tempcnta by -\regstats@insert\relax%
+ \@tempcntb=-200\relax%
+ \advance\@tempcntb by \regstats@insert\relax%
+ \ifluatex%
+ \@tempcntb=-65534\relax%
+ \advance\@tempcntb by \regstats@insert\relax%
+ \xdef\regstats@message{\regstats@message\message{at least \the\@tempcnta\space insertions out of 253 used, %
+ about 65 000 left ^^J}}%
+ \else%
+ \xdef\regstats@message{\regstats@message\message{at least \the\@tempcnta\space insertions out of 253 used, %
+ maybe \the\@tempcntb\space left ^^J}}%
+ \fi%
+ \else% \regstats@insert > 252, LuaTeX
+ \@tempcntb=65534\relax%
+ \advance\@tempcntb by -\regstats@insert\relax%
+ \advance\@tempcntb by -253\relax%
+ \xdef\regstats@message{\regstats@message\message{a lot of insertions out of 65 534 used, %
+ about \the\@tempcntb\space left ^^J}}%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \xdef\regstats@max{101}%
+ \@tempcnta=\regstats@max\relax%
+ \advance\@tempcnta by -\regstats@insert\relax%
+ \xdef\regstats@insert{\the\@tempcnta}%
+ \@tempcnta=\regstats@max\relax%
+ \advance\@tempcnta by -\regstats@insert\relax%
+ \xdef\regstats@free{\the\@tempcnta}%
+ \regstats@regstatB{\regstats@insert}{}{s}%
+ \xdef\regstats@message{\regstats@message\message{ \regstats@insert\space insertion\regstats@pl\space out of %
+ \regstats@max\regstats@used\regstats@lft ^^J}}%
+ \xdef\regstats@message{\regstats@message\message{* The number of available inserts might be increased by using %
+ \string\reserveinserts .^^J}}%
+ \fi%
+% \end{macrocode}
+%
+% The construction of the message is now finished, the message is delivered:
+%
+% \begin{macrocode}
+ \regstats@message%
+% \end{macrocode}
% \pagebreak
-% \end{landscape}
+%
+% A note about morewrites:
+%
+% \begin{macrocode}
+ \ifluatex%
+ \else%
+ \def\regs@wmst{16}%
+ \ifx\regs@tsmw\regs@wmst\relax%
+ \message{The morewrites package was not loaded.^^J}%
+ \message{\space With recent LaTeX and morewrites about 32 766 output streams would be available.^^J}%
+ \fi%
+ \fi%
+% \end{macrocode}
+%
+% If neither \eTeX{} nor the e-\TeX-package was found,
+% the respective warning is given:
+%
+% \begin{macrocode}
+ \regst@tsNoeTeX%
+% \end{macrocode}
%
% When option |timer| (or |timer=true|) was used, the \xpackage{regstats} package
% additionally gives the time, which was needed for the (last) compilation (run).
@@ -959,156 +1177,155 @@ option \texttt{timer} is not demonstrated very spectacular.
% \xpackage{regstats} package, but this would have no effect for the use of
% |\pdfresettimer| before this package is called. Because this package
% should be called as late as immediately before |\begin{document}|, this would mean
-% that resetting would be possible during the whole loading of all packages.\\
+% that resetting would be possible during the whole loading of all packages.
%
% |\pdfelapsedtime| is not available when |lua(la)tex| is used instead of
% |pdf(la)tex| to compile the document. In that case at the very beginning
% of your \xfile{tex} file say\\
% \verb|\directlua{starttime = os.clock()}|\\
% (even before |\documentclass|!), and the \texttt{timer} option can also
-% be used with |lualatex|. When neither |lualatex| nor |pdflatex| is used to
+% be used with \hologo{LuaLaTeX}. When neither |lualatex| nor |pdflatex| is used to
% compile the document, the timer(-option) does not work.
%
% \begin{macrocode}
- \regst@ts@timer
- }%
- }%
- }%
- }%
+ \regst@ts@timer%
}%
- }%
}
-
% \end{macrocode}
-%
% \begin{macrocode}
%</package>
% \end{macrocode}
-%
-% \newpage
+% \pagebreak
%
% \section{Installation}
-%
-% \subsection{Downloads\label{ss:Downloads}}
-%
-% Everything is available at \CTAN{}, \url{http://www.ctan.org/tex-archive/},
+% \subsection{Downloads}
+% Everything is available at \url{https://ctan.org},
% but may need additional packages themselves.\\
%
% \DescribeMacro{regstats.dtx}
-% For unpacking the |regstats.dtx| file and constructing the documentation it is required:
+% For unpacking the |regstats.dtx| file and constructing the documentation
+% it is required:
% \begin{description}
-% \item[-] \TeX Format \LaTeXe{}: \url{http://www.CTAN.org/}
+% \item[-] \TeX-Format \LaTeXe{}: \url{https://www.CTAN.org/}
%
-% \item[-] document class \xpackage{ltxdoc}, 2007/11/11, v2.0u,\\
-% \CTAN{macros/latex/base/ltxdoc.dtx}
+% \item[-] document class \xpackage{ltxdoc}, 2022/06/22, v2.1i, \url{https://ctan.org/pkg/ltxdoc}
%
-% \item[-] package \xpackage{pdflscape}, 2008/08/11, v0.10,
-% \url{http://ctan.org/pkg/pdflscape}
+% \item[-] package \xpackage{geometry}, 2020/01/02, v5.9, \url{https://ctan.org/pkg/geometry}
%
-% \item[-] package \xpackage{holtxdoc}, 2011/02/04, v0.21,
-% \url{http://ctan.org/pkg/holtxdoc}
+% \item[-] package \xpackage{holtxdoc}, 2019/12/09, v0.30, \url{https://ctan.org/pkg/holtxdoc}
%
-% \item[-] package \xpackage{hypdoc}, 2010/03/26, v1.9,
-% \url{http://ctan.org/pkg/hypdoc}
+% \item[-] package \xpackage{fontenc}, 2021/04/29, v2.0v, \url{https://ctan.org/pkg/fontenc}
% \end{description}
%
% \DescribeMacro{regstats.sty}
-% The \texttt{regstats.sty} for \LaTeXe{} (i.\,e.~each document using
+% The |regstats.sty| for \LaTeXe{} (i.\,e.~each document using
% the \xpackage{regstats} package) requires:
% \begin{description}
-% \item[-] \TeX Format \LaTeXe{}, \url{http://www.CTAN.org/}
+% \item[-] \TeX Format \LaTeXe{}, \url{https://www.CTAN.org/}
%
-% \item[-] package \xpackage{kvoptions}, 2010/12/23, v3.10,
-% \url{http://ctan.org/pkg/kvoptions}
+% \item[-] package \xpackage{kvoptions}, 2010/12/23, v3.10, \url{http://ctan.org/pkg/kvoptions}
%
-% \item[-] package \xpackage{atveryend}, 2011/06/30, v1.8,
-% \url{http://ctan.org/pkg/atveryend}
+% \item[-] package \xpackage{iftex}, \url{http://ctan.org/pkg/iftex}, or, if that is not available,
+% \begin{description}
+% \item[+] package \xpackage{ifpdf}, \url{http://ctan.org/pkg/ifpdf}
+% \item[+] package \xpackage{ifetex}, \url{http://ctan.org/pkg/ifetex}
+% \item[+] package \xpackage{ifluatex}, \url{http://ctan.org/pkg/ifluatex}
+% \end{description}
+%
+% \item[-] only for old \LaTeX-formats the \xpackage{atveryend} package is used,
+% \url{https://ctan.org/pkg/atveryend}, otherwise that package is not loaded but
+% the new hook management is used.
+%
+% \item[-] package \xpackage{regstats}, 2023-03-03, v1.1a, \url{https://ctan.org/pkg/regstats}\\
+% (Because you are reading the documentation for the
+% \xpackage{pagecolor} package, it can be assumed that you already
+% have some version of it~-- is it the current one?)
% \end{description}
%
% When option |timer| is used, additionally
% \begin{description}
-% \item[-] package \xpackage{intcalc}, 2007/09/27, v1.1,
-% \url{http://ctan.org/pkg/intcalc}
-%
-% \item[-] package \xpackage{ifluatex}, 2010/03/01, v1.3,
-% \url{http://ctan.org/pkg/ifluatex}
-%
-% \item[-] package \xpackage{ifpdf}, 2011/01/30, v2.3,
-% \url{http://ctan.org/pkg/ifpdf}
+% \item[-] package \xpackage{intcalc}, \url{https://ctan.org/pkg/intcalc}
% \end{description}
-% are needed.\\
+% is needed.\\
%
% \DescribeMacro{regstats-example.tex}
-% The \texttt{regstats-example.tex} requires the same files as all
-% documents using the \xpackage{regstats} package, i.\,e. the ones
-% named above and additionally:
+% The |regstats-example.tex| requires the same files as all
+% documents using the \xpackage{regstats} package
+% (see preceding paragraph |regstats.sty|) and additionally:
% \begin{description}
-% \item[-] class \xpackage{article}, 2007/10/19, v1.4h, from \xpackage{classes.dtx}:\\
-% \CTAN{macros/latex/base/classes.dtx}
-%
-% \item[-] package \xpackage{regstats}, 2012/01/07, v1.0h,
-% \url{http://ctan.org/pkg/regstats}\\
-% (Well, it is the example file for this package, and because you are reading the
-% documentation for the \xpackage{regstats} package, it can be assumed that you already
-% have some version of it -- is it the current one?)
+% \item[-] class \xpackage{article}, 2022/07/02, v1.4n, from \xpackage{classes}: %
+% \url{https://ctan.org/pkg/classes}
% \end{description}
%
% \DescribeMacro{Alternative}
-% As possible alternative in section \ref{sec:Alternatives} there is listed
+% \DescribeMacro{regcount}
+% As possible alternative in section~\ref{sec:Alternatives} there is listed
% \begin{description}
-% \item[-] \xpackage{regcount}, 1999/08/03, v1.0:
-% \url{http://www.ctan.org/pkg/regcount}
+% \item[-] package \xpackage{regcount}, 1999/08/03, v1.0, \url{https://ctan.org/pkg/regcount},
+% which gives the wrong number for insertions, because it uses |\the\count20|,
+% but insertions are \emph{not} allocated from 0 upwards but starting at a higher number moving downward
+% (and having some jumps to other number ranges, see \hbox{p. \pageref{insertions}).}
% \end{description}
%
-% \pagebreak
-%
% \DescribeMacro{Oberdiek}
% \DescribeMacro{holtxdoc}
% \DescribeMacro{kvoptions}
-% \DescribeMacro{atveryend}
-% \DescribeMacro{ifluatex}
-% \DescribeMacro{ifpdf}
-% \DescribeMacro{intcalc}
-% \DescribeMacro{ltxcmds}
-% \DescribeMacro{pdflscape}
-% All packages of \textsc{Heiko Oberdiek's} bundle `oberdiek'
-% (especially \xpackage{holtxdoc}, \xpackage{kvoptions}, \xpackage{atveryend},
-% \xpackage{ifluatex}, \xpackage{ifpdf}, \xpackage{intcalc}, \xpackage{ltxcmds},
-% and \xpackage{pdflscape}) are also available in a TDS compliant ZIP archive:\\
-% \CTAN{install/macros/latex/contrib/oberdiek.tds.zip}.\\
+% All packages of the `oberdiek' bundle
+% (especially \xpackage{holtxdoc} and \xpackage{kvoptions})
+% are also available in a TDS compliant ZIP archive:\newline
+% \url{https://mirror.ctan.org/install/macros/latex/contrib/oberdiek.tds.zip}.
% It is probably best to download and use this, because the packages in there
-% are quite probably both recent and compatible among themselves.\\
-%
-% \vskip 1.2cm
+% are quite probably both recent and compatible among themselves.
%
% \DescribeMacro{hyperref}
% \noindent \xpackage{hyperref} is not included in that bundle and needs to be
-% downloaded separately,\\
-% \url{http://mirror.ctan.org/install/macros/latex/contrib/hyperref.tds.zip}.\\
+% downloaded separately,\newline
+% \url{https://mirror.ctan.org/install/macros/latex/contrib/hyperref.tds.zip}.
+%
+% \DescribeMacro{atveryend}
+% \noindent \xpackage{atveryend} is only loaded for and used with old \LaTeX-formats,
+% otherwise that package is not loaded but the new hook management is used.
+% The \xpackage{atveryend} package is available from
+% \url{https://mirrors.ctan.org/macros/latex/contrib/atveryend.zip}
+%
+% \DescribeMacro{intcalc}
+% \noindent \xpackage{intcalc} is available from
+% \url{https://mirrors.ctan.org/install/macros/latex/contrib/intcalc.tds.zip}.
+%
+% \DescribeMacro{iftex}
+% \DescribeMacro{ifetex}
+% \DescribeMacro{ifluatex}
+% \DescribeMacro{ifpdf}
+% \noindent \xpackage{iftex} is available from
+% \url{https://mirrors.ctan.org/install/macros/generic/iftex.tds.zip},
+% its predecessors \xpackage{ifetex}, \xpackage{ifluatex}, and \xpackage{ifpdf}
+% are no longer officially available for separate download.
%
-% \DescribeMacro{M\"{u}nch}
+% \vskip 1cm
+%
+% \DescribeMacro{Münch}
% A hyperlinked list of my (other) packages can be found at
-% \url{http://www.Uni-Bonn.de/~uzs5pv/LaTeX.html}.\\
+% \url{https://ctan.org/author/muench-hm}.\\
%
% \subsection{Package, unpacking TDS}
-%
-% \paragraph{Package.} This package is available on \CTAN{}
+% \paragraph{Package.} This package is available on \url{https://www.CTAN.org}.
% \begin{description}
-% \item[\CTAN{macros/latex/contrib/regstats/regstats.dtx}]\hspace*{0.1cm} \\
+% \item[\url{https://mirror.ctan.org/macros/latex/contrib/regstats/regstats.dtx}]\ %
% The source file.
-% \item[\CTAN{macros/latex/contrib/regstats/regstats.pdf}]\hspace*{0.1cm} \\
+% \item[\url{https://mirror.ctan.org/macros/latex/contrib/regstats/regstats.pdf}]\ %
% The documentation.
-% \item[\CTAN{macros/latex/contrib/regstats/regstats-example.pdf}]\hspace*{0.1cm} \\
-% The compiled example file, as it should look like.
-% \item[\CTAN{macros/latex/contrib/regstats/regstats-example.log}]\hspace*{0.1cm} \\
+% \item[\url{https://mirror.ctan.org/macros/latex/contrib/regstats/regstats-example.pdf}]\ %
+% The compiled example file.
+% \item[\url{https://mirror.ctan.org/macros/latex/contrib/regstats/regstats-example.log}]\ %
% A \xfile{log} file for the example.
-% \item[\CTAN{macros/latex/contrib/regstats/README}]\hspace*{0.1cm} \\
+% \item[\url{https://mirror.ctan.org/macros/latex/contrib/regstats/README}]\ %
% The README file.
% \end{description}
-% There is also a regstats.tds.zip available:
+%
+% There is also a |regstats.tds.zip| available:
% \begin{description}
-% \item[\CTAN{install/macros/latex/contrib/regstats.tds.zip}]\hspace*{0.1cm} \\
-% Everything in \xfile{TDS} compliant, compiled format.
+% \item[\url{https://mirror.ctan.org/install/macros/latex/contrib/regstats.tds.zip}]\ %
+% Everything in TDS compliant, compiled format.
% \end{description}
% which additionally contains\\
% \begin{tabular}{ll}
@@ -1121,11 +1338,11 @@ option \texttt{timer} is not demonstrated very spectacular.
%
% \bigskip
%
-% \noindent For required other packages, see the preceding subsection.
+% \noindent For required other packages please see the preceding subsection.
%
% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting
% \docstrip{} archive. The files are extracted by running the
-% \xfile{.dtx} through \plainTeX{}:
+% \xext{dtx} through \plainTeX{}:
% \begin{quote}
% \verb|tex regstats.dtx|
% \end{quote}
@@ -1205,18 +1422,17 @@ option \texttt{timer} is not demonstrated very spectacular.
% \usebox0
% \fi
% \end{quote}
-% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip{}'s
-% \xfile{TDS} installing feature, then some files can already be in the right
+% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's
+% TDS installing feature, then some files can already be in the right
% place, see the documentation of \docstrip{}.
%
% \subsection{Refresh file name databases}
%
-% If your \TeX{}~distribution (\teTeX{}, \mikTeX{},\dots{}) relies on file name
-% databases, you must refresh these. For example, \teTeX{} users run
-% \verb|texhash| or \verb|mktexlsr|.
+% If your \TeX~distribution (\TeX\,Live, \mikTeX, \dots) relies on
+% file name databases, you must refresh these. For example, \TeX\,Live\ users
+% run \verb|texhash| or \verb|mktexlsr|.
%
% \subsection{Some details for the interested}
-%
% \paragraph{Unpacking with \LaTeX{}.}
% The \xfile{.dtx} chooses its action depending on the format:
% \begin{description}
@@ -1224,7 +1440,7 @@ option \texttt{timer} is not demonstrated very spectacular.
% \item[\LaTeX:] Generate the documentation.
% \end{description}
% If you insist on using \LaTeX{} for \docstrip{} (really,
-% \docstrip{} does not need \LaTeX{}), then inform the autodetect routine
+% \docstrip{} does not need \LaTeX ), then inform the auto-detect routine
% about your intention:
% \begin{quote}
% \verb|latex \let\install=y\input{regstats.dtx}|
@@ -1242,7 +1458,7 @@ option \texttt{timer} is not demonstrated very spectacular.
% \end{quote}
%
% \noindent An example follows how to generate the
-% documentation with \pdfLaTeX{}:
+% documentation with \pdfLaTeX :
%
% \begin{quote}
%\begin{verbatim}
@@ -1264,53 +1480,41 @@ option \texttt{timer} is not demonstrated very spectacular.
%
% \section{Acknowledgements}
%
-% I would like to thank \textsc{Heiko Oberdiek} for providing
-% the \xpackage{hyperref}, \xpackage{holtxdoc}, \xpackage{kvoptions},
-% \xpackage{atveryend}, \xpackage{ifluatex}, \xpackage{ifpdf},
-% \xpackage{intcalc}, \xpackage{ltxcmds}, and \xpackage{pdflscape}
-% as well as a~lot~(!) of other useful packages (from which I also got everything
-% I know about creating a file in \xext{dtx} format, ok, say it: copying),
-% \textsc{Jean-Pierre F. Drucbert} for his \xpackage{regcount} package,
-% \textsc{Robin Fairbairns} for pointing me to the \xpackage{regcount} package,
-% and the \Newsgroup{comp.text.tex} and \Newsgroup{de.comp.text.tex}
-% newsgroups as well as \url{http://tex.stackexchange.com}
-% for their help in all things \TeX{}.
-%
-% \bigskip
+% I would like to thank \textsc{Heiko Oberdiek} for providing a lot of
+% useful packages (from which I also got everything I know about creating
+% a file in \xext{dtx} format, OK, say it: copying),
+% \textsc{Jean-Pierre F. Drucbert}~(\textdied) for his \xpackage{regcount} package,
+% \textsc{Robin Fairbairns} for pointing me to the \xpackage{regcount} package.
%
% \phantomsection
% \begin{History}\label{History}
% \begin{Version}{2011/05/14 v1.0a}
-% \item Upload to \CTAN{}.
+% \item Upload to CTAN.
% \end{Version}
% \begin{Version}{2011/05/16 v1.0b}
-% \item Name clash with \xfile{regcount} package, fixed.
+% \item Fixed a name clash with \xfile{regcount} package.
% \item \xfile{regcount} package listed as possible alternative.
-% \item Bug: skip and muskip mixed up, fixed.
+% \item Bug: |skip| and |muskip| mixed up, fixed.
% \item Counting of skips, math families, and insertions added.
% \item Bug fix: insertions are numbered high to low.
-% \item Option |proof| added.
-% \item Diverse details.
+% \item Option |proof| added [obsolete now].
% \end{Version}
% \begin{Version}{2011/06/08 v1.0c}
% \item Bug Fix: Number of available |\skip| registers with \eTeX{}.
% \item Change in \eTeX{}-detection.
% \item New option |left|.
-% \item Minor details.
% \end{Version}
% \begin{Version}{2011/06/18 v1.0d}
-% \item Bug Fix: Information about used registers/counter fixed.
+% \item Bug Fix: Information about used registers/counters fixed.
% \item New option |timer|.
-% \item Some details.
% \end{Version}
% \begin{Version}{2011/08/22 v1.0e}
% \item The information about the used registers is now presented even later.
% \item Quite some details in the documentation.
-% \item Updated to \TeX{}live2011.
% \item Hot fix: \TeX{} 2011/06/27 has changed |\enddocument| and
% thus broken the |\AtVeryVeryEnd| command/hooking
% of \xpackage{atveryend} package as of 2011/04/23, v1.7.
-% Until it is fixed, |\AtEndAfterFileList| is used.
+% Until it is fixed, |\AtEndAfterFileList| \emph{was} used.
% \end{Version}
% \begin{Version}{2011/08/23 v1.0f}
% \item The \xpackage{atveryend} package was fixed (2011/06/30, v.1.8).
@@ -1320,15 +1524,15 @@ option \texttt{timer} is not demonstrated very spectacular.
% works with the old version, the information is just presented
% a little bit earlier during compilation, thus theoretically
% there could be missed some register use after that information,
-% which would be obvious in the \xfile{log}-file.
-% \item New \xpackage{hyperref} package used for the documentation.
+% which would be obvious in the \xfile{log}-file.~--
+% [\xpackage{atveryend} is no longer used after v1.0i of regstats,
+% when a recent \LaTeX-format with hook-management is used.]
% \end{Version}
% \begin{Version}{2012/01/01 v1.0g}
-% \item Now supports (but does not require) |lua(la)tex| for
-% option \texttt{timer}.
+% \item Now supports (but does not require) \hologo{LuaLaTeX} for option \texttt{timer}.
% \item Bug fix: wrong path given in the documentation, fixed.
% \item Due to the use of temporary counters, no longer a new counter is used
-% (except when option \texttt{proof=true} is chosen, of course).
+% (except when option \texttt{proof=true} is chosen, of course). [deprecated now]
% \item Circumvention of the incompatibility of the \xpackage{atveryend}
% package with \xclass{seminar} class and \xpackage{slidesec} package
% introduced.
@@ -1336,7 +1540,24 @@ option \texttt{timer} is not demonstrated very spectacular.
% \end{Version}
% \begin{Version}{2012/01/07 v1.0h}
% \item Bug fix: |\ifluatex| undefined without \xpackage{ifluatex} leads to wrong
-% association of |\else|\ldots|\fi|. Fixed by moving |\ifregstats@timer|.
+% association of |\else|\ldots|\fi|. Fixed by moving |\ifregstats@timer|.
+% \end{Version}
+% \begin{Version}{2012/04/01 v1.0i}
+% \item Bug fix: removed |.| before |on line|.
+% \item Bug fix: removed a |\pagebreak| after the first line of a page
+% from the documentation.
+% \item Bug fix: added a lot of |%|-signs at the end of lines in the code.
+% \item This version has been archived at
+% \url{https://web.archive.org/web/20170107053910/https://mirrors.ctan.org/install/macros/latex/contrib/regstats.tds.zip}.
+% \end{Version}
+% \begin{Version}{2023-04-04 v1.1a}
+% \item No longer uses the \pkg{atveryend} package for new \LaTeX-format but its hook-management.
+% \item No longer uses the \pkg{ltxcmds} package (but it is still loaded by the \xpackage{kvoptions} package).
+% \item No longer uses the deprecated |\BeforeClearDocument|.
+% \item Option proof is now deprecated.
+% \item Converted to UTF-8.
+% \item Added |\stress...| commands to the example.
+% \item Updates to documentation and README.
% \end{Version}
% \end{History}
%
@@ -1345,7 +1566,7 @@ option \texttt{timer} is not demonstrated very spectacular.
% When you find a mistake or have a suggestion for an improvement of this package,
% please send an e-mail to the maintainer, thanks! (Please see BUG REPORTS in the README.)
%
-% \pagebreak
+% \bigskip
%
% \PrintIndex
%