diff options
author | Karl Berry <karl@freefriends.org> | 2008-11-12 00:44:32 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-11-12 00:44:32 +0000 |
commit | e0fa36719ae8b943d0c515ccc2a4f1e2670cc614 (patch) | |
tree | cfd7d451101897cf222cd885a36573ccacd922c4 /Master/texmf-dist/source/latex/koma-script/tocbasic.dtx | |
parent | 6d06dddb5a2041f7c07b6502a3bfa973f0d86635 (diff) |
koma-script update (11nov08)
git-svn-id: svn://tug.org/texlive/trunk@11262 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/tocbasic.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/koma-script/tocbasic.dtx | 1770 |
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: |