% -*- coding: utf-8; -*-
%<*none>
{\def\doctimestamp {Time-stamp: <28-03-2015 10:10:25 CET>}% 
 \def\getdtxtimestamp #1 <#2 #3 #4>{#2 at #3 #4}%
 \xdef\etocdtxtimestamp {\expandafter\getdtxtimestamp\doctimestamp }}%
%</none>
%<*!readme>
%%
%% Package: etoc
%% Version: 1.08b (2015/03/18; doc of 2015/03/28)
%% License: LPPL 1.3c or later (see etoc.dtx)
%% Copyright (C) 2012-2015 Jean-Francois Burnol 
%%                         <jfbu at free dot fr>
%% Copyright (C) 2014-2015 Christine Roemer 
%%                         <Christine_Roemer at t-online dot de>
%% and collaborators for the translation into German of the documentation
%%
%</!readme>
%<*insfile>
\def\etocpkgdate        {2015/03/18} 
\def\etocdocdate        {2015/03/28}
\def\etocpkgversion     {v1.08b}
\def\etocpkgdescription {Completely customisable TOCs (jfB)}
%</insfile>
%<*none>
% Now the date and version which are specific to the German translation.
% Replace \let by suitable \def's in case this lags behing English version.
\let\etocDEpkgdate   \etocpkgdate    %
\let\etocDEdocdate   \etocdocdate    %
\let\etocDEpkgversion\etocpkgversion %
% 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.08b (2015/03/18; doc of 2015/03/28)
% License: LPPL 1.3c or later
% Copyright (C) 2012-2015 Jean-Francois Burnol <jfbu at free dot fr>
% Copyright (C) 2014-2015 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, either
%     version 1.3c of this license or (at your option) any later
%     version. 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.etex, etoc-DE.tex, and README.md. See README.md for
% further instructions.
}}%
\iffalse
%</none>
%<*readme>
<!-- -->

    Source:  etoc.dtx (v1.08b 2015/03/18; doc of 2015/03/28)
    Author:  Jean-Francois Burnol
    Author:  Christine Roemer et al. (German tranlation)
    Info:    Completely customisable TOCs
    License: LPPL 1.3c or later
    Copyright (C) 2012-2015 Jean-Francois Burnol.
    Copyright (C) 2014-2015 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.

At least three ways to produce etoc.pdf (method (3) is preferred):

1. latex etoc.dtx (four times), then dvips, then ps2pdf
2. pdflatex etoc.dtx (four times)
3. latex etoc.tex (four times), then dvipdfmx

Method (3) produces the smallest pdf files.
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.

To produce etoc-DE.pdf (German documentation) run etex on etoc.ins
or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with
latex (thrice) then dvipdmx, or set first to 0 `\Withdvipdfmx` in
etoc-DE.tex to allow compilation with pdflatex.

Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen
zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen
mit dvipdfmx ist `\Withdvidpdfmx` auf 0 in etoc-DE.tex zu setzen,
dann 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

The other files may be discarded.

LICENSE
=======

This Work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
version 1.3c of this license or (at your option) any later
version. 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.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 `\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`.

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!
%</readme>
%<*tex>-------------------------------------------------------------------------
%% run latex four times on this file etoc.tex then dvipdfmx on etoc.dvi 
%% to produce the documentation etoc.pdf, with source code included.  
%%
%% possible dvipdfmx warnings may be ignored, but in case of a too
%% old dvipdfmx, it may be preferable to use pdflatex. For this set
%% \Withdvipdfmx to 0 first here or run directly pdflatex on etoc.dtx.
%%
\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex+dvips or pdflatex
\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 NOT both be 1 ..)
\chardef\ForDeutsch 0 %
\input etoc.dtx
%%% Local Variables:
%%% mode: latex
%%% End:
%</tex>-------------------------------------------------------------------------
%<*DEtex>-----------------------------------------------------------------------
%% run latex thrice on this file etoc-DE.tex then dvipdfmx on etoc-DE.dvi 
%% to produce the German documentation etoc-DE.pdf (without source code).
%%
%% possible dvipdfmx warnings may be ignored, but in case of a too
%% old dvipdfmx, it may be preferable to use pdflatex. For this set
%% \Withdvipdfmx to 0 first here.
%%
%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen
%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen
%% mit dvipdfmx ist \Withdvidpdfmx auf 0 zu setzen, dann ist pdflatex
%% dreimal mit etoc-DE.tex laufen zu lassen.
%%
\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex+dvips or pdflatex
\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 % (can NOT 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
%%
%% At least three ways to produce etoc.pdf (method (3) is preferred):
%%  (1) latex etoc.dtx (four times), then dvips, then ps2pdf
%%  (2) pdflatex etoc.dtx (four times)
%%  (3) latex etoc.tex (four times), then dvipdfmx
%%
%% Method (3) produces the smallest pdf files.
%% 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. 
%%
%% To produce the German documentation etoc-DE.pdf run tex on etoc.ins
%% or etoc.dtx to produce etoc-DE.tex, then compile etoc-DE.tex with
%% latex (thrice) then dvipdmx, or edit the suitable toggle in
%% etoc-DE.tex to allow compilation to proceed with pdflatex.
%%
%% Um etoc-DE.pdf zu erzeugen ist latex dreimal mit etoc-DE.tex laufen
%% zu lassen, dann dvipdfmx mit etoc-DE.dvi. Im Falle von Problemen
%% mit dvipdfmx ist \Withdvidpdfmx auf 0 in etoc-DE.tex zu setzen,
%% dann 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>------------------------------------------------------------------------
\fi
%
\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 latex^^J}%
\Msg{* thrice on file etoc.tex and then dvipdfmx on etoc.dvi^^J}%
\Msg{*^^J}%
\Msg{* To produce the German documentation run latex thrice on file^^J}%
\Msg{* etoc-DE.tex and then dvipdfmx on etoc-DE.dvi^^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.

\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
\usepackage{forest}       % 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 \AtBeginDocuments 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)
    \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
\makeatletter
\newcommand*{\MyQuasiStandardTOC}[1]{%
  \begingroup
  \let\savedsectionline\l@section
  \let\savedsubsectionline\l@subsection 
  \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}{}{}
        {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
     \fi} 
    {\savedsectionline
      {\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

\def\tikzmycustomgrowth {%
  \pgftransformreset
  \ifnum\tikztreelevel=1
    \pgftransformrotate {(\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentchild-1)}%
  \fi
  \ifnum\tikztreelevel=2
    \pgftransformrotate {(\pgfkeysvalueof{/tikz/sibling angle})*(\tikznumberofcurrentgrandchild-4)}%
    \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\lowast{\raisebox{-.25\height}{*}}
\newcommand\starit[1]{\csa{#1\lowast}}
\newcommand\staritb[1]{\csb{#1}\lowast}

\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-if-num-bered
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}

\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}}}}%
   \appendtotok\parttok\childnode }
  {}

\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{ ;}}

\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}}%
         }%

\global
\setbox\TitlePageMindmapTOC\hbox {\begingroup
\resizebox{.9\paperwidth}{!}{%
\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/8},% 8 hard-coded mais je pourrais aussi le calculer
                    level 1 concept/.append style={font=\Large, text width = 3cm},
                    level 2/.append style={level distance=12.5cm, sibling angle=360/35},% 35 hard coded mais je pourrais aussi le calculer
                    % distance par rapport au CENTRE ! (avec le code tel qu'en ce moment)
                   ]
\the\treetok
\end{tikzpicture}}\endgroup }
\endgroup

\indent\null
\begingroup
 \let\thefootnote\empty
 \footnote{Documentation (\etocdocdate) generated from the source file
  with timestamp ``\etocdtxtimestamp''.}
\endgroup
\setcounter{footnote}{0}

\AddToShipoutPictureFG*{\put(10.5cm,16.85cm)
                        {\makebox(0,0){\box\TitlePageMindmapTOC}}}

\clearpage

\etocdepthtag.toc {preamble}

%----
% MAIN TOC
%
\etocsettocdepth {subsubsection}
\etoctoclines
\etocmarkboth\contentsname
\etocmulticolstyle[1]
     {\pdfbookmark[1]{Table of contents}{MAINTOC}%
      \noindent\bfseries\Large
      \leaders\hrule height1pt\hfill
      \MakeUppercase{Table of Contents}}

\begingroup
  \etocsetlevel{subsection}{3}
  \etocsetlevel{subsubsection}{6}
  \tableofcontents \label{toc:main}
\endgroup

\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|.

\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.

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} and the \autoref{toc:allsubsections} (which is a TOC!)
have their line styles expressed in terms of enumerate 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{ssub: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}.

\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. 

We could use 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|.



\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


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.



\begin{verbatim}
\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{verbatim}

\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.

\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}
\etocsettagdepth {arbitrarily}{none}
\etocsettagdepth {surprising} {none}
\etocsettagdepth {linestyles} {subsection}
\etocsettagdepth {globalcmds} {subsection}
\etocsettagdepth {custom}     {none}
\etocsettagdepth {tips}       {none}
\etocsettagdepth {code}       {none}

\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
\etocsetnexttocdepth {subsection}
\tableofcontents
\endgroup

The code:
\begin{verbatim}
\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}
\etocsettagdepth {arbitrarily}{none}
\etocsettagdepth {surprising} {none}
\etocsettagdepth {linestyles} {subsection}
\etocsettagdepth {globalcmds} {subsection}
\etocsettagdepth {custom}     {none}
\etocsettagdepth {tips}       {none}
\etocsettagdepth {code}       {none}

\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
\etocsetnexttocdepth {subsection}
\tableofcontents
\endgroup
\end{verbatim}

\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{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
%\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{Labeling and reusing elsewhere}

\etoc allows arbitrarily many \csa{tableofcontents} commands in
your document. The line styles and the toc display style may of
course be changed in-between. Furthermore 
\csa{localtableofcontents} 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 . . .

\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{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
%%  \centeredline{The original is \hyperref[toc:c]{there}.}
\end{figure}

We used this:
\begin{verbatim}
\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{verbatim}
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}}

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: 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|.

\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 D.B. 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{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).



\section{Two Examples}

\subsection{A Beautiful Thesis example}

Here is another 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{verbatim}
\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{verbatim}


\begingroup
\newlength{\tocleftmargin}
\setlength{\tocleftmargin}{5cm}
\newlength{\tocrightmargin}
\setlength{\tocrightmargin}{1cm}

\etocsetstyle{section}
{\addvspace{1ex}\parfillskip0pt
 \leftskip\tocleftmargin
 \rightskip\the\tocrightmargin plus 1fil
 \parindent0pt\color{cyan}}
{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode}
{\llap{Chapter\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname
 \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par}
{}

\etocsetstyle{subsection}
{}
{\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}
% And again, for the fun of it:
% \def\tmptitle{My Very Beautiful Thesis}
% \tableofcontents \ref{toc:c}
\endgroup


\subsection{A 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}. 


\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\noindent
\hbox to 1cm{\color{subsecnum}\etocnumber\hss}%
\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill
\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par
\nointerlineskip\vskip3pt}
{}

\etocsetstyle{subsection}{\etocskipfirstprefix}
{\shiftedwhiterule{1.5cm}{6pt}}
{\sffamily\small
\leftskip1.5cm\hangindent.8cm\rightskip.5cm\noindent
\hbox to .75cm{\color{subsecnum}\etocnumber\hss}%
\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill
\rlap{\hbox to .5cm{\hss\etocpage\hskip.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}

% 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.
\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\hfill{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}}%
 \vskip6pt}
{}


% attention car \ref{toc:floating} fera référence au compteur de
% toutes les toc, pas visibletoc. 

\etocframedstyle[1]{}
\tableofcontents \label{toc:floating} \ref{toc:overview}
\vspace{-\baselineskip}
\centeredline{|\tableofcontents \ref{toc:overview}| 
(\emph{cf.} \autoref{ssec:again} and \hyperref[toc:clone]{this other toc})}
\end{figure}

The actual design is not pre-built in \etoc; it uses its `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. This design (with other colors)
is in use also for \hyperref[toc:clone]{this other toc}, and the
reader is referred to its \hyperref[ssec:tocclone]{subsection} for the
coding used.

% 11 octobre 2013 ceci était une section avant:
% (17 octobre, je m'aperçois qu'à cause des différents chgts, des
% sous-sections devenant des sections etc... \thisspecialstats ici ne
% faisait pas du tout des statistiques; vaut mieux supprimer et faire
% simplement \localtableofcontents pour maintenir le même layout.)

% les \clearpage sont embêtants; surtout si je prétends qu'on peut
% recompiler facilement sous d'autres conditions...

% on va plutôt faire un \vspace suffisant, cela sera un moindre mal

%\vspace{1cm}

\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{verbatim}
   < 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{verbatim}

\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{verbatim}
  \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{verbatim}


\section{A TOC with a fancy layout}

Here is  a table of contents where
the sections from a given chapter are to be represented by a number
range (like 18--22 for a given chapter, 42--49 for another one ...
of course to be inserted automatically in the TOC). 

This is not an image inclusion, the TOC is produced from its original
|tex| source inserted in this document after replacement of 
|part|, |chapter| or |section| with |dummypart|, |dummychapter| and
|dummysection| (and there is also a dummy page count).  We
copied the line styles used in the original and
displayed the table of contents following:
\begin{verbatim}
    \etocsetlevel{dummypart}  {-1} \etocsetlevel{part}   {2}
    \etocsetlevel{dummychapter}{0} \etocsetlevel{chapter}{2}
    \etocsetlevel{dummysection}{1} \etocsetlevel{section}{2}
                    \etocsetnexttocdepth{dummysection}
\end{verbatim}
Each chapter displays the numbers of only the first and the last sections it
  contains. See the
source file |etoc.dtx| for the details of how this is done. 

Another technique for doing this kind of things is explained in 
  \autoref{ssec:statistics}.  

\begingroup

    \etocsetlevel{dummypart}{-1}
    \etocsetlevel{dummychapter}{0}
    \etocsetlevel{dummysection}{1}
    \etocsetlevel{part}{2}
    \etocsetlevel{chapter}{2}
    \etocsetlevel{section}{2}

    \newif\ifextraidone
    \newif\ifextraiidone

    \etocsetstyle{dummypart}
    {}
    {}
    {\begin{center}\Large\bfseries PART \etocnumber
    \ifextraiidone\\\etocname.\fi\end{center}
    \ifextraidone\else
    \noindent\hskip.7\linewidth
        \hbox to .2\linewidth
% février (ou janvier?) 2013
% je modifie ici en ajoutant un \hss, pour compenser la plus petite
% taille de txrm. Ok.
        {\hss\small\textsc{\bfseries Sections.\hss Page.}}\par\fi
    \extraidonetrue
    }
    {}

    \newcommand\mytocleaders{\hbox to .125\linewidth{...\hss}}
    \etocsetstyle{dummychapter}
    {}
    {\par\noindent\etocifnumbered
        {\makebox[.15\linewidth][r]{\bfseries\etocnumber.}}
        {\hspace*{.15\linewidth}}}
    {\hbox to .65\linewidth
        {\hspace{1em}\etocname\leaders\mytocleaders\hss}%
     \hskip-.1\linewidth
     \hbox to .2\linewidth{\hspace{1.5em}...\hss
                    \etocifnumbered
                        {\etocpage}
                        {\ifextraiidone\else\etocpage\fi}}%
     \hskip-.2\linewidth
    }
    {}

    \newbox\forsectionnumbers
    \makeatletter
% 21 février 2013: je rajoute \color@begingroup et \color@endgroup
    \etocsetstyle{dummysection}
    {\setbox\forsectionnumbers=\hbox to .1\linewidth
        \bgroup\color@begingroup\hss\etocskipfirstprefix}
    {\@gobble}
    {\etocnumber---}
    {\etocnumber\color@endgroup\egroup
    % for reasons I do not quite understand, in some pdf viewers the dots
    % do not completely disappear if here \fboxsep0pt is used.
    % (problèmes liés à l'anti-aliasing, sur Mac OS X, Skim, Preview...)
    % (j'ai maintenu ici la méthode de mon post sur stackexchange, mais
    %  sans doute je pourrais réfléchir à une autre façon évitant d'avoir à
    %  « effacer ») 
        \fboxsep=.5pt\colorbox{white}{\box\forsectionnumbers}\par
        \ifextraiidone\else
            \begin{center}\bfseries Concord.\end{center}
            \noindent\makebox[.15\linewidth][r]{\textsc{\bfseries Lesson.}}\par
        \fi\extraiidonetrue
    }
    \makeatother

    \renewcommand{\etocinnertopsep}{0pt}

    \etocruledstyle[1]{%
        \parbox{\linewidth}{%
            \centering
            \textsc{\bfseries\LARGE\MakeUppercase{Table of Contents}}\\
            \rule{.2\linewidth}{2pt}}%
    }
        
    \etocsetnexttocdepth{dummysection}

    \tableofcontents
   
\makeatletter
    \def\adddummysection {\stepcounter{dummysection}%
      \addtocontents {toc}{\protect\contentsline 
          {dummysection}{\protect\numberline{\thedummysection}}%
                   {\the\dummypage }%
     %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX
     {\@currentHref }%
     %\fi
     }}
 
    \def\adddummychapter #1{\stepcounter{dummychapter}%
      \advance\dummypage2
      \addtocontents {toc}{\protect\contentsline 
          {dummychapter}{\protect\numberline{\thedummychapter}#1}%
                   {\the\dummypage }%
     %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX
     {\@currentHref }%
     %\fi
     }}


    \def\adddummychapno #1{\advance\dummypage2
      \addtocontents {toc}{\protect\contentsline 
          {dummychapter}{#1}{\the\dummypage }%
     %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX
     {\@currentHref }%
     %\fi
     }}

    \def\adddummypart #1{\stepcounter{dummypart}%
       \advance\dummypage4
       \addtocontents {toc}{\protect\contentsline 
          {dummypart}{\protect\numberline{\Roman{dummypart}}#1}%
                     {\the\dummypage }%
     %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX
     {\@currentHref }%
     %\fi
     }}
\makeatother
    
    \newcount\dummypage \dummypage-1

    \adddummypart {}
    
    \adddummychapno {Introductory}

    \newcount\tempcount

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<8
    \repeat

    \adddummychapter {Concord of Subject and Verb}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<17
    \repeat

    \adddummychapter {Concord of Substantive and Adjective}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<22
    \repeat

    \adddummychapno {Concord of Relative and its Antecedent}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<25
    \repeat

    \adddummypart {Government}

    \adddummychapter {The Accusative Case}

    \adddummychapno {General uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<30
    \repeat

    \adddummychapno {Particular uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<37
    \repeat

    \adddummychapter {Verbs governing two Accusatives}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<41
    \repeat

    \adddummychapter {The Causal}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<49
    \repeat

    \adddummychapter {The Instrumental Case}

    \adddummychapno {General uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<54
    \repeat

    \adddummychapno {Particular uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<59
    \repeat

    \adddummychapter {The Dative Case}

    \adddummychapno {General uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<65
    \repeat

    \adddummychapno {Particular uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<71
    \repeat

    \adddummychapter {The Ablative Case}

    \adddummychapno {General uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<75
    \repeat

    \adddummychapno {Particular uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<86
    \repeat

    \adddummychapter {The Locative Case}

    \adddummychapno {General uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<92
    \repeat

    \adddummychapno {Particular uses}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<100
    \repeat
\endgroup

\section{Another compatibility mode}

As explained in \autoref{ssub: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. One puts in the preamble:
\begin{verbatim}
\makeatletter
\newcommand{\MyStandardTOC}{%
  \begingroup
  \let\savedpartline\l@part
  \let\savedchapterline\l@chapter  %% remove if article/scrartcl class
  \let\savedsectionline\l@section
  \let\savedsubsectionline\l@subsection 
  % and so on if \subsubsection, etc... is used
  % 
  % for the book or article classes:
  \etocsetstyle{part}{}{}
    {\savedpartline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}%
  % for the scrbook or scrartcl classes:
  \etocsetstyle{part}{}{}
    {\savedpartline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
  % identical in book/article/scrbook/scrartcl classes:
  \etocsetstyle{chapter}{}{}   %%% only for book and scrbook
    {\savedchapterline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
  \etocsetstyle{section}{}{} 
    {\savedsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
  \etocsetstyle{subsection}{}{}
    {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
  % etc... if further sectioning units are used
  % (see the text for what to do with the memoir class)
  \etocstandarddisplaystyle % this is for the title, page-marks, etc...
  \tableofcontents     
  \endgroup}
\makeatother
\end{verbatim}
Of course 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 needs a bit more: each of the command \csa{booknumberline},
\csa{partnumberline} and \csa{chapternumberline} will have to be saved with a
\csa{let}, and, one then specifies:
\centeredline{%
\csa{etocsetstyle\{chapter\}\{\}\{\}\{\string\savedchapterline\{%
\string\savedchapternumberline}}
\hbox to \linewidth{\hfil\hfil \ttfamily 
        \{\csa{etocnumber}\}\csa{etocname}\}\{\csa{etocpage}\}\}\{\}\hfil} 
(and analogously for |part|, respectively |book|).}
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{verbatim}
\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}
       {}{}
       {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}
       {}%
    \fi} 
  {\savedsectionline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}}
  {}%
\end{verbatim}

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{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|.


% 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).

\newcommand*\PrepareSectionNode{%
  \tmptok {\centering\bfseries}%
  \appendtotok\tmptok\etocthelinkedname
  \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% 
}

% 7 mars: j'utilise maintenant \etocthelinkedname
\newcommand*{\PrepareSubsectionNode}{%
  \tmptok {\raggedright}%  j'ai essayé aussi avec \sloppy
  \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{ ]}}


% 11 octobre
% forest ne veut pas @\the\treetok avec un \treetok vide, donc
% il faut lui donner une valeur par défaut.
\treetok{[{run latex again}]}

% 12 octobre
% pour que varioref fonctionne bien, je dois mettre la \tableofcontents
% au plus près de l'environnement forest

\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}}{},
                  % je trouve ce truc pour une position absolue. OK!
                  rectangle, thick, fill=cyan!5, inner sep=6pt,
     @\the\treetok 
     \end{forest}
     \centeredline{A table of contents displayed as a |forest| tree.}
\end{figure}


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:
\begin{verbatim}
\newtoks\treetok
\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]{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{verbatim}

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{verbatim}
% \newtoks\treetok % already done earlier
\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{ ;}}

% moved to the inside of the figure environment for correct \pageref{toc:molecule}
% \etocsetnexttocdepth{subsection}
% \tableofcontents \label{toc:molecule} \ref{toc:overview}
\end{verbatim}

% \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}%
  \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}[th!]\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{A table of contents as a ``molecule.''}
\end{figure}

% 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 (for the label of the
table of contents to certainly
refer 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}. Here is the code actually
producing it:
\begin{verbatim}
\begin{figure}[th!]\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{verbatim}

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.}


\begingroup
%\newtoks\treetok
%\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}}

\renewcommand*{\appendchildtree}[3]{% 
% this is to construct "t1 child [branch color= #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 [branch color = #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.
  {\ifcase\pseudomodthree{\value{partco}}%
   \or \appendchildtree\treetok\parttok {teal!60}%   first
   \or \appendchildtree\treetok\parttok {yellow!80}% second
   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
   \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 {teal!60}%   first
   \or \appendchildtree\treetok\parttok {yellow!80}% second
   \else\appendchildtree\treetok\parttok {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}   {section}
\etocsettagdepth {arbitrarily}{part}
\etocsettagdepth {surprising} {section}
\etocsettagdepth {linestyles} {part}
\etocsettagdepth {globalcmds} {section}
\etocsettagdepth {custom}     {section}
\etocsettagdepth {tips}       {section}
\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}[th!]
\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=45, text width=3cm},
                    level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm},
                    level 1 concept/.append style={font=\normalsize},
                    ]
\the\treetok
\end{tikzpicture}}}
\end{figure}
\endgroup

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}.

\begin{verbatim}
\begingroup
\newtoks\treetok
\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}}

\renewcommand*{\appendchildtree}[3]{% 
% this is to construct "t1 child [branch color= #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 [branch color = #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.
  {\ifcase\pseudomodthree{\value{partco}}%
   \or \appendchildtree\treetok\parttok {teal!60}%   first
   \or \appendchildtree\treetok\parttok {yellow!80}% second
   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
   \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 {teal!60}%   first
   \or \appendchildtree\treetok\parttok {yellow!80}% second
   \else\appendchildtree\treetok\parttok {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}   {section}
\etocsettagdepth {arbitrarily}{part}
\etocsettagdepth {surprising} {section}
\etocsettagdepth {linestyles} {part}
\etocsettagdepth {globalcmds} {section}
\etocsettagdepth {custom}     {section}
\etocsettagdepth {tips}       {section}
\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}[th!]
\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=45, text width=3cm},
                    level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm},
                    level 1 concept/.append style={font=\normalsize},
                    ]
\the\treetok
\end{tikzpicture}}}
\end{figure}
\endgroup
\end{verbatim}

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.


\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 use the  |\\| at
  the start of the \meta{prefix} or \meta{contents}
  specifications to close the \emph{previous} row, not at the end
  to close the \emph{current} row; when the TOC is a partial one (a
  \csa{localtableofcontents}) this advice becomes (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.

\begingroup
\etocglobaldefs % necessary for \etocthename 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\MakeUppercase{\contentsname}}%
     }
    {\\\hline\end{longtable}}

\etocsetnexttocdepth {subsection}

\tableofcontents
\endgroup

\begin{verbatim}
\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{verbatim}

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 many cases one may indeed construct
TOC-as-tables with the |\\| located at the end of the style
specifications (but almost never for a \csa{localtableofcontents}).
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 to start with an |\\| each line style
specification. 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, thus the
section which are first of their kind used the \csb{etociffirst}
conditional branching. 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{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}

\begin{verbatim}
\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{verbatim}

\subsection{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 seen here with TOC as tables, but also
with |enumitem| \emph{inline} variants of its standard environments, because
the command |\item| then closes a group.

After \csb{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 \csb{etoclocaldefs}. Note that both
\csb{etocglobaldefs} and \csb{etoclocaldefs} actions are local to the
environment or group where they are used.


\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} command}
\label{etocsetstyle}

\subsection{The \csbhyp{etocname} and \csbhyp{etocpage} commands}
\label{etocname}
\label{etocpage}

Let us explain how \etoc was used to produce the table of
contents displayed at the beginning of this second part.
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{verbatim}
\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{verbatim}
\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}.)

\subsection{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.


\subsection{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|.


\subsection{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.


\subsection{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|.

\subsection{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.

\subsection{The \csbhyp{etocthelinkedname}, \csbhyp{etocthelinkednumber},
\csbhyp{etocthelinkedpage} and \csbhyp{etocthelink} commands}
\label{etocthelinkedname}
\label{etocthelinkednumber}
\label{etocthelinkedpage}
\label{etocthelink}


This is for advanced uses by advanced users. 
The \csa{etocthename} macro has
been mentioned before; using it in instructions such as
|\global\let\lastone\etocthename| in an \etoc line style will
define the macro |\lastone| to expand to the last name seen at the
corresponding level. But no facilities was previously available to
do the same with the link data.

The package provides since |1.07f 2013/03/07| \csa{etocthelinkedname} to do
the similar thing, with the link data included. It was used in this
documentation when doing the \hyperref[tocastree]{examples with trees}.

Also provided with the similar goal: \csa{etocthelinkednumber},
\csa{etocthelinkedpage} (which contains a link only if |hyperref|
added one to the page number) and \csa{etocthelink}\marg{linkname}
which allows to make a link with an arbitrary name.

All these commands are fragile. In fact starting with |1.08a|, \csa{etocname}
is exactly the robust variant of \csa{etocthelinkedname}.

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. And there is no need
anymore here for \csa{etocthelinkedname}, \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{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{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}
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.

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} uses
|\section*{\contentsname}| (and puts marks in the page) whereas
\csa{etocbookstyle} uses |\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{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 is \csb{etocaftercontentshook}, similarly defined to do
nothing. And \csb{etocbeforetitlehook} is also initially defined to do
nothing. They can be used for some special effects.

\section{Table of contents for this part}


\subsection{Testing the compatibility mode}

As a third example we now print the local table of contents
for this part. 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 this \autoref{part:globalcmds}.
\begin{verbatim}
\KOMAoptions{toc=left}
\etocstandarddisplaystyle % necessary for the display to obey toc=left
\etocstandardlines
\tableofcontents \ref{toc:globalcmds}
\end{verbatim}
\KOMAoptions{toc=left}
\etocstandarddisplaystyle
\etocstandardlines
\tableofcontents \ref{toc:globalcmds}

\subsection{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}).\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.}

\begin{verbatim}
\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
\normalcolor % work-around to a bug involving color and multicols (and figure)
\tableofcontents \label{toc:b} \ref{toc:globalcmds}
\end{figure}
\endgroup
\end{verbatim}


\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}{-.5\baselineskip\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
\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

\subsection{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 taste in
many matters does 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. 

\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

The code used:
\begin{verbatim}
\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
\endgroup
\end{verbatim}


\clearpage
\etocdepthtag.toc {custom}

\part{Using and customizing \etoc}
\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}

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\}|\\
      \hbox{}{\itshape\ttfamily\ \ \ \ similarly with\ }%
      \csa{etocmulticol}{\itshape\ttfamily\ etc . . . }
   }}}


\medskip 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{verbatim}
\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{verbatim}

\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

\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}
\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{verbatim}
\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{verbatim}

\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}

% 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.
\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]{}

\begin{figure}[ht!]\centering
    \tableofcontents \label{toc:clone} \ref{toc:globalcmds}
\end{figure}
\endgroup

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}

\subsection{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}


\subsection{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

\subsection{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{verbatim}
\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{verbatim}

And now, the variant with macros rather than boxes (this variant as it
stands here is for using within a section).
\begin{verbatim}
\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{verbatim}

\subsection{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:

\etocsetnexttocdepth {all}
\begingroup
\parindent 0pt
\leftskip 0cm
\rightskip 0.75cm
\parfillskip -\rightskip
\newcommand*{\EndParWithPagenoInMargin}
    {\nobreak\hfill
     \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}%
     \par}
\renewcommand*\etoctoclineleaders
    {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}}
\newcommand*{\EndParWithPagenoInMarginAndLeaders}
    {\nobreak\leaders\etoctoclineleaders\hfill
     \nobreak\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}
\etocsettagdepth {surprising} {part}
\etocsettagdepth {linestyles} {part}
\etocsettagdepth {globalcmds} {paragraph}
\etocsettagdepth {custom}     {part}
\etocsettagdepth {tips}       {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

\begin{verbatim}
\etocsetnexttocdepth {all}
\begingroup 
\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip
\newcommand*{\EndParWithPagenoInMargin}
    {\nobreak\hfill
     \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}%
     \par}
\renewcommand*\etoctoclineleaders
    {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}}
\newcommand*{\EndParWithPagenoInMarginAndLeaders}
    {\nobreak\leaders\etoctoclineleaders\hfill
     \nobreak\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}
\etocsettagdepth {surprising} {part}
\etocsettagdepth {linestyles} {part}
\etocsettagdepth {globalcmds} {paragraph}
\etocsettagdepth {custom}     {part}
\etocsettagdepth {tips}       {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{verbatim}
\endgroup

\subsection{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, or updates to certain counters, 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{verbatim}
\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{verbatim}

\subsection{Compatibility with other packages}
\label{etocaftertochook}

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.}

\begin{framed}
  One should 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}

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.

\etoc loads the package |multicol|. 

\etoc requires the |.toc| file to use the |\contentsline| macro (possibly
patched by other packages). It is thus 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.

\etoc is |hyperref| aware and hopefully |hyperref| compatible: 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.

Release |1.07k| adds 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.
\end{framed}

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.

\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\mystuff}|}
    as this will make the |\label/\ref| mechanism impossible. Rather you may do
    \centeredline{|\renewcommand\etocaftertochook{\mystuff}|} 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.)
  \end{framed}
\footnotetext{contrarily to \csa{etocaftertochook},
      \csa{etocaftercontentshook} is not executed if the |tocdepth| did not
      allow the printing of the TOC.}

  \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.

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.

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.

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{\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.

\subsection{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}

\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}}}}%
   \appendtotok\parttok\childnode }
  {}

\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 \etocDEpkgversion{} (\etocDEpkgdate )\par}}}}
  {\global\appendtotok\treetok{ ;}}

\etocinline\tableofcontents\label{toc:mindmaptitlepage}

\tikzset {branch color/.style={concept color=#1!white,
             every child/.append style={concept color=#1!white!30!white}}%
         }%

\global
\setbox\TitlePageMindmapTOC\hbox {\begingroup
\resizebox{.9\paperwidth}{!}{%
\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/8},% 8 hard-coded mais je pourrais aussi le calculer
                    level 1 concept/.append style={font=\Large, text width = 3cm},
                    level 2/.append style={level distance=12.5cm, sibling angle=360/35},% 35 hard coded mais je pourrais aussi le calculer
                    % distance par rapport au CENTRE ! (avec le code tel qu'en ce moment)
                   ]
\the\treetok
\end{tikzpicture}}\endgroup }

\endgroup

\indent\null
\begingroup
 \let\thefootnote\empty
\footnote{Erzeugt von der Quelldatei mit Zeitstempel ``\etocdtxtimestamp''.\par
    Übersetzt ins Deutsche von Felix Baral-Weber, Jenny Rothkrämer-Vogt, Daniel
    Büttner, Claudia Dahl, Christian Otto und Christine Römer (FSU Jena).
    Hinweise zur Übersetzung an Christine\_Roemer at t-online dot de.}
\endgroup
\setcounter{footnote}{0}

\AddToShipoutPictureFG*{\put(10.5cm,16.85cm)
                        {\makebox(0,0){\box\TitlePageMindmapTOC}}}


\clearpage

\etocdepthtag.toc {preamble}
%----
% MAIN TOC
%
\etocsettocdepth {subsubsection}
\etoctoclines
\etocmarkboth\contentsname
\etocmulticolstyle[1]
     {\pdfbookmark[1]{Inhaltsverzeichnis}{MAINTOC}%
      \noindent\bfseries\Large
      \leaders\hrule height1pt\hfill
      \MakeUppercase{Inhaltsverzeichnis}}
\begingroup
  \etocsetlevel{subsection}{3}
  \etocsetlevel{subsubsection}{6}
\tableofcontents \label{toc:main}
\endgroup

\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.

\section{Lizenz}

\begingroup\ttfamily\small\hyphenchar\font -1
           \parindent0pt 
           \obeyspaces\obeylines
\etocLicense\endgroup


%\clearpage % ATTENTION retiré 28 mars 2015

\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. 

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} und in \autoref{toc:allsubsections}
e\texttt{numerate}-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{ssub: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.

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.

\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 Mein erstes \etoc: TOC von
  \autoref{part:overview} (\nameref{part:overview})}
\tableofcontents \ref {toc:overview}
\endgroup

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.

\begin{verbatim}
\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{verbatim}

\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.

\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}
\etocsettagdepth {arbitrarily}{none}
\etocsettagdepth {surprising} {none}
\etocsettagdepth {linestyles} {subsection}
\etocsettagdepth {globalcmds} {subsection}
\etocsettagdepth {custom}     {none}
\etocsettagdepth {tips}       {none}
\etocsettagdepth {code}       {none}

\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
\etocsetnexttocdepth {subsection}
\tableofcontents
\endgroup

Der Code:
\begin{verbatim}
\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}
\etocsettagdepth {arbitrarily}{none}
\etocsettagdepth {surprising} {none}
\etocsettagdepth {linestyles} {subsection}
\etocsettagdepth {globalcmds} {subsection}
\etocsettagdepth {custom}     {none}
\etocsettagdepth {tips}       {none}
\etocsettagdepth {code}       {none}

\etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
\etocsetnexttocdepth {subsection}
\tableofcontents
\endgroup
\end{verbatim}

\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{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
%\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{Beschriften und anderswo wieder benutzen}

\etoc  erlaubt beliebig viele \csa{tableofcontents}"=Befehle in
ihrem Dokument. Die Zeilen- und Inhaltsangabenstile können
natürlich dazwischen geändert werden. 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. 

\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{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]{Ich bin von weit her}}}}
  \tableofcontents \label{toc:d} \ref{toc:c}
  \endgroup
\end{figure}

Wir benutzen dies:
\begin{verbatim}
\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{verbatim}
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}}

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. 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|.

\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 D.B.
  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{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).



\section{Zwei Beispiele}

\subsection{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{verbatim}
\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{verbatim}

\begingroup
\newlength{\tocleftmargin}
\setlength{\tocleftmargin}{5cm}
\newlength{\tocrightmargin}
\setlength{\tocrightmargin}{1cm}

\etocsetstyle{section}
{\addvspace{1ex}\parfillskip0pt
 \leftskip\tocleftmargin
 \rightskip\the\tocrightmargin plus 1fil
 \parindent0pt\color{cyan}}
{\bfseries\LARGE\upshape\addvspace{1ex}\leavevmode}
{\llap{Kapitel\hspace{.5em}{\etocnumber}\hspace{.75cm}}\etocname
 \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par}
{}

\etocsetstyle{subsection}
{}
{\mdseries\large\addvspace{.5ex}\leavevmode}
{\llap{\etocnumber\hspace{.75cm}}\textit{\etocname}%
 \hfill\makebox[-\tocrightmargin][l]{\makebox[0pt]{\etocpage}}\par}
{}

\def\tmptitle{Meine wunderschöne These}

\etocsettocstyle{\color{cyan}\parindent0pt\leftskip\tocleftmargin
  \leavevmode\leaders\hrule height 1pt\hfill\ 
  \huge\textit{\tmptitle}\par}{\bigskip}

\tableofcontents \ref{toc:overview}
% And again, for the fun of it:
% \def\tmptitle{My Very Beautiful Thesis}
% \tableofcontents \ref{toc:c}
\endgroup


\subsection{Ein 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}.


\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\noindent
\hbox to 1cm{\color{subsecnum}\etocnumber\hss}%
\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill
\rlap{\hbox to .5cm{\hss\etocpage\hskip.1cm}}\par
\nointerlineskip\vskip3pt}
{}

\etocsetstyle{subsection}{\etocskipfirstprefix}
{\shiftedwhiterule{1.5cm}{6pt}}
{\sffamily\small
\leftskip1.5cm\hangindent.8cm\rightskip.5cm\noindent
\hbox to .75cm{\color{subsecnum}\etocnumber\hss}%
\color{black}\etocname\leaders\hbox to .2cm{\hss.}\hfill
\rlap{\hbox to .5cm{\hss\etocpage\hskip.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}

% 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.
\etocsetstyle{section}
{\coloredstuff{blue}
     {\hfil \bfseries\large Inhalt von Teil Eins\hfil}}
{\vskip3pt\sffamily\small}
{\coloredstuff{blue}
    {\leftskip1.5cm\rightskip.5cm\parfillskip-\rightskip
     \makebox[0pt][r]{\makebox[.5cm][l]{\etocnumber}}%
     \etocname\hfill{\makebox[.5cm][r]{\etocpage\hspace{.1cm}}}}%
 \vskip6pt }
{}


% attention car \ref{toc:floating} fera référence au compteur de
% toutes les toc, pas visibletoc. 

\etocframedstyle[1]{}
\tableofcontents \label{toc:floating} \ref{toc:overview}
\vspace{-\baselineskip}
\centeredline{|\tableofcontents \ref{toc:overview}| 
(\emph{cf.} \autoref{ssec:again} and \hyperref[toc:clone]{this other toc})}
\end{figure}

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.


\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{verbatim}
 < 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{verbatim}

\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{verbatim}
 \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{verbatim}


\section{Ein TOC mit einem extravagantem Layout}

Hier ist ein Inhaltsverzeichnis, wo die Abschnitte aus einem bestimmten Kapitel
durch einen Zahlenbereich dargestellt werden sollen
(wie 18--22 bei einem bestimmten Kapitel, 42--49 für ein anderes \ldots\
natürlich in das Inhaltsverzeichnis automatisch eingefügt wurden). 

Dies ist kein Abbildungseinschluss, das Inhaltsverzeichnis wird von seiner
ursprünglichen 
|tex|-Quelle in dieses Dokument nach dem Austausch des
|Teils|, |Kapitels| oder |Abschnitts| mit |Dummy-Teil|, |Dummy-Kapitel| und
|Dummy-Abschnitt| (und da ist auch eine Dummy-Seitenzahl) produziert.  Wir
kopierten die Linienstile, wie im Original verwendet, und
das Inhaltsverzeichnis zeigt folgende Situation an:
\begin{verbatim}
    \etocsetlevel{dummypart}  {-1} \etocsetlevel{part}   {2}
    \etocsetlevel{dummychapter}{0} \etocsetlevel{chapter}{2}
    \etocsetlevel{dummysection}{1} \etocsetlevel{section}{2}
                    \etocsetnexttocdepth{dummysection}
\end{verbatim}

Jedes Kapitel zeigt die Zahl nur von dem ersten und dem letzten Abschnitt an.
Siehe in der Quelldatei |etoc.dtx| für die Details nach, wie das gemacht wird.

Eine andere Technik für diese Art der Dinge erläutert 
  \autoref{ssec:statistics}.  

\begingroup

    \etocsetlevel{dummypart}{-1}
    \etocsetlevel{dummychapter}{0}
    \etocsetlevel{dummysection}{1}
    \etocsetlevel{part}{2}
    \etocsetlevel{chapter}{2}
    \etocsetlevel{section}{2}

    \newif\ifextraidone
    \newif\ifextraiidone

    \etocsetstyle{dummypart}
    {}
    {}
    {\begin{center}\Large\bfseries TEIL \etocnumber
    \ifextraiidone\\\etocname.\fi\end{center}
    \ifextraidone\else
    \noindent\hskip.7\linewidth
        \hbox to .2\linewidth
% février (ou janvier?) 2013
% je modifie ici en ajoutant un \hss, pour compenser la plus petite
% taille de txrm. Ok.
       {\hss\small\textsc{\bfseries Kapitel.\hss Seite.}}\par\fi
    \extraidonetrue
    }
    {}

    \newcommand\mytocleaders{\hbox to .125\linewidth{...\hss}}
    \etocsetstyle{dummychapter}
    {}
    {\par\noindent\etocifnumbered
        {\makebox[.15\linewidth][r]{\bfseries\etocnumber.}}
        {\hspace*{.15\linewidth}}}
    {\hbox to .65\linewidth
        {\hspace{1em}\etocname\leaders\mytocleaders\hss}%
     \hskip-.1\linewidth
     \hbox to .2\linewidth{\hspace{1.5em}...\hss
                    \etocifnumbered
                        {\etocpage}
                        {\ifextraiidone\else\etocpage\fi}}%
     \hskip-.2\linewidth
    }
    {}

    \newbox\forsectionnumbers
    \makeatletter
% 21 février 2013: je rajoute \color@begingroup et \color@endgroup
    \etocsetstyle{dummysection}
    {\setbox\forsectionnumbers=\hbox to .1\linewidth
        \bgroup\color@begingroup\hss\etocskipfirstprefix}
    {\@gobble}
    {\etocnumber---}
    {\etocnumber\color@endgroup\egroup
    % for reasons I do not quite understand, in some pdf viewers the dots
    % do not completely disappear if here \fboxsep0pt is used.
    % (problèmes liés à l'anti-aliasing, sur Mac OS X, Skim, Preview...)
    % (j'ai maintenu ici la méthode de mon post sur stackexchange, mais
    %  sans doute je pourrais réfléchir à une autre façon évitant d'avoir à
    %  « effacer ») 
        \fboxsep=.5pt\colorbox{white}{\box\forsectionnumbers}\par
        \ifextraiidone\else
            \begin{center}\bfseries Kongruenz.\end{center}
            \noindent\makebox[.15\linewidth][r]{\textsc{\bfseries Übung.}}\par
        \fi\extraiidonetrue
    }
    \makeatother

    \renewcommand{\etocinnertopsep}{0pt}

    \etocruledstyle[1]{%
        \parbox{\linewidth}{%
            \centering
            \textsc{\bfseries\LARGE\MakeUppercase{Inhaltsverzeichnis}}\\
            \rule{.2\linewidth}{2pt}}%
    }
        
    \etocsetnexttocdepth{dummysection}

    \tableofcontents
   
\makeatletter
    \def\adddummysection {\stepcounter{dummysection}%
      \addtocontents {toc}{\protect\contentsline 
          {dummysection}{\protect\numberline{\thedummysection}}%
                   {\the\dummypage }%
     %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX
     {\@currentHref }%
     %\fi
     }}
 
    \def\adddummychapter #1{\stepcounter{dummychapter}%
      \advance\dummypage2
      \addtocontents {toc}{\protect\contentsline 
          {dummychapter}{\protect\numberline{\thedummychapter}#1}%
                   {\the\dummypage }%
     %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX
     {\@currentHref }%
     %\fi
     }}

    \def\adddummychapno #1{\advance\dummypage2
      \addtocontents {toc}{\protect\contentsline 
          {dummychapter}{#1}{\the\dummypage }%
     %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX
     {\@currentHref }%
     %\fi
     }}

    \def\adddummypart #1{\stepcounter{dummypart}%
       \advance\dummypage4
       \addtocontents {toc}{\protect\contentsline 
          {dummypart}{\protect\numberline{\Roman{dummypart}}#1}%
                     {\the\dummypage }%
     %\ifEtoc@hyperref ou \ifdefined\hyperref si e-TeX
     {\@currentHref }%
     %\fi
     }}
\makeatother
    
    \newcount\dummypage \dummypage-1

    \adddummypart {}
    
    \adddummychapno {Einleitung}

    \newcount\tempcount

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<8
    \repeat

    \adddummychapter {Kongruenz von Subjekt und Verb}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<17
    \repeat

    \adddummychapter {Kongruenz von Substantiven und Adjektiven}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<22
    \repeat

    \adddummychapno {Kongruenz von Relativen und Antezendenten}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<25
    \repeat

    \adddummypart {Government}

    \adddummychapter {Der Akkusativ}

    \adddummychapno {Allgemeine Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<30
    \repeat

    \adddummychapno {Besondere Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<37
    \repeat

    \adddummychapter {Verbrektion über zwei Akkusative}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<41
    \repeat

    \adddummychapter {Der Kausativ}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<49
    \repeat

    \adddummychapter {Der Instrumental}

    \adddummychapno {Allgemeine Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<54
    \repeat

    \adddummychapno {Besondere Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<59
    \repeat

    \adddummychapter {Der Dativ}

    \adddummychapno {Allgemeine Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<65
    \repeat

    \adddummychapno {Besondere Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<71
    \repeat

    \adddummychapter {Der Ablativ}

    \adddummychapno {Allgemeine Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<75
    \repeat

    \adddummychapno {Besondere Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<86
    \repeat

    \adddummychapter {Der Lokativ}

    \adddummychapno {Allgemeine Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<92
    \repeat

    \adddummychapno {Besondere Anwendungen}

    \loop\advance\tempcount by 1
    \adddummysection
    \ifnum\tempcount<100
    \repeat
\endgroup

\section{Ein weiterer Kompatibilitätsmodus}

Wie in \autoref{ssub: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. Man nimmt in die Präambel:
\begin{verbatim}
\makeatletter
\newcommand{\MyStandardTOC}{%
  \begingroup
  \let\savedpartline\l@part
  \let\savedchapterline\l@chapter  %% remove if article/scrartcl class
  \let\savedsectionline\l@section
  \let\savedsubsectionline\l@subsection 
  % and so on if \subsubsection, etc... is used
  % 
  % for the book or article classes:
  \etocsetstyle{part}{}{}
    {\savedpartline{\etocnumber\hspace{1em}\etocname}{\etocpage}}{}%
  % for the scrbook or scrartcl classes:
  \etocsetstyle{part}{}{}
    {\savedpartline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
  % identical in book/article/scrbook/scrartcl classes:
  \etocsetstyle{chapter}{}{}   %%% only for book and scrbook
    {\savedchapterline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
  \etocsetstyle{section}{}{} 
    {\savedsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
  \etocsetstyle{subsection}{}{}
    {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}{}%
  % etc... if further sectioning units are used
  % (see the text for what to do with the memoir class)
  \etocstandarddisplaystyle % this is for the title, page-marks, etc...
  \tableofcontents     
  \endgroup}
\makeatother
\end{verbatim}
Natürlich ist es so, 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{Für die
|memoir|-Klasse braucht man ein bisschen mehr: Jeder der Befehle
\csa{booknumberline}, 
\csa{partnumberline} und \csa{chapternumberline} müssen in ein
\csa{let} gebettet werden und sie ergeben dann ein:
\centeredline{%
\csa{etocsetstyle\{chapter\}\{\}\{\}\{\string\savedchapterline\{%
\string\savedchapternumberline}}
\hbox to \linewidth{\hfil\hfil \ttfamily 
        \{\csa{etocnumber}\}\csa{etocname}\}\{\csa{etocpage}\}\}\{\}\hfil} 
(und analog für |part| und |book|).}
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{verbatim}
\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}
       {}{}
       {\savedsubsectionline{\numberline{\etocnumber}\etocname}{\etocpage}}
       {}%
    \fi} 
  {\savedsectionline{\numberline{{\color{cyan}\etocthenumber}}\etocname}{\etocpage}}
  {}%
\end{verbatim}

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.

\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).} 

\textbf{UEBERSETZUNG NOETIG}
\begin{otherlanguage}{english}
  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.
\end{otherlanguage}
% ALT:
% Die Hyper-Link-Informationen von \etoc setzen innen
% \csa{etocname}, etc. \ldots, aber es ist nur ein Zeiger, nicht lagerungsfähig
% für die spätere Verwendung; aber das Paket bietet \csa{etocthelinkednumber},
% \csa{etocthelinkedname} und \csa{etocthelinkedpage}, deren Inhalte enthalten den
% Hyper-Link in einer Form, die gespeichert und später wiederverwendet werden
% können.

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.
\newtoks\treetok
\newtoks\tmptok

% \newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands once #2
%   #1\expandafter\expandafter\expandafter
%     {\expandafter\the\expandafter #1#2}}


% 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).

\newcommand*\PrepareSectionNode{%
  \tmptok {\centering\bfseries}%
  \appendtotok\tmptok\etocthelinkedname
  \edef\foresttreenode{ [{\noexpand\parbox{2cm}{\the\tmptok}}}% 
}

% 7 mars: j'utilise maintenant \etocthelinkedname
\newcommand*{\PrepareSubsectionNode}{%
  \tmptok {\raggedright}%  j'ai essayé aussi avec \sloppy
  \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{ ]}}


% 11 octobre
% forest ne veut pas @\the\treetok avec un \treetok vide, donc
% il faut lui donner une valeur par défaut.
\treetok{[{run latex again}]}

% 12 octobre
% pour que varioref fonctionne bien, je dois mettre la \tableofcontents
% au plus près de l'environnement forest

\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}}{},
                  % je trouve ce truc pour une position absolue. OK!
                  rectangle, thick, fill=cyan!5, inner sep=6pt,
     @\the\treetok 
     \end{forest}
     \centeredline{Ein Inhalsverzeichnis in Form eines |forest|"=Baums.}
\end{figure}

Der resultierende Baum wird in einem \hyperref[toc:forest]{Puffer} angelegt, welcher
\vpageref[oben]{toc:forest} erscheint. Hier ist der zur Herstellung notwendige Code:
\begin{verbatim}
\newtoks\treetok
\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}[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{verbatim}

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.

\begin{verbatim}
% \newtoks\treetok % already done earlier
\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{ ;}}

% moved to the inside of the figure environment for correct \pageref{toc:molecule}
% \etocsetnexttocdepth{subsection}
% \tableofcontents \label{toc:molecule} \ref{toc:overview}
\end{verbatim}

\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}%
  \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]{Überblick}}}}
  {\global\appendtotok\treetok{ ;}}

\begin{figure}[th!]\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}

% 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}. Hier ist der aktuelle, tatsächlich produzierte
Code:
\begin{verbatim}
\begin{figure}[th!]\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{verbatim}

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}

\textbf{UEBERSETZUNG NOETIG}

\begin{otherlanguage}{english}
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.}

\begingroup
%\newtoks\treetok
%\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}}

\renewcommand*{\appendchildtree}[3]{% 
% this is to construct "t1 child [branch color= #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 [branch color = #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.
  {\ifcase\pseudomodthree{\value{partco}}%
   \or \appendchildtree\treetok\parttok {teal!60}%   first
   \or \appendchildtree\treetok\parttok {yellow!80}% second
   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
   \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 {teal!60}%   first
   \or \appendchildtree\treetok\parttok {yellow!80}% second
   \else\appendchildtree\treetok\parttok {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}   {section}
\etocsettagdepth {arbitrarily}{part}
\etocsettagdepth {surprising} {section}
\etocsettagdepth {linestyles} {part}
\etocsettagdepth {globalcmds} {section}
\etocsettagdepth {custom}     {section}
\etocsettagdepth {tips}       {section}
\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}[th!]
\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=45, text width=3cm},
                    level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm},
                    level 1 concept/.append style={font=\normalsize},
                    ]
\the\treetok
\end{tikzpicture}}}
\end{figure}
\endgroup

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}.

\begin{verbatim}
\begingroup
\newtoks\treetok
\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}}

\renewcommand*{\appendchildtree}[3]{% 
% this is to construct "t1 child [branch color= #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 [branch color = #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.
  {\ifcase\pseudomodthree{\value{partco}}%
   \or \appendchildtree\treetok\parttok {teal!60}%   first
   \or \appendchildtree\treetok\parttok {yellow!80}% second
   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
   \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 {teal!60}%   first
   \or \appendchildtree\treetok\parttok {yellow!80}% second
   \else\appendchildtree\treetok\parttok {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}   {section}
\etocsettagdepth {arbitrarily}{part}
\etocsettagdepth {surprising} {section}
\etocsettagdepth {linestyles} {part}
\etocsettagdepth {globalcmds} {section}
\etocsettagdepth {custom}     {section}
\etocsettagdepth {tips}       {section}
\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}[th!]
\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=45, text width=3cm},
                    level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm},
                    level 1 concept/.append style={font=\normalsize},
                    ]
\the\treetok
\end{tikzpicture}}}
\end{figure}
\endgroup
\end{verbatim}

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.

\end{otherlanguage}


\section{Das TOC als eine Tabelle}
\label{sec:tocastable}

\textbf{UEBERSETZUNG NOETIG}
\begin{otherlanguage}{english}
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 use the  |\\| at
  the start of the \meta{prefix} or \meta{contents}
  specifications to close the \emph{previous} row, not at the end
  to close the \emph{current} row; when the TOC is a partial one (a
  \csa{localtableofcontents}) this advice becomes (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.
\end{otherlanguage}

\begingroup
\etocglobaldefs
\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\MakeUppercase{\contentsname}}%
     }
    {\\\hline\end{longtable}}
\etocsetnexttocdepth {subsection}
\tableofcontents
\endgroup

\begin{verbatim}
UEBERSETZUNG NOETIG
\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 TABLE OF CONTENTS}%
     }
    {\\\hline\end{longtable}}

\etocsetnexttocdepth {subsection}

\tableofcontents
\endgroup
\end{verbatim}

\textbf{UEBERSETZUNG NOETIG}

\begin{otherlanguage}{english}
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 many cases one may indeed construct
TOC-as-tables with the |\\| located at the end of the style
specifications (but almost never for a \csa{localtableofcontents}).
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 to start with an |\\| each line style
specification. 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, thus the
section which are first of their kind used the \csb{etociffirst}
conditional branching. 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.
\end{otherlanguage}

\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}

\begin{verbatim}
\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{verbatim}

\subsection{Die Befehle \csbhyp{etocglobaldefs} und \csbhyp{etoclocaldefs}}
\label{etocglobaldefs}
\label{etoclocaldefs}

\textbf{UEBERSETZUNG NOETIG}

\begin{otherlanguage}{english}
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 seen here with TOC as tables, but also
with |enumitem| \emph{inline} variants of its standard environments, because
the command |\item| then closes a group.

After \csb{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 \csb{etoclocaldefs}. Note that both
\csb{etocglobaldefs} and \csb{etoclocaldefs} actions are local to the
environment or group where they are used.
\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{Der \csbhyp{etocsetstyle}"=Befehl}
\label{etocsetstyle}

\subsection{Die \csbhyp{etocname}- und \csbhyp{etocpage}"=Befehle}
\label{etocname}
\label{etocpage}

Hier soll erläutert werden, wie \etoc\ dazu verwendet wurde, das
Inhaltsverzeichnis am Beginn des zweiten Teils 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{verbatim}
\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{verbatim}
\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).



\subsection{Die \csbhyp{etocskipfirstprefix} und \csbhyp{etociffirst} Befehle}
\label{etocskipfirstprefix}
\label{etociffirst}
\label{etocxiffirst}

% ALTES
% Der gewählte |subsubsection|-Stil benutzt außerdem den Befehl
% \csb{etocskipfirstprefix}, welcher -- falls verwendet -- der letzte im
% \emph{start}-Code sein \emph{muss}. Er sorgt dafür, dass der "`prefix"'-Code
% nicht für das erste Objekt ausgeführt wird.

\textbf{UEBERSETZUNG NOETIG}

\begin{otherlanguage}{english}
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.
\end{otherlanguage}


\subsection{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.

\subsection{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}|.

\textbf{UEBERSETZUNG NOETIG}

\begin{otherlanguage}{english}
The command \csb{etocifnumbered} is robust;  \csb{etocxifnumbered}
(new with |1.08|) has the same effect but is expandable.
\end{otherlanguage}

\subsection{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.


\subsection{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. 

\subsection{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. Jedoch bestand bisher keine
Möglichkeit, dass Gleiche auch für die Link"=Daten zu tun.

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.
\textbf{UEBERSETZUNG NOETIG}
\begin{otherlanguage}{english}
   In fact starting with |1.08a|, \csa{etocname}
is exactly the robust variant of \csa{etocthelinkedname}.
\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 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{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.

\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}

\textbf{UEBERSETZUNG NOETIG}
\begin{otherlanguage}{english}
  These are the commands used internally by \etoc in compatibility mode
  depending on the document class. For example \csa{etocarticlestyle} uses
  |\section*{\contentsname}| (and puts marks in the page) whereas
  \csa{etocbookstyle} uses |\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.
\end{otherlanguage}

\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{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 noch \csb{etocaftercontentshook}, ähnlich definiert, um
nichts zu tun. Es gibt auch \csb{etocbeforetitlehook}: es ist definiert
um nichts zu tun. Beide können für einige spezielle Effekte genutzt
werden.


\section{Das In\-halts\-ver\-zeic\-hnis von die\-sem Teil}

\subsection{Über\-prü\-fen des Kom\-pa\-tibilitäts\-modus}

Als drittes 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}
\KOMAoptions{toc=left}
\etocstandarddisplaystyle % wird benötigt, damit toc=left gilt
\etocstandardlines
\tableofcontents \ref{toc:globalcmds}
\end{verbatim}
\KOMAoptions{toc=left}
\etocstandarddisplaystyle
\etocstandardlines
\tableofcontents \ref{toc:globalcmds}

\subsection{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{verbatim}
\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
\normalcolor % Workaround für einen Bug von color und multicols (und figure)
\tableofcontents \label{toc:b} \ref{toc:globalcmds}
\end{figure}
\endgroup
\end{verbatim}


\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}{-.5\baselineskip\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
\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

\subsection{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. 

\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 \label{toc:crazyinline}
\endgroup

Zur Erzeugung dieses Inhaltsverzeichnisses wurde folgender Code genutzt:
\begin{verbatim}
\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{verbatim}


\clearpage
\etocdepthtag.toc {custom}

\part{\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\}|\\
      \hbox{}{\itshape\ttfamily\ \ \ \  \ }%
      \csa{etocmulticol}{\itshape\ttfamily, etc. funktionieren ähnlich}
   }}}


\medskip 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{verbatim}
\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}% UEBERSETZUNG NOETIG
% <1.08b had \partname by default but this does not work well with frenchb
% hence the default is now simply Part. Here we can use \partname or Teil.
\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{verbatim}

\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
\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

\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}
\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}  % 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. UEBERSETZUNG NOETIG.
\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{verbatim}
\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{verbatim}

\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}

% 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.
\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]{}

\begin{figure}[ht!]\centering
    \tableofcontents \label{toc:clone} \ref{toc:globalcmds}
\end{figure}
\endgroup

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}

\subsection{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}


\subsection{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

\subsection{Sta\-ti\-sti\-ken 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{verbatim}
\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{verbatim}

Und nun, die Variante mit Makros anstelle von der mit Boxen (diese Variante
steht hier für die Verwendung in einem Kapitel).
\begin{verbatim}
\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{verbatim}

\subsection{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:

\etocsetnexttocdepth {all}
\begingroup
\parindent 0pt
\leftskip 0cm
\rightskip 0.75cm
\parfillskip -\rightskip
\newcommand*{\EndParWithPagenoInMargin}
    {\nobreak\hfill
     \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}%
     \par}
\renewcommand*\etoctoclineleaders
    {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}}
\newcommand*{\EndParWithPagenoInMarginAndLeaders}
    {\nobreak\leaders\etoctoclineleaders\hfill
     \nobreak\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}
\etocsettagdepth {surprising} {part}
\etocsettagdepth {linestyles} {part}
\etocsettagdepth {globalcmds} {paragraph}
\etocsettagdepth {custom}     {part}
\etocsettagdepth {tips}       {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]{Ein TOC -- nehmend tiefe Tags}}}
\sloppy
\tableofcontents

\begin{verbatim}
\etocsetnexttocdepth {all}
\begingroup 
\parindent 0pt \leftskip 0cm \rightskip .75cm \parfillskip -\rightskip
\newcommand*{\EndParWithPagenoInMargin}
    {\nobreak\hfill
     \nobreak\makebox[0.75cm][r]{\mdseries\normalsize\etocpage}%
     \par}
\renewcommand*\etoctoclineleaders
    {\hbox{\normalfont\normalsize\hbox to .75ex {\hss.\hss}}}
\newcommand*{\EndParWithPagenoInMarginAndLeaders}
    {\nobreak\leaders\etoctoclineleaders\hfill
     \nobreak\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}
\etocsettagdepth {surprising} {part}
\etocsettagdepth {linestyles} {part}
\etocsettagdepth {globalcmds} {paragraph}
\etocsettagdepth {custom}     {part}
\etocsettagdepth {tips}       {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{verbatim}
\endgroup

\subsection{Das TOC als eine Tabelle setzend (die alte Weise)}
\label{ssec:tocastableold}

%%% ALT TEXT:
% Tabellenzellen erstellen Gruppen; Definitionen von |\etocname|, |\etocnumber|,
% |\etocpage| sind lokal gemacht, also wenn die erste Zelle einer Zeile ist, wo
% die |.toc|-Dateizeile gelesen wird und|\etocname| und |\etocnumber| definiert
% wird, werden diese Definitionen nach dem Tabularzeichen |&|
% verloren gehen. Der 
% Quellcode von \etoc beginnt, die "`Anfangs"'- und "`End"'teile der Linienstile
% zu öffnen oder Gruppen zu schließen, durch ein |&| beispielsweise im
% "`Präfix"'-Teil des Linienstils ist nicht zu erwarten.

% Weiterhin, ähnlich sieht die Sache der Neudefinition von |\contentsline|, made
% by \etoc , aus, jedesmal wird ein TOC gesetzt. Es wird nach dem
% ersten Argument 
% getan, wenn \csb{etocsettocstyle} ausgeführt wurde, weil, wenn dieses Argument
% eine Tabelle öffnet, die |etoc|-Neudefintion der |\contentsline| in die erste
% Zelle der ersten Zeile getan werden will und danach verloren geht.

% So, mit dem Öffnen und Schließen mit |\etocsettocstyle| und dem
% Nehmen von |&| | 
% und | innerhalb eines Level-Stils, kann man nicht direkt ein TOC
% in eine Tabelle 
% setzen.

% Der \etoc -Quellcode könnte geändert werden, zu machen Modifizierungen von
% einigen relevanten globalen Definitionen, aber ich habe mich dagegen
% entschieden. Setzen als eine |tabular| (oder später als |longtable|) wird nur
% fortgeschrittene Anwendern gesucht und fortgeschrittene Anwender können die
% Technik einsetzen, die in \autoref{tocastree} erklärt wurden. Hier ist ein
% Beispiel mit einem vollverlinkten Inhaltsverzeichnis. Der Code kommt nach der
% Tabelle.


\textbf{UEBERSETZUNG NOETIG}

\begin{otherlanguage}{english}
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, or updates to certain counters, 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}.
\end{otherlanguage}


\begin{verbatim}
\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{verbatim}

\subsection{Kompatibilität mit anderen Paketen}
\label{etocaftertochook}

% JFBU modifiziert Januar 23, 2015
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.} 

\begin{framed}
  Man sollte \etoc \emph{nach} \texttt{babel} laden.
\end{framed}

  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 lädt das Paket |multicol|. 

\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. 
\textbf{UEBERSETZUNG NOETIG}
\begin{otherlanguage}{english}
  \etoc requires the |.toc| file to use the |\contentsline| macro (possibly
  patched by other packages). It is thus 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.
\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.

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}

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.

\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.}

\etoc zu verwenden, kann unvereinbar sein mit dem Paket
|tocvsec2|\footnote{\url{http://ctan.org/pkg/tocvsec2}}; jetzt lebt es ,
sortierend, wie es deaktiviert die Modifikationen des |\tableofcontents| durch
|tocvsec2| (getan im Stile von oben) und es kanzelt auch andere |toc|-bezogene
Macros, aber es reimplantiert partiell ihre Funktionalität mit
\csb{etocsettocdepth.toc}. In der Art und Weise, die letzten beiden \LaTeX-Läufe
sind für das erneute Nehmen des Befehls in einem Dokument notwendig, um einen
Effekt im Inhaltsverzeichnis zu haben.
  
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.

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.

\textbf{UEBERSETZUNG NOETIG}

\begin{otherlanguage}{english}
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.
\end{otherlanguage}

\subsection{\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.

\subsection{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}

\section{Zeitstempel}

Dies ist die deutsche Dokumentation von \texttt{\etocDEdocdate}, erzeugt von der
Quelldatei mit dem Stempel \texttt{\etocdtxtimestamp}. Die dokumentierte
Paketversion ist \texttt{\etocDEpkgversion} 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
  \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.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 \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.

   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 four times latex on etoc.tex, then dvipdfmx on etoc.dvi.\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 latex thrice on etoc-DE.tex
     then dvipdfmx on etoc-DE.dvi\endgraf
     \medskip
     (ignore dvipdfmx warnings, or, in case of problems caused by an old version
     of dvipdfmx, set \string\Withdvipdfmx\space to 0 in etoc.tex or
     etoc-DE.tex, to compile with pdflatex)\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 viermal latex mit etoc.tex, dann dvipdfmx mit etoc.dvi.\endgraf
     \medskip 
     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 latex dreimal mit etoc-DE.tex laufen zu lassen, dann 
     dvipdfmx mit etoc-DE.dvi.\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}}


% 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 later 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
\def\etoc@{\etoc@}
%    \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
\let\Etoc@localtop\Etoc@@minustwo@@
\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|.
%    \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{%
 \expandafter\Etoc@newlevel\csname l@#1\endcsname
 \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|.
%    \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@gobblesixorfive#1#2#3#4#5#6{}}
                           {\def\Etoc@et@hop#1#2#3#4{#2{#3}{#4}#1}%
                            \long\def\Etoc@gobblesixorfive#1#2#3#4#5{}}%
}
%    \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|.
%    \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
%    \end{macrocode}
% |2015/03/08| I move up the common assignments.
%    \begin{macrocode}
    \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}
% Heart of \etoc hack into execution of |.toc| file. It MUST be the case
% that the file contains |\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 afer 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.
%    \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
      \let\Etoc@next\relax
      \ifEtoc@stoptoc 
        \Etoc@skipthisonetrue 
      \fi
      \ifnum\Etoc@level<\Etoc@localtop 
        \def\Etoc@next{\global\Etoc@stoptoctrue}%
        \Etoc@skipthisonetrue
      \fi
      \ifEtoc@notactive
        \def\Etoc@next{\Etoc@setflags}%
        \Etoc@skipthisonetrue
      \fi
      \Etoc@next
    \fi
  \fi
  \let\Etoc@next\Etoc@gobblesixorfive
  \ifnum\c@tocdepth<\Etoc@level 
  \else 
  \ifEtoc@skipthisone
  \else
%    \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.
%    \begin{macrocode}
  \ifEtoc@standard\let\Etoc@next\@thirdofthree
  \else
%    \end{macrocode}
% |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.
%
% Versions |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.
%    \begin{macrocode}
    \Etoc@doends
%    \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|.
%    \begin{macrocode}
    \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
    \let\Etoc@next\@empty
%    \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}
%    \begin{macrocode}
    \Etoc@global\expandafter\def\expandafter\Etoc@prefix\expandafter
        {\csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname }%
    \Etoc@global\expandafter\def\expandafter\Etoc@contents\expandafter
        {\csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname }%
    \ifEtoc@skipprefix \Etoc@global\let\Etoc@prefix\@empty\fi
    \global\Etoc@skipprefixfalse
  \fi\fi\fi
%    \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@next
  \Etoc@et@hop{\Etoc@prefix\Etoc@contents}{\Etoc@savedcontentsline{#1}}%
}
%    \end{macrocode}
% |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 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.
%
% Then |1.07| added \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.08a|: I delayed from |2013/03/07| to release |1.08a| of |2015/03/13| the
% obvious decision to convert \csa{etocname}, etc ... to be the robust
% versions of \csa{etocthelinkedname}, etc ..., for sentimental reason. But
% the earlier variants contained the hyperref destination in unexpanded form.
% 
% |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.
%
% |2015/03/09|: |1.08| adds |\Etoc@global| prefix.
%
% |2015/03/13|: |1.08a| drops the original constructions of |\etocname| etc...
% which contained an unexpanded hyperref destination.
%    \begin{macrocode}
\def\Etoc@lxyz #1#2{% 
    \Etoc@global\@namedef {etoclink }{\leavevmode}%        fall-back
    \Etoc@global\let\etocthelink       \@empty  %        fall-back
    \Etoc@global\def\etocthename       {#1}%  (if link, will be removed later)
    \Etoc@global\def\etocthelinkedname {#1}%  will probably get redefined 
    \Etoc@getthepage #2\etoc@ % defines \etocthelinkedpage (and \etoclink)
    \Etoc@getnb #1\relax\relax\etoc@  % gets number *and* name, and \etoclink
    \ifEtoc@number\else               
      \ifnum\Etoc@level=\m@ne
        \Etoc@getit #1\hspace\relax\etoc@   % additional job for parts
      \fi
    \fi
    \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.
%    \begin{macrocode}
\def\Etoc@getthepage #1{%
  \let\Etoc@next\Etoc@getthepage@nohyp
  \ifEtoc@hyperref\ifx #1\hyper@linkstart
    \let\Etoc@next\Etoc@getthepage@hyp
  \fi\fi
  \Etoc@next #1%
}
\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.
%    \begin{macrocode}
\def\Etoc@getthepage@hyp #1#2#3#4#5\etoc@ {%
  \Etoc@global\@namedef{etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}%
  \Etoc@global\def\etocthepage {#4}%
  \edef\Etoc@tmp {{#3}}%
  \Etoc@global\expandafter\def\expandafter\etocthelinkedpage\expandafter
    {\expandafter\hyperlink \Etoc@tmp{#4}}%
}
%
\def\Etoc@getnb #1{%
  \let\Etoc@next\Etoc@getnb@nohyp
  \ifEtoc@hyperref\ifx #1\hyper@linkstart
    \let\Etoc@next\Etoc@getnb@hyp
  \fi\fi
  \Etoc@next #1%
}
%
\def\Etoc@getit #1{%
  \let\Etoc@next\Etoc@getit@nohyp
  \ifEtoc@hyperref\ifx #1\hyper@linkstart
    \let\Etoc@next\Etoc@getit@hyp
  \fi\fi
  \Etoc@next #1%
}
%    \end{macrocode}
% |1.08| adds the |\Etoc@global|'s.
%    \begin{macrocode}
\def\Etoc@getnb@nohyp #1#2#3\etoc@ {%
    \def\Etoc@getname ##1\relax\relax\etoc@ {%
      \Etoc@global\def\etocthename       {##1}%
      \Etoc@global\def\etocthelinkedname {##1}%
     }%
  \ifx #1\numberline
    \Etoc@global\def\etocthenumber       {#2}%
    \Etoc@global\def\etocthelinkednumber {#2}%
    \Etoc@global\Etoc@numbertrue
    \Etoc@getname #3\etoc@
  \else % then \etocthename and \etocthelinkedname already defined
    \Etoc@global\let\etocthenumber       \@empty
    \Etoc@global\let\etocthelinkednumber \@empty
    \Etoc@global\Etoc@numberfalse
  \fi
}
%    \end{macrocode}
% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds
% the |\Etoc@global|'s.
%    \begin{macrocode}
\def\Etoc@getnb@hyp #1#2#3#4#5#6\etoc@ {%
         \def\Etoc@getname ##1\relax\relax\etoc@ {%
         \Etoc@global\def\etocthename {##1}%
         \edef\Etoc@tmp   {{#3}}%
         \Etoc@global\expandafter\def\expandafter\etocthelinkedname\expandafter
                              {\expandafter\hyperlink \Etoc@tmp{##1}}%
         }%
         \def\Etoc@getnbr ##1##2##3\etoc@ {%
          \ifx ##1\numberline
            \Etoc@global\def\etocthenumber {##2}%
            \edef\Etoc@tmp   {{#3}}%
            \Etoc@global\expandafter\def\expandafter\etocthelinkednumber
                        \expandafter{\expandafter\hyperlink \Etoc@tmp{##2}}%
            \Etoc@global\Etoc@numbertrue
            \Etoc@getname ##3\etoc@
          \else
            \Etoc@global\let\etocthenumber       \@empty
            \Etoc@global\let\etocthelinkednumber \@empty
            \Etoc@global\Etoc@numberfalse
            \Etoc@global\def\etocthename {#4}%
            \edef\Etoc@tmp   {{#3}}%
            \Etoc@global\expandafter\def\expandafter\etocthelinkedname
                        \expandafter {\expandafter\hyperlink \Etoc@tmp{#4}}%
          \fi
         }%
  \Etoc@global\@namedef {etoclink }##1{\leavevmode #1{#2}{#3}{##1}#5}%
  \Etoc@global\edef\etocthelink ##1{\noexpand\hyperlink {#3}{##1}}%
  \Etoc@getnbr #4\relax\relax\etoc@
}
%    \end{macrocode}
% |1.08| adds the |\Etoc@global|'s.
%    \begin{macrocode}
\def\Etoc@getit@nohyp #1\hspace#2#3\etoc@ {%
    \def\Etoc@getname ##1\hspace\relax\etoc@ {%
       \Etoc@global\def\etocthename       {##1}%
       \Etoc@global\def\etocthelinkedname {##1}%
    }%
  \ifx\relax#2\else 
        \Etoc@global\def\etocthenumber       {#1}%
        \Etoc@global\def\etocthelinkednumber {#1}%
        \Etoc@global\Etoc@numbertrue
        \Etoc@getname #3\etoc@
  \fi
}
%    \end{macrocode}
% |1.07n| replaces use of |\toks@| by macro |\Etoc@tmp|. |1.08| adds
% the |\Etoc@global|'s.
%    \begin{macrocode}
\def\Etoc@getit@hyp #1#2#3#4#5#6\etoc@ {%
    \def\Etoc@getname ##1\hspace\relax\etoc@ {%
       \Etoc@global\def\etocthename {##1}%
       \edef\Etoc@tmp   {{#3}}%
       \Etoc@global\expandafter\def\expandafter\etocthelinkedname
                   \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}%
    }%
    \def\Etoc@getnbr ##1\hspace##2##3\etoc@ {%
       \ifx\relax##2\else
         \Etoc@global\def\etocthenumber {##1}%
         \edef\Etoc@tmp   {{#3}}%
         \Etoc@global\expandafter\def\expandafter\etocthelinkednumber
                     \expandafter{\expandafter\hyperlink \Etoc@tmp{##1}}%
         \Etoc@global\Etoc@numbertrue
         \Etoc@getname ##3\etoc@
       \fi
    }%
  \Etoc@getnbr #4\hspace\relax\etoc@
}
%    \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   \@empty
\DeclareRobustCommand*{\etocname}  {}
\DeclareRobustCommand*{\etocnumber}{}
\DeclareRobustCommand*{\etocpage}  {}
\DeclareRobustCommand*{\etoclink}  {}
\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.
%    \begin{macrocode}
\def\etoc@@startlocaltoc#1#2{%
    \ifEtoc@localtoc 
      \ifEtoc@notactive
        \ifnum #1=#2\relax
          \ifEtoc@jj  \Etoc@global\let\Etoc@localtop\Etoc@@minusone@@ \fi
          \ifEtoc@j   \Etoc@global\let\Etoc@localtop\Etoc@@zero@@  \fi
          \ifEtoc@    \Etoc@global\let\Etoc@localtop\Etoc@@one@@   \fi
          \ifEtoc@i   \Etoc@global\let\Etoc@localtop\Etoc@@two@@   \fi
          \ifEtoc@ii  \Etoc@global\let\Etoc@localtop\Etoc@@three@@ \fi
          \ifEtoc@iii \Etoc@global\let\Etoc@localtop\Etoc@@four@@  \fi
          \ifEtoc@iv  \Etoc@global\let\Etoc@localtop\Etoc@@five@@  \fi
          \ifEtoc@v   \Etoc@global\let\Etoc@localtop\Etoc@@six@@   \fi
          \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
    \fi
}
\let\etoc@startlocaltoc\@gobble
%    \end{macrocode}
% |1.07g| suppresses the printing of |--unknown etoc ref: run latex again--| as
% sometimes one uses |\localtableofcontents| to prepare something else, and one
% does not want any text output even in intermediate runs.
% 
% Also |1.07g| adds |\etocaftertochook| to help with
% |\invisiblelocaltableofcontents| (and then I did |\etocsetnexttocdepth|).
% |1.07h| makes the hook used by |\etocsetnexttocdepth| private.
%
% |2014/03/14|: |1.08b| suppresses a space token from an unprotected end of
% line at the end after the replacement text of |\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|.
%    \begin{macrocode}
\def\Etoc@localtableofcontents#1{%
    \edef\Etoc@tmp{#1}%
    \ifnum\Etoc@tmp<\@ne
       \PackageWarning{etoc}%
            {Unknown toc id: run LaTeX to get references right}% 
       \let\Etoc@next\@gobble
    \else
       \let\Etoc@next\@firstofone
    \fi
    \Etoc@next 
    {% 1.08b removes a space token from unprotected line ending
       \edef\etoc@startlocaltoc##1{\noexpand\etoc@@startlocaltoc{##1}{#1}}%
       \Etoc@localtoctrue
       \let\Etoc@localtop\Etoc@@minustwo@@
       \global\Etoc@stoptocfalse
       \global\Etoc@notactivetrue
       \Etoc@tableofcontents
    }%
    \endgroup\ifEtoc@mustclosegroup\endgroup\fi
    \Etoc@aftertochook % 1.07h
    \etocaftertochook % 1.07g
}
%    \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}
% Why |\global| for |\Etoc@notactivefalse|? and not for
% |\Etoc@localtocfalse|. Must think about this, a pity I did not
% document it when I was young and intelligent ...
%    \begin{macrocode}
\def\Etoc@t@bleofcontents{%
 \ifx\Etoc@nexttoken\label
    \def\Etoc@next{\expandafter\Etoc@label\@gobble}%
 \else
 \ifx\Etoc@nexttoken\@sptoken
    \let\Etoc@next\Etoc@again
 \else
 \ifEtoc@tocwithid
    \def\Etoc@next{\Etoc@localtableofcontents{\c@etoc@tocid}}%
 \else
    \ifx\Etoc@nexttoken\ref
       \def\Etoc@next{\expandafter\Etoc@ref\@gobble}%
    \else
       \def\Etoc@next{\Etoc@localtocfalse
                      \global\Etoc@notactivefalse
                      \Etoc@tableofcontents
                      \endgroup
                      \ifEtoc@mustclosegroup\endgroup\fi
                      \Etoc@aftertochook % 1.07h
                      \etocaftertochook % 1.07g 
                      }%
    \fi
 \fi\fi\fi\Etoc@next}
%    \end{macrocode}
% |1.07g| for consistency Etoc@ prefix added.
%    \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{\arabic{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
\def\etoctableofcontents{%
   \Etoc@openouttoc
   \Etoc@par
   \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents
%    \end{macrocode}
% No need for tableof extra group level, and furthermore
% it is better to get rid of it if. However I can't do it globally because I
% want to leave open for the user the possibility (whose interest is quasi nil
% however) of using directly |\tableof|, |\tablenotof|, ... and not the only
% reasonable thing which is |\nexttocwithtags{}{}|.
%    \begin{macrocode}
      \let\tof@begingroup\@empty
      \let\tof@endgroup  \@empty
      \def\etoc@startlocaltoc##1{\etoc@@startlocaltoc{##1}{\c@etoc@tocid}}%
      \@ifstar
      {\def\Etoc@aftertitlehook{}\Etoc@table@fcontents}
      {\let\Etoc@aftertitlehook\etocaftertitlehook\Etoc@table@fcontents}}
\let\tableofcontents\etoctableofcontents
\newcommand*\localtableofcontents{%
   \Etoc@openouttoc
   \Etoc@par
   \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}}
%    \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.
%    \begin{macrocode}
\long\def\Etoc@gobbletoetoc@ #1\etoc@ {}
\newcommand\etocsettocstyle[2]{%
\def\Etoc@tableofcontents
{%
    \ifnum\c@tocdepth>\Etoc@minf
    \else\expandafter
     \Etoc@gobbletoetoc@ % skip all
    \fi
    \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)
        \def\Etoc@levellist@elt####1{\let####1\Etoc@lxyz}%
        \Etoc@levellist
        \let\booknumberline\numberline
        \let\partnumberline\numberline
        \let\chapternumberline\numberline
    \fi
    #1%
    \ifEtoc@parskip\parskip\z@skip\fi %1.07d
    \Etoc@aftertitlehook
    \Etoc@toctoc
            \ifEtoc@tocwithid\else
              \ifEtoc@localtoc
                \ifEtoc@notactive
                  \Etoc@localtocfalse
                  \global\Etoc@notactivefalse
                  \Etoc@toctoc
                \fi
              \fi
            \fi
    \etocaftercontentshook
    #2\@nobreakfalse % 1.07d: \@nobreakfalse moved here
    \Etoc@resettocdepth  % 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}
% |2015/03/09| |1.08| hacks the begin parts to update therein the
% |\ifEtoc@isfirst| flag.
%    \begin{macrocode}
\def\etocsetstyle{\Etoc@standardfalse\etoc@setstyle}
\long\def\etoc@setstyle#1#2#3#4#5{%
     \long\expandafter\def
     \csname Etoc@begin@\csname Etoc@#1@\endcsname\endcsname
                     {#2\Etoc@global\Etoc@isfirsttrue}%
     \long\expandafter\def
     \csname Etoc@prefix@\csname Etoc@#1@\endcsname\endcsname   {#3}%
     \long\expandafter\def
     \csname Etoc@contents@\csname Etoc@#1@\endcsname\endcsname {#4}%
     \long\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.
%
%    \begin{macrocode}
\def\Etoc@storetocdepth {\global\c@etoc@tocdepth\c@tocdepth }
\def\Etoc@resettocdepth {\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|.
%    \begin{macrocode}
\def\Etoc@tocvsec@err #1{\PackageError {etoc}
        {the command \protect#1\space is incompatible with etoc} 
        {use \protect\etocsettocdepth.toc as replacement (check the manual)}%
}%
\AtBeginDocument {%
   \@ifclassloaded{memoir}
    {\PackageWarning{etoc}{You may consider using \protect\etocsettocdepth.toc
      as a drop-in^^J
      replacement to the memoir own \protect\settocdepth\space
      if you wish to exploit etoc to its^^J 
      fullest. Similarly consider using
     \protect\etocsettocdepth\space and 
     \protect\etocsetnexttocdepth^^J rather 
     than memoir's \protect\maxtocdepth.}}
    {\@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|
%    \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}}
     {\edef\Etoc@aftertochook {\global\c@tocdepth\the\c@tocdepth\space
                              \let\noexpand\Etoc@aftertochook\noexpand\@empty }%
       \global\c@tocdepth\csname Etoc@#1@@\endcsname}%
}%
%    \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 }{}}%
%    \end{macrocode}
% Initializations.
%    \begin{macrocode}
\def\etocstandardlines {\Etoc@standardtrue}
\def\etoctoclines      {\Etoc@standardfalse}
\etocdefaultlines
\etocstandardlines 
\etocstandarddisplaystyle
\etocobeytoctocdepth 
\etocobeydepthtags
\let\Etoc@aftertochook\@empty % private for \etocsetnexttocdepth
\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{3028}

\csname check@checksum\endcsname
\Finale
%%
%% End of file `etoc.dtx'.
