summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/scrextend.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/koma-script/scrextend.dtx')
-rw-r--r--macros/latex/contrib/koma-script/scrextend.dtx249
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:
+