diff options
Diffstat (limited to 'macros/latex/contrib/koma-script/scrextend.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/scrextend.dtx | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrextend.dtx b/macros/latex/contrib/koma-script/scrextend.dtx new file mode 100644 index 0000000000..adaf4fed8e --- /dev/null +++ b/macros/latex/contrib/koma-script/scrextend.dtx @@ -0,0 +1,249 @@ +% \iffalse meta-comment +% ====================================================================== +% scrextend.dtx +% Copyright (c) Markus Kohm, 2002-2022 +% +% This file 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: scrextend.dtx 3874 2022-06-05 10:38:02Z kohm $ +%<preidentify>%%% (run: preidentify) +%<prepare>%%% (run: prepare) +%<option>%%% (run: option) +%<*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 $ +\endgroup +\ProvidesFile{scrextend.dtx}[\filedate\space\filerevision\space + KOMA-Script package source + (extend other classes)] +\documentclass{koma-script-source-doc} +\usepackage[USenglish]{babel} +\setcounter{StandardModuleDepth}{2} +\begin{document} + \DocInput{scrextend.dtx} +\end{document} +%</dtx> +% \fi +% +% \changes{v3.00}{2008/05/01}{new package} +% \changes{v3.36}{2022/01/31}{switched from \cls*{scrdoc} to +% \cls*{koma-script-source-doc}} +% \changes{v3.36}{2022/01/31}{whole implementation documentation in English} +% +% \GetFileInfo{scrextend.dtx} +% \title{Extending Non-\href{https://komascript.de}{\KOMAScript} Classes by +% some \href{https://komascript.de}{\KOMAScript} Class Features using +% \href{https://komascript.de}{\KOMAScript} Package \pkg*{scrextend}} +% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}} +% \date{Revision \fileversion{} of \filedate} +% \maketitle +% \begin{abstract} +% The purpose of this package is to provide \KOMAScript{} class features to +% other classes, i.\,e., the standard classes too. On the other hand it does +% not make sense to nor should you load this package, if you are using a +% \KOMAScript{} class. +% \end{abstract} +% +% \tableofcontents +% +% \section{User Manual} +% +% You can find the user manual of \pkg{scrextend} in the \KOMAScript{} manual, +% either the German \file{scrguide} or the English \file{scrguien}. +% +% \MaybeStop{\PrintIndex} +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \subsection{Before the identification of the package} +% +% Just before the identification of the package, we have to take care, that it +% is not loaded with a \KOMAScript{} class. If so, we output a warning an +% terminate. +% +% \changes{v3.30}{2020/02/25}{Using \cs{PackageWarningNoLine} instead of +% \cs{PackageWarning} with final \cs{@gobble}} +% \begin{macrocode} +%<*preidentify> +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname KOMAClassName\endcsname\relax\else + \PackageWarningNoLine{scrextend}{% + This package was made to extend other classes but\MessageBreak + KOMA-Script classes by some features of the\MessageBreak + KOMA-Script classes.\MessageBreak + It should never be used with a KOMA-Script class.\MessageBreak + Loading of the package will be aborted% + }% + \expandafter\endinput +\fi +%</preidentify> +% \end{macrocode} +% +% +% \subsection{Package identification} +% +% We use the major \KOMAScript{} version for this package, because it uses +% several main parts of the classes of the same version. +% +% \begin{macrocode} +%<*identify> +\ProvidesPackage{scrextend}[% +%!KOMAScriptVersion + package (extend other classes with features of KOMA-Script classes)% +] +%</identify> +% \end{macrocode} +% +% +% \subsection{Preparation of options} +% +% The preparation state is used before the option handling. To allow +% definition of optional features. Such definitions are used in other parts of +% the \KOMAScript{} classes. For example \file{scrkernel-title.dtx} defines +% the \optvalue{title} \opt{feature}. +% +% Note: The method used here is very fragile, i.\,e., the definition of +% feature code with arguments needs to be adapted for \pkg{scrextend}. So +% there is a big fat +% \begin{description} +% \item[ToDo:] Reimplementation of the optional features should simplify the +% definition of such features a lot in other files. Best would be to have a +% kind of start command and a kind of end command without the need to change +% anything in between, if the package instead of a class is defined. But +% this is hard to reach, because of usage of \cs{ClassError} +% vs. \cs{PackageError}, \cs{ClassWarning} vs. \cs{PackageWarning}. So at +% least these commands have to be dependent. Nevertheless the need to +% change, e.g., |#1| into |##1|, |#2| into |##2| etc. for \pkg{scrextend} is +% annoying. Moreover the whole usage of \cs{scr@extend@activate@\dots} and +% \cs{sr@extend@immediate@\dots} is very complicated and currently I'm even +% not sure, that is always works as expected. Maybe a less complicated +% feature implementation could be found. +% \end{description} +% +% \begin{macro}{\scr@ext@activate,\scr@ext@activateable, +% \scr@ext@addto@activateable} +% One special feature of this package is, to provide some \KOMAScript{} +% features only, if they have been activated explicitly. To do so +% \begin{quote} +% \cs{scr@ext@activateable}\marg{feature}\marg{definition} +% \end{quote} +% is used. This macro defines \cs{scr@ext@activate@\meta{feature}}. There is +% also a +% \begin{quote} +% \cs{scr@ext@addto@activateable}\marg{feature}\marg{definition} +% \end{quote} +% that does append \meta{definition} to the already existing code of +% \cs{scr@act@activate@\meta{feature}}, if it already exists, or define it +% new, if is does not exist already. +% \begin{quote} +% \cs{scr@ext@activate}\marg{feature} +% \end{quote} +% is used to \emph{activate} a \meta{feature}. That means: If there is a +% \cs{scr@ext@activate@\meta{feature}} it is executed and afterwards +% \cs{scr@ext@activate@\meta{feature}} is destroyed making it \cs{relax}. But +% if there is not yet a \cs{scr@ext@activate@\meta{feature}} a +% \cs{scr@ext@immediate@\meta{feature}} is defined. The definition of this +% is, to redefine itself to be \cs{scr@ext@activate@\meta{feature}}. +% \begin{macrocode} +%<*prepare> +\newcommand*{\scr@ext@activate}[1]{% + \scr@ifundefinedorrelax{scr@ext@activate@#1}{% + \@namedef{scr@ext@immediate@#1}{% + \expandafter\let\csname scr@ext@immediate@#1\endcsname\relax + \csname scr@ext@activate@#1\endcsname + }% + }{% + \csname scr@ext@activate@#1\endcsname + \expandafter\let\csname scr@ext@activate@#1\endcsname\relax + }% +} +\newcommand*{\scr@ext@activateable}[1]{% + \expandafter\newcommand\expandafter*\csname scr@ext@activate@#1\endcsname +} +\newcommand*{\scr@ext@addto@activateable}[1]{% + \scr@ifundefinedorrelax{scr@ext@activate@#1}{% + \expandafter\newcommand\expandafter*\csname scr@ext@activate@#1\endcsname + }{% + \expandafter\g@addto@macro\csname scr@ext@activate@#1\endcsname + }% +} +%</prepare> +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Options} +% +% Now, after the preparation, the universal option that enables optional +% features can defined. This option can be used while loading the package +% only. Later activation of features is currently not supported. +% +% \begin{option}{extendedfeature} +% \changes{v3.12}{2013/03/05}{using state signaling with \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/09}{internal value storage} +% \begin{macrocode} +%<*option> +\KOMA@key{extendedfeature}{% + \scr@ext@activate{#1}% + \AtEndOfPackage{% + \scr@ifundefinedorrelax{scr@ext@immediate@#1}{}{% + \PackageWarningNoLine{unkown extended feature `#1'\MessageBreak + You have used option `extendedfeature' to\MessageBreak + activate an extended feature `#1',\MessageBreak + but there is no such extended feature.\MessageBreak + See the KOMA-Script manual for more\MessageBreak + information about known activatable\MessageBreak + extended features% + }% + }% + }% + \FamilyKeyStateProcessed + \KOMA@kav@xadd{.scrextend.sty}{extendedfeature}{#1}% +} +\AtEndOfPackage{% + \KOMA@key{extendedfeature}{% + \def\FamilyKeyState{Option `extendedfeature' too late}% + }% +} +%</option> +% \end{macrocode} +% \end{option} +% +% \begin{macrocode} +%</package> +% \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: + |