diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrlfile.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/koma-script/scrlfile.dtx | 1326 |
1 files changed, 108 insertions, 1218 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrlfile.dtx b/Master/texmf-dist/source/latex/koma-script/scrlfile.dtx index 8746d73643c..b9782c81e57 100644 --- a/Master/texmf-dist/source/latex/koma-script/scrlfile.dtx +++ b/Master/texmf-dist/source/latex/koma-script/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: |