summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/lastpage/lastpage.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/lastpage/lastpage.dtx')
-rw-r--r--Master/texmf-dist/source/latex/lastpage/lastpage.dtx1457
1 files changed, 896 insertions, 561 deletions
diff --git a/Master/texmf-dist/source/latex/lastpage/lastpage.dtx b/Master/texmf-dist/source/latex/lastpage/lastpage.dtx
index 099d035a999..2b5a5294369 100644
--- a/Master/texmf-dist/source/latex/lastpage/lastpage.dtx
+++ b/Master/texmf-dist/source/latex/lastpage/lastpage.dtx
@@ -1,46 +1,54 @@
% \iffalse meta-comment
%
% File: lastpage.dtx
-% Version: 2021/09/03 v1.2n
+% Version: 2023-03-07 v2.0a
+% Info: Refers to last page's name
%
-% Copyright (C) 2010 - 2021 by
-% H.-Martin M"unch <Martin dot Muench at Uni-Bonn dot de>
+% Copyright © 2010 - 2023 by
+% H.-Martin Münch <Martin dot Muench at Uni-Bonn dot de>
% Portions of code copyrighted by other people as marked.
%
% This package was invented by Jeffrey P. Goldberg.
% I thought that a replacement was needed and therefore created the pageslts package,
-% https://www.ctan.org/pkg/pageslts
+% https://ctan.org/pkg/pageslts
% . Nevertheless, for compatibility with existing documents/packages as well as for
% the low amount of resources needed by the lastpage package (no new counter!),
% I updated this package.
% Thanks go to Jeffrey P. Goldberg for allowing me to do this.
%
+% While this package allows for things like "Page \thepage{} of \pageref{LastPage}"
+% to get "Page 7 of 9" or "Page VII of IX",
+% the NUMBER of pages is nowadays available via \@abspage@last from the kernel,
+% but with pages for example I to X and then 1 to 10, the number of pages would be "20",
+% while the name of the last page is "10". Decide what you need/want!
+%
% 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 lastpage.dtx,
% the README, and the derived files
-% lastpage.sty, lastpage.pdf,
-% lastpage.ins, lastpage.drv,
+% lastpage.sty, lastpage209.sty, lastpage2e.sty,
+% lastpageclassic.sty, lastpagemodern.sty,
+% lastpage.pdf, lastpage.ins, lastpage.drv,
% lastpage-example.tex, lastpage-example.pdf.
%
-% 'lastpage' is available on CTAN:
-% https://www.ctan.org/pkg/lastpage
+% "lastpage" is available on CTAN:
+% https://ctan.org/pkg/lastpage
%
% Also a TDS.ZIP file is provided that contains all the files
% already sorted in a TDS tree:
-% https://mirrors.ctan.org/install/macros/latex/contrib/lastpage.tds.zip
+% https://mirror.ctan.org/install/macros/latex/contrib/lastpage.tds.zip
%
%<*ignore>
\begingroup
@@ -55,10 +63,10 @@
%</ignore>
%<*install>
\input docstrip.tex
-\Msg{*********************************************************************}
-\Msg{* Installation}
-\Msg{* Package: lastpage 2021/09/03 v1.2n Refers to last page's name (HMM)}
-\Msg{*********************************************************************}
+\Msg{**********************************************************************}
+\Msg{* Installation *}
+\Msg{* Package: lastpage 2023-03-07 v2.0a Refers to last page's name (HMM)*}
+\Msg{**********************************************************************}
\keepsilent
\askforoverwritefalse
@@ -69,17 +77,13 @@
This is a generated file.
Project: lastpage
-Version: 2021/09/03 v1.2n
+Version: 2023-03-07 v2.0a
+Info: Refers to last page's name
-Copyright (C) 2010 - 2021 by
- H.-Martin M"unch <Martin dot Muench at Uni-Bonn dot de>
+Copyright (C) 2010 - 2023 by
+ H.-Martin Muench <Martin dot Muench at Uni-Bonn dot de>
Portions of code copyrighted by other people as marked.
-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.)
-
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
@@ -88,31 +92,37 @@ version. This version of this license is in
and the latest version of this license is in
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.
-This package was invented by
-Jeffrey P. Goldberg (jeffrey+news at goldmark dot org).
+This package was invented by Jeffrey P. Goldberg.
I thought that a replacement was needed and therefore created the pageslts package,
-https://www.ctan.org/pkg/pageslts
+https://ctan.org/pkg/pageslts
. Nevertheless, for compatibility with existing documents/packages as well as for
the low amount of resources needed by the lastpage package (no new counter!),
I updated this package.
Thanks go to Jeffrey P. Goldberg for allowing me to do this.
+While this package allows for things like "Page slash thepage{} of slash pageref{LastPage}"
+to get "Page 7 of 9" or "Page VII of IX",
+the NUMBER of pages is nowadays available via slash @abspage@last from the kernel,
+but with pages for example I to X and then 1 to 10, the number of pages would be "20",
+while the name of the last page is "10". Decide what you need/want!
+
This work consists of the main source file lastpage.dtx,
the README, and the derived files
- lastpage.sty, lastpage.pdf,
- lastpage.ins, lastpage.drv,
+ lastpage.sty, lastpage209.sty, lastpage2e.sty,
+ lastpageclassic.sty, lastpagemodern.sty,
+ lastpage.pdf, lastpage.ins, lastpage.drv,
lastpage-example.tex, lastpage-example.pdf.
In memoriam
- Claudia Simone Barth + 1996/01/30
- Tommy Muench + 2014/01/02
- Hans-Klaus Muench + 2014/08/24
+ Claudia Simone Barth + 1996-01-30
+ Tommy Muench + 2014-01-02
+ Hans-Klaus Muench + 2014-08-24
\endpreamble
\let\MetaPrefix\DoubleperCent
@@ -121,8 +131,11 @@ In memoriam
\file{lastpage.ins}{\from{lastpage.dtx}{install}}%
\file{lastpage.drv}{\from{lastpage.dtx}{driver}}%
\usedir{tex/latex/lastpage}%
- \file{lastpage209.sty}{\from{lastpage.dtx}{lastpage209}}%
\file{lastpage.sty}{\from{lastpage.dtx}{package}}%
+ \file{lastpage209.sty}{\from{lastpage.dtx}{lastpage209}}%
+ \file{lastpage2e.sty}{\from{lastpage.dtx}{lastpage2e}}%
+ \file{lastpageclassic.sty}{\from{lastpage.dtx}{lastpageclassic}}%
+ \file{lastpagemodern.sty}{\from{lastpage.dtx}{lastpagemodern}}%
\usedir{doc/latex/lastpage}%
\file{lastpage-example.tex}{\from{lastpage.dtx}{example}}%
}
@@ -134,7 +147,8 @@ In memoriam
\Msg{* To finish the installation you have to move the following}
\Msg{* file into a directory searched by TeX:}
\Msg{*}
-\Msg{* lastpage.sty (or lastpage209.sty for TeX 2.09)}
+\Msg{* lastpage.sty, lastpage209.sty, lastpage2e.sty,}
+\Msg{* lastpageclassic.sty, and lastpagemodern.sty}
\Msg{*}
\Msg{* To produce the documentation run the file `lastpage.drv'}
\Msg{* through (pdf)LaTeX, e.g.}
@@ -168,19 +182,14 @@ In memoriam
%
% \begin{macrocode}
%<*driver>
-\NeedsTeXFormat{LaTeX2e}[2014/05/01]
+\NeedsTeXFormat{LaTeX2e}[2022-11-01]
\ProvidesFile{lastpage.drv}%
- [2021/09/03 v1.2n Refers to last page's name (HMM)]
-\documentclass{ltxdoc}[2015/03/26]% v2.0w
-\usepackage{holtxdoc}[2012/03/21]% v0.24
-%% lastpage may work with earlier versions of LaTeX2e and those
-%% class and package, but this was not tested.
-%% Please consider updating your LaTeX, class, and package
-%% to the most recent version (if they are not already the most
-%% recent version).
+ [2023-03-07 v2.0a Refers to last page's name (HMM)]
+\documentclass{ltxdoc}[2022/06/22]% v2.1i Standard LaTeX documentation class
+\usepackage{holtxdoc}[2019/12/09]% v0.30 Private additional ltxdoc support (HO)
\hypersetup{%
pdfsubject={Refers to last page's name (HMM; JPG)},%
- pdfkeywords={LaTeX, lastpage, last page, page number, page name, H.-Martin Muench, Jeffrey P. Goldberg},%
+ pdfkeywords={LaTeX, lastpage, last page, page number, page name},%
pdfencoding=auto,%
pdflang={en},%
breaklinks=true,%
@@ -195,36 +204,15 @@ In memoriam
pdfwindowui=true,%
pdfnewwindow=true%
}
-\usepackage{ulem}[2012/05/18]% no version is given in the ulem.sty file
\CodelineIndex
-\hyphenation{created every-thing ignored}
-\gdef\unit#1{\mathord{\thinspace\mathrm{#1}}}%
+\hyphenation{every-thing}
\begin{document}
\DocInput{lastpage.dtx}%
\end{document}
%</driver>
% \end{macrocode}
-%
% \fi
%
-% \CheckSum{316}
-%
-% \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{lastpage.drv}
%
% \begingroup
@@ -242,67 +230,83 @@ In memoriam
% }%^^A
% \expandafter\endgroup\x
%
-% \DoNotIndex{\",\-,\,,\\,\noindent}
-% \DoNotIndex{\documentclass,\usepackage,\ProvidesPackage}
-% \DoNotIndex{\NeedsTeXFormat,\plainTeX,\TeX,\LaTeX,\pdfLaTeX}
-% \DoNotIndex{\textbf,\textit,\textsf,\texttt,\underline,\mathord,\normalsize}
-% \DoNotIndex{\textquotedblleft,\textquotedblright}
-% \DoNotIndex{\ifx,\ifnum,\gdef,\href,\pageref,\empty}
-% \DoNotIndex{\newpage,\pagebreak,\newline,\linebreak,\nolinebreak,\MessageBreak}
-% \DoNotIndex{\smallskip,\medskip,\bigskip,\space,\hfil,\qquad,\thinspace}
-% \DoNotIndex{\listfiles,\section,\today,\the,\arabic}
-% \DoNotIndex{\makeatletter,\makeatother,\verb}
-% \DoNotIndex{\begin,\end,\enddocument,\mathrm}
-% \DoNotIndex{\lastpage@testa,\lastpage@testb,\lastpage@one}
+% \DoNotIndex{\@auxout,\@evenfoot,\@firstofone,\@ifl@t@r,\@ifpackagelater,\@ifpackageloaded}
+% \DoNotIndex{\@ifundefined,\@mainaux,\@number,\@oddfoot}
+% \DoNotIndex{\addtocounter,\AddToHook,\arabic,\begin}
+% \DoNotIndex{\bigskip,\clearpage,\csname,\documentclass,\empty,\end,\endcsname}
+% \DoNotIndex{\enddocument,\ExplSyntaxOff,\ExplSyntaxOn,\fmtversion}
+% \DoNotIndex{\g,\gdef,\here,\hfil,\Hy@temp,\Hy@unicodefalse}
+% \DoNotIndex{\hypersetup,\if@filesw,\ifHy@hypertexnames,\ifHy@pageanchor,\ifHy@plainpages}
+% \DoNotIndex{\ifnum,\IfPackageAtLeastTF,\IfPackageLoadedTF,\ifx,\immediate,\input}
+% \DoNotIndex{\label,\lastpage,\lastpage-example.tex,\lastpage.dtx,\lastpage.sty,\lastpagee.sty}
+% \DoNotIndex{\lastpageclassic.sty,\lastpagemodern.sty,\LaTeX,\listfiles}
+% \DoNotIndex{\makeatletter,\makeatother,\markboth,\message,\MessageBreak}
+% \DoNotIndex{\NeedsTeXFormat,\newcommand,\newline,\newpage}
+% \DoNotIndex{\noindent,\normalsize,\numexpr,\origenddocument,\PackageError}
+% \DoNotIndex{\PackageWarning,\pagenumbering,\pageref,\pdfstringdef,\ProvidesPackage}
+% \DoNotIndex{\qquad,\RequirePackage,\section,\slshape,\smallskip,\space,\test,\textbf}
+% \DoNotIndex{\textit,\textquotedblleft,\textquotedblright,\textsf,\texttt,\the,\thepage}
+% \DoNotIndex{\today,\upshape,\url,\usepackage,\value,\verb,\write}
%
% \title{The \xpackage{lastpage} package}
-% \date{2021/09/03 v1.2n}
-% \author{H.-Martin M\"{u}nch\\\xemail{Martin.Muench at Uni-Bonn.de}\\
+% \date{2023-03-07 v2.0a}
+% \author{H.-Martin Münch\\\xemail{Martin.Muench at Uni-Bonn.de}\\
% invented by Jeffrey P. Goldberg\\\xemail{jeffrey+news at goldmark.org}}
%
% \maketitle
%
% \begin{abstract}
-% \noindent This \LaTeX{} package puts the label \texttt{LastPage}
-% (|\AtEndDocument|) into the \xfile{.aux} file, allowing the user to refer
-% to the last page of a document. This might be particularly useful
-% in places like headers or footers.~--\\
-% When more than one page numbering scheme is used, or the fnsymbol page
-% numbering scheme is used, or another package has output after this package,
-% or the number of pages instead of the last page's name is needed,
-% or the page numbers exceed a certain range, there might be problems,
-% which can be solved by using the \xpackage{pageslts} package instead.
+% \noindent This \LaTeX{} package puts the label \texttt{LastPage}
+% at the end of the document into the \xfile{.aux} file,
+% allowing the user to refer to the last page of a document.
+% This might be particularly useful in places like headers or footers.~--\\
+% While this package allows for things like\\
+% \hbox{\textquotedblleft Page} \hbox{|\thepage{}|} of |\pageref{LastPage}|\textquotedblright{}
+% to get \textquotedblleft Page 7 of 9\textquotedblright{} or
+% \textquotedblleft Page VII of IX\textquotedblright,
+% the \emph{number} of pages is nowadays available via |\@abspage@last| from the kernel,
+% but when more than one page numbering scheme is used
+% (for example pages I~to X and then 1~to 10, thus number of pages
+% \hbox{\textquotedblleft 20\textquotedblright ,} but name of the last page
+% \hbox{\textquotedblleft 10\textquotedblright ),}
+% or when or the fnsymbol page numbering scheme is used, or another package
+% has output after this package, or the page numbers exceed a certain range,
+% there might be problems, which can be solved by using the
+% \xpackage{pageslts} package instead.
% \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.
+% 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.
%
% \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.}
+% \textbf{Note: At several places in this manual as alternative the \pkg{pageslts}
+% package is \textquotedblleft advertised\textquotedblright. The current version
+% 2015/12/21 v1.2f of that package has not yet been updated to the new hook mechanism.
+% In special cases (for example }|\pagenumbering{fnsymbol}|\textbf{) the current version
+% of that package combined with a current \LaTeX-format fails. Together with about
+% 80~other packages (small to large, public as well as private, some probably obsolete)
+% it is in the update queue.}
%
% \newpage
%
% \tableofcontents
%
% \section{Introduction}
-%
% \indent This \LaTeX{} package puts the label \texttt{LastPage}
-% (|\AtEndDocument|) into the \xfile{aux} file, allowing the user to refer
+% (at end of the document) into the \xfile{aux} file, allowing the user to refer
% to the last page of a document via |\pageref{LastPage}|.
% This might be particularly useful in places like headers or footers.
%
% \bigskip
%
% This package was invented by \textbf{Jeffrey P. Goldberg},
-% and is now maintained by \textsc{H.-Martin M\"{u}nch}. A~big
+% and is now maintained by \textsc{H.-Martin Münch}. A~big
% \textquotedblleft Thank you!\textquotedblright{} to
% \textsc{Jeffrey P. Goldberg} for granting this.
%
@@ -312,19 +316,13 @@ In memoriam
% you might want to have a look at the \xpackage{pageslts} package
% (see section~\ref{sec:Alternatives}: Alternatives).
%
-% \bigskip
-%
% \section{Usage}
-%
% \indent Just load the package placing
% \begin{quote}
% |\usepackage{lastpage}|
% \end{quote}
-% \noindent in the preamble of your \LaTeXe{} source file or
-% \begin{quote}
-% |\usepackage{lastpage209}|
-% \end{quote}
-% \noindent in the preamble of your \LaTeX2.09{} source file.\\
+% \noindent in the preamble of your source file
+% (or |\input{lastpage.sty}| if |\usepackage| is unknown).\\
%
% \indent For example for various draft forms it is desirable to have a
% page reference to the last page, so that e.\,g. page footers can
@@ -363,32 +361,23 @@ In memoriam
% have got to look in the used class/package(s)/preamble instead of in the
% \xpackage{lastpage} package.\\
%
-% If the \emph{number} of the last page is needed, this can be extracted
-% from the reference with the \xpackage{refcount} package
-% (\url{https://www.ctan.org/pkg/refcount}, since version~2.0 of it):
-% \begin{verbatim}
-% \newcounter{lastpagenumber}%
-% \setcounter{lastpagenumber}{\getrefbykeydefault{LastPage}{page}{1}}%
-%\end{verbatim}
-% but this only works if the last page has an arabic number
-% (and it is not necessarily the total number of pages).
-% For example it would not work in the example file because of the
-% |Roman| pagenumbering scheme:\newline
-% |\getrefbykeydefault{LastPage}{page}{1}| would result in |IV| instead of |4|.
-% When using the \xpackage{pageslts} package, the counter |pagesLTS.pagenr|
-% holds the value of the total number of pages (after a compilation run
-% with writing access to the \xfile{.aux} file).
-%
-% \section{A lot of WARNINGS\label{sec:warn}}
-%
-% \indent (Short: try using the \xpackage{pageslts} package instead,
-% if you have room for some more |\count|ers.\footnote{To determine the number of%
-% used and available counters and other registers, the \xpackage{regstats} package%
-% might be helpful.})
+% If the total \emph{number} of pages of a document is needed,
+% the kernel already gives this by |\makeatletter\@abspage@last\makeatother|
+% (needs at least two compiler runs).
%
+% \section{Some \textsc{Warnings}\label{sec:warn}}
% \subsection{\texttt{\textbackslash AtEndDocument}\label{ssec:aed}}
+% \indent {\bfseries |\AtEndDocument| is not used by the \pkg{lastpagemodern.sty}
+% version of the lastpage package, requiring \LaTeX -format 2022-11-01
+% or newer. Instead |\AddToHook{enddocument/afterlastpage}| is used
+% and the problem does not arise.}
%
-% \indent The output of a \LaTeXe{} run is not independent of the order
+% \bigskip
+%
+% \pkg{lastpageclassic.sty} uses |\AtEndDocument| and
+% \pkg{lastpage209.sty} redefines \linebreak |\enddocument|.
+% The last two cases are problematic:\\
+% The output of a \LaTeXe{} run is not independent of the order
% in which the packages are loaded. It is often the case that the same
% formats for which one must put tables and figure at the end,
% are the ones in which endnotes are also required.
@@ -398,11 +387,7 @@ In memoriam
% as well). Clearly it is not safe for any package writer or user
% to assume that no material will follow what they put into
% |\AtEndDocument|. Therefore a message, which begins with
-% \texttt{AED}, is included in every usage of |\AtEndDocument|.~--\\
-% \indent (The \xpackage{pageslts} package solves this problem by using
-% |\AfterLastShipout| from \textsc{Heiko Oberdiek's} \xpackage{atveryend}
-% package for the references\\
-% |\lastpageref{VeryLastPage}| and |\lastpageref{LastPages}|.)\\
+% \texttt{AED}, is included in every usage of |\AtEndDocument|.
% \xpackage{lastpage} uses |\AtEndDocument{|\ldots|\clearpage|\ldots|}|, thus\\
%|\usepackage{lastpage}|\ldots|\AtEndDocument{|\textit{something}|}|
% will place \textit{something} after the |\clearpage|. To place it earlier, use\\
@@ -420,44 +405,38 @@ In memoriam
% ...
% \end{document}
% \end{verbatim}
-% (might need a protected and/or expanded |\def|). When |\cleapage| leads
-% to some output, |\cleapage\textit{something}| instead of |\textit{something}|
+% (might need a protected and/or expanded |\def|). When |\clearpage| leads
+% to some output, |\clearpage\textit{something}| instead of |\textit{something}|
% might be wanted.
%
-% \subsection{Interaction with very old versions of the \xpackage{endfloat} package\label{sec:endfloat}}
-%
-% \indent The \emph{very} old version~2.0 (and earlier) of the \xpackage{endfloat}
-% package actually redefined the |\enddocument| command, and so interfered
-% drastically with the \LaTeXe{} commands which make use of |\AtEndDocument|.
-% Newer versions of \xpackage{endfloat} exist
-% (at~the time of writing this documentation: v2.5d as of 2011/12/25)
-% in modern documentation form, which should be available from
-% the same source where you received this file, see subsection~\ref{ss:Downloads}.
-% (\textquotedblleft Note that versions~2.1 and beyond will no longer work
-% with \LaTeX209{}. Get your administrator to upgrade your site to the
-% new standard, \LaTeXe{}. Although version~2.0 (a \LaTeX209{} version)
-% will usually work with \LaTeXe{}, it will not do so in combination
-% with certain other packages.\textquotedblright{} (\xpackage{endfloat}
-% v2.5d, 2011/12/25))\\
-% A note is placed in the style file.\\
+% \subsection{Interaction with ancient versions of the \xpackage{endfloat} package\label{sec:endfloat}}
+%
+% \indent {\bfseries |\AtEndDocument| is not used by the \pkg{lastpagemodern.sty}
+% version of the lastpage package, requiring \LaTeX -format 2022-11-01
+% or newer. Instead |\AddToHook{enddocument/afterlastpage}| is used
+% and the problem does not arise.}
+%
+% \bigskip
+% The \emph{ancient} version~2.0 (and earlier; 2.0~from 1992;
+% current version at the time of updating this documentation: 2.7~from 2019)
+% of the \xpackage{endfloat} package actually redefined the |\enddocument| command,
+% and so interfered drastically with the \LaTeXe{} commands which make use of
+% |\AtEndDocument|.
% If you want your \texttt{LastPage} to label the last page of these end floats,
% you need to load \xpackage{lastpage} after loading \xpackage{endfloat}
% (or use \texttt{VeryLastPage} from the \xpackage{pageslts} package instead).
% If, on the other hand, you \emph{want} \texttt{LastPage} to refer
% to the (not so) last page, exclusive of the floats at the end,
% then load in the reverse order. Independent from the order of
-% \xpackage{lastpage} and \xpackage{endfloat}, you will still need the
-% modified\footnote{New versions are available since more than 15~years,
-% so it really might be time to update, if you did not do it already.}
-% version of \xpackage{endfloat}.\\
+% \xpackage{lastpage} and \xpackage{endfloat}, you will still need
+% a version of \xpackage{endfloat} later than 2.0 from 1992.\\
%
% Other \LaTeX2.09{} (!) packages also seem to like to redefine
% |\enddocument|. In addition to the old \xpackage{endfloat},
% \xpackage{harvard} comes to mind. All of these will need to be
-% modified swiftly. \textbf{If possible, update to \LaTeXe{}!}
+% modified swiftly.
%
% \subsection{Page name instead of page number}
-%
% When any page numbering scheme other than \texttt{arabic} is used
% at the page, which |\pageref{LastPage}| refers to, the \textit{name}
% and not the \textit{number} of the page is given. For example,
@@ -468,90 +447,90 @@ In memoriam
% (with \textbf{s} at the end) at your disposal for remediation.)
%
% \subsection{No write access to the \xfile{aux} file}
-%
% Some packages (e.\,g. \xpackage{tikz} and \xpackage{selectp}) sometimes prevent
% the output to the \xfile{aux} file. In that case a warning is issued. This is
% no problem as long as there is another compilation run where the label to the
% last page can be placed via the \xfile{aux} file.
%
-% \subsection{Wrong last page number with more than one page numbering scheme}
-%
+% \subsection[Wrong last page number with \textgreater 1 page numbering scheme]{%
+% Wrong last page number with more than one page numbering scheme}
% When more than one page numbering scheme is used,
% \texttt{LastPage} does not give the total \textbf{number} of pages
% (even if \texttt{arabic} is the page numbering scheme of that page).
% For example, for a document with VI+36 pages, it gives
% \textquotedblleft 36\textquotedblright{} as reference to the last page.
% While this is correct, the total number of pages is $42$.\\
-% \indent (The \xpackage{pageslts} package puts |\lastpageref{LastPages}|
-% (with \textbf{s} at the end) at your disposal for remediation.)
-%
-% \subsection{\texttt{\textbackslash addtocounter\{page\}\{\ldots\} and \texttt{\textbackslash setcounter\{page\}\{\ldots\}}}}
-%
+% If the total \emph{number} of pages of a document is needed,
+% the kernel already gives this by |\makeatletter\@abspage@last\makeatother|.
+% The \xpackage{pageslts} package puts |\lastpageref{LastPages}|
+% (with \textbf{s} at the end) at your disposal for remediation,
+% giving the number of pages and linking to the last page, if linking is provided
+% for examaple by the \pkg{hyperref} package.
+%
+% \subsection{\texttt{\textbackslash addtocounter\{page\}\{\ldots\} and %
+% \texttt{\textbackslash setcounter\{page\}\{\ldots\}}}}
% When the page number was manipulated by |\addtocounter{page}{...}| or
% |\setcounter{page}{...}|, \texttt{LastPage} does not give the total
% \textbf{number} of pages (even if \texttt{arabic} is the page numbering
% scheme of that page).\\
-% \indent (The \xpackage{pageslts} package puts |\lastpageref{LastPages}|
+% The \xpackage{pageslts} package puts |\lastpageref{LastPages}|
% (with \textbf{s} at the end) at your disposal for remediation:
-% \texttt{LastPages} ignores page number manipulation.)
+% \texttt{LastPages} ignores page number manipulation. Also |\@abspage@last|
+% from the kernel is not influenced by page number manipulation.
%
% \subsection{Page number reset by \texttt{\textbackslash pagenumbering\{\ldots\}}}
-%
% At a page numbering change the page number is reset to one.
% Therefore \texttt{LastPage} does not give the total \textbf{number} of pages
% (even if \texttt{arabic} is the page numbering scheme of that page).
% Furthermore, now two pages have the same name.\\
-% \indent (The \xpackage{pageslts} package does not only put
+% The \xpackage{pageslts} package does not only put
% |\lastpageref{LastPages}| (with \textbf{s} at the end) at your disposal
% for remediation: \texttt{LastPages} also ignores page number manipulation.
% It furthermore offers the option |pagecontinue| to continue the
-% page numbering, when |\pagenumbering{...}| is used.)
+% page numbering, when |\pagenumbering{...}| is used.
%
% \subsection{Last pages of different page numbering schemes}
-%
% |\pageref{LastPage}| refers to the (maybe not so) last page of the last
% page numbering scheme. References to the respective last page of the other
% page numbering schemes are not provided.\\
-% \indent (The \xpackage{pageslts} package does this with labels
+% The \xpackage{pageslts} package does this with labels
% \texttt{pagesLTS.<numbering scheme>}, where \texttt{<numbering scheme>} is
% e.\,g. arabic, roman, Roman, alph, or Alph.\linebreak
% For fnsymbol please use |\lastpageref{pagesLTS.fnsymbol}| instead of\\
-% |\pageref{pagesLTS.fnsymbol}|.)
+% |\pageref{pagesLTS.fnsymbol}|.
%
% \subsection{Current page}
-%
% The command |\thepage| gives the \textbf{name} of the current page
% in the current page numbering scheme, which is different from the
% current total/absolute page number e.\,g. with a second
% page numbering scheme, |\addtocounter{page}{...}|, or |\setcounter{page}{...}|,
% and it will not be an arabic number at all,
% if the current page numbering scheme is not arabic.\\
-% \indent (The \xpackage{pageslts} package provides the command
+% The \xpackage{pageslts} package provides the command
% |\theCurrentPage| and for the current number of pages in the current
% page numbering scheme\\
-% |\theCurrentPageLocal|.)
+% |\theCurrentPageLocal|. The kernel already provides the
+% number of pages, which have been shipped out, as |\the\ReadonlyShipoutCounter|.
+% The current page is always |ReadonlyShipoutCounter +1|.
%
% \subsection{First page}
-%
% There is no special label at the first page.
% (This is the \textbf{last}\textsf{page} package, after all.)\\
-% \indent (The \xpackage{pageslts} package creates a label \texttt{pagesLTS.0}
-% at the first page of the document.)
+% The \xpackage{pageslts} package creates a label \texttt{pagesLTS.0}
+% at the first page of the document.
%
% \subsection{Using the \xpackage{fnsymbol} page numbering scheme\label{ss:fnsymbol}}
-%
% \indent Using the \texttt{fnsymbol} page numbering scheme can result in problems!\\
% When the page, where |\pageref{lastpage}| points at, is in \texttt{fnsymbol}
% page numbering scheme, this package might screw up --
-% and quite totally for that, especially when used together with old versions of the
-% \xpackage{hyperref} package (e.\,g. \xpackage{hyperref} v6.80x as of 2010/04/17).
-% When testing with version v6.83m as of 2012/11/06 everything seemed to worked fine,
-% but this might not always be the case.\\
-% \indent (The \xpackage{pageslts} package with |\lastpageref{lastpage}| and
-% appropriate package options should cope even with this case.)
+% and quite totally for that, especially when used together with \emph{very old}
+% versions of the \xpackage{hyperref} package (e.\,g. \xpackage{hyperref} v6.80x
+% as of 2010/04/17). When testing with version v6.83m as of 2012/11/06 everything
+% seemed to worked fine, but this might not always be the case.\\
+% The \xpackage{pageslts} package with |\lastpageref{lastpage}| and
+% appropriate package options should cope even with this case.
%
% \subsection{Page counter overflow\label{ss:overflow}}
-%
% \indent \textquotedblleft The ranges of supported counter values are more or less
% restricted. Only \cs{arabic} can be used with any counter value \TeX{} supports.
% \begin{quote}
@@ -576,12 +555,11 @@ In memoriam
% The \xpackage{alphalph} package, 2010/04/18, v2.3, first table, p.~2).\\
%
% \noindent When \textit{any} page is out of that range, there will be a counter overflow.\\
-% \indent (\xpackage{lastpage} probably is not the right package to be asked
+% \xpackage{lastpage} probably is not the right package to be asked
% to correct this anyway, but the \xpackage{pageslts} package
-% (with appropriate options) can do this.)\\
+% (with appropriate options) can do this.
%
% \subsection{Other packages manipulating \texttt{\textbackslash lastpage@putlabel}}
-%
% The \xpackage{hyperref} package redefines the |\lastpage@putlabel| command,
% and the \xpackage{revtex4} class redefines the |\lastpage@putlabel| command,
% and the \xpackage{hyperref} package redefines the |\lastpage@putlabel| command,
@@ -600,52 +578,23 @@ In memoriam
% Because |\lastpage@putlabel| is no longer called, now there should not be any
% double definitions of the \texttt{lastpage} label.
%
-% \newpage
-%
% \section{Alternatives\label{sec:Alternatives}}
-%
% There are similar packages, which do (or do not) similar things (or even more).
% As I neither know what exactly you want to accomplish when using this package
% (e.\,g.~page number vs. page name, hyperlinks or not), nor what resources
-% you have (e.\,g.~$\varepsilon$-\TeX{}), here is a list of some possible
-% alternatives:\\
-%
-% \DescribeMacro{lastpage209.sty}
-% \begin{description}
-% \item[-] If \LaTeX2.09{} is still used, and if you are unable to switch to
-% \LaTeXe{}, the \LaTeX2.09{} compatible \xpackage{lastpage209.sty} can be used,
-% which is defined as follows:\\
-% (It is also generated automatically from \xfile{lastpage.dtx} when compiling it.)
-%
-% \begin{macrocode}
-%<*lastpage209>
- % FOR LaTeX 2.09 ONLY - FOR LaTeX 2e USE lastpage.sty OR pageslts.sty!
- % This is lastpage209.sty invented by Jeffrey P. Goldberg
- % (jeffrey+news at goldmark dot org), maintained by
- % H.-Martin M\"{u}ench (Martin dot Muench at Uni-Bonn dot de).
-\let\origenddocument=\enddocument%
-\def\enddocument{\clearpage%
- {\addtocounter{page}{-1}%
- \immediate\write\@mainaux{\string\newlabel{LastPage}{{}{\thepage}}}}%
- \addtocounter{page}{+1}%
- \origenddocument%
- }%
-%</lastpage209>
-% \end{macrocode}
-%
-% (after \textsc{Piet van Oostrum}: Page layout in \LaTeX{}, March~2, 2004,
-% section~16; fancyhdr.pdf). Because |\enddocument| is redefined,
-% similar problems as with the old version of the \xpackage{endfloat}
-% package (see subsection~\ref{sec:endfloat}) will arise.\\
-% \textbf{If possible, update to \LaTeXe{}} (and maybe to the
-% \xpackage{pageslts} package)\textbf{!}
-% \end{description}
-%
-% \newpage
+% you have (e.\,g.~\TeX, \LaTeX2e, $\varepsilon$-\TeX{}, \LaTeX-format as recent
+% as 2022-11-01 or newer), here is a list of some possible alternatives:
%
-% \DescribeMacro{pageslts}
+% \DescribeMacro{pageslts}\vspace*{-\baselineskip}
% \begin{description}
-% \item[-] The \xpackage{pageslts} package first started as a revision of this
+% \item[-]
+% \textbf{Note: The current version 2015/12/21 v1.2f of the \pkg{pageslts} package
+% has not yet been updated to the new hook mechanism. In special cases (for example }%
+% |\pagenumbering{fnsymbol}|\textbf{) the current version of that package combined
+% with a current \LaTeX-format fails. Together with about 80~other packages
+% (small to large, public as well as private, some probably obsolete) it is
+% in the update queue.}\newline
+% The \xpackage{pageslts} package first started as a revision of this
% \xpackage{lastpage} package, but it became obvious that a replacement was
% needed to accomplish what the \xpackage{pageslts} package does. For backward
% compatibility, a label named |LastPage| is provided.
@@ -694,9 +643,7 @@ In memoriam
% Further labels are provided for special cases.
% \end{description}
%
-% \pagebreak
-%
-% \DescribeMacro{totpages}
+% \DescribeMacro{totpages}\vspace{-\baselineskip}
% \begin{description}
% \item[-] The \xpackage{totpages} package provides a \texttt{totpages} label similar to
% \texttt{LastPages}\\
@@ -709,31 +656,32 @@ In memoriam
% by mail to determine the postage).
% \end{description}
%
-% \DescribeMacro{nofm.sty}
+% \DescribeMacro{nofm.sty}\vspace{-\baselineskip}
% \begin{description}
% \item[-] \textquotedblleft There is a package \xpackage{nofm.sty} available,
% but some versions of it are defective, and most don't work with \xpackage{fancyhdr}
% because they take over the complete page layout.\textquotedblright (\textsc{Piet van %
% Oostrum}: Page layout in \LaTeX{}, March~2, 2004, section~16; fancyhdr.pdf)\\
% \xpackage{nofm} as of 1991/02/25 (without version number), available at\\
-% \url{https://mirrors.ctan.org/obsolete/macros/latex209/contrib/misc/nofm.sty},\\
+% \href{https://mirror.ctan.org/obsolete/macros/latex209/contrib/misc/nofm.sty}{%
+% https://mirror.ctan.org/obsolete/macros/latex209/contrib/misc/nofm.sty}, \linebreak
% does not work with e.\,g. \xpackage{hyperref}, redefines |\enddocument|
% as well as |\@oddhead|, |\@evenhead|, |\@oddfoot|, and |\@evenfoot|.\\
% If you know the (CTAN) location of a \textbf{working}~(!) version,
% please send an e-mail to the \xpackage{lastpage} maintainer, thanks!
% \end{description}
%
-% \DescribeMacro{count1to}
+% \DescribeMacro{count1to}\vspace{-\baselineskip}
% \begin{description}
% \item[-] You may want to have a look at the \xpackage{count1to} package.
% \end{description}
%
-% \DescribeMacro{totalcount}
+% \DescribeMacro{totalcount}\vspace{-\baselineskip}
% \begin{description}
% \item[-] The \xpackage{totalcount} package provides |\totalpages|.
% If there are only arabic page numbers consecutively running from 1 to the last page,
% this works. But for example
-%
+%
% \begin{quote}
%\begin{verbatim}
%\documentclass{article}
@@ -751,45 +699,60 @@ In memoriam
% last page even if \xpackage{hyperref} is used).
% \end{description}
%
-% \DescribeMacro{zref}
+% \DescribeMacro{zref}\vspace{-\baselineskip}
% \begin{description}
% \item[-] The \xpackage{zref} package of \textsc{Heiko Oberdiek} requires
-% $\varepsilon$-\TeX{}. \xpackage{lastpage} does not require $\varepsilon$-\TeX{},
-% but if you already have $\varepsilon$-\TeX{}, you may have a look at the extensive
-% \xpackage{zref} package, whether it suits your needs better (or additionally or
-% whatsoever).
+% $\varepsilon$-\TeX{}. \xpackage{lastpageclassic} does not require $\varepsilon$-\TeX{},
+% but if you already have $\varepsilon$-\TeX{} (and use \xpackage{lastpagemodern}),
+% you may also have a look at the extensive \xpackage{zref} package,
+% whether it suits your needs better (or additionally or whatsoever).
% \end{description}
%
-% \DescribeMacro{memoir}
+% \DescribeMacro{memoir}\vspace{-\baselineskip}
% \begin{description}
-% \item[-] The \xpackage{memoir} class provides |\thelastpage| (page number printed
+% \item[-] The \xpackage{memoir} \emph{class} provides |\thelastpage| (page number printed
% on last page) and |\thelastsheet| (number of pages).
% \end{description}
%
+% \DescribeMacro{LaTeX-kernel}\vspace{-\baselineskip}
+% \begin{description}
+% \item[-] The number of pages is nowadays available via |\@abspage@last|
+% from the kernel, but when more than one page numbering scheme is used
+% (for example pages I~to X and then 1~to 10, thus number of pages
+% \hbox{\textquotedblleft 20\textquotedblright ,} but name of the last page
+% \hbox{\textquotedblleft 10\textquotedblright ),}
+% or when or the fnsymbol page numbering scheme is used, or another package
+% has output after this package, or the page numbers exceed a certain range,
+% there might be problems.
+% \end{description}
+%
% \bigskip
%
% \noindent (You programmed or found another alternative,
-% which is available at CTAN.org?\\
-% OK, send an e-mail to me with the name, location at CTAN.org,
+% which is available at \url{CTAN.org}?\\
+% OK, send an e-mail to me with the name, location at \url{CTAN.org},
% and a short notice, and I will probably include it in the list above.)\\
%
% \smallskip
%
% \noindent About how to get those packages, please see subsection~\ref{ss:Downloads}.
%
-% \pagebreak
-%
% \section{Example}
%
% \begin{macrocode}
%<*example>
-\documentclass[british]{article}[2014/09/29]% v1.4h
-\AtEndDocument{\message{^^JLaTeX Info: Executing hook `AtEndDocument'.}}
-\usepackage[draft]{showkeys}[2014/10/28]% v3.17
+\documentclass[british]{article}[2022/07/02]% v1.4n Standard LaTeX document class
+\makeatletter
+\@ifl@t@r\fmtversion{2022/11/01}{%
+ \AddToHook{enddocument/afterlastpage}[lastpage]{%
+ \message{^^JLaTeX Info: Executing hook `enddocument/afterlastpage'.}}%
+}{\AtEndDocument{\message{^^JLaTeX Info: Executing hook `AtEndDocument'.}}%
+ }
+\makeatother
+\usepackage[draft]{showkeys}[2022/04/12]% v3.18 Show cite and label keys (DPC, MH)
%% Use final instead of draft to hide the keys. %%
-\usepackage{hyperref}[2012/11/06]% v6.83m
-\hypersetup{%
- extension=pdf,%
+\usepackage{hyperref}[2023-02-07]% v7.00v Hypertext links for LaTeX
+\hypersetup{extension=pdf,%
plainpages=false,%
pdfpagelabels=true,%
hyperindex=false,%
@@ -797,33 +760,30 @@ In memoriam
pdftitle={lastpage package example},%
pdfauthor={H.-Martin Muench},%
pdfsubject={Example for the lastpage package},%
- pdfkeywords={LaTeX, lastpage, H.-Martin Muench},%
+ pdfkeywords={LaTeX, lastpage},%
pdfview=Fit,%
pdfstartview=Fit,%
pdfpagelayout=SinglePage%
}
-%% If hyperref is not used, the url package
-%% https://www.ctan.org/pkg/url
+%% If hyperref is not used, the url package
+%% https://ctan.org/pkg/url
%% must be loaded for the \url used in this example:
%% \usepackage{url}
%% or just use \let\url\texttt for the one used url.
-\usepackage{lastpage}[2021/09/03]% v1.2n
+\usepackage{lastpage}[2023-03-07]% v2.0a
\makeatletter
\renewcommand{\@evenfoot}{%
\normalsize\slshape \today\hfil \upshape %
page \thepage{} of \pageref{LastPage}}
\renewcommand{\@oddfoot}{\@evenfoot}
\makeatother
-\gdef\unit#1{\mathord{\thinspace\mathrm{#1}}}%
\listfiles
\begin{document}
\pagenumbering{Roman}
-
\section*{Example for lastpage}
\markboth{Example for lastpage}{Example for lastpage}
-
This example demonstrates the use of package\newline
-\textsf{lastpage}, v1.2n as of 2021/09/03 (HMM; JPG).\newline
+\textsf{lastpage}, v2.0a as of 2023-03-07 (HMM; JPG).\newline
The package takes no options.\newline
For more details please see the documentation!\newline
@@ -848,47 +808,21 @@ trademark owner. There is no intention of infringement; the
usage is to the benefit of the trademark owner.\newline
\textbf{Tip}: Use \textit{logical page numbers}
-for the display of the pdf (in Adobe Reader DC 2021.005.20060:
-Edit $>$ Preferences $>$ Categories: Page Display $>$
+for the display of the pdf (in Adobe Acrobat Reader 2022.003.20322:
+Edit $>$ Preferences $>$ Page Display $>$
Page Content and Information: Use logical page numbers)!\newline
If you are more ambitious in respect to your aims with this package,
you might want to have a look at the \textsf{pageslts} package:\newline
-\url{https://www.ctan.org/pkg/pageslts}.
-
-\bigskip
-
-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
-I do NOT think, that it is necessary to print THIS file, really\newline
-(at least not after this page)!
-
+\url{https://ctan.org/pkg/pageslts}.
\bigskip
\noindent The page (\verb|\thepage|): \thepage \newline
-
-\noindent Last page's name (LastPage): \pageref{LastPage}
-
-\newpage
-
-\noindent The page (\verb|\thepage|): \thepage \newline
-
-\noindent Last page's name (LastPage): \pageref{LastPage}
-
+Last page's name (LastPage): \pageref{LastPage}
\newpage
\noindent The page (\verb|\thepage|): \thepage \newline
-
-\noindent Last page's name (LastPage): \pageref{LastPage}
-
-\newpage
-
-\section*{The End}
-
-\noindent The page (\verb|\thepage|): \thepage \newline
-
-\noindent Last page's name (LastPage): \pageref{LastPage}
+Last page's name (LastPage): \pageref{LastPage}
\bigskip
@@ -936,82 +870,124 @@ prints:\newline
Page \thepage{} is page \makeatletter\lastpage@lastpage\makeatother.%
\newline
This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
+\newpage
+
+\noindent The page (\verb|\thepage|): \thepage \newline
+Last page's name (LastPage): \pageref{LastPage}
+\bigskip
+
+With modern \LaTeX{} it is possible to say:
+\begin{quote}
+\begin{verbatim}
+\NeedsTeXFormat{LaTeX2e}[2022-11-01]
+\documentclass{article}
+\pagenumbering{fnsymbol}
+\begin{document}
+\addtocounter{page}{8}%
+\makeatletter%
+\ExplSyntaxOn%
+\xdef\test{\numexpr\the\g_shipout_readonly_int +1\relax}%
+\ExplSyntaxOff%
+\ifnum \@abspage@last = \test\relax%
+This is the last page.%
+\else%
+This is not the last page
+(or it is but \LaTeX{} needs another compilation run
+to detect this).
+\fi
+\makeatother
+\end{document}
+\end{verbatim}
+\end{quote}
+
+\newpage
+\section*{The End}
+\noindent The page (\verb|\thepage|): \thepage \newline
+Last page's name (LastPage): \pageref{LastPage}
+\bigskip
+
+To see the content of the \texttt{enddocument/afterlastpage}-hook
+(for a recent \LaTeX-format!) use
+\verb|\ShowHook{enddocument/afterlastpage}|.% without the \verb||, of course!
\end{document}
%</example>
% \end{macrocode}
-%
-% \newpage
-%
% \StopEventually{}
+% \newpage
%
% \section{The implementation}
-%
-% We start off by checking that we are loading into \LaTeXe{} and
-% announcing the name and version of this package.
+% \DescribeMacro{lastpage.sty}
+% We first need to determine whether we are on \TeX~2.09 or \LaTeX2e:
%
% \begin{macrocode}
%<*package>
+%% Part of the "lastpage" package
+%% loads either lastpage2.09.sty for TeX 2.09 or lastpage2e.sty for LaTeX 2e
+%% with code from https://groups.google.com/g/comp.text.tex/c/-Qmhj1ZI4xM
+\def\loadlastpage{\ProvidesPackage{lastpage}[2023/03/07 v2.0a lastpage: 2.09 or 2e? (HMM)]\relax\RequirePackage{lastpage2e}}
+\begingroup \expandafter \ifx \csname documentclass\endcsname\relax
+\endgroup \expandafter \input{lastpage209.sty}
+\else \endgroup \expandafter \loadlastpage
+\fi
+%</package>
% \end{macrocode}
%
-% \begin{macrocode}
-\NeedsTeXFormat{LaTeX2e}[2014/05/01]
-\ProvidesPackage{lastpage}%
- [2021/09/03 v1.2n Refers to last page's name (HMM; JPG)]%
-
-%% lastpage may work with earlier versions of LaTeX,
-%% but this was not tested. Please consider updating
-%% your LaTeX (and packages) to the most recent version
-%% (if it is/they are not already the most recent version).
-
-% \end{macrocode}
-%
-% A short description of the \xpackage{lastpage} package:
+% \DescribeMacro{lastpage209.sty}
+% If we are on \TeX~2.09 (really?!), we load the 2.09 version \pkg{lastpage209.sty}:
%
% \begin{macrocode}
-%% Allows for things like
-%% Page \thepage{} of \pageref{LastPage}
-%% to get
-%% 'Page 7 of 9'.
+%<*lastpage209>
+%% Part of the "lastpage" package
+%% FOR LaTeX 2.09 ONLY - FOR LaTeX 2e USE lastpage2e.sty
+%% This is lastpage209.sty invented by Jeffrey P. Goldberg,
+%% after Piet van Oostrum: Page layout in LaTeX, March 2, 2004, section 16; fancyhdr.pdf;
+%% lastpage209.sty maintained by H.-Martin Muench.
+\let\origenddocument=\enddocument%
+\def\enddocument{\clearpage%
+ {\addtocounter{page}{-1}%
+ \immediate\write\@mainaux{\string\newlabel{LastPage}{{}{\thepage}}}%
+ }%
+ \addtocounter{page}{+1}%
+ \origenddocument%
+ }
+%</lastpage209>
% \end{macrocode}
%
-% A last information for the user(s):
+% \DescribeMacro{lastpage2e.sty}
+% If |\documentclass| is known, we are in \LaTeXe{} - but which one?
+% For modern versions with \eTeX{} and hook management etc.
+% we load version \pkg{lastpagemodern.sty}, otherwise
+% \pkg{lastpageclassic.sty}. We start off by checking that we are
+% loading into \LaTeXe{} and announcing the name and version of this package.
%
% \begin{macrocode}
-%% For LaTeX 2.09 use lastpage209.sty.
-%% For LaTeX 2e maybe consider upgrading to the pageslts package.
-%% lastpage may work with earlier versions of LaTeX2e,
-%% but this was not tested. Please consider updating your LaTeX
-%% contribution to the most recent version (if it is not already
-%% the most recent version).
-
+%<*lastpage2e>
+%% Part of the "lastpage" package
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{lastpage2e}[2023/03/07 v2.0a Decide which 2e lastpage version to use (HMM)]
+\@ifl@t@r\fmtversion{2022/11/01}{\RequirePackage{lastpagemodern}}{%
+ \RequirePackage{lastpageclassic}}
+\message{^^J}
+%</lastpage2e>
% \end{macrocode}
%
-% The very old version~2.0 (and earlier) of the \xpackage{endfloat}
-% package actually redefined the |\enddocument| command,
-% and so interfered drastically with the \LaTeXe{} commands which
-% make use of |\AtEndDocument|. Newer versions of \xpackage{endfloat}
-% exists (at the time of writing this documentation: v2.5d as of 2011/12/25)
-% in modern documentation form, which are available from CTAN.org
-% (see subsection~\ref{ss:Downloads}).
-% A~note is placed here. (The \xpackage{pageslts} package even checks whether
-% a (very) old \xpackage{endfloat} package is in use. If it is, a warning or
-% even an error message is given, depending on \xpackage{endfloat} version.)
+% \DescribeMacro{lastpageclassic.sty}
+% In case of older \LaTeX-formats \pkg{lastpageclassic.sty} is loaded:
%
% \begin{macrocode}
-%% The recent version of the endfloat package is v2.5d as of 2011/12/25.
-%% The lastpage package is not fully compatible with version 2.0
-%% (and earlier) of the endfloat package, because those versions
-%% redefined the \enddocument command.
+%<*lastpageclassic>
+%% Part of the "lastpage" package
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{lastpageclassic}[2023/03/07 v2.0a Refers to last page's name (HMM; JPG)]
+%% allows for things like "Page \thepage{} of \pageref{LastPage}" to get "Page 7 of 9"
% \end{macrocode}
%
-% There are no options to be introduced.\\
-%
% \indent For comparisons, \textquotedblleft one\textquotedblright{} is defined
% (|\@ne| does not work for this).
%
% \begin{macrocode}
-\def\lastpage@one{1}
+\gdef\lastpage@one{1}
% \end{macrocode}
%
% We define |\lastpage@hyper|, |\lastpage@nameref|, |\lastpage@french|, and
@@ -1024,53 +1000,43 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
\gdef\lastpage@LTS{0}
% \end{macrocode}
%
-% We define |\lastpage@firstpage| to be \textquotedblleft \texttt{1}\textquotedblright{}.
+% We define |\lastpage@firstpage| to be \textquotedblleft \texttt{1}\textquotedblright{},
+% and before re-definition via the \xfile{.aux} file,
+% |\lastpage@lastpage| and |\lastpage@lastpageHy| are unknown.
%
% \begin{macrocode}
-\def\lastpage@firstpage{1}
+\gdef\lastpage@firstpage{1}
+\gdef\lastpage@lastpage{??}
+\gdef\lastpage@lastpageHy{??}
% \end{macrocode}
%
-% \pagebreak
-%
% \begin{macro}{\AtBeginDocument}
-% \indent |\AtBeginDocument| it is checked whether various packages are loaded.\\
-% (|\@ifpackageloaded| cannot be used later than |\AtBeginDocument|.)\\
-% If this is the case, |\lastpage@<package abbreviation>| is defined as
-% \texttt{1} (otherwise it stays \texttt{0}).\\
-% The \xpackage{ltxcmds} package provides |\ltx@ifpackageloaded|, which can be used
-% also after |\AtBeginDocument|, but \xpackage{lastpage} tries to not load other packages.
+% \indent |\AtBeginDocument| we give a waring about ancient versions of the \pkg{endfloat} package.
+% Then it is checked whether various packages are loaded.
+% (|\@ifpackageloaded| cannot be used later than |\AtBeginDocument|.)
+% If this is the case,\\
+% |\lastpage@<package abbreviation>| is defined as \texttt{1}
+% (otherwise it stays~\texttt{0}).
%
% \begin{macrocode}
\AtBeginDocument{%
+ \@ifpackageloaded{endfloat}{%
+ \@ifpackagelater{endfloat}{1993/04/30}{\relax}{%
+ \PackageError{lastpage}{%
+ Incompatibility with outdated version of endfloat package}{%
+ lastpage is not fully compatible with a version\MessageBreak%
+ before 2.1 of the endfloat package,\MessageBreak%
+ because those versions redefined\MessageBreak%
+ the \string\enddocument\space command.}%
+ }{}}%
\@ifpackageloaded{tikz}{\gdef\lastpage@tikz{1}}{}%
\@ifpackageloaded{hyperref}{\gdef\lastpage@hyper{1}}{}%
\@ifpackageloaded{nameref}{\gdef\lastpage@nameref{1}}{}%
\@ifpackageloaded{french}{\gdef\lastpage@french{1}}{}%
\@ifpackageloaded{frenchle}{\gdef\lastpage@french{1}}{}%
- \@ifpackageloaded{pageslts}{%
- \PackageWarning{lastpage}{Package pageslts found.\MessageBreak%
- Therefore the lastpage package is no longer\MessageBreak%
- necessary.%
- }%
- \gdef\lastpage@LTS{1}%
- }{\PackageInfo{lastpage}{%
- Please have a look at the pageslts package at\MessageBreak%
- https://www.ctan.org/pkg/pageslts\MessageBreak%
- !}%
- }%
- \@ifpackageloaded{pagesLTS}{%
- \PackageWarning{lastpage}{%
- Outdated pagesLTS package found.\MessageBreak%
- Please replace by a recent version of\MessageBreak%
- pageslts package, see e.g. at\MessageBreak%
- https://www.ctan.org/pkg/pageslts\MessageBreak%
- !\MessageBreak%
- With pagesLTS as well as pageslts package\MessageBreak%
- the lastpage package is no longer necessary.\MessageBreak%
- }%
- \gdef\lastpage@LTS{1}%
- }{}%
+ \@ifpackageloaded{pagesLTS}{\gdef\lastpage@LTS{1}}{}%
+ \@ifpackageloaded{pageslts}{\gdef\lastpage@LTS{1}}{}%
% \end{macrocode}
%
% |\lastpage@putlabel|, used by older versions of this package,
@@ -1094,8 +1060,6 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \end{macrocode}
% \end{macro}
%
-% \pagebreak
-%
% \begin{macro}{\lastpage@putl@bel}
% \indent This command does the writing of the label:
%
@@ -1174,12 +1138,10 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \end{macrocode}
% \end{macro}
%
-% \pagebreak
-%
% \begin{macro}{\lastpage@putlabelhyper}%
% \indent When \xpackage{hyperref} has been loaded, the label is set with the
% |\lastpage@putlabelhyper| command. If the \xpackage{hyperref} package is used,
-% but pageanchors are disabled, the hyperlinking will not work.
+% but page-anchors are disabled, the hyperlinking will not work.
%
% \begin{macrocode}
\newcommand{\lastpage@putlabelhyper}{%
@@ -1209,15 +1171,14 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
%
% \begin{macrocode}
%% The following code is from the hyperref package %%
-%% [2010/04/17 v6.80x; newer versions are available] %%
-%% by Heiko Oberdiek (Big Thanks!). %%
- \let\@number\@firstofone
- \ifHy@pageanchor
- \ifHy@hypertexnames
- \ifHy@plainpages
+%% 2010/04/17 v6.80x; newer versions are available. %%
+ \let\@number\@firstofone%
+ \ifHy@pageanchor%
+ \ifHy@hypertexnames%
+ \ifHy@plainpages%
\def\Hy@temp{\arabic{page}}%
- \else
- \Hy@unicodefalse
+ \else%
+ \Hy@unicodefalse%
%% Code not from hyperref package: %%
%% The following lines are taken from the pageslts package, %%
%% which in turn got them from the hyperref package and %%
@@ -1225,7 +1186,7 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
%% Without the modification, after the first shipout "PD1" %%
%% is inserted each time |\pdfstringdef\Hy@temp{\thepage}| %%
%% is executed. %%
- \ifnum \value{page}=1%
+ \ifnum \value{page}=1\relax%
% \end{macrocode}
%
% We do not count the pages ourselves, and so they could have been changed by
@@ -1238,7 +1199,7 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% We will make a mistake here at most once:
%
% \begin{macrocode}
- \ifx \lastpage@firstpage\lastpage@one
+ \ifx \lastpage@firstpage\lastpage@one\relax%
\def\Hy@temp{\thepage}%
\gdef\lastpage@firstpage{0}%
\else%
@@ -1254,14 +1215,13 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
%% Code from pageslts package again: %%
\fi%
%% Code from hyperref package again: %%
- \fi
- \else
+ \fi%
+ \else%
\def\Hy@temp{\the\Hy@pagecounter}%
- \fi
- \fi
+ \fi%
+ \fi%
\immediate\write\@auxout{%
- \string\newlabel
- {LastPage}{{}{\thepage}{}{%
+ \string\newlabel{LastPage}{{}{\thepage}{}{%
\ifHy@pageanchor page.\Hy@temp\fi}{}}%
}%
%% End of code from the hyperref package. %%
@@ -1271,14 +1231,11 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% whether they have been saved in the \xfile{aux} file.
%
% \begin{macrocode}
- \immediate\write\@auxout{%
- \string\xdef\string\lastpage@lastpage{\thepage}}%
+ \immediate\write\@auxout{\string\xdef\string\lastpage@lastpage{\thepage}}%
\ifHy@pageanchor%
- \immediate\write\@auxout{%
- \string\xdef\string\lastpage@lastpageHy{\Hy@temp}}%
+ \immediate\write\@auxout{\string\xdef\string\lastpage@lastpageHy{\Hy@temp}}%
\else%
- \immediate\write\@auxout{%
- \string\gdef\string\lastpage@lastpageHy{}}%
+ \immediate\write\@auxout{\string\gdef\string\lastpage@lastpageHy{}}%
\fi%
% \end{macrocode}
%
@@ -1295,8 +1252,7 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
%
% \begin{macro}{\lastpage@putlabelNR}
% \indent The \xpackage{nameref} package redefines |\label| to have five arguments
-% instead of two, therefore
-% \newline
+% instead of two, therefore\newline
% |\newlabel{LastPage}{{}{\thepage}{}{}{}}|
% instead of\newline
% |\newlabel{LastPage}{{}{\thepage}}| must be used:
@@ -1315,8 +1271,6 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \end{macrocode}
% \end{macro}
%
-% \pagebreak
-%
% \begin{macro}{\lastpage@fileswtest}
% \indent Later it will be determined whether it is allowed to write
% to the \xfile{aux} file. If it was \emph{not} allowed, it is checked
@@ -1333,15 +1287,15 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
\newcommand{\lastpage@fileswtest}[2]{%
\edef\lastpage@testa{#1}%
\edef\lastpage@testb{#2}%
- \ifx\lastpage@testa\lastpage@testb% OK
+ \ifx\lastpage@testa\lastpage@testb%
\else%
- \ifx\lastpage@tikz\lastpage@one%
+ \ifx\lastpage@tikz\lastpage@one\relax%
\PackageWarning{lastpage}%
{The lastpage package was not allowed to write to an\MessageBreak%
.aux file. This package does not work without access\MessageBreak%
to an .aux file.\MessageBreak%
It is OK if the .aux file was already updated\MessageBreak%
- by a previouse compiler run\MessageBreak%
+ by a previous compiler run\MessageBreak%
and would not have changed anyway.\MessageBreak%
}%
\else%
@@ -1350,12 +1304,13 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
This package does not work without access to an .aux file.\MessageBreak%
Press Ctrl+Z to exit.\MessageBreak%
But it is OK if the .aux file was already updated\MessageBreak%
- by a previouse compiler run\MessageBreak%
+ by a previous compiler run\MessageBreak%
and would not have changed anyway.\MessageBreak%
}%
\fi%
\fi%
}
+
% \end{macrocode}
% \end{macro}
%
@@ -1377,28 +1332,21 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \end{macrocode}
% \end{macro}
%
-% \pagebreak
-%
% \begin{macro}{\AtEndDocument}
% \indent |\AtEndDocument| we again (re)define |\lastpage@putlabel|
-% to do nothing and check |\lastpage@lastpage| and |\lastpage@lastpageHy|,
-% whether they are still unchanged, which is OK for the first run only.
+% to do nothing and check |\lastpage@lastpage|,
+% whether it is still unchanged, which is OK for the first run only.
%
% \begin{macrocode}
-\gdef\lastpage@lastpage{\relax}%
-\gdef\lastpage@lastpageHy{\relax}%
-
\AtEndDocument{%
- \gdef\lastpage@putlabel{\relax}%
\ifx\lastpage@LTS\lastpage@one%
\else%
- \ifx\lastpage@lastpage\relax%
- \PackageWarning{lastpage}{Rerun to get the references right}%
- \fi%
- \ifx\lastpage@lastpageHy\relax%
+ \gdef\lastpage@putlabel{??}%
+ \ifx\lastpage@lastpage\lastpage@putlabel\relax%
\PackageWarning{lastpage}{Rerun to get the references right}%
\fi%
\fi%
+ \gdef\lastpage@putlabel{\relax}%
% \end{macrocode}
%
% It is checked whether writing to files is allowed
@@ -1444,25 +1392,381 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
\fi%
\fi%
}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</lastpageclassic>
+% \end{macrocode}
+% \newpage
+%
+% \DescribeMacro{lastpagemodern.sty}
+% In case of a recent \LaTeX-format, \pkg{lastpagemodern.sty} is loaded:
+%
+% \begin{macrocode}
+%<*lastpagemodern>
+%% Part of the "lastpage" package
+\NeedsTeXFormat{LaTeX2e}[2022-11-01]
+\ProvidesPackage{lastpagemodern}[2023-03-07 v2.0a Refers to last page's name (HMM; JPG)]
+%% allows for things like "Page \thepage{} of \pageref{LastPage}"
+%% to get "Page 7 of 9" or "Page VII of IX";
+%% the NUMBER of pages is available via \@abspage@last, but with pages
+%% for example I to X and then 1 to 10, the number of pages woud be "20",
+%% while the name of the last page is "10". Decide what you need/want!
+
+% \end{macrocode}
+%
+% \indent For comparisons, \textquotedblleft one\textquotedblright{} is defined
+% (|\@ne| does not work for this).
+%
+% \begin{macrocode}
+\gdef\lastpage@one{1}
+% \end{macrocode}
+%
+% We define |\lastpage@firstpage| to be \textquotedblleft \texttt{1}\textquotedblright{},
+% and before re-definition via the \xfile{.aux} file,
+% |\lastpage@lastpage| and |\lastpage@lastpageHy| are unknown.
+%
+% \begin{macrocode}
+\gdef\lastpage@firstpage{1}
+\gdef\lastpage@lastpage{??}
+\gdef\lastpage@lastpageHy{??}
+
+% \end{macrocode}
+%
+% \DescribeMacro{\AddToHook\{begindocument/end\}}
+% \indent At |begindocument/end| we give a warning about ancient versions
+% of the \pkg{endfloat} package.
+%
+% \begin{macrocode}
+\AddToHook{begindocument/end}{%
+ \IfPackageLoadedTF{endfloat}{%
+ \IfPackageAtLeastTF{endfloat}{1994/06/01}{\relax}{%
+ \PackageError{lastpage}{%
+ Incompatibility with outdated version of endfloat package}{%
+ lastpage is not fully compatible with a version\MessageBreak%
+ before 2.1 of the endfloat package,\MessageBreak%
+ because those versions redefined\MessageBreak%
+ the \string\enddocument\space command.}%
+ }{}}%
+% \end{macrocode}
+%
+% |\lastpage@putlabel|, used by older versions of this package,
+% is redefined e.\,g. by \xpackage{revtex}, \xpackage{hyperref},
+% \xpackage{frenchle}, and \xpackage{PPRcorners}.
+% While now |\lastpage@putl@bel| is used instead, \xpackage{revtex}
+% or \xpackage{hyperref} could also define a label \texttt{LastPage},
+% which then would be multiply defined. (Which is no big issue,
+% if it is associated with the same page.) Therefore we define
+%
+% \begin{macrocode}
+ \gdef\lastpage@putlabel{\relax}%
+% \end{macrocode}
+%
+% Because |\lastpage@putlabel| might be (re)defined later, depending on the order
+% in which the packages are loaded, we will do this again at the end of the document.
+%
+% \begin{macrocode}
+ }
+
+% \end{macrocode}
+%
+% \begin{macro}{\lastpage@putl@bel}
+% \indent This command does the writing of the label.
+% If the \xpackage{pageslts} package is used, this \xpackage{lastpage} package is
+% not needed at all. The \xpackage{LastPage} label would even be defined twice.
+% Thus, if \xpackage{pageslts} is used, here nothing is done.
+%
+% \begin{macrocode}
+\newcommand{\lastpage@putl@bel}{%
+ \IfPackageLoadedTF{pageslts}{\relax}{%
+% \end{macrocode}
+%
+% Otherwise the label is set:\\
+% We have got to distinguish whether \xpackage{hyperref} has been loaded or not:
+%
+% \begin{macrocode}
+ \IfPackageLoadedTF{hyperref}{\lastpage@putlabelhyper}{%
+% \end{macrocode}
+%
+% and also need to treat documents with \xpackage{nameref} differently:
+%
+% \begin{macrocode}
+ \IfPackageLoadedTF{nameref}{\lastpage@putlabelNR}{%
+% \end{macrocode}
+%
+% When those packages have not been loaded, we just write the
+% simple label into the \xfile{aux} file (and store the value of the page):
+%
+% \begin{macrocode}
+ \begingroup%
+ \addtocounter{page}{-1}%
+ \immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}}}%
+ \immediate\write\@auxout{\string\xdef\string\lastpage@lastpage{\thepage}}%
+ \immediate\write\@auxout{\string\gdef\string\lastpage@lastpageHy{}}%
+ \addtocounter{page}{+1}%
+ \endgroup%
+ }%
+ }%
+ }%
+ }
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\lastpage@putlabelhyper}%
+% \indent When \xpackage{hyperref} has been loaded, the label is set with the
+% |\lastpage@putlabelhyper| command. If the \xpackage{hyperref} package is used,
+% but page-anchors are disabled, the hyperlinking will not work.
+%
% \begin{macrocode}
-%</package>
+\newcommand{\lastpage@putlabelhyper}{%
+ \ifHy@pageanchor%
+ \else%
+ \PackageError{lastpage}{hyperref option pageanchor disabled}{%
+ The \string\pageref{LastPage} link does not work\MessageBreak%
+ using hyperref with disabled option `pageanchor'.\MessageBreak%
+ }%
+ \fi%
+% \end{macrocode}
+%
+% Since the page has been put out, we are on the page \textit{after} that page.
+% We therefore subtract one from the page counter. (For the compiler,
+% this is equal to |\advance\c@page\m@ne|, but for human readers of the code
+% it is probably easier to understand.)
+%
+% \begin{macrocode}
+ \begingroup%
+ \addtocounter{page}{-1}%
+% \end{macrocode}
+%
+% Simply using |\label| for \texttt{LastPage} would not work,
+% because labels wait for the output routines to work, and there
+% may be no more invocations of the output routines. To force
+% the write out, we need to do an |\immediate| write into the \xfile{aux} file.
+%
+% \begin{macrocode}
+%% The following code is from the hyperref package %%
+%% 2010/04/17 v6.80x; newer versions are available. %%
+ \let\@number\@firstofone%
+ \ifHy@pageanchor%
+ \ifHy@hypertexnames%
+ \ifHy@plainpages%
+ \def\Hy@temp{\arabic{page}}%
+ \else%
+ \Hy@unicodefalse%
+%% Code not from hyperref package: %%
+%% The following lines are taken from the pageslts package, %%
+%% which in turn got them from the hyperref package and %%
+%% modified them. %%
+%% Without the modification, after the first shipout "PD1" %%
+%% is inserted each time |\pdfstringdef\Hy@temp{\thepage}| %%
+%% is executed. %%
+ \ifnum \value{page}=1\relax%
+% \end{macrocode}
+%
+% We do not count the pages ourselves, and so they could have been changed by
+% e.\,g. |\pagenumbering{...}|, |\addtocounter{page}{...}|,\\
+% |\setcounter{page}{...}|. Thus the page might have the number one
+% while not being the first page at all. Using the (obsolete) \xpackage{everyshi}
+% package would help, but this package should not require other packages.
+% The \xpackage{pageslts} package does a better handling, but requires
+% some other packages.\\
+% We will make a mistake here at most once:
+%
+% \begin{macrocode}
+ \ifx \lastpage@firstpage\lastpage@one\relax%
+ \def\Hy@temp{\thepage}%
+ \gdef\lastpage@firstpage{0}%
+ \else%
+%% Code from hyperref package again: %%
+ \pdfstringdef\Hy@temp{\thepage}%
+%% End of code from the hyperref package. %%
+ \fi%
+%% The pageslts package would even check for fnsymbol page %%
+%% numbering scheme and adapt the code correspondingly. %%
+ \else%
+%% Code from hyperref package again: %%
+ \pdfstringdef\Hy@temp{\thepage}%
+%% Code from pageslts package again: %%
+ \fi%
+%% Code from hyperref package again: %%
+ \fi%
+ \else%
+ \def\Hy@temp{\the\Hy@pagecounter}%
+ \fi%
+ \fi%
+ \immediate\write\@auxout{%
+ \string\newlabel{LastPage}{{}{\thepage}{}{%
+ \ifHy@pageanchor page.\Hy@temp\fi}{}}%
+ }%
+%% End of code from the hyperref package. %%
+% \end{macrocode}
+%
+% We also save the values, so that we can later (next rerun) check,
+% whether they have been saved in the \xfile{aux} file.
+%
+% \begin{macrocode}
+ \immediate\write\@auxout{\string\xdef\string\lastpage@lastpage{\thepage}}%
+ \ifHy@pageanchor%
+ \immediate\write\@auxout{\string\xdef\string\lastpage@lastpageHy{\Hy@temp}}%
+ \else%
+ \immediate\write\@auxout{\string\gdef\string\lastpage@lastpageHy{}}%
+ \fi%
+% \end{macrocode}
+%
+% After the writeout we restore the page number again,
+% since there might be other things still to be done.
+%
+% \begin{macrocode}
+ \addtocounter{page}{+1}%
+ \endgroup%
+ }
+
% \end{macrocode}
+% \end{macro}
%
+% \begin{macro}{\lastpage@putlabelNR}
+% \indent The \xpackage{nameref} package redefines |\label| to have five arguments
+% instead of two, therefore
+% \newline
+% |\newlabel{LastPage}{{}{\thepage}{}{}{}}|
+% instead of\newline
+% |\newlabel{LastPage}{{}{\thepage}}| must be used:
+%
+% \begin{macrocode}
+\newcommand{\lastpage@putlabelNR}{%
+ \begingroup%
+ \addtocounter{page}{-1}%
+ \immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}{}{}{}}}%
+ \immediate\write\@auxout{\string\xdef\string\lastpage@lastpage{\thepage}}%
+ \immediate\write\@auxout{\string\gdef\string\lastpage@lastpageHy{}}%
+ \addtocounter{page}{+1}%
+ \endgroup%
+ }
+
+% \end{macrocode}
+% \end{macro}
% \pagebreak
%
-% \section{Installation}
+% \begin{macro}{\lastpage@fileswtest}
+% \indent Later it will be determined whether it is allowed to write
+% to the \xfile{aux} file. If it was \emph{not} allowed, it is checked
+% whether the label was already set via the \xfile{aux} file in some
+% earlier compilation run. (There are packages where the document
+% is compiled with access to the \xfile{aux} file, and then there is
+% an additional compiler run, where the \xfile{aux} file cannot be changed,
+% but in that run there is also no need to change it.) The \xpackage{tikz}
+% package is somewhat different, therefore we only give a warning instead
+% of an error (and hope that there is another compiler run where the
+% \xfile{aux} file can be written).
+%
+% \begin{macrocode}
+\newcommand{\lastpage@fileswtest}[2]{%
+ \edef\lastpage@testa{#1}%
+ \edef\lastpage@testb{#2}%
+ \ifx\lastpage@testa\lastpage@testb%
+ \else%
+ \IfPackageLoadedTF{tikz}{%
+ \PackageWarning{lastpage}%
+ {The lastpage package was not allowed to write to an\MessageBreak%
+ .aux file. This package does not work without access\MessageBreak%
+ to an .aux file.\MessageBreak%
+ It is OK if the .aux file was already updated\MessageBreak%
+ by a previous compiler run\MessageBreak%
+ and would not have changed anyway.\MessageBreak%
+ }%
+ }{\PackageError{lastpage}{No auxiliary file allowed}%
+ {The lastpage package was not allowed to write to an .aux file.\MessageBreak%
+ This package does not work without access to an .aux file.\MessageBreak%
+ Press Ctrl+Z to exit.\MessageBreak%
+ But it is OK if the .aux file was already updated\MessageBreak%
+ by a previous compiler run\MessageBreak%
+ and would not have changed anyway.\MessageBreak%
+ }%
+ }%
+ \fi%
+ }
+
+% \end{macrocode}
+% \end{macro}
%
-% \begin{center}
-% {\large \textbf{First, please make sure that there is no old version of}}
-% {\large \textbf{\textsf{lastpage}{} at some obsolete place in your system!}}
-% \end{center}
+% \begin{macro}{\lastpage@fileswtestHy}
+% \indent When the \xpackage{hyperref} package has been loaded,
+% |\lastpage@lastpageHy| must be tested additionally. (And a
+% |\newcommand| is needed, because |\ifHy@pageanchor| is not even
+% defined when \xpackage{hyperref} has not been loaded.)
%
-% \subsection{Downloads\label{ss:Downloads}}
+% \begin{macrocode}
+\newcommand{\lastpage@fileswtestHy}{%
+ \ifHy@pageanchor%
+ \lastpage@fileswtest{\Hy@temp}{\lastpage@lastpageHy}%
+ \else%
+ \lastpage@fileswtest{\empty}{\lastpage@lastpageHy}%
+ \fi%
+ }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \DescribeMacro{enddocument/afterlastpage}
+% \indent |enddocument/afterlastpage| we again (re)define |\lastpage@putlabel|
+% to do nothing, but first use it to check whether |\lastpage@lastpage|
+% is still unchanged, which is OK for the first run only.
+%
+% \begin{macrocode}
+\AddToHook{enddocument/afterlastpage}{%
+ \IfPackageLoadedTF{pageslts}{\relax}{%
+ \gdef\lastpage@putlabel{??}%
+ \ifx\lastpage@lastpage\lastpage@putlabel\relax%
+ \AddToHook{enddocument/info}{%
+ \PackageWarning{lastpage}{Rerun to get the references right}%
+ }%
+ \fi%
+ }%
+ \gdef\lastpage@putlabel{\relax}%
+% \end{macrocode}
+% \pagebreak
+%
+% It is checked whether writing to files is allowed
+% (otherwise, only an error message is issued and nothing is done).
+%
+% \begin{macrocode}
+ \if@filesw%
+% \end{macrocode}
+%
+% We put in a |\message| to show, in what order things (which were called)
+% are done.
+%
+% \begin{macrocode}
+ \message{^^Jenddocument/afterlastpage: lastpage setting LastPage.^^J}%
+ \IfPackageLoadedTF{french}{%
+ \addtocounter{page}{+1}\lastpage@putl@bel\addtocounter{page}{-1}%
+ }{\IfPackageLoadedTF{frenchle}{%
+ \addtocounter{page}{+1}\lastpage@putl@bel\addtocounter{page}{-1}%
+ }{\lastpage@putl@bel%
+ }%
+ }%
+ \else%
+% \end{macrocode}
+%
+% When writing to files is not allowed, nothing can be done. But when
+% the label was already set via the \xfile{aux} file, nothing needs
+% to be done. We check for this with |\lastpage@fileswtest| and
+% (if \xpackage{hyperref} has been loaded) |\lastpage@fileswtestHy|.
%
+% \begin{macrocode}
+ \IfPackageLoadedTF{pageslts}{\relax}{%
+ \lastpage@fileswtest{\thepage}{\lastpage@lastpage}%
+ \IfPackageLoadedTF{hyperref}{\lastpage@fileswtestHy}{\relax}%
+ }%
+ \fi%
+ }
+%</lastpagemodern>
+% \end{macrocode}
+% \pagebreak
+%
+% \section{Installation}
+% \subsection{Downloads\label{ss:Downloads}}
% Everything is available at \url{https://www.ctan.org},
% but may need additional packages themselves.\\
%
@@ -1471,72 +1775,107 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \begin{description}
% \item[-] \TeX Format \LaTeXe{}: \url{https://www.CTAN.org}
%
-% \item[-] document class \xclass{ltxdoc}, 2015/03/26, v2.0w,\\
-% \url{https://www.ctan.org/pkg/ltxdoc}
+% \item[-] document class \xclass{ltxdoc}, 2022/06/22, v2.1i,
+% \url{https://ctan.org/pkg/ltxdoc}
%
-% \item[-] package \xpackage{holtxdoc}, 2012/03/21, v0.24,\\
-% \url{https://www.ctan.org/pkg/holtxdoc}
-%
-% \item[-] package \xpackage{hypdoc}, 2011/08/19, v1.11,\\
-% \url{https://www.ctan.org/pkg/hypdoc}
+% \item[-] package \xpackage{holtxdoc}, 2019/12/09, v0.30,
+% \url{https://ctan.org/pkg/holtxdoc}
% \end{description}
%
% \DescribeMacro{lastpage.sty}
-% The |lastpage.sty| for \LaTeXe{} (i.\,e. each document using
-% the \xpackage{lastpage} package) requires:
+% The |lastpage.sty| (i.\,e. each document using the \xpackage{lastpage} package)
+% requires:
% \begin{description}
-% \item[-] \TeX Format \LaTeXe{}, \url{https://www.CTAN.org}
+% \item[-] \TeX, \url{https://www.CTAN.org}
%
-% \item[-] package \xpackage{lastpage}, 2021/09/03, v1.2n,\\
-% \url{https://www.ctan.org/pkg/lastpage}
-% \end{description}
-% and can use
-% \begin{description}
-% \item[-] package \xpackage{hyperref}, 2012/11/06, v6.83m,\\
-% \url{https://www.ctan.org/pkg/hyperref}
+% \item[-] package \xpackage{lastpage}, 2023-03-07, v2.0a,
+% \url{https://ctan.org/pkg/lastpage}
% \end{description}
%
% \DescribeMacro{lastpage209.sty}
% The |lastpage209.sty| for \LaTeX2.09{} (i.\,e. each document using
% the \xpackage{lastpage209} package) requires:
% \begin{description}
-% \item[-] \TeX Format \LaTeX{}, v2.09
+% \item[-] \TeX-format \LaTeX{}, v2.09
%
-% \item[-] package \xpackage{lastpage209}, 2021/09/03, v1.2n, included in\\
-% \hspace*{-2em}\url{http://mirrors.ctan.org/install/macros/latex/contrib/lastpage.tds.zip}%
+% \item[-] package \xpackage{lastpage209}, 2023-03-07, v2.0a,
+% \url{https://ctan.org/pkg/lastpage}
% \end{description}
% and does not work with \xpackage{hyperref}, which needs \LaTeX2e{}.\\
%
+% \DescribeMacro{lastpage2e.sty}
+% The |lastpage2e.sty| for \LaTeXe{} (i.\,e. each document using
+% the \xpackage{lastpage2e} package) requires:
+% \begin{description}
+% \item[-] \TeX-format \LaTeXe{} 1994/12/01 or newer,
+% \url{https://www.CTAN.org}
+%
+% \item[-] package \xpackage{lastpage}, 2023-03-07, v2.0a,
+% \url{https://ctan.org/pkg/lastpage}
+% \end{description}
+%
+% \DescribeMacro{lastpageclassic.sty}
+% The |lastpageclassic.sty| for \LaTeXe{} (i.\,e. each document using
+% the \xpackage{lastpageclassic} package) requires:
+% \begin{description}
+% \item[-] \TeX-format \LaTeXe{} between 1994/12/01 and 2022/11/01,\\
+% \url{https://www.CTAN.org}
+%
+% \item[-] package \xpackage{lastpage}, 2023-03-07, v2.0a,
+% \url{https://ctan.org/pkg/lastpage}
+% \end{description}
+% and can use
+% \begin{description}
+% \item[-] package \xpackage{hyperref}, 2023-02-07, v7.00v,
+% \url{https://ctan.org/pkg/hyperref}
+% \end{description}
+%
+% \DescribeMacro{lastpagemodern.sty}
+% The |lastpagemodern.sty| for \LaTeXe{} (i.\,e. each document using
+% the \xpackage{lastpagemodern} package) requires:
+% \begin{description}
+% \item[-] \TeX-format \LaTeXe{} 2022-11-01 or newer,
+% \url{https://www.CTAN.org}
+%
+% \item[-] package \xpackage{lastpage}, 2023-03-07, v2.0a,
+% \url{https://ctan.org/pkg/lastpage}
+% \end{description}
+% and can use
+% \begin{description}
+% \item[-] package \xpackage{hyperref}, 2023-02-07, v7.00v,
+% \url{https://ctan.org/pkg/hyperref}
+% \end{description}
+%
% \DescribeMacro{lastpage-example.tex}
% The |lastpage-example.tex| requires the same file as all
% documents using the \xpackage{lastpage} package, i.\,e.
% \begin{description}
-% \item[-] package \xpackage{lastpage}, 2021/09/03, v1.2n,\\
-% \url{https://www.ctan.org/pkg/lastpage}\\
+% \item[-] package \xpackage{lastpage}, 2023-03-07, v2.0a,
+% \url{https://ctan.org/pkg/lastpage}\\
% (Well, it is the example file for this package, and because you are reading the
% documentation for the \xpackage{lastpage} package, it can be assumed that you already
% have some version of it -- is it the current one?)
% \end{description}
% and additionally:
% \begin{description}
-% \item[-] class \xpackage{article}, 2014/09/29, v1.4h,\\
-% \url{https://www.ctan.org/pkg/article}
+% \item[-] class \xpackage{article}, 2022/07/02, v1.4n, from \xpackage{classes}:
+% \url{https://ctan.org/pkg/classes}
%
-% \item[-] package \xpackage{showkeys}, 2014/10/28, v3.17,\\
-% \url{https://www.ctan.org/pkg/showkeys}
+% \item[-] package \xpackage{showkeys}, 2022/04/12, v3.18,
+% \url{https://ctan.org/pkg/showkeys}
%
-% \item[-] package \xpackage{hyperref}, 2012/11/06, 6.83m,\\
-% \url{https://www.ctan.org/pkg/hyperref}
+% \item[-] package \xpackage{hyperref}, 2023-02-07, v7.00v,
+% \url{https://ctan.org/pkg/hyperref}
% \end{description}
%
% \DescribeMacro{endfloat}
% The \xpackage{endfloat} package is not required, but because
-% the \xpackage{lastpage} package is incompatible with \textit{very} old versions
+% the \xpackage{lastpage} package is incompatible with \textit{ancient} versions
% of the \xpackage{endfloat} package (see subsection~\ref{sec:endfloat}),
-% here the recent one is listed:
+% here the recent one (at the time of writing this documentation) is listed:
% \begin{description}
-% \item[-] package \xpackage{endfloat}, v2.5d, 2011/12/25,\\
-% \url{https://www.ctan.org/pkg/endfloat}
+% \item[-] package \xpackage{endfloat}, 2019/04/15, v2.7,
+% \url{https://ctan.org/pkg/endfloat}
% \end{description}
%
% \DescribeMacro{fancyhdr}
@@ -1546,19 +1885,11 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \xpackage{fancyheadings}), but because they were mentioned, also they are listed
% here:
% \begin{description}
-% \item[-] package \xpackage{fancyhdr}, 2005/03/22, v3.2,\\
-% \url{https://www.ctan.org/pkg/fancyhdr}
-%
-% \item[-] package \xpackage{nccfancyhdr}, 2004/12/07, v1.1,\\
-% \url{https://www.ctan.org/pkg/nccfancyhdr}
-% \end{description}
+% \item[-] package \xpackage{fancyhdr}, 2022/11/09, v4.1,
+% \url{https://ctan.org/pkg/fancyhdr}
%
-% \DescribeMacro{regstats}
-% For counting the used counters (and other registers), the \xpackage{regstats}
-% package was mentioned (it is not required). It can be found at:
-% \begin{description}
-% \item[-] package \xpackage{regstats}, 2012/01/07, v1.0h,\\
-% \url{https://www.ctan.org/pkg/regstats}
+% \item[-] package \xpackage{nccfancyhdr}, 2004/12/07, v1.1,
+% \url{https://ctan.org/pkg/nccfancyhdr}
% \end{description}
%
% \DescribeMacro{count1to}
@@ -1571,86 +1902,92 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% As possible alternatives in section~\ref{sec:Alternatives}, Alternatives,
% there are listed (newer versions might be available):
% \begin{description}
-% \item[-] package \xpackage{pageslts}, 2014/01/19, v1.2c,\\
-% \url{https://www.ctan.org/pkg/pageslts}
+% \item[-] package \xpackage{pageslts}, 2015/12/21, v1.2f,
+% \url{https://ctan.org/pkg/pageslts}
%
% \item[-] package \xpackage{papermas}, 2011/08/22, v1.0h; the \xpackage{papermas}
% package can be considered as kind of add-on to the \xpackage{pageslts} package.\\
-% \url{https://www.ctan.org/pkg/papermas}
+% \url{https://ctan.org/pkg/papermas}
%
-% \item[-] package \xpackage{count1to}, 2009/05/24, v2.1,\\
-% \url{https://www.ctan.org/pkg/count1to}
+% \item[-] package \xpackage{count1to}, 2009/05/24, v2.1,
+% \url{https://ctan.org/pkg/count1to}
%
-% \item[-] package \xpackage{nofm}, 1991/02/25, v?.?,\\
-% \url{https://mirrors.ctan.org/obsolete/macros/latex209/contrib/misc/nofm.sty},
+% \item[-] package \xpackage{nofm}, 1991/02/25,
+% \href{https://mirror.ctan.org/obsolete/macros/latex209/contrib/misc/nofm.sty}{%
+% https://mirror.ctan.org/obsolete/macros/latex209/}%
+% \href{https://mirror.ctan.org/obsolete/macros/latex209/contrib/misc/nofm.sty}{%
+% contrib/misc/nofm.sty},
% does not work with e.\,g. \xpackage{hyperref}
%
-% \item[-] package \xpackage{totpages}, 2005/09/19, v2.00,\\
-% \url{https://www.ctan.org/pkg/totpages}
+% \item[-] package \xpackage{totpages}, 2005/09/19, v2.00,
+% \url{https://ctan.org/pkg/totpages}
%
-% \item[-] package \xpackage{totalcount}, 2018/01/21, v1.0a,\\
-% \url{https://www.ctan.org/pkg/totalcount}.
+% \item[-] package \xpackage{totalcount}, 2018/01/21, v1.0a,
+% \url{https://ctan.org/pkg/totalcount}
%
-% \item[-] package \xpackage{zref}, 2012/04/04, v2.24,\\
-% \url{https://www.ctan.org/pkg/zref},
-% requires $\varepsilon$-\TeX{}.
+% \item[-] package \xpackage{zref}, 2022-04-07, v2.34,
+% \url{https://ctan.org/pkg/zref}
%
-% \item[-] class \xpackage{memoir}, 2021/06/16, v3.7p,\\
-% \url{https://ctan.org/tex-archive/macros/latex/contrib/memoir/}.
+% \item[-] class \xpackage{memoir}, 2022-11-17, 3.7.19,
+% \url{https://ctan.org/pkg/memoir}.
% \end{description}
%
% \DescribeMacro{Oberdiek}
% \DescribeMacro{holtxdoc}
% \DescribeMacro{zref}
-% All packages of \textsc{Heiko Oberdiek's} bundle `oberdiek'
+% All packages of the `oberdiek' bundle
% (especially \xpackage{holtxdoc} and \xpackage{zref})
% are also available in a TDS compliant ZIP archive:\\
-% \url{http://mirrors.ctan.org/install/macros/latex/contrib/oberdiek.tds.zip}.\\
+% \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.\\
%
% \DescribeMacro{hyperref}
% \noindent \xpackage{hyperref} is not included in that bundle and needs to be
% downloaded separately,\\
-% \url{http://mirrors.ctan.org/install/macros/latex/contrib/hyperref.tds.zip}.\\
+% \url{https://mirror.ctan.org/install/macros/latex/contrib/hyperref.tds.zip}.\\
%
-% \DescribeMacro{M\"{u}nch}
+% \DescribeMacro{Münch}
% A hyperlinked list of my (other) packages can be found at\\
-% \url{https://www.ctan.org/author/muench-hm}.\\
+% \url{https://ctan.org/author/muench-hm}.
+% \pagebreak
%
% \subsection{Package, unpacking TDS}
-% \paragraph{Package.} This package is available on CTAN.org.
+% \paragraph{Package.} This package is available on \url{https://www.CTAN.org}.
% \begin{description}
-% \item[\url{http://mirrors.ctan.org/macros/latex/contrib/lastpage/lastpage.dtx}]\hspace*{0.1cm} \\
+% \item[\url{https://mirror.ctan.org/macros/latex/contrib/lastpage/lastpage.dtx}]\hspace*{0.1cm} \\
% The source file.
-% \item[\url{http://mirrors.ctan.org/macros/latex/contrib/lastpage/lastpage.pdf}]\hspace*{0.1cm} \\
+% \item[\url{https://mirror.ctan.org/macros/latex/contrib/lastpage/lastpage.pdf}]\hspace*{0.1cm} \\
% The documentation.
-% \item[\url{http://mirrors.ctan.org/macros/latex/contrib/lastpage/lastpage-example.pdf}]\hspace*{0.1cm} \\
+% \item[\url{https://mirror.ctan.org/macros/latex/contrib/lastpage/lastpage-example.pdf}]\hspace*{0.1cm}
% The compiled example file, as it should look like.
-% \item[\url{http://mirrors.ctan.org/macros/latex/contrib/lastpage/README}]\hspace*{0.1cm} \\
+% \item[\url{https://mirror.ctan.org/macros/latex/contrib/lastpage/README}]\hspace*{0.1cm} \\
% The README file.
% \end{description}
% There is also a |lastpage.tds.zip| available:
% \begin{description}
-% \item[\url{http://mirrors.ctan.org/install/macros/latex/contrib/lastpage.tds.zip}]\hspace*{0.1cm} \\
+% \item[\url{https://mirror.ctan.org/install/macros/latex/contrib/lastpage.tds.zip}]\hspace*{0.1cm}
% Everything in TDS compliant, compiled format
% \end{description}
% which additionally contains\\
% \begin{tabular}{ll}
-% lastpage.ins & The installation file.\\
-% lastpage.drv & The driver to generate the documentation.\\
-% lastpage.sty & The \xext{sty}le file.\\
-% lastpage209.sty & The \xext{sty}le file for \LaTeX2.09{} \textbf{only}.\\
+% lastpage.ins & The installation file.\\
+% lastpage.drv & The driver to generate the documentation.\\
+% lastpage.sty & The \xext{sty}le file.\\
+% lastpage209.sty & The \xext{sty}le file for \LaTeX2.09{} \textbf{only}.\\
+% lastpage2e.sty & The \xext{sty}le file to determine which 2e-style to use.\\
+% lastpageclassic.sty & The \xext{sty}le file for older \LaTeX-formats.\\
+% lastpagemodern.sty & The \xext{sty}le file for the recent \LaTeX-format.\\
% lastpage-example.tex & The example file.%
% \end{tabular}
%
% \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
-% \xext{dtx} through \plainTeX{}:
+% \xext{.dtx} through \plainTeX{}:
% \begin{quote}
% \verb|tex lastpage.dtx|
% \end{quote}
@@ -1659,18 +1996,19 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
%
% \paragraph{TDS.} Now the different files must be moved into
% the different directories in your installation TDS tree
-% (also known as \xfile{texmf} tree), \textbf{but first you should delete
-% the old \xpackage{lastpage} files (which are probably located in other directories)}.
-% You can make a backup of the old files before deleting them, of course.
+% (also known as \xfile{texmf} tree):
% \begin{quote}
% \def\t{^^A
% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}}
% lastpage.sty & tex/latex/lastpage.sty\\
+% lastpage209.sty & tex/latex/lastpage.sty\\
+% lastpage2e.sty & tex/latex/lastpage.sty\\
+% lastpageclassic.sty & tex/latex/lastpage.sty\\
+% lastpagemodern.sty & tex/latex/lastpage.sty\\
% lastpage.pdf & doc/latex/lastpage.pdf\\
% lastpage-example.tex & doc/latex/lastpage-example.tex\\
% lastpage-example.pdf & doc/latex/lastpage-example.pdf\\
% lastpage.dtx & source/latex/lastpage.dtx\\
-% lastpage209.sty & tex/latex/lastpage209.sty for \LaTeX2.09\\
% \end{tabular}^^A
% }^^A
% \sbox0{\t}^^A
@@ -1734,16 +2072,14 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \end{quote}
% 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.
+% place, see the documentation of \docstrip{}.
%
% \subsection{Refresh file name databases}
-%
-% If your \TeX~distribution (\TeX live, \mikTeX, \teTeX, \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}
@@ -1751,7 +2087,7 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \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 autodetect routine
% about your intention:
% \begin{quote}
% \verb|latex \let\install=y\input{lastpage.dtx}|
@@ -1782,7 +2118,6 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \end{quote}
%
% \subsection{Compiling the example}
-%
% The example file, \textsf{lastpage-example.tex}, can be compiled via\\
% \indent |latex lastpage-example.tex|\\
% or (recommended)\\
@@ -1791,14 +2126,14 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
%
% \section{Acknowledgements}
%
-% I (\textsc{H.-Martin M\"{u}nch}) would like to thank
+% I (\textsc{H.-Martin Münch}) would like to thank
% \textsc{Jeffrey P. Goldberg} (jeffrey+news at goldmark dot org) for
-% inventing the \xpackage{lastpage} package as well as for granting me
+% inventing the \xpackage{lastpage} package as well as for allowing me
% to update it. Further I would like to thank \textsc{Heiko Oberdiek}
-% for providing a~lot~(!) of useful packages (from which I also got everything
+% for providing a~lot~(!) of useful packages (from which I also learned everything
% I know about creating a file in \xfile{dtx} format, OK, say it: copying),
% and the \Newsgroup{comp.text.tex} and \Newsgroup{de.comp.text.tex}
-% newsgroups for their help in all things \TeX{}. Thanks for bug reports go
+% newsgroups for their help in all things \TeX{}. Thanks for bug reports
% to \textsc{Ulrike Fischer}, \textsc{Sebastian Bank}, \textsc{James Hedges},
% \textsc{Mikhail Titov}, and \textsc{Micha\l{} Herman}.
% Thanks to \textsc{Sven Siegmund} for pointing out a necessary further
@@ -1834,13 +2169,13 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% and then the \xpackage{hyperref} package and the \xpackage{revtex4}
% class even redefine\\
% |\lastpage@putlabel| (at least \xpackage{hyperref} version
-% \sout{ 2010/09/13, v6.81n}\uwave{ 2012/11/06, v6.83m}, and
-% REV\TeX{}4 version 2010/07/25, v4.1r, still do this).
+% 2012/11/06, v6.83m, and
+% REV\TeX{}4 version 2010/07/25, v4.1r, still did this).
% \end{Version}
% \begin{Version}{2010/02/18 v1.1}
-% \item Proposed |LastPages| label by \textsc{H.-Martin M\"{u}nch}
+% \item Proposed |LastPages| label by \textsc{H.-Martin Münch}
% on \Newsgroup{comp.text.tex}, see e.\,g.
-% \url{http://groups.google.com/group/comp.text.tex/msg/4407493da9c747f0?dmode=source};
+% \url{https://groups.google.com/g/comp.text.tex/c/Ad8pO2Rw_HY/m/8EfHqT1JB0QJ};
% now available in the \xpackage{pageslts} package.
% \end{Version}
% \begin{Version}{2010/07/29 v1.2a}
@@ -1851,14 +2186,14 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \item Replacement of |\filedate|, |-version|, |-name|,\ldots{} because
% of \LaTeX{}~bug 2705:\\
% Synopsis: Possible problem with |\fileversion| and |\filedate|\\
-% \url{http://www.latex-project.org/cgi-bin/ltxbugs2html?category=LaTeX&responsible=anyone&state=anything&keyword=lastpage&pr=latex%2F2705&search=}
+% \url{https://www.latex-project.org/cgi-bin/ltxbugs2html?category=LaTeX&responsible=anyone&state=anything&keyword=lastpage&pr=latex/2705}
% \item Example |lastpage-example.tex|.
% \item Alternatives listing (section \ref{sec:Alternatives}).
% \item Listing of \TeX{} sources (subsection \ref{ss:Downloads}).
-% \item A lot (!) of details.
+% \item Really a lot of details.
% \item Complete rewriting of the documentation.
% \item Everything in \texttt{DTX} framework.
-% \item Included a |\CheckSum|.
+% \item Included a |\CheckSum|. [Removed in v2.0a.]
% \item Complete rewriting of the README file.
% \end{Version}
% \begin{Version}{2010/08/12 v1.2b}
@@ -1878,23 +2213,23 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% |\AtBeginDocument|, when placing the \texttt{lastpage} label it is also
% checked for the |\hyperref| command, in case \xpackage{hyperref} was not
% loaded at |\begin{document}| yet. (Bug reported by \textsc{Sebastian Bank},
-% thanks!)
-% \item Changed the |\unit| definition (got rid of an old |\rm|).
+% thanks!) [lastpagemodern.sty just uses |\IfPackageLoadedTF{hyperref}|.]
+% \item Changed the |\unit| definition (got rid of an old |\rm|). [Removed in v2.0a.]
% \item Changed |\lastpage@puthyperlabel| to |\lastpage@putlabelhyper| analogous to
% |\pagesLTS@putlabelhyper| of the \xpackage{pageslts} package.
% \item Updated version number and date of \xpackage{pagesLTS} package (especially
-% for the check for outdated versions).
+% for the check for outdated versions). [Removed in v2.0a.]
% \item Removed wrong \%\ from the driver file.
% \end{Version}
% \begin{Version}{2010/08/25 v1.2d}
% \item Bug fix: also \xpackage{tcilatex} defines the |\hyperref| command,
% therefore for \xpackage{hyperref} package detection this had to be
% changed to |\Hy@Warning|.
+% [lastpagemodern just uses |\IfPackageLoadedTF{hyperref}|.]
% \end{Version}
% \begin{Version}{2010/09/12 v1.2e}
-% \item \textsc{James Hedges} (Thanks!) pointed out, that there was no
-% instruction in the documentation about suppressing hyperlinks:
-% added (also to the example).
+% \item \textsc{James Hedges} pointed out, that there was no instruction in the
+% documentation about suppressing hyperlinks: added (also to the example).
% \item Diverse small changes.
% \end{Version}
% \begin{Version}{2010/09/24 v1.2f}
@@ -1902,9 +2237,7 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \item New version of REV\TeX{}4\ 2010/07/25, v4.1r, old problem.
% \item New version of \xpackage{pagesLTS} package, 2010/09/22, v1.1k.
% \item Moved the package from \texttt{.../latex/muench/lastpage/...} to\\
-% \texttt{.../latex/lastpage/...}.\\
-% (Please make sure that any old versions of the \xpackage{lastpage}
-% package are properly uninstalled from your system.)
+% \texttt{.../latex/lastpage/...}.
% \end{Version}
% \begin{Version}{2011/02/01 v1.2g}
% \item Updated to version 2010/04/24 v0.19 of the \xpackage{holtxdoc} package.
@@ -1916,7 +2249,7 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \item The \xpackage{holtxdoc} package was fixed, therefore the warning
% in \xfile{drv} could be removed.~-- Adapted the style of this documentation
% to new \textsc{Oberdiek} \xfile{dtx} style.
-% \item New versions of \xpackage{pagesLTS}, \xpackage{ulem}, \xpackage{hyperref},%
+% \item New versions of \xpackage{pagesLTS}, \xpackage{ulem}, \xpackage{hyperref},
% \xpackage{papermas} packages.
% \item Corrected references in the README and manual.
% \end{Version}
@@ -1926,26 +2259,23 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \item Some details.
% \end{Version}
% \begin{Version}{2011/08/31 v1.2j}
-% \item Updated to \TeX{} live 2011 (for compiling the documentation and example).
+% \item Updated to \TeX{} Live 2011 (for compiling the documentation and example).
% \item New version of \xpackage{papermas} package, 2011/08/22, v1.0h.
% \item Adapted for the use together with packages, which sometimes prevent writing
-% to the \xfile{aux} file. (Bug reported by \textsc{Mikhail Titov}, thanks!)
-% \item Minor details.
+% to the \xfile{aux} file. (Bug reported by \textsc{Mikhail Titov}.)
% \end{Version}
% \begin{Version}{2011/09/01 v1.2k}
% \item Fixed |\thepage{}| to |\thepage{} |, where there should be a space.
% \item New version of the \xpackage{hyperref} package, 2011/08/19, v6.82h, but
% still problem with links to pages with
% page-\textquotedblleft number\textquotedblright{} in \texttt{fnsymbol}
-% pagenumbering scheme.
-% \uwave{Seems to be fixed since v6.83m as of 2012/11/06.}
+% pagenumbering scheme. [Seems to be fixed since v6.83m as of 2012/11/06.]
% \item Documentation update about \textquotedblleft No write access to the
% \xfile{aux} file\textquotedblright .
% \item New version of \xpackage{regstats} package available.
-% \item Some small details.
% \end{Version}
% \begin{Version}{2013/01/28 v1.2l}
-% \item Updated to \TeX{} live 2012 (for compiling the documentation and example).
+% \item Updated to \TeX{} Live 2012 (for compiling the documentation and example).
% \item New versions of the packages
% \xpackage{endfloat}, \xpackage{holtxdoc}, \xpackage{hypdoc},
% \xpackage{hyperref}, \xpackage{pageslts}, \xpackage{regstats},
@@ -1953,30 +2283,35 @@ This can be broken for example by \verb|\pagenumbering{fnsymbol}|.
% \item The \xpackage{nameref} package redefines |\label| to have five arguments
% instead of two, therefore |\newlabel{LastPage}{{}{\thepage}{}{}{}}| instead of
% |\newlabel{LastPage}{{}{\thepage}}| must be used.
-% (Bug reported at \url{http://tex.stackexchange.com/q/95541/6865},
+% (Bug reported at \url{https://tex.stackexchange.com/q/95541},
% thanks to Micha\l{} Herman!) Fixed.
-% \item Updates to several details, also in the documentation.
% \end{Version}
% \begin{Version}{2015/03/29 v1.2m}
-% \item Updated to \TeX{} live 2014 (for compiling the documentation and example)
-% and installed the available updates. Therefore I can no longer test
-% whether \xpackage{lastpage} works with earlier versions of \LaTeX{}.
-% (It probably does, but there is no guarantee.)
-% \item Updates to a lot (!) of details in the documentation (manual \& README),
-% very small changes in code.
+% \item Updated to \TeX{} Live 2014 (for compiling the documentation and example).
+% \item Updates to really a lot of details in the documentation (manual \& README).
% \end{Version}
% \begin{Version}{2021/09/03 v1.2n}
% \item Updates to the documentation (manual \& README), to the example, and
% several small changes in code.
+% \item This version has been archived at
+% \url{https://web.archive.org/web/20230305193232/https://mirror.ctan.org/install/macros/latex/contrib/lastpage.tds.zip}.
+% \end{Version}
+% \begin{Version}{2023-03-07 v2.0a}
+% \item Removed use of \pkg{ulem}.
+% \item Removed |\unit|.
+% \item \pkg{lastpage} should now determine automatically, whether to load
+% its \TeX~2.09 version, classic \LaTeX2e-version, or modern version
+% with \eTeX, hook-management etc.
+% \item Converted to UTF-8.
+% \item Updated to \LaTeX{} format 2022-11-01.
+% \item Extensive updates to the documentation (manual \& README) and to the example.
% \end{Version}
% \end{History}
-%
% \bigskip
%
% 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
+% \newpage
%
% \PrintIndex
%