summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/source/scrlfile.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/koma-script/source/scrlfile.dtx')
-rw-r--r--macros/latex/contrib/koma-script/source/scrlfile.dtx1326
1 files changed, 108 insertions, 1218 deletions
diff --git a/macros/latex/contrib/koma-script/source/scrlfile.dtx b/macros/latex/contrib/koma-script/source/scrlfile.dtx
index 8746d73643..b9782c81e5 100644
--- a/macros/latex/contrib/koma-script/source/scrlfile.dtx
+++ b/macros/latex/contrib/koma-script/source/scrlfile.dtx
@@ -1,4 +1,3 @@
-% \CheckSum{849}
% \iffalse^^A meta-comment
% ======================================================================
% scrlfile.dtx
@@ -40,31 +39,13 @@
%
% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
% ======================================================================
-% \fi^^A meta-comment
-%
-% \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 \~}
%
-% \iffalse
-%%% From File: $Id: scrlfile.dtx 3447 2020-01-06 16:40:47Z kohm $
+%%% From File: $Id: scrlfile.dtx 3537 2020-09-14 07:30:10Z kohm $
%<*dtx>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\begingroup
\def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}}
- \filedate$Date: 2020-01-06 17:40:47 +0100 (Mon, 06 Jan 2020) $
+ \filedate$Date: 2020-09-14 09:30:10 +0200 (Mon, 14 Sep 2020) $
\def\filerevision$#1: #2 ${\gdef\filerevision{r#2}}
\filerevision$Revision: 2631 $
\edef\reserved@a{%
@@ -75,12 +56,10 @@
}%
\reserved@a
%</dtx>
-%<*dtx|scrlfile>
-%<scrlfile>\ProvidesPackage{scrlfile}[%
+%<package>\ProvidesPackage{scrlfile}[%
%!KOMAScriptVersion
-%<scrlfile> package
- (loading files)]
-%</dtx|scrlfile>
+%<package> package
+ (file load hooks)]
%<*dtx>
\ifx\documentclass\undefined
\input scrdocstrip.tex
@@ -89,1262 +68,173 @@
\KOMAdefVariable{COPYRIGHTFROM}{2002}
\generate{\usepreamble\defaultpreamble
\file{scrlfile.sty}{%
- \from{scrlfile.dtx}{scrlfile}%
- \from{scrlogo.dtx}{logo}%
+ \from{scrlfile.dtx}{package}%
}%
}
+ \batchinput{scrlfile-hook.dtx}
+ \batchinput{scrlfile-patcholdlatex.dtx}
\@@input scrstrop.inc
\else
\let\endbatchfile\relax
\fi
\endbatchfile
\documentclass[parskip=half-]{scrdoc}
-\usepackage[german,english]{babel}
+\usepackage[english]{babel}
\CodelineIndex
\RecordChanges
\GetFileInfo{scrlfile.dtx}
\title{\KOMAScript{} \partname\ \texttt{\filename}%
- \thanks{This file is version \fileversion\ of file \texttt{\filename}.}}
+ \thanks{This file is revision \fileversion\ of file \texttt{\filename}.}}
\date{\filedate}
-\author{Markus Kohm\thanks{mailto:komascript@gmx.info}~\thanks{Parts of
- description sections of the documentation where written by Jens-Uwe
- Morawski.}}
+\author{Markus Kohm\thanks{mailto:komascript@gmx.info}}
\begin{document}
\maketitle
\begin{abstract}
- This package provides hooks before and after loading files, packages or
- classes. It also provides a hook after the last \cs{clearpage} of the
- document. It allowes to replace files, packages and classes by other
- files, packages and classes. It is inteded to be used by package and class
- authors but may also be used by \LaTeX{} users.
+ This package is the compatibility layer over \texttt{scrlfile-hook} and
+ \texttt{scrlfile-patcholdlatex}. It provides package and class hook
+ handling independent from the used \LaTeX{} release.
\end{abstract}
+ \tableofcontents
+
\DocInput{\filename}
\end{document}
%</dtx>
-% \fi
-%
-% \selectlanguage{english}
-%
-% \changes{v2.95}{2002/06/11}{First version split from hugh scrclass.dtx}%^^A
-% \changes{v3.24}{2017/05/06}{standalone manual removed}%^^A
-%
-% \StopEventually{\PrintIndex\PrintChanges}
-%
-% \section{Implementation of \textsf{scrlfile}}
+% \fi^^A meta-comment
%
-% \iffalse
-%<*scrlfile>
-% \fi
+% \changes{v2.95}{2002/06/11}{First version split from hugh scrclass.dtx}
+% \changes{v3.24}{2017/05/06}{standalone manual removed}
+% \changes{v3.32}{2020/09/11}{new implementation based on
+% \texttt{scrlfile-hook} and \texttt{scrlfile-patcholdlatex}}
%
-% \subsection{Preamble}
%
-% \changes{v3.24}{2017/05/06}{Preamble sub-section removed}%^^A
-% Since \KOMAScript~3.24 we do not longer output version information into the
-% \texttt{log}-file.
+% \section{User Manual}
%
-% \subsection{Options}
+% For user manual see the \KOMAScript{} manual. Here you can find interim
+% documentation only (before it is added to the \KOMAScript{} manual).
%
-% Currently there are no options.
-% \begin{macrocode}
-\ExecuteOptions{}
-\ProcessOptions\relax
-% \end{macrocode}
+% \DescribeOption{withdeprecated}
+% Package option \texttt{withdeprecated} enables the definition of deprecated
+% commands \cs{AfterClass+}, \cs{AfterPackage+}, \cs{AfterClass!} and
+% \cs{AfterPackage!}. All of them will be emulated by \cs{AfterAtEndOClass*}
+% and \cs{AfterAtEndOfPackage*} so they are not completely compatible with the
+% original deprecated commands.
%
+% Users of classes or package, that use such deprecated commands can load
+% \texttt{scrlfile} already before the class using:
+% \begin{verbatim}
+% \RequirePackage[withdeprecated]{scrlfile}
+% \end{verbatim}
+% or adding option \texttt{withdeprecated} to the global options of
+% \cs{documentclass}. Note, this is not a key-value option. It cannot be
+% changed after loading \texttt{scrlfile}.
%
-% \subsection{The macros}
%
-% \begin{macro}{\InputIfFileExists}
-% \changes{v2.96}{2006/07/19}{replacement code added}%^^A
-% \LaTeX{} uses this macro for loading files with
-% \cs{input}\marg{filename}, \cs{include}, \cs{LoadClass},
-% \cs{LoadClassWithOptions}, \cs{documentclass}, \cs{documentstyle},
-% \cs{RequirePackage}, \cs{usepackage}. Only
-% \cs{input}~\meta{filename} loads \meta{filename} without using
-% \cs{InputIfFileExists}.
+% \StopEventually{\PrintIndex\PrintChanges}
%
-% Because of this, it's very easy to add stuff before and after
-% loading a file. We simply change this macro and add to
-% macros\,---\,one before loading the file and one after loading the
-% file. But before we redefine the macro, we test, if the macro was
-% defined like we expected. \LaTeX{} will warn, if not.
-% \changes{v3.27}{2019/10/06}{\LaTeX{} 2019-10-01 changed the definition}%^^A
+% \section{Implementation of \textsf{scrlfile}}
%
-% \changes{v3.28}{2019/11/21}{support for \textsf{memoir}}%^^A
-% With \textsf{memoir} their is a special case. It also redefines
-% \cs{InputIfFileExists}. As shown in the source of the class it does so
-% because \textsf{scrlfile} does it. However it does it not compatible with
-% \textsf{scrlfile} and it does not emulate \textsf{scrlfile} as it do for
-% other packages. So if you try to use \textsf{scrlfile} with memoir,
-% \textsf{scrbase} has to take care to \textsf{memoir}. And in oposit to
-% \textsf{scrlfile} \textsf{memoir} does not always fix the argument order bug
-% of \LaTeX{} but do so only for the implementation of \LaTeX{} 2019-10-01.
-% So in case of \textsf{memoir} we just patch every version of it without
-% testing.
-% \begin{macrocode}
-\@ifclassloaded{memoir}{%
- \PackageInfo{scrlfile}{class `memoir' detected.\MessageBreak
- Using a compatible redefinition of \string\InputIfFileExists,\MessageBreak
- but always robust and with the fix of the\MessageBreak
- argument order bug even for old versions of the\MessageBreak
- LaTeX kernel%
- }%
-}{%
- \long\def\reserved@a#1#2{%
- \IfFileExists{#1}%
- {#2\@addtofilelist{#1}\@@input \@filef@und}}%
- \ifx\reserved@a\InputIfFileExists\else
- \expandafter\CheckCommand\expandafter*\expandafter\InputIfFileExists
- \expandafter{%
- \expandafter\protect\csname InputIfFileExists \endcsname
- }%
- \expandafter\CheckCommand \csname InputIfFileExists \endcsname[2]{%
- \IfFileExists {#1}{%
- \expandafter \@swaptwoargs \expandafter {\@filef@und }%
- {#2\@addtofilelist {#1}\@@input }%
- }%
- }%
- \fi
-}
-% \end{macrocode}
-% Now we can redefine the macro like described above:
+% We either need to load one of these packages. We could do the decision by
+% testing the \LaTeX{} version. But the existence of macro \cs{AddToHook} is
+% easier and better.
% \begin{macrocode}
-\expandafter\renewcommand\expandafter*\expandafter\InputIfFileExists
-\expandafter{\expandafter
- \protect\csname InputIfFileExists \endcsname}%
-\expandafter\long\expandafter\def\csname InputIfFileExists \endcsname#1#2{%
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname #1-@alias\endcsname\relax
- \expandafter\@secondoftwo
- \else
- \scr@replacefile@msg{\csname #1-@alias\endcsname}{#1}%
- \expandafter\@firstoftwo
- \fi
- {%
- \expandafter\InputIfFileExists\expandafter{\csname
- #1-@alias\endcsname}{#2}%
- }%
- {\IfFileExists{#1}{%
- \expandafter\scr@input@withhook\expandafter{\@filef@und}{#1}{#2}%
- }}%
-}
-% \end{macrocode}
-% \begin{macro}{\scr@input@withhook}
-% \changes{v3.27}{2019/03/28}{new (internal)}%^^A
-% \changes{v3.28}{2019/11/21}{support for \textsf{memoir}}%^^A
-% We need a new internal, because of expanding \cs{@file@und} before inputting
-% the file.
-% \begin{macrocode}
-\@ifclassloaded{memoir}{%
- \newcommand{\scr@input@withhook}[3]{%
- \scr@load@hook{before}{#2}%
- #3\@addtofilelist{#2}%
- \@ifundefined{m@matbeginf}{}{\m@matbeginf{#2}}%
- \@@input #1%
- \@ifundefined{m@matendf}{}{\m@matendf{#2}}%
- \@ifundefined{killm@matf}{}{\killm@matf{#2}}%
- \scr@load@hook{after}{#2}%
- }%
+\@ifundefined{AddToHook}{%
+ \RequirePackage{scrlfile-patcholdlatex}%
+ \RequirePackage{xparse}%
}{%
- \newcommand{\scr@input@withhook}[3]{%
- \scr@load@hook{before}{#2}%
- #3\@addtofilelist{#2}%
- \@@input #1%
- \scr@load@hook{after}{#2}%
- }%
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@loadwithoptions}
-% \changes{v2.96}{2006/07/19}{new redefinition}
-% \begin{macro}{\scr@loadwithoptions}
-% \changes{v2.96}{2006/07/19}{new helper macro}
-% \begin{macro}{\scr@@loadwithoptions}
-% \changes{v2.97a}{2007/03/07}{new helper macro}
-% \LaTeX{} uses this macro for loading classes and packages using
-% \cs{LoadClassWithOptions} or \cs{RequirePackageWithOptions}. We simply say
-% now: if the class or package should be replaced by another, try it again
-% with the replacement name. The stack is used. This will result in an
-% error if the replacements are nested too deep. This should be, because it
-% will also result in an error using ring replacements.
-% \begin{macrocode}
-\newcommand*{\scr@@loadwithoptions}{}
-\newcommand*{\scr@loadwithoptions}{}
-\let\scr@loadwithoptions\@loadwithoptions
-\renewcommand*{\@loadwithoptions}[3]{%
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname #3.#1-@aliasname\endcsname\relax
- \def\scr@@loadwithoptions{\scr@loadwithoptions{#1}{#2}{#3}}%
- \else
- \scr@replacefile@msg{\csname #3.#1-@aliasname\endcsname.#1}{#3.#1}%
- \def\scr@@loadwithoptions{%
- \@loadwithoptions{#1}{#2}{\csname #3.#1-@aliasname\endcsname}%
- }%
- \fi
- \scr@@loadwithoptions
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@onefilewithoption}
-% \changes{v2.96}{2006/07/19}{new redefinition}
-% \begin{macro}{\scr@onefilewithoption}
-% \changes{v2.96}{2006/07/19}{new helper macro}
-% \begin{macro}{\scr@@onefilewithoption}
-% \changes{v2.98}{2007/12/18}{new helper macro}
-% \LaTeX{} uses this macro for loading classes and packages using
-% \cs{LoadClass}, \cs{documentclass}, \cs{RequirePackage}, and
-% \cs{usepackage}. We simply say now: if the class or package should be
-% replaced by another, try it again with the replacement name. The stack is
-% used. This will result in an error if the replacements are nested too
-% deep. This should be, because it will also result in an error using ring
-% replacements.
-% \begin{macrocode}
-\newcommand*{\scr@onefilewithoptions}{}
-\let\scr@onefilewithoptions\@onefilewithoptions
-\def\@onefilewithoptions#1[#2][#3]#4{%
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname #1.#4-@aliasname\endcsname\relax
-% \end{macrocode}
-% Do this ridiculous definition and call outside of \cs{ifx}\dots\cs{fi}
-% because of some errornous packages like some versions of
-% \textsf{breakurl}. This does not avoid an error, but the message about
-% unclosed \cs{if} will be outside of \textsf{scrlfile}.
-% \begin{macrocode}
- \def\scr@@onefilewithoptions{\scr@onefilewithoptions{#1}}%
- \else
- \scr@replacefile@msg{\csname #1.#4-@aliasname\endcsname.#4}{#1.#4}%
- \edef\scr@@onefilewithoptions{%
- \noexpand\@onefilewithoptions{\csname #1.#4-@aliasname\endcsname}}%
- \fi
- \scr@@onefilewithoptions[{#2}][{#3}]{#4}%
- \scr@load@hook{lateafter}{#1.#4}%
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ReplaceInput}
-% \changes{v2.96}{2006/07/19}{new command}
-% \changes{v3.12}{2013/11/15}{implemented}
-% Defining the replacement by definition of \cs{\#1-@alias}.
-% \begin{macrocode}
-\newcommand*{\ReplaceInput}[2]{%
- \expandafter\edef\csname #1-@alias\endcsname{#2}%
-}
-% \end{macrocode}
-% \begin{macro}{\ReplaceFile}
-% \changes{v2.96}{2006/07/19}{new command}
-% \changes{v3.12}{2013/11/15}{throw error}
-% Sorry, but I've implemented the wrong command some time ago.
-% \begin{macrocode}
-\newcommand*{\ReplaceFile}{%
- \PackageError{scrlfile}{%
- usage of not documented command `\string\ReplaceFile'%
- }{%
- Command `\string\ReplaceFile' has been implemented accidentally in
- KOMA-Script 2.96\MessageBreak
- and replaced by `\string\ReplaceInput' in KOMA-Script 3.12.\MessageBreak
- You should replace `\string\ReplaceFile' by `\string\ReplaceInput' to
- avoid this error\MessageBreak
- message%
- }%
- \ReplaceInput
+ \RequirePackage{scrlfile-hook}%
}
% \end{macrocode}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\UnReplaceInput}
-% \changes{v3.12}{2013/11/15}{new command}
-% Do not longer replace a file.
+% \begin{option}{withdeprecated}
+% \changes{v3.32}{2020/09/11}{new option}
+% Depending on this option we implement addition deprecated commands.
% \begin{macrocode}
-\newcommand*{\UnReplaceInput}[1]{%
- \ifcsname #1-@alias\endcsname
- \expandafter\let\csname #1-@alias\endcsname\relax
- \fi
-}
+\DeclareOption{withdeprecated}{%
% \end{macrocode}
-% \end{macro}
%
-% \begin{macro}{\ReplacePackage}
-% \changes{v2.96}{2006/07/19}{new command}
-% \begin{macro}{\ReplaceClass}
-% \changes{v2.96}{2006/07/19}{new command}
-% \begin{macro}{\@replacefilewithext}
-% \changes{v2.96}{2006/07/19}{new helper command}%^^A
-% Note that replacing a package or class will not replace the input of the
-% file of the package or class but only the input of package or class.
+% \begin{macro}{\AfterClass+}
+% \begin{macro}{\AfterClass!}
+% \cs{scrlfile@AfterClass} is used to store the original \cs{AfterClass},
+% before redefining \cs{AfterClass} to handle the plus and the exclamation
+% mark variant.
% \begin{macrocode}
-\newcommand*{\@replacefilewithext}[3]{%
- \expandafter\edef\csname #1.#3-@aliasname\endcsname{#2}%
- }
-\newcommand*{\ReplacePackage}[2]{%
- \@replacefilewithext{#1}{#2}\@pkgextension
-}
-\newcommand*{\ReplaceClass}[2]{%
- \@replacefilewithext{#1}{#2}\@clsextension
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\UnReplacePackage}
-% \changes{v3.12}{2013/11/15}{new command}
-% \begin{macro}{\UnReplaceClass}
-% \changes{v3.12}{2013/11/15}{new command}
-% \begin{macro}{\@unreplacefilewithext}
-% \changes{v3.12}{2013/11/15}{new helper command}%^^A
-% Do not nolonger replace a class or package.
-% \begin{macrocode}
-\newcommand*{\@unreplacefilewithext}[2]{%
- \ifcsname #1.#2-@aliasname\endcsname
- \expandafter\let\csname #1.#2-@aliasname\endcsname\relax
- \fi
-}
-\newcommand*{\UnReplacePackage}[1]{%
- \@unreplacefilewithext{#1}\@pkgextension
-}
-\newcommand*{\UnReplaceClass}[1]{%
- \@unreplacefilewithext{#1}\@clsextension
-}
+ \RenewDocumentCommand\AfterClass{}{%
+ \kernel@ifnextchar +%
+ {\scrlfile@emulatedeprecated{Class}}%
+ {%
+ \kernel@ifnextchar !%
+ {\scrlfile@emulatedeprecated{Class}}%
+ \scrlfile@AfterClass
+ }%
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\scr@replacefile@msg}
-% \changes{v2.96}{2006/07/19}{new helper command}
-% \changes{v2.98}{2007/12/18}{spellfix}
-% Last but not least \textsf{scrlfile} will write a message to the log file at
-% every replacement.
-% \begin{macrocode}
-\newcommand*{\scr@replacefile@msg}[2]{%
- \PackageInfo{scrlfile}{inputing `#1' instead of `#2'}%
-}
-% \end{macrocode}
-% \end{macro}
%
-% \begin{macro}{\scr@load@hook}
-% \changes{v3.27a}{2019/10/16}{workaround for strange handling of
-% \cs{AtEndOfPackage} hook in \cs{@onefilewithoptions}}%^^A
-% This macro simply calls a load-file-hook, either the \emph{before}
-% or the \emph{after} one, if the hook exists. After calling the hook
-% it will be deleted. First argument is the type of hook
-% (\meta{before} or \meta{after}), second argument is a filename.
-% \begin{macrocode}
-\newcommand*{\scr@load@hook}[2]{%
-% \end{macrocode}
-% \begin{macro}{\scrlfile@cmp@hook}
-% \changes{v3.27a}{2019/10/23}{local macros renamed}%^^A
-% \begin{macro}{\scrlfile@hookname}
-% \changes{v3.27a}{2019/10/23}{local macros renamed}%^^A
-% \changes{v3.29}{2020/06/01}{do the class and package load hooks only in the
-% document preamble}%^^A --> https://komascript.de/node/2274
-% Workaround for strange handling of the \cs{AtEndOfPackage} hook in
-% \cs{@onefilewithoptions} (becomes \cs{@empty}, if the package already has
-% been loaded and is not loaded again). This workaround is not nice but
-% smart. Before loading a file it defines a marker macro and undefines it
-% later. To decide whether to define or remove the marker, two local macros
-% are used \cs{scrlfile@hookname} and \cs{scrlfile@cmp@hook}. The first has
-% the name of the current hook from the first argument. The other is a compare
-% string. The first one is also valid while processing the hook, but only in
-% the document preamble. The names are very unique, so we do not reserve them
-% using \cs{newcommand} outside. The name of the marker is less
-% unique. Nevertheless it is not reserved.
-% Note: For recursive loading of files this does not work. But this also does
-% not matter, because it is needed only for packages and classes, which are
-% never loaded recursive. For the same reason from \KOMAScript{} 3.29 this is
-% only used inside the document preamble. After the document preamble it can
-% be dangerous, e.g., inside a |tabular| or |array|.
-% \begin{macrocode}
- \ifx\@begindocumenthook\@undefined\else
- \edef\scrlfile@hookname{#1}%
- \def\scrlfile@cmp@hook{before}%
- \ifx\scrlfile@hookname\scrlfile@cmp@hook
- \expandafter\def\csname #2-l@ading\endcsname{#2}%
- \fi
- \let\scrlfile@cmp@hook\@undefined
- \fi
- \@ifundefined{#2-@#1}{}{%
- \@nameuse{#2-@#1}%
- \expandafter\let\csname #2-@#1\endcsname\relax
- }%
-% \end{macrocode}
-% The hook could destroy \cs{scrlfile@hookname} so define it again:
-% \begin{macrocode}
- \ifx\@begindocumenthook\@undefined\else
- \edef\scrlfile@hookname{#1}%
- \def\scrlfile@cmp@hook{after}%
- \ifx\scrlfile@hookname\scrlfile@cmp@hook
- \expandafter\let\csname #2-l@ading\endcsname\@undefined
- \fi
- \let\scrlfile@cmp@hook\@undefined
- \let\scrlfile@hookname\@undefined
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\scr@set@load@hook}
-% This command adds stuff to a load-file-hook, either the
-% \emph{before} or the \emph{after} one. First argument is the type of
-% hook (\meta{before} or \meta{after}), second is a filename. There's
-% a third argument not parsed by the macro itself but
-% \cs{g@addto@macro}. This third argument is the stuff, which will be
-% added to the hook. Because of using \cs{g@addto@macro} the hook must
-% be defined. So we define it, if it isn't.
-% \begin{macrocode}
-\newcommand*{\scr@set@load@hook}[2]{%
- \@ifundefined{#2-@#1}{\@namedef{#2-@#1}{}}{}%
- \expandafter\g@addto@macro\csname #2-@#1\endcsname}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\BeforeFile}
-% \begin{macro}{\AfterFile}
-% Just add code to the \emph{before} or \emph{after} hook of a file. The
-% arguments are:
-% \begin{description}
-% \item[\meta{file name}:] mandatory argument with the file name as given by
-% \cs{InputIfFileExists}.
-% \item[\meta{code}:] this argument is not processed by \cs{BeforeFile} or
-% \cs{AfterFile} but the internal \cs{scr@set@load@hook}. It is the code
-% that should be added to either the \emph{before} or the \emph{after} hook.
-% \end{description}
-% \begin{macrocode}
-\newcommand*{\BeforeFile}{\scr@set@load@hook{before}}
-\newcommand*{\AfterFile}{\scr@set@load@hook{after}}
-% \end{macrocode}
-% \end{macro}%^^A \AfterFile
-% \end{macro}%^^A \BeforeFile
-%
-% \begin{macro}{\BeforeClass}
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}%^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
-% ersetzt}%^^A
-% This is quite simple. It only has to add code to the \emph{before} hook
-% already known by \cs{BeforeFile}. The arguments are:
-% \begin{description}
-% \item[\meta{package name}:] mandatory argument.
-% \item[\meta{code}:] this argument is processed not by \cs{BeforeClass} but
-% by the internal \cs{scr@set@load@hook} (see above), that will add the code
-% to the \emph{before} hook of file \meta{code}\texttt{.cls} (or whatever the
-% package extension is).
-% \end{description}
-% \begin{macrocode}
-\newcommand*{\BeforeClass}[1]{%
- \scr@set@load@hook{before}{#1.\@clsextension}}
-% \end{macrocode}
-% \end{macro}%^^A \BeforeClass
-%
-% \begin{macro}{\AfterClass}
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}%^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
-% ersetzt}%^^A
-% \begin{macro}{\AfterAtEndOfClass}
-% These are more complicated. There are five forms:
-% \begin{description}
-% \item[\cs{AfterClass}] corresponds to \cs{AfterFile}. So the code will be
-% added to the usual \emph{after} hook and the code is exexuted before code
-% added by the class itself using \cs{AtEndOfClass}. Argument procession
-% will be done by \cs{@AfterClass}.
-% \item[\cs{AfterAtEndOfClass}] This uses the \emph{lateafter} hook, which
-% is executed after the class has been loaded completely inclusive the
-% execution of \cs{AtEndOfClass} code. However, the code will never be
-% executed, if the class will not be loaded (again). But it does nothing,
-% if the class has already been loaded. The arguments are:
-% \begin{description}
-% \item[\meta{class name}] mandatory argument
-% \item[\meta{code}:] this argument is processed not by \cs{BeforeClass}
-% but by the internal \cs{scr@set@load@hook} (see above), that will add
-% the code to the \emph{lateafter} hook of file \meta{code}\texttt{.cls}
-% (or whatever the class extension is), or by \cs{@gobble}.
-% \end{description}
-% \item[\cs{AfterClass*}] like \cs{AfterClass}, but if loading of the
-% class has already began, the code will be executed immediately. So, if
-% the command is used inside the class it is simply
-% \cs{@firstofone}. Argument procession will be done by \cs{@sAfterClass}.
-% \item[\cs{AfterClass+}] like \cs{AfterClass*}, but the code will be
-% executed immediately only if the class already has been loaded
-% completely or it is used inside \cs{AtEndOfClass}. So inside the class
-% it is similar to \cs{AtEndOfClass}. Argument procession will be done by
-% \cs{@pAfterClass}.
-% \item[\cs{AfterClass!}] like \cs{AfterClass+}, but even inside
-% \cs{AtEndOfClass} the code is executed after every all the
-% \cs{AtEndOfClass} code. Argument procession will be done by
-% \cs{@xAfterClass}. (Some class authors interpret this as the star
-% form of \cs{AfterAtEndOfClass}.)
-% \end{description}
-% \begin{macrocode}
-\newcommand*{\AfterClass}{%
- \kernel@ifstar {\@sAfterClass}{%
- \kernel@ifnextchar +\@pAfterClass{%
- \kernel@ifnextchar !\@xAfterClass\@AfterClass
- }%
- }%
-}
-% \end{macrocode}
-% \begin{macro}{\@AfterClass}
-% \cs{AfterClass}\marg{class name}\marg{code}.
-% It uses \cs{scr@set@load@hook} to add \meta{code} to the
-% \emph{after} hook. The second argument will be processed by
-% \cs{scr@set@load@hook}.
-% \begin{macrocode}
-\newcommand*{\@AfterClass}[1]{%
- \scr@set@load@hook{after}{#1.\@clsextension}}
-% \end{macrocode}
-% \end{macro}%^^A \@AfterClass
-% \begin{macro}{\@sAfterClass}
-% \changes{v3.27a}{2019/10/16}{group removed}%^^A
-% This is the internal implementation of:
-% \cs{AfterClass*}\marg{class name}\marg{code}.
-% It tests, whether or not \LaTeX{} thinks that the class
-% has already been loaded, but this only means whether or not the class
-% loading has already been started. If so, it immediately executes the next
-% argument. If not, is uses \cs{@AfterClass} to execute the \meta{code}
-% after loading the class.
-% \begin{macrocode}
-\newcommand*{\@sAfterClass}[1]{%
- \@ifclassloaded{#1}{%
- \@secondoftwo
- }{%
- \@AfterClass
- }%
- {#1}%
-}
-% \end{macrocode}
-% \end{macro}%^^A \@sAfterClass
-% \begin{macro}{\@pAfterClass}
-% \changes{v3.09}{2011/03/08}{new (internal)}%^^A
-% \changes{v3.27a}{2019/10/15}{renamed from \cs{@@AfterClass}}%^^A
-% \changes{v3.27a}{2019/10/16}{usage of \emph{l@ading} marker}%^^A
-% \changes{v3.27a}{2019/10/16}{group removed}%^^A
-% This is the internal implementation of:
-% \cs{AfterClass+}\marg{class name}\marg{code}.
-% Note, that the plus has not already read. So the arguments are:
-% \begin{description}
-% \item[\texttt{+}:] static plus, to be ignored.
-% \item[\meta{class name}] mandatory argument
-% \item[\meta{code}:] this argument is processed not by \cs{BeforeClass} but
-% by the internal \cs{@sAfterClass} or \cs{@AfterClass} (see above).
-% \end{description}
-% Here we cannot use \LaTeX's test, whether or not the class as already been
-% loaded, because it tests only, if loading of the class has already been
-% started. Here we use an internal information of our \emph{l@ading} marker
-% (see \cs{scr@load@hook}). It is as long defined as a file is read while
-% input. If it is undefined (or \cs{relax}) we can use \cs{@sAfterClass} to
-% either execute \meta{code} immediately or add it to the \emph{after}
-% hook. If is defined (and not \cs{relax}) loading of the class is in progress
-% and \cs{AfterClass} is used to add \meta{code} to the \emph{after} hook. The
-% effect is, that \meta{code} is executed immediately if loading of
-% \meta{class name} has already been finished and after the class if the
-% loading of the \meta{class name} has not already been finished.
-% \begin{macrocode}
-\newcommand*{\@pAfterClass}[2]{%
- \@ifundefined{#2.\@clsextension-l@ading}{%
- \@sAfterClass
- }{%
- \@AfterClass
- }%
- {#2}%
-}
-% \end{macrocode}
-% \end{macro}%^^A \@pAfterClass
-% \begin{macro}{\@xAfterClass}
-% \changes{v3.09}{2011/03/09}{new (internal)}%^^A
-% \changes{v3.27}{2019/08/26}{using inside class fixed}%^^A
-% \changes{v3.27a}{2019/10/15}{renamed from \cs{@@@AfterClass}}%^^A
-% \changes{v3.27a}{2019/10/16}{usage of \emph{l@ading} marker}%^^A
-% \changes{v3.27a}{2019/10/16}{group removed}%^^A
-% This is the internal implementation of:
-% \cs{AfterClass!}\marg{class name}\marg{code}. Note, that the exclamation
-% mark has not already read. So the arguments are:
-% \begin{description}
-% \item[\texttt{!}:] static exclamation mark, to be ignored.
-% \item[\meta{class name}] mandatory argument
-% \item[\meta{code}:] this argument is processed not by \cs{BeforeClass} but
-% by the internal \cs{@sAfterClass} or \cs{@AfterClass} (see above).
-% \end{description}
-% There are two differences to \cs{@pAfterClass}:
-% \begin{enumerate}
-% \item In case of \cs{\meta{class name}.cls-l@ading} is defined (and not
-% \cs{relax}), while loading a class, it used \cs{AfterAtEndOfClass}
-% instead of \cs{AfterClass} to add \meta{code} to the \emph{lateafter}
-% hook instead of the \emph{after} hook.
-% \item In case of \cs{\meta{class name}.cls-l@ading} is undefined (or
-% \cs{relax}) it also has to test, whether or not the class has already
-% been loaded. If so, it uses \cs{@sAfterClass} to execute the \meta{code}
-% immediately, otherwise it uses \cs{AfterAtEndOfClass} to add the
-% \meta{code} to the \emph{lateafter} hook.
-% \end{enumerate}
-% So it is more like (the not existing) \cs{AfterAtEndOfClass+} than
-% \cs{AfterAtEndOfClass*}.
+% \begin{macro}{\AfterPackage+}
+% \begin{macro}{\AfterPackage!}
+% \cs{scrlfile@AfterPackage} is used to store the original \cs{AfterPackage},
+% before redefining \cs{AfterPackage} to handle the plus and the exclamation
+% mark variant.
% \begin{macrocode}
-\newcommand*{\@xAfterClass}[2]{%
- \@ifundefined{#2.\@clsextension-l@ading}{%
- \@ifclassloaded{#2}{%
- \@sAfterClass
- }{%
- \AfterAtEndOfClass
- }%
- }{%
- \AfterAtEndOfClass
- }%
- {#2}%
-}
-% \end{macrocode}
-% \end{macro}%^^A \@xAfterClass
-% Note that \cs{AfterAtEndOfClass} executed the \meta{code} after each try
-% to load a class, even if the class has already been loaded and you try
-% to load it again.
-% \begin{macrocode}
-\newcommand*{\AfterAtEndOfClass}[1]{%
- \scr@set@load@hook{lateafter}{#1.\@clsextension}}
-% \end{macrocode}
-% \end{macro}%^^A \AfterAtEndOfClass
-% \end{macro}%^^A \AfterClass
-%
-% \begin{macro}{\BeforePackage}
-% This is quite simple. It only has to add code to the \emph{before} hook
-% already known by \cs{BeforeFile}. The arguments are:
-% \begin{description}
-% \item[\meta{package name}:] mandatory argument.
-% \item[\meta{code}:] this argument is processed not by \cs{BeforePackage} but
-% by the internal \cs{scr@set@load@hook} (see above), that will add the code
-% to the \emph{before} hook of file \meta{code}\texttt{.sty} (or whatever the
-% package extension is).
-% \end{description}
-% \begin{macrocode}
-\newcommand*{\BeforePackage}[1]{%
- \scr@set@load@hook{before}{#1.\@pkgextension}}
-% \end{macrocode}
-% \end{macro}%^^A \BeforePackage
-%
-% \begin{macro}{\AfterPackage}
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}%^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
-% ersetzt}%^^A
-% \begin{macro}{\AfterAtEndOfPackage}
-% These are more complicated. There are five forms:
-% \begin{description}
-% \item[\cs{AfterPackage}] corresponds to \cs{AfterFile}. So the code will be
-% added to the usual \emph{after} hook and the code is exexuted before code
-% added by the package itself using \cs{AtEndOfPackage}. Argument procession
-% will be done by \cs{@AfterPackage}.
-% \item[\cs{AfterAtEndOfPackage}] This uses the \emph{lateafter} hook, which
-% is executed after the package has been loaded completely inclusive the
-% execution of \cs{AtEndOfPackage} code. However, the code will never be
-% executed, if the package will not be loaded (again). But it does nothing,
-% if the package has already been loaded. The arguments are:
-% \begin{description}
-% \item[\meta{package name}] mandatory argument
-% \item[\meta{code}:] this argument is processed not by \cs{BeforePackage}
-% but by the internal \cs{scr@set@loaf@hook} (see above), that will add
-% the code to the \emph{lateafter} hook of file \meta{code}\texttt{.sty}
-% (or whatever the package extension is), or by \cs{@gobble}.
-% \end{description}
-% \item[\cs{AfterPackage*}] like \cs{AfterPackage}, but if loading of the
-% package has already began, the code will be executed immediately. So, if
-% the command is used inside the package it is simply
-% \cs{@firstofone}. Argument procession will be done by \cs{@sAfterPackage}.
-% \item[\cs{AfterPackage+}] like \cs{AfterPackage*}, but the code will be
-% executed immediately only if the package already has been loaded
-% completely or it is used inside \cs{AtEndOfPackage}. So inside the package
-% it is similar to \cs{AtEndOfPackage}. Argument procession will be done by
-% \cs{@pAfterPackage}.
-% \item[\cs{AfterPackage!}] like \cs{AfterPackage+}, but even inside
-% \cs{AtEndOfPackage} the code is executed after every all the
-% \cs{AtEndOfPackage} code. Argument procession will be done by
-% \cs{@xAfterPackage}. (Some package authors interpret this as the star
-% form of \cs{AfterAtEndOfPackage}.)
-% \end{description}
-% \begin{macrocode}
-\newcommand*{\AfterPackage}{%
- \kernel@ifstar {\@sAfterPackage}{%
- \kernel@ifnextchar +\@pAfterPackage{%
- \kernel@ifnextchar !\@xAfterPackage\@AfterPackage
- }%
- }%
-}
-% \end{macrocode}
-% \begin{macro}{\@AfterPackage}
-% This is the internal implementation of:
-% \cs{AfterPackage}\marg{package name}\marg{code}.
-% It uses \cs{scr@set@load@hook} to add \meta{code} to the
-% \emph{after} hook. The second argument will be processed by
-% \cs{scr@set@load@hook}.
-% \begin{macrocode}
-\newcommand*{\@AfterPackage}[1]{%
- \scr@set@load@hook{after}{#1.\@pkgextension}}
-% \end{macrocode}
-% \end{macro}%^^A \@AfterPackage
-% \begin{macro}{\@sAfterPackage}
-% \changes{v3.27a}{2019/10/16}{group removed}%^^A
-% This is the internal implementation of:
-% \cs{AfterPackage*}\marg{package name}\marg{code}.
-% It tests, whether or not \LaTeX{} thinks that the package
-% has already been loaded, but this only means whether or not the package
-% loading has already been started. If so, it immediately executes the next
-% argument. If not, is uses \cs{@AfterPackage} to execute the \meta{code}
-% after loading the package.
-% \begin{macrocode}
-\newcommand*{\@sAfterPackage}[1]{%
- \@ifpackageloaded{#1}{%
- \@secondoftwo
- }{%
- \@AfterPackage
- }%
- {#1}%
-}
-% \end{macrocode}
-% \end{macro}%^^A \@sAfterPackage
-% \begin{macro}{\@pAfterPackage}
-% \changes{v3.09}{2011/03/08}{new (internal)}%^^A
-% \changes{v3.27a}{2019/10/15}{renamed from \cs{@@AfterPackage}}%^^A
-% \changes{v3.27a}{2019/10/16}{usage of \emph{l@ading} marker}%^^A
-% \changes{v3.27a}{2019/10/16}{group removed}%^^A
-% This is the internal implementation of:
-% \cs{AfterPackage+}\marg{package name}\marg{code}.
-% Note, that the plus has not already read. So the arguments are:
-% \begin{description}
-% \item[\texttt{+}:] static plus, to be ignored.
-% \item[\meta{package name}] mandatory argument
-% \item[\meta{code}:] this argument is processed not by \cs{BeforePackage} but
-% by the internal \cs{@sAfterPackage} or \cs{@AfterPackage} (see above).
-% \end{description}
-% Here we cannot use \LaTeX's test, whether or not the package as already been
-% loaded, because it tests only, if loading of the package has already been
-% started. Here we use an internal information of our \emph{l@ading} marker
-% (see \cs{scr@load@hook}). It is as long defined as a file is read while
-% input. If it is undefined (or \cs{relax}) we can use \cs{@sAfterPackage} to
-% either execute \meta{code} immediately or add it to the \emph{after}
-% hook. If is defined (and not \cs{relax}) loading of the package is in
-% progress and \cs{AfterPackage} is used to add \meta{code} to the
-% \emph{after} hook. The effect is, that \meta{code} is executed immediately
-% if loading of \meta{package name} has already been finished and after the
-% package if the loading of the \meta{package name} has not already been
-% finished.
-% \begin{macrocode}
-\newcommand*{\@pAfterPackage}[2]{%
- \@ifundefined{#2.\@pkgextension-l@ading}{%
- \@sAfterPackage
- }{%
- \@AfterPackage
- }%
- {#2}%
-}
-% \end{macrocode}
-% \end{macro}%^^A \@pAfterPackage
-% \begin{macro}{\@xAfterPackage}
-% \changes{v3.09}{2011/03/09}{new (internal)}%^^A
-% \changes{v3.27}{2019/08/26}{using inside package fixed}%^^A
-% \changes{v3.27a}{2019/10/15}{renamed from \cs{@@@AfterPackage}}%^^A
-% \changes{v3.27a}{2019/10/16}{usage of \emph{l@ading} marker}%^^A
-% \changes{v3.27a}{2019/10/16}{group removed}%^^A
-% This is the internal implementation of:
-% \cs{AfterPackage!}\marg{package name}\marg{code}. Note, that the exclamation
-% mark has not already read. So the arguments are:
-% \begin{description}
-% \item[\texttt{!}:] static exclamation mark, to be ignored.
-% \item[\meta{package name}] mandatory argument
-% \item[\meta{code}:] this argument is processed not by \cs{BeforePackage} but
-% by the internal \cs{@sAfterPackage} or \cs{@AfterPackage} (see above).
-% \end{description}
-% There are two differences to \cs{@pAfterPackage}:
-% \begin{enumerate}
-% \item In case of \cs{\meta{package name}.sty-l@ading} is defined (and not
-% \cs{relax}), to while loading a package, it used \cs{@AfterAtEndOfPackage}
-% instead of \cs{AfterPackage} to add \meta{code} to the \emph{lateafter}
-% hook instead of the \emph{after} hook.
-% \item In case of \cs{\meta{package name}.sty-l@ading} is not defined (or
-% \cs{relax}) it also has to test, whether or not the package has already
-% been loaded. If so, it uses \cs{@sAfterPackage} to execute the \meta{code}
-% immediately, otherwise it uses \cs{@AfterAtEndOfPackage} to add the
-% \meta{code} to the \emph{lateafter} hook.
-% \end{enumerate}
-% So it is more like (the not existing) \cs{AfterAtEndOfPackage+} than
-% \cs{AfterAtEndOfPackage*}.
-% \begin{macrocode}
-\newcommand*{\@xAfterPackage}[2]{%
- \@ifundefined{#2.\@pkgextension-l@ading}{%
- \@ifpackageloaded{#2}{%
- \@sAfterPackage
- }{%
- \@AfterAtEndOfPackage
- }%
- }{%
- \@AfterAtEndOfPackage
- }%
- {#2}%
-}
-% \end{macrocode}
-% \end{macro}%^^A \@xAfterPackage
-% \begin{macro}{\@AfterAtEndOfPackage}
-% \changes{v3.27a}{2019/10/15}{new (internal)}
-% \changes{v3.27a}{2019/10/16}{group removed}%^^A
-% Note that until 3.27a \cs{AfterAtEndOfPackage} executed the \meta{code}
-% after each try to load a package, even if the package has already been
-% loaded and you've try to load it again. Since 3.27a this is the
-% functionality of \cs{@AfterAtEndOfPackage}. \cs{AfterAtEndOfPackage} now
-% does not do anything for already loaded packages or while loading the
-% package.
-% \begin{macrocode}
-\newcommand*{\AfterAtEndOfPackage}[1]{%
- \@ifpackageloaded{#1}{%
- \@ifundefined{#1.\@pkgextension-l@ading}{%
- \@gobbletwo
- }{%
- \@AfterAtEndOfPackage
- }%
- }{%
- \@AfterAtEndOfPackage
- }%
- {#1}%
-}
-\newcommand*{\@AfterAtEndOfPackage}[1]{%
- \scr@set@load@hook{lateafter}{#1.\@pkgextension}%
-}
-% \end{macrocode}
-% \end{macro}%^^A \@AfterAtEndOfPackage
-% \end{macro}%^^A \AfterAtEndOfPackage
-% \end{macro}%^^A \AfterPackage
-%
-% \begin{macro}{\PreventPackageFromLoading}
-% \changes{v3.08}{2010/11/04}{New}
-% \changes{v3.11a}{2012/06/13}{write fault error in \cs{MessageBreak} fixed}
-% \changes{v3.12}{2012/06/15}{new star version allowes empty argument with
-% info instead of warning}
-% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
-% ersetzt}%^^A
-% \begin{macro}{\@PreventPackageFromLoading}
-% \changes{v3.12}{2012/06/15}{New (internal)}%^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}%^^A
-% \begin{macro}{\@@PreventPackageFromLoading}
-% \changes{v3.12}{2013/11/22}{New (internal)}%^^A
-% \changes{v3.12}{2013/11/22}{\cs{usepackage} before \cs{documentclass}
-% fixed}%^^A
-% \begin{macro}{\scrlfile@excludedpackages}
-% \changes{v3.08}{2010/11/04}{New (internal)}%^^A
-% \begin{macro}{\scrlfile@saved@RequirePackage}
-% \changes{v3.08}{2010/11/04}{New (internal)}%^^A
-% \begin{macrocode}
-\newcommand*{\scrlfile@excludedpackages}{}
-\let\scrlfile@excludedpackages\@empty
-\newcommand*{\scrlfile@saved@RequirePackage}{}
-\newcommand*{\PreventPackageFromLoading}{%
- \kernel@ifstar{\@PreventPackageFromLoading\PackageInfo}%
- {\@PreventPackageFromLoading\PackageWarning}%
-}
-\newcommand*{\@PreventPackageFromLoading}[1]{%
- \kernel@ifnextchar [%]
- {\@@PreventPackageFromLoading#1}{\@@PreventPackageFromLoading#1[]}%
-}
-\newcommand*{\@@PreventPackageFromLoading}{}
-\def\@@PreventPackageFromLoading#1[#2]#3{%
-% \end{macrocode}
-% We do nothing, if the argument was empty:
-% \begin{macrocode}
- \edef\reserved@b{\zap@space#3 \@empty}%
- \ifx \reserved@b\@empty
- #1{scrlfile}{%
- \string\PreventPackageFromLoading\space with empty packages\MessageBreak
- argument ignored%
- }%
- \else
-% \end{macrocode}
-% If the argument was not empty we first need to patch \cs{RequirePackage} and
-% maybe \cs{usepackage} too.
-% \begin{macrocode}
- \ifx\scrlfile@excludedpackages\@empty
- \let\scrlfile@saved@RequirePackage\RequirePackage
- \let\RequirePackage\scrlfile@RequirePackage
- \def\reserved@a##1##{%
- \@latex@error
- {\noexpand \usepackage before \string\documentclass}%
- {\noexpand \usepackage may only appear in the document
- preamble, i.e.,\MessageBreak
- between \noexpand\documentclass and
- \string\begin{document}.}%
- \@gobble}%
- \ifx\reserved@a\usepackage\else
- \ifx\usepackage\scrlfile@saved@RequirePackage\else
- \PackageWarning{scrlfile}{%
- Maybe serious problem: unexpected definition of\MessageBreak
- \string\usepackage
- }%
- \fi
- \let\usepackage\RequirePackage
- \fi
- \fi
-% \end{macrocode}
-% We have to test, if a package was already loaded. Only not yet loaded
-% packages will be added to the exclusion list. Empty arguments will be
-% ignored.
-% \changes{v3.11a}{2012/06/11}{missing \cs{scrlfile@excludedpackages} at
-% redefinition of \cs{scrlfile@excludedpackages} added}%^^A
-% \changes{v3.26}{2018/08/29}{spurious \cs{expandafter} removed}%^^A
-% \begin{macrocode}
- \@for\reserved@a:=\reserved@b\do {%
- \ifx\reserved@a\@empty
- #1{scrlfile}{%
- empty package argument for
- \string\PreventPackageFromLoading\MessageBreak
- ignored%
- }%
- \else
- \expandafter\@ifpackageloaded\expandafter{\reserved@a}{%
- #1{scrlfile}{%
- package `\reserved@a' already loaded.\MessageBreak
- Cannot prevent it from beeing loaded%
- }%
- }{%
- \edef\scrlfile@excludedpackages{\scrlfile@excludedpackages,%
- \reserved@a}%
- \if\relax\detokenize{#2}\relax\else
- \@ifundefined{scrlfile@exclude@package@\reserved@a @do}{%
- \@namedef{scrlfile@exclude@package@\reserved@a @do}{}%
- }{}%
- \expandafter\def
- \csname scrlfile@exclude@package@\reserved@a
- @do\expandafter\expandafter\expandafter\endcsname
- \expandafter\expandafter\expandafter{%
- \csname scrlfile@exclude@package@\reserved@a @do\endcsname
- #2%
- }%
- \fi
- }%
- \fi
- }%
-% \end{macrocode}
-% If the exclusion list is still empty (because all packages has been loaded
-% already), remove the patch:
-% \begin{macrocode}
- \ifx\scrlfile@excludedpackages\@empty
- \ResetPreventPackageFromLoading
- \fi
- \fi
-}
-\@onlypreamble\PreventPackageFromLoading
-% \end{macrocode}
-% \begin{macro}{\ResetPreventPackageFromLoading}
-% \changes{v3.08}{2010/11/04}{New}
-% \begin{macro}{\StorePreventPackageFromLoading}
-% \changes{v3.08}{2010/11/04}{New}
-% These two are very simple
-% \begin{macrocode}
-\newcommand*{\ResetPreventPackageFromLoading}{%
- \let\scrlfile@excludedpackages\@empty
- \ifx\RequirePackage\scrlfile@RequirePackage
- \ifx\usepackage\RequirePackage
- \let\usepackage\scrlfile@saved@RequirePackage
- \fi
- \let\RequirePackage\scrlfile@saved@RequirePackage
- \fi
-}
-\@onlypreamble\ResetPreventPackageFromLoading
-\newcommand*{\StorePreventPackageFromLoading}[1]{%
- \let#1\scrlfile@excludedpackages
-}
-\@onlypreamble\StorePreventPackageFromLoading
-% \end{macrocode}
-% \begin{macro}{\UnPreventPackageFromLoading}
-% \changes{v3.12}{2013/11/22}{New}%^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
-% ersetzt}%^^A
-% \begin{macro}{\@UnPreventPackageFromLoading}
-% \changes{v3.12}{2013/11/22}{New (internal)}%^^A
-% This removes packages from the prevent exclude list. The star variant also
-% undefines the instead code.
-% \begin{macrocode}
-\newcommand*{\UnPreventPackageFromLoading}{%
- \kernel@ifstar {\@tempswatrue\@UnPreventPackageFromLoading}%
- {\@tempswafalse\@UnPreventPackageFromLoading}%
-}
-\newcommand*{\@UnPreventPackageFromLoading}[1]{%
- \edef\reserved@b{\zap@space#1 \@empty}%
- \if@tempswa
- \@for\reserved@a:=\reserved@b\do {%
- \ifx\reserved@a\@empty \else
- \ifcsname scrlfile@exclude@package@\reserved@a @do\endcsname
- \expandafter\let
- \csname scrlfile@exclude@package@\reserved@a @do\endcsname
- \undefined
- \fi
- \fi
- }%
- \fi
- \ifcsname scrlfile@excludedpackages\endcsname
- \let\reserved@a\scrlfile@excludedpackages
- \let\scrlfile@excludedpackages\@empty
- \expandafter\@for\expandafter\reserved@c
- \expandafter:\expandafter=\reserved@a
- \do{%
- \ifx\reserved@c\@empty\else
- \@expandtwoargs\in@{,\reserved@c,}{,\reserved@b,}%
- \ifin@
- \else
- \edef\scrlfile@excludedpackages{%
- \scrlfile@excludedpackages,\reserved@c
- }%
- \fi
- \fi
- }%
- \ifx\scrlfile@excludedpackages\@empty\ResetPreventPackageFromLoading\fi
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\scrlfile@RequirePackage}
-% \changes{v3.08}{2010/11/04}{New (internal)}
-% \changes{v3.12}{2013/11/22}{tolerate spaces}
-% \changes{v3.12}{2013/11/22}{execute the optional argument of
-% \cs{PreventPackageFromLoading}}
-% This macro will replace \cs{RequirePackage} whenever the exlude list is not
-% empty
-% \begin{macrocode}
-\newcommand*{\scrlfile@RequirePackage}[2][]{%
- \let\reserved@c\@empty
- \let\reserved@d\@empty
- \edef\reserved@b{\zap@space#2 \@empty}%
- \expandafter\@for\expandafter\reserved@b\expandafter:\expandafter=\reserved@b
- \do {%
- \begingroup
- \@tempswatrue
- \@for\reserved@a:=\scrlfile@excludedpackages\do {%
- \ifx\reserved@a\reserved@b
- \@tempswafalse
- \fi
+ \RenewDocumentCommand\AfterPackage{}{%
+ \kernel@ifnextchar +%
+ {\scrlfile@emulatedeprecated{Package}}%
+ {%
+ \kernel@ifnextchar !%
+ {\scrlfile@emulatedeprecated{Package}}%
+ \scrlfile@AfterPackage
}%
- \if@tempswa
- \xdef\reserved@c{\reserved@c,\reserved@b}%
- \else
- \ifx\reserved@b\@empty\else
- \PackageInfo{scrlfile}{Excluding package `\reserved@b'\MessageBreak
- from loading}%
- \@ifundefined{scrlfile@exclude@package@\reserved@b @do}{%
- }{%
- \expandafter\g@addto@macro\expandafter\reserved@d
- \csname scrlfile@exclude@package@\reserved@b @do\endcsname
- }%
- \fi
- \fi
- \endgroup
- }%
- \ifx\reserved@c\@empty
- \let\reserved@a\scr@gobbleopt
- \else
- \edef\reserved@a{\noexpand\scrlfile@saved@RequirePackage[#1]{%
- \expandafter\@gobble\reserved@c\@empty}}%
- \fi
- \expandafter\reserved@d
- \reserved@a
-}
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\scr@gobbleopt}
-% \changes{v3.08}{2010/11/04}{New (internal)}
-% \changes{v3.08a}{2011/02/11}{\cs{@gobbleopt} renamed due to compaibility
-% problems with \texttt{ntheorem}}
-% Eat the optional argument if it exists.
-% \begin{macrocode}
-\newcommand{\scr@gobbleopt}[1][]{}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\kernel@ifstar}
-% \changes{v3.20}{2016/04/12}{New (internal)}
-% I hope, the \LaTeX{} kernel will define this command in future. But
-% nevertheless, there are \LaTeX{} kernels in real live without this
-% command. So I do it again if needed:
-% \begin{macrocode}
-\providecommand*\kernel@ifstar[1]{\kernel@ifnextchar*{\@firstoftwo{#1}}}
-% \end{macrocode}
-% \end{macro}%^^A \kernel@ifstar
%
-% \begin{macro}{\BeforeClosingMainAux}
-% \changes{v2.95}{2002/09/03}{new}
-% \begin{macro}{\AfterReadingMainAux}
-% \changes{v3.03}{2009/03/25}{new}
-% These are completly different. First we have to establish a new hook
-% at \cs{end\{document\}}, just after closing the group and after the
-% final \cs{clearpage}.
+% \begin{macro}{\scrlfile@emulatedeprecated}
+% \changes{v3.32}{2020/09/11}{new internal command}
+% This emulates \cs{AfterClass+}, \cs{AfterPackage+}, \cs{AfterClass!} and
+% \cs{AfterPackage!} using \cs{AfterAtEndOfClass} or
+% \cs{AfterAtEndOfPackage}. Note, that both, the plus and the exclamation mark
+% variants, are emulated by the star variant of \cs{AfterAtEndOfClass}
+% resp. \cs{AfterAtEndOfPackage}. So the emulation is not perfect.
% \begin{macrocode}
-\AtEndDocument{%
- \let\scr@saved@checkend=\@checkend
- \renewcommand*{\@checkend}[1]{%
- \def\reserved@a{#1}\def\reserved@b{document}%
- \scr@saved@checkend{#1}%
- \ifx\reserved@a\reserved@b
- \let\scr@saved@clearpage=\clearpage
- \renewcommand*{\clearpage}{\scr@saved@clearpage
- \scr@hook@bcma
- \scr@restore@newpage
- \let\clearpage=\scr@saved@clearpage}%
- \fi%
- \let\scr@saved@dofilelist\@dofilelist
- \def\@dofilelist{%
- \scr@hook@acma
- \let\@dofilelist\scr@saved@dofilelist
- \scr@saved@dofilelist
+ \newcommand*{\scrlfile@emulatedeprecated}[2]{%
+ \PackageWarning{scrlfile}{%
+ emulating deprecated \expandafter\string\csname After#1#2\endcsname
+ \space by\MessageBreak
+ \expandafter\string\csname AfterAtEndOf#1*\endcsname.\MessageBreak
+ Note, this may fail, so you should not use\MessageBreak
+ \expandafter\string\csname After#1#2\endcsname
}%
- }%
-}
-% \end{macrocode}
-% \begin{macro}{\scr@saved@checkend}
-% \changes{v2.95}{2002/09/03}{new (internal)}
-% \begin{macro}{\scr@saved@dofilelist}
-% \changes{v3.03}{2009/03/25}{new}
-% You may see above, that we need save-to macros.
-% \begin{macrocode}
-\newcommand*{\scr@saved@checkend}{}
-\newcommand*{\scr@saved@dofilelist}{}
+ \csname AfterAtEndOf#1\endcsname*%
+ }
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \begin{macro}{\scr@redefine@newpage}
-% \changes{v3.00}{2008/07/09}{new (internal)}
-% Some classes (e.g. \textsf{letter}) write output to the aux file.
-% Because of this, redefinition of \cs{newpage} will only be done, if
-% \cs{BeforeClosingMainAux} is used.
-% \begin{macro}{\scr@saved@newpage}
-% \changes{v3.00}{2008/07/09}{new (internal)}
-% And \cs{newpage} will be restored after the hook.
-% \begin{macro}{\scr@restore@newpage}
+%
% \begin{macrocode}
-\newcommand*{\scr@redefine@newpage}{%
- \let\scr@saved@newpage\newpage
- \def\scr@restore@newpage{%
- \renewcommand*{\newpage}{%
- \PackageWarningNoLine{%
- scrlfile%
- }{%
- \string\newpage\space at main aux file!\MessageBreak
- You have output material at the main aux file.\MessageBreak
- Note, that the \string\BeforeClosingMainAux\space commands\MessageBreak
- are processed before the output from aux file%
- }%
- \let\newpage\scr@saved@newpage
- \newpage
- }%
- }%
- \renewcommand*{\newpage}{%
- \PackageError{%
- scrlfile%
- }{%
- \string\newpage\space at \string\BeforeClosingMainAux
- }{%
- You should never use \string\newpage\space or
- \string\clear(double)page or other output material at the\MessageBreak
- argument of \string\BeforeClosingMainAux!\MessageBreak
- If you'll continue, the \string\newpage\space will be ignored to
- avoid corruption of\MessageBreak
- every prior use of \string\BeforeClosingMainAux.
- }%
- }%
}
-\newcommand*{\scr@restore@newpage}{}
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\scr@hook@bcma}
-% \changes{v2.95}{2002/09/03}{new (internal)}
-% \begin{macro}{\scr@hook@acma}
-% \changes{v3.03}{2009/03/25}{new (internal)}
-% We also need macros, that saves the commands at the hooks and are
-% extendable using \cs{g@addto@macro}.
-% \begin{macrocode}
-\newcommand*{\scr@hook@bcma}{}
-\newcommand*{\scr@hook@acma}{}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% Now we are able to write the user command. Here we also warn, if we detect
-% one more \cs{newpage}\,---\,maybe at a \cs{clearpage} or
-% \cs{cleardoublepage}.
+% \end{option}
+%
+% Now, we just have to execute and process the options.
% \begin{macrocode}
-\newcommand*{\BeforeClosingMainAux}{%
- \ifx\scr@hook@bcma\@empty
- \gdef\scr@hook@bcma{%
- \renewcommand*{\BeforeClosingMainAux}[1]{####1}%
- \let\protected@write\protected@immediate@write
- \scr@redefine@newpage
- }%
- \fi
- \g@addto@macro\scr@hook@bcma%
-}
-\newcommand*{\AfterReadingMainAux}{%
- \ifx\scr@hook@acma\@empty
- \gdef\scr@hook@acma{%
- \renewcommand*{\AfterReadingMainAux}[1]{####1}%
- \let\protected@write\protected@immediate@write
- }%
- \fi
- \g@addto@macro\scr@hook@acma%
-}
+\ExecuteOptions{}
+\ProcessOptions\relax
% \end{macrocode}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\protected@immediate@write}
-% Like \LaTeX{} kernel's |\protected@write| but using |\immediate\write|. In
-% this case it is even not a good idea to protect |\thepage|!
+% Last but not least this is a \KOMAScript{} package, so we also define the
+% \KOMAScript{} logo:
% \begin{macrocode}
-\long\def\protected@immediate@write#1#2#3{%
- \begingroup
- #2%
- \let\protect\@unexpandable@protect
- \edef\reserved@a{\immediate\write#1{#3}}%
- \reserved@a
- \endgroup
- \if@nobreak\ifvmode\nobreak\fi\fi
-}
+\RequirePackage{scrlogo}
% \end{macrocode}
-% \end{macro}
%
% \Finale
%
-% \iffalse
-%</scrlfile>
-%<*load>
-% Used at \KOMAScript{} classes.
-% \begin{macrocode}
-\RequirePackage{scrlfile}[%
-%!KOMAScriptVersion
-]
-% \end{macrocode}
-%</load>
-% \fi
-%
-\endinput
+% \endinput
%
-% end of file `scrlfile.dtx'
-
-%%% Local Variables:
-%%% mode: doctex
-%%% TeX-master: t
-%%% End:
+% Local Variables:
+% mode: doctex
+% TeX-master: t
+% End: