From 34145983cf2b9d69c10ebdfd3ba8222dd0d1646e Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sat, 18 Apr 2015 22:37:38 +0000
Subject: etoc (18apr15)

git-svn-id: svn://tug.org/texlive/trunk@36919 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/source/latex/etoc/etoc.dtx | 747 +++++++++++++++++++++------
 1 file changed, 576 insertions(+), 171 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 2f0abe59445..70cda35fe26 100644
--- a/Master/texmf-dist/source/latex/etoc/etoc.dtx
+++ b/Master/texmf-dist/source/latex/etoc/etoc.dtx
@@ -1,13 +1,13 @@
 % -*- coding: utf-8; -*-
 %<*none>
-{\def\doctimestamp {Time-stamp: <09-04-2015 17:33:38 CEST>}%
+{\def\doctimestamp {Time-stamp: <17-04-2015 22:17:33 CEST>}%
  \def\getdtxtimestamp #1 <#2 #3 #4>{#2 at #3 #4}%
  \xdef\etocdtxtimestamp {\expandafter\getdtxtimestamp\doctimestamp }}%
 %</none>
 %<*!readme>
 %%
 %% Package: etoc
-%% Version: 1.08d (2015/04/09)
+%% Version: 1.08e (2015/04/17)
 %% License: LPPL 1.3c or later (see etoc.dtx)
 %% Copyright (C) 2012-2015 Jean-Francois Burnol 
 %%                         <jfbu at free dot fr>
@@ -17,9 +17,9 @@
 %%
 %</!readme>
 %<*insfile>
-\def\etocpkgdate        {2015/04/09}
-\def\etocdocdate        {2015/04/09}
-\def\etocpkgversion     {v1.08d}
+\def\etocpkgdate        {2015/04/17}
+\def\etocdocdate        {2015/04/17}
+\def\etocpkgversion     {v1.08e}
 \def\etocpkgdescription {Completely customisable TOCs (jfB)}
 %</insfile>
 %<*none>
@@ -36,7 +36,7 @@
     \catcode32=13\catcode`\\=12^^Brelax^^A
 ^^Bfirstofone{^^Bendgroup^^Bdef^^BetocLicense^^A
 {% Package: etoc
-% Version: 1.08d (2015/04/09)
+% Version: 1.08e (2015/04/17)
 % License: LPPL 1.3c or later
 % Copyright (C) 2012-2015 Jean-Francois Burnol <jfbu at free dot fr>
 % Copyright (C) 2014-2015 Christine Roemer <Christine_Roemer at t-online dot de>
@@ -71,7 +71,7 @@
 %<*readme>
 <!-- -->
 
-    Source:  etoc.dtx (v1.08d 2015/04/09)
+    Source:  etoc.dtx (v1.08e 2015/04/17)
     Author:  Jean-Francois Burnol
     Author:  Christine Roemer et al. (German tranlation)
     Info:    Completely customisable TOCs
@@ -135,9 +135,9 @@ It is also possible to run latex or pdflatex directly on etoc.dtx.
 
 At least three ways to produce etoc.pdf (method (3) is preferred):
 
-1. latex etoc.dtx (four times), then dvips, then ps2pdf
-2. pdflatex etoc.dtx (four times)
-3. latex etoc.tex (four times), then dvipdfmx
+1. latex etoc.dtx (thrice), then dvips, then ps2pdf
+2. pdflatex etoc.dtx (thrice)
+3. latex etoc.tex (thrice), then dvipdfmx
 
 Method (3) produces the smallest pdf files.
 Options can be set in etoc.tex:
@@ -197,6 +197,32 @@ etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi.
 RECENT CHANGES
 ==============
 
+v1.08e \[2015/04/17\]
+---------------------
+
+The command `\etocchecksemptiness` tells etoc to not print, from
+that point on, the headings of the local tables of contents if
+they have empty contents. This is mainly for class authors who
+might want to have their `\section` or `\chapter` automatically do
+a `\localtableofcontents`. Could prove also useful for batch
+conversions of documents. Thanks to Paul Gaborit who asked for
+such a feature.
+
+The command `\etocnotocifnotoc` extends this behaviour to global
+TOCs: indeed why should documents with no sectioning units take
+this as an excuse not to use package etoc ?
+
+The command `\etocifwasempty{yes}{no}` can be used for
+suitable extra action.
+
+A `\tableofcontents\ref{foo}` now expects foo to be a label to a
+_local_ TOC. The use with foo a label to a _global_ TOC is not
+supported anymore as it had no utility and made the code more
+complex.
+
+The syntax `\localtableofcontents\ref{foo}` is now accepted as a
+synonym to the earlier syntax `\tableofcontents\ref{foo}`.
+
 v1.08d \[2015/04/09\]
 ---------------------
 
@@ -296,7 +322,7 @@ Daniel Büttner, Claudia Dahl, Christian Otto and Christine Römer (FSU
 Jena). My grateful thanks to all!
 %</readme>
 %<*tex>-------------------------------------------------------------------------
-%% run latex four times on this file etoc.tex then dvipdfmx on etoc.dvi 
+%% run latex thrice on this file etoc.tex then dvipdfmx on etoc.dvi 
 %% to produce the documentation etoc.pdf, with source code included.  
 %%
 %% possible dvipdfmx warnings may be ignored, but in case of a too
@@ -348,9 +374,9 @@ Jena). My grateful thanks to all!
 %%        etoc.sty, etoc.tex, etoc-DE.tex and README.md
 %%
 %% At least three ways to produce etoc.pdf (method (3) is preferred):
-%%  (1) latex etoc.dtx (four times), then dvips, then ps2pdf
-%%  (2) pdflatex etoc.dtx (four times)
-%%  (3) latex etoc.tex (four times), then dvipdfmx
+%%  (1) latex etoc.dtx (thrice), then dvips, then ps2pdf
+%%  (2) pdflatex etoc.dtx (thrice)
+%%  (3) latex etoc.tex (thrice), then dvipdfmx
 %%
 %% Method (3) produces the smallest pdf files.
 %% Options can be set in etoc.tex (and etoc-DE.tex):
@@ -716,6 +742,16 @@ Jena). My grateful thanks to all!
   \addto\captionsngerman {\renewcommand\partname{Teil}}
 }
 
+% TEMPORARY 2015/04/16
+\usepackage{etex}
+% With the new LaTeX format (dated 2015/01/01) but released to CTAN
+% around 2015/03/31, and which will be in TL2015, package etoolbox
+% Package: etoolbox 2015/03/19 v2.1d e-TeX tools for LaTeX (JAW)
+% does not load etex.sty, but this currently breaks package forest
+% Package: forest 2014/03/07 v1.05 Drawing (linguistic) trees
+% because of the missing \locbox macro
+% END
+
 \usepackage{tikz}
 \usetikzlibrary{trees}    % added for "cyclic" grow function 2013/03/02
 \usepackage{forest}       % switched from tikz-qtree to forest 2013/09/09
@@ -1024,7 +1060,13 @@ etoc-page
 etoc-skip-first-pre-fix
 etoc-num-ber
 etoc-if-first
+etoc-x-if-first
 etoc-if-num-bered
+etoc-x-if-num-bered
+etoc-if-was-empty
+etoc-x-if-was-empty
+etoc-checks-empti-ness
+etoc-no-toc-if-no-toc
 etoc-the-name
 etoc-the-num-ber
 etoc-the-page
@@ -1113,7 +1155,8 @@ etoc-left-rule-col-or-cmd
 etoc-right-rule-col-or-cmd 
 etoc-bot-tom-rule-col-or-cmd 
 etoc-bkg-col-or-cmd 
-etoc-framed-mp-hook}
+etoc-framed-mp-hook
+}
 
 \hyphenation{next-toc-with-tags}
 \frenchspacing
@@ -1200,9 +1243,9 @@ etoc-framed-mp-hook}
                     nodes={concept},
                     concept color=orange!60,
                     root concept/.append style={font=\huge, text width = 6cm},
-                    level 1/.append style={level distance=7cm, sibling angle=360/8},% 8 hard-coded mais je pourrais aussi le calculer
+                    level 1/.append style={level distance=7cm, sibling angle=360/9},% 9 hard-coded mais je pourrais aussi le calculer
                     level 1 concept/.append style={font=\Large, text width = 3cm},
-                    level 2/.append style={level distance=12.5cm, sibling angle=360/35},% 35 hard coded mais je pourrais aussi le calculer
+                    level 2/.append style={level distance=12.5cm, sibling angle=360/39},% 39 hard coded mais je pourrais aussi le calculer
                     % distance par rapport au CENTRE ! (avec le code tel qu'en ce moment)
                    ]
 \the\treetok
@@ -1310,7 +1353,9 @@ manner: they are made available via the \csb{etocname},
 
 \etoc appears to be (at least partially) compatible with the
 |article|, |book|, |report|, |scrartcl|, |scrbook|, |scrreprt| and
-|memoir| classes. Starting with release |1.07k| it is possible to
+|memoir| classes. 
+
+Starting with release |1.07k| it is possible to
 use \etoc concurrently with  package |tocloft|.
 
 \section{License}
@@ -1321,7 +1366,7 @@ use \etoc concurrently with  package |tocloft|.
 \etocLicense\endgroup
 
 
-\clearpage
+% \clearpage
 
 \etocsettocdepth {subsection}
 
@@ -1673,6 +1718,7 @@ layout is a bit like the one of the \hyperref[toc:main]{main document
 \etocsettagdepth {globalcmds} {subsection}
 \etocsettagdepth {custom}     {none}
 \etocsettagdepth {tips}       {none}
+\etocsettagdepth {etocandworld}{none}
 \etocsettagdepth {code}       {none}
 
 \etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
@@ -1723,6 +1769,7 @@ The code:
 \etocsettagdepth {globalcmds} {subsection}
 \etocsettagdepth {custom}     {none}
 \etocsettagdepth {tips}       {none}
+\etocsettagdepth {etocandworld}{none}
 \etocsettagdepth {code}       {none}
 
 \etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
@@ -3348,10 +3395,10 @@ example was motivated on |2015/03/11| by
 %   #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}}
 
 \renewcommand*{\appendchildtree}[3]{% 
-% this is to construct "t1 child [branch color= #3]{t2}" from #1=t1 and #2=t2
+% this is to construct "t1 child [#3]{t2}" from #1=t1 and #2=t2
 % t1 and t2 are two toks variable (not macros)
 % #3 = for example teal!60
-   \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}%
+   \edef\tmpstuff {\the#1 child [#3]{\the#2}}%
    #1\expandafter {\tmpstuff }%
 }
 
@@ -3365,18 +3412,21 @@ example was motivated on |2015/03/11| by
 % This updates the global tree with the data  from the previous
 % part and all its children sections. Moved here because for some parts the
 % sections are not displayed due to depth tags.
-  {\ifcase\pseudomodthree{\value{partco}}%
-   \or \appendchildtree\treetok\parttok {teal!60}%   first
-   \or \appendchildtree\treetok\parttok {yellow!80}% second
-   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
-   \fi
+  {\ifnum\value{partco}=3
+     \appendchildtree\treetok\parttok {branch color= green!50,level distance=10cm}%
+   \else
+\ifcase\pseudomodthree{\value{partco}}%
+   \or \appendchildtree\treetok\parttok {branch color= teal!60}%   first
+   \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+   \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
+   \fi\fi
    }
   {\stepcounter{partco}%
 % customize manually  some TikZ set-up (should be done inside the TikZ thing I guess)
    \def\tmpoption {}%
    \def\tmprotate {}% first
-   \ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
-   \ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
+   %\ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
+   %\ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
 % define the part node
    \edef\partnode{node \tmpoption 
                   {\unexpanded\expandafter{\etocthelinkednumber}. 
@@ -3384,9 +3434,9 @@ example was motivated on |2015/03/11| by
 % this is a starting point which will be filled it by the section children
    \parttok\expandafter{\partnode}}
   {\ifcase\pseudomodthree{\value{partco}}%
-   \or \appendchildtree\treetok\parttok {teal!60}%   first
-   \or \appendchildtree\treetok\parttok {yellow!80}% second
-   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
+   \or \appendchildtree\treetok\parttok {branch color= teal!60}%   first
+   \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+   \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
    \fi
    }
 
@@ -3410,13 +3460,14 @@ example was motivated on |2015/03/11| by
 \etocsetnexttocdepth{section}
 % use of depth tags to cut out some sections.
 \etocsettagdepth {preamble}   {none}
-\etocsettagdepth {overview}   {section}
+\etocsettagdepth {overview}   {part}
 \etocsettagdepth {arbitrarily}{part}
 \etocsettagdepth {surprising} {section}
 \etocsettagdepth {linestyles} {part}
-\etocsettagdepth {globalcmds} {section}
+\etocsettagdepth {globalcmds} {part}
 \etocsettagdepth {custom}     {section}
-\etocsettagdepth {tips}       {section}
+\etocsettagdepth {tips}       {part}
+\etocsettagdepth {etocandworld}{part}
 \etocsettagdepth {code}       {section}
 
 \tikzset{
@@ -3436,8 +3487,8 @@ example was motivated on |2015/03/11| by
                     nodes={concept}, 
                     concept color=orange!60,
                     root concept/.append style={text width=4cm, font=\Large},
-                    level 1/.append style={level distance=5cm,sibling angle=45, text width=3cm},
-                    level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm},
+                    level 1/.append style={level distance=5cm,sibling angle=40, text width=3cm},
+                    level 2/.append style={level distance=7cm,sibling angle=30, text width=3cm},
                     level 1 concept/.append style={font=\normalsize},
                     ]
 \the\treetok
@@ -3467,10 +3518,10 @@ appears \vpageref{toc:mindmap}.
    #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}}
 
 \renewcommand*{\appendchildtree}[3]{% 
-% this is to construct "t1 child [branch color= #3]{t2}" from #1=t1 and #2=t2
+% this is to construct "t1 child [#3]{t2}" from #1=t1 and #2=t2
 % t1 and t2 are two toks variable (not macros)
 % #3 = for example teal!60
-   \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}%
+   \edef\tmpstuff {\the#1 child [#3]{\the#2}}%
    #1\expandafter {\tmpstuff }%
 }
 
@@ -3484,18 +3535,21 @@ appears \vpageref{toc:mindmap}.
 % This updates the global tree with the data  from the previous
 % part and all its children sections. Moved here because for some parts the
 % sections are not displayed due to depth tags.
-  {\ifcase\pseudomodthree{\value{partco}}%
-   \or \appendchildtree\treetok\parttok {teal!60}%   first
-   \or \appendchildtree\treetok\parttok {yellow!80}% second
-   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
-   \fi
+  {\ifnum\value{partco}=3
+     \appendchildtree\treetok\parttok {branch color= green!50,level distance=10cm}%
+   \else
+\ifcase\pseudomodthree{\value{partco}}%
+   \or \appendchildtree\treetok\parttok {branch color= teal!60}%   first
+   \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+   \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
+   \fi\fi
    }
   {\stepcounter{partco}%
 % customize manually  some TikZ set-up (should be done inside the TikZ thing I guess)
    \def\tmpoption {}%
    \def\tmprotate {}% first
-   \ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
-   \ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
+   %\ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
+   %\ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
 % define the part node
    \edef\partnode{node \tmpoption 
                   {\unexpanded\expandafter{\etocthelinkednumber}. 
@@ -3503,9 +3557,9 @@ appears \vpageref{toc:mindmap}.
 % this is a starting point which will be filled it by the section children
    \parttok\expandafter{\partnode}}
   {\ifcase\pseudomodthree{\value{partco}}%
-   \or \appendchildtree\treetok\parttok {teal!60}%   first
-   \or \appendchildtree\treetok\parttok {yellow!80}% second
-   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
+   \or \appendchildtree\treetok\parttok {branch color= teal!60}%   first
+   \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+   \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
    \fi
    }
 
@@ -3529,13 +3583,14 @@ appears \vpageref{toc:mindmap}.
 \etocsetnexttocdepth{section}
 % use of depth tags to cut out some sections.
 \etocsettagdepth {preamble}   {none}
-\etocsettagdepth {overview}   {section}
+\etocsettagdepth {overview}   {part}
 \etocsettagdepth {arbitrarily}{part}
 \etocsettagdepth {surprising} {section}
 \etocsettagdepth {linestyles} {part}
-\etocsettagdepth {globalcmds} {section}
+\etocsettagdepth {globalcmds} {part}
 \etocsettagdepth {custom}     {section}
-\etocsettagdepth {tips}       {section}
+\etocsettagdepth {tips}       {part}
+\etocsettagdepth {etocandworld}{part}
 \etocsettagdepth {code}       {section}
 
 \tikzset{
@@ -3555,8 +3610,8 @@ appears \vpageref{toc:mindmap}.
                     nodes={concept}, 
                     concept color=orange!60,
                     root concept/.append style={text width=4cm, font=\Large},
-                    level 1/.append style={level distance=5cm,sibling angle=45, text width=3cm},
-                    level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm},
+                    level 1/.append style={level distance=5cm,sibling angle=40, text width=3cm},
+                    level 2/.append style={level distance=7cm,sibling angle=30, text width=3cm},
                     level 1 concept/.append style={font=\normalsize},
                     ]
 \the\treetok
@@ -3579,7 +3634,9 @@ example), this code snippet will write it out to file with extension
   \immediate\write\TOCasTree{\the\treetok}%
 \end{verbatim}
 The author can then copy it from there and customize it manually to get a
-suitable tikz picture.
+suitable tikz picture. See also
+\centeredline{\url{http://tex.stackexchange.com/a/232792}}
+for an elaboration of this.
 
 
 \section{The TOC as a table}
@@ -3797,6 +3854,71 @@ To return to the default, use \csb{etoclocaldefs}. Note that both
 \csb{etocglobaldefs} and \csb{etoclocaldefs} actions are local to the
 environment or group where they are used.
 
+\section{Not displayed empty TOCs}
+
+\subsection{The command \csbhyp{etocchecksemptiness}}
+\label{etocchecksemptiness}
+
+The user needs to issue \csb{etocchecksemptiness} to tell \etoc to check for
+each local table of contents if it is in fact empty; in that case nothing gets
+printed at all.\footnote{Thanks to Paul Gaborit who asked for
+such a feature.} This
+can be useful to authors of \LaTeX{} classes who for example wish to have a
+|\chapter| command doing systematically a \csa{localtableofcontents}, or for
+people producing files via automatic conversions and some of those might have
+sectioning commands and others not.
+
+«Emptiness» means that no \csa{contentsline} command would get executed within
+the scope of the local table of contents --- empty line styles by themselves do
+not make the TOC empty. \etoc always executes the \csb{etocaftertochook}
+command; and the test for emptiness itself executes everything else found in
+the |.toc| file. See \autoref{sec:addingtotoc} in this context.
+
+The suppression of the heading (more precisely of the toc display style
+elements) may be effective only for the final \LaTeX{} runs. For example in
+the situation of a \csa{tableofcontents}|\ref{foo}| where the label |foo| is
+not yet recognized, the heading (but not the contents) is printed and the TOC
+is declared non-empty. Or, if one adds a \localtoc to a document, on the next
+run, the test for emptiness will in fact apply to the next one, and the last
+local TOC of the document will have its contents temporarily unknown to \etoc,
+hence will be declared non empty, and the heading will be printed.
+
+For a finalized document compiled with initially no auxiliary files, the first
+\LaTeX{} run will declare all local TOCs non empty and print for each of them a
+heading (and no contents naturally). The second \LaTeX{} run will then
+correctly decide which local TOC is empty or not.
+
+
+\subsection{The \csbhyp{etocnotocifnotoc} command}
+\label{etocnotocifnotoc}
+
+The user can then extend the emptiness-checking to the global TOCs with
+\csb{etocnotocifnotoc}. May I respectfully give the advice then to rather do
+none of |\usepackage{etoc}| nor \toc ? |;-)|. Well, there is always the case
+of batch conversions of documents having or not sectioning units.
+
+\subsection{The \csbhyp{etocifwasempty} command}
+\label{etocifwasempty}
+\label{etocxifwasempty}
+
+The command \csb{etocifwasempty}\marg{YES}\marg{NO} executes \meta{YES} if
+the previous TOC was found to be empty and \meta{NO} if its was not so. This
+may serve to act appropriately after a truly empty TOC. If
+\csb{etocchecksemptiness} has not been issued, this conditional always
+executes the \meta{NO} branch.
+
+This command is robust, and \csb{etocxifwasempty} is its expandable
+version.
+
+\fbox{Do not forget the second argument: at least an empty pair of braces |{}|
+  must be present.}
+
+This conditional may wrongly say that the local TOC is empty or not empty
+until \LaTeX{} compilations stabilize. But if it says that a local TOC is
+empty, this does mean that \etoc considered the just encountered local table
+of contents to be empty (for that run) and thus printed nothing (not even a
+|\par|).
+
 
 \clearpage
 \etocdepthtag.toc {linestyles}
@@ -4824,6 +4946,7 @@ The code used:
    }}}
 
 \subsection{Labels and references}
+\label{ssec:labelref}
 
 The commands (starred or not) to actually display the table of contents
 can be followed with optional labels or references:\par
@@ -4836,13 +4959,20 @@ can be followed with optional labels or references:\par
       \toc \csa{label}|\{toc:here\}|\\ 
       \toc \csa{ref}|\{toc:far\}| \\
       \toc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\
-      \localtoc \csa{label}|\{toc:here\}|\\
+      \localtoc \csa{label}|\{toc:here\}|\\ 
+      \localtoc \csa{ref}|\{toc:far\}| \\
+      \localtoc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\
       \hbox{}{\itshape\ttfamily\ \ \ \ similarly with\ }%
       \csa{etocmulticol}{\itshape\ttfamily\ etc . . . }
    }}}
 
 
-\medskip The commands for local tables of
+\medskip 
+
+New with |1.08e|: \localtoc \csa{ref}|{toc:far}| as synonym for \toc
+\csa{ref}|{toc:far}|.
+
+The commands for local tables of
 contents do \emph{not} react to a \csa{ref} following them. 
 
 When re-displaying another toc, only its contents are transferred:
@@ -5515,6 +5645,7 @@ get:
 \etocsettagdepth {globalcmds} {paragraph}
 \etocsettagdepth {custom}     {part}
 \etocsettagdepth {tips}       {part}
+\etocsettagdepth {etocandworld}{part}
 \etocsettagdepth {code}       {none}
 \renewcommand\etoctoprule {\hrule height 3pt\relax }
 \renewcommand\etoctoprulecolorcmd {\color{blue}}
@@ -5577,6 +5708,7 @@ get:
 \etocsettagdepth {globalcmds} {paragraph}
 \etocsettagdepth {custom}     {part}
 \etocsettagdepth {tips}       {part}
+\etocsettagdepth {etocandworld}{part}
 \etocsettagdepth {code}       {none}
 \renewcommand\etoctoprule {\hrule height 3pt\relax }
 \renewcommand\etoctoprulecolorcmd {\color{blue}}
@@ -5675,7 +5807,12 @@ Note: rather than |\toks| registers it would be easier here to use \eTeX{}
 \endgroup
 \end{verbatim}
 
-\subsection{Compatibility with other packages}
+\clearpage
+\etocdepthtag.toc {etocandworld}
+
+\part{\etoc and the outside world}
+
+\section{Compatibility with other packages}
 \label{etocaftertochook}
 
 The contents of the |.toc| file (if it already exists) are read into memory by
@@ -5790,7 +5927,7 @@ documentation they do not typeset a TOC title. They should \emph{not} be used
 in case \csb{etocglobaldefs} was issued before, except if its scope has been
 terminated since then, or \csb{etoclocaldefs} has cancelled its influence.
 
-\subsection{\TeX nical matters}
+\section{\TeX nical matters}
 
 The \csb{etocname}, \csb{etocnumber}, \csb{etocpage} commands are protected
 against premature expansion. They contain suitable |hyperref| links if package
@@ -5808,7 +5945,7 @@ The commands such as \csb{etocsetstyle}, \csb{etocsetlevel},
 \csb{etocruledstyle}, \csb{etocframedstyle} obey \LaTeX{}'s
 groups. All TOCs are typeset inside groups.
 
-\subsection{Errors and catastrophes}
+\section{Errors and catastrophes}
 
   After using \csa{etocsetstyle} for one level, the remaining
   uncustomized levels use the \etoc default styles (those
@@ -5917,9 +6054,9 @@ version is \texttt{\etocpkgversion}, of \texttt{\etocpkgdate}.
                     nodes={concept},
                     concept color=orange!60,
                     root concept/.append style={font=\huge, text width = 6cm},
-                    level 1/.append style={level distance=7cm, sibling angle=360/8},% 8 hard-coded mais je pourrais aussi le calculer
+                    level 1/.append style={level distance=7cm, sibling angle=360/9},% 8 hard-coded mais je pourrais aussi le calculer
                     level 1 concept/.append style={font=\Large, text width = 3cm},
-                    level 2/.append style={level distance=12.5cm, sibling angle=360/35},% 35 hard coded mais je pourrais aussi le calculer
+                    level 2/.append style={level distance=12.5cm, sibling angle=360/39},% 39 hard coded mais je pourrais aussi le calculer
                     % distance par rapport au CENTRE ! (avec le code tel qu'en ce moment)
                    ]
 \the\treetok
@@ -6122,7 +6259,7 @@ vorgeschlagen werden (die durch die \hyperref[toc:main]{Hauptinhaltsangabe} in
 diesem Dokument gezeigt werden) keinen Gebrauch von Umgebungen. Tatsächlich
 nutzt in dieser Gebrauchsanweisung nur die \hyperref[toc:a]{Inhaltsangabe} zu
 Beginn von \autoref{part:linestyles} und in \autoref{toc:allsubsections}
-e\texttt{numerate}-Umgebungen, um Zeilenstile anzugeben.
+\texttt{enumerate}-Umgebungen, um Zeilenstile anzugeben.
 
 \section{Zeilenstile und Stile der Inhaltsangabe (toc display style)}
 
@@ -6381,6 +6518,7 @@ anders programmiert sind.
 \etocsettagdepth {globalcmds} {subsection}
 \etocsettagdepth {custom}     {none}
 \etocsettagdepth {tips}       {none}
+\etocsettagdepth {etocandworld}{none}
 \etocsettagdepth {code}       {none}
 
 \etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
@@ -6431,6 +6569,7 @@ Der Code:
 \etocsettagdepth {globalcmds} {subsection}
 \etocsettagdepth {custom}     {none}
 \etocsettagdepth {tips}       {none}
+\etocsettagdepth {etocandworld}{none}
 \etocsettagdepth {code}       {none}
 
 \etocsettocstyle {\centering\LARGE\textsc{\contentsname}\par\nobreak\medskip}{}
@@ -8031,10 +8170,10 @@ page}.}
 %   #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}}
 
 \renewcommand*{\appendchildtree}[3]{% 
-% this is to construct "t1 child [branch color= #3]{t2}" from #1=t1 and #2=t2
+% this is to construct "t1 child [#3]{t2}" from #1=t1 and #2=t2
 % t1 and t2 are two toks variable (not macros)
 % #3 = for example teal!60
-   \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}%
+   \edef\tmpstuff {\the#1 child [#3]{\the#2}}%
    #1\expandafter {\tmpstuff }%
 }
 
@@ -8048,18 +8187,21 @@ page}.}
 % This updates the global tree with the data  from the previous
 % part and all its children sections. Moved here because for some parts the
 % sections are not displayed due to depth tags.
-  {\ifcase\pseudomodthree{\value{partco}}%
-   \or \appendchildtree\treetok\parttok {teal!60}%   first
-   \or \appendchildtree\treetok\parttok {yellow!80}% second
-   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
-   \fi
+  {\ifnum\value{partco}=3
+     \appendchildtree\treetok\parttok {branch color= green!50,level distance=10cm}%
+   \else
+\ifcase\pseudomodthree{\value{partco}}%
+   \or \appendchildtree\treetok\parttok {branch color= teal!60}%   first
+   \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+   \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
+   \fi\fi
    }
   {\stepcounter{partco}%
 % customize manually  some TikZ set-up (should be done inside the TikZ thing I guess)
    \def\tmpoption {}%
    \def\tmprotate {}% first
-   \ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
-   \ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
+   %\ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
+   %\ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
 % define the part node
    \edef\partnode{node \tmpoption 
                   {\unexpanded\expandafter{\etocthelinkednumber}. 
@@ -8067,9 +8209,9 @@ page}.}
 % this is a starting point which will be filled it by the section children
    \parttok\expandafter{\partnode}}
   {\ifcase\pseudomodthree{\value{partco}}%
-   \or \appendchildtree\treetok\parttok {teal!60}%   first
-   \or \appendchildtree\treetok\parttok {yellow!80}% second
-   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
+   \or \appendchildtree\treetok\parttok {branch color= teal!60}%   first
+   \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+   \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
    \fi
    }
 
@@ -8093,13 +8235,14 @@ page}.}
 \etocsetnexttocdepth{section}
 % use of depth tags to cut out some sections.
 \etocsettagdepth {preamble}   {none}
-\etocsettagdepth {overview}   {section}
+\etocsettagdepth {overview}   {part}
 \etocsettagdepth {arbitrarily}{part}
 \etocsettagdepth {surprising} {section}
 \etocsettagdepth {linestyles} {part}
-\etocsettagdepth {globalcmds} {section}
+\etocsettagdepth {globalcmds} {part}
 \etocsettagdepth {custom}     {section}
-\etocsettagdepth {tips}       {section}
+\etocsettagdepth {tips}       {part}
+\etocsettagdepth {etocandworld}{part}
 \etocsettagdepth {code}       {section}
 
 \tikzset{
@@ -8119,8 +8262,8 @@ page}.}
                     nodes={concept}, 
                     concept color=orange!60,
                     root concept/.append style={text width=4cm, font=\Large},
-                    level 1/.append style={level distance=5cm,sibling angle=45, text width=3cm},
-                    level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm},
+                    level 1/.append style={level distance=5cm,sibling angle=40, text width=3cm},
+                    level 2/.append style={level distance=7cm,sibling angle=30, text width=3cm},
                     level 1 concept/.append style={font=\normalsize},
                     ]
 \the\treetok
@@ -8150,10 +8293,10 @@ hier \vpageref{toc:mindmap}.
    #1\expandafter\expandafter\expandafter{\expandafter\the\expandafter #1#2}}
 
 \renewcommand*{\appendchildtree}[3]{% 
-% this is to construct "t1 child [branch color= #3]{t2}" from #1=t1 and #2=t2
+% this is to construct "t1 child [#3]{t2}" from #1=t1 and #2=t2
 % t1 and t2 are two toks variable (not macros)
 % #3 = for example teal!60
-   \edef\tmpstuff {\the#1 child [branch color = #3]{\the#2}}%
+   \edef\tmpstuff {\the#1 child [#3]{\the#2}}%
    #1\expandafter {\tmpstuff }%
 }
 
@@ -8167,18 +8310,21 @@ hier \vpageref{toc:mindmap}.
 % This updates the global tree with the data  from the previous
 % part and all its children sections. Moved here because for some parts the
 % sections are not displayed due to depth tags.
-  {\ifcase\pseudomodthree{\value{partco}}%
-   \or \appendchildtree\treetok\parttok {teal!60}%   first
-   \or \appendchildtree\treetok\parttok {yellow!80}% second
-   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
-   \fi
+  {\ifnum\value{partco}=3
+     \appendchildtree\treetok\parttok {branch color= green!50,level distance=10cm}%
+   \else
+\ifcase\pseudomodthree{\value{partco}}%
+   \or \appendchildtree\treetok\parttok {branch color= teal!60}%   first
+   \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+   \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
+   \fi\fi
    }
   {\stepcounter{partco}%
 % customize manually  some TikZ set-up (should be done inside the TikZ thing I guess)
    \def\tmpoption {}%
    \def\tmprotate {}% first
-   \ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
-   \ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
+   %\ifnum\value{partco}=5 \def\tmprotate {[counterclockwise from =-40]}\fi
+   %\ifnum\value{partco}=8 \def\tmprotate {[counterclockwise from =-50]}\fi
 % define the part node
    \edef\partnode{node \tmpoption 
                   {\unexpanded\expandafter{\etocthelinkednumber}. 
@@ -8186,9 +8332,9 @@ hier \vpageref{toc:mindmap}.
 % this is a starting point which will be filled it by the section children
    \parttok\expandafter{\partnode}}
   {\ifcase\pseudomodthree{\value{partco}}%
-   \or \appendchildtree\treetok\parttok {teal!60}%   first
-   \or \appendchildtree\treetok\parttok {yellow!80}% second
-   \else\appendchildtree\treetok\parttok {green!50}% third and next ...
+   \or \appendchildtree\treetok\parttok {branch color= teal!60}%   first
+   \or \appendchildtree\treetok\parttok {branch color= yellow!80}% second
+   \else\appendchildtree\treetok\parttok {branch color= green!50}% third and next ...
    \fi
    }
 
@@ -8212,13 +8358,14 @@ hier \vpageref{toc:mindmap}.
 \etocsetnexttocdepth{section}
 % use of depth tags to cut out some sections.
 \etocsettagdepth {preamble}   {none}
-\etocsettagdepth {overview}   {section}
+\etocsettagdepth {overview}   {part}
 \etocsettagdepth {arbitrarily}{part}
 \etocsettagdepth {surprising} {section}
 \etocsettagdepth {linestyles} {part}
-\etocsettagdepth {globalcmds} {section}
+\etocsettagdepth {globalcmds} {part}
 \etocsettagdepth {custom}     {section}
-\etocsettagdepth {tips}       {section}
+\etocsettagdepth {tips}       {part}
+\etocsettagdepth {etocandworld}{part}
 \etocsettagdepth {code}       {section}
 
 \tikzset{
@@ -8238,8 +8385,8 @@ hier \vpageref{toc:mindmap}.
                     nodes={concept}, 
                     concept color=orange!60,
                     root concept/.append style={text width=4cm, font=\Large},
-                    level 1/.append style={level distance=5cm,sibling angle=45, text width=3cm},
-                    level 2/.append style={level distance=8cm,sibling angle=25, text width=3cm},
+                    level 1/.append style={level distance=5cm,sibling angle=40, text width=3cm},
+                    level 2/.append style={level distance=7cm,sibling angle=30, text width=3cm},
                     level 1 concept/.append style={font=\normalsize},
                     ]
 \the\treetok
@@ -8265,7 +8412,8 @@ ausgegeben zur Dateierweiterung
 \end{verbatim}
 Der Autor kann sie von dort aus kopieren und
 manuell anpassen, um ein geignetes TikZ-Bild zu erhalten.
-
+Siehe auch
+\centeredline{\url{http://tex.stackexchange.com/a/232792}}
 
 \section{Das TOC als eine Tabelle}
 \label{sec:tocastable}
@@ -8488,7 +8636,73 @@ Um zur Standardeinstellung zurückzukehren, nehmen Sie
 \csb{etocglobaldefs} and \csb{etoclocaldefs}, lokal für die
 Umgebung oder Gruppe sind, in der sie verwendet werden.
 
-
+\begin{otherlanguage}{english}
+\section{Not displayed empty TOCs}
+
+\subsection{The command \csbhyp{etocchecksemptiness}}
+\label{etocchecksemptiness}
+
+The user needs to issue \csb{etocchecksemptiness} to tell \etoc to check for
+each local table of contents if it is in fact empty; in that case nothing gets
+printed at all.\footnote{Thanks to Paul Gaborit who asked for
+such a feature.} This
+can be useful to authors of \LaTeX{} classes who for example wish to have a
+|\chapter| command doing systematically a \csa{localtableofcontents}, or for
+people producing files via automatic conversions and some of those might have
+sectioning commands and others not.
+
+«Emptiness» means that no \csa{contentsline} command would get executed within
+the scope of the local table of contents --- empty line styles by themselves do
+not make the TOC empty. \etoc always executes the \csb{etocaftertochook}
+command; and the test for emptiness itself executes everything else found in
+the |.toc| file. See \autoref{sec:addingtotoc} in this context.
+
+The suppression of the heading (more precisely of the toc display style
+elements) may be effective only for the final \LaTeX{} runs. For example in
+the situation of a \csa{tableofcontents}|\ref{foo}| where the label |foo| is
+not yet recognized, the heading (but not the contents) is printed and the TOC
+is declared non-empty. Or, if one adds a \localtoc to a document, on the next
+run, the test for emptiness will in fact apply to the next one, and the last
+local TOC of the document will have its contents temporarily unknown to \etoc,
+hence will be declared non empty, and the heading will be printed.
+
+For a finalized document compiled with initially no auxiliary files, the first
+\LaTeX{} run will declare all local TOCs non empty and print for each of them a
+heading (and no contents naturally). The second \LaTeX{} run will then
+correctly decide which local TOC is empty or not.
+
+
+\subsection{The \csbhyp{etocnotocifnotoc} command}
+\label{etocnotocifnotoc}
+
+The user can then extend the emptiness-checking to the global TOCs with
+\csb{etocnotocifnotoc}. May I respectfully give the advice then to rather do
+none of |\usepackage{etoc}| nor \toc ? |;-)|. Well, there is always the case
+of batch conversions of documents having or not sectioning units.
+
+\subsection{The \csbhyp{etocifwasempty} command}
+\label{etocifwasempty}
+\label{etocxifwasempty}
+
+The command \csb{etocifwasempty}\marg{YES}\marg{NO} executes \meta{YES} if
+the previous TOC was found to be empty and \meta{NO} if its was not so. This
+may serve to act appropriately after a truly empty TOC. If
+\csb{etocchecksemptiness} has not been issued, this conditional always
+executes the \meta{NO} branch.
+
+This command is robust, and \csb{etocxifwasempty} is its expandable
+version.
+
+\fbox{Do not forget the second argument: at least an empty pair of braces |{}|
+  must be present.}
+
+This conditional may wrongly say that the local TOC is empty or not empty
+until \LaTeX{} compilations stabilize. But if it says that a local TOC is
+empty, this does mean that \etoc considered the just encountered local table
+of contents to be empty (for that run) and thus printed nothing (not even a
+|\par|).
+
+\end{otherlanguage}
 
 \clearpage
 \etocdepthtag.toc {linestyles}
@@ -9507,13 +9721,19 @@ unwichtig, ob letztere mit Sternchen versehen sind oder nicht.\par
       \toc \csa{label}|\{toc:here\}|\\ 
       \toc \csa{ref}|\{toc:far\}| \\
       \toc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\
-      \localtoc \csa{label}|\{toc:here\}|\\
+      \localtoc \csa{label}|\{toc:here\}|\\ 
+      \localtoc \csa{ref}|\{toc:far\}| \\
+      \localtoc \csa{label}|\{toc:here\}| \csa{ref}|\{toc:far\}| \\
       \hbox{}{\itshape\ttfamily\ \ \ \  \ }%
       \csa{etocmulticol}{\itshape\ttfamily, etc. funktionieren ähnlich}
    }}}
 
+\medskip
+
+Neu mit |1.08b|: \localtoc\csa{ref}|{toc:far}| als Synonym für
+\toc\csa{ref}|{toc:far}|.
 
-\medskip Ein \csa{ref}"=Befehl, der auf einen Befehl zur Erzeugung eines lokalen
+Ein \csa{ref}"=Befehl, der auf einen Befehl zur Erzeugung eines lokalen
 Inhaltsverzeichnisses folgt, hat \emph{keinen} Einfluss auf diesen. Wird ein
 anderes Inhaltsverzeichnis erneut dargestellt, so wird nur dessen Inhalt
 angepasst. Sowohl das Aussehen des Inhaltsverzeichnisses als auch die
@@ -10007,12 +10227,12 @@ vorkommen (Siehe \autoref{part:surprising} für andere Verwendungen dieser Techn
 %%\etocmarkbothnouc{List of all subsections}
 %% le mark (\markright) est fait par \subsection
 
-\etocmulticol[3]{\subsection{{Alle Unterabschnitte in diesem Dokument}}\label{toc:allsubsections}}
+\etocmulticol[3]{\subsection{Alle Unterabschnitte in diesem Dokument}\label{toc:allsubsections}}
 
 
 \endgroup
 
-\subsection{Sta\-ti\-sti\-ken anzeigen}\label{ssec:statistics}
+\subsection{Statistiken anzeigen}\label{ssec:statistics}
 
 Jeder Teil dieses Dokuments beginnt mit einem Paragraphen, der sagt, wieviele
 Kapitel und Unterkapitel er hat. Nun, jeder von diesen Paragraphen ist ein
@@ -10197,6 +10417,7 @@ es kann leicht recycelt) erhalten wir:
 \etocsettagdepth {globalcmds} {paragraph}
 \etocsettagdepth {custom}     {part}
 \etocsettagdepth {tips}       {part}
+\etocsettagdepth {etocandworld}{part}
 \etocsettagdepth {code}       {none}
 \renewcommand\etoctoprule {\hrule height 3pt\relax }
 \renewcommand\etoctoprulecolorcmd {\color{blue}}
@@ -10259,6 +10480,7 @@ es kann leicht recycelt) erhalten wir:
 \etocsettagdepth {globalcmds} {paragraph}
 \etocsettagdepth {custom}     {part}
 \etocsettagdepth {tips}       {part}
+\etocsettagdepth {etocandworld}{part}
 \etocsettagdepth {code}       {none}
 \renewcommand\etoctoprule {\hrule height 3pt\relax }
 \renewcommand\etoctoprulecolorcmd {\color{blue}}
@@ -10368,7 +10590,12 @@ zum Beispiel \autoref{sec:mindmap}.
 \endgroup
 \end{verbatim}
 
-\subsection{Kompatibilität mit anderen Paketen}
+\clearpage
+\etocdepthtag.toc {etocandworld}
+
+\part{\etoc und die Außenwelt}
+
+\section{Kompatibilität mit anderen Paketen}
 \label{etocaftertochook}
 
 % JFBU modifiziert Januar 23, 2015
@@ -10486,11 +10713,11 @@ Die {\color{niceone}|tableof|}-Befehle \csa{tableof},
 global) nach den Standards der Dokumentklasse setzen, gehorchend
 den \etoc-Tiefenauszeichnungen, wie erklärt in der
 |tableof|-Dokumentation, sie setzen keinen TOC-Titel. Sie sollten
-\emph{nicht} verwendet werden im Fall, wenn |tableof| vorher
+\emph{nicht} verwendet werden im Fall, wenn \csa{etocglobaldefs} vorher
 ausgegeben wurde; es sei denn, ihr Skopus wurde da beendet oder
 \csb{etoclocaldefs} hat seine Einflussnahme abgebrochen.
 
-\subsection{\TeX -nische Sachen}
+\section{\TeX -nische Sachen}
 
 Die \csa{etocname}, \csa{etocnumber}, \csa{etocpage} Befehle sind gegen
 vorzeitige Expansion geschützt. Sie enthalten geeignete |hyperref|-Links, wenn
@@ -10507,7 +10734,7 @@ Befehle wie \csb{etocsetstyle}, \csb{etocsetlevel}, \csb{etocsettocstyle},
 \csb{etocmulticolstyle}, \csb{etocruledstyle}, \csb{etocframedstyle} folgen
 Gruppierungen von \LaTeX. Alle TOCs werden in Gruppierungen gesetzt.
 
-\subsection{Fehler und Katastrophen}
+\section{Fehler und Katastrophen}
 
 Nach der Verwendung von \csa{etocsetstyle}für eine Ebene nehmen die restlichen,
 nicht angepassten Ebenen die Standardstile von \etoc (diejenigen, die aktiviert
@@ -10610,7 +10837,33 @@ Paketversion ist \texttt{\etocDEpkgversion} von \texttt{\etocDEpkgdate}.
 
 \begin{multicols}{2}
 \begin{jfverbatim}
-v1.08d [2015/04/09]^
+v1.08e [2015/04/17]^
+
+   The command \etocchecksemptiness tells etoc to not print, from
+   that point on, the headings of the local tables of contents if
+   they have empty contents. This is mainly for class authors who
+   might want to have their \section or \chapter automatically do
+   a \localtableofcontents. Could prove also useful for batch
+   conversions of documents. Thanks to Paul Gaborit who asked for 
+   such a feature.
+
+   The command \etocnotocifnotoc extends this behaviour to global
+   TOCs: indeed why should documents with no sectioning units take
+   this as an excuse not to use package etoc ?
+
+   The command \etocifwasempty{yes}{no} can be used for
+   suitable extra action.
+
+   A \tableofcontents\ref{foo} now expects foo to be a label to a
+   _local_ TOC. The use with foo a label to a _global_ TOC is not
+   supported anymore as it had no utility and made the code more
+   complex.
+
+   The syntax \localtableofcontents\ref{foo} is now accepted as a
+   synonym to the earlier syntax \tableofcontents\ref{foo}.
+
+
+~v1.08d [2015/04/09]^
 
    Translation into German of the additions made to the documentation
    for the 1.08x series of releases.
@@ -10899,7 +11152,7 @@ v1.08d [2015/04/09]^
      This documentation has been compiled without inclusion of the source
      code. To produce the English documentation with source code included:\endgraf
      \ \ \ \ run etex on etoc.dtx or etoc.ins to produce etoc.tex,\endgraf
-     \ \ \ \ then four times latex on etoc.tex, then dvipdfmx on etoc.dvi.\endgraf
+     \ \ \ \ then thrice latex on etoc.tex, then dvipdfmx on etoc.dvi.\endgraf
      \medskip
      To produce the German documentation with source code included, run etex on
      etoc.dtx or etoc.ins to produce etoc-DE.tex, then edit etoc-DE.tex
@@ -11034,6 +11287,11 @@ v1.08d [2015/04/09]^
 \newif\ifEtoc@stoptoc
 \newif\ifEtoc@notactive
 \newif\ifEtoc@mustclosegroup
+\newif\ifEtoc@emptytoc     % 1.08e
+\newif\ifEtoc@checksemptiness % 1.08e. Default is 'no checks'.
+\newcommand*\etocchecksemptiness {\Etoc@checksemptinesstrue }
+\newif\ifEtoc@notocifnotoc % 1.08e
+\newcommand*\etocnotocifnotoc {\Etoc@checksemptinesstrue\Etoc@notocifnotoctrue }
 \def\etoc@{\etoc@}
 %    \end{macrocode}
 % |1.07g| uses a second counter; this could be avoided, but ok, let's not be
@@ -11059,7 +11317,7 @@ v1.08d [2015/04/09]^
 \chardef\Etoc@@four@@ 4
 \chardef\Etoc@@five@@ 5
 \chardef\Etoc@@six@@  6
-\let\Etoc@localtop\Etoc@@minustwo@@
+%%\let\Etoc@localtop\Etoc@@minustwo@@ % 1.08e does it at each local TOC.
 \def\Etoc@@minustwo@{minustwo}
 \def\Etoc@@minusone@{minusone}
 \def\Etoc@@zero@    {zero}
@@ -11730,19 +11988,25 @@ v1.08d [2015/04/09]^
 % conditionals back in 2011/2012 when I started LaTeX programming, and the
 % code was a remnant of extra cautious attitude. Also, now
 % \csa{etoc@@startlocaltoc} is expandable if it does nothing.
+%
+% |2015/04/16|: |1.08e| removes a \csa{ifEtoc@notactive} test as |\ifnum| can
+% be positive only once anyhow; although the \csa{ifEtoc@notactive} boolean
+% could be faster than an |\ifnum|, it adds to it as long as the local toc id
+% is not yet found.
+%
+% I replace (|1.08e|) the |\Etoc@global|'s for |\Etoc@localtop| by |\global|'s.
 %    \begin{macrocode}
 \def\etoc@@startlocaltoc#1#2{%
     \ifEtoc@localtoc 
-      \ifEtoc@notactive
         \ifnum #1=#2\relax
-          \ifEtoc@jj  \Etoc@global\let\Etoc@localtop\Etoc@@minusone@@ \fi
-          \ifEtoc@j   \Etoc@global\let\Etoc@localtop\Etoc@@zero@@  \fi
-          \ifEtoc@    \Etoc@global\let\Etoc@localtop\Etoc@@one@@   \fi
-          \ifEtoc@i   \Etoc@global\let\Etoc@localtop\Etoc@@two@@   \fi
-          \ifEtoc@ii  \Etoc@global\let\Etoc@localtop\Etoc@@three@@ \fi
-          \ifEtoc@iii \Etoc@global\let\Etoc@localtop\Etoc@@four@@  \fi
-          \ifEtoc@iv  \Etoc@global\let\Etoc@localtop\Etoc@@five@@  \fi
-          \ifEtoc@v   \Etoc@global\let\Etoc@localtop\Etoc@@six@@   \fi
+          \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
+          \ifEtoc@ii  \global\let\Etoc@localtop\Etoc@@three@@ \fi
+          \ifEtoc@iii \global\let\Etoc@localtop\Etoc@@four@@  \fi
+          \ifEtoc@iv  \global\let\Etoc@localtop\Etoc@@five@@  \fi
+          \ifEtoc@v   \global\let\Etoc@localtop\Etoc@@six@@   \fi
           \global\Etoc@notactivefalse
           \global\Etoc@vfalse
           \global\Etoc@ivfalse
@@ -11753,42 +12017,163 @@ v1.08d [2015/04/09]^
           \global\Etoc@jfalse
           \global\Etoc@jjfalse
         \fi
-      \fi
     \fi
 }
 \let\etoc@startlocaltoc\@gobble
 %    \end{macrocode}
+% |2015/03/16|: |1.08e| tests if a local table of contents turns out empty. The
+% \csa{Etoc@localtop} here does not have the same meaning as when set-up by
+% the regular \csa{etoc@@startlocaltoc}. It is off by 1 (in general).
+%
+% After some hesitation I opted for making and obeying the test always (*) for
+% local tables of contents, and do it also for global tables of contents but
+% for the latter the user must issue \csa{etocnotocifnotoc} for the emptiness
+% test to be obeyed. The emptiness tests are to be trusted only when the
+% compilations have stabilized.
+%
+% (*) finally the user must issue \csa{etocchecksemptiness} once.
+%
+% |\Etoc@tocid| is the number of the toc (possibly gotten via a |\ref|
+% following a \csa{tableofcontents}), or it is |\z@| if the emptiness test is
+% from a global toc. Until the compilations stabilize, some local TOCs can get
+% printed at wrong locations naturally and emptiness tests can not be trusted
+% either. Releases earlier than |1.08e| authorized
+% \csa{tableofcontents}|\ref{foo}| with |foo| the label of a \emph{global}
+% toc. But as it was impossible (without much complications) to discriminate,
+% until auxiliary files have stabilized, between a |\ref| to a local toc whose
+% id is not yet in the |.toc| file and a |\ref| to a global toc whose id will
+% in the end definitely not be in the |.toc| file, I decided that this silly
+% possibility should not be supported anymore. This allowed to remove a few
+% tokens from \csa{Etoc@tableofcontents} as well. And it also allowed
+% improvements to \csa{Etoc@localtableofcontents}.
+%    \begin{macrocode}
+\def\Etoc@setemptytocbool {%
+    \global\Etoc@stoptocfalse
+    \global\Etoc@emptytoctrue
+    \global\let\Etoc@level\Etoc@minf
+    \begingroup
+      \def\etoc@startlocaltoc##1{%
+          \ifnum##1=\Etoc@tocid\relax
+              \global\let\Etoc@localtop\Etoc@level
+              \global\Etoc@notactivefalse
+          \fi }%
+      \let\contentsline\Etoc@testingcontentsline
+      \Etoc@storetocdepth
+      \the\Etoc@toctoks
+      \Etoc@resettocdepth
+    \endgroup
+}
+\DeclareRobustCommand*\etocifwasempty
+  {\ifEtoc@emptytoc\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi }
+\expandafter
+\let\expandafter\etocxifwasempty\csname etocifwasempty \endcsname
+\def\Etoc@testingcontentsline #1{%
+  \ifEtoc@stoptoc
+  \else
+  \ifnum\csname Etoc@#1@@\endcsname=\Etoc@@six@@
+  \else
+    \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname
+    \ifEtoc@notactive
+    \else
+    \ifnum\Etoc@level>\c@tocdepth
+    \else
+      \global\Etoc@stoptoctrue
+      \ifnum\Etoc@level>\Etoc@localtop\global\Etoc@emptytocfalse\fi
+    \fi\fi
+  \fi\fi
+  \Etoc@gobblesixorfive\relax\relax\relax
+}
+%    \end{macrocode}
 % |1.07g| suppresses the printing of |--unknown etoc ref: run latex again--| as
-% sometimes one uses |\localtableofcontents| to prepare something else, and one
+% sometimes one uses \csa{localtableofcontents} to prepare something else, and one
 % does not want any text output even in intermediate runs.
 % 
-% Also |1.07g| adds |\etocaftertochook| to help with
-% |\invisiblelocaltableofcontents| (and then I did |\etocsetnexttocdepth|).
-% |1.07h| makes the hook used by |\etocsetnexttocdepth| private.
+% Also |1.07g| adds \csa{etocaftertochook} to help with
+% \csa{invisiblelocaltableofcontents} (and then I did \csa{etocsetnexttocdepth}).
+% |1.07h| makes the hook used by \csa{etocsetnexttocdepth} private.
 %
 % |2014/03/14|: |1.08b| suppresses a space token from an unprotected end of
-% line at the end after the replacement text of |\etoc@startlocaltoc| (bug
+% line at the end after the replacement text of \csa{etoc@startlocaltoc} (bug
 % dating back to |1.03 2012/11/23|). I didn't see it due to the originally
 % badly formatted source of |\Etoc@next|.
+%
+% |2015/03/16|: |1.08e| lets \csa{localtableofcontents} do a first scan of the
+% |.toc| file (as stored in |\Etoc@toctoks|) to determine if the table of
+% contents will in fact end up empty. In that case, nothing is typeset. The
+% command \csa{etocaftertochook} is still executed though. Other ways were
+% envisioned (like delimited macros) to determine this potential emptiness, but
+% in the end I opted for execution of the |.toc| file with suitable definitions
+% for \csa{contentsline} and \csa{etoc@startlocaltoc}. Notice though that if
+% emptiness would result from empty line styles, this can not be detected.
+% Emptiness means ``no executed \csa{contentsline}''.
+%
+% For this detection of emptiness, assignments (here and in
+% \csa{Etoc@testingcontentsline}) are made globally, I think this is the best
+% (just in case some portions of the |.toc| file turn out to be inside some
+% groups --- perhaps for some silly color assignments, etc... --- whose
+% boundaries do not necessarily respect unit levels).
+%
+% The flag |\Etoc@tocwithid| discriminates between a \localtoc and a
+% \toc|\ref{foo}|; the latter could so far possibly refer to a local or also to
+% a global table of contents but release |1.08e| has deprecated the latter use
+% as it complicated the code, for something truly silly. Thus |\ref{foo}| must
+% be have the |foo| be the label of a local TOC now.
+%
+% In the case of a |\ref|ed-to toc whose label was just added hence is not yet
+% in the |.aux| file, |\Etoc@tocid| is |0|. \etoc used to issue a warning to
+% run latex again and did no printing at all. Release |1.08e| in such cases
+% prints the heading (this may gain one compilation step). Emptiness test is
+% not executed as it would necessarily turn out positive and can not be
+% trusted anyhow. The TOC is declared non empty, which it probably is...
+%
+% Emptiness detection for local tables of contents (either from a
+% \csa{localtableofcontents} or from a \csa{tableofcontents}|\ref{localtoc}|)
+% can be trusted only when the |.toc| file has stabilized.The emptiness status
+% of a local TOC whose Id is not yet in the |.toc| is by necessity undecided
+% yet (and not to be trusted really as the numbering may have changed; only
+% when compilation runs settle is the emptiness status to be trusted). The
+% code declares the TOC non empty, as it will be in 95\% of use cases.
+%
+% Dropping support for \toc|\ref{globaltoc}| means here that when a TOC id is
+% not found in the |.toc| file we can assume it definitely has to be a local
+% TOC needing more compilations. The emptiness status is undecided, the code
+% declares the TOC non empty.
 %    \begin{macrocode}
 \def\Etoc@localtableofcontents#1{%
-    \edef\Etoc@tmp{#1}%
-    \ifnum\Etoc@tmp<\@ne
-       \PackageWarning{etoc}%
-            {Unknown toc id: run LaTeX to get references right}% 
-       \let\Etoc@next\@gobble
-    \else
-       \let\Etoc@next\@firstofone
+    \edef\Etoc@tocid{#1}%
+    \global\Etoc@emptytocfalse
+    \ifnum\Etoc@tocid<\@ne
+      \PackageWarning{etoc}{Unknown toc reference \@secondoftwo#1. Run LaTeX again}% 
+      % versions < 1.08e did not do any printing, 1.08e prints the toc heading.
+      \global\Etoc@notactivetrue
+      \global\Etoc@stoptoctrue % do only heading
+      \Etoc@localtoctrue % needed for stoptoc obedience
+      \Etoc@tableofcontents
+      \expandafter\Etoc@gobbletoetoc@ % skip all the rest
     \fi
-    \Etoc@next 
-    {% 1.08b removes a space token from unprotected line ending
-       \edef\etoc@startlocaltoc##1{\noexpand\etoc@@startlocaltoc{##1}{#1}}%
+    \global\Etoc@notactivetrue
+    \ifEtoc@checksemptiness \Etoc@setemptytocbool \fi
+    \ifEtoc@emptytoc
+       \ifEtoc@notactive
+         \PackageWarning{etoc}{Unknown toc ID \number\Etoc@tocid. Run LaTeX again}% 
+         % emptiness undecided. Declare it non empty. 
+         \global\Etoc@emptytocfalse
+         \global\Etoc@stoptoctrue % do only heading
+         \Etoc@localtoctrue 
+         \Etoc@tableofcontents
+         \expandafter\expandafter\expandafter\Etoc@gobbletoetoc@
+       \else
+       %%  \PackageWarning{etoc}{This toc is apparently empty}% 
+       \fi
+    \else
        \Etoc@localtoctrue
-       \let\Etoc@localtop\Etoc@@minustwo@@
        \global\Etoc@stoptocfalse
        \global\Etoc@notactivetrue
+       \global\let\Etoc@localtop\Etoc@@minustwo@@
+       \edef\etoc@startlocaltoc##1{\noexpand\etoc@@startlocaltoc{##1}{\Etoc@tocid}}%
        \Etoc@tableofcontents
-    }%
+    \fi
+    \@gobble\etoc@
     \endgroup\ifEtoc@mustclosegroup\endgroup\fi
     \Etoc@aftertochook % 1.07h
     \etocaftertochook % 1.07g
@@ -11808,33 +12193,52 @@ v1.08d [2015/04/09]^
 \def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
 \@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
 %    \end{macrocode}
-% Why |\global| for |\Etoc@notactivefalse|? and not for
-% |\Etoc@localtocfalse|. Must think about this, a pity I did not
-% document it when I was young and intelligent ...
+% |1.08e| adds test for emptiness. And uses another coding style for
+% conditional branching. Easier to read. Not tested for efficiency.
+%
+% Also, |\ref{foo}| expects |foo| to be a label to a \emph{local} TOC. Earlier
+% versions accepted a reference to a global TOC, I have removed the support
+% from \csa{Etoc@tableofcontents}.
+%
+% The syntax \csa{localtableofcontents}|\ref{foo}| is now accepted.
 %    \begin{macrocode}
+\def\Etoc@dothis #1#2\etoc@ {\fi #1}
 \def\Etoc@t@bleofcontents{%
- \ifx\Etoc@nexttoken\label
-    \def\Etoc@next{\expandafter\Etoc@label\@gobble}%
- \else
- \ifx\Etoc@nexttoken\@sptoken
-    \let\Etoc@next\Etoc@again
- \else
- \ifEtoc@tocwithid
-    \def\Etoc@next{\Etoc@localtableofcontents{\c@etoc@tocid}}%
- \else
+    \ifx\Etoc@nexttoken\label
+       \Etoc@dothis{\expandafter\Etoc@label\@gobble}%
+    \fi
+    \ifx\Etoc@nexttoken\@sptoken
+       \Etoc@dothis{\Etoc@again}%
+    \fi
     \ifx\Etoc@nexttoken\ref
-       \def\Etoc@next{\expandafter\Etoc@ref\@gobble}%
+       \Etoc@dothis{\Etoc@tocwithidfalse\expandafter\Etoc@ref\@gobble}%
+    \fi
+    \ifEtoc@tocwithid
+       \Etoc@dothis{\Etoc@localtableofcontents{\c@etoc@tocid}}%
+    \fi
+    \global\Etoc@notactivefalse
+    \global\Etoc@emptytocfalse
+    \ifEtoc@checksemptiness
+        \let\Etoc@tocid\z@
+        \global\let\Etoc@localtop\Etoc@minf
+        \Etoc@setemptytocbool
+    \fi
+    \ifEtoc@emptytoc
+      \ifEtoc@notocifnotoc\else
+        \Etoc@localtocfalse
+        \global\Etoc@stoptocfalse
+        \Etoc@tableofcontents
+      \fi
     \else
-       \def\Etoc@next{\Etoc@localtocfalse
-                      \global\Etoc@notactivefalse
-                      \Etoc@tableofcontents
-                      \endgroup
-                      \ifEtoc@mustclosegroup\endgroup\fi
-                      \Etoc@aftertochook % 1.07h
-                      \etocaftertochook % 1.07g 
-                      }%
+        \Etoc@localtocfalse
+        \global\Etoc@stoptocfalse
+        \Etoc@tableofcontents
     \fi
- \fi\fi\fi\Etoc@next}
+    \endgroup\ifEtoc@mustclosegroup\endgroup\fi
+    \Etoc@aftertochook % 1.07h
+    \etocaftertochook % 1.07g 
+    \@gobble\etoc@
+    }
 %    \end{macrocode}
 % |1.07g| for consistency Etoc@ prefix added.
 %
@@ -11864,7 +12268,6 @@ v1.08d [2015/04/09]^
 \let\etocaftercontentshook \@empty
 \def\etoctableofcontents{%
    \Etoc@openouttoc
-   \Etoc@par
    \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents
 %    \end{macrocode}
 % No need for the |tableof| extra group level, even it is better to get rid of
@@ -11882,7 +12285,6 @@ v1.08d [2015/04/09]^
 \let\tableofcontents\etoctableofcontents
 \newcommand*\localtableofcontents{%
    \Etoc@openouttoc
-   \Etoc@par
    \begingroup % closed in \Etoc@t@bleofcontents or \Etoc@localtableofcontents
       \let\tof@begingroup\@empty
       \let\tof@endgroup  \@empty
@@ -11906,6 +12308,17 @@ v1.08d [2015/04/09]^
 % for safety to move the things for the second invocation of
 % |\Etoc@toctoc| after the |\fi\fi\fi|. I could define an |\afterfififi|
 % macro, but it should be ok as it is done here.
+%
+% Let's note for the record that |1.08e| moved the |\Etoc@par| to
+% \csa{Etoc@tableofcontents}. This was needed for the implementation of the
+% emptiness test. It might change some things as the \csa{refstepcounter} is
+% now done before the (possible) |\par|. These must be fringe cases though.
+% Most sane people will have left an empty line above their
+% \csa{tableofcontents} anyhow in the source. And inline toc have a no-op
+% |\Etoc@par|.
+%
+% |1.08e| suppresses the possibility to do a \csa{tableofcontents}|\ref{foo}|
+% with |foo| the label of a global TOC. Just do \csa{tableofcontents}.
 %    \begin{macrocode}
 \long\def\Etoc@gobbletoetoc@ #1\etoc@ {}
 \newcommand\etocsettocstyle[2]{%
@@ -11915,6 +12328,7 @@ v1.08d [2015/04/09]^
     \else\expandafter
      \Etoc@gobbletoetoc@ % skip all
     \fi
+    \Etoc@par % moved here 1.08e for matters of emptiness test
     \etocbeforetitlehook % 1.07m
     \Etoc@storetocdepth % 1.07g
     \let\Etoc@savedcontentsline\contentsline % moved up here 1.08
@@ -11931,15 +12345,6 @@ v1.08d [2015/04/09]^
     \ifEtoc@parskip\parskip\z@skip\fi %1.07d
     \Etoc@aftertitlehook
     \Etoc@toctoc
-            \ifEtoc@tocwithid\else
-              \ifEtoc@localtoc
-                \ifEtoc@notactive
-                  \Etoc@localtocfalse
-                  \global\Etoc@notactivefalse
-                  \Etoc@toctoc
-                \fi
-              \fi
-            \fi
     \etocaftercontentshook
     #2\@nobreakfalse % 1.07d: \@nobreakfalse moved here
     \Etoc@resettocdepth  % 1.07g. moved here from before #2 by 1.08
@@ -12745,7 +13150,7 @@ v1.08d [2015/04/09]^
        {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}}
      {\edef\Etoc@aftertochook {\global\c@tocdepth\the\c@tocdepth\space
                               \let\noexpand\Etoc@aftertochook\noexpand\@empty }%
-       \global\c@tocdepth\csname Etoc@#1@@\endcsname}%
+      \global\c@tocdepth\csname Etoc@#1@@\endcsname}%
 }%
 %    \end{macrocode}
 % |1.07h|. In order for the |.toc| file to be usable without error even
@@ -12787,7 +13192,7 @@ v1.08d [2015/04/09]^
   Grave accent  \`     Left brace    \{     Vertical bar  \|
   Right brace   \}     Tilde         \~}
 
-\CheckSum{3025}
+\CheckSum{3160}
 
 \csname check@checksum\endcsname
 \Finale
-- 
cgit v1.2.3

