summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/etoc/etoc.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/etoc/etoc.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/etoc/etoc.dtx')
-rw-r--r--macros/latex/contrib/etoc/etoc.dtx13685
1 files changed, 13685 insertions, 0 deletions
diff --git a/macros/latex/contrib/etoc/etoc.dtx b/macros/latex/contrib/etoc/etoc.dtx
new file mode 100644
index 0000000000..9c997ac56a
--- /dev/null
+++ b/macros/latex/contrib/etoc/etoc.dtx
@@ -0,0 +1,13685 @@
+% -*- coding: utf-8; time-stamp-format: "%02d-%02m-%:y at %02H:%02M:%02S %Z" -*-
+% N.B.: this dtx file is NOT for use with \DocInput. The latex source of the
+% user manual is not prefixed with percent signs.
+%<*none>
+\def\etocdtxtimestamp {Time-stamp: <10-03-2019 at 09:35:44 CET>}%
+%</none>
+%<*!readme>
+%%
+%% Package: etoc
+%% Version: 1.09-2019/03/09
+%% License: LPPL 1.3c
+%% Copyright (C) 2012-2019 Jean-Francois Burnol
+%% <jfbu at free dot fr>
+%% Copyright (C) 2014-2019 Christine Roemer
+%% <Christine_Roemer at t-online dot de>
+%% and collaborators for the translation into German of the documentation
+%%
+%</!readme>
+%<*insfile>
+\def\etocpkgdate {2019/03/09}
+\def\etocdocdate {2019/03/09}
+\def\etocpkgversion {v1.09}
+\def\etocpkgdescription {Completely customisable TOCs (JFB)}
+%</insfile>
+%<*none>
+\def\etocDEpkgdate {09.03.2019}% METTRE À JOUR À CHAQUE BUMP!
+\def\etocDEdocdate {09.03.2019}
+\def\etocDEDEdocdate {09.04.2015}%
+\def\etocDEDEpkgversion {v1.08d}%
+% Definition of \etocLicense
+% --------------------------
+\begingroup
+ \long\def\firstofone #1{#1}\catcode1=14\catcode2=0
+ \catcode`\%=12\catcode`\_=12\endlinechar13\catcode13=13 ^^A
+ \catcode32=13\catcode`\\=12^^Brelax^^A
+^^Bfirstofone{^^Bendgroup^^Bdef^^BetocLicense^^A
+{% Package: etoc
+% Version: 1.09-2019/03/09
+% License: LPPL 1.3c
+% Copyright (C) 2012-2019 Jean-Francois Burnol <jfbu at free dot fr>
+% Copyright (C) 2014-2019 Christine Roemer <Christine_Roemer at t-online dot de>
+% and collaborators for the translation into German of the documentation
+%
+% This Work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, in its
+% version 1.3c. This version of this license is in
+% http://www.latex-project.org/lppl/lppl-1-3c.txt
+% and the latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% The Authors of this Work are:
+% Jean-Francois Burnol <jfbu at free dot fr>
+% for the source code and English documentation, and
+% Christine Roemer <Christine_Roemer at t-online dot de> and collaborators
+% for the translation into German of the documentation.
+%
+% This Work consists of the main source file etoc.dtx and the derived
+% files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex, etoc.pdf, etoc-DE.pdf,
+% etoc.dvi, etoc-DE.dvi, README.md.
+%
+% Running etex (or latex or pdflatex) on etoc.dtx extracts etoc.sty,
+% etoc.ins, etoc.tex, etoc-DE.tex, and README.md. See README.md for
+% further instructions.
+}}%
+\bgroup\catcode2 0 \catcode`\\ 12 ^^Biffalse
+%</none>
+%<*readme>
+<!-- -->
+
+ Source: etoc.dtx (v1.09-2019/03/09)
+ Author: Jean-Francois Burnol
+ Author: Christine Roemer et al. (German tranlation)
+ Info: Completely customisable TOCs
+ License: LPPL 1.3c
+ Copyright (C) 2012-2019 Jean-Francois Burnol.
+ Copyright (C) 2014-2019 Christine Roemer and collaborators for
+ the translation into German of the documentation.
+ <jfbu at free dot fr> <Christine_Roemer at t-online dot de>
+
+ABSTRACT
+========
+
+The etoc package gives to the user complete control on how the entries
+of the table of contents should be constituted from the *name*,
+*number*, and *page number* of each sectioning unit. This goes via the
+definition of *line styles* for each sectioning level used in the
+document. The package provides its own custom line styles. Simpler
+ones are given as examples in the documentation. The simplest usage
+will be to take advantage of the layout facilities of packages dealing
+with list environments.
+
+Regarding the *global toc display*, etoc provides pre-defined styles
+based on a multi-column format, with, optionally, a ruled title or
+framed contents.
+
+The `\tableofcontents` command may be used arbitrarily many times and
+it has a variant `\localtableofcontents` which prints tables of
+contents 'local' to the current surrounding document unit. An
+extension of the `\label/\ref` syntax allows to reproduce (with
+another layout) a local table of contents defined somewhere else in
+the document.
+
+Via *depth tags*, one gets an even finer control for each table of
+contents of which sectioning units it should, or not, display.
+
+The formatting inherited (and possibly customized by other packages)
+from the document class will be used when in compatibility mode.
+
+The assignment of levels to the sectioning units can be changed at any
+time, and etoc can thus be used in a quite general manner to create
+custom ''lists of'', additionally to the tables of contents related to
+the document sectioning units. No auxiliary file is used additionally
+to the standard `.toc` file.
+
+INSTALLATION
+============
+
+The simplest is to download
+
+> <http://mirrors.ctan.org/install/macros/latex/contrib/etoc.tds.zip>
+
+and then run `unzip etoc.tds.zip -d <DEST>` where `<DEST>` is a
+TDS-compliant repertory.
+
+Else, to extract the package (.sty) and driver (.tex) files from etoc.dtx:
+
+- if etoc.ins is present: etex etoc.ins
+- without etoc.ins: etex etoc.dtx
+
+It is also possible to run latex or pdflatex directly on etoc.dtx.
+
+To produce etoc.pdf one can run pdflatex (thrice) directly on etoc.dtx or on
+the file etoc.tex which was extracted from previous step.
+
+Options can be set in etoc.tex:
+
+- scrdoc class options (paper size, font size, ...)
+- with or without source code,
+- with dvipdfmx or with latex+dvips or pdflatex.
+
+Since release 1.08h pdflatex is the default in etoc.tex (prior it
+was latex+dvipdfmx as it produces smaller PDFs) in order to allow
+inclusion via the use of package `attachfile` of about 25 code
+samples as file attachment annotations.
+
+Installation:
+
+ etoc.sty -> TDS:tex/latex/etoc/etoc.sty
+ etoc.dtx -> TDS:source/latex/etoc/etoc.dtx
+ etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf
+ etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf
+ README.md -> TDS:doc/latex/etoc/README.md
+
+The other files may be discarded.
+
+LICENSE
+=======
+
+This Work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, in its
+version 1.3c. This version of this license is in
+
+> <http://www.latex-project.org/lppl/lppl-1-3c.txt>
+
+and the latest version of this license is in
+
+> <http://www.latex-project.org/lppl.txt>
+
+and version 1.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+
+The Authors of this Work are:
+
+- Jean-Francois Burnol `<jfbu at free dot fr>` for the source code
+ and English documentation, and
+- Christine Roemer `<Christine_Roemer at t-online dot de>` and
+ collaborators for the translation into German of the documentation.
+
+This Work consists of the main source file etoc.dtx and the
+derived files etoc.sty, etoc.ins, etoc.tex, etoc-DE.tex,
+etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi.
+
+RECENT CHANGES
+==============
+
+v1.09 \[2019/03/09\]
+--------------------
+
+New features: `\etoclocaltop`, `\localtableofcontentswithrelativedepth`.
+Thanks to Tony Roberts for feature request.
+
+Note to hackers: internal control sequence `\Etoc@localtop` is gone.
+
+etoc now requires e-TeX (`\numexpr`, `\unless`).
+
+
+v1.08p \[2018/07/04\]
+---------------------
+
+Fixed bug surfacing in case of `linktoc=page` option of hyperref.
+Thanks to Denis Bitouzé for report (cf.
+https://github.com/ho-tex/hyperref/issues/65,
+https://github.com/dbitouze/yathesis/issues/61).
+
+
+v1.08o \[2018/06/15\]
+---------------------
+
+Fixed bug showing up if an unnumbered TOC entry starts with a brace,
+and document uses hyperref. Caused by a typo in a macro name at
+previous release.
+
+
+v1.08n \[2018/02/23\]
+---------------------
+
+Refactoring of core macros detecting `\numberline` and its variants.
+
+
+v1.08m \[2018/02/07\]
+---------------------
+
+Fix to `1.08k`'s introduced incompatibility with KOMA-script
+and tocbasic's `\nonumberline`.
+
+
+v1.08l \[2017/10/23\]
+---------------------
+
+Workaround an issue with `Emacs/AUCTeX` wrongly reporting about
+actually non-existent LaTeX errors, which was triggered by some
+strings written (indirectly) to log file by etoc under some
+circumstances.
+
+
+v1.08k \[2017/09/28\]
+---------------------
+
+Adds `\etocsetlocaltop.toc`. See corresponding manual section for
+details.
+
+Adds `\etocsavedparttocline`, `\etocsavedchaptertocline`,
+`\etocsavedsectiontocline`, ... They can be used in the context of
+the technique explained in section "Another compatibility mode".
+
+Formerly, etoc redefined for the duration of the TOC the memoir
+macro `\chapternumberline` and its likes to have same meaning as
+`\numberline` (of course, not when executed in compatibility mode),
+for the sake of extraction of `\etocnumber`.
+
+New method detects presence of any `\<foo>numberline` macro without
+any change to originals; they can thus be used as is when applying
+the approach of "Another compatibility mode" section from manual.
+
+
+v1.08j \[2017/09/21\]
+---------------------
+
+Since `1.08a-2015/03/13` `\etocname`, `\etocnumber`, `\etocpage`
+contain, if hyperref is present and configured for using
+hyperlinks in the TOC, the link destination in already expanded
+form. This means one can use them even if the style closes a
+group (for example from a `&` in a tabular), if `\etocglobaldefs`
+was issued; also one can save their meaning for delayed usage
+(with for example `\LetLtxMacro` as they are robust).
+
+But for some legacy reason `\etoclink`, contrarily to
+`\etocthelink`, was handled differently. Now, `\etoclink` also
+contains the link destination in already expanded form, and can
+thus be used even if the line style issues a `&`, as long as
+`\etocglobaldefs` is issued.
+
+Also, bugs dating back to the early days of the package, but
+surfacing only under relatively rare conditions such as usage
+of hyperref with its option "linktoc=page" got fixed.
+
+
+v1.08i \[2016/09/29\]
+---------------------
+
+This fixes an issue dating back to `1.08e-2015/04/17`: under
+`\etocchecksemptiness` regime, some circumstances (such as adding to
+an already compiled document a `\localtableofcontents` before the
+main `\tableofcontents`) created an "`Undefined control sequence`
+`\Etoc@localtop`" error. Thanks to Denis Bitouzé for reporting the
+problem.
+
+On this occasion, `\etocdoesnotcheckemptiness` has been
+added to unset the flag.
+
+A rather more exotic issue was fixed: the emptiness check for
+local tocs could get confused if the `tocdepth` counter was varying
+in some specific ways from inside the `toc` file.
+
+After adding to a document a `\localtableofcontents`, two LaTeX
+passes are needed for etoc to get a chance to print the
+correct local contents. Formerly, etoc issued a Warning on
+the first pass; it now also induces LaTeX into
+announcing "There were undefined references", as this is nearer
+to the end of the log file and console output.
+
+
+v1.08h \[2016/09/25\]
+---------------------
+
+New functioning of `\etocsetnexttocdepth`: the tocdepth counter is
+modified only at the time of the table of contents, not before. This
+fixes an issue which arose when `\etocsetnexttocdepth` was used
+multiple times with no intervening table of contents. Thanks to
+Denis Bitouzé for reporting the problem.
+
+The PDF documentation includes about 25 LaTeX code snippets also
+as file attachment annotations, additionally to their verbatim
+typesetting. The ordering of the documentation contents has been
+slightly re-organized.
+
+A previous documentation-only update on 2016/09/09 added a new
+section with the (approximate) translation into etoc lingua of the
+book class toc style, for easy customizability.
+
+
+The latest translation into German of the additions made to the
+documentation dates back to v1.08d \[2015/04/09\].
+
+Thanks to Christine Römer!
+%</readme>
+%<*tex>-------------------------------------------------------------------------
+%% run pdflatex thrice on this file etoc.tex to produce the documentation
+%% etoc.pdf, with source code included.
+%%
+\chardef\Withdvipdfmx 0 % replace 0 by 1 for using latex+dvipdfmx
+\chardef\NoSourceCode 0 % replace 0 by 1 for the doc *without* the source code
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile {etoc.tex}[Driver for etoc documentation]%
+\PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrdoc}
+\PassOptionsToPackage {ngerman,english}{babel}
+\chardef\ForEnglish 1 % (\ForEnglish and \ForDeutsch flags can't be BOTH 1 ...)
+\chardef\ForDeutsch 0 %
+\input etoc.dtx
+%%% Local Variables:
+%%% mode: latex
+%%% End:
+%</tex>-------------------------------------------------------------------------
+%<*DEtex>-----------------------------------------------------------------------
+%% run pdflatex thrice on this file etoc-DE.tex to produce the German
+%% documentation etoc-DE.pdf (without source code).
+%%
+%% Um etoc-DE.pdf zu erzeugen ist pdflatex dreimal mit etoc-DE.tex laufen
+%% zu lassen.
+%%
+\chardef\Withdvipdfmx 0 % replace 0 by 1 for using latex+dvipdfmx
+\chardef\NoSourceCode 1 % replace 1 by 0 for the doc *with* the source code
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile {etoc-DE.tex}[Driver for etoc German documentation]%
+%% or with german rather than ngerman in the two lines below
+\PassOptionsToClass {a4paper,fontsize=11pt,twoside,ngerman}{scrdoc}
+\PassOptionsToPackage {english,ngerman}{babel}
+\chardef\ForEnglish 0 % (\ForEnglish and \ForDeutsch flags can't be BOTH 1 ...)
+\chardef\ForDeutsch 1 %
+\input etoc.dtx
+%%% Local Variables:
+%%% mode: latex
+%%% End:
+%</DEtex>-----------------------------------------------------------------------
+%<*insfile>---------------------------------------------------------------------
+%% Run etex on this file to extract from etoc.dtx:
+%% etoc.sty, etoc.tex, etoc-DE.tex and README.md
+%%
+%% To produce etoc.pdf run pdflatex (thrice) on etoc.tex.
+%%
+%% Options can be set in etoc.tex (and etoc-DE.tex):
+%% - scrdoc class options (paper size, font size, ...)
+%% - with or without source code,
+%% - with dvipdfmx or with latex/pdflatex.
+%%
+%% Since release 1.08h pdflatex is the default in etoc.tex (prior it
+%% was latex+dvipdfmx as it produces smaller PDFs) in order to allow
+%% inclusion via the use of package `attachfile` of about 25 code
+%% samples as file attachment annotations.
+%%
+%% Um etoc-DE.pdf zu erzeugen ist pdflatex dreimal mit etoc-DE.tex
+%% laufen zu lassen.
+%%
+%% Installation:
+%%
+%% etoc.sty -> TDS:tex/latex/etoc/etoc.sty
+%% etoc.dtx -> TDS:source/latex/etoc/etoc.dtx
+%% etoc.pdf -> TDS:doc/latex/etoc/etoc.pdf
+%% etoc-DE.pdf -> TDS:doc/latex/etoc/etoc-DE.pdf
+%% README.md -> TDS:doc/latex/etoc/README.md
+%%
+\input docstrip.tex
+\askforoverwritefalse
+\def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J%
+\string\NeedsTeXFormat{LaTeX2e}^^J%
+\string\ProvidesPackage{etoc}^^J%
+\space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}%
+\generate{\nopreamble\nopostamble
+\file{README.md}{\from{etoc.dtx}{readme}}%
+\usepostamble\defaultpostamble
+\file{etoc.tex}{\from{etoc.dtx}{tex}}%
+\file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}%
+\usepreamble\etocpkgpreamble
+\file{etoc.sty}{\from{etoc.dtx}{package}}}%
+\catcode32=13\relax% active space
+\let =\space%
+\Msg{************************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* etoc.sty}
+\Msg{*}
+\Msg{* To produce the documentation run latex thrice on file etoc.tex}
+\Msg{* (or etoc-DE.tex) and then run dvipdfmx on file etoc.dvi, resp.}
+\Msg{* etoc-DE.dvi}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{************************************************************************}
+\ifx\numexpr\undefined
+\Msg{* warning: to get correct utf-8 encoded README.md }%
+\Msg{* do etex etoc.ins and not as here tex etoc.ins }%
+\Msg{************************************************************************}
+\fi
+\endbatchfile
+%</insfile>---------------------------------------------------------------------
+%<*none>------------------------------------------------------------------------
+^^Bfi^^Begroup
+%
+\chardef\noetex 0
+\ifx\numexpr\undefined\chardef\noetex 1 \fi
+\ifnum\noetex=1 \chardef\extractfiles 0 % extract files, then stop
+\else
+ \ifx\ProvidesFile\undefined
+ \chardef\extractfiles 0 % etex etc.. on etoc.dtx, only file extraction.
+ \else % latex/pdflatex on etoc.tex or on etoc.dtx
+ \ifx\Withdvipdfmx\undefined
+ % latex/pdflatex run is on etoc.dtx
+ \chardef\extractfiles 1 % 1 = extract files and typeset manual, 2 = only typeset
+ \chardef\Withdvipdfmx 0 % 0 = pdflatex or latex+dvips, 1 = dvipdfmx
+ \chardef\NoSourceCode 1 % 0 = include source code, 1 = do not
+ \chardef\ForEnglish 1
+ \chardef\ForDeutsch 0
+ \NeedsTeXFormat {LaTeX2e}%
+ \PassOptionsToClass {a4paper,fontsize=11pt,twoside}{scrdoc}%
+ \PassOptionsToPackage {ngerman,english}{babel}%
+ \else % latex run is on etoc.tex or etoc-DE.tex
+ \chardef\extractfiles 2 % do not extract files, only typeset
+ \fi
+ \ProvidesFile{etoc.dtx}%
+ [etoc source and documentation (\etocdtxtimestamp)]%
+ \fi
+\fi
+\ifnum\extractfiles<2 % extract files
+\def\MessageDeFin{\newlinechar10 \let\Msg\message
+\Msg{********************************************************************^^J}%
+\Msg{*^^J}%
+\Msg{* To finish the installation you have to move the following^^J}%
+\Msg{* file into a directory searched by TeX:^^J}%
+\Msg{*^^J}%
+\Msg{*\space\space\space\space etoc.sty^^J}%
+\Msg{*^^J}%
+\Msg{* To produce the documentation with source code included run pdflatex^^J}%
+\Msg{* thrice on file etoc.tex^^J}%
+\Msg{*^^J}%
+\Msg{* To produce the German documentation run pdflatex thrice on file^^J}%
+\Msg{* etoc-DE.tex^^J}%
+\Msg{*^^J}%
+\Msg{* Happy TeXing!^^J}%
+\Msg{*^^J}%
+\Msg{********************************************************************^^J}%
+}%
+\begingroup
+ \input docstrip.tex
+ \askforoverwritefalse
+ \def\etocpkgpreamble{\defaultpreamble^^J\MetaPrefix^^J%
+ \string\NeedsTeXFormat{LaTeX2e}^^J%
+ \string\ProvidesPackage{etoc}^^J%
+ \space[\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]}%
+ \generate{\nopreamble\nopostamble
+ \file{README.md}{\from{etoc.dtx}{readme}}%
+ \usepostamble\defaultpostamble
+ \file{etoc.ins}{\from{etoc.dtx}{insfile}}%
+ \file{etoc.tex}{\from{etoc.dtx}{tex}}%
+ \file{etoc-DE.tex}{\from{etoc.dtx}{DEtex}}%
+ \usepreamble\etocpkgpreamble
+ \file{etoc.sty}{\from{etoc.dtx}{package}}}%
+\endgroup
+\fi % end of file extraction (from etex/latex/pdflatex run on etoc.dtx)
+\ifnum\noetex=1 % warning for README.md
+ \expandafter\def\expandafter\MessageDeFin\expandafter
+{\MessageDeFin
+\Msg{* warning: to get correct utf-8 encoded README.md ^^J}%
+\Msg{* do etex etoc.dtx and not as here tex etoc.dtx ^^J}%
+\Msg{********************************************************************^^J}}%
+\fi
+\ifnum\extractfiles=0 % tex/etex/xetex/etc on etoc.dtx, files extracted, stop
+ \MessageDeFin\expandafter\end
+\fi
+% From this point on, run is necessarily with e-TeX.
+% Check if \MessageDeFin got defined, if yes put it at end of run.
+\ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi
+%-------------------------------------------------------------------------------
+% START OF USER MANUAL TEX SOURCE
+\documentclass[abstract]{scrdoc}
+
+\ifnum\NoSourceCode=1 \OnlyDescription\fi
+
+\usepackage{ifpdf}
+\ifpdf\chardef\Withdvipdfmx 0 \fi
+
+\makeatletter
+\ifnum\Withdvipdfmx=1
+ \@for\@tempa:=hyperref,bookmark,graphicx,xcolor,pict2e\do
+ {\PassOptionsToPackage{dvipdfmx}\@tempa}
+ %
+ \PassOptionsToPackage{dvipdfm}{geometry}
+ \PassOptionsToPackage{bookmarks=true}{hyperref}
+ \PassOptionsToPackage{dvipdfmx-outline-open}{hyperref}
+ \PassOptionsToPackage{dvipdfmx-outline-open}{bookmark}
+ %
+ \def\pgfsysdriver{pgfsys-dvipdfm.def}
+\else
+ \PassOptionsToPackage{bookmarks=true}{hyperref}
+\fi
+\makeatother
+
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[hscale=0.66,vscale=0.75]{geometry}
+\pagestyle{headings}
+% \usepackage{layout}
+
+% January 2014. work-around a bug in KOMA 3.12 (December 2013):
+\makeatletter
+\def\buggysectionmark #1{% KOMA 3.12 as released to CTAN December 2013
+ \if@twoside\expandafter\markboth\else\expandafter\markright\fi
+ {\MakeMarkcase{\ifnumbered{section}{\sectionmarkformat\fi}{}#1}}{}}
+\ifx\buggysectionmark\sectionmark
+\def\sectionmark #1{%
+ \if@twoside\expandafter\markboth\else\expandafter\markright\fi
+ {\MakeMarkcase{\ifnumbered{section}{\sectionmarkformat}{}#1}}{}}
+\fi
+\makeatother
+
+\makeatletter
+% 2013/03/07.
+% This macro allows to conveniently center a line inside a paragraph and still
+% use therein \verb or other commands changing catcodes.
+% Note: \centerline in LaTeX still uses \hsize and not \linewidth/\columnwidth
+ \def\@centeredline {\hbox to \linewidth
+ \bgroup \hss \bgroup
+ \aftergroup\centeredline@ }
+ \newcommand*\centeredline {%
+ \ifhmode
+ \\\relax
+ \def\centeredline@{\hss\egroup\hskip\z@skip}%
+ \else
+ \def\centeredline@{\hss\egroup}%
+ \fi
+ \afterassignment\@centeredline
+ \let\next=}
+
+% pour maintenir les % en début de ligne dans les blocs verbatim
+%
+
+ \let\original@check@percent\check@percent
+ \let\check@percent\relax
+\makeatother
+
+
+% pour les environnements verbatim
+% uniformisé finalement, avec quelques exceptions, pour dtx du 3 déc 2013
+\def\MacroFont{\ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax}
+
+% ATTENTION: (avec doc.sty ou les classes scrdoc ou ltxdoc)
+%
+% - l'environnement macrocode se fait avec \macro@font qui est le
+% \MacroFont du \begin{document}.
+%
+% - les environnements verbatim utilisent le \MacroFont courant.
+%
+% - \verb utilise un \ttfamily !! et non pas \verbatim@font que l'on
+% peut customiser.
+%
+% - (9 mars 2015) il ne faut PAS commencer des macrocode directement après
+% un \section, il faut un paragraphe (par exemple un \indent\par)
+
+%----
+% better \verb pour doc.
+% 12 octobre 2013, importé de xint.dtx
+% je rajoute pour { afin que truc{machin puisse avoir hyphénation
+% retire \leavemmode, pas nécessaire pour emploi ici
+
+% NOTE 9 mars 2015. J'ai depuis une version plus aboutie dans xint.dtx
+% mais je laisse ici tel quel.
+
+\def\MicroFont{\ttfamily\hyphenchar\font45 }
+% modif de \do@noligs: \char`#1} --> \char`#1 }
+\makeatletter
+\def\do@noligs #1%
+{%
+ \catcode `#1\active
+ \begingroup \lccode `\~=`#1\relax
+ \lowercase {\endgroup \def ~{\kern \z@ \char `#1 }}%
+}%
+\def\dobackslash
+{%
+ \catcode92 \active
+ \begingroup \lccode `\~=92\relax
+ \lowercase {\endgroup \def ~{\kern \z@ \char 92 }}%
+}%
+\def\dobraces
+{%
+ \catcode123 \active
+ \begingroup \lccode `\~=123\relax
+ \lowercase {\endgroup \def ~{\hskip \z@\@plus.1pt\@minus.1pt
+ \char 123 }}%
+ \catcode125 \active
+ \begingroup \lccode `\~=125\relax
+ \lowercase {\endgroup \def ~{\char 125 \hskip \z@\@plus.1pt\@minus.1pt }}%
+}%
+\def\verb
+{%
+ \relax \ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup \MicroFont
+ \let\do\do@noligs \verbatim@nolig@list
+ \let\do\@makeother \dospecials
+ \catcode32 10
+ \dobackslash \dobraces \makestarlowast
+ \@jfverb
+}%
+\def\@jfverb #1{\catcode`#1\active
+ \lccode`\~`#1\lowercase{\def~{\egroup\unskip}}}%
+% (\unskip ajouté le 14 octobre)
+% \lowast est défini plus loin
+\begingroup
+ \lccode`\~=`\*
+\lowercase{%
+\endgroup
+\def\makestarlowast {\catcode`\*\active\let~\lowast}}%
+\makeatother
+%
+\usepackage{txfonts}
+
+% m'occuper de la taille de txtt:
+% au passage je supprime le \hyphenchar \font\m@ne
+
+% avril 2013
+% ATTENTION ATTENTION ATTENTION Un changement de taille comme \small semble
+% déclencher (peut-être) la relecture de t1txtt.fd et quoi qu'il en soit le
+% \hyphenchar est REMIS à -1 !
+
+% update: 13 octobre 2013
+% et pourtant tailles sont ok, donc au moins cette information est
+% maintenue je ne sais donc pas exactement ce qui se passe.
+
+% (2015/11/12: je soupçonne presque un bug de conception de NFSS mais je n'ai
+% jamais eu ni le temps ni l'envie de regarder de plus près)
+
+\DeclareFontFamily{T1}{txtt}{\hyphenchar\font 45\relax}
+\DeclareFontShape{T1}{txtt}{m}{n}{ %medium
+ <->s*[.96] t1xtt%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{sc}{ %cap & small cap
+ <->s*[.96] t1xttsc%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{sl}{ %slanted
+ <->s*[.96] t1xttsl%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{it}{ %italic
+ <->ssub * txtt/m/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{ui}{ %unslanted italic
+ <->ssub * txtt/m/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{n}{ %bold extended
+ <->t1xbtt%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{sc}{ %bold extended cap & small cap
+ <->t1xbttsc%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{sl}{ %bold extended slanted
+ <->t1xbttsl%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{it}{ %bold extended italic
+ <->ssub * txtt/bx/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{ui}{ %bold extended unslanted italic
+ <->ssub * txtt/bx/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{n}{ %bold
+ <->ssub * txtt/bx/n%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{sc}{ %bold cap & small cap
+ <->ssub * txtt/bx/sc%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{sl}{ %bold slanted
+ <->ssub * txtt/bx/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{it}{ %bold italic
+ <->ssub * txtt/bx/it%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{ui}{ %bold unslanted italic
+ <->ssub * txtt/bx/ui%
+}{}
+
+\usepackage{xspace}
+\usepackage[dvipsnames]{xcolor}
+\usepackage{graphicx}
+\usepackage[inline]{enumitem}
+\usepackage{array}
+\usepackage{longtable}
+
+\definecolor{joli}{RGB}{225,95,0}
+\definecolor{JOLI}{RGB}{225,95,0}
+\definecolor{BLUE}{RGB}{0,0,255}
+\colorlet{niceone}{green!35!blue!75}
+
+\usepackage {babel} % ngerman and english options have been passed to babel
+\AtBeginDocument {
+%% ATTENTION à ce que fait la classe scrdoc: File/Datei pour \partname !!!
+%% Je l'avais oublié pour 1.08 lorsque je suis passé à ngerman.
+%% Attention aussi au fait qu'il faut faire le \renewcommand\partname
+%% ET le mettre dans les \captions...
+%%
+ \ifnum\ForEnglish=1 \renewcommand\partname{Part}\fi
+ \ifnum\ForDeutsch=1 \renewcommand\partname{Teil}\fi
+ \addto\captionsenglish {\renewcommand\partname{Part}}
+ \addto\captionsgerman {\renewcommand\partname{Teil}}
+ \addto\captionsngerman {\renewcommand\partname{Teil}}
+}
+
+\usepackage{tikz}
+\usetikzlibrary{trees} % added for "cyclic" grow function 2013/03/02
+
+% Temporaire 16 avril 2015 pour release etoc 1.08e :
+%
+% \usepackage{etex}
+%
+% car erreur de compilation avec la pre-release 2015 de TeXLive à cause d'un
+% missing \locbox avec forest 2014/03/07 v1.05.
+%
+% Dû au fait que etoolbox 2015/03/19 v2.1d ne charge plus etex lorsqu'il
+% détecte le nouveau format LaTeX 2015/01/01 qui a été diffusé sur CTAN aux
+% alentours de 2015/03/31 et qui est intégré à TeXLive 2015.
+%
+% Note 12 mai 2015: la version 2015/05/04 v1.06 de forest fait maintenant
+% explicitement \RequirePackage {etex}. Il y a un nouveau package elocalloc de
+% David Carlisle, donc forest devrait plutôt tester si \locbox est défini
+% après avoir chargé etoolbox et sinon faire \RequirePackage {elocalloc}.
+\usepackage{forest}[2015/05/04]
+%
+% switched from tikz-qtree to forest 2013/09/09
+% No problem with hyperlinks then, contrarily to tikz-qtree.
+
+% NOTE: (12 octobre 2013)
+% - si compilation pour dvipdfmx, les arbres dans le dvi visualisés par xdvi
+% montrent correctement les textes, mais rien au point de vue graphique,
+% - si compilation pour dvips, l'arbre fait par forest est tout empilé, celui
+% fait par tikz sans forest est presque correct, les labels débordent.
+% Dans les deux cas, le résultat final dans le pdf est bon.
+% grosso modo dans l'état actuel le pdf fait 250K (dvipdfmx), 340K (pdflatex) et
+% 1M pour dvips+ps2pdf.
+
+% 9 octobre 2013, je me décide à ne plus utiliser hidelinks, mais il est tout de
+% même ajouté au .toc
+
+% 12 mars 2015, pour 1.08a, see http://tex.stackexchange.com/a/232584/4686
+\usetikzlibrary{mindmap}
+
+%18 mai 2014: pdfinfo différent suivant anglais ou allemand
+\ifnum\ForEnglish=1
+\usepackage[pdfencoding=pdfdoc]{hyperref}
+\hypersetup{%
+linktoc=all,% why is the important stuff
+%% bookmarksdepth=3,% (not needeed anymore now, v1.07g)
+breaklinks=true,%
+colorlinks,%
+linkcolor=RoyalBlue,% Orchid
+urlcolor=OliveGreen,%
+pdfauthor={Jean-Fran\c cois Burnol},%
+pdftitle={The etoc package},%
+pdfsubject={Tables of contents with LaTeX},%
+pdfkeywords={LaTeX, table of contents},%
+pdfstartview=FitH,%
+pdfpagemode=UseOutlines}
+\fi
+
+\ifnum\ForDeutsch=1
+\usepackage[pdfencoding=pdfdoc]{hyperref}
+\hypersetup{%
+linktoc=all,%
+breaklinks=true,%
+colorlinks,%
+linkcolor=RoyalBlue,% Orchid
+urlcolor=OliveGreen,%
+pdfauthor={Jean-Fran\c cois Burnol, Christine Römer},%
+pdftitle={Das etoc Paket},%
+pdfsubject={Inhaltsverzeichnisse mit LaTeX},%
+pdfkeywords={LaTeX, Inhaltsverzeichnis},%
+pdfstartview=FitH,%
+pdfpagemode=UseOutlines}
+\fi
+
+% added usage of package bookmark 2013/10/10
+\usepackage{bookmark}
+
+\usepackage{framed}
+\usepackage{varioref}
+
+\usepackage{etoc} % loads multicol
+% for etoc's own default line styles. <1.08b had \partname by default but this
+% does not work well with babel+frenchb hence the default is now simply Part.
+% Here we can use \partname as we do the documentation for English or German.
+% Careful with the customization of \partname done by scrdoc class !
+\renewcommand{\etocpartname}{\partname}
+% see the \AtBeginDocument with \addto\captionsngerman etc...
+
+\ifnum\ForDeutsch=1
+ \renewcommand*{\etocabbrevpagename}{S.~}
+\fi
+
+
+%--------
+% 10 octobre 2013:
+\AtBeginDocument{\addtocontents{toc}{\protect\hypersetup{hidelinks}}}
+% mieux que de passer hidelinks comme option à hyperref.
+% Comme toutes les tocs sont faites dans un groupe, c'est très
+% bien. (et j'utilise \etocaftertitlehook pour autre chose)
+
+%--------
+% add-ons for the new section `surprising uses of etoc' (2013/01/24)
+\newcounter{visibletoc}
+\renewcommand{\etocaftertitlehook}
+ {\stepcounter{visibletoc}%
+ \phantomsection
+ \etoctoccontentsline{visibletoc}{\thevisibletoc}}
+\etocsetlevel{visibletoc}{6}
+%--------
+% add-ons for the `fancy TOC' (2013/01/25)
+% supprimé 2019/03/09
+ % \newcounter{dummypart}
+ % \newcounter{dummychapter}
+ % \newcounter{dummysection}
+ % \etocsetlevel{dummypart}{6}
+ % \etocsetlevel{dummychapter}{6}
+ % \etocsetlevel{dummysection}{6}
+%--------
+% for "Another compatibility mode" (2013/02/21):
+% attention au 5 qui est hard-coded
+% (pour 1.07f c'était 3, maintenant 5 pour 1.07g; et 4 maintenant pour 1.07h...)
+% (et pour 1.07i.. à nouveau 3 faudra vraiment que je change cela)
+% et maintenant =4 pour version de la doc du 28 avril 2014... faudra vraiment qu
+% je mette un mécanisme plus robuste pour cette TOC.
+% ATTENTION AUSSI AUX CODES VERBATIM
+% màj pour 1.08k: \etocsavedsectiontocline etc...
+\makeatletter
+\newcommand*{\MyQuasiStandardTOC}[1]{%
+ \begingroup
+ \etocsetstyle{section}{}
+ {\ifnum\etocthenumber=4 % <- check this if new sections added to user manual
+ \etocsetstyle{subsection}
+ {\par\nopagebreak\begingroup
+ \leftskip1.5em \rightskip\@tocrmarg
+ \parfillskip \@flushglue
+ \parindent 0pt
+ \normalfont\normalsize\rmfamily\itshape
+ \etocskipfirstprefix}
+ {\allowbreak\,--\,}
+ {\etocname\ \textup{(\etocnumber)}}
+ {.\par\endgroup}%
+ \else
+ \etocsetstyle{subsection}{}{}
+ {\etocsavedsubsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
+ \fi}
+ {\etocsavedsectiontocline
+ {\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}}
+ {}%
+ \etocstandarddisplaystyle
+ \etocsetnexttocdepth {2}%
+ \tableofcontents #1
+ \endgroup}
+\makeatother
+%--------
+% Statistics on sections and subsections in a part \thispartstats:
+% 2 mars 2013
+% cette version utilise des box, plutôt que des macros.
+% mais on ne peut plus alors changer de police etc...
+
+% 11 octobre 2013, je retire les \color{teal}.
+
+\newsavebox\firstnamei
+\newsavebox\firstnumberi
+\newsavebox\lastnamei
+\newsavebox\lastnumberi
+\newsavebox\firstnameii
+\newsavebox\firstnumberii
+\newsavebox\lastnameii
+\newsavebox\lastnumberii
+\newcounter{mycounti}
+\newcounter{mycountii}
+
+\newcommand*{\thispartstatsauxi}{}
+\newcommand*{\thispartstatsauxii}{}
+\newcommand*{\oldtocdepth}{}
+
+\newcommand*{\thispartstats}{%
+ \setcounter{mycounti}{0}%
+ \setcounter{mycountii}{0}%
+ \def\thispartstatsauxi{%
+ \sbox{\firstnamei}{\etocname}%
+ \sbox{\firstnumberi}{\etocnumber}%
+ \def\thispartstatsauxi{}}%
+ \def\thispartstatsauxii{%
+ \sbox{\firstnameii}{\etocname}%
+ \sbox{\firstnumberii}{\etocnumber}%
+ \def\thispartstatsauxii{}}%
+ \begingroup
+ \etocsetstyle{subsection}
+ {}
+ {}
+ {\thispartstatsauxii
+ \stepcounter{mycountii}%
+ \sbox{\lastnameii}{\etocname}%
+ \sbox{\lastnumberii}{\etocnumber}}
+ {}
+\ifnum\ForEnglish=1
+ \etocsetstyle{section}
+ {}
+ {}
+ {\thispartstatsauxi
+ \stepcounter{mycounti}%
+ \sbox{\lastnamei}{\etocname}%
+ \sbox{\lastnumberi}{\etocnumber}}
+ {Here are some statistics for this part: it contains \arabic{mycounti}
+ section\ifnum\value{mycounti}>1 s\fi{} and
+ \arabic{mycountii} subsection\ifnum\value{mycountii}>1 s\fi. The name of
+ the first section is
+ ``\unhbox\firstnamei{}'' and the corresponding number is
+ ``\unhbox\firstnumberi''. The name of the last section is
+ ``\unhbox\lastnamei{}'' and its number is
+ ``\unhbox\lastnumberi''.
+ \ifnum\value{mycountii}>0 The name of
+ the first subsection is
+ ``\unhbox\firstnameii{}'' and the corresponding number is
+ ``\unhbox\firstnumberii''. The name of the last subsection is
+ ``\unhbox\lastnameii{}'' and its number is
+ ``\unhbox\lastnumberii''.\fi }
+\fi
+\ifnum\ForDeutsch=1
+ \etocsetstyle{section}
+ {}
+ {}
+ {\thispartstatsauxi
+ \stepcounter{mycounti}%
+ \sbox{\lastnamei}{\etocname}%
+ \sbox{\lastnumberi}{\etocnumber}}
+% Hier wird ein Befehl definiert, der fuer jedes Teil ein paar Fakten sammelt
+% und ausgibt.
+ {Zu Beginn wollen wir ein paar Fakten zu diesem Teil nennen. Er enthält
+ \arabic{mycounti} Abschnitt\ifnum\value{mycounti}>1 e\fi{} und
+ \arabic{mycountii} Unterabschnitt\ifnum\value{mycountii}>1 e\fi. Der Name des ersten
+ Abschnitts lautet
+ \glqq\unhbox\firstnamei{}\grqq~und er hat die Gliederungsnummer
+ \glqq\unhbox\firstnumberi\grqq. Der Name des letzten Abschnitts lautet
+ \glqq\unhbox\lastnamei{}\grqq~und er hat die Nummer
+ \glqq\unhbox\lastnumberi\grqq.
+ \ifnum\value{mycountii}>0 Der erste
+ Unterabschnitt heißt
+ \glqq\unhbox\firstnameii{}\grqq~und er hat die Nummer
+ \glqq\unhbox\firstnumberii\grqq. Der Name des letzten Unterabschnitts ist
+ \glqq\unhbox\lastnameii{}\grqq~und dessen Nummer ist
+ \glqq\unhbox\lastnumberii\grqq.\fi }%
+\fi
+ \etocinline
+% october 10, 2013.
+ \etocsetnexttocdepth {2}%
+ \etocsettocstyle {\pdfbookmark[1]{Statistics}{\thepart.STATS}}{}
+ \localtableofcontents
+ \endgroup
+}
+%%
+% pour les TOC à la TikZ
+\newtoks\treetok
+\newtoks\parttok
+\newtoks\sectiontok
+\newtoks\subsectiontok
+\newtoks\tmptok
+
+\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2
+ #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}}
+
+% 12 et 13 mars 2015 pour la mind map de title page
+% pour les Mindmap avec branch color
+\def\appendpart #1#2#3{%
+ \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}%
+ #1\expandafter {\tmpstuff }%
+}
+
+% Vendredi 13 mars 2015 à 18:10:40
+% POUR LA TOC DE TITLE PAGE
+\usepackage{eso-pic}
+\usepackage{picture}
+
+\newcount\tikznumberofcurrentgrandchild
+
+% copié de http://tex.stackexchange.com/a/232914
+\def\tikzmycustomgrowth {%
+ \pgftransformreset
+ \ifnum\tikztreelevel=1
+% \pgftransformrotate{55+((\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentchild)}%
+% -90 Dimanche 25 septembre 2016 à 17:18:50. Non finalement zero. Non -36
+% ****
+% Bon finalement 1.09 n'utilise plus cette customgrowth
+% ****
+ \pgftransformrotate{-36+((\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentchild)}%
+ \pgftransformxshift{\the\tikzleveldistance}%
+ \fi
+ \ifnum\tikztreelevel=2
+ \pgfmathsetmacro\tikzoffsetofcurrentchild{(\tikzsiblingdistance)*(6+\tikznumberofcurrentgrandchild)}%
+ \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelheight
+ \pgftransformxshift{\tikzlevelwidth/2}
+ \pgftransformyshift{-\tikzlevelheight/2+\tikzoffsetofcurrentchild}
+ \else
+ \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelheight}%
+ \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelwidth
+ \pgftransformxshift{\tikzlevelwidth/2-\tikzoffsetofcurrentchild}
+ \pgftransformyshift{\tikzlevelheight/2}
+ \else
+ \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelwidth}%
+ \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelheight
+ \pgftransformxshift{-\tikzlevelwidth/2}
+ \pgftransformyshift{\tikzlevelheight/2-\tikzoffsetofcurrentchild}
+ \else
+ \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelheight}%
+ \ifdim\tikzoffsetofcurrentchild pt<\tikzlevelwidth
+
+ \pgftransformxshift{-\tikzlevelwidth/2+\tikzoffsetofcurrentchild}
+ \pgftransformyshift{-\tikzlevelheight/2}
+ \else
+ \pgfmathsetmacro\tikzoffsetofcurrentchild{\tikzoffsetofcurrentchild-\tikzlevelwidth}%
+ %\ifdim\tikzoffsetofcurrentchild pt<\tikzlevelheight
+ \pgftransformxshift{\tikzlevelwidth/2}
+ \pgftransformyshift{-\tikzlevelheight/2+\tikzoffsetofcurrentchild}
+ %\fi
+ \fi\fi\fi\fi
+ \global\advance\tikznumberofcurrentgrandchild by1
+ \fi
+}
+
+%version circulaire utilisée avec les version 1.08a--1.08f du manuel.
+\def\tikzmycustomgrowth {%
+ \pgftransformreset
+ \ifnum\tikztreelevel=1
+ \pgftransformrotate {126+(\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentchild-1)}%
+ \fi
+ \ifnum\tikztreelevel=2
+ \pgftransformrotate {(\pgfkeysvalueof{/tikz/sibling angle})*(2+\tikznumberofcurrentgrandchild)}%
+ \global\advance\tikznumberofcurrentgrandchild by 1
+ \fi
+ \pgftransformxshift {\the\tikzleveldistance}%
+}
+
+\newcounter{partco}
+% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3
+\def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax}
+
+% For etoc.toctree file was used to test the Mind map separately
+%\newwrite\TOCasTree
+
+\newbox\TitlePageMindmapTOC
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand\etoc{%
+ \texorpdfstring{{\color{joli}\ttfamily\bfseries etoc}}{etoc}\xspace}
+
+\DeclareRobustCommand\csa [1] {{\ttfamily\hyphenchar\font45 \char`\\ #1}}
+
+\DeclareRobustCommand\csb [1]
+ {\hyperref[#1] {\ttfamily\hyphenchar\font45 \char`\\ #1}}
+
+\newcommand\cshyp[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}}
+
+\newcommand\csbhyp[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}}
+
+\newcommand\toc{\csa{table\-of\-con\-tents}\xspace}
+\newcommand\localtoc{\csa{local\-table\-of\-con\-tents}\xspace}
+\newcommand\localtocwrdp
+ {\csa{local\-table\-of\-con\-tents\-with\-rel\-a\-tive\-depth}\xspace}
+
+\newcommand\lowast{\raisebox{-.25\height}{*}}
+\newcommand\starit[1]{\csa{#1\lowast}}
+\newcommand\staritb[1]{\csb{#1}\lowast}
+
+\hyphenation{
+table-of-con-tents
+local-table-of-con-tents
+local-table-of-con-tents-with-rel-a-tive-depth
+}
+
+\hyphenation{toc-depth sec-num-depth con-tents-line}
+
+\hyphenation{etoc-stan-dard-lines
+etoc-de-fault-lines
+etoc-toc-lines
+etoc-set-style
+etoc-name
+etoc-page
+etoc-skip-first-pre-fix
+etoc-num-ber
+etoc-if-first
+etoc-x-if-first
+etoc-if-num-bered
+etoc-x-if-num-bered
+etoc-if-was-empty
+etoc-x-if-was-empty
+etoc-checks-empti-ness
+etoc-no-toc-if-no-toc
+etoc-the-name
+etoc-the-num-ber
+etoc-the-page
+etoc-link
+etoc-the-linked-name
+etoc-the-linked-num-ber
+etoc-the-linked-page
+etoc-the-link
+etoc-set-level
+etoc-set-toc-depth
+etoc-set-next-toc-depth
+etoc-set-toc-depth
+etoc-obey-toc-toc-depth
+etoc-ig-nore-toc-depth
+etoc-depth-tag
+etoc-set-tag-depth
+etoc-obey-depth-tags
+etoc-ig-nore-depth-tags
+etoc-stan-dard-dis-playstyle
+etoc-ar-ti-cle-style
+etoc-book-style
+etoc-set-toc-style
+etoc-mul-ti-col-style
+etoc-mul-ti-col
+etoc-lo-cal-mul-ti-col
+etoc-toc-style
+etoc-toc-style-with-marks
+etoc-toc-style-with-marks-nouc
+etoc-ruled-style
+etoc-ruled
+etoc-lo-cal-ruled
+etoc-framed-style
+etoc-framed
+etoc-lo-cal-framed
+etoc-in-line
+etoc-af-ter-ti-tle-hook
+etoc-af-ter-con-tents-hook
+etoc-af-ter-toc-hook
+etoc-skip-first-pre-fix
+etoc-only-on-first
+}
+
+\hyphenation{
+etoc-font-mi-nus-two
+etoc-font-mi-nus-one
+etoc-font-zero
+etoc-font-one
+etoc-font-two
+etoc-font-three
+etoc-sep-mi-nus-two
+etoc-sep-mi-nus-one
+etoc-sep-zero
+etoc-sep-one
+etoc-sep-two
+etoc-sep-three
+etoc-mi-nus-two-left-mar-gin
+etoc-mi-nus-two-right-mar-gin
+etoc-mi-nus-one-left-mar-gin
+etoc-mi-nus-one-right-mar-gin
+etoc-base-line-spread-mi-nus-two
+etoc-base-line-spread-mi-nus-one
+etoc-base-line-spread-zero
+etoc-base-line-spread-one
+etoc-base-line-spread-two
+etoc-base-line-spread-three
+etoc-toc-line-lead-ers
+etoc-ab-brev-page-name
+etoc-part-name
+etoc-book-name
+etoc-above-toc-skip
+etoc-be-low-toc-skip
+etoc-column-sep
+etoc-mul-ti-col-sep
+etoc-mul-ti-col-pre-tol-er-ance
+etoc-mul-ti-col-tol-er-ance
+etoc-de-fault-nb-col
+etoc-in-ner-top-sep
+etoc-top-rule
+etoc-top-rule-col-or-cmd
+etoc-in-ner-left-sep
+etoc-in-ner-right-sep
+etoc-in-ner-bot-tom-sep
+etoc-left-rule
+etoc-right-rule
+etoc-bot-tom-rule
+etoc-left-rule-col-or-cmd
+etoc-right-rule-col-or-cmd
+etoc-bot-tom-rule-col-or-cmd
+etoc-bkg-col-or-cmd
+etoc-framed-mp-hook
+}
+
+\hyphenation{next-toc-with-tags}
+\frenchspacing
+
+\renewcommand\familydefault\sfdefault
+
+% for illustration only. Not to be recommended in general.
+\setcounter{secnumdepth}{4}
+
+% Vendredi 16 septembre 2016
+% pour rendre accessibles les exemples
+% Fait package filecontentsdef le Samedi 17.
+\usepackage{filecontentsdef}
+
+%\ifnum\Withdvipdfmx=1
+%% I have an issue that with \thesubsection or \the\value{section} in code
+%% snippet filename, the file is not correctly attached, it appears in the pdf
+%% interface but with a wrong filename and one can not obtain the file from
+%% the pdf (tested on Acrobat Reader 11 Vendredi 16 septembre 2016).
+% \usepackage[dvipdfmx]{attachfile2}
+%\else
+ \usepackage{attachfile}% no op with dvipdfmx
+%\fi
+%
+\def\CEST{+02'00'}\def\CET{+01'00'}
+\def\ExtractDateStamp #1<#2-#3-#4 at #5:#6:#7 #8>%
+ {D:#4#3#2#5#6#7\csname#8\endcsname}
+\edef\DateForSamples {\expandafter\ExtractDateStamp\etocdtxtimestamp}
+\attachfilesetup{icon=Paperclip, mimetype=application/x-tex, appearance=false,
+ author={Jean-François Burnol}, date=\DateForSamples}% print=false ?
+% attention Paperclip pas PaperClip !!
+
+\begin{document}%\layout
+\rmfamily
+\thispagestyle{empty}
+
+%-------------------------------------------------------------------------------
+% THIS IS TO AVOID TEX BEING CONFUSED BY CONDITIONALS IN FALSE BRANCHES
+\catcode1 0
+\catcode92 12
+
+^^Aifnum^^AForEnglish=1
+
+ ^^Acatcode92 0
+
+% START ENGLISH VERSION
+\bookmark[named=FirstPage,level=1]{Title page}
+
+\begingroup
+\etocsetstyle{part}
+ {\etocskipfirstprefix}
+ {\ifcase\pseudomodthree{\value{partco}}%
+ \or \appendpart\treetok\parttok {teal!60}% first
+ \or \appendpart\treetok\parttok {yellow!80}% second
+ \else\appendpart\treetok\parttok {green!50}% third and next ...
+ \fi
+ }
+ {\stepcounter{partco}%
+ \edef\treenode{node
+ {\unexpanded\expandafter{\etocthelinkednumber}.
+ \unexpanded\expandafter{\etocthelinkedname}}}%
+% grosse astuce: la première Partie ne sera pas embêtée par les trois sections
+% avant car ce qu'elles auront mis dans \parttok va être effacé.
+ \parttok\expandafter{\treenode}}
+ {\ifcase\pseudomodthree{\value{partco}}%
+ \or \appendpart\treetok\parttok {teal!60}% first
+ \or \appendpart\treetok\parttok {yellow!80}% second
+ \else\appendpart\treetok\parttok {green!50}% third and next ...
+ \fi
+ }
+
+\etocsetstyle{section}
+ {}
+ {}
+ {% define the section node
+ \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber}
+ \unexpanded\expandafter{\etocthelinkedname}}}}%
+ %\ifnum\value{partco}<9 % pour 1.08h
+ \appendtotok\parttok\childnode
+ %\fi
+ }
+ {}
+
+\etocsetnexttocdepth{section}
+
+\etocsettocstyle
+ {\setcounter{partco}{0}%
+ \treetok{\node [root concept]{\normalfont{The \etoc package}\par {\normalsize\textsc
+ {Jean-François Burnol}\par \ttfamily jfbu (at) free (dot) fr}\par
+ {\normalsize Package
+ version:\par \etocpkgversion{} (\etocpkgdate )\par}}}}
+ {\global\appendtotok\treetok{ ;}}
+
+\etocsettagdepth {preamble}{part}
+\etocsettagdepth {overview}{part}
+\etocsettagdepth {arbitrarily}{part}
+\etocsettagdepth {examples}{part}
+\etocsettagdepth {surprising}{part}
+\etocsettagdepth {linestyles}{part}
+\etocsettagdepth {globalcmds}{part}
+\etocsettagdepth {custom}{part}
+\etocsettagdepth {tips}{part}% pour faire de la place pour 1.09
+\etocsettagdepth {etocandworld}{part}
+\etocsettagdepth {code}{all}
+
+\etocinline\tableofcontents\label{toc:mindmaptitlepage}
+
+% \immediate\openout\TOCasTree=\jobname.toctree
+% \immediate\write\TOCasTree{\the\treetok}%
+
+
+\tikzset {branch color/.style={concept color=#1!white,
+ every child/.append style={concept color=#1!white!30!white}},
+% ajout pour version de 1.08g
+ level width/.store in=\tikzlevelwidth,
+ level height/.store in=\tikzlevelheight
+ }%
+
+\global
+\setbox\TitlePageMindmapTOC\hbox {%
+%\begingroup
+\resizebox{\dimexpr\paperwidth-1cm\relax}!{%
+\begin{tikzpicture}[mindmap,
+ text width=2cm,
+ align = flush center,
+% pour 1.09 je reviens à version circulaire simplifiée
+ growth function=\tikzmycustomgrowth,
+ nodes={concept},
+ concept color=orange!60,
+ root concept/.append style={font=\huge, text width = 6cm},
+ level 1/.append style={level distance=7cm, sibling
+ angle=360/10},% passage de 9 à 10 pour 1.08h, je pourrais aussi le calculer
+% level 1 concept/.append style={font=\Large, text width =
+% 3cm},
+% ancienne version circulaire
+% level 2/.append style={level distance=12.5cm, sibling angle=360/39},%
+% % distance par rapport au CENTRE ! (avec le code tel qu'en ce moment)
+% 39 hard coded mais je pourrais aussi le calculer
+% pour version rectangulaire, par tâtonnements:
+ % level 2/.append style={level width=21cm,
+ % level height=30cm,
+ % sibling distance=1cm},%
+ level 2/.append style={level distance=10cm, sibling angle=30},%
+ level 2 concept/.append style={text width=2cm},
+ ]
+\the\treetok
+\end{tikzpicture}%
+}%
+%\endgroup
+}
+\endgroup
+
+\noindent\null
+
+\AddToShipoutPictureFG*{\put(.5\paperwidth,.5\paperheight)
+ {\makebox(0,0){\box\TitlePageMindmapTOC}}}
+
+\clearpage
+
+\etocdepthtag.toc {preamble}
+
+%----
+% MAIN TOC
+%
+\etocsettocdepth {subsubsection}
+\etoctoclines
+\etocmarkboth\contentsname
+\etocmulticolstyle[1]
+ {\noindent
+ \bfseries\Large
+ \leaders\hrule height1pt\hfill
+ \MakeUppercase{Table of Contents}\let\thefootnote\empty
+ \footnote{Documentation (\etocdocdate) generated from the source file
+ with timestamp ``\etocdtxtimestamp''.}\setcounter{footnote}{0}%
+}
+
+\pdfbookmark[1]{Table of contents}{MAINTOC}%
+
+\begin{framed}
+ Starting with |1.08h|, about 25 code samples (especially the longer
+ ones) are incorporated into the PDF file (thanks to \textsc{Scott
+ Pakin}'s \href{http://www.ctan.org/pkg/attachfile}{attachfile}
+ package) as \emph{file attachement annotations}. Each file is represented
+ by an icon after the verbatim rendering of the corresponding code.
+ Clicking suitably on the icon will open a dialog to open or save the
+ file contents. This is much better than copy-paste which loses
+ indentation. There is also in some viewer a \emph{Comment pane} which can
+ be opened on the right side of the main window and which provides a
+ convenient clickable list of all these \emph{attachments annotations}.
+
+ PDF viewers unable to make these attachments accessible to the
+ user may replace the clickable icons by some blank space.
+\end{framed}
+% https://helpx.adobe.com/acrobat/using/comments.html
+
+\begingroup
+ \etocsetlevel{subsection}{3}
+ \etocsetlevel{subsubsection}{6}
+ \tableofcontents \label{toc:main}
+\endgroup
+
+% ATTENTION Vendredi 09 septembre 2016 à 21:46:51
+\clearpage
+
+\phantomsection\addcontentsline{toc}{section}{\abstractname}
+
+\begin{abstract}
+ The \etoc package gives to the user complete control on how
+ the entries of the table of contents should be constituted
+ from the \emph{name}, \emph{number}, and \emph{page number}
+ of each sectioning unit. This goes via the definition of
+ \emph{line styles} for each sectioning level used in the
+ document. The package provides its own custom line styles.
+ Simpler ones are given as examples in the documentation. The
+ simplest usage will be to take advantage of the layout facilities
+ of packages dealing with list environments.
+
+ Regarding the \emph{global toc display}, \etoc provides pre-defined styles
+ based on a multi-column format, with, optionally, a ruled title or framed
+ contents.
+
+ The \csa{tableofcontents} command may be used arbitrarily many times and it
+ has a variant \csa{localtableofcontents} which prints tables of contents
+ `local' to the current surrounding document unit. An extension of the
+ \csa{label}/\csa{ref} syntax allows to reproduce (with another layout) a local
+ table of contents defined somewhere else in the document.
+
+ Via ``depth tags'', one gets an even finer control for each table of contents
+ of which sectioning units it should, or not, display.
+
+ The formatting inherited (and possibly customized by other
+ packages) from the document class will be used when in
+ \emph{compatibility mode}.
+
+ The assignment of levels to the sectioning units can be changed at any
+ time, and \etoc can thus be used in a quite general manner to
+ create custom ``lists of'', additionally to the tables of contents
+ related to the document sectioning units. No auxiliary file is used
+ additionally to the standard |.toc| file.
+\end{abstract}
+
+\section{Foreword}
+
+Popular packages dealing with TOCs include |tocloft|, |titletoc|
+and |minitoc|. Why another one? I started \etoc
+for my own use, and found out only later about these mentioned
+packages.
+
+As is well explained in the |tocloft| package documentation,
+the standard \LaTeX{} layout for the Table of Contents is
+buried in the class definitions. In particular, most of the
+lengths therein are hardcoded, and the only way for the user
+to change them is to recopy the class definitions into the
+document and then change them to obtain what is desired
+(within suitable \csa{makeatletter} and \csa{makeatother}).
+The more reasonable alternative is to use a dedicated package such as
+|tocloft| or to use another flexible document class.
+
+However, although now things are hopefully not hard-coded, one
+still has to go through the package or class interface. This
+means one has to memorize a (possibly large) number of macros
+which will serve only to this task, and one will always be
+constrained to customizing one initially given layout.
+
+The spirit of \etoc is something else. The user will deal with
+the \emph{name}, the \emph{number} and the \emph{page number}
+corresponding to each document sectional division (and
+found in a line of the |.toc| file) in a completely arbitrary
+manner: they are made available via the \csb{etocname},
+\csb{etocnumber}, and \csb{etocpage} commands.
+
+\etoc appears to be (at least partially) compatible with the
+|article|, |book|, |report|, |scrartcl|, |scrbook|, |scrreprt| and
+|memoir| classes.
+
+% Starting with release |1.07k| it is possible to
+% use \etoc concurrently with package |tocloft|.
+
+\clearpage
+
+\section{License}
+
+\begingroup\ttfamily\small\hyphenchar\font -1
+ \parindent0pt
+ \obeyspaces\obeylines %
+\etocLicense\endgroup
+
+\clearpage
+
+\etocsettocdepth {subsection}
+
+\etocdepthtag.toc{overview}
+
+\part{Overview}\label{part:overview}
+
+\thispartstats
+
+\invisiblelocaltableofcontents \label{toc:overview}
+
+\section{Do I need to be a geek to use \etoc?}
+
+Not quite. The simplest way is to use |enumerate| environments,
+with the customizing facilities of packages such as
+|enumitem|,\footnote{\url{http://ctan.org/pkg/enumitem}} to
+display the data fetched by \etoc from the |.toc| file. The data
+consists of the \emph{name} (\csb{etocname}), \emph{number}
+(\csb{etocnumber}), and \emph{page number} (\csb{etocpage}) as
+extracted
+% \footnote{although \LaTeX{} has been promoted as
+% separating contents from form, there are some areas where its
+% real implementation is very far from this ideal. And the |.toc|
+% file is a case in point; not to mention the hard-coded
+% dimensions, with use of the @ sign,
+% in the macros responsible for constructing the typeset table of
+% contents.}
+from the |.toc| file.
+
+This is
+illustrated \hyperref[toc:a]{at the start} of
+\autoref{part:linestyles}. More
+sophisticated examples would use more sophisticated |enumitem|
+options. One may say then that again the user has to memorize some
+customizing! indeed, but the syntax and option names to memorize
+are in no way related only to matters of tables of contents, hence
+an economy of use of the poor brain.
+
+% People who
+% know the internals of \LaTeX2e well (which is not my case) could
+% happily use directly a |\list| command;
+
+Next in ease of use, perhaps, is the method explained
+\hyperref[sec:firstexample]{later in this part}
+(\autoref{sec:firstexample}). For this some knowledge of |\leftskip|,
+|\rightskip|, etc... is necessary. And a slight elaboration of this
+method, whose code is to be found in \autoref{ssec:tocwithdepthtags},
+allows to mimick very well, if so desired, the standard looks. An even
+closer emulation of the |book| class design is now included in this
+documentation as \autoref{sec:thirdexample}.
+
+As will be amply illustrated in this manual, \etoc is quite
+versatile (especially as it allows to re-define at any point in
+the document the hierarchy of sectioning units) and one can
+achieve surprising effects with it: \autoref{part:surprising} is
+devoted to this, and some more is to be found in
+\autoref{part:tipsandtricks}.
+
+\begin{framed}
+\setcounter{mycounti}{0}%
+ \etocinline
+\etocsetlevel{part}{1}
+\etocsetlevel{chapter}{1}
+\etocsetlevel{visibletoc}{0}
+\etocsetstyle{visibletoc}
+ {}
+ {\stepcounter{mycounti}}
+ {}
+ {}
+\etocsettocstyle{}{}
+\etocsetnexttocdepth{0}
+\tableofcontents
+A very important aspect of \etoc is that it is geared towards making many TOCs
+in the same document, \emph{using only one |.toc| file}! The present
+documentation contains \arabic{mycounti} visible tables of contents (and a few
+invisible ones) and uses only one |.toc| file!\footnotemark{} So one should
+think
+twice before adding manually extra commands to the |.toc| file (see
+\autoref{sec:addingtotoc}).
+\end{framed}
+
+\footnotetext{and the counting itself has been achieved by a table of contents
+ which was inserted in the framed paragraph! \dots the technique for this kind
+ of effect will be explained later.}
+
+
+\subsection{Limitations in the use of list environments for
+ tables of contents}
+\label{ssec:limitations}
+
+There are some limitations to the use of list environments
+for typesetting TOCs. One of them is intrinsic to the scope
+limitations created by the groups associated to the
+environments: the |.toc| file
+may contain, besides the information to be typeset in the
+TOCs, some other commands, such as language changing
+commands, which do not expect to see their scope limited in
+this way inside a group (\LaTeX's environments create groups).
+
+Therefore the built-in ``line styles'' proposed by \etoc as an example
+(and which are illustrated\footnote{with a twist, subsections having
+ been downgraded to the subsubsection style\dots} by the
+\hyperref[toc:main]{main table of contents} in this document) do not
+make use of environments. Actually, in this user manual, only the
+\hyperref[toc:a]{table of contents} at the start of
+\autoref{part:linestyles}, the \autoref{toc:allsubsections} (which is a
+TOC!) and examples from \autoref{etocthelink} have their line
+styles expressed in terms of enumerate or itemize environments.
+
+\section{Line styles and toc display style}
+
+A distinction shall be made between the \emph{line styles},
+\emph{i.e.} the way the name, number and page numbers are
+used at each level, and the \emph{toc display style} (for
+lack of a better name) which tells how the title should be
+set, whether an entry in the |.toc| file should be made,
+whether the contents should be typeset with multiple columns,
+etc... the latter is governed by the command
+\csa{etocsettocstyle} (or some higher-level commands) and the
+former by the command \csa{etocsetstyle}.
+
+
+\subsection{\csbhyp{etocsetstyle} for the line styles}
+
+The command to inform \etoc of what to do with \csa{etocname}, \csa{etocnumber},
+and \csa{etocpage} is called \csb{etocsetstyle}. It has five mandatory
+arguments. The first one is the name of the sectional unit: a priori known names
+are |book|, |part|, |chapter|, |section|, |subsection|, |subsubsection|,
+|paragraph|, and |subparagraph|, and any other name can be declared and assigned
+to a (numeric) level via the \csb{etocsetlevel} command.\footnote{under the
+ \texttt{memoir} class, \etoc knows \texttt{appendix} as a sectioning
+ name.}
+
+The four other arguments of \csb{etocsetstyle} specify: 1) \emph{what to do when
+ this level is first encountered, down from a more general one,} then 2) \& 3)
+(two arguments, a `prefix' and a `contents') \emph{what to do when a new entry
+ of that type is found,} and 4) \emph{the last argument is the code to execute
+ when a division unit of higher importance is again hit upon.}
+
+\subsection{\csbhyp{etocsettocstyle} for the toc display}
+
+The \csb{etocsettocstyle} command allows to specify what
+should be done before and after the line entries of the TOC
+are typeset, and in particular how the title should be
+printed. It has two arguments, the first one is executed
+before the TOC contents (typically it will print
+``Contents'' and define suitable marks for the page headings) and
+the second is executed after the TOC contents.
+
+\etoc provides four (customizable) higher level toc styles:
+\csb{etocmulticolstyle}, \csb{etoctocstyle},
+\csb{etocruledstyle}, and \csb{etocframedstyle}. All use the
+|multicol| package with a default of two columns
+(single-column mode is obtained with the optional argument |[1]|).
+
+These commands must be followed either by \toc or \localtoc.
+
+\subsection{Compatibility mode}\label{subs:compat}
+\label{etoctoclines}
+\label{etocstandardlines}
+
+Both for the ``line styles'' and the ``toc display style'', it is
+possible to switch into a compatibility mode which uses the
+defaults from the
+document class.\footnote{for the ``toc display style''
+ \etoc checks if it knows the class, and if not defaults to
+ the |article| class layout. It will also check if
+ \texttt{tocloft} has customized the TOC title.}
+This is activated by:\\
+\makebox[5.2cm][l]{\csb{etocstandardlines}}
+ |% `line entries' as without \usepackage{etoc}|\\
+\makebox[5.2cm][l]{\csb{etocstandarddisplaystyle}}
+ |% `toc display' as without \usepackage{etoc}|
+
+
+If the command \csa{etocsetstyle} has \emph{not been used in the
+preamble} the package will be at |\begin{document}| in this
+ compatibility mode: hence just adding \csa{usepackage\{etoc\}}
+ should hopefully not change anything to the look of a
+ previously existing document, under the |article|, |book|,
+ |report|, |scrartcl|, |scrbook|, |scrreprt| and |memoir|
+ classes.
+
+ Any use of \csa{etocsetstyle} in the \emph{preamble or body} of
+ the document turns off from that point on the compatibility mode
+ for line styles, but maintains the compatibility mode for the
+ TOC title. One re-activates the compatibility mode for line
+ styles with \csb{etocstandardlines}; and
+ \csb{etoctoclines} will re-activate the line styles as defined
+ with the help of \csa{etocsetstyle}, if their scope was not
+ limited to a group or environment.
+
+ The command \csb{etocdefaultlines} resets the line styles as
+ pre-defined internally by \etoc and described in
+ \autoref{etocdefaultlines}.
+
+Even if \csb{etocsetstyle} has been used, the global display style
+remains initially as defined by the document class (or the
+|tocloft| package); one needs to use the command
+\csb{etocsettocstyle} or its variants to exit from this
+compatibility mode at the ``toc display style'' level. It will be
+re-activated if use if made of \csb{etocstandarddisplaystyle}.
+
+See further \autoref{sec:anothercompat}.
+
+\section{A first example}
+\label{sec:firstexample}
+
+Let us present a first example of specification for line styles.
+Immediately after the start of \autoref{part:overview} we inserted in the
+source file:
+\centeredline{|\invisiblelocaltableofcontents \label{toc:overview}|} This
+sets-up the label |toc:overview|, and we can use it at any location in the
+document: \centeredline{|\tableofcontents \ref{toc:overview}|} And as we used
+|\invisible...|,\footnote{this is a shortcut for setting temporarily the
+ |tocdepth| to |-3|, which has the effect to tell \etoc not to print the TOC,
+ and not even the heading.} the local TOC will exist only through its clones
+elsewhere in the document.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begingroup\parindent 0pt \parfillskip 0pt \leftskip 0cm \rightskip 1cm
+\etocsetstyle {section}
+ {}
+ {\leavevmode\leftskip 0cm\relax}
+ {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}%
+ \etocname\nobreak\hfill\nobreak
+ \rlap{\makebox[1cm]{\mdseries\etocpage}}\par}
+ {}
+\etocsetstyle {subsection}
+ {}
+ {\leavevmode\leftskip .5cm\relax }
+ {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}%
+ \etocname\nobreak\hfill\nobreak
+ \rlap{\makebox[1cm]{\etocpage}}\par}
+ {}
+\etocsetstyle {subsubsection}
+ {}
+ {\leavevmode\leftskip 1.5cm\relax }
+ {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}%
+ \etocname\nobreak\hfill\nobreak
+ \rlap{\makebox[1cm]{\etocpage}}\par}
+ {}
+\etocruledstyle[1]{\bfseries \Large My first \etoc: TOC of
+ \autoref{part:overview} (\nameref{part:overview})}
+\tableofcontents \ref {toc:overview}
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+We could have used the line styles defined by \etoc, with
+\csb{etocdefaultlines}, or the default document class styles with
+\csb{etocstandardlines}, but we were a bit more ambitious here and wanted to
+design our own. The technique is a simple one: each heading is in its own
+paragraph, which may extend on multiple lines; it is responsible for setting
+its own |\leftskip|.
+
+This is a simple design which does not make provisions for page breaks
+which should be discouraged in-between a section and a subsection
+etc\dots{} as we only used it for the table of contents of this part, thus
+with sections as top levels, there was no need to specify a style for
+parts too (we defined a subsubsection line style but as it turns
+out there are no subsubsections in this part). The two commands used are
+\csb{etocsetstyle} for specifying the line styles, and
+\csb{etocruledstyle} for the TOC global style.
+
+The |\rightskip| is shared by all, and creates space where the page
+numbers get printed. For an elaboration of this technique see the next
+\autoref{sec:secondexample} as well as \autoref{ssec:tocwithdepthtags}
+which provides a TOC with parts and paragraphs. Both allow multi-line
+headings and employ a technique for putting page numbers in the right margin
+which was inspired from what \LaTeX2e's |\@dottedtocline| macro does.
+
+Here is how it was produced:
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+
+\section{A second example}
+\label{sec:secondexample}
+
+This second example displays only the contents from
+\autoref{part:linestyles} and \autoref{part:globalcmds}. This selection
+is done via the technique of \emph{depth tags}, described in
+\autoref{etocsettagdepth} and \autoref{ssec:tocwithdepthtags}. Its
+layout is a bit like the one of the \hyperref[toc:main]{main document
+ TOC}, although the line styles are coded very differently.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begingroup
+\newcommand*{\DotsAndPage}
+{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}%
+ \hfill\nobreak
+ \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par}
+
+\etocsetstyle {part}
+{\parindent 0pt
+ \nobreak
+ \etocskipfirstprefix}
+{\pagebreak[3]\bigskip}
+{\large\rmfamily\bfseries\scshape\centering
+ \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par}
+{}
+
+\etocsetstyle {section}
+{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip
+ \nobreak\medskip
+ \etocskipfirstprefix}
+{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip
+ \pagebreak[1]\smallskip}
+{\normalsize\rmfamily\bfseries\scshape
+ \etocnumber. \etocname\DotsAndPage }
+{\parfillskip 0pt plus 1fil\relax }
+
+\etocsetstyle {subsection}
+{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax
+ \nobreak\smallskip}
+{}
+{\footnotesize\sffamily\mdseries\itshape
+ \etocname{} (\etocnumber, p. \etocpage). }
+{\par\medskip}
+
+\etocsettagdepth {preamble} {none}
+%\etocsettagdepth {overview} {none}% not needed explicitely, keeps value
+%\etocsettagdepth {arbitrarily}{none}
+%\etocsettagdepth {examples} {none}
+%\etocsettagdepth {surprising} {none}
+\etocsettagdepth {linestyles} {subsection}
+\etocsettagdepth {globalcmds} {subsection}
+\etocsettagdepth {custom} {none}
+%\etocsettagdepth {tips} {none}
+%\etocsettagdepth {etocandworld}{none}
+%\etocsettagdepth {code} {none}
+
+\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
+\etocsetnexttocdepth {subsection}
+\tableofcontents
+\endgroup
+\end{filecontentsdef}
+\filecontentsexec\foo
+
+The code:
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\section{A Beautiful Thesis example}
+
+Here is a relatively simple example of use of the package
+functionalities.
+Let us set up some line styles. We choose a style for sections and
+sub-sections which would be suitable for, respectively, sections and
+sub-sections in an average length memoir. The line style specifications have
+some redundancy for clarity, and do not care about what to do at possible page
+breaks. Also, they do not worry about potential multi-column use.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begingroup % we start a group to keep the style changes local
+\newlength{\tocleftmargin} \setlength{\tocleftmargin}{5cm}
+\newlength{\tocrightmargin} \setlength{\tocrightmargin}{1cm}
+
+\etocsetstyle{section} % will pretend to be a Chapter
+{\addvspace{1ex}\parfillskip0pt
+ \leftskip\tocleftmargin % (already done in title)
+ \rightskip\the\tocrightmargin plus 1fil
+ \parindent0pt\color{cyan}} % (already done)
+{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode}
+{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname
+ \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par}
+{}
+
+\etocsetstyle{subsection} % will pretend to be a Section
+{}
+{\mdseries\large\addvspace{.5ex}\leavevmode}
+{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}%
+ \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par}
+{}
+
+\def\tmptitle{My Beautiful Thesis}
+\etocsettocstyle{\color{cyan}\parindent0pt \leftskip\tocleftmargin
+ \leavevmode\leaders\hrule height 1pt\hfill\
+ \huge\textit{\tmptitle}\par}{\bigskip}
+
+\tableofcontents \ref{toc:overview}
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+
+\section{Linked list of the main package commands}
+
+\begingroup\raggedcolumns
+\advance\linewidth18pt
+\begin{multicols}{3}\parindent0pt\relax
+ \csb{etocaftercontentshook}\par
+ \csb{etocaftertitlehook}\par
+ \csb{etocaftertochook}\par
+ \csb{etocbeforetitlehook}\par
+ \csb{etocdefaultlines}\par
+ \csb{etocdepthtag.toc}\par
+ \csb{etocdisplay}\par
+ \csb{etocframedstyle}\par
+ \csb{etocframed}\par
+ \csb{etociffirst}\par
+ \csb{etocifnumbered}\par
+ \csb{etocignoredepthtags}\par
+ \csb{etocignoretoctocdepth}\par
+ \csb{etocinline}\par
+ \csb{etoclink}\par
+ \csb{etoclocalframed}\par
+ \csb{etoclocaltop}\par
+ \csb{etoclocalmulticol}\par
+ \csb{etoclocalruled}\par
+ \csb{etocmulticolstyle}\par
+ \csb{etocmulticol}\par
+ \csb{etocname}\par
+ \csb{etocnumber}\par
+ \csb{etocobeydepthtags}\par
+ \csb{etocobeytoctocdepth}\par
+ \csb{etocpage}\par
+ \csb{etocruledstyle}\par
+ \csb{etocruled}\par
+ \csb{etocsetlevel}\par
+ \csb{etocsetnexttocdepth}\par
+ \csb{etocsetstyle}\par
+ \csb{etocsettagdepth}\par
+ \csb{etocsettocdepth.toc}\par
+ \csb{etocsettocdepth}\par
+ \csb{etocsettocstyle}\par
+ \csb{etocskipfirstprefix}\par
+ \csb{etocstandarddisplaystyle}\par
+ \csb{etocstandardlines}\par
+ \csb{etocthelinkedname}\par
+ \csb{etocthelinkednumber}\par
+ \csb{etocthelinkedpage}\par
+ \csb{etocthelink}\par
+ \csb{etocthename}\par
+ \csb{etocthenumber}\par
+ \csb{etocthepage}\par
+ \csb{etoctoccontentsline}\par
+ \csb{etoctoclines}\par
+ \csb{localtableofcontents}\par
+ \csb{localtableofcontentswithrelativedepth}\par
+ \csb{tableofcontents}\par
+%\vspace{5\baselineskip}\hrule height 0pt
+\end{multicols}
+\endgroup
+
+
+\clearpage
+% 15 octobre, je teste les tags
+\etocdepthtag.toc {arbitrarily}
+
+\part{Arbitrarily many TOCs, and local ones too}
+% 13 octobre, ceci était une section avant
+
+\thispartstats
+
+\etocsettocstyle{}{}
+\etocstandardlines
+\localtableofcontents
+
+\section{The \toc, \localtoc and \localtocwrdp commands}
+\label{tableofcontents}
+\label{localtableofcontents}
+\label{localtableofcontentswithrelativedepth}
+
+\begin{description}
+\item[\toc] can be used arbitrarily many times in the document. Styling either
+ globally the TOC or its individual entries is customizable at any time in the document.
+\item[\localtoc] will print local tables of
+contents: \emph{i.e.} all sections and sub-units inside a
+given chapter, or all subsubsections and lower inside a given
+subsection, etc... (see also \csb{etocsetnexttocdepth}).%
+%
+\footnote{As is explained in \autoref{sec:labeling} the syntax allows to
+ create somewhere a local table of contents and to display it at some other
+ location either before or after its origin.}%
+\textsuperscript{,}%
+\footnote{As is explained in \autoref{sec:tocdepth} \etoc allows at anytime to
+ locally redefine the numeric levels associated to named ones, which brings
+ great flexibility to achieve special effects, all done using only a single
+ auxiliary file, the standard |.toc| file.}
+%
+\item[\localtocwrdp\marg{number}] can be used to override the document or
+ current tocdepth setting (see \autoref{sec:tocdepth} for a discussion of
+ tocdepth) to become relative to where the local TOC originates. For example,
+ assuming the default numeric level assignments to standard sectioning units
+\begin{verbatim}
+\section{This is a section}
+\localtableofcontentswithrelativedepth{+2}
+\end{verbatim}
+ will create a local table of contents taking into account the subsections
+ and subsubsections inside this section, independently of what is the value
+ of the |tocdepth| counter at this position in the document. If the numeric
+ argument had been |3|, the local TOC would have displayed also paragraphs.
+ If the section had been a chapter, and again for a relative tocdepth of |2|,
+ the taken into account levels would have been sections and subsections.%
+%
+\footnote{The situation may be more complex, as the |.toc| file itself may
+ well contain \texttt{\string\setcounter\{tocdepth\}\{...\}} commands. This
+ is not recommended pratice with \etoc. See the discussion of
+ \csb{etocsettocdepth.toc} and \csb{etocdepthtag.toc} for more on this.}
+\end{description}
+
+The macro \localtocwrdp is \textbf{new with |1.09|}.%
+%
+\footnote{Thanks to Tony \textsc{Roberts} for feature request.}
+%
+
+\section{Labeling and reusing elsewhere}
+\label{sec:labeling}
+
+\etoc allows the labeling of a TOC with (for example)
+\csa{label\{toc:A\}} and will redisplay it elsewhere when
+told \csa{tableofcontents}\csa{ref\{toc:A\}}. The actual
+layout (title inclusive) used for the cloned TOC will be
+decided locally. The line styles and toc display style
+(including the title) will be the current ones and the
+current value of the |tocdepth| counter is obeyed. As an
+example the table of contents of
+\autoref{part:custom} is in a \hyperref[toc:d]{float} which appears
+\vpageref{toc:d}.
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begin{figure}[ht!]
+ \centering
+ \begingroup
+ \etocstandardlines
+ \renewcommand{\etocbkgcolorcmd}{\color{green!5}}
+ \renewcommand{\etocbelowtocskip}{0pt\relax}
+ \fboxsep1ex
+ \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone
+ \hyperref[toc:c]{I am from far away}}}}
+ \tableofcontents \label{toc:d} \ref{toc:c}
+ \endgroup
+\end{figure}
+\end{filecontentsdef}
+\filecontentsexec\foo
+
+We used this:
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+Important: one should not use elsewhere \toc|\ref{toc:d}|. To clone again, one
+must use a reference to the original label: \toc|\ref{toc:c}|.
+
+\section{A powerful functionality of \etoc: the
+ re-assignment of levels with \csbhyp{etocsetlevel}}
+\label{sec:tocdepth}
+
+The intrinsic levels manipulated by \etoc are numeric: from
+|-2| (which corresponds to |book| in the |memoir| class)
+down (from the big to the small)
+to |5| (|subparagraph|). But the assignment of a numeric level
+to a given name can be modified at any time with the command
+\csb{etocsetlevel}\marg{level\_name}\marg{number}. In conjunction
+with the use of the \LaTeX{} |tocdepth| counter, this has
+powerful applications: \meta{level\_name} does not have to
+coincide with an actual document sectioning command, and \etoc
+can be used to print arbitrary ``lists of things'', using no
+other auxiliary file than the |.toc| file. This is
+explained further in \autoref{part:surprising}.
+
+\begin{framed}
+ It is often said that in the standard classes, the sectioning
+ level of |\part| is |0| in the classes not having a |\chapter|
+ command, and |-1| in classes having a |\chapter| command. This
+ is \emph{correct} for what regards the \emph{automatic
+ numbering}, as is governed by the value of the |secnumdepth|
+ counter; but it is \emph{wrong} for what regards the effect of
+ the |tocdepth| counter: setting the |tocdepth| to |-1| in the
+ |article| class just before |\tableofcontents| does \emph{not}
+ prevent Parts from appearing in the Table of Contents. One has
+ to set it to |-2| for that, whether in the |article| or in the
+ |book| class.
+
+ The canonical levels, a priori known to \etoc, are those of
+ relevance to the \textbf{|tocdepth|} counter in the standard
+ classes and are recapitulated in this table: \centeredline{
+ \fbox{\begin{tabular}{rc}
+ (|memoir| class) book&-2\\ part&-1\\ chapter&0 \\
+ section&1\\ subsection&2 \\
+ subsubsection&3 \\ paragraph&4 \\ subparagraph& 5
+ \end{tabular}}}
+
+\smallskip With \etoc, the user can easily print a local table of
+contents inside a given subsection, where subsubsections will be
+printed in the style of sections, paragraphs in the style of
+subsections, and subparagraphs in the style of subsubsections, if
+so desired. One can also decide to set everything to be at the level
+|6| (never displayed by \etoc), except for example
+paragraphs, promoted to be at level |1|, and then one obtains a nice
+table of contents of all the paragraphs from the document!
+(|tocdepth| at least |1|)\footnotemark
+\end{framed}
+
+\footnotetext{and one should naturally not print this TOC of paragraphs in
+ compatibility mode, which would insist on inserting a gigantic left
+ margin.}
+
+\section{The \csbhyp{etoc\-set\-toc\-depth} and
+ \csbhyp{etoc\-set\-next\-toc\-depth} commands}
+\label{etocsettocdepth}
+\label{etocsetnexttocdepth}
+
+The |tocdepth| counter has no bearing on what gets written to the |.toc| file;
+its action is only on the actual typesetting of the table of
+contents.\footnote{In the standard classes (at least), it also influences the
+ \csa{listoftables} and \csa{listoffigures}, via \csa{@dottedtocline}.} In the
+standard classes there is only one |\tableofcontents| possible, whereas with
+\etoc, arbitrarily many are allowed, so one may change |tocdepth| to the
+appropriate value (which decides the finest sectioning level displayed) again
+and again each time a table of contents needs to be typeset.
+
+\etoc provides \csb {etocsettocdepth}\marg{level} whose mandatory argument is
+either
+numeric (from |-3| to |5|) or a division name such as |subsection| or
+|subsubsection| or any name previously declared to \etoc with
+\csb{etocsetlevel} (the keywords |all| and |none| are recognized, although not
+corresponding to a document division).
+This does the appropriate |\setcounter{tocdepth}{numeric_level}|.
+
+As is explained in the next subsection, |tocdepth| is used by |hyperref|, and
+one must take steps to prevent its changes from influencing the bookmarks, too.
+So, \etoc has \csb {etocsetnexttocdepth}\marg{level} whose influence ceases
+immediately after the next table of contents. Thus, |\invisibletableofcontents|
+is essentially |\etocsetnexttocdepth{none}\tableofcontents|.
+
+The simplest course is thus to have after |\begin{document}| and before the
+ first |\tableofcontents| a single instance of the \csb{etocsettocdepth}
+ command, with argument the deepest level (or most commonly used deepest level)
+ among the tables of contents of the document, and to use locally,
+ where needed, \csb{etocsetnexttocdepth} before |\tableofcontents| or
+ |\localtableofcontents|.
+
+\begin{framed}
+ It is possible to use \csb{etocsettocdepth} inside the first argument of
+ \csb{etocsettocstyle} (possibly in conjunction with checking the
+ \csb{etoclocaltop} value, \emph{which however will be up-to-date there only if
+ \csb{etocchecksemptiness} was executed}). There is no worry then about
+ possible impact on hyperref bookmarks later on, because \etoc always resets
+ the |tocdepth| counter after typesetting a TOC to the value it had before
+ it.
+
+ Since |1.09| the macro \csb{etocsetnexttocdepth} works also if located in
+ first argument of \csb{etocsettocstyle}, but there is no reason to use it
+ there as \csb{etocsettocdepth} has no durable effet on the |tocdepth|
+ counter if executed there.
+
+ Check \csb{localtableofcontentswithrelativedepth} for a simpler way to
+ control the depth of local tables of contents. This has the advantage of
+ working reliably whether or not the \csb{etocchecksemptiness} is used.
+\end{framed}
+
+\subsection{The hyperref option \emph{bookmarksdepth}}
+\label{ssec:bookmarksdepth}
+
+When modifying the counter |tocdepth| for the purposes of
+multiple uses of \toc or \localtoc, one should be aware that
+package |hyperref| by default takes into account the
+\emph{current} value of the |tocdepth| counter to decide
+whether the |pdf| file will contain a bookmark corresponding
+to sectioning commands encountered in the source file. Thus,
+one typically needs to reset |tocdepth| to its previous
+value after having temporarily modified it for a given table of
+contents.
+
+Or, there is the \emph{bookmarksdepth=n} option of package
+|hyperref|, with \emph{n} the desired document bookmarks
+maximal depth, which can be numeric or the name of a level known to
+|hyperref|. This documentation previously passed |bookmarksdepth=3| as
+option to |hyperref|, so even if |tocdepth| was left to |1|
+by inadvertance after printing a certain table of contents
+this did not modify the bookmark tree of the |pdf| file. Now that
+\csb{etocsetnexttocdepth} has been added to the package, we have used it
+systematically and there was no need for |bookmarksdepth=3| anymore.
+
+\section{The command \csbhyp{etoc\-set\-toc\-dep\-th.toc}}
+\label{etocsettocdepth.toc}
+
+This command \csb{etocsettocdepth.toc} implements some functionality of
+|tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}. I thank Denis \textsc{Bitouzé} for drawing
+ my attention to the incompatibility of this package with \etoc.}, a package
+which however was incompatible with \etoc (it can still be used for its
+|secnumdepth|-related commands, but its |toc|-related activities will get
+canceled by \etoc) and more-or-less designed for a single table of contents.
+
+The action of \csb{etocsettocdepth.toc} is totally different than the one of
+\csb{etocsettocdepth}. Rather than modifying the |tocdepth| counter immediately,
+it adds a line to the |.toc| file which, when executed inside a table of
+contents will enact this change.
+
+The command \csb{etocsettocdepth.toc}, like
+\csb{etocsettocdepth}, accepts both numeric and named
+arguments. In the case of a named argument, the actual numeric
+value to be used is not yet decided at the time the |.toc|
+file is created; it will be the value currently specified for
+the named level at the time each table of contents (not having
+done |\etocignoretoctocdepth|) is typeset.
+
+The |tocdepth| counter will never be set to a value finer than its initial value
+at the start of the table of contents: so adding commands
+\csb{etocsettocdepth.toc} in the document is a way to \emph{restrict} locally
+the depth of the table of contents. For example to prevent inclusion in the
+tables of contents of the sub-sub-sections of a given chapter.
+
+This
+{\fbox{gets executed in ALL tables of contents.}}
+
+\subsection{The commands \csbhyp{etocobeytoctocdepth} and \csbhyp{etocignoretoctocdepth}}
+\label{etocobeytoctocdepth}
+\label{etocignoretoctocdepth}
+
+
+So \csb{etocignoretoctocdepth} is provided to cancel the
+\csa{etocsettocdepth.toc} mechanism when
+needed; and \csb{etocobeytoctocdepth} will
+re-activate it. The package does initially \csb{etocobeytoctocdepth}.
+
+
+\section{The commands \csbhyp{etoc\-depth\-tag.toc} and \csbhyp{etocsettagdepth}}
+\label{etocdepthtag.toc}
+\label{etocsettagdepth}
+
+As mentioned above, when the argument to \csb{etocsettocdepth.toc} isn't
+numeric but a named level the actual numeric level used is decided at the time
+the TOC gets typeset, thus with the \emph{shuffling abilities of \etoc}, one may
+obtain a very flexible control in the following way: one first declares with
+\csb{etocsetlevel} some
+dummy named level, say |partIII|, assigning it the invisible numeric level |6|.
+Then before the actual third |\part| command in the source one inserts
+\csb{etocsettocdepth.toc}|{partIII}|. At the location where the effect should
+cease one inserts in the source \csb{etocsettocdepth.toc}|{all}|. It is now
+possible to specify, each time one wants to typeset a TOC, what will be the
+finest level for the entries originating in the third part: one just has to do
+\csa{etocsetlevel}|{partIII}{1}| for example. This will limit to sections
+(if |tocdepth| was at least at that level at the time \toc is encountered).
+
+This method has some limitations:
+\begin{enumerate*}[label={(\roman*)}]
+ \item the second argument to \csb{etocsetlevel} must be numeric,
+ \item it can not be set to |-3| (which would be necessary if one wanted to
+ exclude an entire Book from a TOC in a |memoir| document with multiple such
+ Books \dots admittedly a possibly rare case!),
+ \item it is a bit of a hack as |partIII| is not a real division unit, but just
+ a \emph{tag}.
+\end{enumerate*}
+
+Release |1.07h| has a command \csb{etocdepthtag.toc} which
+makes it easier to achieve this variable local control of the |tocdepth| at the
+time of typesetting TOCs.
+
+It is used as \csb{etocdepthtag.toc}\marg{tag\_name}, where the \meta{tag\_name}
+is anything, and this will put the tag in the |.toc| file. When typesetting a
+TOC, one issues a series of commands
+\csb{etocsettagdepth}\marg{tag\_name}\marg{level} where the \meta{level} may be
+either numeric (from |-3| to |5|) or the name of a division unit known to \etoc,
+or |none| or |all|. The effect of the tag inside the |.toc| file will then be to
+set the |tocdepth| counter to the desired value, in real time (as mentioned
+already, this can not get finer than the initial value of |tocdepth| at the
+start of the TOC).
+
+The added flexibility is thus that \csb{etocsetlevel} has not been used in a
+kind of hacky way, that one may use named level depths, and the
+keywords |none| and |all|.
+
+As usual, once the tag depths have been set, they remain in effect until getting
+redefined or seeing their scope expire via the closing of a group or of a
+surrounding
+environment. For an example, see \autoref{ssec:tocwithdepthtags}.
+
+
+\subsection{The commands \csbhyp{etocobeydepthtags} and \csbhyp{etocignoredepthtags}}
+\label{etocobeydepthtags}
+\label{etocignoredepthtags}
+
+
+After \csb{etocignoredepthtags}, the |.toc| depth tags are ignored (but
+\csb{etocdepthtag.toc} still works). The package does initially
+\csb{etocobeydepthtags} which makes \etoc react to the found tags in the
+|.toc| file.
+
+\section{The commands \csbhyp{etocglobaldefs} and \csbhyp{etoclocaldefs}}
+\label{etocglobaldefs}
+\label{etoclocaldefs}
+
+In \LaTeX{} the meaning of a command defined via |\newcommand\foo{...}| inside
+an environment (or group) vanishes from \TeX's memory on exit from this
+environment (or group). At times however it is needed to make definitions with
+global scope, for this \TeX{} has the primitive prefix |\global|.
+
+By default \etoc's definitions of \csb{etocname} etc... are local. This causes
+problems in certain contexts such as TOC as tables (\autoref{sec:tocastable}, \autoref{ssec:tocastableold}) and also
+with |enumitem| \emph{inline} variants of its standard environments, because
+the command |\item| then closes a group (see \autoref{etocthelink}).
+
+After \csa{etocglobaldefs}, \etoc will make its definitions of \csb{etocname}
+etc... have global scope. For normal use this is not necessary. It does not hurt
+either to activate it systematically.
+
+To return to the default, use \csa{etoclocaldefs}. Note that both
+\csa{etocglobaldefs} and \csa{etoclocaldefs} actions are local to the
+environment or group where they are used.
+
+
+\section{Not displayed empty TOCs}
+
+\subsection{The \csbhyp{etocchecksemptiness} command}
+\label{etocchecksemptiness}
+\label{etocdoesnotcheckemptiness}
+
+The user needs to issue \csb{etocchecksemptiness} to tell \etoc to check whether
+local tables of contents are empty and in case of emptiness to print nothing
+at all.\footnote{Thanks to Paul Gaborit who asked for
+such a feature.} This
+can be useful to authors of \LaTeX{} classes who for example wish to have a
+|\chapter| command doing systematically a \csa{localtableofcontents}, or for
+people producing files via automatic conversions and some of those might have
+sectioning commands and others not.
+
+«Emptiness» means that no \csa{contentsline} command would get executed within
+the scope of the local table of contents --- empty line styles by themselves do
+not make the TOC empty. \etoc always executes the \csb{etocaftertochook}
+command; and the test for emptiness itself executes everything else found in
+the |.toc| file. See \autoref{sec:addingtotoc} in this context.
+\begin{enumerate}
+\item the \csb{etocifwasempty} command discussed below can be used from inside
+\csb{etocaftertochook}, and even from inside \csb{etocbeforetitlehook}.
+\item there is also \csa{etocdoesnotcheckemptiness} (since |1.08i|.)
+\end{enumerate}
+
+The suppression of the heading (more precisely of the toc display style
+elements) may be effective only for the final \LaTeX{} runs. For example in
+the situation of a \csa{tableofcontents}|\ref{foo}| where the label |foo| is
+not yet recognized, the heading (but not the contents) is printed and the TOC
+is declared non-empty. Or, if one adds a \localtoc to a document, on the next
+run, the test for emptiness will in fact apply to the next one, and the last
+local TOC of the document will have its contents temporarily unknown to \etoc,
+hence will be declared non empty, and the heading will be printed.
+
+For a finalized document compiled with initially no auxiliary files, the first
+\LaTeX{} run will declare all local TOCs non empty and print for each of them a
+heading (and no contents naturally). The second \LaTeX{} run will then
+correctly decide which local TOC is empty or not.
+
+\subsection{The \csbhyp{etocnotocifnotoc} command}
+\label{etocnotocifnotoc}
+
+The user can then extend the emptiness-checking to the global TOCs with
+\csb{etocnotocifnotoc}. May I respectfully give the advice then to rather do
+none of |\usepackage{etoc}| nor \toc ? |;-)|. Well, there is always the case
+of batch conversions of documents having or not sectioning units.
+
+\subsection{The \csbhyp{etocifwasempty} command}
+\label{etocifwasempty}
+\label{etocxifwasempty}
+
+The command \csb{etocifwasempty}\marg{YES}\marg{NO} executes \meta{YES} if
+the previous TOC was found to be empty and \meta{NO} if its was not so. This
+may serve to act appropriately after a truly empty TOC. If
+\csb{etocchecksemptiness} has not been issued, this conditional always
+executes the \meta{NO} branch.
+
+This command is robust, and \csb{etocxifwasempty} is its expandable
+version.
+
+\fbox{Do not forget the second argument: at least an empty pair of braces |{}|
+ must be present.}
+
+This conditional may wrongly say that the local TOC is empty or not empty
+until \LaTeX{} compilations stabilize. But if it says that a local TOC is
+empty, this does mean that \etoc considered the just encountered local table
+of contents to be empty (for that run) and thus printed nothing (not even a
+|\par|).
+
+% pas traduit
+\section{The \csbhyp{etoclocaltop} command}
+\label{etoclocaltop}
+
+\textbf{New with 1.09 (2019/03/09)}.
+
+Within either the TOC style
+(\csb{etocsettocstyle}) or the local title styles (\csb{etocsetstyle}), the
+control sequence \csb{etoclocaltop} is made equivalent for the duration of
+\csb{localtableofcontents} to a numeric (self-delimiting) denotation of the
+current top level.
+
+Thus: it will in numeric contexts (|\ifnum|, |\ifcase|, ...) represent zero
+for a local TOC corresponding to chapter, or one if in a section, or two if in
+a subsection, etc..., assuming of course here that the default levels are
+obeyed (see \autoref{sec:tocdepth}).
+
+\begin{framed}
+ \csb{etoclocaltop} from inside the TOC heading (first argument of
+ \csb{etocsettocstyle}) has the correct value \emph{only under
+ \csb{etocchecksemptiness} regime}. Special circumstances correspond to
+ some special values:
+ \begin{description}[nolistsep]
+ \item[|-3|] (|-\thr@@|)\newline
+ signals that \etoc considers the local TOC to be
+ ``unknown''; this happens at the last local TOC, for the first \LaTeX\ run
+ after adding a new \localtoc to the document. In doubt, \etoc assumes the
+ TOC will prove non empty, hence it prints (independently of whether the
+ check for emptiness was activated or not) the heading as specified by
+ \csb{etocsettocstyle}. Thus, check if \csb{etoclocaltop} gives |-3| as a
+ a \meta{number} to detect that situation from within the first argument of
+ \csb{etocsettocstyle}, if desired.
+ \item[|-1000|](|-\@m|)\newline is in case of a \localtoc
+ being considered ``known'' (although it may still refer to the data in the
+ |.toc| file from the previous run) but without the check for emptiness
+ having been executed.
+ \item[|-10000|](|-\@M|)\newline is the value when accessed from the title
+ of a global TOCs.
+ \end{description}
+\end{framed}
+\begin{framed}
+ When executed from within a local table of contents \textbf{line styles}
+ (\csb{etocsetstyle}), \csb{etoclocaltop} always will hold the correct value,
+ whether or not the emptiness check was executed.
+
+ For a global table of contents however, it will always keep the value |-3|.
+\end{framed}
+
+Attention! \cs{etoclocaltop} is only to be queried; modifying it is strictly
+forbidden and falls under the most rigorous prosecution allowed by federal
+law.
+
+\section{Adding commands to the \texorpdfstring{\texttt{.toc}}{.toc} file}
+\label{sec:addingtotoc}
+
+We described above \csb{etocsettocdepth.toc} and \csb{etocdepthtag.toc} which
+both insert commands inside the |.toc| file. An even more general mechanism of
+adding ``action tags'' to the |.toc| file could be envisioned, but this would
+just be a wrapper for direct use of |\addtocontents{toc}{\something}|.
+
+One should be cautious when adding in this way
+things
+to the |.toc| file. For example, inserting
+\csa{addtocontents}|{toc}{\string\clearpage}|
+just
+before a \csa{part} to fix the problem when some part entry (in
+the table of contents) is isolated at the bottom of one page,
+will cause problems with multiple TOCs: this \csa{clearpage}
+will be executed by \etoc each time a \toc or \localtoc
+command is encountered! The more prudent thing is to do
+rather: {\csa{addtocontents}|{toc}{\string\myclearpage}|,}
+to have a |\let\myclearpage\relax| at the top level of the
+document and to use where needed something like:
+\begin{verbatim}
+\let\myclearpage\clearpage
+\tableofcontents
+\let\myclearpage\relax
+\end{verbatim}
+The |memoir| class has the command \csa{settocdepth} which
+writes a \csa{changetoc\-depth} command inside the |.toc| file.
+This will impact the typesetting by \etoc of \emph{all} tables
+of contents, with (possibly) unexpected results: imagine the
+document has \csa{settocdepth}|{chapter}| at some point to
+avoid having the sections from subsequent chapters be listed
+in the main table of contents. Then a local table of contents
+in one of these chapters will print a title but will be
+without any entry.
+
+As the |memoir| class by itself allows multiple\toc
+ these issues already arise there,
+ independently of \etoc, see page 170 of the |memoir|
+ manual.
+
+For this specific issue, the commands \csb{etocsettocdepth.toc},
+\csb{etocignoretoctocdepth} and \csb{etocobeytoctocdepth} are the way to go; or
+their variants \csb{etocdepthtag.toc} and \csb{etocsettagdepth}.
+
+As an aside, any |\setcounter{tocdepth}{n}| command added directly to the |.toc|
+file sees its effect (since release |1.07g|) canceled at the end of each table
+of contents, which automatically does a |\setcounter{tocdepth}{previous_value}|
+with the value active on entering the table of contents.
+
+\subsection{The hyperref option \emph{hidelinks}}\label{ssec:hidelinks}
+
+The colored links (and also the rectangle links) are a bit
+annoying when used in tables of contents, especially when
+the document uses \etoc and has plenty of them! One may wish
+for having colored links, \emph{except} for those within
+table of contents!
+Indeed, why would things in TOCs need to be either framed in
+rectangles or colored, when the user \emph{already expects
+ them to be links}?
+
+I use the following trick: either in the preamble using
+|\AtBeginDocument|, or right after |\begin{document}|, I
+ have the command
+ \centeredline{|\addtocontents{toc}{\protect\hypersetup{hidelinks}}|}
+
+ \begin{framed}
+ All TOCs typeset by \etoc have their contents done
+ within a group (as if enclosed in an environment). So
+ the command \csa{hypersetup}|{hidelinks}| will be
+ executed by \emph{each} TOC, but its effect will be
+ limited to that TOC.
+ \end{framed}
+
+ I found out experimentally that the option |hidelinks| could
+ indeed be set many times with |\hypersetup| (this is not the
+ case of all |hyperref| options).
+
+
+\clearpage
+\etocdepthtag.toc {examples}
+\part{Examples}\label{part:examples}
+
+\thispartstats %% (pas de sous-section)
+
+\etocstandardlines
+\etocsettocstyle {}{\medskip}
+\localtableofcontents
+
+We present some additional examples. To understand all code snippets in detail,
+one will possibly need to have first browsed through \autoref{part:linestyles}
+and \autoref{part:globalcmds}.
+
+\section{Testing the compatibility mode}
+
+As a further example we now print the local table of contents
+of \autoref{part:globalcmds}. First we will test the compatibility mode.\footnote{the
+present document uses the |scrartcl| class, and we check here that
+the \etoc compatibility mode does respect the customizing done via the
+class commands.} The original was invisibly defined with a label at the
+beginning of \autoref{part:globalcmds}.
+\begin{verbatim}
+\begingroup % to keep in particular toc=left with local effect
+\KOMAoptions{toc=left}
+\etocstandarddisplaystyle % necessary for the display to obey toc=left
+\etocstandardlines
+\tableofcontents \ref{toc:globalcmds}
+\endgroup
+\end{verbatim}
+\begingroup
+\KOMAoptions{toc=left}
+\etocstandarddisplaystyle
+\etocstandardlines
+\tableofcontents \ref{toc:globalcmds}
+\endgroup
+
+\section{Another compatibility mode}\label{sec:anothercompat}
+
+As explained in \autoref{subs:compat}, the commands
+\csa{etocstandardlines} and \csa{etocstandarddisplaystyle} tell \etoc to,
+essentially, act as an observer. The document class layout for the table of
+contents is then perfectly obeyed. There is no way to customize this standard
+layout (change fonts, margins, vertical spacings, etc...) from within the
+package. For this, use some package dedicated to this task; because \etoc either
+is (temporarily perhaps) in compatibility mode with no customization on its part
+possible, or the user has specified the layout in \csa{etocsetstyle} commands
+(and \csa{etocsettocstyle}) and is (supposedly...) in complete control.
+
+Well, there is actually an alternative. It is possible to use the
+\csa{etocsetstyle} commands to recreate an artificial compatibility mode, in
+order to achieve effects like the following, all things being otherwise equal to
+the document class defaults:
+\begin{enumerate}[noitemsep]
+\item get the |hyperref| link to encapsulate only the names, but not the numbers
+ of each entry of the table of contents,
+\item use the document class style for chapters and sections, but modify it only
+ for subsections,
+\item do either of the above only for some portions of the table of contents.
+\end{enumerate}
+
+Here is how to proceed.
+
+This has become easier since release |1.08k| as now \etoc preserves
+automatically in \csb{etocsavedsectiontocline}, \csb{etocsavedchaptertocline}
+etc... the meaning of the \LaTeX\ |\l@section|, |\l@chapter|, etc... macros as
+they were at the time the TOC is typeset.
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex}
+\makeatletter
+\newcommand{\MyStandardTOC}{%
+ \begingroup
+ % for the book or article classes:
+ %\etocsetstyle{part}{}{}
+ % {\etocsavedparttocline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}%
+ % for the scrbook or scrartcl classes:
+ \etocsetstyle{part}{}{}
+ {\etocsavedparttocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
+ % following is identical in book/article/scrbook/scrartcl classes:
+ \etocsetstyle{chapter}{}{} %%% only for book and scrbook
+ {\etocsavedchaptertocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
+ \etocsetstyle{section}{}{}
+ {\etocsavedsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
+ \etocsetstyle{subsection}{}{}
+ {\etocsavedsubsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
+ % etc... if further sectioning units are used
+ \etocstandarddisplaystyle % this is for the title, page-marks, etc...
+ \tableofcontents
+ \endgroup}
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+
+One can add to the above arbitrary text formatting commands, for example
+replace |\etocpage| by |\textcolor{blue}{\etocpage}|.
+
+If the document has only one table of contents then there is no need
+to put the commands inside a macro, or even inside a group.\footnote{and if
+moreover one just wants to keep the same layout as in the default, one may
+question why using \etoc... there is \emph{one} good reason: numbers and names
+are separately \texttt{hyperref} links, whereas normally there is only one link
+holding both the number and the name corresponding to one toc entry.} With these
+commands
+\etoc will construct a TOC completely identical to what would have been done by
+one of the document class: |article|, |book|, |scrartcl|, |scrbook|.\footnote{For the
+|memoir| class, one needed prior to \etoc |1.08k| a bit more: each of the command \csa{booknumberline},
+\csa{partnumberline} and \csa{chapternumberline} had to be saved. They can now
+be used directly in the line styles, because their meanings are not modified
+anymore by \etoc during its TOC typesetting.}
+The number and the name of each entry are each separately an |hyperref| link, as
+is always the case with \etoc, when not in compatibility mode. Replacing
+\csa{etocnumber} with \csa{etocthenumber} will give a TOC where the numbers are
+not links anymore, but the names still are. Or one may decide to use \csa{etocthename}
+and keep an hyperlinked number with
+\csa{etocnumber}.
+
+Here is a subtler example where one only marginally modifies the
+sections (adding color to the number and removing the |hyperref| link) and keeps
+the subsections as in the default, \emph{except} for those of one specific
+section, for which the layout is completely modified:
+\MyQuasiStandardTOC{\ref{toc:overview}}
+\bigskip
+This example only has sections and subsections, and the code used in \csa{MyStandardTOC} was:
+\begin{filecontentshere}{etocsnippet-\the\value{section}-B.tex}
+\etocsetstyle{section}{}
+ {\ifnum\etocthenumber=4
+ \etocsetstyle{subsection}
+ {\par\nopagebreak\begingroup
+ \leftskip1.5em \rightskip\@tocrmarg \parfillskip\@flushglue
+ \parindent 0pt \normalfont\normalsize\rmfamily\itshape
+ % \columnsep1em
+ % \begin{minipage}{\dimexpr\linewidth-\leftskip-\rightskip\relax}%
+ % \begin{multicols}{2}%
+ \etocskipfirstprefix}
+ {\allowbreak\,--\,}
+ {\etocname\ \textup{(\etocnumber)}}
+ {.\par\endgroup}%
+ % {.\par\end{multicols}\end{minipage}\par\endgroup}%
+ \else
+ \etocsetstyle{subsection}
+ {}{}
+ {\etocsavedsubsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}}
+ {}%
+ \fi}
+ {\etocsavedsectiontocline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}}
+ {}%
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-B.tex}
+Notice the page head-mark added by this standard TOC. Sections and subsections
+are printed exactly as in the default (except for the subsections of one
+specific user-chosen section and except for the color of the section numbers),
+with no need to specify explicitely any length, font or other formatting
+instructions. But we had to examine the |scrartcl| sources to determine what to
+use for \csa{leftskip} and \csa{rightskip} for our customized section
+entries.
+
+\section{Emulating the book class}\label{sec:thirdexample}
+
+As explained in \autoref{subs:compat}: without explicit use of an
+\csb{etocsetstyle} command the package will leave to the document class the
+hand regarding the ``toc line styles''. It is sometimes asked by users (for
+example those using \etoc for its \csb{localtableofcontents}) how to stay
+close to but not completely identical with the design implemented by the
+standard classes, such as |book|. I can recommend package |tocloft| for this,
+as it is compatible with \etoc (see \autoref{subs:tocloft}) and thus \etoc will
+obey the |tocloft| customizations (as long as no use has been made of
+\csa{etocsetstyle}). It is also possible to modify only the style for, say,
+sections and leave the parts, chapters, subsections as in the document class,
+via the technique from \autoref{sec:anothercompat}.
+
+But for complete control, here is a translation of the |book| class code into
+\etoc lingua. It is then easy to modify the relevant lengths or adjust the
+used fonts. I thank \textsc{Denis Bitouzé} for prompting me to include this in
+the \etoc manual, as it resulted from some conversation we had about this. The
+code is not 100\% faithful to the |book| class, and particularly its rendering
+of (multi-line) non-numbered units differs (... I think, as I copied pasted as
+is the code from where I had stored it and did not do much thinking about it
+again). Some proficiency in low-level \TeX\ and \LaTeX\ macros is needed to
+understand what the code says, but for modifying fonts or some lengths such
+in-depth understanding is not needed.
+
+With some extra code one can \emph{automatically adjust the widths} assigned
+to typesetting sectioning numbers in order to prevent overflows, even with for
+example \MakeUppercase{\romannumeral 38}; but this is a more advanced feature
+which I have moved to \autoref{sec:thirdexampleextra}.
+
+First we set up some lengths. I use macro registers, not real \LaTeX\ lengths.
+When using |em|'s however, this means that one must pay attention to when the
+actual dimension assignment is made, as this will then depend upon the current
+font settings. In the code below, at the location where the \csa{TOCnumwidthB}
+and \csa{TOCnumwidthC} will be used, the |1em| from their specification will
+be matched to the normal medium series font, not the bold font; this is
+deliberate so that one can compare more readily with the other dimensions;
+besides, with the \csa{TOCcomputenumwidths} from
+\autoref{sec:thirdexampleextra} these macros will actually hold a dimension
+using |pt| as dimensional unit.
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex}
+% it will be easy to globally shift the TOC horizontally if needed
+\def\TOCleftmargin {0pt}
+\def\TOCrightmargin {2.55em}% like LaTeX's \@tocrmarg
+
+% this is for dotted leaders
+\newbox\TOCleaderbox
+\def\TOCleaderboxwidth {0.7777em}% about like what standard classes do
+
+% vertical spacing
+\def\TOCverysmallvskip {0pt plus .2pt}
+\def\TOCmedvskip {1em plus 1pt}
+\def\TOCbigvskip {2.25em plus 1pt}
+
+% the ``numwidths'' for typesetting the numbering of division units.
+% I don't recall exactly how (and for which fonts) these figures were chosen.
+% They quickly prove too small if using Roman numerals (as do too the book
+% class defaults even though they are a bit larger).
+\def\TOCnumwidthB {1.5em} % chapter
+\def\TOCnumwidthC {2.278em}% section, I think default is 2.3em
+\def\TOCnumwidthD {3.056em}% analog in standard class is 3.2em
+\def\TOCnumwidthE {3.833em}% analog in standard class is 4.1em
+\def\TOCnumwidthF {4.611em}% analog in standard class is 5em
+\def\TOCnumwidthG {5.389em}% analog in standard class is 6em
+
+% The code for the ``global toc style''.
+
+\newcommand*\TOCglobalstyle {%
+\etocsettocstyle
+ {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
+ \parindent\z@ \leftskip\z@skip \rightskip \z@skip
+ \setbox\TOCleaderbox\hbox to \TOCleaderboxwidth{\hss.\hss}%
+ \chapter *{\noindent\kern\TOCleftmargin\relax % uses "pt"...
+ \contentsname
+ \@mkboth {\MakeUppercase \contentsname}{\MakeUppercase \contentsname}}%
+ \rightskip \TOCrightmargin\relax
+ \parfillskip -\rightskip % or a smaller value if desired
+ \leftskip \TOCleftmargin \relax }
+ {\if@restonecol \twocolumn \fi\cleardoublepage}%
+%
+\etocsetstyle{part}
+ {}
+ {\addpenalty {-\@highpenalty}%
+ \addvspace \TOCbigvskip
+ \leavevmode
+ {\large \bfseries % use a group to limit font change
+ \interlinepenalty\@M
+ \etocifnumbered{\etocnumber\hspace{1em}}{}%
+ \etocname
+ \nobreak\hfil\makebox[-\parfillskip][r]{\etocpage}}\par
+ \nobreak
+ }
+ {}
+ {}%
+%
+\etocsetstyle{chapter}
+ {\advance\leftskip\TOCnumwidthB\relax}
+ {\addpenalty {-\@highpenalty }%
+ \vskip \TOCmedvskip\relax
+ \leavevmode
+ {\interlinepenalty\@M
+ \etocifnumbered
+ {\llap{\makebox[\TOCnumwidthB][l]{\bfseries\etocnumber}}}
+ {\advance\leftskip-\TOCnumwidthB\relax}%
+ \bfseries\etocname
+ \nobreak\hfil\makebox[-\parfillskip][r]{\etocpage}\par }%
+ \penalty \@highpenalty
+ }
+ {}
+ {\advance\leftskip-\TOCnumwidthB\relax}%
+%
+ \TOCsetlinestyle {section} {\TOCnumwidthC}%
+ \TOCsetlinestyle {subsection} {\TOCnumwidthD}%
+ \TOCsetlinestyle {subsubsection}{\TOCnumwidthE}%
+ \TOCsetlinestyle {paragraph} {\TOCnumwidthF}%
+ \TOCsetlinestyle {subparagraph} {\TOCnumwidthG}%
+}% end of \TOCglobalstyle
+
+%The common code for line styles is abstracted into a macro:
+
+\newcommand\TOCsetlinestyle [2]{% #1= unit, #2= numwidth as macro
+\etocsetstyle{#1}
+ {\advance\leftskip#2\relax}
+ {\vskip \TOCverysmallvskip\relax
+ \leavevmode
+ {\interlinepenalty\@M
+ \etocifnumbered
+ {\llap{\makebox[#2][l]{\etocnumber}}}{\advance\leftskip-#2\relax}%
+ \etocname
+ \nobreak\leaders \copy\TOCleaderbox
+ \hfil\makebox[-\parfillskip][r]{\etocpage}%
+ \par }%
+ }
+ {}
+ {\advance\leftskip-#2\relax}%
+}
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+Nota Bene: the code deliberately handles the non-numbered sectioning units
+unlike the way of the standard document classes (particularly regarding the
+alignment of multi-line headings.)
+
+The whole thing was encapsulated in \csa{TOCglobalstyle}, because we also want
+a \csa{TOClocalstyle} for local tables of contents which typically will want
+to use |\section*| rather than |\chapter*| and not insert page marks in the
+headers. The \csa{TOClocalstyle} is to be issued once, after the main document
+TOC, or rather before using \csa{localtableofcontents}. If one wants a full
+TOC at end of document one will naturally have to issue again
+\csa{TOCglobalstyle} there.
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}-B.tex}
+\makeatletter
+\newcommand*\TOClocalstyle {%
+\etocsettocstyle
+ {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
+ \setbox\TOCleaderbox\hbox to \TOCleaderboxwidth{\hss.\hss}%
+ \parindent\z@
+ \dimen@ 2.25em % for left indenting
+ \section *{\kern\dimen@ % use of \dimen@ works here by sheer luck
+ \contentsname
+ % un-comment this if marks are wanted:
+ %\@mkboth {\MakeUppercase \contentsname}{\MakeUppercase \contentsname}%
+ }% end of \section
+ \parskip \z@skip
+ \vspace{-1.25\baselineskip}% somewhat ad hoc
+ \leftskip 2.25em
+ \rightskip 4.5em
+ \advance\rightskip-\TOCrightmargin\relax
+ \leavevmode\leaders\hrule\@height\p@\hfill\kern\z@\par
+ \rightskip 4.5em
+ \parfillskip -\TOCrightmargin\relax }
+ {\nobreak\vskip-.5\baselineskip
+ \leavevmode\leaders\hrule\@height\p@\hfill\kern\z@\par
+ \bigskip
+ \if@restonecol \twocolumn \fi }%
+%
+\etocsetstyle{section}
+ {\advance\leftskip\TOCnumwidthC\relax}
+ {\addpenalty \@secpenalty
+ \etociffirst{}{\addvspace{\TOCmedvskip}}%
+ \leavevmode
+ {\interlinepenalty\@M
+ \bfseries\etocifnumbered
+ {\llap{\makebox[\TOCnumwidthC][l]{\etocnumber}}}
+ {\advance\leftskip-\TOCnumwidthC}%
+ \etocname\nobreak\hfil\makebox[-\parfillskip][r]{\etocpage}\par }%
+ \penalty \@highpenalty }
+ {}
+ {\advance\leftskip-\TOCnumwidthC\relax}%
+% the rest is identical with code for global tocs:
+ \TOCsetlinestyle {subsection} {\TOCnumwidthD}%
+ \TOCsetlinestyle {subsubsection}{\TOCnumwidthE}%
+ \TOCsetlinestyle {paragraph} {\TOCnumwidthF}%
+ \TOCsetlinestyle {subparagraph} {\TOCnumwidthG}%
+}% end of \TOClocalstyle
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-B.tex}
+As mentioned previously, this handles non-numbered (multi-line) sectioning
+units somewhat differently from what happens in the standard document classes.
+
+For some reason this code has some hard-coded |2.25em| and |4.5em| which were
+not abstracted into macros or lengths. The code inserts horizontal rules above
+and below the TOC contents in a non-separable by pagebreak way.
+
+See \autoref{sec:thirdexampleextra} for more.
+
+\section{A framed display}
+
+We now opt for a ``framed'' style, using the package default
+line styles and some colors added (it has been put in a float which appears
+\vpageref{toc:b}).
+
+%
+% (13 octobre 2013)
+% \footnote{inside the |figure| environment and before the
+% framed toc, which uses |multicols|, we added \csa{normalcolor} as work-around
+% to an interaction bug (related to the \csa{color\{red\}} command we added to
+% the |.toc| file) between |multicols|, |color| and the |figure|
+% environment. This bug has nothing to do with \etoc.}
+% RETIRÉ le 28 avril 2015 pour 1.08f
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex}
+\etocdefaultlines
+\begingroup
+\renewcommand{\etoccolumnsep}{2em}
+\renewcommand{\etocinnerleftsep}{1.5em}
+\renewcommand{\etocinnerrightsep}{1.5em}
+% specify a background color for the toc contents
+\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}}
+% set up the top and bottom rules
+\renewcommand{\etoctoprule}{\hrule height 1pt}
+\renewcommand{\etoctoprulecolorcmd}{\color{red!25}}
+\renewcommand{\etocbottomrule}{\hrule height 1pt}
+\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}}
+% set up the left and right rules
+\renewcommand{\etocleftrule}{\vrule width 5pt}
+\renewcommand{\etocrightrule}{\vrule width 5pt}
+\renewcommand{\etocleftrulecolorcmd}{\color{red!25}}
+\renewcommand{\etocrightrulecolorcmd}{\color{red!25}}
+% use \fcolorbox to set up a colored frame for the title
+\fboxrule1pt
+\renewcommand{\etocbelowtocskip}{0pt\relax}
+\etocframedstyle {\normalsize\rmfamily\itshape
+ \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering
+ This is a table of contents \`a la \etoc, but just for
+ the sections and subsections in this part. As it is put
+ in a frame, it has to be small enough to fit on
+ one page. It has the label |toc:b|.}}}
+\begin{figure}[ht!]
+ \centering
+\tableofcontents \label{toc:b} \ref{toc:globalcmds}
+\end{figure}
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+
+\filecontentsexec\filecontentsheremacro
+
+%\begin{figure}[ht!]
+% \centering
+% plus nécessaire ?
+%\normalcolor % work-around to a bug involving color and multicols (and figure)
+% \tableofcontents \label{toc:b} \ref{toc:globalcmds}
+% \end{figure}
+% \endgroup
+
+% Il y a un color leak du framed mais uniquement lorsqu'il est mis dans le
+% float. 2013/10/13, qui révèle un bug (?? NON) du style framed je vais regarder
+% mais bon. Le leak apparaît avec ruled aussi, et même avec juste multicolstyle
+% MAIS PAS EN UNE SEULE COLONNE (même framed ou ruled). il semble qu'il y aie
+% donc un problème d'interaction avec multicol là. à voir. Pas le temps
+% maintenant.
+
+% 2013/10/14
+% il s'agit en fait d'un bug de color+multicols+figure qui n'a rien à voir avec
+% etoc:
+% http://tex.stackexchange.com/questions/138783/color-leak-from-multicols-within-a-figure
+% J'ai trouvé le work-around qui consiste simplement à ajouter un \normalcolor
+% _avant_ le multicols à l'intérieur de figure
+
+\section{Another TOC with a background color}\label{ssec:again}
+
+Let us now try out some more sophisticated line styles. The display will use
+the \csa{etocframedstyle} package command, which requires that the produced
+table of contents fits on a single page. We wrap it up in a
+\hyperref[toc:floating]{figure environment} showing up
+\vpageref{toc:floating}.
+
+This design uses the \etoc `framed' style with a background color. The frame
+borders have been set to have the same color as the one serving as background
+for the entire thing. It would be advantageous to use rather inside
+\csb{etocsettocstyle} commands from a package like |tcolorbox| as this allows
+sophisticated breakable boxes (with |TikZ/pgf| for decoration.)
+
+The details of the line styles used here are a bit involved, they were written
+by the author at some early stage of this documentation and have only been
+slightly revised to use more \LaTeX-commands and less \TeX-primitives. Similar
+code is used also for \hyperref[toc:clone]{this other toc}.
+
+% archivage de commentaires
+% v1.07l on the occasion of traduction into German documentation:
+ % APRIL 26, 2014 Improvement in the section style for better placement of
+ % page number when the section name is more than one line long. Use of
+ % \makebox rather than \hbox, to be more LaTeX like.
+% attention car \ref{toc:floating} fera référence au compteur de
+% toutes les toc, pas visibletoc.
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\begin{figure}[htbp!]\centering
+\colorlet{subsecnum}{black}
+\colorlet{secbackground}{green!30}
+\colorlet{tocbackground}{red!20!green!20}
+
+\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}}
+\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}}
+
+\renewcommand{\etocleftrule}{\vrule width 3cm}
+\renewcommand{\etocrightrule}{\vrule width 1cm}
+\renewcommand{\etocbottomrule}{\hrule height 12pt}
+\renewcommand{\etoctoprule}{\hrule height 12pt}
+
+\renewcommand{\etocinnertopsep}{0pt}
+\renewcommand{\etocinnerbottomsep}{0pt}
+\renewcommand{\etocinnerleftsep}{0pt}
+\renewcommand{\etocinnerrightsep}{0pt}
+
+\newcommand\shiftedwhiterule[2]{%
+ \hbox to \linewidth{\color{white}%
+ \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip
+ \vskip#2}
+
+\etocsetstyle{subsubsection}
+{\etocskipfirstprefix}
+{\shiftedwhiterule{\leftskip}{6pt}}
+{\sffamily\footnotesize
+ \leftskip2.3cm\hangindent1cm\rightskip.5cm\relax
+ \makebox[1cm][l]{\color{subsecnum}\etocnumber}%
+ \color{black}\etocname
+ \nobreak\leaders\hbox to.2cm{\hss.}\hfill
+ \rlap{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}\par
+ \nointerlineskip\vskip3pt}
+{}
+
+\etocsetstyle{subsection}
+{\etocskipfirstprefix}
+{\shiftedwhiterule{1.5cm}{6pt}}
+{\sffamily\small
+ \leftskip1.5cm\hangindent.8cm\rightskip.5cm\relax
+ \makebox[.75cm][l]{\color{subsecnum}\etocnumber}%
+ \color{black}\etocname
+ \nobreak\leaders\hbox to.2cm{\hss.}\hfill
+ \rlap{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}\par
+ \nointerlineskip\vskip3pt}
+{}
+
+\newcommand{\coloredstuff}[2]{%
+ \leftskip0pt\rightskip0pt\parskip0pt
+ \fboxsep0pt % \colorbox uses \fboxsep also when no frame!
+ \noindent\colorbox{secbackground}
+ {\parbox{\linewidth}{%
+ \vskip5pt
+ {\noindent\color{#1}#2\par}\nointerlineskip
+ \vskip3pt}}%
+ \par\nointerlineskip}
+
+\etocsetstyle{section}
+{\coloredstuff{blue}{\hfil \bfseries\large Contents of Part One\hfil}}
+{\vskip3pt\sffamily\small}
+{\coloredstuff{blue}
+ {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip
+ \makebox[0pt][r]{\makebox[.5cm][l]{\etocnumber}}%
+ \etocname\nobreak\hfill\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}%
+ \vskip6pt}
+{}
+
+\etocframedstyle[1]{}
+\tableofcontents \label{toc:floating} \ref{toc:overview}
+\vspace{-\baselineskip}
+\centeredline{|\tableofcontents \ref{toc:overview}|
+(\emph{cf.} \hyperref[toc:clone]{this other toc})}
+\end{figure}
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\filecontentsexec\filecontentsheremacro
+
+% , and the
+% reader is referred to its \hyperref[ssec:tocclone]{subsection} for the
+% coding used.
+
+\section{A (crazy) inline display}
+
+Let us finally make some crazy inline display of the table of
+contents of this entire document. We will typeset the subsections as
+footnotes... This kind of style is suitable for a hyperlinked
+document, probably not for print! (although I like it, but my personal tastes in
+many matters do not seem to be widely shared).
+
+%%%% Note: 27 april 2014
+
+%%%% except for a miraculous situation depending from the quantity of previous
+%%%% material this TOC will have links extending accross pagebreaks, which
+%%%% dvipdfmx does not know how to handle completely. Apart from that the output
+%%%% is ok, thus no need to try seriously to avoid them.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begingroup
+\newsavebox{\forsubsections}
+\etocsetstyle{part}{\upshape. \etocskipfirstprefix}
+ {. \upshape}
+ {\bfseries\etocname:~~}
+ {}
+\etocsetstyle{section}{\itshape\etocskipfirstprefix}
+ {, }
+ {\mdseries\etocname}
+ {}
+\etocsetstyle{subsection}
+ {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix}
+ {; }
+ {\etocname}
+ {\end{lrbox}\footnote{\unhbox\forsubsections.}}
+\etocsetstyle{subsubsection}
+ { (\itshape\etocskipfirstprefix}
+ {, }
+ {\etocname}
+ {\/\upshape)}
+\etocsettocstyle{Here is the inline table of contents. }{.\par}
+\tableofcontents \label{toc:crazyinline}
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+The code used:
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+
+\clearpage
+\etocdepthtag.toc {surprising}
+\part{Surprising uses of \etoc}
+\label{part:surprising}
+
+\thispartstats %% (pas de sous-section)
+
+\etocstandardlines
+\etocsettocstyle {}{}
+\localtableofcontents
+
+\section{The TOC of TOCs}
+
+\begingroup % \endgroup just after the \tableofcontents command
+\etocinline
+\etocsetlevel{part}{1}
+\etocsetlevel{visibletoc}{0}
+\etocsetstyle{visibletoc}
+ {\etocskipfirstprefix}
+ {, }
+ {{\color{niceone}\etocname}}
+ {}
+\etocsettocstyle{}{}
+\etocsetnexttocdepth{visibletoc}
+
+
+Here is the numbered and linked list of all tables of contents which are
+displayed within this document:\footnote{The TOCs put in
+ floats may change the order: the numbers are listed
+ in the order the TOCs are typeset in the document; but the numbering
+ itself is from the order of the TOCs in the \emph{source} of
+ this document... }
+\tableofcontents\endgroup. And to obtain
+it here we just wrote:\par\smallskip
+{\leftskip1cm\rightskip2cm
+ \ttfamily\small\baselineskip11pt \noindent Here is the
+ numbered and linked list of all tables of contents which are
+ displayed within this
+ document:~\string\tableofcontents.\par}
+
+ The preparatory work was the following. First, we defined a
+ counter |visibletoc| whose vocation is to get incremented at
+ each displayed toc. \etoc has its own private counter but it
+ counts all TOCs, even those not displayed because the |tocdepth|
+ value was |-2| or |-3|.
+
+ We could have added manually |\refstepcounter{visibletoc}|
+ and |\label| commands at all suitable locations in the
+ document source, and we would then have used here |\ref|
+ commands, but this imposes heavy manual editing of the source.
+
+ There is a much better way: there is a hook
+ \csb{etocaftertitlehook} and we told it to increment the
+ |visibletoc| counter and to write a line to the |.toc| file,
+ in a manner analogous to what sectioning commands such as
+ |chapter|, |section|, or |subsection| do. As \etoc
+ increments its own private counter even before typesetting
+ the title of a table of contents, this provides (most of the
+ time) a better link destination than any counter manipulated
+ from inside \csa{etocaftertitlehook} (for which the link
+ would target the area just after the title). So, rather than
+ including |\refstepcounter{visibletoc}| inside
+ \csa{etocaftertitlehook}, we just put there
+ |\stepcounter{visibletoc}| followed by the command
+ \csb{etoctoccontentsline}|{visibletoc}{\thevisibletoc}|. This \etoc
+ command \csb{etoctoccontentsline}\marg{level\_name}\marg{name} has the same
+ effect as:
+ \centeredline{| ||\addcontentsline{toc}|\marg{level\_name}\marg{name}}
+ but its usefulness is to circumvent\footnote{using \csa{addtocontents} rather
+ than \csa{addcontentsline}} the patching for automatic creation
+ of bookmarks done to \csa{addcontentsline} by the |hyperref| package,
+ as pdf bookmarks don't make
+ much sense here (and would elicit a complaint
+ of |hyperref| that the bookmark level is `unknown').\footnote{%
+ The package provides a starred variant
+ \staritb{etoctoccontentsline}, which does allow the creation
+ of bookmarks and has a third mandatory argument which is the
+ Level to be used by these bookmarks; depending on the context
+ the starred as well as the non-starred variants may be
+ profitably preceded by \csa{phantomsection}.}
+
+ Finally, the preamble of the document did
+ |\etocsetlevel{visibletoc}{6}|. The level |6| (or anything
+ with a higher number) is ignored, even if |tocdepth| has
+ value |10| for example; this is independently of whether \etoc
+ uses the document class default line styles or its own line
+ styles, or the ones defined by the user with the
+ \csa{etocsetstyle} command. So there is no need to worry that
+ something could go wrong.
+
+ Then, only here we have set |\etocsetlevel{visibletoc}{0}|. And to display
+ only this kind of entries we assign temporarily to |part| and |chapter| level
+ |1| (or anything higher than zero) and set |tocdepth| to the value |0|. We
+ also did \csa{etocsetstyle\{visibletoc\}\{\string\etocskipfirstprefix\}\{,
+ \}\{\string\etocname\}\{\}} which defines an inline display with the comma
+ as separator. Finally, as \etoc issues |\par| automatically by default just
+ before typesetting a table of contents, we used the command \csb{etocinline}
+ (also known as \cs{etocnopar}) which turns off this behavior.
+
+Here are the implementation details:
+
+\begingroup
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+ < in the preamble >
+\newcounter{visibletoc}
+\renewcommand{\etocaftertitlehook}
+ {\stepcounter{visibletoc}\etoctoccontentsline{visibletoc}{\thevisibletoc}}
+\etocsetlevel{visibletoc}{6}
+\begin{document}
+ < document body >
+\subsection{Surprising uses of etoc}
+\begingroup
+ \etocinline
+ \etocsetlevel{part}{1}
+ % \etocsetlevel{chapter}{1} % (no chapters in scrartcl class)
+ \etocsetlevel{visibletoc}{0}
+ \etocsetstyle{visibletoc}
+ {\etocskipfirstprefix}{, }{{\color{niceone}\etocname}}{}
+ \etocsettocstyle{}{} % don't set any title, rules or frame or multicol!
+ \etocsetnexttocdepth{visibletoc} % display only the `visibletoc' entries from .toc
+
+Here is the numbered and linked list of all tables of contents which are
+displayed within this document: \tableofcontents.
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+\endgroup
+
+After |\etocsetstyle{visibletoc}{..}{..}{..}{..}|, all future TOCs (not in
+compatibility mode) will use the
+defined style for level |0| (which is normally the level for
+chapters). To keep these changes strictly local the simplest
+manner is to put everything inside a group.
+
+The \autoref{subsec:interverting} gives another use of the
+shuffling of levels.
+
+
+\section{Arbitrary ``Lists Of...'', \csbhyp{etoctoccontentsline}}
+\label{etoctoccontentsline}
+
+This idea of interverting the levels is very powerful and allows
+to let \etoc display lists of arbitrary things contained in the
+document. All of that still
+using nothing else than the |.toc| file!
+Example: imagine a document with dozens of
+exercises, perhaps defined as |\newtheorem{exercise}{}[section]|. Let
+us explain how to instruct \etoc to display an hyperlinked list
+of all these exercises. For this we put in the preamble:
+\begin{verbatim}
+ \newtheorem{exerci}{}[section]
+ % the exercice number will be recoverable via \etocname: v--here--v
+ \newcommand*{\exercisetotoc}{\etoctoccontentsline{exercise}{\theexerci}}
+ \newenvironment{exercise}{\begin{exerci}\exercisetotoc}{\end{exerci}}
+ \etocsetlevel{exercise}{6}
+\end{verbatim}
+In this way, \csa{etocname} will give the exercise number (but \csa{etocnumber}
+will be empty). Had we used instead
+\begin{verbatim}
+ \newcommand*{\exercisetotoc}
+ {\etoctoccontentsline{exercise}{\protect\numberline{\theexerci}}}
+\end{verbatim}
+the exercise number would then have been available via \csa{etocnumber}, and
+\csa{etocname} would have been empty. It doesn't matter which one of the two
+methods is used. The \etoc command \csa{etoctoccontentsline}|{..}{..}| is
+provided as a substitute to \csa{addcon\-tentsline}|{toc}{..}{..}|: this is to
+avoid the patching which is done by |hyperref| to \csa{addcontentsline} in its
+process of creation of bookmarks. If one wants to authorize |hyperref| to create
+bookmarks at a specific level \meta{n}, one can use (here with \meta{n}$=$|2|)
+the starred variant \starit{etoctoccontentsline} which has an additional
+argument:
+\begin{verbatim}
+\newcommand{\exercisetotoc}{\etoctoccontentsline*{exercise}{\theexerci}{2}}
+\end{verbatim}
+
+The counter |exerci| is already
+incremented by the |exerci| theorem environment, and
+provides the correct destination for the link added by package
+|hyperref|. The command \csa{exercisetotoc} adds for each exercise a line
+to the |.toc| file, corresponding to a fictitious document
+unit with name `|exercise|'. A
+four-column list, including the sections, can then be
+typeset with the following code:
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+ \etocsetnexttocdepth{2} % sections are at level 1 and will show up
+\begingroup
+ \etocsetlevel{exercise}{2} % but:
+ \etocsetlevel{chapter}{3} % no chapters
+ \etocsetlevel{subsection}{3} % no subsections
+ \etocsetlevel{part}{3} % no parts
+ \etocsetstyle{exercise}{}{} % \etocname = exercise number
+ {\noindent\etocname\strut\leaders\etoctoclineleaders\hfill\etocpage\par}
+ {\pagebreak[2]\vskip\baselineskip}
+ \etocsetstyle{section}{}{}
+ {\noindent\strut{\bfseries\large\etocnumber\hskip.5em\etocname}\par
+ \nopagebreak[3]}{}
+ \etocruledstyle[4]{\Large\bfseries List of the exercises}
+ \setlength{\columnseprule}{.4pt}
+ \tableofcontents
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\section{The TOC as a tree}\label{tocastree}
+
+Using |tikz|\footnote{\url{http://ctan.org/pkg/pgf}} and the package
+|forest|\footnote{\url{http://ctan.org/pkg/forest}} we shall display the table
+of contents of this part as a tree. The technique is to
+use the \etoc modified command \csa{tableofcontents} not for typesetting, but to
+prepare a macro, or rather here a \emph{token list} variable, with all the
+instructions to be executed later. \textsc{Leslie Lamport}'s book has no mention
+whatsoever of token lists, and \LaTeX{} gives the impression to not really
+expect the general user to ever hear about them (or delimited macros); this
+whole section and the next are thus for
+advanced users.
+
+Putting the \csa{etocnumber} and \csa{etocname}
+commands in \csa{treetok} would be of no use: to which number or name would they
+then refer to, in a delayed execution?
+
+We need to store, not the macro names, but the macro contents. And also we wish
+to maintain the correct |hyperref| hyperlinks.\footnote{This manual up to the
+version of May 14, 2013 used package |tikz-qtree| but there were problems with
+hyperlinks. No such problem arises either when using |forest| or the native
+|tikz| syntax for trees (which will be illustrated in the next section).} The
+commands \csa{etocname}, etc\dots, are robust, it is easier to work with
+\csa{etocthelinkednumber}, \csa{etocthelinkedname}, and \csa{etocthelinkedpage}
+which contain the same information in an easier accessible form.
+
+For this |forest| tree we have designed very special \etoc styles for sections
+and subsections. They use a token list register called |\treetok| and a
+macro |\appendtotok| whose r\^ole is to append to a given token list variable
+the contents of a macro given as second argument. All this will happen in
+reaction to a |\tableofcontents| command, but \emph{nothing} has yet been
+printed in the process.\footnote{There is always a \csa{par}, which here is not
+a problem, but can be suppressed if need be via the command \csb{etocinline} or
+its synonym \csb{etocnopar}.} This is the later job of a |forest| environment
+which will be given the contents of |\treetok|.
+
+
+% anciens commentaires extraits du code avant incorporation à filecontentsdef
+
+% 7 mars: j'utilise \etocthelinkedname défini à partir de 1.07f
+% mais bien sûr je sais que ça ne marche pas (sauf dans l'arbre pour le lien de
+% la section du bas) dans un QTree. Mais ça marche parfaitement dans un arbre
+% TikZ natif.
+
+% 9 septembre 2013: je remplace QTree par Forest, et il n'y a pas de problème
+% avec les hyperliens, ça marche out of the box (une fois que j'ai appris un peu
+% de sa syntaxe et de celle de TikZ).
+
+% 7 mars: j'utilise maintenant \etocthelinkedname
+
+% 11 octobre
+% forest ne veut pas @\the\treetok avec un \treetok vide, donc
+% il faut lui donner une valeur par défaut.
+
+% 12 octobre
+% pour que varioref fonctionne bien, je dois mettre la \tableofcontents
+% au plus près de l'environnement forest
+
+\let\appendtotok\relax
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+% \newtoks\treetok % put this (uncommented) preferably in the preamble
+% \newtoks\tmptok % (idem)
+
+\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2
+ #1\expandafter\expandafter\expandafter
+ {\expandafter\the\expandafter #1#2}}
+
+\newcommand*\PrepareSectionNode{%
+ \tmptok {\centering\bfseries}%
+ \appendtotok\tmptok\etocthelinkedname
+ \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}%
+}
+
+\newcommand*{\PrepareSubsectionNode}{%
+ \tmptok {\raggedright}%
+ \appendtotok\tmptok\etocthelinkedname
+ \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}%
+}
+
+\etocsetstyle{section}
+ {\etocskipfirstprefix}
+ {\appendtotok\treetok{ ]}}
+ {\PrepareSectionNode \appendtotok\treetok\foresttreenode}
+ {\appendtotok\treetok{ ]}}
+
+\etocsetstyle{subsection}
+ {\etocskipfirstprefix}
+ {\appendtotok\treetok{ ]}}
+ {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode}
+ {\appendtotok\treetok{ ]}}
+
+\etocsettocstyle
+ {\treetok{[{\hyperref[part:overview]{Overview}}}}
+ {\global\appendtotok\treetok{ ]}}
+
+% forest does not like @\the\treetok if \treetok is empty. On first latex
+% run, this will be the case because the TOC style defined above will not
+% have been executed, as the label {toc:overview} does not refer to a valid
+% TOC yet. So we must give a safe default value to \treetok
+\treetok{[{run latex again}]}
+
+\begin{figure}[th!]\centering
+ \etocsetnexttocdepth{subsection}
+ \tableofcontents \label{toc:forest}\ref{toc:overview}
+ \hypersetup{hidelinks}%
+ \bracketset{action character=@}
+ \begin{forest}
+ for tree={anchor=center,child anchor=west,
+ grow'=east,draw,thick,
+ edge={draw,thick,dashed,color=teal}},
+ where={level()==1}{circle,thick,fill=blue!5,
+ before computing xy={l=3cm}}{},
+ where={level()==2}{fill=red!5,
+ before computing xy={l=6cm}}{},
+ rectangle, thick, fill=cyan!5, inner sep=6pt,
+ @\the\treetok
+ \end{forest}
+\end{figure}
+\end{filecontentsdef}
+\filecontentsexec\foo
+
+The resulting tree has been put in a \hyperref[toc:forest]{float}, which
+appears \vpageref[above]{toc:forest}. Here is the
+code used for its production:
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+Why |\hypersetup{hidelinks}|? as explained in
+\autoref{ssec:hidelinks}, I prefer the links in TOCs not to be
+colorized, nor framed, so this document inserts a command
+%\csa{hypersetup}\texttt{\{hidelinks\}} % ok pour hyphénation
+%\csa{hypersetup}|{hidelinks}| % pas ok
+|\hypersetup{hidelinks}| % ok maintenant 12 octobre 2013
+ in the |.toc| file. But at the time the
+|\treetok| contents are unpacked the |\hyperlink| commands
+originating in
+|\etocthelinkedname|, etc\dots{} will be executed in the normal
+environment for links (which, in this document, is to colorize
+them). Rather than having \etoc's code try to guess what the current ``style''
+for links is (a concept not really provided by |hyperref| it
+seems) and store it in |\etocthelinkedname|, etc\dots, I opted for
+the simpler solution to leave it up to the user to recreate
+whatever conditions are desired. So here it is necessary to re-issue
+|\hypersetup{hidelinks}| in the |figure| environment.
+
+There are some other examples in this documentation where
+|\tableofcontents| is used to prepare material for later
+typesetting:
+\begin{itemize}
+\item printing the statistics at the start of each Part (see
+ \autoref{ssec:statistics}) is done using save boxes (so the problem of the
+ appearance of the links does not arise then).
+\item the typesetting of the TOC as a table in the pre-|1.08| way (see
+ \autoref{ssec:tocastableold}); there we also have to issue
+ |\hypersetup{hidelinks}| after having collected the names, numbers and
+ page numbers in a token list register.
+\item and the two additional tree examples in the next section.
+\end{itemize}
+
+
+\section{The TOC as a molecule}\label{sec:molecule}
+
+It is also possible to construct a TOC tree obeying the TikZ
+syntax for trees: but this is a more complicated task for the
+\etoc line styles for reasons related to the way braces are
+handled by \TeX{} (they need, when filling up the token list to be
+always balanced at each step, else complicated tricks must be
+employed.)
+
+The simplest strategy is to allocate a token list (or use a macro) for each
+level used: we may need a \csa{parttok}, a \csa{chaptertok}, a
+\csa{sectiontok} and a \csa{subsectiontok}, to help in the task of filling
+up the total \csa{treetok}. As we are interested here in the table of
+contents of this (or another) document part, only a \csa{sectiontok} and a
+\csa{subsectiontok} will be needed.
+
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+% \newtoks\treetok % put this (uncommented) preferably in the preamble
+% \newtoks\sectiontok
+% \newtoks\subsectiontok
+\newcommand*{\treenode}{}
+
+\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2}
+ \edef\tmp{\the#1 child {\the#2}}%
+ #1\expandafter{\tmp}%
+}
+\newcommand*{\preparetreenode}{%
+ \tmptok\expandafter{\etocthelinkednumber}% expanded one time (mandatory)
+ \edef\treenode{node {\the\tmptok}}%
+}
+
+\etocsetstyle{section}
+ {\etocskipfirstprefix}
+ {\appendchildtree\treetok\sectiontok}
+ {\preparetreenode \sectiontok\expandafter{\treenode}}
+ {\appendchildtree\treetok\sectiontok}
+
+\etocsetstyle{subsection}
+ {\etocskipfirstprefix}
+ {\appendchildtree\sectiontok\subsectiontok}
+ {\preparetreenode \subsectiontok\expandafter{\treenode}}
+ {\appendchildtree\sectiontok\subsectiontok}
+
+\etocsettocstyle
+ {\treetok{\node {\hyperref[part:overview]{Overview}}}}
+ {\global\appendtotok\treetok{ ;}}
+
+\begin{figure}[thbp!]\centering
+ \etocsetnexttocdepth{subsection}
+ \tableofcontents \label{toc:molecule} \ref{toc:overview}
+ \hypersetup{hidelinks}%
+ \begin{tikzpicture}
+ [grow cyclic,
+ level 1/.style={level distance=4cm,sibling angle=72},
+ level 2/.style={level distance=2cm,sibling angle=60},
+ every node/.style={ball color=red,circle,text=SkyBlue},
+ edge from parent path={[dashed,very thick,color=cyan]
+ (\tikzparentnode) --(\tikzchildnode)}]
+ \the\treetok
+ \end{tikzpicture}
+\end{figure}
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\filecontentsexec\filecontentsheremacro
+
+% Pour que \pageref fonctionne correctement, je dois mettre
+% le \tableofcontents dans la figure.
+
+The |\tableofcontents| command appears just above the
+|tikzpicture| environment in a figure float (to make sure that the label of the
+table of contents
+refers to the same page as the one where the picture will actually be printed).
+We thus get the table of contents as a ``\hyperref[toc:molecule]{molecule}'',
+which
+appears \vpageref[above]{toc:molecule}.
+
+This \hyperref[toc:molecule]{TikZ TOC} is fully hyperlinked, like the
+previous
+\hyperref[toc:forest]{Forest TOC}.
+
+\etocsettocstyle
+ {\treetok{\node {\autoref{part:globalcmds}}}}
+ {\global\appendtotok\treetok{ ;}}
+
+\etocsetnexttocdepth {subsection}
+\tableofcontents \ref{toc:globalcmds}
+
+\noindent
+\parbox{4cm}{\hypersetup{hidelinks}%
+ \begin{tikzpicture}
+ [grow cyclic,
+ level 1/.style={level distance=2.5cm,sibling angle=60},
+ level 2/.style={level distance=1cm,sibling angle=45},
+ every node/.style={ball color=red!50,circle,text=black},
+ edge from parent path={[very thick,color=cyan]
+ (\tikzparentnode) --(\tikzchildnode)}]
+ \the\treetok
+ \end{tikzpicture}}%
+\begin{minipage}{\dimexpr\linewidth-4cm\relax}
+ On the side, the (fully hyperlinked) table of contents of
+ \autoref{part:globalcmds}.
+ \def\MacroFont{\ttfamily\small\hyphenchar\font-1 \baselineskip10pt\relax}%
+\begin{verbatim}
+\etocsettocstyle
+ {\treetok{\node {\autoref{part:globalcmds}}}}
+ {\global\appendtotok\treetok{ ;}}
+\etocsetnexttocdepth {subsection}
+\tableofcontents \ref{toc:globalcmds}
+\noindent
+\parbox{4cm}{\hypersetup{hidelinks}%
+ \begin{tikzpicture}
+ [grow cyclic,
+ level 1/.style={level distance=2.5cm,sibling angle=60},
+ level 2/.style={level distance=1cm,sibling angle=45},
+ every node/.style={ball color=red!50,circle,text=black},
+ edge from parent path={[very thick,color=cyan]
+ (\tikzparentnode) --(\tikzchildnode)}]
+ \the\treetok
+ \end{tikzpicture}}%
+...
+\end{verbatim}
+\end{minipage}
+
+\section{The TOC as a TikZ mind map}
+\label{sec:mindmap}
+
+This is in the same spirit as the ``molecule'' example. The use of the \eTeX{}
+primitive \csa{unexpanded} will simplify the code.\footnote{The ``molecule''
+example was added to this documentation on |2013/03/03|. The ``mindmap''
+example was motivated on |2015/03/11| by
+\url{http://tex.stackexchange.com/a/232584/4686}. Further help was then obtained via
+\url{http://tex.stackexchange.com/q/232816/4686} and this led to the
+\hyperref[toc:mindmaptitlepage]{title page} which is a further example.}
+
+% car dans le filecontentsdef je dois faire comme si pour verbatim
+% mais aussi l'exécuter, donc il me faut annuler définitions précédents pour
+% contourner messages d'erreurs de LaTeX.
+
+\let\appendchildtree\relax
+\let\childnode\relax
+\let\appendtotok\relax
+\expandafter\let\csname c@partco\endcsname\relax
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begingroup
+% \newtoks\treetok % done in preamble
+% \newtoks\parttok
+
+\newcommand*\partnode {} % just to check we don't overwrite something
+\newcommand*\childnode {}
+
+\newcommand*\tmprotate {} % just to check we don't overwrite something
+\newcommand*\tmpoption {} % just to check we don't overwrite something
+\newcommand*\tmpstuff {} % just to check we don't overwrite something
+
+\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2
+ #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}}
+
+\newcommand*{\appendchildtree}[3]{%
+% this is to construct "t1 child [#3]{t2}" from #1=t1 and #2=t2
+% t1 and t2 are two toks variable (not macros)
+% #3 = for example teal!60
+ \edef\tmpstuff {\the#1 child [#3]{\the#2}}%
+ #1\expandafter {\tmpstuff }%
+}
+
+\newcounter{partco}
+
+% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3
+\def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax}
+
+\etocsetstyle{part}
+ {\etocskipfirstprefix}
+% This updates the global tree with the data from the previous
+% part and all its children sections. Moved here because for some parts the
+% sections are not displayed due to depth tags.
+ {\ifnum\value{partco}=3
+ \appendchildtree\treetok\parttok {branch color= green!50,level distance=10cm}%
+ \else
+\ifcase\pseudomodthree{\value{partco}}%
+ \or \appendchildtree\treetok\parttok {branch color= teal!60}% first
+ \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+ \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
+ \fi\fi
+ }
+ {\stepcounter{partco}%
+% customize manually some TikZ set-up (should be done inside the TikZ thing I guess)
+ \def\tmpoption {}%
+ \def\tmprotate {}% first
+ %\ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
+ %\ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
+% define the part node
+ \edef\partnode{node \tmpoption
+ {\unexpanded\expandafter{\etocthelinkednumber}.
+ \unexpanded\expandafter{\etocthelinkedname}}\tmprotate }%
+% this is a starting point which will be filled it by the section children
+ \parttok\expandafter{\partnode}}
+ {\ifcase\pseudomodthree{\value{partco}}%
+ \or \appendchildtree\treetok\parttok {branch color= teal!60}% first
+ \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+ \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
+ \fi
+ }
+
+\etocsetstyle{section}
+ {}
+ {}
+ {% define the section node
+ \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber}
+ \unexpanded\expandafter{\etocthelinkedname}}}}%
+ % append it to the current \parttok
+ \appendtotok\parttok\childnode
+ }
+ {}
+
+\etocsettocstyle
+ {\setcounter{partco}{0}%
+ \treetok{\node [root concept]{\textbf{The \etoc documentation}}}}
+ {\global\appendtotok\treetok{ ;}}
+% The \global above is mandatory because etoc always typesets TOC inside a group
+
+\etocsetnexttocdepth{section}
+% use of depth tags to cut out some sections.
+\etocsettagdepth {preamble} {none}
+\etocsettagdepth {overview} {part}
+\etocsettagdepth {arbitrarily}{part}
+\etocsettagdepth {examples} {section}
+\etocsettagdepth {surprising} {part}
+\etocsettagdepth {linestyles} {part}
+\etocsettagdepth {globalcmds} {part}
+\etocsettagdepth {custom} {section}
+\etocsettagdepth {tips} {part}
+\etocsettagdepth {etocandworld}{part}
+\etocsettagdepth {code} {section}
+
+\tikzset{
+ branch color/.style={
+ concept color=#1!white,
+ every child/.append style={concept color=#1!white!30!white, font=\normalsize},
+ }
+}%
+
+\begin{figure}[thp!]
+\tableofcontents\label{toc:mindmap}%
+\centeredline{\resizebox{.85\paperwidth}{!}%
+{\begin{tikzpicture}[mindmap,
+ grow cyclic,
+ text width=2cm,
+ align=flush center,
+ nodes={concept},
+ concept color=orange!60,
+ root concept/.append style={text width=4cm, font=\Large},
+ level 1/.append style={level distance=5cm,sibling angle=40, text width=3cm},
+ level 2/.append style={level distance=7cm,sibling angle=30, text width=3cm},
+ level 1 concept/.append style={font=\normalsize},
+ ]
+\the\treetok
+\end{tikzpicture}}}
+\end{figure}
+\endgroup
+\end{filecontentsdef}
+\filecontentsexec\foo
+
+It is difficult to get everything to fit on one page. However \csa{resizebox}
+comes to the rescue. And it preserves hyperlinks. Nevertheless for this
+example I excluded some sections from the display, using the technique of the
+\etoc \hyperref[etocdepthtag.toc]{depth tags}. The fully hyperlinked TOC
+appears \vpageref{toc:mindmap}.
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+An interesting alternative is to use \etoc rather to convert the entire TOC
+into a TikZ tree (perhaps excluding some parts) and print it out to a file
+from which it can be recovered and manipulated directly by the author of the
+document. Things written to the |.log| file get broken into lines. Here is a
+technique to get non-broken output. Once the \csa{treetok} has been computed
+by \etoc (as in the \hyperref[toc:molecule]{molecule} example, or the current
+example), this code snippet will write it out to file with extension
+|.toctree|:
+\begin{verbatim}
+ \newwrite\TOCasTree
+ \immediate\openout\TOCasTree=\jobname.toctree
+ \immediate\write\TOCasTree{\the\treetok}%
+\end{verbatim}
+The author can then copy it from there and customize it manually to get a
+suitable tikz picture. See also
+\centeredline{\url{http://tex.stackexchange.com/a/232792}}
+for an elaboration of this.
+
+
+\section{The TOC as a table}
+\label{sec:tocastable}
+
+With release |1.08| it is easier to typeset a TOC as a table. It is
+possible to open a tabular in the title part of the TOC (first argument
+to \csb{etocsettocstyle}) and then close it after the contents (second
+argument to \csb{etocsettocstyle}), and specify in the line styles how
+to use the tabulation |&| and tabular end of row |\\|. There are some
+conditions and a few caveats:
+
+\begin{enumerate}
+\item it is mandatory to issue \csb{etocglobaldefs} for \etoc's
+ definitions to have global scope,
+\item it is impossible to start one of the \meta{start}, \meta{prefix},
+ \meta{contents} or \meta{finish} specification with a sole |\hline|,
+ \emph{i.e.} one not preceded by a |\\| (it is however possible to put
+ |\\| at the end of \meta{prefix} and the |\hline| at the start of
+ \meta{contents}).
+\item as is explained next, it is recommended to put the
+ |\\| at the start of the \meta{prefix} or \meta{contents}
+ specifications in order to close the \emph{previous} row, rather
+ that at the end with the idea to close the \emph{current} row;
+ and when the TOC is a partial one (a \csa{localtableofcontents}) this
+ is (in almost all situations) mandatory.
+\end{enumerate}
+
+Here is an example of a TOC as a |longtable|, as is possible relatively
+simply now with |1.08|. The code follows.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}-A.tex}{\foo}
+\begingroup
+\etocglobaldefs % necessary for \etocname etc... to survive &
+
+% observe the locations of the \\
+\etocsetstyle{part}
+ {}
+ {\\\hline}
+ {\strut\etocnumber &\bfseries\etocname&\etocpage }
+ {}
+
+\etocsetstyle{section}
+ {}
+ {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}}
+ {\etocnumber&\etocname &\etocpage }
+ {}
+
+\etocsetstyle{subsection}
+ {}
+ {\\}
+ {&\makebox[1cm][c]{\etocnumber}%
+ \parbox[t]{\dimexpr6cm-\tabcolsep\relax}{\sloppy\itshape\etocname\strut}%
+ &\itshape\etocpage }
+ {}
+
+\etocsettocstyle
+ {\hypersetup{hidelinks}%
+ \begin{longtable}{|>{\bfseries}c|p{7cm}|r|}
+ \hline
+ \multicolumn{3}{|c|}{\Large\bfseries\strut\strut TABLE OF CONTENTS}%
+ }
+ {\\\hline\end{longtable}}
+
+\etocsetnexttocdepth {subsection}
+
+\tableofcontents
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+Examining the code above the reader will wonder why the |\\| are
+always given first in \meta{prefix+contents} and not, as is more
+intuitive, rather last. In some favorable cases (but almost never
+for local tables of contents) one may indeed construct
+TOC-as-tables with the |\\| located at the end of the style
+specifications. The problem in the previous example was with the
+positioning of the |\hline|'s.
+
+Due to technical aspects of how \TeX{} constructs alignments any
+definition or assignment done after an |\\| starts a new row, and
+thus makes |\hline| an illegal token (this shows as a |misplaced
+\noalign| error.) Not only does \etoc have to do such definitions
+to construct \csb{etocname} etc..., it is furthermore the case that
+some packages put things in the |.toc| file and as a result there
+is never any guarantee that between two \csa{contentsline} there
+will not be such a token like |\relax| which in the contexts of
+alignments forces \TeX{} to start a cell and thus makes it
+impossible then to insert an |\hline|.
+
+The safest way is thus to start with an |\\| each line style
+specification in order to close the \emph{previous} table row. We
+had a little problem with the fact that we wanted parts not only
+to have a rule above them (easy, they do |\\\hline|) but also
+below them: after each part there is a section, and it is these
+sections which are used to insert the missing |\hline|
+(this is done with the help of the \csb{etociffirst}
+conditional).
+
+The attentive reader will notice one last subtlety: the title was
+supposed to be followed not by one, but by two |\hline|'s. To
+solve this we could have used a one-time macro redefining itself,
+but we noticed that the title was followed by the unnumbered
+Abstract, thus the \csb{etocifnumbered} switch came to the rescue.
+
+Last technical note: because we put the |\\| inside the branches, there
+was no need to employ the expandable variants \csb{etocxiffirst} and
+\csb{etocxifnumbered}.
+
+For the hardliner's old way of obtaining the exact same result, see
+\autoref{ssec:tocastableold}.
+
+Here is also a much simpler example. It is a local table of
+contents.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}-B.tex}{\foo}
+\begin{center}
+\etocsetstyle{section}
+ {}
+ {\etociffirst{\\\hline\hline}{\\\hline}}
+ {\etocname & \etocnumber & \etocpage }
+ {}
+
+\etocsettocstyle
+ {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline
+ \multicolumn{1}{|c|}{\bfseries Section}&
+ \bfseries number&
+ \bfseries page}
+ {\\\hline\end{tabular}}
+
+\etocglobaldefs % MANDATORY !!
+\etocsetnexttocdepth{1}
+
+\tableofcontents\ref{toc:overview}
+\end{center}
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}-B.tex}
+
+\section{A TOC self-adjusting widths for its typesetting}
+\label{sec:thirdexampleextra}
+
+This is a continuation of \autoref{sec:thirdexample}. The goal is to adjust
+automatically the ``numwidths'' used for typesetting the unit numbers in the
+(local) tables of contents.
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\makeatletter
+\newcommand*\TOCcompute@numwidths [2]{% #1=empty/"local", #2=minimal indent
+ \begingroup
+ \def\TOCnumwidthB {0pt}%
+ \def\TOCnumwidthC {0pt}%
+ \def\TOCnumwidthD {0pt}%
+ \def\TOCnumwidthE {0pt}%
+ \def\TOCnumwidthF {0pt}%
+ \def\TOCnumwidthG {0pt}%
+ \etocsetstyle{part}{}{}{}{}%
+ \etocsetstyle{chapter}{}
+ {\setbox0\hbox{\bfseries\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthB\edef\TOCnumwidthB{\the\wd0}\fi}{}%
+ \etocsetstyle{section}{}
+ {\setbox0\hbox{\bfseries\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthC\edef\TOCnumwidthC{\the\wd0}\fi}{}%
+ \etocsetstyle{subsection}{}
+ {\setbox0\hbox{\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthD\edef\TOCnumwidthD{\the\wd0}\fi}{}%
+ \etocsetstyle{subsubsection}{}
+ {\setbox0\hbox{\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthE\edef\TOCnumwidthE{\the\wd0}\fi}{}%
+ \etocsetstyle{paragraph}{}
+ {\setbox0\hbox{\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthF\edef\TOCnumwidthF{\the\wd0}\fi}{}%
+ \etocsetstyle{subparagraph}{}
+ {\setbox0\hbox{\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthG\edef\TOCnumwidthG{\the\wd0}\fi}{}%
+ %
+ \etocsettocstyle{}
+ {\global\let\TOCnumwidthB\TOCnumwidthB
+ \global\let\TOCnumwidthC\TOCnumwidthC
+ \global\let\TOCnumwidthD\TOCnumwidthD
+ \global\let\TOCnumwidthE\TOCnumwidthE
+ \global\let\TOCnumwidthF\TOCnumwidthF
+ \global\let\TOCnumwidthG\TOCnumwidthG}%
+ \etocnopar
+ \csname #1tableofcontents\endcsname
+\typeout{Next TOCs will use \TOCnumwidthB\space for chapter number width}%
+\typeout{Next TOCs will use \TOCnumwidthC\space for section number width}%
+\typeout{Next TOCs will use \TOCnumwidthD\space for subsection number width}%
+\typeout{Next TOCs will use \TOCnumwidthE\space for subsubsection number width}%
+\typeout{Next TOCs will use \TOCnumwidthF\space for paragraph number width}%
+\typeout{Next TOCs will use \TOCnumwidthG\space for subparagraph number width}%
+ \endgroup
+}%
+\newcommand*\TOCcomputenumwidths [1][0.5em]{%
+ \TOCcompute@numwidths {}{#1}%
+}%
+\newcommand*\TOCcomputelocalnumwidths [1][0.5em]{%
+ \TOCcompute@numwidths {local}{#1}%
+}%
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+The optional parameter to \csa{TOCcomputenumwidths} specifies the minimal
+indent. In case nothing is numbered you may wish a higher value than |0.5em|.
+For each local table of contents to have its own width computations, the macro
+\csa{TOCcomputelocalnumwidths} is provided. As the code makes global
+assignments, either use (once) \csa{TOCcomputenumwidths} or do
+\csa{TOCcomputelocalnumwidths} for each local table of contents.
+\begin{verbatim}
+ \TOCcomputelocalnumwidths % may use optional argument to replace 0.5em
+ \localtableofcontents
+\end{verbatim}
+Notes:
+\begin{enumerate}[nosep]
+\item naturally these are only suggestions. For example one could put
+ everything in single macros \csa{TOCtoc} and \csa{TOClocaltoc} to
+ simultaneously compute the numwidths and then typeset the (local) table of
+ contents.
+\item if you want to adjust the |tocdepth| recall from
+ \autoref{ssec:bookmarksdepth} that it influences |hyperref| hence you may
+ need to use a group |\begingroup...\endgroup|. Or, one can use
+ \csb{etocsetnexttocdepth}\marg{level} but (with the code as here) this must
+ then be issued twice, once for \csa{TOCcomputelocalnumwidths}, once for
+ \csa{localtableofcontents}.
+\item the bold font serves above for both chapter and section numwidth
+ computations, but the code from \autoref{sec:thirdexample} uses |\bfseries|
+ only in local TOCs. Thus the \csa{TOCcomputenumwidth} will set the parameter
+ \csa{TOCnumwidthC} to a value slightly larger than needed in the main TOC.
+ Hence the section style in \csa{TOCcompute@numwidths} should possibly insert
+ the |\bfseries| in the box only after testing for the optional parameter
+ |local|.
+\end{enumerate}
+
+\clearpage
+\etocdepthtag.toc {linestyles}
+
+\part{Commands for the toc line styles}
+\label{part:linestyles}
+
+\thispartstats
+
+\etocsetstyle{section}
+{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered
+ {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]}
+% Dec 7, 2012. I hit upon a problem whose origin I found was
+% with xcolor, as xcolor modifies \fbox
+% (try \section{\fbox{A}} with and without xcolor). The fix
+% was to \protect the \fbox used in the |enumitem| label.
+% Strangely enough, with |hyperref| active, the problem did
+% not show up. Anyhow I now use \fcolorbox rather than \fbox
+% and there is no problem anymore. Also I don't have now to
+% use \normalcolor which already needed protection.
+{\normalsize\bfseries\rmfamily\item}
+{\etocname{} (page \etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsection}
+{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]}
+{\normalfont \item}
+{\etocname{} (p.~\etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsubsection}
+{\par\nobreak\begingroup\normalfont\footnotesize\itshape\etocskipfirstprefix}
+{\allowbreak\,--\,}
+{\etocname}
+{.\hfil\par\endgroup\pagebreak[3]}
+
+% 27 janvier 2013 22:30
+% je définis les macros (non protégées)
+% \etocthename, \etocthenumber, \etocthepage
+
+\etocruledstyle[1]{\etocfontminusone\color{green}%
+ \fboxrule1pt\fboxsep1ex
+ \framebox[\linewidth]
+ {\normalcolor\hss Contents of \autoref{part:linestyles}\hss}}
+
+\localtableofcontents \label{toc:a}
+
+\section{The \csbhyp{etocsetstyle}, \csbhyp{etocname} and \csbhyp{etocpage} commands}\label{sec:etocsetstyle}
+\label{etocsetstyle}
+\label{etocname}
+\label{etocpage}
+
+Let us explain how \etoc was used to produce the table of
+contents displayed at the beginning of this \autoref{part:linestyles}.
+This
+is a local table of contents, and we used the command \localtoc.
+
+
+We shall distinguish between the \emph{line styles} and the
+\emph{toc display style}. The line styles were (essentially)
+obtained in the following manner:%
+\footnote{the present document has
+ {\ttfamily\string\renewcommand\string{%
+ \string\familydefault\string}\string{\string\sfdefault\string}}
+ in its preamble, hence \csa{normalfont} switches to the
+ |sans| typeface; so in the section line-style, I wrote
+ \csa{rmfamily} instead.}
+
+\begingroup\small
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\etocsetstyle{section}
+{\begin{enumerate}}
+{\normalsize\bfseries\rmfamily\item}
+{\etocname{} (page \etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsection}
+{\begin{enumerate}}
+{\normalfont\item}
+{\etocname{} (p.~\etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsubsection}
+{\par\nobreak\begingroup\normalfont
+ \footnotesize\itshape\etocskipfirstprefix}
+{\allowbreak\,--\,}
+{\etocname}
+{.\hfil\par\endgroup\pagebreak[3]}
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+\endgroup
+
+These provisory style definitions rely on the automatic
+numbering generated by the |enumerate| environments but it is
+much better to use the further command \csb{etocnumber} inside
+the item label, which gives the real thing. The improved
+definitions will thus be explained later.
+
+With this style, one would have
+to be imaginative to design something then for paragraph and
+subparagraph entries! perhaps as superscripts? Well, usually
+one does not need paragraphs and subparagraphs numbered and
+listed in the TOC, so our putative user here chose a design
+where no provision is made for them and added the definitive:
+\begin{verbatim}
+\etocsetstyle{paragraph}{}{}{}{}
+\etocsetstyle{subparagraph}{}{}{}{}
+\end{verbatim}
+This is also the situation with the default package line styles!
+
+Each \csb{etocsetstyle} command has five mandatory arguments:\\
+\hbox to \linewidth
+{\hfil\csb{etocsetstyle}\color{blue}\marg{levelname}%
+ \marg{start}\marg{prefix}\marg{contents}\marg{finish}\hfil}
+The initially recognized \meta{levelname}'s are the sectioning
+levels of the standard document classes: from \emph{part} (or
+\emph{book} which is used by the |memoir| class) down to
+\emph{subparagraph}.
+
+The \meta{start} code is executed when a toc entry of that level is
+encountered and the previous one was at a higher level. The
+\meta{finish} code is executed when one again encounters a higher
+level toc entry. In the mean-time all entries for that level are
+typeset by executing first the \meta{prefix} code and then the
+\meta{contents} code.
+
+The (robust) commands \csb{etocname}, \csb{etocnumber} and \csb{etocpage} are
+provided for use inside the \meta{prefix} and \meta{contents} parts of the
+\csa{etocsetstyle} specification. They represent of course, the name, number,
+and page number of the corresponding toc entry. If package |hyperref| is
+active in the document and has added hyperlinks to the TOC data, then these
+links are kept in the commands \csa{etocname}, \csa{etocnumber} and
+\csa{etocpage} (this last one will have a link only if |hyperref| was passed
+option \emph{linktoc=all}.)
+
+\section{The \csbhyp{etocskipfirstprefix} and \csbhyp{etociffirst} commands}
+\label{etocskipfirstprefix}
+\label{etociffirst}
+\label{etocxiffirst}
+
+The chosen |subsubsection| style made use of the command
+\csb{etocskipfirstprefix}, which instructs \etoc to \emph{not} use
+for the first item the specified \meta{prefix} code.\footnote{With
+versions earlier than |1.08| it had to be the very last token in
+the \meta{start} code. It may now appear anywhere therein.}
+
+The command \csb{etociffirst}\marg{YES CODE}\marg{NO CODE} (new
+with |1.08|) is a more flexible way to customize the \meta{prefix}
+(and \meta{contents}) specifications. It executes the \meta{YES
+CODE} branch if this is the first unit at that level (inside a
+lower level) and the \meta{NO CODE} if not. This is a robust
+command which survives to expansion (for example in an |enumitem| label).
+
+The variant \csb{etocxiffirst} does the same, but is expandable.
+
+
+\section{The \csbhyp{etocnumber} command}
+\label{etocnumber}
+
+So far, our specifications would use the numbering generated
+by the |enumerate| environments, but of course we generally want
+the actual numbers as found in the |.toc| file. This is
+available via the \csb{etocnumber} command. To get the labels
+in the |enumerate| list to use it we can proceed with the
+syntax {\ttfamily label=\char32} from the package |enumitem|:
+\begin{verbatim}
+\etocsetstyle{section}
+{\begin{enumerate}[label=\etocnumber]}
+{\normalsize\bfseries\rmfamily\item}
+{\etocname{} (page \etocpage)}
+{\end{enumerate}}
+\end{verbatim}
+Rather than just \csa{etocnumber} we then used something like
+|\fbox{\etocnumber}|. Note that \csa{etocnumber} is a robust
+command which explains why it can be used inside the label specification
+without needing an added |\protect|.
+
+
+\section{The \csbhyp{etocifnumbered} switch}
+\label{etocifnumbered}
+\label{etocxifnumbered}
+
+The \csa{fbox} would give an unaesthetic result in the case of
+an unnumbered section (which ended up in the table of
+contents via an \csa{addcontentsline} command).\footnote{as
+ seen we use \csa{fcolorbox} rather than \csa{fbox}. Due
+ to some redefinition made by package |xcolor|, had we used
+ \csa{fbox} (and not used |hyperref|) we would have needed
+ \csa{protect}\csa{fbox}.}
+
+The \csb{etocifnumbered}\marg{A}\marg{B} command executes
+\meta{A} if the number exists, and \meta{B} if not. So we use
+it in the code which was finally chosen for the |section| level:
+\begin{verbatim}
+\etocsetstyle{section}
+{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered
+ {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]}
+{\normalsize\bfseries\rmfamily\item}
+{\etocname{} (page \etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsection}
+{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]}
+{\normalfont \item}
+{\etocname{} (p.~\etocpage)}
+{\end{enumerate}}
+\end{verbatim}
+
+If we had changed only the |section| level, and not the
+|subsection| level, an error on compilation would have occurred
+because the package style for subsections expects to start `in
+vertical mode'. An additional \csa{par} token in the
+\meta{contents} part of the |section| level would have fixed
+this: |{...(page \etocpage)\par}|.
+
+The command \csb{etocifnumbered} is robust; \csb{etocxifnumbered}
+(new with |1.08|) has the same effect but is expandable.
+
+
+\section{The \csbhyp{etocthename}, \csbhyp{etocthenumber}, and
+\csbhyp{etocthepage} commands}
+\label{etocthename}
+\label{etocthenumber}
+\label{etocthepage}
+
+It is sometimes desirable to have access to the name, number and page
+number without the hyperref link data: something similar to the starred
+variant of the \csa{ref} command, when package |hyperref| is used. For
+example one may wish to use the unit or page number in some kind of
+numeric context, or change its formatting. This is provided by
+\csb{etocthename}, \csb{etocthenumber}, and \csb{etocthepage}.
+
+These commands are not protected, so in moving argument
+contexts (for example in a label specification) they should be
+preceded by |\protect|.
+
+\section{The \csbhyp{etoclink} command}
+\label{etoclink}
+
+The command \csb{etoclink}\marg{linkname} can be used in the line style
+specifications in a manner analogous to the argument-less
+commands \csa{etocname}, \csa{etocnumber} and \csa{etocpage}. It
+creates a link (if such a link was added by |hyperref| to the
+|.toc| file entry) whose destination is the corresponding document
+unit and whose name is the given argument.
+Hence |\etoclink{\etocthename}| is like the original
+|\etocname|.
+Notice that if |hyperref| was not instructed to put a link in the page number
+(via
+its option \emph{linktoc=all}) then \etoc's \csa{etocpage} contains no link
+either, but |\etoclink{\etocthepage}| does.
+
+
+The command \csa{etoclink} is robust. Since |etoc 1.08j| it contains the link
+destination in an already expanded form, so for example can be used even after
+a |&| in a tabular construction, if \csb{etocglobaldefs} was issued.
+
+\section{The \csbhyp{etocthelinkedname}, \csbhyp{etocthelinkednumber},
+\csbhyp{etocthelinkedpage} and \csbhyp{etocthelink} commands}
+\label{etocthelinkedname}
+\label{etocthelinkednumber}
+\label{etocthelinkedpage}
+\label{etocthelink}
+
+
+These macros are fragile and contain the link destination in already expanded
+form. So their meaning can be stored for delayed usage. For example this is
+done here when doing the \hyperref[tocastree]{examples with trees}.
+
+Notice though that for example \csa{etocthelinkednumber} is really a link only
+if |hyperref| was configured to let the numbered heading be linked (which is
+the default). Similarly for the others.
+
+\csa{etocthelink} will fetch the link destination if available from name or
+page number and allows via |\etocthelink{foo}| to link an arbitrary text to
+the same destination inside the produced PDF.
+
+All these commands are fragile. The \csb{etocname}, \csb{etocnumber},
+\csb{etocpage} and \csb{etoclink} are simply their robust variants. They too
+contain the hyperlink destination in already expanded form since |1.08a| for
+the first three, since |1.08j| for \csb{etoclink}.
+
+Obsolete example of \begingroup
+ \etocsetstyle {section}
+ {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, and }}]}
+ {\global\let\TmpEtocNumber\etocthelinkednumber
+ \global\let\TmpEtocName\etocthelinkedname
+ \global\let\TmpEtocPage\etocthelinkedpage }
+ {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\
+ (\emph{p. \TmpEtocPage})}
+ {\end{itemize*}.}%
+ \etocsetnexttocdepth {section}%
+ \etocsettocstyle {a table of contents done as an inline
+ \texttt{enumitem} environment: }{}%
+ \etocinline\tableofcontents \ref{toc:globalcmds}
+\endgroup
+
+\begin{verbatim}
+Obsolete example of \begingroup
+ \etocsetstyle {section}
+ {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, and }}]}
+ {\global\let\TmpEtocNumber\etocthelinkednumber
+ \global\let\TmpEtocName\etocthelinkedname
+ \global\let\TmpEtocPage\etocthelinkedpage }
+% (the above needed as \item closes a group in enumitem inline environments)
+ {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\
+ (\emph{p. \TmpEtocPage})}
+ {\end{itemize*}.}%
+ \etocsetnexttocdepth {section}%
+ \etocsettocstyle {a table of contents done as an inline
+ \texttt{enumitem} environment: }{}%
+ \etocinline\tableofcontents \ref{toc:globalcmds}
+\endgroup
+\end{verbatim}
+
+\etoc |1.08a| offers a simpler way to the same result: thanks to
+\csb{etocglobaldefs} there is no need
+anymore here for \csa{etocthelinkedname}, as \csa{etocname} works.
+\begin{verbatim}
+Example of
+\begingroup\etocglobaldefs % <-- NEW mit etoc 1.08.
+ \etocsetstyle {section}
+ {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]}
+ {}
+ {\item [{\bfseries\etocnumber.}] \etocname\ (\emph{p. \etocpage })}
+ {\end{itemize*}.}%
+ \etocsetnexttocdepth {section}%
+ \etocsettocstyle {a table of contents done as an inline
+ \texttt{enumitem} environment: }{}%
+ \etocinline\tableofcontents \ref{toc:globalcmds}
+\endgroup
+\end{verbatim}
+Example of
+\begingroup\etocglobaldefs % <-- NEW mit etoc 1.08.
+ \etocsetstyle {section}
+ {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]}
+ {}
+ {\item [{\bfseries\etocnumber.}]
+ \etocname\ (\emph{p. \etocpage })}
+ {\end{itemize*}.}%
+ \etocsetnexttocdepth {section}%
+ \etocsettocstyle {a table of contents done as an inline
+ \texttt{enumitem} environment: }{}%
+ \etocinline\tableofcontents \ref{toc:globalcmds}
+\endgroup
+
+\section{The \csbhyp{etocsavedsectiontocline}, etc... commands.}
+\label{etocsavedsectiontocline}
+\label{etocsavedchaptertocline}
+
+Since |1.08k| \etoc preserves
+automatically in \csb{etocsavedsectiontocline}, \csb{etocsavedchaptertocline}
+etc... the meaning of the \LaTeX\ |\l@section|, |\l@chapter|, etc... in force
+at the time each \csb{tableofcontents} or \csb{localtableofcontents}
+macro is executed.
+
+See \autoref{sec:anothercompat} for usage.
+
+\section{The \csbhyp{etocsetlevel} command}
+\label{etocsetlevel}
+
+As already explained in \autoref{part:surprising}, one
+can inform \etoc of a level to associate to a given sectioning
+command with \csa{etocsetlevel}. For example:
+\begin{verbatim}
+\etocsetlevel{cell}{0}
+\etocsetlevel{molecule}{1}
+\etocsetlevel{atom}{2}
+\etocsetlevel{nucleus}{3}
+\end{verbatim}
+In compatibility mode, it will be assumed that the macros |\l@cell|,
+|\l@molecule|, ..., have been defined somewhere either by the user or a class:
+doing only |\etocsetlevel| is not enough for the corresponding level to work
+out-of-the-box in compatibility mode.
+
+However, if no table of contents is typeset in compatibility mode, then all that
+matters is that the various line styles have been set. If, for example
+|section| is at level |1|, then there is no need to do some
+\csa{etocsetstyle}|{molecule}{..}{..}{..}{..}| after
+\csa{etocsetlevel}|{molecule}{1}| if
+\csa{etocsetstyle}|{section}{..}{..}{..}{..}| has already been done (and it has
+been done by the package itself in its definition of its own line styles).
+
+The accepted levels run from |-2| to |6| inclusive. Anything else is
+mapped to |6|, which is a dummy level, never displayed. The package
+does:
+\begin{verbatim}
+\etocsetlevel{book}{-2}
+\etocsetlevel{part}{-1}
+\etocsetlevel{chapter}{0}
+\etocsetlevel{section}{1}
+\etocsetlevel{subsection}{2}
+\etocsetlevel{subsubsection}{3}
+\etocsetlevel{paragraph}{4}
+\etocsetlevel{subparagraph}{5}
+\end{verbatim}
+\etoc own custom styles are activated by \csa{etocdefaultlines}. They
+are illustrated by the main table of contents of this
+document.
+
+These level assignments can be modified at anytime: see
+\autoref{part:surprising} for various applications of this
+technique. As one
+further example, let's mention here that the \hyperref[toc:main]{main table of
+contents} of this document was typeset following these instructions:
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\etocsettocdepth {subsubsection} % set the initial tocdepth
+\etocdefaultlines % use the package default line styles. At this early stage in
+ % the document they had not yet been modified by \etocsetstyle
+ % commands, so \etoctoclines could have been used, too.
+\etocmarkboth\contentsname
+\etocmulticolstyle[1] % one-column display
+ {\pdfbookmark[1]{Table of contents}{MAINTOC}% create a bookmark in the pdf
+ \noindent\bfseries\Large
+ \leaders\hrule height1pt\hfill
+ \MakeUppercase{Table of Contents}}
+\begingroup % use a group to limit the scope of the
+ \etocsetlevel{subsection}{3} % subsection level change.
+ \etocsetlevel{subsubsection}{4} % anything > tocdepth=3.
+ \tableofcontents \label{toc:main}
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+In this way, the subsections used the style originally designed for
+subsubsections, the subsubsections were not printed. Without this modification,
+the appearance would have been very different: the package line styles were
+targeted to be employed in documents with many many sub-sub-sections, in a
+two-column layout, giving thus a more compact output that what is achieved by
+the default \LaTeX{} table of contents. But here, we have few sub-sub-sections
+and it is more interesting to drop them and print in a visually different manner
+sections and subsections.
+
+
+\section{Scope of commands added to
+ the \texorpdfstring{\texttt{.toc}}{.toc} file}
+
+\begingroup % pour \small et \MacroFont en particulier.
+\small
+
+\subsection{Testing the scope}
+
+Let us switch to the color red, and also add this command to the |.toc| file:
+
+\color{red!50}
+\addtocontents{toc}{\string\color{red!50}}
+
+\def\MacroFont{\ttfamily \footnotesize\hyphenchar\font45 }
+\begin{verbatim}
+ \color{red!50} % changing text color
+ \addtocontents{toc}{\string\color{red!50}} % and also in the .toc file
+\end{verbatim}
+
+
+\subsection{This is a (pale) red subsection for illustrative purposes}
+
+Actually, this title here was printed black, due to the way the |scrartcl| class
+works (it would have been red in the |article| class), but we are more
+interested in how it looks in the tables of contents: it does appear red in the
+\hyperref[toc:main]{main table of contents} at the beginning of
+this document, and also in the \hyperref[toc:a]{table of
+contents for this part}. Both entries obey as expected the
+|\color{red!50}| command inserted in the |.toc| file.
+
+But let us now close this subsection and start a section.
+
+
+\section{Am I also red?}
+
+The question is about how it appears in the tables of contents: the answer is
+that, yes it is red in the \hyperref[toc:main]{main TOC}, and no
+it is not red in the \hyperref[toc:a]{local TOC for this part}.
+The reason is that the \meta{finish} code for the subsection level closed a
+group, as it used |\end{enumerate}|.
+
+This illustrates the discussion from \autoref{ssec:limitations}.
+
+The default package line styles do not contain group opening and closing
+instructions: the influence of a command added to the |.toc| file will propagate
+until cancelled by another explicit such command inserted in the |.toc|
+file.
+
+\begin{verbatim}
+ \normalcolor
+ \addtocontents{toc}{\string\normalcolor}
+\end{verbatim}
+\endgroup
+
+\normalcolor
+\addtocontents{toc}{\string\normalcolor}
+
+Back to black. Note that this scope problem arises in real life in a
+multi-lingual document, as the |babel| package writes to the |.toc| file the
+language changes occurring in the document.
+
+
+\clearpage
+\etocdepthtag.toc {globalcmds}
+
+\part{Commands for the toc display style}
+\label{part:globalcmds}
+
+\thispartstats
+
+\etocsettocstyle{}{}
+\etocstandardlines
+\localtableofcontents \label{toc:globalcmds}
+
+
+\section{Specifying the toc display style}
+
+
+The \emph{toc display} style says whether the TOC appears with
+multiple columns or just one, whether the title is typeset as
+in the |article| or |book| class, or should be centered above
+the entries, with rules on its sides, or if the entire TOC
+should be put in a frame. For example, to opt for a ruled
+heading and single column layout, one issues commands of the
+following type:
+\begin{verbatim}
+\etocruledstyle[1]{Title} \tableofcontents (or \localtableofcontents)
+shortcuts: \etocruled[1]{Title} (or \etoclocalruled[1]{Title})
+\end{verbatim}
+
+\subsection{The command \csbhyp{etocsettocstyle}}
+\label{etocsettocstyle}
+
+This is a command with two mandatory arguments:\\
+\centerline{\csb{etocsettocstyle}\marg{before\_toc}%
+\marg{after\_toc}}
+The \marg{before\_toc} part is responsible for typesetting the
+heading, for example it can be something like
+\starit{section}|{\contentsname}|.
+
+Generally speaking this heading
+should leave \TeX{} in ``vertical mode'' when the actual
+typesetting of the contents will start: the line styles (either
+from the standard classes or the package default line styles)
+all expect to get started in `vertical mode'.
+
+The first argument to \csb{etocsettocstyle} can also contain
+instructions to mark the page headings. Or
+it could check (book class) to see if two-column mode is on,
+and switch to one-column style, and the \meta{after\_toc} part
+would then reenact the two-column mode.
+
+\textbf{\TeX\ hacker note:} We have seen in the previous chapter some examples
+of using |\begin{enumerate}| and |\end{enumerate}| within TOC line styles.
+There is a real difficulty with doing however something like this:
+\begin{verbatim}
+\etocsettocstyle{\begin{enumerate}}{\end{enumerate}}
+\etocsetstyle{section}{}{\item \sectionname}{}{}
+\end{verbatim}
+Indeed for example on first compilation of a document, the |.toc| file is
+empty and there will be the typical ``Something's wrong--perhaps a missing
+\string\item''. Using \csb{etocchecksemptiness} does not help, because as is
+explained there, on first encountering a new TOC added at end of a document,
+\etoc considers it non-empty, hence querying \csb{etocifwasempty} serves
+nothing. No, one must do something like this:
+\begin{verbatim}
+\makeatletter
+\etocsettocstyle
+ {\begin{enumerate}}
+ {\if@newlist\item Please run \LaTeX\ again\fi
+ \end{enumerate}}
+\makeatother
+\etocsetstyle{section}{}{\item \sectionname}{}{}
+\end{verbatim}
+
+The commands to be described next \csb{etocmulticolstyle},
+\csb{etocruledstyle}, and \csb{etocframedstyle} all call
+\csa{etocsettocstyle} as a lower-level routine, to start a
+\texttt{multi\-cols} environment in \marg{before\_toc} and close it in
+\marg{after\_toc}.
+
+\subsection{The commands \csbhyp{etocmulticolstyle}, \csbhyp{etocmulticol}, and \csbhyp{etoclocalmulticol}}
+\label{etocmulticolstyle}
+\label{etocmulticol}
+\label{etoclocalmulticol}
+
+This is a command with one optional and one mandatory argument:\\
+\centerline{\csb{etocmulticolstyle}%
+ \oarg{number\_of\_columns}\marg{heading}} The
+\meta{number\_of\_columns} can go from 1 to 10 (it defaults to 2; if its
+value is 1, naturally no |multicols| environment is then created). The
+\meta{heading} will typically be some `vertical' material like:
+ \meta{heading} = |\section*|\marg{title}
+but one may also have horizontal material like |\fbox{Hello World}| (\etoc
+adds automatically a |\par| at the end of this ``heading'' argument to
+\csb{etocmulticolstyle}). Here is for example
+how the main table of contents of this document was
+configured:
+\begin{verbatim}
+\etocmulticolstyle{\noindent\bfseries\Large
+ \leaders\hrule height1pt\hfill
+ \MakeUppercase{Table of Contents}}
+\end{verbatim}
+After \csa{etocmulticolstyle} all future \csa{tableofcontents} will use the
+specified style, if it does not get changed in-between. A shortcut for
+just one table of contents and
+no impact on the styles of later TOCs is:\\
+\centerline{\csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}}
+And there is also
+\csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}.
+
+\subsection{The command \csbhyp{etoctocstyle}}
+\label{etoctocstyle}
+
+\centeredline{\csb{etoctocstyle}\oarg{kind}%
+\marg{number\_of\_columns}\marg{title}}
+\centeredline{=
+\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|%
+|{\kind*{|\itshape title\upshape|}}|}
+where |kind| is one of |chapter|, |section|, . . . and defaults
+to |chapter| or |section| depending on the document class.
+
+\subsubsection{The command \csbhyp{etoctocstylewithmarks}}
+\label{etoctocstylewithmarks}
+\label{etoctocstylewithmarksnouc}
+
+\centeredline{\csb{etoctocstylewithmarks}\oarg{kind}%
+\marg{number\_of\_columns}\marg{title}\marg{mark}}
+\centeredline
+{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|%
+|{\kind*{|\itshape title \ttfamily\upshape\string\markboth%
+|{\MakeUppercase{|{\rmfamily\itshape mark}|}}}}|}
+where |kind| is one of |chapter|, |section|, ... The
+actual display of the marks depends on the settings of the
+page style. There is variant \csb{etoctocstylewithmarksnouc}
+which does not uppercase.
+
+\paragraph{Do we really want paragraph entries in the TOC?}
+
+\paragraph{really?}
+
+\subsection{The commands \csbhyp{etocruledstyle}, \csbhyp{etocruled} and \csbhyp{etoclocal\-ruled}}
+\label{etocruledstyle}
+\label{etocruled}
+\label{etoclocalruled}
+
+The general format of \csa{etocruledstyle} is:\\
+\centerline{\csb{etocruledstyle}%
+\oarg{number of columns}\marg{title of the toc}}
+\noindent
+The title is horizontal material (the |LR| mode of
+\emph{\LaTeX{}, a document preparation system}): if it
+does not fit on one line it should be put in a \csa{parbox} of
+a given width.
+The green frame for the heading of the table of contents at
+the \hyperref[toc:a]{start of the second part of this
+ document} was obtained with:
+\begin{verbatim}
+\etocruledstyle[1]{\etocfontminusone\color{green}%
+ \fboxrule1pt\fboxsep1ex
+ \framebox[\linewidth]
+ {\normalcolor\hss Contents of this part\hss}}
+\end{verbatim}
+
+
+As a shortcut to set the style with \csb{etocruledstyle} and
+then issue a
+\csa{tableofcontents}, all inside a group
+so that future table of contents will not be
+affected, there is:\\
+\centerline{\csb{etocruled}\oarg{number\_of\_columns}\marg{title}}
+And the local form will be \csb{etoclocalruled}.
+
+\subsection{The commands \csbhyp{etocframedstyle}, \csbhyp{etocframed}, and \csbhyp{etoclocal\-framed}}
+\label{etocframedstyle}
+\label{etocframed}
+\label{etoclocalframed}
+
+Same mechanism:\\
+\centerline{\csb{etocframedstyle}%
+ \oarg{number\_of\_columns}\marg{title}}
+and the accompanying shortcut:\\
+\centerline{\csb{etocframed}\oarg{number\_of\_columns}\marg{title}} The
+shortcut is used if one does not want to modify the style of the next
+TOCs (the other way is to put the whole thing inside braces or a
+|\begingroup...\endgroup|; there is also \csa{etoclocalframed} for a
+local table of contents).
+
+The entire table of contents is framed. The title itself is not framed:
+if one wants a frame one should set it up inside the \meta{title}
+argument to \csa{etocframedstyle} or \csa{etocframed}. The colors for
+the background and for the components (top, left, right, bottom) of the
+border are specified via suitable |\renewcommand|'s (see
+\autoref{ssec:customdisplay}).
+
+A |minipage| is used, hence the produced table of contents isn't
+compatible with a page break. For allowing page breaks, use of
+the commands of
+\href{http://ctan.org/pkg/mdframed}{mdframed}\footnote{\url{http://ctan.org/pkg/mdframed}}
+or
+\href{http://ctan.org/pkg/tcolorbox}{tcolorbox}\footnote{\url{http://ctan.org/pkg/tcolorbox}}
+in the arguments of \csb{etocsettocstyle}
+is recommended.
+
+Examples in this document are on pages \pageref{toc:d},
+\pageref{toc:floating}, \pageref{toc:b}, and \pageref{toc:clone}.
+
+
+\subsection{Headings, titles, \csbhyp{etocoldpar}, \csbhyp{etocinnertopsep}}
+\label{etocinnertopsep}
+\label{etocoldpar}
+
+For \csb{etocmulticolstyle} the mandatory \meta{heading} argument can be
+either
+vertical mode material like |\section*{\emph{Table of Contents}}| or
+horizontal mode material like in the simple |\etocmulticolstyle{Hello World}|.
+
+No explicit |\par| or empty line can be inserted in the mandatory
+argument of \csb{etocmulticolstyle}, but \etoc provides \csb{etocoldpar}
+as a substitute: it does |\let\etocoldpar\par| before the |multicols|
+environment and inserts this |\etocoldpar|\footnote{this command
+ \csa{etocoldpar} (= working \csa{par} in the argument to
+ \csa{etocmulticolstyle}) is not related to the switch \csb{etocinline}
+ whose purpose is to tell \etoc not to do a \csa{par} before the table
+ of contents.} at the end of the heading, then does a vertical skip of
+value \csa{etocinnertopsep}. The command \csb{etocoldpar} can also be
+used explicitely if needed in the mandatory argument to
+\csa{etocmulticolstyle} (it is not allowed to insert an empty line
+in this argument).
+
+On the other hand the commands \csb{etocruledstyle} and
+\csb{etocframedstyle} expect an argument ``in LR mode'' (to use the
+terminology from \emph{LaTeX, a document preparation system}). This
+means that multiline titles are only possible if enclosing
+them inside something like a \csa{parbox}.
+
+
+
+An important dimension used by all three of \csb{etocmulticolstyle},
+\csb{etocruledstyle} and \csb{etocframedstyle} is
+\csb{etocinnertopsep}. It gives the amount of separation
+between the heading and the start of the contents. Its default
+value is |2ex| and it is changed with
+|\renewcommand*{\etocinnertopsep}|\marg{new\_value}, not with
+|\setlength|.
+
+
+
+\subsection{The compatibility mode \csbhyp{etocstandarddisplaystyle}}
+\label{etocstandarddisplaystyle}
+
+\etoc will then emulate what the document class would have
+done regarding the global display style of the table of
+contents, in its absence. All customizing from inside the
+class should be obeyed, too.
+
+\subsubsection{The commands \csbhyp{etocarticlestyle}, \csbhyp{etocbookstyle},
+ \dots}
+
+These are the commands used internally by \etoc in compatibility mode
+depending on the document class. For example \csa{etocarticlestyle} instructs
+\etoc to use |\section*{\contentsname}| (with marks on the page) and
+\csa{etocbookstyle} says to use |\chapter*{\contentsname}|. It can prove
+useful to issue \csa{etocarticlestyle} for a \csa{localtableofcontents} inside
+a chapter, in |book| class and compatibility mode for the global TOC display
+style.
+
+\subsection{The command \csbhyp{etocinline}}
+\label{etocinline}
+\label{etocnopar}
+\label{etocdisplay}
+
+With \csb{etocinline}, or its synonym |\etocnopar|, the
+|\tableofcontents| command and its variants do \emph{not} first issue a
+|\par| to close the previous paragraph. Hence, the table of contents can
+be printed in an inline style; or, if used only for preparing some token
+list or macro, it will leave nothing in the token stream on execution.
+
+Issue \csb{etocdisplay} to return to the default situation that
+|\tableofcontents| and variants issue a |\par| to switch to vertical
+mode before typesetting the TOC title and contents.
+
+\section{Starred variants of the \csbhyp{tableofcontents} etc... commands}
+\label{tableofcontents*}
+\label{localtableofcontents*}
+\label{etocbeforetitlehook}
+\label{etocaftertitlehook}
+\label{etocaftercontentshook}
+\label{etocaftertochook}
+\label{etocmemoirtoctotocfmt}
+
+The \toc, \localtoc, \csa{etocmulticol}, and all their cousins and
+variants have starred variants (the star must be before the other
+arguments). For all but the |memoir| class, they are like the original.
+For the |memoir| class, the original prints an entry in the |.toc| file,
+as is the usage for the original \toc command in that class, whereas the
+starred variants do not, as is the habit in that class.
+
+As soon as one starts using local table of contents one
+discovers that the default |memoir| thing which is to create a
+|chapter| entry for each TOC is not convenient. The command
+\csb{etocmemoirtoctotocfmt}\marg{kind}\marg{name} will change
+the format (\meta{kind} is |chapter|, |section|, |subsection|... and
+\meta{name} can be for example \csa{contentsname}.) The initial set-up
+is with |chapter| and |\contentsname|.
+
+The format of the actual heading of the TOC should also be set
+appropriately (for example with \csa{etoctocstyle}), to use the
+identical division unit as in the first argument to
+\csa{etocmemoirtoctotocfmt}.
+
+A weird situation arises when one has two successive
+\csa{localtableofcontents} (obviously this is not a truly real
+life situation), just after a \csa{part} for example. The first
+one creates (if the default has not been modified as indicated
+above) a Chapter heading which is
+written to the |.toc|. Then the second one thinks to be local
+to this chapter . . . and as a result it displays nothing. The
+fix is to define the second one to be a clone of the first
+one.
+
+Independently of the situation with the |memoir| class there is
+generally speaking a hook macro called
+\csb{etocaftertitlehook} which is inhibited by using the
+starred variants of the displaying commands. Except for the
+|memoir| class, this hook is initially defined to do nothing.
+
+There are also (independently of the document class)
+\csb{etocaftercontentshook}, \csb{etocbeforetitlehook} and
+\csb{etocaftertochook} which are initially defined to do nothing and can be
+used for some special effects.
+
+
+\clearpage
+\etocdepthtag.toc {custom}
+
+\part{Using and customizing the \etoc own styles}
+\label{part:custom}
+
+\thispartstats
+
+\etocdefaultlines
+\renewcommand{\etoctoprule}{\hrule height2pt depth0pt}
+\renewcommand{\etoctoprulecolorcmd}{\color{red}}
+
+\etocruledstyle{\normalfont\normalsize\rmfamily\fboxrule1pt\color{red}%
+ \fbox{\parbox{.8\linewidth}{\centering\normalcolor This is a table of
+ contents for the sections and
+ subsections in this part. It carries the label |toc:c|}}}
+
+\localtableofcontents \label{toc:c}
+
+
+\section{Summary of the main style commands}
+
+\subsection{Setting up local styles}
+
+\hbox{\color{green}\fboxrule1pt\fboxsep1em
+\setbox0\hbox{\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{linkname}}%
+\framebox[\linewidth][c]
+{\vbox{\hsize\wd0\normalcolor\noindent
+\csa{etocsetstyle}\marg{levelname}%
+ \marg{start}\marg{prefix}\marg{contents}\marg{finish}\\
+\csa{etocname}, \csa{etocnumber}, \csa{etocpage},
+\csa{etocifnumbered}\marg{A}\marg{B}\\
+\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{linkname}
+}}}
+
+\subsection{Setting up toc display styles}
+
+\medskip
+\hbox{\color{green}\fboxrule1pt\fboxsep1em
+\setbox0\hbox{\csa{etoctocstylewithmarksnouc}\oarg{kind}%
+\marg{number\_of\_columns}\marg{title}\marg{mark}}%
+\framebox[\linewidth][c]
+{\vbox{\hsize\wd0
+\normalcolor\noindent
+\csa{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}\\
+\csa{etoctocstyle}\oarg{kind}\marg{number\_of\_columns}\marg{title}\\
+\csa{etoctocstylewithmarks}\oarg{kind}\marg{number\_of\_columns}%
+\marg{title}\marg{mark}\\
+\csa{etoctocstylewithmarksnouc}\oarg{kind}\marg{number\_of\_columns}%
+\marg{title}\marg{mark}\\
+\csa{etocruledstyle}\oarg{number\_of\_columns}\marg{title}\\
+\csa{etocframedstyle}\oarg{number\_of\_columns}\marg{title}\\
+\csa{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}}}}
+
+\subsection{Displaying tables of contents}
+
+
+\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em
+ \setbox0\hbox{\csa{etocname}, \csa{etocnumber},
+ \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}%
+ \framebox[\linewidth][c]
+ {\vbox{\hsize\wd0\normalcolor\noindent
+ \toc\\
+ \localtoc\\
+ \csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}\\
+ \csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}\\
+ \csa{etocruled}\oarg{number\_of\_columns}\marg{title}\\
+ \csa{etoclocalruled}\oarg{number\_of\_columns}\marg{title}\\
+ \csa{etocframed}\oarg{number\_of\_columns}\marg{title}\\
+ \csa{etoclocalframed}\oarg{number\_of\_columns}\marg{title}\\
+ \hbox{}{\itshape\ttfamily\ \ \ \ and their starred variants}
+ }}}
+
+\subsection{Labels and references}
+\label{ssec:labelref}
+
+The commands (starred or not) to actually display the table of contents
+can be followed with optional labels or references:\par
+
+\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em
+ \setbox0\hbox{\csa{etocname}, \csa{etocnumber},
+ \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}%
+ \framebox[\linewidth][c]
+ {\vbox{\hsize\wd0\normalcolor\noindent
+ \toc \csa{label}|\{toc:here\}|\\
+ \toc \csa{ref}|\{toc:far\}| \\
+ \toc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\
+ \localtoc \csa{label}|\{toc:here\}|\\
+ \localtoc \csa{ref}|\{toc:far\}| \\
+ \localtoc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\
+ \hbox{}{\itshape\ttfamily\ \ \ \ similarly with\ }%
+ \csa{etocmulticol}{\itshape\ttfamily\ etc . . . }
+ }}}
+
+
+\medskip
+
+New with |1.08e|: \localtoc \csa{ref}|{toc:far}| as synonym for \toc
+\csa{ref}|{toc:far}|.
+
+% (obsolète depuis 1.08e)
+% The commands for local tables of
+% contents do \emph{not} react to a \csa{ref} following them.
+
+When re-displaying another toc, only its contents are transferred:
+both the line styles and the toc display style are the ones
+currently defined, not the ones from the cloned toc.
+
+
+\section{The package default line styles: \csbhyp{etocdefaultlines}}
+\label{etocdefaultlines}
+
+These line styles were written at an early stage in the
+development of the package; although the next section explains how
+to customize the font choicess or vertical spaces, etc\dots, used
+by these line styles, most other changes would require copying
+them from the sources and modify them directly. Admittedly they
+have been written at a rather scary low-\TeX{} level, and will not
+serve as a very friendly starting point.
+
+Activating their use is done via \csa{etocdefaultlines}, or
+\csa{etoctoclines} if the line styles have not been modified with
+\csa{etocsetstyle}. Sections and sub-sections are printed in
+essentially the same manner, except that the leading for
+sub-sections is a bit smaller (with document classes lacking a
+\csa{chapter} command, the sections are printed in bold typeface;
+this is the case in the present document). Sub-sub-sections are
+printed inline, in one paragraph, with no numbers or page numbers.
+This style was designed and tested with documents having lots of
+sub-sub-sections, and should be used on a two-column layout: it
+provides (only in that situation with many sub-sub-sections) a
+more compact presentation than what is achieved by the \LaTeX{}
+default.\footnote{and there will never be a Part or Chapter entry
+ alone at the bottom of a column or page (except if it has no
+ sub-unit).} On the other hand, used with a one-column layout,
+and with few sub-sub-sections, the style is a bit more spread out
+vertically than the \LaTeX{} default, sub-sections are not
+visually much different from sections (especially for document
+classes with a \csa{chapter} command), so the result is less
+hierarchical in appearance than in the \LaTeX{} default.
+
+In this document, for the \hyperref[toc:main]{main table of contents}, we did
+|\etocsetlevel{subsection}{3}| hence the sub-sections were printed with the
+sub-sub-section inline style.
+
+Let us, to the contrary, typeset now this main table of contents as if the
+document had been done with a class having the \csa{chapter} command: we will
+print sections as chapters, and subsections as sections. We use
+\csa{etocsetlevel} for that, and also we need to change the font style of
+``sections'' (which in truth are our subsections) to use not the bold but the
+medium series; we modify the \csa{etocfontone} command for that. Also we use dot
+leaders which are less spread out than in the package default.
+
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape
+ \fbox{\parbox{.6\linewidth}{
+ \leftskip 0pt plus .5fil
+ \rightskip 0pt plus -.5fil
+ \parfillskip 0pt plus 1fil This is the global table of
+ contents on two columns, using \etoc default line styles, but with
+ sections as chapters, and subsections as sections.
+ }}}
+\etocdefaultlines
+\etocsetnexttocdepth{1}
+\begingroup
+\etocsetlevel{section}{0}
+\etocsetlevel{subsection}{1}
+\renewcommand*{\etocfontone}{\normalfont \normalsize}
+\renewcommand*{\etoctoclineleaders}
+ {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}}
+\sloppy
+\tableofcontents
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\filecontentsexec\filecontentsheremacro
+
+\section{Customizing \etoc}
+
+\subsection{Customizing the \etoc pre-defined line styles}
+
+We will simply list the relevant commands as defined in the
+package. Customizing them goes through suitable
+\csa{renewcommand}s:
+\begin{verbatim}
+\newcommand*\etocfontminustwo{\normalfont \LARGE \bfseries}
+\newcommand*\etocfontminusone{\normalfont \large \bfseries}
+\newcommand*\etocfontzero{\normalfont \large \bfseries}
+\newcommand*\etocfontone{\normalfont \normalsize \bfseries}
+% (in classes with chapter, \etocfontone does not do \bfseries)
+\newcommand*\etocfonttwo{\normalfont \normalsize}
+\newcommand*\etocfontthree{\normalfont \footnotesize}
+
+\newcommand*\etocsepminustwo{4ex plus .5ex minus .5ex}
+\newcommand*\etocsepminusone{4ex plus .5ex minus .5ex}
+\newcommand*\etocsepzero{2.5ex plus .4ex minus .4ex}
+\newcommand*\etocsepone{1.5ex plus .3ex minus .3ex}
+\newcommand*\etocseptwo{.5ex plus .1ex minus .1ex}
+\newcommand*\etocsepthree{.25ex plus .05ex minus .05ex}
+
+\newcommand*\etocminustwoleftmargin{1.5em plus 0.5fil}
+\newcommand*\etocminustworightmargin{1.5em plus -0.5fil}
+\newcommand*\etocminusoneleftmargin{1em}
+\newcommand*\etocminusonerightmargin{1em}
+
+\newcommand*\etocbaselinespreadminustwo{1}
+\newcommand*\etocbaselinespreadminusone{1}
+\newcommand*\etocbaselinespreadzero{1}
+\newcommand*\etocbaselinespreadone{1}
+\newcommand*\etocbaselinespreadtwo{1}
+\newcommand*\etocbaselinespreadthree{.9}
+\newcommand*\etoctoclineleaders
+ {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}}
+\newcommand*\etocabbrevpagename{p.~} % initial of "page"
+\newcommand*\etocpartname{Part} % prior to v1.08b, was \partname
+% but this didn't make sense e.g. with babel+frenchb whose \frenchpartname
+% takes into account the value of the part counter.
+\newcommand*\etocbookname{Book} % to be modified according to language
+\end{verbatim}
+
+No customizing of the standard line styles is possible from
+within \etoc. As already explained, when
+\csa{etocstandardlines} has been issued, the package just makes
+itself very discrete and acts only at the global level, and
+the TOC entries are (hopefully) formatted as would have
+happened in the absence of \etoc.\footnote{with the
+ KOMA-script classes, we noticed that
+ \csa{etocstandarddisplaystyle} was apparently needed for the
+ KOMA options |toc=left| to be active at the level of the line entries.}
+
+
+The \csa{etocstandardlines} compatibility mode will work also with
+sectioning commands made known to \etoc via \csa{etocsetlevel},
+under the condition of course that these sectioning commands
+are accompanied with all the relevant definitions for
+typesetting toc entries in the \LaTeX{} default manner
+(existence of the macros \csa{l@something} . . .).
+
+Using the command \csa{etocsetstyle}, be it in the preamble or
+in the body of the document, has the secondary effect of
+switching off the compatibility mode.
+
+\subsection{Customizing the toc display styles}
+\label{ssec:customdisplay}
+
+Again we list the relevant macros, what they do should be
+legible from their names. Note that \csa{renewcommand}'s and
+not \csa{setlength}'s have to be used for what appear to be
+lengths, and that color commands are not just color
+specifications, they must include \csa{color}, and are canceled
+by re-defining them to do \csa{relax}.
+\begin{verbatim}
+\newcommand*\etocabovetocskip{3.5ex plus 1ex minus .2ex}
+\newcommand*\etocbelowtocskip{3.5ex plus 1ex minus .2ex}
+
+\newcommand*\etoccolumnsep{2em}
+\newcommand*\etocmulticolsep{0ex}
+\newcommand*\etocmulticolpretolerance{-1}
+\newcommand*\etocmulticoltolerance{200}
+\newcommand*\etocdefaultnbcol{2}
+\newcommand*\etocinnertopsep{2ex}
+\newcommand*\etoctoprule{\hrule}
+\newcommand*\etoctoprulecolorcmd{\relax}
+
+% for the framed style only:
+\newcommand*\etocinnerleftsep{2em}
+\newcommand*\etocinnerrightsep{2em}
+\newcommand*\etocinnerbottomsep{3.5ex}
+
+\newcommand*\etocleftrule{\vrule}
+\newcommand*\etocrightrule{\vrule}
+\newcommand*\etocbottomrule{\hrule}
+\newcommand*\etocleftrulecolorcmd{\relax}
+\newcommand*\etocrightrulecolorcmd{\relax}
+\newcommand*\etocbottomrulecolorcmd{\relax}
+
+\newcommand*\etocbkgcolorcmd{\relax}
+
+% hooks
+\newcommand\etocframedmphook{\relax}
+\end{verbatim}
+
+The \csa{etocframedmphook} is positioned immediately
+after the beginning of a minipage environment where the
+contents of the framed TOC are typeset.
+
+The \csa{...colorcmd} commands are initially set to expand to
+\csa{relax} (hence do not require package |color| or |xcolor|
+to be loaded). If one has modified a command such as
+\csa{etocbkgcolorcmd} to expand to a color command and wants
+to reset it to do nothing, one \emph{must} use
+|\renewcommand{\etocbkgcolorcmd}{\relax}| and not
+\csa{let}\csa{etocbkgcolorcmd}\csa{relax}.
+
+Regarding the dimensions of the top rule they can be specified
+in |ex|'s or |em|'s as in this example:
+\centeredline{|\renewcommand{\etoctoprule}{\hrule height 1ex}|}
+The package code is done in such a manner
+that it is the font size in instance at the end of typesetting
+the title argument to \csa{etocruledtoc} or
+\csa{etocframedtoc} which will be used for the meaning of the
+`1ex'. Of course also the other rule commands can have their
+dimensions in font relative units, but their values are
+decided on the basis of the font in effect just before the
+table of contents.
+
+The top and bottom rules do not have to be rules and can be
+horizontal \emph{leaders} (of a specified height) in the general
+\TeX{} sense. However the left and right rules are not
+used as (horizontal) leaders but as objects of a given specified
+width. Note that \emph{only} the Plain \TeX{} syntax for rules is
+accepted here.
+
+\section{One more example of colored TOC layout}
+\label{ssec:tocclone}
+
+The command \csa{etocframedstyle} puts the title on the top
+rule in a centered position. This is not very convenient for
+this example so we included the title as part of the
+\meta{start} code at section level, to get it \emph{inside}
+the frame.
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\begingroup
+\definecolor{subsecnum}{RGB}{13,151,225}
+\definecolor{secbackground}{RGB}{0,177,235}
+\definecolor{tocbackground}{RGB}{212,237,252}
+
+\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}}
+\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}}
+
+\renewcommand{\etocleftrule}{\vrule width 1cm}
+\renewcommand{\etocrightrule}{\vrule width .5cm}
+\renewcommand{\etocbottomrule}{\hrule height 12pt}
+\renewcommand{\etoctoprule}{\hrule height 12pt}
+
+\renewcommand{\etocinnertopsep}{0pt}
+\renewcommand{\etocinnerbottomsep}{0pt}
+\renewcommand{\etocinnerleftsep}{0pt}
+\renewcommand{\etocinnerrightsep}{0pt}
+
+\newcommand\shiftedwhiterule[2]{%
+ \hbox to \linewidth{\color{white}%
+ \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip\vskip#2}
+
+\etocsetstyle{subsubsection}{\etocskipfirstprefix}
+ {\shiftedwhiterule{\leftskip}{6pt}}
+ {\sffamily\footnotesize
+ \leftskip2.5cm\hangindent1cm\rightskip1cm\noindent
+ \hbox to 1cm{\color{subsecnum}\etocnumber\hss}%
+ \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill
+ \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par
+ \nointerlineskip\vskip3pt}
+ {}
+
+\etocsetstyle{subsection}{\etocskipfirstprefix}
+ {\shiftedwhiterule{1.5cm}{6pt}}
+ {\sffamily\small
+ \leftskip1.5cm\hangindent1cm\rightskip1cm\noindent
+ \hbox to 1cm{\color{subsecnum}\etocnumber\hss}%
+ \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill
+ \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par
+ \nointerlineskip\vskip6pt}
+ {}
+
+\newcommand{\coloredstuff}[2]{%
+ \leftskip0pt\rightskip0pt\parskip0pt
+ \fboxsep0pt % \colorbox uses \fboxsep also when no frame!
+ \noindent\colorbox{secbackground}
+ {\parbox{\linewidth}{%
+ \vskip5pt
+ {\noindent\color{#1}#2\par}\nointerlineskip
+ \vskip3pt}}%
+ \par\nointerlineskip}
+
+\etocsetstyle{section}
+{\coloredstuff{white}
+ {\hfil \hyperref[toc:b]{\bfseries\large I am a twin of
+ that other TOC (click me!)}\hfil}}
+{\vskip3pt\sffamily\small}
+{\coloredstuff{white}
+ {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip
+ \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}%
+ \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}%
+ \vskip6pt }
+{}
+
+\etocframedstyle[1]{}
+\tableofcontents \label{toc:clone} \ref{toc:globalcmds}
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\filecontentsexec\filecontentsheremacro
+% v1.07l on the occasion of traduction into German documentation
+ % APRIL 26, 2014 Improvement in the section style for better placement of
+ % page number when the section name is more than one line long. Use of
+ % \makebox rather than \hbox, to be more LaTeX like.
+
+The TOC has been put in a \hyperref[toc:clone]{float} which appears
+\vpageref{toc:clone}. The coding is a bit involved\footnote{and reveals the
+ author's preference for the \TeX{} syntax...} as it does not use any
+additional package. Also, it was written at some early stage and I have not
+revised it since.
+
+A better solution would be to use some package to set
+up a background color possibly extending accross pages, as the
+framed style (which we used to get this background
+color) can only deal with material short enough to fit on one
+page.
+
+Regarding colors, generally speaking all color commands inside
+\etoc are initially defined to do nothing, and the choice to
+use or not colors is left to the user.
+
+\clearpage
+\etocdepthtag.toc {tips}
+
+\part{Tips}
+\label{part:tipsandtricks}
+
+\thispartstats
+
+%%%% \invisiblelocaltableofcontents \label{toc:tipsandtricks}
+
+\etocsettocstyle{}{}
+\etocstandardlines
+\localtableofcontents
+
+%\section{... and tricks}
+
+\section{The \csbhyp{etocsetlocaltop.toc} command}
+\label{etocsetlocaltop.toc}
+
+It is important to understand that \csb{localtableofcontents} works entirely
+from data \emph{in the |.toc| file}. If the document, say with |article|
+class, contains starred sectioning commands, which are not accompanied
+by suitable \csa{addcontentsline}, then these units are completely
+transparent to \csb{localtableofcontents}:
+\begin{itemize}
+\item If it is issued before |\section*{Foo}|, say locally to a |\section|,
+ then the local TOC will include not only the |subsection|s between the
+ |\section| and the |\section*{Foo}| but also those following, and be stopped
+ uniquely by a later |\section| or |\part| from the document's body.
+\item If the command is issued right after |\section*{Foo}| and the later was
+ itself subsequent to a (numbered) |\subsection|, then \etoc will think it
+ must display a TOC local to that \emph{subsection} level.
+\end{itemize}
+Before concluding that \etoc is buggy, imagine how the global TOC of the
+document would look like in such circumstances: the \csb{localtableofcontents}
+does exactly the job of extracting from that global TOC various local TOCs; it
+works only from material in that (virtual) global TOC.
+
+Since relase |1.08k|, \etoc provides the one-argument command
+\csb{etocsetlocaltop.toc} to insert into the |.toc| file a kind
+of ``ghost'' of a given sectioning unit. Here is an example:
+
+\begin{verbatim}
+\part*{Extra unnumbered part}
+\etocsetlocaltop.toc{part}
+\localtableofcontents
+\end{verbatim}
+
+Then in this example, \csb{localtableofcontents} will be stopped
+by the next |\part| (naturally a numbered one or a |\part*| followed by
+suitable |\addcontentsline|) or also by a later |\etocsetlocaltop.toc{part}|.
+
+This is all fine but keep in mind again that \csb{localtableofcontents} can
+only display units which have been pushed to the |.toc| file, so that |\part*|
+must be followed by numbered sections or |\section*/\addcontentsline| pairs if
+\csb{localtableofcontents} is to display anything useful. One can not use
+\etoc to typeset data not actually there in the |.toc| file!
+
+Thus, in the situation above, one may wonder why the document does not use
+|\addcontentsline| after the |\part*| as it must do so for sub-sectioning
+units if they are to appear in the local TOC.
+
+One may imagine some document where all |Part|s are non-numbered but
+nevertheless the user wants its \csb{localtableofcontents} for each one: then
+indeed \csb{etocsetlocaltop.toc} will help in that case.
+
+There are at least two more methods to handle this situation:
+\begin{itemize}
+\item the first one is simply to use the |\addcontentsline{toc}{part}{..}|
+ commands, and to set the |part| style to do nothing, so that the main TOC
+ will not display them,
+\item the second one does not add the |\addcontentsline{toc}{part}{...}| but
+ uses ``depth tags'' (\autoref{ssec:tocwithdepthtags}) and multiple
+ \csb{tableofcontents} (not \csb{localtableofcontents}), one for each desired
+ local TOC.
+\end{itemize}
+
+There is a variant of the first method which would set the level of |part|
+temporarily to |6| for the typesetting of the main TOC. But then the |chapter|
+toc line style will execute inside the main TOC only once its \emph{start} and
+\emph{finish} parts (see \autoref{sec:etocsetstyle}). This is actually also a
+problem of the second method.
+
+But not of the first method which uses
+\centeredline{\csb{etocsetstyle}|{part}{}{}{}{}|} nor of the approach with
+\csb{etocsetlocaltop.toc}: the \emph{start} and \emph{finish} portions of the
+|chapter| toc line style will get executed at the appropriate times in the
+main, global, TOC.
+
+Be aware however that this use of \csb{etocsetlocaltop.toc}|{part}| will also
+cause the main global TOC to execute (once) the \emph{start} and \emph{finish}
+portions of the |part| toc line style (assuming here again it is not typeset in
+compatibility mode).
+
+Final remark: usage of \csb{etocsetlocaltop.toc} interferes with
+\csb{etocchecksemptiness} only to the extent that it modifies (as explained in
+this section) the selection made by \csb{localtableofcontents}, hence the
+decision whether the local TOC is empty or not.
+
+\section{Hacking framed parboxes}
+
+\begin{verbatim}
+\etocdefaultlines
+\renewcommand\etoctoprule{\hrule height 2pt depth 2pt}
+\etocruled{\color{green}\fboxrule2pt\fboxsep1ex
+ \fbox{\raisebox{-\fontdimen22\textfont2}
+ {\color{blue}\parbox{.5\linewidth}
+ {\normalfont This text is perfectly centered
+ vertically with respect to the
+ surrounding horizontal rules.}}}}
+\ref{toc:globalcmds}
+\end{verbatim}
+
+\etocdefaultlines
+
+\renewcommand\etoctoprule{\hrule height 2pt depth 2pt}
+
+\etocruled{\color{green}\fboxrule2pt\fboxsep1ex
+ \fbox{\raisebox{-\fontdimen22\textfont2}
+ {\color{blue}\parbox{.5\linewidth}
+ {\normalfont This text is perfectly centered
+ vertically with respect to the
+ surrounding horizontal rules.}}}}
+ \ref{toc:globalcmds}
+
+
+\section{Interverting the levels}
+\label{subsec:interverting}
+
+Let us display and count all subsections occurring in this
+document (see \autoref{part:surprising} for other uses of
+this technique):
+\begin{verbatim}
+\etocsetnexttocdepth{2}
+\begingroup
+\etocsetlevel{part}{3}
+\etocsetlevel{section}{3}
+\etocsetstyle{subsection}
+ {\small\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]}
+ {\normalfont\bfseries\item}
+ {\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)}
+ {\end{enumerate}}
+\renewcommand{\etoccolumnsep}{2.75em}
+\renewcommand{\columnseprule}{1pt}
+\etocmulticol[3]{\subsection{All subsections of this document}}
+\endgroup
+\end{verbatim}
+
+\etocsetnexttocdepth{2}
+
+\begingroup
+\etocdefaultlines
+\etocstandarddisplaystyle
+\etocsetlevel{book}{3}
+\etocsetlevel{part}{3}
+\etocsetlevel{chapter}{3}
+\etocsetlevel{section}{3}
+\etocsetstyle{subsection}{\small
+\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]}
+{\normalfont\bfseries\item}
+{\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)}
+{\end{enumerate}}
+
+\renewcommand{\etoccolumnsep}{2.75em}
+\renewcommand{\columnseprule}{1pt}
+
+%%\etocmarkbothnouc{List of all subsections}
+%% le mark (\markright) est fait par \subsection
+
+\etocmulticol[3]{\subsection{All subsections of this document}\label{toc:allsubsections}}
+
+\endgroup
+
+\section{Displaying statistics}\label{ssec:statistics}
+
+Each part of this document starts with a paragraph telling how many
+sections and subsections it has. Well, each one of this paragraph is a
+table of contents! We designed a macro \csa{thispartstats} to do that.
+It uses ``storage'' boxes to keep the information about the first and
+last section or subsection. Using boxes is the simplest manner to
+encapsulate the |hyperref| link for later use (whether there is one or
+none). However, one cannot modify then the font or the color.
+% (using the
+% \TeX{} primitive \csa{setbox} rather than the \LaTeX{} \csa{sbox} would
+% allow to change the color of the un-boxed saved box)
+If such a need
+arises, one must switch from using boxes to using macros, and store the
+|hyperref| data for later use as was done in the code presented in
+\autoref{sec:molecule}. We present also this second method.
+
+But first, the code of \csa{thispartstats}:\par
+\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex}
+\newsavebox\firstnamei \newsavebox\firstnumberi
+\newsavebox\lastnamei \newsavebox\lastnumberi
+\newsavebox\firstnameii \newsavebox\firstnumberii
+\newsavebox\lastnameii \newsavebox\lastnumberii
+\newcounter{mycounti} \newcounter{mycountii}
+\newcommand*{\thispartstatsauxi}{} \newcommand*{\thispartstatsauxii}{}
+\newcommand*{\oldtocdepth}{}
+\newcommand*{\thispartstats}{%
+ \setcounter{mycounti}{0}%
+ \setcounter{mycountii}{0}%
+ \def\thispartstatsauxi{%
+ \sbox{\firstnamei}{\etocname}%
+ \sbox{\firstnumberi}{\etocnumber}%
+ \def\thispartstatsauxi{}}%
+ \def\thispartstatsauxii{%
+ \sbox{\firstnameii}{\etocname}%
+ \sbox{\firstnumberii}{\etocnumber}%
+ \def\thispartstatsauxii{}}%
+ \begingroup
+ \etocsetstyle{subsection} {} {}
+ {\thispartstatsauxii
+ \stepcounter{mycountii}%
+ \sbox{\lastnameii}{\etocname}%
+ \sbox{\lastnumberii}{\etocnumber}} {}%
+ \etocsetstyle{section} {} {}
+ {\thispartstatsauxi
+ \stepcounter{mycounti}%
+ \sbox{\lastnamei}{\etocname}%
+ \sbox{\lastnumberi}{\etocnumber}}
+ {Here are some statistics for this part: it contains \arabic{mycounti}
+ section\ifnum\value{mycounti}>1 s\fi{} and \arabic{mycountii}
+ subsection\ifnum\value{mycountii}>1 s\fi. The name of the first section is
+ \unhbox\firstnamei{} and the corresponding number is \unhbox\firstnumberi.
+ The name of the last section is \unhbox\lastnamei{} and its number is
+ \unhbox\lastnumberi. The name of the first subsection is \unhbox\firstnameii{}
+ and the corresponding number is \unhbox\firstnumberii. The name of the last
+ subsection is \unhbox\lastnameii{} and its number is \unhbox\lastnumberii.}%
+ \etocinline % cancels the automatic \par automatically before the TOC
+ \etocsettocstyle {}{}
+ \etocsetnexttocdepth{2}%
+ \localtableofcontents % to be used at the top level of a Part.
+ \endgroup
+}
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+And now, the variant with macros rather than boxes (this variant as it
+stands here is for using within a section).
+\begin{filecontentshere}{etocsnippet-\the\value{section}-B.tex}
+\makeatletter
+\newcommand*\firstsubname {} \newcommand*\lastsubname {}
+\newcommand*\firstsubnumber {} \newcommand*\lastsubnumber {}
+\newcommand*\thisspecialstatsaux{}
+\newcommand*{\thisspecialstats}{%
+ \setcounter{mycounti}{0}%
+ \def\thisspecialstatsaux{%
+ \let\firstsubname\etocthelinkedname
+ \let\firstsubnumber\etocthelinkednumber
+ \def\thisspecialstatsaux{}}
+ \begingroup
+ \etocsetstyle{subsection} {} {}
+ {\thisspecialstatsaux
+ \stepcounter{mycounti}%
+ \let\lastsubname\etocthelinkedname
+ \let\lastsubnumber\etocthelinkednumber }
+ {Here are some statistics for this section. It contains \arabic{mycounti}
+ subsections. The name of its first is \emph{\firstsubname{}} and the
+ corresponding number is {\firstsubnumber}. The name of the last
+ subsection is \emph{\lastsubname{}} and its number is {\lastsubnumber}.}%
+ \etocsettocstyle {}{}
+ \etocinline
+ \etocsetnexttocdepth {1}%
+ \localtableofcontents % to be used within a section
+ \endgroup
+}
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-B.tex}
+
+\section{Using depth tags}
+\label{ssec:tocwithdepthtags}
+
+We want a TOC which will have a heading for each |\part| (except
+the last part with the code source, which we decide not to
+include), and will additionally open up \autoref{part:globalcmds}
+up to paragraphs. To achieve this we added to this source various
+\csb{etocdepthtag.toc} commands, and it remains now to set the
+levels for each tag using \csb{etocsettagdepth} (this was used
+earlier in this document, in \autoref{sec:secondexample}, within a
+group hence it did not affect the other tables of contents).
+
+However, the package line styles do not display paragraphs, and the
+standard line styles of the document class give too much vertical
+spacing (in this context) when displaying a Part heading in the TOC. So
+we cook up our own, quickly designed line styles, in the style of
+\autoref{sec:firstexample} (but with a way to put page numbers on the
+right which is more like the method used by \LaTeX2e's
+|\@dottedtocline|; and multi-line headings now leave empty the area
+underneath the numbers contrarily to the code from
+\autoref{sec:firstexample}). And after a few minutes for choosing
+lengths (now that this has been done once, it can be recycled easily) we
+get:
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\etocsetnexttocdepth {all}
+\begingroup
+\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip
+\newcommand*{\EndParWithPagenoInMargin}
+ {\nobreak\hfill
+ \makebox[0.75cm][r]{\mdseries\normalsize\etocpage}%
+ \par}
+\renewcommand*\etoctoclineleaders
+ {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}}
+\newcommand*{\EndParWithPagenoInMarginAndLeaders}
+ {\nobreak\leaders\etoctoclineleaders\hfill
+ \makebox[0.75cm][r]{\mdseries\normalsize\etocpage}%
+ \par }
+\etocsetstyle {part}
+ {}
+ {\leavevmode\leftskip 1cm\relax}
+ {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}%
+ \etocname\EndParWithPagenoInMargin\smallskip}
+ {}
+\etocsetstyle {section}
+ {}
+ {\leavevmode\leftskip 1.75cm\relax}
+ {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}%
+ \etocname\EndParWithPagenoInMarginAndLeaders}
+ {}
+\etocsetstyle {subsection}
+ {}
+ {\leavevmode\leftskip 2.75cm\relax }
+ {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}%
+ \etocname\EndParWithPagenoInMarginAndLeaders}
+ {}
+\etocsetstyle {subsubsection}
+ {}
+ {\leavevmode\leftskip 4cm\relax }
+ {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}%
+ \etocname\EndParWithPagenoInMarginAndLeaders}
+ {}
+\etocsetstyle {paragraph}
+ {}
+ {\leavevmode\leftskip 5.5cm\relax }
+ {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}%
+ \etocname\EndParWithPagenoInMarginAndLeaders}
+ {}
+\etocsettagdepth {preamble} {none}
+\etocsettagdepth {overview} {part}
+%\etocsettagdepth {arbitrarily}{part}% not needed explicitely, keeps value
+%\etocsettagdepth {examples} {part}
+%\etocsettagdepth {surprising} {part}
+%\etocsettagdepth {linestyles} {part}
+\etocsettagdepth {globalcmds} {paragraph}
+\etocsettagdepth {custom} {part}
+%\etocsettagdepth {tips} {part}
+%\etocsettagdepth {etocandworld}{part}
+\etocsettagdepth {code} {none}
+\renewcommand\etoctoprule {\hrule height 3pt\relax }
+\renewcommand\etoctoprulecolorcmd {\color{blue}}
+\renewcommand\etocaftercontentshook
+ {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup }
+\etocruledstyle [1]{\Large\bfseries
+ \fbox{\makebox[8cm]{A TOC using depth tags}}}
+\sloppy
+\tableofcontents
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\section{Typesetting the TOC as a table (the old way)}
+\label{ssec:tocastableold}
+
+Due to, among other things, the fact that alignment cells create and close
+groups, and that by default definitions of \csb{etocname}, \csb{etocnumber},
+\csb{etocpage} made by \etoc are local, it was not easy to typeset a TOC as
+table with \etoc, prior to release |1.08|.
+
+Not only \csb{etocname} etc... caused a problem, but also the basic
+redefinition of \csa{contentsline} was made by \etoc only after the
+first argument to \csb{etocsettocstyle} had been executed, hence if this
+argument were to open a tabular, the \etoc redefinition of
+\csa{contentsline} would be done in the first cell of the first row and
+get lost thereafter.
+
+Thus one had to resort to the technique explained in \autoref{tocastree}
+of using the execution of \csa{tableofcontents} as a way to store data
+which was then displayed later.
+
+For the record, here is how the TOC from \autoref{sec:tocastable} was
+coded in the old days. We don't have here the problems with the
+positioning of |\hline|'s we face with the newer method; on the other
+hand we must manipulate token registers which are not familiar to most
+\LaTeX{} users (macros could be used, but would be more cumbersome,
+except perhaps if using the \eTeX{} \csa{unexpanded}).
+
+The method here is the most powerful because it filters out of the
+|.toc| file only the data we want (the other things are not ignored,
+they are executed but hopefully do not create havoc; typically they are
+language changing instructions, etc...),
+and we are less susceptible to fall potential victims of various
+external macros inserted in the |.toc| file by other packages.
+
+Note: rather than |\toks| registers it would be easier here to use \eTeX{}
+\csa{unexpanded} primitive. See for example \autoref{sec:mindmap}.
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\newtoks\toctabletok
+\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2
+ #1\expandafter\expandafter\expandafter {\expandafter\the\expandafter #1#2}}
+
+\newcommand*\PreparePart{%
+ \toks0 \expandafter{\etocthelinkednumber}%
+ \toks2 \expandafter{\etocthelinkedname}%
+ \toks4 \expandafter{\etocthelinkedpage}%
+ \edef\toctablepiece {\noexpand\hline
+ \noexpand\strut\the\toks0 &\noexpand\bfseries\the\toks2
+ &\the\toks4 \noexpand\\\noexpand\hline}%
+}
+\newcommand*\PrepareSection{%
+ \toks0 \expandafter{\etocthelinkednumber}%
+ \toks2 \expandafter{\etocthelinkedname}%
+ \toks4 \expandafter{\etocthelinkedpage}%
+ \edef\toctablepiece {\the\toks0 &\the\toks2 &\the\toks4 \noexpand\\}%
+}
+% new version for 1.07k, 2014/03/06
+\newcommand*{\PrepareSubsection}{%
+ \toks0 \expandafter{\etocthelinkednumber}%
+ \toks2 \expandafter{\expandafter\itshape\etocthelinkedname\strut}%
+ \toks4 \expandafter{\expandafter\itshape\etocthelinkedpage}%
+ \edef\toctablepiece{&\noexpand\makebox[1cm][c]{\the\toks0}%
+ \noexpand\parbox[t]{\dimexpr6cm-\tabcolsep\relax}
+ {\noexpand\sloppy\the\toks2}%
+ &\the\toks4 \noexpand\\}%
+}
+
+\begingroup
+\etocsetstyle{part}{}{}{\PreparePart \appendtotok\toctabletok\toctablepiece}{}
+
+\etocsetstyle{section}{}{}{\PrepareSection \appendtotok\toctabletok\toctablepiece}{}
+
+\etocsetstyle{subsection}{}{}{\PrepareSubsection\appendtotok\toctabletok\toctablepiece}{}
+
+\etocsettocstyle
+ {\toctabletok{\hypersetup{hidelinks}%
+ \begin{longtable}{|>{\bfseries}c|p{7cm}|r|}\hline
+ \multicolumn{3}{|c|}{\Large\bfseries\strut TABLE OF CONTENTS}%
+ \\\hline\hline}}
+ {\global\toctabletok\expandafter{\the\toctabletok\hline\end{longtable}}}
+\etocsettocdepth {subsection}
+\tableofcontents
+\the\toctabletok
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\clearpage
+\etocdepthtag.toc {etocandworld}
+
+\part{\etoc and the outside world}
+
+\section{Compatibility with other packages}
+
+\subsection{Generalities}
+
+The contents of the |.toc| file (if it already exists) are read into memory by
+\etoc once, at the time of |\begin{document}|.\footnote{New with |1.07m|.
+ Earlier versions read the |.toc| file at the time of
+ \csa{usepackage\{etoc\}}. Thanks to Denis Bitouzé who signaled a Babel
+ related problem, which turned out to be caused by this.}
+
+The |.toc| file remains available
+ to other packages for read operations until the location of the first table
+ of contents at which time a write stream is opened by \etoc and from that
+ point the file is erased until its contents are again written to the disk by
+ \LaTeX{} at the end of the compilation.
+
+Don't use |\if<condition> stuff \tableofcontents\fi|, but:
+\centeredline{|\if<condition> stuff \expandafter\tableofcontents\fi|}
+Also a |\else| immediately following \csa{tableofcontents} or
+\csa{localtableofcontents} requires a previous \csa{expandafter}.
+
+
+\etoc can not really cohabit with packages modifying the \csa{tableofcontents}
+ command: some sort of truce can be achieved if \etoc is loaded last, hence is
+ the winner.
+
+\begin{framed}
+ Do not modify the |\tableofcontents| command like this:
+ \centeredline{|\let\oldtableofcontents\tableofcontents|}
+ \centeredline{|\renewcommand\tableofcontents{\oldtableofcontents foo}|}
+ as this will make the |\label/\ref| mechanism impossible.
+
+ Rather use \centeredline{|\renewcommand\etocaftertochook{foo}|} and there
+ is also \csb{etocaftercontentshook} which is executed a bit
+ earlier\footnotemark{} just before the closing part of the toc display
+ style (and thus still within a group.)
+
+ Prepending is less of a problem (and anyhow there is also
+ \csa{etocbeforetitlehook} available to the user).
+
+ Under certain circumstances \etoc imposes its views on
+ \csa{tableofcontents} at the time of |\begin{document}|. You may thus have
+ to use \csa{AtBeginDocument} to delay your (necessarily ugly and
+ non-recommendable) patches. Patching after |\begin{document}| is
+ naturally possible but I feel almost a rebel to mention this to \LaTeX{} users!
+\end{framed}
+\footnotetext{contrarily to \csa{etocaftertochook},
+ \csa{etocaftercontentshook} is not executed if the |tocdepth| did not
+ allow the printing of the TOC.}
+
+\etoc \textbf{requires} the |.toc| file to use the \csa{contentsline}
+ macro. It \textbf{can not} work if there is no |.toc| file or if the
+ |.toc| file does not contain the relevant data or if the |.toc| file does
+ not use the \csa{contentsline} macro or if the \csa{contentsline} macro
+ does not invoke the \csa{l@<divisionunit>} macros.
+
+\subsection{Compatibility with \texttt{beamer}}
+
+For the very reasons mentioned right before, \etoc is incompatible with the
+|beamer| class. However, if |beamer| is used in an article mode, i.e., with
+the article class in conjunction with the |beamerarticle| package, then \etoc
+should work.
+
+\subsection{Compatibility with \texttt{Babel}}
+
+\begin{framed}
+ One must load \etoc \emph{after} \texttt{babel}. This is in order for
+ |babel|'s shorthands to be active at the time when \etoc loads the |.toc|
+ file.
+\end{framed}
+
+\subsection{Compatibility with \texttt{hyperref}}
+
+Please inform the author in case of issues: \etoc was from the start designed
+to be |100%| compatible with package |hyperref|.
+
+The macros \csa{etocname}, \csa{etocnumber}, and \csa{etocpage} contain the
+|hyperref| links, if present (note that the \emph{linktoc=all} option of
+|hyperref| tells it to put a link also in the page number corresponding to a
+given toc entry). For example, the tables of contents of the present document
+are all fully linked. It doesn't matter whether \etoc or |hyperref| is loaded
+first.
+
+% \typeout{ICI}
+% \showhyphens{Compatibility}
+% [] \T1/txss/m/n/10.95 Com-pat-i-bil-ity
+
+% 2015/11/12
+% Pour une raison que j'ignore dans la TOC principale j'ai un problème avec
+% cette sous-section.
+
+\subsection{Com\-pat\-i\-bil\-ity with \texttt{multicol}}
+
+\etoc loads the package |multicol|.
+
+\subsection{Compatibility with \texttt{tocloft}}\label{subs:tocloft}
+
+Release |1.07k| added compatibility with package
+|tocloft|:\footnote{\url{http://ctan.org/pkg/tocloft}} steps are
+taken to prevent the redefinition of |\tableofcontents| done by
+|tocloft| at |\begin{document}|.
+%
+As long as \etoc is left in compatibility mode the customization done by
+|tocloft| will be obeyed, for both the line styles and the TOC title.
+One may still benefit from the \emph{depth tags} management by \etoc,
+from its |\localtableofcontents|, from its |\label+\ref| mechanism. One
+may use |\etocsetstyle| to define via \etoc the layout for one TOC and
+then use rather |tocloft| for another one, if |\tableofcontents| follows
+\csb{etocstandardlines} and \csb{etocstandarddisplaystyle}. In this
+compatibility mode |\etocsetlevel{division unit}{6}| will render
+invisible the chosen division level, but exchanging levels is otherwise
+not possible.
+
+\begin{framed}
+ One should load \etoc \emph{after} \texttt{tocloft}. A warning is
+ issued if otherwise, because if \etoc is loaded before it will realize that at
+ the time of |\begin{document}| and trick \texttt{tocloft} into believing
+ having been loaded with the |titles| option.
+\end{framed}
+
+It is possible to customize (using package |tocloft| for
+example) throughout the document the macros \csa{l@section},
+\csa{l@subsection} ... and the effect will be seen in the next
+table of contents typeset by \etoc in compatibility mode.
+
+\subsection{Compatibility with the \texttt{memoir} class}
+
+Release |1.07l| has also improved the compatibility with the |memoir| class: its
+|appendix| level has been made known to \etoc. It is at the same level as
+|chapter|, thus the chapter line style should possibly do a test for some user
+defined boolean whose activation may be added to the |.toc| file at the suitable
+location via |\addtocontents{toc}{..}|, if one needs to distinguish the two
+kinds of divisions.
+
+\subsection{Compatibility with package \texttt{tocvsec2}}
+
+ \etoc used to be incompatible with package
+ |tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}}; it now cohabits, sort
+ of, as it deactivates |tocvsec2|'s modification of |\tableofcontents| (done in
+ the style above) and also cancels its other |toc|-related macros, but
+ reimplements partially their functionality with \csb{etocsettocdepth.toc}. By
+ the way, at least two latex runs are necessary for new uses of this command in
+ a document to have an effect in tables of contents.
+
+\subsection{Compatibility with package \texttt{tableof}}
+
+It is possible to use simultaneously \etoc and
+{\color{niceone}|tableof|}\footnote{\url{http://ctan.org/pkg/tableof}}. Release
+|1.08| of \etoc requires at least version |1.4a| of |tableof|. If
+\csb{etocglobaldefs} is put in the preamble, this must be after the loading of
+package |tableof|. {\color{niceone}|tableof|} command \csa{nexttocwithtags}
+should work as expected.
+
+{\color{niceone}|tableof|} commands \csa{tableof}, \csa{tablenotof}, ... will
+typeset the (a priori global) table of contents according to the document
+class defaults, obeying the \etoc depth tags; as explained in the |tableof|
+documentation they do not typeset a TOC title. They should \emph{not} be used
+in case \csb{etocglobaldefs} was issued before, except if its scope has been
+terminated since then, or \csb{etoclocaldefs} has cancelled its influence.
+
+\subsection{Compatibility with package \texttt{tocstyle}}
+
+Unknown. (not tested a.t.t.o.w).
+
+
+\section{\TeX nical matters}
+
+The \csb{etocname}, \csb{etocnumber}, \csb{etocpage} commands are protected
+against premature expansion. They contain suitable |hyperref| links if package
+|hyperref| is loaded and active for the TOC. The commands \csb{etoclink} and
+\csb{etocifnumbered} are also protected against premature expansion. Also
+\csb{etociffirst} and \csb{etoctoccontentsline}.
+
+On the other hand \csb{etocthename}, \csb{etocthenumber}, \csb{etocthepage}
+are \emph{not} protected against expansion. And neither are
+\csb{etocthelinkedname}, \csb{etocthelinkednumber}, \csb{etocthelinkedpage}.
+The latter contain hyperlink data, if present in the |.toc| file.
+
+The commands such as \csb{etocsetstyle}, \csb{etocsetlevel},
+\csb{etocsettocstyle}, \csb{etocmulticolstyle},
+\csb{etocruledstyle}, \csb{etocframedstyle} obey \LaTeX{}'s
+groups. All TOCs are typeset inside groups.
+
+When a \localtoc is inserted by the user in the document, a
+line containing an \etoc inner command and an identification
+number is added to the |.toc| file. The correct local table of
+contents will be displayed only on the next |latex| run.
+
+\section{Errors and catastrophes}
+
+ After using \csa{etocsetstyle} for one level, the remaining
+ uncustomized levels use the \etoc default styles (those
+ which are activated by \csa{etocdefaultlines}). One has to
+ make sure that all levels needed for the next table of
+ contents are mutually compatible: in particular the \etoc
+ default line styles expect each to be started in ``vertical mode''.
+
+ When using multiple \toc commands in a document, one should beware from adding
+ typesetting instructions directly in the |.toc| file, as they will be executed
+ by \etoc for all TOCs: even for a \localtoc it doesn't matter if that
+ instruction seems to concern material outside of its scope, it will get
+ executed nevertheless. If absolutely necessary (but this should never be)
+ these instructions should be done in such a way that they can be activated or
+ deactivated easily from the document source, as need be.
+
+ As is usual with toc and labels, after each change, one has
+ to run latex a certain number of times to let the produced
+ document get its final appearance (at least twice).\par
+
+\clearpage
+\etocdepthtag.toc {code}
+
+\part{The code}
+
+\localtableofcontents
+
+\section{Timestamp}
+
+This is the documentation as of \texttt{\etocdocdate}, printed from the
+source file with the time stamp \texttt{\etocdtxtimestamp}. The package
+version is \texttt{\etocpkgversion}, of \texttt{\etocpkgdate}.
+
+% STOP ENGLISH VERSION
+^^Afi
+
+^^Acatcode92 12
+
+^^Aifnum^^AForDeutsch=1
+
+ ^^Acatcode92 0
+
+
+% START GERMAN (DEUTSCH) VERSION
+
+% Note for translation (March 2015)
+% One should use "= and not - : for example
+% not \etocsetstyle-Befehl but rather \etocsetstyle"=Befehl.
+% This is important for hyphenation.
+
+\bookmark[named=FirstPage,level=1]{Titelseite}% 10 octobre 2013.
+
+\begingroup
+
+\etocsetstyle{part}
+ {\etocskipfirstprefix}
+ {\ifcase\pseudomodthree{\value{partco}}%
+ \or \appendpart\treetok\parttok {teal!60}% first
+ \or \appendpart\treetok\parttok {yellow!80}% second
+ \else\appendpart\treetok\parttok {green!50}% third and next ...
+ \fi
+ }
+ {\stepcounter{partco}%
+ \edef\treenode{node
+ {\unexpanded\expandafter{\etocthelinkednumber}.
+ \unexpanded\expandafter{\etocthelinkedname}}}%
+% grosse astuce: la première Partie ne sera pas embêtée par les trois sections
+% avant car ce qu'elles auront mis dans \parttok va être effacé.
+ \parttok\expandafter{\treenode}}
+ {\ifcase\pseudomodthree{\value{partco}}%
+ \or \appendpart\treetok\parttok {teal!60}% first
+ \or \appendpart\treetok\parttok {yellow!80}% second
+ \else\appendpart\treetok\parttok {green!50}% third and next ...
+ \fi
+ }
+
+\etocsetstyle{section}
+ {}
+ {}
+ {% define the section node
+ \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber}
+ \unexpanded\expandafter{\etocthelinkedname}}}}%
+ %\ifnum\value{partco}<9
+ \appendtotok\parttok\childnode
+ %\fi
+ }
+ {}
+
+\etocsetnexttocdepth{section}
+
+\etocsettocstyle
+ {\setcounter{partco}{0}%
+ \treetok{\node [root concept]{\normalfont{Das \etoc-Paket}\par {\normalsize\textsc
+ {Jean-François Burnol}\par \ttfamily jfbu (at) free (dot) fr}\par
+ {\normalsize Paketversion:\par \etocpkgversion{} (\etocDEpkgdate )\par}}}}
+ {\global\appendtotok\treetok{ ;}}
+
+\etocsettagdepth {preamble}{part}
+\etocsettagdepth {overview}{part}
+\etocsettagdepth {arbitrarily}{part}
+\etocsettagdepth {examples}{part}
+\etocsettagdepth {surprising}{part}
+\etocsettagdepth {linestyles}{part}
+\etocsettagdepth {globalcmds}{part}
+\etocsettagdepth {custom}{part}
+\etocsettagdepth {tips}{part}
+\etocsettagdepth {etocandworld}{part}
+\etocsettagdepth {code}{all}
+
+\etocinline\tableofcontents\label{toc:mindmaptitlepage}
+
+\tikzset {branch color/.style={concept color=#1!white,
+ every child/.append style={concept color=#1!white!30!white}},
+% ajout pour version de 1.08g
+ level width/.store in=\tikzlevelwidth,
+ level height/.store in=\tikzlevelheight
+ }%
+
+\global
+\setbox\TitlePageMindmapTOC\hbox {%
+%\begingroup
+\resizebox{\dimexpr\paperwidth-1cm\relax}!{%
+\begin{tikzpicture}[mindmap,
+ text width=2cm,
+ align = flush center,
+ growth function=\tikzmycustomgrowth,
+ nodes={concept},
+ concept color=orange!60,
+ root concept/.append style={font=\huge, text width = 6cm},
+ level 1/.append style={level distance=7cm, sibling
+ angle=360/10},% passage de 9 à 10 pour 1.08h, je pourrais aussi le calculer
+ level 2/.append style={level distance=10cm, sibling angle=30},%
+ level 2 concept/.append style={text width=2cm},
+ ]
+\the\treetok
+\end{tikzpicture}%
+}%
+%\endgroup
+}
+\endgroup
+
+\noindent\null
+
+\AddToShipoutPictureFG*{\put(.5\paperwidth,.5\paperheight)
+ {\makebox(0,0){\box\TitlePageMindmapTOC}}}
+
+\clearpage
+
+\indent\null
+
+\etocdepthtag.toc {preamble}
+%----
+% MAIN TOC
+%
+\etocsettocdepth {subsubsection}
+\etoctoclines
+\etocmarkboth\contentsname
+\etocmulticolstyle[1]
+ {\noindent\bfseries\Large
+ \leaders\hrule height1pt\hfill
+ \MakeUppercase{Inhaltsverzeichnis}\let\thefootnote\empty
+ \footnote{Erzeugt von der Quelldatei mit Zeitstempel
+ ``\etocdtxtimestamp''.}\setcounter{footnote}{0}}
+
+\pdfbookmark[1]{Inhaltsverzeichnis}{MAINTOC}%
+
+\begin{otherlanguage}{english}
+\begin{framed}
+ Übersetzt ins Deutsche von Felix Baral-Weber, Jenny Rothkrämer-Vogt,
+ Daniel Büttner, Claudia Dahl, Christian Otto und Christine Römer (FSU
+ Jena). Die letzte Aktualisierung der Übersetzung is vom
+ \texttt{\etocDEDEdocdate} (Paketversion \texttt{\etocDEDEpkgversion}).
+ Neuere Abschnitte bleiben auf English. Hinweise zur
+ Übersetzung an Christine\_Roemer at t-online dot de.
+
+\medskip
+
+ Starting with |1.08h|, about 25 code samples (especially the longer
+ ones) are incorporated into the PDF file (thanks to \textsc{Scott
+ Pakin}'s \href{http://www.ctan.org/pkg/attachfile}{attachfile}
+ package) as \emph{file attachement annotations}. Each file is represented
+ by an icon after the verbatim rendering of the corresponding code.
+ Clicking suitably on the icon will open a dialog to open or save the
+ file contents. This is much better than copy-paste which loses
+ indentation. There is also in some viewer a \emph{Comment pane} which can
+ be opened on the right side of the main window and which provides a
+ convenient clickable list of all these \emph{attachments annotations}.
+
+ PDF viewers unable to make these attachments accessible to the
+ user may replace the clickable icons by some blank space.
+\end{framed}
+\end{otherlanguage}
+
+\begingroup
+ \etocsetlevel{subsection}{3}
+ \etocsetlevel{subsubsection}{6}
+\tableofcontents \label{toc:main}
+\endgroup
+
+% Attention Vendredi 09 septembre 2016 à 21:49:17
+\clearpage
+
+\phantomsection\addcontentsline{toc}{section}{\abstractname}
+\begin{abstract}
+ Das \etoc"=Paket gibt dem Nutzer lückenlose Möglichkeiten, die Einträge des
+ Inhaltsverzeichnis individuell über \emph{Name}, \emph{Nummer}, und
+ \emph{Seitenzahl} für jede gliedernde Einheit zu setzen. Dieses wird durch die
+ Definition von \emph{Zeilenstilen (line-styles)} für jede Unterteilungsstufe
+ des Dokuments realisiert. Das Paket bietet darüber hinaus seinen eigenen
+ Zeilenstile. Einfachere werden als Beispiele in dieser Dokumentation
+ angeboten. Die einfachste Nutzung wird durch die Verwendung der
+ Layout"=Hilfsmittel, von Paketen die sich mit Listen"=Umgebungen beschäftigen,
+ gewährt.
+
+ In Hinsicht auf das \emph{globale Inhaltsverzeichnis} bietet \etoc\
+ vordefinierte Stile, die auf der Mehrspaltenansicht mit optionalen,
+ unterstrichenen Titeln oder eingerahmten Inhalten basieren.
+
+ Der \csa{tableofcontents}"=Befehl kann beliebig mehrfach benutzt werden. Er hat
+ die Variante \csa{localtableofcontents}, welche die Inhaltsangabe 'local' zur
+ aktuellen Dokumenten"=Sektion ausgibt. Eine Erweiterung der
+ \csa{label}/\csa{ref}-Syntax erlaubt die Reproduktion (mit anderem Layout)
+ einer lokalen Inhaltsangabe, die irgendwo anders im Dokument definiert wurde.
+
+ Mit "`tiefen Tags"' erhält man noch feinere Kontrolle über jede Inhaltsangabe
+ und darüber, welche unterteilende Einheit angezeigt werden soll, oder nicht.
+
+ Mit \emph{Kompatibilismus} wird die Formatierung der Dokumentklasse geerbt
+ (die womöglich von anderen Paketen verändert wurde); und die Formatierung, die
+ von der Dokumentklasse (die womöglich von anderen Paketen verändert wurde)
+ geerbt wird.
+
+ Die Zuweisung von Ebenen zu den unterteilenden Einheiten kann zu jeder Zeit
+ geändert werden und \etoc kann dadurch in einer ziemlich generellen Weise
+ genutzt werden, um selbsterstellte 'Listen von' zu erzeugen. Keine
+ Zusatzdateien werden zusätzlich zu der Standard-|.toc|-Datei benutzt.
+\end{abstract}
+
+\section{Vorwort}
+
+Andere populäre Pakete, die sich mit Inhaltsangaben befassen, sind
+|tocloft|, |titletoc| und |minitoc|. Warum also ein anderes?
+Ich habe \etoc erst für mich selbst entwickelt und
+später von den anderen Paketen erfahren.
+
+Wie es auch in der |tocloft|-Dokumentation erklärt wird, ist das
+Standard-\LaTeX -Layout für Inhaltsangaben in den Klassen"=Definitionen
+begraben. Im Besonderen sind die meisten Längen hart codiert und der
+einzige Weg für den Benutzer, sie zu ändern, ist, die Klasse in den
+Dokumenten"=Ordner zu kopieren und dann die Längen zu ändern.
+Die vernünftigere Alternative ist die Benutzung eines auf das Veränderungsziel
+gerichteten Pakets, wie |tocloft| oder eine andere flexible Dokumentklasse.
+
+Freilich, obwohl jetzt hoffentlich nichts mehr hart codiert ist,
+muss man noch immer das Paket oder die Klassen"=Definitionen durchgehen.
+Das bedeutet, dass man sich viele (vermutlich große) Menge an Makros
+merken muss, die nur dieser Aufgabe dienen. Und man wird immer
+auf die Anpassung eines zu Anfang gegebenen Layouts eingeschränkt sein.
+
+Der Sinn von \etoc ist ein anderer. Der Nutzer wird sich mit
+\emph{Name}, \emph{Nummer} und der \emph{Seitenzahl} beschäftigen.
+Diese korresponieren mit jeder Dokumenten"=Unterteilung (und können in
+einer Zeile der |.toc|-Datei gefunden werden). Sie können, wenn gewünscht,
+durch die Befehle \csb{etocname}, \csb{etocnumber} und \csb{etocpage}
+abgerufen werden.
+
+\etoc scheint (mindestens teilweise) mit den Dokument"=Klassen |article|,
+|book|, |report|, |scrartcl|, |scrbook|, |scrreprt| und |memoir|
+kompatibel zu sein. Seit der Version |1.07k| ist es möglich \etoc
+gleichzeitig mit |tocloft| zu benutzen.
+
+\clearpage
+
+\section{Lizenz}
+
+\begingroup\ttfamily\small\hyphenchar\font -1
+ \parindent0pt
+ \obeyspaces\obeylines
+\etocLicense\endgroup
+
+
+\clearpage
+
+\etocsettocdepth {subsection}
+
+\etocdepthtag.toc{overview}
+
+\part{Überblick}\label{part:overview}
+
+\thispartstats
+
+\invisiblelocaltableofcontents \label{toc:overview}
+
+\section{Muss ich Computerfreak sein, um \etoc benutzen zu können?}
+
+Nicht wirklich. Der einfachste Weg ist die Benutzung von
+|enumerate|-Umgebungen mit den Anpassungsmöglichkeiten von
+Paketen wie |enumitem|, \footnote{\url{http://ctan.org/pkg/enumitem}}
+um von \etoc aus der |.toc|-Datei die abgerufenen Daten anzuzeigen.
+Die Daten bestehen aus \emph{Name} (\csb{etocname}), \emph{Gliederungsnummer}
+(\csb{etocnumber}) und \emph{Seitenzahl} (\csb{etocpage}).
+
+Dieses wird \hyperref[toc:a]{zu Beginn} von \autoref{part:linestyles}
+gezeigt. Anspruchsvollere Beispiele würden anspruchsvollere
+|enumitem|-Optionen benutzen. Man könnte nun sagen, dass der Nutzer
+sich einige Anpassungen merken muss. Und das ist auch so, aber die
+Syntax und Optionsbezeichnungen, die es zu behalten gilt, sind
+in keinster Weise ähnlich.
+
+Die Methode wird \hyperref[sec:firstexample]{später}
+(\autoref{sec:firstexample}) erklärt. Dafür ist ein wenig Wissen über
+|\leftskip|, |\rightskip| usw. notwendig. Und eine Ausarbeitung , deren
+Code kann man hier (\autoref{ssec:tocwithdepthtags}) finden, die Nachahmung des
+Standardaussehens einer Inhaltsangabe.
+
+\begin{otherlanguage}{english}
+ An even closer emulation of the |book| class design is now included in
+ this documentation as \autoref{sec:thirdexample}.
+\end{otherlanguage}
+
+Wie Sie beim Lesen dieser Anleitung noch sehen werden, ist \etoc
+ziemlich vielfältig (ganz besonders, weil es erlaubt, die Hierarchie jeder
+unterteilenden Einheit des Dokuments zu re-definieren) und man kann damit
+überraschende Effekte erreichen: \autoref{part:surprising} handelt davon. Mehr
+davon gibt es noch in \autoref{part:tipsandtricks}.
+
+\begin{framed}
+\setcounter{mycounti}{0}%
+ \etocinline
+\etocsetlevel{part}{1}
+\etocsetlevel{chapter}{1}
+\etocsetlevel{visibletoc}{0}
+\etocsetstyle{visibletoc}
+ {}
+ {\stepcounter{mycounti}}
+ {}
+ {}
+\etocsettocstyle{}{}
+\etocsetnexttocdepth{0}
+\tableofcontents
+Ein ganz besonders wichtiger Aspekt von \etoc ist, dass es darauf ausgelegt ist,
+viele Inhaltsangaben in dem selben Dokument zu erzeugen, \emph{Mit nur einer
+ |.toc|-Datei.} Die gegenwärtige Dokumentation enthält \arabic{mycounti}
+sichtbare Inhaltsangaben (und ein paar unsichtbare). Sie benutzt dabei nur eine
+|.toc|-Datei!\footnotemark{} Darum sollte man zweimal nachdenken, bevor man
+manuell extra Befehle zu der |.toc|-Datei hinzufügt (siehe
+\autoref{sec:addingtotoc}).
+\end{framed}
+
+\footnotetext{Das Selbstzählen wurde durch eine Inhaltsangabe erreicht, die
+in einen gerahmten Paragraphen eingesetzt wurde! \dots Die Technik für diese Art
+von Effekt wird später erklärt.}
+
+
+\subsection{Beschränkungen in der Benutzung von Listen"=Umgebungen für
+Inhalsangaben}
+\label{ssec:limitations}
+
+Es gibt ein paar Einschränkungen für das Nutzen von Listen"=Umgebungen
+beim Setzen der TOCs. Eine davon liegt dem
+Geltungsbereichsbeschränkungen der Umgebungen inne. Die |.toc|-Datei
+könnte neben den Informationen zum Stil einige andere Befehle
+beinhalten, die Probleme hervorrufen können
+(\LaTeX -Umgebungen schaffen Gruppen.).
+
+Darum machen die eingebauten "`Zeilenstile"' (line styles), wie sie von
+\etoc vorgeschlagen werden (die durch die
+\hyperref[toc:main]{Hauptinhaltsangabe} in diesem Dokument gezeigt
+werden) keinen Gebrauch von Umgebungen. Tatsächlich nutzt in dieser
+Gebrauchsanweisung nur die \hyperref[toc:a]{Inhaltsangabe} zu Beginn von
+\autoref{part:linestyles}, die in \autoref{toc:allsubsections} und auch
+die in \autoref{etocthelink}, \texttt{enumerate}- oder
+\texttt{itemize}-Umgebungen, um Zeilenstile anzugeben.
+
+\section{Zeilenstile und Stile der Inhaltsangabe (toc display style)}
+
+Eine Unterscheidung muss zwischen den \emph{Zeilenstilen},
+\emph{z.\,B.} der Art und Weise wie Namen, Kapitelnummern und
+Seitenzahlen auf jedem Level angezeigt werden und dem
+\emph{Inhaltsangabenstil} (mangels einer besseren Bezeichnung)
+gemacht werden. Dieser sagt, wie die Titel gesetzt werden sollen,
+ob oder nicht ein Eintrag in die |.toc|-Datei gemacht werden soll,
+ob oder nicht der Inhalt mit mehreren Spalten gesetzt werden soll,
+usw..., der letztere wird von \csa{etocsettocstyle} (oder einem
+höherrangigen Befehl) geregelt. Das erste wird von
+\csa{etocsetstyle} initialisiert.
+
+\subsection{\csbhyp{etocsetstyle} für den Zeilenstil}
+
+Das ist der Befehl, der \etoc sagt, was es mit \csa{etocname}, \csa{etocnumber},
+und \csa{etocpage} machen soll. Er hat fünf Pflichtargumente: Das erste ist der
+Name der unterteilenden Einheit: Im Vorhinein bekannte Namen sind |book|,
+|part|, |chapter|, |section|, |subsection|, |subsubsection|, |paragraph|,
+|subparagraph| und viele weitere können anhand dem \csb{etocsetlevel}"=Befehl
+einem (numerischen) Level zugewiesen werden.\footnote{Mit der
+ \texttt{memoir}-Dokumentklasse kennt \etoc \texttt{Appendix} als
+ Kapitelüberschrift.}
+
+
+%% Änderungen zur Übersetzung ins Deutsche:
+%% jf b has added here forgotten emphasized text for 2)&3) and
+%% removed various \newline.
+Die vier anderen Argumente von \csb{etocsetstyle}
+spezifizieren:
+1) \emph{Was zu tun ist, wenn dieses Level zuerst nach einem höheren
+ auftritt,}
+2) \& 3) (Zwei Argumente, ein 'Präfix' und ein 'Inhalt')
+\emph{Was zu tun ist, wenn ein neuer Eintrag dieses Typs gefunden wird,}
+und 4) \emph{Das letzte Argument ist der Code, der ausgeführt
+ wird, wenn eine unterteilende Einheit von höherer Wichtigkeit wieder von oben
+ getroffen wird.}
+
+
+\subsection{\csbhyp{etocsettocstyle} für den Stil der Inhaltsangabe}
+
+Der \csb{etocsettocstyle}"=Befehl erlaubt es festzulegen,
+was vor und nach den Zeileneinträgen eines Inhaltsverzeichnis
+passieren soll, und im Speziellen wie die Titel ausgegeben
+werden sollen. Er hat zwei Argumente. Das erste wird vor
+der Inhaltsangabe ausgeführt (typischerweise wird es Inhalte
+ausgeben und definiert passende Markierungen für die
+Seitenüberschriften). Der Zweite wird nach der Inhaltsangabe
+ausgeführt.
+
+\etoc bietet vier (anpassbare) höhere Inhaltsabgabenstile:
+\csb{etocmulticolstyle}, \csb{etoctocstyle},
+\csb{etocruledstyle} und \csb{etocframedstyle}.
+Alle nutzen das |multicol|-Paket mit standardmäßig zwei
+Spalten (Einspaltenmodus kann durch das optionale Argument
+ |[1]| erreicht werden).
+
+Diese Befehle müssen entweder von \toc oder \localtoc gefolgt sein.
+
+\subsection{Kompatibilismus}\label{subs:compat}
+\label{etoctoclines}
+\label{etocstandardlines}
+
+Vor den "`Zeilenstilen"' und den "`Inhaltsangabenstilen"' besteht
+die Möglichkeit in den Kompabilitätsmodus zu wechseln, der die
+Standardeinstellungen der Dokumentenklasse nimmt.
+\footnote{Für den "`Inhaltsangabenstil"' überprüft \etoc, ob
+es die Klassen kennt, wenn nicht, fällt es zur |article|-Klasse
+zurück. Es wird auch überprüfen, ob \texttt{tocloft} die
+Inhaltsangaben"=Datei verändert hat.}
+Dieses wir wie folgt aktiviert:\\
+\makebox[5.2cm][l]{\csb{etocstandardlines}}
+ |% `Zeileneinträge' wie ohne \usepackage{etoc}|\\
+\makebox[5.2cm][l]{\csb{etocstandarddisplaystyle}}
+ |% `Inhaltsstil' wie ohne \usepackage{etoc}|
+
+Wenn der Befehl \csa{etocsetstyle} \emph{noch nicht in der Präambel benutzt
+worden ist}, wird das Paket in |\begin{document}| sitzen (in diesem
+Kompatibilismus). Folglich sollte \csa{usepackage\{etoc\}} hoffentlich
+nichts am Aussehen eines im Vorhinein vorhandenen Dokuments der Klassen
+|article|, |book|, |report|, |scrartcl|, |scrbook|, |scrreprt| und |memoir|
+ändern.
+
+Jede Benutzung von \csa{etocsetstyle} in der \emph(Präambel des Textkörpers) des
+Dokuments schaltet den Kompabilitäsmodus für Zeilenstile aus, behält ihn aber
+für den Inhaltsabgabenstil.
+
+Man kann ihn für Zeilenstile anhand von \csb{etocstandardlines}
+wieder aktivieren. \csb{etoctoclines} reaktiviert Zeilenstile wie
+Sie mit der Hilfe von \csa{etocsetstyle} definiert wurden, wenn deren
+Gültigkeitsbereich nicht auf eine Gruppe oder eine Umgebung beschränkt
+war.
+
+Der Befehl \csb{etocdefaultlines} setzt den Zeilenstil darauf zurück,
+wie er intern von \etoc in \autoref{etocdefaultlines} beschrieben wurde.
+
+Sogar wenn \csb{etocsetstyle} benutzt wurde, bleibt der globale Stil
+zu Beginn, wie er in der Dokumentenklasse definiert wurde (oder von dem
+|tocloft| Paket). Man muss den Befehl \csb{etocsettocstyle} oder seine
+Varianten setzen, um diesem Kompatibilitätsmodus auf dem
+"`Inhaltsangebenstil"'-Level zu beenden. Er wird reaktiviert,
+wenn \csb{etocstandarddisplaystyle} benutzt wird.
+
+\section{Ein erstes Beispiel}
+\label{sec:firstexample}
+
+Hier sehen sie ein erstes Beispiel zur Beschreibung der Zeilenform.
+Wir fügen die Quelldatei direkt nach dem Start von \autoref{part:overview} ein:
+
+\centeredline{|\invisiblelocaltableofcontents \label{toc:overview}|}
+%
+Dieses erstellt ein Label |toc:overview|, das wir von jeder Stelle im Dokument
+benutzen können:
+%
+\centeredline{|\tableofcontents \ref{toc:overview}|}
+%
+Und da wir |\invisible...|,\footnote{Das ist eine Abkürzung, um die |tocdepth|
+ temporär auf |-3| zu setzen. Dieses sagt \etoc, die Inhaltsangabe und die
+ Überschrift nicht auszugeben.} benutzt haben, existiert die lokale
+Inhaltsangabe nur durch seine Klone anderswo im Dokument.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begingroup\parindent 0pt \parfillskip 0pt \leftskip 0cm \rightskip 1cm
+\etocsetstyle {section}
+ {}
+ {\leavevmode\leftskip 0cm\relax}
+ {\bfseries\normalsize\makebox[.5cm][l]{\etocnumber.}%
+ \etocname\nobreak\hfill\nobreak
+ \rlap{\makebox[1cm]{\mdseries\etocpage}}\par}
+ {}
+\etocsetstyle {subsection}
+ {}
+ {\leavevmode\leftskip .5cm\relax }
+ {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}%
+ \etocname\nobreak\hfill\nobreak
+ \rlap{\makebox[1cm]{\etocpage}}\par}
+ {}
+\etocsetstyle {subsubsection}
+ {}
+ {\leavevmode\leftskip 1.5cm\relax }
+ {\mdseries\normalsize\makebox[1cm][l]{\etocnumber}%
+ \etocname\nobreak\hfill\nobreak
+ \rlap{\makebox[1cm]{\etocpage}}\par}
+ {}
+\etocruledstyle[1]{\bfseries \Large My first \etoc: TOC von
+ \autoref{part:overview} (\nameref{part:overview})}
+\tableofcontents \ref {toc:overview}
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+Anhand von \csb{etocdefaultlines} oder dem Stil der Standard"=Dokumentklasse,
+anhand von \csb{etocstandardlines}, könnten wir auch die Zeilenform benutzen,
+die von \etoc definiert wird. Hier waren wir jedoch ein wenig ehrgeiziger und
+wollten unser eigenen Stil anlegen. Die Technik ist einfach: Jede Überschrift
+ist an sich ein eigener Paragraph, der sich über mehrere Zeilen erstrecken kann;
+es ist für seinen |\leftskip| selbst verantwortlich.
+
+Dieses ist ein einfaches Design, das keine Maßnahmen zum Zeilenumbruch
+bereitstellt. Diese sollten zwischen Abschnitten und Unterabschnitten, etc.
+unterbunden werden, da wir es nur für die Inhaltsangabe von diesem Abschnitt
+nutzen. Durch die Abschnitte als höchste Ebene entstand keine Notwendigkeit,
+einen Stil für den ganze Teil zu erstellen. (Wir definierten einen
+Unterabschnitt"=Zeilenstil, aber wie sich herausstellt, gibt es keine
+Unterabschnitte in diesem Teil). Die zwei Befehle, die benutzt wurden,
+spezifizieren den Zeilen"=Stil (\csb{etocsetstyle}) und den globalen
+Inhaltsausgabestil (\csb{etocruledstyle}).
+
+Das |\rightskip| wird von allen angewandt und schafft Platz, wo die Seitenzahlen
+gedruckt werden. Einzelheiten dieser Technik werden in dem
+\autoref{sec:secondexample} und \autoref{ssec:tocwithdepthtags} benutzt. Hier
+wird eine Inhaltsangabe mit Abschnitten und Paragraphen verwendet. Beide
+erlauben mehrzeilige Überschriften und nutzen einer Technik, die Seitenzahlen
+mit dem richtigen Seitenabstand auszugeben. Dieses wurde von der Funktionsweise
+von Makros aus \LaTeX2e's |\@dottedtocline| inspiriert.
+
+Hier der Code:
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\section{Ein zweites Beispiel}
+\label{sec:secondexample}
+
+Dieses zweite Beispiel zeigt nur den Inhalt von \autoref{part:linestyles} und
+\autoref{part:globalcmds}. Diese Auswahl wird durch die Technik von \emph{depth
+ tags} realisiert, die in \autoref{etocsettagdepth} und
+\autoref{ssec:tocwithdepthtags} beschrieben wird. Dessen Layout ist in etwa wie
+das von der \hyperref[toc:main]{Hauptinhaltsangabe}, obwohl die Zeilenstile ganz
+anders programmiert sind.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begingroup
+\newcommand*{\DotsAndPage}
+{\nobreak\leaders\hbox{\bfseries\normalsize\hbox to .75ex {\hss.\hss}}%
+ \hfill\nobreak
+ \makebox[\rightskip][r]{\bfseries\normalsize\etocpage}\par}
+
+\etocsetstyle {part}
+{\parindent 0pt
+ \nobreak
+ \etocskipfirstprefix}
+{\pagebreak[3]\bigskip}
+{\large\rmfamily\bfseries\scshape\centering
+ \etocifnumbered{Part \etocnumber{} -- }{}\etocname\par}
+{}
+
+\etocsetstyle {section}
+{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip
+ \nobreak\medskip
+ \etocskipfirstprefix}
+{\leftskip 0pt \rightskip .75cm \parfillskip-\rightskip
+ \pagebreak[1]\smallskip}
+{\normalsize\rmfamily\bfseries\scshape
+ \etocnumber. \etocname\DotsAndPage }
+{\parfillskip 0pt plus 1fil\relax }
+
+\etocsetstyle {subsection}
+{\leftskip1cm\rightskip .75cm \parfillskip 0pt plus 1fil\relax
+ \nobreak\smallskip}
+{}
+{\footnotesize\sffamily\mdseries\itshape
+ \etocname{} (\etocnumber, p. \etocpage). }
+{\par\medskip}
+
+\etocsettagdepth {preamble} {none}
+%\etocsettagdepth {overview} {none}% not needed explicitely, keeps value
+%\etocsettagdepth {arbitrarily}{none}
+%\etocsettagdepth {examples} {none}
+%\etocsettagdepth {surprising} {none}
+\etocsettagdepth {linestyles} {subsection}
+%\etocsettagdepth {globalcmds} {subsection}
+\etocsettagdepth {custom} {none}
+%\etocsettagdepth {tips} {none}
+%\etocsettagdepth {etocandworld}{none}
+%\etocsettagdepth {code} {none}
+
+\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
+\etocsetnexttocdepth {subsection}
+\tableofcontents
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+Der Code:
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\section{Eine wunderschöne Beispielthese}
+
+Hier ist noch ein relativ einfaches Beispiel für die Verwendung der
+Paket"=Funktionsweisen. Lassen Sie uns einige Linienstile einrichten. Wir wählen
+einen Stil für Abschnitte und Unterabschnitte, welche für die Abschnitte und
+Unterabschnitte in einem durchschnittlichen Memoirenumfang geeignet wären. Die
+Linienstilspezifikationen haben eine gewisse Redundanz für die Klarheit, und sie
+interessieren sich nicht dafür, was bei möglichen Seitenumbrüchen zu tun ist.
+Auch sind sie nicht besorgt über die potentielle mehrspaltige Nutzung.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begingroup % wir starten, um eine Gruppe zu behalten
+\newlength{\tocleftmargin} \setlength{\tocleftmargin}{5cm}
+\newlength{\tocrightmargin} \setlength{\tocrightmargin}{1cm}
+
+\etocsetstyle{section} % wird vorgegeben, ein Kapitel zu sein
+{\addvspace{1ex}\parfillskip0pt
+ \leftskip\tocleftmargin % (bereits im Titel getan)
+ \rightskip\the\tocrightmargin plus 1fil
+ \parindent0pt\color{cyan}} % (bereits getan)
+{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode}
+{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname
+ \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par}
+{}
+
+\etocsetstyle{subsection} % wird vorgegeben, ein Abschnitt zu sein
+{}
+{\mdseries\large\addvspace{.5ex}\leavevmode}
+{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}%
+ \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par}
+{}
+
+\def\tmptitle{My Beautiful Thesis}
+\etocsettocstyle{\color{cyan}\parindent0pt \leftskip\tocleftmargin
+ \leavevmode\leaders\hrule height 1pt\hfill\
+ \huge\textit{\tmptitle}\par}{\bigskip}
+
+\tableofcontents \ref{toc:overview}
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+
+% \clearpage % ATTENTION 28 mars 2015
+
+\section{Verlinkte Liste der Hauptbefehle}
+% 16 octobre
+
+\begingroup\raggedcolumns
+\advance\linewidth18pt
+\begin{multicols}{3}\parindent0pt\relax
+ \csb{etocaftercontentshook}\par
+ \csb{etocaftertitlehook}\par
+ \csb{etocaftertochook}\par
+ \csb{etocbeforetitlehook}\par
+ \csb{etocdefaultlines}\par
+ \csb{etocdepthtag.toc}\par
+ \csb{etocdisplay}\par
+ \csb{etocframedstyle}\par
+ \csb{etocframed}\par
+ \csb{etociffirst}\par
+ \csb{etocifnumbered}\par
+ \csb{etocignoredepthtags}\par
+ \csb{etocignoretoctocdepth}\par
+ \csb{etocinline}\par
+ \csb{etoclink}\par
+ \csb{etoclocaltop}\par
+ \csb{etoclocalframed}\par
+ \csb{etoclocalmulticol}\par
+ \csb{etoclocalruled}\par
+ \csb{etocmulticolstyle}\par
+ \csb{etocmulticol}\par
+ \csb{etocname}\par
+ \csb{etocnumber}\par
+ \csb{etocobeydepthtags}\par
+ \csb{etocobeytoctocdepth}\par
+ \csb{etocpage}\par
+ \csb{etocruledstyle}\par
+ \csb{etocruled}\par
+ \csb{etocsetlevel}\par
+ \csb{etocsetnexttocdepth}\par
+ \csb{etocsetstyle}\par
+ \csb{etocsettagdepth}\par
+ \csb{etocsettocdepth.toc}\par
+ \csb{etocsettocdepth}\par
+ \csb{etocsettocstyle}\par
+ \csb{etocskipfirstprefix}\par
+ \csb{etocstandarddisplaystyle}\par
+ \csb{etocstandardlines}\par
+ \csb{etocthelinkedname}\par
+ \csb{etocthelinkednumber}\par
+ \csb{etocthelinkedpage}\par
+ \csb{etocthelink}\par
+ \csb{etocthename}\par
+ \csb{etocthenumber}\par
+ \csb{etocthepage}\par
+ \csb{etoctoccontentsline}\par
+ \csb{etoctoclines}\par
+ \csb{localtableofcontents}\par
+ \csb{localtableofcontentswithrelativedepth}\par
+ \csb{tableofcontents}\par
+%\vspace{5\baselineskip}\hrule height 0pt
+\end{multicols}
+\endgroup
+
+
+\clearpage
+% 15 octobre, je teste les tags
+\etocdepthtag.toc {arbitrarily}
+
+\part{Beliebig viele TOCs und lokale Versionen davon}
+% 13 octobre, ceci était une section avant
+
+\thispartstats
+
+\etocsettocstyle{}{}
+\etocstandardlines
+\localtableofcontents
+
+\section{Die \toc-, \localtoc- und \localtocwrdp"=Befehle}
+\label{tableofcontents}
+\label{localtableofcontents}
+\label{localtableofcontentswithrelativedepth}
+
+\begin{description}
+\item[\toc] \etoc erlaubt beliebig viele \csa{tableofcontents}"=Befehle in
+ihrem Dokument. Die Zeilen- und Inhaltsangabenstile können
+natürlich dazwischen geändert werden.
+\item[\localtoc] Außerdem setzt
+\csa{localtableofcontents} lokale Inhaltsangaben: \emph{z.\,B.} alle
+Abschnitte und Unterabschnitte innerhalb eines bestimmten
+Kapitels oder alle Unterabschnitte und tiefer innerhalb eines gegebenen
+Unterabschnitt usw.%
+\begin{otherlanguage}{english}
+\footnote{As is explained in \autoref{sec:labeling} the syntax allows to
+ create somewhere a local table of contents and to display it at some other
+ location either before or after its origin.}%
+%
+\footnote{As is explained in \autoref{sec:tocdepth} \etoc allows at anytime to
+ locally redefine the numeric levels associated to named ones, which brings
+ great flexibility to achieve special effects, all done using only a single
+ auxiliary file, the standard |.toc| file.}
+%
+\item[\localtocwrdp\marg{number}] can be used to override the document or
+ current tocdepth setting (see \autoref{sec:tocdepth} for a discussion of
+ tocdepth) to become relative to where the local TOC originates. For example,
+ assuming the default numeric level assignments to standard sectioning units
+\begin{verbatim}
+\section{This is a section}
+\localtableofcontentswithrelativedepth{+2}
+\end{verbatim}
+ will create a local table of contents taking into account the subsections
+ and subsubsections inside this section, independently of what is the value
+ of the |tocdepth| counter at this position in the document. If the numeric
+ argument had been |3|, the local TOC would have displayed also paragraphs.
+ If the section had been a chapter, and again for a relative tocdepth of |2|,
+ the taken into account levels would have been sections and subsections.%
+%
+\footnote{The situation may be more complex, as the |.toc| file itself may
+ well contain \texttt{\string\setcounter\{tocdepth\}\{...\}} commands. This
+ is not recommended pratice with \etoc. See the discussion of
+ \csb{etocsettocdepth.toc} and \csb{etocdepthtag.toc} for more on this.}
+\end{otherlanguage}
+\end{description}
+
+The macro \localtocwrdp is \textbf{new with |1.09|}.%
+%
+\footnote{Thanks to Tony \textsc{Roberts} for feature request.}
+%
+
+\section{Beschriften und anderswo wieder benutzen}
+\label{sec:labeling}
+
+\etoc erlaubt das Labeln von Inhaltsangaben, beispielsweise mit
+\csa{label\{toc:A\}}, und wird es woanders
+\csa{tableofcontents}\csa{ref\{toc:A\}}, wenn gewollt, wieder anzeigen. Das
+eigentliche Layout (inklusive Titel) wird lokal bestimmt. Die Zeilen- und
+Inhaltsangabenstile (inklusive Titel) sind die aktuellen und der Wert von
+|tocdepth| leistet Folge. Hier ein Beispiel: Die Inhaltsangabe von
+\autoref{part:custom} ist innerhalb eines \hyperref[toc:d]{float}, der auf
+dieser Seite erscheint: \vpageref{toc:d}.
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begin{figure}[ht!]
+ \centering
+ \begingroup
+ \etocstandardlines
+ \renewcommand{\etocbkgcolorcmd}{\color{green!5}}
+ \renewcommand{\etocbelowtocskip}{0pt\relax}
+ \fboxsep1ex
+ \etocframedstyle [1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone
+ \hyperref[toc:c]{I am from far away}}}}
+ \tableofcontents \label{toc:d} \ref{toc:c}
+ \endgroup
+\end{figure}
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+Wir benutzen dies:
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+Wichtig: Man sollte \toc|\ref{toc:d}| nicht woanders benutzen. Um wieder zu
+Klonen, muss man eine Refernz zum Original"=Label benutzen: \toc|\ref{toc:c}|.
+
+\section{Eine mächtige Funktionsweise von \etoc: Die Wieder\-zuweisung von
+Levels mit von \csbhyp{etocsetlevel}}
+\label{sec:tocdepth}
+
+Die intrinsischen Level, die durch \etoc manipuliert wurden, sind numerisch: von
+|-2| (welches |book| aus der |memoir|-Klasse entspricht) bis hinab zu |5|
+(|subparagraph|). Jedoch kann die Zuweisung eines numerischen Level zu einem
+gegebenen Namen zu jeder Zeit mit de Befehl
+\csb{etocsetlevel}\marg{level\_name}\marg{number} abgeändert werden. Daraus und
+aus der Benutzung des \LaTeX -|tocdepth|-Zählers resultieren mächtige
+Anwendungszwecke: \meta{level\_name} muss sich nicht mit dem eigentlichen
+Unterteilungsbefehls des Dokuments überschneiden. Außerdem kann \etoc genutzt
+werden, um beliebige "`Listen von Dingen"' ohne weitere Hilfsdateien, außer der
+|.toc|-Datei, zu erstellen. Dieses wird in \autoref{part:surprising} weiter
+erklärt.
+
+\begin{framed}
+ Es wird oft gesagt, dass Unterteilungslevel von |\part| in den
+ Standardklassen, die keinen |\chapter|"=Befehl haben, gleich |0| sind, und in
+ denen mit |\chapter|"=Befehl gleich |-1| ist. Das ist auch \emph{richtig}, wenn
+ man die \emph{automatische Nummerierung}, gesteuert durch den Wert des
+ |secnumdepth|-Zählers, betrachtet. Aber es ist \emph{falsch}, wenn man den
+ Effekt des |tocdepth|-Zählers sieht. Setzt man |tocdepth| in der |article|
+ -Klasse direkt vor |\tableofcontents| auf |-1|, verhindert das \emph{nicht},
+ dass Abschnitte in der Inhaltsangabe aufzutauchen. Man muss es dafür auf |-2|
+ stellen, ganz egal ob in der |article|- oder der |book|-Klasse.
+
+ Die kanonischen Level, grundsätzlich bekannt aus \etoc, sind
+ von Relevanz für den \textbf{|tocdepth|}-Zähler in den Standardklassen
+ und werden in der folgenden Tabelle rekapituliert:
+
+ \centeredline{
+ \fbox{\begin{tabular}{rc}
+ (|memoir| class) book&-2\\ part&-1\\ chapter&0 \\
+ section&1\\ subsection&2 \\
+ subsubsection&3 \\ paragraph&4 \\ subparagraph& 5
+ \end{tabular}}}
+
+\smallskip Mit \etoc kann der Nutzer innerhalb einem gegebenen Unterabschnitt
+einfach lokale Inhaltsangaben ausgeben. Darin werden, wenn gewollt,
+Unterabschnitte in dem Stil von Abschnitten, Paragraphen in dem Stil von
+Unterabschnitten und Unterparagraphen im Stil von Unter"=Unterabschnitten
+gedruckt. Demnach kann man entscheiden alles auf das Level |6| zu setzen (wird
+von \etoc nie angezeigt), außer z.\,B. Paragraphen, die auf Level |1| befördert
+werden. So erstellt man eine schöne Inhaltsangabe aller Paragraphen eines
+Dokuments. (|tocdepth| mindestens |1|)\footnotemark
+\end{framed}
+
+\footnotetext{Normalerweise sollte man diese Inhaltsangabe der Paragraphen
+nicht im Kompabtibilitätsmodus ausgeben. Der würde darauf bestehen, einen
+gigantischen Abstand nach rechts einzufügen.}
+
+\section{Die \csbhyp{etoc\-set\-toc\-depth}- und
+ \csbhyp{etoc\-set\-next\-toc\-depth}"=Befehle}
+\label{etocsettocdepth}
+\label{etocsetnexttocdepth}
+
+Der |tocdepth|-Zähler hat keinen Einfluss darauf, was in die |.toc|-Datei
+geschrieben wird; dessen Einfluss ist ausschließlich auf das Setzen der
+Inhaltsangabe gerichtet.\footnote{In the standard classes (at least), it also influences the
+ \csa{listoftables} and \csa{listoffigures}, via \csa{@dottedtocline}.} In der Standardklasse ist nur ein |\tableofcontents|
+möglich, wobei mit \etoc beliebig viele erlaubt sind. Dadurch könnte man
+|tocdepth| immer und immer wieder auf einen passenden Wert ändern (der
+entscheidet, wie tief die Abschnitte angezeigt werden sollen) bis die
+Inhaltsangabe gesetzt werden muss.
+
+\etoc bietet \csb {etocsettocdepth}\marg{level} an, wessen verpflichtendes
+Argument entweder (von |-3| bis |5|) oder einen Unterteilungstyp wie
+|subsection| oder |subsubsection| oder alle anderen, die davor in \etoc mit
+\csb{etocsetlevel} (die Schlüsselworte |all| und |none| erkannt werden,
+allerdings nicht in Zusammenhang mit der Dokumentenunterteilung) deklariert
+wurden. Das tut das passende |\setcounter{tocdepth}{numeric_level}|.
+
+Wie in dem nächsten Unterabschnitt erklärt wird, wird |tocdepth| von |hyperref|
+benutzt. Man muss die folgenden Schritte befolgen, um den Einfluss von
+|hyperref|`s Änderungen auf die Lesezeichen zu verhindern. \etoc hat \csb
+{etocsetnexttocdepth}\marg{level}. Dessen Einfluss endet direkt nach der
+nächsten Inhaltsangabe. Daraus folgt, dass
+\texttt{\textbackslash\foreignlanguage{english}{invisibletableofcontents}}
+essenziell für |\etocsetnexttocdepth{none}\tableofcontents| ist.
+
+Der einfachste Weg ist also, eine einfache Instanz des
+\csb{etocsettocdepth}"=Befehl nach |\begin{document}| und vor dem ersten
+ |\tableofcontents| mit dem tiefsten Level als Argument zu setzen. -- Dieses
+ dann lokal zu benutzen, wo es gebraucht wird, anhand von
+ \csb{etocsetnexttocdepth} vor |\tableofcontents| oder |\localtableofcontents|.
+
+%
+\begin{otherlanguage}{english}
+
+\begin{framed}
+ It is possible to use \csb{etocsettocdepth} inside the first argument of
+ \csb{etocsettocstyle} (possibly in conjunction with checking the
+ \csb{etoclocaltop} value, \emph{which however will be up-to-date there only if
+ \csb{etocchecksemptiness} was executed}). There is no worry then about
+ possible impact on hyperref bookmarks later on, because \etoc always resets
+ the |tocdepth| counter after typesetting a TOC to the value it had before
+ it.
+
+ Since |1.09| the macro \csb{etocsetnexttocdepth} works also if located in
+ first argument of \csb{etocsettocstyle}, but there is no reason to use it
+ there as \csb{etocsettocdepth} has no durable effet on the |tocdepth|
+ counter if executed there.
+
+ Check \csb{localtableofcontentswithrelativedepth} for a simpler way to
+ control the depth of local tables of contents. This has the advantage of
+ working reliably whether or not the \csb{etocchecksemptiness} is used.
+\end{framed}
+\end{otherlanguage}
+
+\subsection{Die hyperref"=Option \emph{bookmarksdepth}}
+\label{ssec:bookmarksdepth}
+
+Wenn man den Zähler |tocdepth| verändert, um \toc oder \localtoc
+mehrfach zu benutzen, sollte man gewahr sein, dass das Paket
+|hyperref| standardmäßig den Wert des \emph{aktuellen} Wertes
+der |tocdepth|-Zählers berücksichtigt, um zu entscheiden, ob die |pdf|-Datei
+Lesezeichen, korrespondierend mit den Unterteilungsbefehlen, die in der
+Quelldatei vorgefunden wurde, anzeigt. Dadurch muss man typischer Weise
+den |tocdepth|-Zähler auf seinen vorigen Wert zurücksetzen, nachdem man
+ihn temporär für eine gegebene Inhaltsangabe modifiziert hat.
+
+Alternativ gibt es die \emph{bookmarksdepth=n}-Option des |hyperref|-Pakets.
+Dabei ist \emph{n} die gewünschte maximale Lesezeichen"=Tiefe. Diese kann
+numerisch sein oder der Name eines Levels, das |hyperref| bekannt ist.
+
+Wir sind in dieser Dokumentation schon an |bookmarksdepth=3| vorbeigekommen. Es
+war eine Option von |hyperref|. Auch wenn |tocdepth| nach dem Ausgeben einer
+Inhaltsangabe aus Nachlässigkeit auf |1| stehen gelassen wurde, so wurden der
+Lesezeichenbaum der |pdf|-Datei nicht verändert. Da \csb{etocsetnexttocdepth}
+jetzt zu dem Paket hinzugefügt wurde, ist keine Verwendung mehr für
+|bookmarksdepth=3|.
+
+\section{Der Befehl \csbhyp{etoc\-set\-toc\-dep\-th.toc}}
+\label{etocsettocdepth.toc}
+
+Dieser Befehl \csb{etocsettocdepth.toc} implementiert einige Funktionalitäten
+von Paket |tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}. Ich danke Denis \textsc{Bitouzé}
+ meine Aufmerksamkeit auf die Inkompatibilität dieses Pakets mit \etoc
+ gerichtet zu haben.}. Dieses Paket war inkompatibel mit \etoc. Es kann nun
+noch für seine mit |secnumdepth| in Verbindung stehenden Befehle genutzt werden,
+alle mit |toc| in Verbindung stehenden Aktivitäten werden jedoch durch \etoc
+abgebrochen.
+
+Das Handeln von \csb{etocsettocdepth.toc} ist grundlegend verschieden zu
+\csb{etocsettocdepth}. Anstatt den |tocdepth|-Zähler direkt zu verändern,
+fügt es der |.toc|-Datei eine Linie an, die, wenn ausgeführt, in einer
+Inhaltsangabe diese Veränderung ausführen wird.
+
+Der Befehl \csb{etocsettocdepth.toc} akzeptiert, wie
+\csb{etocsettocdepth}, Namen und numerische Argumente.
+In dem Fall eines Namen als Argument ist der tatsächliche numerische
+Wert noch nicht festgelegt, wenn |.toc|-Datei erstellt wird. Es wird
+der Wert sein, der aktuell für das benannte Level der Inhaltsangabe
+(ohne |\etocignoretoctocdepth| gemacht zu haben) bei
+jeder Erstellung einer Inhaltsangabe spezifiziert wird.
+
+Der |tocdepth|-Zähler wird niemals auf einen Wert gesetzt, der feiner
+als der ist, mit dem er zu Beginn der Inhaltsangabe initialisiert wurde.
+Also ist das Hinzufügen von \csb{etocsettocdepth.toc} im Dokument ein Weg
+die Tiefe einer lokalen Inhaltsangabe einzugrenzen. Zum Beispiel,
+um die Einfügung von Unter-unter"=Abschnitten oder eines gegebenen
+Kapitels zu unterbinden.
+
+
+Dieses
+{\fbox{wird in allen Inhaltsangaben ausgeführt.}}
+
+\subsection{Die Befehle \csbhyp{etocobeytoctocdepth} und \csbhyp{etocignoretoctocdepth}}
+\label{etocobeytoctocdepth}
+\label{etocignoretoctocdepth}
+
+
+Also wird \csb{etocignoretoctocdepth} gesetzt, um den
+\csa{etocsettocdepth.toc}-Mecha\-nismus abzubrechen, wenn
+benötigt; und \csb{etocobeytoctocdepth} wird es
+reaktivieren. Das Paket führt \csb{etocobeytoctocdepth} zu Beginn aus.
+
+
+\section{Die Befehle \csbhyp{etoc\-depth\-tag.toc} und \csbhyp{etocsettagdepth}}
+\label{etocdepthtag.toc}
+\label{etocsettagdepth}
+
+Wie oben erwähnt, wenn das Argument für \csb{etocsettocdepth.toc} kein
+numerisches sondern ein Namen"=Level ist, wird durch die tatsächliche Nummer bei
+der Erstellung der Inhaltsangabe entschieden. Dadurch und anhand der
+\emph{Schiebe"=Mechanismen von \etoc} kann man einen sehr flexiblen Aufbau
+erreichen: Man erklärt mit \csb{etocsetlevel} zuerst ein paar Platzhaltelevel,
+z.\,B. |partIII|, und weist ihm das unsichtbare Level |6| zu. Dann, vor dem
+dritten |\part| Befehl, fügt man \csb{etocsettocdepth.toc}|{partIII}| ein. An
+dem Ort, an dem der Effekt enden soll, setzt man
+\csb{etocsettocdepth.toc}|{all}| ein. Es ist nun möglich, jedes Mal, wenn man
+eine Inhaltsangabe setzen will, das feinste Level der Einträge aus dem dritten
+Teil zu spezifizieren. Man muss z.\,B. nur \csa{etocsetlevel}|{partIII}{1}|
+schreiben. Es wird die Abschnitte limitieren (sofern |tocdepth| mindestens auf
+diesem Level war, wenn die Inhaltsangabe ausgegeben wurde).
+
+Die Methode hat ein paar Beschränkungen:
+\begin{enumerate*}[label={(\roman*)}]
+ \item Das zweite Argument von \csb{etocsetlevel} muss numerisch sein;
+ \item es kann nicht auf |-3| gesetzt werden (was nötig wäre, wenn man ganze
+ Bücher aus der Inhaltsangabe streichen wöllte in den Klasse |memoir|);
+ \item es ist ein bisschen getrickst, seit |partIII| kein richtiger unterteilender
+ Abschnitt ist sondern nur ein \emph{tag}.
+\end{enumerate*}
+
+Version |1.07h| enthält den Befehl \csb{etocdepthtag.toc}, der
+es einfacher macht, diese variable lokale Kontrolle des |tocdepth| zu erreichen,
+wenn die Inhaltsangabe erstellt wird.
+
+
+Es wird als \csb{etocdepthtag.toc}\marg{tag\_name} genutzt, wo der
+\meta{tag\_name} irgendetwas ist, das wird den Tag in die |.toc|-Datei setzen.
+Wenn die Inhaltsangabe erstellt wird, initiiert das eine Reihe von Befehlen
+\csb{etocsettagdepth}\marg{tag\_name}\marg{level}, wo das \meta{level} entweder
+numerisch (von |-3| bis |5|) oder ein Name einer unterteilenden Einheit, die
+\etoc bekannt ist, oder |none| oder |all|. Der Effekt von den Tags innerhalb der
+|.toc|-Datei ist es, den |tocdepth|-Zählers auf den gewünschten Wert zu setzen
+(das kann wie schon erwähnt, nicht feiner sein als der initiale Wert des
+|tocdepth|-Zählers).
+
+Die hinzugefügte Flexibilität wirkt sich insofern aus, dass \csb{etocsetlevel}
+nicht mehr mit dieser getricksten Methode, bei der man Level"=Tiefen und |none|
+und |all| benutzt hat.
+
+Wie immer, wenn die Tag"=Tiefen gesetzt wurden, bleiben sie wirkend, bis sie
+wieder definiert werden oder ihr Wirkungsgebiet beendet wird, indem die
+umschließende Gruppe geschlossen wird. Für ein Beispiel, siehe hier:
+\autoref{ssec:tocwithdepthtags}.
+
+
+\subsection{Die Befehle \csbhyp{etocobeydepthtags} und \csbhyp{etocignoredepthtags}}
+\label{etocobeydepthtags}
+\label{etocignoredepthtags}
+
+
+Nach \csb{etocignoredepthtags} werden die |.toc|-Tiefentags ignoriert
+(nach \csb{etocdepthtag.toc} funktionieren sie jedoch noch). Das Paket
+führt zu Beginn \csb{etocobeydepthtags} aus. Dieses befielt \etoc auf die
+gefundenen Tags in der |.toc|-Datei zu reagieren.
+
+\section{Die Befehle \csbhyp{etocglobaldefs} und \csbhyp{etoclocaldefs}}
+\label{etocglobaldefs}
+\label{etoclocaldefs}
+
+In \LaTeX{} verschwindet die Bedeutung eines Befehls, definiert
+via |\newcommand\foo{...}| in einer Umgebung (oder Gruppe), vom
+\TeX-Speicher beim Austritt aus dieser Umgebung (oder Gruppe).
+Manchmal ist es jedoch erforderlich, Definitionen mit globaler
+Reichweite zu geben, für diese hat \TeX{} primitive Präfixe
+|\global|.
+
+Standardmäßig sind die \etoc-Definitionen von \csb{etocname} etc.
+\ldots{} lokal, Dies verursacht Probleme in bestimmten
+Zusammenhängen: bei TOCs als Tabellen (\autoref{sec:tocastable}, \autoref{ssec:tocastableold}), oder
+auch mit |enumitem|-\emph{inline}-Varianten der
+Standardumgebungen, weil der Befehl |\item| dann eine Gruppe
+schließt (siehe \autoref{etocthelink}).
+
+Nach \csa{etocglobaldefs} wird \etoc seine Definitionen von
+\csb{etocname} etc. \ldots{} vornehmen, sie haben eine globale
+Reichweite. Für den normalen Gebrauch ist das nicht notwendig. Es
+tut nicht weh, beides systematisch zu aktivieren.
+
+Um zur Standardeinstellung zurückzukehren, nehmen Sie
+\csa{etoclocaldefs}. Beachten Sie, dass beide,
+\csa{etocglobaldefs} and \csa{etoclocaldefs}, lokal für die
+Umgebung oder Gruppe sind, in der sie verwendet werden.
+
+\begin{otherlanguage}{english}
+\section{Not displayed empty TOCs}
+
+\subsection{The \csbhyp{etocchecksemptiness} command}
+\label{etocchecksemptiness}
+
+The user needs to issue \csb{etocchecksemptiness} to tell \etoc to check whether
+local tables of contents are empty and in case of emptiness to print nothing
+at all.\footnote{Thanks to Paul Gaborit who asked for
+such a feature.} This
+can be useful to authors of \LaTeX{} classes who for example wish to have a
+|\chapter| command doing systematically a \csa{localtableofcontents}, or for
+people producing files via automatic conversions and some of those might have
+sectioning commands and others not.
+
+«Emptiness» means that no \csa{contentsline} command would get executed within
+the scope of the local table of contents --- empty line styles by themselves do
+not make the TOC empty. \etoc always executes the \csb{etocaftertochook}
+command; and the test for emptiness itself executes everything else found in
+the |.toc| file. See \autoref{sec:addingtotoc} in this context.
+\begin{enumerate}
+\item the \csb{etocifwasempty} command discussed below can be used from inside
+\csb{etocaftertochook}.
+\item there is no \csa{etocdoesnotcheckemptiness} but if there was one
+it would do |\makeatletter\Etoc@checksemptinessfalse\makeatother|.
+\end{enumerate}
+
+The suppression of the heading (more precisely of the toc display style
+elements) may be effective only for the final \LaTeX{} runs. For example in
+the situation of a \csa{tableofcontents}|\ref{foo}| where the label |foo| is
+not yet recognized, the heading (but not the contents) is printed and the TOC
+is declared non-empty. Or, if one adds a \localtoc to a document, on the next
+run, the test for emptiness will in fact apply to the next one, and the last
+local TOC of the document will have its contents temporarily unknown to \etoc,
+hence will be declared non empty, and the heading will be printed.
+
+For a finalized document compiled with initially no auxiliary files, the first
+\LaTeX{} run will declare all local TOCs non empty and print for each of them a
+heading (and no contents naturally). The second \LaTeX{} run will then
+correctly decide which local TOC is empty or not.
+
+\subsection{The \csbhyp{etocnotocifnotoc} command}
+\label{etocnotocifnotoc}
+
+The user can then extend the emptiness-checking to the global TOCs with
+\csb{etocnotocifnotoc}. May I respectfully give the advice then to rather do
+none of |\usepackage{etoc}| nor \toc ? |;-)|. Well, there is always the case
+of batch conversions of documents having or not sectioning units.
+
+\subsection{The \csbhyp{etocifwasempty} command}
+\label{etocifwasempty}
+\label{etocxifwasempty}
+
+The command \csb{etocifwasempty}\marg{YES}\marg{NO} executes \meta{YES} if
+the previous TOC was found to be empty and \meta{NO} if its was not so. This
+may serve to act appropriately after a truly empty TOC. If
+\csb{etocchecksemptiness} has not been issued, this conditional always
+executes the \meta{NO} branch.
+
+This command is robust, and \csb{etocxifwasempty} is its expandable
+version.
+
+\fbox{Do not forget the second argument: at least an empty pair of braces |{}|
+ must be present.}
+
+This conditional may wrongly say that the local TOC is empty or not empty
+until \LaTeX{} compilations stabilize. But if it says that a local TOC is
+empty, this does mean that \etoc considered the just encountered local table
+of contents to be empty (for that run) and thus printed nothing (not even a
+|\par|).
+
+% pas traduit
+\section{The \csbhyp{etoclocaltop} command}
+\label{etoclocaltop}
+
+\textbf{New with 1.09 (2019/03/09)}.
+
+Within either the TOC style
+(\csb{etocsettocstyle}) or the local title styles (\csb{etocsetstyle}), the
+control sequence \csb{etoclocaltop} is made equivalent for the duration of
+\csb{localtableofcontents} to a numeric (self-delimiting) denotation of the
+current top level.
+
+Thus: it will in numeric contexts (|\ifnum|, |\ifcase|, ...) represent zero
+for a local TOC corresponding to chapter, or one if in a section, or two if in
+a subsection, etc..., assuming of course here that the default levels are
+obeyed (see \autoref{sec:tocdepth}).
+
+\begin{framed}
+ \csb{etoclocaltop} from inside the TOC heading (first argument of
+ \csb{etocsettocstyle}) has the correct value \emph{only under
+ \csb{etocchecksemptiness} regime}. Special circumstances correspond to
+ some special values:
+ \begin{description}[nolistsep]
+ \item[|-3|] (|-\thr@@|)\newline
+ signals that \etoc considers the local TOC to be
+ ``unknown''; this happens at the last local TOC, for the first \LaTeX\ run
+ after adding a new \localtoc to the document. In doubt, \etoc assumes the
+ TOC will prove non empty, hence it prints (independently of whether the
+ check for emptiness was activated or not) the heading as specified by
+ \csb{etocsettocstyle}. Thus, check if \csb{etoclocaltop} gives |-3| as a
+ a \meta{number} to detect that situation from within the first argument of
+ \csb{etocsettocstyle}, if desired.
+ \item[|-1000|](|-\@m|)\newline is in case of a \localtoc
+ being considered ``known'' (although it may still refer to the data in the
+ |.toc| file from the previous run) but without the check for emptiness
+ having been executed.
+ \item[|-10000|](|-\@M|)\newline is the value when accessed from the title
+ of a global TOCs.
+ \end{description}
+\end{framed}
+\begin{framed}
+ When executed from within a local table of contents \textbf{line styles}
+ (\csb{etocsetstyle}), \csb{etoclocaltop} always will hold the correct value,
+ whether or not the emptiness check was executed.
+
+ For a global table of contents however, it will always keep the value |-3|.
+\end{framed}
+
+Attention! \cs{etoclocaltop} is only to be queried; modifying it is strictly
+forbidden and falls under the most rigorous prosecution allowed by federal
+law.
+\end{otherlanguage}
+
+\section{Befehle zur \texorpdfstring{\texttt{.toc}}{.toc}-Datei hinzufügen}
+\label{sec:addingtotoc}
+
+Wir beschrieben oben die Befehle \csb{etocsettocdepth.toc} und
+\csb{etocdepthtag.toc}, welche beide Befehle in die |.toc|-Datei einfügen. Ein
+noch allgemeinerer Weg, um "`action tags"' in die |.toc|-Datei einzufügen, wäre
+vorstellbar, allerdings würde auch nur indirekt
+|\addtocontents{toc}{\something}| benutzt werden.
+
+Man sollte vorsichtig sein, wenn man auf diesem Weg Dinge zur |.toc|-Datei
+hinzufügt. Zum Beispiel das Einfügen von
+\csa{addtocontents}|{toc}{\string\clearpage}| direkt vor einem \csa{part} behebt
+den Fehler, dass Teileinträge in Inhaltsangaben vom Rest getrennt am Ende der
+Seite auftauchen, kann aber auch Probleme mit mehreren Inhaltsangaben haben:
+\csa{clearpage} wird jedes Mal ausgeführt, wenn \etoc über ein \toc oder
+\localtoc stolpert. Die schlauere Methode wäre es:
+{\csa{addtocontents}|{toc}{\string\myclearpage}|,} den |\let\myclearpage\relax|,
+man hätte den Befehl |\let\myclearpage\relax| zu Beginn des Dokuments und wenn
+benötigt, benutzt man etwas wie:
+\begin{verbatim}
+\let\myclearpage\clearpage
+\tableofcontents
+\let\myclearpage\relax
+\end{verbatim}
+Die |memoir|-Klasse besitzt den Befehl \csa{settocdepth}, der einen
+\csa{changetoc\-depth}"=Befehl in die |.toc|-Datei setzt. Dieses
+beeinflusst die Schriftsetzung von \etoc bei \emph{allen} Inhaltsangaben mit
+möglichen unvorhersehbaren Ergebnissen: Stellen Sie sich vor, irgendwo im Dokument
+stünde \csa{settocdepth}|{chapter}|, um die Abschnitte von Unterabschnitten
+nicht in der Hauptinhaltsangabe aufzulisten. In diesem Fall würde eine
+lokale Inhaltsangabe in einem dieser Kapitel einen Titel ohne jeden Eintrag ausgeben.
+
+Da die |memoir|-Klasse von Haus aus schon mehrfache \toc erlaubt, tritt dieser
+Fehler schon viel früher, und unabhängig von \etoc, auf. Siehe Seite 170 der
+|memoir|-Anleitung.
+
+Für diesen Spezialfall gibt es folgende Befehle: \csb{etocsettocdepth.toc},
+\csb{etocignoretoctocdepth}, \csb{etocobeytoctocdepth} oder deren
+Varianten \csb{etocdepthtag.toc} und \csb{etocsettagdepth}.
+
+Nebenbei, jeder |\setcounter{tocdepth}{n}|"=Befehl fügt direkt in die
+|.toc|-Datei hinzu. Es scheint so, dass seine Wirkung ist (seit der Version
+|1.07g|), beendet den Abschluss jedes Inhaltsverzeichnis zu beenden, automatisch
+wird ein |\setcounter{tocdepth}{previous_value}| genommen, mit dem Wert, aktiv
+ein Inhaltsverzeichnis zu nehmen.
+
+\subsection{Die hyperref"=Option \emph{hidelinks}}\label{ssec:hidelinks}
+
+Die farbigen Links (und auch die Kastenlinks) sind einwenig ärgerlich, wenn in
+Inhaltsverzeichnissen verwendet, insbesonders, wenn das Dokument \etoc verwendet
+und viele von ihnen beinhaltet! Man kann sich wünschen, farbige Links
+\emph{ausschließlich} für Inhaltsverzeichnisse! In der Tat, warum sollten in
+TOCs diese Dinge gerahmt oder farbig sein müssen, wenn der Benutzer
+\emph{bereits erwartet, dass dort Links sind}?
+
+Ich nehme den folgenden Trick: Entweder in der Präambel zu nehmen
+|\AtBeginDocument| oder danach |\begin{document}|, ich habe den Befehl \centeredline{|\addtocontents{toc}{\protect\hypersetup{hidelinks}}|}
+
+ \begin{framed}
+ Alle TOCs, die von \etoc gesetzt sind, haben ihre Inhalte in eine
+ Gruppierung getan, (wie in einer Umgebung eingeschlossen). So wird der
+ Befehl \csa{hypersetup}|{hidelinks}| ausgeführt von \emph{jedem} TOC, aber
+ sein Effekt wird limitiert zu dem TOC.
+ \end{framed}
+
+Experimentell habe ich herausgefunden, dass die Option |hidelinks| oftmals mit
+|\hypersetup| eingestellt werden kann (Dies ist nicht bei allen
+|hyperref|-Optionen der Fall).
+
+
+\clearpage
+\etocdepthtag.toc {examples}
+\part{Beispiele}\label{part:examples}
+
+\thispartstats %% (pas de sous-section)
+
+\etocstandardlines
+\etocsettocstyle {}{\medskip}
+\localtableofcontents
+
+\begin{otherlanguage}{english}
+ We present some additional examples. To understand all code snippets in
+ detail, one will possibly need to have first browsed through
+ \autoref{part:linestyles} and \autoref{part:globalcmds}.
+\end{otherlanguage}
+
+\section{Über\-prü\-fen des Kom\-pa\-tibilitäts\-modus}
+
+Als weiteres Beispiel wollen wir nun das Inhaltsverzeichnis dieses Teils setzen.
+Dazu wollen wir zuerst den Kompatibilitätsmodus testen.\footnote{Dieses
+Dokument wurde als |scrartcl| gesetzt. Wir wollen nun testen, ob
+der Kompatibilitätsmodus des \etoc"=Pakets die Anpassungen innerhalb der
+Klassenbefehle umsetzt.} Das ursprüngliche Inhaltsverzeichnis ist
+unsichtbar und wurde am Anfang von \autoref{part:globalcmds} definiert,
+wobei es mit einem Label versehen wurde.
+\begin{verbatim}
+\begingroup % to keep in particular toc=left with local effect
+\KOMAoptions{toc=left}
+\etocstandarddisplaystyle % wird benötigt, damit toc=left gilt
+\etocstandardlines
+\tableofcontents \ref{toc:globalcmds}
+\endgroup
+\end{verbatim}
+\begingroup
+\KOMAoptions{toc=left}
+\etocstandarddisplaystyle
+\etocstandardlines
+\tableofcontents \ref{toc:globalcmds}
+\endgroup
+
+\section{Ein weiterer Kompatibilitätsmodus}\label{sec:anothercompat}
+
+Wie in \autoref{subs:compat} erläutert, sagen die Befehle
+\csa{etocstandardlines} und \csa{etocstandarddisplaystyle} \etoc im
+Wesentlichen, wie man als Beobachter fungiert. Das Dokumentenklasse"=Layout für
+das Inhaltsverzeichnis wird dann gehorchen. Es gibt keine Möglichkeit, dieses
+Standard"=Layout aus dem Paket anzupassen (ändern von Schriftarten, Rändern,
+vertikalen Abständen, etc.) . Definieren Sie dazu ein Paket von dieser Funktion;
+weil entweder \etoc (vorübergehend vielleicht) im Kompatibilitätsmodus ohne
+Anpassung auf seinen Teil möglich ist oder der Benutzer hat das Layout in
+\csa{etocsetstyle}"=Befehlen angegeben (und \csa{etocsettocstyle}) ist (angeblich
+\ldots ) in der kompletten Steuerung.
+
+Nun, es ist eigentlich eine Alternative. Es ist möglich, die Verwendung der
+\csa{etocsetstyle}"=Befehle zu nutzen, um einen künstlichen Kompatibilitätsmodus
+neu zu erstellen, um Effekte zu erreichen, wie die folgenden, alle Dinge
+gleichen andererseits dem Dokumentenklassen"=Standard:
+\begin{enumerate}[noitemsep]
+\item Enthält der |hyperref|-Link nur die Namen, aber nicht die Anzahl der
+ jeweils zu kapselnden Einträge der Inhaltstabellen;
+\item verwenden Sie den Dokumentenklassen"=Stil für Kapitel und Abschnitte, aber
+ ändern Sie es nur für Teilbereiche;
+\end{enumerate}
+
+Hier ist beschrieben, wie Sie vorgehen müssen.
+
+\begin{otherlanguage}{english}
+ This has become easier since release |1.08k| as now \etoc preserves
+automatically in \csb{etocsavedsectiontocline}, \csb{etocsavedchaptertocline}
+etc... the meaning of the \LaTeX\ |\l@section|, |\l@chapter|, etc... macros as
+they were at the time the TOC is typeset.
+\end{otherlanguage}
+
+Man nimmt in die Präambel:
+\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex}
+\makeatletter
+\newcommand{\MyStandardTOC}{%
+ \begingroup
+ % for the book or article classes:
+ %\etocsetstyle{part}{}{}
+ % {\etocsavedparttocline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}%
+ % for the scrbook or scrartcl classes:
+ \etocsetstyle{part}{}{}
+ {\etocsavedparttocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
+ % following is identical in book/article/scrbook/scrartcl classes:
+ \etocsetstyle{chapter}{}{} %%% only for book and scrbook
+ {\etocsavedchaptertocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
+ \etocsetstyle{section}{}{}
+ {\etocsavedsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
+ \etocsetstyle{subsection}{}{}
+ {\etocsavedsubsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
+ % etc... if further sectioning units are used
+ \etocstandarddisplaystyle % this is for the title, page-marks, etc...
+ \tableofcontents
+ \endgroup}
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+
+
+One can add to the above arbitrary text formatting commands, for example
+replace |\etocpage| by |\textcolor{blue}{\etocpage}|.
+
+Wenn das Dokument nur ein Inhaltsverzeichnis hat, dann gibt
+es keine Notwendigkeit, die Befehle in ein Makro zu setzen oder sogar in eine
+Gruppe. \footnote{Und wenn darüber hinaus, um das gleiche Layout wie im Standard
+zu halten, kann man sich die Frage stellen, warum man \etoc benutzt \ldots\ Es
+gibt \emph{einen} guten Grund: Zahlen und Namen sind separate
+\texttt{hyperref}-Links, nach der Regel gibt es nur eine Verbindung, die sowohl
+die Nummer und den Namen auf einem toc"=Eintrag entsprechen.} Mit dem Befehl
+\etoc ist ein Inhaltsverzeichnis völlig identisch zu einem von der
+Dokumentenklasse: |article|, |book|, |scrartcl|, |scrbook|. \footnote{For the
+|memoir| class, one needed prior to \etoc |1.08k| a bit more: each of the command \csa{booknumberline},
+\csa{partnumberline} and \csa{chapternumberline} had to be saved. They can now
+be used directly in the line styles, because their meanings are not modified
+anymore by \etoc during its TOC typesetting.}
+Die Anzahl und die Namen der einzelnen Einträge sind jeweils separat in einem
+|hyperref|-Link, wie es immer der Fall bei \etoc ist, wenn man nicht im
+Kompatibilitätsmodus ist. Ersetzt man \csa{etocnumber} mit \csa{etocthenumber},
+dann ergibt es ein Inhaltsverzeichnis, wo die Zahlen nicht mehr verlinkt sind,
+aber die Namen noch. Oder man kann sich entscheiden, \csa{etocthename} zu
+verwenden und eine Hyperlink"=Nummer mit \csa{etocnumber} zu erhalten.
+
+Hier ist ein subtiles Beispiel, wo nur geringfügig die "`sections"' modifiziert
+wurden (hinzufügen von Farbe für die Nummer und das Entfernen des
+|hyperref|-Links) und die Unterabschnitte, wie in der Standardeinstellung,
+\emph{mit Ausnahme} von einer bestimmte "`section"' im Layout komplett geändert
+wurde: \MyQuasiStandardTOC{\ref{toc:overview}} \bigskip Dieses Beispiel hat nur
+Abschnitte und Unterabschnitte und der in \csa{MyStandardTOC} verwendete Code
+war:
+% corrected section number in verbatim code: 4 not 3 (2015/03/18)
+\begin{filecontentshere}{etocsnippet-\the\value{section}-B.tex}
+\etocsetstyle{section}{}
+ {\ifnum\etocthenumber=4
+ \etocsetstyle{subsection}
+ {\par\nopagebreak\begingroup
+ \leftskip1.5em \rightskip\@tocrmarg \parfillskip\@flushglue
+ \parindent 0pt \normalfont\normalsize\rmfamily\itshape
+ % \columnsep1em
+ % \begin{minipage}{\dimexpr\linewidth-\leftskip-\rightskip\relax}%
+ % \begin{multicols}{2}%
+ \etocskipfirstprefix}
+ {\allowbreak\,--\,}
+ {\etocname\ \textup{(\etocnumber)}}
+ {.\par\endgroup}%
+ % {.\par\end{multicols}\end{minipage}\par\endgroup}%
+ \else
+ \etocsetstyle{subsection}
+ {}{}
+ {\etocsavedsubsectiontocline{\numberline{\etocnumber}\etocname}{\etocpage}}
+ {}%
+ \fi}
+ {\etocsavedsectiontocline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}}
+ {}%
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-B.tex}
+Beachten Sie die Seite mit den Kopf"=Zeichen, welche man dem Inhaltsverzeichnis
+hinzufügen kann. Abschnitte und Unterabschnitte sind genauso wie im Standard
+(mit Ausnahme der Unterabschnitte, welche von einem bestimmten
+Benutzer"=Abschnitt aus gewählt wird und bis auf die Farbe der
+Abschnittsnummern), ohne das explizit die Länge, die Schriftart oder andere
+Formatierungsanweisungen gegeben werden. Aber wir mussten die |scrartcl|-Quellen
+untersuchen, um festzustellen, was zu nehmen ist für \csa{leftskip} und
+\csa{rightskip} für unsere Nutzer-sections"=Einträge.
+
+\begin{otherlanguage}{english}
+\section{Emulating the book class}\label{sec:thirdexample}
+
+As explained in \autoref{subs:compat}: without explicit use of an
+\csb{etocsetstyle} command the package will leave to the document class the
+hand regarding the ``toc line styles''. It is sometimes asked by users (for
+example those using \etoc for its \csb{localtableofcontents}) how to stay
+close to but not completely identical with the design implemented by the
+standard classes, such as |book|. I can recommend package |tocloft| for this,
+as it is compatible with \etoc (see \autoref{sec:kompatmitanderen}) and thus \etoc will
+obey the |tocloft| customizations (as long as no use has been made of
+\csa{etocsetstyle}). It is also possible to modify only the style for, say,
+sections and leave the parts, chapters, subsections as in the document class,
+via the technique from \autoref{sec:anothercompat}.
+
+But for complete control, here is a translation of the |book| class code into
+\etoc lingua. It is then easy to modify the relevant lengths or adjust the
+used fonts. I thank \textsc{Denis Bitouzé} for prompting me to include this in
+the \etoc manual, as it resulted from some conversation we had about this. The
+code is not 100\% faithful to the |book| class, and particularly its rendering
+of (multi-line) non-numbered units differs (... I think, as I copied pasted as
+is the code from where I had stored it and did not do much thinking about it
+again). Some proficiency in low-level \TeX\ and \LaTeX\ macros is needed to
+understand what the code says, but for modifying fonts or some lengths such
+in-depth understanding is not needed.
+
+With some extra code one can \emph{automatically adjust the widths} assigned
+to typesetting sectioning numbers in order to prevent overflows, even with for
+example \MakeUppercase{\romannumeral 38}; but this is a more advanced feature
+which I have moved to \autoref{sec:thirdexampleextra}.
+
+First we set up some lengths. I use macro registers, not real \LaTeX\ lengths.
+When using |em|'s however, this means that one must pay attention to when the
+actual dimension assignment is made, as this will then depend upon the current
+font settings. In the code below, at the location where the \csa{TOCnumwidthB}
+and \csa{TOCnumwidthC} will be used, the |1em| from their specification will
+be matched to the normal medium series font, not the bold font; this is
+deliberate so that one can compare more readily with the other dimensions;
+besides, with the \csa{TOCcomputenumwidths} from
+\autoref{sec:thirdexampleextra} these macros will actually hold a dimension
+using |pt| as dimensional unit.
+\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex}
+% it will be easy to globally shift the TOC horizontally if needed
+\def\TOCleftmargin {0pt}
+\def\TOCrightmargin {2.55em}% like LaTeX's \@tocrmarg
+
+% this is for dotted leaders
+\newbox\TOCleaderbox
+\def\TOCleaderboxwidth {0.7777em}% about like what standard classes do
+
+% vertical spacing
+\def\TOCverysmallvskip {0pt plus .2pt}
+\def\TOCmedvskip {1em plus 1pt}
+\def\TOCbigvskip {2.25em plus 1pt}
+
+% the ``numwidths'' for typesetting the numbering of division units.
+% I don't recall exactly how (and for which fonts) these figures were chosen.
+% They quickly prove too small if using Roman numerals (as do too the book
+% class defaults even though they are a bit larger).
+\def\TOCnumwidthB {1.5em} % chapter
+\def\TOCnumwidthC {2.278em}% section, I think default is 2.3em
+\def\TOCnumwidthD {3.056em}% analog in standard class is 3.2em
+\def\TOCnumwidthE {3.833em}% analog in standard class is 4.1em
+\def\TOCnumwidthF {4.611em}% analog in standard class is 5em
+\def\TOCnumwidthG {5.389em}% analog in standard class is 6em
+
+%The code for the ``global toc style''.
+
+\newcommand*\TOCglobalstyle {%
+\etocsettocstyle
+ {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
+ \parindent\z@ \leftskip\z@skip \rightskip \z@skip
+ \setbox\TOCleaderbox\hbox to \TOCleaderboxwidth{\hss.\hss}%
+ \chapter *{\noindent\kern\TOCleftmargin\relax % uses "pt"...
+ \contentsname
+ \@mkboth {\MakeUppercase \contentsname}{\MakeUppercase \contentsname}}%
+ \rightskip \TOCrightmargin\relax
+ \parfillskip -\rightskip % or a smaller value if desired
+ \leftskip \TOCleftmargin \relax }
+ {\if@restonecol \twocolumn \fi\cleardoublepage}%
+%
+\etocsetstyle{part}
+ {}
+ {\addpenalty {-\@highpenalty}%
+ \addvspace \TOCbigvskip
+ \leavevmode
+ {\large \bfseries % use a group to limit font change
+ \interlinepenalty\@M
+ \etocifnumbered{\etocnumber\hspace{1em}}{}%
+ \etocname
+ \nobreak\hfil\makebox[-\parfillskip][r]{\etocpage}}\par
+ \nobreak
+ }
+ {}
+ {}%
+%
+\etocsetstyle{chapter}
+ {\advance\leftskip\TOCnumwidthB\relax}
+ {\addpenalty {-\@highpenalty }%
+ \vskip \TOCmedvskip\relax
+ \leavevmode
+ {\interlinepenalty\@M
+ \etocifnumbered
+ {\llap{\makebox[\TOCnumwidthB][l]{\bfseries\etocnumber}}}
+ {\advance\leftskip-\TOCnumwidthB\relax}%
+ \bfseries\etocname
+ \nobreak\hfil\makebox[-\parfillskip][r]{\etocpage}\par }%
+ \penalty \@highpenalty
+ }
+ {}
+ {\advance\leftskip-\TOCnumwidthB\relax}%
+%
+ \TOCsetlinestyle {section} {\TOCnumwidthC}%
+ \TOCsetlinestyle {subsection} {\TOCnumwidthD}%
+ \TOCsetlinestyle {subsubsection}{\TOCnumwidthE}%
+ \TOCsetlinestyle {paragraph} {\TOCnumwidthF}%
+ \TOCsetlinestyle {subparagraph} {\TOCnumwidthG}%
+}% end of \TOCglobalstyle
+
+% The common code for line styles is abstracted into a macro:
+
+\newcommand\TOCsetlinestyle [2]{% #1= unit, #2= numwidth as macro
+\etocsetstyle{#1}
+ {\advance\leftskip#2\relax}
+ {\vskip \TOCverysmallvskip\relax
+ \leavevmode
+ {\interlinepenalty\@M
+ \etocifnumbered
+ {\llap{\makebox[#2][l]{\etocnumber}}}{\advance\leftskip-#2\relax}%
+ \etocname
+ \nobreak\leaders \copy\TOCleaderbox
+ \hfil\makebox[-\parfillskip][r]{\etocpage}%
+ \par }%
+ }
+ {}
+ {\advance\leftskip-#2\relax}%
+}
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+Nota Bene: the code deliberately handles the non-numbered sectioning units
+unlike the way of the standard document classes (particularly regarding the
+alignment of multi-line headings.)
+
+The whole thing was encapsulated in \csa{TOCglobalstyle}, because we also want
+a \csa{TOClocalstyle} for local tables of contents which typically will want
+to use |\section*| rather than |\chapter*| and not insert page marks in the
+headers. The \csa{TOClocalstyle} is to be issued once, after the main document
+TOC, or rather before using \csa{localtableofcontents}. If one wants a full
+TOC at end of document one will naturally have to issue again
+\csa{TOCglobalstyle} there.
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}-B.tex}
+\makeatletter
+\newcommand*\TOClocalstyle {%
+\etocsettocstyle
+ {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
+ \setbox\TOCleaderbox\hbox to \TOCleaderboxwidth{\hss.\hss}%
+ \parindent\z@
+ \dimen@ 2.25em % for left indenting
+ \section *{\kern\dimen@ % use of \dimen@ works here by sheer luck
+ \contentsname
+ % un-comment this if marks are wanted:
+ %\@mkboth {\MakeUppercase \contentsname}{\MakeUppercase \contentsname}%
+ }% end of \section
+ \parskip \z@skip
+ \vspace{-1.25\baselineskip}% somewhat ad hoc
+ \leftskip 2.25em
+ \rightskip 4.5em
+ \advance\rightskip-\TOCrightmargin\relax
+ \leavevmode\leaders\hrule\@height\p@\hfill\kern\z@\par
+ \rightskip 4.5em
+ \parfillskip -\TOCrightmargin\relax }
+ {\nobreak\vskip-.5\baselineskip
+ \leavevmode\leaders\hrule\@height\p@\hfill\kern\z@\par
+ \bigskip
+ \if@restonecol \twocolumn \fi }%
+%
+\etocsetstyle{section}
+ {\advance\leftskip\TOCnumwidthC\relax}
+ {\addpenalty \@secpenalty
+ \etociffirst{}{\addvspace{\TOCmedvskip}}%
+ \leavevmode
+ {\interlinepenalty\@M
+ \bfseries\etocifnumbered
+ {\llap{\makebox[\TOCnumwidthC][l]{\etocnumber}}}
+ {\advance\leftskip-\TOCnumwidthC}%
+ \etocname\nobreak\hfil\makebox[-\parfillskip][r]{\etocpage}\par }%
+ \penalty \@highpenalty }
+ {}
+ {\advance\leftskip-\TOCnumwidthC\relax}%
+% the rest is identical with code for global tocs:
+ \TOCsetlinestyle {subsection} {\TOCnumwidthD}%
+ \TOCsetlinestyle {subsubsection}{\TOCnumwidthE}%
+ \TOCsetlinestyle {paragraph} {\TOCnumwidthF}%
+ \TOCsetlinestyle {subparagraph} {\TOCnumwidthG}%
+}% end of \TOClocalstyle
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-B.tex}
+As mentioned previously, this handles non-numbered (multi-line) sectioning
+units somewhat differently from what happens in the standard document classes.
+
+For some reason this code has some hard-coded |2.25em| and |4.5em| which were
+not abstracted into macros or lengths. The code inserts horizontal rules above
+and below the TOC contents in a non-separable by pagebreak way.
+
+See \autoref{sec:thirdexampleextra} for more.
+
+\end{otherlanguage}
+
+\section{Ein In\-halts\-ver\-zeich\-nis mit Rahmen}
+
+Als nächstes wollen wir ein gerahmtes Inhaltsverzeichnis erzeugen, wobei wir den
+vom Paket vorgegebenen Linienstil nutzen und ein paar Farben hinzufügen wollen.
+(Es wurde in eine Float"=Umgebung eingefügt, die man \vpageref{toc:b}
+findet.)
+
+% \footnote{Innerhalb der |figure|-Umgebung und vor dem gerahmten
+% Inhaltsverzeichnis, welches die Option |multicols| nutzt, haben wir den Befehl
+% \csa{normalcolor} eingefügt, um einen Bug zu umgehen, der durch die Interaktion
+% zwischen |multicols|, |color| und der |figure|-Umgebung entsteht. (Wir brauchen
+% den Befehl \csa{color\{red\}} in der |.toc|-Datei.) Der Fehler wird nicht durch
+% das \etoc"=Paket verursacht.}
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex}
+\etocdefaultlines
+\begingroup
+\renewcommand{\etoccolumnsep}{2em}
+\renewcommand{\etocinnerleftsep}{1.5em}
+\renewcommand{\etocinnerrightsep}{1.5em}
+% Befehle für die Hintergrundfarbe des Inhaltsverzeichnisses
+\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}}
+% Befehle für die Rechtecke vor und nach dem Inhalt des Verzeichnisses
+\renewcommand{\etoctoprule}{\hrule height 1pt}
+\renewcommand{\etoctoprulecolorcmd}{\color{red!25}}
+\renewcommand{\etocbottomrule}{\hrule height 1pt}
+\renewcommand{\etocbottomrulecolorcmd}{\color{red!25}}
+% Befehle für die Rechtecke links und rechts des Inhaltsverzeichnisses
+\renewcommand{\etocleftrule}{\vrule width 5pt}
+\renewcommand{\etocrightrule}{\vrule width 5pt}
+\renewcommand{\etocleftrulecolorcmd}{\color{red!25}}
+\renewcommand{\etocrightrulecolorcmd}{\color{red!25}}
+% mit \fcolorbox legen wir einen farbigen Rahmen für den Titel an
+\fboxrule1pt
+\renewcommand{\etocbelowtocskip}{0pt\relax}
+\etocframedstyle {\normalsize\rmfamily\itshape
+ \fcolorbox{red}{white}{\parbox{.8\linewidth}{\centering
+ Dies ist das nach \etoc gestaltete Inhaltsverzeichnis, welches
+ jedoch nur die Abschnitte und Unterabschnitte dieses Teils
+ enthält. Da es gerahmt ist, darf es nicht größer sein als eine Seite.
+ Es hat das Label |toc:b|.}}}
+\begin{figure}[ht!]
+ \centering
+\tableofcontents \label{toc:b} \ref{toc:globalcmds}
+\end{figure}
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+
+\filecontentsexec\filecontentsheremacro
+
+\section{Ein weiteres TOC mit einer Hintergrundfarbe}\label{ssec:again}
+
+Lassen Sie uns nun einige anspruchsvollere Linienstile versuchen. Das Display
+wird den Paket"=Befehl \csa{etocframedstyle} verwenden, damit das erzeugte
+Inhaltsverzeichnis auf eine einzige Seite passt. Wir wickeln es in eine
+\hyperref[toc:floating]{Figur"=Umgebung}, damit es auf der aktuellen Seite
+angezeigt wird. \vpageref{toc:floating}.
+
+Das aktuelle Design ist nicht in \etoc vorgefertigt; sondern nutzt seine
+`eingerahmten' Stile mit einer Hintergrundfarbe. Die Rahmengrenzen wurden so
+gesetzt, dass die gleiche Farbe, wie die Hintergrundfarbe, für die gesamte Sache
+dienen soll.
+
+% Dieses Design (mit anderen Farben) wird auch für
+% \hyperref[toc:clone]{dieses andere Inhaltsverzeichnis} benutzt, und der Leser
+% bezieht sich auf seine \hyperref[ssec:tocclone]{Unterabschnitte}, welche für die
+% Kodierung vorgesehen sind.
+
+\begin{otherlanguage}{english}
+ The details of the line styles used here are a bit involved, they were
+ written by the author at some early stage of this documentation and have
+ only been slightly revised to use more \LaTeX-commands and less
+ \TeX-primitives. Similar code is used also for
+ \hyperref[toc:clone]{this other toc}.
+\end{otherlanguage}
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\begin{figure}[htbp!]\centering
+\colorlet{subsecnum}{black}
+\colorlet{secbackground}{green!30}
+\colorlet{tocbackground}{red!20!green!20}
+
+\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}}
+\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}}
+
+\renewcommand{\etocleftrule}{\vrule width 3cm}
+\renewcommand{\etocrightrule}{\vrule width 1cm}
+\renewcommand{\etocbottomrule}{\hrule height 12pt}
+\renewcommand{\etoctoprule}{\hrule height 12pt}
+
+\renewcommand{\etocinnertopsep}{0pt}
+\renewcommand{\etocinnerbottomsep}{0pt}
+\renewcommand{\etocinnerleftsep}{0pt}
+\renewcommand{\etocinnerrightsep}{0pt}
+
+\newcommand\shiftedwhiterule[2]{%
+ \hbox to \linewidth{\color{white}%
+ \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip
+ \vskip#2}
+
+\etocsetstyle{subsubsection}
+{\etocskipfirstprefix}
+{\shiftedwhiterule{\leftskip}{6pt}}
+{\sffamily\footnotesize
+ \leftskip2.3cm\hangindent1cm\rightskip.5cm\relax
+ \makebox[1cm][l]{\color{subsecnum}\etocnumber}%
+ \color{black}\etocname
+ \nobreak\leaders\hbox to.2cm{\hss.}\hfill
+ \rlap{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}\par
+ \nointerlineskip\vskip3pt}
+{}
+
+\etocsetstyle{subsection}
+{\etocskipfirstprefix}
+{\shiftedwhiterule{1.5cm}{6pt}}
+{\sffamily\small
+ \leftskip1.5cm\hangindent.8cm\rightskip.5cm\relax
+ \makebox[.75cm][l]{\color{subsecnum}\etocnumber}%
+ \color{black}\etocname
+ \nobreak\leaders\hbox to.2cm{\hss.}\hfill
+ \rlap{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}\par
+ \nointerlineskip\vskip3pt}
+{}
+
+\newcommand{\coloredstuff}[2]{%
+ \leftskip0pt\rightskip0pt\parskip0pt
+ \fboxsep0pt % \colorbox uses \fboxsep also when no frame!
+ \noindent\colorbox{secbackground}
+ {\parbox{\linewidth}{%
+ \vskip5pt
+ {\noindent\color{#1}#2\par}\nointerlineskip
+ \vskip3pt}}%
+ \par\nointerlineskip}
+
+\etocsetstyle{section}
+{\coloredstuff{blue}{\hfil \bfseries\large Contents of Part One\hfil}}
+{\vskip3pt\sffamily\small}
+{\coloredstuff{blue}
+ {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip
+ \makebox[0pt][r]{\makebox[.5cm][l]{\etocnumber}}%
+ \etocname\nobreak\hfill\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}%
+ \vskip6pt}
+{}
+
+\etocframedstyle[1]{}
+\tableofcontents \label{toc:floating} \ref{toc:overview}
+\vspace{-\baselineskip}
+\centeredline{|\tableofcontents \ref{toc:overview}|
+(\emph{cf.} \hyperref[toc:clone]{this other toc})}
+\end{figure}
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\filecontentsexec\filecontentsheremacro
+
+
+\section{Eine (verrückte) In\-line"=Dar\-stellung}
+
+Nun wollen wir eine etwas verrückte Inline"=Darstellung erzeugen, womit das
+Inhaltsverzeichnis des gesamten Dokuments gesetzt werden soll. Hier werden die
+Unterabschnitte als Fußnoten dargestellt. Diese Art der Darstellung bietet sich
+eher für verlinkte Dokumente an, weniger für gedruckte! (Mir hingegen gefällt
+diese Art der Darstellung, obwohl mein Geschmack scheinbar oft nicht geteilt
+wird.)
+
+%%%% Note: 27 april 2014
+
+%%%% except for a miraculous situation depending from the quantity of previous
+%%%% material this TOC will have links extending accross pagebreaks, which
+%%%% dvipdfmx does not know how to handle completely. Apart from that the output
+%%%% is ok, thus no need to try seriously to avoid them.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}-B.tex}{\foo}
+\begingroup
+\newsavebox{\forsubsections}
+\etocsetstyle{part}{\upshape. \etocskipfirstprefix}
+ {. \upshape}
+ {\bfseries\etocname:~~}
+ {}
+\etocsetstyle{section}{\itshape\etocskipfirstprefix}
+ {, }
+ {\mdseries\etocname}
+ {}
+\etocsetstyle{subsection}
+ {\begin{lrbox}{\forsubsections}\upshape\etocskipfirstprefix}
+ {; }
+ {\etocname}
+ {\end{lrbox}\footnote{\unhbox\forsubsections.}}
+\etocsetstyle{subsubsection}
+ { (\itshape\etocskipfirstprefix}
+ {, }
+ {\etocname}
+ {\/\upshape)}
+\etocsettocstyle{Hier ist das inline dargestellte Inhaltsverzeichnis. }{.\par}
+\tableofcontents
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+Zur Erzeugung dieses Inhaltsverzeichnisses wurde folgender Code genutzt:
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}-B.tex}
+
+
+\clearpage
+\etocdepthtag.toc {surprising}
+\part{Überraschende Anwendungen von \etoc}
+\label{part:surprising}
+
+\thispartstats %% (pas de sous-section)
+
+% in dtx of release 1.07h there was here a \thisspecialstats, but it
+% originated from the period when this \part was only a \section. So its
+% effect was not the intended one, basically it had the same effect as this:
+\etocstandardlines
+\etocsettocstyle {}{}
+\localtableofcontents
+
+\section{Das TOC für TOCs}
+
+\begingroup % \endgroup just after the \tableofcontents command
+\etocinline
+\etocsetlevel{part}{1}
+\etocsetlevel{visibletoc}{0}
+\etocsetstyle{visibletoc}
+ {\etocskipfirstprefix}
+ {, }
+ {{\color{niceone}\etocname}}
+ {}
+\etocsettocstyle{}{}
+\etocsetnexttocdepth{visibletoc}
+
+Hier ist die nummerierte und verknüpfte Liste aller Tabellen von Inhalten, die
+in diesem Dokument dargestellt sind \footnote{Die Inhaltsverzeichnisse können
+ "`Schwimmer"' setzen, um die Reihenfolge zu ändern: die Zahlen werden in der
+ Reihenfolge der Inhaltsverzeichnisse in dem Dokument aufgeführt; aber die
+ Nummerierung selbst ist von der Reihenfolge der Inhaltsverzeichnisse in der
+ \emph{Quelle} dieses Dokumentes \ldots}
+\tableofcontents\endgroup. Und hier erhalten wir, was
+wir gerade geschrieben haben:\par\smallskip
+{\leftskip1cm\rightskip2cm
+ \ttfamily\small\baselineskip11pt \noindent Hier ist die
+ nummerierte und verknüpfte Liste aller Tabellen von Inhalten, die in
+ diesem Dokument dargestellt sind:~\string\tableofcontents.\par}
+
+Die vorausgehenden Arbeiten waren wie folgt. Zuerst definierten wir einen Zähler
+|visibletoc|, dessen Berufung es ist, bei jedem angezeigten Inhaltsverzeichnis
+erhöht zu werden. \etoc hat einen eigenen Zähler, aber es zählen alle
+Inhaltsverzeichnisse, auch wenn diese nicht angezeigt werden, da die |tocdepth|
+Werte |-2| oder |-3| waren.
+
+Wir könnten manuell |\refstepcounter{visibletoc}| und |\label| an allen
+geeigneten Stellen im Dokument hinzufügen, und wir würden dann |\ref|- Befehle
+verwenden, aber dies stellt eine hohe manuelle Bearbeitung der Quelle dar.
+
+Es gibt eine viel bessere Möglichkeit: Es gibt einen Aufhänger
+\csb{etocaftertitlehook} und wir sagten, es erhöht sich der |visibletoc|-Zähler
+und wir schreiben eine Anlage zu der |.toc|-Datei, in analoger Weise zu dem
+Gliederungsbefehl, zum Beispiel |Kapitel|, |Abschnitt| oder |Unterabschnitt|.
+Wie \etoc seinen eigenen Zähler erhöht, noch bevor der Titel des
+Inhaltsverzeichnisses gesetzt wird, bietet diese (die meiste Zeit) einen
+besseren Link"=Zielpunkt als jeder Zähler von \csa{etocaftertitlehook} (der Link
+wird nach dem Titel platziert). Anstatt mit |\refstepcounter{visibletoc}|,
+innerhalb von \csa{etocaftertitlehook}, formulieren wir
+|\stepcounter{visibletoc}|, dann folgt der Befehl
+\csb{etoctoccontentsline}|{visibletoc}{\thevisibletoc}|. Dieser \etoc"=Befehl
+\csb{etoctoccontentsline}\marg{level\_name}\marg{name} hat die gleiche Wirkung
+wie: \centeredline{| ||\addcontentsline{toc}|\marg{level\_name}\marg{name}} aber
+sein Nutzen ist es \footnote{Mit \csa{addtocontents} anstatt
+ \csa{addcontentsline}.}, die Reparatur der automatischen Erstellung von
+Lesezeichen zu verhindern mit \csa{addcontentsline} bei dem |hyperref|-Paket,
+wie die pdf"=Lesezeichen machen sie nicht viel Sinn hier (und würde eine
+Beschwerde bezüglich von |hyperref| eruieren, denn das Lesezeichen"=Niveau ist
+`unbekannt').\footnote{ Das Paket bietet eine Stern"=Variante
+ \staritb{etoctoccontentsline}, die zulässt, dass die Erstellung von
+ Lesezeichen und das Haben eines dritten obligatorischen Arguments, welches das
+ Lesezeichen"=Niveau darstellt, funktioniert; abhängig vom Kontext kann die
+ Hauptrolle und die Nicht"=Stern"=Variante profitabel durch \csa{phantomsection}
+ sein.}
+
+Schließlich war in der Präambel des Dokuments |\etocsetlevel{visibletoc}{6}|.
+Das Niveau |6| (oder etwas mit einer höheren Zahl) wird ignoriert, auch wenn
+|tocdepth| zum Beispiel den Wert |10| hat; das ist unabhängig davon, ob \etoc
+die Dokumentenklasse als Standardlinien oder als eigene Linienstile nutzt oder
+die, die vom Benutzer mit \csa{etocsetstyle} Befehl definiert wurden. Es gibt
+also keinen Grund zur Sorge, dass etwas schief gehen könnte.
+
+Dann haben wir hier nur |\etocsetlevel{visibletoc}{0}| gesetzt. Und nur diese
+Art von Einträgen weisen wir vorübergehend eine |Teil|- und |Kapitel|-Ebene |1|
+zu (oder etwas höher als null) und setzen |tocdepth| auf den Wert |0|. Wir haben
+auch \csa{etocsetstyle\{visibletoc\}\{\string\etocskipfirstprefix\}\{,
+ \}\{\string\etocname\}\{\}}, welche eine innere Anzeige mit dem Komma als
+Trennzeichen definiert. Wie \etoc Aspekte |\par| automatisch als Standard das
+Inhaltsverzeichnis setzt, verwendeten wir den Befehl \csb{etocinline} (auch als
+\cs{etocnopar} bekannt), welches die Reaktion ausmacht .
+
+Hier sind die Details der Implementierung:
+
+\begingroup
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+ < in der Prämbel >
+\newcounter{visibletoc}
+\renewcommand{\etocaftertitlehook}
+ {\stepcounter{visibletoc}\etoctoccontentsline{visibletoc}{\thevisibletoc}}
+\etocsetlevel{visibletoc}{6}
+\begin{document}
+ < document body >
+\subsection{Surprising uses of etoc}
+\begingroup
+ \etocinline
+ \etocsetlevel{part}{1}
+ % \etocsetlevel{chapter}{1} % (keine Kapitel in scrartcl Klasse)
+ \etocsetlevel{visibletoc}{0}
+ \etocsetstyle{visibletoc}
+ {\etocskipfirstprefix}{, }{{\color{niceone}\etocname}}{}
+ \etocsettocstyle{}{} % keine Titel, Regeln oder Rahmen festgelegt!
+ \etocsetnexttocdepth{visibletoc} % zeigt nur die `visibletoc' Einträge an aus .toc
+
+Hier ist die nummerierte und verknüpfte Liste aller Tabellen von Inhalten,
+die in diesem Dokument angezeigt werden: \tableofcontents.
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+\endgroup
+
+Nach |\etocsetstyle{visibletoc}{..}{..}{..}{..}|, wird für alle zukünftigen
+Inhaltsverzeichnisse (nicht im
+Kompatibilitätsmodus) der definierte Stil für das Niveau
+|0| verwendet (was normalerweise der Pegel für ein Kapitel
+ist). Um diese Änderung auf die einfachste Art und Weise zu halten, muss man
+alles in eine Gruppe setzen.
+
+Der \autoref{subsec:interverting} gibt eine andere Verwendung
+von Verschachtelungsstufen an.
+
+\section{Willkürliche "`Listen von \ldots "', \csbhyp{etoctoccontentsline}}
+\label{etoctoccontentsline}
+
+Die Idee der Internabwehr ist leistungsfähig und ermöglicht
+\etoc"=Anzeigelisten, um beliebige Dinge in dem Dokument enthalten zu lassen.
+Und all das mit noch nichts anderem als der
+|.toc| Datei!
+Beispiel: Stellen Sie sich ein Dokument mit Dutzenden von Übungen vor,
+vielleicht als |\newtheorem{exercise}{}[section]|.
+Lassen Sie uns erklären, wie man \etoc anweist, eine verlinkte Liste all dieser
+Übungen anzuzeigen. Dafür haben wir in der Präambel geschrieben:
+\begin{verbatim}
+ \newtheorem{exerci}{}[section]
+ % the exercice number will be recoverable via \etocname: v--here--v
+ \newcommand*{\exercisetotoc}{\etoctoccontentsline{exercise}{\theexerci}}
+ \newenvironment{exercise}{\begin{exerci}\exercisetotoc}{\end{exerci}}
+ \etocsetlevel{exercise}{6}
+\end{verbatim}
+Auf diese Weise wird \csa{etocname} die Übungsnummer vergeben (aber
+\csa{etocnumber} wird leer sein). Hätten wir stattdessen
+\begin{verbatim}
+ \newcommand*{\exercisetotoc}
+ {\etoctoccontentsline{exercise}{\protect\numberline{\theexerci}}}
+\end{verbatim}
+%
+verwendet, wäre die Übungsnummer via \csa{etocnumber} verfügbar und
+\csa{etocname} wäre leer gewesen. Es spielt keine Rolle, welches der beiden
+Verfahren verwendet wird. Der \etoc Befehl \csa{etoctoccontentsline}|{..}{..}|
+wird als Ersatz für \csa{addcon\-tentsline}|{toc}{..}{..}| verwendet: Das ist
+die, die durch das Reparieren von |hyperref| zu \csa{addcontentsline} verwendet
+wird, um in ihrem Prozess die Erstellung von Lesezeichen zu vermeiden. Wenn man
+|hyperref| ermächtigt, Lesezeichen auf einer bestimmten Ebene \meta{n} zu
+erschaffen, kann einer (hier mit \meta{n}$=$|2|) die Stern"=Variante
+\starit{etoctoccontentsline} benutzen, welche ein zusätzliches Argument hat:
+%
+\begin{verbatim}
+\newcommand{\exercisetotoc}{\etoctoccontentsline*{exercise}{\theexerci}{2}}
+\end{verbatim}
+
+Der Zähler |exerci| wird bereits durch das |exerci|-Theoremumfeld erhöht und
+sorgt für den richtigen Ort für den Link zusätzlich zum Paket
+|hyperref|. Der Befehl \csa{exercisetotoc} fügt für jede Übung eine Zeile in die
+|.toc|-Datei, entsprechend einer fiktiven Dokumenteinheit
+mit dem Namen `|Übung|' ein. Eine
+Vier"=Säulen"=Liste, einschließlich der Abschnitte, kann dann erreichen mit
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+ \etocsetnexttocdepth{2} % Abschnitte sind auf Stufe 1 und werden anzeigen
+\begingroup
+ \etocsetlevel{exercise}{2} % aber:
+ \etocsetlevel{chapter}{3} % keine Kapitel
+ \etocsetlevel{subsection}{3} % keine Unterabschnitte
+ \etocsetlevel{part}{3} % keine Parts
+ \etocsetstyle{exercise}{}{} % \etocname = exercise number
+ {\noindent\etocname\strut\leaders\etoctoclineleaders\hfill\etocpage\par}
+ {\pagebreak[2]\vskip\baselineskip}
+ \etocsetstyle{section}{}{}
+ {\noindent\strut{\bfseries\large\etocnumber\hskip.5em\etocname}\par
+ \nopagebreak[3]}{}
+ \etocruledstyle[4]{\Large\bfseries List of the exercises}
+ \setlength{\columnseprule}{.4pt}
+ \tableofcontents
+\endgroup
+ \end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\section{Das TOC als ein Baum}\label{tocastree}
+
+Mit |tikz|\footnote{\url{http://ctan.org/pkg/pgf}} und dem Paket
+|forest|\footnote{\url{http://ctan.org/pkg/forest}} wird das Inhaltsverzeichnis
+als Baum angezeigt. Die Technik ist, den von \etoc geänderten Befehl
+\csa{tableofcontents} nicht für den Satz zu verwenden, sondern ein Makro, oder
+besser hier eine \emph{symbolische Liste}-Variable vorzubereiten, mit allen
+Anweisungen, die später ausgeführt werden. \textsc{Leslie Lamport}'s Buch
+erwähnt überhaupt nicht die symbolische Liste und \LaTeX{} vermittelt den
+Eindruck, nicht wirklich darauf zu warten, dass die Mehrheit der Nutzer immer
+über sie (oder begrenzte Makros) etwas hört; die ganze Sache und der folgende
+Abschnitt sind daher für fortgeschrittene Anwender.
+
+Setzt man die \csa{etocnumber}- und \csa{etocname}"=Befehle in \csa{treetok},
+dann würde das nichts nützen: Auf welche Zahl oder Namen würde sich das dann
+beziehen, in einer verzögerten Ausführung?
+
+Wir brauchen die Speicherung der Makro"=Namen, aber nicht die Makro"=Inhalte. Und
+wir wollen auch die korrekten |hyperref|-Hyper"=Links erhalten.\footnote{Dieses
+Handbuch bis zu der Version vom 14. Mai 2013 verwendete das Paket |tikz-qtree|,
+aber es gab Probleme mit den Hyper"=Links. Kein solches Problem entsteht mit
+|forest| oder mit der nativen Syntax |tikz| für Bäume (die im nächsten Abschnitt
+dargestellt sind).}
+
+Die Befehle \csa{etocname}, etc\dots sind robust. Es ist einfacher
+mit \csa{etocthelinkednumber}, \csa{etocthelinkedname} und
+\csa{etocthelinkedpage}, das die gleichen Informationen in einer
+einfacher zugänglichen Form enthält.
+
+Aus diesem |forest|"=Baum haben wir ganz besondere \etoc"=Stile
+für Abschnitte und
+Unterabschnitte konzipiert. Sie verwenden ein symbolisches Listenregister mit
+dem Namen |\treetok| und ein Makro |\appendtotok|, deren Aufgabe es ist, zu
+einer bestimmten symbolischen Listenvariablen den Inhalt eines Makros als
+zweites Argument anzuhängen. All dies wird in Reaktion auf einen Befehl
+|\tableofcontents| passieren, aber noch ist \emph{nichts} in deren
+Prozess.\footnote{Es gibt immer ein \csa{par}, welches kein Problem ist, es kann
+aber unterdrückt werden, wenn der Bedarf über den Befehl \csb{etocinline} oder
+dessen Synonym \csb{etocnopar} besteht.} Das ist der spätere Job einer
+|forest|-Umgebung, die den Inhalt von |\treetok| wiedergeben soll.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+% \newtoks\treetok % move this (uncommented) to preamble
+% \newtoks\tmptok
+
+\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2
+ #1\expandafter\expandafter\expandafter
+ {\expandafter\the\expandafter #1#2}}
+
+\newcommand*\PrepareSectionNode{%
+ \tmptok {\centering\bfseries}%
+ \appendtotok\tmptok\etocthelinkedname
+ \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}%
+}
+
+\newcommand*{\PrepareSubsectionNode}{%
+ \tmptok {\raggedright}%
+ \appendtotok\tmptok\etocthelinkedname
+ \edef\foresttreenode{ [{\noexpand\parbox{6cm}{\the\tmptok}}}%
+}
+
+\etocsetstyle{section}
+ {\etocskipfirstprefix}
+ {\appendtotok\treetok{ ]}}
+ {\PrepareSectionNode \appendtotok\treetok\foresttreenode}
+ {\appendtotok\treetok{ ]}}
+
+\etocsetstyle{subsection}
+ {\etocskipfirstprefix}
+ {\appendtotok\treetok{ ]}}
+ {\PrepareSubsectionNode \appendtotok\treetok\foresttreenode}
+ {\appendtotok\treetok{ ]}}
+
+\etocsettocstyle
+ {\treetok{[{\hyperref[part:overview]{Überblick}}}}
+ {\global\appendtotok\treetok{ ]}}
+
+% forest does not like @\the\treetok if \treetok is empty. On first latex
+% run, this will be the case because the TOC style defined above will not
+% have been executed, as the label {toc:overview} does not refer to a valid
+% TOC yet. So we must give a safe default value to \treetok
+\treetok{[{run latex again}]}
+
+\begin{figure}[thp!]\centering
+ \etocsetnexttocdepth{subsection}
+ \tableofcontents \label{toc:forest}\ref{toc:overview}
+ \hypersetup{hidelinks}%
+ \bracketset{action character=@}
+ \begin{forest}
+ for tree={anchor=center,child anchor=west,
+ grow'=east,draw,thick,
+ edge={draw,thick,dashed,color=teal}},
+ where={level()==1}{circle,thick,fill=blue!5,
+ before computing xy={l=3cm}}{},
+ where={level()==2}{fill=red!5,
+ before computing xy={l=6cm}}{},
+ rectangle, thick, fill=cyan!5, inner sep=6pt,
+ @\the\treetok
+ \end{forest}
+\end{figure}
+\end{filecontentsdef}
+
+\let\appendtotok\relax
+\filecontentsexec\foo
+
+Der resultierende Baum wird in einem \hyperref[toc:forest]{Puffer} angelegt, welcher
+\vpageref[oben]{toc:forest} erscheint. Hier ist der zur Herstellung notwendige Code:
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+Warum |\hypersetup{hidelinks}|? Wie in \autoref{ssec:hidelinks} erläutert ist,
+werden die Links in Inhaltsverzeichnissen nicht eingefärbt, noch gerahmt, so
+dass dieses Dokument den Befehl
+|\hypersetup{hidelinks}|
+hinzufügt. Aber immer werden die |\treetok|-Inhalte in die
+|\hyperlink|-Ursprungsbefehle in |\etocthelinkedname| ausgepackt, etc. \ldots{}
+Sie werden in der normalen Umgebung für Links (die in diesem Dokument zu
+kolorieren sind) ausgeführt. Der \etoc -Code versucht zu erraten, was der
+aktuelle "`Stil"' für Links ist (ein Begriff, der nicht wirklich von |hyperref|
+vorausgesetzt zu sein scheint) und speichert es in |\etocthelinkedname|, etc.
+\ldots, Ich entschied mich für die einfachere Lösung, es dem Benutzer zu
+überlassen, ob er es neu erstellt, was auch immer für Bedingungen erwünscht
+sind. So, hier ist es notwendig, das |\hypersetup{hidelinks}| in dem
+|figure|-Umgebung neu zu erstellen.
+
+Es gibt einige andere Beispiele in dieser Dokumentation, wobei
+|\tableofcontents| verwendet wird, um Material zu haben für den späteren
+Schriftsatz:
+\begin{itemize}
+\item Für das Drucken der Statistiken zu Beginn der einzelnen Abschnitte (siehe
+ \autoref{ssec:statistics}) wurden unbeschädigte Boxen benutzt (das Problem der
+ Darstellung der Links funktioniert nicht).
+\item Zum Setzen des Inhaltsverzeichnisses als eine Tabelle mit der Methode von
+ \autoref{ssec:tocastableold};
+ auch dort werden wir |\hypersetup{hidelinks}| setzen, nachdem wir die Namen,
+ Nummern und Seitennummern in einem symbolischen Listenregister gesetzt haben.
+\item Und zwei weitere Baum"=Beispiele sind im nächsten Abschnitt.
+\end{itemize}
+
+
+\section{Das TOC als ein Molekül}\label{sec:molecule}
+
+Es ist auch möglich, einen Inhaltsverzeichnisbaum nach der TikZ-Syntax für Bäume
+zu konstruieren: Aber das ist eine kompliziertere Aufgabe für die \etoc
+Linienstile, welche die Klammern in einer Art und Weise von \TeX{} behandeln.
+(Sie brauchen für das Auffüllen der symbolischen Liste im Zusammenhang mit jedem
+Schritt immer eine Balance, sonst müssen immer kompliziertere Tricks angewandt
+werden.).
+
+Die einfachste Strategie ist es, eine symbolische Liste zuzuweisen (oder Sie
+verwenden ein Makro) für jede Ebene: Wir brauchen ein \csa{parttok}, ein
+\csa{chaptertok}, ein \csa{sectiontok} und ein \csa{subsectiontok}, um in der
+Aufgabe die \csa{treetok} zu befüllen. Wir interessieren uns hier für die
+Tabelle der Inhalte von diesem (oder einem anderen) Dokumententeil, nur ein
+\csa{sectiontok} und ein \csa{subsectiontok} wird dafür gebraucht.
+
+\let\appendchildtree\relax
+\let\treenode\relax
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex}
+% \newtoks\treetok % put this uncommented in preamble
+% \newtoks\sectiontok
+% \newtoks\subsectiontok
+
+\newcommand*{\treenode}{}
+
+\newcommand*{\appendchildtree}[2]{% token list t1 becomes: t1 child {t2}
+ \edef\tmp{\the#1 child {\the#2}}%
+ #1\expandafter{\tmp}%
+}
+\newcommand*{\preparetreenode}{%
+ \tmptok\expandafter{\etocthelinkednumber}% expanded one time (mandatory)
+ \edef\treenode{node {\the\tmptok}}%
+}
+
+\etocsetstyle{section}
+ {\etocskipfirstprefix}
+ {\appendchildtree\treetok\sectiontok}
+ {\preparetreenode \sectiontok\expandafter{\treenode}}
+ {\appendchildtree\treetok\sectiontok}
+
+\etocsetstyle{subsection}
+ {\etocskipfirstprefix}
+ {\appendchildtree\sectiontok\subsectiontok}
+ {\preparetreenode \subsectiontok\expandafter{\treenode}}
+ {\appendchildtree\sectiontok\subsectiontok}
+
+\etocsettocstyle
+ {\treetok{\node {\hyperref[part:overview]{Overview}}}}
+ {\global\appendtotok\treetok{ ;}}
+
+\begin{figure}[thp!]\centering
+\etocsetnexttocdepth{subsection}
+ \tableofcontents \label{toc:molecule}\ref{toc:overview}
+ \hypersetup{hidelinks}%
+ \begin{tikzpicture}
+ [grow cyclic,
+ level 1/.style={level distance=4cm,sibling angle=72},
+ level 2/.style={level distance=2cm,sibling angle=60},
+ every node/.style={ball color=red,circle,text=SkyBlue},
+ edge from parent path={[dashed,very thick,color=cyan]
+ (\tikzparentnode) --(\tikzchildnode)}]
+ \the\treetok
+ \end{tikzpicture}
+ \centeredline{Ein Inhaltsverzeichnis als ein "`Molekül"'.}
+\end{figure}
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+
+\filecontentsexec\filecontentsheremacro
+
+% Pour que \pageref fonctionne correctement, je dois mettre
+% le \tableofcontents dans la figure.
+
+Der |\tableofcontents|"=Befehl erscheint direkt über der Umgebung in dem
+|tikzpicture|-Umfeld und ist eine Gleitfigur (über Inhaltslabel sicherlich auf
+die gleiche Seite zu beziehen, wie die in dem das Bild tatsächlich gedruckt
+werden soll). Wir erhalten somit das Inhaltsverzeichnis als
+"`\hyperref[toc:molecule]{Molekül}"', welches oben erscheint
+\vpageref[above]{toc:molecule}.
+
+Dieses \hyperref[toc:molecule]{TikZ-TOC} ist komplett verlinkt, wie das
+vorherige \hyperref[toc:forest]{Forest-TOC} auch.
+
+\etocsettocstyle
+ {\treetok{\node {\autoref{part:globalcmds}}}}
+ {\global\appendtotok\treetok{ ;}}
+
+\etocsetnexttocdepth {subsection}
+\tableofcontents \ref{toc:globalcmds}
+
+\noindent
+\parbox{4cm}{\hypersetup{hidelinks}%
+ \begin{tikzpicture}
+ [grow cyclic,
+ level 1/.style={level distance=2.5cm,sibling angle=60},
+ level 2/.style={level distance=1cm,sibling angle=45},
+ every node/.style={ball color=red!50,circle,text=black},
+ edge from parent path={[very thick,color=cyan]
+ (\tikzparentnode) --(\tikzchildnode)}]
+ \the\treetok
+ \end{tikzpicture}}%
+\begin{minipage}{\dimexpr\linewidth-4cm\relax}
+ Seitlich ist das (völlig mit Hyper"=Links versehene) Inhaltsverzeichnis von
+ \autoref{part:globalcmds}.
+ \def\MacroFont{\ttfamily\small\hyphenchar\font-1 \baselineskip10pt\relax}%
+\begin{verbatim}
+\etocsettocstyle
+ {\treetok{\node {\autoref{part:globalcmds}}}}
+ {\global\appendtotok\treetok{ ;}}
+\etocsetnexttocdepth {subsection}
+\tableofcontents \ref{toc:globalcmds}
+\noindent
+\parbox{4cm}{\hypersetup{hidelinks}%
+ \begin{tikzpicture}
+ [grow cyclic,
+ level 1/.style={level distance=2.5cm,sibling angle=60},
+ level 2/.style={level distance=1cm,sibling angle=45},
+ every node/.style={ball color=red!50,circle,text=black},
+ edge from parent path={[very thick,color=cyan]
+ (\tikzparentnode) --(\tikzchildnode)}]
+ \the\treetok
+ \end{tikzpicture}}%
+...
+\end{verbatim}
+\end{minipage}
+
+\section{Das TOC als ein TikZ Mind"=Map}
+\label{sec:mindmap}
+
+Das ist in dem gleichen Sinn wie das "`Molekül"'-Beispiel. Die
+Verwendung des \eTeX -Primitivs-\csa{unexpanded} vereinfacht den
+Code.\footnote{das "`Molekül"'-Beispiel wurde am |2015/03/11| in
+diese Dokumentation aufgenommen . Das "`Mindmap"''-Beispiel wurde
+motiviert von \url{http://tex.stackexchange.com/a/232584/4686}.
+Weitere Hilfe kam damals via
+\url{http://tex.stackexchange.com/q/232816/4686} und dies führte
+zu dem weiteren Beispiel \hyperref[toc:mindmaptitlepage]{title
+page}.}
+
+\let\childnode\relax
+\let\appendchildtree\relax
+\let\appendtotok\relax
+\expandafter\let\csname c@partco\endcsname\relax
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\begingroup
+% \newtoks\treetok % in preamble
+% \newtoks\parttok % in preamble
+
+\newcommand*\partnode {} % just to check we don't overwrite something
+\newcommand*\childnode {}
+
+\newcommand*\tmprotate {} % just to check we don't overwrite something
+\newcommand*\tmpoption {} % just to check we don't overwrite something
+\newcommand*\tmpstuff {} % just to check we don't overwrite something
+
+\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2
+ #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}}
+
+\newcommand*{\appendchildtree}[3]{%
+% this is to construct "t1 child [#3]{t2}" from #1=t1 and #2=t2
+% t1 and t2 are two toks variable (not macros)
+% #3 = for example teal!60
+ \edef\tmpstuff {\the#1 child [#3]{\the#2}}%
+ #1\expandafter {\tmpstuff }%
+}
+
+\newcounter{partco}
+
+% 1,2,3,4,5,... -> 1,2,3,1,2,3,1,2,3
+\def\pseudomodthree #1{\numexpr #1 + 3 - 3*((#1+1)/3)\relax}
+
+\etocsetstyle{part}
+ {\etocskipfirstprefix}
+% This updates the global tree with the data from the previous
+% part and all its children sections. Moved here because for some parts the
+% sections are not displayed due to depth tags.
+ {\ifnum\value{partco}=3
+ \appendchildtree\treetok\parttok {branch color= green!50,level distance=10cm}%
+ \else
+\ifcase\pseudomodthree{\value{partco}}%
+ \or \appendchildtree\treetok\parttok {branch color= teal!60}% first
+ \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+ \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
+ \fi\fi
+ }
+ {\stepcounter{partco}%
+% customize manually some TikZ set-up (should be done inside the TikZ thing I guess)
+ \def\tmpoption {}%
+ \def\tmprotate {}% first
+ %\ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
+ %\ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
+% define the part node
+ \edef\partnode{node \tmpoption
+ {\unexpanded\expandafter{\etocthelinkednumber}.
+ \unexpanded\expandafter{\etocthelinkedname}}\tmprotate }%
+% this is a starting point which will be filled it by the section children
+ \parttok\expandafter{\partnode}}
+ {\ifcase\pseudomodthree{\value{partco}}%
+ \or \appendchildtree\treetok\parttok {branch color= teal!60}% first
+ \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+ \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
+ \fi
+ }
+
+\etocsetstyle{section}
+ {}
+ {}
+ {% define the section node
+ \edef\childnode{child {node {\unexpanded\expandafter{\etocthelinkednumber}
+ \unexpanded\expandafter{\etocthelinkedname}}}}%
+ % append it to the current \parttok
+ \appendtotok\parttok\childnode
+ }
+ {}
+
+\etocsettocstyle
+ {\setcounter{partco}{0}%
+ \treetok{\node [root concept]{\textbf{The \etoc documentation}}}}
+ {\global\appendtotok\treetok{ ;}}
+% The \global above is mandatory because etoc always typesets TOC inside a group
+
+\etocsetnexttocdepth{section}
+% use of depth tags to cut out some sections.
+\etocsettagdepth {preamble} {none}
+\etocsettagdepth {overview} {part}
+\etocsettagdepth {arbitrarily}{part}
+\etocsettagdepth {examples} {section}
+\etocsettagdepth {surprising} {part}
+\etocsettagdepth {linestyles} {part}
+\etocsettagdepth {globalcmds} {part}
+\etocsettagdepth {custom} {section}
+\etocsettagdepth {tips} {part}
+\etocsettagdepth {etocandworld}{part}
+\etocsettagdepth {code} {section}
+
+\tikzset{
+ branch color/.style={
+ concept color=#1!white,
+ every child/.append style={concept color=#1!white!30!white, font=\normalsize},
+ }
+}%
+
+\begin{figure}[thp!]
+\tableofcontents\label{toc:mindmap}%
+\centeredline{\resizebox{.85\paperwidth}{!}%
+{\begin{tikzpicture}[mindmap,
+ grow cyclic,
+ text width=2cm,
+ align=flush center,
+ nodes={concept},
+ concept color=orange!60,
+ root concept/.append style={text width=4cm, font=\Large},
+ level 1/.append style={level distance=5cm,sibling angle=40, text width=3cm},
+ level 2/.append style={level distance=7cm,sibling angle=30, text width=3cm},
+ level 1 concept/.append style={font=\normalsize},
+ ]
+\the\treetok
+\end{tikzpicture}}}
+\end{figure}
+\endgroup
+\end{filecontentsdef}
+\filecontentsexec\foo
+
+Es ist schwierig, alles auf eine Seite einzupassen. Da kommt \csa{resizebox}
+zur Hilfe, das auch Hyperlings bewahrt. Dennoch habe ich für dieses Beispiel
+einige Abschnitte von der Anzeige ausgeschlossen, dafür nehmend die Technik von
+\etoc \hyperref[etocdepthtag.toc]{depth tags}. Das vollverlinkte TOC erscheint
+hier \vpageref{toc:mindmap}.
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+Eine interessante Alternative zur Verwendung von \etoc ist, das
+gesamte TOC in einen TikZ-Baum zu konvertieren (vielleicht mit
+Ausnahme einiger Teile) und in eine Datei zu drucken, von der es
+zurückgewonnen und durch den Autor direkt bearbeitet werden kann.
+Dinge, stehend in der |.log|-Datei, verschaffen zerbrochene
+Zeilen. Hier gibt es eine Technik, um zu nicht zerbrechenden
+Zeilen zu kommen. Sobald \csa{treetok} von \etoc berechnet wurde
+(wie im \hyperref[toc:molecule]{molecule}-Beispiel oder dem
+aktuellen Beispiel), wird dieses folgende Code-Schnipsel
+ausgegeben zur Dateierweiterung
+\begin{verbatim}
+ \newwrite\TOCasTree
+ \immediate\openout\TOCasTree=\jobname.toctree
+ \immediate\write\TOCasTree{\the\treetok}%
+\end{verbatim}
+Der Autor kann sie von dort aus kopieren und
+manuell anpassen, um ein geignetes TikZ-Bild zu erhalten.
+Siehe auch
+\centeredline{\url{http://tex.stackexchange.com/a/232792}}
+
+\section{Das TOC als eine Tabelle}
+\label{sec:tocastable}
+
+Mit der Veröffentlichung-|1.08| ist es einfacher geworden, das TOC
+als Tabelle zu setzen. Es ist nun möglich, eine Tabelle im
+Titel-Teil des TOC zu eröffnen (das erste Argument zu
+\csb{etocsettocstyle}) und zu schließen nach dem Inhalt (zweites
+Argument von \csb{etocsettocstyle}) und es ist auch möglich,
+Linienstile wie in Tabularen |&| und Tabellen am Ende der Zeilen
+|\\| zu nehmen. Es gibt einige Bedingungen und ein paar
+Einschränkungen:
+
+\begin{enumerate}
+\item Es ist notwendig, \csb{etocglobaldefs} auszugeben für
+ \etoc-Definitionen, um einen globalen Skopus zu haben.
+\item Es ist unmöglich, mit einer \meta{start}-, \meta{prefix}-,
+ \meta{contents}- oder \meta{finish}-Spezifikation mit einer
+ einzigen |\hline| zu beginnen, \emph{d.\,h.} eine nicht mit einem
+ |\\| vorausgehende (es ist aber möglich zu setzen |\\| am Ende
+ eines \meta{prefix} und von |\hline| am Beginn von
+ \meta{contents}).
+\item So ist als nächstes zu erläutern, dass es empfehlenswert
+ ist, |\\| am Beginn der \meta{prefix}- oder
+ \meta{contents}-Spezifikationen zu verwenden, um die
+ \emph{vorherige} Reihe abzuschließen, nicht um die \emph{aktuelle}
+ Reihe zu beenden; wenn das TOC ein partielles (ein
+ \csa{localtableofcontents}) ist, wird dieser Ratschlag zur Pflicht
+ (in fast allen Situationen).
+\end{enumerate}
+
+Hier ein Beispiel eines TOCs als ein |longtable|.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}-A.tex}{\foo}
+\begingroup
+\etocglobaldefs % notwendig für \etocname etc... um zu überleben &
+
+% Beachten Sie die Positionierung der \\
+\etocsetstyle{part}
+ {}
+ {\\\hline}
+ {\strut\etocnumber &\bfseries\etocname
+ &\etocpage }
+ {}
+
+\etocsetstyle{section}
+ {}
+ {\etociffirst{\etocifnumbered{\\\hline}{\\\hline\hline}}{\\}}
+ {\etocnumber&\etocname &\etocpage }
+ {}
+
+\etocsetstyle{subsection}
+ {}
+ {\\}
+ {&\makebox[1cm][c]{\etocnumber}%
+ \parbox[t]{\dimexpr6cm-\tabcolsep\relax}
+ {\sloppy\itshape\etocname\strut}%
+ &\itshape\etocpage }
+ {}
+
+\etocsettocstyle
+ {\hypersetup{hidelinks}%
+ \begin{longtable}{|>{\bfseries}c|p{7cm}|r|}
+ \hline
+ \multicolumn{3}{|c|}{\Large\bfseries TABLE OF CONTENTS}%
+ }
+ {\\\hline\end{longtable}}
+
+\etocsetnexttocdepth {subsection}
+
+\tableofcontents
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+Beim Untersuchen des Codes wird sich der Leser fragen, warum die
+|\\| immer zuerst in \meta{prefix+contents} und nicht, wie es
+intuitiver ist, ziemlich später gegeben wird. In vielen Fällen
+kann man in der Tat die TOC-als-Tabellen mit |\\|, die am Ende der
+Stilspezifikationen lokalisiert sind (aber fast nie für ein
+\csa{localtableofcontents}) konstruieren. Das Problem bei dem
+vorhergehenden Beispiel war die Positionierung der |\hline|'s.
+
+Aufgrund der technischen Aspekte, wie \TeX{} die Ausrichtung jeder
+Definition oder Festsetzung definiert, nach einem |\\| beginnt
+eine neue Reihe und so erzeugt |\hline| ein illegales Token (das
+sieht aus wie ein |misplaced \noalign| Fehler). \etoc hat nicht
+nur solche Definitionen um \csb{etocname} etc. \ldots{} zu
+konstruieren, sondern es ist auch der Fall, dass einige Pakete
+Dinge in die |.toc|-Datei tun und in der Folge gibt es keine
+Garantie dafür, dass zwischen zwei \csa{contentsline} kein solches
+Token wie |\relax| ist, wie in den Kontexten von "`alignments
+forces"' macht es \TeX{} unmöglich, um eine Zelle zu beginnen,
+dann setzen Sie eine |\hline|.
+
+Der sicherste Weg ist, jede Linienspezifikation zu beginnen mit
+einem |\\|. Wir hatten ein kleines Problem mit dem Fakt, dass wir
+Teile wollten, die nicht nur eine Regel darüber haben (einfach,
+sie machen |\\\hline|), sondern auch darunter: Nach jedem Teil ist
+ein Abschnitt, und es sind diese Abschnitte, die verwendet werden,
+um die fehlende |\hline| einzufügen (dies wird unter Vorbehalt mit
+Hilfe der \csb{etociffirst}-Bedingung getan).
+
+Der aufmerksame Leser wird eine letzte Feinheit bemerken: Dem
+Titel, so wurde vermutet, sollten nicht eine sondern zwei
+|\hline|'s folgen. Um dieses Problem zu lösen, könnten wir ein
+einmaliges Makro verwenden, das sich redefiniert, aber wir
+bemerkten, dass dem Titel ein nicht nummeriertes Abstrakt folgte,
+mit dem \csb{etocifnumbered}-Schalter kam die Rettung.
+
+Eine letzte technische Anmerkung: Weil wir |\\| in die Äste setzen
+setzen, bestand keine Notwendigkeit, die erweiterten Varianten
+\csb{etocxiffirst} und \csb{etocxifnumbered} einzustellen.
+
+Für die Hardliner ist der alte Weg zur Erlangung des exakt
+gleichen Resultats hier zu sehen \autoref{ssec:tocastableold}.
+
+Hier ist auch ein viel einfacheres Beispiel. Es ist ein lokales
+Inhaltsverzeichnis.
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}-B.tex}{\foo}
+\begin{center}
+\etocsetstyle{section}
+ {}
+ {\etociffirst{\\\hline\hline}{\\\hline}}
+ {\etocname & \etocnumber & \etocpage }
+ {}
+
+\etocsettocstyle
+ {\hypersetup{hidelinks}\begin{tabular}{|p{4cm}|c|c|}\hline
+ \multicolumn{1}{|c|}{\bfseries Abschnitt}&
+ \bfseries Nummer&
+ \bfseries Seite}
+ {\\\hline\end{tabular}}
+
+\etocglobaldefs % VERPFLICHTEND !!
+\etocsetnexttocdepth{1}
+
+\tableofcontents\ref{toc:overview}
+\end{center}
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}-B.tex}
+
+
+\begin{otherlanguage}{english}
+\section{A TOC self-adjusting widths for its typesetting}
+\label{sec:thirdexampleextra}
+
+This is a continuation of \autoref{sec:thirdexample}. The goal is to adjust
+automatically the ``numwidths'' used for typesetting the unit numbers in the
+(local) tables of contents.
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\makeatletter
+\newcommand*\TOCcompute@numwidths [2]{% #1=empty/"local", #2=minimal indent
+ \begingroup
+ \def\TOCnumwidthB {0pt}%
+ \def\TOCnumwidthC {0pt}%
+ \def\TOCnumwidthD {0pt}%
+ \def\TOCnumwidthE {0pt}%
+ \def\TOCnumwidthF {0pt}%
+ \def\TOCnumwidthG {0pt}%
+ \etocsetstyle{part}{}{}{}{}%
+ \etocsetstyle{chapter}{}
+ {\setbox0\hbox{\bfseries\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthB\edef\TOCnumwidthB{\the\wd0}\fi}{}%
+ \etocsetstyle{section}{}
+ {\setbox0\hbox{\bfseries\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthC\edef\TOCnumwidthC{\the\wd0}\fi}{}%
+ \etocsetstyle{subsection}{}
+ {\setbox0\hbox{\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthD\edef\TOCnumwidthD{\the\wd0}\fi}{}%
+ \etocsetstyle{subsubsection}{}
+ {\setbox0\hbox{\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthE\edef\TOCnumwidthE{\the\wd0}\fi}{}%
+ \etocsetstyle{paragraph}{}
+ {\setbox0\hbox{\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthF\edef\TOCnumwidthF{\the\wd0}\fi}{}%
+ \etocsetstyle{subparagraph}{}
+ {\setbox0\hbox{\etocthenumber\kern#2}}
+ {\ifdim\wd0>\TOCnumwidthG\edef\TOCnumwidthG{\the\wd0}\fi}{}%
+ %
+ \etocsettocstyle{}
+ {\global\let\TOCnumwidthB\TOCnumwidthB
+ \global\let\TOCnumwidthC\TOCnumwidthC
+ \global\let\TOCnumwidthD\TOCnumwidthD
+ \global\let\TOCnumwidthE\TOCnumwidthE
+ \global\let\TOCnumwidthF\TOCnumwidthF
+ \global\let\TOCnumwidthG\TOCnumwidthG}%
+ \etocnopar
+ \csname #1tableofcontents\endcsname
+\typeout{Next TOCs will use \TOCnumwidthB\space for chapter number width}%
+\typeout{Next TOCs will use \TOCnumwidthC\space for section number width}%
+\typeout{Next TOCs will use \TOCnumwidthD\space for subsection number width}%
+\typeout{Next TOCs will use \TOCnumwidthE\space for subsubsection number width}%
+\typeout{Next TOCs will use \TOCnumwidthF\space for paragraph number width}%
+\typeout{Next TOCs will use \TOCnumwidthG\space for subparagraph number width}%
+ \endgroup
+}%
+\newcommand*\TOCcomputenumwidths [1][0.5em]{%
+ \TOCcompute@numwidths {}{#1}%
+}%
+\newcommand*\TOCcomputelocalnumwidths [1][0.5em]{%
+ \TOCcompute@numwidths {local}{#1}%
+}%
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+The optional parameter to \csa{TOCcomputenumwidths} specifies the minimal
+indent. In case nothing is numbered you may wish a higher value than |0.5em|.
+For each local table of contents to have its own width computations, the macro
+\csa{TOCcomputelocalnumwidths} is provided. As the code makes global
+assignments, either use (once) \csa{TOCcomputenumwidths} or do
+\csa{TOCcomputelocalnumwidths} for each local table of contents.
+\begin{verbatim}
+ \TOCcomputelocalnumwidths % may use optional argument to replace 0.5em
+ \localtableofcontents
+\end{verbatim}
+Notes:
+\begin{enumerate}[nosep]
+\item naturally these are only suggestions. For example one could put
+ everything in single macros \csa{TOCtoc} and \csa{TOClocaltoc} to
+ simultaneously compute the numwidths and then typeset the (local) table of
+ contents.
+\item if you want to adjust the |tocdepth| recall from
+ \autoref{ssec:bookmarksdepth} that it influences |hyperref| hence you may
+ need to use a group |\begingroup...\endgroup|. Or, one can use
+ \csb{etocsetnexttocdepth}\marg{level} but (with the code as here) this must
+ then be issued twice, once for \csa{TOCcomputelocalnumwidths}, once for
+ \csa{localtableofcontents}.
+\item the bold font serves above for both chapter and section numwidth
+ computations, but the code from \autoref{sec:thirdexample} uses |\bfseries|
+ only in local TOCs. Thus the \csa{TOCcomputenumwidth} will set the parameter
+ \csa{TOCnumwidthC} to a value slightly larger than needed in the main TOC.
+ Hence the section style in \csa{TOCcompute@numwidths} should possibly insert
+ the |\bfseries| in the box only after testing for the optional parameter
+ |local|.
+\end{enumerate}
+\end{otherlanguage}
+
+\clearpage
+\etocdepthtag.toc {linestyles}
+
+\part{Befehle für die TOC"=Linienstile}
+\label{part:linestyles}
+
+\thispartstats
+
+\etocsetstyle{section}
+{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered
+ {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]}
+% Dec 7, 2012. I hit upon a problem whose origin I found was
+% with xcolor, as xcolor modifies \fbox
+% (try \section{\fbox{A}} with and without xcolor). The fix
+% was to \protect the \fbox used in the |enumitem| label.
+% Strangely enough, with |hyperref| active, the problem did
+% not show up. Anyhow I now use \fcolorbox rather than \fbox
+% and there is no problem anymore. Also I don't have now to
+% use \normalcolor which already needed protection.
+{\normalsize\bfseries\rmfamily\item}
+{\etocname{} (Seite \etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsection}
+{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]}
+{\normalfont \item}
+{\etocname{} (S.~\etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsubsection}
+{\par\nobreak\begingroup\normalfont\footnotesize\itshape\etocskipfirstprefix}
+{\allowbreak\,--\,}
+{\etocname}
+{.\hfil\par\endgroup\pagebreak[3]}
+
+% 27 janvier 22:30
+% je définis les macros (non protégées)
+% \etocthename, \etocthenumber, \etocthepage
+
+\etocruledstyle[1]{\etocfontminusone\color{green}%
+ \fboxrule1pt\fboxsep1ex
+ \framebox[\linewidth]
+ {\normalcolor\hss Inhalt von \autoref{part:linestyles}\hss}}
+
+\localtableofcontents \label{toc:a}
+
+\section{Die \csbhyp{etocsetstyle}-, \csbhyp{etocname}- und \csbhyp{etocpage}"=Befehle}\label{sec:etocsetstyle}
+\label{etocsetstyle}
+\label{etocname}
+\label{etocpage}
+
+Hier soll erläutert werden, wie \etoc\ dazu verwendet wurde, das
+Inhaltsverzeichnis am Beginn dieses \autoref{part:linestyles}s zu erstellen.
+Es handelt sich dabei um ein lokales Inhaltsverzeichnis, weshalb der Befehl
+\localtoc\ verwendet wurde.
+
+Wir müssen hierbei unterscheiden zwischen den Linienstilen (\emph{line styles})
+und dem Ausgabestil (\emph{toc display style}). Die \emph{line styles} erhält
+man grundsätzlich auf die folgende Art und Weise:
+
+
+\footnote{Das vorliegende Dokument hat
+ {\ttfamily\string\renewcommand\string{%
+ \string\familydefault\string}\string{\string\sfdefault\string}}
+ in seiner Präambel, deshalb schaltet der Befehl \csa{normalfont} zur
+ |sans| Schriftart; aus diesem Grund habe ich im Abschnitt line-style
+ \csa{rmfamily} geschrieben.}
+
+\begingroup\small
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\etocsetstyle{section}
+{\begin{enumerate}}
+{\normalsize\bfseries\rmfamily\item}
+{\etocname{} (page \etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsection}
+{\begin{enumerate}}
+{\normalfont\item}
+{\etocname{} (p.~\etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsubsection}
+{\par\nobreak\begingroup\normalfont
+ \footnotesize\itshape\etocskipfirstprefix}
+{\allowbreak\,--\,}
+{\etocname}
+{.\hfil\par\endgroup\pagebreak[3]}
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+\endgroup
+
+Diese provisorischen Stil"=Definitionen beruhen auf der automatischen
+Nummerierung, die von der |enumerate|-Umgebung generiert wird, es ist aber
+wesentlich besser den Befehl \csb{etocnumber} innerhalb des Item-labels zu
+verwenden, denn das gibt das richtige Ergebnis. Die verbesserten Definitionen
+werden dahingehend später erklärt.
+
+Mit diesem Stil müsste man so
+einfallsreich sein, etwas zu designen, was nicht mit Abschnitten oder
+Unterabschnitten zu tun hat, vielleicht so etwas wie Superscripte. Nun,
+normalerweise braucht man Abschnitte und Unterabschnitte nicht nummeriert und
+aufgelistet in der TOC, also hat unser vermeintlicher Benutzer ein Design
+gewählt, welches dafür nichts bereitstellt und fügte noch hinzu:
+\begin{verbatim}
+\etocsetstyle{paragraph}{}{}{}{}
+\etocsetstyle{subparagraph}{}{}{}{}
+\end{verbatim}
+Das ist der gleiche Sachverhalt wie mit den Standardlinienstilen!
+
+Jeder \csb{etocsetstyle}"=Befehl hat fünf notwendige Argumente:\\ \hbox to
+\linewidth {\hfil\csb{etocsetstyle}\color{blue}\marg{levelname}%
+\marg{start}\marg{prefix}\marg{contents}\marg{finish}\hfil} Die
+\meta{levelname}'s sind die Abschnittseinteilungen der
+Standard"=Dokument"=Klassen: Von \emph{part} (oder \emph{book}, welches von der
+|memoir|-Klasse benutzt wird) herunter bis zu \emph{subparagraph}.
+
+Der \meta{start}-Code wird ausgeführt, wenn ein toc"=Eintrag dieses Levels
+gefunden wurde und der vorherige ein höheres Level hatte. Der \meta{finish}-Code
+wird ausgeführt, sobald man wieder einen Eintrag mit einem höheren toc"=Level
+findet. In der Zwischenzeit werden alle Einträge für dieses Level gesetzt, indem
+zuerst der \meta{prefix}-Code und dann der \meta{contents}-Code ausgeführt wird.
+
+Die (robusten) Befehle \csb{etocname}, \csb{etocnumber} und \csb{etocpage} sind
+für die Benutzung innerhalb der \meta{prefix} und \meta{contents}-Teile aus der
+\csa{etocsetstyle}-Spezifikation. Diese enthalten den Namen, die Nummerierung
+und die Seitennummer des entsprechenden toc"=Eintrags. Ist das Paket |hyperref|
+im Dokument eingebunden, und es existieren Verlinkungen zu den TOC-Daten, dann
+werden diese Links in den Befehlen \csa{etocname}, \csa{etocnumber} und
+\csa{etocpage} gehalten (Der letzte hat nur einen Link, wenn |hyperref| die
+Option \emph{linktoc=all} übergeben wurde).
+
+
+
+\section{Die \csbhyp{etocskipfirstprefix} und \csbhyp{etociffirst} Befehle}
+\label{etocskipfirstprefix}
+\label{etociffirst}
+\label{etocxiffirst}
+
+Der gewählte |subsubsection|-Stil machte dies, angewiesen von dem
+Befehl \csb{etocskipfirstprefix}, der \etoc befielt, für den
+ersten Punkt \emph{nicht} den angepassten \meta{prefix}-Code zu
+nehmen. \footnote{Mit der Version vor |1.08| musste es das letzte
+Zeichen im \meta{start}-Code sein. Es kann dort nun überall
+erscheinen.}
+
+Der Befehl \csb{etociffirst}\marg{YES CODE}\marg{NO CODE} (neu mit
+|1.08|) ist eine flexiblere Möglichkeit, die \meta{prefix}- (und
+\meta{contents})-Spezifikationen anzupassen. Er führt die
+\meta{YES CODE}-Verzweigung aus, wenn dies die erste Einheit auf
+dieser Ebene (innerhalb einer Unterstufe) ist und \meta{NO CODE},
+wenn nicht. Dies ist ein robuster Befehl, der Erweiterungen
+(beispielsweise in einem |enumitem|-Label) überlebt.
+
+Die Variante \csb{etocxiffirst} macht das Gleiche, aber sie ist
+erweiterbar.
+
+
+\section{Der \csbhyp{etocnumber}"=Befehl}
+\label{etocnumber}
+
+Bis hierhin würde unsere Spezifikation die Nummerierung verwenden, die von der
+|enumerate|-Umgebung generiert wird, jedoch möchten wir natürlich die in
+der |.toc|-Datei deklarierten Nummern benutzen. Das kann man mit Hilfe des
+\csb{etocnumber}"=Befehls erreichen. Um die Bezeichnungen in die
+|enumerate|-Auflistung zu bekommen, fährt man mit der Syntax
+{\ttfamily label=\char32} des |enumitem|-Pakets fort:
+\begin{verbatim}
+\etocsetstyle{section}
+{\begin{enumerate}[label=\etocnumber]}
+{\normalsize\bfseries\rmfamily\item}
+{\etocname{} (page \etocpage)}
+{\end{enumerate}}
+\end{verbatim}
+Lieber als nur \csa{etocnumber} haben wir dann so etwas wie |\fbox{\etocnumber}|
+benutzt. Dabei ist festzuhalten, dass \csa{etocnumber} ein robuster Befehl ist,
+was erklärt, warum er in der Label"=Spezifikation benutzt werden kann, ohne
+|\protect| hinzuzufügen.
+
+\section{Der \csbhyp{etocifnumbered}-Schalter}
+\label{etocifnumbered}
+\label{etocxifnumbered}
+
+Die \csa{fbox} würde ein unästhetisches Ergebnis bringen im Fall eines nicht
+nummerierten Abschnitts (welches beispielsweise im Inhaltsverzeichnis gelandet
+ist mittels eines \csa{addcontentsline} Befehls).\footnote{Wie man sieht, wird
+\csa{fcolorbox} verwendet wird statt \csa{fbox}. Aufgrund einer Neudefinition --
+durchgeführt vom |xcolor|-Paket-- haben wir \csa{fbox} verwendet (und nicht
+|hyperref|), sonst hätten wir \csa{protect}\csa{fbox} benötigt.}
+
+Der \csb{etocifnumbered}\marg{A}\marg{B}"=Befehl führt \meta{A} aus, wenn die
+Nummer existiert, und \meta{B} falls nicht. Also benutzen wir es in dem Code,
+welcher letztendlich für das |section|-Level gewählt wurde:
+\begin{verbatim}
+\etocsetstyle{section}
+{\begin{enumerate}[leftmargin=.75cm, label=\etocifnumbered
+ {{\fboxrule1pt\fcolorbox{green}{white}{\etocnumber}}}{}]}
+{\normalsize\bfseries\rmfamily\item}
+{\etocname{} (page \etocpage)}
+{\end{enumerate}}
+
+\etocsetstyle{subsection}
+{\begin{enumerate}[leftmargin=0cm, label=\etocnumber]}
+{\normalfont \item}
+{\etocname{} (p.~\etocpage)}
+{\end{enumerate}}
+\end{verbatim}
+
+Wenn wir nur das |section|-Level geändert hätten und nicht das
+|subsection|-Level, dann wäre ein Kompilierfehler aufgetreten, denn der
+Paket"=Stil für die "`subsections"' erwartet dann `im Vertikal"=Modus' zu starten.
+Ein zusätzliches \csa{par}-Token im \meta{contents}-Teil des |section|-Levels
+hätte das behoben: |{...(page \etocpage)\par}|.
+
+Der Befehl \csb{etocifnumbered} ist robust; \csb{etocxifnumbered}
+(neu für |1.08|) hat den gleiche Effekt, aber er ist expandierbar.
+
+\section{Die Befehle \csbhyp{etocthename}, \csbhyp{etocthenumber} sowie
+\csbhyp{etocthepage}}
+\label{etocthename}
+\label{etocthenumber}
+\label{etocthepage}
+
+Es ist manchmal wünschenswert, Zugriff auf Name, Nummer und Seitenzahl zu haben,
+ohne die hyperref"=Daten: Ähnlich wie die *-Variante des \csa{ref}"=Befehls, wenn
+das |hyperref|-Paket verwendet wird. Beispielsweise könnte man den Wunsch haben,
+eine Einheit oder Seitenzahl in einer Art numerischem Kontext verwenden zu
+wollen oder seine Formatierung zu ändern. Diese Funktionalität wird von
+\csb{etocthename}, \csb{etocthenumber} und \csb{etocthepage} bereitgestellt.
+
+Diese Befehle sind aber nicht geschützt, also sollten sie in veränderlichen
+Kontexten (zum Beispiel Label"=Beschreibungen mit vorangestelltem |\protect|)
+verwendet werden.
+
+
+\section{Der \csbhyp{etoclink}"=Befehl}
+\label{etoclink}
+
+Der Befehl \csb{etoclink}\marg{linkname} kann in Linienstil"=Beschreibungen
+benutzt werden, in ähnlicher Art und Weise wie die argumentlosen Befehle
+\csa{etocname}, \csa{etocnumber} und \csa{etocpage}. Er erzeugt einen Link
+(falls solch ein von |hyperref| zur |.toc|-Datei hinzugefügt wurde), dessen Ziel
+der entsprechende Dokumentteil ist und dessen Name das angegebene Argument ist.
+Daher ist |\etoclink{\eotcthename}| das ursprüngliche |\etocname|. Es ist darauf
+zu achten, dass wenn |hyperref| nicht damit beauftragt wurde, die Seitenzahl mit
+einem Link zu versehen (mittels seiner Option \emph{linktoc=all}), dann hat
+\etoc's \csa{etocpage} auch keinen Link, |\etoclink{\etocthepage}| allerdings
+schon.
+
+Der Befehl \csa{etoclink} ist robust.
+
+\begin{otherlanguage}{english}
+ Since |etoc 1.08j| it contains the link destination in an already expanded
+ form, so for example can be used even after a |&| in a tabular construction,
+ if \csb{etocglobaldefs} was issued.
+\end{otherlanguage}
+
+\section{Die Befehle \csbhyp{etocthelinkedname}, \csbhyp{etocthelinkednumber},
+\csbhyp{etocthelinkedpage} und \csbhyp{etocthelink}}
+\label{etocthelinkedname}
+\label{etocthelinkednumber}
+\label{etocthelinkedpage}
+\label{etocthelink}
+
+% Das Folgende ist für fortgeschrittene Anwendungen von fortgeschrittenen
+% Benutzern. Das \csa{etocthename}-Makro wurde bereits schon einmal erwähnt;
+% verwendet man es in Anweisungen wie |\global\let\lastone\etocthename| in einem
+% \etoc line"=Stil, definiert das Macro |\lastone| so, dass es sich ausbreitet bis
+% zum letzten Namen auf dem korrespondieren Level.
+
+% Das in diesem Paket enthaltene \csa{etocthelinkedname} stellt dies nun zur
+% Verfügung, inklusive der Link"=Daten. Es wurde in dieser Dokumentation benutzt
+% bei Erstellung der \hyperref[tocastree]{Beispiele mit Bäumen}.
+
+% Ebenfalls bereit gestellt mit ähnlichen Funktionen: \csa{etocthelinkednumber},
+% \csa{etocthelinkedpage} (welches nur einen Link enthält, wenn |hyperref| einen
+% zu dieser Seitenzahl hinzugefügt hat) und \csa{etocthelink}\marg{linkname},
+% welches es erlaubt einen Link mit einem beliebigen Name zu erstellen.
+
+% All diese Befehle sind \emph{nicht} robust.
+
+\begin{otherlanguage}{english}
+ These macros are fragile and contain the link destination in already
+ expanded form. So their meaning can be stored for delayed usage. For example
+ this is done here when doing the \hyperref[tocastree]{examples with trees}.
+
+ Notice though that for example \csa{etocthelinkednumber} is really a link
+ only if |hyperref| was configured to let the numbered heading be linked
+ (which is the default). Similarly for the others.
+
+ \csa{etocthelink} will fetch the link destination if available from name or
+ page number and allows via |\etocthelink{foo}| to link an arbitrary text to
+ the same destination inside the produced PDF.
+
+ The \csb{etocname}, \csb{etocnumber}, \csb{etocpage} and \csb{etoclink} are
+ simply their robust variants. They too contain the hyperlink destination in
+ already expanded form since |1.08a| for the first three, since |1.08j| for
+ \csb{etoclink}.
+\end{otherlanguage}
+
+Veralteter Beispiel\begingroup\
+ \etocsetstyle {section}
+ {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]}
+ {\global\let\TmpEtocNumber\etocthelinkednumber
+ \global\let\TmpEtocName\etocthelinkedname
+ \global\let\TmpEtocPage\etocthelinkedpage }
+ {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\
+ (\emph{S. \TmpEtocPage})}
+ {\end{itemize*}.}%
+ \etocsetnexttocdepth {section}%
+ \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-%
+ \texttt{enumitem}-Umgebung): }{}%
+ \etocinline\tableofcontents \ref{toc:globalcmds}
+\endgroup
+
+\begin{verbatim}
+Veralteter Beispiel\begingroup
+ \etocsetstyle {section}
+ {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]}
+ {\global\let\TmpEtocNumber\etocthelinkednumber
+ \global\let\TmpEtocName\etocthelinkedname
+ \global\let\TmpEtocPage\etocthelinkedpage }
+% Obiges ist erforderlich, da \item, hier in itemize*, eine Gruppe schließt.
+ {\item [{\bfseries\TmpEtocNumber.}]\TmpEtocName\
+ (\emph{S. \TmpEtocPage})}
+ {\end{itemize*}.}%
+ \etocsetnexttocdepth {section}%
+ \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-%
+ \texttt{enumitem}-Umgebung): }{}%
+ \etocinline\tableofcontents \ref{toc:globalcmds}
+\endgroup
+\end{verbatim}
+
+Mit \etoc |1.08| gibt es ein einfacher Weg mit Hilfe von \csb{etocglobaldefs}
+zum gleichen Resultat:
+\begin{verbatim}
+Beispiel\begingroup\etocglobaldefs % <-- NEU mit etoc 1.08.
+ \etocsetstyle {section}
+ {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]}
+ {}
+ {\item [{\bfseries\etocnumber.}]
+ \etocname\ (\emph{S. \etocpage })}
+ {\end{itemize*}.}%
+ \etocsetnexttocdepth {section}%
+ \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-%
+ \texttt{enumitem}-Umgebung): }{}%
+ \etocinline\tableofcontents \ref{toc:globalcmds}
+\endgroup
+\end{verbatim}
+Beispiel\begingroup\etocglobaldefs % <-- NEU mit etoc 1.08.
+ \etocsetstyle {section}
+ {\begin{itemize*}[itemjoin={{; }}, itemjoin*={{, und }}]}
+ {}
+ {\item [{\bfseries\etocnumber.}]
+ \etocname\ (\emph{S. \etocpage })}
+ {\end{itemize*}.}%
+ \etocsetnexttocdepth {section}%
+ \etocsettocstyle {(ein Inhaltsverzeichnis als eine Inline-%
+ \texttt{enumitem}-Umgebung): }{}%
+ \etocinline\tableofcontents \ref{toc:globalcmds}
+\endgroup
+
+\section{Die \csbhyp{etocsavedsectiontocline}, usw... Befehle.}
+\label{etocsavedsectiontocline}
+\label{etocsavedchaptertocline}
+
+\begin{otherlanguage}{english}
+ Since |1.08k| \etoc preserves automatically in
+ \csb{etocsavedsectiontocline}, \csb{etocsavedchaptertocline} etc... the
+ meaning of the \LaTeX\ |\l@section|, |\l@chapter|, etc... in force at the
+ time each \csb{tableofcontents} or \csb{localtableofcontents} macro is
+ executed.
+\end{otherlanguage}
+
+\section{Der \csbhyp{etocsetlevel}"=Befehl}
+\label{etocsetlevel}
+
+Wie bereits in \autoref{part:surprising} erklärt, kann man \etoc mitteilen,
+welches Level er mit einem bestimmten Abschnitts"=Befehl assoziieren soll,
+nämlich mit \csa{etocsetlevel}. Zum Beispiel:
+
+\begin{verbatim}
+\etocsetlevel{cell}{0}
+\etocsetlevel{molecule}{1}
+\etocsetlevel{atom}{2}
+\etocsetlevel{nucleus}{3}
+\end{verbatim}
+Im Kompatibilitäts"=Modus wird davon ausgegangen, dass die Makros |\l@cell|,
+\texttt{\textbackslash l@mo\-le\-cule}, \ldots\ entweder durch
+den Benutzer oder von einer anderen Klasse definiert wurden: Nur |\etocsetlevel|
+ist nicht genug, um auf dem korrespondierenden Pegel "`out-of-the-box"' zu
+arbeiten.
+
+Jedoch, ist im Kompatibilitätsmodus kein Inhaltsverzeichnis gesetzt, dann ist
+nur wichtig, dass die verschiedenen Linienstile gesetzt sind.
+Wenn beispielsweise |section| auf Level |1| ist, dann muss man nicht mehr
+\csa{etocsetstyle}|{molecule}{..}{..}{..}{..}| nach
+\csa{etocsetstyle}|{molecule}{1}| aufrufen, da
+\csa{etocsetstyle}|{section}{..}{..}{..}{..}| bereits
+wirksam ist (und es wurde im Paket selbst in der Definition seines
+Linienstils gesetzt).
+
+Die akzeptierten Level laufen von |-2| bis einschließlich |6|. Alles andere wird
+auf |6| abgebildet, welches ein Dummy"=Level ist und nie dargestellt wird. Das
+Paket tut Folgendes:
+\begin{verbatim}
+\etocsetlevel{book}{-2}
+\etocsetlevel{part}{-1}
+\etocsetlevel{chapter}{0}
+\etocsetlevel{section}{1}
+\etocsetlevel{subsection}{2}
+\etocsetlevel{subsubsection}{3}
+\etocsetlevel{paragraph}{4}
+\etocsetlevel{subparagraph}{5}
+\end{verbatim}
+Die benutzerdefinierten Stile von \etoc werden von \csa{etocdefaultlines}
+aktiviert. Sie werden vom Haupt"=Inhaltsverzeichnis dieses Dokuments dargestellt.
+Die Level"=Zuweisungen können jederzeit modifiziert werden: In
+\autoref{part:surprising} sieht man verschiedene Anwendungen dieser Technik.
+
+Als ein weiteres Beispiel soll hier angeführt werden, wie das
+\hyperref[toc:main]{Haupt"=Inhaltsverzeichnis} dieses Dokuments gesetzt
+wurde, nämlich mit den folgenden Instruktionen:
+\begin{verbatim}
+\etocsettocdepth {subsubsection} % set the initial tocdepth
+\etocdefaultlines % use the package default line styles. At this early stage in
+ % the document they had not yet been modified by \etocsetstyle
+ % commands, so \etoctoclines could have been used, too.
+\etocmarkboth\contentsname
+\etocmulticolstyle[1] % one-column display
+ {\pdfbookmark[1]{Table of contents}{MAINTOC}% create a bookmark in the pdf
+ \noindent\bfseries\Large
+ \leaders\hrule height1pt\hfill
+ \MakeUppercase{Table of Contents}}
+\begingroup % use a group to limit the scope of the
+ \etocsetlevel{subsection}{3} % subsection level change.
+ \etocsetlevel{subsubsection}{4} % anything > tocdepth=3.
+ \tableofcontents \label{toc:main}
+\endgroup
+\end{verbatim}
+Auf diese Art und Weise benutzen die "`subsections"' die Stile, die ursprünglich
+für "`subsubsections"' vorgesehen waren, während diese gar nicht gedruckt
+werden. Ohne diese Modifikation wäre das Erscheinungsbild ein anderes gewesen:
+die Paketlinienstile sind dafür gedacht gewesen, in Dokumenten mit vielen vielen
+"`subsubsections"' verarbeitet zu werden, in einem Zwei"=Spalten"=Layout, um
+diesen ein kompakteres Ergebnis zu liefern als die
+Standard-\LaTeX-Inhaltsverzeichnisse. Hier haben wir jedoch noch ein paar
+"`subsubsections"', daher ist es interessanter, diese zu ignorieren und dafür
+"`sections"` und "`subsections"' visuell unterschiedlich zu drucken.
+
+\section{Umfang der zur \texorpdfstring{\texttt{.toc}}{.toc}-Datei gehörigen Befehle}
+
+\begingroup % pour \small et \MacroFont en particulier.
+\small
+
+\subsection{Testen des Bereichs}
+
+Lasst uns zur Farbe Rot wechseln und außerdem diesen Befehl zur
+|.toc|-Datei hinzufügen:
+
+\color{red!50}
+\addtocontents{toc}{\string\color{red!50}}
+
+\def\MacroFont{\ttfamily \footnotesize\hyphenchar\font45 }
+\begin{verbatim}
+ \color{red!50} % Ändern der Textfarbe
+ \addtocontents{toc}{\string\color{red!50}} % das Gleiche in der .toc-Datei
+\end{verbatim}
+
+
+\subsection{Dies ist eine (blass)rote Subsection zu Demonstrationszwecken}
+
+Gut, der Titel hier wurde schwarz dargestellt, was daran liegt, wie die
+|scrartcl|-Klasse funktioniert (in der |article|-Klasse wäre er rot gewesen),
+aber wir sind ohnehin mehr daran interessiert, wie er im Inhaltsverzeichnis
+aussieht: Und tatsächlich ist er rot im
+\hyperref[toc:main]{Haupt"=Inhaltsverzeichnis} dieses Dokuments, genau so wie im
+\hyperref[toc:a]{Inhaltsverzeichnis für diesen Abschnitt}. Beide Befehle
+gehorchen wie erwartet dem |\color{red!50}|"=Befehl, der in die |.toc|-Datei
+geschrieben wurde.
+
+Aber lasst uns jetzt diese "`subsection"' beenden und eine "`section"' starten.
+
+\section{Bin ich auch rot?}
+
+Die Frage ist, ob es im Inhaltsverzeichnis erscheint: Die Antwort ist ja, es ist
+rot im \hyperref[toc:main]{Haupt"=Inhaltsverzeichnis} und nein es ist nicht rot
+im \hyperref[toc:a]{Inhaltsverzeichnis für diesen Abschnitt}. Grund dafür ist,
+dass der \meta{finish}-Code für dieses "`subsection"'-Level eine Gruppe
+geschlossen hat, da es |\end{enumerate}| verwendet hat.
+
+Das zeigt noch einmal die Diskussion aus \autoref{ssec:limitations}.
+
+Die standardmäßigen Paket-line"=Stile beinhalten keine Gruppen-Öffnung- und
+Schliess"=Befehle: Die Gültigkeit eines Befehls in der |.toc|-Datei wird also
+solange bestehen, bis er explizit durch einen weiteren Befehl wieder rückgängig
+gemacht wird.
+
+\begin{verbatim}
+ \normalcolor
+ \addtocontents{toc}{\string\normalcolor}
+\end{verbatim}
+\endgroup
+
+\normalcolor
+\addtocontents{toc}{\string\normalcolor}
+
+Zurück zu Schwarz. Man beachte das diese Bereichsprobleme auch in mehrsprachigen
+Dokumenten auftauchen, da das |babel|-Paket auftretende Sprachänderungen
+ebenfalls in die |.toc|-Datei schreibt.
+
+
+\clearpage
+\etocdepthtag.toc {globalcmds}
+
+\part{Befehle für den toc"=Display"=Stil}
+\label{part:globalcmds}
+
+\thispartstats
+
+\etocsettocstyle{}{}
+\etocstandardlines
+\localtableofcontents \label{toc:globalcmds}
+
+
+\section{Festlegung des toc"=Display"=Stils}
+
+
+Der \emph{toc display}-Stil gibt an, ob das Inhaltsverzeichnis mit mehreren
+Spalten erscheint oder nur mit einer, ob der Titel gesetzt ist wie in der
+|article|- oder |book|-Klasse, oder ob er über den Einträgen zentriert sein
+soll, mit Regeln an der Seite, oder ob das gesamte Inhaltsverzeichnis in einen
+Rahmen gepackt werden soll. Entscheidet man sich bspw. für eine einheitliche
+Überschrift und ein Ein"=Spalten"=Layout, so verwendet man dafür folgende Befehle:
+\begin{verbatim}
+\etocruledstyle[1]{Title} \tableofcontents (or \localtableofcontents)
+shortcuts: \etocruled[1]{Title} (or \etoclocalruled[1]{Title})
+\end{verbatim}
+
+\subsection{Der Befehl \csbhyp{etocsettocstyle}}
+\label{etocsettocstyle}
+
+Dies ist ein Befehl mit zwei notwendigen Argumenten:
+%
+\centeredline{\csb{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}}
+%
+Der \marg{before\_toc}-Teil ist verantwortlich für den Schriftsatz der
+Überschriften, so kann er beispielsweise etwas sein wie
+\starit{section}|{\contentsname}|.
+
+Generell gesprochen, sollte diese Überschrift \TeX{} im "`Vertikal"=Modus"'
+lassen, wenn der eigentliche Schriftsatz des Inhalts beginnt: die Linienstile
+(entweder von den Standardklassen oder den Paketlinenstilen) erwarten alle im
+`Vertikal"=Modus' zu starten.
+
+Das erste Argument von \csb{etocsettocstyle} kann auch Instruktionen beinhalten,
+um die Seitenüberschriften zu markieren. Oder es kann prüfen (|book|-Klasse), ob
+der Zwei"=Spalten"=Modus eingeschaltet ist, um dann zum Ein"=Spalten"=Modus zu
+wechseln. Der \meta{after\_toc}-Teil würde dann wieder den Ein"=Spalten"=Modus
+aktivieren.
+
+Die im Folgenden beschriebenen Befehle \csb{etocmulticolstyle},
+\csb{etocruledstyle} und \csb{etocframedstyle} rufen alle \csa{etocsettocstyle}
+als Subroutine auf, um eine \texttt{Mehr\-spalten}-Umgebung mit Hilfe von
+\marg{before\_toc} zu starten, welche mit \marg{after\_toc} wieder geschlossen
+wird.
+
+\begin{otherlanguage}{english}
+ \textbf{\TeX\ hacker note:} We have seen in the previous chapter some examples
+of using |\begin{enumerate}| and |\end{enumerate}| within TOC line styles.
+There is a real difficulty with doing however something like this:
+\begin{verbatim}
+\etocsettocstyle{\begin{enumerate}}{\end{enumerate}}
+\etocsetstyle{section}{}{\item \sectionname}{}{}
+\end{verbatim}
+Indeed for example on first compilation of a document, the |.toc| file is
+empty and there will be the typical ``Something's wrong--perhaps a missing
+\string\item''. Using \csb{etocchecksemptiness} does not help, because as is
+explained there, on first encountering a new TOC added at end of a document,
+\etoc considers it non-empty, hence querying \csb{etocifwasempty} serves
+nothing. No, one must do something like this:
+\begin{verbatim}
+\makeatletter
+\etocsettocstyle
+ {\begin{enumerate}}
+ {\if@newlist\item Please run \LaTeX\ again\fi
+ \end{enumerate}}
+\makeatother
+\etocsetstyle{section}{}{\item \sectionname}{}{}
+\end{verbatim}
+\end{otherlanguage}
+
+\subsection{Die Befehle \csbhyp{etocmulticolstyle}, \csbhyp{etocmulticol} und
+\csbhyp{etoclocalmulticol}}
+\label{etocmulticolstyle}
+\label{etocmulticol}
+\label{etoclocalmulticol}
+
+Dies ist ein Befehl mit einem optionalen und einem notwendigen Argument:
+%
+\centeredline{\csb{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}}
+%
+Die
+\oarg{number\_of\_coloumns} können von 1 bis 10 gehen (default: 2; ist der Wert
+1, so wird natürlich keine |multicols|-Umgebung angelegt). Das \meta{heading}
+wird typischerweise `vertikaler' Art sein, also wie: \meta{heading} =
+|\section*|\marg{title}, aber man kann auch horizontale Dinge realisieren wie
+|\fbox{Hallo Welt}| (\etoc fügt automatisch ein |\par| ans Ende des
+"`heading"'-Arguments von \csb{etocmulticolstyle}). Hier ist einmal exemplarisch
+dargestellt, wie das Haupt"=Inhaltsverzeichnis dieses Dokuments konfiguriert
+wurde:
+\begin{verbatim}
+\etocmulticolstyle{\noindent\bfseries\Large
+ \leaders\hrule height1pt\hfill
+ \MakeUppercase{Table of Contents}}
+\end{verbatim}
+Nach \csa{etocmulticolstyle} haben alle zukünftigen \csa{tableofcontents} den
+spezifizierten Stil, falls es zwischendurch nicht mehr geändert wird. Eine
+kürzere Variante für nur ein Inhaltsverzeichnis ohne Einfluss auf spätere ist:
+\centeredline{\csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}} oder
+\centeredline{\csa{etoclocalmulticol}\oarg{number\_of\_columns}\marg{heading}.}
+
+\subsection{Der Befehl \csbhyp{etoctocstyle}}
+\label{etoctocstyle}
+
+\centeredline{\csb{etoctocstyle}\oarg{kind}%
+\marg{number\_of\_columns}\marg{title}}
+\centeredline{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|%
+|{\kind*{|\itshape title\upshape|}}|}
+Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Standardwert ist
+|chapter| oder |section|, abhängig von der Dokumentklasse.
+
+\subsubsection{Der Befehl \csbhyp{etoctocstylewithmarks}}
+\label{etoctocstylewithmarks}
+\label{etoctocstylewithmarksnouc}
+
+\centeredline{\csb{etoctocstylewithmarks}\oarg{kind}%
+\marg{number\_of\_columns}\marg{title}\marg{mark}}
+\centeredline
+{=\csb{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|%
+|{\kind*{|\itshape title \ttfamily\upshape\string\markboth%
+|{\MakeUppercase{|{\rmfamily\itshape mark}|}}}}|}
+Wobei |Typ| gewählt wird aus |chapter|, |section| usw. Die wirkliche Anzeige der
+Markierungen ("`marks"') hängt vom Seitenstil ab. Es gibt die Variante
+\csb{etoctocstylewithmarksnouc}, welche Großschreibung unterdrückt.
+
+\paragraph{Möchten wir wirklich pargraph"=Einträge im Inhaltsverzeichnis?}
+
+\paragraph{Wirklich?}
+
+\subsection{Die Befehle \csbhyp{etocruledstyle}, \csbhyp{etocruled} und
+ \csbhyp{etoclocal\-ruled}}
+\label{etocruledstyle}
+\label{etocruled}
+\label{etoclocalruled}
+
+Das generelle Format von \csa{etocruledstyle} ist:
+\centeredline{\csb{etocruledstyle}%
+ \oarg{number of columns}\marg{title of the toc}}
+\noindent
+Der Titel ist horizontales Material (der |LR|-Modus von \emph{\LaTeX{}, ein
+Dokument"=Vorbereitung"=System,}): wenn es nicht in eine Zeile passt, dann sollte
+es in eine \csa{parbox} mit einer gegebenen Weite geschrieben werden. Der grüne
+Rahmen für die Überschrift des Inhaltsverzeichnisses zu \hyperref[toc:a]{Beginn
+des zweiten Teils dieses Dokuments} wurde erzeugt durch:
+\begin{verbatim}
+\etocruledstyle[1]{\etocfontminusone\color{green}%
+ \fboxrule1pt\fboxsep1ex
+ \framebox[\linewidth]
+ {\normalcolor\hss Contents of this part\hss}}
+\end{verbatim}
+
+Eine kürzerer Weg den Stil zu setzen mit \csb{etocruledstyle} und dann einen
+\csa{tableofcontents} zu erstellen, alles zusammen in einer Gruppe damit
+zukünftige Inhaltsverzeichnisse nicht betroffen sind, ist:
+\centeredline{\csb{etocruled}\oarg{number\_of\_columns}\marg{title}}
+
+\subsection{Die Befehle \csbhyp{etocframedstyle}, \csbhyp{etocframed}
+und \csbhyp{etoclocal\-framed}}
+\label{etocframedstyle}
+\label{etocframed}
+\label{etoclocalframed}
+
+Die gleiche Arbeitsweise:
+%
+\centeredline{\csb{etocframedstyle}\oarg{number\_of\_columns}\marg{title}}
+und die passende Abkürzung:
+%
+\centeredline{\csb{etocframed}\oarg{number\_of\_columns}\marg{title}}
+Diese wird
+verwendet, wenn man nicht den Stil zukünftiger Inhaltsverzeichnisse modifizieren
+will (eine ändere Möglichkeit wäre es, das Ganze in Klammern zu packen oder
+innerhalb eines |\begingroup...\endgroup|; es gibt auch noch einen
+\csa{etoclocalframed} für ein lokales Inhaltsverzeichnis).
+
+Das gesamte Inhaltsverzeichnis ist eingerahmt. Der Titel selbst aber nicht:
+Möchte man das erreichen, dann muss man das im \meta{title}-Argument mit
+\csa{etocframedstyle} oder \csa{etocframed} festhalten. Die Farben für den
+Hintergrund und der anderen Komponenten (oben, links, rechts, unten) des Rahmens
+sind festgelegt mittels geeigneter |\renewcommand|'s (siehe
+\autoref{ssec:customdisplay}).
+
+Eine |minipage| wird benutzt, von daher ist das produzierte Inhalsverzeichnis
+nicht kompatibel mit Seitenumbrüchen. Um diese zu erlauben, wird empfohlen, die
+Befehle
+\href{http://ctan.org/pkg/mdframed}{mdframed}\footnote{\url{http://ctan.org/pkg/mdframed}}
+oder
+\href{http://ctan.org/pkg/tcolorbox}{tcolorbox}\footnote{\url{http://ctan.org/pkg/tcolorbox}}
+in den Argumenten von \csb{etocsettocstyle} zu verwenden.
+
+Beispiele in diesem Dokument findet man auf den Seiten \pageref{toc:d},
+\pageref{toc:floating}, \pageref{toc:b} und \pageref{toc:clone}.
+
+\subsection{Überschriften, Titel, \csbhyp{etocoldpar}, \csbhyp{etocinnertopsep}}
+\label{etocinnertopsep}
+\label{etocoldpar}
+
+Das für \csb{etocmulticolstyle} notwendige \meta{heading}-Argument kann entweder
+Vertikal"=Modus"=Material sein wie |\section*{\emph{Inhaltsverzeichnis}}| oder die
+horizontale Variante wie das einfache |\etocmulticolstyle{Hallo Welt}|.
+
+Es kann kein explizites |\par| oder eine Leerzeile in das notwendige Argument
+von \csb{etocmulticolstyle} eingefügt werden, aber \etoc stellt \csb{etocoldpar}
+als Ersatz bereit: Es fügt |\let\etocoldpar\par| vor der |multicols|-Umgebung
+ein und eben dieses |\etocoldpar|\footnote{Dieser Befehl \csa{etocoldpar} (=
+funktionierendes \csa{par} im Argument von \csa{etocmulticolstyle}) ist nicht
+verwandt mit dem Schalter \csb{etocinline}, dessen Zweck es ist \etoc
+mitzuteilen, kein \csa{par} vor dem Inhaltsverzeichnis auszuführen.} am Ende der
+Überschrift ein, und macht dann noch einen vertikalen Sprung der Größe
+\csa{etocinnertopsep}.
+
+Auf der anderen Seite erwarten die Befehle \csb{etocruledstyle} und
+\csb{etocframedstyle} ein Argument im "`LR-Modus"' (um die Terminologie von
+\emph{\LaTeX, a document preparation system} zu nutzen). Das bedeutet, dass
+mehrzeilige Titel nur möglich sind, wenn man sie in etwas wie eine \csa{parbox}
+einschließt.
+
+Eine wichtige Größe verwendet von sowohl \csb{etocmulticolstyle},
+\csb{etocruledstyle} als auch \csb{etocframedstyle} ist \csb{etocinnertopsep}.
+Es gibt an, wieviel Platz zwischen den Überschriften und dem Start des Inhalts
+liegen soll. Der Default"=Wert ist |2ex| und man kann es mittels
+|\renewcommand*{\etocinnertopsep}|\marg{neuer\_Wert} ändern, nicht mit
+|\setlength|.
+
+\subsection{Der Kompatibilitätsmodus \csbhyp{etocstandarddisplaystyle}}
+\label{etocstandarddisplaystyle}
+
+\etoc wird dann das emulieren, für was eigentlich die Dokument"=Klasse
+verantwortlich ist, in Bezug auf den globalen Display"=Stil des
+Inhaltsverzeichnisses. Allen Änderung von innerhalb der Klasse sollten
+berücksichtigt werden.
+
+\subsubsection{Die Befehle \csbhyp{etocarticlestyle}, \csbhyp{etocbookstyle},
+ \dots}
+
+Dies sind Befehle, die abhängig von der Dokumentenklasse intern
+von \etoc im Kompatibilitätsmodus verwendet werden. Beispielsweise
+nimmt \csa{etocarticlestyle} |\section*{\contentsname}| (und setzt
+Markierungen in die Seite), während \csa{etocbookstyle}
+|\chapter*{\contentsname}| nimmt. Es kann nützlich sein,
+\csa{etocarticlestyle} für ein \csa{localtableofcontents} in der
+|book|-Klasse und im Kompatibilitätsmodus für den globalen
+TOC-Anzeige-Stil zu nehmen.
+
+\subsection{Der Befehl \csbhyp{etocinline}}
+\label{etocinline}
+\label{etocnopar}
+\label{etocdisplay}
+
+Mit \csb{etocinline} oder seinem Synonym |\etocnopar|, von dem
+|\tableofcontents|"=Befehl und seinen Varianten werden \emph{nicht} zuerst ein
+|\par| erstellt, um den vorherigen |paragraph| zu schließen. Von daher kann man
+das Inhaltsverzeichnis in einem Inline"=Stil darstellen; oder, wenn nur gebraucht
+um eine Token"=Liste bzw. ein Makro vorzubereiten, wird es bei der Ausführung
+nichts im Token"=Stream hinterlassen.
+
+% JFBU:
+Mit \csb{etocdisplay} werden (nochmal) von dem |\tableofcontents|"=Befehl und
+seinen Varianten zuerst ein |\par| erstellt.
+
+\section{Gesternde Varianten des \csbhyp{tableofcontents} etc. Befehls}
+\label{tableofcontents*}
+\label{localtableofcontents*}
+\label{etocbeforetitlehook}
+\label{etocaftertitlehook}
+\label{etocaftercontentshook}
+\label{etocaftertochook}
+\label{etocmemoirtoctotocfmt}
+
+Die Befehle \toc, \localtoc, \csa{etocmulticol} und all ihre Cousins und
+Varianten haben Stern"=Varianten (der Stern muss vor den anderen Argumenten
+kommen). Für alle Klassen außer |memoir| verhalten diese sich wie die Originale.
+Für |memoir| jedoch, schreibt das Original einen Eintrag in die |.toc|-Datei,
+genau so wie die Verwendung des echten \toc Befehls in dieser Klasse, während
+aber die Stern"=Variante genau das nicht tut, wie es in |memoir| die Regel ist.
+
+Sobald man damit beginnt, lokale Inhaltsverzeichnisse zu benutzen merkt man,
+dass der |memoir|-Standard, welcher dazu gedacht ist, einen |chapter|-Eintrag
+für jedes Inhaltsverzeichnis zu erzeugen, nicht praktisch ist. Der Befehl
+\csb{etocmemoirtoctotocfmt}\marg{Typ}\allowbreak\marg{name} ändert das Format
+(\meta{Typ} ist wieder |chapter|, |section|, |subsection| etc. und \meta{name}
+kann bspw. \csa{contentsname} sein.) Die Standardwerte für diese Größen sind
+|chapter| und |\contentsname|.
+
+Das Format der tatsächlichen Überschrift des Inhaltsverzeichnisses sollte
+ebenfalls ordnungsgemäß gesetzt werden (z.\,B. mit \csa{etoctocstyle}), um
+einfach die selbe Einheitsgröße zu nutzen wie im ersten Argument von
+\csa{etocmemoirtoctotocfmt}.
+
+Eine ungewöhnliche Situation tritt auf, wenn man zwei aufeinanderfolgende
+\csa{localtableofcontents} hat (offensichtlich ist das eine nicht sehr
+wahrscheinliche Situation), direkt nach einem \csa{part} zum Beispiel. Der erste
+würde dann eine Kapitelüberschrift erzeugen (wenn der Standard nicht geändert
+wurde, wie oben angedeutet), welche in die |.toc|-Datei geschrieben werden
+würde. Das zweite Inhaltsverzeichnis denkt dann, es ist ein lokales zu diesem
+Kapitel gehörig und würde aus diesem Grund nichts darstellen. Die Lösung für
+dieses Problem ist es, das zweite als Klon des ersten zu definieren.
+
+Unabhängig von der Situation hat man bei der |memoir|-Klasse immer ein
+Hook"=Makro namens \csb{etocaftertitlehook}, welches man unterdrückt, indem man
+die Stern"=Varianten der Darstellungsbefehle nutzt. Außer für die |memoir|-Klasse
+ist dieser Hook dazu gedacht, überhaupt nichts zu tun.
+
+Außerdem gibt es auch \csb{etocaftercontentshook}, \csb{etocbeforetitlehook}
+und \csb{etocaftertochook} all drei ähnlich definiert um nichts zu tun und die
+für einige spezielle Effekte genutzt werden können.
+
+
+
+\clearpage
+\etocdepthtag.toc {custom}
+
+\part{Eigene Stile von \etoc nutzen und an\-passen}
+\label{part:custom}
+\thispartstats
+
+\etocdefaultlines
+\renewcommand{\etoctoprule}{\hrule height2pt depth0pt}
+\renewcommand{\etoctoprulecolorcmd}{\color{red}}
+
+\etocruledstyle{\normalfont\normalsize\rmfamily\fboxrule1pt\color{red}%
+ \fbox{\parbox{.8\linewidth}{\centering\normalcolor Dies ist das
+ Inhaltsverzeichnis mit den Abschnitten und Unterabschnitten von
+ diesem Teil. Es hat das Label |toc:c|.}}}
+
+\localtableofcontents \label{toc:c}
+
+\section{Über\-blick über die Grund\-befehle zur Stil\-bearbeitung}
+
+\subsection{Ein lokales Inhalts\-ver\-zeich\-nis an\-passen}
+\hbox{\color{green}\fboxrule1pt\fboxsep1em
+\setbox0\hbox{\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{Name des Links}}%
+\framebox[\linewidth][c]
+{\vbox{\hsize\wd0\normalcolor\noindent
+\csa{etocsetstyle}\marg{Name der Ebene}%
+ \marg{Start}\marg{Präfix}\marg{Inhalt}\marg{Abschluss}\\
+\csa{etocname}, \csa{etocnumber}, \csa{etocpage},
+\csa{etocifnumbered}\marg{A}\marg{B}\\
+\csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage}, \csa{etoclink}\marg{Name des Links}
+}}}
+
+\subsection{Das Aus\-sehen eines Inhalts\-ver\-zeichnisses an\-passen}
+\medskip
+\hbox{\color{green}\fboxrule1pt\fboxsep 1em
+\setbox0\hbox{\csa{etoctocstylewithmarksnouc}\oarg{Ebene}%
+\marg{Anzahl der Spalten}\marg{Titel}\marg{Symbol}}%
+\framebox[\linewidth][c]
+{\vbox{\hsize\wd0
+\normalcolor\noindent
+\csa{etocmulticolstyle}\oarg{Anzahl der Spalten}\marg{Überschrift}\\
+\csa{etoctocstyle}\oarg{Ebene}\marg{Anzahl der Spalten}\marg{Titel}\\
+\csa{etoctocstylewithmarks}\oarg{Ebene}\marg{Anzahl der Spalten}%
+\marg{Titel}\marg{Symbol}\\
+\csa{etoctocstylewithmarksnouc}\oarg{Ebene}\marg{Anzahl der Spalten}%
+\marg{Titel}\marg{Symbol}\\
+\csa{etocruledstyle}\oarg{Anzahl der Spalten}\marg{Titel}\\
+\csa{etocframedstyle}\oarg{Anzahl der Spalten}\marg{Titel}\\
+\csa{etocsettocstyle}\marg{vor dem Inhaltsverzeichnis}\marg{nach dem Inhaltsverzeichnis}}}}
+
+\subsection{In\-halts\-ver\-zeich\-nisse dar\-stellen}
+\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em
+ \setbox0\hbox{\csa{etocname}, \csa{etocnumber},
+ \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}%
+ \framebox[\linewidth][c]
+ {\vbox{\hsize\wd0\normalcolor\noindent
+ \toc\\
+ \localtoc\\
+ \csa{etocmulticol}\oarg{Anzahl der Spalten}\marg{Überschrift}\\
+ \csa{etoclocalmulticol}\oarg{Anzahl der Spalten}\marg{Überschrift}\\
+ \csa{etocruled}\oarg{Anzahl der Spalten}\marg{Titel}\\
+ \csa{etoclocalruled}\oarg{Anzahl der Spalten}\marg{Titel}\\
+ \csa{etocframed}\oarg{Anzahl der Spalten}\marg{Titel}\\
+ \csa{etoclocalframed}\oarg{Anzahl der Spalten}\marg{Titel}\\
+ \hbox{}{\itshape\ttfamily\ \ \ \ und die mit Sternchen versehenen Varianten}
+ }}}
+
+\subsection{Label und Referenzen}
+
+Optional dürfen die Befehle für Label oder Referenzen auf die Befehle, die die
+Darstellung des Inhaltsverzeichnisses realisieren, folgen. Hierbei ist
+unwichtig, ob letztere mit Sternchen versehen sind oder nicht.\par
+
+\medskip \hbox{\color{green}\fboxrule1pt\fboxsep1em
+ \setbox0\hbox{\csa{etocname}, \csa{etocnumber},
+ \csa{etocpage}, \csa{etocifnumbered}\marg{A}\marg{B}}%
+ \framebox[\linewidth][c]
+ {\vbox{\hsize\wd0\normalcolor\noindent
+ \toc \csa{label}|\{toc:here\}|\\
+ \toc \csa{ref}|\{toc:far\}| \\
+ \toc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\
+ \localtoc \csa{label}|\{toc:here\}|\\
+ \localtoc \csa{ref}|\{toc:far\}| \\
+ \localtoc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\
+ \hbox{}{\itshape\ttfamily\ \ \ \ \ }%
+ \csa{etocmulticol}{\itshape\ttfamily, etc. funktionieren ähnlich}
+ }}}
+
+\medskip
+
+Neu mit |1.08e|: \localtoc\csa{ref}|{toc:far}| als Synonym für
+\toc\csa{ref}|{toc:far}|.
+
+% obsolète depuis 1.08e
+% Ein \csa{ref}"=Befehl, der auf einen Befehl zur Erzeugung eines lokalen
+% Inhaltsverzeichnisses folgt, hat \emph{keinen} Einfluss auf diesen.
+
+Wird ein
+anderes Inhaltsverzeichnis erneut dargestellt, so wird nur dessen Inhalt
+angepasst. Sowohl das Aussehen des Inhaltsverzeichnisses als auch die
+Darstellung seiner Linien orientieren sich an dem, das gerade definiert wurde
+und nicht an dem, von dem der Inhalt übernommen wurde.
+
+\section{Der Linien\-standard des Pakets: \csbhyp{etoc\-defaultlines}}
+\label{etocdefaultlines}
+
+Die Linienstile stammen bereits aus einer frühen Entwicklungsphase des Pakets,
+weswegen sie sich noch sehr an \TeX{} orientieren und dadurch gruselig aussehen.
+Daher bieten sie keinen guten Einstiegspunkt. Oft muss man, will man an dem Stil
+etwas ändern, diesen aus dem Quellcode kopieren und direkt bearbeiten. Trotzdem
+soll in diesem Abschnitt erläutert werden, wie die Schriftarten, die vertikalen
+Abstände, etc. des gewählten Linienstils verändert werden können.
+
+Wurden die vorgegebenen Linienstile nicht durch \csa{etocsetstyle} verändert, so
+kann man sie mit den Befehlen \csa{etocdefaultlines} bzw. \csa{etoctoclines}
+einschalten. Außer, dass der Einzug eines Unterabschnitts etwas kleiner ist als
+der eines Abschnitts, gleichen sich beide Gliederungsebenen. (Wie dieses
+Dokument zeigt, werden Abschnitte in Dokumentklassen, denen der Befehl
+\csa{chapter} fehlt, stets mit einer fettgedruckten Type gesetzt.)
+Unter"=Unterabschnitte werden inline, im selben Paragraphen und ohne Nummer oder
+Seitenzahl dargestellt. Dieser Stil wurde für Dokumente, die viele
+Unter"=Unterabschnitte enthalten, entwickelt und anschließend mit solchen
+getestet. Für derartige Dokumente sollte ein zweispaltiges Layout verwendet
+werden, da diese Darstellung kompakter ist als jene, die standardmäßig durch
+\LaTeX{} erzeugt wird.\footnote{Außerdem werden dadurch einzelne Teil- bzw.
+ Kapiteleinträge am Ende einer Seite oder einer Spalte vermieden, solange diese
+ weiter untergliedert sind.} Verwendet man hingegen ein einspaltiges Layout und
+enthält der Teil nur wenige Unter"=Unterabschnitte, so wird das
+Inhaltsverzeichnis im Vergleich zur mit \LaTeX{} gesetzten Variante etwas in die
+Breite gezogen. Weiterhin wirkt diese Darstellung weniger hierarisch als der
+\LaTeX{}-Standard, da sich die Darstellung von Abschnitten und Unterabschnitten
+kaum unterscheidet. (Dies gilt besonders, wenn die Dokumentklasse den Befehl
+\csa{chapter} erlaubt.)
+
+Da wir für das \hyperref[toc:main]{zentrale Inhaltsverzeichnis}
+|\etocsetlevel{subsection}{3}| gesetzt haben, werden die Unterabschnitte und die
+Unter"=Unterabschnitte inline dargestellt.
+
+Im Gegensatz dazu wollen wir nun das zentrale Inhaltsverzeichnis so darstellen,
+als ob wir eine Dokumentklasse genutzt hätten, die den Befehl \csa{chapter}
+erlaubt. Daher werden die Abschnitte im Folgenden als Kapitel und die
+Unterabschnitte als Abschnitte gedruckt, was wir u. a. mit Hilfe des Befehls
+\csa{etocsetlevel} erreichen. Zusätzlich nutzen wir für Abschnitte, welche in
+Wirklichkeit unsere Unterabschnitte sind, statt der fetten Serie einer
+Schriftart die halbfette Variante. Hierfür modifizieren wir den Befehl
+\csa{etocfontone}. Weiterhin nutzen wir einen gepunkteten Einzug, da dieser
+weniger Platz einnimmt als der Paketstandard.
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape
+ \fbox{\parbox{.6\linewidth}{
+ \leftskip 0pt plus .5fil
+ \rightskip 0pt plus -.5fil
+ \parfillskip 0pt plus 1fil
+ Dies ist das zentrale zweispaltige Inhaltsverzeichnis, das den
+ Standardlinienstil von \etoc nutzt, wobei die Abschnitte wie Kapitel und die
+ Unterabschnitte wie Abschnitte gesetzt wurden. }}}
+\etocdefaultlines
+\renewcommand{\etocpartname}{\partname}%
+% <1.08b hat \partname als Standard, aber dies arbeitet nicht gut mit frenchb
+% daher ist der Standard jetzt nun einfach Teil. Für die deutsche Sprache
+% können wir \partname oder Teil nehmen.
+\etocsetnexttocdepth{1}
+\begingroup
+\etocsetlevel{section}{0}
+\etocsetlevel{subsection}{1}
+\renewcommand*{\etocfontone}{\normalfont \normalsize}
+\renewcommand*{\etoctoclineleaders}
+ {\hbox{\normalfont\normalsize\hbox to 1ex {\hss.\hss}}}
+\sloppy
+\tableofcontents
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+% % pour un problème avec multicol (doc de 1.08g, Samedi 29 août 2015 à 12:06:08)
+% \clearpage
+
+\filecontentsexec\filecontentsheremacro
+
+\section{\etoc individuell an\-passen}
+
+\subsection{Den durch \etoc vor\-de\-finierten Linien\-stil individualisieren}
+
+Im Folgenden sollen einfach die wichtigsten Befehle des Pakets aufgelistet werden. Man kann diese
+bequem mittels \csa{renewcommand} anpassen:
+\begin{verbatim}
+\newcommand*\etocfontminustwo{\normalfont \LARGE \bfseries}
+\newcommand*\etocfontminusone{\normalfont \large \bfseries}
+\newcommand*\etocfontzero{\normalfont \large \bfseries}
+\newcommand*\etocfontone{\normalfont \normalsize \bfseries}
+% (in classes with chapter, \etocfontone does not do \bfseries)
+\newcommand*\etocfonttwo{\normalfont \normalsize}
+\newcommand*\etocfontthree{\normalfont \footnotesize}
+
+\newcommand*\etocsepminustwo{4ex plus .5ex minus .5ex}
+\newcommand*\etocsepminusone{4ex plus .5ex minus .5ex}
+\newcommand*\etocsepzero{2.5ex plus .4ex minus .4ex}
+\newcommand*\etocsepone{1.5ex plus .3ex minus .3ex}
+\newcommand*\etocseptwo{.5ex plus .1ex minus .1ex}
+\newcommand*\etocsepthree{.25ex plus .05ex minus .05ex}
+
+\newcommand*\etocminustwoleftmargin{1.5em plus 0.5fil}
+\newcommand*\etocminustworightmargin{1.5em plus -0.5fil}
+\newcommand*\etocminusoneleftmargin{1em}
+\newcommand*\etocminusonerightmargin{1em}
+
+\newcommand*\etocbaselinespreadminustwo{1}
+\newcommand*\etocbaselinespreadminusone{1}
+\newcommand*\etocbaselinespreadzero{1}
+\newcommand*\etocbaselinespreadone{1}
+\newcommand*\etocbaselinespreadtwo{1}
+\newcommand*\etocbaselinespreadthree{.9}
+\newcommand*\etoctoclineleaders
+ {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}}
+\newcommand*\etocabbrevpagename{p.~} % muss der Sprache angepasst werden
+ % deutsche Nutzer: \renewcommand*\etocabbrevpagename{S.~}
+\newcommand*\etocpartname{Part} % früher, vor v1.08b, war \partname
+% aber dies macht keinen Sinn, z.\,B. mit babel+frenchb deren \frenchpartname
+% nimmt in den Account den Wert des Teilzählers.
+\newcommand*\etocbookname{Book} % muss der Sprache angepasst werden
+\end{verbatim}
+
+Der Standardlinienstil kann innerhalb der \etoc"=Umgebung nicht individualisiert
+werden. Wie bereits erwähnt, wird das Paket nach Aufruf des Befehls
+\etocstandardlines kaum verwendet und agiert lediglich auf globaler Ebene,
+sodass die Einträge des Inhaltsverzeichnisses (hoffentlich) so dargestellt
+werden, als ob das Paket \etoc fehlen würde.\footnote{Innerhalb der
+ KOMA-script"=Klassen muss der Befehl \csa{etocstandarddisplaystyle} genutzt
+ werden, damit die Option |toc=left| auch für die Linieneinträge gilt.}
+
+Wurde mittels \csa{etocsetlevel} die Tiefe der Gliederung soweit herabgesetzt,
+dass \etoc die Befehle für bestimmte Gliederungsebenen kennt, so wirkt der
+Kompatibilitätsmodus, also \csa{etocstandardlines}, auch auf diese. Dies gilt
+natürlich nur für Gliederungsbefehle, die dem Standard von \LaTeX{} entsprechen
+und die alle Definitionen liefern, welche zum Darstellen von Einträgen im
+Inhaltsverzeichnis benötigt werden. (Es muss ein Makro der Art \csa{l@irgendwas}
+existieren.)
+
+Sobald der Befehl \csa{etocsetstyle} aufgerufen wird, wird zusätzlich der
+Kompatibilitätsmodus ausgeschaltet. Es spielt hierbei keine Rolle, ob der Befehl
+in der Präambel oder im Hauptteil des Dokuments steht.
+
+\subsection{Die Dar\-stellung eines Inhalts\-ver\-zeich\-nisses an\-spassen}
+\label{ssec:customdisplay}
+
+Erneut wollen wir uns darauf beschränken die relevanten Makros aufzulisten, da
+deren Funktion aus ihrem Namen ableitbar ist. Soll die Länge eines Befehls
+verändert werden, so muss der entsprechende Befehl mittels \csa{renewcommand}
+und nicht durch \csa{setlength} verändert werden. Weiterhin erlauben Befehle,
+welche die Farbe verändern, nicht nur die Standardfarben. Will man ihr Verhalten
+ändern, so muss man in der neuen Definition den Befehl \csa{color} aufrufen. Um
+ihre Wirkung zu beenden, muss man sie so neu definieren, dass sie danach nur den
+Befehl \csa{relax} enthalten.
+\begin{verbatim}
+\newcommand*\etocabovetocskip{3.5ex plus 1ex minus .2ex}
+\newcommand*\etocbelowtocskip{3.5ex plus 1ex minus .2ex}
+
+\newcommand*\etoccolumnsep{2em}
+\newcommand*\etocmulticolsep{0ex}
+\newcommand*\etocmulticolpretolerance{-1}
+\newcommand*\etocmulticoltolerance{200}
+\newcommand*\etocdefaultnbcol{2}
+\newcommand*\etocinnertopsep{2ex}
+\newcommand*\etoctoprule{\hrule}
+\newcommand*\etoctoprulecolorcmd{\relax}
+
+% nur für gerahmte Inhaltsverzeichnisse:
+\newcommand*\etocinnerleftsep{2em}
+\newcommand*\etocinnerrightsep{2em}
+\newcommand*\etocinnerbottomsep{3.5ex}
+
+\newcommand*\etocleftrule{\vrule}
+\newcommand*\etocrightrule{\vrule}
+\newcommand*\etocbottomrule{\hrule}
+\newcommand*\etocleftrulecolorcmd{\relax}
+\newcommand*\etocrightrulecolorcmd{\relax}
+\newcommand*\etocbottomrulecolorcmd{\relax}
+
+\newcommand*\etocbkgcolorcmd{\relax}
+
+% Haken
+\newcommand\etocframedmphook{\relax}
+\end{verbatim}
+
+Der Befehl \csa{etocframedmphook} ist direkt hinter dem Anfang einer Minipage,
+innerhalb der der Inhalt eines gerahmten Verzeichnisses gesetzt wird, verankert.
+
+Wurden die Farbbefehle, also \csa{...colorcmd}, nicht verändert, so expandieren
+sie lediglich zu \csa{relax}. (Daher muss man für ihre Verwendung nicht die
+Pakete |color| oder |xcolor| einbinden.) Hat man jedoch einen solchen Befehl -
+wie zum Beispiel \csa{etocbkgcolorcmd} - so verändert, dass er nun tatsächlich
+eine Farbe anzeigt, so kann dies nur mittels
+|\renewcommand{\etocbkgcolorcmd}{\relax}| aufgehoben werden und nicht durch
+\csa{let}\csa{etocbkgcolorcmd}\csa{relax}.
+
+Wie man an dem Beispiel \centeredline{|\renewcommand{\etoctoprule}{\hrule height
+ 1ex}|} erkennen kann, werden die Größen des oberen Rechtecks in den Maßen
+|ex| und |em| angegeben.
+
+Sobald der Titel während der Befehlsausführung von \csa{etocruledtoc} oder
+\csa{etocframedtoc} gesetzt wurde, nutzt der Paketcode dessen Schriftgröße, um
+die Bedeutung von \glq1ex\grq~zu ermitteln. Natürlich dürfen auch die anderen
+Befehle zur Erzeugung eines Rechtecks Maße annehmen, deren Wert sich nur durch
+eine zugehörige Schriftgröße ergibt. Hierbei dient jedoch die Schrift vor dem
+Inhaltsverzeichnis als Referenz.
+
+Wie in \TeX{} üblich, werden sowohl das Rechteck vor als auch das nach dem
+Inhalt des Verzeichnisses durch einfache Einzüge (einer festgelegten Höhe)
+realisiert. Es muss sich hierbei also nicht um echte Rechtecke handeln. Die
+Rechtecke links und rechts vom Inhalt werden hingegen nicht durch (horizontale)
+Einzüge verwirklicht. Sie stellen vielmehr Objekte einer bestimmten Weite dar.
+Daher darf hier \emph{nur} die Syntax von \TeX{}"=Befehlen, mit deren Hilfe man
+Rechtecke erzeugt, genutzt werden.
+
+\section{Ein weiteres Bei\-spiel für ein farbiges Inhalts\-verzeichnis}
+\label{ssec:tocclone}
+
+Beim Befehl \csa{etocframedstyle} wird der Titel in der Mitte des oberen Rechtecks positioniert. Dies würde im folgenden Beispiel
+jedoch sehr unschön aussehen, weswegen wir den Titel innerhalb der \meta{start}-Umgebung eines Abschnittbefehls
+platzieren. Hierdurch wird er innerhalb des Rahmens gesetzt.
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\begingroup
+\definecolor{subsecnum}{RGB}{13,151,225}
+\definecolor{secbackground}{RGB}{0,177,235}
+\definecolor{tocbackground}{RGB}{212,237,252}
+
+\renewcommand{\etocbkgcolorcmd}{\color{tocbackground}}
+\renewcommand{\etocleftrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etocrightrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}}
+\renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}}
+
+\renewcommand{\etocleftrule}{\vrule width 1cm}
+\renewcommand{\etocrightrule}{\vrule width .5cm}
+\renewcommand{\etocbottomrule}{\hrule height 12pt}
+\renewcommand{\etoctoprule}{\hrule height 12pt}
+
+\renewcommand{\etocinnertopsep}{0pt}
+\renewcommand{\etocinnerbottomsep}{0pt}
+\renewcommand{\etocinnerleftsep}{0pt}
+\renewcommand{\etocinnerrightsep}{0pt}
+
+\newcommand\shiftedwhiterule[2]{%
+ \hbox to \linewidth{\color{white}%
+ \hskip#1\leaders\vrule height1pt\hfil}\nointerlineskip\vskip#2}
+
+\etocsetstyle{subsubsection}{\etocskipfirstprefix}
+ {\shiftedwhiterule{\leftskip}{6pt}}
+ {\sffamily\footnotesize
+ \leftskip2.5cm\hangindent1cm\rightskip1cm\noindent
+ \hbox to 1cm{\color{subsecnum}\etocnumber\hss}%
+ \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill
+ \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par
+ \nointerlineskip\vskip3pt}
+ {}
+
+\etocsetstyle{subsection}{\etocskipfirstprefix}
+ {\shiftedwhiterule{1.5cm}{6pt}}
+ {\sffamily\small
+ \leftskip1.5cm\hangindent1cm\rightskip1cm\noindent
+ \hbox to 1cm{\color{subsecnum}\etocnumber\hss}%
+ \color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill
+ \rlap{\hbox to 1cm{\hss\etocpage\hskip.2cm}}\par
+ \nointerlineskip\vskip6pt}
+ {}
+
+\newcommand{\coloredstuff}[2]{%
+ \leftskip0pt\rightskip0pt\parskip0pt
+ \fboxsep0pt % Auch ohne Rahmen nutzt \colorbox den Befehl \fboxsep!
+ \noindent\colorbox{secbackground}
+ {\parbox{\linewidth}{%
+ \vskip5pt
+ {\noindent\color{#1}#2\par}\nointerlineskip
+ \vskip3pt}}%
+ \par\nointerlineskip}
+
+\etocsetstyle{section}
+{\coloredstuff{white}
+ {\hfil \hyperref[toc:b]{\bfseries\large Ich bin der Zwilling von
+ diesem Verzeichnis (Klick mich an!)}\hfil}}
+{\vskip3pt\sffamily\small}
+{\coloredstuff{white}
+ {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip
+ \makebox[0pt][r]{\makebox[.5cm][r]{\etocnumber\hspace{.2cm}}}%
+ \etocname\hfill\makebox[.5cm][r]{\etocpage\hspace{.2cm}}}%
+ \vskip6pt }
+{}
+
+\etocframedstyle[1]{}
+\tableofcontents \label{toc:clone} \ref{toc:globalcmds}
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\filecontentsexec\filecontentsheremacro
+
+% v1.07l on the occasion of traduction into German documentation
+ % APRIL 26, 2014 Improvement in the section style for better placement of
+ % page number when the section name is more than one line long. Use of
+ % \makebox rather than \hbox, to be more LaTeX like.
+
+Das Inhaltsverzeichnis befindet sich in einer
+\hyperref[toc:clone]{float}-Umgebung, die man \vpageref{toc:clone} findet. Da
+diese Art von Code keine zusätzlichen Pakete verlangt, ist er etwas
+komplexer.\footnote{Zudem zeigt er die Vorliebe des Autors für die
+\TeX{}-Syntax.} Außerdem wurde er in einem früheren Stadium entwickelt und
+seither nicht überarbeitet.
+
+Da Rahmen (welche hier genutzt wurden, um die Hintergrundfarbe zu setzen) nur
+die Hintergrundfarbe innerhalb einer Seite verändern, würde es sich anbieten,
+weitere Pakete einzubinden, mit deren Hilfe man die Hintergrundfarbe über
+mehrere Seiten hinweg verändern kann.
+
+Alle Befehle, welche die Farbe verändern, sind in \etoc zu Beginn so definiert,
+dass sie nichts verändern. Daher kann der Nutzer selbst entscheiden, ob er
+Farben nutzen will oder nicht.
+
+\clearpage
+\etocdepthtag.toc {tips}
+
+\part{Tipps}
+\label{part:tipsandtricks}
+
+\thispartstats
+
+\etocsettocstyle{}{}
+\etocstandardlines
+\localtableofcontents
+
+%\section{\ldots\ und Tricks}
+
+\begin{otherlanguage}{english}
+\section{The \csbhyp{etocsetlocaltop.toc} command}
+\label{etocsetlocaltop.toc}
+
+It is important to understand that \csb{localtableofcontents} works entirely
+from data \emph{in the |.toc| file}. If the document, say with |article|
+class, contains starred sectioning commands, which are not accompanied
+by suitable \csa{addcontentsline}, then these units are completely
+transparent to \csb{localtableofcontents}:
+\begin{itemize}
+\item If it is issued before |\section*{Foo}|, say locally to a |\section|,
+ then the local TOC will include not only the |subsection|s between the
+ |\section| and the |\section*{Foo}| but also those following, and be stopped
+ uniquely by a later |\section| or |\part| from the document's body.
+\item If the command is issued right after |\section*{Foo}| and the later was
+ itself subsequent to a (numbered) |\subsection|, then \etoc will think it
+ must display a TOC local to that \emph{subsection} level.
+\end{itemize}
+Before concluding that \etoc is buggy, imagine how the global TOC of the
+document would look like in such circumstances: the \csb{localtableofcontents}
+does exactly the job of extracting from that global TOC various local TOCs; it
+works only from material in that (virtual) global TOC.
+
+Since relase |1.08k|, \etoc provides the one-argument command
+\csb{etocsetlocaltop.toc} to insert into the |.toc| file a kind
+of ``ghost'' of a given sectioning unit. Here is an example:
+
+\begin{verbatim}
+\part*{Extra unnumbered part}
+\etocsetlocaltop.toc{part}
+\localtableofcontents
+\end{verbatim}
+
+Then in this example, \csb{localtableofcontents} will know be stopped
+by the next |\part| (naturally a numbered one or a |\part*| followed by
+suitable |\addcontentsline|) or also by a later |\etocsetlocaltop.toc{part}|.
+
+This is all fine but keep in mind again that \csb{localtableofcontents} can
+only display units which have been pushed to the |.toc| file, so that |\part*|
+must be followed by numbered sections or |\section*/\addcontentsline| pairs if
+\csb{localtableofcontents} is to display anything useful. One can not use
+\etoc to typeset data not actually there in the |.toc| file!
+
+Thus, in the situation above, one may wonder why the document does not use
+|\addcontentsline| after the |\part*| as it must do so for sub-sectioning
+units if they are to appear in the local TOC.
+
+One may imagine some document where all |Part|s are non-numbered (and are not
+pushed to the |.toc| file) but nevertheless the user wants its
+\csb{localtableofcontents} for each one: then indeed \csb{etocsetlocaltop.toc}
+will help in that case.
+
+There are at least two more methods to handle this situation:
+\begin{itemize}
+\item the first one is simply to use the |\addcontentsline{toc}{part}{..}|
+ commands, and to set the |part| style to do nothing, so that the main TOC
+ will not display them,
+\item the second one does not add the |\addcontentsline{toc}{part}{...}| but
+ uses ``depth tags'' (\autoref{ssec:tocwithdepthtags}) and multiple
+ \csb{tableofcontents} (not \csb{localtableofcontents}), one for each desired
+ local TOC.
+\end{itemize}
+
+There is a variant of the first method which would set the level of |part|
+temporarily to |6| for the typesetting of the main TOC. But then the |chapter|
+toc line style will execute inside the main TOC only once its \emph{start} and
+\emph{finish} parts (see \autoref{sec:etocsetstyle}). This is actually also a
+problem of the second method.
+
+But not of the first method which uses
+\centeredline{\csb{etocsetstyle}|{part}{}{}{}{}|} nor of the approach with
+\csb{etocsetlocaltop.toc}: the \emph{start} and \emph{finish} portions of the
+|chapter| toc line style will get executed at the appropriate times in the
+main, global, TOC.
+
+Be aware however that this use of \csb{etocsetlocaltop.toc}|{part}| will also
+cause the main global TOC to execute (once) the \emph{start} and \emph{finish}
+portions of the |part| toc line style (assuming here again it is not typeset in
+compatibility mode).
+
+Final remark: usage of \csb{etocsetlocaltop.toc} interferes with
+\csb{etocchecksemptiness} only to the extent that it modifies (as explained in
+this section) the selection made by \csb{localtableofcontents}, hence the
+decision whether the local TOC is empty or not.
+
+\end{otherlanguage}
+
+\section{Hacken "`framed parboxes"'}
+
+\begin{verbatim}
+\etocdefaultlines
+\renewcommand\etoctoprule{\hrule height 2pt depth 2pt}
+\etocruled{\color{green}\fboxrule2pt\fboxsep1ex
+ \fbox{\raisebox{-\fontdimen22\textfont2}
+ {\color{blue}\parbox{.5\linewidth}
+ {\normalfont Dieser Text ist vertikal perfekt zentriert
+ unter Berücksichtigung der \emph{surrounding horizontal rules.}}}}}
+\ref{toc:globalcmds}
+\end{verbatim}
+
+\etocdefaultlines
+
+\renewcommand\etoctoprule{\hrule height 2pt depth 2pt}
+
+\etocruled{\color{green}\fboxrule2pt\fboxsep1ex
+ \fbox{\raisebox{-\fontdimen22\textfont2}
+ {\color{blue}\parbox{.5\linewidth}
+ {\normalfont Dieser Text ist vertikal perfekt zentriert
+ unter Berücksichtigung der \emph{surrounding horizontal rules.}}}}}
+\ref{toc:globalcmds}
+
+\section{Umstellen der Ebenen}
+\label{subsec:interverting}
+
+Lasst uns alle Unterabschnitte zeigen und aufzählen, die in diesem Dokument
+vorkommen (Siehe \autoref{part:surprising} für andere Verwendungen dieser Technik.):
+\begin{verbatim}
+\etocsetnexttocdepth{2}
+\begingroup
+\etocsetlevel{part}{3}
+\etocsetlevel{section}{3}
+\etocsetstyle{subsection}
+ {\small\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]}
+ {\normalfont\bfseries\item}
+ {\roman{enumi}. \mdseries\etocname{} (\etocnumber, p.~\etocpage)}
+ {\end{enumerate}}
+\renewcommand{\etoccolumnsep}{2.75em}
+\renewcommand{\columnseprule}{1pt}
+\etocmulticol[3]{\subsection{Alle Unterabschnitte in diesem Dokument}}
+\endgroup
+\end{verbatim}
+
+\etocsetnexttocdepth{2}
+
+\begingroup
+\etocdefaultlines
+\etocstandarddisplaystyle
+\etocsetlevel{book}{3}
+\etocsetlevel{part}{3}
+\etocsetlevel{chapter}{3}
+\etocsetlevel{section}{3}
+\etocsetstyle{subsection}{\small
+\begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]}
+{\normalfont\bfseries\item}
+{\roman{enumi}. \mdseries\etocname{} (\etocnumber, S.~\etocpage)}
+{\end{enumerate}}
+
+\renewcommand{\etoccolumnsep}{2.75em}
+\renewcommand{\columnseprule}{1pt}
+
+%%\etocmarkbothnouc{List of all subsections}
+%% le mark (\markright) est fait par \subsection
+
+\etocmulticol[3]{\subsection{Alle Unterabschnitte in diesem Dokument}\label{toc:allsubsections}}
+
+
+\endgroup
+
+\section{Statistiken anzeigen}\label{ssec:statistics}
+
+Jeder Teil dieses Dokuments beginnt mit einem Paragraphen, der sagt, wieviele
+Kapitel und Unterkapitel er hat. Nun, jeder von diesen Paragraphen ist ein
+Inhaltsverzeichnis! Wir haben ein Makro \csa{thispartstats} geschaffen, um dies
+zu tun. Es nutzt "`Speicher"'"=Boxen, um die Informationen über die ersten und
+späteren Kapitel und Unterkapitel zu halten. Boxen zu nehmen, ist die einfachste
+Art und Weise |hyperref|-Links für spätere Verwendungen zu kapseln (ob es einer
+ist oder keiner). Allerdings kann man dann nichts an der Schriftart oder Farbe
+ändern.
+% (die \TeX -Primitive \csa{setbox} eher nehmend als von \LaTeX{}
+% \csa{sbox} würde die Farbe Farbe um das ohne Boxen gespeicherte Feld verändern).
+Wenn eine solche Notwendigkeit entsteht, muss man von der Boxenverwendung zum
+Makro nehmen wechseln und die |hyperref|-Daten für später speichern, wie im oben
+im Code von \autoref{sec:molecule} vorgestellt. Wir präsentieren auch diese
+zweite Methode.
+
+Aber als Erstes der Code von \csa{thispartstats}:\par
+\begin{filecontentshere}{etocsnippet-\the\value{section}-A.tex}
+\newsavebox\firstnamei \newsavebox\firstnumberi
+\newsavebox\lastnamei \newsavebox\lastnumberi
+\newsavebox\firstnameii \newsavebox\firstnumberii
+\newsavebox\lastnameii \newsavebox\lastnumberii
+\newcounter{mycounti} \newcounter{mycountii}
+\newcommand*{\thispartstatsauxi}{} \newcommand*{\thispartstatsauxii}{}
+\newcommand*{\oldtocdepth}{}
+\newcommand*{\thispartstats}{%
+ \setcounter{mycounti}{0}%
+ \setcounter{mycountii}{0}%
+ \def\thispartstatsauxi{%
+ \sbox{\firstnamei}{\etocname}%
+ \sbox{\firstnumberi}{\etocnumber}%
+ \def\thispartstatsauxi{}}%
+ \def\thispartstatsauxii{%
+ \sbox{\firstnameii}{\etocname}%
+ \sbox{\firstnumberii}{\etocnumber}%
+ \def\thispartstatsauxii{}}%
+ \begingroup
+ \etocsetstyle{subsection} {} {}
+ {\thispartstatsauxii
+ \stepcounter{mycountii}%
+ \sbox{\lastnameii}{\etocname}%
+ \sbox{\lastnumberii}{\etocnumber}} {}%
+ \etocsetstyle{section}
+ {}
+ {}
+ {\thispartstatsauxi
+ \stepcounter{mycounti}%
+ \sbox{\lastnamei}{\etocname}%
+ \sbox{\lastnumberi}{\etocnumber}}
+% Hier wird ein Befehl definiert, der fuer jedes Teil ein paar Fakten sammelt
+% und ausgibt.
+ {Zu Beginn wollen wir ein paar Fakten zu diesem Teil nennen. Er enthält
+ \arabic{mycounti} Abschnitt\ifnum\value{mycounti}>1 e\fi{} und
+ \arabic{mycountii} Unterabschnitt\ifnum\value{mycountii}>1 e\fi. Der Name des ersten
+ Abschnitts lautet
+ \glqq\unhbox\firstnamei{}\grqq~und er hat die Gliederungsnummer
+ \glqq\unhbox\firstnumberi\grqq. Der Name des letzten Abschnitts lautet
+ \glqq\unhbox\lastnamei{}\grqq~und er hat die Nummer
+ \glqq\unhbox\lastnumberi\grqq.
+ \ifnum\value{mycountii}>0 Der erste
+ Unterabschnitt heißt
+ \glqq\unhbox\firstnameii{}\grqq~und er hat die Nummer
+ \glqq\unhbox\firstnumberii\grqq. Der Name des letzten Unterabschnitts ist
+ \glqq\unhbox\lastnameii{}\grqq~und dessen Nummer ist
+ \glqq\unhbox\lastnumberii\grqq.\fi }%
+ \etocinline
+ \etocsettocstyle {}{}
+ \etocsetnexttocdepth{2}%
+ \localtableofcontents % to be used at the top level of a Part.
+ \endgroup
+}
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-A.tex}
+Und nun, die Variante mit Makros anstelle von der mit Boxen (diese Variante
+steht hier für die Verwendung in einem Kapitel).
+\begin{filecontentshere}{etocsnippet-\the\value{section}-B.tex}
+\makeatletter
+\newcommand*\firstsubname {} \newcommand*\lastsubname {}
+\newcommand*\firstsubnumber {} \newcommand*\lastsubnumber {}
+\newcommand*\thisspecialstatsaux{}
+\newcommand*{\thisspecialstats}{%
+ \setcounter{mycounti}{0}%
+ \def\thisspecialstatsaux{%
+ \let\firstsubname\etocthelinkedname
+ \let\firstsubnumber\etocthelinkednumber
+ \def\thisspecialstatsaux{}}
+ \begingroup
+ \etocsetstyle{subsection}
+ {}
+ {}
+ {\thisspecialstatsaux
+ \stepcounter{mycounti}%
+ \let\lastsubname\etocthelinkedname
+ \let\lastsubnumber\etocthelinkednumber }
+ {Zu Beginn wollen wir ein paar Fakten zu diesem Teil nennen. Er enthält
+ \arabic{mycounti} Unterabschnitt\ifnum\value{mycounti}>1 e\fi{}. Der Name des ersten
+ Abschnitts lautet\emph{\firstsubname{}} und er hat die Gliederungsnummer
+ {\firstsubnumber}. Der Name des letzten Unterabschnitts lautet
+ \emph{\lastsubname{}} und er hat die Nummer{\lastsubnumber}.}
+ \etocsettocstyle {}{}
+ \etocinline
+ \etocsetnexttocdepth {1}%
+ \localtableofcontents % to be used within a section
+ \endgroup
+}
+\makeatother
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}-B.tex}
+
+\section{Tiefe Tags nehmen}
+\label{ssec:tocwithdepthtags}
+
+Wir wollen ein TOC, das für jeden |\part| eine Überschrift hat (außer der letzte
+Teil mit dem Quellcode, wofür beschließen, ihn nicht einzubeziehen), und wir
+wollen \autoref{part:globalcmds} öffnen für die Paragraphen. Um dies zu
+erreichen, fügen wir zu dieser Quelle verschiedene
+\csb{etocdepthtag.toc}"=Befehle und es bleibt jetzt, zu setzen die Levels für
+jeden Tag mit \csb{etocsettagdepth} (dies wurde oben in diesem Dokument
+verwendet in \autoref{sec:secondexample}, in einer Gruppe, damit es keine
+Auswirkungen auf andere Inhaltsverzeichnisse hat).
+
+Allerdings sind die Linienstile des Pakets nicht in der Lage Paragraphen
+anzuzeigen und die Standardlinienstile der Dokumentklasse geben zu viel
+vertikalen Abstand (in diesem Zusammenhang) bei der Anzeige einer
+Teilüberschrift im TOC aus.Deshalb kochen wir unseren eigenen, schnell
+entwickelten Linienstil, in der Art von \autoref{sec:firstexample} (aber auf dem
+Weg Seitenzahlen von rechts, was mehr wie eine Methode von \LaTeX2e's
+|\@dottedtocline| ist; und mehrzeilige Überschriften lassen nun den Bereich
+unter den Zahlen leer, im Gegensatz zu dem Code von \autoref{sec:firstexample}).
+Und nach ein paar Minuten für die Wahl der Längen (jetzt ist das erstmal getan,
+es kann leicht recycelt) erhalten wir:
+
+\begin{filecontentsdef}{etocsnippet-\the\value{section}.tex}{\foo}
+\etocsetnexttocdepth {all}
+\begingroup
+\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip
+\newcommand*{\EndParWithPagenoInMargin}
+ {\nobreak\hfill
+ \makebox[0.75cm][r]{\mdseries\normalsize\etocpage}%
+ \par}
+\renewcommand*\etoctoclineleaders
+ {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}}
+\newcommand*{\EndParWithPagenoInMarginAndLeaders}
+ {\nobreak\leaders\etoctoclineleaders\hfill
+ \makebox[0.75cm][r]{\mdseries\normalsize\etocpage}%
+ \par }
+\etocsetstyle {part}
+ {}
+ {\leavevmode\leftskip 1cm\relax}
+ {\bfseries\large\llap{\makebox[1cm][r]{\etocnumber\ \ }}%
+ \etocname\EndParWithPagenoInMargin\smallskip}
+ {}
+\etocsetstyle {section}
+ {}
+ {\leavevmode\leftskip 1.75cm\relax}
+ {\bfseries\normalsize\llap{\makebox[.75cm][l]{\etocnumber}}%
+ \etocname\EndParWithPagenoInMarginAndLeaders}
+ {}
+\etocsetstyle {subsection}
+ {}
+ {\leavevmode\leftskip 2.75cm\relax }
+ {\mdseries\normalsize\llap{\makebox[1cm][l]{\etocnumber}}%
+ \etocname\EndParWithPagenoInMarginAndLeaders}
+ {}
+\etocsetstyle {subsubsection}
+ {}
+ {\leavevmode\leftskip 4cm\relax }
+ {\mdseries\normalsize\llap{\makebox[1.25cm][l]{\etocnumber}}%
+ \etocname\EndParWithPagenoInMarginAndLeaders}
+ {}
+\etocsetstyle {paragraph}
+ {}
+ {\leavevmode\leftskip 5.5cm\relax }
+ {\mdseries\normalsize\llap{\makebox[1.5cm][l]{\etocnumber}}%
+ \etocname\EndParWithPagenoInMarginAndLeaders}
+ {}
+\etocsettagdepth {preamble} {none}
+\etocsettagdepth {overview} {part}
+%\etocsettagdepth {arbitrarily}{part}% not needed explicitely, keeps value
+%\etocsettagdepth {examples} {part}
+%\etocsettagdepth {surprising} {part}
+%\etocsettagdepth {linestyles} {part}
+\etocsettagdepth {globalcmds} {paragraph}
+\etocsettagdepth {custom} {part}
+%\etocsettagdepth {tips} {part}
+%\etocsettagdepth {etocandworld}{part}
+\etocsettagdepth {code} {none}
+\renewcommand\etoctoprule {\hrule height 3pt\relax }
+\renewcommand\etoctoprulecolorcmd {\color{blue}}
+\renewcommand\etocaftercontentshook
+ {\medskip\begingroup \color{blue}\hrule height 3pt \endgroup }
+\etocruledstyle [1]{\Large\bfseries
+ \fbox{\makebox[8cm]{A TOC using depth tags}}}
+\sloppy
+\tableofcontents
+\endgroup
+\end{filecontentsdef}
+
+\filecontentsexec\foo
+
+\filecontentsprint\foo
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+\section{Das TOC als eine Tabelle setzend (die alte Weise)}
+\label{ssec:tocastableold}
+
+Aufgrund, unter anderem, der Tatsache, dass die Ausrichtung Zellen
+kreiert und Gruppen schließt und dass durch standardmäßige
+Definitionen von \csb{etocname}, \csb{etocnumber} und
+\csb{etocpage} durch \etoc lokal sind, war es nicht leicht, ein
+TOC als Tabelle mit \etoc zu setzen, vor der Freigabe von Version
+|1.08|.
+
+Nicht nur \csb{etocname} etc. \ldots{} verursachte ein Problem,
+sondern auch die grundlegende Redefinition von \csa{contentsline},
+die von \etoc erst nach dem ersten Argument von
+\csb{etocsettocstyle} gemacht wurde, ist beseitigt worden;
+folglich, wenn dieses Argument in einer Tabelle geöffnet wurde,
+würde die \etoc-Redefinition von \csa{contentsline} in der ertsen
+Zelle der ersten Reihe durchgeführt werden und danach verloren
+gehen.
+
+So musste man auf die Technik zurückgreifen, die in
+\autoref{tocastree} erklärt wurde, auf die Verwendung der
+Festlegung von \csa{tableofcontents} als eine Möglichkeit, Daten
+zu speichern, die später gezeigt wurde.
+
+Für das Protokoll, dies ist, wie das TOC in
+\autoref{sec:tocastable} in der Vergangenheit codiert wurde. Hier
+haben wir nicht das Problem mit der Positionierung der |\hline|s;
+wir sind konfrontiert mit dem neueren Verfahren. Andererseits
+müssen wir Zeichenregister manipulieren, die den meisten \LaTeX
+-Nutzern nicht bekannt sind (Makros könnten verwendet werden, doch
+das würde umständlich sein, außer vielleicht mit Hilfe von \eTeX{}
+\csa{nicht expandiert}).
+
+Die Methode hier ist die stärkste, weil sie aus der |.toc|-Datei
+nur die Daten herausfiltert, die wir wollen (die anderen Dinge
+werden nicht ignoriert, sie werden ausgeführt, jedoch ohne
+hoffentlich Chaos zu schaffen; typisch sind dafür die Sprache von
+Anleitungen zu ändern, etc. \ldots ). Und wir sind weniger anfällig,
+potentielle Opfer von verschiedenen Fallen bei externen Makros
+innerhalb der |.toc|-Datei aus anderen Paketen stammend.
+
+% unexpanded avait été traduit en allemand :-((
+% corrigé seulement le 25 septembre 2016
+
+Hinweis: Anstatt |\toks|-Register wäre es hier einfacher, \eTeX{}
+\csa{unexpanded} Primitive zu verwenden. Sehen Sie dazu
+zum Beispiel \autoref{sec:mindmap}.
+
+
+\begin{filecontentshere}{etocsnippet-\the\value{section}.tex}
+\newtoks\toctabletok
+\newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2
+ #1\expandafter\expandafter\expandafter {\expandafter\the\expandafter #1#2}}
+
+\newcommand*\PreparePart{%
+ \toks0 \expandafter{\etocthelinkednumber}%
+ \toks2 \expandafter{\etocthelinkedname}%
+ \toks4 \expandafter{\etocthelinkedpage}%
+ \edef\toctablepiece {\noexpand\hline
+ \noexpand\strut\the\toks0 &\noexpand\bfseries\the\toks2
+ &\the\toks4 \noexpand\\\noexpand\hline}%
+}
+\newcommand*\PrepareSection{%
+ \toks0 \expandafter{\etocthelinkednumber}%
+ \toks2 \expandafter{\etocthelinkedname}%
+ \toks4 \expandafter{\etocthelinkedpage}%
+ \edef\toctablepiece {\the\toks0 &\the\toks2 &\the\toks4 \noexpand\\}%
+}
+% new version for 1.07k, 2014/03/06
+\newcommand*{\PrepareSubsection}{%
+ \toks0 \expandafter{\etocthelinkednumber}%
+ \toks2 \expandafter{\expandafter\itshape\etocthelinkedname\strut}%
+ \toks4 \expandafter{\expandafter\itshape\etocthelinkedpage}%
+ \edef\toctablepiece{&\noexpand\makebox[1cm][c]{\the\toks0}%
+ \noexpand\parbox[t]{\dimexpr6cm-\tabcolsep\relax}
+ {\noexpand\sloppy\the\toks2}%
+ &\the\toks4 \noexpand\\}%
+}
+
+\begingroup
+\etocsetstyle{part}{}{}{\PreparePart \appendtotok\toctabletok\toctablepiece}{}
+
+\etocsetstyle{section}{}{}{\PrepareSection \appendtotok\toctabletok\toctablepiece}{}
+
+\etocsetstyle{subsection}{}{}{\PrepareSubsection\appendtotok\toctabletok\toctablepiece}{}
+
+\etocsettocstyle
+ {\toctabletok{\hypersetup{hidelinks}%
+ \begin{longtable}{|>{\bfseries}c|p{7cm}|r|}\hline
+ \multicolumn{3}{|c|}{\Large\bfseries\strut TABLE OF CONTENTS}%
+ \\\hline\hline}}
+ {\global\toctabletok\expandafter{\the\toctabletok\hline\end{longtable}}}
+\etocsettocdepth {subsection}
+\tableofcontents
+\the\toctabletok
+\endgroup
+\end{filecontentshere}
+\attachfile{etocsnippet-\the\value{section}.tex}
+
+% ATTENTION Dimanche 25 septembre 2016 à 18:56:50
+% je retire le \clearpage car il y a une page quasi-vide à l'exception de
+% l'icône Paperclip.
+
+\clearpage
+\etocdepthtag.toc {etocandworld}
+
+\part{\etoc und die Außenwelt}
+
+\section{Kompatibilität mit anderen Paketen}\label{sec:kompatmitanderen}
+
+\subsection{Generelle Informationen}
+
+Die Inhalte der |.toc|-Datei (falls bereits vorhanden) werden einmal in den
+Speicher von \etoc getan, bei |\begin{document}|. \footnote{Neu mit |1.07m|.
+ Früherer Versionen benutzten die |.toc|-Datei bei
+ \csa{usepackage\{etoc\}}. Danke an Denis Bitouzé für ein Babel-etoc
+ Problem entdecken zu haben.}
+
+ Die |.toc|-Datei bleibt für andere Pakete nutzbar für
+ Lesevorgänge bis zum Ort des ersten Inhaltsverzeichnisses, zu diesem
+ Zeitpunkt wird ein Schreib-stream durch \etoc geöffnet und von diesem Punkt
+ aus wird die Datei gelöscht bis ihr Inhalt wieder auf die Platte von
+ \LaTeX{} am Ende der Kompilierung geschrieben wurde.
+
+\etoc erwartet die Sektionierungseinheiten des Dokuments, um ihre Daten in eine
+Datei mit der Endung |.toc| zu schreiben, in Form von Linien, die enthalten den
+\csa{contentsline}"=Befehl und dessen Argumente.
+
+\etoc erfordert von der |.toc|-Datei, das |\contentsline|-Makro zu
+verwenden (möglicherweise von anderen Paketen belegt).
+
+\etoc kann nicht wirklich mit Paketen zusammensein, die
+\csa{tableofcontents}"=Befehle ändern: Eine Art Waffenstilstand kann erreicht
+werden, wenn \etoc zuletzt geladen wird, daher ist es der Gewinner.
+ \begin{framed}
+ Ändern Sie nicht den |\tableofcontents|"=Befehl, wie diesen folgenden:
+ \centeredline{|\let\oldtableofcontents\tableofcontents|,}
+ \centeredline{|\renewcommand\tableofcontents{\oldtableofcontents\mystuff}|,}
+ da dies den |\label/\ref|-Mechanismus unmöglich macht. Sie können vielmehr
+ \centeredline{|\renewcommand\etocaftertochook{\mystuff}|} ausführen und es
+ ergibt auch \csb{etocaftercontentshook}, das führt ein bisschen eher
+ \footnotemark{} aus, gerade vor dem Schließen des Teils vom toc"=Anzeigestil
+ (und damit innerhalb einer Gruppe).
+ \end{framed}
+\footnotetext{Im Gegensatz zu \csa{etocaftertochook},
+ \csa{etocaftercontentshook} wird nicht ausgeführt, wenn |tocdepth| das
+ Drucken des TOC nicht ermöglicht.}
+
+%
+
+\begin{otherlanguage}{english}
+ Don't use |\if<condition> stuff \tableofcontents\fi|, but:
+ \centeredline{|\if<condition> stuff \expandafter\tableofcontents\fi|}
+ Also a |\else| immediately following \csa{tableofcontents} or
+ \csa{localtableofcontents} requires a previous \csa{expandafter}.
+\end{otherlanguage}
+
+\subsection{Kompatibilität mit \texttt{beamer}}
+
+\etoc steht inkompatibel mit der |beamer|-Klasse. Aber, wenn |beamer| im
+article-Modus verwendet wird, d.\,h. die article-Klasse in Verbindung
+mit dem |beamerarticle|-Paket, dann sollte \etoc arbeiten.
+
+\subsection{Kompatibilität mit \texttt{Babel}}
+
+\begin{framed}
+ Man sollte \etoc \emph{nach} \texttt{babel} laden.
+\end{framed}
+
+\subsection{Kompatibilität mit \texttt{hyperref}}
+
+\begin{otherlanguage}{english}
+ Please inform the author in case of issues: \etoc was from the start
+ designed to be |100%| compatible with package |hyperref|.
+\end{otherlanguage}
+
+Es ist |hyperref| bekannt und hoffentlich kompatibel mit ihm: die Macros
+\csa{etocname}, \csa{etocnumber} und \csa{etocpage} enthalten die
+|hyperref|-Links, wenn vorhanden (Beachten Sie, dass die
+\emph{linktoc=all}-Option von |hyperref| mitteilt, dass ein Link zur
+Seitenzahl zu setzen ist, für ein einen toc"=Eintrag.). Beispielsweise sind die
+Inhaltsverzeichnisse des vorliegenden Dokuments komplett verlinkt.
+Es ist kein Thema, ob \etoc vor oder nach |hyperref| geladen wird.
+
+\subsection{Kompatibilität mit \texttt{multicol}}
+
+\etoc lädt das Paket |multicol|.
+
+\subsection{Kompatibilität mit \texttt{tocloft}}\label{subs:tocloft}
+
+Die Release |1.07k| fügt Kompatibilität mit dem Paket |tocloft| hinzu:
+\footnote{\url{http://ctan.org/pkg/tocloft}} Schritte wurden getan, um eine Neudefinition
+von |\tableofcontents| zu vermeiden, getan von |tocloft| an |\begin{document}|.
+%
+
+Solange \etoc ungeschickt ist im Kompatibilitätsmodus, wird von |tocloft| die
+Anpassung sowohl für den Lin ienstil als auch den TOC-Titel getan. Man kann
+immer noch von den \emph{tiefen Tags}-Management mit \etoc profitieren, von
+seinem |\localtableofcontents|, von seinem |\label+\ref|-Mechanismus. Man kann
+|\etocsetstyle| nehmen, um mit \etoc das Layout des TOC zu definieren und dann
+eher |tocloft| für etwas anderes, wenn auf |\tableofcontents| folgen
+\csb{etocstandardlines} und \csb{etocstandarddisplaystyle}. In diesem
+Kompatibiltätsmodus |\etocsetlevel{division unit}{6}| wird die gewählte
+Bereichsebene gerendert, aber der Austausch von Ebenen ist andererseits nicht
+möglich.
+\begin{framed}
+ Man sollte \etoc \emph{nach} \texttt{tocloft} laden. Sonst wird eine Warnung
+ ausgegeben.
+\end{framed}
+
+Es ist möglich (unter Verwendung des Pakets|tocloft| beispielsweise), im
+gesamten Dokument die Makros \csa{l@section}, \csa{l@subsection} \ldots{} zu
+benutzen und der Effekt wird im nächsten Inhaltsverzeichnis durch den
+Kompatibilitätsmodus von \etoc sichtbar werden.
+
+\subsection{Kompatibilität mit der \texttt{memoir}-Klasse}
+
+Die Release |1.07l| hat ebenfalls die Kompatibilität mit der |memoir|-Klasse
+verbessert: Seine |appendix|-Ebene kann mit \etoc gemacht werden. Es ist die
+gleiche Ebene wie wie bei |chapter|, also der Kapitelebenstil kann eventuell ein
+Test für einige boolesche"=Ausdrücke sein, die aktiviert sein können via einer
+Instruktion an die |.toc|-Datei aufgenommen werden, wenn man zwei Arten von
+Unterteilungen unterscheidet.
+
+\subsection{Kompatibilität mit \texttt{tocvsec2}}
+
+% la traduction allemande était déficiente semble-t-il, j'améliore un peu
+% Dimanche 25 septembre 2016 à 11:02:43
+
+\etoc deaktiviert die Modifikationen des |\tableofcontents| durch
+|tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}} und es kanzelt
+auch andere |toc|-bezogene Macros, aber es reimplantiert partiell ihre
+Funktionalität mit \csb{etocsettocdepth.toc}. Zwei \LaTeX-Läufe sind für
+das erneute Nehmen des Befehls in einem Dokument notwendig, um einen
+Effekt im Inhaltsverzeichnis zu haben.
+
+\subsection{Kompatibilität mit \texttt{tableof}}
+
+Es ist möglich, \etoc und {\color{niceone}|tableof|}
+\footnote{\url{http://ctan.org/pkg/tableof}} gleichzeitig zu
+verwenden. Die Veröffentlichung |1.08| von \etoc benötigt
+mindestens die Version|1.4a| von |tableof|. Wenn man
+\csb{etocglobaldefs} in die Präambel aufgenommen hat, muss dies
+nach dem Laden des Pakets |tableof| sein. Der
+{\color{niceone}|tableof|}-Befehl \csa{nexttocwithtags} sollte,
+wie erwartet, funktionieren.
+
+Die {\color{niceone}|tableof|}-Befehle \csa{tableof},
+\csa{tablenotof}, \ldots{} werden das Inhaltsverzeichnis (a priori
+global) nach den Standards der Dokumentklasse setzen, gehorchend
+den \etoc-Tiefenauszeichnungen, wie erklärt in der
+|tableof|-Dokumentation, sie setzen keinen TOC-Titel. Sie sollten
+\emph{nicht} verwendet werden im Fall, wenn \csb{etocglobaldefs} vorher
+ausgegeben wurde; es sei denn, ihr Skopus wurde da beendet oder
+\csb{etoclocaldefs} hat seine Einflussnahme abgebrochen.
+
+\subsection{Kompatibilität mit \texttt{tocstyle}}
+
+Nicht bekannt. (not tested a.t.t.o.w).
+
+
+\section{\TeX -nische Sachen}
+
+Die \csa{etocname}, \csa{etocnumber}, \csa{etocpage} Befehle sind gegen
+vorzeitige Expansion geschützt. Sie enthalten geeignete |hyperref|-Links, wenn
+das Paket |hyperref| geladen und aktiviert für das TOC ist. Die Befehle
+\csa{etoclink} und \csa{etocifnumbered} sind auch gegen vorzeige Expansion
+geschützt. Auch \csb{etociffirst} und \csb{etoctoccontentsline}.
+
+Andererseits \csb{etocthename}, \csb{etocthenumber}, \csb{etocthepage}, haben
+keine Anbindung an |hyperref|-Links und sind nicht gegen Expansionen geschützt.
+Und \csb{etocthelinkedname}, \csb{etocthelinkednumber},
+\csb{etocthelinkedpage} sind auch nicht gegen Expansionen geschützt.
+
+Befehle wie \csb{etocsetstyle}, \csb{etocsetlevel}, \csb{etocsettocstyle},
+\csb{etocmulticolstyle}, \csb{etocruledstyle}, \csb{etocframedstyle} folgen
+Gruppierungen von \LaTeX. Alle TOCs werden in Gruppierungen gesetzt.
+
+Wenn ein \localtoc durch den Nutzer in das Dokument aufgenommen wird, eine
+Zeile, in einen inneren \etoc"=Befehl und eine Identifikationszahl in die
+|.toc|-Datei aufgenommen wird. Das korrekte Inhaltsverzeichnis wird nur nach dem
+nächsten \LaTeX -Lauf angezeigt werden.
+
+
+\section{Fehler und Katastrophen}
+
+Nach der Verwendung von \csa{etocsetstyle}für eine Ebene nehmen die restlichen,
+nicht angepassten Ebenen die Standardstile von \etoc (diejenigen, die aktiviert
+werden von \csa{etocdefaultlines}). Man muss sicherstellen, dass alle Ebenen,
+die für das nächste Inhaltsverzeichnis gebraucht werden, miteinander kompatibel
+sind: Insbesonders, dass die Standardlinienstile jeweils im "`vertikalen Modus"'
+gestartet werden.
+
+Wenn man mehrere \toc"=Befehle in einem Dokument verwendet, sollte man sich
+hüten, mehrere Satzanweisungen in der |.toc|-Datei zu addieren, so sie mit \toc
+ausgeführt für alle TOCs ausgeführt werden: Auch für \localtoc spielt es keine
+Rolle, ob die Anweisungen Material außerhalb des Anwendungbereichs betreffen,
+sie werden sie trotzdem erhalten. Falls unbedingt erforderlich (aber es das
+sollte es nie) müssen dies Instruktionen so sein, dass einfach aktiviert oder
+deaktiviert werden von der Dokumentquelle, wie es sein muss.
+
+So wie es üblich ist bei TOCs und Labels, muss nach jeder Änderung \LaTeX{} eine
+bestimmte Anzahl von Durchführungen haben, um für das Dokument das endgültige
+Aussehen zu erhalten (mindestens zweimal durchlaufen).
+
+
+
+\clearpage
+\etocdepthtag.toc {code}
+
+\part{Der Code}
+
+\localtableofcontents
+
+\section{Zeitstempel}
+
+Die deutsche Übersetzung wurden zum letzten Mal am
+\texttt{\etocDEDEdocdate} (Paketversion \texttt{\etocDEDEpkgversion}) geändert
+(abgesehen von den organisatorischen Veränderungen).
+Einige neuere Abschnitte bleiben auf Englisch.
+
+Dokumentation erzeugt von der Quelldatei mit dem Stempel
+\texttt{\etocdtxtimestamp}. Die dokumentierte Paketversion ist
+\texttt{\etocpkgversion} von \texttt{\etocDEpkgdate}.
+
+% STOP GERMAN (DEUTSCH) VERSION
+
+^^Afi
+
+^^Acatcode92 0
+
+\catcode1 13
+
+\begingroup
+\renewcommand\lowast{{\normalsize\raisebox{-.4\height}{*}}}
+\small
+
+\ifnum\ForEnglish=1
+ \section{Change history}
+\fi
+
+\ifnum\ForDeutsch=1
+ \section{Änderungen}
+\fi
+
+\selectlanguage{english}
+
+\setlength{\columnsep}{\etoccolumnsep}
+
+\makeatletter
+
+% 27 avril 2014 un petit hack pour hyphénation (éventuelle) en allemand
+% j'ai déjà ~ qui sera de catcode 0, cependant il faudrait aussi les accolades,
+% donc finalement pour aller vite, je rends le + actif. Je modifie aussi le test
+% fait par \jfverbaspace (n'ayant pas commenté mon code, j'ai dû réfléchir pour
+% me rappeler à peu près ce que c'était censé faire).
+
+\def\jfverbatim{\@beginparpenalty \predisplaypenalty
+ \parindent \z@
+ \parfillskip \@flushglue
+ \parskip \tw@\p@ plus 1fil\relax
+ \let \do \@makeother \dospecials \makestarlowast \catcode`$ \active
+ \begingroup\lccode`~`$
+ \lowercase{\endgroup\def~[##1]{\foreignlanguage{ngerman}{##1}}}%
+ \catcode`^ \active
+ \begingroup\lccode`~`^
+ \lowercase{\endgroup\def~{\nopagebreak}}% ajouté 2014/04/28, oblige à un peu
+ % plus de mark-up cependant
+ \catcode`\~\z@
+ \footnotesize\normalfont\baselineskip10pt\relax
+ \def\v{\vskip\baselineskip v}% ajouté 2015/05/09; faudra trouver mieux.
+ \frenchspacing \obeyspaces \jf@xverbatim }
+
+\begingroup
+\catcode `|=0 \catcode `[= 1 \catcode`]=2
+\catcode `\{=12 \catcode `\}=12 \catcode`\\=12
+|long|gdef|jf@xverbatim#1\end{jfverbatim}[#1|end[jfverbatim]]
+|endgroup
+
+\def\endjfverbatim{}
+
+\newdimen\jfverbadim
+
+\everypar{\leftskip\jfverbadim\bgroup
+ \def\par{\egroup\jfverbadim\z@\@@par}%
+ \def\jfverbaspace#1{\if\@sptoken\string#1\unskip\else\ \fi#1}}
+
+\begingroup\obeyspaces\def\x{\endgroup%
+\def {\ifvmode\advance\jfverbadim.5em\relax\else\expandafter\jfverbaspace\fi}}\x
+
+\makeatother
+
+\begin{multicols}{2}
+\begin{jfverbatim}
+v1.09 [2019/03/09]^
+
+ New features: \etoclocaltop, \localtableofcontentswithrelativedepth. Thanks
+ to Tony Roberts for feature request.
+
+ Note to hackers: internal control sequence \Etoc@localtop is gone.
+
+ etoc now requires e-TeX (\numexpr, \unless).
+
+~v1.08p [2018/07/04]^
+
+ Fixed bug surfacing in case of linktoc=page option of hyperref.
+ Thanks to Denis Bitouzé for report (cf.
+ https://github.com/ho-tex/hyperref/issues/65,
+ https://github.com/dbitouze/yathesis/issues/61).
+
+~v1.08o [2018/06/15]^
+
+ Fixed bug showing up if an unnumbered TOC entry starts with a brace,
+ and document uses hyperref. Caused by a typo in a macro name at
+ previous release.
+
+
+~v1.08n [2018/02/23]^
+
+ Refactoring of core macros detecting \numberline and its variants.
+
+
+~v1.08m [2018/02/07]^
+
+ Fix to 1.08k's introduced incompatibility with KOMA-script
+ and tocbasic's \nonumberline.
+
+
+~v1.08l [2017/10/23]^
+
+ Workaround an issue with Emacs/AUCTeX wrongly reporting about
+ actually non-existent LaTeX errors, which was triggered by some
+ strings written (indirectly) to log file by etoc under some
+ circumstances.
+
+
+~v1.08k [2017/09/28]^
+
+ Adds \etocsetlocaltop.toc. See corresponding manual section for
+ details.
+
+ Adds \etocsavedparttocline, \etocsavedchaptertocline,
+ \etocsavedsectiontocline, ... They can be used in the context of
+ the technique explained in section "Another compatibility mode".
+
+ Formerly, etoc redefined for the duration of the TOC the memoir
+ macro \chapternumberline and its likes to have same meaning as
+ \numberline (of course, not when executed in compatibility mode),
+ for the sake of extraction of \etocnumber.
+
+ New method detects presence of any \<foo>numberline macro without
+ any change to originals; they can thus be used as is when applying
+ the approach of "Another compatibility mode" section from manual.
+
+
+~v1.08j [2017/09/21]^
+
+ Since 1.08a-2015/03/13 \etocname, \etocnumber, \etocpage
+ contain, if hyperref is present and configured for using
+ hyperlinks in the TOC, the link destination in already expanded
+ form. This means one can use them even if the style closes a
+ group (for example from a & in a tabular), if \etocglobaldefs
+ was issued; also one can save their meaning for delayed usage
+ (with for example \LetLtxMacro as they are robust).
+
+ But for some legacy reason \etoclink, contrarily to
+ \etocthelink, was handled differently. Now, \etoclink also
+ contains the link destination in already expanded form, and can
+ thus be used even if the line style issues a &, as long as
+ \etocglobaldefs is issued.
+
+ Also, bugs dating back to the early days of the package, but
+ surfacing only under relatively rare conditions such as usage
+ of hyperref with its option "linktoc=page" got fixed.
+
+
+~v1.08i [2016/09/29]^
+
+ This fixes an issue dating back to 1.08e-2015/04/17: under
+ \etocchecksemptiness regime, some circumstances (such as
+ adding to an already compiled document a \localtableofcontents
+ before the main \tableofcontents) created an "Undefined
+ control sequence \Etoc@localtop" error. Thanks to Denis Bitouzé
+ for reporting the problem.
+
+ On this occasion, \etocdoesnotcheckemptiness
+ has been added to unset the flag.
+
+ A rather more exotic issue was fixed: the emptiness check for
+ local tocs could get confused if the tocdepth counter was varying
+ in some specific ways from inside the toc file.
+
+ After adding to a document a \localtableofcontents, two LaTeX
+ passes are needed for etoc to get a chance to print the
+ correct local contents. Formerly, etoc issued a Warning on
+ the first pass; it now also induces LaTeX into
+ announcing "There were undefined references", as this is nearer
+ to the end of the log file and console output.
+
+
+~v1.08h [2016/09/25]^
+
+ New functioning of \etocsetnexttocdepth: the tocdepth counter is
+ modified only at the time of the table of contents, not before.
+ This fixes an issue which arose when \etocsetnexttocdepth was
+ used multiple times with no intervening table of contents.
+ Thanks to Denis Bitouzé for reporting the problem.
+
+ The PDF documentation includes about 25 LaTeX code snippets also
+ as file attachment annotations, additionally to their verbatim
+ typesetting. The ordering of the documentation contents has been
+ slightly re-organized.
+
+ A previous documentation-only update on 2016/09/09 added a new
+ section with the (approximate) translation into etoc lingua of the
+ book class toc style, for easy customizability.
+
+
+~v1.08g [2015/08/29]^
+
+ Downgraded to a mere info message the etoc-issued warning
+ (relative to \settocdepth/\maxtocdepth) under class memoir.
+
+
+~v1.08f [2015/04/28]^
+
+ Minor changes to the documentation. \etocsetlevel more economical.
+
+
+~v1.08e [2015/04/17]^
+
+ The command \etocchecksemptiness tells etoc to not print, from
+ that point on, the headings of the local tables of contents if
+ they have empty contents. This is mainly for class authors who
+ might want to have their \section or \chapter automatically do
+ a \localtableofcontents. Could prove also useful for batch
+ conversions of documents. Thanks to Paul Gaborit who asked for
+ such a feature.
+
+ The command \etocnotocifnotoc extends this behaviour to global
+ TOCs: indeed why should documents with no sectioning units take
+ this as an excuse not to use package etoc ?
+
+ The command \etocifwasempty{yes}{no} can be used for
+ suitable extra action.
+
+ A \tableofcontents\ref{foo} now expects foo to be a label to a
+ _local_ TOC. The use with foo a label to a _global_ TOC is not
+ supported anymore as it had no utility and made the code more
+ complex.
+
+ The syntax \localtableofcontents\ref{foo} is now accepted as a
+ synonym to the earlier syntax \tableofcontents\ref{foo}.
+
+
+~v1.08d [2015/04/09]^
+
+ Translation into German of the additions made to the documentation
+ for the 1.08x series of releases.
+
+ Thanks to Christine Römer!
+
+
+~v1.08c [2015/03/30]^
+
+ - removed a few unneeded \long from the code.
+
+ - removed use of \arabic at one location of the code, as it may get
+ redefined by some language modules for babel or polyglossia.
+
+
+~v1.08b [2015/03/18]^
+
+ Bug fixes:
+
+ - extra space token removed from `\localtableofcontents` (showed
+ only for inline TOCs.)
+
+ - \etocpartname (a macro used by the package own default line
+ styles) was defined to be \partname, but this is not compatible
+ at least with babel+french context. Now simply expands to Part.
+
+ - some problems fixed in the German documentation.
+
+ - [2015/03/28] some more problems fixed in the documentation. Added
+ mention of \etocarticlestyle and \etocbookstyle.
+
+
+~v1.08a [2015/03/13]^
+
+ \etocname, \etocnumber and \etocpage are now the robust
+ variants of \etocthelinkedname, \etocthelinkednumber and
+ \etocthelinkedpage. This should arguably have been done since
+ the addition of the latter to etoc with v1.07f [2013/03/07].
+ The earlier robust commands \etocname etc... contained
+ the hyperlink destination only in an unexpanded form.
+
+ The documentation has a brand new title page and a new section
+ The TOC as a TikZ mind map both illustrating further uses of
+ etoc to display tables of contents as trees in an automatic
+ manner.
+
+
+~v1.08 [2015/03/10]^
+
+ \etocskipfirstprefix may now appear anywhere in the <start>
+ part of a level style.
+
+ New commands \etociffirst, \etocxiffirst, \etocxifnumbered,
+ \etocglobaldefs and \etoclocaldefs.
+
+ It is now possible to issue line style specifications directly
+ with & and \\ tokens, in order to typeset a TOC as a tabular
+ or longtable with the opening for example in the first
+ argument of \etocsettocstyle and the closing in its second
+ argument.
+
+ It is mandatory for such uses to issue \etocglobaldefs which
+ tells etoc to proceed globally for certain definitions. This
+ is also useful in the context of the inline environments of
+ package enumitem.
+
+ On this occasion, various old parts of the code have been
+ improved.
+
+
+~v1.07n [2015/03/05]^
+
+ No more use of \toks@ when etoc constructs \etocthelinkedname
+ etc... Thus \toks@ can be put in the line styles in order to
+ accumulate information. Only useful if it is certain nothing
+ else will change \toks@ either.
+
+ In the documentation: list of main commands now in alphabetic
+ order.
+
+
+~v1.07m [2015/01/23]^
+
+ Reading of .toc file is delayed to \begin{document} to account for
+ possible Babel active characters used therein. Thanks to Denis
+ Bitouzé who reported a Babel related problem.
+
+ Improved global toc display emulation under KOMA-script classes.
+
+ New command \etocbeforetitlehook. New command \etocdisplay.
+
+
+~v1.07l [doc of 2014/04/29]^
+
+ Added to the documentation an example of use of \etocthelinkedname together
+ with an enumitem inline itemize* environment; moved main TOC to immediately
+ after the title, and license to the first pages.
+
+ Incorporation of the translation into German done on the initiative of
+ $[Christine Römer] by $[Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel
+ Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU Jena).] My
+ grateful thanks to all!
+
+
+~v1.07l [2014/04/22]^
+
+ Fixes a bug with the 1.07k compatibility layer with tocloft which had broken
+ the 1.07k (sic) compatibility with memoir (yes, memoir class 1.07k testing
+ had been done before adding the tocloft thing to the source code . . . ).
+ Also, etoc when detecting tocvsec2 now checks if this is under the memoir
+ class, as then nothing special needs to be done to rescue \tableofcontents,
+ contrarily to the situation with the native tocvsec2.
+
+
+~v1.07k [2014/03/06]^
+
+ Compatibility with package tocloft; and improved compatibility with
+ class memoir. Novel TOC example in Overview.
+
+
+~v1.07j [2013/12/03]^
+
+ Some issues with the documentation formatting (now two-sided) have been
+ addressed, and a novel documentation section ``Typesetting the TOC as a
+ table'' has been added. Very minor code change (\Etoc@readtoc).
+
+
+~v1.07i [2013/10/21]^
+
+ Changes to the \etocmulticolstyle and \etocruledstyle codes
+ to lessen the risk of a page break after the title (in the one-column case).
+
+
+~v1.07h [2013/10/16]^
+
+ New commands \etocdepthtag.toc, \etocsettagdepth, \etocobeydepthtags,
+ \etocignoredepthtags.
+
+
+~v1.07g [2013/10/13]^
+
+ New commands \etocsettocdepth, \etocsettocdepth.toc,
+ \etocobeytoctocdepth, \etoc~-ignoretoctocdepth which
+ emulate part of tocvsec2 functionality ; measures to
+ make tocvsec2 partially compatible with etoc.
+
+ New commands \etocsetnexttocdepth, \invisibletableofcontents,
+ \invisiblelocaltableofcontents.
+
+ Switched from tikz-qtree to forest for the first `toc as
+ tree' example.
+
+ Command names are linked to their descriptions, and many
+ other changes in the documentation.
+
+ Removed printing of temporary message when the local toc
+ id is not yet stabilized; indeed \localtableofcontents
+ can have many uses, such as filling up some token list
+ register and one may wish to not have anything typeset,
+ even in an intermediate run.
+
+ All of tex etoc.dtx, etex etoc.dtx, xetex etoc.dtx, latex
+ etoc.dtx, pdflatex etoc.dtx are now possible, and the
+ extracted file etoc.tex allows easy customization of
+ compilation options for the documentation (default is via
+ dvipdfmx which produces the smallest file).
+
+
+~v1.07f [2013/03/07]^
+
+ New macros \etocthelinkedname, \etocthelinkednumber,
+ \etocthelinkedpage, and \etocthelink.
+
+
+~v1.07e [2013/03/01]^
+
+ Improvements in the package own line styles with
+ regards to penalties and vertical spaces.
+
+ Addition to the documentation of an example of
+ a tree-like table of contents (uses tikz).
+
+ More such examples added 2013/03/03.
+
+
+~v1.07d [2013/02/24]^
+
+ Minor code improvements and new documentation
+ section ``Another compatibility mode''.
+
+
+~v1.07b [2013/02/02]^
+
+ Removal of the \xspace from the macros \etocname,
+ \etocnumber, \etocpage.
+
+ Additional examples in the documentation.
+
+
+~v1.07 [2013/01/29]^
+
+ New commands:
+
+ \etocthename, \etocthenumber, \etocthe~-page, \etoclink,
+
+ \etoctoccontentsline, \etoctoccontentsline~lowast
+
+ \etocnopar, \etocaftercontentshook
+
+ Modified command: \etocmulticolstyle
+
+ New documentation section ``Surprising uses of etoc'' which
+ explains how to do ``Lists of arbitrary things'', in
+ addition to the tables of contents.
+
+
+~v1.06 [2012/12/07]^
+
+ The standard macros \l@section etc... are modified only
+ during the calls to \tableofcontents; they can thus be
+ customized as will by the user (with the help of a
+ package like tocloft) and this will be taken into account
+ by etoc for the TOCs typeset in compatibility mode.
+
+
+~v1.05 [2012/12/01]^
+
+ \localtableofcontents replaces \tableofcontents~lowast (for
+ compatibility with the memoir class).
+
+ Compatibility with KOMA-script and memoir document
+ classes.
+
+
+~v1.04 [2012/11/24]^
+
+ A (possibly local) table of contents can be labeled:
+
+ \tableofcontents \label{toc:1}
+
+ and reproduced elsewhere in the document (with a possibly
+ completely different layout):
+
+ \tableofcontents \ref{toc:1}
+
+
+~v1.02 [2012/11/18]^
+
+ Initial version.
+
+\end{jfverbatim}
+\end{multicols}
+\endgroup % group for modified verbatim printing of the changes log
+
+\makeatletter
+ \let\check@percent\original@check@percent
+\makeatother
+
+\small
+
+\ifnum\ForEnglish=1
+\section{Implementation}
+\fi
+
+\ifnum\ForDeutsch=1
+\section{Ausführung}
+\fi
+
+\indent % !!!!!!!!!!!!!!!!! Lundi 09 mars 2015 à 09:32:22
+% PUTAIN DE BORDEL DE MERDE AVEC CES \trivlist
+% il faut faire un paragraphe après \section sinon pas d'espacement
+% vertical en sortie de blocs macrocode. Pas évident à trouver, vu que
+% je customisais différentes choses qui pouvaient affecter macrocode.
+
+% 9 mars 2015
+% Pour rappel on avait dans le préambule:
+% \def\MacroFont{\ttfamily\small\hyphenchar\font45 \baselineskip11pt\relax}
+% ce qui donne donc le \macro@font qui sera utilisé.
+
+
+
+\StopEventually{\normalsize
+ \ifnum\NoSourceCode=1
+ \ifnum\ForEnglish=1
+ \texttt{\parindent 0pt\rightskip 1cm minus 1cm
+ This documentation has been compiled without inclusion of the source
+ code. To produce the English documentation with source code included:\endgraf
+ \ \ \ \ run etex on etoc.dtx or etoc.ins to produce etoc.tex,\endgraf
+ \ \ \ \ then thrice pdflatex on etoc.tex.\endgraf
+ \medskip
+ To produce the German documentation with source code included, run etex on
+ etoc.dtx or etoc.ins to produce etoc-DE.tex, then edit etoc-DE.tex
+ to set \string\NoSourceCode\space to 0, and run pdflatex thrice on etoc-DE.tex.\endgraf
+}%
+ \fi
+ \ifnum\ForDeutsch=1
+ \texttt{\hyphenchar\font-1
+ \parindent 0pt\rightskip 0.5cm minus 0.5cm \selectlanguage{ngerman}%
+ Diese Dokumentation wurde ohne Einbeziehung des Quellcodes
+ erstellt.
+ % Um
+ % die englische Dokumentation mit dem Quellcode zu produzieren, ist
+ % einzubeziehen: \endgraf
+ % \ \ \ \ kompilieren etex mit etoc.dtx oder etoc.ins, um etoc.tex zu
+ % produzieren, \endgraf
+ % \ \ \ \ dann dreimal pdflatex mit etoc.tex.\endgraf
+ \endgraf
+ Um die deutsche Dokumentation mit Einbeziehung des Quellcodes zu erstellen,
+ ist zu kompilieren etex mit etoc.dtx oder etoc.ins, um etoc-DE.tex zu
+ erzeugen, dann ist \string\NoSourceCode\space in etoc-DE.tex auf 0 zu
+ setzen, dann ist pdflatex dreimal mit etoc-DE.tex laufen zu lassen.\endgraf
+ % \medskip
+ % (Ignorieren Sie dvipdfmx-Warnungen oder, im Falle von Problemen mit einer
+ % alten Version von dvipdfmx, setzen Sie \string\Withdvipdfmx\space auf 0 in
+ % etoc.tex oder etoc-DE.tex um dann pdflatex laufen zu
+ % lassen.)\endgraf }%
+ }%
+ \fi
+ \fi
+\end{document}}
+
+% 9 avril 2015 (1.08d) pour forcer indentation après macrocode
+% par un effet particulier si avant macrocode un enumerate, inefficient,
+% mais vraiment pas envie d'investiguer.
+%
+% l'esthétique est un peu douteuse mais je laisse ?
+
+% non finalement je supprime
+
+% \makeatletter
+% \def\endmacrocode{%
+% \ifpm@module \endgroup \pm@modulefalse \fi
+% \everypar{}%
+% \global\@inlabelfalse
+% \endtrivlist\@endpefalse % <<-- ajouté
+% \close@crossref}
+% \makeatother
+
+
+% November 2012
+% I don't want to have to type at this location (far from the top of the
+% file) explicitly the package version or version date, as it is
+% inconvenient to have to remember to do this when updating the package.
+% Also, I prefer not to add macros to the |.sty| file giving the package
+% date, name, or version. So I extracted this from the real macrocode
+% environment (leaving out the \init@crossref.)
+
+\makeatletter
+\begingroup
+\topsep\MacrocodeTopsep
+\trivlist\parskip\z@\item[]
+\macro@font
+\leftskip\@totalleftmargin \advance\leftskip\MacroIndent
+\rightskip\z@ \parindent\z@ \parfillskip\@flushglue
+\global\@newlistfalse \global\@minipagefalse
+\ifcodeline@index
+ \everypar{\global\advance\c@CodelineNo\@ne
+ \llap{\theCodelineNo\ \hskip\@totalleftmargin}}%
+\fi
+\string\NeedsTeXFormat\string{LaTeX2e\string}\par
+\string\ProvidesPackage\string{etoc\string}\par
+\noindent\space [\etocpkgdate\space\etocpkgversion\space\etocpkgdescription]\par
+\nointerlineskip
+\global\@inlabelfalse
+\endtrivlist
+\endgroup
+\makeatother
+
+% The catcode hackery next is to avoid to have <*package> to be listed
+% in the commented source code...
+% (c) 2012/11/19 jf burnol ;-)
+
+\MakePercentIgnore
+
+%
+% \catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11
+% \let</none>\relax
+% \def<*package>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12}
+%
+%</none>
+%<*package>
+% \begin{macrocode}
+\RequirePackage{multicol}
+\DeclareOption*{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}}
+\ProcessOptions\relax
+% \end{macrocode}
+% |1.08| suppresses |\ifEtoc@part| and defines |\ifEtoc@skipprefix|. It
+% also defines |\etocglobaldefs|, |\etoclocaldefs| and |\Etoc@global|.
+% \begin{macrocode}
+\newtoks\Etoc@toctoks
+\def\Etoc@par{\par}
+\def\etocinline{\def\Etoc@par{}}
+\let\etocnopar\etocinline
+\def\etocdisplay{\def\Etoc@par{\par}}% 1.07m 2015/01/23
+% \end{macrocode}
+% |\etocglobaldefs| should be used only for special things such as TOC as a
+% table; it should be put in a group to limit its scope. If used in the
+% preamble, it must come \emph{after} |tableof| if the latter is loaded too.
+% \begin{macrocode}
+\let\Etoc@global\@empty % 1.08 2015/03/10
+\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global}
+\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty}
+\newif\ifEtoc@jj % book
+\newif\ifEtoc@j % part
+\newif\ifEtoc@ % chapter
+\newif\ifEtoc@i % section
+\newif\ifEtoc@ii % subsection
+\newif\ifEtoc@iii % subsubsection
+\newif\ifEtoc@iv % paragraph
+\newif\ifEtoc@v % subparagraph
+\newif\ifEtoc@number
+\newif\ifEtoc@hyperref
+\newif\ifEtoc@parskip % 1.07d
+\newif\ifEtoc@tocwithid
+\newif\ifEtoc@standard
+\newif\ifEtoc@skipprefix % 1.08
+\newif\ifEtoc@isfirst % 1.08
+\newif\ifEtoc@localtoc
+\newif\ifEtoc@skipthisone
+\newif\ifEtoc@stoptoc
+\newif\ifEtoc@notactive
+\newif\ifEtoc@mustclosegroup
+\newif\ifEtoc@emptytoc % 1.08e
+\newif\ifEtoc@checksemptiness % 1.08e. Default is 'no checks'.
+\def\etocchecksemptiness {\Etoc@checksemptinesstrue }
+\def\etocdoesnotcheckemptiness {\Etoc@checksemptinessfalse }% 1.08i
+\newif\ifEtoc@notocifnotoc % 1.08e
+\def\etocnotocifnotoc {\Etoc@checksemptinesstrue\Etoc@notocifnotoctrue }
+\def\etoc@{\etoc@}
+\newif\ifEtoc@bracedname % 1.08p
+% \end{macrocode}
+% |1.07g| uses a second counter; this could be avoided, but ok, let's not be
+% that strict.
+% \begin{macrocode}
+\newcounter{etoc@tocid}
+\newcounter{etoc@tocdepth}% 1.07g
+% \end{macrocode}
+% |2015/03/08| Why do I use |jj| in the flags and |minustwo| here? and
+% is there an entity full of forgiveness out there to save my soul even
+% if taking into consideration my use of single and doubled |@|'s ?
+% Although I desperately need to waste time I miraculously decided not
+% to change everything today and thus the somewhat dispendious set-up
+% below is maintained.
+% \begin{macrocode}
+\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}}
+\def\Etoc@@minustwo@@{-\tw@}
+\let\Etoc@@minusone@@\m@ne
+\let\Etoc@@zero@@ \z@
+\let\Etoc@@one@@ \@ne
+\let\Etoc@@two@@ \tw@
+\let\Etoc@@three@@ \thr@@
+\chardef\Etoc@@four@@ 4
+\chardef\Etoc@@five@@ 5
+\chardef\Etoc@@six@@ 6
+\def\Etoc@@minustwo@{minustwo}
+\def\Etoc@@minusone@{minusone}
+\def\Etoc@@zero@ {zero}
+\def\Etoc@@one@ {one}
+\def\Etoc@@two@ {two}
+\def\Etoc@@three@ {three}
+\def\Etoc@@four@ {four}
+\def\Etoc@@five@ {five}
+% \end{macrocode}
+% |1.07g|.
+% \begin{macrocode}
+\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@}
+\expandafter\let\csname Etoc@-2@@\endcsname \Etoc@@minustwo@@
+\expandafter\let\csname Etoc@-1@@\endcsname \Etoc@@minusone@@
+\expandafter\let\csname Etoc@0@@\endcsname \Etoc@@zero@@
+\expandafter\let\csname Etoc@1@@\endcsname \Etoc@@one@@
+\expandafter\let\csname Etoc@2@@\endcsname \Etoc@@two@@
+\expandafter\let\csname Etoc@3@@\endcsname \Etoc@@three@@
+\expandafter\let\csname Etoc@4@@\endcsname \Etoc@@four@@
+\expandafter\let\csname Etoc@5@@\endcsname \Etoc@@five@@
+\expandafter\let\csname Etoc@6@@\endcsname \Etoc@@six@@
+\let\Etoc@all@@ \Etoc@@five@@
+\let\Etoc@none@@ \Etoc@minf
+% \end{macrocode}
+% Versions earlier than |1.08| did |\Etoc@newlevel| in a quite
+% embarrassing way with an |\edef|.
+%
+% |1.08f|'s \csa{etocsetlevel} avoids multiple insertions of the same level
+% in the \csa{Etoc@levellist} list.
+%
+% |1.08k| modified \csa{Etoc@newlevel}: formerly a token |\l@#1| was stored in
+% place of braced name |{#1}|. This changed is to facilitate creation of the
+% |\etocsavedsectiontocline| etc... macros later on, at each TOC. But the
+% stored |#1| is not expanded immediately, although it is in other parts of
+% \csa{etocsetlevel}, which may cause timing problems if |#1| is a macro.
+% \begin{macrocode}
+\let\Etoc@levellist\@empty
+\def\Etoc@newlevel #1{\expandafter\def\expandafter\Etoc@levellist\expandafter
+ {\Etoc@levellist\Etoc@levellist@elt{#1}}}
+\def\etocsetlevel#1#2{%
+ \@ifundefined{Etoc@#1@@}{\Etoc@newlevel{#1}}{}%
+ \ifcase#2\relax
+ \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@zero@@
+ \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@zero@
+ \or
+ \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@one@@
+ \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@one@
+ \or
+ \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@two@@
+ \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@two@
+ \or
+ \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@three@@
+ \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@three@
+ \or
+ \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@four@@
+ \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@four@
+ \or
+ \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@five@@
+ \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@five@
+ \or
+ \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@six@@
+ \else
+ \ifnum#2=\m@ne
+ \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minusone@@
+ \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minusone@
+ \else
+ \ifnum#2=-\tw@
+ \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minustwo@@
+ \expandafter\let \csname Etoc@#1@\endcsname\Etoc@@minustwo@
+ \else
+ \PackageWarning{etoc}
+ {unexpected value `#2' in \string\etocsetlevel.^^J%
+ Should be -2,-1, 0, 1, 2, 3, 4, 5, or 6. Set to 6 (=ignored)}%
+ \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@@six@@
+ \fi
+ \fi
+ \fi
+}
+\etocsetlevel{book}{-2}
+\etocsetlevel{part}{-1}
+\etocsetlevel{chapter}{0}
+\etocsetlevel{section}{1}
+\etocsetlevel{subsection}{2}
+\etocsetlevel{subsubsection}{3}
+\etocsetlevel{paragraph}{4}
+\etocsetlevel{subparagraph}{5}
+% \end{macrocode}
+% The first two parameters of |\Etoc@et@hop| are exchanged in |1.08|
+% compared to earlier versions; this is in relation to changes done in
+% |\Etoc@etoccontentsline|.
+%
+% |1.08i| as a |fourorthree| rather than as formerly a |sixorfive|.
+% \begin{macrocode}
+\AtBeginDocument{%
+\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}%
+\@ifpackageloaded{hyperref}{\Etoc@hyperreftrue
+ \def\Etoc@et@hop#1#2#3#4#5{#2{#3}{#4}{#5}#1}%
+ \long\def\Etoc@gobblefourorthree#1#2#3#4{}}
+ {\def\Etoc@et@hop#1#2#3#4{#2{#3}{#4}#1}%
+ \long\def\Etoc@gobblefourorthree#1#2#3{}}%
+}
+% \end{macrocode}
+% |2015/03/08| One has to be careful about the |Etoc@end@<level>| user
+% defined macros which may close groups. This has always been the reason
+% for the |\global|'s here and elsewhere.
+%
+% |1.08| uses |\Etoc@level| rather than a |#1| which used to be anyhow always
+% the |\Etoc@tmp|. Now |\Etoc@level| is what was called formerly |\Etoc@tmp|
+% in |\Etoc@etoccontentsline|.
+%
+% Attention that |\Etoc@setflags| must not modify |\Etoc@next|!
+% \begin{macrocode}
+\def\Etoc@setflags {%
+ \ifcase \Etoc@level
+ \global\Etoc@vfalse
+ \global\Etoc@ivfalse
+ \global\Etoc@iiifalse
+ \global\Etoc@iifalse
+ \global\Etoc@ifalse
+ \global\Etoc@true
+ \or
+ \global\Etoc@vfalse
+ \global\Etoc@ivfalse
+ \global\Etoc@iiifalse
+ \global\Etoc@iifalse
+ \global\Etoc@itrue
+ \or
+ \global\Etoc@vfalse
+ \global\Etoc@ivfalse
+ \global\Etoc@iiifalse
+ \global\Etoc@iitrue
+ \or
+ \global\Etoc@vfalse
+ \global\Etoc@ivfalse
+ \global\Etoc@iiitrue
+ \or
+ \global\Etoc@vfalse
+ \global\Etoc@ivtrue
+ \or
+ \global\Etoc@vtrue
+ \else
+ \global\Etoc@vfalse
+ \global\Etoc@ivfalse
+ \global\Etoc@iiifalse
+ \global\Etoc@iifalse
+ \global\Etoc@ifalse
+ \global\Etoc@false
+ \ifnum\Etoc@level=\m@ne
+ \global\Etoc@jtrue
+ \else
+ \global\Etoc@jfalse
+ \global\Etoc@jjtrue
+ \fi
+ \fi
+}
+% \end{macrocode}
+% |1.08| This was originally in |\Etoc@etoccontentsline|, intermixed
+% with the definitions of |\Etoc@contents| and |\Etoc@prefix|. Separated
+% here for clarity of code. One has to be careful that this may close
+% groups. The conditionals are all global. The |\Etoc@level| has been
+% |\global\let| to a |\chardef| variable. The final |\else| of the
+% |\ifcase| assumes none of the |\Etoc@end@..| routines modify it,
+% naturally.
+% \begin{macrocode}
+\def\Etoc@doends {%
+ \ifcase \Etoc@level
+ \ifEtoc@v \Etoc@end@five \fi
+ \ifEtoc@iv \Etoc@end@four \fi
+ \ifEtoc@iii\Etoc@end@three\fi
+ \ifEtoc@ii \Etoc@end@two \fi
+ \ifEtoc@i \Etoc@end@one \fi
+ \or
+ \ifEtoc@v \Etoc@end@five \fi
+ \ifEtoc@iv \Etoc@end@four \fi
+ \ifEtoc@iii\Etoc@end@three\fi
+ \ifEtoc@ii \Etoc@end@two \fi
+ \or
+ \ifEtoc@v \Etoc@end@five \fi
+ \ifEtoc@iv \Etoc@end@four \fi
+ \ifEtoc@iii\Etoc@end@three\fi
+ \or
+ \ifEtoc@v \Etoc@end@five \fi
+ \ifEtoc@iv \Etoc@end@four \fi
+ \or
+ \ifEtoc@v \Etoc@end@five \fi
+ \or
+ \else
+ \ifEtoc@v \Etoc@end@five \fi
+ \ifEtoc@iv \Etoc@end@four \fi
+ \ifEtoc@iii\Etoc@end@three\fi
+ \ifEtoc@ii \Etoc@end@two \fi
+ \ifEtoc@i \Etoc@end@one \fi
+ \ifEtoc@ \Etoc@end@zero \fi
+ \ifnum \Etoc@level =-\tw@
+ \ifEtoc@j \Etoc@end@minusone\fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% |1.08| the |\Etoc@next| will (possibly) execute the |begin| code,
+% \emph{before} |\Etoc@contents| and |\Etoc@prefix| get defined,
+% contrarily to what I did in earlier versions. I still reset the flags
+% before execution of the |begin| codes (although the flags are not
+% supposed to be used therein anyhow).
+%
+% Also the \meta{begin} code does |\Etoc@isfirsttrue|.
+%
+% |1.08k| This was originally in |\Etoc@etoccontentsline|. Extracted for
+% re-use by |\etocsetlocaltop.toc|. Calls |\Etoc@setflags| which must not
+% modify |\Etoc@next|.
+% \begin{macrocode}
+\def\Etoc@dobegins{%
+ \let\Etoc@next\@empty
+ \Etoc@global\Etoc@isfirstfalse
+% \end{macrocode}
+% |2015/03/08| If my naming scheme had not been so baroque, I could easily do
+% things in a more concise way here...
+% \begin{macrocode}
+ \ifcase\Etoc@level
+ \ifEtoc@
+ \else
+ \def\Etoc@next{\Etoc@begin@zero}%
+ \fi
+ \or
+ \ifEtoc@i
+ \else
+ \def\Etoc@next{\Etoc@begin@one}%
+ \fi
+ \or
+ \ifEtoc@ii
+ \else
+ \def\Etoc@next{\Etoc@begin@two}%
+ \fi
+ \or
+ \ifEtoc@iii
+ \else
+ \def\Etoc@next{\Etoc@begin@three}%
+ \fi
+ \or
+ \ifEtoc@iv
+ \else
+ \def\Etoc@next{\Etoc@begin@four}%
+ \fi
+ \or
+ \ifEtoc@v
+ \else
+ \def\Etoc@next{\Etoc@begin@five}%
+ \fi
+ \else
+ \ifnum\Etoc@level=\m@ne
+ \ifEtoc@j
+ \else
+ \def\Etoc@next{\Etoc@begin@minusone}%
+ \fi
+ \else
+ \ifEtoc@jj
+ \else
+ \def\Etoc@next{\Etoc@begin@minustwo}%
+ \fi
+ \fi
+ \fi
+ \Etoc@setflags
+ \Etoc@next
+}
+% \end{macrocode}
+% Heart of \etoc hack into execution of |.toc| file. The |.toc|
+% file must contain (at least indirectly via expansion)
+% |\contentsline {<unit>}...| instructions, with
+% the standard meaning of executing |\l@unit| (the hyperref
+% modifications are taken into account). It is the various |\l@unit|'s
+% which are (locally) |\let| to |\Etoc@lxyz| and it is |\Etoc@lxyz|
+% which does the parsing of the arguments in order to extract name,
+% number and page number. Once they are obtained, via the execution of
+% this indirectly hacked |\contentsline|, the code executes the
+% |\Etoc@prefix| and |\Etoc@contents| corresponding to that unit level,
+% according to the user |\etocsetstyle| declarations. Before that the
+% begin part is executed when \etoc first encounters that level
+% coming from a higher one and the end part will be executed when
+% hitting a more important level.
+%
+% |\etocskipfirstprefix| was already part of the very first release of
+% \etoc. Up to |1.07n| it was just an elegant |\@thirdofthree| possibly
+% executed just before a |\@firstoftwo{\Etoc@swa{#1}}{\Etoc@swb{#1}}|
+% line. But this made it impossible for me to execute things after the
+% |begin| parts.
+%
+% Executing stuff before |begin| is now a potential problem because the user
+% can close some group in the |begin| code (this was in fact impossible in
+% versions |<1.08| because this would have erased the definitions of
+% |\Etoc@contents| and |\Etoc@prefix|). Thus I am not so free now to define
+% things before execution of begin, if I allow people to close a group
+% therein, except if I make them global.
+%
+% The mechanism of |\etocskipfirstprefix| made it impossible to add
+% anything at the end of the |begin| codes. Thus I changed it in |1.08|
+% to simply work with a (global) boolean flag. This gives user the
+% freedom to use |\etocskipfirstprefix| anywhere in the |begin| code and
+% it made room for a delimited macro I called |\etoconlyonfirst|. But
+% then I dropped it in favor of definition of the |\etociffirst|
+% conditional.
+%
+% Macros |\Etoc@swa| and |\Etoc@swb| which did the |\Etoc@et@hop| thing have
+% been suppressed, their effect is incorporated to the end of
+% |\Etoc@etoccontentsline|.
+% \begin{macrocode}
+\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue }
+% \end{macrocode}
+% |2015/03/08| let's record that |\Etoc@level| used to be called
+% |\Etoc@tmp| in versions earlier than |1.08| (and |\Etoc@tmp| is used
+% in the completely different ulterior |\Etoc@lxyz| context). The code
+% sets it for example to be |\Etoc@section@@| which has been let by
+% |\etocsetlevel| to |\@ne|, thus is always self-terminating in
+% |\ifnum..\fi| contexts.
+%
+% |1.08i-2016/09/29| makes some changes in the organization of the
+% conditionals. It could happen in certain special circumstances (created by
+% that part in |\Etoc@localtableofcontents| which is executed after the test
+% of emptiness) that |\Etoc@localtop| was still undefined. Earlier version of
+% the code was a bit lazy and did not avoid some unneeded |\ifnum| with
+% |\Etoc@localtop| in context where the flag |\ifEtoc@stoptoc| was |\iftrue|;
+% this was not an issue when code was first written, |\Etoc@localtop| was
+% always initialized back then. But the code in |\Etoc@localtableofcontents|
+% handling local TOCs with unrecognized ids would call execution of the |.toc|
+% file under some special context with flag |\ifEtoc@stoptoc| artificially set
+% to true. If |\Etoc@localtop| had not been initialized an undefined control
+% sequence error would occur. Furthermore as |\ifEtoc@notactive| was also set
+% to true, the case of no error leads then to unneededly expand |\Etoc@setflags|
+% code slowing down compilation.
+%
+% Also |1.08i| splits the macro into two, with accompanying slight
+% refactoring. I had such problems with the behaviour of TeX booleans in
+% 2011/12 that I got excessively cautious then, and was using an |\Etoc@next|
+% for the |\Etoc@setflags| rather than leaving it like here deep inside
+% conditional branches.
+%
+% Attention! |1.09|'s \cs{etoclocaltop} is the former \cs{Etoc@localtop}
+% \emph{minus one}. Hence some slight change in conditional here.
+% \begin{macrocode}
+\def\Etoc@etoccontentsline #1{%
+ \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname
+ \Etoc@skipthisonefalse
+ \ifnum\Etoc@level=\Etoc@@six@@
+ \Etoc@skipthisonetrue
+ \else
+ \ifEtoc@localtoc
+ \ifEtoc@stoptoc
+ \Etoc@skipthisonetrue
+ \else
+ \ifEtoc@notactive\Etoc@setflags
+ \Etoc@skipthisonetrue
+ \else
+ \unless\ifnum\Etoc@level>\etoclocaltop
+ \Etoc@skipthisonetrue
+ \global\Etoc@stoptoctrue
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \let\Etoc@next\Etoc@gobblefourorthree
+ \ifEtoc@skipthisone
+ \else
+ \unless\ifnum\c@tocdepth<\Etoc@level
+ \ifEtoc@standard
+ \let\Etoc@next\Etoc@savedcontentsline
+ \else
+ \let\Etoc@next\Etoc@etoccontentsline@
+ \fi
+ \fi
+ \fi
+ \Etoc@next{#1}%
+}
+% \end{macrocode}
+% |1.08| New way to handle the compatibility mode. One has to worry
+% only for the local tables of contents (in inactive state, which still
+% must be parsed for global level flags) but in this case
+% |\Etoc@setflags| was done above already. Earlier method proceeded with
+% dummy empty line styles.
+%
+% |2015/03/08| Ever since the first release of \etoc, the code has
+% to be careful that the |\Etoc@end@<level>| user defined macros may
+% close groups. This is the reason why some assignments have to be done
+% globally. The |\let\Etoc@next\Etoc@gobblesixorfive| above could be
+% local, because it is used only in case the stuff below is skipped,
+% inclusive of |\Etoc@doends| which may close groups. (code has changed since,
+% slightly).
+%
+% |1.08| extracts to a separate macro |\Etoc@doends|. Earlier code
+% did |\global\let\Etoc@next\relax| but we can now give a default |\relax|
+% value to |\Etoc@next| with no need of a |\global| prefix.
+%
+% |1.08k| extracts |\Etoc@dobegins|.
+% \begin{macrocode}
+\def\Etoc@etoccontentsline@ #1{%
+ \Etoc@doends % separated since 1.08
+ \Etoc@dobegins % separated since 1.08k. Does \Etoc@setflags.
+% \end{macrocode}
+% |1.08|:
+% \begin{enumerate}
+% \item separates the definition of |\Etoc@prefix| and
+% |\Etoc@contents| from the execution of the |end| parts. And it does
+% the definition with some |\csname|'s.
+%
+% \item implements |\etocskipfirstprefix| with a boolean, this is less slick
+% but more flexible than the earlier method.
+%
+% \item defines the |\etociffirst| conditional.
+%
+% \item has |\Etoc@level| rather than |\Etoc@tmp| and thus we can dispense
+% with the |\ifEtoc@part| switch as we will be able to test the equality
+% |\Etoc@level=-1| inside of |\Etoc@lxyz|.
+%
+% \item adds the |\Etoc@global| prefix.
+% \end{enumerate}
+% |1.08i| uses an |\edef| rather than |\def| with a chain of |\expandafter|.
+% \begin{macrocode}
+ \Etoc@global\edef\Etoc@prefix {\expandafter\noexpand
+ \csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname }%
+ \Etoc@global\edef\Etoc@contents{\expandafter\noexpand
+ \csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname }%
+ \ifEtoc@skipprefix \Etoc@global\let\Etoc@prefix\@empty\fi
+ \global\Etoc@skipprefixfalse
+% \end{macrocode}
+% |1.08| modifies the ending to not use the |\Etoc@swa| and |\Etoc@swb|
+% things. With this version, the |\Etoc@next| here is only to gobble
+% everything if it has to (or gobble only the \etoc things, when in
+% compatibility mode).
+%
+% For the record we don't do |\csname l@#1\endcsname| mainly because
+% hyperref patches |\contentsline|.
+%
+% The location where |\Etoc@savedcontentsline| is |\let| to
+% |\contentsline| has been moved with release |1.08| to before the
+% title as set by |\etocsettoctyle|, thus it is now possible to open a
+% tabular in this part. And with the |\Etoc@global| prefix the user may
+% opt for global definitions of |\etocname| and the like, thus use
+% freely |&| and other group closing things. Also, some care has been
+% put into doing only expandable things after expansion of the
+% \meta{prefix} and \meta{contents} parts of a sectioning unit style.
+% \begin{macrocode}
+ \Etoc@et@hop{\Etoc@prefix\Etoc@contents}{\Etoc@savedcontentsline{#1}}%
+}
+% \end{macrocode}
+% START OF MAINLY OBSOLETE COMMENTS
+%
+% |2013/03/07|: up to |1.06| \etoc defined only \csa{etocname}, \csa{etocnumber} and
+% \csa{etocpage}. The |hyperref| added data is recycled in the simplest
+% manner, prefixing it with \csa{leavevmode}. The included
+% \csa{Hy@tocdestname} is (was, see below |1.07f| and |1.08a|) left
+% unexpanded. We have to spend some time with delimited macros to dis-entangle
+% the |.toc| data, and reconstruct the possible |hyperref| data. If the page
+% number is not hyperlinked, \csa{etocpage} does \emph{not} add the link found
+% possibly in the name.
+%
+% |1.07| adds \csa{etocthename}, \csa{etocthenumber}, \csa{etocthepage} which
+% are left fragile and do not have the links data, and
+% \csa{etoclink}\marg{linkname} which is robust and reconstructs an
+% arbitrarily named link.
+%
+% A need (for things like building up a token list to be used in a
+% |tikzpicture|) arose later to have some form of the link which could be
+% saved by a simple command like one can do
+% |\global\let\lastname\etocthename|, and avoid having to manipulate
+% \csa{Hy@tocdestname}. So |1.07f| adds \csa{etocthelinkedname},
+% \csa{etocthelinkednumber}, \csa{etocthelinkedpage}, \csa{etocthelink}: they
+% use \csa{hyperlink} with an expanded \csa{Hy@tocdestname}.
+%
+% |1.07f| also adds \csa{leavevmode} to \csa{etoclink} which
+% should have been done earlier, as it was included in \csa{etocname} etc...
+% attention, \csa{@namedef}|{A}{B}| and not \csa{@namedef}|{A} {B}| !!
+% on the other hand this gives a simple way to insert a space as the first
+% token in the paramaters. For \csa{Etoc@again} (which appears later in the
+% code), a \csa{@firstofone} construct is however the simplest of all.
+%
+% END OF MAINLY OBSOLETE COMMENTS
+%
+% |1.08| adds |\Etoc@global| prefix (|2015/03/09|).
+%
+% |1.08a| drops the original constructions of |\etocname| etc... The obvious
+% decision to convert \csa{etocname}, etc ... to be the robust versions of
+% \csa{etocthelinkedname}, etc ... was delayed two years
+% (from |1.07f 2013/03/07| to |1.08a 2015/03/13|) for sentimental reason. But
+% the original
+% versions contained the hyperref destination only in unexpanded form, this
+% forced to use \csa{etocthelinkedname}, etc... in cases when the thing had to
+% be stored for delayed use. Now the user can do this directly with
+% \csa{etocname}, \csa{etocnumber}, \csa{etocpage} (taking into account though
+% that these are robust macros, thus perhaps using something like |\LetLtxMacro|.)
+%
+% |1.08j| turns |\etoclink| into the robust version of |\etocthelink|. Indeed
+% so far only \csa{etocthelink} contained |\Hy@tocdestname| expanded. But
+% \csa{etoclink} did not, and thus it could not be used after a group was
+% closed for example by a |&| from the sectioning style, even if having used
+% |\etocglobaldefs|.
+%
+% |1.08n| adds |\futurelet|-based methods to avoid unbracing things.
+%
+% |1.08p| uses |\Etoc@@getnb| (and |\Etoc@@getit|) to intercept cases
+% when |\numberline| is hidden behind braces
+% (\url{https://github.com/ho-tex/hyperref/issues/65}).
+% \begin{macrocode}
+\def\Etoc@lxyz #1#2{%
+ \Etoc@global\let\etocthelink\@firstofone % fall-back, was let \@empty up to 1.08i (inc.)
+ \Etoc@global\def\etocthename {#1}% (if linked, will be removed later)
+ \Etoc@global\def\etocthelinkedname {#1}% (probably redefined later)
+ \futurelet\Etoc@getthepage@token
+ \Etoc@getthepage #2\etoc@ % defines \etocthelinkedpage
+ \futurelet\Etoc@getnb@token
+ \Etoc@@getnb #1\relax\relax\etoc@ % sets number, name, and \etocthelink
+ \ifEtoc@number
+ \else
+ \ifnum\Etoc@level=\m@ne
+ \futurelet\Etoc@getit@token
+ \Etoc@@getit #1\hspace\relax\etoc@ % additional job for parts
+ \fi
+ \fi
+ \Etoc@global\expandafter\let\csname etoclink \endcsname\etocthelink
+ \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname
+ \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber
+ \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage
+ }
+% \end{macrocode}
+% |1.08| adds the |\Etoc@global|'s.
+%
+% |1.08j| fixes an old |\ifx #1\hyperlink@start| bug.
+%
+% Potential (but rather exotic) brace removal problems wiped away at |1.08n|.
+% \begin{macrocode}
+\def\Etoc@getthepage {%
+ \if1\ifEtoc@hyperref
+ \ifx\hyper@linkstart\Etoc@getthepage@token1\else0\fi
+ \else0\fi
+ \expandafter\Etoc@getthepage@hyp
+ \else
+ \expandafter\Etoc@getthepage@nohyp
+ \fi
+}
+\def\Etoc@getthepage@nohyp #1\etoc@ {%
+ \Etoc@global\def\etocthepage {#1}%
+ \Etoc@global\def\etocthelinkedpage {#1}%
+}
+% \end{macrocode}
+% |1.07k| corrects a bug here with an extra space before |##1| in
+% |\@namedef{etoclink } ##1|. In 99.99\% of use cases however, the
+% macro gets redefined at a later stage, thus the bug did not show.
+%
+% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. Thus, the user has
+% the (not so recommended) possibility to use |\toks@| in the styles, even to
+% store information whose scope extends beyond the execution of each
+% |\contentsline|.
+%
+% |1.08| adds the |\Etoc@global|'s.
+%
+% |1.08j| does not define \csa{etoclink<space>} anymore, only \csa{etocthelink}
+% which contains the |\Hy@tocdestname| already expanded.
+% \begin{macrocode}
+\def\Etoc@getthepage@hyp #1#2#3#4#5\etoc@ {%
+ \Etoc@global\def\etocthepage {#4}%
+ \edef\Etoc@tmp {{#3}}%
+ \Etoc@global\expandafter\def\expandafter\etocthelinkedpage\expandafter
+ {\expandafter\hyperlink \Etoc@tmp{#4}}%
+ \Etoc@global\edef\etocthelink##1{\noexpand\hyperlink\Etoc@tmp{##1}}%
+}
+% \end{macrocode}
+% |1.08j| fixes an old buggy |\ifx #1\hyper@linkstart|. This could show if
+% hyperref was present with |linktoc=page| option for example, because in that
+% case |#1| could be some tokens within braces. As this is rare case though,
+% no bug was reported.
+%
+% Anyway I refactored the whole thing at |1.08n|.
+%
+% |1.08p| adds workaround for an extra brace pair inserted by hyperref
+% in case of |linktoc=page| option
+% \centeredline{\url{https://github.com/ho-tex/hyperref/issues/65}}
+% \begin{macrocode}
+\def\Etoc@@getnb {%
+ \Etoc@bracednamefalse
+ \ifx\Etoc@getnb@token\bgroup
+ \expandafter\Etoc@getnb@checkifbraced
+ \else
+ \expandafter\Etoc@getnb
+ \fi
+}
+\def\Etoc@tworelax{\relax\relax}
+\def\Etoc@getnb@checkifbraced #1#2\etoc@ {%
+ \def\Etoc@tmp{#2}%
+ \ifx\Etoc@tmp\Etoc@tworelax
+ \expandafter\expandafter\expandafter\Etoc@getnb@nameisbraced
+ \expandafter\@firstofone
+ \else
+ \expandafter\Etoc@getnb
+ \fi {#1}#2\etoc@
+}
+\def\Etoc@getnb@nameisbraced {%
+ \Etoc@bracednametrue
+ \futurelet\Etoc@getnb@token\Etoc@getnb
+}
+\def\Etoc@getnb {%
+ \ifx\Etoc@getnb@token\bgroup
+ \expandafter\Etoc@getnb@nohyp@nonbr
+ \else
+ \if1\ifEtoc@hyperref
+ \ifx\hyper@linkstart\Etoc@getnb@token1\else0\fi
+ \else0\fi
+ \expandafter\expandafter\expandafter\Etoc@getnb@hyp
+ \else
+ \expandafter\expandafter\expandafter\Etoc@getnb@nohyp
+ \fi
+ \fi
+}
+% \end{macrocode}
+% |1.08| adds the |\Etoc@global|'s.
+%
+% |1.08j| corrects an old |\ifx#1\numberline| into |\ifx\numberline#1|.
+%
+% |1.08k| uses a delimited macro to identify \csa{numberline},
+% \csa{chapternumberline} etc... in one go, avoiding
+% the |\let\chapternumberline\numberline| etc... which were done formerly
+% in \csa{Etoc@tableofcontents}. Currently \etoc does not yet use \eTeX.
+%
+% |1.08m| fixes incompatibility of |1.08k|'s delimited macro method with KOMA's
+% \csa{nonumberline}.
+%
+% Both |1.08k| and
+% |1.08m| actually would have needed some |\detokenize| for complete safety
+% and so far \etoc does not use e-\TeX. So here at |1.08n| I refactored the
+% whole thing. And I added a |\futurelet|-based brace detection in
+% |\Etoc@getnb| so here |#1| is guaranteed not braced now.
+%
+% |1.08n| tries to handle reasonably the |\nonumberline| of KOMA-script.
+% If it expands to |\numberline{}|, \etoc will thus consider the line
+% numbered with an empty number.
+% \begin{macrocode}
+\def\Etoc@getnb@nohyp #1{%
+ \in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}%
+ \ifin@
+ \let\Etoc@next\Etoc@getnb@nohyp@nmbrd
+ \else
+ \let\Etoc@next\Etoc@getnb@nohyp@nonbr
+ \in@{#1}{\nonumberline}%
+ \ifin@
+ \ifx\nonumberline\empty\else\let\Etoc@next\Etoc@getnb@nohyp@nmbrd\fi
+ \expandafter\expandafter\expandafter\expandafter
+ \fi
+ \fi
+ \Etoc@next #1%
+}
+\def\Etoc@getnb@nohyp@nmbrd #1#2#3\relax\relax\etoc@ {%
+ \Etoc@global\Etoc@numbertrue
+ \Etoc@global\def\etocthenumber {#2}%
+ \Etoc@global\def\etocthelinkednumber {#2}%
+ \ifEtoc@bracedname
+ \Etoc@global\def\etocthename {{#3}}%
+ \Etoc@global\def\etocthelinkedname {{#3}}%
+ \else
+ \Etoc@global\def\etocthename {#3}%
+ \Etoc@global\def\etocthelinkedname {#3}%
+ \fi
+}
+\def\Etoc@getnb@nohyp@nonbr #1\etoc@ {%
+ % \etocthename and \etocthelinkedname already defined in \Etoc@lxyz
+ \Etoc@global\Etoc@numberfalse
+ \Etoc@global\let\etocthenumber \@empty
+ \Etoc@global\let\etocthelinkednumber \@empty
+}
+% \end{macrocode}
+% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds
+% the |\Etoc@global|'s.
+%
+% |1.08j| corrects the old |\ifx#1\numberline| into |\ifx\numberline#1|.
+%
+% |1.08k| uses a delimited macro to identify \csa{numberline},
+% \csa{chapternumberline} etc... in one go.
+%
+% But anyway this was completely refactored at |1.08n|. Unfortunately
+% bad macro naming scheme caused a typo in a macro name, and it was
+% left undefined.
+% Fixed at |1.08o|.
+%
+% At |1.08p| which fixed an hyperref problem in case of |linktoc=page|
+% we are lazy because the problem with extra braces should not happen
+% in this branch (hyperref does not brace the hyperlink). So we ignore
+% the |\ifEtoc@bracedname| setting.
+% \begin{macrocode}
+\def\Etoc@getnb@hyp #1#2#3#4#5#6\etoc@ {%
+ \edef\Etoc@tmp {{#3}}%
+ \Etoc@global\edef\etocthelink ##1{\noexpand\hyperlink {#3}{##1}}%
+ \Etoc@global\def\etocthename {#4}% temporary definition
+ \Etoc@global\expandafter\def\expandafter\etocthelinkedname
+ \expandafter {\expandafter\hyperlink \Etoc@tmp{#4}}%
+ \futurelet\Etoc@hyp@getnb@token\Etoc@getnb@hyp@a #4\relax\relax\etoc@
+}
+\def\Etoc@getnb@hyp@a {%
+ \ifx\Etoc@hyp@getnb@token\bgroup
+ \expandafter\Etoc@getnb@hyp@nonbr
+ \else
+ \expandafter\Etoc@getnb@hyp@b
+ \fi
+}
+\def\Etoc@getnb@hyp@b #1{%
+ \in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}%
+ \ifin@
+ \let\Etoc@next\Etoc@getnb@hyp@nmbrd
+ \else
+ \let\Etoc@next\Etoc@getnb@hyp@nonbr
+ \in@{#1}{\nonumberline}%
+ \ifin@
+ \ifx\nonumberline\empty\else\let\Etoc@next\Etoc@getnb@hyp@nmbrd\fi
+ \expandafter\expandafter\expandafter\expandafter
+ \fi
+ \fi
+ \Etoc@next #1%
+}
+\def\Etoc@getnb@hyp@nmbrd #1#2#3\relax\relax\etoc@ {%
+ \Etoc@global\Etoc@numbertrue
+ \Etoc@global\def\etocthenumber {#2}%
+ \Etoc@global\expandafter\def\expandafter\etocthelinkednumber
+ \expandafter{\expandafter\hyperlink \Etoc@tmp{#2}}%
+ \Etoc@global\def\etocthename {#3}%
+ \Etoc@global\expandafter\def\expandafter\etocthelinkedname
+ \expandafter{\expandafter\hyperlink \Etoc@tmp{#3}}%
+}
+\let\Etoc@getnb@hyp@nonbr\Etoc@getnb@nohyp@nonbr
+% \end{macrocode}
+% |1.08| adds the |\Etoc@global|'s.
+%
+% |1.08n| refactors this but it is still not extremely robust.
+%
+% |1.08p| completes the fix of |linktoc=page| problematic hyperref. If
+% the name was found to be braced, keep the brace pair on extracted
+% name. But not for extracted number... don't ask why, I did not want
+% spending ages on working around hyperref's bug.
+% \begin{macrocode}
+\def\Etoc@@getit{%
+ \ifEtoc@bracedname
+ \expandafter\expandafter\expandafter\Etoc@getit@nameisbraced
+ \expandafter\@firstofone
+ \else
+ \expandafter\Etoc@getit
+ \fi
+}
+\def\Etoc@getit@nameisbraced {\futurelet\Etoc@getit@token\Etoc@getit }
+\def\Etoc@getit {%
+ \if1\ifEtoc@hyperref
+ \ifx\hyper@linkstart\Etoc@getit@token1\else0\fi
+ \else0\fi
+ \expandafter\Etoc@getit@hyp
+ \else
+ \expandafter\Etoc@getit@nohyp
+ \fi
+}
+\def\Etoc@getit@nohyp #1\hspace#2#3\etoc@ {%
+ \ifx\relax#2%
+ \else
+ \Etoc@global\def\etocthenumber {#1}%
+ \Etoc@global\def\etocthelinkednumber {#1}%
+ \Etoc@global\Etoc@numbertrue
+ \Etoc@getit@nohyp@getname #3\etoc@
+ \fi
+}
+\def\Etoc@getit@nohyp@getname #1\hspace\relax\etoc@ {%
+ \ifEtoc@bracedname
+ \Etoc@global\def\etocthename {{#1}}%
+ \Etoc@global\def\etocthelinkedname {{#1}}%
+ \else
+ \Etoc@global\def\etocthename {#1}%
+ \Etoc@global\def\etocthelinkedname {#1}%
+ \fi
+}
+% \end{macrocode}
+% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds
+% the |\Etoc@global|'s.
+%
+% |1.08j| adds \csa{etocthelink} definition here which was missing. This bug
+% showed in case hyperref was used with option |linktoc=page|, for |part|
+% styles: the |\etocthelink| would not create a link if used therein. But the
+% |linktoc=page| condition could easily however trigger the more serious
+% |\ifx| bug in |\Etoc@getnb| also fixed at |1.08j|, and this would have
+% overshadowed this one by a real compilation error rather than a missing link
+% in the procuced PDF.
+%
+% |1.08n| refactors the whole thing. |1.08o| chooses better names for
+% macros.
+%
+% For |1.08p| fix of hyperref's extra brace (see |\Etoc@@getnb|,
+% |\Etoc@@getit|), this branch should not suffer the issue, hence I
+% don't bother checking |\ifEtoc@bracedname| status.
+% \begin{macrocode}
+\def\Etoc@getit@hyp #1#2#3#4#5#6\etoc@ {%
+ \edef\Etoc@tmp {{#3}}%
+ \Etoc@global\edef\etocthelink ##1{\noexpand\hyperlink \Etoc@tmp{##1}}%
+ \Etoc@global\def\etocthename {#4}% temporary definition
+ \Etoc@global\expandafter\def\expandafter\etocthelinkedname
+ \expandafter{\expandafter\hyperlink \Etoc@tmp{#4}}%
+ \Etoc@getit@hyp@a #4\hspace\relax\etoc@
+}
+\def\Etoc@getit@hyp@a #1\hspace#2#3\etoc@ {%
+ \ifx\relax#2% not extremely safe
+ \else
+ \Etoc@global\Etoc@numbertrue
+ \Etoc@global\def\etocthenumber {#1}%
+ \Etoc@global\expandafter\def\expandafter\etocthelinkednumber
+ \expandafter{\expandafter\hyperlink \Etoc@tmp{#1}}%
+ \Etoc@getit@hyp@getname #3\etoc@
+ \fi
+}
+\def\Etoc@getit@hyp@getname #1\hspace\relax\etoc@ {%
+ \Etoc@global\def\etocthename {#1}%
+ \Etoc@global\expandafter\def\expandafter\etocthelinkedname
+ \expandafter{\expandafter\hyperlink \Etoc@tmp{#1}}%
+}%
+% \end{macrocode}
+% |1.08a| of |2015/03/12| does the long-postponed thing to let |\etocname|
+% etc.. be simply the robust variant of |\etocthelinkedname| etc...
+% \begin{macrocode}
+\let\etocthename \@empty
+\let\etocthenumber \@empty
+\let\etocthepage \@empty
+\let\etocthelinkedname \@empty
+\let\etocthelinkednumber \@empty
+\let\etocthelinkedpage \@empty
+\let\etocthelink \@firstofone % prior to 1.08j its was \let to \@empty
+\DeclareRobustCommand*{\etocname} {}
+\DeclareRobustCommand*{\etocnumber}{}
+\DeclareRobustCommand*{\etocpage} {}
+\DeclareRobustCommand*{\etoclink} {\@firstofone}
+\DeclareRobustCommand*{\etocifnumbered}
+ {\ifEtoc@number\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname
+% \end{macrocode}
+% |1.08| defines |\etociffirst|
+% \begin{macrocode}
+\DeclareRobustCommand*{\etociffirst}
+ {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname
+% \end{macrocode}
+% |1.07j| modifies |\Etoc@readtoc|.
+% \begin{macrocode}
+\def\Etoc@readtoc {%
+ \ifeof \Etoc@tf
+ \else
+ \read \Etoc@tf to \Etoc@buffer
+ \Etoc@toctoks=\expandafter\expandafter\expandafter
+ {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}%
+ \expandafter\Etoc@readtoc
+ \fi
+}
+% \end{macrocode}
+% |1.07m| moves the reading of the toc file At Begin Document. Needed for
+% Babel activated characters.
+% \begin{macrocode}
+\Etoc@toctoks {}% (superfluous, but for clarity)
+\AtBeginDocument{\IfFileExists{\jobname.toc}
+ {{\endlinechar=\m@ne
+ \makeatletter
+ \newread\Etoc@tf
+ \openin\Etoc@tf\@filef@und
+ \Etoc@readtoc
+ \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}%
+ \closein\Etoc@tf}}
+ {\typeout{No file \jobname.toc.}}}
+% \end{macrocode}
+% 1.07d: parskip and |\@nobreakfalse| stuff moved to |\Etoc@tableofcontents|
+% \begin{macrocode}
+\def\Etoc@openouttoc{%
+ \ifEtoc@hyperref
+ \ifx\hyper@last\@undefined
+ \IfFileExists{\jobname .toc}
+ {\Hy@WarningNoLine
+ {old toc file detected, not used; run LaTeX again (cheers from etoc)}%
+ \global\Etoc@toctoks={}%
+ }
+ {}%
+ \fi
+ \fi
+ \if@filesw
+ \newwrite \tf@toc
+ \immediate \openout \tf@toc \jobname .toc\relax
+ \fi
+ \global\let\Etoc@openouttoc\empty
+}
+% \end{macrocode}
+% |1.08| has a new way to handle |\Etoc@standardtrue|.
+%
+% Also the expansion of |\Etoc@levelist| is moved to inside
+% |\Etoc@tableofcontents| as set-up by |\etocsettocstyle|. This opens up
+% the possibility for the user to open a group in the title (for example
+% start a tabular) which would be closed (by the first |&|) sometime
+% later. In combination with |\etocglobaldefs| it will be now much
+% easier to typeset TOC as tables with \etoc!
+% \begin{macrocode}
+\def\Etoc@toctoc{%
+ \global\Etoc@vfalse
+ \global\Etoc@ivfalse
+ \global\Etoc@iiifalse
+ \global\Etoc@iifalse
+ \global\Etoc@ifalse
+ \global\Etoc@false
+ \global\Etoc@jfalse
+ \global\Etoc@jjfalse
+ \the\Etoc@toctoks
+ \ifEtoc@notactive
+ \else
+ \ifEtoc@v \Etoc@end@five\fi
+ \ifEtoc@iv \Etoc@end@four\fi
+ \ifEtoc@iii \Etoc@end@three\fi
+ \ifEtoc@ii \Etoc@end@two\fi
+ \ifEtoc@i \Etoc@end@one\fi
+ \ifEtoc@ \Etoc@end@zero\fi
+ \ifEtoc@j \Etoc@end@minusone\fi
+ \ifEtoc@jj \Etoc@end@minustwo\fi
+ \fi
+}
+% \end{macrocode}
+% Slightly better coded in |1.08b|. Had some bad experiences with TeX
+% conditionals back in 2011/2012 when I started LaTeX programming, and the
+% code was a remnant of extra cautious attitude. Also, now
+% \csa{etoc@@startlocaltoc} is expandable if it does nothing.
+%
+% |2015/04/16|: |1.08e| removes a \csa{ifEtoc@notactive} test as |\ifnum| can
+% be positive only once anyhow; although the \csa{ifEtoc@notactive} boolean
+% could be faster than an |\ifnum|, it adds to it as long as the local toc id
+% is not yet found.
+%
+% I replace (|1.08e|) the |\Etoc@global|'s for |\Etoc@localtop| by
+% |\global|'s. The |\relax| is needed because |#2| may sometimes be a count,
+% sometimes tokens.
+%
+% Attention! |1.09| defines a public \cs{etoclocaltop} in replacement of old
+% \cs{Etoc@localtop} \emph{minus one}. Memo: \cs{etoclocaltop} has only
+% meaningful meaning when the local toc has its "active" flag set. Except that
+% I used a "notactive" flag to torture myself, so: has the "notactive" flag
+% off.
+%
+% Also attention |1.09| now sets the |\c@tocdepth| there in relation to
+% implementation of \localtocwrdp. This is needed for line styles in
+% compatibility mode as the code from standard classes checks the tocdepth
+% counter.
+% \begin{macrocode}
+\def\etoc@@startlocaltoc#1#2{%
+ \ifEtoc@localtoc
+ \ifnum #1=#2\relax
+ \ifEtoc@jj \global\let\etoclocaltop\Etoc@@minustwo@@\fi
+ \ifEtoc@j \global\let\etoclocaltop\Etoc@@minusone@@\fi
+ \ifEtoc@ \global\let\etoclocaltop\Etoc@@zero@@ \fi
+ \ifEtoc@i \global\let\etoclocaltop\Etoc@@one@@ \fi
+ \ifEtoc@ii \global\let\etoclocaltop\Etoc@@two@@ \fi
+ \ifEtoc@iii \global\let\etoclocaltop\Etoc@@three@@ \fi
+ \ifEtoc@iv \global\let\etoclocaltop\Etoc@@four@@ \fi
+ \ifEtoc@v \global\let\etoclocaltop\Etoc@@five@@ \fi
+ \global\c@tocdepth\Etoc@localtocdepth
+ \global\Etoc@notactivefalse
+ \global\Etoc@vfalse
+ \global\Etoc@ivfalse
+ \global\Etoc@iiifalse
+ \global\Etoc@iifalse
+ \global\Etoc@ifalse
+ \global\Etoc@false
+ \global\Etoc@jfalse
+ \global\Etoc@jjfalse
+ \fi
+ \fi
+}
+\let\etoc@startlocaltoc\@gobble
+% \end{macrocode}
+% |2015/03/16|: |1.08e| tests if a local table of contents turns out empty.
+% The \csa{Etoc@localtop} there does not have the same meaning as when set-up
+% by the regular \csa{etoc@@startlocaltoc}. It is off by 1 (in general). THIS
+% IS OBSOLETE since |1.09|: a \cs{etoclocaltop} is used with same meaning in
+% all code branches.
+%
+% After some hesitation I opted for making and obeying the test always (*) for
+% local tables of contents, and do it also for global tables of contents but
+% for the latter the user must issue \csa{etocnotocifnotoc} for the emptiness
+% test to be obeyed. The emptiness tests are to be trusted only when the
+% compilations have stabilized.
+%
+% (*) finally the user must issue \csa{etocchecksemptiness} once.
+%
+% |\Etoc@tocid| is the number of the toc (possibly gotten via a |\ref|
+% following a \csa{tableofcontents}), or it is |\z@| if the emptiness test is
+% from a global toc. Until the compilations stabilize, some local TOCs can get
+% printed at wrong locations naturally and emptiness tests can not be trusted
+% either. Releases earlier than |1.08e| authorized
+% \csa{tableofcontents}|\ref{foo}| with |foo| the label of a \emph{global}
+% toc. But as it was impossible (without much complications) to discriminate,
+% until auxiliary files have stabilized, between a |\ref| to a local toc whose
+% id is not yet in the |.toc| file and a |\ref| to a global toc whose id will
+% in the end definitely not be in the |.toc| file, I decided that this silly
+% possibility should not be supported anymore. This allowed to remove a few
+% tokens from \csa{Etoc@tableofcontents} as well. And it also allowed
+% improvements to \csa{Etoc@localtableofcontents}.
+%
+% Note: (|1.08i 2016/09/29|) the code has to handle both local and total toc.
+% Hence the flag |\ifEtoc@notactive| has to be set prior to it. For a global
+% toc, the |\Etoc@tocid| was set to |\z@|, and the |\ifnum| in
+% |\etoc@startlocaltoc| did always fail, but I now prefer to simply nullify
+% the |\etoc@startlocaltoc|. As its default fallback is |\@gobble| I simply
+% test here for the |localtoc| flag. The |\Etoc@tocid| will be undefined for a
+% global toc but it is not tested anymore.
+%
+% Note: the mechanism for recognizing the level when a local toc is
+% encountered is different from the one in |\etoc@@startlocaltoc| which uses
+% the level flags. Here we just record in |\Etoc@level| where we last stood.
+% The initialization |\global\let\Etoc@level\Etoc@minf| is thus needed in case
+% the |.toc| file contains an |\etoc@startlocaltoc| before any
+% |\contentsline|.
+%
+% |1.08i| has two |testingcontentsline| macros, one for local, one for global.
+%
+% |1.09| renames the \cs{Etoc@localtop} which was used here to a public
+% \cs{etoclocaltop} to make it usable in \cs{etocsettocstyle}.
+% \begin{macrocode}
+\def\Etoc@setemptytocbool {%
+ \global\Etoc@emptytoctrue
+ \global\Etoc@stoptocfalse
+ \global\let\Etoc@level\Etoc@minf
+ \begingroup
+ \ifEtoc@localtoc
+ \def\etoc@startlocaltoc##1{%
+ \ifnum##1=\Etoc@tocid\relax
+ \global\let\etoclocaltop\Etoc@level
+ \global\Etoc@notactivefalse
+ \fi }%
+ \let\contentsline\Etoc@testingcontentslinelocal
+ \else
+ \let\contentsline\Etoc@testingcontentsline
+ \fi
+ \Etoc@storetocdepth
+ \the\Etoc@toctoks
+ \Etoc@restoretocdepth
+ \endgroup
+}
+\DeclareRobustCommand*\etocifwasempty
+ {\ifEtoc@emptytoc\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi }
+\expandafter
+\let\expandafter\etocxifwasempty\csname etocifwasempty \endcsname
+\def\Etoc@testingcontentslinelocal #1{%
+ \ifEtoc@stoptoc
+ \else
+ \ifnum\csname Etoc@#1@@\endcsname=\Etoc@@six@@
+ \else
+ \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname
+% \end{macrocode}
+% |\ifEtoc@notactive| set to False by |\etoc@startlocaltoc| with right id. It
+% that happened, check level of hit against unit. Will decide if empty or not.
+% Set |stoptoc| flag afterwards in all cases. |\Etoc@localtop| will have been
+% initialized by |\etoc@@startlocaltoc| as |\ifEtoc@notactive| flag can be
+% false only then.
+%
+% |1.09| renamed the \cs{Etoc@localtop} as formerly here to \cs{etoclocaltop}
+% and adds support for \localtocwrdp.
+% \begin{macrocode}
+ \ifEtoc@notactive
+ \else
+ \ifnum\Etoc@level>\etoclocaltop
+ \unless\ifnum\Etoc@level>\Etoc@localtocdepth
+ \global\Etoc@emptytocfalse
+ \global\Etoc@stoptoctrue
+ \fi
+ \else
+ \global\Etoc@stoptoctrue
+ \fi
+ \fi
+ \fi
+ \fi
+ \Etoc@gobblefourorthree\relax
+}
+\def\Etoc@testingcontentsline #1{%
+ \ifEtoc@stoptoc
+ \else
+ \ifnum\csname Etoc@#1@@\endcsname=\Etoc@@six@@
+ \else
+ \unless\ifnum\csname Etoc@#1@@\endcsname>\c@tocdepth
+ \global\Etoc@emptytocfalse
+ \global\Etoc@stoptoctrue
+ \fi
+ \fi
+ \fi
+ \Etoc@gobblefourorthree\relax
+}
+% \end{macrocode}
+% |1.07g| suppresses the printing of |--unknown etoc ref: run latex again--| as
+% sometimes one uses \csa{localtableofcontents} to prepare something else, and one
+% does not want any text output even in intermediate runs.
+%
+% Also |1.07g| adds \csa{etocaftertochook} to help with
+% \csa{invisiblelocaltableofcontents} (and then I did \csa{etocsetnexttocdepth}).
+% |1.07h| makes the hook used by \csa{etocsetnexttocdepth} private.
+%
+% |2015/03/14|: |1.08b| suppresses a space token from an unprotected end of
+% line at the end after the replacement text of \csa{etoc@startlocaltoc} (bug
+% dating back to |1.03 2012/11/23|). I didn't see it due to the originally
+% badly formatted source of |\Etoc@next|.
+%
+% |2015/03/16|: |1.08e| lets \csa{localtableofcontents} do a first scan of the
+% |.toc| file (as stored in |\Etoc@toctoks|) to determine if the table of
+% contents will in fact end up empty. In that case, nothing is typeset. The
+% command \csa{etocaftertochook} is still executed though. Other ways were
+% envisioned (like delimited macros) to determine this potential emptiness, but
+% in the end I opted for execution of the |.toc| file with suitable definitions
+% for \csa{contentsline} and \csa{etoc@startlocaltoc}. Notice though that if
+% emptiness would result from empty line styles, this can not be detected.
+% Emptiness means ``no executed \csa{contentsline}''.
+%
+% For this detection of emptiness, assignments (here and in
+% \csa{Etoc@testingcontentsline}) are made globally, I think this is the best
+% (just in case some portions of the |.toc| file turn out to be inside some
+% groups --- perhaps for some silly color assignments, etc... --- whose
+% boundaries do not necessarily respect unit levels).
+%
+% The flag |\Etoc@tocwithid| discriminates between a \localtoc and a
+% \toc|\ref{foo}|; the latter could so far possibly refer to a local or also to
+% a global table of contents but release |1.08e| has deprecated the latter use
+% as it complicated the code, for something truly silly. Thus |\ref{foo}| must
+% now be with |foo| a label of a local TOC. As a result |\Etoc@tocwithid| is
+% less used now.
+%
+% In the case of a |\ref|ed-to toc whose label was just added hence is not yet
+% in the |.aux| file, |\Etoc@tocid| is |0|. \etoc used to issue a warning to
+% run latex again and did no printing at all. Release |1.08e| in such cases
+% prints the heading (this may gain one compilation step). Emptiness test is
+% not executed as it would necessarily turn out positive and can not be
+% trusted anyhow. The TOC is declared non empty, which it probably is...
+%
+% Emptiness detection for local tables of contents (either from a
+% \csa{localtableofcontents} or from a \csa{tableofcontents}|\ref{localtoc}|)
+% can be trusted only when the |.toc| file has stabilized.The emptiness status
+% of a local TOC whose Id is not yet in the |.toc| is by necessity undecided
+% yet (and not to be trusted really as the numbering may have changed; only
+% when compilation runs settle is the emptiness status to be trusted). The
+% code declares the TOC non empty, as it will be in 95\% of use cases.
+%
+% Dropping support for \toc|\ref{globaltoc}| means here that when a TOC id is
+% not found in the |.toc| file we can assume it definitely has to be a local
+% TOC needing more compilations. The emptiness status is undecided, the code
+% declares the TOC non empty.
+%
+% |1.08i-2016/09/29| now does |\Etoc@localtoctrue| right at the start (the
+% earlier code could have to handle table of contents which were actually
+% global, via the |\label/\ref| mechanism.) It does not rely on the |\ifnum|
+% automatically false in |\etoc@@startlocaltoc| due to the special values |0|
+% or |\z@| for |\Etoc@tocid|, but simply leaves |\etoc@startlocaltoc| to its
+% default |\@gobble|. The |\Etoc@emptytocfalse| flag is upfront in case some
+% code using |\etocifwasempty| is in user hooks. The default is to assume the
+% TOC non-empty as its contents are actually still unknown. Under the
+% |stoptoc| flag, the |\Etoc@etoccontentsline| is more efficient now.
+%
+% The |\Etoc@notactive| flag needs to be set before calling
+% |\Etoc@setemptytocbool|.
+%
+% I hesitated with |1.08i| to write something to aux file in order to let
+% \LaTeX\ prompt the user for extra pass, after insertion of some new
+% |\localtableofcontents|, but finally I prefer to only trick \LaTeX\ into
+% telling about undefined references.
+%
+% The \cs{PackageWarning} approach has the advantage
+% that at least in Emacs/AUCTeX the |C-cC-c| will propose |LaTeX|, not |View|.
+% But perhaps some automated scripts checking |aux| file will not like the
+% extra line which is then removed in next pass, and could possibly do one
+% extra unneeded compilation to check |aux| file remains identical. Hence the
+% second approach. (edit |2017/10/23|: good thing I documented that! I had
+% completely forgotten that rationale, but I wonder if it is correct.)
+%
+% Also the |\PackageWarning| does not trigger a visible message
+% near the end of the log file or console output, contrarily to a
+% \centeredline{|LaTeX Warning: There were undefined references.|}
+% followed by a
+% \centeredline{|LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.|}
+%
+% Method used here seems to work fine also with |latexmk|: it does not seem to
+% induce it into making too many runs.
+% \begin{macrocode}
+\def\Etoc@localtableofcontents#1{%
+ \gdef\etoclocaltop{-\@m}%
+ \Etoc@localtoctrue
+ \global\Etoc@emptytocfalse
+ \edef\Etoc@tocid{#1}%
+ \ifnum\Etoc@tocid<\@ne
+ %\PackageWarning{etoc}{Unknown toc reference \@secondoftwo#1. Run LaTeX again}%
+ \setbox0\hbox{\ref{Unknown toc ref \@secondoftwo#1. Rerun LaTeX}}%
+ %\if@filesw\immediate\write\@mainaux{\noexpand\@tempswatrue}\fi
+ \global\Etoc@stoptoctrue % do only heading
+ \gdef\etoclocaltop{-\thr@@}%
+ \Etoc@tableofcontents
+ \expandafter\Etoc@gobbletoetoc@ % skip all the rest
+ \fi
+ \global\Etoc@notactivetrue
+% \end{macrocode}
+% |1.08i|'s |\Etoc@setemptytocbool| now checks |localtoc| flag.
+% \begin{macrocode}
+ \ifEtoc@checksemptiness
+ \Etoc@setemptytocbool
+ \fi
+ \ifEtoc@emptytoc
+ \ifEtoc@notactive
+ %\PackageWarning{etoc}{Unknown toc ID \number\Etoc@tocid. Run LaTeX again}%
+ \setbox0\hbox{\ref{Unknown toc ID \number\Etoc@tocid. Rerun LaTeX}}%
+ %\if@filesw\immediate\write\@mainaux{\noexpand\@tempswatrue}\fi
+ \global\Etoc@emptytocfalse % assume real one will be non-empty
+ \global\Etoc@stoptoctrue % and print only heading for this pass
+ \gdef\etoclocaltop{-\thr@@}%
+ \Etoc@tableofcontents
+ \expandafter\expandafter\expandafter\Etoc@gobbletoetoc@
+ \else
+ %% \PackageWarning{etoc}{This toc is apparently empty}%
+ \fi
+ \else
+ \global\Etoc@stoptocfalse
+ \global\Etoc@notactivetrue
+% \end{macrocode}
+% Prior to |1.09| a \cs{Etoc@localtop} was reset here. This has now been
+% moved to \cs{Etoc@tableofcontents} and \cs{Etoc@localtop} replaced by a
+% public \cs{etoclocaltop} usable in line styles, and in \cs{etocsettocstyle}
+% (under checksemptinesstrue regime).
+%
+% We can end up here either if the emptiness check was done and turned
+% negative (then \cs{etoclocaltop} has the correct level for usage in first
+% argument of \cs{etocsettocstyle}), or if the emptiness check was not done.
+% For the latter case \cs{etoclocaltop} has setting |-\@m|.
+% \begin{macrocode}
+ \edef\etoc@startlocaltoc##1%
+ {\noexpand\etoc@@startlocaltoc{##1}{\Etoc@tocid}}%
+ \Etoc@tableofcontents
+ \fi
+ \@gobble\etoc@
+ \endgroup\ifEtoc@mustclosegroup\endgroup\fi
+ \Etoc@tocdepthreset % 1.07h, renamed 1.08h
+ \etocaftertochook % 1.07g
+% \end{macrocode}
+% |1.09| hesitates about putting this before of after the
+% \cs{etocaftertochook}. The information of the used tocdepth is lost if
+% puuting it first. The usage of \cs{etocaftertochook} may be broken if
+% unexpected tokens follows.
+% \begin{macrocode}
+ \let\Etoc@localtocdepth\c@tocdepth % 1.09
+}% \Etoc@localtableofcontents
+% \end{macrocode}
+% |2013/03/07|: I discover a \csa{@namedef} trick to construct the
+% \csa{Etoc@again} space delimited macro:\\
+% | \@namedef {Etoc@again} {...stuff...}|\\
+% Original version was (copied from analogous stuff in |source2e|):\\
+% | {\def\1{\Etoc@again}\expandafter\gdef\1 {...stuff...}}|\\
+% and in the end (now that I think about it) I simply use |\@firstofone|.\par
+% \begin{macrocode}
+\def\Etoc@getrefno #1#2\etoc@ {#1}
+\def\Etoc@getref #1{\@ifundefined{r@#1}{0}{\expandafter\expandafter\expandafter
+ \Etoc@getrefno\csname r@#1\endcsname\relax\etoc@}}
+\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}}
+\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
+\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
+% \end{macrocode}
+% |1.08e| adds test for emptiness. And uses another coding style for
+% conditional branching. Easier to read. Not tested for efficiency.
+%
+% Also, |\ref{foo}| expects |foo| to be a label to a \emph{local} TOC. Earlier
+% versions accepted a reference to a global TOC, I have removed the support
+% from \csa{Etoc@tableofcontents}.
+%
+% The syntax \csa{localtableofcontents}|\ref{foo}| is now accepted.
+% \begin{macrocode}
+\def\Etoc@dothis #1#2\etoc@ {\fi #1}
+\def\Etoc@t@bleofcontents{%
+ \gdef\etoclocaltop{-\@M}%
+ \ifx\Etoc@nexttoken\label\Etoc@dothis{\expandafter\Etoc@label\@gobble}\fi
+ \ifx\Etoc@nexttoken\@sptoken\Etoc@dothis{\Etoc@again}\fi
+% \end{macrocode}
+% |\Etoc@ref| will hand over directly to |\Etoc@localtableofcontents|.
+% Argument will be (or rather expand to) zero if the reference is non-existent
+% yet. There was an |\Etoc@tocwithidfalse| flag which |1.08i| suppresses as it
+% is not used afterwards (since |1.08e| I think.)
+% \begin{macrocode}
+ \ifx\Etoc@nexttoken\ref\Etoc@dothis{\expandafter\Etoc@ref\@gobble}\fi
+% \end{macrocode}
+% Flag to check if we were called from a |\localtableofcontents|.
+% \begin{macrocode}
+ \ifEtoc@tocwithid\Etoc@dothis{\Etoc@localtableofcontents{\c@etoc@tocid}}\fi
+% \end{macrocode}
+% From now on we are handling a global TOC. Earlier, I used the trick of
+% setting |\Etoc@tocid| to |\z@| for compatibility with expansion of
+% |\etoc@startlocaltoc|. But since |1.08i| |\etoc@startlocaltoc| is left to be
+% |\@gobble|, and |\Etoc@tocid| is never tested. We don't need to set the
+% |notactive| flag as now |\Etoc@testingcontentsline| tests first the
+% |localtoc| flag (was already the case of |\Etoc@etoccontentsline|). I change
+% a bit the style of conditionals here for clarity of code.
+% \begin{macrocode}
+ \global\Etoc@emptytocfalse\ifEtoc@checksemptiness\Etoc@setemptytocbool\fi
+ \ifEtoc@emptytoc
+ \ifEtoc@notocifnotoc
+ \expandafter\expandafter\expandafter\@gobble
+ \fi
+ \fi
+ \Etoc@tableofcontents
+ \endgroup\ifEtoc@mustclosegroup\endgroup\fi
+ \Etoc@tocdepthreset % 1.07h, renamed 1.08h
+ \etocaftertochook % 1.07g
+ \@gobble\etoc@
+ }% \Etoc@t@bleofcontents
+% \end{macrocode}
+% |1.07g| for consistency Etoc@ prefix added.
+%
+% |1.08c| does not use |\arabic| in the |\addtocontents| since I have seen
+% that in some circumstances (for some right to left languages with
+% polyglossia or babel), one can not rely on |\arabic| having its default
+% definition. As the number written here will be used later in an \csa{ifnum}, I
+% should not have used it in the first place (done |2015/03/30|).
+%
+% |1.08i| moves elsewhere definition of |\etoc@startlocaltoc|. In
+% |\Etoc@table@fcontents| case it remains to be seen if a |\ref| follows which
+% could turn the TOC into a local one. Handled by |\Etoc@t@bleofcontents|.
+% \begin{macrocode}
+\def\Etoc@table@fcontents{%
+ \refstepcounter{etoc@tocid}%
+ \Etoc@tocwithidfalse
+ \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
+\def\Etoc@localtable@fcontents{%
+ \refstepcounter{etoc@tocid}%
+ \addtocontents{toc}{\string\etoc@startlocaltoc{\the\c@etoc@tocid}}%
+ \Etoc@tocwithidtrue
+ \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
+% \end{macrocode}
+% |1.07g| defines |\etoctableofcontents| to be able to undo the evil and
+% brutal doings of some packages with |\tableofcontents|.
+%
+% |1.08| patches |tableof|'s influence. Version |1.4a| or later of |tableof|
+% is needed.
+% \begin{macrocode}
+\let\etocaftertitlehook \@empty
+\let\etocaftercontentshook \@empty
+% \end{macrocode}
+% Attention that there could be a |\ref| following, thus we don't yet know
+% whether this is a local or global table of contents.
+%
+% The \cs{Etoc@tocdepthset} is for \cs{etocsetnexttocdepth} mechanism.
+% \begin{macrocode}
+\def\etoctableofcontents{%
+ \Etoc@openouttoc
+ \Etoc@tocdepthset % new with 1.08h (\etocsetnexttocdepth)
+ \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents
+% \end{macrocode}
+% No need for the |tableof| extra group level, even it is better to get rid of
+% it. I don't globally cancel |\tof@begingroup| and |\tof@endgroup| to leave
+% open for the user the (dubious) possibility of using directly |\tableof|,
+% |\tablenotof| (rather than only the reasonable thing which is
+% |\nexttocwithtags{}{}|).
+% \begin{macrocode}
+ \let\tof@begingroup\@empty
+ \let\tof@endgroup \@empty
+% \end{macrocode}
+% |1.08i| removes definition of |\etoc@startlocaltoc| from here. It is done
+% in |\Etoc@localtableofcontents| or uses its default of |\@gobble|.
+% \begin{macrocode}
+ \@ifstar
+ {\def\Etoc@aftertitlehook{}\Etoc@table@fcontents}
+ {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@table@fcontents}%
+}% \etoctableofcontents
+\let\tableofcontents\etoctableofcontents
+\newcommand*\localtableofcontents{%
+ \Etoc@openouttoc
+ \Etoc@tocdepthset % new with 1.08h (\etocsetnexttocdepth)
+ \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents
+ \let\tof@begingroup\@empty
+ \let\tof@endgroup \@empty
+ \@ifstar
+ {\def\Etoc@aftertitlehook{}\Etoc@localtable@fcontents}
+ {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@localtable@fcontents}%
+}% \localtableofcontents
+% \end{macrocode}
+% |1.09| adds \localtocwrdp. The motivation is that it is impossible to set
+% in a completely satisfactory way the tocdepth from the first argument of
+% \cs{etocsettocstyle} because the emptiness check does not execute that
+% argument. If one does not care about emptiness check, one can of course set
+% the tocdepth from the first argument of \cs{etocsettocstyle}. One can even
+% use \cs{etocsetnexttocdepth} for that since |1.09| but anyway direct usage
+% of \cs{etocsettocdepth} (or |\setcounter{tocdepth}{...}| is easier as its
+% effet when executed there is automatically limited to duration of the TOC.
+% \begin{macrocode}
+\newcommand*\localtableofcontentswithrelativedepth[1]{%
+ \edef\Etoc@localtocdepth
+ {\numexpr\noexpand\etoclocaltop+\the\numexpr#1\relax\relax}%
+ \localtableofcontents
+}% \localtableofcontentswithrelativedepth
+\let\Etoc@localtocdepth\c@tocdepth
+% \end{macrocode}
+% |1.08| moves earlier the definitions of |\Etoc@savedcontentsline| as
+% well as |\Etoc@levellist|. It will thus not be operative to do
+% |\etocsetlevel| from inside the title now. But perhaps it will be
+% easier to deal with tables.
+%
+% Also I remove a big |\@firstofone|, and use rather
+% |\Etoc@gobbletoetoc@| for the gobbling case.
+%
+% Also, |1.08| modifies the code to do only expandable things after
+% |\Etoc@toctoc|, in order to allow opening of an alignment in the first
+% argument and closing in the second. Earlier versions had an
+% |\Etoc@@next| initially set to relax after the first |\Etoc@toctoc|. I
+% was in 2012/2013 quite uneasy with the TeX conditionals hence wanted
+% for safety to move the things for the second invocation of
+% |\Etoc@toctoc| after the |\fi\fi\fi|. I could define an |\afterfififi|
+% macro, but it should be ok as it is done here.
+%
+% |1.08e| moved the |\Etoc@par| to \csa{Etoc@tableofcontents}. This was needed
+% for the implementation of the emptiness test. It might have some impact in
+% fringe cases as the \csa{refstepcounter} is now done before the |\par| is
+% issued.
+%
+% |1.08e| suppresses the possibility to do a \csa{tableofcontents}|\ref{foo}|
+% with |foo| the label of a global TOC: issueing \csa{tableofcontents} alone
+% suffices. Allowed to simplify some code.
+%
+% |1.08g| moves |\Etoc@par| to before |\etocbeforetitlehook|, not after.
+% \begin{macrocode}
+\long\def\Etoc@gobbletoetoc@ #1\etoc@ {}
+\newcommand\etocsettocstyle[2]{%
+\def\Etoc@tableofcontents
+{%
+ \ifnum\c@tocdepth>\Etoc@minf
+ \else
+ \expandafter\Etoc@gobbletoetoc@
+ \fi
+ \Etoc@par
+ \etocbeforetitlehook % 1.07m
+ \Etoc@storetocdepth % 1.07g
+ \let\Etoc@savedcontentsline\contentsline % moved up here 1.08
+ \let\contentsline\Etoc@etoccontentsline
+ \ifEtoc@standard
+ \else % moved here from \Etoc@toctoc (1.08)
+% \end{macrocode}
+% Prior to |1.08|, this was done in |\Etoc@toctoc|
+%
+% |1.08k| defines here |\etocsavedchaptertocline|, |\etocsavedsectiontocline|,
+% and so on for all declared level names, again at each TOC and for the
+% duration of it.
+% \begin{macrocode}
+ \def\Etoc@levellist@elt####1{%
+ \expandafter\let\csname etocsaved####1tocline\expandafter\endcsname
+ \csname l@####1\endcsname
+ \expandafter\let\csname l@####1\endcsname\Etoc@lxyz}%
+ \Etoc@levellist
+% \end{macrocode}
+% |1.08k| removes |\let\chapternumberline\numberline| etc... done formerly here
+% \begin{macrocode}
+ \fi
+% \end{macrocode}
+% |1.09| makes \cs{etocsetnexttocdepth} usable in |#1| (but this is not 100\%
+% compatible with the emptiness check).
+%
+% |1.09| makes an \cs{etoclocaltop} usable in |#1| if under checksemptiness
+% regime.
+% \begin{macrocode}
+ #1%
+ \Etoc@tocdepthset
+ \ifEtoc@parskip\parskip\z@skip\fi %1.07d
+ \Etoc@aftertitlehook
+% \end{macrocode}
+% |1.09| has replaced former \cs{Etoc@localtop} (\emph{minus one}) by
+% \cs{etoclocaltop}. Under checksemptinesstrue regime its value is already
+% known, but it will be obtained again from the toc file execution. As it is
+% used only if TOC is active, resetting it here this way is decorative and
+% could be removed.
+% \begin{macrocode}
+ \gdef\etoclocaltop{-\thr@@}%
+ \Etoc@toctoc
+ \etocaftercontentshook
+ #2\@nobreakfalse % 1.07d: \@nobreakfalse moved here
+ \Etoc@restoretocdepth % 1.07g. moved here from before #2 by 1.08
+% \end{macrocode}
+% |1.08|: necessary if |tableof 1.4a| has been used in global mode and thus
+% was forced to modify globally |\contentsline|. The collateral effect is that
+% \etoc is now forced to reset globally |\contentsline|.
+% \begin{macrocode}
+ \ifx\Etoc@global\global
+ \ifx\tof@finish\@empty
+ \else
+ \global\let\contentsline\Etoc@savedcontentsline
+ \fi
+ \fi
+ \@gobble\etoc@
+}% end of \Etoc@tableofcontents definition by \etocsettocstyle
+}
+% \end{macrocode}
+% |1.08| hacks the begin parts to update therein the |\ifEtoc@isfirst| flag
+% (|2015/03/09|).
+%
+% |1.08c| removes unneeded |\long| from the |\def|'s inside |\etoc@setstyle|
+% (|2015/03/29|).
+% \begin{macrocode}
+\def\etocsetstyle{\Etoc@standardfalse\etoc@setstyle}
+\long\def\etoc@setstyle#1#2#3#4#5{%
+ \expandafter\def
+ \csname Etoc@begin@\csname Etoc@#1@\endcsname\endcsname
+ {#2\Etoc@global\Etoc@isfirsttrue}%
+ \expandafter\def
+ \csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname {#3}%
+ \expandafter\def
+ \csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname {#4}%
+ \expandafter\def
+ \csname Etoc@end@\csname Etoc@#1@\endcsname\endcsname {#5}%
+}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocfontminustwo {\normalfont \LARGE \bfseries}
+\def\etocfontminusone {\normalfont \large \bfseries}
+\def\etocfontzero {\normalfont \large \bfseries}
+\def\etocfontone {\normalfont \normalsize \bfseries}
+\def\etocfonttwo {\normalfont \normalsize}
+\def\etocfontthree {\normalfont \footnotesize}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex}
+\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex}
+\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex}
+\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex}
+\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex}
+\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocbaselinespreadminustwo {1}
+\def\etocbaselinespreadminusone {1}
+\def\etocbaselinespreadzero {1}
+\def\etocbaselinespreadone {1}
+\def\etocbaselinespreadtwo {1}
+\def\etocbaselinespreadthree {.9}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocminustwoleftmargin {1.5em plus 0.5fil}
+\def\etocminustworightmargin {1.5em plus -0.5fil}
+\def\etocminusoneleftmargin {1em}
+\def\etocminusonerightmargin {1em}
+\def\etoctoclineleaders
+ {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}}
+\def\etocabbrevpagename {p.~}
+% \end{macrocode}
+% Versions earlier than |1.08b| (and since |v1.05 2012/12/01|) defined
+% \csa{etocpartname} (for use by \etoc's own line styles) to expand to
+% \csa{partname}. But this didn't make sense in the context for example of
+% |babel| and |frenchb|, because \csa{frenchpartname} does things depending on
+% the current value of the counter |part|. The code in recent |frenchb| (but
+% not yet |v2.5a| when |\etocpartname| was introduced) constructs control
+% sequences |\ordinali|, etc... If the part counter is zero, this gives
+% |\ordinal|. Usually this is not defined, hence no error happens (as it is
+% constructed via |\csname|), but under class |memoir| the bug showed up. All
+% this to explain that I found out about this long lasting problem only on
+% |2015/03/14|. Probably a sign that \etoc's own line styles are rarely
+% used...
+% \begin{macrocode}
+\def\etocpartname {Part}% modified 1.08b
+\def\etocbookname {Book}
+% \end{macrocode}
+% placeholder for comments
+% The macro \csa{etocdefaultlines} was initially called \csa{etoctoclines}. Now
+% \csa{etoctoclines} just does \csa{Etoc@standardfalse}.
+% Version |1.07e| has rewritten entirely the stuff related to penalties and
+% \csa{addvspace}, as this was not satisfactory in the earlier versions, which
+% were written at a early stage in the development of the
+% package. Actually I am not fully satisfied with these line styles.
+%
+% \begin{macrocode}
+\def\etocdefaultlines{\Etoc@standardfalse %
+%% `book':
+\etoc@setstyle{@minustwo}
+ {\addpenalty\@M\etocskipfirstprefix}
+ {\addpenalty\@secpenalty}
+ {\begingroup
+ \etocfontminustwo
+ \addvspace{\etocsepminustwo}%
+ \parindent \z@
+ \leftskip \etocminustwoleftmargin
+ \rightskip \etocminustworightmargin
+ \parfillskip \@flushglue
+ \vbox{\etocifnumbered{\etocbookname\enspace\etocnumber:\quad}{}\etocname
+ \baselineskip\etocbaselinespreadminustwo\baselineskip
+ \par}%
+ \addpenalty\@M\addvspace{\etocsepminusone}%
+ \endgroup}
+ {}%
+%% `part':
+\etoc@setstyle{@minusone}
+ {\addpenalty\@M\etocskipfirstprefix}
+ {\addpenalty\@secpenalty}
+ {\begingroup
+ \etocfontminusone
+ \addvspace{\etocsepminusone}%
+ \parindent \z@
+ \leftskip \etocminusoneleftmargin
+ \rightskip \etocminusonerightmargin
+ \parfillskip \@flushglue
+ \vbox{\etocifnumbered{\etocpartname\enspace\etocnumber.\quad}{}\etocname
+ \baselineskip\etocbaselinespreadminusone\baselineskip
+ \par}%
+ \addpenalty\@M\addvspace{\etocsepzero}%
+ \endgroup}
+ {}%
+%% `chapter':
+\etoc@setstyle{@zero}
+ {\addpenalty\@M\etocskipfirstprefix}
+ {\addpenalty\@itempenalty}
+ {\begingroup
+ \etocfontzero
+ \addvspace{\etocsepzero}%
+ \parindent \z@ \parfillskip \@flushglue
+ \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname
+ \baselineskip\etocbaselinespreadzero\baselineskip
+ \par}%
+ \endgroup}
+ {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}%
+%% `section':
+\etoc@setstyle{@one}
+ {\addpenalty\@M\etocskipfirstprefix}
+ {\addpenalty\@itempenalty}
+ {\begingroup
+ \etocfontone
+ \addvspace{\etocsepone}%
+ \parindent \z@ \parfillskip \z@
+ \setbox\z@\vbox{\parfillskip\@flushglue
+ \etocname\par
+ \setbox\tw@\lastbox
+ \global\setbox\@ne\hbox{\unhbox\tw@\ }}%
+ \dimen\z@=\wd\@ne
+ \setbox\z@=\etoctoclineleaders
+ \advance\dimen\z@\wd\z@
+ \etocifnumbered
+ {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}}
+ {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}%
+ \advance\dimen\z@\wd\tw@
+ \ifdim\dimen\z@ < \linewidth
+ \vbox{\etocname~%
+ \leaders\box\z@\hfil\box\tw@
+ \baselineskip\etocbaselinespreadone\baselineskip
+ \par}% 1.08b adds the % here
+ \else
+ \vbox{\etocname~%
+ \leaders\copy\z@\hfil\break
+ \hbox{}\leaders\box\z@\hfil\box\tw@
+ \baselineskip\etocbaselinespreadone\baselineskip
+ \par}%
+ \fi
+ \endgroup}
+ {\addpenalty\@secpenalty\addvspace{\etocsepzero}}%
+%% `subsection':
+\etoc@setstyle{@two}
+ {\addpenalty\@medpenalty\etocskipfirstprefix}
+ {\addpenalty\@itempenalty}
+ {\begingroup
+ \etocfonttwo
+ \addvspace{\etocseptwo}%
+ \parindent \z@ \parfillskip \z@
+ \setbox\z@\vbox{\parfillskip\@flushglue
+ \etocname\par\setbox\tw@\lastbox
+ \global\setbox\@ne\hbox{\unhbox\tw@}}%
+ \dimen\z@=\wd\@ne
+ \setbox\z@=\etoctoclineleaders
+ \advance\dimen\z@\wd\z@
+ \etocifnumbered
+ {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}}
+ {\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}%
+ \advance\dimen\z@\wd\tw@
+ \ifdim\dimen\z@ < \linewidth
+ \vbox{\etocname~%
+ \leaders\box\z@\hfil\box\tw@
+ \baselineskip\etocbaselinespreadtwo\baselineskip
+ \par}%
+ \else
+ \vbox{\etocname~%
+ \leaders\copy\z@\hfil\break
+ \hbox{}\leaders\box\z@\hfil\box\tw@
+ \baselineskip\etocbaselinespreadtwo\baselineskip
+ \par}%
+ \fi
+ \endgroup}
+ {\addpenalty\@secpenalty\addvspace{\etocsepone}}%
+%% `subsubsection':
+\etoc@setstyle{@three}
+ {\addpenalty\@M
+ \etocfontthree
+ \vspace{\etocsepthree}%
+ \noindent
+ \etocskipfirstprefix}
+ {\allowbreak\,--\,}
+ {\etocname}
+ {.\hfil
+ \begingroup
+ \baselineskip\etocbaselinespreadthree\baselineskip
+ \par
+ \endgroup
+ \addpenalty{-\@highpenalty}}%
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\etoc@setstyle{@four}{}{}{}{}%
+\etoc@setstyle{@five}{}{}{}{}%
+} % end of \etocdefaultlines!
+% \end{macrocode}
+% The |\etocinnertopsep| default value is too big as well as |\etocbelowtocskip|
+% and |\etocabovetocskip|, I guess, but if I am remember correctly I chose them
+% to mimick the standard TOC spacings in |article| class.
+% \begin{macrocode}
+\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex}
+\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex}
+\def\etoccolumnsep{2em}
+\def\etocmulticolsep{0ex}
+\def\etocmulticolpretolerance{-1}
+\def\etocmulticoltolerance{200}
+\def\etocdefaultnbcol{2}
+\def\etocinnertopsep{2ex}
+% \end{macrocode}
+% |1.07i| adds a |\nobreak| before the |\etocinnertopsep| and a test of vertical
+% mode to see if truly adding a |\par| is a reasonable idea, in the
+% case of single-column mode.
+%
+% |1.08b| revisits this old code written perhaps at a time I didn't know about
+% |\expandafter| !
+% \begin{macrocode}
+\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{%
+\etocsettocstyle
+ {\let\etocoldpar\par
+ \addvspace{\etocabovetocskip}%
+ \ifnum #1>\@ne
+ \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi
+ {\multicolpretolerance\etocmulticolpretolerance
+ \multicoltolerance\etocmulticoltolerance
+ \setlength{\columnsep}{\etoccolumnsep}%
+ \setlength{\multicolsep}{\etocmulticolsep}%
+ \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]}
+ {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip
+ \@@par\endgroup
+ \fi
+ \nobreak\addvspace{\etocinnertopsep}%
+ \pretolerance\etocmulticolpretolerance
+ \tolerance\etocmulticoltolerance}%
+ }%
+ {\ifnum #1>\@ne
+ \expandafter\@firstofone
+ \else \expandafter\@gobble
+ \fi
+ {\end{multicols}}%
+ \addvspace{\etocbelowtocskip}}%
+}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocinnerbottomsep{3.5ex}
+\def\etocinnerleftsep{2em}
+\def\etocinnerrightsep{2em}
+\def\etoctoprule{\hrule}
+\def\etocleftrule{\vrule}
+\def\etocrightrule{\vrule}
+\def\etocbottomrule{\hrule}
+\def\etoctoprulecolorcmd{\relax}
+\def\etocbottomrulecolorcmd{\relax}
+\def\etocleftrulecolorcmd{\relax}
+\def\etocrightrulecolorcmd{\relax}
+% \end{macrocode}
+% |1.07i| moves the |\nobreak| to before the |\vskip\etocinnertopsep|
+% (especially important for the single column case).
+% \begin{macrocode}
+\def\etoc@ruledheading #1{%
+ \hb@xt@\linewidth{\color@begingroup
+ \hss #1\hss\hskip-\linewidth
+ \etoctoprulecolorcmd\leaders\etoctoprule\hss
+ \phantom{#1}%
+ \leaders\etoctoprule\hss\color@endgroup}%
+ \nointerlineskip\nobreak\vskip\etocinnertopsep}
+\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{%
+\etocsettocstyle
+ {\addvspace{\etocabovetocskip}%
+ \ifnum #1>\@ne
+ \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi
+ {\multicolpretolerance\etocmulticolpretolerance
+ \multicoltolerance\etocmulticoltolerance
+ \setlength{\columnsep}{\etoccolumnsep}%
+ \setlength{\multicolsep}{\etocmulticolsep}%
+ \begin{multicols}{#1}[\etoc@ruledheading{#2}]}
+ {\etoc@ruledheading{#2}%
+ \pretolerance\etocmulticolpretolerance
+ \tolerance\etocmulticoltolerance}}
+ {\ifnum #1>\@ne\expandafter\@firstofone
+ \else \expandafter\@gobble
+ \fi
+ {\end{multicols}}%
+ \addvspace{\etocbelowtocskip}}}
+% \end{macrocode}
+% |1.07k| defines |\Etoc@relax| and |\etocbkgcolorcmd| as |\long|: the user
+% manual says to use |\renewcommand\etocbkgcolorcmd|, and an |\ifx| test is used
+% in the framed style. It was thus a bug to have non-long definitions before. Or
+% I could have said in the user manual to use |\renewcommand*|, or in
+% |\etocframedstyle| I should test for the two, or I should pause to try to
+% remember about this code and think about it.
+% \begin{macrocode}
+\def\etocframedmphook{\relax}
+\long\def\etocbkgcolorcmd{\relax}
+\long\def\Etoc@relax{\relax}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\newbox\etoc@framed@titlebox
+\newbox\etoc@framed@contentsbox
+\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{%
+\etocsettocstyle{%
+ \addvspace{\etocabovetocskip}%
+ \sbox\z@{#2}%
+ \dimen\z@\dp\z@
+ \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi
+ \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup
+ \hss
+ \ifx\etocbkgcolorcmd\Etoc@relax
+ \else
+ \sbox\tw@{\color{white}%
+ \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}%
+ \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi
+ \box\tw@
+ \hskip-\wd\z@
+ \fi
+ \copy\z@
+ \hss
+ \hskip-\linewidth
+ \etoctoprulecolorcmd\leaders\etoctoprule\hss
+ \hskip\wd\z@
+ \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}%
+ \setbox\z@\hbox{\etocleftrule\etocrightrule}%
+ \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@
+ \advance\dimen\tw@-\etocinnerleftsep
+ \advance\dimen\tw@-\etocinnerrightsep
+ \setbox\etoc@framed@contentsbox=\vbox\bgroup
+ \hsize\dimen\tw@
+ \kern\dimen\z@
+ \vskip\etocinnertopsep
+ \hbox\bgroup
+ \begin{minipage}{\hsize}%
+ \etocframedmphook
+ \ifnum #1>\@ne
+ \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi
+ {\multicolpretolerance\etocmulticolpretolerance
+ \multicoltolerance\etocmulticoltolerance
+ \setlength{\columnsep}{\etoccolumnsep}%
+ \setlength{\multicolsep}{\etocmulticolsep}%
+ \begin{multicols}{#1}}
+ {\pretolerance\etocmulticolpretolerance
+ \tolerance\etocmulticoltolerance}}
+ {\ifnum #1>\@ne\expandafter\@firstofone
+ \else \expandafter\@gobble
+ \fi
+ {\end{multicols}\unskip }%
+ \end{minipage}%
+ \egroup
+ \vskip\etocinnerbottomsep
+ \egroup
+ \vbox{\hsize\linewidth
+ \ifx\etocbkgcolorcmd\Etoc@relax
+ \else
+ \kern\ht\etoc@framed@titlebox
+ \kern\dp\etoc@framed@titlebox
+ \hb@xt@\linewidth{\color@begingroup
+ \etocleftrulecolorcmd\etocleftrule
+ \etocbkgcolorcmd
+ \leaders\vrule
+ \@height\ht\etoc@framed@contentsbox
+ \@depth\dp\etoc@framed@contentsbox
+ \hss
+ \etocrightrulecolorcmd\etocrightrule
+ \color@endgroup}\nointerlineskip
+ \vskip-\dp\etoc@framed@contentsbox
+ \vskip-\ht\etoc@framed@contentsbox
+ \vskip-\dp\etoc@framed@titlebox
+ \vskip-\ht\etoc@framed@titlebox
+ \fi
+ \box\etoc@framed@titlebox\nointerlineskip
+ \hb@xt@\linewidth{\color@begingroup
+ {\etocleftrulecolorcmd\etocleftrule}%
+ \hss\box\etoc@framed@contentsbox\hss
+ \etocrightrulecolorcmd\etocrightrule\color@endgroup}
+ \nointerlineskip
+ \vskip\ht\etoc@framed@contentsbox
+ \vskip\dp\etoc@framed@contentsbox
+ \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd
+ \leaders\etocbottomrule\hss\color@endgroup}}
+ \addvspace{\etocbelowtocskip}}}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{%
+ \etocmulticolstyle[#1]{#2}%
+ \tableofcontents}
+\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{%
+ \etocmulticolstyle[#1]{#2}%
+ \tableofcontents*}
+\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{%
+ \etocmulticolstyle[#1]{#2}%
+ \localtableofcontents}
+\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{%
+ \etocmulticolstyle[#1]{#2}%
+ \localtableofcontents*}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{%
+ \etocruledstyle[#1]{#2}%
+ \tableofcontents}
+\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{%
+ \etocruledstyle[#1]{#2}%
+ \tableofcontents*}
+\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{%
+ \etocruledstyle[#1]{#2}%
+ \localtableofcontents}
+\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{%
+ \etocruledstyle[#1]{#2}%
+ \localtableofcontents*}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{%
+ \etocframedstyle[#1]{#2}%
+ \tableofcontents}
+\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{%
+ \etocframedstyle[#1]{#2}%
+ \tableofcontents*}
+\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{%
+ \etocframedstyle[#1]{#2}%
+ \localtableofcontents}
+\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{%
+ \etocframedstyle[#1]{#2}%
+ \localtableofcontents*}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocmulticol{\begingroup
+ \Etoc@mustclosegrouptrue
+ \@ifstar
+ {\etoc@multicoltoci}
+ {\etoc@multicoltoc}}
+\def\etocruled{\begingroup
+ \Etoc@mustclosegrouptrue
+ \@ifstar
+ {\etoc@ruledtoci}
+ {\etoc@ruledtoc}}
+\def\etocframed{\begingroup
+ \Etoc@mustclosegrouptrue
+ \@ifstar
+ {\etoc@framedtoci}
+ {\etoc@framedtoc}}
+\def\etoclocalmulticol{\begingroup
+ \Etoc@mustclosegrouptrue
+ \@ifstar
+ {\etoc@local@multicoltoci}
+ {\etoc@local@multicoltoc}}
+\def\etoclocalruled{\begingroup
+ \Etoc@mustclosegrouptrue
+ \@ifstar
+ {\etoc@local@ruledtoci}
+ {\etoc@local@ruledtoc}}
+\def\etoclocalframed{\begingroup
+ \Etoc@mustclosegrouptrue
+ \@ifstar
+ {\etoc@local@framedtoci}
+ {\etoc@local@framedtoc}}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocarticlestyle{%
+ \etocsettocstyle
+ {\section *{\contentsname
+ \@mkboth {\MakeUppercase \contentsname}
+ {\MakeUppercase \contentsname}}}
+ {}}
+\def\etocarticlestylenomarks{%
+ \etocsettocstyle
+ {\section *{\contentsname}}
+ {}}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocbookstyle{%
+ \etocsettocstyle
+ {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
+ \chapter *{\contentsname
+ \@mkboth {\MakeUppercase \contentsname}
+ {\MakeUppercase \contentsname}}}
+ {\if@restonecol \twocolumn \fi}}
+\def\etocbookstylenomarks{%
+ \etocsettocstyle
+ {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
+ \chapter *{\contentsname}}
+ {\if@restonecol \twocolumn \fi}}
+\let\etocreportstyle\etocbookstyle
+\let\etocreportstylenomarks\etocbookstylenomarks
+\def\etocmemoirtoctotocfmt #1#2{%
+ \def\Etoc@addsuitablecontentsline{\addcontentsline {toc}{#1}{#2}}%
+ \renewcommand*\etocaftertitlehook{%
+ \ifmem@em@starred@listof
+ \else
+ \phantomsection
+ \aftergroup\Etoc@addsuitablecontentsline
+ \fi}%
+}
+\def\etocmemoirstyle{%
+ \etocsettocstyle
+ {\ensureonecol \par \begingroup \@nameuse {@tocmaketitle}
+ \Etoc@aftertitlehook\let\Etoc@aftertitlehook\relax
+ \parskip \cftparskip \@nameuse {cfttocbeforelisthook}}
+ {\@nameuse {cfttocafterlisthook}\endgroup\restorefromonecol}}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocscrartclstyle{%
+ \etocsettocstyle
+ {\let\if@dynlist\if@tocleft
+ \def\@currext{toc}% added 1.07m 2015/01/23
+ \iftocfeature {toc}{onecolumn}
+ {\iftocfeature {toc}{leveldown}
+ {}
+ {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }}
+ {}%
+% \end{macrocode}
+% |1.07k|: next line to do as within current |scrartcl 2013/12/19 v3.12|
+% KOMA-Script article class.
+% \begin{macrocode}
+ \iftocfeature {toc}{numberline}{\def \nonumberline {\numberline {}}}{}%
+ \tocbasic@listhead {\listoftocname}%
+ \begingroup \expandafter \expandafter \expandafter
+ \endgroup \expandafter
+ \ifx
+ \csname microtypesetup\endcsname \relax
+ \else
+ \iftocfeature {toc}{noprotrusion}{}
+ {\microtypesetup {protrusion=false}%
+ \PackageInfo {tocbasic}%
+ {character protrusion at toc deactivated}}%
+ \fi
+ \setlength {\parskip }{\z@ }%
+ \setlength {\parindent }{\z@ }%
+ \setlength {\parfillskip }{\z@ \@plus 1fil}%
+ \csname tocbasic@@before@hook\endcsname
+ \csname tb@toc@before@hook\endcsname}
+ {\csname tb@toc@after@hook\endcsname
+ \csname tocbasic@@after@hook\endcsname}}
+\let\etocscrbookstyle\etocscrartclstyle
+\let\etocscrreprtstyle\etocscrartclstyle
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\etocstandarddisplaystyle{\etocarticlestyle}
+\newcommand*\etocmarkboth[1]{%
+ \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}
+\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}}
+\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]%
+ {\csname #1\endcsname *{#3}}}
+\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]%
+ {\csname #1\endcsname *{#3\etocmarkboth{#4}}}}
+\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]%
+ {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\Etoc@redefetocstyle#1{%
+ \renewcommand\etoctocstylewithmarks[4][#1]
+ {\etocmulticolstyle[##2]%
+ {\csname ##1\endcsname *{##3\etocmarkboth{##4}}}}
+ \renewcommand\etoctocstylewithmarksnouc[4][#1]
+ {\etocmulticolstyle[##2]%
+ {\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}}
+ \renewcommand\etoctocstyle[3][#1]{%
+ \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}}}}
+\@ifclassloaded{scrartcl}
+ {\renewcommand*\etocstandarddisplaystyle{\etocscrartclstyle}}{}
+\@ifclassloaded{book}
+ {\renewcommand*\etocfontone{\normalfont\normalsize}
+ \renewcommand*\etocstandarddisplaystyle{\etocbookstyle}
+ \Etoc@redefetocstyle{chapter}}{}
+\@ifclassloaded{report}
+ {\renewcommand*\etocfontone{\normalfont\normalsize}
+ \renewcommand*\etocstandarddisplaystyle{\etocreportstyle}
+ \Etoc@redefetocstyle{chapter}}{}
+\@ifclassloaded{scrbook}
+ {\renewcommand*\etocfontone{\normalfont\normalsize}
+ \renewcommand*\etocstandarddisplaystyle{\etocscrbookstyle}
+ \Etoc@redefetocstyle{chapter}}{}
+\@ifclassloaded{scrreprt}
+ {\renewcommand*\etocfontone{\normalfont\normalsize}
+ \renewcommand*\etocstandarddisplaystyle{\etocscrreprtstyle}
+ \Etoc@redefetocstyle{chapter}}{}
+% \end{macrocode}
+%|1.07k (2014/03/06)| adds the |appendix| to the list of known levels if class
+%|memoir| is detected.
+% \begin{macrocode}
+\@ifclassloaded{memoir}
+ {\etocsetlevel{appendix}{0}%
+ \renewcommand*\etocfontone{\normalfont\normalsize}
+ \etocmemoirtoctotocfmt{chapter}{\contentsname}%
+ \renewcommand*\etocstandarddisplaystyle{\etocmemoirstyle}
+ \Etoc@redefetocstyle{chapter}}{}
+% \end{macrocode}
+%|1.07k (2014/03/06)| adds the compatibility with the |tocloft| package; in
+% compatibility mode etoc will obey the |tocloft| customisation for the division
+% headings as well as for the toc title.
+%
+%|1.07l (2014/04/02)| fixes the bug from the |tocloft| compatibility layer which
+%was |memoir| incompatible: |memoir| has its version of |tocloft| which doesn't
+%have the |\if@cftnctoc| boolean.
+% \begin{macrocode}
+\def\etoctocloftstyle {%
+ \etocsettocstyle
+ {\@cfttocstart\par\begingroup
+ \parindent\z@ \parskip\cftparskip \@cftmaketoctitle
+ \if@cfttocbibind\@cftdobibtoc\fi }%
+ {\endgroup\@cfttocfinish }%
+}
+\@ifclassloaded{memoir}{}
+{\@ifpackageloaded{tocloft}
+ {\if@cftnctoc\else
+ \renewcommand*\etocstandarddisplaystyle{\etoctocloftstyle}
+ \AtBeginDocument{\let\tableofcontents\etoctableofcontents}
+ \fi }
+ {\AtBeginDocument
+ {\@ifpackageloaded{tocloft}
+ {\if@cftnctoc\else
+ \PackageWarning {etoc}
+ {Package `tocloft' was loaded after `etoc'!^^J%
+**** to prevent it from overwriting \protect\tableofcontents, it will be tricked^^J%
+**** into believing to have been loaded with option `titles'. For better^^J%
+**** compatibility, please load `tocloft' before `etoc'}%
+ \AtEndDocument{\PackageWarning{etoc}
+ {Please load `tocloft' /before/ `etoc'!}}\fi
+ \@cftnctoctrue }%
+ {}%
+ }%
+ }%
+}
+% \end{macrocode}
+% placeholder for comments
+% \begin{macrocode}
+\def\Etoc@addtocontents #1#2%
+ {\ifEtoc@hyperref
+ \addtocontents {toc}{\protect\contentsline
+ {#1}{#2}%
+ {\thepage }{\@currentHref }}%
+ \else
+ \addtocontents {toc}{\protect\contentsline
+ {#1}{#2}{\thepage }}%
+ \fi}
+\def\Etoc@addcontentsline@ #1#2#3%
+ {\@namedef{toclevel@#1}{#3}%
+ \addcontentsline {toc}{#1}{#2}}
+\DeclareRobustCommand*{\etoctoccontentsline}
+ {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}}
+% \end{macrocode}
+% All the following added for version |1.07g [2013/10/13]|. Motivated by
+% a demand about |tovsec2|. But it is impossible to make |tocvsec2|
+% compatible, if not re-doing all `toc' macros in |tocvsec2|
+% (|v1.3, 2011/08/07|). I do not retain the stack idea, which does not convince
+% me as useful. The empty line in the |.toc| file is put there by
+% |tocvsec2| (see its code line 143).
+%
+% I take this opportunity to add to the start of the toc file
+% |\let\etoc@startlocaltoc\@gobble| in case |etoc| is not detected, I should
+% possibly have done that long ago (like I did in |tableof|).
+%
+% In |1.07h| I decide that I should not have used |\Etoc@| but |\etoc@| for
+% |\Etoc@settocdepth|. So I now use lowercase and add a temporary line for
+% transition in the very improbable situation that someone actually did already
+% use the just released |1.07g|.
+%
+% In |1.07i| the deactivation of |\etoc@settocdepth| done at the start
+% of the |.toc| file (for the case this file is used after having
+% removed |etoc| from the document, or imported in another document) is
+% done via letting it to |\@gobble| rather than |\count@| (which would
+% not be ok, as what follows would be undefined too). The reason for the
+% |\count@| also used originally in |\etocignoretoctocdepth| is that
+% when I first worked on |1.07g| I possibly had more than one token
+% after |\etoc@settocdepth|, but I changed that later.
+%
+% |1.09| renames \cs{Etoc@resettocdepth} to \cs{Etoc@restoretocdepth}.
+% \begin{macrocode}
+\def\Etoc@storetocdepth {\global\c@etoc@tocdepth\c@tocdepth }
+\def\Etoc@restoretocdepth {\global\c@tocdepth\c@etoc@tocdepth }
+\def\etocobeytoctocdepth {\def\etoc@settocdepth
+ {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}}
+\def\Etoc@@nottoodeep {\ifnum\c@tocdepth>\c@etoc@tocdepth
+ \global\c@tocdepth\c@etoc@tocdepth\fi }
+\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble }
+\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth }
+\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup
+ \expandafter\Etoc@set@tocdepth@
+ \else\expandafter\Etoc@set@toctocdepth
+ \fi }
+\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@}
+ {\PackageWarning{etoc}
+ {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}}
+ {\global\c@tocdepth\csname Etoc@#1@@\endcsname}%
+}
+\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ }
+\def\Etoc@set@toctocdepth@ #1{%
+ \@ifundefined{Etoc@#1@@}%
+ {\PackageWarning{etoc}
+ {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}%
+ {\addtocontents {toc}
+ {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}%
+}
+% \end{macrocode}
+% |1.07h| adds the depth tags, and an even more general mechanism could be added
+% at some point: we could insert `action' tags and have the user map them to
+% arbitrary commands. For the time being we just provide
+% |\etocdepthtag.toc {name}| and |\etocsettagdepth {tag_name}{level}| where
+% level is numeric or
+% alphabetical. The numeric
+% level |-3| is now again not accepted by |\etocsetlevel|, it can be used with
+% |\etocsettagdepth| (which accepts equivalently |none|).
+% \begin{macrocode}
+\def\etocdepthtag #1#{\Etoc@depthtag } % \etocdepthtag.toc {name}
+\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}}
+\def\etocignoredepthtags {\let\etoc@depthtag \@gobble }
+\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ }
+\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}%
+ {}% ignore in silence if tag has no associated depth
+ {\afterassignment\Etoc@@nottoodeep
+ \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}%
+}
+\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}%
+ {\PackageWarning{etoc}
+ {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}%
+ {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}%
+}
+% \end{macrocode}
+% We must cancel all |tocvsec2| toc-related actions. But a check must be done
+% for the memoir class, as its |tocvsec2| emulation does not have the
+% incompatible things etoc needs to revert. This extra check added with etoc
+% |1.07l|. Release |1.08g| modifies the info message under class memoir (and
+% downgrades it from warning to info).
+% \begin{macrocode}
+\def\Etoc@tocvsec@err #1{\PackageError {etoc}
+ {the command \protect#1\space is incompatible with etoc}
+ {use \protect\etocsettocdepth.toc as replacement (see etoc manual)}%
+}%
+\AtBeginDocument {%
+ \@ifclassloaded{memoir}
+ {\PackageInfo {etoc}
+ {Regarding memoir class command \protect\settocdepth, consider^^J
+ \protect\etocsettocdepth.toc as a drop-in replacement with
+ more capabilities^^J (see etoc manual). Similarly
+ \protect\etocsettocdepth\space and
+ \protect\etocsetnexttocdepth^^J should replace
+ use of memoir's \protect\maxtocdepth\space command.}}
+ {\@ifpackageloaded {tocvsec2}
+ {\def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }%
+ \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }%
+ \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }%
+ {\Etoc@tocvsec@err \resettocdepth }%
+ }%
+ \def\save@tocdepth #1#2#3{}% % if etoc is added to file previously
+ \let\reset@tocdepth\relax % using tocvsec2
+ \let\remax@tocdepth\relax
+ \let\tableofcontents\etoctableofcontents
+ \PackageWarning {etoc}
+ {package tocvsec2 detected and its modification of^^J
+ \protect\tableofcontents\space reverted. Use
+ \protect\etocsettocdepth.toc as a replacement^^J
+ for the tocvsec2 toc-related commands}}{}%
+ }%
+}%
+% \end{macrocode}
+% |1.07g|. Initial version of \csa{etocsetnexttocdepth}.
+%
+% |1.08h|: avoid after-effect of consecutive uses of \csa{etocsetnexttocdepth}
+% with no intervening TOC, due to the fact that the command did an immediate
+% modification of the |tocdepth counter|. This is now delayed until
+% the actual TOC typesetting.
+%
+% |1.09|: slight refactoring of \cs{etocsetnexttocdepth} to let it be usable
+% from first argument of \cs{etocsettocstyle} although it is even simpler to
+% use \cs{etocsettocdepth} there, because the setting is automatically undone
+% at end of TOC.
+%
+% Recall that etoc allows to change all numeric
+% levels assigned to sectioning names, and the one used by
+% \cs{etocsetnexttocdepth} is determined at time of next toc only, when
+% \cs{Etoc@tocdepthset} will expand.
+% \begin{macrocode}
+\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }%
+\def\invisiblelocaltableofcontents
+ {\etocsetnexttocdepth {-3}\localtableofcontents }%
+\def\etocsetnexttocdepth #1{%
+ \@ifundefined{Etoc@#1@@}
+ {\PackageWarning{etoc}
+ {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}}
+ {\Etoc@setnexttocdepth{\csname Etoc@#1@@\endcsname}}%
+}%
+\def\Etoc@setnexttocdepth#1{%
+ \def\Etoc@tocdepthset{%
+ \Etoc@tocdepthreset
+ \edef\Etoc@tocdepthreset {%
+ \global\c@tocdepth\the\c@tocdepth\space
+ \global\let\noexpand\Etoc@tocdepthreset\noexpand\@empty
+ }%
+ \global\c@tocdepth#1%
+ \global\let\Etoc@tocdepthset\@empty
+ }%
+}%
+\let\Etoc@tocdepthreset\@empty % new 1.08h functioning of \etocsetnexttocdepth
+\let\Etoc@tocdepthset \@empty %
+% \end{macrocode}
+% |1.08k|. Serves to make local TOCs even after headings which were not added
+% to the |.toc| file; but of course the local TOCs can only display
+% sub-headings which made their way into the |.toc| file...
+% \begin{macrocode}
+\def\etocsetlocaltop #1#{\Etoc@set@localtop}%
+\def\Etoc@set@localtop #1{%
+ \@ifundefined{Etoc@#1@@}%
+ {\PackageWarning{etoc}
+ {Unknown sectioning depth #1, \protect\etocsetlocaltop.toc ignored}}%
+ {\addtocontents {toc}
+ {\protect\etoc@setlocaltop\expandafter\protect\csname Etoc@#1@@\endcsname}}%
+}%
+\def\etoc@setlocaltop #1{%
+ \global\let\Etoc@level #1%
+ \Etoc@skipthisonefalse
+ \ifnum\Etoc@level=\Etoc@@six@@
+ \Etoc@skipthisonetrue
+ \else
+ \ifEtoc@localtoc
+ \ifEtoc@stoptoc\Etoc@skipthisonetrue
+ \else
+ \ifEtoc@notactive
+ \Etoc@setflags
+ \Etoc@skipthisonetrue
+ \else
+% \end{macrocode}
+% Attention, |1.09| has \cs{etoclocaltop} which is former \cs{Etoc@localtop}
+% \emph{minus one}. Hence the shape of the conditional. Memo: it makes sense
+% only for code executed under "active" status of the TOC.
+% \begin{macrocode}
+ \unless\ifnum\Etoc@level>\etoclocaltop
+ \Etoc@skipthisonetrue
+ \global\Etoc@stoptoctrue
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \let\Etoc@next\@gobble
+ \ifEtoc@skipthisone
+ \else
+ \ifnum\c@tocdepth<\Etoc@level
+ \else
+ \ifEtoc@standard
+ \else
+ \let\Etoc@next\@firstofone
+ \fi
+ \fi
+ \fi
+ \Etoc@next{\Etoc@doends\Etoc@dobegins}%
+}%
+% \end{macrocode}
+% |1.07h|. In order for the |.toc| file to be usable without error even
+% without etoc. In |1.07i| use of |\@gobble| for |\etoc@settocdepth|.
+% \begin{macrocode}
+\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}%
+ {\let\protect\etoc@startlocaltoc\protect\@gobble
+ \let\protect\etoc@settocdepth\protect\@gobble
+ \let\protect\etoc@depthtag\protect\@gobble
+ \let\protect\etoc@setlocaltop\protect\@gobble}{}}%
+% \end{macrocode}
+% Initializations.
+% \begin{macrocode}
+\def\etocstandardlines {\Etoc@standardtrue}
+\def\etoctoclines {\Etoc@standardfalse}
+\etocdefaultlines
+\etocstandardlines
+\etocstandarddisplaystyle
+\etocobeytoctocdepth
+\etocobeydepthtags
+\let\etocaftertochook \@empty % public for end user.
+\let\etocbeforetitlehook \@empty % new with 1.07m
+\endinput
+% \end{macrocode}
+% \MakePercentComment
+\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 \~}
+
+\CheckSum{3497}%
+
+\csname check@checksum\endcsname
+\Finale
+%%
+%% End of file `etoc.dtx'.