You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2016 lines
72 KiB
2016 lines
72 KiB
% \iffalse meta-comment
|
|
% ======================================================================
|
|
% tocbasic.dtx
|
|
% Copyright (c) Markus Kohm, 2008-2020
|
|
%
|
|
% This file is part of the LaTeX2e KOMA-Script bundle.
|
|
%
|
|
% This work may be distributed and/or modified under the conditions of
|
|
% the LaTeX Project Public License, version 1.3c of the license.
|
|
% The latest version of this license is in
|
|
% http://www.latex-project.org/lppl.txt
|
|
% and version 1.3c or later is part of all distributions of LaTeX
|
|
% version 2005/12/01 or later and of this work.
|
|
%
|
|
% This work has the LPPL maintenance status "author-maintained".
|
|
%
|
|
% The Current Maintainer and author of this work is Markus Kohm.
|
|
%
|
|
% This work consists of all files listed in manifest.txt.
|
|
% ----------------------------------------------------------------------
|
|
% tocbasic.dtx
|
|
% Copyright (c) Markus Kohm, 2008-2020
|
|
%
|
|
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
|
|
% Version 1.3c, verteilt und/oder veraendert werden.
|
|
% Die neuste Version dieser Lizenz ist
|
|
% http://www.latex-project.org/lppl.txt
|
|
% und Version 1.3c 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 aus den in manifest.txt aufgefuehrten Dateien.
|
|
% ======================================================================
|
|
% \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: $Id: tocbasic.dtx 3508 2020-07-08 08:45:20Z kohm $
|
|
%<identify>%%% (run: identify)
|
|
%<prepare>%%% (run: prepare)
|
|
%<option>%%% (run: option)
|
|
%<execoption>%%% (run: execoption)
|
|
%<body>%%% (run: body)
|
|
%<exit>%%% (run: exit)
|
|
%<*dtx>
|
|
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
|
|
\begingroup
|
|
\def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}}
|
|
\filedate$Date: 2020-07-08 10:45:20 +0200 (Wed, 08 Jul 2020) $
|
|
\def\filerevision$#1: #2 ${\gdef\filerevision{r#2}}
|
|
\filerevision$Revision: 1962 $
|
|
\endgroup
|
|
\ProvidesFile{tocbasic.dtx}[\filedate\space\filerevision\space
|
|
%</dtx>
|
|
%<package&identify>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
|
|
%<package&identify>\ProvidesPackage{tocbasic}[%
|
|
%<*dtx|(package&identify)>
|
|
%!KOMAScriptVersion
|
|
package
|
|
%<*dtx>
|
|
source
|
|
%</dtx>
|
|
%</dtx|(package&identify)>
|
|
%<package&identify> (handling toc-files)%
|
|
%<*dtx>
|
|
(dtx)%
|
|
%</dtx>
|
|
%<*dtx|(package&identify)>
|
|
]
|
|
%</dtx|(package&identify)>
|
|
%<*dtx>
|
|
\ifx\documentclass\undefined
|
|
\input scrdocstrip.tex
|
|
\@@input scrkernel-version.dtx
|
|
\@@input scrstrip.inc
|
|
\KOMAdefVariable{COPYRIGHTFROM}{2008}
|
|
\generate{\usepreamble\defaultpreamble
|
|
\file{tocbasic.sty}{%
|
|
\from{tocbasic.dtx}{package,identify}%
|
|
\from{tocbasic.dtx}{package,prepare}%
|
|
\from{scrkernel-tocstyle.dtx}{package,prepare}%
|
|
\from{tocbasic.dtx}{package,option}%
|
|
\from{scrkernel-tocstyle.dtx}{package,option}%
|
|
\from{tocbasic.dtx}{package,body}%
|
|
\from{scrkernel-tocstyle.dtx}{package,body}%
|
|
\from{scrkernel-tocstyle.dtx}{package,style,gobble}%
|
|
\from{scrkernel-tocstyle.dtx}{package,style,dottedtocline}%
|
|
\from{scrkernel-tocstyle.dtx}{package,style,undottedtocline}%
|
|
\from{scrkernel-tocstyle.dtx}{package,style,largetocline}%
|
|
\from{scrkernel-tocstyle.dtx}{package,style,tocline}%
|
|
\from{scrkernel-tocstyle.dtx}{package,style,toctext}%
|
|
\from{scrkernel-tocstyle.dtx}{package,style,default}%
|
|
\from{tocbasic.dtx}{package,exit}%
|
|
\from{scrlogo.dtx}{logo}%
|
|
}%
|
|
}%
|
|
\@@input scrstrop.inc
|
|
\else
|
|
\let\endbatchfile\relax
|
|
\fi
|
|
\endbatchfile
|
|
\documentclass[parskip=half-]{scrdoc}
|
|
\usepackage[english]{babel}
|
|
\usepackage{array}
|
|
\usepackage{listings}
|
|
\lstset{breaklines,prebreak=\mbox{$\hookleftarrow$},language=[LaTeX]TeX,
|
|
basicstyle=\small}
|
|
\lstnewenvironment{lstcode}[1][]{%
|
|
\lstset{breaklines,prebreak=\mbox{$\hookleftarrow$},language=[LaTeX]TeX,
|
|
basicstyle=\ttfamily\small,#1}%
|
|
}{}
|
|
\lstnewenvironment{lstoutput}[1][]{}{}
|
|
\CodelineIndex
|
|
\RecordChanges
|
|
\GetFileInfo{tocbasic.dtx}
|
|
\sloppy
|
|
\begin{document}
|
|
\DocInput{\filename}
|
|
\end{document}
|
|
% \fi
|
|
%
|
|
% \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}
|
|
% The main purpose of package \textsf{tocbasic} is to provide features for
|
|
% authors of classes and packages to create own tables or lists of contents
|
|
% like the list of figures and the list of tables and thereby allow other
|
|
% classes or packages some types of control over these. For examples package
|
|
% \textsf{tocbasic} delegates language control of all these tables and lists
|
|
% of contents to package \textsf{babel}. So automatic change of language
|
|
% will be provided inside all these tables and lists of contents. Using
|
|
% \textsf{tocbasic} will exculpate authors of classes and packages from
|
|
% implementation of such features.
|
|
%
|
|
% \KOMAScript{} itself uses \textsf{tocbasic} not only for the table of
|
|
% contents but also for the already mentioned lists of figures and tables.
|
|
% \end{abstract}
|
|
%
|
|
% \tableofcontents
|
|
%
|
|
% \iffalse
|
|
%</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.
|
|
%
|
|
% Note: Parts of the implementation of package \textsf{tocbasic} are
|
|
% out-sourced into file \texttt{scrkernel-tocbasic.dtx}.
|
|
%
|
|
% \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
|
|
% \cs{RequiresPackage}. Using different options by different packages would
|
|
% result in an option clash.
|
|
% \begin{macrocode}
|
|
%<*option>
|
|
\ProcessOptions\relax
|
|
%</option>
|
|
% \end{macrocode}
|
|
%
|
|
%
|
|
% \subsection{Required Packages}
|
|
% \label{sec:packages}
|
|
%
|
|
% Package \textsf{scrbase} is needed to process all macro options. As long as
|
|
% no package options are provided, the \texttt{body}-run is early enough to
|
|
% load it.
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\RequirePackage{scrbase}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% We load it after processing the options, because we don't need it for
|
|
% processing options.
|
|
%
|
|
%
|
|
%
|
|
% \subsection{Unwanted Packages}
|
|
% \label{sec:unpackages}
|
|
%
|
|
% There are packages, that are not recommended to be used together with
|
|
% \textsf{tocbasic}:
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
% \end{macrocode}
|
|
% \begin{description}
|
|
% \item[\textsf{multitoc}:] This package implements multi-column ToCs using
|
|
% \textsf{multicol}. Unfortunately there is a bug in that package, that
|
|
% disables all extensions but \texttt{toc}, \texttt{lof} and \texttt{lot} and
|
|
% even these if the corresponding option has not been set.
|
|
% \begin{macrocode}
|
|
\AfterPackage*{multitoc}{%
|
|
\@ifpackagelater{multitoc}{2018/08/31}{}{%
|
|
\PackageWarningNoLine{tocbasic}{%
|
|
Usage of package `multitoc' is not recommended!\MessageBreak
|
|
Note, this package generally results in empty ToCs\MessageBreak
|
|
for all extension but `toc', `lof' and `lot' and\MessageBreak
|
|
even for these extensions if you do not use the\MessageBreak
|
|
corresponding multitoc options.\MessageBreak
|
|
It is recommended to use:\MessageBreak
|
|
\space\space\string\usepackage{multicol}\MessageBreak
|
|
\space\space\string\BeforeStartingTOC{\string\begin{multicols}{2}}%
|
|
\MessageBreak
|
|
\space\space\string\AfterStartingTOC{\string\end{multicols}}%
|
|
\MessageBreak
|
|
instead of loading package `multitoc'.\MessageBreak
|
|
See the KOMA-Script manual for more information\MessageBreak
|
|
about using \string\BeforeStartingTOC\space and
|
|
\string\AfterStartingTOC\MessageBreak
|
|
and the multicol manual for more information\MessageBreak
|
|
about the `multicols' environment%
|
|
}%
|
|
}%
|
|
}
|
|
% \end{macrocode}
|
|
% \end{description}
|
|
% \begin{macrocode}
|
|
%</body>
|
|
% \end{macrocode}
|
|
%
|
|
%
|
|
% \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}
|
|
%<*body>
|
|
\newcommand*{\tb@listoftocs}{}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\ifattoclist}
|
|
% \changes{v3.28}{2019/11/19}{renamed to \cs{Ifattoclist}}%^^A
|
|
% \begin{macro}{\Ifattoclist}
|
|
% \changes{v3.28}{2019/11/19}{renamed from \cs{ifattoclist}}%^^A
|
|
% 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}
|
|
\providecommand*{\ifattoclist}{%
|
|
\PackageWarning{tocbasic}{Usage of deprecated command
|
|
`\string\ifattoclist'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifattoclist' by `\string\Ifattoclist'%
|
|
}%
|
|
\Ifattoclist
|
|
}
|
|
\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}%^^A \Ifattoclist
|
|
% \end{macro}%^^A \ifattoclist
|
|
%
|
|
% \begin{macro}{\addtotoclist}
|
|
% \changes{v1.0a}{2008/11/11}{internal \cs{@addtotoclist} renamed to
|
|
% \cs{scr@addtotoclist} because of package \textsf{floatfram}}.^^A
|
|
% \changes{v1.0a}{2008/11/11}{internal \cs{@@addtotoclist} renamed to
|
|
% \cs{scr@@addtotoclist} because of package \textsf{floatfram}}.^^A
|
|
% \changes{v3.06a}{2010/09/14}{expand the arguments while adding them to the
|
|
% internal list}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\scr@addtotoclist}
|
|
% \begin{macro}{\scr@@addtotoclist}
|
|
% \changes{v3.28}{2019/11/19}{\cs{ifattoclist} replaced by
|
|
% \cs{Ifattoclist}}%^^A
|
|
% 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}{%
|
|
\kernel@ifnextchar [%]
|
|
\scr@@addtotoclist\scr@addtotoclist
|
|
}
|
|
\newcommand*{\scr@addtotoclist}{%
|
|
\ifx\@currname\@empty
|
|
\def\reserved@a{\scr@@addtotoclist[]}%
|
|
\else
|
|
\edef\reserved@a{\noexpand\scr@@addtotoclist[\@currname.\@currext]}%
|
|
\fi
|
|
\reserved@a
|
|
}
|
|
\newcommand*{\scr@@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
|
|
}%
|
|
}{%
|
|
\begingroup
|
|
\protected@edef\reserved@a{%
|
|
\noexpand\g@addto@macro\noexpand\tb@listoftocs{%
|
|
\noexpand\do{#2}{#1}}}\reserved@a
|
|
\endgroup
|
|
\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}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\owneroftoc}
|
|
% \changes{v3.22}{2016/08/09}{new}%^^A
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% Returns the owner of a TOC or uses the owner of a TOC as argument of the
|
|
% optional argument, if it exists.
|
|
% \begin{macrocode}
|
|
\newcommand*{\owneroftoc}[2][\@firstofone]{%
|
|
\begingroup
|
|
\let\reserved@a\endgroup
|
|
\def\do##1##2{\Ifstr{#2}{##1}{\def\reserved@a{\endgroup#1{##2}}}{}}%
|
|
\tb@listoftocs
|
|
\reserved@a
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\categoryoftoc}
|
|
% \changes{v3.27}{2019/05/12}{new}%^^A
|
|
% Synonym for \cs{owneroftoc}.
|
|
% \begin{macrocode}
|
|
\newcommand*{\categoryoftoc}{\owneroftoc}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\AtAddToTocList}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% 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}{%
|
|
\kernel@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}
|
|
% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by
|
|
% \cs{Iftocfeature}}%^^A
|
|
% 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]{%
|
|
\scr@ifundefinedorrelax{bbl@set@language}{%
|
|
\PackageInfo{tocbasic}{babel extension for `#1' omitted\MessageBreak
|
|
because of missing \string\bbl@set@language}%
|
|
}{%
|
|
\Iftocfeature{#1}{nobabel}{%
|
|
\PackageInfo{tocbasic}{omitting babel extension for `#1'\MessageBreak
|
|
because of feature `nobabel' available\MessageBreak
|
|
for `#1'}%
|
|
}{%
|
|
% \end{macrocode}
|
|
% \changes{v3.23}{2017/02/23}{using \cs{BabelContentsFiles} if available}%^^A
|
|
% Since version 3.9a provides adding extensions to the language switch
|
|
% preparation. So it is used if it is available.
|
|
% \begin{macrocode}
|
|
\scr@ifundefinedorrelax{BabelContentsFiles}{%
|
|
\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}}%
|
|
}%
|
|
}{%
|
|
\@expandtwoargs\in@{,#1,}{,\BabelContentsFiles,}%
|
|
\ifin@
|
|
\PackageInfo{tocbasic}{omitting babel extension for
|
|
`#1'\MessageBreak
|
|
because it is already in \string\BabelContentsFiles}%
|
|
\else
|
|
\PackageInfo{tocbasic}{setting babel extension for `#1'}%
|
|
\xdef\BabelContentsFiles{\BabelContentsFiles,#1}%
|
|
\fi
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
% \end{macrocode}
|
|
% This feature should be used for all toc-files (unless feature
|
|
% \texttt{nobabel} was set for the toc-file).
|
|
% \begin{macrocode}
|
|
\AtAddToTocList[]{\expandafter\tocbasic@extend@babel\expandafter{\@currext}}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\removefromtoclist}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\scr@removefromtoclist}
|
|
% \changes{v3.22}{2016/09/06}{missing \cs{global} added}%^^A
|
|
% \changes{v3.28}{2019/11/22}{renamed from \cs{@removefromtoclist}}%^^A
|
|
% \begin{macro}{\scr@@removefromtoclist}
|
|
% \changes{v3.22}{2016/09/06}{missing \cs{global} added}%^^A
|
|
% \changes{v3.28}{2019/11/22}{renamed from \cs{@@removefromtoclist}}%^^A
|
|
% 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}{%
|
|
\kernel@ifnextchar [%]
|
|
\scr@removefromtoclist\scr@@removefromtoclist
|
|
}
|
|
\newcommand*{\scr@removefromtoclist}[2][]{%
|
|
\begingroup
|
|
\let\tb@oldlist\tb@listoftocs
|
|
\def\do##1##2{%
|
|
\edef\reserved@a{##1}%
|
|
\ifx\reserved@a\reserved@b
|
|
\begingroup
|
|
\edef\@currext{##2}%
|
|
\edef\reserved@b{#1}%
|
|
\ifx\@currext\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}\global\let\tb@listoftocs\@empty
|
|
\tb@oldlist
|
|
\endgroup
|
|
}
|
|
\newcommand*{\scr@@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}\global\let\tb@listoftocs\@empty
|
|
\tb@oldlist
|
|
\endgroup
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\doforeachtocfile}
|
|
% \changes{v3.09}{2011/03/01}{\cs{@currext} defined using \cs{edef} instead
|
|
% of \cs{def}}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% 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}{%
|
|
\kernel@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}
|
|
% \begin{macro}{\@addtoeachtocfile}
|
|
% \begin{macro}{\@@addtoeachtocfile}
|
|
% \changes{v3.03b}{2009/06/08}{typo fix at usage of \cs{doforeachtocfile}}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% 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 owner. 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}{%
|
|
\kernel@ifnextchar [%]
|
|
\@addtoeachtocfile\@@addtoeachtocfile
|
|
}
|
|
\newcommand{\@addtoeachtocfile}[2][]{%
|
|
\doforeachtocfile[{#1}]{\addtocontents{\@currext}{#2}}%
|
|
}
|
|
\newcommand{\@@addtoeachtocfile}[1]{%
|
|
\doforeachtocfile{\addtocontents{\@currext}{#1}}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \subsection{Adding Entries into Toc-Files}
|
|
%
|
|
% We have a new general command to add entries to several toc-files at
|
|
% once. And we have some special commands for the table of contents.
|
|
%
|
|
% \begin{macro}{\addcontentslinetoeachtocfile}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% Something like a combination of \cs{addtoeachtocfile} and
|
|
% \cs{addcontentsline}.
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\newcommand{\addcontentslinetoeachtocfile}{%
|
|
\kernel@ifnextchar [%]
|
|
\@addcontentslinetoeachtocfile\@@addcontentslinetoeachtocfile
|
|
}
|
|
\newcommand{\@addcontentslinetoeachtocfile}[3][]{%
|
|
\doforeachtocfile[{#1}]{\addcontentsline{\@currext}{#2}{#3}}%
|
|
}
|
|
\newcommand{\@@addcontentslinetoeachtocfile}[2]{%
|
|
\doforeachtocfile{\addcontentsline{\@currext}{#1}{#2}}%
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\addxcontentsline}
|
|
% \changes{v3.12}{2013/09/24}{new}%^^A
|
|
% \changes{v3.12}{2013/09/24}{Take care of new feature \texttt{numberline}}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@addxcontentsline}
|
|
% \changes{v3.12}{2013/09/24}{new (internal)}%^^A
|
|
% This will be used instead of \cs{addcontentsline} to generate numbered or
|
|
% not numbered entries to a toc-file. First argument is the toc-file, second
|
|
% the entry type, e.g., \texttt{chapter}, the third is the entry number or
|
|
% empty and the fourth and last is the entry text.
|
|
% \begin{macrocode}
|
|
\newcommand*{\addxcontentsline}[2]{%
|
|
\kernel@ifnextchar [%]
|
|
{\@addxcontentsline{#1}{#2}}%
|
|
{\@addxcontentsline{#1}{#2}[]}%
|
|
}
|
|
\newcommand*{\@addxcontentsline}{}
|
|
\def\@addxcontentsline#1#2[#3]#4{%
|
|
\scr@ifundefinedorrelax{add#2#1entry}{%
|
|
\tocbasic@addxcontentsline{#1}{#2}{#3}{#4}%
|
|
}{%
|
|
\@nameuse{add#2#1entry}{#3}{#4}%
|
|
}%
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\nonumberline}
|
|
% \changes{v3.12}{2013/09/24}{new}%^^A
|
|
% Either \cs{relax} or \cs{numberline} depending on the feature
|
|
% \texttt{numberline}.
|
|
% \begin{macrocode}
|
|
\newcommand*{\nonumberline}{}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\addxcontentsline}
|
|
% This may be used to either use a heading type command or the general default
|
|
% one. You are not allowed to use it in the definition of a heading type
|
|
% command like \cs{addchaptertocentry}! You may use
|
|
% \cs{tocbasic@addxcontentsline} at the definition of those commands.
|
|
% \begin{macrocode}
|
|
\newcommand*{\tocbasic@addxcontentsline}[4]{%
|
|
\if\relax\detokenize{#3}\relax
|
|
\addcontentsline{#1}{#2}{\protect\nonumberline#4}%
|
|
\else
|
|
\addcontentsline{#1}{#2}{\protect\numberline{#3}#4}%
|
|
\fi
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\addxcontentslinetoeachtocfile}
|
|
% \changes{v3.12}{2013/09/24}{new}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@addxcontentslinetoeachtocfile}
|
|
% \changes{v3.12}{2013/09/24}{new (internal)}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@@addxcontentslinetoeachtocfile}
|
|
% \changes{v3.12}{2013/09/24}{new (internal)}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \begin{macro}{\@@@addxcontentslinetoeachtocfile}
|
|
% \changes{v3.12}{2013/09/24}{new (internal)}%^^A
|
|
% \begin{macro}{\@@@@addxcontentslinetoeachtocfile}
|
|
% \changes{v3.12}{2013/09/24}{new (internal)}%^^A
|
|
% Similar to \cs{addcontentslinetoeachtocfile} using
|
|
% \cs{addxcontentsline} instead of \cs{addcontentsline}.
|
|
% \begin{macrocode}
|
|
\newcommand{\addxcontentslinetoeachtocfile}{%
|
|
\kernel@ifnextchar [%]
|
|
\@addxcontentslinetoeachtocfile\@@addxcontentslinetoeachtocfile
|
|
}
|
|
\newcommand{\@addxcontentslinetoeachtocfile}[2][]{%
|
|
\kernel@ifnextchar [%]
|
|
{\@@@addxcontentslinetoeachtocfile[{#1}]{#2}}%
|
|
{\@@@addxcontentslinetoeachtocfile[{#1}]{#2}[]}
|
|
}
|
|
\newcommand*{\@@@addxcontentslinetoeachtocfile}{}
|
|
\def\@@@addxcontentslinetoeachtocfile[#1]#2[#3]#4{%
|
|
\doforeachtocfile[{#1}]{\addxcontentsline{\@currext}{#2}[#3]{#4}}%
|
|
}
|
|
\newcommand{\@@addxcontentslinetoeachtocfile}[1]{%
|
|
\kernel@ifnextchar [%]
|
|
{\@@@@addxcontentslinetoeachtocfile{#1}}%
|
|
{\@@@@addxcontentslinetoeachtocfile{#1}[]}%
|
|
}
|
|
\newcommand*{\@@@@addxcontentslinetoeachtocfile}{}
|
|
\def\@@@@addxcontentslinetoeachtocfile#1[#2]#3{%
|
|
\doforeachtocfile{\addxcontentsline{\@currext}{#1}[{#2}]{#3}}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \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}
|
|
% \changes{v3.17}{2015/03/23}{usage of feature \texttt{noparskipfake}}%^^A
|
|
% \changes{v3.27}{2019/07/08}{hack to add \cs{par} at end of (main) file}%^^A
|
|
% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by
|
|
% \cs{Iftocfeature}}%^^A
|
|
% 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}
|
|
%<*body>
|
|
\newcommand*{\tocbasic@starttoc}[1]{%
|
|
\begingroup
|
|
\edef\@currext{#1}%
|
|
\Iftocfeature{\@currext}{noparskipfake}{}{%
|
|
\ifvmode
|
|
\@tempskipa\lastskip
|
|
\vskip-\lastskip
|
|
\addtolength{\@tempskipa}{\parskip}%
|
|
\vskip\@tempskipa
|
|
\fi
|
|
}%
|
|
\setlength{\parskip}{\z@}%
|
|
\setlength{\parindent}{\z@}%
|
|
\setlength{\parfillskip}{\z@\@plus 1fil}%
|
|
\csname tocbasic@@before@hook\endcsname
|
|
\csname tb@#1@before@hook\endcsname
|
|
\let\tocbasic@saved@input\@input
|
|
\def\@input##1{%
|
|
\let\@input\tocbasic@saved@input\@input{##1}\par
|
|
}%
|
|
\@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}
|
|
% \changes{v3.04b}{2010/01/05}{fix: define the hook if not already defined}%^^A
|
|
% \changes{v3.06}{2010/06/09}{fix: using \cs{@ifundefined} instead of
|
|
% undefined \cs{scr@ifundefinedorrelax}}%^^A
|
|
% \changes{v3.26}{2018/08/10}{message moved to \texttt{trace}}%^^A
|
|
% \begin{macro}{\AfterStartingTOC}
|
|
% \changes{v3.04b}{2010/01/05}{fix:define the hook if not already defined}%^^A
|
|
% \changes{v3.06}{2010/06/09}{fix: using \cs{@ifundefined} instead of
|
|
% undefined \cs{scr@ifundefinedorrelax}}%^^A
|
|
% \changes{v3.26}{2018/08/10}{message moved to \texttt{trace}}%^^A
|
|
% 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][]{%
|
|
\ifx\relax#1\relax
|
|
\g@addto@macro\tocbasic@@before@hook{#2}%
|
|
\else
|
|
\@ifundefined{tb@#1@before@hook}{%
|
|
%<trace> \PackageInfo{tocbasic}{defining new hook before starting `#1'}%
|
|
\expandafter\global\expandafter\let\csname tb@#1@before@hook\endcsname
|
|
\@empty
|
|
}{}%
|
|
\expandafter\g@addto@macro\csname tb@#1@before@hook\endcsname{#2}%
|
|
\fi
|
|
}
|
|
\newcommand{\AfterStartingTOC}[2][]{%
|
|
\ifx\relax#1\relax
|
|
\g@addto@macro\tocbasic@@after@hook{#2}%
|
|
\else
|
|
\@ifundefined{tb@#1@after@hook}{%
|
|
%<trace> \PackageInfo{tocbasic}{defining new hook after starting `#1'}%
|
|
\expandafter\global\expandafter\let\csname tb@#1@after@hook\endcsname
|
|
\@empty
|
|
}{}%
|
|
\expandafter\g@addto@macro\csname tb@#1@after@hook\endcsname{#2}%
|
|
\fi
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\listoftoc}
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
|
|
% ersetzt}%^^A
|
|
% \begin{macro}{\@listoftoc}
|
|
% \changes{v1.0a}{2008/11/12}{\cs{twocolumn} fixed}%^^A
|
|
% \changes{v1.01}{2008/11/13}{new feature \texttt{onecolumn}}%^^A
|
|
% \changes{v3.09}{2011/03/01}{\cs{@currext} defined using \cs{edef} instead
|
|
% of \cs{def}}%^^A
|
|
% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by
|
|
% \cs{Iftocfeature}}%^^A
|
|
% \changes{v3.31}{2020/07/08}{use one time expansion of local
|
|
% \cs{list@fname}}%^^A
|
|
% 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}{%
|
|
\kernel@ifstar \tocbasic@starttoc\@listoftoc
|
|
}
|
|
\newcommand*{\@listoftoc}[2][]{%
|
|
\begingroup
|
|
\def\list@fname{#1}%
|
|
\@ifundefined{listof#2name}{%
|
|
\ifx\list@fname\@empty
|
|
\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}%
|
|
\fi
|
|
}{%
|
|
\expandafter\let\expandafter\list@fname\csname listof#2name\endcsname
|
|
}%
|
|
\edef\@currext{#2}%
|
|
\Iftocfeature{\@currext}{onecolumn}{%
|
|
\Iftocfeature{\@currext}{leveldown}{}{%
|
|
\if@twocolumn
|
|
\aftergroup\twocolumn\onecolumn
|
|
\fi
|
|
}%
|
|
}{}%
|
|
\Iftocfeature{\@currext}{numberline}{\def\nonumberline{\numberline{}}}{}%
|
|
\expandafter\tocbasic@listhead\expandafter{\list@fname}%
|
|
\scr@ifundefinedorrelax{microtypesetup}{}{%
|
|
\Iftocfeature{\@currext}{noprotrusion}{}{%
|
|
\microtypesetup{protrusion=false}%
|
|
\PackageInfo{tocbasic}{%
|
|
character protrusion at \@currext\space deactivated}%
|
|
}%
|
|
}%
|
|
\tocbasic@starttoc{#2}%
|
|
\endgroup
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \changes{v3.25}{2017/11/21}{\textsf{tocbibind} warning added}%^^A
|
|
% Using \textsf{tocbibind} and \textsf{tocbasic} together can break features
|
|
% either of \textsf{tocbibind} or \textsf{tocbasic}. Here we add at least a
|
|
% warning:
|
|
% \begin{macrocode}
|
|
\@ifpackageloaded{tocbibind}{}{%
|
|
\AtBeginDocument{%
|
|
\@ifpackageloaded{tocbibind}{%
|
|
\PackageInfo{tocbasic}{usage of `tocbibind' detected}%
|
|
\newcommand*{\tb@tocbibindpatch}[3]{%
|
|
\long\def\reserved@a{\tocfile{#2}{#1} }%
|
|
\ifx #3\reserved@a
|
|
\PackageWarningNoLine{tocbasic}{%
|
|
`tocbibind' redefinition of `\string#3'\MessageBreak
|
|
detected.\MessageBreak
|
|
Note: Loading `tocbibind' without option `not#1'\MessageBreak
|
|
can break several features of `tocbasic'%
|
|
\scr@ifundefinedorrelax{KOMAClassName}{%
|
|
.\MessageBreak
|
|
Loading `tocbibind' before `tocbasic' would avoid\MessageBreak
|
|
this warning message%
|
|
}{}%
|
|
}%
|
|
\fi
|
|
}%
|
|
\tb@tocbibindpatch{toc}{\contentsname}{\tableofcontents}%
|
|
\tb@tocbibindpatch{lof}{\listfigurename}{\listoffigures}%
|
|
\tb@tocbibindpatch{lot}{\listtablename}{\listoftables}%
|
|
}{}%
|
|
}%
|
|
}
|
|
% \end{macrocode}
|
|
%
|
|
% \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}
|
|
% \begin{macro}{\@listofeachtoc}
|
|
% \begin{macro}{\@@listofeachtoc}
|
|
% \changes{v3.03b}{2009/06/08}{typo fix at usage of \cs{doforeachtocfile}}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% Another example of using \cs{doforeachtocfile}.
|
|
% \begin{macrocode}
|
|
\newcommand*{\listofeachtoc}{%
|
|
\kernel@ifnextchar [%]
|
|
\@listofeachtoc\@@listofeachtoc
|
|
}
|
|
\newcommand{\@listofeachtoc}[1][]{%
|
|
\doforeachtocfile[{#1}]{\listoftoc{\@currext}}%
|
|
}
|
|
\newcommand{\@@listofeachtoc}[1]{%
|
|
\doforeachtocfile{\listoftoc{\@currext}}%
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\ext@toc}
|
|
% \changes{v3.23}{2017/02/23}{use indirect extension for toc}%^^A
|
|
% We do not longer hard code extension \texttt{toc} for the table of
|
|
% contents. This allowes users to change it. Classes or other packages may
|
|
% also define it. So it seems to be better to \cs{providecommand} instead of
|
|
% \cs{newcommand} here.
|
|
% \begin{macrocode}
|
|
\providecommand*{\ext@toc}{toc}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\tocbasic@listhead}
|
|
% \changes{v3.02a}{2009/01/20}{no explicite marks if ``numbered''}%
|
|
% \changes{v3.09a}{2011/04/12}{again no explicite marks if ``numbered''}%
|
|
% \changes{v3.12}{2013/09/24}{usage of new
|
|
% \cs{tocbasic@addxcontentsline}}%
|
|
% \changes{v3.15}{2014/12/10}{moved \cs{@mkboth} inside \cs{chapter*}}%^^A
|
|
% \changes{v3.15}{2014/12/10}{usage of \cs{addsec} if available}%^^A
|
|
% \changes{v3.15}{2014/12/10}{usage of \cs{@mkright} if available}%^^A
|
|
% \changes{v3.17}{2015/03/08}{moved \cs{@mkboth} outside \cs{chapter*}}%^^A
|
|
% \changes{v3.17}{2015/03/08}{usage of \cs{@mkdouble} if available}%^^A
|
|
% \changes{v3.17}{2015/03/25}{penalty and skip reconstruction after
|
|
% \cs{@mkright}, \cs{@mkboth}, or \cs{@mkdouble}}%^^A
|
|
% \changes{v3.26}{2018/06/22}{removed spurious group}%^^A
|
|
% \changes{v3.26}{2018/09/03}{usage of \cs{addsecmark} or \cs{sectionmark}
|
|
% instead of \cs{@mkright} or \cs{markright}}%^^A
|
|
% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by
|
|
% \cs{Iftocfeature}}%^^A
|
|
% Setting the headings of a list of something. The heading is the only
|
|
% argument.
|
|
% \begin{macrocode}
|
|
\newcommand*{\tocbasic@listhead}[1]{%
|
|
\@ifundefined{tocbasic@listhead@\@currext}{%
|
|
\scr@ifundefinedorrelax{chapter}{%
|
|
\expandafter\def\csname tocbasic@listhead@\@currext\endcsname##1{%
|
|
\Iftocfeature{\@currext}{leveldown}{%
|
|
\Iftocfeature{\@currext}{numbered}{%
|
|
\subsection[##1]{##1}%
|
|
}{%
|
|
\subsection*{##1}%
|
|
\ifvmode\@tempcnta\lastpenalty\@tempskipa\lastskip\unskip\fi
|
|
\begingroup
|
|
\Iftocfeature{\@currext}{totoc}{%
|
|
\expandafter\addxcontentsline\expandafter{\ext@toc}%
|
|
{subsection}{##1}%
|
|
}{}%
|
|
\c@secnumdepth=-\maxdimen
|
|
\subsectionmark{##1}%
|
|
\endgroup
|
|
\ifvmode\penalty\@tempcnta\vskip\@tempskipa\fi
|
|
}%
|
|
}{%
|
|
\Iftocfeature{\@currext}{numbered}{%
|
|
\section[##1]{##1}%
|
|
}{%
|
|
\section*{##1}%
|
|
\ifvmode\@tempcnta\lastpenalty\@tempskipa\lastskip\unskip\fi
|
|
\begingroup
|
|
\Iftocfeature{\@currext}{totoc}{%
|
|
\expandafter\addxcontentsline\expandafter{\ext@toc}%
|
|
{section}{##1}%
|
|
}{}%
|
|
\@ifundefined{@mkdouble}{%
|
|
\@mkboth{\MakeMarkcase{##1}}{\MakeMarkcase{##1}}%
|
|
}{%
|
|
\@mkdouble{\MakeMarkcase{##1}}%
|
|
}%
|
|
\endgroup
|
|
\ifvmode\penalty\@tempcnta\vskip\@tempskipa\fi
|
|
}%
|
|
}%
|
|
}%
|
|
}{%
|
|
\expandafter\def\csname tocbasic@listhead@\@currext\endcsname##1{%
|
|
\Iftocfeature{\@currext}{leveldown}{%
|
|
\Iftocfeature{\@currext}{numbered}{%
|
|
\section{##1}%
|
|
}{%
|
|
\Iftocfeature{\@currext}{totoc}{%
|
|
\@ifundefined{addsec}{%
|
|
\section*{##1}%
|
|
\ifvmode\@tempcnta\lastpenalty\@tempskipa\lastskip\unskip\fi
|
|
\begingroup
|
|
\@ifundefined{@mkright}{%
|
|
\IfActiveMkBoth{\markright{\MakeMarkcase{##1}}}{}%
|
|
}{%
|
|
\@mkright{\MakeMarkcase{##1}}%
|
|
}%
|
|
\expandafter\addxcontentsline\expandafter{\ext@toc}%
|
|
{section}{##1}%
|
|
\endgroup
|
|
\ifvmode\penalty\@tempcnta\vskip\@tempskipa\fi
|
|
}{%
|
|
\addsec{##1}%
|
|
}%
|
|
}{%
|
|
\section*{##1}%
|
|
\ifvmode\@tempcnta\lastpenalty\@tempskipa\lastskip\unskip\fi
|
|
\begingroup
|
|
\@ifundefined{addsecmark}{%
|
|
\c@secnumdepth=-\maxdimen
|
|
\sectionmark{##1}%
|
|
}{%
|
|
\addsecmark{##1}%
|
|
}%
|
|
\endgroup
|
|
\ifvmode\penalty\@tempcnta\vskip\@tempskipa\fi
|
|
}%
|
|
}%
|
|
}{%
|
|
\Iftocfeature{\@currext}{numbered}{%
|
|
\chapter[##1]{##1}%
|
|
}{%
|
|
\chapter*{##1}%
|
|
\ifvmode\@tempcnta\lastpenalty\@tempskipa\lastskip\unskip\fi
|
|
\begingroup
|
|
\@ifundefined{@mkdouble}{%
|
|
\@mkboth{\MakeMarkcase{##1}}{\MakeMarkcase{##1}}%
|
|
}{%
|
|
\@mkdouble{\MakeMarkcase{##1}}%
|
|
}%
|
|
\Iftocfeature{\@currext}{totoc}{%
|
|
\expandafter\addxcontentsline\expandafter{\ext@toc}%
|
|
{chapter}{##1}%
|
|
}{}%
|
|
\endgroup
|
|
\ifvmode\penalty\@tempcnta\vskip\@tempskipa\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}
|
|
% \changes{v3.04b}{2010/01/05}{fix: define the hook if not already defined}%^^A
|
|
% \changes{v3.06}{2010/06/09}{fix: using \cs{@ifundefined} instead of
|
|
% undefined \cs{scr@ifundefinedorrelax}}%^^A
|
|
% \changes{v3.26}{2018/08/10}{message moved to \texttt{trace}}%^^A
|
|
% \begin{macro}{\AfterTOCHead}
|
|
% \changes{v3.04b}{2010/01/05}{fix: define the hook if not already defined}%^^A
|
|
% \changes{v3.06}{2010/06/09}{fix: using \cs{@ifundefined} instead of
|
|
% undefined \cs{scr@ifundefinedorrelax}}%^^A
|
|
% \changes{v3.26}{2018/08/10}{message moved to \texttt{trace}}%^^A
|
|
% 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][]{%
|
|
\@ifundefined{tb@#1@beforehead@hook}{%
|
|
%<trace> \PackageInfo{tocbasic}{defining new hook before heading of `#1'}%
|
|
\expandafter\global\expandafter\let\csname tb@#1@beforehead@hook\endcsname
|
|
\@empty
|
|
}{}%
|
|
\expandafter\g@addto@macro\csname tb@#1@beforehead@hook\endcsname{#2}%
|
|
}
|
|
\newcommand{\AfterTOCHead}[2][]{%
|
|
\@ifundefined{tb@#1@afterhead@hook}{%
|
|
%<trace> \PackageInfo{tocbasic}{defining new hook after heading of `#1'}%
|
|
\expandafter\global\expandafter\let\csname tb@#1@afterhead@hook\endcsname
|
|
\@empty
|
|
}{}%
|
|
\expandafter\g@addto@macro\csname tb@#1@afterhead@hook\endcsname{#2}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\MakeMarkcase}
|
|
% Use upper-case or not?
|
|
% \begin{macrocode}
|
|
%<*exit>
|
|
\AtBeginDocument{%
|
|
\@ifundefined{MakeMarkcase}{%
|
|
\scr@ifundefinedorrelax{KOMAClassName}{%
|
|
\let\MakeMarkcase\MakeUppercase
|
|
}{%
|
|
\let\MakeMarkcase\@firstofone
|
|
}%
|
|
}{}%
|
|
}
|
|
%</exit>
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\deftocheading}
|
|
% Define a toc headings command with one argument (the title).
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\newcommand*{\deftocheading}[1]{%
|
|
\@namedef{tocbasic@listhead@#1}##1}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\setuptoc}
|
|
% \changes{v3.26}{2018/08/29}{Verwendung von \cs{scr@trim@spaces} statt
|
|
% \cs{tb@@sp@def}}%^^A
|
|
% \begin{macro}{\unsettoc}
|
|
% \changes{v3.26}{2018/08/29}{Verwendung von \cs{scr@trim@spaces} statt
|
|
% \cs{tb@@sp@def}}%^^A
|
|
% Known features are:
|
|
% \begin{description}
|
|
% \item[\texttt{totoc}] writes the title of the list of to the table of
|
|
% contents
|
|
% \item[\texttt{numberline}] redefines \cs{nonumberline} to use
|
|
% \cs{numberline}
|
|
% \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.
|
|
% \item[[\texttt{noprotrusion}]] prevents disabling character protrusion at
|
|
% the toc.
|
|
% \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{%
|
|
\scr@trim@spaces\@tempa
|
|
\@namedef{tocbasic@#1@feature@\@tempa}{}%
|
|
}%
|
|
}
|
|
\newcommand*{\unsettoc}[2]{%
|
|
\@for\@tempa:=#2\do{%
|
|
\scr@trim@spaces\@tempa
|
|
\expandafter\let\csname tocbasic@#1@feature@\@tempa\endcsname\relax
|
|
}%
|
|
}
|
|
% \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}
|
|
% \changes{v3.28}{2019/11/19}{renamed to \cs{Iftocfeature}}%^^A
|
|
% \begin{macro}{\Iftocfeature}
|
|
% \changes{v3.28}{2019/11/19}{renamed from \cs{iftocfeature}}%^^A
|
|
% We need a test for the features
|
|
% \begin{macrocode}
|
|
\providecommand*{\iftocfeature}{%
|
|
\PackageWarning{tocbasic}{Usage of deprecated command
|
|
`\string\iftocfeature'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\iftocfeature' by `\string\Iftocfeature'%
|
|
}%
|
|
\Iftocfeature
|
|
}
|
|
\newcommand*{\Iftocfeature}[2]{%
|
|
\scr@ifundefinedorrelax{tocbasic@#1@feature@#2}{%
|
|
\expandafter\@secondoftwo
|
|
}{%
|
|
\expandafter\@firstoftwo
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
% \begin{macro}{\tocbasicautomode}
|
|
% \changes{v1.0a}{2008/11/11}{use of \cs{addtotoclist} instead of
|
|
% internal}%^^A
|
|
% \changes{v3.07a}{2010/11/25}{fix: added missing
|
|
% \cs{let}\cs{@starttoc}\cs{tocbasic@starttoc}}%^^A
|
|
% \changes{v3.28}{2019/11/19}{\cs{ifattoclist} replaced by
|
|
% \cs{Ifattoclist}}%^^A
|
|
% \textsf{tocbasic} can overtake \cs{@starttoc} to automaticly add all
|
|
% used extensions to the list of known extensions and use
|
|
% \cs{tocbasic@starttoc} instead of \cs{@starttoc} from \LaTeX{}
|
|
% kernel. Please note, that we don't need a fix for the unfriendly
|
|
% redefinition of \cs{@starttoc} by \textsf{hyperref}, because hyperref
|
|
% does it only at the first \LaTeX{} run. So this action of \textsf{hyperref}
|
|
% may only result in the need of one more \LaTeX{} run, but not in a permanent
|
|
% mistake.
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\newcommand*{\tocbasicautomode}{%
|
|
\let\tb@saved@starttoc\@starttoc
|
|
\let\@starttoc\tocbasic@starttoc
|
|
\BeforeStartingTOC{%
|
|
\let\@starttoc\tb@saved@starttoc
|
|
\expandafter\Ifattoclist\expandafter{\@currext}{}{%
|
|
\addtotoclist[tocbasicautomode]{\@currext}%
|
|
}%
|
|
}%
|
|
}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
%
|
|
%
|
|
% \subsection{High Level Interface for Generating New TOCs and Floats}
|
|
% \label{sec:newfloats}
|
|
%
|
|
% \begin{macro}{\DeclareNewTOC}
|
|
% \changes{v3.06}{2010/06/01}{new high level command}%^^A
|
|
% \changes{v3.18}{2015/06/20}{\cs{tb@nt@types} and \cs{tb@nt@listname} are
|
|
% initialised \cs{relax}}%^^A
|
|
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
|
|
% \cs{kernel@ifnextchar}}%^^A
|
|
% \changes{v3.26a}{2018/12/30}{fixed usage of \cs{kernel@ifnextchar}}%^^A
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% This command defines only a new TOC and a new caption command for this
|
|
% TOC. It does not define a new foat unless option float was set! It does
|
|
% not define a new nonfloat unless option nonfloat was set! The optional
|
|
% argument is used to set up several settings using \textsf{keyval}. The
|
|
% mandatory argument is the shortcut. The default type is the shortcut.
|
|
% The extension is the shortcut. The default owner is ``\texttt{float}''.
|
|
% \begin{macrocode}
|
|
%<*body>
|
|
\DefineFamily{KOMAarg}
|
|
\DefineFamilyMember[.toc]{KOMAarg}
|
|
\newcommand*{\DeclareNewTOC}[2][]{%
|
|
\newif\iftb@nt@float
|
|
\newif\iftb@nt@nonfloat
|
|
\newif\iftb@nt@forcenames
|
|
\def\tb@nt@floattype{\tb@nt@autofloattype}%
|
|
\def\tb@nt@floatpos{tbp}%
|
|
\def\tb@nt@ext{#2}%
|
|
\edef\tb@nt@type{#2}%
|
|
\let\tb@nt@types\relax
|
|
\def\tb@nt@owner{float}%
|
|
\def\tb@nt@name{\expandafter\protect\expandafter\MakeUppercase\tb@nt@type}%
|
|
\let\tb@nt@listname\relax
|
|
\let\tb@nt@counterwithin\@empty
|
|
\let\tb@nt@atbegin\@empty
|
|
\let\tb@nt@atend\@empty
|
|
\def\tb@nt@tocentrystyle{default}%
|
|
% \end{macrocode}
|
|
% \changes{v3.20}{2016/04/29}{need more initialization for empty optional
|
|
% argument}%^^A
|
|
% \begin{macrocode}
|
|
\def\tb@nt@tocstyle@options{level=1}%
|
|
\IfArgIsEmpty{#1}{%
|
|
% \end{macrocode}
|
|
% Also need to call the style init code, to set the defaults for options
|
|
% \texttt{numwidth} and \texttt{indent}.
|
|
% \begin{macrocode}
|
|
\begingroup
|
|
\let\scr@dte@current\tb@nt@type
|
|
\@ExecuteTOCEntryStyleInitCode{\tb@nt@tocentrystyle}{\tb@nt@type}%
|
|
\def\do@endgroup{\endgroup}%
|
|
\def\do##1{%
|
|
\Ifstr{##1}{numwidth}{%
|
|
\l@addto@macro\do@endgroup{%
|
|
\l@addto@macro{\tb@nt@tocstyle@options}{,numwidth=1.5em}%
|
|
}%
|
|
}{%
|
|
\Ifstr{##1}{indent}{%
|
|
%<trace>\typeout{TRACE \string\DeclareNewTOC[...]{#2}: set default indent 1em}%
|
|
\l@addto@macro\do@endgroup{%
|
|
\l@addto@macro{\tb@nt@tocstyle@options}{,indent=1em}%
|
|
}%
|
|
}{}%
|
|
}%
|
|
\kernel@ifnextchar[%]
|
|
{\@dodefault}%
|
|
{}%
|
|
}%
|
|
\def\@dodefault[##1]{}%
|
|
\scr@dte@doopts
|
|
\do@endgroup
|
|
}{%
|
|
\let\tb@nt@extra@relax@opts\@empty
|
|
% \end{macrocode}
|
|
% After initialisation of the local values we need to know the style of the
|
|
% toc entry, to define style dependend options.
|
|
% \begin{macro}{\tb@nt@type}
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% The type of list is used for environment and counter names and as part of
|
|
% several internal and user macros. It is needed before defining the style
|
|
% dependend options. So we use a first run to set it up.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{type}{%
|
|
\tb@ifvalueisnotempty{##1}{\edef\tb@nt@type{##1}}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@tocentrystyle}
|
|
% \changes{v3.20}{2015/12/16}{neu (intern)}
|
|
% The style of the toc entry. It is needed before defining the style
|
|
% dependend options. So we use a first run to set it up.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{tocentrystyle}[default]{%
|
|
\IfArgIsEmpty{##1}{%
|
|
\edef\tb@nt@tocentrystyle{##1}%
|
|
\FamilyKeyStateProcessed
|
|
}{%
|
|
\scr@ifundefinedorrelax{scr@dte@def@l@##1}{%
|
|
\FamilyKeyStateUnknownValue
|
|
}{%
|
|
\edef\tb@nt@tocentrystyle{##1}%
|
|
\FamilyKeyStateProcessed
|
|
}%
|
|
}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@ext}
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% \changes{v3.25}{2017/11/20}{moved to pass 1}%^^A
|
|
% Don't tell the user, that the mandatory argument of the command may be
|
|
% overloaded by this option. This was only done to simplify the definition.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{extension}{%
|
|
\tb@ifvalueisnotempty{##1}{\edef\tb@nt@ext{##1}}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@owner}
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% \changes{v3.26}{2018/06/09}{moved to pass 1}%^^A
|
|
% \changes{v3.27}{2019/05/12}{\texttt{category} is a synonym for
|
|
% \texttt{owner}}%^^A
|
|
% The owner of the new list extension.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{owner}{%
|
|
\tb@ifvalueisnotempty{##1}{\edef\tb@nt@owner{##1}}%
|
|
}%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{category}{%
|
|
\tb@ifvalueisnotempty{##1}{\edef\tb@nt@owner{##1}}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% After this we define pseudo option \texttt{@else@} to ignore all currently
|
|
% not needed options. After this we do the first option execution run.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{@else@}{\FamilyKeyStateProcessed}%
|
|
\FamilyExecuteOptions[.toc]{KOMAarg}{#1}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{@else@}%
|
|
% \end{macrocode}
|
|
% \changes{v3.26}{2018/06/09}{add extension already after first pass}%^^A
|
|
% First of all, every TOC needs an extension, that should be added to the
|
|
% list of known extensions. This has to be done also, if no options has been
|
|
% given!
|
|
% \begin{macrocode}
|
|
}%
|
|
\expandafter\newcommand\csname ext@\tb@nt@type\endcsname{}%
|
|
\expandafter\let\csname ext@\tb@nt@type\endcsname\tb@nt@ext
|
|
\addtotoclist[\tb@nt@owner]{\csname ext@\tb@nt@type\endcsname}%
|
|
\IfArgIsEmpty{#1}{}{%
|
|
% \end{macrocode}
|
|
% For the second option pass we do not need to set up these options
|
|
% again. So define it as no-opt.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{type}{\FamilyKeyStateProcessed}%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{tocentrystyle}{\FamilyKeyStateProcessed}%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{extension}{\FamilyKeyStateProcessed}%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{category}{\FamilyKeyStateProcessed}%
|
|
% \end{macrocode}
|
|
% \changes{v3.20}{2015/12/16}{defining toc style depending options}%^^A
|
|
% \changes{v3.20}{2016/06/12}{using prefix \texttt{tocentry} instead of
|
|
% \texttt{toc}}%^^A
|
|
% \changes{v3.27}{2019/10/02}{additional \texttt{:}-options}%^^A
|
|
% If the toc style is empty we won't define any \cs{l@\dots}. Otherwise we
|
|
% need to define additional options.
|
|
% \begin{macrocode}
|
|
\Ifstr{\tb@nt@tocentrystyle}{}{}{%
|
|
\begingroup
|
|
\let\scr@dte@current\tb@nt@type
|
|
\@ExecuteTOCEntryStyleInitCode{\tb@nt@tocentrystyle}{\tb@nt@type}%
|
|
\def\do@endgroup{\endgroup}%
|
|
\def\do##1{%
|
|
\l@addto@macro\do@endgroup{%
|
|
\l@addto@macro\tb@nt@extra@relax@opts{%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{toc##1}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{tocentry##1}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{tocentry##1:}%
|
|
}%
|
|
}%
|
|
\kernel@ifnextchar[%]
|
|
{\@dodefault{##1}}%
|
|
{\@donodefault{##1}}%
|
|
}%
|
|
\def\@donodefault##1{%
|
|
\l@addto@macro\do@endgroup{%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{toc##1}{%
|
|
\PackageWarning{tocbasic}{you should use `tocentry##1'
|
|
instead\MessageBreak
|
|
of `toc##1'}%
|
|
\l@addto@macro{\tb@nt@tocstyle@options}{,##1={####1}}%
|
|
\FamilyKeyStateProcessed
|
|
}%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{tocentry##1}{%
|
|
\l@addto@macro{\tb@nt@tocstyle@options}{,##1={####1}}%
|
|
\FamilyKeyStateProcessed
|
|
}%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{tocentry##1:}{%
|
|
\l@addto@macro{\tb@nt@tocstyle@options}{,##1:={####1}}%
|
|
}%
|
|
}%
|
|
}%
|
|
\def\@dodefault##1[##2]{%
|
|
\l@addto@macro\do@endgroup{%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{toc##1}[##2]{%
|
|
\PackageWarning{tocbasic}{you should use `tocentry##1'
|
|
instead\MessageBreak
|
|
of `toc##1'}%
|
|
\l@addto@macro{\tb@nt@tocstyle@options}{,##1={####1}}%
|
|
\FamilyKeyStateProcessed
|
|
}%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{tocentry##1}[##2]{%
|
|
\l@addto@macro{\tb@nt@tocstyle@options}{,##1={####1}}%
|
|
\FamilyKeyStateProcessed
|
|
}%
|
|
\DefineFamilyKey[.toc]{KOMAarg}{tocentry##1:}{%
|
|
\l@addto@macro{\tb@nt@tocstyle@options}{,##1:={####1}}%
|
|
}%
|
|
}%
|
|
}%
|
|
\scr@dte@doopts
|
|
\do@endgroup
|
|
}%
|
|
% \end{macrocode}
|
|
% After this, we need to define all the other options and do the real option
|
|
% execution.
|
|
% \begin{macro}{\tb@nt@atbegin}
|
|
% \changes{v3.09}{2011/03/01}{new optional identifier \texttt{atbegin}}%^^A
|
|
% \changes{v3.11c}{2013/02/01}{\texttt{atbegin} argument may be empty}%^^A
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% Additional code executed at the begin of a new defined environment.
|
|
% \begin{macrocode}
|
|
\FamilyStringKey[.toc]{KOMAarg}{atbegin}{\tb@nt@atbegin}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@atend}
|
|
% \changes{v3.09}{2011/03/01}{new optional identifier \texttt{atbend}}%^^A
|
|
% \changes{v3.11c}{2013/02/01}{\texttt{atend} argument may be empty}%^^A
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% Additional code executed at the end of a new defined environment.
|
|
% \begin{macrocode}
|
|
\FamilyStringKey[.toc]{KOMAarg}{atend}{\tb@nt@atend}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@counterwithin}
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% If a counter will be defined, this counter may depend on another counter
|
|
% (like figure counter depends on chapter counter at book classes). If the
|
|
% value is empty, the counter does not depend on any other counter.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{counterwithin}{%
|
|
\edef\tb@nt@counterwithin{##1}\FamilyKeyStateProcessed
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\iftb@nt@float}
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% \changes{v3.06}{2010/06/01}{new internal}%^^A
|
|
% This boolean indicates, that float environments should also be defined.
|
|
% \begin{macrocode}
|
|
\FamilyBoolKey[.toc]{KOMAarg}{float}{tb@nt@float}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@floatpos}
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% Simply the value for the |\fps@...| macro.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{floatpos}{%
|
|
\tb@ifvalueisnotempty{##1}{\edef\tb@nt@floatpos{##1}}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@floattype}
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% Simply the value for the |\ftype@...| macro. It has to be
|
|
% $1<=\textrm{value}<=31$.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{floattype}{%
|
|
\FamilySetCounterMacro{KOMAarg}{floattype}{\reserved@d}{##1}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\ifnum 0=
|
|
\ifnum\reserved@d<1 0 \else\ifnum\reserved@d>31 0 \else 1 \fi\fi
|
|
\FamilyKeyStateUnknownValue
|
|
\else
|
|
\let\tb@nt@floattype\reserved@d
|
|
\fi
|
|
\fi
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\iftb@nt@forcenames}
|
|
% \changes{v3.06}{2010/06/01}{new internal}%^^A
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% The |\...name| commands will only be defined, if they are not already
|
|
% defined. But some users may want to define their own names even if there
|
|
% are already definitions. So this boolean option may switch to force the
|
|
% definition.
|
|
% \begin{macrocode}
|
|
\FamilyBoolKey[.toc]{KOMAarg}{forcenames}{tb@nt@forcenames}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@hang}
|
|
% \changes{v3.20}{2015/12/16}{undefined}%^^A
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% Earch entry of a TOC/list of is idented on the left side. This is the
|
|
% amount of the indention of the text of the entry.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{hang}{%
|
|
\scr@ifundefinedorrelax{KV@KOMAarg.toc@tocnumwidth}{%
|
|
\PackageWarning{tocbasic}{%
|
|
deprecated option `hang'.\MessageBreak
|
|
Option will be ignored, because toc entry style\MessageBreak
|
|
`\tb@nt@tocentrystyle' does not provide option `numwidth'%
|
|
}%
|
|
}{%
|
|
\PackageWarning{tocbasic}{%
|
|
deprecated option `hang'.\MessageBreak
|
|
You should replace option `hang' by option\MessageBreak
|
|
`tocentrynumwidth'%
|
|
}%
|
|
\l@addto@macro\tb@nt@tocstyle@options{,numwidth={##1}}%
|
|
}%
|
|
\FamilyKeyStateProcessed
|
|
}%
|
|
\scr@ifundefinedorrelax{KV@KOMAarg.toc@tocnumwidth}{}{%
|
|
\l@addto@macro\tb@nt@tocstyle@options{,numwidth=1.5em}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@indent}
|
|
% \changes{v3.20}{2015/12/16}{undefined}%^^A
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% Earch entry of a TOC/list of is idented on the left side. This is the
|
|
% amount of the indention of the number part.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{indent}{%
|
|
\scr@ifundefinedorrelax{KV@KOMAarg.toc@tocindent}{%
|
|
\PackageWarning{tocbasic}{%
|
|
deprecated option `indent'.\MessageBreak
|
|
Option will be ignored, because toc entry style\MessageBreak
|
|
`\tb@nt@tocentrystyle' does not provide option `indent'%
|
|
}%
|
|
}{%
|
|
\PackageWarning{tocbasic}{%
|
|
deprecated option `indent'.\MessageBreak
|
|
You should replace option `indent' by option\MessageBreak
|
|
`tocentryindent'%
|
|
}%
|
|
\l@addto@macro\tb@nt@tocstyle@options{,indent={##1}}%
|
|
}%
|
|
\FamilyKeyStateProcessed
|
|
}%
|
|
\scr@ifundefinedorrelax{KV@KOMAarg.toc@tocindent}{}{%
|
|
%<trace>\typeout{TRACE \string\DeclareNewTOC[...]{#2}: set default indent 1em}%
|
|
\l@addto@macro\tb@nt@tocstyle@options{,indent=1em}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@level}
|
|
% \changes{v3.20}{2015/12/16}{undefined}%^^A
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% \changes{v3.30}{2020/02/25}{spurious space in warning message removed}%^^A
|
|
% Each entry to a TOC/list of has a numeric level. You may set up your own
|
|
% level.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{level}{%
|
|
\PackageWarning{tocbasic}{%
|
|
deprecated option `level'.\MessageBreak
|
|
You should replace option `level' by option\MessageBreak
|
|
`tocentrylevel'%
|
|
}%
|
|
\l@addto@macro\tb@nt@tocstyle@options{,level={##1}}%
|
|
\FamilyKeyStateProcessed
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@listname}
|
|
% \changes{v3.18}{2015/06/20}{using \cs{def} instead of \cs{edef}}%^^A
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% The list itself has a heading. A |\list<type>name| will also be defined.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{listname}{%
|
|
\tb@ifvalueisnotempty{##1}{\def\tb@nt@listname{##1}}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@name}
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% We need a name/term for the entries of the new list. This may e.\,g. be used
|
|
% for |caption| output. A |\<type>name| will also be defined.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{name}{%
|
|
\tb@ifvalueisnotempty{##1}{\edef\tb@nt@name{##1}}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\iftb@nt@nonfloat}
|
|
% \changes{v3.06}{2010/06/01}{new (internal)}%^^A
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% This boolean indicates, that non-float environment should also be
|
|
% defined. The environment has the postfix ``-''.
|
|
% \begin{macrocode}
|
|
\FamilyBoolKey[.toc]{KOMAarg}{nonfloat}{tb@nt@nonfloat}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@types}
|
|
% \changes{v3.20}{2015/12/16}{local valid only}%^^A
|
|
% Sometimes the plural of the type is needed and may be defined by a
|
|
% seperate option.
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{types}{%
|
|
\tb@ifvalueisnotempty{##1}{\edef\tb@nt@types{##1}}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \changes{v3.25}{2017/11/20}{new (internal)}%^^A
|
|
% The new option \texttt{setup} allowes to setup ToC features provided by
|
|
% \cs{setuptoc}. Note, currently there is no test whether or not a feature
|
|
% does exist!
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{setup}{%
|
|
\setuptoc\tb@nt@ext{##1}%
|
|
}%
|
|
% \end{macrocode}
|
|
% \changes{v3.25}{2017/11/20}{new (internal)}%^^A
|
|
% The new option \texttt{unset} allowes to unset ToC features provided
|
|
% by \cs{unsettoc}. Note, currently there is no test whether or not a
|
|
% feature does exist!
|
|
% \begin{macrocode}
|
|
\DefineFamilyKey[.toc]{KOMAarg}{unset}{%
|
|
\unsettoc\tb@nt@ext{##1}%
|
|
}%
|
|
% \end{macrocode}
|
|
% Last but not least we have to execute the options and reset the option
|
|
% definitions.
|
|
% \changes{v3.25}{2017/09/27}{\texttt{nonfloat} fixed}%^^A
|
|
% \changes{v3.26}{2018/06/09}{added missing reset of \texttt{unset} and
|
|
% \texttt{setup}}%^^A
|
|
% \begin{macrocode}
|
|
\FamilyExecuteOptions[.toc]{KOMAarg}{#1}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{unset}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{setup}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{types}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{nonfloat}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{name}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{listname}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{level}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{indent}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{hang}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{forcenames}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{floatpos}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{float}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{counterwithin}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{atend}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{atbegin}%
|
|
\tb@nt@extra@relax@opts
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{category}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{owner}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{extension}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{tocentrystyle}%
|
|
\RelaxFamilyKey[.toc]{KOMAarg}{type}%
|
|
}%
|
|
% \end{macrocode}
|
|
% We save the type of the extension at \cs{tb@nt@type@\meta{extension}}
|
|
% for later usage.
|
|
% \begin{macrocode}
|
|
\expandafter\let\csname tb@nt@type@\tb@nt@ext\endcsname\tb@nt@type
|
|
% \end{macrocode}
|
|
% Then we need the TOC itself with a name:
|
|
% \changes{v3.25}{2017/10/10}{use \cs{ext@\dots} instead of the extension
|
|
% itself in definition of \cs{listof\dots}}%^^A
|
|
% \begin{macrocode}
|
|
\scr@ifundefinedorrelax{tb@nt@types}{%
|
|
\edef\tb@nt@types{\tb@nt@type s}%
|
|
}{}%
|
|
\scr@ifundefinedorrelax{tb@nt@listname}{%
|
|
\protected@edef\tb@nt@listname{List of \protect\MakeUppercase\tb@nt@types}%
|
|
}{}%
|
|
\@ifundefined{\tb@nt@type name}{%
|
|
\expandafter\protected@edef\csname \tb@nt@type name\endcsname{\tb@nt@name}%
|
|
}{%
|
|
\iftb@nt@forcenames
|
|
\expandafter\protected@edef\csname \tb@nt@type name\endcsname
|
|
{\tb@nt@name}%
|
|
\fi
|
|
}%
|
|
\@ifundefined{list\tb@nt@type name}{%
|
|
\expandafter\let\csname list\tb@nt@type name\endcsname\tb@nt@listname
|
|
}{%
|
|
\iftb@nt@forcenames
|
|
\expandafter\let\csname list\tb@nt@type name\endcsname\tb@nt@listname
|
|
\fi
|
|
}%
|
|
\expandafter\newcommand\csname listof\tb@nt@ext name\expandafter\endcsname
|
|
\expandafter{\csname list\tb@nt@type name\endcsname}%
|
|
\begingroup\edef\@tempa{\endgroup
|
|
\noexpand\newcommand*\csname listof\tb@nt@types\endcsname{%
|
|
\noexpand\listoftoc{%
|
|
\expandafter\noexpand\csname ext@\tb@nt@type\endcsname}%
|
|
}%
|
|
}\@tempa
|
|
% \end{macrocode}
|
|
% The list entry:
|
|
% \changes{v3.20}{2016/04/05}{warning if \cs{l@\dots} is undefined}%^^A
|
|
% \begin{macrocode}
|
|
\Ifstr{\tb@nt@tocentrystyle}{}{%
|
|
\@ifundefined{l@\tb@nt@type}{%
|
|
\PackageWarning{tocbasic}{%
|
|
\expandafter\string\csname l@\tb@nt@type\endcsname\space
|
|
undefined!\MessageBreak
|
|
I hope you know, what you are doing, but\MessageBreak
|
|
maybe it would be better to use proper\MessageBreak
|
|
`tocentrystyle' settings%
|
|
}%
|
|
}{}%
|
|
}{%
|
|
\edef\reserved@a{%
|
|
\noexpand\DeclareTOCStyleEntry[%
|
|
{\unexpanded\expandafter{\tb@nt@tocstyle@options}}%
|
|
]{\tb@nt@tocentrystyle}{\tb@nt@type}%
|
|
}%
|
|
\reserved@a
|
|
}%
|
|
% \end{macrocode}
|
|
% \changes{v3.12}{2013/05/03}{fixed: definition of
|
|
% \cs{listof\meta{type}entryname} added as explained in the manual}%^^A
|
|
% \begin{macrocode}
|
|
\@ifundefined{listof\tb@nt@ext entryname}{%
|
|
\expandafter\let\csname listof\tb@nt@ext entryname\endcsname\tb@nt@name
|
|
}{}%
|
|
% \end{macrocode}
|
|
% The setup command:
|
|
% \begin{macrocode}
|
|
\begingroup\edef\@tempa{\endgroup
|
|
\noexpand\newcommand*\csname setup\tb@nt@types\endcsname{%
|
|
\noexpand\setuptoc{\tb@nt@ext}%
|
|
}%
|
|
}\@tempa
|
|
\@tempswafalse
|
|
% \end{macrocode}
|
|
% The float environments:
|
|
% \changes{v3.09a}{2011/05/30}{fixed: floats may have an optional argument}%^^A
|
|
% \changes{v3.12}{2013/12/10}{fixed: usage of default placement}%^^A
|
|
% \begin{macrocode}
|
|
\iftb@nt@float
|
|
\expandafter\newcommand\expandafter*\csname fps@\tb@nt@type\expandafter
|
|
\endcsname\expandafter{\tb@nt@floatpos}%
|
|
\expandafter\newcommand\expandafter*\csname ftype@\tb@nt@type\expandafter
|
|
\endcsname\expandafter{\tb@nt@floattype}%
|
|
\begingroup
|
|
\edef\@tempa{%
|
|
\noexpand\endgroup
|
|
\noexpand\newenvironment{\tb@nt@type}{%
|
|
\noexpand\kernel@ifnextchar[%]
|
|
{\noexpand\tb@atbegin@after\noexpand\@float{\tb@nt@type}}%
|
|
{\noexpand\edef\noexpand\reserved@a{%
|
|
\noexpand\noexpand\noexpand\tb@atbegin@after
|
|
\noexpand\noexpand\noexpand\@float{\tb@nt@type}%
|
|
[\noexpand\csname fps@\tb@nt@type\noexpand\endcsname]}%
|
|
\noexpand\reserved@a}%
|
|
}{%
|
|
\noexpand\csname \tb@nt@type @atend\noexpand\endcsname
|
|
\noexpand\end@float
|
|
}%
|
|
\noexpand\newenvironment{\tb@nt@type*}{%
|
|
\noexpand\kernel@ifnextchar[%]
|
|
{\noexpand\tb@atbegin@after\noexpand\@dblfloat{\tb@nt@type}}%
|
|
{\noexpand\edef\noexpand\reserved@a{%
|
|
\noexpand\noexpand\noexpand\tb@atbegin@after
|
|
\noexpand\noexpand\noexpand\@dblfloat{\tb@nt@type}%
|
|
[\noexpand\csname fps@\tb@nt@type\noexpand\endcsname]}%
|
|
\noexpand\reserved@a}%
|
|
}{%
|
|
\noexpand\csname \tb@nt@type @atend\noexpand\endcsname
|
|
\noexpand\end@dblfloat
|
|
}%
|
|
}%
|
|
\@tempa
|
|
\@tempswatrue
|
|
\fi
|
|
% \end{macrocode}
|
|
% The nonfloat environment:
|
|
% \begin{macrocode}
|
|
\iftb@nt@nonfloat
|
|
\begingroup
|
|
\edef\@tempa{%
|
|
\noexpand\endgroup
|
|
\noexpand\newenvironment{\tb@nt@type-}{%
|
|
\noexpand\trivlist\noexpand\item\noexpand\relax
|
|
\noexpand\minipage{\noexpand\linewidth}%
|
|
\noexpand\def\noexpand\@captype{\tb@nt@type}%
|
|
\noexpand\csname \tb@nt@type @atbegin\noexpand\endcsname
|
|
}{%
|
|
\noexpand\csname \tb@nt@type @atend\noexpand\endcsname
|
|
\noexpand\endminipage\noexpand\endtrivlist
|
|
}%
|
|
}%
|
|
\@tempa
|
|
\@tempswatrue
|
|
\fi
|
|
% \end{macrocode}
|
|
% The counter and hooks of float and nonfloat environments:
|
|
% \changes{v3.10b}{2012/04/04}{\cs{noexpand} added to fix problems using
|
|
% \cs{autodot}}%^^A
|
|
% \changes{v3.13}{2014/07/31}{add \cs{autodot} only to hierachical
|
|
% counters}%^^A
|
|
% \begin{macrocode}
|
|
\if@tempswa
|
|
\@ifundefined{c@\tb@nt@type}{%
|
|
\newcounter{\tb@nt@type}%
|
|
}{%
|
|
\PackageWarning{tocbasic}{using already defined counter `\tb@nt@type'}%
|
|
}%
|
|
\ifx\tb@nt@counterwithin\@empty\else
|
|
\@addtoreset{\tb@nt@type}{\tb@nt@counterwithin}%
|
|
\begingroup\edef\@tempa{%
|
|
\noexpand\endgroup
|
|
\noexpand\renewcommand*\expandafter\noexpand
|
|
\csname the\tb@nt@type\endcsname{%
|
|
\expandafter\noexpand\csname the\tb@nt@counterwithin\endcsname
|
|
.\noexpand\arabic{\tb@nt@type}%
|
|
}%
|
|
}\@tempa
|
|
\fi
|
|
\begingroup
|
|
\edef\@tempa{%
|
|
\noexpand\endgroup
|
|
\noexpand\newcommand*\expandafter\noexpand
|
|
\csname \tb@nt@type format\endcsname{%
|
|
\expandafter\noexpand\csname \tb@nt@type name\endcsname
|
|
\noexpand\nobreakspace
|
|
\expandafter\noexpand\csname the\tb@nt@type\endcsname
|
|
\ifx\tb@nt@counterwithin\@empty\else
|
|
\noexpand\csname autodot\endcsname
|
|
\fi
|
|
}%
|
|
\noexpand\newcommand*\expandafter\noexpand
|
|
\csname fnum@\tb@nt@type\endcsname{%
|
|
\expandafter\noexpand\csname \tb@nt@type format\endcsname
|
|
}%
|
|
}%
|
|
\@tempa
|
|
\expandafter\newcommand\expandafter*\csname \tb@nt@type @atbegin\expandafter
|
|
\endcsname\expandafter{\tb@nt@atbegin}%
|
|
\expandafter\newcommand\expandafter*\csname \tb@nt@type @atend\expandafter
|
|
\endcsname\expandafter{\tb@nt@atend}%
|
|
\fi
|
|
}
|
|
% \end{macrocode}
|
|
% \begin{macro}{\tb@atbegin@after}
|
|
% \changes{v3.09a}{2011/05/30}{new internal}%^^A
|
|
% Processes command \#1 with argument \#2 and optional argument \#3 and than
|
|
% \verb|\csname #2@atbegin\endcsname|. This is used to add
|
|
% \verb|csname #2@atbegin\endcsname| at begin part of a float (but after
|
|
% optional argument of the float).
|
|
% \begin{macrocode}
|
|
\newcommand*{\tb@atbegin@after}[3]{}
|
|
\def\tb@atbegin@after#1#2[#3]{%
|
|
#1{#2}[#3]%
|
|
\csname #2@atbegin\endcsname
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@ifvalueisnotempty}
|
|
% \changes{v3.06}{2010/05/21}{new internal}%^^A
|
|
% \changes{v3.20}{2015/12/16}{simpler definition}%^^A
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% This is only a helper for defining some of the keys.
|
|
% \begin{macrocode}
|
|
\newcommand*{\tb@ifvalueisnotempty}[1]{%
|
|
\Ifstr{#1}{}{%
|
|
\FamilyKeyStateUnknownValue
|
|
\expandafter\@gobble
|
|
}{%
|
|
\FamilyKeyStateProcessed
|
|
\expandafter\@firstofone
|
|
}%
|
|
}
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@boolkey}
|
|
% \changes{v3.06}{2010/05/21}{new (internal)}%^^A
|
|
% \changes{v3.20}{2015/12/16}{undefined}%^^A
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@dimkey}
|
|
% \changes{v3.06}{2010/05/21}{new (internal)}%^^A
|
|
% \changes{v3.20}{2015/12/16}{undefined}%^^A
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@numkey}
|
|
% \changes{v3.06}{2010/05/21}{new internal}%
|
|
% \changes{v3.20}{2015/12/16}{undefined}%^^A
|
|
% \end{macro}
|
|
% \begin{macro}{\tb@nt@autofloattype}
|
|
% \changes{v3.06}{2010/06/01}{new internal}%^^A
|
|
% This macro saves the float type for auto generated float types.
|
|
% \begin{macrocode}
|
|
\newcommand*{\tb@nt@autofloattype}{16}
|
|
%</body>
|
|
% \end{macrocode}
|
|
% \end{macro}
|
|
% \end{macro}
|
|
%
|
|
%
|
|
% \iffalse
|
|
%</package>
|
|
%<*load>
|
|
% Used at \KOMAScript{} packages and classes to load the package.
|
|
% \begin{macrocode}
|
|
\RequirePackage{tocbasic}[%
|
|
%!KOMAScriptVersion
|
|
]
|
|
% \end{macrocode}
|
|
%</load>
|
|
% \fi
|
|
%
|
|
% \Finale
|
|
%
|
|
\endinput
|
|
%
|
|
% end of file `tocbasic.dtx'
|
|
%%% Local Variables:
|
|
%%% mode: doctex
|
|
%%% coding: utf-8
|
|
%%% TeX-master: t
|
|
%%% End:
|
|
|