summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/scrkernel-index.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/koma-script/scrkernel-index.dtx')
-rw-r--r--macros/latex/contrib/koma-script/scrkernel-index.dtx379
1 files changed, 379 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrkernel-index.dtx b/macros/latex/contrib/koma-script/scrkernel-index.dtx
new file mode 100644
index 0000000000..5f8182197e
--- /dev/null
+++ b/macros/latex/contrib/koma-script/scrkernel-index.dtx
@@ -0,0 +1,379 @@
+% \iffalse meta-comment
+% ======================================================================
+% scrkernel-index.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: scrkernel-index.dtx 3874 2022-06-05 10:38:02Z kohm $
+%<option>%%% (run: option)
+%<body>%%% (run: body)
+%<*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 $
+ \edef\reserved@a{%
+ \noexpand\endgroup
+ \noexpand\ProvidesFile{scrkernel-index.dtx}%
+ [\filedate\space\filerevision\space
+ KOMA-Script source
+ (index)]%
+ }%
+\reserved@a
+\documentclass[USenglish]{koma-script-source-doc}
+\usepackage{babel}
+\setcounter{StandardModuleDepth}{2}
+\begin{document}
+\DocInput{scrkernel-index.dtx}
+\end{document}
+%</dtx>
+% \fi
+%
+% \changes{v2.95}{2002/07/01}{new by splitting \file{scrclass.dtx}}
+% \changes{v3.36}{2022/02/15}{switch over from \cls*{scrdoc} to
+% \cls*{koma-script-source-doc}}
+% \changes{v3.36}{2022/02/15}{whole implementation documentation in English}
+%
+% \GetFileInfo{scrkernel-index.dtx}
+% \title{Index Code of the
+% \href{https://komascript.de}{\KOMAScript} Classes}
+% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}}
+% \date{Revision \fileversion{} of \filedate}
+% \maketitle
+% \begin{abstract}
+% The index code of the \KOMAScript{} classes in \file{scrkernel-index.dtx}
+% is somehow different from the code of the standard classes. It provides
+% several options and other configuration possibilities.
+% \end{abstract}
+% \tableofcontents
+%
+% \section{User Manual}
+%
+% You can find the user documentation the commands implemented here in the
+% \KOMAScript{} manual, either the German \file{scrguide} or the English
+% \file{scrguien}.
+%
+% \MaybeStop{\PrintIndex}
+%
+% \section{Implementation of the Index}
+%
+% The letter class \cls*{scrlttr2} does not provide an index. All other
+% classes do.
+%
+% \begin{macrocode}
+%<*!letter>
+% \end{macrocode}
+%
+%
+% \subsection{Options}
+%
+% \begin{option}{index}
+% \changes{v2.98c}{2008/03/04}{added}
+% \changes{v3.17}{2015/03/12}{internal value storage}
+% \changes{v3.18}{2015/06/15}{new value \opt{numbered}}
+% \changes{v3.18}{2015/06/15}{new value \opt{leveldown}}
+% \changes{v3.18}{2015/06/15}{new value \opt{standardlevel}}
+% \changes{v2.7a}{2001/01/04}{improved link generation with \cls*{scrbook} or
+% \cls*{scrreprt} and \pkg{hyperref}}
+% \changes{v2.98c}{2008/03/04}{redefining \cs{idx@@heading} instead of
+% \cs{idx@@heading}}
+% \changes{v3.18}{2015/06/15}{new value \opt{leveldown}}
+% The option allow several values for several features:
+% \begin{labeling}{\opt{=standardlevel}:}
+% \item[\opt{=default}:] use not numbered heading without ToC entry, but
+% without affecting the heading level;
+% \item[\opt{=totoc}:] use not numbered heading with ToC entry, but
+% without affecting the heading level;
+% \item[\opt{=numbered}:] use numbered heading (with ToC entry), but
+% without affecting the heading level;
+% \item[\opt{=leveldown}:] use a subheading (e.g. \cs{subsection} instead
+% of \cs{section} in \cls*{scrartcl}), without affecting numbered or not and
+% ToC entry or not;
+% \item[\opt{=standardlevel}:] don't use a subheading, without affecting
+% numbered or not and ToC entry or not.
+% \end{labeling}
+% To do so, the option redefines \cs{idx@heading}.
+% \begin{macro}{\idx@@heading}
+% \changes{v2.98c}{2008/03/04}{added}
+% \changes{v3.18}{2015/06/15}{using \opt{leveldown}}
+% This is the macro to print the heading of the index (nothing else). It has
+% one mandatory argument: the text to be used as heading. There will be one
+% additional code level above this: \cs{idx@heading}, that will be defined in
+% the \texttt{body} run. \cs{idx@heading} has to be defined before, so it can
+% be redefined by the \opt{index} option. In opposite to the standard classes
+% we want to use \cs{chapter} in two column mode. This can be done, because of
+% significant changes of \cs{chapter} definition. Note: If someone uses the
+% standard classes hack of package \pkg*{scrhack} or even another headings
+% package like \pkg*{titlesec} this could fail. But this is not my problem,
+% because usage of such packages and hacks is not recommended at all.
+% \begin{macrocode}
+%<*option>
+\newcommand*{\idx@@heading}{%
+ \ifidx@leveldown
+%<article> \expandafter\subsection
+%<book|report> \expandafter\section
+ \else
+%<article> \expandafter\section
+%<book|report> \expandafter\chapter
+ \fi*%
+}
+% \end{macrocode}
+% \begin{macro}{\idx@leveldowntrue,\idx@leveldownfalse,\ifidx@leveldown}
+% \changes{v3.18}{2015/06/15}{added}
+% The boolean switch \cs{ididx@leveldown} is needed to distinguish the heading
+% level to be used (option values \opt{leveldown} and \opt{standardlevel}).
+% \begin{macrocode}
+\newif\ifidx@leveldown
+\KOMA@key{index}{%
+ \KOMA@set@ncmdkey{index}{@tempa}{%
+ {notoc}{0},{nottotoc}{0},{default}{0},{plainheading}{0},%
+ {totoc}{1},{toc}{1},{notnumbered}{1},%
+ {numbered}{2},{totocnumbered}{2},{numberedtotoc}{2},{tocnumbered}{2},%
+ {numberedtoc}{2},%
+ {leveldown}{3},%
+ {standardlevel}{4}%
+ }{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \ifcase \@tempa\relax
+ \KOMA@kav@remove{.\KOMAClassFileName}{toc}{noindex}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{toc}{indexnumbered}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{toc}{index}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{notoc}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{numbered}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{toc}%
+ \KOMA@kav@add{.\KOMAClassFileName}{toc}{noindex}%
+ \KOMA@kav@add{.\KOMAClassFileName}{index}{notoc}%
+ \renewcommand*{\idx@@heading}{%
+ \ifidx@leveldown
+%<article> \expandafter\subsection
+%<book|report> \expandafter\section
+ \else
+%<article> \expandafter\section
+%<book|report> \expandafter\chapter
+ \fi*%
+ }%
+ \or
+ \KOMA@kav@remove{.\KOMAClassFileName}{toc}{noindex}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{toc}{indexnumbered}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{toc}{index}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{notoc}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{numbered}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{toc}%
+ \KOMA@kav@add{.\KOMAClassFileName}{toc}{index}%
+ \KOMA@kav@add{.\KOMAClassFileName}{index}{toc}%
+ \renewcommand*{\idx@@heading}{%
+ \ifidx@leveldown
+%<article> \expandafter\subsection\expandafter*
+%<book|report> \expandafter\addsec
+ \else
+%<article> \expandafter\addsec
+%<book|report> \expandafter\addchap
+ \fi
+ }%
+ \or
+ \KOMA@kav@remove{.\KOMAClassFileName}{toc}{noindex}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{toc}{indexnumbered}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{toc}{index}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{notoc}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{numbered}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{toc}%
+ \KOMA@kav@add{.\KOMAClassFileName}{toc}{indexnumbered}%
+ \KOMA@kav@add{.\KOMAClassFileName}{index}{numbered}%
+ \renewcommand*{\idx@@heading}{%
+ \ifidx@leveldown
+%<article> \expandafter\subsection
+%<book|report> \expandafter\section
+ \else
+%<article> \expandafter\section
+%<book|report> \expandafter\chapter
+ \fi
+ }%
+ \or
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{leveldown}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{standardlevel}%
+ \KOMA@kav@add{.\KOMAClassFileName}{index}{leveldown}%
+ \idx@leveldowntrue
+ \or
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{leveldown}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{index}{standardlevel}%
+ \KOMA@kav@add{.\KOMAClassFileName}{index}{standardlevel}%
+ \idx@leveldownfalse
+ \fi
+ \fi
+}
+\KOMA@kav@add{.\KOMAClassFileName}{toc}{noindex}
+\KOMA@kav@add{.\KOMAClassFileName}{index}{notoc}
+\KOMA@kav@add{.\KOMAClassFileName}{index}{standardlevel}
+% \end{macrocode}
+% \end{macro}^^A \ifidx@leveldown …
+% \end{macro}^^A \idx@@heading
+% \end{option}^^A index
+%
+% \begin{option}{idxtotoc}
+% \changes{v2.3h}{1995/01/21}{new}
+% \changes{v2.98c}{2008/03/04}{obsolete}
+% \changes{v3.01a}{2008/11/20}{deprecated}
+% \begin{macrocode}
+\KOMA@DeclareDeprecatedOption{idxtotoc}{index=totoc}
+%</option>
+% \end{macrocode}
+% \end{option}
+%
+%
+% \subsection{User commands and macros}
+%
+% \begin{command}{\setindexpreamble}
+% \changes{v2.6c}{2000/06/10}{added}
+% \changes{v2.6d}{2000/07/20}{\cs{let} replaced by \cs{newcommand*}}
+% \changes{v2.95}{2002/07/01}{\cs{let} and \cs{def}}
+% \begin{macro}{\index@preamble}
+% \changes{v2.6c}{2000/06/10}{added}
+% The index preamble is placed between the heading an the index itself. The
+% user can define it using \cs{setindexpreamble}. \cs{index@preamble} is the
+% storage. Note: \cs{setindexpreamble} does read the argument itself. This
+% makes it easier to patch the user level command. But because of this it has
+% to long.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\index@preamble}{}
+\let\index@preamble=\relax
+\newcommand{\setindexpreamble}[1]{\def\index@preamble{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{command}
+%
+% \begin{macro}{\idx@heading}
+% \changes{v2.3h}{1995/01/21}{added}
+% \changes{v2.4c}{1996/04/04}{handling of running heads fixed}
+% \changes{v2.4g}{1996/11/04}{two-columned index with \cls*{scrartcl} fixed}
+% \changes{v2.6c}{2000/06/10}{support for index preamble after heading}
+% \changes{v2.7j}{2001/05/27}{output of preamble moved to \env{theindex}}
+% \changes{v2.9l}{2003/01/19}{\cs{if@twoside} replaced by \cs{if@openright}}
+% \changes{v2.98c}{2008/03/04}{using \cs{idx@@heading}}
+% \changes{v3.10}{2011/08/31}{using \cs{MakeMarkcase}}
+% \changes{v3.10a}{2012/03/08}{brackets from previous change fixed}
+% \changes{v3.12}{2013/09/24}{never make an index entry to the other ToC but
+% the table of contents}
+% \changes{v3.25}{2017/10/13}{using \cs{@mkright} and \cs{@mkdouble}}
+% \changes{v3.26}{2018/09/03}{usage of \cs{addsecmark} or \cs{subsectionmark}
+% instead of \cs{@mkright}}
+% Macro to make the index heading and preamble.
+% \begin{macrocode}
+\newcommand*{\idx@heading}{%
+%<report|book> \if@openright\cleardoublepage\else\clearpage\fi%
+ \twocolumn[%
+%<report|book> \@chaptertolistsfalse
+ \idx@@heading{\indexname}]%
+ \ifidx@leveldown
+%<report|book> \addsecmark{\indexname}%
+%<*article>
+ \begingroup
+ \c@secnumdepth=-\maxdimen
+ \subsectionmark{\indexname}%
+ \endgroup
+%</article>
+ \else
+ \@mkdouble{\MakeMarkcase{\indexname}}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{theindex}
+% \changes{v2.8d}{2001/07/05}{\cs{indexpagestyle} instead of \pstyle{plain}}
+% \changes{v2.3h}{1995/01/21}{using \cs{idx@heading}}
+% \changes{v2.7j}{2001/05/27}{output of preamble added}
+% \changes{v3.19}{2015/08/25}{using \cs{indexpagestyle} only if not empty}
+% This definition is similar to the definition of the standard classes. As
+% addition it supports a preamble text, a variable heading, and resets the
+% paragraph end line fill.
+% \begin{macrocode}
+\newenvironment{theindex}{%
+ \if@twocolumn
+ \@restonecolfalse
+ \else
+ \@restonecoltrue
+ \fi
+ \columnseprule \z@
+ \columnsep 35\p@
+%<book|report> \setchapterpreamble{\index@preamble}%
+ \idx@heading
+%<article> \index@preamble\par\nobreak
+ \ifx\indexpagestyle\@empty\else\thispagestyle{\indexpagestyle}\fi
+ \parindent\z@
+ \setlength{\parskip}{\z@ \@plus .3\p@}%
+ \setlength{\parfillskip}{\z@ \@plus 1fil}%
+ \let\item\@idxitem
+}{%
+ \if@restonecol\onecolumn\else\clearpage\fi
+}
+% \end{macrocode}
+% \begin{macro}{\@idxitem}
+% A new index entry
+% \begin{command}{\subitem,\subsubitem}
+% \changes{v2.3g}{1996/01/14}{using \cs{@idxitem} saves memory}
+% sub-entry, sub-sub-entry,
+% \begin{command}{\indexspace}
+% or (vertical) distance.
+% \begin{macrocode}
+\newcommand*\@idxitem{\par\hangindent 40\p@}
+% \begin{macrocode}
+\newcommand*\subitem{\@idxitem \hspace*{20\p@}}
+\newcommand*\subsubitem{\@idxitem \hspace*{30\p@}}
+\newcommand*\indexspace{%
+ \par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax
+}
+% \end{macrocode}
+% \end{command}^^A \indexspace
+% \end{command}^^A \subitem,\subsubitem
+% \end{macro}^^A \@idxitem
+% \end{environment}^^A theindex
+%
+%
+% \subsection{Language dependent terms}
+%
+% \begin{command}{\indexname}
+% \changes{v3.36}{2022/02/15}{explicit definition for English languages}
+% The name of the index (used by \cs{idx@heading}).
+% \begin{macrocode}
+\newcommand*\indexname{Index}
+\providecaptionname{american,australian,british,canadian,english,newzealand,%
+ UKenglish,ukenglish,USenglish,usenglish}\indexname{Index}
+%</body>
+% \end{macrocode}
+% \end{command}
+%
+%
+% \begin{macrocode}
+%</!letter>
+% \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:
+