From 7565eef64053e06881b3bc55e1a20bc7af0b15bb Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Mon, 10 Dec 2012 01:31:54 +0000
Subject: etoc

git-svn-id: svn://tug.org/texlive/trunk@28483 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/etoc/etoc.sty | 193 ++++++++++++++----------------
 1 file changed, 89 insertions(+), 104 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/etoc/etoc.sty')

diff --git a/Master/texmf-dist/tex/latex/etoc/etoc.sty b/Master/texmf-dist/tex/latex/etoc/etoc.sty
index dba9b9d17ae..837487b6d2f 100644
--- a/Master/texmf-dist/tex/latex/etoc/etoc.sty
+++ b/Master/texmf-dist/tex/latex/etoc/etoc.sty
@@ -22,9 +22,11 @@
 %% in the same archive or directory.)
 %%
 \ProvidesPackage{etoc}
- [2012/12/01 v1.05 easily customizable TOCs (jfB)]
+ [2012/12/07 v1.06 easily customizable TOCs (jfB)]
+%%
 %% Package `etoc' by Jean-Francois Burnol
 %% Copyright (C) 2012 by Jean-Francois Burnol
+%%
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{multicol}
 \RequirePackage{xspace}
@@ -50,6 +52,7 @@
 \newif\ifEtoc@notactive
 \newcounter{etoc@tocid}
 \newif\ifEtoc@mustclosegroup
+\newif\ifEtoc@tocopenedforwrite
 \@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}}
 \def\Etoc@@minustwo@@{-\tw@}
 \let\Etoc@@minusone@@\m@ne
@@ -69,16 +72,10 @@
 \def\Etoc@@three@{three}
 \def\Etoc@@four@{four}
 \def\Etoc@@five@{five}
-\def\Etoc@Lazarus{%
-\def\Etoc@Lazarus@elta##1\Etoc@Lazarus@eltb##2{\let##1##2}%
-\Etoc@Lazaruslist}
-\def\Etoc@Lazaruslist{}
-\def\Etoc@newdisciple#1#2{%
-    \def\Etoc@Lazarus@elta{\noexpand\Etoc@Lazarus@elta\noexpand}%
-    \def\Etoc@Lazarus@eltb{\noexpand\Etoc@Lazarus@eltb\noexpand}%
-    \edef\Etoc@Lazaruslist{\Etoc@Lazaruslist
-                           \Etoc@Lazarus@elta#1
-                           \Etoc@Lazarus@eltb#2}}
+\def\Etoc@levellist{}
+\def\Etoc@newlevel#1{%
+    \def\Etoc@levellist@elt{\noexpand\Etoc@levellist@elt\noexpand}%
+    \edef\Etoc@levellist{\Etoc@levellist\Etoc@levellist@elt#1}}
 \def\etocsetlevel#1#2{%
  \let\Etoc@next\@firstofone
  \ifcase#2\or\or\or\or\or
@@ -89,16 +86,7 @@
      \expandafter\def\csname Etoc@#1@\endcsname{minusone}%
      \expandafter\let\csname Etoc@#1@@\endcsname\m@ne
  \let\Etoc@next\@gobble\fi\fi\fi
- \if@noskipsec
- \else
-    \expandafter\expandafter\expandafter
-    \let\expandafter\expandafter\csname Etoc@savedl@#1\endcsname
-               \csname l@#1\endcsname
-    \expandafter\let \csname l@#1\endcsname\Etoc@lxyz
- \fi
- \expandafter\expandafter\expandafter\Etoc@newdisciple
- \expandafter\expandafter
-     \csname l@#1\endcsname\csname Etoc@savedl@#1\endcsname
+ \expandafter\Etoc@newlevel\csname l@#1\endcsname
  \Etoc@next
  {\ifcase#2\relax
       \expandafter\let \csname Etoc@#1@@\endcsname\Etoc@@zero@@
@@ -136,10 +124,6 @@
 \etocsetlevel{paragraph}{4}
 \etocsetlevel{subparagraph}{5}
 \AtBeginDocument{%
-\def\Etoc@Lazarus@elta#1\Etoc@Lazarus@eltb#2{\let#2#1\let#1\Etoc@lxyz}%
-\Etoc@Lazaruslist
-\let\Etoc@savedcontentsline\contentsline
-\let\contentsline\Etoc@etoccontentsline
 \@ifpackageloaded{hyperref}
 {\Etoc@hyperreftrue
 \def\Etoc@et@hop#1#2#3#4#5{#1{#3}{#4}{#5}#2}}
@@ -153,7 +137,7 @@
         \Etoc@et@hop
           {\Etoc@savedcontentsline{#1}}
           {\Etoc@contents}}
-  \let\etocskipfirstprefix\@thirdofthree
+\let\etocskipfirstprefix\@thirdofthree
 \def\Etoc@setflags #1{%
   \ifcase #1\relax
       \global\Etoc@vfalse
@@ -204,7 +188,6 @@
   \fi}
 \def\Etoc@etoccontentsline#1{%
   \global\expandafter\let\expandafter\Etoc@tmp\csname Etoc@#1@@\endcsname
-  \global\Etoc@partfalse
   \Etoc@skipthisonefalse
   \ifEtoc@hyperref
           \def\Etoc@next{\expandafter\@gobbletwo\@gobblefour}%
@@ -236,38 +219,38 @@
       \ifEtoc@ii \Etoc@end@two\fi
       \ifEtoc@i \Etoc@end@one\fi
       \ifEtoc@ \else \def\Etoc@next{\Etoc@begin@zero}\fi
-      \gdef\Etoc@contents{\Etoc@contents@zero}%
-      \gdef\Etoc@prefix{\Etoc@prefix@zero}%
+      \def\Etoc@contents{\Etoc@contents@zero}%
+      \def\Etoc@prefix{\Etoc@prefix@zero}%
   \or
       \ifEtoc@v \Etoc@end@five\fi
       \ifEtoc@iv \Etoc@end@four\fi
       \ifEtoc@iii \Etoc@end@three\fi
       \ifEtoc@ii \Etoc@end@two\fi
       \ifEtoc@i \else \def\Etoc@next{\Etoc@begin@one}\fi
-      \gdef\Etoc@contents{\Etoc@contents@one}%
-      \gdef\Etoc@prefix{\Etoc@prefix@one}%
+      \def\Etoc@contents{\Etoc@contents@one}%
+      \def\Etoc@prefix{\Etoc@prefix@one}%
   \or
       \ifEtoc@v \Etoc@end@five\fi
       \ifEtoc@iv \Etoc@end@four\fi
       \ifEtoc@iii \Etoc@end@three\fi
       \ifEtoc@ii \else \def\Etoc@next{\Etoc@begin@two}\fi
-      \gdef\Etoc@contents{\Etoc@contents@two}%
-      \gdef\Etoc@prefix{\Etoc@prefix@two}%
+      \def\Etoc@contents{\Etoc@contents@two}%
+      \def\Etoc@prefix{\Etoc@prefix@two}%
   \or
       \ifEtoc@v \Etoc@end@five\fi
       \ifEtoc@iv \Etoc@end@four\fi
       \ifEtoc@iii \else \def\Etoc@next{\Etoc@begin@three}\fi
-      \gdef\Etoc@contents{\Etoc@contents@three}%
-      \gdef\Etoc@prefix{\Etoc@prefix@three}%
+      \def\Etoc@contents{\Etoc@contents@three}%
+      \def\Etoc@prefix{\Etoc@prefix@three}%
   \or
       \ifEtoc@v \Etoc@end@five\fi
       \ifEtoc@iv \else \def\Etoc@next{\Etoc@begin@four}\fi
-      \gdef\Etoc@contents{\Etoc@contents@four}%
-      \gdef\Etoc@prefix{\Etoc@prefix@four}%
+      \def\Etoc@contents{\Etoc@contents@four}%
+      \def\Etoc@prefix{\Etoc@prefix@four}%
   \or
       \ifEtoc@v \else \def\Etoc@next{\Etoc@begin@five}\fi
-      \gdef\Etoc@contents{\Etoc@contents@five}%
-      \gdef\Etoc@prefix{\Etoc@prefix@five}%
+      \def\Etoc@contents{\Etoc@contents@five}%
+      \def\Etoc@prefix{\Etoc@prefix@five}%
   \else
     \ifnum\Etoc@tmp=\m@ne
       \ifEtoc@v \Etoc@end@five\fi
@@ -277,9 +260,8 @@
       \ifEtoc@i \Etoc@end@one\fi
       \ifEtoc@ \Etoc@end@zero\fi
       \ifEtoc@j \else \def\Etoc@next{\Etoc@begin@minusone}\fi
-      \global\Etoc@parttrue
-      \gdef\Etoc@contents{\Etoc@contents@minusone}%
-      \gdef\Etoc@prefix{\Etoc@prefix@minusone}%
+      \def\Etoc@contents{\Etoc@contents@minusone}%
+      \def\Etoc@prefix{\Etoc@prefix@minusone}%
     \else
       \ifEtoc@v \Etoc@end@five\fi
       \ifEtoc@iv \Etoc@end@four\fi
@@ -289,16 +271,17 @@
       \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}%
+      \def\Etoc@contents{\Etoc@contents@minustwo}%
+      \def\Etoc@prefix{\Etoc@prefix@minustwo}%
       \fi
   \fi
+  \ifnum\Etoc@tmp=\m@ne\Etoc@parttrue\else\Etoc@partfalse\fi
   \Etoc@setflags{\Etoc@tmp}%
   \fi\fi
   \Etoc@next
   \@firstoftwo{\Etoc@swa{#1}}{\Etoc@swb{#1}}}
-\def\Etoc@lxyz #1#2{\global\@namedef{etocname }{\leavevmode #1\xspace}%
-                    \global\@namedef{etocpage }{\leavevmode #2\xspace}%
+\def\Etoc@lxyz #1#2{\@namedef{etocname }{\leavevmode #1\xspace}%
+                    \@namedef{etocpage }{\leavevmode #2\xspace}%
     \Etoc@getnb #1\relax\relax\etoc@
     \ifEtoc@number\else\ifEtoc@part
     \Etoc@getit #1\hspace\relax\etoc@\fi\fi}
@@ -310,34 +293,34 @@
     \let\Etoc@next\Etoc@getit@hyp\fi\fi\Etoc@next #1}
 \def\Etoc@getnb@nohyp #1#2#3\etoc@{%
 \ifx #1\numberline
-\global\@namedef{etocnumber }{\leavevmode #2\xspace}\global\Etoc@numbertrue
+\@namedef{etocnumber }{\leavevmode #2\xspace}\Etoc@numbertrue
 \else
-\global\@namedef{etocnumber }{\leavevmode\xspace}\global\Etoc@numberfalse
+\@namedef{etocnumber }{\leavevmode\xspace}\Etoc@numberfalse
 \fi}
 \def\Etoc@getnb@hyp #1#2#3#4#5#6\etoc@{%
   \def\Etoc@getnbr ##1##2##3\etoc@{%
     \ifx ##1\numberline
-    \global\@namedef{etocnumber }{\leavevmode #1{#2}{#3}{##2}#5\xspace}%
-    \global\Etoc@numbertrue
+       \@namedef{etocnumber }{\leavevmode #1{#2}{#3}{##2}#5\xspace}%
+       \Etoc@numbertrue
     \else
-    \global\@namedef{etocnumber }{\leavevmode\xspace}%
-    \global\Etoc@numberfalse
+       \@namedef{etocnumber }{\leavevmode\xspace}%
+       \Etoc@numberfalse
     \fi}%
   \Etoc@getnbr #4\relax\relax\etoc@}
 \def\Etoc@getit@nohyp #1\hspace#2#3\etoc@{%
     \def\Etoc@getname ##1\hspace\relax\etoc@{%
-      \global\@namedef{etocname }{\leavevmode ##1\xspace}}%
+       \@namedef{etocname }{\leavevmode ##1\xspace}}%
     \ifx \relax#2\else
-    \global\@namedef{etocnumber }{\leavevmode #1\xspace}%
-    \global\Etoc@numbertrue
+        \@namedef{etocnumber }{\leavevmode #1\xspace}%
+        \Etoc@numbertrue
     \Etoc@getname #3\etoc@\fi}
 \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}}%
+       \@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}%
-   \global\Etoc@numbertrue
+       \@namedef{etocnumber }{\leavevmode #1{#2}{#3}{##1}#5\xspace}%
+       \Etoc@numbertrue
    \Etoc@getname ##3\etoc@\fi}%
   \Etoc@getnbr #4\hspace\relax\etoc@}
 \edef\etocpage{\noexpand\protect\expandafter\noexpand
@@ -353,34 +336,35 @@
 \def\Etoc@readtoc#1{%
   \ifeof #1
      \let\Etoc@nextread\@gobble
+     \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}%
   \else
      \let\Etoc@nextread\Etoc@readtoc
      \read #1 to \Etoc@buffer
-     \global\Etoc@toctoks=\expandafter\expandafter\expandafter
+     \Etoc@toctoks=\expandafter\expandafter\expandafter
        {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}%
   \fi
   \Etoc@nextread{#1}%
 }
+\IfFileExists{\jobname .toc}
+    {{\endlinechar=-1 \makeatletter
+        \newread\Etoc@tf
+        \openin\Etoc@tf\@filef@und
+           \Etoc@readtoc\Etoc@tf
+        \closein\Etoc@tf}}{\typeout{No file \jobname .toc.}}
 \def\Etoc@starttoc{%
 \begingroup
 \makeatletter
-\@ifpackageloaded{hyperref}
-   {\ifx\hyper@last\@undefined
+\ifEtoc@hyperref
+    \ifx\hyper@last\@undefined
     \ltx@ifpackageloaded {parskip}{\parskip \z@ }{}%
-    \IfFileExists {\jobname .toc}{\Hy@WarningNoLine {old toc file
-    detected, not used; run LaTeX again (cheers from etoc)}}{}%
-    \expandafter\@gobble\fi}{}%
-{\IfFileExists{\jobname .toc}
-    {\endlinechar=-1\relax
-        \newread\Etoc@tf
-        \openin\Etoc@tf\@filef@und
-           \Etoc@readtoc\Etoc@tf
-        \closein\Etoc@tf}
-    {\typeout{No file \jobname .toc.}}}%
-\if@filesw \newwrite \tf@toc \immediate
-\openout \tf@toc \jobname .toc\relax \fi
-\@nobreakfalse \endgroup}
-\AtBeginDocument{\Etoc@starttoc}
+    \IfFileExists {\jobname .toc}
+    {\Hy@WarningNoLine
+    {old toc file detected, not used; run LaTeX again (cheers from etoc)}%
+    \global\Etoc@toctoks={}}
+{}\fi\fi
+\if@filesw \newwrite \tf@toc
+\immediate \openout \tf@toc \jobname .toc\relax \fi \@nobreakfalse
+\endgroup}
 \def\Etoc@toctoc{%
    \global\Etoc@vfalse
    \global\Etoc@ivfalse
@@ -391,7 +375,6 @@
    \global\Etoc@jfalse
    \global\Etoc@jjfalse
 \ifEtoc@standard
-\Etoc@Lazarus
 \etoc@setstyle{@minustwo}{}{}{}{}%
 \etoc@setstyle{@minusone}{}{}{}{}%
 \etoc@setstyle{@zero}{}{}{}{}%
@@ -401,6 +384,8 @@
 \etoc@setstyle{@four}{}{}{}{}%
 \etoc@setstyle{@five}{}{}{}{}%
 \else
+\def\Etoc@levellist@elt##1{\let##1\Etoc@lxyz}%
+\Etoc@levellist
 \let\numberline\@gobble
 \let\booknumberline\numberline
 \let\partnumberline\numberline
@@ -422,14 +407,14 @@
     \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
-          \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
+          \ifEtoc@jj  \let\Etoc@localtop\Etoc@@minusone@@ \fi
+          \ifEtoc@j   \let\Etoc@localtop\Etoc@@zero@@  \fi
+          \ifEtoc@    \let\Etoc@localtop\Etoc@@one@@   \fi
+          \ifEtoc@i   \let\Etoc@localtop\Etoc@@two@@   \fi
+          \ifEtoc@ii  \let\Etoc@localtop\Etoc@@three@@ \fi
+          \ifEtoc@iii \let\Etoc@localtop\Etoc@@four@@  \fi
+          \ifEtoc@iv  \let\Etoc@localtop\Etoc@@five@@  \fi
+          \ifEtoc@v   \let\Etoc@localtop\Etoc@@six@@   \fi
           \def\Etoc@next{\global\Etoc@notactivefalse
                       \global\Etoc@vfalse
                       \global\Etoc@ivfalse
@@ -442,7 +427,7 @@
         \fi
     \fi\fi
 \Etoc@next}
-\def\etoc@startlocaltoc#1{\etoc@@startlocaltoc{#1}{\c@etoc@tocid}}
+\let\etoc@startlocaltoc\@gobble
 \long\def\Etoc@localtableofcontents#1{%
     \edef\Etoc@tmp{#1}%
     \ifnum\Etoc@tmp<\@ne
@@ -451,25 +436,19 @@
      \leavevmode --unknown etoc ref: run latex again--\par
     \let\Etoc@next\@gobble\else\let\Etoc@next\@firstofone\fi
     \Etoc@next
-    {\begingroup
-    \edef\etoc@startlocaltoc##1{%
+    {\edef\etoc@startlocaltoc##1{%
          \noexpand\etoc@@startlocaltoc{##1}{#1}}
     \Etoc@localtoctrue
     \let\Etoc@localtop\Etoc@@minustwo@@
     \global\Etoc@stoptocfalse
     \global\Etoc@notactivetrue
-    \Etoc@tableofcontents
-    \endgroup}%
-    \ifEtoc@mustclosegroup\expandafter\endgroup\fi}
+    \Etoc@tableofcontents}%
+    \endgroup\ifEtoc@mustclosegroup\expandafter\endgroup\fi}
 \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}}
@@ -485,13 +464,12 @@
        \def\Etoc@next{\expandafter\Etoc@ref\@gobble}%
     \else
        \def\Etoc@next{\Etoc@localtocfalse
-        \global\Etoc@notactivefalse
-        \begingroup\Etoc@tableofcontents
-        \ifEtoc@mustclosegroup\expandafter\endgroup\fi
-        \endgroup}%
+                      \global\Etoc@notactivefalse
+                      \Etoc@tableofcontents
+                      \endgroup
+                      \ifEtoc@mustclosegroup\expandafter\endgroup\fi}%
     \fi
  \fi\fi\fi\Etoc@next}
-\newcommand\etocaftertitlehook{}
 \def\table@fcontents{\par
     \refstepcounter{etoc@tocid}%
     \Etoc@tocwithidfalse
@@ -499,13 +477,20 @@
 \def\localtable@fcontents{\par
     \refstepcounter{etoc@tocid}%
     \addtocontents{toc}
-       {\string\etoc@startlocaltoc\string{\arabic{etoc@tocid}\string}}
+       {\string\etoc@startlocaltoc\string{\arabic{etoc@tocid}\string}}%
     \Etoc@tocwithidtrue
     \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
-\def\tableofcontents{\@ifstar
+\newcommand\etocaftertitlehook{}
+\def\tableofcontents{\ifEtoc@tocopenedforwrite\else\Etoc@starttoc\fi
+   \global\Etoc@tocopenedforwritetrue
+   \begingroup
+   \def\etoc@startlocaltoc##1{\etoc@@startlocaltoc{##1}{\c@etoc@tocid}}%
+   \@ifstar
    {\let\Etoc@aftertitlehook\relax\table@fcontents}
    {\let\Etoc@aftertitlehook\etocaftertitlehook\table@fcontents}}
-\def\localtableofcontents{\@ifstar
+\def\localtableofcontents{\ifEtoc@tocopenedforwrite\else\Etoc@starttoc\fi
+   \global\Etoc@tocopenedforwritetrue
+   \begingroup\@ifstar
    {\let\Etoc@aftertitlehook\relax\localtable@fcontents}
    {\let\Etoc@aftertitlehook\etocaftertitlehook\localtable@fcontents}}
 \newcommand\etocsettocstyle[2]{%
@@ -513,6 +498,8 @@
 {\ifnum\c@tocdepth>\Etoc@minf\let\Etoc@@next\@firstofone\else
 \let\Etoc@@next\@gobble\fi
 \Etoc@@next{#1\Etoc@aftertitlehook
+              \let\Etoc@savedcontentsline\contentsline
+              \let\contentsline\Etoc@etoccontentsline
               \Etoc@toctoc\let\Etoc@n@xt\relax
               \ifEtoc@tocwithid\else
               \ifEtoc@localtoc
@@ -542,8 +529,6 @@
 \newcommand\etocfontone{\normalfont \normalsize \bfseries}
 \newcommand\etocfonttwo{\normalfont \normalsize}
 \newcommand\etocfontthree{\normalfont \footnotesize}
-\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}
-- 
cgit v1.2.3

