summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/source/koma-script-source-doc.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/koma-script/source/koma-script-source-doc.dtx')
-rw-r--r--macros/latex/contrib/koma-script/source/koma-script-source-doc.dtx785
1 files changed, 785 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/source/koma-script-source-doc.dtx b/macros/latex/contrib/koma-script/source/koma-script-source-doc.dtx
new file mode 100644
index 0000000000..d1ce7326c5
--- /dev/null
+++ b/macros/latex/contrib/koma-script/source/koma-script-source-doc.dtx
@@ -0,0 +1,785 @@
+% \iffalse meta-comment
+% ==========================================================================
+% komascript-source.doc.dtx
+% Copyright (c) Markus Kohm, 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.txt.
+% --------------------------------------------------------------------------
+% Note: This is a self unpacking dtx-file, so you have to run:
+% tex koma-script-source-doc.dtx
+% to unpack the file(s), but
+% lualatex-dev koma-script-source-doc.dtx
+% mkindex koma-script-source-doc
+% lualatex-dev koma-script-source-doc.dtx
+% mkindex koma-script-source-doc
+% lualatex-dev koma-script-source-doc.dtx
+% to generate the manual. Before generation of the manual it is
+% recommended to install or at least unpack KOMA-Script.
+% ==========================================================================
+%%
+%<+drv>\ProvidesFile{koma-script-source-doc.drv}
+%<+class>\ProvidesClass{koma-script-source-doc}
+%<*ins>
+\expandafter\expandafter\expandafter\ifx\csname ProvidesFile\endcsname\relax
+ \def\ProvidesFile#1[#2]{}
+\fi
+%</ins>
+%<*dtx>
+\ProvidesFile{koma-script-source-doc.dtx}
+%</dtx>
+%<+ins>\ProvidesFile{koma-script-source-doc.ins}
+[2022-03-10 v0.91 KOMA-Script source documentation]
+%<*dtx>
+\ifx\documentclass\undefined
+%</dtx>
+%<*ins>
+ \input docstrip.tex
+ \ifToplevel{\keepsilent\askforoverwritefalse}
+ \generate{%
+% \file{koma-script-source-doc.drv}{%
+% \from{koma-script-source-doc.dtx}{drv}%
+% }
+% \file{koma-script-source-doc.ins}{%
+% \from{koma-script-source-doc.dtx}{ins}%
+% }
+ \file{koma-script-source-doc.cls}{%
+ \from{koma-script-source-doc.dtx}{class}%
+ \from{scrlogo.dtx}{logo,forcedefine}%
+ }%
+ }
+%</ins>
+%<*dtx>
+\else
+ \let\endbatchfile\relax
+\fi
+%</dtx>
+%<*dtx|ins>
+\endbatchfile
+%</dtx|ins>
+%<*drv>
+\documentclass[USenglish]{koma-script-source-doc}
+\usepackage{libertinus}
+\usepackage{babel}
+\NewDocElement[%
+ macrolike = false,
+ toplevel = true,
+ idxtype = \textit{d.\,i.},
+ idxgroup = Documentation items,
+ printtype = \textit{d.\,i.},
+]{DocItem}{docitem}
+\begin{document}
+\DocInput{koma-script-source-doc.dtx}
+\end{document}
+%</drv>
+% \fi^^A meta-comment
+%
+% \changes{v0.0}{2022/01/15}{start of the new class}
+% \changes{v0.1}{2022/01/15}{first self documenting test}
+% \changes{v0.6}{2022/02/02}{force definition of \KOMAScript{} logo}
+% \changes{v0.6}{2022/02/02}{\pkg{hyperref} hook for \KOMAScript{} logo moved
+% to \file{scrlogo.dtx}}
+%
+% \DoNotIndex{\actualchar}
+%
+% \GetFileInfo{\jobname.dtx}
+% \title{\href{https://komascript.de}{\KOMAScript} Source Documentation\\
+% Using\\
+% \cls*{koma-script-source-doc}}
+% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}}
+% \date{Version \fileversion{} of \filedate}
+% \maketitle
+% \begin{abstract}
+% From 2002 up to end of 2021 \cls*{scrdoc} was the class, that has been used
+% for the sources of \KOMAScript{} and several other packages of the
+% \KOMAScript{} author. This class was more or less a ugly hack to use a
+% modified and extended version of \cls{ltxdoc}, the source documentation
+% class of The \LaTeX{} Team. There has been advisement to redesign this
+% class for years, but as changing the source documentation class is more a
+% work of month than of days, I've always put it on the back burner.
+%
+% In January 2022, The \LaTeX{} Team switched over from \pkg{doc} version 2 to
+% version 3. The new version is compatible on user interface level, but as
+% expected not on implementation level. So the extensions made in \cls*{scrdoc}
+% result in several error messages. For such cases The \LaTeX{} Team has the
+% fallback solution to use an old \pkg{doc}. But this can only be used, if you
+% load \pkg{doc} yourself using either |\usepackage| or
+% |\RequirePackage|. If class \cls{ltxdoc} is used, the fallback does not
+% exist.
+%
+% A first workaround for \cls*{scrdoc} was a typical hacker solution, that
+% forces \cls{ltxdoc} to use an old version of \pkg{doc} and to fix the
+% resulting issues after loading \cls{ltxdoc}. But this does only work as long
+% as new releases of \cls{ltxdoc} are compatible with the \pkg{doc} release of
+% 2021.
+%
+% So in January 2022, it was really time for a new \KOMAScript{} source
+% documentation class. This new class does not use internal commands of
+% \cls{ltxdoc} any longer but uses the extended interface of \pkg{doc} version
+% 3 to define further documentation items.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Prerequisites}
+% \label{sec:prerequisites}
+%
+% Class \cls*{koma-script-source-doc} needs at least class \cls{ltxdoc} version
+% 2.1d which depends on package \pkg{doc} version 3, because it used several
+% of the new features of that \pkg{doc} release. This is part of
+% \texttt{latex-base-dev} 2022-06-01 pre-release~1 distributed on
+% \href{https://www.ctan.org}{CTAN} on 14th January 2022 and therefore will be
+% part of \LaTeX{} 2022-06-01. If you still use an older \LaTeX{} you cannot
+% use class \cls*{koma-script-source-doc}.
+%
+%
+% \section{Basic Settings}
+% \label{sec:basicsettings}
+%
+% For \KOMAScript{} we use some basic settings:
+% \begin{itemize}
+% \item Generation of the indexing of new commands is generally enabled by
+% \pkg{doc}. We do not use \cs{EnableCrossrefs}, because this would not
+% allow to disable this feature using \cs{DisableCrossrefs}. It is also
+% recommended not to generally use \cs{EnableCrossrefs} in the
+% \file{dtx}-file.
+% \item We use \cs{CodeLineIndex} to have code line numbers for the
+% indexing. This could be problematic sometimes. In this case, you should
+% use \cs{PageIndex} and \cs{CodelineNumbered} to use page numbers in the
+% index but nevertheless add line numbers to the code.
+% \item For \KOMAScript{} code we usually record the changes. So we use
+% \cs{RecordChanges} and option \opt{reportchangedates} This is the only
+% real changelog we do. However, if your \file{dtx}-file contains the user
+% manual, it would be recommended to list the main changes like new features
+% and incompatibilities as a section either at the very beginning or the end
+% of the user manual.
+% \item \DescribeOption{indexlatex} For \KOMAScript{} sources I do not like to
+% index all the \LaTeX{} interface commands and internal
+% commands\footnote{This does only work for those \LaTeX{} macros, already
+% internally listed. The list should be generated automatically after each
+% \LaTeX{} release. Unfortunately, currently it is build step by step with
+% every new \KOMAScript{} release instead.}. You can changes this, using
+% option \opt{indexlatex}. You can also use explicit \opt{indexlatex=false}
+% to again not index the \LaTeX{} kernel macros.
+% \item You also should use \cs{GetFileInfo}\marg{dtx-filename} to get
+% information like \cs{filedate} and \cs{fileversion} from the
+% \cs{ProvidesFile} command of the \file{dtx}-file. Sometimes it may even be
+% better to use the generated package or class as argument.
+% \end{itemize}
+%
+%
+% \section{Simple Formatting Commands}
+% \label{sec:simpleformatting}
+%
+% \DescribeCommand{\file}
+% \DescribeCommand{\opt}
+% \DescribeCommand{\optvalue}
+% \DescribeCommand{\env}
+% \DescribeCommand{\cnt}
+% \DescribeCommand{\fnt}
+% \DescribeCommand{\len}
+% \DescribeCommand{\var}
+% \DescribeCommand{\plen}
+% \DescribeCommand{\pstyle}
+% \DescribeCommand{\dhook}
+% There are some very simple formatting commands. They all expect one
+% mandatory argument \meta{object name}. The default formatting is to use
+% \cs{texttt}. The commands are mentioned for the name of a file, option,
+% value of an option, environment, \LaTeX{} counter, font, length (either
+% dimension or skip), variable (usually \KOMAScript{} variables used by
+% \cls*{scrlttr2} or \pkg*{scrletter}), pseudo-length (of \cls*{scrlttr2} or
+% \pkg*{scrletter}), page style, or do hook.
+%
+% \DescribeCommand{\cls}
+% \DescribeCommand{\pkg}
+% The commands:
+% \begin{quote}
+% \cs{cls}\oarg{hyper link}\marg{package name}\hfill and\hfill
+% \cs{pkg}\oarg{hyper link}\marg{class name}
+% \end{quote}
+% do not only print the name of a class or package, but also generate a hyper
+% link. For this the commands have a first optional argument. If this is
+% empty, no link will be generated. If it is not empty, it has to be the
+% link. If it is not used an automatic package link to the
+% \href{https://www.ctan.org/pkg}{CTAN} package with the same name will be
+% generated. There are also star variants \cs{cls*} and \cs{pkg*}, that do not
+% produce any link. For links with special characters like \texttt{\char`\#}
+% it is recommended to use \cs{href} and the star variant.
+% \begin{center}
+% Examples:\hspace{0pt plus 1filll}\null\\[-\baselineskip]
+% \cs{cls}|{scrbook}| \textrightarrow{} \cls{scrbook}\\
+% \cs{cls*}|{scrbook}| \textrightarrow{} \cls*{scrbook}\\
+% \cs{cls}|[https://koma-script.de]{koma-script-source-doc}|
+% \textrightarrow{} \cls[https://koma-script.de]{koma-script-source-doc}\\
+% \cs{pkg}|[]{scrlayer}| \textrightarrow{} \pkg[]{scrlayer} \\
+% \cs{href}|{http://mirrors.ctan.org/macros/latex/contrib/koma-script/doc/scrguien.pdf#cha:typearea}{\pkg*{typearea}}|
+% \textrightarrow{}
+% \href{http://mirrors.ctan.org/macros/latex/contrib/koma-script/doc/scrguien.pdf#chapter.2}{\pkg*{typearea}}
+% \end{center}
+%
+% \MaybeStop{\PrintIndex}
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+%<*class>
+% \end{macrocode}
+%
+% \subsection{Class Options}
+%
+% We use \pkg{l3keys2e} for the options. Using \pkg*{scrkbase} would be nice
+% too, but it cannot be used until \KOMAScript{} is available, to the
+% emergency fallback to using the standard class \cls*{article} wouldn't make
+% sense in this case.
+% \begin{macrocode}
+\RequirePackage{l3keys2e}
+\ExplSyntaxOn
+% \end{macrocode}
+% \begin{option}{indexlatex}
+% \changes{v0.3}{2022/01/17}{new option}
+% The option to switch on/off the indexing of \LaTeX{} interface and internal
+% macros (and also \TeX{} primitives). The pre-setting is \texttt{false}. The
+% default of the option is \texttt{true}.
+% \begin{macrocode}
+\newif \ifkdoc@indexlatex \kdoc@indexlatexfalse
+\keys_define:nn {kdoc}
+ {
+ indexlatex .choice:,
+ indexlatex / true .code:n = { \legacy_if_set_true:n { kdoc@indexlatex } },
+ indexlatex / false .code:n = { \legacy_if_set_false:n { kdoc@indexlatex } },
+ indexlatex .default:n = { true },
+ }
+% \end{macrocode}
+% \end{option}
+% \begin{macrocode}
+\ExplSyntaxOff
+\ProcessKeysOptions {kdoc}
+% \end{macrocode}
+%
+%
+% \subsection{Base Class and Packages}
+%
+% \changes{v0.2}{2022/01/16}{emergency fallback to \cls*{article}}
+% \changes{v0.3}{2022/01/17}{new basic defaults}
+% \changes{v0.3}{2022/01/17}{\cs{DoNotIndex} of several \LaTeX{} kernel
+% macros}
+% \changes{v0.3a}{2022/01/21}{using an old \pkg{doc} is fatal}
+% Currently we use base class \cls{ltxdoc} at least version 2021/12/07
+% v2.1d. In future this could change. In this case we would need to load
+% package \pkg{doc} at least version 2022/06/01 v3.0g. However, we also want
+% \cls{ltxdoc} to use \KOMAScript{} class \cls*{scrartcl} instead of standard
+% class \cls*{article}. But if \KOMAScript{} has not been made, we cannot use
+% a \KOMAScript{} class or package to compile the source. So in this case
+% we use an emergency fallback.
+% \begin{macrocode}
+\IfFileExists{scrartcl.cls}{%
+ \declare@file@substitution{article.cls}{scrartcl.cls}
+ \PassOptionsToClass{fontsize=10pt}{scrartcl}
+}{%
+ \ClassWarningNoLine{koma-script-source-doc}{%
+ Usually this class should be used with KOMA-Script\MessageBreak
+ scrartcl. But as that class is not available we use\MessageBreak
+ standard class article as emergency fallback.\MessageBreak
+ It is recommended to repeat this LaTeX run after\MessageBreak
+ build/installation of a complete KOMA-Script%
+ }%
+}
+\LoadClassWithOptions{ltxdoc}[2021/12/07]
+\IfPackageAtLeastTF{doc}{2022/06/01}{}{%
+ \ClassError{koma-script-source-doc}{old package `doc' detected}{%
+ This class needs `doc' v3. It cannot be used with\MessageBreak
+ `doc' v2. `doc' v3 is available at LaTeX developer\MessageBreak
+ release from at least January 2022}%
+ \csname fi\endcsname\csname @@end\endcsname\end\endinput
+}
+\SetupDoc{reportchangedates}
+\CodelineIndex
+\RecordChanges
+\ifkdoc@indexlatex\else
+ \DoNotIndex{\.,\\,\ ,\@,\@Alph,\@M}
+ \DoNotIndex{\@abstrtfalse,\@abstrttrue,\@addtoreset,\@afterheading}
+ \DoNotIndex{\@afterindentfalse,\@alph,\@arabic}
+ \DoNotIndex{\@beginparpenalty}
+ \DoNotIndex{\@car,\@cdr,\@centercr}
+ \DoNotIndex{\@dblfloat,\@dotsep}
+ \DoNotIndex{\@dottedtocline,\@empty,\@endparpenalty}
+ \DoNotIndex{\@float,\@fontswitch}
+ \DoNotIndex{\@gobbletwo}
+ \DoNotIndex{\@hangfrom,\@highpenalty}
+ \DoNotIndex{\@ifnextchar,\@ifundefined,\@itempenalty}
+ \DoNotIndex{\@latex@warning}
+ \DoNotIndex{\@m,\@medpenalty,\@minus,\@mkboth,\@mparswitchfalse}
+ \DoNotIndex{\@mparswitchtrue}
+ \DoNotIndex{\@ne,\@nil,\@nobreakfalse,\@nobreaktrue,\@nomath}
+ \DoNotIndex{\@plus}
+ \DoNotIndex{\@Roman,\@roman}
+ \DoNotIndex{\@tempa,\@tempcnta,\@tempdima,\@tempskipka}
+ \DoNotIndex{\@tempswafalse,\@tempswatrue}
+ \DoNotIndex{\@tempb,\@tempcntb,\@tempdimb,\@tempskipkb}
+ \DoNotIndex{\@tempswbfalse,\@tempswbtrue}
+ \DoNotIndex{\@tempc,\@tempcntc,\@tempdimc,\@tempskipkc}
+ \DoNotIndex{\@tocrmarg,\@topnewpage,\@topnum,\@twocolumnfalse}
+ \DoNotIndex{\@twocolumntrue,\@twosidefalse,\@twosidetrue}
+ \DoNotIndex{\@whiledim,\@whilenum}
+ \DoNotIndex{\addcontentsline,\addpenalty,\addtocontents,\addtolength}
+ \DoNotIndex{\addvspace,\advance,\AtBeginDocument}
+ \DoNotIndex{\begin,\begingroup,\bfseries,\box,\bullet}
+ \DoNotIndex{\c@figure,\c@page,\c@secnumdepth,\c@table,\c@tocdepth}
+ \DoNotIndex{\cdot,\centering,\changes,\cleardoublepage,\clearpage}
+ \DoNotIndex{\cmd,\col@number,\CurrentOption,\CodelineIndex,\cs}
+ \DoNotIndex{\day,\dblfloatpagefraction,\dbltopfraction}
+ \DoNotIndex{\declare@file@substitution}
+ \DoNotIndex{\DeclareOldFontCommand,\DeclareOption,\def,\DisableCrossrefs}
+ \DoNotIndex{\divide,\DoNotIndex}
+ \DoNotIndex{\ifdim,\else,\fi,\empty,\em,\EnableCrossrefs,\end}
+ \DoNotIndex{\end@dblfloat}
+ \DoNotIndex{\end@float,\endgroup,\endlist,\endquotation,\endtitlepage}
+ \DoNotIndex{\everypar,\ExecuteOptions,\expandafter}
+ \DoNotIndex{\fboxrule,\fboxsep}
+ \DoNotIndex{\g@addto@macro,\gdef,\global}
+ \DoNotIndex{\hangindent,\hbox,\hfil,\hrule,\hsize,\hskip,\hspace,\hss}
+ \DoNotIndex{\if@tempswa,\ifcase,\or,\fi,\fi}
+ \DoNotIndex{\ifnum,\ifodd,\ifx,\fi,\fi,\fi}
+ \DoNotIndex{\include,\input,\InputIfFileExists,\item,\itshape}
+ \DoNotIndex{\kern,\kernel@ifnextchar}
+ \DoNotIndex{\leavevmode,\leftmark,\leftskip,\let,\lineskip}
+ \DoNotIndex{\list,\long,\LoadClass,\LoadClassWithOptions}
+ \DoNotIndex{\m@ne,\m@th,\marginpar,\markboth,\markright,\mathbf,\mathcal}
+ \DoNotIndex{\mathit,\mathnormal,\mathrm,\mathsf,\mathtt,\MessageBreak}
+ \DoNotIndex{\month}
+ \DoNotIndex{\newblock,\newcommand,\newcount,\newcounter,\newdimen}
+ \DoNotIndex{\newenvironment,\newlength,\newpage,\nobreak,\noindent}
+ \DoNotIndex{\normalfont,\normallineskip,\normalsize,\null,\number}
+ \DoNotIndex{\numberline,\normalcolor}
+ \DoNotIndex{\OldMakeindex,\OnlyDescription,\overfullrule}
+ \DoNotIndex{\p@,\PackageError,\PackageInfo,\PackageWarningNoLine}
+ \DoNotIndex{\pagenumbering,\pagestyle,\par,\paragraph,\parbox}
+ \DoNotIndex{\PassOptionsToPackage,\pcal,\penalty,\pmit,\PrintChanges}
+ \DoNotIndex{\PrintIndex,\ProcessOptions,\protect,\providecommand}
+ \DoNotIndex{\ProvidesClass}
+ \DoNotIndex{\raggedbottom,\raggedleft,\raggedright,\refstepcounter,\relax}
+ \DoNotIndex{\renewcommand,\RenewDocElement,\RequirePackage}
+ \DoNotIndex{\reserved@a,\reserved@b,\reserved@c,\reset@font}
+ \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rmfamily}
+ \DoNotIndex{\scshape,\secdef,\setbox,\setcounter,\setlength}
+ \DoNotIndex{\settowidth,\sfcode,\sffamily,\skip,\sloppy,\slshape,\space}
+ \DoNotIndex{\string}
+ \DoNotIndex{\TeX,\textbf,\textit,\textrm,\textsf,\texttt,\textup}
+ \DoNotIndex{\the,\thispagestyle,\triangleright,\ttfamily}
+ \DoNotIndex{\twocolumn,\typeout}
+ \DoNotIndex{\undefined,\usecounter}
+ \DoNotIndex{\vfil,\vfill,\vspace}
+ \DoNotIndex{\wd,\xdef,\year,\z@}
+\fi
+% \end{macrocode}
+%
+% \changes{v0.2}{2022/01/16}{do not fail if \pkg*{typearea} has not been
+% loaded}
+% The left margin is highly used, but the right margin is not. So it is a kind
+% of \opt{mpinclude} but with the left instead of the right margin. A simple
+% solution for this is to move the whole page content to the right. But we do
+% so only, if \cls*{koma-script-source-doc} is used with \cls*{scrartcl}.
+% \begin{macrocode}
+\ifdefined\AfterCalculatingTypearea
+ \AfterCalculatingTypearea{%
+ \addtolength{\oddsidemargin}
+ {.5\dimexpr\oddsidemargin+1in\relax}%
+ \setlength{\marginparwidth}
+ {\dimexpr \oddsidemargin+1in-2\marginparsep\relax}%
+ \setlength{\marginparpush}{0pt}%
+ }
+ \KOMAoption{DIV}{9}
+\fi
+% \end{macrocode}
+%
+% Because \pkg{doc} uses a late hook to load \pkg{hyperref} there may be a
+% problem with package \pkg{auxhook} used by \pkg{hyperref}. So we load it
+% early to avoid such problems.
+% \begin{macrocode}
+\RequirePackage{auxhook}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\index@prologue,\glossary@prologue}
+% \changes{v0.5}{2022/01/31}{generating ToC entry}
+% \begin{macro}{\kssd@section@hack}
+% \changes{v0.5}{2022/01/31}{new}
+% We want to have an entry to the table of contents for the index and the
+% glossary. So we patch the default prologues. This is not a perfect solution,
+% but it works and makes it possible to still define a complete new prologue
+% using \cs{IndexPrologue} resp. \cs{GlossaryPrologue} as documented for
+% \pkg{doc}.
+% \begin{macrocode}
+\expandafter\def\expandafter\index@prologue\expandafter{%
+ \expandafter\kssd@section@hack\index@prologue}
+\expandafter\def\expandafter\glossary@prologue\expandafter{%
+ \expandafter\kssd@section@hack\glossary@prologue}
+\newcommand*{\kssd@section@hack}{%
+ \let\ksdd@markboth\markboth
+ \def\markboth##1##2{%
+ \@ifundefined{addsectiontocentry}{%
+ \@ifundefined{addxcontentsline}{%
+ \addcontentsline{toc}{section}{\numberline{}##1}%
+ }{%
+ \addxcontentsline{toc}{section}{##1}%
+ }%
+ }{%
+ \addsectiontocentry{}{##1}%
+ }%
+ \let\markboth\ksdd@markboth
+ \markboth{##1}{##2}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Simple Formatting Macros}
+%
+% These are very simply defined macros for names of
+% \begin{command}{\file}
+% files,
+% \begin{macrocode}
+\newcommand*{\file}{\texttt}
+% \end{macrocode}
+% \begin{command}{\cls}
+% \changes{v0.8}{2022/02/08}{using \cs{textsf}}
+% \changes{v0.9}{2022/02/09}{using \cs{pkg} for automatic link generation}
+% classes,
+% \begin{macrocode}
+\newcommand*{\cls}{\pkg}
+% \end{macrocode}
+% \begin{command}{\pkg}
+% \changes{v0.8}{2022/02/08}{using \cs{textsf}}
+% \changes{v0.9}{2022/02/09}{automatic link generation}
+% packages (note: we cannot use \cs{ExplSyntaxOn}/\cs{ExplSyntaxOff}, because
+% \cs{href} would generate a file link),
+% \begin{macrocode}
+\NewDocumentCommand{\pkg}{sO{https://www.ctan.org/pkg/#3}m}{%
+ \IfBooleanTF{#1}{\@gobble}{%
+ \csname tl_if_blank:nTF\endcsname{#2}{\@gobble}{\href}%
+ }%
+ {#2}{\textsf{#3}}%
+}
+% \end{macrocode}
+% \begin{command}{\opt}
+% options,
+% \begin{macrocode}
+\newcommand*{\opt}{\texttt}
+% \end{macrocode}
+% \begin{command}{\optvalue}
+% option values,
+% \begin{macrocode}
+\newcommand*{\optvalue}{\texttt}
+% \end{macrocode}
+% \begin{command}{\env}
+% environments,
+% \begin{macrocode}
+\newcommand*{\env}{\texttt}
+% \end{macrocode}
+% \begin{command}{\len}
+% \changes{v0.6}{2022/02/02}{added}
+% lengths,
+% \begin{macrocode}
+\newcommand*{\len}{\cs}
+% \end{macrocode}
+% \begin{command}{\cnt}
+% counters,
+% \begin{macrocode}
+\newcommand*{\cnt}{\texttt}
+% \end{macrocode}
+% \begin{command}{\fnt}
+% fonts,
+% \begin{macrocode}
+\newcommand*{\fnt}{\texttt}
+% \end{macrocode}
+% \begin{command}{\var}
+% \changes{v0.6}{2022/02/02}{added}
+% variables,
+% \begin{macrocode}
+\newcommand*{\var}{\texttt}
+% \end{macrocode}
+% \begin{command}{\plen}
+% \changes{v0.6}{2022/02/02}{added}
+% pseudo-lengths,
+% \begin{macrocode}
+\newcommand*{\plen}{\texttt}
+% \end{macrocode}
+% \begin{command}{\pstyle}
+% \changes{v0.8}{2022/02/08}{added}
+% page styles,
+% \begin{macrocode}
+\newcommand*{\pstyle}{\texttt}
+% \end{macrocode}
+% \begin{command}{\dhook}
+% \changes{v0.91}{2022/03/10}{added}
+% do hooks.
+% \begin{macrocode}
+\newcommand*{\dhook}{\texttt}
+% \end{macrocode}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+% \end{command}
+%
+%
+% \subsection{Documentation Items}
+% \label{sec:documentationitems}
+%
+% \KOMAScript{} has several additional items beside macros and environments.
+% The old \cls*{scrdoc} class provides macros, environments, options, lengths,
+% counters, variables and fonts. But now we also distinguish internal macros
+% vs. users commands and internal lengths vs. user lengths. In this
+% documentation we additionally provide documentation items.
+%
+% \begin{docitem}{Macro}
+% \begin{command}{\DescribeMacro}
+% \begin{environment}{macro}
+% An internal macro.
+% \begin{macrocode}
+\RenewDocElement[%
+ macrolike = true,
+ toplevel = false,
+ idxtype = ,
+ idxgroup = TeX macros (internal)\actualchar\TeX{} macros (internal),
+ printtype = \textit{intern}
+]{Macro}{macro}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{Command}
+% \begin{command}{\DescribeCommand}
+% \begin{environment}{command}
+% User command.
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = true,
+ toplevel = true,
+ idxtype = ,
+ idxgroup = Commands,
+ printtype = ,
+]{Command}{command}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{Env}
+% \begin{command}{\DescribeEnv}
+% \begin{environment}{environment}
+% Environments.
+% \begin{macrocode}
+\RenewDocElement[%
+ macrolike = false,
+ toplevel = true,
+ idxtype = \textit{env.} ,
+ idxgroup = Environments,
+ printtype = \textit{env.}
+]{Env}{environment}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{Option}
+% \begin{command}{\DescribeOption}
+% \begin{environment}{option}
+% Options.
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = false,
+ toplevel = true,
+ idxtype = \textit{opt.},
+ idxgroup = Options,
+ printtype = \textit{opt.}
+]{Option}{option}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{ILength}
+% \begin{command}{\DescribeILength}
+% \begin{environment}{ilength}
+% An internal length.
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = true,
+ toplevel = false,
+ idxtype = ,
+ idxgroup = Lengths (internal),
+ printtype = \textit{ilen.}
+]{ILength}{ilength}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{Length}
+% \begin{command}{\DescribeLength}
+% \begin{environment}{length}
+% User length.
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = true,
+ toplevel = true,
+ idxtype = \textit{len.},
+ idxgroup = Lengths (user),
+ printtype = \textit{len.},
+]{Length}{length}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{Counter}
+% \begin{command}{\DescribeCounter}
+% \begin{environment}{counter}
+% User counter.
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = false,
+ toplevel = true,
+ idxtype = \textit{cnt.},
+ idxgroup = Counters,
+ printtype = \textit{cnt.},
+]{Counter}{counter}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{KOMAfont}
+% \begin{command}{\DescribeKOMAfont}
+% \begin{environment}{fontelement}
+% \KOMAScript{} font element
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = false,
+ toplevel = true,
+ idxtype = \textit{font},
+ idxgroup = KOMA-Script font elements\actualchar\KOMAScript{} font elements,
+ printtype = \textit{font},
+]{KOMAfont}{fontelement}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{KOMAvar}
+% \begin{command}{\DescribeKOMAvar}
+% \begin{environment}{variable}
+% \KOMAScript{} variable (used by \cls*{scrlttr2} and \pkg*{scrletter}).
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = false,
+ toplevel = true,
+ idxtype = \textit{var.},
+ idxgroup = KOMA-Script variables\actualchar\KOMAScript{} variables,
+ printtype = \textit{var.},
+]{KOMAvar}{variable}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{PLength}
+% \changes{v0.6}{2022/02/02}{added}
+% \begin{command}{\DescribePLength}
+% \changes{v0.6}{2022/02/02}{added}
+% \begin{environment}{peudolength}
+% \changes{v0.6}{2022/02/02}{added}
+% \KOMAScript{} pseudo-lengths (used by \cls*{scrlttr2} and \pkg*{scrletter}).
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = false,
+ toplevel = true,
+ idxtype = \textit{plen.},
+ idxgroup = KOMA-Script pseudo-lengths\actualchar\KOMAScript{} pseudo-lengths,
+ printtype = \textit{plen.},
+]{PLength}{pseudolength}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{PageStyle}
+% \changes{v0.8}{2022/02/08}{added}
+% \begin{command}{\DescribePageStyle}
+% \changes{v0.8}{2022/02/08}{added}
+% \begin{environment}{pgstyle}
+% \changes{v0.8}{2022/02/08}{added}
+% Page style.
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = false,
+ toplevel = true,
+ idxtype = \textit{pgstyle},
+ idxgroup = page styles,
+ printtype = \textit{style}
+]{PageStyle}{pgstyle}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{docitem}{DoHook}
+% \changes{v0.91}{2022/03/10}{added}
+% \begin{command}{\DescribeDoHook}
+% \changes{v0.91}{2022/03/10}{added}
+% \begin{environment}{dohook}
+% \changes{v0.91}{2022/03/10}{added}
+% Page style.
+% \begin{macrocode}
+\NewDocElement[%
+ macrolike = false,
+ toplevel = true,
+ idxtype = \textit{do hook},
+ idxgroup = do hooks,
+ printtype = \textit{dohook}
+]{DoHook}{dohook}
+% \end{macrocode}
+% \end{environment}
+% \end{command}
+% \end{docitem}
+%
+% \begin{macrocode}
+%</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: