% \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 4133 2024-10-24 09:54:28Z 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/24 v3.43 KOMA-Script}%
%!v4>
% \@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}
%!long>
%!v4>
\newcommand*{\ClassName}{%
% article%
% report%
% book%
% letter%
}
%<*long>
\newcommand*{\KOMALongClassName}{}
%<*!v4>
%\edef\KOMALongClassName{scr\ClassName}
%\def\KOMALongClassName{scrletter}
%!v4>
\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: