% \iffalse meta-comment % ====================================================================== % scrkernel-version.dtx % Copyright (c) Markus Kohm, 2002-2024 % % 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: scrkernel-version.dtx 4123 2024-10-15 08:36:12Z kohm $ % % ATTENTION: In this file parts of the code and documentation are before the % driver. This must be, because this part of the code is needed by the driver % in this file and most of the other KOMA-Script dtx-files. % % \fi^^A meta-comment % % \changes{v2.0e}{1994/07/07}{first release of \cls*{scrartcl}, % \cls*{scrreprt}, and \cls*{scrbook}} % \changes{v2.95}{2002/06/25}{first version of this file by splitting of % \file{scrclass.dtx}} % \changes{v3.36}{2022/02/11}{switch over from \cls*{scrdoc} to % \cls*{koma-script-source-doc}} % \changes{v3.36}{2022/02/11}{whole implementation documentation in English} % \changes{v3.99}{2022/10/25}{prepared to generate experimental \KOMAScript~4} % \changes{v3.40}{2023/04/17}{guide names changed} % % \GetFileInfo{scrkernel-version.dtx} % \title{The Version of the \href{https://komascript.de}{\KOMAScript} Kernel % and therefore the Classes and most of the Packages} % \author{\href{mailto:komascript@gmx.info}{Markus Kohm}} % \date{Version \fileversion{} of \filedate} % \maketitle % \begin{abstract} % \filename{} is not only used for the code of all \KOMAScript{} classes and % most of the \KOMAScript{} packages. It is also used by most of the % installation drivers (\file{ins}-files) for the definition of % \KOMAScript{} version. % \end{abstract} % \tableofcontents % % % \section{User Manual} % % You can find the user documentation of the commands implemented here in the % \KOMAScript{} manual, either the German \file{scrguide-de.pdf} or the % English \file{scrguide-en.pdf}. % % \MaybeStop{\PrintIndex} % % \section{Implementation of the \KOMAScript{} Kernel Version Information} % % \begin{command}{\KOMAScriptVersion} % \changes{v2.95}{2002/06/25}{added} % The main purpose of this command it to prevent mixture of files of % different \KOMAScript{} versions. But users can also use this command to % detect \KOMAScript{}. It is added to the classes and most of the packages % by the installation drivers. This is done using \file{scrdocstrip.tex} and % additionally loading this file. % \begin{macro}{\@CheckKOMAScriptVersion} % \changes{v2.95}{2002/06/25}{added} % \changes{v3.42}{2024/04/17}{command is defined only once but \pkg{expl3} % hard} % \changes{v3.42}{2024/04/17}{command is no longer defined in \file{clo} % or \file{lco} files} % Depending on \cs{KOMAScriptVersion} already defined or not, the existing % definition is compared with the version here or \cs{KOMAScriptVersion} is % newly and globally defined. This has to work not only in class or package % files, but also in document files. So \cs{makeatletter} inside a group is % needed for the internal macros. Additionally a guard \texttt{ignorethis} is % used, to avoid adding code, that is needed only for the installation driver, % also to classes or packages. Note, the version check is also done in % \file{clo} or \file{lco} files, but the macros \cs{@CheckKOMAScriptVersion} % and \cs{@@CheckKOMAScriptVersion} are not defined in those, because those % files should not always be loaded by \KOMAScript{} classes or packages, % which would already define the command. % \begin{macrocode} %<*ignorethis> \ifx\newcommand\undefined \catcode`\@11\relax \def\@CheckKOMAScriptVersion#1{% \global\KOMAdefVariable{KOMAScriptVersion}{\space\space#1}% \expandafter\ifx\csname ifbeta\endcsname\relax \def\@defbeta##1 ##2 ##3KOMA-Script{% \def\@cmpstrA{##3}\def\@cmpstrB{BETA }% \ifx\@cmpstrA\@cmpstrB \expandafter\expandafter\expandafter\global \expandafter\expandafter\expandafter\let \expandafter\csname ifbeta\expandafter\endcsname \csname iftrue\endcsname \fi }\expandafter\@defbeta\KOMAvar@KOMAScriptVersion \fi \expandafter\ifx\csname ifbeta\endcsname\relax \def\@defbeta##1 ##2.##3.##4 KOMA-Script\@nil{% \def\@cmpstrA{##4}\def\@cmpstrB{}% \ifx\@cmpstrA\@cmpstrB\else \expandafter\expandafter\expandafter\global \expandafter\expandafter\expandafter\let \expandafter\csname ifbeta\expandafter\endcsname \csname iftrue\endcsname \fi }\expandafter\@defbeta\KOMAvar@KOMAScriptVersion. KOMA-Script\@nil \fi \expandafter\ifx\csname ifbeta\endcsname\relax \expandafter\expandafter\expandafter\global \expandafter\expandafter\expandafter\let \expandafter\csname ifbeta\expandafter\endcsname \csname iffalse\endcsname \fi \let\@CheckKOMAScriptVersion\undefined \endinput }% \else \makeatletter % %<*class|package> \providecommand*{\@CheckKOMAScriptVersion}{% \begingroup \ExplSyntaxOff \@@CheckKOMAScriptVersion } \providecommand*{\@@CheckKOMAScriptVersion}[1]{% \@ifundefined{KOMAScriptVersion}{% \gdef\KOMAScriptVersion{#1}% }{% \def\@tempa{#1}% \ifx\KOMAScriptVersion\@tempa\else \GenericWarning{\space\@spaces\@spaces\@spaces\@spaces}{% Version warning: \noexpand\KOMAScriptVersion is `\csname KOMAScriptVersion\endcsname',\MessageBreak but `#1' was expected!\MessageBreak You should not use classes, packages or files from\MessageBreak different KOMA-Script versions\@gobble }% \fi }% \endgroup } % %<*ignorethis> \fi % % \end{macrocode} % Note: Following line will be patched by \file{makebetaorrelase.sh} and % therefore the syntax or general structure of the line must not be changed! % \begin{macrocode} %<*!v4> \@CheckKOMAScriptVersion{2024/10/15 v3.42 KOMA-Script}% % % \@nameuse{@CheckKOMAScriptVersion}{2022/10/25 v3.99 ALPHA KOMA-Script}% % \end{macrocode} % \end{macro} % \end{command} % % \iffalse %<*dtx> \makeatother \ProvidesFile{scrkernel-version.dtx}[\KOMAScriptVersion (versions)] \documentclass[USenglish]{koma-script-source-doc} \usepackage{babel} \begin{document} \DocInput{scrkernel-version.dtx} \end{document} % % \fi % % \subsection{Implementation of class and package names and file names} % % \begin{description} % \item[ToDo] Maybe, this should be split in one file for each class. The file % extension code should be moved to \file{scrkernel-miscellaneous.dtx}. % \end{description} % % \begin{macro}{\scr@pkgextension} % \changes{v3.17}{2015/03/17}{added} % \begin{macro}{\scr@clsextension} % \changes{v3.17}{2015/03/17}{added} % \changes{v3.18}{2015/06/17}{fixed} % Last but not least same like \cs{@pkgextension} and \cs{@clsextension} but % still valid after the preamble. % \begin{macrocode} %<*class|package> %\providecommand*{\scr@pkgextension}{\@pkgextension} %\providecommand*{\scr@clsextension}{\@clsextension} \AtBeginDocument{% % \let\scr@pkgextension\@pkgextension % \let\scr@clsextension\@clsextension } % % \end{macrocode} % \end{macro} % \end{macro} % % \begin{command}{\KOMAClassFileName} % \changes{v3.17}{2014/03/12}{added} % \begin{command}{\KOMAClassName} % \changes{v2.95}{2004/11/04}{added} % \begin{command}{\KOMALongClassFileName,\KOMALongClassName} % \changes{v3.27}{2019/02/16}{added} % \begin{command}{\ClassName} % \changes{v2.95}{2004/11/04}{added} % We define the name of each \KOMAScript{} class and the name of the % \emph{class} of the class (usually name of the corresponding standard class) % once. This allows to use code, that outputs the name of the class, for % several classes without using always class specific code. % \begin{macrocode} %<*class> %<*!v4> %\newcommand*{\KOMAClassName}{scrartcl} %\newcommand*{\KOMAClassName}{scrreprt} %\newcommand*{\KOMAClassName}{scrbook} %\newcommand*{\KOMAClassName}{scrlttr2} %<*!long> \newcommand*{\KOMAClassFileName}{\KOMAClassName.\@clsextension} \edef\KOMAClassFileName{\KOMAClassFileName} % % \newcommand*{\ClassName}{% % article% % report% % book% % letter% } %<*long> \newcommand*{\KOMALongClassName}{} %<*!v4> %\edef\KOMALongClassName{scr\ClassName} %\def\KOMALongClassName{scrletter} % \newcommand*{\KOMALongClassFileName}{\KOMALongClassName.\@clsextension} \edef\KOMALongClassFileName{\KOMALongClassFileName} % %<*v4> \edef\KOMAClassName{scr\ClassName4} \edef\KOMAClassFileName{\KOMAClassName.\@clsextension} % % \end{macrocode} % \end{command} % \end{command} % \end{command} % \end{command} % \begin{macrocode} %\ProvidesClass{\KOMAClassName}[% %\ProvidesClass{\KOMALongClassName}[% %!KOMAScriptVersion document class (\ClassName)% ] %<*long> \let\ClassName\relax %\providecommand*{\@ptsize}{12} \expandafter\let\expandafter\KOMAClassName\expandafter\relax \expandafter\LoadClassWithOptions\expandafter{\KOMAClassName} %\RequirePackage{scrletter} %\RequirePackage{scrletter4} % % % \end{macrocode} % % \begin{macrocode} %<*package&letter> %\ProvidesPackage{scrletter}[% %\ProvidesPackage{scrletter4}[% %!KOMAScriptVersion letter package extending any KOMA-Script class% ] % % \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: