summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/tocbasic.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/tocbasic.dtx')
-rw-r--r--Master/texmf-dist/source/latex/koma-script/tocbasic.dtx1770
1 files changed, 1770 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/tocbasic.dtx b/Master/texmf-dist/source/latex/koma-script/tocbasic.dtx
new file mode 100644
index 00000000000..b75ceb7e0e2
--- /dev/null
+++ b/Master/texmf-dist/source/latex/koma-script/tocbasic.dtx
@@ -0,0 +1,1770 @@
+% \CheckSum{645}
+% \iffalse meta-comment
+% ======================================================================
+% tocbasic.dtx
+% Copyright (c) Markus Kohm, 2008
+%
+% 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.3b of the license.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3b 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 files `tocbasic.dtx' and `scrlogo.dtx' at least.
+%
+% To create `tocbasic.sty' run `tex tocbasic.dtx'. Using LaTeX instead
+% of TeX would generate the implementation documentation.
+% ----------------------------------------------------------------------
+% tocbasic.dtx
+% Copyright (c) Markus Kohm, 2008
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3b, verteilt und/oder veraendert werden.
+% Die neuste Version dieser Lizenz ist
+% http://www.latex-project.org/lppl.txt
+% und Version 1.3b ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 oder spaeter und dieses Werks.
+%
+% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
+% (allein durch den Autor verwaltet).
+%
+% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
+%
+% Dieses Werk besteht mindestens aus den Dateien `tocbasic.dtx' und
+% `scrlogo.dtx'.
+%
+% `tocbasic.sty' kann durch den Aufruf `tex tocbasic.dtx' erzeugt
+% werden. Bei Verwendung von LaTeX statt TeX wird hingegen die
+% Implementierungsdokumentation erzeugt.
+% ======================================================================
+% \fi
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \iffalse
+%%% From File: tocbasic.dtx
+%<*dtx|package|driver|doc|load>
+% \fi
+\def\tocbasicversion{2008/10/06 v1.0}
+% \iffalse
+%</dtx|package|driver|doc|load>
+%<*dtx>
+\def\LaTeXformat{LaTeX2e}
+\ifx\fmtname\LaTeXformat\def\MainBodyWork{%
+\ProvidesFile{tocbasic.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+%<driver>\ProvidesFile{tocbasic.drv}
+%<doc>\ProvidesFile{tocbasic.tex}
+%<package>\ProvidesPackage{tocbasic}
+%<*dtx|package|driver|doc>
+ [\tocbasicversion
+%</dtx|package|driver|doc>
+%<driver> (driver)%
+%<package> (package)%
+%<doc> (manual)%
+%<*dtx>
+ (dtx)%
+%</dtx>
+%<*dtx|package|driver|doc>
+ ]
+%</dtx|package|driver|doc>
+%<*dtx|driver>
+\IfFileExists{scrdoc.cls}{%
+ \documentclass[halfparskip-]{scrdoc}
+}{%
+ \documentclass{ltxdoc}
+ \DeclareRobustCommand{\KOMAScript}{\textsf{K\kern.05em O\kern.05em%
+ M\kern.05em A\kern.1em-\kern.1em Script}}
+}
+\usepackage[latin1]{inputenc}
+\usepackage[english]{babel}
+\usepackage{listings}
+\lstset{breaklines,prebreak=\mbox{$\hookleftarrow$},language=[LaTeX]TeX,
+ basicstyle=\small}
+\CodelineIndex
+\RecordChanges
+\GetFileInfo{tocbasic.dtx}
+\sloppy
+\DocInput{\filename}
+\end{document}
+%</dtx|driver>
+%<*dtx>
+}%
+\else
+ \let\MainBodyWork\relax
+\fi
+
+\MainBodyWork
+
+\def\batchfile{tocbasic.dtx}
+%</dtx>
+%<ins>\def\batchfile{tocbasic.ins}
+%<*dtx|ins>
+\input docstrip.tex
+
+\let\ifbeta=\iffalse
+
+\ifToplevel{\ifx\generate\undefined
+ \errhelp{Install a new version of docstrip.}
+ \errmessage{Old docstrip in input path}
+ \batchmode
+ \csname @@end\endcsname
+ \fi
+ \Msg{************************************************************}
+ \Msg{*}
+ \Msg{* KOMA-Script}
+ \Msg{* a versatile LaTeX2e bundle}
+ \Msg{*}
+ \Msg{* This is `\batchfile', a batchfile to unpack some or all}
+ \Msg{* parts of KOMA-Script. See `liesmich.txt' (german) or}
+ \Msg{* `readme.txt' (english) for additional information.}
+ \Msg{*}
+ \Msg{* Files of an old KOMA-Script installation may be}
+ \Msg{* overwritten without asking!}
+ \Msg{*}
+ \Msg{************************************************************}
+}
+
+% ---------- some docstrip switchs -------------------------------------
+
+\ifToplevel{%
+ \keepsilent
+ \askforoverwritefalse
+}
+
+% ---------- defining preambles ----------------------------------------
+
+\preamble
+
+Copyright (c) 2007-2008
+Markus Kohm and any individual authors listed elsewhere in this file.
+
+This file was generated from file(s) of the KOMA-Script bundle.
+---------------------------------------------------------------
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, version 1.3b of the license.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3b 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 file may only be distributed together with the files
+`scrlogo.dtx' and `tocbasic.dtx'. You may however distribute the files
+`scrlogo.dtx' and `tocbasic.dtx' without this file.
+See also `tocbasic.dtx' for additional information.
+
+If this file is a beta version, you are not allowed to distribute it.
+
+Currently there is only a short english manual at `tocbasic.dtx', that
+should also be found as `tocbasic.pdf'.
+
+The KOMA-Script bundle (but maybe not this file) was based upon the
+LaTeX2.09 Script family created by Frank Neukam 1993 and the LaTeX2e
+standard classes created by The LaTeX3 Project 1994-1996.
+
+\endpreamble
+
+% ---------- File generation -------------------------------------------
+
+\generate{\usepreamble\defaultpreamble
+ \file{tocbasic.ins}{%
+ \from{tocbasic.dtx}{ins}%
+ }%
+% \file{tocbasic.drv}{%
+% \from{tocbasic.dtx}{driver}%
+% }%
+ \file{tocbasic.tex}{%
+ \from{tocbasic.dtx}{doc}%
+ }%
+}
+
+\generate{\usepreamble\defaultpreamble
+ \file{tocbasic.sty}{%
+ \ifbeta\from{scrbeta.dtx}{package,tocbasic}\fi
+ \from{tocbasic.dtx}{package}%
+ \from{scrlogo.dtx}{logo}%
+ }%
+}%
+
+% ---------- end of docstrip process -----------------------------------
+
+\ifToplevel{%
+ \Msg{************************************************************}
+ \Msg{*}
+ \Msg{* KOMA-Script}
+ \Msg{* a versatile LaTeX2e bundle}
+ \Msg{*}
+ \Msg{* To finish the installation you have to move some}
+ \Msg{* files into a directory searched by TeX.}
+ \Msg{* See INSTALL.TXT (english) or INSTALLD.TXT (german)}
+ \Msg{* from KOMA-Script bundle for additional information.}
+ \Msg{*}
+ \Msg{* You may also produce the implementation documentation}
+ \Msg{* including also a short version of the english manual.}
+ \Msg{* To produce it, do}
+ \Msg{* \space\space pdflatex tocbasic.dtx}
+ \Msg{* \space\space mkindex tocbasic}
+ \Msg{* \space\space pdflatex tocbasic.dtx}
+ \Msg{* after finishing the installation.}
+ \Msg{*}
+ \Msg{* Happy TeXing}
+ \Msg{*}
+ \Msg{************************************************************}
+}
+
+\bye
+%</dtx|ins>
+%<*dtx>
+% \fi
+%
+% \providecommand*{\DescribeCounter}{\DescribeMacro}
+% \let\Macro\cs
+% \let\Class\textsf
+% \let\Package\textsf
+% \let\File\texttt
+% \let\Parameter\marg
+% \let\OParameter\oarg
+% \let\PName\meta
+% \let\PValue\texttt
+% \newenvironment{Example}{\quote
+% \hspace*{-\leftmargin}\textbf{Example:}\enskip\ignorespaces
+% }{\endquote}
+% \newlength\descwidth
+% \newenvironment{desctabular}{
+% \setlength{\descwidth}{\linewidth}
+% \addtolength{\descwidth}{-1em}
+% \addtolength{\descwidth}{-2\tabcolsep}
+% \tabular{@{}lp{\descwidth}@{}}
+% \hline
+% }{%
+% \hline
+% \endtabular
+% }
+% \newcommand{\pventry}[2]{\multicolumn{2}{@{}l@{}}{\PValue{#1}}\\
+% ~ & #2 \\ }
+% \providecommand*{\autoref}[1]{\expandafter\AUTOREF#1:}
+% \newcommand*{\AUTOREF}{}
+% \makeatletter
+% \def\AUTOREF#1:#2:{\edef\@tempa{#1}\edef\@tempb{tab}\ifx\@tempa\@tempb
+% table~\fi
+% \edef\@tempb{sec}\ifx\@tempa\@tempb section~\fi
+% \ref{#1:#2}}
+% \makeatother
+%
+% \begin{document}
+% \title{\KOMAScript{} \partname\ \texttt{\filename}%
+% \thanks{Diese Datei ist Version \fileversion\ von \texttt{\filename}.}}
+% \date{\filedate}
+% \author{Markus Kohm\thanks{mailto:komascript(at)gmx.info}}
+% \maketitle
+% \begin{abstract}
+% \iffalse
+%</dtx>
+%<*doc>
+
+\chapter{Package \Package{tocbasic} for Class and Package Authors}
+\labelbase{tocbasic}
+
+\textsc{Note: This is only a short version of the documentation. The german
+ \KOMAScript{} guide does contain a long version with usefull examples, that
+ should also be translated!}
+
+%</doc>
+%<*doc|dtx>
+% \fi
+If a package creates it's list ``list of something''---something like ``list
+of figures'', ``list of tables'', ``list of listings'', ``list of
+algorithms'', etc. also known as \emph{toc-files}---have to do some
+operations, that are equal for all those packages. Also it may be usefull
+for classes and other packages to know about these additional
+toc-files. This packages implements some basic functionality for all those
+packages. Using this package will also improve compatibility with
+\KOMAScript{} and---let us hope---other classes and packages.
+% \iffalse
+%<*dtx>
+% \fi
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \iffalse
+%</dtx>
+% \fi
+%
+
+\section{Legal Note}
+\label{sec:tocbasic.legalnote}
+
+You are allowed to destribute this part of \KOMAScript{} without the main
+part of \KOMAScript{}. The files ``\File{scrlogo.dtx}'' and
+``\File{tocbasic.dtx}'' may be distributed together under the conditions
+of the \LaTeX{} Project Public License, either version~1.3b of this license
+or (at your option) any later version.
+
+The latest version of this license is in
+\mbox{http://www.latex-project.org/lppl.txt} and version~1.3b or later is
+part of all distributions of \LaTeX{} version~2005/12/01 or later.
+
+% \iffalse
+%<*dtx>
+% \fi
+% \KOMAScript{} comes with a detailed manual in English and German. But for
+% this package theres currently only this short English manual, because this
+% package should be used by package authors, not users.
+%
+% The \KOMAScript{} bundle may be found at
+% CTAN:/\mbox{macros}/\linebreak[3]\mbox{latex}/\linebreak[3]\mbox{contrib}/%
+% \linebreak[3]\mbox{koma-script}/.
+% ``CTAN:'' is a shortcut for every ``tex-archive'' directory at every
+% CTAN-server or CTAN-mirror. See \mbox{http://www.ctan.org} for a list of all
+% those servers and mirrors.
+% \iffalse
+%</dtx>
+% \fi
+
+\section{Using Package \Package{tocbasic}}
+\label{sec:tocbasic.usage}
+
+This package was made to be used by class and package authors. Because of
+this the package has no options. If different packages would load it with
+different options a option clash would be the result. So using options
+would'nt be a good idea.
+
+There are two kind of commands. The first kind are basic command. Those
+are used to inform other packages about the extensions used for files that
+represent a list of something. Classes or packages may use this information
+e.g, for putting something to every of those files. Packages may also ask,
+if an extension is already in use. This does even work, if \Macro{nofiles}
+was used. The second kind are commands to create the list of something.
+
+
+\subsection{Basic Commands}
+\label{sec:tocbasic.basics}
+
+Basic commands are used to handle a list of all extensions known for files
+representing a list of something. Entries to such files are written using
+\Macro{addtocontents} or \Macro{addcontentsline} typically. There are also
+commands to do something for all known extensions. And there are commands to
+set or unset features of an extension or the file represented by the
+extension. Typically an extension also has an owner. This owner may be a
+class or package or a term decided by the author of the class or package
+using \Package{tocbasic}, e.g., \KOMAScript{} uses the owner \texttt{float}
+for list of figures ans list of tables and the default owner for the table of
+contents.
+
+% \iffalse
+\begin{Declaration}
+ \Macro{ifattoclist}\Parameter{extension}\Parameter{true
+ part}\Parameter{false part}
+\end{Declaration}
+\BeginIndex{Cmd}{ifattoclist}%
+This command
+%<*dtx>
+%\fi
+\DescribeMacro{\ifattoclist}
+Command \Macro{ifattoclist}\Parameter{extension}\Parameter{true
+ part}\Parameter{false part}
+% \iffalse
+%</dtx>
+% \fi
+may be used to ask, wether a \PName{extension} is already a known extension or
+not. If the \PName{extension} is already known the \PName{true part} will be
+used, otherwise the \PName{false part} will be used.
+\begin{Example}
+ Maybe you want to know if the extension ``\File{foo}'' is already in use to
+ report an error, if you can not use it:
+ \begin{lstlisting}
+ \ifattoclist{foo}{%
+ \PackageError{bar}{%
+ extension `foo' already in use%
+ }{%
+ Each extension may be used only
+ once.\MessageBreak
+ The class or another package already
+ uses extension `foo'.\MessageBreak
+ This error is fatal!\MessageBreak
+ You should not continue!}%
+ }{%
+ \PackageInfo{bar}{using extension `foo'}%
+ }
+ \end{lstlisting}
+\end{Example}
+% \iffalse
+\EndIndex{Cmd}{ifattoclist}%
+
+\begin{Declaration}
+ \Macro{addtotoclist}\OParameter{owner}\Parameter{extension}
+\end{Declaration}
+\BeginIndex{Cmd}{addtotoclist}%
+This command
+%<*dtx>
+%\fi
+\DescribeMacro{\addtotoclist}
+Command \Macro{addtotoclist}\OParameter{owner}\Parameter{extension}
+% \iffalse
+%</dtx>
+% \fi
+adds the \PName{extension} to the list of known extensions. If the optional
+argument, \OParameter{owner}, was given this \PName{owner} will be stored to
+be the owner of the \PName{extension}. If you omit the optional argument,
+\Package{tocbasic} tries to find out the filename of the current processed
+class or package and stores this as owner. This will fail if
+\Macro{addtotoclist} was not used, loading a class or package but using a
+command of a class or package after loading this class or package. In this
+case the owner will be set to ``\PValue{.}''. Note that an empty
+\PName{owner} is not the same like omitting the optional argument, but an
+empty owner.
+
+\begin{Example}
+ You want to add the extension ``\File{foo}'' to the list of known extension,
+ while loading your package with file name ``\File{bar.sty}'':
+ \begin{lstlisting}
+ \addtotoclist{foo}
+ \end{lstlisting}%
+ This will add the extension ``\PValue{foo}'' with owner ``\PValue{bar.sty}''
+ to the list of known extensions, if it was not already at the list of known
+ extensions. If the class or another package already added the extension you
+ will get the error:
+ \begin{lstlisting}
+ Package tocbasic Error: file extension `#2' cannot be used twice
+
+ See the tocbasic package documentation for explanation.
+ Type H <return> for immediate help.
+ \end{lstlisting}
+ and after typing \texttt{H <return>} you will get the help:
+ \begin{lstlisting}
+ File extension `foo' is already used by a toc-file, while bar.sty
+ tried to use it again for a toc-file.
+ This may be either an incompatibility of packages, an error at a package,
+ or a mistake by the user.
+ \end{lstlisting}
+
+ Maybe you package has a command, that creates list of files dynamically. In
+ this case you should use the optional argument of \Macro{addtotoclist} to
+ set the owner.
+ \begin{lstlisting}
+ \newcommand*{\createnewlistofsomething}[1]{%
+ \addtotoclist[bar.sty]{#1}%
+ % Do something more to make this list of something available
+ }
+ \end{lstlisting}
+ If the user calls know, e.g.
+ \begin{lstlisting}
+ \createnewlistofsomething{foo}
+ \end{lstlisting}
+ this would add the extension ``\PValue{foo}'' with the owner
+ ``\PValue{bar.sty}'' to the list of known extension or report an error, if the
+ extension is already in use. You may use any owner you want. But it should
+ be unique! So, if you are the author of package \Package{float} you may
+ use for example owner ``\PValue{float}'' instead of owner
+ ``\PValue{float.sty}'', so the \KOMAScript{} options for list of figure and
+ list of table will also handle the lists of this package, that are already
+ added to the known extensions, when the option is used.
+\end{Example}
+% \iffalse
+\EndIndex{Cmd}{addtotoclist}%
+
+\begin{Declaration}
+ \Macro{AtAddToTocList}\OParameter{owner}\Parameter{commands}
+\end{Declaration}
+\BeginIndex{Cmd}{AtAddToTocList}%
+This command
+%<*dtx>
+%\fi
+\DescribeMacro{\AtAddtoTocList}
+Command \Macro{AtAddToTocList}\OParameter{owner}\Parameter{commands}
+% \iffalse
+%</dtx>
+% \fi
+adds the \PName{commands} to a internal list of commands, that should be
+processed, if a toc-file with the given \PName{owner} will be added to the
+list of known extensions using \Macro{addtoloclist}. If you omit the optional
+argument, \Package{tocbasic} tries to find out the filename of the current
+processed class or package and stores this as owner. This will fail if
+\Macro{AtAddToTocList} was not used, loading a class or package but using a
+command of a class or package after loading this class or package. In this
+case the owner will be set to ``\PValue{.}''. Note that an empty
+\PName{owner} is not the same like omitting the optional argument. With an
+empty \PName{owner} you may add \Parameter{commands}, that will be processed
+at every succefull \Macro{addtotoclist}, after processing the commands for the
+indivdual owner. While processing the \PValue{commands}, \Macro{@currext} wil
+be set to the extension of the currently added extension.
+\begin{Example}
+\Package{tocbasic} itself uses
+\begin{lstlisting}
+ \AtAddToTocList[]{%
+ \expandafter\tocbasic@extend@babel
+ \expandafter{\@currext}%
+ }
+\end{lstlisting}
+to add every extension to the \Package{tocbasic}-internal babel handling of
+toc-files. The \Macro{expandafter} are needed, because the argument of
+\Macro{tocbasic@extend@babel} has to expanded! See the description of
+\Macro{tocbasic@extend@babel} at \autoref{sec:tocbasic.internals}%
+% \iffalse
+, \autopageref{desc:tocbasic.cmd.tocbasic@extend@babel}
+% \fi
+for more information.
+\end{Example}
+% \iffalse
+\EndIndex{Cmd}{AtAddToTocList}%
+
+\begin{Declaration}
+ \Macro{removefromtoclist}\OParameter{owner}\Parameter{extension}
+\end{Declaration}
+\BeginIndex{Cmd}{removefromtoclist}%
+This command
+%<*dtx>
+%\fi
+\DescribeMacro{\removefromtoclist}
+Command \Macro{removefromtotoclist}\OParameter{owner}\Parameter{extension}
+% \iffalse
+%</dtx>
+% \fi
+removes the \PName{extension} from the list of known extensions. If the
+optional argument, \OParameter{owner}, was given the \PName{extension} will
+only be removed, if it was added by this \PName{owner}. If you omit the
+optional argument, \Package{tocbasic} tries to find out the filename of the
+current processed class or package and use this as owner. This will fail if
+\Macro{removefromtoclist} was not used, loading a class or package but using a
+command of a class or package after loading this class or package. In this
+case the owner will be set to ``\PValue{.}''. Note that an empty
+\PName{owner} is not the same like omitting the optional argument, but removes
+the \PName{extension} without any owner test.
+% \iffalse
+\EndIndex{Cmd}{removefromtoclist}%
+
+\begin{Declaration}
+ \Macro{doforeachtocfile}\OParameter{owner}\Parameter{commands}
+\end{Declaration}
+\BeginIndex{Cmd}{doforeachtocfile}%
+This command
+%<*dtx>
+% \fi
+\DescribeMacro{\doforeachtocfile}
+Command \Macro{doforeachtocfile}\OParameter{owner}\Parameter{commands}
+% \iffalse
+%</dtx>
+% \fi
+processes \PName{commands} for every known toc-file of the given
+\PName{owner}. While processing the \PName{commands} \Macro{@currext} ist the
+extension of the current toc-file for every known toc-file. If you omit the
+optional argument, \OParameter{owner}, every known toc-file will be used. If
+the optional argument is empty, only toc-files with an empty owner will be
+used.
+\begin{Example}
+ If you want to type out all known extensions, you may simply write:
+ \begin{lstlisting}
+ \doforeachtocfile{\typeout{\@currext}}
+ \end{lstlisting}
+ and if only the extensions of owner ``\PValue{foo}'' should be typed out:
+ \begin{lstlisting}
+ \doforeachtocfile[foo]{\typeout{\@currext}}
+ \end{lstlisting}
+\end{Example}
+% \iffalse
+\EndIndex{Cmd}{doforeachtocfile}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\tocbasicautomode}
+Command
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{tocbasicautomode}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{tocbasicautomode}%
+This command
+% \fi
+redefines \LaTeX{} kernel macro \Macro{@starttoc} to add all not yet added
+extensions to the list of known extensions and use \Macro{tocbasic@starttoc}
+instead of \Macro{@starttoc}.
+% \iffalse
+\EndIndex{Cmd}{tocbasicautomode}%
+% \fi
+
+\subsection{Creating a List of Something}
+\label{sec:tocbasic.more}
+
+At the previous section you've seen commands to handle a list of known
+extensions and to trigger commands while adding a new extension to this
+list. You've also seen a command to do something for all known extensions or
+all known extensions of one owner. In this section you will see commands to
+handle the file corresponding with an extension or the list of known
+extensions.
+
+% \iffalse
+\begin{Declaration}
+ \Macro{addtoeachtocfile}\OParameter{owner}\Parameter{contents}
+\end{Declaration}
+\BeginIndex{Cmd}{addtoeachtocfile}%
+This command
+%<*dtx>
+% \fi
+\DescribeMacro{\addtoeachtocfile}
+Command \Macro{addtoeachtocfile}\OParameter{owner}\Parameter{contents}
+% \iffalse
+%</dtx>
+% \fi
+writes \PName{contents} to every known toc-file of \PName{owner}. If you omit
+the optional argument, \PName{contents} it written to every known
+toc-file. While writing the contents, \Macro{@currext} is the extension of
+the currently handled toc-file.
+\begin{Example}
+ You may add a vertical space of one text line to all toc-files.
+ \begin{lstlisting}
+ \addtoeachtocfile{%
+ \protect\addvspace{\protect\baselineskip}%
+ }
+ \end{lstlisting}
+ And if you want to do this, only for the toc-files of owner
+ ``\PValue{foo}'':
+ \begin{lstlisting}
+ \addtoeachtocfile[foo]{%
+ \protect\addvspace{\protect\baselineskip}%
+ }
+ \end{lstlisting}
+\end{Example}
+% \iffalse
+\EndIndex{Cmd}{addtoeachtocfile}%
+
+\begin{Declaration}
+ \Macro{addcontentslinetoeachtocfile}\OParameter{owner}\Parameter{level}%
+ \Parameter{contentsline}
+\end{Declaration}
+\BeginIndex{Cmd}{addcontentslinetoeachtocfile}%
+This command
+%<*dtx>
+% \fi
+\DescribeMacro{\addcontentslinetoeachfile}
+Command \Macro{addcontentslinetoeachtocfile}\OParameter{owner}%^^A
+\Parameter{level}\Parameter{contentsline}
+% \iffalse
+%</dtx>
+% \fi
+is something like \Macro{addcontentsline} not only for one file, but all known
+toc-files or all known toc-files of a given owner.
+\begin{Example}
+ You are a class author and want to write the chapter entry not only to the
+ table of contents toc-file but to all toc-files, while \texttt{\#1} is the
+ title, that should be written to the files.
+ \begin{lstlisting}
+ \addcontentslinetoeachtocfile{chapter}{%
+ \protect\numberline{\thechapter}#1}
+ \end{lstlisting}
+\end{Example}
+% \iffalse
+\EndIndex{Cmd}{addcontentslinetoeachtocfile}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\listoftoc}
+\DescribeMacro{\listoftoc*}
+Commands
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{listoftoc*}\Parameter{extension}
+% \iffalse
+\\
+%<*dtx>
+% \fi
+and
+% \iffalse
+%</dtx>
+% \fi
+ \Macro{listoftoc}\OParameter{list of title}\Parameter{extension}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{listoftoc*}%
+\BeginIndex{Cmd}{listoftoc}%
+This commands
+% \fi
+may be used to set the ``list of'' of a toc-file. The star version
+\Macro{listoftoc*} needs only one argument, the extension of the toc-file. It
+does setup the vertical and horizontal spacing of paragraphs, calls before and
+after hooks and reads the toc-file. You may use it as direct replacement of
+the \LaTeX{} kernel macro \Macro{@starttoc}.
+
+The version without star, sets the whole toc-file with title, optional table
+of contents entry, and running heads. If the optional argument
+\OParameter{list of title} was given, it will be used as title term, optional
+table of contents entry and running head. Note: If the optional argument is
+empty, this term will be empty, too! If you omit the optional argument, but
+\Macro{listof\PName{extension}name} was defined, that will be used.
+
+\begin{Example}
+ You have a new ``list of algorithms'' with extension \PValue{loa} and want to
+ show it.
+ \begin{lstlisting}
+ \listof[list of algorithm]{loa}
+ \end{lstlisting}
+ Maybe you want, that the ``list of algorithms'' will create an entry at the
+ table of contents. You may set
+ \begin{lstlisting}
+ \setuptoc{loa}{totoc}
+ \end{lstlisting}
+ But maybe the ``list of algorithms'' should not be set with a title. So you
+ may use
+ \begin{lstlisting}
+ \listof*{loa}
+ \end{lstlisting}
+ Note that in this case no entry at the table of contents will be created,
+ even if you'd used the setup command above.
+\end{Example}
+
+The default heading new following features using \Macro{setuptoc}:
+\begin{description}
+\item[\texttt{totoc}] writes the title of the list of to the table of contents
+\item[\texttt{numbered}] uses a numbered headings for the list of
+\item[\texttt{leveldown}] uses not the top level heading (e.g., \Macro{chapter}
+ with book) but the first sub level (e.g., \Macro{section} with book).
+\end{description}
+% \iffalse
+\EndIndex{Cmd}{listoftoc*}%
+\EndIndex{Cmd}{listoftoc}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\BeforeStartingTOC}
+\DescribeMacro{\AfterStartingTOC}
+The Commands
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{BeforeStartingTOC}\OParameter{extension}\Parameter{commands}
+% \iffalse
+\\
+%<*dtx>
+% \fi
+and
+% \iffalse
+%</dtx>
+% \fi
+ \Macro{AfterStartingTOC}\OParameter{extension}\Parameter{commands}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{BeforeStartingTOC}%
+\BeginIndex{Cmd}{AfterStartingTOC}%
+This commands
+% \fi
+may be used to process \PName{commands} before or after loading the toc-file
+with given \PName{extension} using \Macro{listoftoc*} or \Macro{listoftoc}. If
+you omit the optional argument (or set an empty one) the general hooks will be
+set. The general before hook will be called before the individuel one and the
+general after hook will be called after the individuel one. While calling the
+hooks \Macro{@currext} is the extension of the toc-file and should not be
+changed.
+% \iffalse
+\EndIndex{Cmd}{AfterStartingTOC}%
+\EndIndex{Cmd}{BeforeStartingTOC}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\BeforeTOCHead}
+\DescribeMacro{\AfterTOCHead}
+The Commands
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{BeforeTOCHead}\OParameter{extension}\Parameter{commands}
+% \iffalse
+\\
+%<*dtx>
+% \fi
+and
+% \iffalse
+%</dtx>
+% \fi
+ \Macro{AfterTOCHead}\OParameter{extension}\Parameter{commands}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{BeforeTOCHead}%
+\BeginIndex{Cmd}{AfterTOCHead}%
+This commands
+% \fi
+may be used to process \PName{commands} before or after setting the title of a
+toc-file with given \PName{extension} using \Macro{listoftoc*} or
+\Macro{listoftoc}. If you omit the optional argument (or set an empty one) the
+general hooks will be set. The general before hook will be called before the
+individuel one and the general after hook will be called after the individuel
+one. While calling the hooks \Macro{@currext} is the extension of the toc-file
+and should not be changed.
+% \iffalse
+\EndIndex{Cmd}{AfterTOCHead}%
+\EndIndex{Cmd}{BeforeTOCHead}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\listofeachtoc}
+Command
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{listofeachtoc}\OParameter{owner}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{listofeachtoc}%
+This command
+% \fi
+sets all toc-files or all toc-files of the given \PName{owner} using
+\Macro{listoftoc}. You should have defined
+\Macro{listof\PName{extension}name} for each toc-file, otherwise you'll get a
+warning.
+% \iffalse
+\EndIndex{Cmd}{listofeachtoc}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\MakeMarkcase}
+Command
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{MakeMarkcase}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{MakeMarkcase}%
+This command
+% \fi
+will be used to change the case of the letters at the running
+head. The default is, to use \Macro{@firstofone} for \KOMAScript{} classes and
+\Macro{MakeUppercase} for all other classes. If you are the class author you
+may define \Macro{MakeMarkcase} on your own. If \Package{scrpage2} or another
+package, that defines \Macro{MakeMarkcase} will be used, \Package{tocbasci}
+will not overwrite that Definition.
+% \iffalse
+\EndIndex{Cmd}{MakeMarkcase}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\deftocheading}
+Command
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{deftocheading}\Parameter{extension}\Parameter{definition}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{deftocheading}%
+This command
+% \fi
+defines a heading command, that will be used instead of the
+default heading using \Macro{listoftoc}. The heading command has exactly one
+argument. You may reference to that argument using \texttt{\#1} at your
+\PName{defintion}.
+% \iffalse
+\EndIndex{Cmd}{deftocheading}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\setuptoc}
+\DescribeMacro{\unsettoc}
+The Commands
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{setuptoc}\Parameter{extension}\Parameter{featurelist}
+% \iffalse
+\\
+%<*dtx>
+% \fi
+and
+% \iffalse
+%</dtx>
+% \fi
+ \Macro{unsettoc}\Parameter{extension}\Parameter{featurelist}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{setuptoc}%
+\BeginIndex{Cmd}{unsettoc}%
+This commands
+% \fi
+set up and unset features binded to an \PName{extension}. The
+\PName{featurelist} is a comma seperated list of single
+features. \Package{tocbasic} does know following features:
+\begin{description}
+\item[\texttt{totoc}] writes the title of the list of to the table of contents
+\item[\texttt{numbered}] uses a numbered headings for the list of
+\item[\texttt{leveldown}] uses not the top level heading (e.g., \Macro{chapter}
+ with book) but the first sub level (e.g., \Macro{section} with book).
+\item[\texttt{nobabel}] prevents the extension to be added to the babel
+ handling of toc-files. To make this work, you have to set the feature
+ before adding the extension to the list of known extension.
+\end{description}
+Classes and packages may know features, too, e.g, the \KOMAScript{} classes
+know following additional features:
+\begin{description}
+\item[\texttt{chapteratlist}] activates special code to be put into the list
+ at start of a new chapter. This code may either be vertical space or the
+ heading of the chapter.
+\end{description}
+% \iffalse
+\EndIndex{Cmd}{unsettoc}%
+\EndIndex{Cmd}{setuptoc}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\iftocfeature}
+Command
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{iftocfeature}\Parameter{extension}\Parameter{feature}%^^A
+ \Parameter{true-part}\Parameter{false-part}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{iftocfeature}%
+This command
+% \fi
+may be used, to test, if a \PName{feature} was set for \PName{extension}. If
+so the \PName{true-part} will be processed, otherwise the \PName{false-part}
+will be.
+% \iffalse
+\EndIndex{Cmd}{iftocfeature}%
+% \fi
+
+
+\subsection{Internal Commands for Class and Package Authors}
+\label{sec:tocbasic.internals}
+
+Commands with prefix \Macro{tocbasic@} are internal but class and package
+authors may use them. But even if you are a class or package author you
+should not change them!
+
+% \iffalse
+%<*dtx>
+% \fi
+\DescribeMacro{\tocbasic@extend@babel}
+Command
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{tocbasic@extend@babel}\Parameter{extension}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{tocbasic@extend@babel}%
+This command
+% \fi
+extends the babel handling of toc-files. By default babel writes language
+selections only to \PValue{toc}, \PValue{lot} and
+\PValue{lof}. \Package{tocbasic} adds every \PName{extension} added to the
+list of known extensions (see \Macro{addtotoclist}, \autoref{sec:tocbasic.basics}%
+% \iffalse
+, \autopageref{desc:tocbasic.cmd.addtotoclist}%
+% \fi
+) using \Macro{tocbasic@extend@babel}. Note: This should be called only once
+per \PName{extension}. \Macro{tocbasic@extend@babel} does nothing, if the
+feature \PValue{nobabel} was set for \PName{extension} before using
+\Macro{addtotoclist}.
+% \iffalse
+\EndIndex{Cmd}{tocbasic@extend@babel}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\tocbasic@starttoc}
+Command
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{tocbasic@starttoc}\Parameter{extension}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{tocbasic@starttoc}
+This command is something like the \LaTeX{} kernel macro \Macro{@starttoc},
+but does some additional settings before using \Macro{@starttoc}. It does set
+\Macro{parskip} zu zero, \Macro{parindent} to zero, \Macro{parfillskip} to
+zero plus one fil, \Macro{@currext} to the \PName{extension}, and processes
+hooks before and after reading the toc-file.
+\EndIndex{Cmd}{tocbasic@starttoc}
+% \fi
+%
+
+
+% \iffalse
+%<*dtx>
+% \fi
+\DescribeMacro{\tocbasic@@before@hook}
+\DescribeMacro{\tocbasic@@after@hook}
+\def\\{ and }%^^A
+Macros
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{tocbasic@@before@hook}\\
+ \Macro{tocbasic@@after@hook}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{tocbasic@@before@hook}%
+\BeginIndex{Cmd}{tocbasic@@after@hook}%
+This macros
+% \fi
+are processed before and after loading a toc-file. If you don't use
+\Macro{listoftoc} or \Macro{listoftoc*} or \Macro{tocbasic@starttoc} to load
+the toc-file, you should call these, too. But you should not redefine them!
+% \iffalse
+\EndIndex{Cmd}{tocbasic@@before@hook}%
+\EndIndex{Cmd}{tocbasic@@after@hook}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\tocbasic@\PName{extension}@before@hook}
+\DescribeMacro{\tocbasic@\PName{extension}@after@hook}
+\def\\{ and }%^^A
+Macros
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{tocbasic@\PName{extension}@before@hook}\\
+ \Macro{tocbasic@\PName{extension}@after@hook}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{tocbasic@\PName{extension}@before@hook}%
+\BeginIndex{Cmd}{tocbasic@\PName{extension}@after@hook}%
+This macros
+% \fi
+are processed before and after loading a toc-file. If you don't use
+\Macro{listoftoc} or \Macro{listoftoc*} or \Macro{tocbasic@starttoc} to load
+the toc-file, you should call these, too. But you should not redefine them!
+The first macro is processed just before \Macro{tocbasic@@before@hook}, the
+second one just after \Macro{tocbasic@@after@hook}
+% \iffalse
+\EndIndex{Cmd}{tocbasic@\PName{extension}@after@hook}%
+\EndIndex{Cmd}{tocbasic@\PName{extension}@before@hook}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\tocbasic@listhead}
+Command
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{tocbasic@listhead}\Parameter{title}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{tocbasic@listhead}%
+This command
+% \fi
+is used by \Macro{listoftoc} to set the heading of the list, either the
+default heading or the indiviually defined heading. If you define your own
+list command not using \Macro{listoftoc} you may use
+\Macro{tocbasic@listhead}. In this case you should define \Macro{@currext} to
+be the extension of the toc-file before using \Macro{tocbasic@listhead}.
+% \iffalse
+\EndIndex{Cmd}{tocbasic@listhead}%
+
+%<*dtx>
+% \fi
+\DescribeMacro{\tocbasic@listhead@\PName{extension}}
+Command
+% \iffalse
+%</dtx>
+\begin{Declaration}
+% \fi
+ \Macro{tocbasic@listhead@\PName{extension}}\Parameter{title}
+% \iffalse
+\end{Declaration}
+\BeginIndex{Cmd}{tocbasic@listhead@\PName{extension}}%
+This command
+% \fi
+is used in \Macro{tocbasic@listhead} to set the individual headings, optional
+toc-entry, and running head, if it was defined. If it was not defined it will
+be defined and used in \Macro{tocbasic@listhead}.
+% \iffalse
+\EndIndex{Cmd}{tocbasic@listhead@\PName{extension}}%
+%</doc|dtx>
+% \fi
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+%
+% \section{Implementation}
+% \label{sec:implementation}
+%
+% All macros with prefix \texttt{tb@} or \texttt{@} are internal macros and
+% should not be used by package and class authors. Macros with prefix
+% \texttt{tocbasic@} are internal macros, that may be used by class and
+% packages authors. Macros without \texttt{@} are interface macros and may be
+% used by class and package authors and users.
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \subsection{Options}
+% \label{sec:options}
+%
+% There are no options because the package should be used by class and package
+% authors not by users. So the package will be loaded using
+% \Macro{RequiresPackage}. Using different options by different packages would
+% result in an option clash.
+%
+%
+% \subsection{Having a List of All Tocs}
+% \label{sec:listoftocs}
+%
+% If we have a list of all toc-files we may do commands for all
+% toc-files. Somethimes it may be usefull to known the package, that created
+% the toc-file, so this information will be stored additionally.
+%
+% \begin{macro}{\tb@listoftocs}
+% This is the list of toc-files. The list will be:
+% \begin{quote}
+% \cs{do}\marg{extension}\marg{class or
+% package}\cs{do}\marg{extension}\marg{class or package}\dots
+% \end{quote}
+% With this, adding and processing the list will be very fast but removing
+% an element will be very slow.
+%
+% The initial state of the list will be \emph{empty}.
+% \begin{macrocode}
+\newcommand*{\tb@listoftocs}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifattoclist}
+% This command tests, if an extension is already at the list of
+% toc-files. The extension has to be the first argument. The second argument
+% will be done, if the extension is already at the list of toc-files. The
+% third argument will be done, if the extension is at the list of toc-files
+% not yet.
+% \begin{macrocode}
+\newcommand{\ifattoclist}[1]{%
+ \begingroup
+ \def\do##1##2{%
+ \edef\reserved@a{##1}%
+ \ifx\reserved@a\reserved@b\@tempswatrue\fi
+ }%
+ \edef\reserved@b{#1}\@tempswafalse\tb@listoftocs
+ \if@tempswa\aftergroup\@firstoftwo\else\aftergroup\@secondoftwo\fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addtotoclist}
+% This command adds an extension to the list of toc-files. The first,
+% optional argument is the class or package name with the corresponding
+% extension of class or package files. If this argument was omitted
+% \textsf{tocbasic} tries to get it automatically. This should be
+% successfull while loading a class or package but not while processing any
+% command of a class or package after loading the class or package. The
+% second, mandatory argument is the extension of the toc-file. NOTE: An
+% empty first argument is not the same like omitting the first argument!
+% \begin{macrocode}
+\newcommand*{\addtotoclist}{%
+ \@ifnextchar [%]
+ \@@addtotoclist\@addtotoclist
+}
+\newcommand*{\@addtotoclist}{%
+ \ifx\@currname\@empty
+ \def\reserved@a{\@@addtotoclist[]}%
+ \else
+ \edef\reserved@a{\noexpand\@@addtotoclist[\@currname.\@currext]}%
+ \fi
+ \reserved@a
+}
+\newcommand*{\@@addtotoclist}[2][]{%
+ \ifattoclist{#2}{%
+ \PackageError{tocbasic}{%
+ file extension `#2' cannot be used twice
+ }{%
+ File extension `#2' is already used by a toc-file, while
+ \ifx\relax#1\relax someone\else #2\fi\MessageBreak
+ tried to use it again for a toc-file.\MessageBreak
+ This may be either an incompatibility of packages, an error at a
+ package,\MessageBreak
+ or a mistake by the user.\MessageBreak
+ }%
+ }{%
+ \g@addto@macro\tb@listoftocs{\do{#2}{#1}}%
+ \ifx\relax #1\relax\else
+ \@ifundefined{tb@#1@add@hook}{}{%
+ \edef\reserved@a{%
+ \noexpand\def\noexpand\@currext{#2}%
+ \noexpand\@nameuse{tb@#1@add@hook}%
+ \noexpand\def\noexpand\@currext{\@currext}%
+ }\reserved@a
+ }%
+ \fi
+ \edef\reserved@a{%
+ \noexpand\def\noexpand\@currext{#2}%
+ \noexpand\@nameuse{tb@@add@hook}%
+ \noexpand\def\noexpand\@currext{\@currext}%
+ }\reserved@a
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AtAddToTocList}
+% Action to be done, when adding a toc-file of a known owner. The first
+% optional argument is the owner. The second, mandatory argument is the
+% action. While doing the action \cs{@currext} will be the extension of the
+% added toc-file. If the first argument was omitted \textsf{tocbasic} tries
+% to get it automatically. This should be successfull while loading a class
+% or package but not while processing any command of a class or package
+% after loading the class or package. The second, mandatory argument is the
+% extension of the toc-file. NOTE: An empty first argument is not the same
+% like omitting the first argument, but set's up the general hook. The
+% general hook will be done for every adding after the individual hook (this
+% means, you may dactivate features at the individual hook before processing
+% the general hook). But the individual hook will not be processed for
+% toc-files without any owner!
+% \begin{macrocode}
+\newcommand*{\AtAddToTocList}{%
+ \@ifnextchar [%]
+ \@@AtAddToTocList\@AtAddToTocList
+}
+\newcommand*{\@AtAddToTocList}{%
+ \ifx\@currname\@empty
+ \def\reserved@a{\@@AtAddToTocList[]}%
+ \else
+ \edef\reserved@a{\noexpand\@@AtAddToTocList[\@currname.\@currext]}%
+ \fi
+ \reserved@a
+}
+\newcommand*{\@@AtAddToTocList}[1][]{%
+ \@ifundefined{tb@#1@add@hook}{\@namedef{tb@#1@add@hook}{}}{}%
+ \expandafter\g@addto@macro\csname tb@#1@add@hook\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tocbasic@extend@babel}
+% NOTE: To extend the original \cs{bbl@set@language} the argument of
+% \cs{tocbasic@extend@babel} must not be a local macro (like \cs{@currext})
+% \begin{macrocode}
+\newcommand*{\tocbasic@extend@babel}[1]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \ifx\csname bbl@set@language\endcsname\relax
+ \PackageInfo{tocbasic}{babel extension for `#1' omitted\MessageBreak
+ because of missing \string\bbl@set@language}%
+ \else
+ \iftocfeature{#1}{nobabel}{%
+ \PackageInfo{tocbasic}{omitting babel extension for `#1'\MessageBreak
+ because of feature `nobabel' available\MessageBreak
+ for `#1'}%
+ }{%
+ \PackageInfo{tocbasic}{setting babel extension for `#1'}%
+ \expandafter\gdef\expandafter\bbl@set@language\expandafter##\expandafter1%
+ \expandafter{%
+ \bbl@set@language{##1}%
+ \addtocontents{#1}{\xstring\select@language{\languagename}}%
+ }%
+ }%
+ \fi
+}
+% \end{macrocode}
+% This feature should be used for all toc-files (unless feature
+% \texttt{nobabl} was set for the toc-file.
+% \begin{macrocode}
+\AtAddToTocList[]{\expandafter\tocbasic@extend@babel\expandafter{\@currext}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\removefromtoclist}
+% This command will remove an extension from the list of toc-files. If the
+% first, optional argument is given, the extension will only be removed, if
+% it was added by the given owner. NOTE: An empty first argument is not the
+% same like omitting the first argument!
+% \begin{macrocode}
+\newcommand*{\removefromtoclist}{%
+ \@ifnextchar [%]
+ \@removefromtoclist\@@removefromtoclist
+}
+\newcommand*{\@removefromtoclist}[2][]{%
+ \begingroup
+ \let\tb@oldlist\tb@listoftocs
+ \def\do##1##2{%
+ \edef\reserved@a{##1}%
+ \ifx\reserved@a\reserved@b
+ \begingroup
+ \edef\reserved@a{##2}%
+ \edef\reserved@b{#1}%
+ \ifx\reserved@a\reserved@b\else
+ \g@addto@macro\tb@listoftocs{\do{##1}{##2}}%
+ \fi
+ \endgroup
+ \else
+ \g@addto@macro\tb@listoftocs{\do{##1}{##2}}%
+ \fi
+ }%
+ \edef\reserved@b{#2}\let\tb@listoftocs\@empty
+ \tb@oldlist
+ \endgroup
+}
+\newcommand*{\@@removefromtoclist}[1]{%
+ \begingroup
+ \let\tb@oldlist\tb@listoftocs
+ \def\do##1##2{%
+ \edef\reserved@a{##1}%
+ \ifx\reserved@a\reserved@b\else
+ \g@addto@macro\tb@listoftocs{\do{##1}{##2}}%
+ \fi
+ }%
+ \edef\reserved@b{#1}\let\tb@listoftocs\@empty
+ \tb@oldlist
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doforeachtocfile}
+% This command does the second, mandatory argument for each toc-file at the
+% list of toc-files. If the first, optional argument was given this will be
+% done only for the toc-files of that owner. NOTE: An empty first argument
+% is not the same like omitting the first argument!
+%
+% While processing the second argument \cs{@currext} is the extension of
+% the toc-file. The second argument will be processed with increased group
+% level!
+%
+% See \cs{addtoeachtocfile} for an example of usage of
+% \cs{doforeachtocfile}.
+% \begin{macrocode}
+\newcommand{\doforeachtocfile}{%
+ \@ifnextchar [%]
+ \@doforeachtocfile\@@doforeachtocfile
+}
+\newcommand{\@doforeachtocfile}[2][]{%
+ \def\do##1##2{%
+ \edef\reserved@a{#1}\edef\reserved@b{##2}\ifx\reserved@a\reserved@b
+ \edef\@currext{##1}#2%
+ \fi
+ }%
+ \edef\reserved@a{%
+ \noexpand\tb@listoftocs
+ \noexpand\def\noexpand\@currext{\@currext}%
+ }\reserved@a
+ \let\do\relax
+}
+\newcommand{\@@doforeachtocfile}[1]{%
+ \def\do##1##2{%
+ \edef\@currext{##1}#1%
+ }%
+ \edef\reserved@a{%
+ \noexpand\tb@listoftocs
+ \noexpand\def\noexpand\@currext{\@currext}%
+ }\reserved@a
+ \let\do\relax
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addtoeachtocfile}
+% This command calls \cs{addtocontents} with the section, mandatory
+% argument for each toc-file at the list of toc-files. If the first,
+% optional argument was given this will be done only for the toc-files of
+% that owener. NOTE: An empty first argument is not the same like omitting
+% the first argument! And don't forget to protect the commands, that should
+% not be expanded, at the mandatory argument.
+% \begin{macrocode}
+\newcommand{\addtoeachtocfile}{%
+ \@ifnextchar [%]
+ \@addtoeachtocfile\@@addtoeachtocfile
+}
+\newcommand{\@addtoeachtocfile}[2][]{%
+ \doforeachtocfile[{#1}]{\addtocontents{\@currext}{#2}}%
+}
+\newcommand{\@@addtoeachtocfile}[1]{%
+ \doforeachfocfile{\addtocontents{\@currext}{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addcontentslinetoeachtocfile}
+% Something like a combination of \cs{addtoeachtocfile} and
+% \cs{addcontentsline}.
+% \begin{macrocode}
+\newcommand{\addcontentslinetoeachtocfile}{%
+ \@ifnextchar [%]
+ \@addcontentslinetoeachtocfile\@@addcontentslinetoeachtocfile
+}
+\newcommand{\@addcontentslinetoeachtocfile}[3][]{%
+ \doforeachtocfile[{#1}]{\addcontentsline{\@currext}{#2}{#3}}%
+}
+\newcommand{\@@addcontentslinetoeachtocfile}[2]{%
+ \doforeachtocfile{\addcontentsline{\@currext}{#1}{#2}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Show List of Toc-File}
+% \label{sec:showlistoftocfile}
+%
+% If you have a toc-file you want a list-of-command for this toc-file,
+% too. Here are basics and high level commands for this.
+%
+% \begin{macro}{\tocbasic@starttoc}
+% Some basics are done like setting up \cs{parskip}, \cs{parindent} and
+% \cs{parfillskip}, a general hook will be called, an individual hook will
+% be called, the toc will be started, an individual hook will be called, an
+% general hook wil be called, that's it.
+% \begin{macrocode}
+\newcommand*{\tocbasic@starttoc}[1]{%
+ \begingroup
+ \setlength{\parskip}{\z@}%
+ \setlength{\parindent}{\z@}%
+ \setlength{\parfillskip}{\z@\@plus 1fil}%
+ \def\@currext{#1}%
+ \csname tocbasic@@before@hook\endcsname
+ \csname tb@#1@before@hook\endcsname
+ \@starttoc{#1}%
+ \csname tb@#1@after@hook\endcsname
+ \csname tocbasic@@after@hook\endcsname
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macro}{\tocbasic@@before@hook}
+% \begin{macro}{\tocbasic@@after@hook}
+% These are the general hooks. They may be used by classes and packages for
+% commands, that should be used for all lists of not only the own lists of,
+% e.g., \KOMAScript{} may use it to handle option \texttt{tocleft}.
+% \begin{macrocode}
+\newcommand*{\tocbasic@@before@hook}{}
+\newcommand*{\tocbasic@@after@hook}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\BeforeStartingTOC}
+% \begin{macro}{\AfterStartingTOC}
+% These are the commands to add code to the general or individual hooks. If
+% the first, optional argument was given, the second, mandatory argument
+% will be added to the individual hook, otherwise the general hook will be
+% extended.
+% \begin{macrocode}
+\newcommand{\BeforeStartingTOC}[2][]{%
+ \expandafter\g@addto@macro\csname tb@#1@before@hook\endcsname{#2}%
+}
+\newcommand{\AfterStartingTOC}[2][]{%
+ \expandafter\g@addto@macro\csname tb@#1@after@hook\endcsname{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\listoftoc}
+% \begin{macro}{\listoftoc*}
+% Command to handle the hole list of something. There are additional hooks
+% for this. The first optional argument is the title for this list. If the
+% optional argument was omitted \cs{listof\#2name} will be used. The star
+% version does not set up a heading or switch the column number!
+% \begin{macrocode}
+\newcommand*{\listoftoc}{%
+ \@ifstar \tocbasic@starttoc\@listoftoc
+}
+\newcommand*{\@listoftoc}[2][\list@fname]{%
+ \begingroup
+ \@ifundefined{listof#2name}{%
+ \PackageWarning{tocbasic}{%
+ You should either define \expandafter\string\csname
+ listof#2name\endcsname\MessageBreak
+ or use the optional argument of \string\listoftoc\space\MessageBreak
+ to set the term to be used for the\MessageBreak
+ heading of list of #2}%
+ \def\list@fname{\listofname~#2}%
+ }{%
+ \expandafter\let\expandafter\list@fname\csname listof#2name\endcsname
+ }%
+ \if@twocolumn
+ \aftergroup\twocolumne\onecolumn
+ \fi
+ \def\@currext{#2}%
+ \tocbasic@listhead{#1}%
+ \tocbasic@starttoc{#2}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\listofname}
+% While this is only an emergancy command, we don't support languages.
+% \begin{macrocode}
+\newcommand*{\listofname}{List of}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\listofeachtoc}
+% Another example of using \cs{doforeachtoc}.
+% \begin{macrocode}
+\newcommand*{\listofeachtoc}{%
+ \@ifnextchar [%]
+ \@listofeachtoc\@@listofeachtoc
+}
+\newcommand{\@listofeachtoc}[1][]{%
+ \doforeachtocfile[{#1}]{\listoftoc{\@currext}}%
+}
+\newcommand{\@@listofeachtoc}[1]{%
+ \doforeachfocfile{\listoftoc{\@currext}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tocbasic@listhead}
+% Setting the headings of a list of something. The heading is the only
+% argument.
+% \begin{macrocode}
+\newcommand*{\tocbasic@listhead}[1]{%
+ \@ifundefined{tocbasic@listhead@\@currext}{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname chapter\endcsname\relax
+ \expandafter\def\csname tocbasic@listhead@\@currext\endcsname##1{%
+ \iftocfeature{\@currext}{leveldown}{%
+ \iftocfeature{\@currext}{numbered}{%
+ \subsection[##1]{##1}%
+ }{%
+ \subsection*{##1}%
+ \iftocfeature{\@currext}{totoc}{%
+ \addcontentsline{toc}{subsection}{##1}%
+ }{}%
+ }%
+ \ifx\@mkboth\@gobbletwo\else\markright{\MakeMarkcase{##1}}\fi
+ }{%
+ \iftocfeature{\@currext}{numbered}{%
+ \section[##1]{##1\@mkboth{##1}{##1}}%
+ }{%
+ \section*{##1}%
+ \iftocfeature{\@currext}{totoc}{%
+ \addcontentsline{toc}{section}{##1}%
+ }{}%
+ }%
+ \@mkboth{\MakeMarkcase{##1}}{\MakeMarkcase{##1}}%
+ }%
+ }%
+ \else
+ \expandafter\def\csname tocbasic@listhead@\@currext\endcsname##1{%
+ \iftocfeature{\@currext}{leveldown}{%
+ \iftocfeature{\@currext}{numbered}{%
+ \section{##1}%
+ }{%
+ \section*{##1}%
+ \iftocfeature{\@currext}{totoc}{%
+ \addcontentsline{toc}{section}{##1}%
+ }{}%
+ }%
+ \ifx\@mkboth\@gobbletwo\else\markright{\MakeMarkcase{##1}}\fi
+ }{%
+ \iftocfeature{\@currext}{numbered}{%
+ \chapter[##1]{##1\@mkboth{##1}{##1}}%
+ }{%
+ \chapter*{##1}%
+ \iftocfeature{\@currext}{totoc}{%
+ \addcontentsline{toc}{chapter}{##1}%
+ }{}%
+ }%
+ \@mkboth{\MakeMarkcase{##1}}{\MakeMarkcase{##1}}%
+ }%
+ }%
+ \fi
+ }{}%
+ \csname tb@@beforehead@hook\endcsname
+ \csname tb@\@currext @beforehead@hook\endcsname
+ \csname tocbasic@listhead@\@currext\endcsname{#1}%
+ \csname tb@\@currext @afterhead@hook\endcsname
+ \csname tb@@afterhead@hook\endcsname
+}
+% \end{macrocode}
+% \begin{macro}{\BeforeTOCHead}
+% \begin{macro}{\AfterTOCHead}
+% These are the commands to add code to the general or individual hooks. If
+% the first, optional argument was given, the second, mandatory argument
+% will be added to the individual hook, otherwise the general hook will be
+% extended.
+% \begin{macrocode}
+\newcommand{\BeforeTOCHead}[2][]{%
+ \expandafter\g@addto@macro\csname tb@#1@beforehead@hook\endcsname{#2}%
+}
+\newcommand{\AfterTOCHead}[2][]{%
+ \expandafter\g@addto@macro\csname tb@#1@afterhead@hook\endcsname{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\MakeMarkcase}
+% Use upper-case or not?
+% \begin{macrocode}
+\AtBeginDocument{%
+ \@ifundefined{MakeMarkcase}{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname KOMAClassName\endcsname\relax
+ \let\MakeMarkcase\MakeUppercase
+ \else
+ \let\MakeMarkcase\@firstofone
+ \fi
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\deftocheading}
+% Define a toc headings command with one argument (the title).
+% \begin{macrocode}
+\newcommand*{\deftocheading}[1]{%
+ \@namedef{tocbasic@listhead@#1}##1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setuptoc}
+% \begin{macro}{\unsettoc}
+% Known features are:
+% \begin{description}
+% \item[\texttt{totoc}] writes the title of the list of to the table of
+% contents
+% \item[\texttt{numbered}] uses a numbered headings for the list of
+% \item[\texttt{leveldown}] uses not the top level heading (e.g.,
+% \cs{chapter} with book) but the first sub level (e.g., \cs{section} with
+% book).
+% \item[\texttt{nobabel}] prevents the extension to be added to the babel
+% handling of toc-files. To make this work, you have to set the feature
+% before adding the extension to the list of known extension.
+% \end{description}
+% Other features may be package dependent. You may test the feature using:
+% \begin{quote}
+% \cs{@ifundefined}\texttt{\{tocbasic@\meta{toc}@feature@\meta{feature}\}}\\
+% \phantom{\cs{@ifundefined}}\marg{do if feature not set}\\
+% \phantom{\cs{@ifundefined}}\marg{do if feature set}
+% \end{quote}
+% See \cs{tocbasic@listhead} for an example of this.
+% \begin{macrocode}
+\newcommand*{\setuptoc}[2]{%
+ \@for\@tempa:=#2\do{%
+ \expandafter\tb@@sp@def\expandafter\@tempa\expandafter{\@tempa}%
+ \@namedef{tocbasic@#1@feature@\@tempa}{}%
+ }%
+}
+\newcommand*{\unsettoc}[2]{%
+ \@for\@tempa:=#2\do{%
+ \expandafter\tb@@sp@def\expandafter\@tempa\expandafter{\@tempa}%
+ \expandafter\let\csname tocbasic@#1@feature@\@tempa\endcsname\relax
+ }%
+}
+\def\@tempa#1{%
+ \def\tb@@sp@def##1##2{%
+ \futurelet\tb@sp@tempa\tb@@sp@d##2\@nil\@nil#1\@nil\relax##1}%
+ \def\tb@@sp@d{%
+ \ifx\tb@sp@tempa\@sptoken
+ \expandafter\tb@@sp@b
+ \else
+ \expandafter\tb@@sp@b\expandafter#1%
+ \fi}%
+ \def\tb@@sp@b#1##1 \@nil{\tb@@sp@c##1}%
+}
+\@tempa{ }
+\def\tb@@sp@c#1\@nil#2\relax#3{\@temptokena{#1}\edef#3{\the\@temptokena}}
+% \end{macrocode}
+% Do not add the files, that babel handles by default.
+% \begin{macrocode}
+\setuptoc{toc}{nobabel}
+\setuptoc{lof}{nobabel}
+\setuptoc{lot}{nobabel}
+% \end{macrocode}
+% \begin{macro}{\iftocfeature}
+% We need a test for the features
+% \begin{macrocode}
+\newcommand*{\iftocfeature}[2]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname tocbasic@#1@feature@#2\endcsname\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tocbasicautomode}
+% \Package{tocbasic} can overtake \Macro{@starttoc} to automaticly add all
+% used extensions to the list of known extensions and use
+% \Macro{tocbasic@starttoc} instead of \Macro{@starttoc} from \LaTeX{}
+% kernel.
+% \begin{macrocode}
+\newcommand*{\tocbasicautomode}{%
+ \let\tb@saved@starttoc\@starttoc
+ \BeforeStartingTOC{%
+ \let\@starttoc\tb@saved@starttoc
+ \expandafter\ifattoclist\expandafter{\@currext}{}{%
+ \@addtotoclist[tocbasicautomode]{\@currext}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+%<*load>
+% Used at \KOMAScript{} classes to load and initialize the package.
+% \begin{macrocode}
+\edef\@tempa{\noexpand\RequirePackage{tocbasic}[\tocbasicversion]}
+\@tempa
+% \end{macrocode}
+% Tell the package, what files are used:
+% \begin{macrocode}
+\addtotoclist{toc}
+\addtotoclist[float]{lof}
+\addtotoclist[float]{lot}
+% \end{macrocode}
+%</load>
+% \fi
+%
+% \Finale
+%
+\endinput
+%
+% end of file `tocbasic.dtx'
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: iso-latin-1
+%%% TeX-master: t
+%%% End: