From 76def1765b0dafeba9f05e03b8ae3d89bf3b234d Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Fri, 30 Nov 2012 23:32:59 +0000
Subject: etoc (30nov12)

git-svn-id: svn://tug.org/texlive/trunk@28397 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/source/latex/etoc/etoc.dtx | 1920 +++++++++++++++++---------
 1 file changed, 1238 insertions(+), 682 deletions(-)

(limited to 'Master/texmf-dist/source/latex/etoc/etoc.dtx')

diff --git a/Master/texmf-dist/source/latex/etoc/etoc.dtx b/Master/texmf-dist/source/latex/etoc/etoc.dtx
index f6fc5c2b943..43d05544b5d 100644
--- a/Master/texmf-dist/source/latex/etoc/etoc.dtx
+++ b/Master/texmf-dist/source/latex/etoc/etoc.dtx
@@ -3,13 +3,13 @@
 %% Copyright (C) 2012 by Jean-Francois Burnol
 %<*ins>
 \def\pkgname{etoc}
-\def\pkgdate{2012/11/24}
-\def\pkgversion{v1.04}
+\def\pkgdate{2012/11/28}
+\def\pkgversion{v1.05}
 \def\pkgdescription{easily customizable TOCs (jfB)}
 %</ins>
 %<*none>
-\def\lasttimestamp{Time-stamp: <24-11-2012 23:29:16 CET jfb>}
-\def\docdate{2012/11/24}
+\def\lasttimestamp{Time-stamp: <29-11-2012 19:26:40 CET jfb>}
+\def\docdate{2012/11/29}
 \def\striptimestamp#1 <#2 #3 #4 #5>{#2 at #3 #4}
 \edef\dtxtimestamp{\expandafter\striptimestamp\lasttimestamp}
 \ProvidesFile{\pkgname.dtx}
@@ -82,22 +82,23 @@
 %</ins>
 %<*none>
 \fi
-\documentclass[a4paper,12pt]{ltxdoc}
-
+\documentclass[a4paper,11pt,abstract]{scrdoc}
+\pagestyle{headings}
 \usepackage[latin1]{inputenc}
 \usepackage[T1]{fontenc}
 \usepackage[hscale=0.66,vscale=0.75]{geometry}
 \usepackage{verbatim}
 \usepackage{txfonts}
-
 \usepackage{xspace}
 \usepackage{multicol}
-
 \usepackage{enumitem}
-
+\usepackage{color}
 \usepackage{xcolor}
 \definecolor{joli}{RGB}{225,95,0}
-\renewcommand\partname{Part}
+\definecolor{JOLI}{RGB}{225,95,0}
+\definecolor{BLUE}{RGB}{0,0,255}
+
+\usepackage[english]{babel}
 
 \usepackage[%dvipdfmx,%
 pdfencoding=pdfdoc,bookmarks=true]{hyperref}
@@ -120,35 +121,44 @@ pdfpagemode=UseOutlines}
 % \def\href#1#2{{#2}}
 % \makeatother
 
+\MakeShortVerb{\|}
+
+\DeclareRobustCommand\cs[1]{{\ttfamily\hyphenchar\font45\char`\\#1}}
+\DeclareRobustCommand\csb[1]{{%
+\color{blue}\ttfamily\hyphenchar\font45\char`\\#1}}
+
+\newcommand\cshyp[1]{\texorpdfstring{\cs{#1}}{\textbackslash #1}}
+\newcommand\csbhyp[1]{\texorpdfstring{\csb{#1}}{\textbackslash #1}}
+\newcommand\lowast{\raisebox{-.25\height}{*}}
+\newcommand\starit[1]{\cs{#1\lowast}}
+\newcommand\staritb[1]{\csb{#1\lowast}}
+
+\newcommand\toc{\cs{table\-of\-contents}\xspace}
+\newcommand\localtoc{\cs{local\-table\-of\-contents}\xspace}
+\newcommand\tocb{\csb{table\-of\-contents}\xspace}
+\newcommand\localtocb{\csb{local\-table\-of\-contents}\xspace}
+
 \usepackage{etoc}
+
 \newcommand\etoc{%
 \texorpdfstring{{\color{joli}\ttfamily\bfseries etoc}\xspace}
 {\textbackslash etoc\xspace}}
 
-\newcommand\csi[1]{{\ttfamily\hyphenchar\font45\char92#1}}
-\newcommand\csbi[1]{{\color{blue}\ttfamily\hyphenchar\font45\char92#1}}
-\newcommand\csa[1]{\texorpdfstring{\csi{#1}}{\textbackslash #1}}
-\newcommand\csb[1]{\texorpdfstring{\csbi{#1}}{\textbackslash #1}}
-\newcommand\lowast{{\ttfamily \raisebox{-.25\height}{*}}}
-\newcommand\starit[1]{\csi{#1}\lowast}
-\newcommand\staritb[1]{{\color{blue}\csi{#1}\lowast}}
-\newcommand\toc{\csa{tableofcontents}\xspace}
-\newcommand\tocb{\csb{tableofcontents}\xspace}
-\newcommand\tocstar{\starit{tableofcontents}\xspace}
-\newcommand\tocstarb{\staritb{tableofcontents}\xspace}
-
-\hyphenation{sec-num-depth toc-num-depth etoc-set-style etoc-set-level 
-etoc-set-toc-style etoc-if-num-bered etoc-name etoc-page etoc-number
-etoc-framed-style etoc-multi-col-style etoc-ruled-style
-etoc-skip-first-pre-fix etoc-ref}
+\hyphenation{toc-depth sec-num-depth etoc-framed-style etoc-ruled-style}
+\hyphenation{etoc-toc-style-with-marks etoc-ruled etoc-framed}
+\hyphenation{etoc-standard-display-style}
 
 \frenchspacing
 
 \renewcommand\familydefault\sfdefault
 
-\begin{document}
+\setcounter{secnumdepth}{3}
+\setcounter{tocdepth}{3}
 
-\rmfamily
+\begin{document}\rmfamily
+\thispagestyle{empty}
+\addto\captionsenglish{\renewcommand\partname{Part}}
+\renewcommand\partname{Part}
 
 \begin{center}
   {\normalfont\Large The \etoc  package}\\
@@ -160,142 +170,285 @@ etoc-skip-first-pre-fix etoc-ref}
   with timestamp ``\dtxtimestamp''
 \end{center}
 
-
 \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 as an example, next to the standard
-  formatting inherited from the \LaTeX{} document classes. But
-  the idea is to give the means to the user to delegate the
-  details to packages dealing with list making environments
-  (such as |enumitem|). Regarding the \emph{global style},
-  \etoc typesets by default tables of contents in a
-  multi-column format, with either a standard heading, or a
-  ruled title, optionally with a frame around the table of
-  contents. The \csa{tableofcontents} command can be used
-  arbitrarily many times in the same document, and comes with
-  a starred variant which gives local table of contents.
+  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 as
+  an example. The simplest usage though will be to delegate the
+  details of the layout to packages dealing with list
+  environments. 
+
+  The \cs{tableofcontents} command can be used arbitrarily
+  many times and has a variant \cs{localtableofcontents} which
+  prints (surprise!) `local' tables of contents. The
+  formatting inherited (possibly customized by other packages)
+  from the document class can also be used. Regarding the
+  \emph{global toc display}, \etoc provides styles
+  based on a possibly multi-column format, with either a
+  heading or a title in-between rules, optionally with a frame
+  around the table of contents. Using labels, one can
+  reproduce at another location (and with another layout) a
+  (local) TOC defined somewhere in the document.\par
 \end{abstract}
 
-\tableofcontents \label{toc:main}
-
 
-\part{Although this is a short document, we are going to use
-  many sectioning commands}
+\section*{Foreword}
 
-\setcounter{tocdepth}{-2}
+Popular packages dealing with TOCs include |tocloft|,
+|titletoc| and |minitoc|. Why another one? well, I started
+\etoc for my own use, and only later found out about the above
+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 \cs{makeatletter} and \cs{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. 
+
+It is hoped that \etoc will turn out to be essentially
+compatible with the |article|, |book|, |report|, |scrartcl|,
+|scrbook|, |scrreprt| and |memoir| classes. Preliminary
+testing is positive, but the author not being familiar with the
+latter classes,\footnote{latter=all but |article|...} he does
+not have a stock of documents which could have been used to
+test all their bells and whistles in the presence of
+\etoc. \par
 
-\tableofcontents* \label{toc:partone}
+\clearpage
 
 \setcounter{tocdepth}{3}
 
-\section{Overview}
+\etoctoclines
+\etocmarkboth\contentsname
+\etocmulticolstyle{}
+\tableofcontents* \label{toc:main}
 
-Popular packages dealing with TOCs include |tocloft|,
-|titletoc| and |minitoc|. Why another one? well, I started
-\etoc for my own use, and only later found out about the above
-mentioned packages . . . I realize (to some extent, as I still
-haven't read closely the documentations) that most if not all
-of the \etoc functionality could well be already available in
-the above mentioned packages.
 
-\subsection{Initial motivation}
+\part{Overview}
 
-The specific initial impetus was to transform the `flat' data
-contained in the |.toc| file into a nested structure which
-could be given to list making environments.\footnote{I got
+\setcounter{tocdepth}{-3}
+\localtableofcontents \label{toc:partone}
+\setcounter{tocdepth}{3}
+
+\section{Initial motivation: nested lists}
+
+The initial impetus  was to feed nested
+list environments with the data consisting of the \emph{name},
+\emph{number}, and \emph{page number} as recorded in the
+|.toc| file.\footnote{I got
   started about this through reading this question on the
   \TeX{} Stackexchange site:\\ 
 \href{http://tex.stackexchange.com/questions/79682/can-i-get-a-list-of-all-sections-as-a-simple-enumerate-list}{tex.stackexchange.com/questions/79682}}
 For example, typesetting
 the line corresponding to the first sub-section in a given
-section would open a group which would be closed only when a
+section would open a list environment which would be closed only when a
 section, chapter, or part line entry in the |.toc| file would
-be encountered. Package \etoc allows to do this very easily
-and the opening and closing of the groups can be for example
+be encountered. \etoc allows to do this very easily
+and the opening and closing may be for example
 |\begin{enumerate}| and |\end{enumerate}| pairs, will all the
 customizing allowed by packages such as |enumitem|. 
 
-Although there is a limitation to this method (the |.toc| file
+\subsection{Limitations intrinsic to the use of environments}
+
+There is a first limitation to this method: the |.toc| file
 may contain other commands, such as language changing
 commands, which do not expect to see their scope limited in
-this way inside a group), I believe this procedure will be
-found the most convenient in many cases. However the own
-package custom line styles (illustrated by the main table of
-contents in this document) do not make use of environments to
-avoid that problem.
-
-\subsection{Line styles}
-
-To implement the above idea, the command \csb{etocsetstyle}
-will inform \etoc of what it should do at each sectioning
-level, from |part| down to |subparagraph|. Other sectioning
-names can be used too, if present in the document.
-
-\subsubsection{\csb{etocetoclines} vs \csb{etocstandardlines}}
-
-The \csb{etocetoclines} command selects the package predefined
-line styles, and \csb{etocstandardlines} uses the standard
-default formatting from the |article|, |book|, |report|, or
-also |scrartcl| classes. For any document class proceeding in
-a manner compatible to the |article| class in its
-typesetting of the table of contents, the
-\csb{etocstandardlines} should be functional: indeed nothing
-is hard-coded into the package code; rather, when
-\csb{etocstandardlines} is issued by the user, the package
-cancels its own mechanism and gives back the leadership to the
-class layer. Note though that this means that \etoc does not
-provide utilities to change this or that length from the
-\LaTeX{} default formatting of TOC entries. But if some other
-package has done it, then this should work correctly also when
-\etoc is in use (for its other aspects as will be described below).
-
-\subsubsection{Instructing \etoc about sectioning command names}
-
-If the document class uses other names, such as \emph{atom},
-or \emph{particle}, the command \csb{etocsetlevel} will
-instruct \etoc about it.
-
-\subsection{Global style: multiple columns, ruled heading, framed table of contents}
-
-At the global level, the default of \etoc is to typeset the
-TOC on two columns, using the package |multicol|.
-Additionally, the heading can be formatted as in the default
-manner, or as a ruled heading, or the entire TOC can be
-encapsulated in a frame (if it fits on the current page). And
-the user can specify to use a single column output, or three
-columns, etc . . .
-
-\subsection{Local tables of contents}
-
-With \etoc, the \csb{tableofcontents} command can be used
-arbitrarily many times and it has a starred variant \tocstarb
-which will print a local table of contents: i.e. all subsections
-etc . . . inside a given section, or all subsubsections and
-lower inside a given subsection, etc . . . 
-
-\subsection{Displaying tables of contents defined
-  elsewhere in the document}
-
-A \LaTeX{} counter is associated with the successive tables of
-contents. To set a reference point (which will become an
-anchor if package |hyperref| is loaded) one just uses the
-\cs{label} command as usual.
-For example:\\
+this way inside a group (\LaTeX's environments create groups).
+Therefore the package own line styles
+(illustrated by the main table of contents in this document)
+do not make use of environments to avoid that problem.
+
+A second limitation is that one may nest at most 4 levels of
+enumerate environments, and 4 levels of itemize environment. I
+tried alternating them and did succeed to nest 6 levels (and
+not 8 alas . . . \footnote{this is
+  surely a well-known issue which I did not at all
+  investigate any further.}). With
+\csb{etocnumber} as the optional parameter to \cs{item}:
+\cs{item}|[\etocnumber]| one may transform the itemize into an
+enumerated list... anyway, 4 levels of sectional divisions in
+a TOC are generally sufficient, and again using |enumerate|
+environments is only a possibility provided by \etoc, it is by
+no means mandatory to use them in the line styles
+specifications.
+
+We will give in this manual a simple-minded example of nested
+use of |enumerate| environments. 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.
+
+Still a different sort of example,
+less elementary and not making use at all of list-making
+environments, is built-in in \etoc own ``line styles''. They
+are activated by the command \csb{etoctoclines}... and do
+come with their own set of customizing macros!
+
+\section{Line styles and global style}
+
+I should have distinguished between the \emph{line styles}
+(the way the name, number and page numbers are used at each
+level) which I was alluding to until now and the \emph{toc
+  display style} (I am using this 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...
+
+\subsection{\csbhyp{etocsettocstyle} for the toc display}
+
+The low-level \csb{etocsettocstyle} command allows to decide
+what should be done before and after the line entries of the
+TOC are typeset, and in particular how the title should be
+printed.
+
+\subsubsection{Multiple columns, ruled title, framed contents}
+
+\etoc provides four (customizable...) toc styles which are
+variants on the use of the |multicol| package:
+\csb{etocmulticolstyle}, \csb{etoctocstyle},
+\csb{etocruledstyle}, and \csb{etocframed\-style}. All use the
+|multicol| package with a default of two columns
+(single-column mode is of course allowed).
+
+These commands must be followed either by \toc or \localtoc,
+and dropping the `style' in the command name gives shortcuts
+(except for \cs{etoctoc} which does not exist)
+for doing the whole thing in one go (and inside a group).
+
+\subsection{\csbhyp{etocsetstyle} for the line styles}
+
+The command to inform \etoc of what to do with \cs{etocname},
+\cs{etocnumber}, and \cs{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|. The four
+other arguments say: 1) 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') what to do when a new
+entry of that type is found, and 4) the last argument is the
+code to execute when a division unit of higher importance is
+again hit upon.
+
+\subsubsection{Instructing \etoc about the document sectional division names}
+
+Other names (\emph{atom}, \emph{particle} . . .) for sectional
+divisions may be made known to \etoc with the
+command \csb{etocsetlevel}.\footnote{however, no
+  more than the eight distinct levels from -2 to +5 may be used.} 
+
+\subsection{Compatibility mode}
+
+Both for the ``line styles'' and the ``global style'', it is
+possible to switch into a compatibility mode which uses the
+document class default style.\footnote{for the ``global style''
+  \etoc checks if it knows the class, and if not defaults to
+  the |article| class layout.} This is activated by:
+\begin{verbatim}
+\etocstandardlines        % `line entries' as without \usepackage{etoc}
+\etocstandarddisplaystyle % `toc display'  as without \usepackage{etoc}
+\end{verbatim}
+Actually, starting with version |1.05|, this is the default at
+the start of the document, and just adding
+\cs{usepackage\{etoc\}} should hopefully not change anything
+to the look of a document, at least for the |article|, |book|,
+|report|, |scrartcl|, |scrbook|, |scrreprt| and |memoir|
+classes.
+
+After declaring a document division name to \etoc with
+\cs{etocsetlevel}, and if the document class does things in a
+manner analogous as the standard classes, then the
+\cs{etocstandardlines} compatibility switch should be
+functional. But at any rate the \etoc default line styles and
+the ones defined via \cs{etocsetstyle} will work. Except that
+maybe \etoc will fail to separate the number from the
+name.
+
+\section{Arbitrarily many TOCs, and local ones too}
+
+\etoc allows arbitrarily many \cs{tableofcontents} commands in
+your document. The line styles and the global style may of
+course be changed in-between. Furthermore 
+\cs{localtableofcontents} will print local tables of
+contents\footnote{Up to version |1.04| we called this
+  \starit{tableofcontents}, but for reasons of compatibility
+  with the |memoir| class, we have decided to drop this
+  usage.}: \emph{i.e.} all sections and sub-units inside a
+given chapter, or all subsubsections and lower inside a given
+subsection, etc . . .
+
+\subsection{On manually adding layout commands to the
+  \texorpdfstring{\ttfamily .toc}{.toc} file}
+
+When using in that way many tables of contents in the same
+document one should of course beware of adding manually things
+to the |.toc| file. For example the technique of inserting\\
 \hbox to \linewidth{\hss
-  \tocstarb\space\csbi{label\string{my\_nice\_toc\string}}\hss}
-
-Then, elsewhere in the document, doing:\\
-\hbox to \linewidth{\hss \tocb\space\csbi{ref\string{my\_nice\_toc\string}}\hss}
-will display again the same contents. However, the line styles
-and global style (including the title) will be the current one and the
-current value of the |tocdepth| counter is obeyed. As an example here is
-the table of contents of Part \ref{part:custom}:
-
+  \cs{addtocontents}|{toc}{\string\clearpage}|\hss} just
+before a \cs{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 \cs{clearpage}
+will be executed by \etoc each time a \toc or \localtoc
+command is encountered! The more prudent thing is to have
+issued rather:\\
+\hbox to
+\linewidth{\hss\cs{addtocontents}|{toc}{\string\myclearpage}|\hss}
+and to use where needed something like:
+\begin{verbatim}
+\let\myclearpage\clearpage
+\tableofcontents
+\let\myclearpage\relax
+\end{verbatim}
+The |memoir| class has the command \cs{settocdepth} which
+writes a \cs{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 \cs{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. A solution is to do \cs{begingroup}
+|\renewcommand*\changetocdepth[1]{}| \cs{localtableofcontents}
+\cs{endgroup}, and to set the desired level for the local
+table of contents with the other |memoir| command \cs{maxtocdepth}.
+\footnote{The |memoir| class allows multiple calls to the \toc
+  command, so these issues already arise there,
+  independently of \etoc, see page 170 of the |memoir|
+  manual.}
+
+
+\subsection{Labeling and reusing elsewhere}
+
+\etoc allows the labeling of a TOC with \cs{label\{toc:A\}}
+and will redisplay it elsewhere when told
+\cs{tableofcontents}\cs{ref\{toc:A\}}. Again, the actual
+layout (title inclusive) is decided locally. The
+line styles and global style (including the title) will be the
+current ones and the current value of the |tocdepth| counter is
+obeyed. As an example here is the table of contents of Part
+\ref{part:custom}:
 
 \begingroup
 
@@ -303,7 +456,7 @@ the table of contents of Part \ref{part:custom}:
 \renewcommand{\etocbkgcolorcmd}{\color{green!5}}
 \fboxsep1ex
 
-\etocframed[1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone I am from
+\etocframed*[1]{\fbox{\makebox[.5\linewidth]{\etocfontminusone I am from
     \hyperref[toc:c]{far away}}}}
 \label{toc:d}
 \ref{toc:c}
@@ -313,44 +466,54 @@ the table of contents of Part \ref{part:custom}:
 We actually did something like:\\
 \hbox to \linewidth{\hss
   \toc\space\cs{label}|{toc:d}|\cs{ref}|{toc:c}|\hss} Hence
-\hyperref[toc:d]{\color{green!50!blue!50}the present location}
-can itself now be referred to via |\ref{toc:d}|: this gives
-the number of this TOC (\emph{i.e}
-{\color{green!50!blue!50}\ref{toc:d}}) in the sequence of
-document TOCs, will be a link if package |hyperref| is used,
-and can be used elsewhere as \toc|\ref{toc:d}| (which now has
-exactly the same effect as \toc|\ref{toc:c}|).
-
-For info, the \hyperref[toc:c]{\color{green!50!blue!50}toc with label |toc:c|}
-is the one which has number {\color{green!50!blue!50}\ref{toc:c}}... 
-
-The \cs{label} command should come before the reference via
-\cs{ref} to the other TOC. A \cs{label} detected by \etoc
-immediately (skipping spaces) after the command \toc will be
-activated right after the update to the toc counter. A
+\hyperref[toc:d]{\color{green!35!blue!75}the present location}
+can itself now be referred to via |\ref{toc:d}|: it gives
+the id of this TOC\footnote{\emph{i.e}
+{\color{green!35!blue!75}\ref{toc:d}}, there was an invisible
+TOC with id 2 at the beginning of this part.} in the sequence of
+document TOCs, and will be a link if package |hyperref| is
+used.
+
+However one should not use elsewhere \toc|\ref{toc:d}|. The
+reason is that the doubly cloned TOC has no way of knowing that
+it is a clone of a clone, and what `local' means will
+erroneously be construed as being decided by the location of
+the first clone, not the original. So to clone again, one
+should use the original: \toc|\ref{toc:c}|.
+
+The \cs{label} command should follow \toc  before the reference via
+\cs{ref} to the other TOC. Indeed a \cs{label} following it is
+detected by \toc (skipping spaces and an optional \texttt\lowast) A
 \cs{label} after the \cs{ref} will not be treated by \etoc
-itself and will refer to the latest reference point (possibly
+itself and will refer to the latest reference point, possibly
 to some counter updated in the title of the TOC or, although
 this would require the user to have done a suitable set-up in the
-line styles, even inside the TOC).
+line styles, even some counter modified inside the TOC.
 
-As another example let us now display a table of contents for
+As another example let us  display a table of contents for
 this first part of the document. Indeed, immediately after the
 line in the source file starting with the first
 \cs{part} we wrote:
+
+\vspace{-.25cm}
 \begin{verbatim}
 \setcounter{tocdepth}{-2}
-\tableofcontents* \label{toc:partone}
-\setcounter{tocdepth}{3}
+\localtableofcontents \label{toc:partone}
+\setcounter{tocdepth}{2}
 \end{verbatim}
-The |tocdepth| being -2, nothing at
-all was inserted in the page, but now that |tocdepth| has
-been reset to 3, we can display the TOC with the simple
-command:
+The |tocdepth| being set to -2, nothing at all was inserted in the
+page (for the same effect one must use -3 in the |memoir|
+class; and -3 works in all classes) but
+now that it has been reset to 2, we can display the TOC with
+the simple command:
 \begin{verbatim}
 \tableofcontents \ref{toc:partone}
 \end{verbatim}
-\clearpage
+
+\subsection{Local table of contents for this part}
+
+This sub-section heading was manually added to the
+document source, it is not part of the TOC style.
 
 \setcounter{tocdepth}{3}
 
@@ -365,7 +528,7 @@ command:
 \renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}}
 \renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}}
 
-\renewcommand{\etocleftrule}{\vrule width 2.5cm}
+\renewcommand{\etocleftrule}{\vrule width 3cm}
 \renewcommand{\etocrightrule}{\vrule width 1cm}
 \renewcommand{\etocbottomrule}{\hrule height 12pt}
 \renewcommand{\etoctoprule}{\hrule height 12pt}
@@ -418,21 +581,25 @@ command:
 
 \etocframedstyle[1]{}
 
-\tableofcontents \ref{toc:partone}
+\tableofcontents* \ref{toc:partone}
 
 \endgroup
 
-The actual design is not pre-built in \etoc: it
-combines the \etoc `framed' style (with a dummy empty title, the actual title
-having been put inside the frame as part of the \marg{start} code of the section
-`line style'). The frame borders have been set to have the same color as the one
-which serves as background for the entire thing. This design (with other colors)
-is used also for \hyperref[toc:clone]{\color{green!50!blue!50}this other toc}
-(the coding used is reproduced there).
+The actual design is not pre-built in \etoc; it uses the \etoc
+`framed' style with a background color and a dummy empty
+title, the actual title having been put inside the frame as
+part of the \meta{start} code of the section `line style'. The
+frame borders have been set to have the same color as the one
+which serves as background for the entire thing. This design
+(with other colors) is in use also for
+\hyperref[toc:clone]{\color{green!35!blue!75}this other toc},
+and the coding used has been included in its subsection.
 
 
 \part{Package commands for line styles}
 
+\setcounter{tocdepth}{3}
+
 \etocsetstyle{section}
 {\begin{enumerate}[leftmargin=0pt,label=]}
 {\normalsize\bfseries\rmfamily\item}
@@ -449,45 +616,42 @@ is used also for \hyperref[toc:clone]{\color{green!50!blue!50}this other toc}
 
 \etocsetstyle{subsubsection}
 {\par\nobreak\begingroup\normalfont\footnotesize\itshape\etocskipfirstprefix}
-{\unskip\allowbreak\,--\,}
-{\etocname}
-{\unskip.\hfil\par\endgroup\pagebreak[3]}
+{\allowbreak\,--\,}
+{\etocname\unskip}
+{.\hfil\par\endgroup\pagebreak[3]}
 
 \etocruledstyle[1]{\etocfontminusone\color{green}
      \fboxrule1pt\fboxsep1ex
      \framebox[\linewidth]
               {\normalcolor\hss Contents of this second part\hss}}
 
-\tableofcontents* \label{toc:a}
+\localtableofcontents \label{toc:a}
 
-\section{The \csb{etocsetstyle} command}
+\section{The \csbhyp{etocsetstyle} command}
 
 
 \subsection{An example}
 
 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, we used the command \tocstar).
+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{global style}. First we describe how to set-up the
-line styles. Essentially they were obtained in the following
-manner%
+\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
+  in its preamble, hence \cs{normalfont} switches to the
   |sans| typeface; so in the section line-style, I wrote
-  \csa{rmfamily} instead.} \footnote{\etoc uses the |xspace|
-  package, and there is no need to write
-  \csa{etocname\string{\string} text} rather than just
-  \csa{etocname text} for example. However, this forced us to
-  add the two mysterious \csa{unskip} in the
-  subsubsection style.}
+  \cs{rmfamily} instead.}
 
 \begingroup\small
 \begin{verbatim}
+\setcounter{tocdepth}{3}
+
 \etocsetstyle{section}
 {\begin{enumerate}}
 {\normalsize\bfseries\rmfamily\item}
@@ -503,38 +667,44 @@ manner%
 \etocsetstyle{subsubsection}
 {\par\nobreak\begingroup\normalfont
         \footnotesize\itshape\etocskipfirstprefix}
-{\unskip\allowbreak\,--\,}
-{\etocname}
-{\unskip.\hfil\par\endgroup\pagebreak[3]}
+{\allowbreak\,--\,}
+{\etocname\unskip}
+{.\hfil\par\endgroup\pagebreak[3]}
 \end{verbatim}
 \endgroup
 
 Each \csb{etocsetstyle} command has five mandatory arguments:\\
 \hbox to \linewidth
-{\hfil\csa{etocsetstyle}\color{blue}\marg{levelname}%
+{\hfil\csb{etocsetstyle}\color{blue}\marg{levelname}%
   \marg{start}\marg{prefix}\marg{contents}\marg{finish}\hfil}
-The initially recognized \marg{levelname}'s are the sectioning
-levels of the standard document classes (from \emph{part}
-down to \emph{subparagraph}). 
+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 \marg{start} code is executed when a toc entry of that level is
+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
-\marg{finish} code is executed when one again encounters a higher
+\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 \marg{prefix} code and then the
-\marg{contents} code. 
+typeset by executing first the \meta{prefix} code and then the
+\meta{contents} code. 
 
-\subsubsection{\csb{etocname} and \csb{etocpage}}
+\subsubsection{\csbhyp{etocname} and \csbhyp{etocpage}}
 
 The line styles specifications use the commands \csb{etocname}
 and \csb{etocpage} as synonyms for the name, respectively the
-page number of the current entry. Temporarily, we relied on
+page number of the current entry. \footnote{\etoc uses the |xspace|
+  package, and there is no need to write
+  \cs{etocname\string{\string} text} rather than just
+  \cs{etocname text} for example. However, this forced us to
+  add a mysterious \cs{unskip} in the
+  subsubsection style.} Temporarily, we relied on
 the automatic numbering of the |enumerate| environments but
 there is also a command \csb{etocnumber} to get the real thing
 from the |.toc| file.
 
 
-\subsubsection{The \csb{etocskipfirstprefix} command}
+\subsubsection{The \csbhyp{etocskipfirstprefix} command}
 
 The chosen |subsubsection| style specifies to list the names of
 the subsubsections from a given subsection in an in-line
@@ -555,19 +725,19 @@ where no provision is made for them and added the definitive:
 \end{verbatim}
 This is also the situation with the default package line styles!
 
-\subsubsection{secnumdepth and tocdepth}
+\subsubsection{secnum\-depth and tocdepth}
 
 The \LaTeX{} counter |secnumdepth|
-decides (from part down to subparagraph) which levels are numbered and
+decides  which levels are numbered and
 automatically written to the |.toc| file. Its functioning
 is completely independent from the \etoc package. The counter
 |tocdepth| 
-decides the finest level displayed in the table of contents: it
-is obeyed by \etoc, and as \toc can now be used arbitrarily
+decides the finest level displayed in the table of contents: its
+local value is obeyed by \etoc, and as \toc can now be used arbitrarily
 times, this is an important customization lever.
 
 
-\subsection{The \csb{etocsetlevel} command}
+\subsection{The \csbhyp{etocsetlevel} command}
 
 If your document uses other sectioning names, such as, for
 example \emph{molecule}, or \emph{atom}, it should inform \etoc of
@@ -578,9 +748,10 @@ this in the following way:
 \etocsetlevel{atom}{2}
 \etocsetlevel{nucleus}{3}
 \end{verbatim}
-The accepted numbers range from -1 to 5 inclusive. The package code
+The accepted numbers range from -2 to 5 inclusive. The package code
 does:
 \begin{verbatim}
+\etocsetlevel{book}{-2}
 \etocsetlevel{part}{-1}
 \etocsetlevel{chapter}{0}
 \etocsetlevel{section}{1}
@@ -593,7 +764,7 @@ does:
 \subsection{Further informations and let's make this a very long title to see how it will look like}
 
 
-\subsubsection{The \csb{etocnumber} command}
+\subsubsection{The \csbhyp{etocnumber} command}
 So far, our specifications would use the numbering generated
 by the |enumerate| environments, but it would be nicer to use
 the actual numbers as found in the |.toc| file. This is
@@ -607,15 +778,17 @@ syntax {\ttfamily label=\char32} from the package |enumitem|:
 {\etocname (page \etocpage)}
 {\end{enumerate}}
 \end{verbatim}
-Rather than just\csa{etocnumber} we then used something like
+Rather than just\cs{etocnumber} we then used something like
 |\fbox{\etocnumber}|.
 
 
-\subsubsection{The \csb{etocifnumbered} switch}
+\subsubsection{The \csbhyp{etocifnumbered} switch}
 
-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). The \csa{etocifnumbered}\marg{A}\marg{B} command executes \meta{A} if
+The \cs{fbox} would give an unaesthetic result in the case of an unnumbered
+section (which ended up in the table of contents via an \cs{addcontentsline}
+command). 
+
+The \cs{etocifnumbered}\marg{A}\marg{B} command executes \meta{A} if
 the number exists, and \meta{B} if not. So our final code could be:
 \begin{verbatim}
 \etocsetstyle{section}
@@ -644,15 +817,16 @@ We used, actually:
 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 fixed
+vertical mode'. An additional \cs{par} token in the
+\meta{contents} part of the |section| level would have fixed
 this: |{...(page \etocpage)\par}|.
 
 
-\subsection{The \csb{etocfontxxx...} commands}
+\subsection{The \csbhyp{etocfontxxx...} commands}
 
 The package predefines for use in its default line styles:
 \begin{verbatim}
+\newcommand\etocfontminustwo{\normalfont \LARGE \bfseries}
 \newcommand\etocfontminusone{\normalfont \large \bfseries}
 \newcommand\etocfontzero{\normalfont \normalsize \bfseries}
 \newcommand\etocfontone{\normalfont \normalsize \bfseries}
@@ -661,10 +835,17 @@ The package predefines for use in its default line styles:
 \newcommand\etocfontfour{\normalfont \footnotesize}
 \newcommand\etocfontfive{\normalfont \footnotesize}
 \end{verbatim}
-This only impacts the package default line styles and does
-nothing under the \csa{etocstandardlines} regime.
+The same font is used for
+the name, number, and page number, at each level (up to subsubsection).
+
+In document classes where there is a \cs{chapter} command, the
+default font for the level 1 (`section') does not use the bold
+series. 
+
+These font commands only impact the package default line
+styles and do nothing under the \cs{etocstandardlines} regime.
 And, let us recall, levels four (paragraph) and five
-(subparagraphs) are not displayed by the package
+(subparagraphs) are actually not displayed by the package
 default line styles.
 
 
@@ -695,7 +876,7 @@ TOC was not typeset in red.
 
 In the present case the group at the subsubsection level is
 there to confine the font changes, but this could be made
-superfluous via adding a \csa{normalsize} to the
+superfluous via adding a \cs{normalsize} to the
 |subsection| specification. I take this opportunity to mention
 that \etoc always typesets the entire table of contents inside
 a group, hence no font change therein can propagate to the outside.
@@ -703,6 +884,9 @@ a group, hence no font change therein can propagate to the outside.
 
 \section{Am I also in red?}
 
+Well, actually no in this |scrartcl| class but I assure you I was in the
+|article| class!
+
 \begin{verbatim}
 \normalcolor
 \addtocontents{toc}{\string\normalcolor}
@@ -732,14 +916,15 @@ section, and made it appear in the |.toc| file.
 \end{verbatim}
 
 
-\part{Package commands for global styles}
 
+\section{A comparison}
 
-We shall illustrate the package functionalities through
-comparing here various line styles: the standard formatting as
-provided by the |article| class, the custom line styles we
-defined above using enumerate environments, and the package
-line styles.
+The \hyperref[toc:main]{main table of contents} was done in
+the \etoc style. Let us issue here again two \toc commands,
+one with the document class style (with some special
+centered title in place of the standard Contents heading) and
+the other one with the style we defined in the previous part
+on the basis of enumerate environments.
 
 \begin{verbatim}
 \setcounter{secnumdepth}{4}
@@ -749,21 +934,53 @@ line styles.
 \setcounter{secnumdepth}{4}
 \setcounter{tocdepth}{4}
 
-\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape
- \fbox{\parbox{.8\linewidth}{This is the
-      table of contents using enumerate environments for part,
-      section and subsection, and an in-line italic style for
-      subsubsections.}}}
+Let us  use the standard formatting of entries, as is
+provided by the document class, and a two-column layout:
+\begin{verbatim}
+\etocstandardlines
+\etocruledstyle{% 2 is the default number of columns
+    \renewcommand{\etoctoprule}{\hrule height0pt}%
+    \normalfont\normalsize\rmfamily\itshape 
+    \parbox{.8\linewidth}{\centering 
+  This is the global table of contents with standard
+   (to the {\ttfamily scrartcl} class) entries 
+  (and on two columns). Contrarily to
+  \hyperref[toc:test]{\color{green!35!blue!75}the next TOC}
+  it contains paragraph entries.}}
+\tableofcontents
+\end{verbatim}
+
+\etocstandardlines
+
+\etocruledstyle{%
+\renewcommand{\etoctoprule}{\hrule height0pt}%
+\normalfont\normalsize\rmfamily\itshape 
+\parbox{.8\linewidth}{\centering 
+  This is the global table of contents with standard
+   (to the {\ttfamily scrartcl} class) entries 
+  (and on two columns). Contrarily to
+  \hyperref[toc:test]{\color{green!35!blue!75}the next TOC} it
+  contains paragraph entries.}}
 
-First let us use again our set-up from the previous part. We add to it 
+\tableofcontents
+
+We then switch to our set-up from the previous part and add to it:
 \begin{verbatim}
 \etocsetstyle{part}
-{\begin{enumerate}[label=\etocnumber,leftmargin=1em]}
+{\begin{enumerate}[label=\etocnumber,leftmargin=1.5em]}
 {\etocfontminusone\item}
 {\etocname}
 {\end{enumerate}}
+\tableofcontents \label{toc:test} \ref{toc:main}
 \end{verbatim}
 
+
+\etocruledstyle[2]{\normalfont\normalsize\rmfamily\itshape
+  \fbox{\parbox{.8\linewidth}{This is the global table of
+      contents using quickly defined (and easily improvable)
+      enumerate environments for part, section and subsection,
+      and an ad hoc in-line italic style for subsubsection.}}}
+
 \etocsetstyle{part}
 {\begin{enumerate}[label=\etocnumber,leftmargin=1.5em]}
 {\etocfontminusone\item}
@@ -772,101 +989,23 @@ First let us use again our set-up from the previous part. We add to it
 
 \tableofcontents \label{toc:test} \ref{toc:main}
 
-Then we switch to the standard formatting of entries, as is
-provided by the document class, but displayed here on two columns:
-\begin{verbatim}
-\etocstandardlines
-\tableofcontents
-\end{verbatim}
-
-\etocstandardlines
-
-\etocruledstyle[2]{%
-\renewcommand{\etoctoprule}{\hrule height0pt}%
-\normalfont\normalsize\rmfamily\itshape 
-\parbox{.8\linewidth}{\centering 
-This is the table of contents with standard
-  entries (on 2 columns!).\\ Contrarily to
-  \hyperref[toc:test]{\color{green!50!blue!50}the previous TOC} it
-  displays the paragraph entries.}}
 
-\tableofcontents
-
-For the third example, we will use the starred variant
-\tocstar to restrict its contents to this document part.
-Furthermore we opt for a ``framed'' style, and specify some
-colors (including a background color). We modify various
-things from the package defaults. 
-
-\etocetoclines
-
-\begingroup 
-\renewcommand{\etocinnerleftsep}{2ex}
-\renewcommand{\etocinnerrightsep}{2ex}
-% 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
-\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 the 
-      current page. It has the label |toc:b|.}}}
-% set up a label for future (or earlier...) reference
-\tableofcontents* \label{toc:b}
-\endgroup
+\part{Package commands for global styles}
+\label{part:globalcmds}
 
-\begingroup
-\baselineskip10pt
-\footnotesize
 \begin{verbatim}
-\etocetoclines
-\begingroup % we use a group to limit the scope of the next commands
-\renewcommand{\etocinnerleftsep}{2ex}
-\renewcommand{\etocinnerrightsep}{2ex}
-% 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
-\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 the 
-      current page. It has the label |toc:b|.}}}
-% set up a label for future (or earlier...) reference
-\tableofcontents* \label{toc:b}
-\endgroup
+\setcounter{tocdepth}{-2}
+\localtableofcontents \label{toc:globalcmds}
 \end{verbatim}
-\endgroup
 
+\setcounter{tocdepth}{-2}
+\localtableofcontents \label{toc:globalcmds}
 \setcounter{tocdepth}{3}
 
-\section{Specifying the global style}
+\section{Specifying the toc display style}
 
 
-The \emph{global} style says whether the TOC appears with
+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
@@ -875,27 +1014,29 @@ heading and single column layout, one issues commands of the
 following type:
 \begin{verbatim}
 \etocruledstyle[1]{Title}
-\tableofcontents (or \tableofcontents*)
-or the shortcuts:
-    \etocruled[1]{Title}  or  \etocruled*[1]{Title}
+    \tableofcontents (or \localtableofcontents)
+shortcuts:
+    \etocruled[1]{Title}  (or  \localetocruled[1]{Title})
 \end{verbatim}
 
-\subsection{The command \csb{etocruledstyle}}
+\subsection{The command \csbhyp{etocruledstyle}}
 
-The general format of \csa{etocruledstyle} is:\\
-\centerline{\color{blue}\csa{etocruledstyle}%
+The general format of \cs{etocruledstyle} is:\\
+\centerline{\color{blue}\cs{etocruledstyle}%
 \oarg{number of columns}\marg{title of the toc}}
-\noindent Note that the title is horizontal material, if it does not fit on one
-line it can be put in a \csa{parbox} of a given width. We did this and even
-enclosed the parboxes in \csa{fbox}es to get frames around them. For the example
-with the standard formatting we did not use an \csa{fbox} and got rid of the
-horizontal rules via:
+\noindent Note that the title is horizontal material, if it
+does not fit on one line it should be put in a \cs{parbox} of
+a given width. We did this and even enclosed the parboxes in
+\cs{fbox}es to get frames around them. For the example with
+the standard formatting we did not use an \cs{fbox} and got
+rid of the horizontal rules via:
 \begin{verbatim}
 \renewcommand{\etoctoprule}{\hrule height 0pt}
 \end{verbatim}
-The green frame for the heading of the \hyperref[toc:a]{%
-\color{green!50!blue!50}table of contents at the
-  start of the second part of this document} was obtained with:
+The green frame for the heading of the table of contents at
+the \hyperref[toc:a]{%
+  \color{green!35!blue!75} start of the second part of this
+  document} was obtained with:
 \begin{verbatim}
 \etocruledstyle[1]{\etocfontminusone\color{green}
      \fboxrule1pt\fboxsep1ex
@@ -904,43 +1045,54 @@ The green frame for the heading of the \hyperref[toc:a]{%
 \end{verbatim}
 
 
-\subsection{The command \csb{etocmulticolstyle}}
+\subsection{The command \csbhyp{etocmulticolstyle}}
 
 This is also a command with one optional and one mandatory argument:\\
-\centerline{\color{blue}\csa{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}}
-The \oarg{number\_of\_columns} can go from 1 to 10 (it defaults to 2, and from 2
-on is passed to a |multicols| environment). The \marg{heading} can be something like:
+\centerline{\color{blue}\cs{etocmulticolstyle}%
+\oarg{number\_of\_columns}\marg{heading}}
+The \meta{number\_of\_columns} can go from 1 to 10 (it
+defaults to 2, and from 2 on is passed to a |multicols|
+environment). The \meta{heading} should be some `vertical' material like:
 \begin{center}
-  {\ttfamily\string\chapter\lowast}\marg{title},\\ 
- or\\
-\csa{etocstandardheading}\marg{title},\\
-or\\
- \csa{etocstandardheadingnomarks}\marg{title}.
+  \meta{heading} = {\ttfamily\string\section\lowast}\marg{title}
 \end{center}
-These last two commands do either \starit{section} or
-\starit{chapter} depending on the document class, and the
-first one puts the marks for the page headings. To emulate the
-standard formatting one can thus use:\\
-\centerline{\ttfamily\string\etocmulticolstyle[1]\string{%
-\string\etocstandardheading\string{\string\contentsname\string}\string}}
-After such a command, future \csa{tableofcontents} will use the
+After such a command, future \cs{tableofcontents} will use the
 specified style. A shortcut for just one table of contents and
 not affecting the styles of later TOCs is:\\
-\centerline{\csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}}
-And the starred form will be
-\starit{etocmulticol}\oarg{number\_of\_columns}\marg{heading}.
+\centerline{\cs{etocmulticol}\oarg{number\_of\_columns}\marg{heading}}
+And there is also
+\cs{localetocmulticol}\oarg{number\_of\_columns}\marg{heading}.
+
+
+\subsubsection{The command \csbhyp{etoctocstyle}}
+
+\centerline{\color{blue}\cs{etoctocstyle}\oarg{kind}%
+\marg{number\_of\_columns}\marg{title}}
+\hbox to \linewidth{\hss=
+\cs{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|%
+|{\kind*{|\itshape title\upshape|}}|\hss}
+where |kind| is one of |chapter|, |section|, . . . and defaults
+to |chapter| or |section| depending on the document class.
 
-\subsubsection{A point of some importance}
+\paragraph{\texorpdfstring{\csb{etoc\-toc\-style\-with\-marks}}{etoctocstylewithmarks}}%
+\leavevmode\unskip{\color{blue}\oarg{kind}\marg{number\_of\_columns}\marg{title}\marg{mark}}\\
+\hbox to \linewidth
+{\hss=\cs{etocmulticolstyle}|[|{\itshape number\_of\_columns}|]|%
+|{\kind*{|\itshape title \ttfamily\upshape\string\markboth%
+|{\MakeUppercase{|{\rmfamily\itshape mark}|}}}}|\hss} 
+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.
+
+\subsection{A point of some importance}
 
 There is an important difference between the
-\csa{etocmulticolstyle} and \csa{etocruledstyle} commands. The
+\cs{etocmulticolstyle} and \cs{etocruledstyle} commands. The
 mandatory argument of the former can not be just some
-\emph{naked text}. It should rather be something like
-|\hbox{naked text}| or |\vbox{naked text}|. 
-%
-More conveniently, one can use things such as:\\
-\hbox to \linewidth{\hss |\section*{some not so naked text}|\hss} 
-Else, you will get an error:\\
+\emph{naked text}. One can use things such as\\
+\hbox to \linewidth{\hss \starit{section}|{|\emph{some not so naked text}|}|\hss} 
+but \meta{heading}=\emph{naked text} gives an error:\\
 \hbox to \linewidth{\hss 
 |ERROR: LaTeX Error: Something's wrong--perhaps a missing \item.|\hss}
 In the special case where the command was
@@ -949,160 +1101,292 @@ it is possible to feed it with `|naked text\par|'.
 
 
 On the other hand, it is exactly the \emph{opposite} for
-\csa{etocruledstyle} which expects things which fit inside a
-horizontal box, hence it will gladly accepts a \emph{naked
-  text} as argument, but will choke on things such as \cs{par}.
-
+\cs{etocruledstyle} (and \cs{etocframedstyle}) which expects
+things which fit inside a horizontal box, hence it will gladly
+accepts a \emph{naked text} as argument, but will choke on
+\starit{section} or things ending with a \cs{par}.
 
 \paragraph{Do we really want paragraph entries in the TOC?}
 
 \paragraph{really?}
 
-\subsection{The command  \csb{etocruledstyle} (cont.)}
-
+\subsection{The command  \csbhyp{etocruled}}
 
-As a shortcut to set the style with this command and then make a
-\csa{tableofcontents} or \tocstar call (in a group, so that the
-style for future table of contents is not affected) we have: \\
+As a shortcut to set the style and issue a
+\cs{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 starred form will be with \staritb{etocruled}.
+And the local form will be \csb{localetocruled}.
 
-\subsection{The command \csb{etocframedstyle}}
+\subsection{The commands \csbhyp{etocframedstyle} and \csbhyp{etocframed}}
 
 Same mechanism:\\
-\centerline{\color{blue}\csa{etocframedstyle}\oarg{number\_of\_columns}\marg{title}}
+\centerline{\color{blue}\cs{etocframedstyle}%
+  \oarg{number\_of\_columns}\marg{title}}
 and the accompanying shortcut:\\
 \centerline{\csb{etocframed}\oarg{number\_of\_columns}\marg{title}}
 Here the entire table of contents is framed, hence this can
 only work if it fits on a page. Note that the title itself is
-not framed, if one wants a frame one should use the commands inside the argument to \cs{etocframedstyle} or \cs{etocframed}. The starred
-variant for the shortcut again begins  with \staritb{etocframed}.
+not framed, if one wants a frame one should set it up
+inside the \meta{title} argument to \cs{etocframedstyle} or
+\cs{etocframed}. There is also \cs{local\-etocframedstyle} and
+\cs{localetocframed}.
 
-\subsection{The command \csb{etocsettocstyle}}
+\subsection{The command \csbhyp{etocsettocstyle}}
 
 This is a command with two mandatory arguments:\\
-\centerline{\color{blue}\csa{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}}
+\centerline{\color{blue}\cs{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}|. It can also contain
-instructions to mark the page headings.\footnote{\etoc
-  provides the command \csa{etocmarkboth}\oarg{optional\_name}, with an
-  optional argument which defaults to \csa{contentsname}.} Or
+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.\footnote{In our
-  testing, we had some difficulties, when using the |multicol|
-  package in a book class document with the two-column global
-  option. So, as we use |multicol| by default we decided
-  against trying to automatize a check for such a possible
-  |twocolumn| class option. It is up to the user to decide (or
-  not) to switch back and forth from two-column to one-column
-  when typesetting table of contents.}
-
-The three commands \csa{etocmulticolstyle}, \csa{etocruledstyle}, and
-\csa{etocframedstyle} actually call \csa{etocsettocstyle} as a
-lower-level routine.
-
-\section{Summary of the main  local and global style
-  commands}
+would then reenact the two-column mode.
+
+The previously described commands \cs{etocmulticolstyle},
+\cs{etocruledstyle}, and \cs{etocframedstyle} actually call
+\cs{etocsettocstyle} as a lower-level routine.
+
+\subsection{The compatibility mode \csbhyp{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.
+
+\section{The starred variants of the \csbhyp{tableofcontents}
+  etc... commands}
+
+The \toc, \localtoc, \cs{etocmulticol}, etc... 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.
+
+To customize what is written to the |.toc| file by the
+non-starred variants there is the command
+\csb{etocmemoirtoctotocfmt}\marg{kind}\marg{name}, where
+\meta{kind} is |chapter|, or |section|, ... and \meta{name}
+can be for example \cs{contentsname}. The default is |chapter|
+and |\contentsname|.
+
+Note though that this concerns only what is written to the
+|.toc| file: the unstarred commands have an interest only if
+the heading of the TOC was typeset using a suitable
+\emph{unnumbered} division command (\emph{e.g.} using
+\cs{etoctocstyle}), which should be chosen by the user to be
+identical to the \meta{kind} argument above. In compatibility
+mode for the global style, the |memoir| class will use a
+Chapter like heading if the user has not customized it to do
+otherwise: this will not fit well with local table of contents in
+sections, and even chapters.
+
+Generally speaking there is hook macro called
+\csb{etocaftertitlehook} which is defined initially to do
+nothing, except for the |memoir| class for which it does the
+above, and which is inhibited by using the starred variants of
+the displaying commands.
+
+\section{Table of contents for part \ref{part:globalcmds}}
+
+As a third example we now print the local table of contents
+for this part. We opt for a
+``framed'' style, and specify some colors (including a
+background color). We modify various things from the package
+defaults. The original was invisibly defined with a label at the
+beginning of this part \ref{part:globalcmds}.
+
+\begingroup
+\baselineskip10pt
+\footnotesize
+\begin{verbatim}
+\etoctoclines
+\begingroup % we use a group to limit the scope of the next commands
+\renewcommand{\etoccolumnsep}{3em}
+\renewcommand{\etocinnerleftsep}{2em}
+\renewcommand{\etocinnerrightsep}{2em}
+% specify a background color for the toc contents
+\renewcommand{\etocbkgcolorcmd}{\color{yellow!10}}
+%\renewcommand{\etocbkgcolorcmd}{\relax}
+% 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
+\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 the 
+      current page. It has the label |toc:b|.}}}
+% set up a label for future (or earlier...) reference
+\tableofcontents \label{toc:b} \ref{toc:globalcmds}
+\endgroup
+\end{verbatim}
+\endgroup
+
+\etoctoclines
+\begingroup 
+\renewcommand{\etoccolumnsep}{3em}
+\renewcommand{\etocinnerleftsep}{2em}
+\renewcommand{\etocinnerrightsep}{2em}
+% 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
+\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 the 
+      current page. It has the label |toc:b|.}}}
+% set up a label for future (or earlier...) reference
+\tableofcontents \label{toc:b} \ref{toc:globalcmds}
+\endgroup
+
+We can also display it in the document standard manner:\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.} 
+\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}
+
+\part{Using and customizing \etoc}
+\label{part:custom}
+
+
+\etoctoclines
+\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{etocname}, \csa{etocnumber}, \csa{etocpage},
-\csa{etocifnumbered}\marg{A}\marg{B}}%
+\setbox0\hbox{\cs{etocname}, \cs{etocnumber}, \cs{etocpage},
+\cs{etocifnumbered}\marg{A}\marg{B}}%
 \framebox[\linewidth][c]
 {\vbox{\hsize\wd0\normalcolor\noindent
-\csa{etocsetstyle}\marg{levelname}%
+\cs{etocsetstyle}\marg{levelname}%
   \marg{start}\marg{prefix}\marg{contents}\marg{finish}\\
-\csa{etocname}, \csa{etocnumber}, \csa{etocpage},
-\csa{etocifnumbered}\marg{A}\marg{B}%
+\cs{etocname}, \cs{etocnumber}, \cs{etocpage},
+\cs{etocifnumbered}\marg{A}\marg{B}%
 }}}
 
 \subsection{Setting up global styles}
 
 \medskip
 \hbox{\color{green}\fboxrule1pt\fboxsep1em
-\setbox0\hbox{\csa{etocname}, \csa{etocnumber}, \csa{etocpage},
-\csa{etocifnumbered}\marg{A}\marg{B}}%
+\setbox0\hbox{\cs{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{etocruledstyle}\oarg{number\_of\_columns}\marg{title}\\
-\csa{etocframedstyle}\oarg{number\_of\_columns}\marg{title}\\
-\csa{etocsettocstyle}\marg{before\_toc}\marg{after\_toc}}}}
+{\vbox{\hsize\wd0
+\normalcolor\noindent
+\cs{etocmulticolstyle}\oarg{number\_of\_columns}\marg{heading}\\
+\cs{etoctocstyle}\oarg{kind}\marg{number\_of\_columns}\marg{title}\\
+\cs{etoctocstylewithmarks}\oarg{kind}\marg{number\_of\_columns}%
+\marg{title}\marg{mark}\\
+\cs{etoctocstylewithmarksnouc}\oarg{kind}\marg{number\_of\_columns}%
+\marg{title}\marg{mark}\\
+\cs{etocruledstyle}\oarg{number\_of\_columns}\marg{title}\\
+\cs{etocframedstyle}\oarg{number\_of\_columns}\marg{title}\\
+\cs{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}}%
+  \setbox0\hbox{\cs{etocname}, \cs{etocnumber},
+    \cs{etocpage}, \cs{etocifnumbered}\marg{A}\marg{B}}%
   \framebox[\linewidth][c]
   {\vbox{\hsize\wd0\normalcolor\noindent
       \toc\\
-      \tocstar\\
-      \csa{etocmulticol}\oarg{number\_of\_columns}\marg{heading}\\
-      \csa{etocmulticol}\lowast\oarg{number\_of\_columns}\marg{heading}\\
-      \csa{etocruled}\oarg{number\_of\_columns}\marg{title}\\
-      \csa{etocruled}\lowast\oarg{number\_of\_columns}\marg{title}\\
-      \csa{etocframed}\oarg{number\_of\_columns}\marg{title}\\
-      \csa{etocframed}\lowast\oarg{number\_of\_columns}\marg{title}%
+      \localtoc\\
+      \cs{etocmulticol}\oarg{number\_of\_columns}\marg{heading}\\
+      \cs{localetocmulticol}\oarg{number\_of\_columns}\marg{heading}\\
+      \cs{etocruled}\oarg{number\_of\_columns}\marg{title}\\
+      \cs{localetocruled}\oarg{number\_of\_columns}\marg{title}\\
+      \cs{etocframed}\oarg{number\_of\_columns}\marg{title}\\
+      \cs{localetocframed}\oarg{number\_of\_columns}\marg{title}\\
+      \hbox{}{\itshape\ttfamily\ \ \ \  and their starred variants}
    }}}
 
 \subsection{Labels and references}
 
-The commands to actually display the table of contents
+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}}%
+  \setbox0\hbox{\cs{etocname}, \cs{etocnumber},
+    \cs{etocpage}, \cs{etocifnumbered}\marg{A}\marg{B}}%
   \framebox[\linewidth][c]
   {\vbox{\hsize\wd0\normalcolor\noindent
-      \toc\\
       \toc \cs{label}|\{toc:here\}|\\ 
       \toc \cs{ref}|\{toc:far\}| \\
       \toc \cs{label}|\{toc:here\}| \cs{ref}|\{toc:far\}| \\
-      \tocstar\\
-      \tocstar \cs{label}|\{toc:here\}| 
+      \localtoc \cs{label}|\{toc:here\}|\\
+      \hbox{}{\itshape\ttfamily\ \ \ \ similarly with\ }%
+      \cs{etocmulticol}{\itshape\ttfamily\ etc . . . }
    }}}
 
 
-\medskip The starred form displaying a local table of
-contents, it will not react to a \cs{ref} following it. When
+\medskip The local table of
+contents does not react to a \cs{ref} following it. When
 re-displaying another toc, only its contents are transferred:
 both the line styles and the global style are the ones
 currently defined, not the ones from the cloned toc.
 
-The shortcuts for setting up and using in one go the multicol,
-ruled, and framed global styles can be followed in the
-similar manner by a label and/or a reference.
-
+\subsection{An example design}
 
-% The command \csb{etocref} when given a label |toc:x| as
-% argument produces the number of the corresponding TOC:
-% \emph{i.e.} 1 for the first in the document etc... this is the
-% same information as in \cs{ref}|{toc:x}| or \cs{ref*}|{toc:x}|
-% but without any hyperlink or other extraneous data. It is
-% mainly used internally by \etoc, but can be used as a perhaps
-% more robust command than \cs{ref} or \cs{ref*} when 
-% typesetting the number of the TOC.
 
-\subsection{Example of a cloned local TOC}
-
-
-We try out |\tableofcontents \ref{toc:b}|. 
-First we have to specify the design. 
-I got  motivated by a
+I got motivated by a
 question\footnote{\href{http://tex.stackexchange.com/questions/83184/how-to-change-style-and-color-of-table-of-content}{tex.stackexchange.com/questions/83184}}
 I saw on the \TeX{} StackExchange site. I copied the color RGB
 specifications from an answer which had been provided to the
-question. The \cs{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
+question. The \cs{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. 
+the frame.
 
 \begingroup
 \baselineskip10pt
@@ -1120,7 +1404,7 @@ the frame.
 \renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}}
 \renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}}
 
-\renewcommand{\etocleftrule}{\vrule width 1.5cm}
+\renewcommand{\etocleftrule}{\vrule width 1cm}
 \renewcommand{\etocrightrule}{\vrule width .5cm}
 \renewcommand{\etocbottomrule}{\hrule height 12pt}
 \renewcommand{\etoctoprule}{\hrule height 12pt}
@@ -1164,7 +1448,7 @@ the frame.
        \par\nointerlineskip}
 
 \etocsetstyle{section}{\coloredstuff{white}
-     {\hfil \hyperref[toc:b]{\bfseries\large I am a clone of  
+     {\hfil \hyperref[toc:b]{\bfseries\large I am a twin of  
      that other TOC (click me!)}\hfil}}
 {\vskip3pt\sffamily\small}
 {\coloredstuff{white}{\hbox to 1.5cm{\hss\etocnumber\hskip.2cm}%
@@ -1172,11 +1456,23 @@ the frame.
  \vskip6pt}
 {}
 \etocframedstyle[1]{}  % title is not there!
-\tableofcontents \label{toc:clone} \ref{toc:b}
+\tableofcontents \label{toc:clone} \ref{toc:globalcmds}
 \endgroup
 \end{verbatim}
 \endgroup
 
+
+The coding is a bit involved as it does not use any additional
+package. 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.
+
 \setcounter{tocdepth}{3}
 
 \begingroup
@@ -1190,7 +1486,7 @@ the frame.
 \renewcommand{\etocbottomrulecolorcmd}{\color{tocbackground}}
 \renewcommand{\etoctoprulecolorcmd}{\color{tocbackground}}
 
-\renewcommand{\etocleftrule}{\vrule width 1.5cm}
+\renewcommand{\etocleftrule}{\vrule width 1cm}
 \renewcommand{\etocrightrule}{\vrule width .5cm}
 \renewcommand{\etocbottomrule}{\hrule height 12pt}
 \renewcommand{\etoctoprule}{\hrule height 12pt}
@@ -1240,7 +1536,7 @@ the frame.
        \par\nointerlineskip}
 
 \etocsetstyle{section}{\coloredstuff{white}
-     {\hfil \hyperref[toc:b]{\bfseries\large I am a clone of  
+     {\hfil \hyperref[toc:b]{\bfseries\large I am a twin of  
      that other TOC (click me!)}\hfil}}
 {\vskip3pt\sffamily\small}
 {\coloredstuff{white}{\hbox to 1.5cm{\hss\etocnumber\hskip.2cm}%
@@ -1250,42 +1546,24 @@ the frame.
 
 \etocframedstyle[1]{}
 
-\tableofcontents \label{toc:clone} \ref{toc:b}
+\tableofcontents \label{toc:clone} \ref{toc:globalcmds}
 
 \endgroup
 
 
-The coding is a bit involved as it does not use any additional
-package. The framed style allowed us to specify a background
-color. Generally speaking all color commands inside \etoc are
-initially defined to do nothing, so the choice to use or not
-color packages is left to the user.
-
-
-
-\part{Customizing \etoc}
-\label{part:custom}
-
-
-\etocetoclines
-\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|}}} 
+\section{Customizing \etoc}
 
-\tableofcontents* \label{toc:c}
 
 
-\section{Customizing  the \etoc line styles}
+\subsection{Customizing  the \etoc line styles}
 
 
-We will simply list the relevant commands as defined in the package. Customizing
-them goes through suitable \csa{renewcommand}s:
+We will simply list the relevant commands as defined in the
+package. Customizing them goes through suitable
+\cs{renewcommand}s:
 
 \begin{verbatim}
+\newcommand\etocfontminustwo{\normalfont \LARGE \bfseries}
 \newcommand\etocfontminusone{\normalfont \large \bfseries}
 \newcommand\etocfontzero{\normalfont \normalsize \bfseries}
 \newcommand\etocfontone{\normalfont \normalsize \bfseries}
@@ -1294,13 +1572,19 @@ them goes through suitable \csa{renewcommand}s:
 \newcommand\etocfontfour{\normalfont \footnotesize}
 \newcommand\etocfontfive{\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{1ex plus .15ex minus .15ex}
 \newcommand\etocsepthree{.25ex plus .05ex minus .05ex}
-\newcommand\etocminusonelrmargins{1em}
 
+\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}
@@ -1311,29 +1595,41 @@ them goes through suitable \csa{renewcommand}s:
 {\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}}
 
 \newcommand\etocabbrevpagename{p.~}
+\newcommand\etocpartname{\partname}
+\newcommand\etocbookname{Book}
 \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
+\cs{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. In this mode the
-\csa{etocsetstyle} commands will have an effect only after the
-document encounters again an \csa{etocetoclines} command.
+happened in the absence of \etoc.\footnote{with the
+  KOMA-script classes, we noticed that
+  \cs{etocstandarddisplaystyle} was apparently needed for the
+  KOMA options |toc=left| to be active at the level of the line entries.}  
+
 
-The \csa{etocstandardlines} mechanism will work also with
-sectioning commands made known to \etoc via \csa{etocsetlevel},
+The \cs{etocstandardlines} mechanism will work also with
+sectioning commands made known to \etoc via \cs{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} . . .).
+(existence of the macros \cs{l@something} . . .).
 
-\section{Customizing the global styles}
+Using the \cs{etoctoclines} (obviously) or even just one
+\cs{etocsetstyle} command turns off the compatibility mode
+(all of this obey the scoping mecanism of \TeX/\LaTeX{} groups).
 
+\subsection{Customizing the global styles}
 
-Again we list the relevant macros, what they do should be legible from their
-names:
+
+Again we list the relevant macros, what they do should be
+legible from their names. Note that \cs{renewcommand}'s and
+not \cs{setlength}'s have to be used for what appear to be
+lengths, and that color commands are not just color
+specifications, they must include \cs{color}, and are canceled
+by re-defining them to do \cs{relax}.
 \begin{verbatim}
 \newcommand\etocabovetocskip{3.5ex plus 1ex minus .2ex} 
 \newcommand\etocbelowtocskip{3.5ex plus 1ex minus .2ex}
@@ -1342,9 +1638,8 @@ names:
 \newcommand\etocmulticolsep{0ex}
 \newcommand\etocmulticolpretolerance{-1}
 \newcommand\etocmulticoltolerance{200}
-
+\newcommand\etocdefaultnbcol{2}
 \newcommand\etocinnertopsep{2ex}
-
 \newcommand\etoctoprule{\hrule}
 \newcommand\etoctoprulecolorcmd{\relax}
 
@@ -1356,38 +1651,38 @@ names:
 \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}
+\newcommand\etocaftertitlehook{\relax}
 \end{verbatim}
 
-This last command is a hook, it is positioned immediately
+\cs{etocaftertitlehook} was commented upon before, and
+\cs{etocframedmphook} is positioned immediately
 after the beginning of a minipage environment where the
 contents of the framed TOC are typeset. 
 
 The \cs{...colorcmd} things are initially set to be
 \cs{relax}, so there is no need to do \cs{usepackage}|{color}|
-if the document does not use colors. Note that they should
-evaluate to something like `\cs{color}|{green}|' and not just
-`|green|'. If the scope of a change to the background color
-command \cs{etocbkgcolorcmd} has not been limited to a group
-and one then wishes to let it again be \cs{relax} one must use
-a \cs{renewcommand} and not
+if the document does not use colors. If the scope of a change
+to a color command such as \cs{etocbkgcolorcmd} has not
+been limited to a group and one then wishes to let it again be
+\cs{relax} one must use a \cs{renewcommand} and not
 \cs{let}\cs{etocbkgcolorcmd}\cs{relax}.
 
 Regarding the dimensions of the top rule they can be specified
-in |ex|'s or |em|'s as for example:\\
+in |ex|'s or |em|'s as in this example:\\
 \hbox to \linewidth{\hss 
 |\renewcommand{\etoctoprule}{\hrule height 1ex}|\hss} 
 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
+the title argument to \cs{etocruledtoc} or
+\cs{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
@@ -1400,6 +1695,10 @@ 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. 
 
+\part{Tips}
+
+\section{... and tricks}
+
 \subsection{Hacking  framed parboxes}
 
 
@@ -1411,10 +1710,9 @@ accepted here.
                        {\normalfont This text is perfectly centered
                         vertically with respect to the
                         surrounding horizontal rules.}}}}
-\ref{toc:b}
+\ref{toc:globalcmds}
 \end{verbatim}
 
-\clearpage
 \renewcommand\etoctoprule{\hrule height 2pt depth 2pt}
 
 \etocruled{\color{green}\fboxrule2pt\fboxsep1ex
@@ -1423,7 +1721,7 @@ accepted here.
                        {\normalfont This text is perfectly centered
                         vertically with respect to the
                         surrounding horizontal rules.}}}}
-              \ref{toc:b}
+              \ref{toc:globalcmds}
 
 
 \subsection{Interverting the levels}
@@ -1440,74 +1738,128 @@ label=,leftmargin=0pt]}
 {\end{enumerate}}
 \renewcommand{\etoccolumnsep}{2.75em}
 \renewcommand{\columnseprule}{1pt}
+\etocmarkbothnouc{List of all subsections}
 \etocmulticol[3]{\subsection{All subsections of this document}}
 \end{verbatim}
 
 \setcounter{tocdepth}{2}
 
 \begingroup
+\etoctoclines
+\etocstandarddisplaystyle
+\etocsetlevel{book}{3}
 \etocsetlevel{part}{3}
+\etocsetlevel{chapter}{3}
 \etocsetlevel{section}{3}
 \etocsetstyle{subsection}{%
 \begin{enumerate}[itemsep=0pt,label=,leftmargin=0pt]}
 {\normalfont\bfseries\item}
 {\roman{enumi}. \normalfont\etocname (\etocnumber, p.~\etocpage)}
 {\end{enumerate}}
+
 \renewcommand{\etoccolumnsep}{2.75em}
 \renewcommand{\columnseprule}{1pt}
 
+\etocmarkbothnouc{List of all subsections}
 \etocmulticol[3]{\subsection{All subsections of this document}}
-
 \endgroup
 
 \subsection{Compatibility with other packages}
 
 \etoc uses the packages |multicol| and |xspace|. It is
-|hyperref| aware and hopefully |hyperref| compatible! 
+|hyperref| aware and hopefully |hyperref| compatible! It
+doesn't matter whether \etoc or |hyperref| is loaded first.
 
 The
-macros \csa{etocname}, \csa{etocnumber}, and \csa{etocpage}
+macros \cs{etocname}, \cs{etocnumber}, and \cs{etocpage}
 contain the |hyperref| links, if present (note that the
 |linktoc=all| option of |hyperref| tells it to put a link also
 in the page number corresponding to a given toc entry). The
 table of contents of the present document are fully linked.
 
-\etoc has not been tested with other packages than those
-cited. It has been tested to work as expected with the
-|article|, |book| and |scrartcl| document classes.
-
-
+The contents of the |.toc| file are read into memory by \etoc
+once, at the \cs{begin\{document\}} (and not at the first
+\toc). The input stream opened by \etoc for reading is then
+closed but the |.toc| file is of course left opened for write
+operations, with the exact same instructions as used by the
+standard \LaTeX{} classes.
+
+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. This is the only kind of
+data written by \etoc to the |.toc| file (of course it does
+mean that if you remove usage of \etoc from the document, you
+should trash the |.toc| file). The correct local table of
+contents will be displayed only on the next |latex| run.
+
+If the document class does not use the extension |.toc| for
+the file where the TOC data is preserved, then \etoc will
+fail. If the data written in the |.toc| file does not contain
+the name, number and page numbers in \cs{contentsline} lines,
+then \etoc will fail. If the typesetting of entries of type
+\emph{kind} is not done by a macro with name \cs{l@kind}, then
+\etoc will fail. If these macros are redefined after the
+\cs{begin\{document\}} then \etoc will fail. However if they
+are defined before and \etoc is instructed of their level by
+commands such as \cs{etocsetlevel\{kind\}\{2\}} then
+\cs{etocstandardlines} should be functional. You may customize
+the standard styles throughout the document (with |tocloft|
+for example) and \etoc should respond in compatibility mode as
+expected.
 
 \subsection{\TeX nical matters}
 
-The \csa{etocname}, \csa{etocnumber}, \csa{etocpage} and
-\csa{etocifnumbered} macros are protected against premature
-expansion. The macro \csa{etocsetstyle}, as well as
-\csa{etocsetlevel} and the global style commands
-\csa{etocmulticolstyle}, \csa{etocruledstyle} and
-\csa{etocframedstyle} obey \LaTeX{}'s groups.
-
+The \cs{etocname}, \cs{etocnumber}, \cs{etocpage} and
+\cs{etocifnumbered} macros are protected against premature
+expansion. They end with an \cs{xspace}. The style customizing
+commands (local and global) such as \cs{etocsetstyle},
+\cs{etocsetlevel}, \cs{etocsettocstyle},
+\cs{etocmulticolstyle}, \cs{etocruledstyle},
+\cs{etocframedstyle} do obey \LaTeX{}'s groups. All TOCs are
+typeset inside groups.
+
+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 these
+instructions should be done in such a way that they can
+be activated or deactivated easily from the document source,
+as need be.
 
 \subsection{Errors and catastrophes}
 
+After using \cs{etocsetstyle} for one level, the remaining
+uncustomized levels use the \etoc's default styles. One has to
+make sure that all levels needed for the next table of
+contents are mutually compatible.
+
+Do not clone a clone but produce rather twins by cloning the
+same original local table of contents.
+
 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). In certain
-extreme cases (\emph{i.e.} after having removed the use of package
-|hyperref| from the document), one must trash the previous
-|.aux| and |.toc| files.
+document get its final appearance (at least twice). 
 
+In certain extreme cases (\emph{e.g.} if one removes the
+|hyperref| package from a previously hyperlinked document),
+one must trash the previous |.aux| and |.toc| files. But
+adding \cs{usepackage\{hyperref\}} to a non-hyperlinked source
+should cause no trouble at all (the old |.toc| file will not
+be used, the new one, whose format differs, will be used on
+the next run).
 
-\part{The code}
 
+\part{The code}
 
-This source file |etoc.dtx| produces the package file
+This source file |etoc.dtx| produces 
 |etoc.sty| when one does |latex etoc.dtx| or |pdflatex etoc.dtx| 
 (an |etoc.ins| file is also produced, for
 distributions expecting it for installation). Two more runs
 are necessary to finish producing the documentation. The
 |etoc.sty| file should be moved to a suitable location within
-the \TeX{} distribution.
+the \TeX{} installation.
 
 \section{Implementation}
 
@@ -1564,6 +1916,7 @@ release.
 % placeholder for comments
 %    \begin{macrocode}
 \newtoks\Etoc@toctoks
+\newif\ifEtoc@jj  % book
 \newif\ifEtoc@j   % part  
 \newif\ifEtoc@    % chapter
 \newif\ifEtoc@i   % section
@@ -1573,7 +1926,7 @@ release.
 \newif\ifEtoc@v   % subparagraph
 \newif\ifEtoc@number
 \newif\ifEtoc@hyperref
-\newif\ifEtoc@star
+\newif\ifEtoc@tocwithid
 \newif\ifEtoc@standard
 \newif\ifEtoc@part 
 %    \end{macrocode}
@@ -1588,15 +1941,18 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
+\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}}
+\def\Etoc@@minustwo@@{-\tw@}
 \let\Etoc@@minusone@@\m@ne
 \chardef\Etoc@@zero@@\z@
 \chardef\Etoc@@one@@\@ne
 \chardef\Etoc@@two@@\tw@
 \chardef\Etoc@@three@@\thr@@
-\chardef\Etoc@@four@@4\relax
-\chardef\Etoc@@five@@5\relax
-\chardef\Etoc@@six@@6\relax
-\let\Etoc@localtop\m@ne
+\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}
@@ -1622,13 +1978,14 @@ release.
                            \Etoc@Lazarus@eltb#2}}
 \def\etocsetlevel#1#2{%
  \let\Etoc@next\@firstofone
- \ifcase#2\or\or\or\or\or\else\ifnum#2=\m@ne\else
+ \ifcase#2\or\or\or\or\or
+       \else\ifnum#2=\m@ne\else\ifnum#2=-\tw@\else
     \PackageWarning{etoc}
     {unexpected value `#2' in \string\etocsetlevel.^^J%
-    Should be -1, 0, 1, 2, 3, 4 or 5. Set to -1}%
+    Should be -2,-1, 0, 1, 2, 3, 4 or 5. Set to -1}%
      \expandafter\def\csname Etoc@#1@\endcsname{minusone}%
      \expandafter\let\csname Etoc@#1@@\endcsname\m@ne
- \let\Etoc@next\@gobble\fi\fi
+ \let\Etoc@next\@gobble\fi\fi\fi
  \if@noskipsec 
  \else
     \expandafter\expandafter\expandafter
@@ -1659,9 +2016,15 @@ release.
       \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@five@@
       \expandafter\def \csname Etoc@#1@\endcsname{five}%
    \else
+      \ifnum#2=\m@ne
       \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minusone@@
       \expandafter\def \csname Etoc@#1@\endcsname{minusone}%
+      \else
+      \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@minustwo@@
+      \expandafter\def \csname Etoc@#1@\endcsname{minustwo}%
+      \fi
    \fi}}
+\etocsetlevel{book}{-2}
 \etocsetlevel{part}{-1}
 \etocsetlevel{chapter}{0}
 \etocsetlevel{section}{1}
@@ -1726,6 +2089,7 @@ release.
   \or
       \global\Etoc@vtrue
   \else
+    \ifnum#1=\m@ne
       \global\Etoc@vfalse
       \global\Etoc@ivfalse
       \global\Etoc@iiifalse
@@ -1733,6 +2097,16 @@ release.
       \global\Etoc@ifalse
       \global\Etoc@false
       \global\Etoc@jtrue
+    \else
+      \global\Etoc@vfalse
+      \global\Etoc@ivfalse
+      \global\Etoc@iiifalse
+      \global\Etoc@iifalse
+      \global\Etoc@ifalse
+      \global\Etoc@false
+      \global\Etoc@jfalse
+      \global\Etoc@jjtrue
+    \fi
   \fi}
 %    \end{macrocode}
 % placeholder for comments
@@ -1804,6 +2178,7 @@ release.
       \gdef\Etoc@contents{\Etoc@contents@five}%
       \gdef\Etoc@prefix{\Etoc@prefix@five}%
   \else
+    \ifnum\Etoc@tmp=\m@ne
       \ifEtoc@v \Etoc@end@five\fi
       \ifEtoc@iv \Etoc@end@four\fi
       \ifEtoc@iii \Etoc@end@three\fi
@@ -1814,6 +2189,18 @@ release.
       \global\Etoc@parttrue
       \gdef\Etoc@contents{\Etoc@contents@minusone}%
       \gdef\Etoc@prefix{\Etoc@prefix@minusone}%
+    \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 \else \def\Etoc@next{\Etoc@begin@minustwo}\fi
+      \gdef\Etoc@contents{\Etoc@contents@minustwo}%
+      \gdef\Etoc@prefix{\Etoc@prefix@minustwo}%
+      \fi
   \fi
   \Etoc@setflags{\Etoc@tmp}%
   \fi\fi
@@ -1873,7 +2260,7 @@ release.
 %    \begin{macrocode}
 \def\Etoc@getit@hyp #1#2#3#4#5#6\etoc@{%
   \def\Etoc@getname ##1\hspace\relax\etoc@{%
-   \global\@namedef{etocname }{\leavevmode #1{#2}{#3}{##1}#5}\xspace}%
+   \global\@namedef{etocname }{\leavevmode #1{#2}{#3}{##1}#5\xspace}}%
   \def\Etoc@getnbr ##1\hspace##2##3\etoc@{%
    \ifx\relax##2\else
    \global\@namedef{etocnumber }{\leavevmode #1{#2}{#3}{##1}#5\xspace}%
@@ -1919,7 +2306,6 @@ release.
 \def\Etoc@starttoc{%
 \begingroup   
 \makeatletter 
-\chardef\ET@endline\endlinechar
 \@ifpackageloaded{hyperref}
    {\ifx\hyper@last\@undefined
     \ltx@ifpackageloaded {parskip}{\parskip \z@ }{}%
@@ -1933,10 +2319,9 @@ release.
            \Etoc@readtoc\Etoc@tf
         \closein\Etoc@tf}
     {\typeout{No file \jobname .toc.}}}%
-\endlinechar\ET@endline
 \if@filesw \newwrite \tf@toc \immediate
 \openout \tf@toc \jobname .toc\relax \fi 
-\endgroup}
+\@nobreakfalse \endgroup}
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
@@ -1949,17 +2334,22 @@ release.
    \global\Etoc@ifalse
    \global\Etoc@false
    \global\Etoc@jfalse
+   \global\Etoc@jjfalse
 \ifEtoc@standard
 \Etoc@Lazarus
-\etocsetstyle{@minusone}{}{}{}{}%
-\etocsetstyle{@zero}{}{}{}{}%
-\etocsetstyle{@one}{}{}{}{}%
-\etocsetstyle{@two}{}{}{}{}%
-\etocsetstyle{@three}{}{}{}{}%
-\etocsetstyle{@four}{}{}{}{}%
-\etocsetstyle{@five}{}{}{}{}%
+\etoc@setstyle{@minustwo}{}{}{}{}%
+\etoc@setstyle{@minusone}{}{}{}{}%
+\etoc@setstyle{@zero}{}{}{}{}%
+\etoc@setstyle{@one}{}{}{}{}%
+\etoc@setstyle{@two}{}{}{}{}%
+\etoc@setstyle{@three}{}{}{}{}%
+\etoc@setstyle{@four}{}{}{}{}%
+\etoc@setstyle{@five}{}{}{}{}%
 \else  
-\let\numberline\@gobble 
+\let\numberline\@gobble
+\let\booknumberline\numberline
+\let\partnumberline\numberline
+\let\chapternumberline\numberline
 \fi
 \the\Etoc@toctoks
 \ifEtoc@notactive\else 
@@ -1970,6 +2360,7 @@ release.
   \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}
 % placeholder for comments
@@ -1979,6 +2370,7 @@ release.
     \ifEtoc@localtoc 
     \ifEtoc@notactive
         \ifnum #1=#2\relax
+          \ifEtoc@jj  \global\let\Etoc@localtop\Etoc@@minusone@@ \fi
           \ifEtoc@j   \global\let\Etoc@localtop\Etoc@@zero@@  \fi
           \ifEtoc@    \global\let\Etoc@localtop\Etoc@@one@@   \fi
           \ifEtoc@i   \global\let\Etoc@localtop\Etoc@@two@@   \fi
@@ -1993,7 +2385,8 @@ release.
                       \global\Etoc@iifalse
                       \global\Etoc@ifalse
                       \global\Etoc@false
-                      \global\Etoc@jfalse}%
+                      \global\Etoc@jfalse
+                      \global\Etoc@jjfalse}%
         \fi
     \fi\fi
 \Etoc@next}
@@ -2001,16 +2394,6 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \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}
-{\def\1{\Etoc@again}\expandafter
-\gdef\1 {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}}
-%    \end{macrocode}
-% placeholder for comments
-%    \begin{macrocode}
 \long\def\Etoc@localtableofcontents#1{%
     \edef\Etoc@tmp{#1}%
     \ifnum\Etoc@tmp<\@ne
@@ -2023,8 +2406,8 @@ release.
     \edef\etoc@startlocaltoc##1{%
          \noexpand\etoc@@startlocaltoc{##1}{#1}}
     \Etoc@localtoctrue
-    \let\Etoc@localtop\m@ne
-    \Etoc@stoptocfalse
+    \let\Etoc@localtop\Etoc@@minustwo@@
+    \global\Etoc@stoptocfalse
     \global\Etoc@notactivetrue
     \Etoc@tableofcontents
     \endgroup}%
@@ -2032,12 +2415,24 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \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}\ifEtoc@tocwithid\else\addtocontents{toc}
+       {\string\etoc@startlocaltoc\string{\arabic{etoc@tocid}\string}}\fi
+       \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
+{\def\1{\Etoc@again}\expandafter
+\gdef\1 {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}}
+%    \end{macrocode}
+% placeholder for comments
+%    \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@star
+ \ifEtoc@tocwithid
     \def\Etoc@next{\Etoc@localtableofcontents{\c@etoc@tocid}}%
  \else
     \ifx\Etoc@nexttoken\ref
@@ -2053,23 +2448,33 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\def\tableofcontents{\par
-   \refstepcounter{etoc@tocid}%
-   \@ifstar {\addtocontents{toc}
-   {\string\etoc@startlocaltoc\string{\arabic{etoc@tocid}\string}}%
-   \Etoc@startrue
-   \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} 
-   {\Etoc@starfalse
-    \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}}
+\newcommand\etocaftertitlehook{}
+\def\table@fcontents{\par
+    \refstepcounter{etoc@tocid}% 
+    \Etoc@tocwithidfalse
+    \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
+\def\localtable@fcontents{\par
+    \refstepcounter{etoc@tocid}%
+    \addtocontents{toc}
+       {\string\etoc@startlocaltoc\string{\arabic{etoc@tocid}\string}}%
+    \Etoc@tocwithidtrue
+    \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
+\def\tableofcontents{\@ifstar
+   {\let\Etoc@aftertitlehook\relax\table@fcontents}
+   {\let\Etoc@aftertitlehook\etocaftertitlehook\table@fcontents}}
+\def\localtableofcontents{\@ifstar
+   {\let\Etoc@aftertitlehook\relax\localtable@fcontents}
+   {\let\Etoc@aftertitlehook\etocaftertitlehook\localtable@fcontents}}
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
 \newcommand\etocsettocstyle[2]{%
 \long\def\Etoc@tableofcontents
-{\ifnum\c@tocdepth>-2\let\Etoc@@next\@firstofone\else
+{\ifnum\c@tocdepth>\Etoc@minf\let\Etoc@@next\@firstofone\else
 \let\Etoc@@next\@gobble\fi
-\Etoc@@next{#1\Etoc@toctoc\let\Etoc@n@xt\relax
-              \ifEtoc@star\else
+\Etoc@@next{#1\Etoc@aftertitlehook
+              \Etoc@toctoc\let\Etoc@n@xt\relax
+              \ifEtoc@tocwithid\else
               \ifEtoc@localtoc
               \ifEtoc@notactive
               \def\Etoc@n@xt{\Etoc@localtocfalse
@@ -2077,10 +2482,16 @@ release.
                              \Etoc@toctoc}%
               \fi\fi\fi\Etoc@n@xt
               #2}}}
+\newcommand\etocextendtocstyle[2]{%
+\toks0=\expandafter{\Etoc@tableofcontents #2}%
+\toks2={#1}%
+\long\edef\Etoc@tableofcontents{\the\toks2 \the\toks0}}
+%                      % je me fais avoir ^ à chaque fois!
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\newcommand\etocsetstyle[5]{%
+\newcommand\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}%
 \long\expandafter\def
@@ -2092,12 +2503,9 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\def\etocstandardlines{\Etoc@standardtrue}
-%    \end{macrocode}
-% placeholder for comments
-%    \begin{macrocode}
+\newcommand\etocfontminustwo{\normalfont \LARGE \bfseries}
 \newcommand\etocfontminusone{\normalfont \large \bfseries}
-\newcommand\etocfontzero{\normalfont \normalsize \bfseries}
+\newcommand\etocfontzero{\normalfont \large \bfseries}
 \newcommand\etocfontone{\normalfont \normalsize \bfseries}
 \newcommand\etocfonttwo{\normalfont \normalsize}
 \newcommand\etocfontthree{\normalfont \footnotesize}
@@ -2106,6 +2514,7 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
+\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}
@@ -2114,6 +2523,7 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
+\newcommand\etocbaselinespreadminustwo{1}
 \newcommand\etocbaselinespreadminusone{1}
 \newcommand\etocbaselinespreadzero{1}
 \newcommand\etocbaselinespreadone{1}
@@ -2122,31 +2532,48 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\newcommand\etocminusonelrmargins{1em}
+\newcommand\etocminustwoleftmargin{1.5em plus 0.5fil}
+\newcommand\etocminustworightmargin{1.5em plus -0.5fil}
+\newcommand\etocminusoneleftmargin{1em}
+\newcommand\etocminusonerightmargin{1em}
 \newcommand\etoctoclineleaders
-{\hbox{\normalfont\normalsize\hbox to 2ex {\hss.\hss}}}
+    {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}}
 \newcommand\etocabbrevpagename{p.~}
+\newcommand\etocpartname{\partname}
+\newcommand\etocbookname{Book}
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\def\etocetoclines{\Etoc@standardfalse
+\def\etoctoclines{\Etoc@standardfalse
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\etocsetstyle{@minusone}{\addpenalty\@highpenalty}{}
+\etoc@setstyle{@minustwo}{\etocskipfirstprefix}{\pagebreak[3]}
+{\begingroup \etocfontminustwo
+  \addvspace{\etocsepminustwo}%
+  \parindent \z@ 
+  \leftskip  \etocminustwoleftmargin
+  \rightskip \etocminustworightmargin
+  \parfillskip \@flushglue
+  \vbox{\etocifnumbered{\etocbookname~\etocnumber:~}{}\etocname
+  \baselineskip\etocbaselinespreadminustwo\baselineskip\par}%
+  \addvspace{\etocsepminusone}\nobreak
+\endgroup}
+{}%
+\etoc@setstyle{@minusone}{\etocskipfirstprefix}{\pagebreak[3]}
 {\begingroup \etocfontminusone
   \addvspace{\etocsepminusone}%
   \parindent \z@ 
-  \leftskip  \etocminusonelrmargins 
-  \rightskip \etocminusonelrmargins
+  \leftskip  \etocminusoneleftmargin
+  \rightskip \etocminusonerightmargin
   \parfillskip \@flushglue
-  \vbox{\etocifnumbered{\etocnumber.~}{}\etocname
+  \vbox{\etocpartname\etocifnumbered{ \etocnumber.~}{ }\etocname
   \baselineskip\etocbaselinespreadminusone\baselineskip\par}%
   \addvspace{\etocsepzero}\nobreak
 \endgroup}
-{\addpenalty\@secpenalty}%
-\etocsetstyle{@zero}
-{\addpenalty\@highpenalty}{}
+{}%
+\etoc@setstyle{@zero}
+{\addpenalty\@highpenalty\etocskipfirstprefix}{\pagebreak[2]}
 {\begingroup 
    \etocfontzero
    \addvspace{\etocsepzero}%
@@ -2159,9 +2586,8 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\etocsetstyle{@one}
-{\addpenalty\@medpenalty}
-{}
+\etoc@setstyle{@one}
+{\addpenalty\@medpenalty\etocskipfirstprefix}{\pagebreak[1]}
 {\begingroup\etocfontone
 \addvspace{\etocsepone}%
 \parindent \z@ \parfillskip \z@ 
@@ -2172,8 +2598,8 @@ release.
 \setbox\z@=\etoctoclineleaders
 \advance\dimen\z@\wd\z@
 \etocifnumbered
-{\setbox\tw@\hbox{\etocfonttwo\etocnumber, \etocabbrevpagename\etocpage}}
-{\setbox\tw@\hbox{\etocfonttwo\etocabbrevpagename\etocpage}}%
+{\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage}}
+{\setbox\tw@\hbox{\etocabbrevpagename\etocpage}}%
 \advance\dimen\z@\wd\tw@
 \ifdim\dimen\z@ < \linewidth
        \vbox{\etocname\nobreak
@@ -2191,9 +2617,9 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\etocsetstyle{@two}
-{\addpenalty\@medpenalty} 
-{}
+\etoc@setstyle{@two}
+{\addpenalty\@medpenalty\etocskipfirstprefix} 
+{\pagebreak[1]}
 {\begingroup\etocfonttwo
 \addvspace{\etocseptwo}%
 \parindent \z@ \parfillskip \z@
@@ -2223,67 +2649,41 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\etocsetstyle{@three}
-{\nobreak
+\etoc@setstyle{@three}
+{\nopagebreak
 \etocfontthree
 \addvspace{\etocsepthree}%
 \nointerlineskip\noindent
 \etocskipfirstprefix}
 {\allowbreak\,--\,}
-{\etocname}
-{\unskip.\hfil\begingroup
+{\etocname\unskip}  % \xspace in \etocname
+{.\hfil\begingroup
 \baselineskip\etocbaselinespreadthree\baselineskip
 \par\endgroup
 \addpenalty{-\@highpenalty}}%
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\etocsetstyle{@four}{}{}{}{}%
+\etoc@setstyle{@four}{}{}{}{}%
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\etocsetstyle{@five}{}{}{}{}%
+\etoc@setstyle{@five}{}{}{}{}%
 }
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\newcommand\etocmarkboth[1][\contentsname]{%
-    \@mkboth {\MakeUppercase #1}
-             {\MakeUppercase #1}}
-\def\etoc@article@tochead#1{\section *{#1\@mkboth 
-       {\MakeUppercase{#1}}
-       {\MakeUppercase{#1}}}}
-\def\etoc@article@tochead@nomarks#1{\section *{#1}}
-\def\etoc@book@tochead#1{\chapter *{#1\@mkboth
-      {\MakeUppercase{#1}}
-      {\MakeUppercase{#1}}}}
-\def\etoc@book@tochead@nomarks#1{\chapter *{#1}}
-\let\etoc@standard@tochead\etoc@article@tochead
-\let\etoc@standard@tochead@nomarks\etoc@article@tochead@nomarks
-\@ifclassloaded{book}{%
-\let\etoc@standard@tochead\etoc@book@tochead
-\let\etoc@standard@tochead@nomarks\etoc@book@tochead@nomarks}{}
-\@ifclassloaded{report}{%
-\let\etoc@standard@tochead\etoc@book@tochead
-\let\etoc@standard@tochead@nomarks\etoc@book@tochead@nomarks}{}
-%    \end{macrocode}
-% placeholder for comments
-%    \begin{macrocode}
-\newcommand\etocstandardheading[1]{%
-\etoc@standard@tochead{#1}}
-\newcommand\etocstandardheadingnomarks[1]{%
-\etoc@standard@tochead@nomarks{#1}}
-%    
 \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}
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\newcommand\etocmulticolstyle[2][2]{%
+\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{%
 \etocsettocstyle
    {\addvspace{\etocabovetocskip}%
     \ifnum #1>\@ne\let\Etoc@next\@firstoftwo
@@ -2294,8 +2694,9 @@ release.
     \setlength{\columnsep}{\etoccolumnsep}%
     \setlength{\multicolsep}{\etocmulticolsep}%
     \begin{multicols}{#1}[#2\addvspace{\etocsepminusone}]}
-    {#2\addvspace{\etocsepminusone}\pretolerance\etocmulticolpretolerance
-         \tolerance\etocmulticoltolerance}} 
+    {#2\addvspace{\etocsepminusone}%
+       \pretolerance\etocmulticolpretolerance
+       \tolerance\etocmulticoltolerance}}
    {\ifnum #1>\@ne\let\Etoc@next\@firstofone
          \else \let\Etoc@next\@gobble\fi
     \Etoc@next{\end{multicols}}%
@@ -2319,7 +2720,7 @@ release.
 % placeholder for comments
 %    \begin{macrocode}
 \newcommand\etoc@ruledheading[1]{%
-   \hbox to \linewidth{\color@begingroup
+   \hb@xt@\linewidth{\color@begingroup
           \hss #1\hss\hskip-\linewidth
           \etoctoprulecolorcmd\leaders\etoctoprule\hfil
           \phantom{#1}%
@@ -2328,7 +2729,7 @@ release.
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\newcommand\etocruledstyle[2][2]{%
+\newcommand\etocruledstyle[2][\etocdefaultnbcol]{%
 \etocsettocstyle
    {\addvspace{\etocabovetocskip}%
     \ifnum #1>\@ne\let\Etoc@next\@firstoftwo
@@ -2354,13 +2755,13 @@ release.
 \newcommand\Etoc@relax{\relax}
 \newbox\etoc@framed@titlebox
 \newbox\etoc@framed@contentsbox
-\newcommand\etocframedstyle[2][2]{%
+\newcommand\etocframedstyle[2][\etocdefaultnbcol]{%
 \etocsettocstyle{%
     \addvspace{\etocabovetocskip}%
-    \setbox\z@\hbox{#2}%
+    \sbox\z@{#2}%
     \dimen\z@\dp\z@
         \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi
-    \setbox\etoc@framed@titlebox=\hbox to \linewidth{\color@begingroup
+    \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup
         \hss 
         \ifx\etocbkgcolorcmd\Etoc@relax\else 
             \sbox\tw@{\color{white}%
@@ -2399,14 +2800,15 @@ release.
      {\ifnum #1>\@ne\let\Etoc@next\@firstofone
          \else \let\Etoc@next\@gobble\fi
     \Etoc@next{\end{multicols}\unskip}%
-    \end{minipage}%<- indispensable (horizontal mode here)
+    \end{minipage}%
     \egroup
     \vskip\etocinnerbottomsep
     \egroup
+        \vbox{\hsize\linewidth
         \ifx\etocbkgcolorcmd\Etoc@relax\else
-        \vskip\ht\etoc@framed@titlebox
-        \vskip\dp\etoc@framed@titlebox
-        \hbox to \linewidth{\color@begingroup
+            \kern\ht\etoc@framed@titlebox
+            \kern\dp\etoc@framed@titlebox
+            \hb@xt@\linewidth{\color@begingroup
             \etocleftrulecolorcmd\etocleftrule
             \etocbkgcolorcmd
             \leaders\vrule 
@@ -2422,69 +2824,223 @@ release.
         \vskip-\ht\etoc@framed@titlebox
         \fi
     \box\etoc@framed@titlebox\nointerlineskip
-    \hbox to \linewidth{\color@begingroup
+    \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
-    \hbox to \linewidth{\color@begingroup\etocbottomrulecolorcmd
-          \leaders\etocbottomrule\hss\color@endgroup}
+    \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd
+          \leaders\etocbottomrule\hss\color@endgroup}}
     \addvspace{\etocbelowtocskip}}}
 %    \end{macrocode}
 % placeholder for comments
 %    \begin{macrocode}
-\newcommand\etoc@multicoltoc[2][2]{%
-\begingroup
+\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{%
 \etocmulticolstyle[#1]{#2}%
- \ifEtoc@star
-    \def\Etoc@next{\tableofcontents*}%
-    \else
-    \def\Etoc@next{\tableofcontents}%
- \fi
-\Etoc@mustclosegrouptrue
-\Etoc@next}
+\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][2]{%
-\begingroup
+\newcommand\etoc@ruledtoc[2][\etocdefaultnbcol]{%
 \etocruledstyle[#1]{#2}%
-   \ifEtoc@star
-      \def\Etoc@next{\tableofcontents*}%
-   \else
-      \def\Etoc@next{\tableofcontents}%
-   \fi
-\Etoc@mustclosegrouptrue
-\Etoc@next}
+\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][2]{%
-\begingroup
+\newcommand\etoc@framedtoc[2][\etocdefaultnbcol]{%
 \etocframedstyle[#1]{#2}%
-   \ifEtoc@star
-      \def\Etoc@next{\tableofcontents*}%
-   \else
-      \def\Etoc@next{\tableofcontents}%
-   \fi
-\Etoc@mustclosegrouptrue
-\Etoc@next}
+\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}
+\newcommand\etocmulticol{\begingroup
+    \Etoc@mustclosegrouptrue
+    \@ifstar
+    {\etoc@multicoltoci}
+    {\etoc@multicoltoc}}
+\newcommand\etocruled{\begingroup
+    \Etoc@mustclosegrouptrue
+    \@ifstar
+    {\etoc@ruledtoci}
+    {\etoc@ruledtoc}}
+\newcommand\etocframed{\begingroup
+    \Etoc@mustclosegrouptrue
+    \@ifstar
+    {\etoc@framedtoci}
+    {\etoc@framedtoc}}
+\newcommand\localetocmulticol{\begingroup
+    \Etoc@mustclosegrouptrue
+    \@ifstar
+    {\etoc@local@multicoltoci}
+    {\etoc@local@multicoltoc}}
+\newcommand\localetocruled{\begingroup
+    \Etoc@mustclosegrouptrue
+    \@ifstar
+    {\etoc@local@ruledtoci}
+    {\etoc@local@ruledtoc}}
+\newcommand\localetocframed{\begingroup
+    \Etoc@mustclosegrouptrue
+    \@ifstar
+    {\etoc@local@framedtoci}
+    {\etoc@local@framedtoc}}
+%    \end{macrocode}
+% placeholder for comments
+%    \begin{macrocode}
+\newcommand\etocarticlestyle{%
+    \etocsettocstyle
+    {\section *{\contentsname 
+                \@mkboth {\MakeUppercase \contentsname}
+                         {\MakeUppercase \contentsname}}}
+    {}}
+\newcommand\etocarticlestylenomarks{%
+    \etocsettocstyle
+    {\section *{\contentsname}}
+    {}}
+%    \end{macrocode}
+% placeholder for comments
+%    \begin{macrocode}
+\newcommand\etocbookstyle{%
+    \etocsettocstyle
+    {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi 
+     \chapter *{\contentsname 
+                \@mkboth {\MakeUppercase \contentsname}
+                         {\MakeUppercase \contentsname}}}
+    {\if@restonecol \twocolumn \fi}}
+\newcommand\etocbookstylenomarks{%
+    \etocsettocstyle
+    {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi 
+     \chapter *{\contentsname}}
+    {\if@restonecol \twocolumn \fi}}
+\let\etocreportstyle\etocbookstyle
+\let\etocreportstylenomarks\etocbookstylenomarks
+%    \end{macrocode}
+% placeholder for comments
+%    \begin{macrocode}
+\newcommand\etocmemoirtoctotocfmt[2]{%
+    \renewcommand\etocaftertitlehook{\ifmem@em@starred@listof \else
+         \phantomsection \addcontentsline {toc}{#1}{#2}\fi}}
+\newcommand\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\etocmulticol{\@ifstar{\Etoc@startrue\etoc@multicoltoc}
-{\Etoc@starfalse\etoc@multicoltoc}}
-\def\etocruled{\@ifstar{\Etoc@startrue\etoc@ruledtoc}
-{\Etoc@starfalse\etoc@ruledtoc}}
-\def\etocframed{\@ifstar{\Etoc@startrue\etoc@framedtoc}
-{\Etoc@starfalse\etoc@framedtoc}}
+\newcommand\etocscrartclstyle{%
+    \etocsettocstyle
+        {\let\if@dynlist\if@tocleft
+         \iftocfeature {toc}{onecolumn}
+             {\iftocfeature {toc}{leveldown}
+              {}
+              {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }}
+             {}%
+         \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}
-\etocetoclines
-\etocmulticolstyle{\etocstandardheading\contentsname}
+\newcommand\etocnakedtocdisplaystyle{\etocsettocstyle{}{}}
+\newcommand\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}}{}
+\@ifclassloaded{memoir}
+    {\renewcommand\etocfontone{\normalfont\normalsize}
+     \etocmemoirtoctotocfmt{chapter}{\contentsname}%
+     \renewcommand\etocstandarddisplaystyle{\etocmemoirstyle}
+     \Etoc@redefetocstyle{chapter}}{}
+%    \end{macrocode}
+% placeholder for comments
+%    \begin{macrocode}
+\newcommand\etocstandardlines{\Etoc@standardtrue}
+\etoctoclines
+\etocstandardlines
+\etocstandarddisplaystyle
 \endinput
 %    \end{macrocode}
 % \MakePercentComment
@@ -2505,7 +3061,7 @@ release.
   Grave accent  \`     Left brace    \{     Vertical bar  \|
   Right brace   \}     Tilde         \~}
 
-\CheckSum{2091}
+\CheckSum{2536}
 
 \Finale
 %%
-- 
cgit v1.2.3

