summaryrefslogtreecommitdiff
path: root/macros/latex-dev/base/ltclass.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-09-01 03:03:37 +0000
committerNorbert Preining <norbert@preining.info>2020-09-01 03:03:37 +0000
commita9726d029d99c128a7abb22e73074ba0a1ce838e (patch)
treea31816862a76ed100de957dc93c04447f254132c /macros/latex-dev/base/ltclass.dtx
parent568fe838cef40f671837d9348dd73c93d9ea962b (diff)
CTAN sync 202009010303
Diffstat (limited to 'macros/latex-dev/base/ltclass.dtx')
-rw-r--r--macros/latex-dev/base/ltclass.dtx456
1 files changed, 367 insertions, 89 deletions
diff --git a/macros/latex-dev/base/ltclass.dtx b/macros/latex-dev/base/ltclass.dtx
index 152adf82ff..7b1dbc8127 100644
--- a/macros/latex-dev/base/ltclass.dtx
+++ b/macros/latex-dev/base/ltclass.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltclass.dtx}
- [2020/06/05 v1.3l LaTeX Kernel (Class & Package Interface)]
+ [2020/08/29 v1.3p LaTeX Kernel (Class & Package Interface)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltclass.dtx}
@@ -44,6 +44,9 @@
\date{\filedate}
\MaintainedByLaTeXTeam{latex}
\maketitle
+
+ \providecommand\pkg[1]{\texttt{#1}}
+
\DocInput{\filename}
\end{document}
%</driver>
@@ -64,6 +67,7 @@
% \changes{v1.0l}{1994/11/17}{\cs{@tempa} to \cs{reserved@a}}
% \changes{v1.0z}{1998/03/21}{Added to documentation of filecontents}
% \changes{v1.1c}{1998/08/17}{(RmS) Minor documentation fixes.}
+% \changes{v1.3o}{2020/08/21}{Integration of new hook management interface}
%
%
% \section{Introduction}
@@ -256,8 +260,9 @@
% \PassOptionsToPackage{foo,bar}{fred}
% \RequirePackage[baz]{fred}\end{verbatim}
% is the same as:
-% \begin{verbatim}
-% \RequirePackage[foo,bar,baz]{fred}\end{verbatim}
+%\begin{verbatim}
+% \RequirePackage[foo,bar,baz]{fred}
+%\end{verbatim}
%
% \DescribeMacro\LoadClassWithOptions
% |\LoadClassWithOptions|\marg{name}\oarg{version}:\\
@@ -458,7 +463,9 @@
% \end{macro}
%
% \begin{macro}{\@documentclasshook}
-% The hook called after the first |\documentclass| command. By
+% This legacy hook is called after the first |\documentclass| command.
+% It is \emph{not} integrated with the new 2020 hook management system!
+% By
% default this checks to see if |\@normalsize| is undefined, and if
% so, sets it to |\normalsize|.
% \changes{v0.2q}{1993/12/17}
@@ -561,6 +568,16 @@
%<latexrelease>\IncludeInRelease{2020/10/01}{\@pushfilename}%
%<latexrelease> {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}%
\def\@pushfilename{%
+% \end{macrocode}
+% The push and pop macros are injected in \cs{@pushfilename} and
+% \cs{@popfilename} so that they correctly keep track of the hook
+% labels.
+%
+% This needs cleanup with the \pkg{expl3} interfaces also playing
+% here, e.g., \cs{@expl@push@filename@@} needs cleanup and (and
+% should probably not have this name either).
+% \begin{macrocode}
+ \@expl@@@hook@curr@name@push@@n{}%
\@expl@push@filename@@
\xdef\@currnamestack{%
{\@currname}%
@@ -582,16 +599,21 @@
\@onlypreamble\@pushfilename
% \end{macrocode}
%
+%
+%
+%
+%
% \changes{v1.3l}{2020/06/05}{Added \cs{@expl@pop@filename@@}}
% \begin{macrocode}
%<latexrelease>
%<latexrelease>\IncludeInRelease{2020/10/01}{\@popfilename}%
%<latexrelease> {Add \@expl@pop@filename@@}%
-\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil
+\def\@popfilename{\@expl@@@hook@curr@name@pop@@
+ \expandafter\@p@pfilename\@currnamestack\@nil
\@expl@pop@filename@@}
%<latexrelease>\EndIncludeInRelease
%<latexrelease>
-%<latexrelease>\IncludeInRelease{0000/00/00}{\@pushfilename}%
+%<latexrelease>\IncludeInRelease{0000/00/00}{\@popfilename}%
%<latexrelease> {Add \@expl@push@filename@@ and \@expl@push@filename@aux@@}%
%<latexrelease>\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil}
%<latexrelease>\EndIncludeInRelease
@@ -603,6 +625,8 @@
%<*2ekernel>
% \end{macrocode}
%
+%
+%
% \begin{macrocode}
\def\@p@pfilename#1#2#3#4\@nil{%
\gdef\@currname{#1}%
@@ -1609,6 +1633,11 @@
\@onlypreamble\@fileswith@pti@ns
% \end{macrocode}
%
+
+
+% \begin{macro}{\load@onefilewithoptions}
+% This macro is used when loading packages or classes.
+%
% Have the main argument as |#1|, so we only need one |\expandafter|
% above.
% \changes{v0.2a}{1993/11/14}
@@ -1625,55 +1654,171 @@
%</2ekernel>
%<*2ekernel|latexrelease>
%<latexrelease>\IncludeInRelease{2020/10/01}%
-%<latexrelease> {\@onefilewithoptions}{Unused options issue}%
+%<latexrelease> {\@onefilewithoptions}{Hooks and unused options issue}%
\def\@onefilewithoptions#1[#2][#3]#4{%
\@pushfilename
\xdef\@currname{#1}%
\global\let\@currext#4%
+% \end{macrocode}
+% The command \cs{ver@\meta{file}.\meta{ext}} is used to signal that
+% a package is already loaded, either because it is in fact loaded, or
+% because it's loading was suppressed. In minimal installations, said
+% package may not exist but still have its loading suppressed with
+% \cs{ver@\meta{file}.\meta{ext}}, so before checking if the file
+% exists we have to check that we do need to load it with
+% \cs{@ifl@aded}. If we don't, then there's no point in checking for
+% a typo or load-disabling.
+% \begin{macrocode}
+ \@ifl@aded\@currext\@currname
+% \end{macrocode}
+% If the package is already loaded, check that there were no option
+% clashes:
+% \changes{v1.1b}{1998/05/07}
+% {Modify help message for latex/2805}
+% \begin{macrocode}
+ {\@if@ptions\@currext{\@currname}{#2}{}%
+ {\@latex@error
+ {Option clash for \@cls@pkg\space \@currname}%
+ {The package \@currname\space has already been loaded
+ with options:\MessageBreak
+ \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
+ There has now been an attempt to load it
+ with options\MessageBreak
+ \space\space[#2]\MessageBreak
+ Adding the global options:\MessageBreak
+ \space\space
+ \@ptionlist{\@currname.\@currext},#2\MessageBreak
+ to your \noexpand\documentclass declaration may fix this.%
+ \MessageBreak
+ Try typing \space <return> \space to proceed.}}%
+ \@firstofone}%
+ {\makeatletter
+% \end{macrocode}
+% The next line seems to be necessary for 2.09 compatibility (the
+% way the code is written there) This seems questionable and should be
+% look at as in 2e it is definitely unnecessary at this point!
+% \begin{macrocode}
+ \@reset@ptions
+% \end{macrocode}
+% First we take the \meta{name} and \meta{ext} given in the argument
+% and check if the file exists, and issue an error otherwise asking
+% for a correction with \cs{@missingfileerror}.
+% \begin{macrocode}
+ \IfFileExists{\@currname.\@currext}{}%
+ {\@missing@onefilewithoptions{#2}}%
+% \end{macrocode}
+% If \cs{@currname} is empty (the user replied to the ``Enter file
+% name'' prompt with \meta{RETURN}), so stop here
+% (do \cs{@popfilename} to pop the item just added above).
+%
+% This \cs{@gobble} omits the date check at the end.
+% \begin{macrocode}
+ \ifx\@currname\@empty
+ \expandafter\@gobble
+ \else
+% \end{macrocode}
+% If the file exists, check if it was load-prevented, and otherwise
+% do the bookkeeping with \cs{@filehook@file@push}
+% then call \cs{set@curr@file} to set \cs{@curr@file} (and do any
+% required substitution), then actually load the class/package with
+% \cs{load@onefile@withoptions}.
+% \begin{macrocode}
+ \@disable@packageload@do{\@currname.\@currext}%
+ {\@expl@@@filehook@file@push@@
+ \set@curr@file{\@currname.\@currext}%
+ \@filehook@set@CurrentFile
+ \load@onefile@withoptions{#2}%
+% \end{macrocode}
+% Now just clean up and exit.
+% \begin{macrocode}
+ \@expl@@@filehook@file@pop@@}%
+ \expandafter\@firstofone
+ \fi}%
+% \end{macrocode}
+% Except in the case where \cs{@currname} is empty, the date is
+% checked against the date marked in the package file:
+% \begin{macrocode}
+ {\@ifl@ter\@currext{\@currname}{#3}{}%
+ {\@latex@warning@no@line
+ {You have requested,\on@line,
+ version\MessageBreak
+ `#3' of \@cls@pkg\space \@currname,\MessageBreak
+ but only version\MessageBreak
+ `\csname ver@\@currname.\@currext\endcsname'\MessageBreak
+ is available}}%
+% \end{macrocode}
+% \changes{v0.2c}{1993/11/17}
+% {Added trap for two \cs{LoadClass} commands.}
+% \begin{macrocode}
+ \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi}%
+ \@popfilename
+ \@reset@ptions}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@onlypreamble\@onefilewithoptions
+% \end{macrocode}
+%
+% The kernel no longer uses \cs{@unprocessedoptions}
+% \begin{macrocode}
+\let\@unprocessedoptions\@undefined
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\@missing@onefilewithoptions}
+% Now the action taken when a file is not found.
+% \begin{macrocode}
+\def\@missing@onefilewithoptions#1{%
+ \@missingfileerror\@currname\@currext
+ \xdef\@currname{\@missingfile@area\@missingfile@base}%
+ \global\let\@currext\@missingfile@ext}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\load@onefile@withoptions}
+% Now the code that actually does the file loading:
+% \begin{macrocode}
+\def\load@onefile@withoptions#1{%
\let\CurrentOption\@empty
\@reset@ptions
- \makeatletter
% \end{macrocode}
% Grab everything in a macro, so the parameter stack is popped before
% any processing begins.
% \changes{v0.2s}{1994/01/17}
% {Modify to reduce parameter stack usage}
-% \changes{v1.1b}{1998/05/07}
-% {Modify help message for latex/2805}
% \begin{macrocode}
\def\reserved@a{%
- \@ifl@aded\@currext{#1}%
- {\@if@ptions\@currext{#1}{#2}{}%
- {\@latex@error
- {Option clash for \@cls@pkg\space #1}%
- {The package #1 has already been loaded
- with options:\MessageBreak
- \space\space[\@ptionlist{#1.\@currext}]\MessageBreak
- There has now been an attempt to load it
- with options\MessageBreak
- \space\space[#2]\MessageBreak
- Adding the global options:\MessageBreak
- \space\space
- \@ptionlist{#1.\@currext},#2\MessageBreak
- to your \noexpand\documentclass declaration may fix this.%
- \MessageBreak
- Try typing \space <return> \space to proceed.}}}%
- {\@pass@ptions\@currext{#2}{#1}%
-% \end{macrocode}
-% \changes{v0.3c}{1994/03/12}
-% {Do not use \cs{@pr@videpackage} to avoid typeout}
-% \begin{macrocode}
- \global\expandafter
- \let\csname ver@\@currname.\@currext\endcsname\@empty
+ \@pass@ptions\@currext{#1}{\@currname}%
+ \global\expandafter
+ \let\csname ver@\@currname.\@currext\endcsname\@empty
% \end{macrocode}
% We initialize \cs{...-h@@k} here and only if we load the file so that it
% remains undefined otherwise.
% \begin{macrocode}
- \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
- \InputIfFileExists
- {\@currname.\@currext}%
- {}%
- {\@missingfileerror\@currname\@currext}%
+ \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
+% \end{macrocode}
+% When the current extension is \cs{@pkgextension} we are loading a
+% package otherwise, if it is \cs{@clsextension}, a class, so
+% depending on that we execute different hooks. If the extension is
+% neither, then it is another type of file without special hooks.
+% \begin{macrocode}
+%-----------------------------------------
+ \ifx\@currext\@pkgextension
+ \UseHook{package/before}%
+ \UseHook{package/before/\@currname}%
+ \else
+ \ifx\@currext\@clsextension
+ \UseHook{class/before}%
+ \UseHook{class/before/\@currname}%
+ \fi
+ \fi
+% \end{macrocode}
+% Now actually load the file (at this point we are certain it exists,
+% but use \cs{InputIfFileExists} so that file hooks are executed):
+% \begin{macrocode}
+ \InputIfFileExists{\@currname.\@currext}{}{}%
+%-----------------------------------------
% \end{macrocode}
% In older versions of the code |\@unprocessedoptions| would
% generate an error for each specified
@@ -1717,44 +1862,39 @@
% \begin{macrocode}
\expandafter\let
\csname unprocessedoptions-\@currname.\@currext\endcsname
- \@undefined}%
-% \end{macrocode}
-%
-% \begin{macrocode}
- \@ifl@ter\@currext{#1}{#3}{}%
- {\@latex@warning@no@line
- {You have requested,\on@line,
- version\MessageBreak
- `#3' of \@cls@pkg\space #1,\MessageBreak
- but only version\MessageBreak
- `\csname ver@#1.\@currext\endcsname'\MessageBreak
- is available}}%
+ \@undefined
% \end{macrocode}
-% \changes{v0.2c}{1993/11/17}
-% {Added trap for two \cs{LoadClass} commands.}
+% And same procedure, James, when we are finished loading, except
+% that the hook order is now reversed.
% \begin{macrocode}
- \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi
- \@popfilename
- \@reset@ptions}%
+%-----------------------------------------
+ \ifx\@currext\@pkgextension
+ \UseHook{package/after/\@currname}%
+ \UseHook{package/after}%
+ \else
+ \ifx\@currext\@clsextension
+ \UseHook{class/after/\@currname}%
+ \UseHook{class/after}%
+ \fi
+ \fi}%
+%-----------------------------------------
\reserved@a}
-\@onlypreamble\@onefilewithoptions
% \end{macrocode}
-%
-% The kernel no longer uses \cs{@unprocessedoptions}
+% \end{macro}
+%
% \begin{macrocode}
-\let\@unprocessedoptions\@undefined
+%</2ekernel|latexrelease>
% \end{macrocode}
%
% \begin{macrocode}
-%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
-%<latexrelease> {\@onefilewithoptions}{Unused options issue}%
+%<latexrelease> {\@onefilewithoptions}{Hooks and unused options issue}%
%<latexrelease>
% \end{macrocode}
% Because of the way \cs{@onfilewithoptions} is changed for
% rollback handling below we have to define
-% \cs{load@onefilewithoptions} when rollowing back!
+% \cs{load@onefilewithoptions} when rolling back!
% \begin{macrocode}
%<latexrelease>\def\load@onefilewithoptions#1[#2][#3]#4{%
%<latexrelease> \@pushfilename
@@ -1805,6 +1945,10 @@
%<latexrelease> \@popfilename
%<latexrelease> \@reset@ptions}%
%<latexrelease> \reserved@a}
+%<latexrelease>
+%<latexrelease>\let \load@onefile@withoptions \@undefined
+%<latexrelease>\let \@missing@onefilewithoptions \@undefined
+%<latexrelease>
%<latexrelease>\EndIncludeInRelease
%<*2ekernel>
% \end{macrocode}
@@ -1846,7 +1990,7 @@
%
% \subsection{Hooks}
%
-% Allow code do be saved to be executed at specific later times.
+% Allow code to be saved to be executed at specific later times.
%
% Save things in macros, I considered using toks registers, (and
% |\addto@hook| from the NFSS code, that would require stacking the
@@ -1866,25 +2010,6 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\g@addto@macro}
-% Globally add to the end of a macro.
-% \changes{v0.2a}{1993/11/14}{Made global}
-% \changes{v0.2w}{1994/01/31}
-% {Use toks register to avoid `hash' problems}
-% \changes{v1.0o}{1995/05/17}
-% {Make long for latex/1522}
-% \changes{v1.0w}{1996/12/17}
-% {Use \cs{begingroup} to save making a mathord}
-% \changes{v1.0x}{1997/02/05}
-% {missing percent /2402}
-% \begin{macrocode}
-\long\def\g@addto@macro#1#2{%
- \begingroup
- \toks@\expandafter{#1#2}%
- \xdef#1{\the\toks@}%
- \endgroup}
-% \end{macrocode}
-% \end{macro}
%
% \begin{macro}{\AtEndOfPackage}
% \begin{macro}{\AtEndOfClass}
@@ -1903,8 +2028,29 @@
% \end{macrocode}
%
% \begin{macrocode}
-\DeclareRobustCommand\AtBeginDocument{\g@addto@macro\@begindocumenthook}
-\DeclareRobustCommand\AtEndDocument{\g@addto@macro\@enddocumenthook}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\AtBeginDocument}{Use hook system}%
+\DeclareRobustCommand\AtBeginDocument{\AddToHook{begindocument}}
+\DeclareRobustCommand\AtEndDocument {\AddToHook{enddocument}}
+%\DeclareRobustCommand\AtEndDocument {\AddToHook{env/document/end}} % alternative impl
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\AtBeginDocument}{Use hook system}%
+%<latexrelease>
+%<latexrelease>\DeclareRobustCommand\AtBeginDocument{\g@addto@macro\@begindocumenthook}
+%<latexrelease>\DeclareRobustCommand\AtEndDocument{\g@addto@macro\@enddocumenthook}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+%
+% \begin{macrocode}
\@onlypreamble\AtBeginDocument
% \end{macrocode}
% \end{macro}
@@ -2036,8 +2182,8 @@
% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2019/10/01}%
-%<latexrelease> {\filec@ntents}{Spaces in file names + optional arg}%
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\filec@ntents}{Define \q@curr@file directly (gh/220)}%
%
% \end{macrocode}
% We use |@tempswa| to mean no preamble writing and reuse |@filesw|
@@ -2080,7 +2226,7 @@
\let\filec@ntents@noheader\@tempswafalse
% \end{macrocode}
% Option \texttt{nosearch} only checks the current directory not
-% the how \TeX{} tree for the existence of the file to write.
+% the whole \TeX{} tree for the existence of the file to write.
% \begin{macrocode}
\def\filec@ntents@nosearch{%
\let\filec@ntents@checkdir\@currdir
@@ -2106,10 +2252,12 @@
\catcode`\^^I\active%
% \end{macrocode}
%
+% \changes{v1.3m}{2020-08-08}{define \cs{q@curr@file} directly as the
+% quotes have already been removed (gh/220)}
% \begin{macrocode}
\gdef\filec@ntents#1{%
\set@curr@file{\filec@ntents@checkdir#1}%
- \edef\q@curr@file{\expandafter\quote@name\expandafter{\@curr@file}}%
+ \edef\q@curr@file{"\@curr@file"}%
% \end{macrocode}
%
% Lua\TeX\ has more writes (and 18 is safe here).
@@ -2270,6 +2418,136 @@
% \begin{macrocode}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2019/10/01}%
+%<latexrelease> {\filec@ntents}{Spaces in file names + optional arg}%
+%<latexrelease>\def\filecontents{\@tempswatrue\@fileswtrue
+%<latexrelease> \@ifnextchar[\filec@ntents@opt\filec@ntents
+%<latexrelease>}
+%<latexrelease>\@namedef{filecontents*}{\@tempswafalse\@fileswtrue
+%<latexrelease> \@ifnextchar[\filec@ntents@opt\filec@ntents
+%<latexrelease>}
+%<latexrelease>\def\filec@ntents@opt[#1]{%
+%<latexrelease> \edef\@fortmp{\zap@space#1 \@empty}%
+%<latexrelease> \@for\reserved@a:=\@fortmp\do{%
+%<latexrelease> \ifcsname filec@ntents@\reserved@a\endcsname
+%<latexrelease> \csname filec@ntents@\reserved@a\endcsname
+%<latexrelease> \else
+%<latexrelease> \@latex@error{Unknown filecontents option \reserved@a}%
+%<latexrelease> {Valid options are force (or overwrite), nosearch, noheader}%
+%<latexrelease> \fi}%
+%<latexrelease> \filec@ntents
+%<latexrelease>}
+%<latexrelease>\let\filec@ntents@force\@fileswfalse
+%<latexrelease>\let\filec@ntents@overwrite\@fileswfalse % alternative name
+%<latexrelease>\let\filec@ntents@noheader\@tempswafalse
+%<latexrelease>\def\filec@ntents@nosearch{%
+%<latexrelease> \let\filec@ntents@checkdir\@currdir
+%<latexrelease> \def\filec@ntents@where{in current directory}}
+%<latexrelease>\let\filec@ntents@checkdir\@empty
+%<latexrelease>\def\filec@ntents@where{exists on the system}
+%<latexrelease>\begingroup%
+%<latexrelease>\@tempcnta=1
+%<latexrelease>\loop
+%<latexrelease> \catcode\@tempcnta=12 %
+%<latexrelease> \advance\@tempcnta\@ne %
+%<latexrelease>\ifnum\@tempcnta<32 %
+%<latexrelease>\repeat %
+%<latexrelease>\catcode`\*=11 %
+%<latexrelease>\catcode`\^^M\active%
+%<latexrelease>\catcode`\^^L\active\let^^L\relax%
+%<latexrelease>\catcode`\^^I\active%
+%<latexrelease>\gdef\filec@ntents#1{%
+%<latexrelease> \set@curr@file{\filec@ntents@checkdir#1}%
+%<latexrelease> \edef\q@curr@file{\expandafter\quote@name\expandafter{\@curr@file}}%
+%<latexrelease> \chardef\reserved@c\ifx\directlua\@undefined 15 \else 127 \fi%
+%<latexrelease> \openin\@inputcheck\q@curr@file \space %
+%<latexrelease> \ifeof\@inputcheck%
+%<latexrelease> \@latex@warning@no@line%
+%<latexrelease> {Writing file `\@currdir\@curr@file'}%
+%<latexrelease> \ch@ck7\reserved@c\write\relax%
+%<latexrelease> \immediate\openout\reserved@c\q@curr@file\relax%
+%<latexrelease> \else%
+%<latexrelease> \if@filesw%
+%<latexrelease> \@latex@warning@no@line%
+%<latexrelease> {File `\@curr@file' already \filec@ntents@where.\MessageBreak%
+%<latexrelease> Not generating it from this source}%
+%<latexrelease> \let\write\@gobbletwo%
+%<latexrelease> \let\closeout\@gobble%
+%<latexrelease> \else%
+%<latexrelease> \edef\reserved@a{#1}%
+%<latexrelease> \edef\reserved@a{\detokenize\expandafter{\reserved@a}}%
+%<latexrelease> \edef\reserved@b{\detokenize\expandafter{\jobname}}%
+%<latexrelease> \ifx\reserved@a\reserved@b%
+%<latexrelease> \@fileswtrue%
+%<latexrelease> \else%
+%<latexrelease> \edef\reserved@b{\reserved@b\detokenize{.tex}}%
+%<latexrelease> \ifx\reserved@a\reserved@b
+%<latexrelease> \@fileswtrue%
+%<latexrelease> \fi%
+%<latexrelease> \fi%
+%<latexrelease> \ch@ck7\reserved@c\write\relax%
+%<latexrelease> \if@filesw% % Foul ... trying to overwrite \jobname!
+%<latexrelease> \@latex@error{Trying to overwrite `\jobname.tex'}{You can't %
+%<latexrelease> write to the file you are reading from!\MessageBreak%
+%<latexrelease> Data is written to screen instead.}%
+%<latexrelease> \else%
+%<latexrelease> \@latex@warning@no@line%
+%<latexrelease> {Writing or overwriting file `\@currdir\@curr@file'}%
+%<latexrelease> \immediate\openout\reserved@c\q@curr@file\relax%
+%<latexrelease> \fi%
+%<latexrelease> \fi%
+%<latexrelease> \fi%
+%<latexrelease> \closein\@inputcheck%
+%<latexrelease> \if@tempswa%
+%<latexrelease> \immediate\write\reserved@c{%
+%<latexrelease> \@percentchar\@percentchar\space%
+%<latexrelease> \expandafter\@gobble\string\LaTeX2e file `\@curr@file'^^J%
+%<latexrelease> \@percentchar\@percentchar\space generated by the %
+%<latexrelease> `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
+%<latexrelease> \@percentchar\@percentchar\space from source `\jobname' on %
+%<latexrelease> \number\year/\two@digits\month/\two@digits\day.^^J%
+%<latexrelease> \@percentchar\@percentchar}%
+%<latexrelease> \fi%
+%<latexrelease> \let\do\@makeother\dospecials%
+%<latexrelease> \count@ 128\relax%
+%<latexrelease> \loop%
+%<latexrelease> \catcode\count@ 11\relax%
+%<latexrelease> \advance\count@ \@ne%
+%<latexrelease> \ifnum\count@<\@cclvi%
+%<latexrelease> \repeat%
+%<latexrelease> \edef\E{\@backslashchar end\string{\@currenvir\string}}%
+%<latexrelease> \edef\reserved@b{%
+%<latexrelease> \def\noexpand\reserved@b%
+%<latexrelease> ####1\E####2\E####3\relax}%
+%<latexrelease> \reserved@b{%
+%<latexrelease> \ifx\relax##3\relax%
+%<latexrelease> \immediate\write\reserved@c{##1}%
+%<latexrelease> \else%
+%<latexrelease> \edef^^M{\noexpand\end{\@currenvir}}%
+%<latexrelease> \ifx\relax##1\relax%
+%<latexrelease> \else%
+%<latexrelease> \@latex@warning{Writing text `##1' before %
+%<latexrelease> \string\end{\@currenvir}\MessageBreak as last line of \@curr@file}%
+%<latexrelease> \immediate\write\reserved@c{##1}%
+%<latexrelease> \fi%
+%<latexrelease> \ifx\relax##2\relax%
+%<latexrelease> \else%
+%<latexrelease> \@latex@warning{%
+%<latexrelease> Ignoring text `##2' after \string\end{\@currenvir}}%
+%<latexrelease> \fi%
+%<latexrelease> \fi%
+%<latexrelease> ^^M}%
+%<latexrelease> \catcode`\^^L\active%
+%<latexrelease> \let\L\@undefined%
+%<latexrelease> \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}%
+%<latexrelease> \catcode`\^^I\active%
+%<latexrelease> \let\I\@undefined%
+%<latexrelease> \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
+%<latexrelease> \catcode`\^^M\active%
+%<latexrelease> \edef^^M##1^^M{%
+%<latexrelease> \noexpand\reserved@b##1\E\E\relax}}%
+%<latexrelease>\endgroup%
+%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
%<latexrelease> {\filec@ntents}{Spaces in file names + optional arg}%
%<latexrelease>
@@ -3015,7 +3293,7 @@
%<*afterpreamble>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{pkgindoc}
- [1994/10/20 v1.1 Package Interface in Document (DPC)]
+ [2020-08-08 v1.3m Package Interface in Document (DPC)]
\def\reserved@a#1\do\@classoptionslist#2\do\filec@ntents#3\relax{%
\gdef\@preamblecmds{#1#3}}
\expandafter\reserved@a\@preamblecmds\relax