diff options
Diffstat (limited to 'macros/latex/contrib/koma-script/scrlfile.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/scrlfile.dtx | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrlfile.dtx b/macros/latex/contrib/koma-script/scrlfile.dtx new file mode 100644 index 0000000000..027c998175 --- /dev/null +++ b/macros/latex/contrib/koma-script/scrlfile.dtx @@ -0,0 +1,273 @@ +% \iffalse^^A meta-comment +% ====================================================================== +% scrlfile.dtx +% Copyright (c) Markus Kohm, 2002-2022 +% +% This file is part of the work `scrlfile' which is part of the LaTeX2e +% KOMA-Script bundle. +% +% This work may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, version 1.3c of the license. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later and of this work. +% +% This work has the LPPL maintenance status "author-maintained". +% +% The Current Maintainer and author of this work is Markus Kohm. +% +% This work consists of all files listed in MANIFEST.md. +% ====================================================================== +%%% From File: $Id: scrlfile.dtx 3874 2022-06-05 10:38:02Z 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: 2022-06-05 12:38:02 +0200 (So, 05. Jun 2022) $ + \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}} + \filerevision$Revision: 3874 $ + \edef\reserved@a{% + \noexpand\endgroup + \noexpand\ProvidesFile{scrlfile.dtx}% + [\filedate\space\filerevision\space + KOMA-Script package source + }% +\reserved@a +%</dtx> +%<package>\ProvidesPackage{scrlfile}[% +%!KOMAScriptVersion +%<package> package + (file load hooks)] +%<*dtx> +\ifx\documentclass\undefined + \input scrdocstrip.tex + \@@input scrkernel-version.dtx + \@@input scrstrip.inc + \KOMAdefVariable{COPYRIGHTFROM}{2002} + \generate{\usepreamble\defaultpreamble + \file{scrlfile.sty}{% + \from{scrlfile.dtx}{package}% + \from{scrlogo.dtx}{logo}% + }% + } + \batchinput{scrlfile-hook.dtx} + \batchinput{scrlfile-patcholdlatex.dtx} + \@@input scrstrop.inc +\else + \let\endbatchfile\relax +\fi +\endbatchfile +\documentclass[USenglish]{koma-script-source-doc} +\usepackage{babel} +\setcounter{StandardModuleDepth}{1} +\begin{document} + \DocInput{scrlfile.dtx} +\end{document} +%</dtx> +% \fi^^A meta-comment +% +% \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 +% \pkg*{scrlfile-hook} and \pkg*{scrlfile-patcholdlatex}} +% \changes{v3.36}{2022/02/03}{switch over from \cls*{scrdoc} to +% \cls*{koma-script-source-doc}} +% \changes{v3.36}{2022/02/03}{using \file{scrlogo.dtx} to define the logo} +% +% \GetFileInfo{scrlfile.dtx} +% \title{File Loading Hooks with \href{https://komascript.de}{\KOMAScript} +% Package \pkg*{scrlfile}} +% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}} +% \date{Revision \fileversion{} of \filedate} +% \maketitle +% \begin{abstract} +% 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 +% +% +% \section{User Manual} +% +% You can find the user manual of \pkg*{scrlfile} in the \KOMAScript{} manual, +% either the German \file{scrguide} or the English \file{scrguien}. +% Here you can find interim documentation only (before it is added to the +% \KOMAScript{} manual). +% +% \DescribeOption{withdeprecated} +% Package option \opt{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 +% \pkg*{scrlfile} already before the class using: +%\begin{verbatim} +% \RequirePackage[withdeprecated]{scrlfile} +%\end{verbatim}% +% or adding option \opt{withdeprecated} to the global options of +% \cs{documentclass}. Note, this is not a key-value option. It cannot be +% changed after loading \pkg*{scrlfile}. +% +% \MaybeStop{\PrintIndex} +% +% \section{Implementation of \pkg*{scrlfile}} +% +% We need to load one of the packages \pkg*{scrlfile-hook}, +% \pkg*{scrlfile-kook-3.34}, \pkg*{scrlfile-patcholdlatex}. +% \changes{v3.33}{2021/02/09}{do not test for existence of \cs{AddToHook} any +% longer, but \cs{IfFormatAtLeastTF} and the format version}% +% We cannot do the decision by testing the existence of macro \cs{AddToHook}, +% because package \pkg{latexrelease} does not rollback to prior format +% versions good enough. Instead of undefining the macro and so really +% reverting to the definition of \LaTeX{} kernels prior to 2020/10/01 it only +% redefines it to a do-nothing macro. Because of this and similar issues with +% \pkg{latexrelease} cannot (or only with provision) be used to simulate a +% real old \LaTeX{} kernel, i.e. for testing. So the only valid test for the +% existence of the wanted \cs{AddToHook} would be to test the definite +% definition of \cs{AddToHook} and the existence of the hooks we are +% using. But, because this is to much effort, we simply test the format +% version. Nevertheless, we know, this may fail! +% \begin{macrocode} +\@ifundefined{IfFormatAtLeastTF}{% + \RequirePackage{scrlfile-patcholdlatex}% + \RequirePackage{xparse}% +% \end{macrocode} +% \changes{v3.33}{2021/02/16}{workaround for \pkg{latexrelease} bug} +% Explicitly switch of \pkg{expl3} syntax because of a +% \pkg{latexrelease} bug related to the usage of \pkg{xparse-2020-10-01} in +% version 2020-02-02. +% \changes{v3.35}{2021/10/31}{new variant because of \LaTeX{} kernel change} +% \begin{macrocode} + \ExplSyntaxOff +}{% + \IfFormatAtLeastTF{2020/10/01}{% + \IfFormatAtLeastTF{2021/11/15}{% + \RequirePackage{scrlfile-hook}% + }{% + \RequirePackage{scrlfile-hook-3.34}% + }% + }{% + \RequirePackage{scrlfile-patcholdlatex}% + \RequirePackage{xparse}% +% \end{macrocode} +% Explicitly switch of \pkg{expl3} syntax because of a +% \pkg{latexrelease} bug in version 2020-02-02. +% \begin{macrocode} + \ExplSyntaxOff + }% +} +% \end{macrocode} +% +% \begin{option}{withdeprecated} +% \changes{v3.32}{2020/09/11}{added} +% Depending on this option we implement addition deprecated commands. +% \begin{macrocode} +\DeclareOption{withdeprecated}{% +% \end{macrocode} +% +% \begin{command}[noindex]{\AfterClass+,\AfterClass!} +% \cs{scrlfile@AfterClass} is used in the sub-packages to store the original +% \cs{AfterClass} and can be used to redefine \cs{AfterClass} to handle the +% plus and the exclamation mark variant. +% \begin{macrocode} + \RenewDocumentCommand\AfterClass{}{% +% \end{macrocode} +%^^A Hack for correct line numbers in the index: +%^^A - end environment, +%^^A - do index entries +%^^A - fix vertical spaces +%^^A - restart environment without printing and indexing +% \end{command} +% \SpecialMainCommandIndex{\AfterClass+} +% \SpecialMainCommandIndex{\AfterClass\quotechar!} +% \vskip-\dimexpr 2.2\baselineskip+\parskip\relax +% \begin{command}[noindex,noprint]{\AfterClass+,\AfterClass!} +% \begin{macrocode} + \kernel@ifnextchar +% + {\scrlfile@emulatedeprecated{Class}}% + {% + \kernel@ifnextchar !% + {\scrlfile@emulatedeprecated{Class}}% + \scrlfile@AfterClass + }% + } +% \end{macrocode} +% \end{command} +% +% \begin{command}[noindex]{\AfterPackage+,\AfterPackage!} +% \cs{scrlfile@AfterPackage} is used in the sub-packages to store the original +% \cs{AfterPackage} and can be used to redefine \cs{AfterPackage} to handle +% the plus and the exclamation mark variant. +% \begin{macrocode} + \RenewDocumentCommand\AfterPackage{}{% +% \end{macrocode} +%^^A Hack for correct line numbers in the index: +%^^A - end environment, +%^^A - do index entries +%^^A - fix vertical spaces +%^^A - restart environment without printing and indexing +% \end{command} +% \SpecialMainCommandIndex{\AfterPackage+} +% \SpecialMainCommandIndex{\AfterPackage\quotechar!} +% \vskip-\dimexpr 2.2\baselineskip+\parskip\relax +% \begin{command}[noindex,noprint]{\AfterPackage+,\AfterPackage!} +% \begin{macrocode} + \kernel@ifnextchar +% + {\scrlfile@emulatedeprecated{Package}}% + {% + \kernel@ifnextchar !% + {\scrlfile@emulatedeprecated{Package}}% + \scrlfile@AfterPackage + }% + } +% \end{macrocode} +% \end{command} +% +% \begin{macro}{\scrlfile@emulatedeprecated} +% \changes{v3.32}{2020/09/11}{added} +% 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} + \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 + }% + \csname AfterAtEndOf#1\endcsname*% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +} +% \end{macrocode} +% \end{option} +% +% Now, we just have to execute and process the options. +% \begin{macrocode} +\ExecuteOptions{} +\ProcessOptions\relax +% \end{macrocode} +% +% \Finale +% \PrintChanges +% +% \endinput +% Local Variables: +% mode: doctex +% ispell-local-dictionary: "en_US" +% eval: (flyspell-mode 1) +% TeX-master: t +% TeX-engine: luatex-dev +% eval: (setcar (or (cl-member "Index" (setq-local TeX-command-list (copy-alist TeX-command-list)) :key #'car :test #'string-equal) (setq-local TeX-command-list (cons nil TeX-command-list))) '("Index" "mkindex %s" TeX-run-index nil t :help "makeindex for dtx")) +% End: |